From 546d007d1f8d0c4e741a42b74d9cfcde0a7cbe9e Mon Sep 17 00:00:00 2001 From: lijuncheng Date: Mon, 25 Mar 2024 10:15:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 110 +- .hbuilderx/debug.config.json | 4 + .hbuilderx/launch.json | 24 + Dockerfile | 7 + index.html | 22 + nginx.conf | 53 + package-lock.json | 12051 +++++++++++++++ package.json | 46 + password.txt | 2 + shims-uni.d.ts | 10 + src/App.vue | 62 + src/api/httpRequest3.js | 67 + src/api/request2.js | 3834 +++++ src/common/appUpdate.js | 116 + src/common/array.js | 320 + src/common/balance.js | 477 + src/common/basic.js | 1014 ++ src/common/calc.js | 17 + src/common/classify.data.js | 42 + src/common/detail.js | 147 + src/common/directory.js | 572 + src/common/label.js | 197 + src/common/record.js | 109 + src/common/style/PDA_style-delete.css | 221 + src/common/style/new_style.css | 2772 ++++ src/common/style/pdabasic.css | 762 + src/common/style/uni.css | 3405 +++++ src/common/utils/auth.js | 21 + src/common/utils/common.js | 54 + src/common/utils/constant.js | 9 + src/common/utils/errorCode.js | 6 + src/common/utils/permission.js | 51 + src/common/utils/ruoyi.js | 47 + src/common/utils/storage.js | 37 + src/components/active-form/active-form.scss | 36 + src/components/active-form/active-form.vue | 787 + src/components/active-form/active-form222.vue | 760 + src/components/active-form/detail.md | 452 + src/components/active-form/mixins.js | 15 + src/components/active-formv1/detail.md | 387 + src/components/active-formv1/index.vue | 550 + src/components/active-formv1/index1.vue | 704 + src/components/active-formv1/mixins.js | 15 + src/components/amap-wx/js/util.js | 181 + src/components/amap-wx/lib/amap-wx.js | 1 + .../custom-nomore/custom-nomore.vue | 39 + .../custom-refresher/custom-refresher.vue | 58 + src/components/marked/index.js | 1 + src/components/marked/lib/marked.js | 1573 ++ .../mpvue-citypicker/city-data/area.js | 12542 ++++++++++++++++ .../mpvue-citypicker/city-data/city.js | 1503 ++ .../mpvue-citypicker/city-data/province.js | 139 + .../mpvue-citypicker/mpvueCityPicker.vue | 230 + src/components/mpvue-echarts/src/echarts.vue | 123 + src/components/mpvue-echarts/src/wx-canvas.js | 73 + src/components/mpvue-picker/mpvuePicker.vue | 484 + .../mpvueGestureLock/gestureLock.js | 175 + src/components/mpvueGestureLock/index.vue | 138 + src/components/my-paging/my-paging.vue | 157 + src/components/page-foot/page-foot.vue | 38 + src/components/page-head/page-head.vue | 16 + src/components/pullDown/pullDown.vue | 663 + src/components/show-modal/show-modal.vue | 456 + src/components/tab-nvue/mediaList.vue | 175 + src/components/u-charts/u-charts.js | 5046 +++++++ src/libs/versionUpdate.js | 24 + src/main.js | 76 + src/manifest.json | 85 + src/mycomponents/balance/balance.vue | 147 + .../balance/balanceDetailPopup.vue | 88 + src/mycomponents/balance/balanceLabel.vue | 57 + src/mycomponents/balance/balanceMove.vue | 98 + src/mycomponents/balance/balanceSelect.vue | 54 + src/mycomponents/balance/batch.vue | 24 + src/mycomponents/balance/bussinessType.vue | 37 + src/mycomponents/balance/handleBalance.vue | 80 + src/mycomponents/balance/location.vue | 31 + src/mycomponents/balance/moveStatus.vue | 62 + src/mycomponents/balance/pack.vue | 34 + src/mycomponents/balance/productionLabel.vue | 59 + src/mycomponents/balance/purchaseLabel.vue | 58 + src/mycomponents/balance/recommendBalance.vue | 84 + src/mycomponents/balance/toLocation.vue | 31 + src/mycomponents/batch/batch.vue | 25 + src/mycomponents/button/requestButton.vue | 57 + src/mycomponents/common/comBlankView.vue | 31 + src/mycomponents/common/comEmptyView.vue | 41 + src/mycomponents/common/comListHint.vue | 162 + src/mycomponents/common/comListItem.vue | 108 + src/mycomponents/common/comMessage.vue | 479 + src/mycomponents/common/comPopup.vue | 39 + src/mycomponents/common/comUploadCamera.vue | 120 + src/mycomponents/container/container.vue | 24 + src/mycomponents/container/containerInfo.vue | 54 + .../container/containerStatus.vue | 47 + .../container/targetContainer.vue | 68 + src/mycomponents/detail/comDetailCard.vue | 162 + src/mycomponents/detail/comJobDetailCard.vue | 161 + .../detail/comRequestDetailCard.vue | 151 + src/mycomponents/detail/detailBalanceInfo.vue | 67 + src/mycomponents/detail/detailCommonInfo.vue | 65 + src/mycomponents/detail/detailHandleInfo.vue | 63 + src/mycomponents/detail/detailItemInfo.vue | 46 + src/mycomponents/detail/detailList.vue | 146 + src/mycomponents/detail/detailPackageInfo.vue | 65 + .../detail/detailRecommendInfo.vue | 71 + src/mycomponents/detail/jobDetailPopup.vue | 79 + .../detail/recordDetailBasicInfo.vue | 66 + .../detail/recordDetailCommonInfo.vue | 60 + src/mycomponents/detail/recordDetailPopup.vue | 71 + .../detail/requestDetailBasicInfo.vue | 43 + .../detail/requestDetailCommonInfo.vue | 65 + src/mycomponents/form/customerFrom.vue | 214 + src/mycomponents/form/selectPopup.vue | 59 + src/mycomponents/item/item.vue | 48 + src/mycomponents/item/itemCompareQty.vue | 63 + src/mycomponents/item/itemDetailInfo.vue | 74 + src/mycomponents/item/itemInfo.vue | 58 + src/mycomponents/item/itemInfoPopup.vue | 159 + src/mycomponents/item/itemQty.vue | 67 + src/mycomponents/item/itemRecommendQty.vue | 65 + src/mycomponents/item/itemSelect.vue | 62 + src/mycomponents/item/itemStatus.vue | 47 + src/mycomponents/job/jobBottom.vue | 49 + src/mycomponents/job/jobCard.vue | 93 + src/mycomponents/job/jobComMainCard.vue | 41 + src/mycomponents/job/jobComMainCardAsn.vue | 41 + src/mycomponents/job/jobCommonInfo.vue | 62 + src/mycomponents/job/jobDetailPopup.vue | 79 + src/mycomponents/job/jobFilter.vue | 155 + src/mycomponents/job/jobInfoPopup.vue | 75 + src/mycomponents/job/jobNumber.vue | 36 + src/mycomponents/job/jobPersonInfo.vue | 64 + src/mycomponents/job/jobProperty.vue | 36 + src/mycomponents/job/jobRequestInfo.vue | 96 + src/mycomponents/job/jobSettingInfo.vue | 77 + src/mycomponents/job/jobStatus.vue | 45 + src/mycomponents/job/jobTop.vue | 41 + src/mycomponents/job/jobTopAsn.vue | 42 + src/mycomponents/job/jobcomDetailCard.vue | 146 + src/mycomponents/label/label.vue | 57 + src/mycomponents/location/location.vue | 55 + src/mycomponents/location/locationCompare.vue | 84 + src/mycomponents/location/locationDetail.vue | 47 + src/mycomponents/location/locationDrop.vue | 58 + src/mycomponents/location/locationInfo.vue | 45 + src/mycomponents/location/locationStatus.vue | 46 + .../location/requiredLocation.vue | 79 + src/mycomponents/package/packageBalance.vue | 84 + src/mycomponents/package/packageCard.vue | 157 + .../package/packageDetailPopup.vue | 204 + src/mycomponents/package/packageHandle.vue | 85 + src/mycomponents/package/packageList.vue | 215 + .../package/packageRecordCard.vue | 168 + .../package/packageRecordList.vue | 195 + src/mycomponents/package/packageTarget.vue | 57 + src/mycomponents/partCode/partCode.vue | 158 + src/mycomponents/partCode/partCodeSelect.vue | 62 + src/mycomponents/popup/selectList.vue | 116 + .../production/productionInfo.vue | 39 + src/mycomponents/purchase/purchaseInfo.vue | 37 + src/mycomponents/qty/balanceQty.vue | 75 + src/mycomponents/qty/balanceQtyEdit.vue | 215 + src/mycomponents/qty/compareQty.vue | 109 + src/mycomponents/qty/countQtyEdit.vue | 269 + src/mycomponents/qty/inspectQtyEdit.vue | 198 + src/mycomponents/qty/packQty.vue | 36 + src/mycomponents/qty/packUnit.vue | 47 + src/mycomponents/qty/qty.vue | 64 + src/mycomponents/qty/recommendQty.vue | 76 + src/mycomponents/qty/recommendQtyEdit.vue | 236 + src/mycomponents/qty/stdUom.vue | 40 + src/mycomponents/qty/uom.vue | 40 + src/mycomponents/recommend/recommend.vue | 158 + .../recommend/recommendBalance.vue | 69 + src/mycomponents/recommend/recommendCount.vue | 146 + src/mycomponents/record/record.vue | 96 + src/mycomponents/record/recordBottom.vue | 49 + .../record/recordComDetailCard.vue | 179 + src/mycomponents/record/recordCommonInfo.vue | 72 + src/mycomponents/record/recordDetailCard.vue | 173 + .../record/recordDetailCommonInfo.vue | 66 + src/mycomponents/record/recordFilter.vue | 116 + src/mycomponents/record/recordItemInfo.vue | 91 + .../record/recordListCommonInfo.vue | 80 + .../record/recordListDetailPoup.vue | 69 + src/mycomponents/record/recordMainInfo.vue | 198 + src/mycomponents/record/recordNumber.vue | 36 + src/mycomponents/record/recordPersonInfo.vue | 57 + src/mycomponents/record/recordRequestInfo.vue | 53 + src/mycomponents/record/recordStatus.vue | 47 + src/mycomponents/record/recordTop.vue | 41 + src/mycomponents/request/requestBottom.vue | 49 + .../request/requestComMainCard.vue | 41 + .../request/requestCommonInfo.vue | 70 + src/mycomponents/request/requestFilter.vue | 128 + src/mycomponents/request/requestItemInfo.vue | 91 + .../request/requestListCommonInfo.vue | 84 + src/mycomponents/request/requestMainInfo.vue | 168 + src/mycomponents/request/requestNumber.vue | 36 + .../request/requestPersonInfo.vue | 57 + .../request/requestRequestInfo.vue | 53 + src/mycomponents/request/requestStatus.vue | 45 + src/mycomponents/request/requestTop.vue | 41 + src/mycomponents/scan/winComScan.vue | 289 + src/mycomponents/scan/winComScan222.vue | 281 + src/mycomponents/scan/winComScanNormal.vue | 231 + src/mycomponents/scan/winScanAsnNumber.vue | 94 + src/mycomponents/scan/winScanButton.vue | 53 + src/mycomponents/scan/winScanContainer.vue | 119 + src/mycomponents/scan/winScanItem.vue | 173 + src/mycomponents/scan/winScanJobNumber.vue | 100 + src/mycomponents/scan/winScanLocation.vue | 164 + src/mycomponents/scan/winScanNormal.vue | 109 + src/mycomponents/scan/winScanPack.vue | 113 + src/mycomponents/scan/winScanPackAndCont.vue | 135 + .../scan/winScanPackAndLocation.vue | 450 + .../scan/winScanPackAndLocationNoBalance.vue | 454 + .../scan/winScanPackAndPosition.vue | 225 + src/mycomponents/status/balanceStatus.vue | 71 + src/mycomponents/status/status.vue | 52 + src/mycomponents/status/statusEdit.vue | 149 + .../transfer/comTransferReceipt.vue | 62 + src/mycomponents/wincom/basicCom/winHint.vue | 70 + src/mycomponents/workStation/workStation.vue | 77 + src/package.json | 18 + src/pages.json | 123 + src/pages/back/check.vue | 239 + src/pages/back/check1.vue | 164 + src/pages/back/check_foam.vue | 180 + src/pages/foam/check.vue | 157 + src/pages/foam/input.vue | 8 + src/pages/index/index.vue | 442 + src/pages/inputAndSelect.vue | 154 + src/pages/login/index.vue | 368 + src/pages/plastics/check.vue | 157 + src/pages/plastics/input.vue | 8 + src/pages/setter/index.vue | 186 + src/pages/setter/passwordpage.vue | 108 + src/pages/setter/setterDetail.vue | 58 + src/router/index.js | 117 + src/router/modules/home.js | 29 + src/router/modules/index.js | 11 + src/router/my_router.js | 46 + src/router/router.js | 20 + src/shime-uni.d.ts | 6 + src/static/ali_icon/iconfont.css | 25 + src/static/ali_icon/iconfont.ttf | Bin 0 -> 2604 bytes src/static/avatar.png | Bin 0 -> 5403 bytes src/static/bar/home.png | Bin 0 -> 4964 bytes src/static/bar/home_p.png | Bin 0 -> 5297 bytes src/static/bar/message.png | Bin 0 -> 6099 bytes src/static/bar/message_p.png | Bin 0 -> 6213 bytes src/static/bar/setting.png | Bin 0 -> 11321 bytes src/static/bar/setting_p.png | Bin 0 -> 11639 bytes src/static/bar/sy.svg | 4 + src/static/bar/sya.svg | 4 + src/static/bar/sz.svg | 4 + src/static/bar/sza.svg | 4 + src/static/bar/xx.png | Bin 0 -> 1861 bytes src/static/bar/xx.svg | 6 + src/static/bar/xxa.svg | 6 + src/static/config.js | 9 + src/static/config.json | 143 + src/static/customicons.ttf | Bin 0 -> 2416 bytes src/static/font/iconfont.css | 90 + src/static/font/iconfont.ttf | Bin 0 -> 6724 bytes src/static/icon_personal_name.png | Bin 0 -> 13394 bytes src/static/icon_personal_password.png | Bin 0 -> 12185 bytes src/static/icon_personal_setting.png | Bin 0 -> 14302 bytes src/static/icons/arrow_down.svg | 1 + src/static/icons/black_count.svg | 1 + src/static/icons/checkmark-circle.svg | 1 + src/static/icons/close-circle.svg | 1 + src/static/icons/close-circle2.svg | 1 + src/static/icons/close.svg | 1 + src/static/icons/data-checkbox.png | Bin 0 -> 1888 bytes src/static/icons/error-circle.svg | 1 + src/static/icons/icon_customer.svg | 1 + src/static/icons/icon_date.svg | 1 + src/static/icons/icon_eye-fill.svg | 1 + src/static/icons/icon_eye-off-outline.svg | 1 + src/static/icons/icon_filter.svg | 1 + src/static/icons/iconfont.ttf | Bin 0 -> 1616 bytes src/static/icons/icons_camera.svg | 1 + src/static/icons/icons_close-circle.svg | 1 + src/static/icons/icons_close.svg | 1 + src/static/icons/icons_edit.svg | 1 + src/static/icons/icons_scan_close.svg | 1 + src/static/icons/light_count.svg | 1 + src/static/icons/plus.svg | 1 + src/static/icons/question-circle.svg | 1 + src/static/icons/search.svg | 1 + src/static/icons/warning.svg | 1 + src/static/icons_ui/default_blank.png | Bin 0 -> 34952 bytes src/static/icons_ui/default_data.png | Bin 0 -> 15053 bytes src/static/icons_ui/default_notpassed.png | Bin 0 -> 12915 bytes src/static/icons_ui/icon_add.svg | 4 + src/static/icons_ui/icon_apply_num.svg | 13 + src/static/icons_ui/icon_asn.svg | 12 + src/static/icons_ui/icon_avn.svg | 12 + src/static/icons_ui/icon_buy_num.svg | 13 + src/static/icons_ui/icon_camera_black.svg | 8 + src/static/icons_ui/icon_camera_white.svg | 8 + src/static/icons_ui/icon_close.svg | 1 + src/static/icons_ui/icon_customer.svg | 4 + src/static/icons_ui/icon_date.svg | 4 + src/static/icons_ui/icon_down.svg | 1 + src/static/icons_ui/icon_erp.svg | 11 + src/static/icons_ui/icon_form.svg | 5 + src/static/icons_ui/icon_kw.svg | 10 + src/static/icons_ui/icon_kw_blue.svg | 5 + src/static/icons_ui/icon_kw_use.svg | 10 + src/static/icons_ui/icon_login_password.svg | 5 + src/static/icons_ui/icon_login_user.svg | 4 + src/static/icons_ui/icon_notpass.svg | 5 + src/static/icons_ui/icon_num.svg | 4 + src/static/icons_ui/icon_passed.svg | 5 + src/static/icons_ui/icon_pc.svg | 10 + src/static/icons_ui/icon_ponumber.svg | 5 + src/static/icons_ui/icon_prod_line.svg | 12 + src/static/icons_ui/icon_qiju_end.svg | 5 + src/static/icons_ui/icon_qiju_num.svg | 4 + src/static/icons_ui/icon_qiju_start.svg | 5 + src/static/icons_ui/icon_return_num.svg | 12 + src/static/icons_ui/icon_scan_white.svg | 4 + src/static/icons_ui/icon_send_request.svg | 12 + src/static/icons_ui/icon_senditem.svg | 4 + src/static/icons_ui/icon_supplier.svg | 11 + src/static/icons_ui/icon_take_photo.svg | 8 + src/static/icons_ui/icon_tasknum.svg | 4 + src/static/icons_ui/icon_tenant.svg | 1 + src/static/icons_ui/icon_time.svg | 5 + src/static/icons_ui/icon_tm.svg | 5 + src/static/icons_ui/icon_xm.svg | 4 + src/static/icons_ui/icon_xm_blue.svg | 4 + src/static/icons_ui/icons_common_recceipt.svg | 8 + src/static/icons_ui/icons_common_sjadd.svg | 9 + src/static/icons_ui/label_scx.svg | 4 + src/static/icons_ui/login_bg.png | Bin 0 -> 102876 bytes src/static/icons_ui/popup_bot_bg.png | Bin 0 -> 115163 bytes src/static/images/message.svg | 4 + src/static/images/profile.jpg | Bin 0 -> 81131 bytes src/static/login.png | Bin 0 -> 55166 bytes src/static/logo.png | Bin 0 -> 4023 bytes src/static/menus/bind_pallet.svg | 1 + src/static/menus/count.svg | 1 + src/static/menus/customer_return.svg | 1 + src/static/menus/deliver.svg | 1 + src/static/menus/hold_to_ok.svg | 1 + src/static/menus/hold_to_scrap.svg | 1 + src/static/menus/inspect.svg | 1 + src/static/menus/inventory_move.svg | 1 + src/static/menus/issue.svg | 1 + src/static/menus/menu_search_lj.svg | 6 + src/static/menus/merge_package.svg | 1 + src/static/menus/ok_to_hold.svg | 1 + src/static/menus/ok_to_scrap.svg | 1 + src/static/menus/over_package.svg | 1 + src/static/menus/product_dismantle.svg | 1 + src/static/menus/product_putaway.svg | 1 + src/static/menus/product_receipt.svg | 5 + src/static/menus/production_receipt.svg | 5 + src/static/menus/production_return.svg | 1 + src/static/menus/purchase_receipt.svg | 1 + src/static/menus/purchase_return.svg | 1 + src/static/menus/putaway.svg | 1 + src/static/menus/query_container.svg | 1 + src/static/menus/query_inspect.svg | 1 + src/static/menus/query_issue_request.svg | 1 + src/static/menus/query_item.svg | 1 + src/static/menus/query_location.svg | 1 + src/static/menus/query_supplier_deliver.svg | 1 + src/static/menus/repleinsh.svg | 1 + src/static/menus/return_to_hold.svg | 1 + src/static/menus/return_to_store.svg | 1 + src/static/menus/scrap.svg | 1 + src/static/menus/scrap_to_hold.svg | 1 + src/static/menus/split_package.svg | 1 + src/static/menus/transfer_deliver.svg | 1 + src/static/menus/transfer_receipt.svg | 1 + src/static/menus/unbind_pallet.svg | 1 + src/static/menus/unplanned_issue.svg | 1 + src/static/menus/unplanned_receipt.svg | 1 + src/static/no_more.png | Bin 0 -> 79568 bytes src/static/refresher_loading.gif | Bin 0 -> 99597 bytes src/static/scss/colorui.css | 3912 +++++ src/static/scss/global.scss | 90 + src/static/scss/index.scss | 4 + src/static/search.svg | 1 + src/static/uni.ttf | Bin 0 -> 26164 bytes src/static/version.json | 3 + src/static/video/error.wav | Bin 0 -> 280044 bytes src/store/getters.js | 10 + src/store/index.js | 10 + src/store/modules/user.js | 130 + src/uni.scss | 78 + src/uni_modules/uni-badge/changelog.md | 29 + .../components/uni-badge/uni-badge.vue | 268 + src/uni_modules/uni-badge/package.json | 88 + src/uni_modules/uni-badge/readme.md | 10 + src/uni_modules/uni-breadcrumb/changelog.md | 6 + .../uni-breadcrumb-item.vue | 121 + .../uni-breadcrumb/uni-breadcrumb.vue | 41 + src/uni_modules/uni-breadcrumb/package.json | 85 + src/uni_modules/uni-breadcrumb/readme.md | 66 + src/uni_modules/uni-calendar/changelog.md | 16 + .../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 | 181 + .../components/uni-calendar/uni-calendar.vue | 554 + .../components/uni-calendar/util.js | 354 + src/uni_modules/uni-calendar/package.json | 88 + src/uni_modules/uni-calendar/readme.md | 103 + src/uni_modules/uni-card/changelog.md | 26 + .../uni-card/components/uni-card/uni-card.vue | 270 + src/uni_modules/uni-card/package.json | 90 + src/uni_modules/uni-card/readme.md | 12 + src/uni_modules/uni-collapse/changelog.md | 36 + .../uni-collapse-item/uni-collapse-item.vue | 404 + .../components/uni-collapse/uni-collapse.vue | 147 + src/uni_modules/uni-collapse/package.json | 89 + src/uni_modules/uni-collapse/readme.md | 12 + src/uni_modules/uni-combox/changelog.md | 15 + .../components/uni-combox/uni-combox.vue | 297 + src/uni_modules/uni-combox/package.json | 90 + src/uni_modules/uni-combox/readme.md | 11 + src/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 | 271 + src/uni_modules/uni-countdown/package.json | 86 + src/uni_modules/uni-countdown/readme.md | 10 + .../uni-data-checkbox/changelog.md | 43 + .../uni-data-checkbox/uni-data-checkbox.vue | 817 + .../uni-data-checkbox/package.json | 87 + src/uni_modules/uni-data-checkbox/readme.md | 18 + src/uni_modules/uni-data-picker/changelog.md | 64 + .../components/uni-data-picker/keypress.js | 45 + .../uni-data-picker/uni-data-picker.vue | 554 + .../uni-data-pickerview/uni-data-picker.js | 563 + .../uni-data-pickerview.vue | 333 + src/uni_modules/uni-data-picker/package.json | 93 + src/uni_modules/uni-data-picker/readme.md | 22 + src/uni_modules/uni-data-select/changelog.md | 16 + .../uni-data-select/uni-data-select.vue | 426 + src/uni_modules/uni-data-select/package.json | 88 + src/uni_modules/uni-data-select/readme.md | 8 + src/uni_modules/uni-dateformat/changelog.md | 10 + .../components/uni-dateformat/date-format.js | 200 + .../uni-dateformat/uni-dateformat.vue | 88 + src/uni_modules/uni-dateformat/package.json | 88 + src/uni_modules/uni-dateformat/readme.md | 11 + .../uni-datetime-picker/changelog.md | 93 + .../uni-datetime-picker/calendar-item.vue | 185 + .../uni-datetime-picker/calendar.js | 546 + .../uni-datetime-picker/calendar.vue | 907 ++ .../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/keypress.js | 45 + .../uni-datetime-picker/time-picker.vue | 927 ++ .../uni-datetime-picker.vue | 1012 ++ .../components/uni-datetime-picker/util.js | 410 + .../uni-datetime-picker/package.json | 90 + src/uni_modules/uni-datetime-picker/readme.md | 21 + src/uni_modules/uni-drawer/changelog.md | 13 + .../components/uni-drawer/keypress.js | 45 + .../components/uni-drawer/uni-drawer.vue | 183 + src/uni_modules/uni-drawer/package.json | 87 + src/uni_modules/uni-drawer/readme.md | 10 + src/uni_modules/uni-easyinput/changelog.md | 47 + .../components/uni-easyinput/common.js | 56 + .../uni-easyinput/uni-easyinput.vue | 593 + src/uni_modules/uni-easyinput/package.json | 90 + src/uni_modules/uni-easyinput/readme.md | 11 + src/uni_modules/uni-fab/changelog.md | 17 + .../uni-fab/components/uni-fab/uni-fab.vue | 475 + .../components/uni-fab/uni-fab.vue.bak | 379 + src/uni_modules/uni-fab/package.json | 87 + src/uni_modules/uni-fab/readme.md | 9 + src/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 + src/uni_modules/uni-fav/package.json | 89 + src/uni_modules/uni-fav/readme.md | 10 + src/uni_modules/uni-file-picker/changelog.md | 63 + .../uni-file-picker/choose-and-upload-file.js | 224 + .../uni-file-picker/uni-file-picker.vue | 656 + .../uni-file-picker/upload-file.vue | 325 + .../uni-file-picker/upload-image.vue | 292 + .../components/uni-file-picker/utils.js | 109 + src/uni_modules/uni-file-picker/package.json | 86 + src/uni_modules/uni-file-picker/readme.md | 11 + src/uni_modules/uni-forms/changelog.md | 86 + .../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 + src/uni_modules/uni-forms/package.json | 91 + src/uni_modules/uni-forms/readme.md | 23 + src/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 + src/uni_modules/uni-goods-nav/package.json | 88 + src/uni_modules/uni-goods-nav/readme.md | 10 + src/uni_modules/uni-grid/changelog.md | 13 + .../uni-grid-item/uni-grid-item.vue | 127 + .../uni-grid/components/uni-grid/uni-grid.vue | 142 + src/uni_modules/uni-grid/package.json | 86 + src/uni_modules/uni-grid/readme.md | 11 + src/uni_modules/uni-group/changelog.md | 16 + .../components/uni-group/uni-group.vue | 134 + src/uni_modules/uni-group/package.json | 87 + src/uni_modules/uni-group/readme.md | 9 + src/uni_modules/uni-icons/changelog.md | 22 + .../uni-icons/components/uni-icons/icons.js | 1169 ++ .../components/uni-icons/uni-icons.vue | 96 + .../uni-icons/components/uni-icons/uni.ttf | Bin 0 -> 26164 bytes .../components/uni-icons/uniicons.css | 663 + .../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes src/uni_modules/uni-icons/package.json | 86 + src/uni_modules/uni-icons/readme.md | 8 + src/uni_modules/uni-indexed-list/changelog.md | 17 + .../uni-indexed-list-item.vue | 144 + .../uni-indexed-list/uni-indexed-list.vue | 367 + src/uni_modules/uni-indexed-list/package.json | 89 + src/uni_modules/uni-indexed-list/readme.md | 11 + src/uni_modules/uni-link/changelog.md | 17 + .../uni-link/components/uni-link/uni-link.vue | 128 + src/uni_modules/uni-link/package.json | 87 + src/uni_modules/uni-link/readme.md | 11 + src/uni_modules/uni-list/changelog.md | 20 + .../components/uni-list-ad/uni-list-ad.vue | 107 + .../uni-list-chat/uni-list-chat.scss | 58 + .../uni-list-chat/uni-list-chat.vue | 538 + .../uni-list-item/uni-list-item.vue | 454 + .../components/uni-list/uni-list - 副本.vue | 106 + .../uni-list/components/uni-list/uni-list.vue | 108 + .../components/uni-list/uni-refresh.vue | 65 + .../components/uni-list/uni-refresh.wxs | 87 + src/uni_modules/uni-list/package.json | 91 + src/uni_modules/uni-list/readme.md | 346 + src/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 + src/uni_modules/uni-load-more/package.json | 86 + src/uni_modules/uni-load-more/readme.md | 14 + src/uni_modules/uni-nav-bar/changelog.md | 41 + .../components/uni-nav-bar/uni-nav-bar.vue | 348 + .../components/uni-nav-bar/uni-status-bar.vue | 27 + src/uni_modules/uni-nav-bar/package.json | 89 + src/uni_modules/uni-nav-bar/readme.md | 15 + src/uni_modules/uni-notice-bar/changelog.md | 16 + .../uni-notice-bar/uni-notice-bar.vue | 395 + src/uni_modules/uni-notice-bar/package.json | 90 + src/uni_modules/uni-notice-bar/readme.md | 13 + src/uni_modules/uni-number-box/changelog.md | 25 + .../uni-number-box/uni-number-box.vue | 220 + src/uni_modules/uni-number-box/package.json | 85 + src/uni_modules/uni-number-box/readme.md | 13 + src/uni_modules/uni-pagination/changelog.md | 22 + .../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 | 463 + src/uni_modules/uni-pagination/package.json | 86 + src/uni_modules/uni-pagination/readme.md | 11 + src/uni_modules/uni-popup/changelog.md | 60 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 271 + .../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 | 474 + src/uni_modules/uni-popup/package.json | 90 + src/uni_modules/uni-popup/readme.md | 17 + src/uni_modules/uni-rate/changelog.md | 25 + .../uni-rate/components/uni-rate/uni-rate.vue | 361 + src/uni_modules/uni-rate/package.json | 88 + src/uni_modules/uni-rate/readme.md | 12 + src/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 + src/uni_modules/uni-row/package.json | 87 + src/uni_modules/uni-row/readme.md | 10 + src/uni_modules/uni-scss/changelog.md | 8 + src/uni_modules/uni-scss/index.scss | 1 + src/uni_modules/uni-scss/package.json | 82 + src/uni_modules/uni-scss/readme.md | 4 + src/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 + src/uni_modules/uni-scss/theme.scss | 31 + src/uni_modules/uni-scss/variables.scss | 62 + src/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 + src/uni_modules/uni-search-bar/package.json | 89 + src/uni_modules/uni-search-bar/readme.md | 14 + src/uni_modules/uni-section/changelog.md | 2 + .../components/uni-section/uni-section.vue | 167 + src/uni_modules/uni-section/package.json | 87 + src/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-segmented-control/readme.md | 13 + src/uni_modules/uni-steps/changelog.md | 16 + .../components/uni-steps/uni-steps.vue | 269 + src/uni_modules/uni-steps/package.json | 89 + src/uni_modules/uni-steps/readme.md | 13 + src/uni_modules/uni-swipe-action/changelog.md | 41 + .../uni-swipe-action-item/bindingx.js | 302 + .../uni-swipe-action-item/index.wxs | 323 + .../components/uni-swipe-action-item/isPC.js | 12 + .../uni-swipe-action-item/mpalipay.js | 193 + .../uni-swipe-action-item/mpother.js | 259 + .../components/uni-swipe-action-item/mpwxs.js | 83 + .../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 + src/uni_modules/uni-swipe-action/package.json | 87 + src/uni_modules/uni-swipe-action/readme.md | 11 + src/uni_modules/uni-swiper-dot/changelog.md | 12 + .../uni-swiper-dot/uni-swiper-dot.vue | 218 + src/uni_modules/uni-swiper-dot/package.json | 87 + src/uni_modules/uni-swiper-dot/readme.md | 11 + src/uni_modules/uni-table/changelog.md | 23 + .../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 | 503 + .../uni-table/components/uni-th/uni-th.vue | 278 + .../components/uni-thead/uni-thead.vue | 129 + .../components/uni-tr/table-checkbox.vue | 179 + .../uni-table/components/uni-tr/uni-tr.vue | 171 + src/uni_modules/uni-table/i18n/en.json | 9 + src/uni_modules/uni-table/i18n/es.json | 9 + src/uni_modules/uni-table/i18n/fr.json | 9 + src/uni_modules/uni-table/i18n/index.js | 12 + src/uni_modules/uni-table/i18n/zh-Hans.json | 9 + src/uni_modules/uni-table/i18n/zh-Hant.json | 9 + src/uni_modules/uni-table/package.json | 86 + src/uni_modules/uni-table/readme.md | 13 + src/uni_modules/uni-tag/changelog.md | 21 + .../uni-tag/components/uni-tag/uni-tag.vue | 252 + src/uni_modules/uni-tag/package.json | 87 + src/uni_modules/uni-tag/readme.md | 13 + src/uni_modules/uni-title/changelog.md | 10 + .../components/uni-title/uni-title.vue | 171 + src/uni_modules/uni-title/package.json | 88 + src/uni_modules/uni-title/readme.md | 14 + src/uni_modules/uni-tooltip/changelog.md | 10 + .../components/uni-tooltip/uni-tooltip.vue | 68 + src/uni_modules/uni-tooltip/package.json | 83 + src/uni_modules/uni-tooltip/readme.md | 8 + src/uni_modules/uni-transition/changelog.md | 20 + .../uni-transition/createAnimation.js | 128 + .../uni-transition/uni-transition.vue | 277 + src/uni_modules/uni-transition/package.json | 87 + src/uni_modules/uni-transition/readme.md | 11 + src/uni_modules/vk-uview-ui/changelog.md | 135 + .../u-action-sheet/u-action-sheet.vue | 246 + .../components/u-alert-tips/u-alert-tips.vue | 257 + .../u-avatar-cropper/u-avatar-cropper.vue | 290 + .../components/u-avatar-cropper/weCropper.js | 1256 ++ .../components/u-avatar/u-avatar.vue | 263 + .../components/u-back-top/u-back-top.vue | 153 + .../components/u-badge/u-badge.vue | 216 + .../components/u-button/u-button.vue | 602 + .../components/u-calendar/u-calendar.vue | 666 + .../u-car-keyboard/u-car-keyboard.vue | 267 + .../vk-uview-ui/components/u-card/u-card.vue | 300 + .../components/u-cell-group/u-cell-group.vue | 70 + .../components/u-cell-item/u-cell-item.vue | 317 + .../u-checkbox-group/u-checkbox-group.vue | 178 + .../components/u-checkbox/u-checkbox.vue | 322 + .../u-circle-progress/u-circle-progress.vue | 220 + .../vk-uview-ui/components/u-col/u-col.vue | 157 + .../u-collapse-item/u-collapse-item.vue | 206 + .../components/u-collapse/u-collapse.vue | 100 + .../u-column-notice/u-column-notice.vue | 238 + .../components/u-count-down/u-count-down.vue | 175 + .../components/u-count-down/utils.js | 62 + .../components/u-count-to/u-count-to.vue | 266 + .../components/u-divider/u-divider.vue | 153 + .../u-dropdown-item/u-dropdown-item.vue | 148 + .../components/u-dropdown/u-dropdown.vue | 299 + .../components/u-empty/u-empty.vue | 193 + .../components/u-field/u-field.vue | 402 + .../components/u-form-item/u-form-item.vue | 509 + .../vk-uview-ui/components/u-form/u-form.vue | 148 + .../u-full-screen/u-full-screen.vue | 52 + .../vk-uview-ui/components/u-gap/u-gap.vue | 54 + .../components/u-grid-item/u-grid-item.vue | 127 + .../vk-uview-ui/components/u-grid/u-grid.vue | 109 + .../vk-uview-ui/components/u-icon/u-icon.vue | 369 + .../components/u-image/u-image.vue | 269 + .../u-index-anchor/u-index-anchor.vue | 89 + .../components/u-index-list/u-index-list.vue | 315 + .../components/u-input/u-input.vue | 460 + .../components/u-keyboard/u-keyboard.vue | 285 + .../components/u-lazy-load/u-lazy-load.vue | 254 + .../u-line-progress/u-line-progress.vue | 147 + .../vk-uview-ui/components/u-line/u-line.vue | 84 + .../vk-uview-ui/components/u-link/u-link.vue | 89 + .../u-loading-page/u-loading-page.vue | 25 + .../components/u-loading/u-loading.vue | 106 + .../components/u-loadmore/u-loadmore.vue | 204 + .../vk-uview-ui/components/u-mask/u-mask.vue | 137 + .../u-message-input/u-message-input.vue | 327 + .../components/u-modal/u-modal.vue | 339 + .../components/u-navbar/u-navbar.vue | 315 + .../components/u-no-network/u-no-network.vue | 233 + .../components/u-notice-bar/u-notice-bar.vue | 273 + .../components/u-number-box/u-number-box.vue | 476 + .../u-number-keyboard/u-number-keyboard.vue | 170 + .../components/u-parse/libs/CssHandler.js | 100 + .../components/u-parse/libs/MpHtmlParser.js | 581 + .../components/u-parse/libs/config.js | 80 + .../components/u-parse/libs/trees.vue | 537 + .../components/u-parse/u-parse.vue | 676 + .../components/u-picker/u-picker.vue | 895 ++ .../components/u-popup/u-popup.vue | 480 + .../u-radio-group/u-radio-group.vue | 176 + .../components/u-radio/u-radio.vue | 276 + .../vk-uview-ui/components/u-rate/u-rate.vue | 293 + .../components/u-read-more/u-read-more.vue | 180 + .../components/u-row-notice/u-row-notice.vue | 270 + .../vk-uview-ui/components/u-row/u-row.vue | 85 + .../components/u-search/u-search.vue | 357 + .../components/u-section/u-section.vue | 155 + .../components/u-select/u-select.vue | 437 + .../components/u-skeleton/u-skeleton.vue | 199 + .../components/u-slider/u-slider.vue | 290 + .../components/u-steps/u-steps.vue | 200 + .../components/u-sticky/u-sticky.vue | 166 + .../components/u-subsection/u-subsection.vue | 406 + .../u-swipe-action/u-swipe-action.vue | 256 + .../components/u-swiper/u-swiper.vue | 341 + .../components/u-switch/u-switch.vue | 191 + .../components/u-tabbar/u-tabbar.vue | 373 + .../components/u-table/u-table.vue | 85 + .../u-tabs-swiper/u-tabs-swiper.vue | 489 + .../vk-uview-ui/components/u-tabs/u-tabs.vue | 399 + .../vk-uview-ui/components/u-tag/u-tag.vue | 295 + .../vk-uview-ui/components/u-td/u-td.vue | 66 + .../vk-uview-ui/components/u-th/u-th.vue | 62 + .../u-time-line-item/u-time-line-item.vue | 83 + .../components/u-time-line/u-time-line.vue | 43 + .../components/u-toast/u-toast.vue | 220 + .../components/u-top-tips/u-top-tips.vue | 121 + .../vk-uview-ui/components/u-tr/u-tr.vue | 25 + .../components/u-upload/u-upload.vue | 728 + .../u-verification-code.vue | 175 + .../components/u-waterfall/u-waterfall.vue | 199 + .../components/vk-uview-ui/vk-uview-ui.vue | 15 + src/uni_modules/vk-uview-ui/iconfont.css | 910 ++ src/uni_modules/vk-uview-ui/index.js | 146 + src/uni_modules/vk-uview-ui/index.scss | 23 + .../vk-uview-ui/libs/address/areas.json | 1 + .../vk-uview-ui/libs/address/citys.json | 1 + .../vk-uview-ui/libs/address/provinces.json | 1 + .../vk-uview-ui/libs/config/config.js | 15 + .../vk-uview-ui/libs/config/zIndex.js | 20 + .../vk-uview-ui/libs/css/color.scss | 155 + .../vk-uview-ui/libs/css/common.scss | 176 + .../libs/css/style.components.scss | 7 + .../vk-uview-ui/libs/css/style.h5.scss | 8 + .../vk-uview-ui/libs/css/style.mp.scss | 72 + .../vk-uview-ui/libs/css/style.nvue.scss | 3 + .../vk-uview-ui/libs/css/style.vue.scss | 175 + .../vk-uview-ui/libs/function/$parent.js | 18 + .../vk-uview-ui/libs/function/addUnit.js | 8 + .../vk-uview-ui/libs/function/bem.js | 4 + .../vk-uview-ui/libs/function/color.js | 37 + .../libs/function/colorGradient.js | 134 + .../vk-uview-ui/libs/function/debounce.js | 29 + .../vk-uview-ui/libs/function/deepClone.js | 23 + .../vk-uview-ui/libs/function/deepMerge.js | 30 + .../vk-uview-ui/libs/function/getParent.js | 47 + .../vk-uview-ui/libs/function/guid.js | 41 + .../vk-uview-ui/libs/function/md5.js | 385 + .../vk-uview-ui/libs/function/queryParams.js | 58 + .../vk-uview-ui/libs/function/random.js | 10 + .../vk-uview-ui/libs/function/randomArray.js | 7 + .../vk-uview-ui/libs/function/route.js | 122 + .../vk-uview-ui/libs/function/sys.js | 9 + .../vk-uview-ui/libs/function/test.js | 232 + .../vk-uview-ui/libs/function/throttle.js | 34 + .../vk-uview-ui/libs/function/timeFormat.js | 51 + .../vk-uview-ui/libs/function/timeFrom.js | 47 + .../vk-uview-ui/libs/function/toast.js | 9 + .../vk-uview-ui/libs/function/trim.js | 15 + .../vk-uview-ui/libs/function/type2icon.js | 35 + .../vk-uview-ui/libs/mixin/mixin.js | 86 + .../vk-uview-ui/libs/mixin/mpShare.js | 18 + .../vk-uview-ui/libs/request/index.js | 169 + .../vk-uview-ui/libs/store/index.js | 19 + .../vk-uview-ui/libs/util/async-validator.js | 1356 ++ .../vk-uview-ui/libs/util/emitter.js | 64 + src/uni_modules/vk-uview-ui/package.json | 82 + src/uni_modules/vk-uview-ui/readme.md | 125 + src/uni_modules/vk-uview-ui/theme.scss | 38 + src/uni_modules/z-paging/changelog.md | 6 + .../z-paging-cell/z-paging-cell.vue | 34 + .../z-paging-empty-view.vue | 162 + .../z-paging-swiper-item.vue | 143 + .../z-paging-swiper/z-paging-swiper.vue | 170 + .../components/z-paging-load-more.vue | 141 + .../z-paging/components/z-paging-refresh.vue | 182 + .../components/z-paging/config/index.js | 3 + .../components/z-paging/css/z-paging-main.css | 228 + .../z-paging/css/z-paging-static.css | 35 + .../z-paging/components/z-paging/i18n/en.json | 22 + .../components/z-paging/i18n/index.js | 8 + .../components/z-paging/i18n/zh-Hans.json | 22 + .../components/z-paging/i18n/zh-Hant.json | 22 + .../z-paging/js/hooks/useZPaging.js | 25 + .../z-paging/js/hooks/useZPagingComp.js | 26 + .../z-paging/js/modules/back-to-top.js | 100 + .../z-paging/js/modules/common-layout.js | 116 + .../z-paging/js/modules/data-handle.js | 741 + .../components/z-paging/js/modules/empty.js | 147 + .../components/z-paging/js/modules/i18n.js | 101 + .../z-paging/js/modules/load-more.js | 315 + .../components/z-paging/js/modules/loading.js | 93 + .../components/z-paging/js/modules/nvue.js | 249 + .../z-paging/js/modules/refresher.js | 677 + .../z-paging/js/modules/scroller.js | 464 + .../z-paging/js/modules/virtual-list.js | 461 + .../components/z-paging/js/z-paging-config.js | 21 + .../z-paging/js/z-paging-constant.js | 12 + .../components/z-paging/js/z-paging-enum.js | 44 + .../z-paging/js/z-paging-interceptor.js | 48 + .../components/z-paging/js/z-paging-main.js | 446 + .../components/z-paging/js/z-paging-mixin.js | 22 + .../components/z-paging/js/z-paging-static.js | 13 + .../components/z-paging/js/z-paging-utils.js | 228 + .../z-paging/wxs/z-paging-renderjs.js | 58 + .../components/z-paging/wxs/z-paging-wxs.wxs | 340 + .../z-paging/components/z-paging/z-paging.vue | 307 + src/uni_modules/z-paging/package.json | 86 + src/uni_modules/z-paging/readme.md | 53 + src/uni_modules/z-tabs/changelog.md | 2 + .../z-tabs/components/z-tabs/config/index.js | 4 + .../z-tabs/components/z-tabs/z-tabs.vue | 736 + src/uni_modules/z-tabs/package.json | 82 + src/uni_modules/z-tabs/readme.md | 175 + test.keystore | Bin 0 -> 2260 bytes vite.config.js | 8 + 885 files changed, 152200 insertions(+), 90 deletions(-) create mode 100644 .hbuilderx/debug.config.json create mode 100644 .hbuilderx/launch.json create mode 100644 Dockerfile create mode 100644 index.html create mode 100644 nginx.conf create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 password.txt create mode 100644 shims-uni.d.ts create mode 100644 src/App.vue create mode 100644 src/api/httpRequest3.js create mode 100644 src/api/request2.js create mode 100644 src/common/appUpdate.js create mode 100644 src/common/array.js create mode 100644 src/common/balance.js create mode 100644 src/common/basic.js create mode 100644 src/common/calc.js create mode 100644 src/common/classify.data.js create mode 100644 src/common/detail.js create mode 100644 src/common/directory.js create mode 100644 src/common/label.js create mode 100644 src/common/record.js create mode 100644 src/common/style/PDA_style-delete.css create mode 100644 src/common/style/new_style.css create mode 100644 src/common/style/pdabasic.css create mode 100644 src/common/style/uni.css create mode 100644 src/common/utils/auth.js create mode 100644 src/common/utils/common.js create mode 100644 src/common/utils/constant.js create mode 100644 src/common/utils/errorCode.js create mode 100644 src/common/utils/permission.js create mode 100644 src/common/utils/ruoyi.js create mode 100644 src/common/utils/storage.js create mode 100644 src/components/active-form/active-form.scss create mode 100644 src/components/active-form/active-form.vue create mode 100644 src/components/active-form/active-form222.vue create mode 100644 src/components/active-form/detail.md create mode 100644 src/components/active-form/mixins.js create mode 100644 src/components/active-formv1/detail.md create mode 100644 src/components/active-formv1/index.vue create mode 100644 src/components/active-formv1/index1.vue create mode 100644 src/components/active-formv1/mixins.js create mode 100644 src/components/amap-wx/js/util.js create mode 100644 src/components/amap-wx/lib/amap-wx.js create mode 100644 src/components/custom-nomore/custom-nomore.vue create mode 100644 src/components/custom-refresher/custom-refresher.vue create mode 100644 src/components/marked/index.js create mode 100644 src/components/marked/lib/marked.js create mode 100644 src/components/mpvue-citypicker/city-data/area.js create mode 100644 src/components/mpvue-citypicker/city-data/city.js create mode 100644 src/components/mpvue-citypicker/city-data/province.js create mode 100644 src/components/mpvue-citypicker/mpvueCityPicker.vue create mode 100644 src/components/mpvue-echarts/src/echarts.vue create mode 100644 src/components/mpvue-echarts/src/wx-canvas.js create mode 100644 src/components/mpvue-picker/mpvuePicker.vue create mode 100644 src/components/mpvueGestureLock/gestureLock.js create mode 100644 src/components/mpvueGestureLock/index.vue create mode 100644 src/components/my-paging/my-paging.vue create mode 100644 src/components/page-foot/page-foot.vue create mode 100644 src/components/page-head/page-head.vue create mode 100644 src/components/pullDown/pullDown.vue create mode 100644 src/components/show-modal/show-modal.vue create mode 100644 src/components/tab-nvue/mediaList.vue create mode 100644 src/components/u-charts/u-charts.js create mode 100644 src/libs/versionUpdate.js create mode 100644 src/main.js create mode 100644 src/manifest.json create mode 100644 src/mycomponents/balance/balance.vue create mode 100644 src/mycomponents/balance/balanceDetailPopup.vue create mode 100644 src/mycomponents/balance/balanceLabel.vue create mode 100644 src/mycomponents/balance/balanceMove.vue create mode 100644 src/mycomponents/balance/balanceSelect.vue create mode 100644 src/mycomponents/balance/batch.vue create mode 100644 src/mycomponents/balance/bussinessType.vue create mode 100644 src/mycomponents/balance/handleBalance.vue create mode 100644 src/mycomponents/balance/location.vue create mode 100644 src/mycomponents/balance/moveStatus.vue create mode 100644 src/mycomponents/balance/pack.vue create mode 100644 src/mycomponents/balance/productionLabel.vue create mode 100644 src/mycomponents/balance/purchaseLabel.vue create mode 100644 src/mycomponents/balance/recommendBalance.vue create mode 100644 src/mycomponents/balance/toLocation.vue create mode 100644 src/mycomponents/batch/batch.vue create mode 100644 src/mycomponents/button/requestButton.vue create mode 100644 src/mycomponents/common/comBlankView.vue create mode 100644 src/mycomponents/common/comEmptyView.vue create mode 100644 src/mycomponents/common/comListHint.vue create mode 100644 src/mycomponents/common/comListItem.vue create mode 100644 src/mycomponents/common/comMessage.vue create mode 100644 src/mycomponents/common/comPopup.vue create mode 100644 src/mycomponents/common/comUploadCamera.vue create mode 100644 src/mycomponents/container/container.vue create mode 100644 src/mycomponents/container/containerInfo.vue create mode 100644 src/mycomponents/container/containerStatus.vue create mode 100644 src/mycomponents/container/targetContainer.vue create mode 100644 src/mycomponents/detail/comDetailCard.vue create mode 100644 src/mycomponents/detail/comJobDetailCard.vue create mode 100644 src/mycomponents/detail/comRequestDetailCard.vue create mode 100644 src/mycomponents/detail/detailBalanceInfo.vue create mode 100644 src/mycomponents/detail/detailCommonInfo.vue create mode 100644 src/mycomponents/detail/detailHandleInfo.vue create mode 100644 src/mycomponents/detail/detailItemInfo.vue create mode 100644 src/mycomponents/detail/detailList.vue create mode 100644 src/mycomponents/detail/detailPackageInfo.vue create mode 100644 src/mycomponents/detail/detailRecommendInfo.vue create mode 100644 src/mycomponents/detail/jobDetailPopup.vue create mode 100644 src/mycomponents/detail/recordDetailBasicInfo.vue create mode 100644 src/mycomponents/detail/recordDetailCommonInfo.vue create mode 100644 src/mycomponents/detail/recordDetailPopup.vue create mode 100644 src/mycomponents/detail/requestDetailBasicInfo.vue create mode 100644 src/mycomponents/detail/requestDetailCommonInfo.vue create mode 100644 src/mycomponents/form/customerFrom.vue create mode 100644 src/mycomponents/form/selectPopup.vue create mode 100644 src/mycomponents/item/item.vue create mode 100644 src/mycomponents/item/itemCompareQty.vue create mode 100644 src/mycomponents/item/itemDetailInfo.vue create mode 100644 src/mycomponents/item/itemInfo.vue create mode 100644 src/mycomponents/item/itemInfoPopup.vue create mode 100644 src/mycomponents/item/itemQty.vue create mode 100644 src/mycomponents/item/itemRecommendQty.vue create mode 100644 src/mycomponents/item/itemSelect.vue create mode 100644 src/mycomponents/item/itemStatus.vue create mode 100644 src/mycomponents/job/jobBottom.vue create mode 100644 src/mycomponents/job/jobCard.vue create mode 100644 src/mycomponents/job/jobComMainCard.vue create mode 100644 src/mycomponents/job/jobComMainCardAsn.vue create mode 100644 src/mycomponents/job/jobCommonInfo.vue create mode 100644 src/mycomponents/job/jobDetailPopup.vue create mode 100644 src/mycomponents/job/jobFilter.vue create mode 100644 src/mycomponents/job/jobInfoPopup.vue create mode 100644 src/mycomponents/job/jobNumber.vue create mode 100644 src/mycomponents/job/jobPersonInfo.vue create mode 100644 src/mycomponents/job/jobProperty.vue create mode 100644 src/mycomponents/job/jobRequestInfo.vue create mode 100644 src/mycomponents/job/jobSettingInfo.vue create mode 100644 src/mycomponents/job/jobStatus.vue create mode 100644 src/mycomponents/job/jobTop.vue create mode 100644 src/mycomponents/job/jobTopAsn.vue create mode 100644 src/mycomponents/job/jobcomDetailCard.vue create mode 100644 src/mycomponents/label/label.vue create mode 100644 src/mycomponents/location/location.vue create mode 100644 src/mycomponents/location/locationCompare.vue create mode 100644 src/mycomponents/location/locationDetail.vue create mode 100644 src/mycomponents/location/locationDrop.vue create mode 100644 src/mycomponents/location/locationInfo.vue create mode 100644 src/mycomponents/location/locationStatus.vue create mode 100644 src/mycomponents/location/requiredLocation.vue create mode 100644 src/mycomponents/package/packageBalance.vue create mode 100644 src/mycomponents/package/packageCard.vue create mode 100644 src/mycomponents/package/packageDetailPopup.vue create mode 100644 src/mycomponents/package/packageHandle.vue create mode 100644 src/mycomponents/package/packageList.vue create mode 100644 src/mycomponents/package/packageRecordCard.vue create mode 100644 src/mycomponents/package/packageRecordList.vue create mode 100644 src/mycomponents/package/packageTarget.vue create mode 100644 src/mycomponents/partCode/partCode.vue create mode 100644 src/mycomponents/partCode/partCodeSelect.vue create mode 100644 src/mycomponents/popup/selectList.vue create mode 100644 src/mycomponents/production/productionInfo.vue create mode 100644 src/mycomponents/purchase/purchaseInfo.vue create mode 100644 src/mycomponents/qty/balanceQty.vue create mode 100644 src/mycomponents/qty/balanceQtyEdit.vue create mode 100644 src/mycomponents/qty/compareQty.vue create mode 100644 src/mycomponents/qty/countQtyEdit.vue create mode 100644 src/mycomponents/qty/inspectQtyEdit.vue create mode 100644 src/mycomponents/qty/packQty.vue create mode 100644 src/mycomponents/qty/packUnit.vue create mode 100644 src/mycomponents/qty/qty.vue create mode 100644 src/mycomponents/qty/recommendQty.vue create mode 100644 src/mycomponents/qty/recommendQtyEdit.vue create mode 100644 src/mycomponents/qty/stdUom.vue create mode 100644 src/mycomponents/qty/uom.vue create mode 100644 src/mycomponents/recommend/recommend.vue create mode 100644 src/mycomponents/recommend/recommendBalance.vue create mode 100644 src/mycomponents/recommend/recommendCount.vue create mode 100644 src/mycomponents/record/record.vue create mode 100644 src/mycomponents/record/recordBottom.vue create mode 100644 src/mycomponents/record/recordComDetailCard.vue create mode 100644 src/mycomponents/record/recordCommonInfo.vue create mode 100644 src/mycomponents/record/recordDetailCard.vue create mode 100644 src/mycomponents/record/recordDetailCommonInfo.vue create mode 100644 src/mycomponents/record/recordFilter.vue create mode 100644 src/mycomponents/record/recordItemInfo.vue create mode 100644 src/mycomponents/record/recordListCommonInfo.vue create mode 100644 src/mycomponents/record/recordListDetailPoup.vue create mode 100644 src/mycomponents/record/recordMainInfo.vue create mode 100644 src/mycomponents/record/recordNumber.vue create mode 100644 src/mycomponents/record/recordPersonInfo.vue create mode 100644 src/mycomponents/record/recordRequestInfo.vue create mode 100644 src/mycomponents/record/recordStatus.vue create mode 100644 src/mycomponents/record/recordTop.vue create mode 100644 src/mycomponents/request/requestBottom.vue create mode 100644 src/mycomponents/request/requestComMainCard.vue create mode 100644 src/mycomponents/request/requestCommonInfo.vue create mode 100644 src/mycomponents/request/requestFilter.vue create mode 100644 src/mycomponents/request/requestItemInfo.vue create mode 100644 src/mycomponents/request/requestListCommonInfo.vue create mode 100644 src/mycomponents/request/requestMainInfo.vue create mode 100644 src/mycomponents/request/requestNumber.vue create mode 100644 src/mycomponents/request/requestPersonInfo.vue create mode 100644 src/mycomponents/request/requestRequestInfo.vue create mode 100644 src/mycomponents/request/requestStatus.vue create mode 100644 src/mycomponents/request/requestTop.vue create mode 100644 src/mycomponents/scan/winComScan.vue create mode 100644 src/mycomponents/scan/winComScan222.vue create mode 100644 src/mycomponents/scan/winComScanNormal.vue create mode 100644 src/mycomponents/scan/winScanAsnNumber.vue create mode 100644 src/mycomponents/scan/winScanButton.vue create mode 100644 src/mycomponents/scan/winScanContainer.vue create mode 100644 src/mycomponents/scan/winScanItem.vue create mode 100644 src/mycomponents/scan/winScanJobNumber.vue create mode 100644 src/mycomponents/scan/winScanLocation.vue create mode 100644 src/mycomponents/scan/winScanNormal.vue create mode 100644 src/mycomponents/scan/winScanPack.vue create mode 100644 src/mycomponents/scan/winScanPackAndCont.vue create mode 100644 src/mycomponents/scan/winScanPackAndLocation.vue create mode 100644 src/mycomponents/scan/winScanPackAndLocationNoBalance.vue create mode 100644 src/mycomponents/scan/winScanPackAndPosition.vue create mode 100644 src/mycomponents/status/balanceStatus.vue create mode 100644 src/mycomponents/status/status.vue create mode 100644 src/mycomponents/status/statusEdit.vue create mode 100644 src/mycomponents/transfer/comTransferReceipt.vue create mode 100644 src/mycomponents/wincom/basicCom/winHint.vue create mode 100644 src/mycomponents/workStation/workStation.vue create mode 100644 src/package.json create mode 100644 src/pages.json create mode 100644 src/pages/back/check.vue create mode 100644 src/pages/back/check1.vue create mode 100644 src/pages/back/check_foam.vue create mode 100644 src/pages/foam/check.vue create mode 100644 src/pages/foam/input.vue create mode 100644 src/pages/index/index.vue create mode 100644 src/pages/inputAndSelect.vue create mode 100644 src/pages/login/index.vue create mode 100644 src/pages/plastics/check.vue create mode 100644 src/pages/plastics/input.vue create mode 100644 src/pages/setter/index.vue create mode 100644 src/pages/setter/passwordpage.vue create mode 100644 src/pages/setter/setterDetail.vue create mode 100644 src/router/index.js create mode 100644 src/router/modules/home.js create mode 100644 src/router/modules/index.js create mode 100644 src/router/my_router.js create mode 100644 src/router/router.js create mode 100644 src/shime-uni.d.ts create mode 100644 src/static/ali_icon/iconfont.css create mode 100644 src/static/ali_icon/iconfont.ttf create mode 100644 src/static/avatar.png create mode 100644 src/static/bar/home.png create mode 100644 src/static/bar/home_p.png create mode 100644 src/static/bar/message.png create mode 100644 src/static/bar/message_p.png create mode 100644 src/static/bar/setting.png create mode 100644 src/static/bar/setting_p.png create mode 100644 src/static/bar/sy.svg create mode 100644 src/static/bar/sya.svg create mode 100644 src/static/bar/sz.svg create mode 100644 src/static/bar/sza.svg create mode 100644 src/static/bar/xx.png create mode 100644 src/static/bar/xx.svg create mode 100644 src/static/bar/xxa.svg create mode 100644 src/static/config.js create mode 100644 src/static/config.json create mode 100644 src/static/customicons.ttf create mode 100644 src/static/font/iconfont.css create mode 100644 src/static/font/iconfont.ttf create mode 100644 src/static/icon_personal_name.png create mode 100644 src/static/icon_personal_password.png create mode 100644 src/static/icon_personal_setting.png create mode 100644 src/static/icons/arrow_down.svg create mode 100644 src/static/icons/black_count.svg create mode 100644 src/static/icons/checkmark-circle.svg create mode 100644 src/static/icons/close-circle.svg create mode 100644 src/static/icons/close-circle2.svg create mode 100644 src/static/icons/close.svg create mode 100644 src/static/icons/data-checkbox.png create mode 100644 src/static/icons/error-circle.svg create mode 100644 src/static/icons/icon_customer.svg create mode 100644 src/static/icons/icon_date.svg create mode 100644 src/static/icons/icon_eye-fill.svg create mode 100644 src/static/icons/icon_eye-off-outline.svg create mode 100644 src/static/icons/icon_filter.svg create mode 100644 src/static/icons/iconfont.ttf create mode 100644 src/static/icons/icons_camera.svg create mode 100644 src/static/icons/icons_close-circle.svg create mode 100644 src/static/icons/icons_close.svg create mode 100644 src/static/icons/icons_edit.svg create mode 100644 src/static/icons/icons_scan_close.svg create mode 100644 src/static/icons/light_count.svg create mode 100644 src/static/icons/plus.svg create mode 100644 src/static/icons/question-circle.svg create mode 100644 src/static/icons/search.svg create mode 100644 src/static/icons/warning.svg create mode 100644 src/static/icons_ui/default_blank.png create mode 100644 src/static/icons_ui/default_data.png create mode 100644 src/static/icons_ui/default_notpassed.png create mode 100644 src/static/icons_ui/icon_add.svg create mode 100644 src/static/icons_ui/icon_apply_num.svg create mode 100644 src/static/icons_ui/icon_asn.svg create mode 100644 src/static/icons_ui/icon_avn.svg create mode 100644 src/static/icons_ui/icon_buy_num.svg create mode 100644 src/static/icons_ui/icon_camera_black.svg create mode 100644 src/static/icons_ui/icon_camera_white.svg create mode 100644 src/static/icons_ui/icon_close.svg create mode 100644 src/static/icons_ui/icon_customer.svg create mode 100644 src/static/icons_ui/icon_date.svg create mode 100644 src/static/icons_ui/icon_down.svg create mode 100644 src/static/icons_ui/icon_erp.svg create mode 100644 src/static/icons_ui/icon_form.svg create mode 100644 src/static/icons_ui/icon_kw.svg create mode 100644 src/static/icons_ui/icon_kw_blue.svg create mode 100644 src/static/icons_ui/icon_kw_use.svg create mode 100644 src/static/icons_ui/icon_login_password.svg create mode 100644 src/static/icons_ui/icon_login_user.svg create mode 100644 src/static/icons_ui/icon_notpass.svg create mode 100644 src/static/icons_ui/icon_num.svg create mode 100644 src/static/icons_ui/icon_passed.svg create mode 100644 src/static/icons_ui/icon_pc.svg create mode 100644 src/static/icons_ui/icon_ponumber.svg create mode 100644 src/static/icons_ui/icon_prod_line.svg create mode 100644 src/static/icons_ui/icon_qiju_end.svg create mode 100644 src/static/icons_ui/icon_qiju_num.svg create mode 100644 src/static/icons_ui/icon_qiju_start.svg create mode 100644 src/static/icons_ui/icon_return_num.svg create mode 100644 src/static/icons_ui/icon_scan_white.svg create mode 100644 src/static/icons_ui/icon_send_request.svg create mode 100644 src/static/icons_ui/icon_senditem.svg create mode 100644 src/static/icons_ui/icon_supplier.svg create mode 100644 src/static/icons_ui/icon_take_photo.svg create mode 100644 src/static/icons_ui/icon_tasknum.svg create mode 100644 src/static/icons_ui/icon_tenant.svg create mode 100644 src/static/icons_ui/icon_time.svg create mode 100644 src/static/icons_ui/icon_tm.svg create mode 100644 src/static/icons_ui/icon_xm.svg create mode 100644 src/static/icons_ui/icon_xm_blue.svg create mode 100644 src/static/icons_ui/icons_common_recceipt.svg create mode 100644 src/static/icons_ui/icons_common_sjadd.svg create mode 100644 src/static/icons_ui/label_scx.svg create mode 100644 src/static/icons_ui/login_bg.png create mode 100644 src/static/icons_ui/popup_bot_bg.png create mode 100644 src/static/images/message.svg create mode 100644 src/static/images/profile.jpg create mode 100644 src/static/login.png create mode 100644 src/static/logo.png create mode 100644 src/static/menus/bind_pallet.svg create mode 100644 src/static/menus/count.svg create mode 100644 src/static/menus/customer_return.svg create mode 100644 src/static/menus/deliver.svg create mode 100644 src/static/menus/hold_to_ok.svg create mode 100644 src/static/menus/hold_to_scrap.svg create mode 100644 src/static/menus/inspect.svg create mode 100644 src/static/menus/inventory_move.svg create mode 100644 src/static/menus/issue.svg create mode 100644 src/static/menus/menu_search_lj.svg create mode 100644 src/static/menus/merge_package.svg create mode 100644 src/static/menus/ok_to_hold.svg create mode 100644 src/static/menus/ok_to_scrap.svg create mode 100644 src/static/menus/over_package.svg create mode 100644 src/static/menus/product_dismantle.svg create mode 100644 src/static/menus/product_putaway.svg create mode 100644 src/static/menus/product_receipt.svg create mode 100644 src/static/menus/production_receipt.svg create mode 100644 src/static/menus/production_return.svg create mode 100644 src/static/menus/purchase_receipt.svg create mode 100644 src/static/menus/purchase_return.svg create mode 100644 src/static/menus/putaway.svg create mode 100644 src/static/menus/query_container.svg create mode 100644 src/static/menus/query_inspect.svg create mode 100644 src/static/menus/query_issue_request.svg create mode 100644 src/static/menus/query_item.svg create mode 100644 src/static/menus/query_location.svg create mode 100644 src/static/menus/query_supplier_deliver.svg create mode 100644 src/static/menus/repleinsh.svg create mode 100644 src/static/menus/return_to_hold.svg create mode 100644 src/static/menus/return_to_store.svg create mode 100644 src/static/menus/scrap.svg create mode 100644 src/static/menus/scrap_to_hold.svg create mode 100644 src/static/menus/split_package.svg create mode 100644 src/static/menus/transfer_deliver.svg create mode 100644 src/static/menus/transfer_receipt.svg create mode 100644 src/static/menus/unbind_pallet.svg create mode 100644 src/static/menus/unplanned_issue.svg create mode 100644 src/static/menus/unplanned_receipt.svg create mode 100644 src/static/no_more.png create mode 100644 src/static/refresher_loading.gif create mode 100644 src/static/scss/colorui.css create mode 100644 src/static/scss/global.scss create mode 100644 src/static/scss/index.scss create mode 100644 src/static/search.svg create mode 100644 src/static/uni.ttf create mode 100644 src/static/version.json create mode 100644 src/static/video/error.wav create mode 100644 src/store/getters.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/user.js create mode 100644 src/uni.scss create mode 100644 src/uni_modules/uni-badge/changelog.md create mode 100644 src/uni_modules/uni-badge/components/uni-badge/uni-badge.vue create mode 100644 src/uni_modules/uni-badge/package.json create mode 100644 src/uni_modules/uni-badge/readme.md create mode 100644 src/uni_modules/uni-breadcrumb/changelog.md create mode 100644 src/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue create mode 100644 src/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue create mode 100644 src/uni_modules/uni-breadcrumb/package.json create mode 100644 src/uni_modules/uni-breadcrumb/readme.md create mode 100644 src/uni_modules/uni-calendar/changelog.md create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 src/uni_modules/uni-calendar/package.json create mode 100644 src/uni_modules/uni-calendar/readme.md create mode 100644 src/uni_modules/uni-card/changelog.md create mode 100644 src/uni_modules/uni-card/components/uni-card/uni-card.vue create mode 100644 src/uni_modules/uni-card/package.json create mode 100644 src/uni_modules/uni-card/readme.md create mode 100644 src/uni_modules/uni-collapse/changelog.md create mode 100644 src/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue create mode 100644 src/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue create mode 100644 src/uni_modules/uni-collapse/package.json create mode 100644 src/uni_modules/uni-collapse/readme.md create mode 100644 src/uni_modules/uni-combox/changelog.md create mode 100644 src/uni_modules/uni-combox/components/uni-combox/uni-combox.vue create mode 100644 src/uni_modules/uni-combox/package.json create mode 100644 src/uni_modules/uni-combox/readme.md create mode 100644 src/uni_modules/uni-countdown/changelog.md create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue create mode 100644 src/uni_modules/uni-countdown/package.json create mode 100644 src/uni_modules/uni-countdown/readme.md create mode 100644 src/uni_modules/uni-data-checkbox/changelog.md create mode 100644 src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue create mode 100644 src/uni_modules/uni-data-checkbox/package.json create mode 100644 src/uni_modules/uni-data-checkbox/readme.md create mode 100644 src/uni_modules/uni-data-picker/changelog.md create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 src/uni_modules/uni-data-picker/package.json create mode 100644 src/uni_modules/uni-data-picker/readme.md create mode 100644 src/uni_modules/uni-data-select/changelog.md create mode 100644 src/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue create mode 100644 src/uni_modules/uni-data-select/package.json create mode 100644 src/uni_modules/uni-data-select/readme.md create mode 100644 src/uni_modules/uni-dateformat/changelog.md create mode 100644 src/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js create mode 100644 src/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue create mode 100644 src/uni_modules/uni-dateformat/package.json create mode 100644 src/uni_modules/uni-dateformat/readme.md create mode 100644 src/uni_modules/uni-datetime-picker/changelog.md create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 src/uni_modules/uni-datetime-picker/package.json create mode 100644 src/uni_modules/uni-datetime-picker/readme.md create mode 100644 src/uni_modules/uni-drawer/changelog.md create mode 100644 src/uni_modules/uni-drawer/components/uni-drawer/keypress.js create mode 100644 src/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue create mode 100644 src/uni_modules/uni-drawer/package.json create mode 100644 src/uni_modules/uni-drawer/readme.md create mode 100644 src/uni_modules/uni-easyinput/changelog.md create mode 100644 src/uni_modules/uni-easyinput/components/uni-easyinput/common.js create mode 100644 src/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue create mode 100644 src/uni_modules/uni-easyinput/package.json create mode 100644 src/uni_modules/uni-easyinput/readme.md create mode 100644 src/uni_modules/uni-fab/changelog.md create mode 100644 src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue create mode 100644 src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue.bak create mode 100644 src/uni_modules/uni-fab/package.json create mode 100644 src/uni_modules/uni-fab/readme.md create mode 100644 src/uni_modules/uni-fav/changelog.md create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/en.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/index.js create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue create mode 100644 src/uni_modules/uni-fav/package.json create mode 100644 src/uni_modules/uni-fav/readme.md create mode 100644 src/uni_modules/uni-file-picker/changelog.md create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 src/uni_modules/uni-file-picker/package.json create mode 100644 src/uni_modules/uni-file-picker/readme.md create mode 100644 src/uni_modules/uni-forms/changelog.md create mode 100644 src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue create mode 100644 src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue create mode 100644 src/uni_modules/uni-forms/components/uni-forms/utils.js create mode 100644 src/uni_modules/uni-forms/components/uni-forms/validate.js create mode 100644 src/uni_modules/uni-forms/package.json create mode 100644 src/uni_modules/uni-forms/readme.md create mode 100644 src/uni_modules/uni-goods-nav/changelog.md create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue create mode 100644 src/uni_modules/uni-goods-nav/package.json create mode 100644 src/uni_modules/uni-goods-nav/readme.md create mode 100644 src/uni_modules/uni-grid/changelog.md create mode 100644 src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue create mode 100644 src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue create mode 100644 src/uni_modules/uni-grid/package.json create mode 100644 src/uni_modules/uni-grid/readme.md create mode 100644 src/uni_modules/uni-group/changelog.md create mode 100644 src/uni_modules/uni-group/components/uni-group/uni-group.vue create mode 100644 src/uni_modules/uni-group/package.json create mode 100644 src/uni_modules/uni-group/readme.md create mode 100644 src/uni_modules/uni-icons/changelog.md create mode 100644 src/uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uni.ttf create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 src/uni_modules/uni-icons/package.json create mode 100644 src/uni_modules/uni-icons/readme.md create mode 100644 src/uni_modules/uni-indexed-list/changelog.md create mode 100644 src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue create mode 100644 src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue create mode 100644 src/uni_modules/uni-indexed-list/package.json create mode 100644 src/uni_modules/uni-indexed-list/readme.md create mode 100644 src/uni_modules/uni-link/changelog.md create mode 100644 src/uni_modules/uni-link/components/uni-link/uni-link.vue create mode 100644 src/uni_modules/uni-link/package.json create mode 100644 src/uni_modules/uni-link/readme.md create mode 100644 src/uni_modules/uni-list/changelog.md create mode 100644 src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue create mode 100644 src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss create mode 100644 src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue create mode 100644 src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-list - 副本.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-list.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-refresh.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs create mode 100644 src/uni_modules/uni-list/package.json create mode 100644 src/uni_modules/uni-list/readme.md create mode 100644 src/uni_modules/uni-load-more/changelog.md create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 src/uni_modules/uni-load-more/package.json create mode 100644 src/uni_modules/uni-load-more/readme.md create mode 100644 src/uni_modules/uni-nav-bar/changelog.md create mode 100644 src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue create mode 100644 src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue create mode 100644 src/uni_modules/uni-nav-bar/package.json create mode 100644 src/uni_modules/uni-nav-bar/readme.md create mode 100644 src/uni_modules/uni-notice-bar/changelog.md create mode 100644 src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue create mode 100644 src/uni_modules/uni-notice-bar/package.json create mode 100644 src/uni_modules/uni-notice-bar/readme.md create mode 100644 src/uni_modules/uni-number-box/changelog.md create mode 100644 src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue create mode 100644 src/uni_modules/uni-number-box/package.json create mode 100644 src/uni_modules/uni-number-box/readme.md create mode 100644 src/uni_modules/uni-pagination/changelog.md create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue create mode 100644 src/uni_modules/uni-pagination/package.json create mode 100644 src/uni_modules/uni-pagination/readme.md create mode 100644 src/uni_modules/uni-popup/changelog.md create mode 100644 src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 src/uni_modules/uni-popup/package.json create mode 100644 src/uni_modules/uni-popup/readme.md create mode 100644 src/uni_modules/uni-rate/changelog.md create mode 100644 src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue create mode 100644 src/uni_modules/uni-rate/package.json create mode 100644 src/uni_modules/uni-rate/readme.md create mode 100644 src/uni_modules/uni-row/changelog.md create mode 100644 src/uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 src/uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 src/uni_modules/uni-row/package.json create mode 100644 src/uni_modules/uni-row/readme.md create mode 100644 src/uni_modules/uni-scss/changelog.md create mode 100644 src/uni_modules/uni-scss/index.scss create mode 100644 src/uni_modules/uni-scss/package.json create mode 100644 src/uni_modules/uni-scss/readme.md create mode 100644 src/uni_modules/uni-scss/styles/index.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 src/uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 src/uni_modules/uni-scss/theme.scss create mode 100644 src/uni_modules/uni-scss/variables.scss create mode 100644 src/uni_modules/uni-search-bar/changelog.md create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue create mode 100644 src/uni_modules/uni-search-bar/package.json create mode 100644 src/uni_modules/uni-search-bar/readme.md create mode 100644 src/uni_modules/uni-section/changelog.md create mode 100644 src/uni_modules/uni-section/components/uni-section/uni-section.vue create mode 100644 src/uni_modules/uni-section/package.json create mode 100644 src/uni_modules/uni-section/readme.md create mode 100644 src/uni_modules/uni-segmented-control/changelog.md create mode 100644 src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue create mode 100644 src/uni_modules/uni-segmented-control/package.json create mode 100644 src/uni_modules/uni-segmented-control/readme.md create mode 100644 src/uni_modules/uni-steps/changelog.md create mode 100644 src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue create mode 100644 src/uni_modules/uni-steps/package.json create mode 100644 src/uni_modules/uni-steps/readme.md create mode 100644 src/uni_modules/uni-swipe-action/changelog.md create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 src/uni_modules/uni-swipe-action/package.json create mode 100644 src/uni_modules/uni-swipe-action/readme.md create mode 100644 src/uni_modules/uni-swiper-dot/changelog.md create mode 100644 src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue create mode 100644 src/uni_modules/uni-swiper-dot/package.json create mode 100644 src/uni_modules/uni-swiper-dot/readme.md create mode 100644 src/uni_modules/uni-table/changelog.md create mode 100644 src/uni_modules/uni-table/components/uni-table/uni-table.vue create mode 100644 src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue create mode 100644 src/uni_modules/uni-table/components/uni-td/uni-td.vue create mode 100644 src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue create mode 100644 src/uni_modules/uni-table/components/uni-th/uni-th.vue create mode 100644 src/uni_modules/uni-table/components/uni-thead/uni-thead.vue create mode 100644 src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue create mode 100644 src/uni_modules/uni-table/components/uni-tr/uni-tr.vue create mode 100644 src/uni_modules/uni-table/i18n/en.json create mode 100644 src/uni_modules/uni-table/i18n/es.json create mode 100644 src/uni_modules/uni-table/i18n/fr.json create mode 100644 src/uni_modules/uni-table/i18n/index.js create mode 100644 src/uni_modules/uni-table/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-table/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-table/package.json create mode 100644 src/uni_modules/uni-table/readme.md create mode 100644 src/uni_modules/uni-tag/changelog.md create mode 100644 src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue create mode 100644 src/uni_modules/uni-tag/package.json create mode 100644 src/uni_modules/uni-tag/readme.md create mode 100644 src/uni_modules/uni-title/changelog.md create mode 100644 src/uni_modules/uni-title/components/uni-title/uni-title.vue create mode 100644 src/uni_modules/uni-title/package.json create mode 100644 src/uni_modules/uni-title/readme.md create mode 100644 src/uni_modules/uni-tooltip/changelog.md create mode 100644 src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue create mode 100644 src/uni_modules/uni-tooltip/package.json create mode 100644 src/uni_modules/uni-tooltip/readme.md create mode 100644 src/uni_modules/uni-transition/changelog.md create mode 100644 src/uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 src/uni_modules/uni-transition/package.json create mode 100644 src/uni_modules/uni-transition/readme.md create mode 100644 src/uni_modules/vk-uview-ui/changelog.md create mode 100644 src/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js create mode 100644 src/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-button/u-button.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-card/u-card.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-col/u-col.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-count-down/utils.js create mode 100644 src/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-field/u-field.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-form-item/u-form-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-form/u-form.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-full-screen/u-full-screen.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-gap/u-gap.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-grid/u-grid.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-icon/u-icon.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-image/u-image.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-index-list/u-index-list.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-input/u-input.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-lazy-load/u-lazy-load.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-line/u-line.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-link/u-link.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-loading/u-loading.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-mask/u-mask.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-message-input/u-message-input.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-modal/u-modal.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-navbar/u-navbar.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-no-network/u-no-network.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-number-box/u-number-box.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-parse/libs/CssHandler.js create mode 100644 src/uni_modules/vk-uview-ui/components/u-parse/libs/MpHtmlParser.js create mode 100644 src/uni_modules/vk-uview-ui/components/u-parse/libs/config.js create mode 100644 src/uni_modules/vk-uview-ui/components/u-parse/libs/trees.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-parse/u-parse.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-picker/u-picker.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-popup/u-popup.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-radio/u-radio.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-rate/u-rate.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-read-more/u-read-more.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-row/u-row.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-search/u-search.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-section/u-section.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-select/u-select.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-slider/u-slider.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-steps/u-steps.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-sticky/u-sticky.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-subsection/u-subsection.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-swiper/u-swiper.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-switch/u-switch.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-table/u-table.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-tabs/u-tabs.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-tag/u-tag.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-td/u-td.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-th/u-th.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-time-line-item/u-time-line-item.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-time-line/u-time-line.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-toast/u-toast.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-top-tips/u-top-tips.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-tr/u-tr.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-upload/u-upload.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-verification-code/u-verification-code.vue create mode 100644 src/uni_modules/vk-uview-ui/components/u-waterfall/u-waterfall.vue create mode 100644 src/uni_modules/vk-uview-ui/components/vk-uview-ui/vk-uview-ui.vue create mode 100644 src/uni_modules/vk-uview-ui/iconfont.css create mode 100644 src/uni_modules/vk-uview-ui/index.js create mode 100644 src/uni_modules/vk-uview-ui/index.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/address/areas.json create mode 100644 src/uni_modules/vk-uview-ui/libs/address/citys.json create mode 100644 src/uni_modules/vk-uview-ui/libs/address/provinces.json create mode 100644 src/uni_modules/vk-uview-ui/libs/config/config.js create mode 100644 src/uni_modules/vk-uview-ui/libs/config/zIndex.js create mode 100644 src/uni_modules/vk-uview-ui/libs/css/color.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/common.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/style.components.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/style.h5.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/style.mp.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/style.nvue.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/css/style.vue.scss create mode 100644 src/uni_modules/vk-uview-ui/libs/function/$parent.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/addUnit.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/bem.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/color.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/colorGradient.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/debounce.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/deepClone.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/deepMerge.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/getParent.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/guid.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/md5.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/queryParams.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/random.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/randomArray.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/route.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/sys.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/test.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/throttle.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/timeFormat.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/timeFrom.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/toast.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/trim.js create mode 100644 src/uni_modules/vk-uview-ui/libs/function/type2icon.js create mode 100644 src/uni_modules/vk-uview-ui/libs/mixin/mixin.js create mode 100644 src/uni_modules/vk-uview-ui/libs/mixin/mpShare.js create mode 100644 src/uni_modules/vk-uview-ui/libs/request/index.js create mode 100644 src/uni_modules/vk-uview-ui/libs/store/index.js create mode 100644 src/uni_modules/vk-uview-ui/libs/util/async-validator.js create mode 100644 src/uni_modules/vk-uview-ui/libs/util/emitter.js create mode 100644 src/uni_modules/vk-uview-ui/package.json create mode 100644 src/uni_modules/vk-uview-ui/readme.md create mode 100644 src/uni_modules/vk-uview-ui/theme.scss create mode 100644 src/uni_modules/z-paging/changelog.md create mode 100644 src/uni_modules/z-paging/components/z-paging-cell/z-paging-cell.vue create mode 100644 src/uni_modules/z-paging/components/z-paging-empty-view/z-paging-empty-view.vue create mode 100644 src/uni_modules/z-paging/components/z-paging-swiper-item/z-paging-swiper-item.vue create mode 100644 src/uni_modules/z-paging/components/z-paging-swiper/z-paging-swiper.vue create mode 100644 src/uni_modules/z-paging/components/z-paging/components/z-paging-load-more.vue create mode 100644 src/uni_modules/z-paging/components/z-paging/components/z-paging-refresh.vue create mode 100644 src/uni_modules/z-paging/components/z-paging/config/index.js create mode 100644 src/uni_modules/z-paging/components/z-paging/css/z-paging-main.css create mode 100644 src/uni_modules/z-paging/components/z-paging/css/z-paging-static.css create mode 100644 src/uni_modules/z-paging/components/z-paging/i18n/en.json create mode 100644 src/uni_modules/z-paging/components/z-paging/i18n/index.js create mode 100644 src/uni_modules/z-paging/components/z-paging/i18n/zh-Hans.json create mode 100644 src/uni_modules/z-paging/components/z-paging/i18n/zh-Hant.json create mode 100644 src/uni_modules/z-paging/components/z-paging/js/hooks/useZPaging.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/hooks/useZPagingComp.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/back-to-top.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/common-layout.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/data-handle.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/empty.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/i18n.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/load-more.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/loading.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/nvue.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/refresher.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/scroller.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/modules/virtual-list.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-config.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-constant.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-enum.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-interceptor.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-main.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-mixin.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-static.js create mode 100644 src/uni_modules/z-paging/components/z-paging/js/z-paging-utils.js create mode 100644 src/uni_modules/z-paging/components/z-paging/wxs/z-paging-renderjs.js create mode 100644 src/uni_modules/z-paging/components/z-paging/wxs/z-paging-wxs.wxs create mode 100644 src/uni_modules/z-paging/components/z-paging/z-paging.vue create mode 100644 src/uni_modules/z-paging/package.json create mode 100644 src/uni_modules/z-paging/readme.md create mode 100644 src/uni_modules/z-tabs/changelog.md create mode 100644 src/uni_modules/z-tabs/components/z-tabs/config/index.js create mode 100644 src/uni_modules/z-tabs/components/z-tabs/z-tabs.vue create mode 100644 src/uni_modules/z-tabs/package.json create mode 100644 src/uni_modules/z-tabs/readme.md create mode 100644 test.keystore create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore index f2f05b6..7ce6e50 100644 --- a/.gitignore +++ b/.gitignore @@ -1,91 +1,21 @@ -# ---> Android -# Built application files -*.apk -*.aar -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ -# Uncomment the following line in case you need and you don't have the release build type files in your app -# release/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files +# Logs +logs *.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# IntelliJ -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/gradle.xml -.idea/assetWizardSettings.xml -.idea/dictionaries -.idea/libraries -.idea/jarRepositories.xml -# Android Studio 3 in .gitignore file. -.idea/caches -.idea/modules.xml -# Comment next line if keeping position of elements in Navigation Editor is relevant for you -.idea/navEditor.xml - -# Keystore files -# Uncomment the following lines if you do not want to check your keystore files in. -#*.jks -#*.keystore - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild -.cxx/ - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Freeline -freeline.py -freeline/ -freeline_project_description.json - -# fastlane -fastlane/report.xml -fastlane/Preview.html -fastlane/screenshots -fastlane/test_output -fastlane/readme.md - -# Version control -vcs.xml - -# lint -lint/intermediates/ -lint/generated/ -lint/outputs/ -lint/tmp/ -# lint/reports/ - -# Android Profiling -*.hprof - +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +*.local + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? \ No newline at end of file diff --git a/.hbuilderx/debug.config.json b/.hbuilderx/debug.config.json new file mode 100644 index 0000000..2d620d9 --- /dev/null +++ b/.hbuilderx/debug.config.json @@ -0,0 +1,4 @@ +{ + "rootPathIndex": 1, + "webRoot": "${projectDir}" +} diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..8c453cd --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,24 @@ +{ + // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version" : "0.0", + "configurations" : [ + { + "app-plus" : { + "launchtype" : "local" + }, + "default" : { + "launchtype" : "local" + }, + "type" : "uniCloud" + }, + { + "openVueDevtools" : true, + "type" : "uni-app:h5" + }, + { + "playground" : "standard", + "type" : "uni-app:app-android" + } + ] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9b03057 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +# 设置基础镜像 +FROM win-nginx + +WORKDIR /opt/sfms3.0-uniapp +COPY nginx.conf /usr/local/nginx/conf/nginx.conf +# 将dist/build/h5/文件中的内容复制到 /opt/sfms3.0-uniapp 这个目录下面 +COPY dist/build/h5/ /opt/sfms3.0-uniapp diff --git a/index.html b/index.html new file mode 100644 index 0000000..6f49f47 --- /dev/null +++ b/index.html @@ -0,0 +1,22 @@ + + + + + + + + + + + + +
+ + + diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..04e4b8a --- /dev/null +++ b/nginx.conf @@ -0,0 +1,53 @@ +user root; +worker_processes 2; + +events { + worker_connections 1024; +} + +http { + include mime.types; + charset utf-8,gbk; + default_type application/octet-stream; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" "$request_time $upstream_response_time"'; + + proxy_cache_path /opt/nginx_cache/ levels=1:2 keys_zone=my_zone:10m inactive=300s max_size=5g; + access_log logs/access.log main; + sendfile on; + #tcp_nopush on; + keepalive_timeout 600s; + client_max_body_size 200m; + gzip on; + gzip_min_length 10k; + gzip_comp_level 9; + gzip_buffers 4 16k; + gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png; + gzip_vary on; + gzip_disable "MSIE [1-6]\."; + upstream sfms3.0 { + server localhost:25310 weight=10 max_fails=3 fail_timeout=10s; + } + server { + listen 25302; + server_name_in_redirect off; + server_name dev.ccwin-in.com; + location /api/ { + proxy_pass http://sfms3.0/; + proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; + proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $http_x_forwarded_for; + } + location / { + proxy_cache my_zone; + proxy_cache_valid 200 304 12h; + proxy_cache_key $host$uri$is_args$args; + try_files $uri $uri/ /index.html; + root /opt/sfms3.0-uniapp; + index index.html index.htm; + } + } +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fe51bfb --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12051 @@ +{ + "name": "uni-preset-vue", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "uni-preset-vue", + "version": "0.0.0", + "dependencies": { + "@dcloudio/uni-app": "3.0.0-3090920231225001", + "@dcloudio/uni-app-plus": "3.0.0-3090920231225001", + "@dcloudio/uni-components": "3.0.0-3090920231225001", + "@dcloudio/uni-h5": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-alipay": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-baidu": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-jd": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-kuaishou": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-lark": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-qq": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-toutiao": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-weixin": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-xhs": "3.0.0-3090920231225001", + "@dcloudio/uni-quickapp-webview": "3.0.0-3090920231225001", + "less": "^4.2.0", + "vue": "^3.2.45", + "vue-i18n": "^9.1.9", + "vuex": "^4.1.0" + }, + "devDependencies": { + "@dcloudio/types": "^3.3.2", + "@dcloudio/uni-automator": "3.0.0-3090920231225001", + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-stacktracey": "3.0.0-3090920231225001", + "@dcloudio/vite-plugin-uni": "3.0.0-3090920231225001", + "@vue/runtime-core": "^3.2.45", + "axios": "^1.3.4", + "decimal.js": "^10.4.3", + "jwt-decode": "^3.1.2", + "sass": "^1.70.0", + "sass-loader": "^14.1.0", + "vite": "4.0.3", + "vue-clipboard2": "^0.3.3" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.7.tgz", + "integrity": "sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", + "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "peer": true + }, + "node_modules/@dcloudio/types": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-3.4.7.tgz", + "integrity": "sha512-RuErDYDAWY3KMlACT5NhJAKPxwjFjdzt7I/n50xCBvCSnH/84CzDPDJHRmmP6c0VOfMDHmV88V+sRBvBQRSp+w==" + }, + "node_modules/@dcloudio/uni-app": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app/-/uni-app-3.0.0-3090920231225001.tgz", + "integrity": "sha512-NsGrGjNmHc2zH1c5eqnHwSxuMNse+RknCQWIIWnnz+Q8lqHc1I9zf2mzxYXyNBHy4VhGRY2zblhkUyWLtGRaaA==", + "dependencies": { + "@dcloudio/uni-cloud": "3.0.0-3090920231225001", + "@dcloudio/uni-components": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-push": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-stat": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47" + }, + "peerDependencies": { + "@dcloudio/types": "^3.3.2" + } + }, + "node_modules/@dcloudio/uni-app-plus": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-3090920231225001.tgz", + "integrity": "sha512-TCzWHbwuheEBSzpTqpHh/imhj4Rkwdg48m9C7ZLqun5runI056TEUdrpfuLBVuwsttk5NSpqm11ywS7GSSM7Mg==", + "dependencies": { + "@dcloudio/uni-app-uts": "3.0.0-3090920231225001", + "@dcloudio/uni-app-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-app-vue": "3.0.0-3090920231225001", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "licia": "^1.29.0", + "postcss-selector-parser": "^6.0.6" + } + }, + "node_modules/@dcloudio/uni-app-uts": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-uts/-/uni-app-uts-3.0.0-3090920231225001.tgz", + "integrity": "sha512-61At6ZKh9SpHMuewxtZEOuDS1hkwFs5AecqavFAZWovVQR30it2e5zSN4kwq/ZM1An/HFs0TLXV3YBnx9Q07oA==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@babel/types": "^7.20.7", + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-nvue-styler": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@jridgewell/gen-mapping": "^0.3.3", + "@jridgewell/trace-mapping": "^0.3.19", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3", + "es-module-lexer": "^1.2.1", + "estree-walker": "^2.0.2", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2", + "unplugin-auto-import": "^0.16.7" + } + }, + "node_modules/@dcloudio/uni-app-vite": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-3090920231225001.tgz", + "integrity": "sha512-MkmI3qzsGYrT787lRMyhb/DdIF9mE/BbhrExwM/RBshnVzl6rjQIKx5lIG94t58WIaP7Jcl/pJw+IPAe1FTQyQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-nvue-styler": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-vue": "^4.2.1", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0" + } + }, + "node_modules/@dcloudio/uni-app-vue": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-3090920231225001.tgz", + "integrity": "sha512-D7I4jGSnpBihSXXeckRSD152Da2N2vKDtGF1sbNe2m1R04W36AkVUtzFGpSOml4MNIedCGtzGWXKaX7rIU+mFA==" + }, + "node_modules/@dcloudio/uni-automator": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-automator/-/uni-automator-3.0.0-3090920231225001.tgz", + "integrity": "sha512-6PKcEJK6VAARpEtsFUypFEu6DeAminijHJb63x6oK1lIt0VlJFGjXuCTBbFQTf6uLFSsUGMV4wcCmh2NswXxmg==", + "dev": true, + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "address": "^1.1.2", + "cross-env": "^7.0.3", + "debug": "^4.3.3", + "default-gateway": "^6.0.3", + "fs-extra": "^10.0.0", + "jsonc-parser": "^3.2.0", + "licia": "^1.29.0", + "merge": "^2.1.1", + "qrcode-reader": "^1.0.4", + "qrcode-terminal": "^0.12.0", + "ws": "^8.4.2" + }, + "peerDependencies": { + "jest": "27.0.4", + "jest-environment-node": "27.5.1" + } + }, + "node_modules/@dcloudio/uni-cli-shared": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-3090920231225001.tgz", + "integrity": "sha512-6Pt2nCRI57OwIoqBNctPTQ05oJPTZGlocylmrbpUy8Q5Z2eyQNlnA/jTm9L5tM6nnfJKzBE/yOBMOgJDsVWNYw==", + "dependencies": { + "@ampproject/remapping": "^2.1.2", + "@babel/core": "^7.21.3", + "@babel/parser": "^7.16.4", + "@babel/types": "^7.20.7", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@intlify/core-base": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "autoprefixer": "^10.4.14", + "base64url": "^3.0.1", + "chokidar": "^3.5.3", + "compare-versions": "^3.6.0", + "debug": "^4.3.3", + "es-module-lexer": "^1.2.1", + "esbuild": "^0.17.5", + "estree-walker": "^2.0.2", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "magic-string": "^0.30.0", + "merge": "^2.1.1", + "mime": "^3.0.0", + "module-alias": "^2.2.2", + "os-locale-s-fix": "^1.0.8-fix-1", + "picocolors": "^1.0.0", + "postcss-import": "^14.0.2", + "postcss-load-config": "^3.1.1", + "postcss-modules": "^4.3.0", + "postcss-selector-parser": "^6.0.6", + "resolve": "^1.22.1", + "tapable": "^2.2.0", + "xregexp": "3.1.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + } + }, + "node_modules/@dcloudio/uni-cloud": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-3090920231225001.tgz", + "integrity": "sha512-+k8cnrQZlBYbY01Li9rR5PBcxxvn/i8sHpj+i3rbzJioks4nneR64ZP14Zisu07v5VwLcjuZNdI8Ato7KZjyUA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47", + "fast-glob": "^3.2.11" + } + }, + "node_modules/@dcloudio/uni-components": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-components/-/uni-components-3.0.0-3090920231225001.tgz", + "integrity": "sha512-fyqPOzmEjgfhwrElZH+yTBjqbCzefgZTkbZrgPaQkvXRT8sJpsTpcjF8wNPLo0dB+9XppkNAJDy+c9EkDJGeKQ==", + "dependencies": { + "@dcloudio/uni-cloud": "3.0.0-3090920231225001", + "@dcloudio/uni-h5": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001" + } + }, + "node_modules/@dcloudio/uni-h5": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-3.0.0-3090920231225001.tgz", + "integrity": "sha512-q3YR+wESXb9JdFOJdoX8I7ER2TTOvY23fHFMMq1wZW49WLufMMu/BKM7FUeHtX9uteqMIVJDrzrjknwLgNUJiw==", + "dependencies": { + "@dcloudio/uni-h5-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-h5-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3", + "localstorage-polyfill": "^1.0.1", + "postcss-selector-parser": "^6.0.6", + "safe-area-insets": "^1.4.1", + "vue-router": "^4.1.6", + "xmlhttprequest": "^1.8.0" + } + }, + "node_modules/@dcloudio/uni-h5-vite": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-3090920231225001.tgz", + "integrity": "sha512-gyhFfI77gL2saPef0+3nQ9+mi//Vk/N7PeZCSxq6oRpHIUE3TkpB3xvQrPkciJPG8ivHX5BGcqcOdZt36qgBtA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "mime": "^3.0.0", + "module-alias": "^2.2.2" + } + }, + "node_modules/@dcloudio/uni-h5-vue": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-3090920231225001.tgz", + "integrity": "sha512-v19rnmf+V+2G07ABjViyaLqDcVJReBVuAb0xuSzNiLIezQ3GRFJAf4XEjbk56BrrRfdDRaNJ+6lrWP5j1KI8nw==", + "dependencies": { + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/server-renderer": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-i18n": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-3090920231225001.tgz", + "integrity": "sha512-GUiyXxeLvunToD2LC1FybqtrLw/cbKmtO/Q3mwue0rEurhaTrabiVoOntP4n1t4QMaL+dFsex06cRbZgafqlIw==" + }, + "node_modules/@dcloudio/uni-mp-alipay": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-3090920231225001.tgz", + "integrity": "sha512-zHcwqmFi9NtzW3cW9kAAjdfTbJ1YPrE8LKAbjHyp5XiytSRcTiuSqipBs4HgtVBijur8FPxrZtIYcGIQZQskBw==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-baidu": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-3090920231225001.tgz", + "integrity": "sha512-zhS+I+KL7ecmni2lwy6KL5gpCqPQ/7gygkqBqdNIOq9eDB7c4rlPF6w+j7WmeBWeZPZpccYaQnsn9W7swpnmRA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-weixin": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "jimp": "^0.10.1", + "licia": "^1.29.0", + "qrcode-reader": "^1.0.4", + "qrcode-terminal": "^0.12.0", + "ws": "^8.4.2" + } + }, + "node_modules/@dcloudio/uni-mp-compiler": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-3090920231225001.tgz", + "integrity": "sha512-q9pgXG1gtN9VMaEQj4jlmHBkKAwFsKTCsZu4FsH4kpFoQoSgdEFH8VAHTWKA9reaUVLJGInO0Nsd+t9rZJi3EA==", + "dependencies": { + "@babel/generator": "^7.20.5", + "@babel/parser": "^7.16.4", + "@babel/types": "^7.20.7", + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2" + } + }, + "node_modules/@dcloudio/uni-mp-jd": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-jd/-/uni-mp-jd-3.0.0-3090920231225001.tgz", + "integrity": "sha512-n+zDI+dRyVgSnp8vcLnflxs7usMEy/sfx2FWB77XswPHiMOi8Wz7SK/CQln/ScKD0pRWDPiXcLh4WXS1u3H0Hg==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-kuaishou": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-3090920231225001.tgz", + "integrity": "sha512-Z3VFtDNDUEGkHOs5hzB+HiOuJWxGsLh6jQYlGLwXFNmWJFYWGaEBsAA+NztWOB4fRB2JeYSoTu78Al3MWFRwzQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-weixin": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-lark": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-3090920231225001.tgz", + "integrity": "sha512-LuXWe7vf2fncf1Hj0PpxKYCRWYwqhcz3kKkauNa9nVNjEwiD83UthW5oDxVWMCklIFjKw91mhe+zqq2Oc8bl1w==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-toutiao": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-qq": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-3090920231225001.tgz", + "integrity": "sha512-f114i9LhYxfgHUFpSKcOHWL5ZqOttwbzNeK7vMRaqUSWX8VKxzXhqJ5OOKB2HeKyMZGJ50wxvyYNYiR01dBg+A==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47", + "fs-extra": "^10.0.0" + } + }, + "node_modules/@dcloudio/uni-mp-toutiao": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-3090920231225001.tgz", + "integrity": "sha512-g6fpZeUS2mBDIalhQEKXnkMAKUP+xGz4poJrjABMRu6L2ayXjOCYHFC0uZEIoagcD5zb3UN4ZrPaQvFtcErqRA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-vite": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-3090920231225001.tgz", + "integrity": "sha512-kcw5gPzIjMonakkT1PJtBwfr3PA6YKNxB+hJw2+gEnUFHCAVASXAOO1i7AmtWSqJsRI2FigIDDw1rjeMwY/BHg==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-i18n": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/compiler-sfc": "3.2.47", + "@vue/shared": "3.2.47", + "debug": "^4.3.3" + } + }, + "node_modules/@dcloudio/uni-mp-vue": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-3090920231225001.tgz", + "integrity": "sha512-oSlZ9lynhc6f8q7GRQMecZIzUrxnh0pIByDS9zOaYyXfT8oemA7ai2FSpX+McpSQ43VhJfPHzeJbeK2V7F0Csg==", + "dependencies": { + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-mp-weixin": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-3090920231225001.tgz", + "integrity": "sha512-XV43ox/P19pTjvjXrDeIrjmbH8VUeV/iUm7ufK77gCwSAEff2yZOd/FlmikQncQItJP1M7Sxv8DnilEbPeLoBA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47", + "jimp": "^0.10.1", + "licia": "^1.29.0", + "qrcode-reader": "^1.0.4", + "qrcode-terminal": "^0.12.0", + "ws": "^8.4.2" + } + }, + "node_modules/@dcloudio/uni-mp-xhs": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-xhs/-/uni-mp-xhs-3.0.0-3090920231225001.tgz", + "integrity": "sha512-pY/OCLGNLChmTShAG41sb0AGxqJCqsioNu4fIEKcC2dj8JFOUdcFBYS7ZvhrVrVYCErM0H3GcmLla0cJZfUCjQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-compiler": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-nvue-styler": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-3090920231225001.tgz", + "integrity": "sha512-rUO12CpVcMV1pMof7w9cs6FpCKuLPhA3fU7Tfl19XVJXv0IY//rX2aucZW0kOpw45RVJyAHbPBFuQKz7kEiGlA==", + "dependencies": { + "@vue/shared": "3.2.47", + "parse-css-font": "^4.0.0", + "postcss": "^8.4.23" + } + }, + "node_modules/@dcloudio/uni-push": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-push/-/uni-push-3.0.0-3090920231225001.tgz", + "integrity": "sha512-aqUWb1DeF9y9en3fx03eQTZzKLjUCvakJZtmQQFbj69lV2Zh/v/EWKWkF0iOOezPGBTHXJvVDQMWGkdj1ez19Q==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001" + } + }, + "node_modules/@dcloudio/uni-quickapp-webview": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-3090920231225001.tgz", + "integrity": "sha512-sFKH4WboIKvkVNEmxkhLvzE/Wya5YwFXdL/AoM8rxQO7DXP+eNOtMhapWz2NEKXN8XGM3WIVTjwyMINgg5+Ctw==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vite": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-vue": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-shared": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-shared/-/uni-shared-3.0.0-3090920231225001.tgz", + "integrity": "sha512-OXx/KBMuxAGayThVNshnZ17qZJrxjcdFeGwWJrDeTHmCpg+/Yr5yK+ubCQjN2kc4jttwq2fIkqqNs2xe4QFlSQ==", + "dependencies": { + "@vue/shared": "3.2.47" + } + }, + "node_modules/@dcloudio/uni-stacktracey": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-3090920231225001.tgz", + "integrity": "sha512-UN0qPDt6uTo2M9HxD4WgJHJIrCWLpUkseBOoOseZ2QVqfFCTQvLcH3ZVr7fx4gkoc5FDCp1YI2uiiS2AnjqZtA==", + "dev": true + }, + "node_modules/@dcloudio/uni-stat": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-3.0.0-3090920231225001.tgz", + "integrity": "sha512-gac3rONnRtLCSTXn2QhnwjsZJTfVA8uHRFyp5Uf03rQbu82MuNVOzi7p7Q3Y/0uiCHSldZ47hhmwbqtb/qdKOQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "debug": "^4.3.3" + } + }, + "node_modules/@dcloudio/vite-plugin-uni": { + "version": "3.0.0-3090920231225001", + "resolved": "https://registry.npmjs.org/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-3090920231225001.tgz", + "integrity": "sha512-kV/J7yl5ojsd1NZZ1eMziRDrz+MPbjDMm6rWG3fyW1u8Kzj06jUzzi7HRlkaWiPJHAmeRWGDf/6RFoSd+8fYCg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.20.7", + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-shared": "3.0.0-3090920231225001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-legacy": "^4.0.3", + "@vitejs/plugin-vue": "^4.2.1", + "@vitejs/plugin-vue-jsx": "^3.0.1", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/shared": "3.2.47", + "cac": "6.7.9", + "debug": "^4.3.3", + "estree-walker": "^2.0.2", + "express": "^4.17.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "magic-string": "^0.30.0", + "picocolors": "^1.0.0", + "terser": "^5.4.0", + "unplugin-auto-import": "^0.16.7" + }, + "bin": { + "uni": "bin/uni.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@intlify/core-base": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.9.tgz", + "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==", + "dependencies": { + "@intlify/devtools-if": "9.1.9", + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.9.tgz", + "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==", + "dependencies": { + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.9.tgz", + "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==", + "dependencies": { + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-resolver": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.9.tgz", + "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/runtime": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.9.tgz", + "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==", + "dependencies": { + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/shared": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.9.tgz", + "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz", + "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==", + "dependencies": { + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/console/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/core/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "peer": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/reporters/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "peer": true + }, + "node_modules/@jest/transform/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/types/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jimp/bmp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.10.3.tgz", + "integrity": "sha512-keMOc5woiDmONXsB/6aXLR4Z5Q+v8lFq3EY2rcj2FmstbDMhRuGbmcBxlEgOqfRjwvtf/wOtJ3Of37oAWtVfLg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "bmp-js": "^0.1.0", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.10.3.tgz", + "integrity": "sha512-Gd5IpL3U2bFIO57Fh/OA3HCpWm4uW/pU01E75rI03BXfTdz3T+J7TwvyG1XaqsQ7/DSlS99GXtLQPlfFIe28UA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "core-js": "^3.4.1", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/custom": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.10.3.tgz", + "integrity": "sha512-nZmSI+jwTi5IRyNLbKSXQovoeqsw+D0Jn0SxW08wYQvdkiWA8bTlDQFgQ7HVwCAKBm8oKkDB/ZEo9qvHJ+1gAQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.10.3", + "core-js": "^3.4.1" + } + }, + "node_modules/@jimp/gif": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.10.3.tgz", + "integrity": "sha512-vjlRodSfz1CrUvvrnUuD/DsLK1GHB/yDZXHthVdZu23zYJIW7/WrIiD1IgQ5wOMV7NocfrvPn2iqUfBP81/WWA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.10.3.tgz", + "integrity": "sha512-AAANwgUZOt6f6P7LZxY9lyJ9xclqutYJlsxt3JbriXUGJgrrFAIkcKcqv1nObgmQASSAQKYaMV9KdHjMlWFKlQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1", + "jpeg-js": "^0.3.4" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.10.3.tgz", + "integrity": "sha512-5zlKlCfx4JWw9qUVC7GI4DzXyxDWyFvgZLaoGFoT00mlXlN75SarlDwc9iZ/2e2kp4bJWxz3cGgG4G/WXrbg3Q==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.10.3.tgz", + "integrity": "sha512-cTOK3rjh1Yjh23jSfA6EHCHjsPJDEGLC8K2y9gM7dnTUK1y9NNmkFS23uHpyjgsWFIoH9oRh2SpEs3INjCpZhQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.10.3.tgz", + "integrity": "sha512-51GAPIVelqAcfuUpaM5JWJ0iWl4vEjNXB7p4P7SX5udugK5bxXUjO6KA2qgWmdpHuCKtoNgkzWU9fNSuYp7tCA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.10.3.tgz", + "integrity": "sha512-RgeHUElmlTH7vpI4WyQrz6u59spiKfVQbsG/XUzfWGamFSixa24ZDwX/yV/Ts+eNaz7pZeIuv533qmKPvw2ujg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.10.3.tgz", + "integrity": "sha512-bYJKW9dqzcB0Ihc6u7jSyKa3juStzbLs2LFr6fu8TzA2WkMS/R8h+ddkiO36+F9ILTWHP0CIA3HFe5OdOGcigw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.10.3.tgz", + "integrity": "sha512-pOxu0cM0BRPzdV468n4dMocJXoMbTnARDY/EpC3ZW15SpMuc/dr1KhWQHgoQX5kVW1Wt8zgqREAJJCQ5KuPKDA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.10.3.tgz", + "integrity": "sha512-nB7HgOjjl9PgdHr076xZ3Sr6qHYzeBYBs9qvs3tfEEUeYMNnvzgCCGtUl6eMakazZFCMk3mhKmcB9zQuHFOvkg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.10.3.tgz", + "integrity": "sha512-8t3fVKCH5IVqI4lewe4lFFjpxxr69SQCz5/tlpDLQZsrNScNJivHdQ09zljTrVTCSgeCqQJIKgH2Q7Sk/pAZ0w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.10.3.tgz", + "integrity": "sha512-JCX/oNSnEg1kGQ8ffZ66bEgQOLCY3Rn+lrd6v1jjLy/mn9YVZTMsxLtGCXpiCDC2wG/KTmi4862ysmP9do9dAQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.10.3.tgz", + "integrity": "sha512-RRZb1wqe+xdocGcFtj2xHU7sF7xmEZmIa6BmrfSchjyA2b32TGPWKnP3qyj7p6LWEsXn+19hRYbjfyzyebPElQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.10.3.tgz", + "integrity": "sha512-0epbi8XEzp0wmSjoW9IB0iMu0yNF17aZOxLdURCN3Zr+8nWPs5VNIMqSVa1Y62GSyiMDpVpKF/ITiXre+EqrPg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.10.3.tgz", + "integrity": "sha512-25eHlFbHUDnMMGpgRBBeQ2AMI4wsqCg46sue0KklI+c2BaZ+dGXmJA5uT8RTOrt64/K9Wz5E+2n7eBnny4dfpQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.10.3.tgz", + "integrity": "sha512-effYSApWY/FbtlzqsKXlTLkgloKUiHBKjkQnqh5RL4oQxh/33j6aX+HFdDyQKtsXb8CMd4xd7wyiD2YYabTa0g==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.10.3.tgz", + "integrity": "sha512-twrg8q8TIhM9Z6Jcu9/5f+OCAPaECb0eKrrbbIajJqJ3bCUlj5zbfgIhiQIzjPJ6KjpnFPSqHQfHkU1Vvk/nVw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.10.3.tgz", + "integrity": "sha512-xkb5eZI/mMlbwKkDN79+1/t/+DBo8bBXZUMsT4gkFgMRKNRZ6NQPxlv1d3QpRzlocsl6UMxrHnhgnXdLAcgrXw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.10.3.tgz", + "integrity": "sha512-wjRiI6yjXsAgMe6kVjizP+RgleUCLkH256dskjoNvJzmzbEfO7xQw9g6M02VET+emnbY0CO83IkrGm2q43VRyg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.10.3.tgz", + "integrity": "sha512-rf8YmEB1d7Sg+g4LpqF0Mp+dfXfb6JFJkwlAIWPUOR7lGsPWALavEwTW91c0etEdnp0+JB9AFpy6zqq7Lwkq6w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.10.3.tgz", + "integrity": "sha512-YXLlRjm18fkW9MOHUaVAxWjvgZM851ofOipytz5FyKp4KZWDLk+dZK1JNmVmK7MyVmAzZ5jsgSLhIgj+GgN0Eg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.10.3.tgz", + "integrity": "sha512-5DXD7x7WVcX1gUgnlFXQa8F+Q3ThRYwJm+aesgrYvDOY+xzRoRSdQvhmdd4JEEue3lyX44DvBSgCIHPtGcEPaw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.10.3.tgz", + "integrity": "sha512-/nkFXpt2zVcdP4ETdkAUL0fSzyrC5ZFxdcphbYBodqD7fXNqChS/Un1eD4xCXWEpW8cnG9dixZgQgStjywH0Mg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.10.3.tgz", + "integrity": "sha512-Dzh0Yq2wXP2SOnxcbbiyA4LJ2luwrdf1MghNIt9H+NX7B+IWw/N8qA2GuSm9n4BPGSLluuhdAWJqHcTiREriVA==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.10.3.tgz", + "integrity": "sha512-jTT3/7hOScf0EIKiAXmxwayHhryhc1wWuIe3FrchjDjr9wgIGNN2a7XwCgPl3fML17DXK1x8EzDneCdh261bkw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.10.3", + "@jimp/plugin-blur": "^0.10.3", + "@jimp/plugin-circle": "^0.10.3", + "@jimp/plugin-color": "^0.10.3", + "@jimp/plugin-contain": "^0.10.3", + "@jimp/plugin-cover": "^0.10.3", + "@jimp/plugin-crop": "^0.10.3", + "@jimp/plugin-displace": "^0.10.3", + "@jimp/plugin-dither": "^0.10.3", + "@jimp/plugin-fisheye": "^0.10.3", + "@jimp/plugin-flip": "^0.10.3", + "@jimp/plugin-gaussian": "^0.10.3", + "@jimp/plugin-invert": "^0.10.3", + "@jimp/plugin-mask": "^0.10.3", + "@jimp/plugin-normalize": "^0.10.3", + "@jimp/plugin-print": "^0.10.3", + "@jimp/plugin-resize": "^0.10.3", + "@jimp/plugin-rotate": "^0.10.3", + "@jimp/plugin-scale": "^0.10.3", + "@jimp/plugin-shadow": "^0.10.3", + "@jimp/plugin-threshold": "^0.10.3", + "core-js": "^3.4.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.10.3.tgz", + "integrity": "sha512-YKqk/dkl+nGZxSYIDQrqhmaP8tC3IK8H7dFPnnzFVvbhDnyYunqBZZO3SaZUKTichClRw8k/CjBhbc+hifSGWg==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.10.3", + "core-js": "^3.4.1", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.10.3.tgz", + "integrity": "sha512-7EsJzZ5Y/EtinkBGuwX3Bi4S+zgbKouxjt9c82VJTRJOQgLWsE/RHqcyRCOQBhHAZ9QexYmDz34medfLKdoX0g==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.10.3.tgz", + "integrity": "sha512-XGmBakiHZqseSWr/puGN+CHzx0IKBSpsKlmEmsNV96HKDiP6eu8NSnwdGCEq2mmIHe0JNcg1hqg59hpwtQ7Tiw==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.10.3", + "@jimp/gif": "^0.10.3", + "@jimp/jpeg": "^0.10.3", + "@jimp/png": "^0.10.3", + "@jimp/tiff": "^0.10.3", + "core-js": "^3.4.1", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.10.3.tgz", + "integrity": "sha512-VcSlQhkil4ReYmg1KkN+WqHyYfZ2XfZxDsKAHSfST1GEz/RQHxKZbX+KhFKtKflnL0F4e6DlNQj3vznMNXCR2w==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "core-js": "^3.4.1", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "peer": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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==" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "peer": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "peer": true + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "peer": true + }, + "node_modules/@vitejs/plugin-legacy": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz", + "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "browserslist": "^4.21.9", + "core-js": "^3.31.1", + "magic-string": "^0.30.1", + "regenerator-runtime": "^0.13.11", + "systemjs": "^6.14.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "peerDependencies": { + "terser": "^5.4.0", + "vite": "^4.0.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz", + "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3", + "@vue/babel-plugin-jsx": "^1.1.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.1.tgz", + "integrity": "sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.1.tgz", + "integrity": "sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "@vue/babel-helper-vue-transform-on": "1.2.1", + "@vue/babel-plugin-resolve-type": "1.2.1", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.1.tgz", + "integrity": "sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/parser": "^7.23.6", + "@vue/compiler-sfc": "^3.4.15" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.15.tgz", + "integrity": "sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/shared": "3.4.15", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-dom": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz", + "integrity": "sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==", + "dev": true, + "dependencies": { + "@vue/compiler-core": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-sfc": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz", + "integrity": "sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.23.6", + "@vue/compiler-core": "3.4.15", + "@vue/compiler-dom": "3.4.15", + "@vue/compiler-ssr": "3.4.15", + "@vue/shared": "3.4.15", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.33", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/compiler-ssr": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz", + "integrity": "sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==", + "dev": true, + "dependencies": { + "@vue/compiler-dom": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "dev": true + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.47.tgz", + "integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz", + "integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==", + "dependencies": { + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", + "integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/reactivity": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.15.tgz", + "integrity": "sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==", + "dev": true, + "dependencies": { + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", + "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/reactivity-transform/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@vue/reactivity/node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "dev": true + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.15.tgz", + "integrity": "sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==", + "dev": true, + "dependencies": { + "@vue/reactivity": "3.4.15", + "@vue/shared": "3.4.15" + } + }, + "node_modules/@vue/runtime-core/node_modules/@vue/shared": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.15.tgz", + "integrity": "sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==", + "dev": true + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz", + "integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==", + "dependencies": { + "@vue/runtime-core": "3.2.47", + "@vue/shared": "3.2.47", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/reactivity": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.47.tgz", + "integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==", + "dependencies": { + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/runtime-core": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", + "integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==", + "dependencies": { + "@vue/reactivity": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.47.tgz", + "integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==", + "dependencies": { + "@vue/compiler-ssr": "3.2.47", + "@vue/shared": "3.2.47" + }, + "peerDependencies": { + "vue": "3.2.47" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.47.tgz", + "integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true, + "peer": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "peer": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", + "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.4", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/babel-jest/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true, + "peer": true + }, + "node_modules/browserslist": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "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" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, + "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==", + "devOptional": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.9", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.9.tgz", + "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001584", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz", + "integrity": "sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==", + "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" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true, + "peer": true + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "dev": true, + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "peer": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "peer": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "devOptional": true + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "peer": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", + "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + }, + "node_modules/css-list-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-list-helpers/-/css-list-helpers-2.0.0.tgz", + "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==" + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true, + "peer": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "peer": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "peer": true + }, + "node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "peer": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true, + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "peer": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.659", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.659.tgz", + "integrity": "sha512-sRJ3nV3HowrYpBtPF9bASQV7OW49IgZC01Xiq43WfSE3RTCkK0/JidoCmR73Hyc1mN+l/H4Yqx0eNiomvExFZg==" + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "peer": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "peer": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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, + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dev": true, + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "peer": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "peer": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "peer": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "peer": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "devOptional": true + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "peer": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "peer": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "peer": true + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "peer": true + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "peer": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "peer": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "27.0.4", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.4.tgz", + "integrity": "sha512-Px1iKFooXgGSkk1H8dJxxBIrM3tsc5SIuI4kfKYK2J+4rvCvPGr/cXktxh0e9zIPQ5g09kOMNfHQEmusBUf/ZA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.0.4", + "import-local": "^3.0.2", + "jest-cli": "^27.0.4" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-circus/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-cli/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-config/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-diff/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-each/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-jasmine2/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-matcher-utils/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-message-util/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "peer": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-resolve/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-runner/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-runtime/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-snapshot/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-util/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-validate/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-watcher/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "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, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jimp": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.10.3.tgz", + "integrity": "sha512-meVWmDMtyUG5uYjFkmzu0zBgnCvvxwWNi27c4cg55vWNVC9ES4Lcwb+ogx+uBBQE3Q+dLKjXaLl0JVW+nUNwbQ==", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.10.3", + "@jimp/plugins": "^0.10.3", + "@jimp/types": "^0.10.3", + "core-js": "^3.4.1", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", + "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "peer": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==", + "dev": true + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/licia": { + "version": "1.39.2", + "resolved": "https://registry.npmjs.org/licia/-/licia-1.39.2.tgz", + "integrity": "sha512-4pte7gXufSAa3JcsR0iT+2Lj2RX5Qpj+Nc0n84xs0ynNmw7eJmeZzk2oPTEtsQqwHwtT+NiX0arGkL5HPjTs7g==" + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "peer": true + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/local-pkg": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/localstorage-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", + "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "peer": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "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 + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "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, + "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, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "peer": true + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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 + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "peer": true + }, + "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==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true, + "peer": true + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale-s-fix": { + "version": "1.0.8-fix-1", + "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz", + "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==", + "dependencies": { + "lcid": "^3.0.0" + }, + "engines": { + "node": ">=10", + "yarn": "^1.22.4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-css-font": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-css-font/-/parse-css-font-4.0.0.tgz", + "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==", + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-list-helpers": "^2.0.0", + "css-system-font-keywords": "^1.0.0", + "unquote": "^1.1.1" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "peer": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "peer": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.34", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.34.tgz", + "integrity": "sha512-4eLTO36woPSocqZ1zIrFD2K1v6wH7pY1uBh0JIM2KKfrVtGvPFiAku6aNOP0W1Wr9qwnaCsF0Z+CrVnryB2A8Q==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true, + "peer": true + }, + "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, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode-reader": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", + "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==" + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true, + "peer": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true, + "peer": true + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "peer": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-area-insets": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/safe-area-insets/-/safe-area-insets-1.4.1.tgz", + "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==" + }, + "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" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "node_modules/sass": { + "version": "1.70.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", + "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.1.0.tgz", + "integrity": "sha512-LS2mLeFWA+orYxHNu+O18Xe4jR0kyamNOOUsE3NyBP4DvIL+8stHpNX0arYTItdPe80kluIiJ7Wfe/9iHSRO0Q==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "peer": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "peer": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "peer": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "peer": true + }, + "node_modules/systemjs": { + "version": "6.14.3", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.14.3.tgz", + "integrity": "sha512-hQv45irdhXudAOr8r6SVSpJSGtogdGZUbJBRKCE5nsIS7tsxxvnIHqT4IOPWj+P+HcSzeWzHlGCGpmhPDIKe+w==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "devOptional": 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/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true, + "peer": true + }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "dev": true + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "peer": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "peer": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/ufo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", + "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==" + }, + "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==", + "devOptional": true, + "peer": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unimport": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.7.1.tgz", + "integrity": "sha512-V9HpXYfsZye5bPPYUgs0Otn3ODS1mDUciaBlXljI4C2fTwfFpvFZRywmlOu943puN9sncxROMZhsZCjNXEpzEQ==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "acorn": "^8.11.2", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.2", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "mlly": "^1.4.2", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "scule": "^1.1.1", + "strip-literal": "^1.3.0", + "unplugin": "^1.5.1" + } + }, + "node_modules/unimport/node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/unimport/node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.7.1.tgz", + "integrity": "sha512-JqzORDAPxxs8ErLV4x+LL7bk5pk3YlcWqpSNsIkAZj972KzFZLClc/ekppahKkOczGkwIG6ElFgdOgOlK4tXZw==", + "dependencies": { + "acorn": "^8.11.3", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.1" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.16.7.tgz", + "integrity": "sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==", + "dependencies": { + "@antfu/utils": "^0.7.6", + "@rollup/pluginutils": "^5.0.5", + "fast-glob": "^3.3.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "minimatch": "^9.0.3", + "unimport": "^3.4.0", + "unplugin": "^1.5.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "peer": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "peer": true + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.3.tgz", + "integrity": "sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==", + "dependencies": { + "esbuild": "^0.16.3", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/vue": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.47.tgz", + "integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-sfc": "3.2.47", + "@vue/runtime-dom": "3.2.47", + "@vue/server-renderer": "3.2.47", + "@vue/shared": "3.2.47" + } + }, + "node_modules/vue-clipboard2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", + "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==", + "dev": true, + "dependencies": { + "clipboard": "^2.0.0" + } + }, + "node_modules/vue-i18n": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.9.1.tgz", + "integrity": "sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==", + "dependencies": { + "@intlify/core-base": "9.9.1", + "@intlify/shared": "9.9.1", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-i18n/node_modules/@intlify/core-base": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.9.1.tgz", + "integrity": "sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==", + "dependencies": { + "@intlify/message-compiler": "9.9.1", + "@intlify/shared": "9.9.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/vue-i18n/node_modules/@intlify/message-compiler": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.9.1.tgz", + "integrity": "sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==", + "dependencies": { + "@intlify/shared": "9.9.1", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/vue-i18n/node_modules/@intlify/shared": { + "version": "9.9.1", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.9.1.tgz", + "integrity": "sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "peer": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "peer": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.4" + } + }, + "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==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "peer": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true, + "peer": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "peer": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true, + "peer": true + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "peer": true + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xregexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-3.1.0.tgz", + "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..38bd551 --- /dev/null +++ b/package.json @@ -0,0 +1,46 @@ +{ + "name": "uni-preset-vue", + "version": "0.0.0", + "scripts": { + "dev:app": "uni -p app", + "dev:app-android": "uni -p app-android", + "dev:app-ios": "uni -p app-ios", + "dev:custom": "uni -p", + "dev": "uni", + "dev:h5:ssr": "uni --ssr", + "dev:mp-weixin": "uni -p mp-weixin", + "build:app": "uni build -p app", + "build:app-android": "uni build -p app-android", + "build:app-ios": "uni build -p app-ios", + "build:custom": "uni build -p", + "test": "uni build", + "build:h5:ssr": "uni build --ssr", + "build:mp-weixin": "uni build -p mp-weixin" + }, + "dependencies": { + "@dcloudio/uni-app": "3.0.0-3090920231225001", + "@dcloudio/uni-app-plus": "3.0.0-3090920231225001", + "@dcloudio/uni-components": "3.0.0-3090920231225001", + "@dcloudio/uni-h5": "3.0.0-3090920231225001", + "@dcloudio/uni-mp-weixin": "3.0.0-3090920231225001", + "less": "^4.2.0", + "vue": "^3.2.45", + "vue-i18n": "^9.1.9", + "vuex": "^4.1.0" + }, + "devDependencies": { + "@dcloudio/types": "^3.3.2", + "@dcloudio/uni-automator": "3.0.0-3090920231225001", + "@dcloudio/uni-cli-shared": "3.0.0-3090920231225001", + "@dcloudio/uni-stacktracey": "3.0.0-3090920231225001", + "@dcloudio/vite-plugin-uni": "3.0.0-3090920231225001", + "@vue/runtime-core": "^3.2.45", + "axios": "^1.3.4", + "decimal.js": "^10.4.3", + "jwt-decode": "^3.1.2", + "sass": "^1.70.0", + "sass-loader": "^14.1.0", + "vite": "4.0.3", + "vue-clipboard2": "^0.3.3" + } +} diff --git a/password.txt b/password.txt new file mode 100644 index 0000000..b79b823 --- /dev/null +++ b/password.txt @@ -0,0 +1,2 @@ +别名:testalias +密码: wms3.0 \ No newline at end of file diff --git a/shims-uni.d.ts b/shims-uni.d.ts new file mode 100644 index 0000000..ed4adcf --- /dev/null +++ b/shims-uni.d.ts @@ -0,0 +1,10 @@ +/// +import 'vue' + +declare module '@vue/runtime-core' { + type Hooks = App.AppInstance & Page.PageInstance; + + interface ComponentCustomOptions extends Hooks { + + } +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..9128a34 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/src/api/httpRequest3.js b/src/api/httpRequest3.js new file mode 100644 index 0000000..e3e374f --- /dev/null +++ b/src/api/httpRequest3.js @@ -0,0 +1,67 @@ + +import storage from '../common/utils/storage' +import config from '../static/config.js' + +function service(options = {}) { + var token = storage.getStorage(storage.constant.token) + var tenantId = 1 + // if(getApp()!=undefined){ + // tenantId = getApp().globalData.tenantId + // } + + // if(getApp()!=undefined){ + // requestUrl = getApp().globalData.request_url + // } + var requestUrl = "" + requestUrl =config.request_url + + options.header = { + "content-type": "application/json", + "Authorization": "Bearer "+token, + "dataType":"json", + "tenant-id":tenantId + }; + options.timeout = 10000 + + options.url = requestUrl+options.url + + return new Promise((resolve, reject) => { + options.success = (res) => { + if (res ) { + if(res.statusCode == 200){ + if(res.data.code==0){ + resolve(res.data); + }else { + reject("系统异常:"+res.data.msg) + console.log("系统异常",res.data.msg) + } + + }else { + reject("系统异常:"+ res.data.msg) + console.log("系统异常",res.data.msg) + } + + } else { + reject("系统异常:"+res.data.msg) + console.log("系统异常",res.data.msg) + } + }; + options.fail = (error) => { + var message = error.errMsg + if (message === 'Network Error') { + message = '接口连接异常' + } else if (message.includes('timeout')) { + message = '接口请求超时' + } else if (message.includes('Request failed with status code')) { + message = '接口' + message.substr(message.length - 3) + '异常' + } + reject("系统异常:"+message); + console.log("系统异常",message) + }; + uni.request(options); + }); + } + + + + export default service; diff --git a/src/api/request2.js b/src/api/request2.js new file mode 100644 index 0000000..de9c0af --- /dev/null +++ b/src/api/request2.js @@ -0,0 +1,3834 @@ +import request from './httpRequest3.js' +import storage from '../common/utils/storage.js' +import config from '../static/config.js' +// const baseApi = "/api/admin-api" +//公司地址 +// 本地地址 +const baseApi = "" +/** + * 获取验证码 + * @param {*} + */ +export function getCaptchaImage(params) { + return request({ + url: baseApi + "/system/captcha/captchaImage", + method: "get", + data: params, + }); +} +/** + * 登录方法 + */ +export function login(username, password, code, uuid) { + return request({ + url: baseApi + '/system/auth/login', + headers: { + isToken: false + }, + method: 'post', + data: { + username, + password, + code, + uuid + } + }) +} +/** + * 退出 + */ +export function logout() { + return request({ + url: baseApi + "/system/auth/logout", + method: "post", + data: {}, + }); +} +/** + * 获取登录用户的权限信息 + */ +export function getPermissionInfo() { + return request({ + url: baseApi + "/system/auth/get-permission-info", + method: "get", + data: {}, + }); +} +/** + * 获取租户信息 + */ +export function getTenantInfo(name) { + var params = { + name: name, + pageNo: 1, + pageSize: 100, + } + + return request({ + url: baseApi + "/system/tenant/page", + method: "get", + data: params, + }); +} + + + +/** + * 获取登录用户信息 + */ +export function getUserProfile() { + return request({ + url: baseApi + '/system/user/profile/get', + method: 'get' + }) +} +/** + * 修改个人用户密码 + */ +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: baseApi + '/system/user/profile/update-password', + method: 'PUT', + params: data + }) +} + +/** + * 获取仓库代码 + * @param {*} + * + */ +export function getWarehouseCodeList(pageNo, pageSize) { + return request({ + url: baseApi + "/wms/warehouse/page?pageNo=" + pageNo + "&pageSize=" + pageSize, + method: "get", + data: {}, + }); +} + +//获取产品标签信息inventorylabel +export function getInventoryLabel(code) { + + return request({ + url: baseApi + "/api/pda/label/inventorylabel/by-code?code=" + code, + method: "get", + data: {}, + }); +} + +/** + * 获取消息列表 + * @param {*} + * + */ +export function getMessageList(pageNo, pageSize) { + return request({ + url: baseApi + "/system/notify-message/my-page?pageNo=" + pageNo + "&pageSize=" + pageSize, + method: "get", + data: {}, + }); +} + +/** + * 标记站内信为已读 + * @param {*} + * + */ +export function setMessageUpdateRead(ids) { + return request({ + url: baseApi + "/system/notify-message/update-read?ids=" + ids, + method: "put", + data: {}, + }); +} + +/** + * 标记所有站内信为已读 + * @param {*} + * + */ +export function setAllMessageUpdateRead() { + return request({ + url: baseApi + "/system/notify-message/update-all-read", + method: "put", + data: {}, + }); +} + +/** + * 获取当前用户的未读站内信数量 + * @param {*} + * + */ +export function getMessageUnreadCount() { + return request({ + url: baseApi + "/system/notify-message/get-unread-count", + method: "get", + data: {}, + }); +} + + + +/** + * 获取配置字典 + * @param {*} + * + */ +export function getDictionaryItem(params) { + return request({ + url: baseApi + "/system/dict-type/getDictByTypes", + method: "post", + data: params, + }); +} + +/** + * 查询 客户信息 + * @param {*} 物品代码 + * + */ +export function getBasicCustomerList() { + return request({ + url: baseApi + "/wms/customer/list", + method: "get", + data: {}, + }); +} + +/** + * 根据业务代码查询业务类型 + * @param {*} Code + * + */ +export function getBusinesstypeByCode(code) { + var params = { + code: code, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/businesstype/page", + method: "get", + data: params, + }); +} + +/** + * 按物料代码查询库存明细 + * @param {*} itemCode + * + */ + +export function getBalanceByItemCode(params) { + return request({ + url: baseApi + "/wms/balance/page", + method: "get", + data: params, + }); +} + +/** + * 按物品查询预计入 + * @param {*} itemCode + * + */ +export function getExpectinByItemcode(params) { + return request({ + url: baseApi + "/wms/expectin/page", + method: "get", + data: params, + }); +} + +/** + * 按物品查询预计出 + * @param {*} itemCode + * + */ +export function getExpectoutByItemcode(params) { + return request({ + url: baseApi + "/wms/expectout/page", + method: "get", + data: params, + }); +} + +/** + * 按库位查询库存汇总 + * @param {*} + * + */ +export function getBalanceByLocationcodeGroup(params) { + return request({ + url: baseApi + "/wms/balance/page", + method: "get", + data: params, + }); +} + +/** + * 按库位查询库存明细 + * @param {*} + */ +export function getBalanceByLocationcode(params) { + + return request({ + url: baseApi + "/wms/balance/page", + method: "get", + data: params, + }); +} + +/** + * 查询器具信息接口 + * @param {*} number 器具代码 + */ +export function getContainerByNumber(number) { + var params = { + number: number, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/container-main/page", + method: "get", + data: params, + }); +} + + +/** + * 查询器具信息接口 + * @param {*} number 器具代码 + */ +export function getContainerDetailByNumber(number) { + + return request({ + url: baseApi + "/wms/container-main/getContainerByNumber?number=" + number, + method: "get", + data: {}, + }); +} + + +/** + * 按器具查询库存明细 + * @param {*器具代码} + * + */ +export function getBalanceByContainerNumberGroup(params) { + return request({ + url: baseApi + "/wms/balance/page", + method: "get", + data: params, + }); +} + +/** + * 按器具查询库存明细(无器具) + * @param {*器具代码} + * + */ +export function getBalanceByContainerNumber(params) { + return request({ + url: baseApi + "/wms/balance/page", + method: "get", + data: params, + }); +} + +/**标签 + * + * @param {*} header version + * 获取标签设置信息 + */ +export function getLabelByHeader(header, version) { + var params = { + header: header, + version: version, + } + return request({ + url: baseApi + "/wms/labeltype/getDetailsByHeader", + method: "get", + data: params, + }); +} + +/**包装 + * 获取包装信息 + * @param {*} + * + */ +export function getPackageByNumber(number) { + var params = { + number: number, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/package/page", + method: "get", + data: params, + }); +} + +/**包装 + * 获取包装信息 + * @param {*} + * + */ +export function getPackageListByNumber(number) { + var params = { + number: number, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/package/queryPackageInfo", + method: "get", + data: params, + }); +} + + + +/** + * 查询库位信息接口 + * @param {*} code 库位代码 + * + */ +export function getBasicLocationByCode(code) { + var parmas = { + code: code, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/location/page", + method: "get", + data: parmas, + }); +} + + +/** + * 校验库位物料关系 + * @param {*} + * + */ +export function validateItemAndLocation(parmas) { + return request({ + url: baseApi + "/wms/location/validate", + method: "post", + data: parmas, + }); +} + + +/** + * 查询上架推荐库位 + * @param {*} + * supplierCode + * itemCode + * batch + * inventoryStatus + */ + +export function getPutawayRecommendLocation(params) { + return request({ + url: baseApi + "/wms/location/recommendLocation", + method: "post", + data: params, + }); +} + + + +/** + * 查询物品信息接口 + * @param {*} code 物品代码 + * + */ +export function getBasicItemByCode(itemCode) { + var params = { + code: itemCode, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/itembasic/page", + method: "get", + data: params, + }); +} + +/** + * 按物品查询库存汇总 + * @param {*} itemCode + * /wms/balance/summary + */ +export function getBalanceSummary(params) { + return request({ + url: baseApi + "/wms/balance/summary", + method: "get", + data: params, + }); +} + +/** + * 查询包装信息接口 + * @param {*} itemCode 物品代码 + * + */ +export function getItempackagingByItemcode(itemCode) { + return request({ + url: baseApi + "/wms/itempackaging/page?itemCode=" + itemCode, + method: "get", + data: {}, + }); +} + +/** + * 查询生产线物料关系 + * @param {*} productionLineCode 生产线code + * + */ +export function getProductionlineItem(params) { + return request({ + url: baseApi + "/wms/productionlineitem/page", + method: "get", + data: params, + }); +} + +/** + * 通过物料查询包装规格 + * @param {*} itemCode + * + */ +export function getPackUnitByItemCode(itemCode) { + var params = { + itemCode: itemCode, + pageNo: 1, + pageSize: 100 + } + return request({ + url: baseApi + "/wms/itempackage/page", + method: "get", + data: params, + }); +} + +/** + * 查询生产线-车间-工位 + * @param {*} + * + */ +export function getWorkShopLineStation() { + return request({ + url: baseApi + "/wms/issue-request-main/get-workshop-productionline-workstation", + method: "get", + data: {}, + }); +} + +/** + * 查询客户物品 + */ +export function getCustomerItemList(params) { + return request({ + url: baseApi + "/wms/customeritem/senior", + method: "post", + data: params, + }); +} + + + +/** + * 供应商发货 + * + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getSupplierDeliverRecordList(params) { + return request({ + url: baseApi + "/wms/supplierdeliver-record-main/senior", + method: "post", + data: params, + }); +} +/** + * 供应商发货 详情 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getSupplierDeliverRecordDetail(id) { + return request({ + url: baseApi + "/wms/supplierdeliver-record-main/getSupplierdeliverRecordById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 报检单查询 = request_inspect + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getInspectRequestList(params) { + return request({ + url: baseApi + "/wms/inspect-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 检验单查询 详情 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getInspectRequestDetail(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/getInspectRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 检验单申请 关闭任务 + * @param {*} params + */ +export function inspectRequestClose(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 检验单申请 提交审批 + * @param {*} params + */ +export function inspectRequestApprove(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 检验单申请 提交审批通过 + * @param {*} params + */ + +export function inspectRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 检验单申请 审批驳回 + * @param {*} params + */ +export function inspectRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 检验单申请 处理 + * @param {*} params + */ +export function inspectRequestHandle(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 检验单申请 重新添加 + * @param {*} params + */ +export function inspectRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/inspect-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购收货 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getPurchaseReceiptJobList(params) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 采购收货 任务承接 + * @param {*} id + * + */ +export function takePurchaseReceiptJob(id) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购收货 放弃承接 + * @param {*} id + * + */ +export function cancleTakePurchaseReceiptJob(id) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购收货 获取任务明细 + * @param {*} id 任务id + * + */ +export function getPurchaseReceiptJobDetail(id) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/getPurchasereceiptJobyId?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 采购收货 任务提交 + * @param {*} 任务id + * + */ +export function purchaseReceiptJobSubmit(params) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/execute", + method: "put", + data: params, + }); +} + + + +/** + * 采购退货 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * 获取任务明细 + */ +export function getPurchaseReturnJobList(params) { + return request({ + url: baseApi + "/wms/purchasereturn-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 采购退货 获取任务明细 + * @param {*} id 任务id + * + */ + +export function getPurchasereturnJobDetail(id) { + return request({ + url: baseApi + "/wms/purchasereturn-job-main/getReturnJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 采购退货 承接任务 + * @param {*} id + * + */ +export function takePurchasereturnJob(id) { + return request({ + url: baseApi + "/wms/purchasereturn-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货 放弃承接 + * @param {*} id + * + */ +export function cancleTakePurchasereturnJob(id) { + return request({ + url: baseApi + "/wms/purchasereturn-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货 任务提交 + * @param {*} params + */ +export function purchaseReturnJobsubmit(params) { + return request({ + url: baseApi + "/wms/purchasereturn-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 采购退货 申请列表 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getPurchaseReturnRequestList(params) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 采购退货 获取申请任务明细 + * @param {*} id 任务id + * + */ +export function getPurchaseReturnRequestDetail(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/getPurchasereturnRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 采购退货申请 关闭任务 + * @param {*} params + */ +export function purchaseReturnRequestClose(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货申请 提交审批 + * @param {*} params + */ +export function purchaseReturnRequestApprove(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货申请 提交审批通过 + * @param {*} params + */ +export function purchaseReturnRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货申请 审批驳回 + * @param {*} params + */ +export function purchaseReturnRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货申请 处理 + * @param {*} params + */ +export function purchaseReturnRequestHandle(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购退货申请 重新添加 + * @param {*} params + */ +export function purchaseReturnRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + + + +/** + * 采购退货申请 提交 + * @param {*} params + */ +export function purchaseReturnRequestCreate(params) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 采购退货 记录提交 + * @param {*} params + */ +export function purchaseReturnRecordSubmit(params) { + return request({ + url: baseApi + "/wms/purchasereturn-record-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 到货检验 任务 + * + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getInspectJobList(params) { + return request({ + url: baseApi + "/wms/inspect-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 到货检验 获取任务明细 + * @param {*} id 任务id + * + */ +export function getInspectJobDetail(id) { + return request({ + url: baseApi + "/wms/inspect-job-main/getInspectJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 到货检验 任务承接 + * @param {*} id + * + */ +export function takeInspectJob(id) { + return request({ + url: baseApi + "/wms/inspect-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 到货检验 放弃承接 + * @param {*} id + * + */ +export function cancleTakeInspectJob(id) { + return request({ + url: baseApi + "/wms/inspect-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 到货检验 任务提交 + * @param {*} 任务id + * + */ +export function inspectJobSubmit(params) { + return request({ + url: baseApi + "/wms/inspect-job-main/execute", + method: "put", + data: params, + }); +} + +//根据检验记录单号创建上架申请 +export function createPutAwayRequest(number) { + return request({ + url: baseApi + "/wms/inspect-record-main/createPutAwayRequest?number=" + number, + method: "post", + data: {}, + }); +} + + +/** + * 采购上架 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getPutawayJobList(params) { + return request({ + url: baseApi + "/wms/putaway-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 采购上架 获取任务明细 + * @param {*} id 任务id + * + */ +export function getPutawayJobDetail(id) { + return request({ + url: baseApi + "/wms/putaway-job-main/getPutawayJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 采购上架 承接任务 + * @param {*} id + * + */ +export function takePutawayJob(id) { + return request({ + url: baseApi + "/wms/putaway-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架 放弃承接 + * @param {*} id + * + */ +export function cancleTakePutawayJob(id) { + return request({ + url: baseApi + "/wms/putaway-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架 任务提交 + * @param {*} params + */ +export function putawayJobSubmit(params) { + return request({ + url: baseApi + "/wms/putaway-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 采购上架申请 获取任务列表 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getPutawayRequestList(params) { + return request({ + url: baseApi + "/wms/putaway-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 采购上架申请 获取任务明细 + * @param {*} id 任务id + * + */ +export function getPutawayRequestDetail(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/getPutawayRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 采购上架申请 提交 + * @param {*} params + */ +export function putawayRequestSubmit(params) { + return request({ + url: baseApi + "/wms/putaway-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 采购上架申请 关闭任务 + * @param {*} params + */ +export function putawayRequestClose(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架申请 提交审批 + * @param {*} params + */ +export function putawayRequestApprove(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架申请 提交审批通过 + * @param {*} params + */ +export function putawayRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架申请 审批驳回 + * @param {*} params + */ +export function putawayRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架申请 处理 + * @param {*} params + */ +export function putawayRequestHandle(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 采购上架申请 重新添加 + * @param {*} params + */ +export function putawayRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/putaway-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + + + +/** + * 采购上架记录 提交 + * @param {*} params + */ +export function putawayRecordSubmit(params) { + return request({ + url: baseApi + "/wms/putaway-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 发料任务 列表 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getIssueJobList(params) { + return request({ + url: baseApi + "/wms/issue-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 发料任务明细 + * @param {*} 任务id + * + */ +export function getIssueJobDetail(id) { + return request({ + url: baseApi + "/wms/issue-job-main/getIssueJobById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 获取推荐明细接口 + * @param {*} 任务id + * /wms/issue-request-main + */ +export function getBalanceByBatchOffShelf(itemCode, qty) { + return request({ + url: baseApi + "/wms/issue-request-main/getBalanceByBatchOffShelf?itemCode=" + itemCode + "&&qty=" + + qty, + method: "get", + data: {}, + }); +} + + +/** + * 发料 任务承接 + * @param {*} id + * + */ +export function takeIssueJob(id) { + return request({ + url: baseApi + "/wms/issue-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料 放弃承接 + * @param {*} id + * + */ +export function cancleTakeIssueJob(id) { + return request({ + url: baseApi + "/wms/issue-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料任务 提交 + * @param {*} params + */ +export function issueJobSubmit(params) { + return request({ + url: baseApi + "/wms/issue-job-main/execute", + method: "put", + data: params, + }); +} + + +/** + * 生产收料 任务列表 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductionReceiptJobList(params) { + return request({ + url: baseApi + "/wms/productionreceipt-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 生产收料 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductionReceiptJobDetail(id) { + return request({ + url: baseApi + "/wms/productionreceipt-job-main/getProductionreceiptJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 生产收料 任务承接 + * @param {*} id + * + */ +export function takeProductionReceiptJob(id) { + return request({ + url: baseApi + "/wms/productionreceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产收料 放弃承接 + * @param {*} id + * + */ +export function cancleTakeProductionReceiptJob(id) { + return request({ + url: baseApi + "/wms/productionreceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 生产收料任务 提交 + * @param {*} params + */ +export function productionReceiptJobSubmit(params) { + return request({ + url: baseApi + "/wms/productionreceipt-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 生产收料记录 提交 + * @param {*} params + */ +export function productionReceiptRecordSubmit(params) { + return request({ + url: baseApi + "/wms/productreceipt-record-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 库存转移 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getInventoryMoveJobList(params) { + return request({ + url: baseApi + "/wms/inventorymove-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 库存转移 获取任务明细 + * @param {*} id 任务id + * + */ + +export function getInventoryMoveJobDetail(id) { + return request({ + url: baseApi + "/wms/inventorymove-job-main/getInventorymoveJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 库存转移任务 任务承接 + * @param {*} id + * + */ +export function takeInventoryMoveJob(id) { + return request({ + url: baseApi + "/wms/inventorymove-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 库存转移任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeInventoryMoveJob(id) { + return request({ + url: baseApi + "/wms/inventorymove-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 库存转移 任务提交 + * @param {*} 任务id + * + */ +export function inventoryMoveSubmit(params) { + return request({ + url: baseApi + "/wms/inventorymove-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 库存转移记录 提交 + * @param {*} 任务id + * + */ +export function inventoryMoveRecordSubmit(params) { + return request({ + url: baseApi + "/wms/inventorymove-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 盘点 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getCountJobList(params) { + return request({ + url: baseApi + "/wms/count-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 盘点 获取任务明细 + * @param {*} id 任务id + * + */ +export function getCountJobDetail(id) { + return request({ + url: baseApi + "/wms/count-job-main/getCountJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 盘点任务 任务承接 + * @param {*} id + * + */ +export function takeCountJob(id) { + return request({ + url: baseApi + "/wms/count-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 盘点任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeCountJob(id) { + return request({ + url: baseApi + "/wms/count-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 盘点任务 提交 + * @param {*} 任务id + * + */ +export function countJobSubmit(params) { + return request({ + url: baseApi + "/wms/count-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 计划外入库 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取任务列表 + * @param {*} + */ +export function getUnPlannedReceiptJobList(params) { + return request({ + url: baseApi + "/wms/unplannedreceipt-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 计划外入库 获取任务明细 + * @param {*} id 任务id + * + */ +export function getUnPlannedReceiptJobDetail(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-job-main/getUnplannedreceiptJobById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 计划外入库任务 任务承接 + * @param {*} id + * + */ +export function takeUnPlannedReceiptJob(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库 放弃承接 + * @param {*} id + * + */ +export function cancleTakeUnPlannedReceiptJob(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库任务 提交 + * @param {*} params + */ +export function unPlannedReceiptJobSubmit(params) { + return request({ + url: baseApi + "/wms/unplannedreceipt-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 计划外入库申请 创建 + * @param {*} params + */ +export function unPlannedReceiptRequestCreate(params) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 计划外入库申请 提交审批 + * @param {*} params + */ +export function unPlannedReceiptRequestApprove(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库申请 关闭 + * @param {*} params + */ +export function unPlannedReceiptRequestClose(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库申请 审批通过 + * @param {*} params + */ +export function unPlannedReceiptRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库申请 审批驳回 + * @param {*} params + */ +export function unPlannedReceiptRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库申请 处理 + * @param {*} params + */ +export function unPlannedReceiptRequestHandle(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外入库申请 重新添加 + * @param {*} params + */ +export function unPlannedReceiptRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 计划外入库记录 提交 + * @param {*} params + */ +export function unPlannedReceiptRecordbSubmit(params) { + return request({ + url: baseApi + "/wms/unplannedreceipt-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 计划外出库 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取任务列表 + * @param {*} + */ +export function getUnPlannedIssueJobList(params) { + return request({ + url: baseApi + "/wms/unplannedissue-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 计划外出库 获取任务明细 + * @param {*} id 任务id + * + */ +export function getUnPlannedIssueJobDetail(id) { + return request({ + url: baseApi + "/wms/unplannedissue-job-main/getUnplannedissueJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 计划外出库任务 承接 + * @param {*} id + * + */ +export function takeUnPlannedIssueJob(id) { + return request({ + url: baseApi + "/wms/unplannedissue-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeUnPlannedIssueJob(id) { + return request({ + url: baseApi + "/wms/unplannedissue-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库任务 提交 + * @param {*} params + */ + +export function unPlannedIssueJobSubmit(params) { + return request({ + url: baseApi + "/wms/unplannedissue-job-main/execute", + method: "put", + data: params, + }); +} + + +/** + * 计划外出库申请 提交 + * @param {*} params + */ +export function unPlannedIssueRequestCreate(params) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 计划外出库申请 提交审批 + * @param {*} params + */ +export function unPlannedIssueRequestApprove(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库申请 关闭 + * @param {*} params + */ +export function unPlannedIssueRequestClose(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库申请 审批通过 + * @param {*} params + */ +export function unPlannedIssueRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库申请 审批驳回 + * @param {*} params + */ +export function unPlannedIssueRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库申请 处理 + * @param {*} params + */ +export function unPlannedIssueRequestHandle(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 计划外出库申请 重新添加 + * @param {*} params + */ + +export function unPlannedIssueRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 计划外出库记录 提交 + * @param {*} params + */ +export function unPlannedIssueRecordSubmit(params) { + return request({ + url: baseApi + "/wms/unplannedissue-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 制品收货 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductReceiptJobList(params) { + return request({ + url: baseApi + "/wms/productreceipt-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品收货 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductReceiptJobDetail(id) { + return request({ + url: baseApi + "/wms/productreceipt-job-main/getProductreceiptJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品收货任务 承接 + * @param {*} id + * + */ +export function takeProductReceiptJob(id) { + return request({ + url: baseApi + "/wms/productreceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品收货任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeProductReceiptJob(id) { + return request({ + url: baseApi + "/wms/productreceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品收货任务 提交 + * @param {*} params + */ +export function productReceiptJobsubmit(params) { + return request({ + url: baseApi + "/wms/productreceipt-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 制品收货记录 提交 + * @param {*} params + */ +export function productReceiptRecordsubmit(params) { + return request({ + url: baseApi + "/wms/productreceipt-record-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 制品上架 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductPutawayJobList(params) { + return request({ + url: baseApi + "/wms/productputaway-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品上架 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductPutawayJobDetail(id) { + return request({ + url: baseApi + "/wms/productputaway-job-main/getProductputawayJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品上架任务 承接 + * @param {*} id + * + */ +export function takeProductPutawayJob(id) { + return request({ + url: baseApi + "/wms/productputaway-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeProductPutawayJob(id) { + return request({ + url: baseApi + "/wms/productputaway-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 制品上架任务 提交 + * @param {*} 任务id + * + */ +export function productPutawayJobSubmit(params) { + return request({ + url: baseApi + "/wms/productputaway-job-main/execute", + method: "put", + data: params, + }); +} + + + + + +/** + * 制品上架记录 提交 + * @param {*} 任务id + * + */ +export function productPutawayRecordSubmit(params) { + return request({ + url: baseApi + "/wms/productputaway-record-main/create", + method: "post", + data: params, + }); +} + + +/** + * 直接备货 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getStockUpJobList(params) { + return request({ + url: baseApi + "/wms/stockup-main-job/senior", + method: "post", + data: params, + }); +} + +/** + * 直接备货 获取任务明细 + * @param {*} id 任务id + * + */ +export function getStockUpJobDetail(id) { + return request({ + url: baseApi + "/wms/stockup-main-job/getStockupMainJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 直接备货任务 承接 + * @param {*} id + * + */ +export function takeStockUpJob(id) { + return request({ + url: baseApi + "/wms/stockup-main-job/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 直接备货任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeStockUpJob(id) { + return request({ + url: baseApi + "/wms/stockup-main-job/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 直接备货任务 提交 + * @param {*} params + */ +export function stockUpJobsubmit(params) { + return request({ + url: baseApi + "/wms/stockup-main-job/execute", + method: "put", + data: params, + }); +} + + +/** + * 制品拆解 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductDismantleJobList(params) { + return request({ + url: baseApi + "/wms/productdismantle-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品拆解 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductDismantleJobDetail(id) { + return request({ + url: baseApi + "/wms/productdismantle-job-main/getProductdismantleJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品拆解 任务承接 + * @param {*} id + * + */ +export function takeProductDismantleJob(id) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品拆解 放弃承接 + * @param {*} id + * + */ +export function cancleTakeProductDismantleJob(id) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品拆解 任务提交 + * @param {*} 任务id + * + */ +export function productDismantleJobSubmit(params) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/abandon", + method: "put", + data: {}, + }); +} + +/** + * 制品拆解 任务提交 + * @param {*} 任务id + * + */ +export function productDismantleRecordSubmit(params) { + return request({ + url: baseApi + "/wms/purchasereceipt-job-main/abandon", + method: "put", + data: params, + }); +} + +/** + * 制品发货 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getDeliverJobList(params) { + return request({ + url: baseApi + "/wms/deliver-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品发货 获取任务明细 + * @param {*} id 任务id + * + */ +export function getDeliverDetail(id) { + return request({ + url: baseApi + "/wms/deliver-job-main/getDeliverJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品发货任务 承接 + * @param {*} id + * + */ +export function takeDeliverJob(id) { + return request({ + url: baseApi + "/wms/deliver-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeDeliverJob(id) { + return request({ + url: baseApi + "/wms/deliver-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 制品发货 任务提交 + * @param {*} 任务id + * + */ + +export function deliverJobSubmit(params) { + return request({ + url: baseApi + "/wms/deliver-job-main/execute", + method: "put", + data: params, + }); +} + + +/** + * 制品发货申请 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getDeliverRequestList(params) { + return request({ + url: baseApi + "/wms/deliver-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品发货申请 获取任务明细 + * @param {*} id 任务id + * + */ +export function getDeliverRequestDetail(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/getDeliverRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品发货申请 提交 + * @param {*} params + */ +export function deliverRequestSubmit(params) { + return request({ + url: baseApi + "/wms/deliver-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 制品发货申请 关闭任务 + * @param {*} params + */ +export function deliverRequestClose(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货申请 提交审批 + * @param {*} params + */ +export function deliverRequestApprove(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货申请 提交审批通过 + * @param {*} params + */ +export function deliverRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货申请 审批驳回 + * @param {*} params + */ +export function deliverRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货申请 处理 + * @param {*} params + */ +export function deliverRequestHandle(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货申请 重新添加 + * @param {*} params + */ +export function deliverRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/deliver-request-main/reAdd/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品发货记录 提交 + * @param {*} params + */ +export function deliverRecordSubmit(params) { + return request({ + url: baseApi + "/wms/deliver-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 客户退货 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getCustomerReturnJobList(params) { + return request({ + url: baseApi + "/wms/customerreturn-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 客户退货 获取任务明细 + * @param {*} id 任务id + * + */ +export function getCustomerReturnJobDetail(id) { + return request({ + url: baseApi + "/wms/customerreturn-job-main/getCustomerreturnJobById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 客户退货任务 承接 + * @param {*} id + * + */ +export function takeCustomerReturnJob(id) { + return request({ + url: baseApi + "/wms/customerreturn-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeCustomerReturnJob(id) { + return request({ + url: baseApi + "/wms/customerreturn-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货任务 提交 + * @param {*} 任务id + * + */ +export function customerReturnJobSubmit(params) { + return request({ + url: baseApi + "/wms/customerreturn-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 客户退货申请 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getCustomerReturnRequestList(params) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/senior", + method: "post", + data: params, + }); +} + + +/** + * 客户退货申请 任务明细 + * @param {*} id 任务id + * + */ + +export function getCustomerReturnRequestDetail(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/getCustomerreturnRequestById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 客户退货申请 提交 + * @param {*} params + */ +export function customerReturnRequestSubmit(params) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 客户退货申请 关闭任务 + * @param {*} params + */ +export function customerReturnRequestClose(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货申请 提交审批 + * @param {*} params + */ +export function customerReturnRequestApprove(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货申请 提交审批通过 + * @param {*} params + */ +export function customerReturnRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货申请 审批驳回 + * @param {*} params + */ +export function customerReturnRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货申请 处理 + * @param {*} params + */ +export function customerReturnRequestHandle(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货申请 重新添加 + * @param {*} params + */ +export function customerReturnRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/customerreturn-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 客户退货 记录提交 + * @param {*} params + */ +export function customerReturnRecordSubmit(params) { + return request({ + url: baseApi + "/wms/customerreturn-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 调拨入库 任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getTransferReceiptJobList(params) { + return request({ + url: baseApi + "/wms/transferreceipt-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 调拨入库 获取任务明细 + * @param {*} id 任务id + * + */ +export function getTransferReceiptJobDetail(id) { + return request({ + url: baseApi + "/wms/transferreceipt-job-main/getTransferreceiptJobById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 调拨入库任务 承接 + * @param {*} id + * + */ +export function takeTransferReceiptJob(id) { + return request({ + url: baseApi + "/wms/transferreceipt-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 调拨入库 放弃承接 + * @param {*} id + * + */ +export function cancleTakeTransferReceiptJob(id) { + return request({ + url: baseApi + "/wms/transferreceipt-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 调拨入库任务 提交 + * @param {*} 任务id + * + */ +export function transferReceiptJobSubmit(params) { + return request({ + url: baseApi + "/wms/transferreceipt-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 调拨入库记录 提交 + * @param {*} id + * + */ +export function transferReceiptRecordSubmit(params) { + return request({ + url: baseApi + "/wms/transferreceipt-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 调拨出库 任务列表 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getTransferIssueJobList(params) { + return request({ + url: baseApi + "/wms/transferissue-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 调拨出库 获取任务明细 + * @param {*} id 任务id + * + */ +export function getTransferIssueJobDetail(id) { + return request({ + url: baseApi + "/wms/transferissue-job-main/getTransferissueJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 调拨出库任务 承接 + * @param {*} id + * + */ +export function takeTransferIssueJob(id) { + return request({ + url: baseApi + "/wms/transferissue-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 调拨出库任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeTransferIssueJob(id) { + return request({ + url: baseApi + "/wms/transferissue-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 调拨出库任务 提交 + * @param {*} 任务id + * + */ +export function transferIssueJobSubmit(params) { + return request({ + url: baseApi + "/wms/transferissue-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 调拨出库记录 提交 + * @param {*} + * + */ +export function transferIssueRecordSubmit(params) { + return request({ + url: baseApi + "/wms/transferissue-record-main/create", + method: "post", + data: params, + }); +} + + +/** + * 制品上架申请 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductPutawayRequestList(params) { + return request({ + url: baseApi + "/wms/productputaway-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 制品上架申请 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductPutawayRequestDetail(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/getProductputawayRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 制品上架申请 提交 + * @param {*} params + */ +export function productPutawayRequestSubmit(params) { + return request({ + url: baseApi + "/wms/productputaway-request-main/create", + method: "post", + data: params, + }); +} +/** + * 制品上架申请 处理 + * @param {*} params + */ +export function productPutawayRequestHandle(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架申请 重新添加 + * @param {*} params + */ +export function productPutawayRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架申请 提交审批 + * @param {*} params + */ +export function productPutawayRequestApprove(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架申请 提交审批通过 + * @param {*} params + */ +export function productPutawayRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架申请 审批驳回 + * @param {*} params + */ +export function productPutawayRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 制品上架申请 关闭任务 + * @param {*} params + */ +export function productPutawayRequestClose(id) { + return request({ + url: baseApi + "/wms/productputaway-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料申请列表 + * @param {*} params + */ +export function getIssueRequestList(params) { + return request({ + url: baseApi + "/wms/issue-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 发料申请明细 + * @param {*} id + */ +export function getIssueRequestDetail(id) { + return request({ + url: baseApi + "/wms/issue-request-main/getIssueRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 发料申请 提交 + * @param {*} params + */ +export function issueRequestSubmit(params) { + return request({ + url: baseApi + "/wms/issue-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 发料申请 处理 + * @param {*} params + */ +export function issueRequestHandle(id) { + return request({ + url: baseApi + "/wms/issue-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + + +/** + * 发料申请 提交审批 + * @param {*} params + */ +export function issueRequestSubmitApprove(id) { + return request({ + url: baseApi + "/wms/issue-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料申请 审批通过 + * @param {*} params + */ +export function issueRequestSubmitApproveAgree(id) { + return request({ + url: baseApi + "/wms/issue-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料申请 审批驳回 + * @param {*} params + */ +export function issueRequestSubmitApproveRefused(id) { + return request({ + url: baseApi + "/wms/issue-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料申请 申请关闭 + * @param {*} params + */ +export function issueRequestClose(id) { + return request({ + url: baseApi + "/wms/issue-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料申请 重新添加 + * @param {*} params + */ +export function issueRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/issue-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 发料记录 提交 + * @param {*} params + */ +export function issueRecordSubmit(params) { + return request({ + url: baseApi + "/wms/issue-record-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 生产退料 任务获取任务列表 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductionreturnJobList(params) { + return request({ + url: baseApi + "/wms/productionreturn-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 生产退料任务 获取任务明细 + * @param {*} id 任务id + * + */ +export function getProductionReturnJobDetail(id) { + return request({ + url: baseApi + "/wms/productionreturn-job-main/getProductionreturnJobById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 生产退料 承接任务 + * @param {*} id + * + */ +export function takeProductionReturnJob(id) { + return request({ + url: baseApi + "/wms/productionreturn-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料 放弃承接 + * @param {*} id + * + */ +export function cancleTakeProductionReturnJob(id) { + return request({ + url: baseApi + "/wms/productionreturn-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料 任务提交 + * @param {*} 任务id + * + */ +export function productionReturnJobSubmit(params) { + return request({ + url: baseApi + "/wms/productionreturn-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 生产退料申请 获取任务列表 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getProductionReturnRequestList(params) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 生产退料申请 获取申请明细 + * @param {*} id + * + */ +export function getProductionReturnRequestDetail(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/getProductionreturnRequestById?id=" + id, + method: "get", + data: {}, + }); +} + + +/** + * 生产退料申请 处理 + * @param {*} id + * + */ +export function productionReturnRequestHandle(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料申请 提交审批 + * @param {*} id + * + */ +export function productionReturnRequestSubmitApprove(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料申请 审批通过 + * @param {*} id + * + */ + +export function productionReturnRequestSubmitApproveAgree(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料申请 审批驳回 + * @param {*} id + * + */ +export function productionReturnRequestSubmitApproveRefused(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料申请 关闭 + * @param {*} id + * + */ +export function productionReturnRequestClose(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 生产退料申请 重新添加 + * @param {*} id + * + */ +export function productionReturnRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + + + +/** + * 生产退料申请 创建 + * @param {*} params + */ + +export function productionReturnRequestCreate(params) { + return request({ + url: baseApi + "/wms/productionreturn-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 生产退料记录 提交 + * @param {*} params + */ +export function productionReturnRecordSubmit(params) { + return request({ + url: baseApi + "/wms/productionreturn-record-main/create", + method: "post", + data: params, + }); +} + + +/** + * 计划外出库申请 + * 任务状态 + * 开始日期 + * 结束日期 + * 获取任务列表 + * @param {*} + */ +export function getUnPlannedIssueRequestList(params) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 计划外出库申请 获取明细 + * @param {*} id 任务id + * + */ +export function getUnPlannedIssueRequestDetail(id) { + return request({ + url: baseApi + "/wms/unplannedissue-request-main/getUnplannedissueRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 计划外入库 申请 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取任务列表 + * @param {*} + */ +export function getUnPlannedReceiptRequestList(params) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 计划外入库申请 获取任务明细 + * @param {*} id 任务id + * + */ +export function getUnPlannedReceiptRequestDetail(id) { + return request({ + url: baseApi + "/wms/unplannedreceipt-request-main/getUnplannedreceiptRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 计划外入库 申请提交 + * @param {*} params + */ +export function unPlannedReceiptRequestSubmit(params) { + return request({ + url: baseApi + "/wms/purchasereturn-request-main/submit", + method: "put", + data: params, + }); +} + + + + +/** + * 报废出库任务 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getScrapJobList(params) { + return request({ + url: baseApi + "/wms/scrap-job-main/senior", + method: "post", + data: params, + }); +} + +/** 报废出库 获取任务明细 + * @param {*} id 任务id + */ +export function getScrapJobDetail(id) { + return request({ + url: baseApi + "/wms/scrap-job-main/getScrapJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 报废出库 任务承接 + * @param {*} id + * + */ +export function takeScrapJob(id) { + return request({ + url: baseApi + "/wms/scrap-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库 放弃承接 + * @param {*} id + * + */ +export function cancleTakeScrapJob(id) { + return request({ + url: baseApi + "/wms/scrap-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库 任务提交 + * @param {*} 任务id + * + */ +export function scrapJobSubmit(params) { + return request({ + url: baseApi + "/wms/scrap-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 报废出库 申请 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取任务列表 + * @param {*} + */ +export function getScrapRequestList(params) { + return request({ + url: baseApi + "/wms/scrap-request-main/senior", + method: "post", + data: params, + }); +} + +/** + * 报废出库申请 获取申请明细 + * @param {*} id 任务id + * + */ +export function getScrapRequestDetail(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/getScrapRequestById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 报废出库申请 创建 + * @param {*} params + */ +export function scrapRequestCreate(params) { + return request({ + url: baseApi + "/wms/scrap-request-main/create", + method: "post", + data: params, + }); +} + +/** + * 报废出库申请 提交审批 + * @param {*} params + */ +export function scrapRequestApprove(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/submit?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库申请 关闭 + * @param {*} params + */ +export function scrapRequestClose(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/close?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库申请 审批通过 + * @param {*} params + */ +export function scrapRequestApproveAgree(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/agree?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库申请 审批驳回 + * @param {*} params + */ +export function scrapRequestApproveRefused(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/refused?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库申请 审批驳回 + * @param {*} params + */ +export function scrapRequestHandle(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/handle?id=" + id, + method: "put", + data: {}, + }); +} +/** + * 报废出库申请 重新添加 + * @param {*} params + */ +export function scrapRequestAddAgain(id) { + return request({ + url: baseApi + "/wms/scrap-request-main/reAdd?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 报废出库记录 提交 + * @param {*} params + */ +export function scrapRecordSubmit(params) { + return request({ + url: baseApi + "/wms/scrap-record-main/create", + method: "post", + data: params, + }); +} + + + +/** + * 补料任务 列表 + * + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getRepleinshJobList(params) { + return request({ + url: baseApi + "/wms/repleinsh-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 补料任务 获取任务明细 + * @param {*} id 任务id + * + */ + +export function getRepleinshJobDetail(id) { + return request({ + url: baseApi + "/wms/repleinsh-job-main/getRepleinshJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 补料 任务承接 + * @param {*} id + * + */ +export function takeRepleinshJob(id) { + return request({ + url: baseApi + "/wms/repleinsh-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 补料任务 放弃承接 + * @param {*} id + * + */ +export function cancleTakeRepleinshJob(id) { + return request({ + url: baseApi + "/wms/repleinsh-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 补料任务 提交 + * @param {*} params + */ + +export function repleinshJobSubmit(params) { + return request({ + url: baseApi + "/wms/repleinsh-job-main/execute", + method: "put", + data: params, + }); +} + +/** + * 补料申请 提交 + * @param {*} params + */ +export function repleinshRequestSubmit(params) { + return request({ + url: baseApi + "/magic-api/pda/job/putaway/jobSubmit", + method: "put", + data: params, + }); +} + +/** + * 补料记录 提交 + * @param {*} params + */ +export function repleinshRecordSubmit(params) { + return request({ + url: baseApi + "/wms/repleinsh-record-main/create", + method: "post", + data: params, + }); +} + +/** + * 器具绑定 提交 + * @param {*} params + */ +export function containerBindRecordSubmit(params) { + return request({ + url: baseApi + "/wms/container-main/containerBind", + method: "post", + data: params, + }); +} + +/** + * 器具解绑 提交 + * @param {*} params + */ +export function containerUnBindRecordSubmit(params) { + return request({ + url: baseApi + "/wms/container-main/containerUnBind", + method: "post", + data: params, + }); +} + +/** + * 拆包 提交 + * @param {*} params + */ +export function splitPackageRecordSubmit(params) { + return request({ + url: baseApi + "/wms/packagesplit-main/create", + method: "post", + data: params, + }); +} + +/** + * 合包 提交 + * @param {*} params + */ +export function mergePackageRecordSubmit(params) { + return request({ + url: baseApi + "/wms/packagemerge-main/create", + method: "post", + data: params, + }); +} + +/** + * 翻包直接生成记录 提交 + * @param {*} params + */ +export function overPackageRecordSubmit(params) { + return request({ + url: baseApi + "/wms/packageover-record-main/create", + method: "post", + data: params, + }); +} + +/** + * "itemCodes": [], + "locationCode":"INSPECT" + 管理精度策略 + * @param {*} + * + */ +export function getManagementPrecision(params) { + return request({ + url: baseApi + "/wms/rule/getPrecisionStrategyByItemCodes", + method: "post", + data: params, + }); +} + + +/** + * 查询库存通过多种条件 高级筛选 + * @param {*} + * + */ +export function getBalanceByFilter(param) { + return request({ + url: baseApi + "/wms/balance/senior", + method: "post", + data: param, + }); +} + +/** + * 查询管理精度,多个物料,多个库位 + * @param {*} + * + */ +export function getPrecisionStrategy(param) { + return request({ + url: baseApi + "/wms/rule/getPrecisionStrategy", + method: "post", + data: param, + }); +} + + + + +/** + * 删除文件 + * @param {*} + * + */ +export function deleteFileById(id) { + return request({ + url: baseApi + "/infra/file/delete?id=" + id, + method: "delete", + data: {}, + }); +} + +/** + * 删除文件(多个文件) + * @param {*} + * + */ +export function deleteFileByTable(tableName, tableId) { + return request({ + url: baseApi + "/infra/file/deleteByTable?tableName=" + tableName + "&tableId=" + tableId, + method: "delete", + data: {}, + }); +} + + +/** + * 获取文件列表 + * @param {*} + * + */ +export function getFileList(tableName, tableId) { + return request({ + url: baseApi + "/infra/file/list?tableName=" + tableName + "&tableId=" + tableId, + method: "get", + data: {}, + }); +} + +/** + * 图片上传 + * @param {*} + * + */ +export function uploadFile(tableName, tableId, filePath, callBack) { + var token = storage.getStorage(storage.constant.token) + var url = config.request_url + baseApi + uni.uploadFile({ + url: url + "/infra/file/upload?tableName=" + tableName + "&tableId=" + tableId, + filePath: filePath, + name: 'file', + header: { + "Authorization": "Bearer " + token, + "tenant-id": 1 + }, + success: (uploadFileRes) => { + callBack(uploadFileRes.data) + console.log(uploadFileRes.data); + }, + fail: (error) => { + callBack(undefined) + }, + }); +} + +/** + * 获取文件列表 + * @param {*} + * + */ +export function getMainMessage() { + return request({ + url: baseApi + "/wms/index/indexPda", + method: "get", + data: {}, + }); +} + +/** + * app检查更新 + * @param {*} + * + */ +export function appCheckUpdate() { + return uni.request({ + url: "http://192.168.0.119:9527/appUpdate.json", + method: "GET", + data: {} + }) +} + +// var params = { +// filters: filters, +// pageNo: 1, +// pageSize: 100, +// } + +//获取包装规格 +export function getPackageUnitList(params) { + return request({ + url: baseApi + "/wms/packageunit/senior", + method: "post", + data: params, + }); +} + +/** + * 翻包 任务承接 + * @param {*} id + * + */ +export function takeOverPageJob(id) { + return request({ + url: baseApi + "/wms/packageover-job-main/accept?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 翻包 放弃承接 + * @param {*} id + * + */ +export function cancleTakeOverPageJob(id) { + return request({ + url: baseApi + "/wms/packageover-job-main/abandon?id=" + id, + method: "put", + data: {}, + }); +} + +/** + * 翻包任务 列表 + * status 任务状态 + * 开始日期 + * 结束日期 + * 获取日期任务列表 + * @param {*} + */ +export function getOverPageJobList(params) { + return request({ + url: baseApi + "/wms/packageover-job-main/senior", + method: "post", + data: params, + }); +} + +/** + * 翻包任务明细 + * @param {*} 任务id + * + */ +export function getOverPageJobDetail(id) { + return request({ + url: baseApi + "/wms/packageover-job-main/getPackageoverJobById?id=" + id, + method: "get", + data: {}, + }); +} + +/** + * 翻包任务 提交 + * @param {*} params + */ +export function overPageSubmit(params) { + return request({ + url: baseApi + "/wms/packageover-job-main/execute", + method: "put", + data: params, + }); +} \ No newline at end of file diff --git a/src/common/appUpdate.js b/src/common/appUpdate.js new file mode 100644 index 0000000..03af4c3 --- /dev/null +++ b/src/common/appUpdate.js @@ -0,0 +1,116 @@ +import { + appCheckUpdate +} from '../api/request2.js'; +export function appUpdate() { + let curversion = 0; + plus.runtime.getProperty(plus.runtime.appid, function(widgetInfo) { + const data = { + action: 'checkVersion', + appid: plus.runtime.appid, + appVersion: plus.runtime.version, + wgtVersion: widgetInfo.version, + versionCode: widgetInfo.versionCode + } + curversion=data.versionCode + appCheckUpdate().then(res => { + console.log("当前版本提示",curversion) + if (res.data) { + if (res.data.versionCode > Number(curversion)) { + var downUrl = res.data.downUrl; + var content = res.data.content; + var version =res.data.version + console.log("新版本提示") + uni.showModal({ + title: "发现新版本:("+version+")", + content: content, + confirmText: "更新", + cancelText: "取消", + success: (res) => { + if (res.confirm) { + confirm(downUrl); + console.log('comfirm') //点击确定之后执行的代码 + } else { + console.log('cancel') //点击取消之后执行的代码 + } + } + }) + } else { + uni.showToast({ + title:"当前是最新版本" + }) + console.log("没有新版本") + } + } + }).catch(error => { + console.log("版本错误", error) + }) + + }) + + + +} + +export function confirm(downUrl) { + var downloadApkUrl = downUrl + var dtask = plus.downloader.createDownload(downloadApkUrl, {}, + function(d, status) { + + // 下载完成 + if (status == 200) { + + plus.runtime.install(plus.io.convertLocalFileSystemURL( + d.filename), {}, {}, function(error) { + uni.showToast({ + title: '安装失败', + duration: 1500 + }); + }) + } else { + uni.showToast({ + title: '更新失败', + duration: 1500 + }); + } + }); + try { + dtask.start(); // 开启下载的任务 + var prg = 0; + var showLoading = plus.nativeUI.showWaiting( + "正在下载"); //创建一个showWaiting对象 + dtask.addEventListener('statechanged', function( + task, + status + ) { + // 给下载任务设置一个监听 并根据状态 做操作 + switch (task.state) { + case 1: + showLoading.setTitle("正在下载"); + break; + case 2: + showLoading.setTitle("已连接到服务器"); + break; + case 3: + prg = parseInt( + (parseFloat(task.downloadedSize) / + parseFloat(task.totalSize)) * + 100 + ); + showLoading.setTitle(" 正在下载" + prg + "% "); + break; + case 4: + plus.nativeUI.closeWaiting(); + //下载完成 + break; + } + }); + } catch (err) { + plus.nativeUI.closeWaiting(); + uni.showToast({ + title: '更新失败-03', + mask: false, + duration: 1500 + }); + } + +} \ No newline at end of file diff --git a/src/common/array.js b/src/common/array.js new file mode 100644 index 0000000..e87d780 --- /dev/null +++ b/src/common/array.js @@ -0,0 +1,320 @@ +// 详情和审批 +export function getDetailAndApproveOption() { + let option_detail = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '提交\n审批', + style: { + backgroundColor: '#00CC33' + } + }, + { + text: '关闭', + style: { + backgroundColor: '#ff0000' + } + } + ]; + return option_detail; +} +//详情、审批通过、审批驳回 +export function getDetailAndApprovePassAndApproveNoOption() { + let option_detail = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '审批\n通过', + style: { + backgroundColor: '#00CC33' + } + }, + { + text: '审批\n驳回', + style: { + backgroundColor: '#F56C6C' + } + }, + { + text: '关闭', + style: { + backgroundColor: '#ff0000' + } + } + ]; + return option_detail; +} +//详情、处理、审批不通过 +export function getDetailAndHandleOption() { + let option_detail = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '处理', + style: { + backgroundColor: '#00CC33' + } + }, + { + text: '关闭', + style: { + backgroundColor: '#ff0000' + } + } + ]; + return option_detail; +} +//详情、重新添加、关闭 +export function getDetailAndAddAndCloseOption() { + let option_detail = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '重新\n添加', + style: { + backgroundColor: '#E6A23C' + } + }, + { + text: '关闭', + style: { + backgroundColor: '#F56C6C' + } + } + ]; + return option_detail; +} +// 采购退货返回侧滑按钮 详情 、编辑、库位、移除 +export function getPurchaseReceiptOption(allowModifyQty, allowModifyLocation) { + var option = [] + option.push(...getDetailOption()) + if (allowModifyQty == "TRUE") { + option.push(...getEditOption()) + } + if (allowModifyLocation == "TRUE") { + option.push(...getLocationOption()) + } + option.push(...getRemoveOption()) + return option; +} + +//详情 +export function getDetailOption() { + let option_detail = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }]; + return option_detail; +} + +//详情移除(扫描后不允许修改数量) +export function getDetailRemoveOption() { + let option_detail_edit_remove = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '移除', + style: { + backgroundColor: '#F56C6C' + } + } + ]; + return option_detail_edit_remove; +} + +export function getRemoveOption() { + let option_detail_remove = [{ + text: '移除', + style: { + backgroundColor: '#F56C6C' + } + }]; + return option_detail_remove; +} + +export function getAddAgainOption() { + let option_detail_remove = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, { + text: '重新\n添加', + style: { + backgroundColor: '#E6A23C' + } + }]; + return option_detail_remove; +} + + + +export function getEditOption() { + let option_detail_edit = [{ + text: '编辑', + style: { + backgroundColor: '#F1A532' + } + }]; + return option_detail_edit; +} +export function getLocationOption() { + let option_detail_location = [{ + text: '库位', + style: { + backgroundColor: '#00A3FF' + } + }]; + return option_detail_location; +} + + +//清空 +export function getClearOption() { + let option_detail_edit_remove = [{ + text: '清空', + style: { + backgroundColor: '#F56C6C' + } + }]; + return option_detail_edit_remove; +} + + +//详情编辑移除 +export function getDetailEditRemoveOption() { + let option_detail_edit_remove = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '编辑', + style: { + backgroundColor: '#F1A532' + } + }, + { + text: '移除', + style: { + backgroundColor: '#F56C6C' + } + } + ]; + return option_detail_edit_remove; +} + + +//详情编辑放弃 +export function getDetailGiveupOption() { + let option_detail_giveup = [{ + text: '详情', + style: { + backgroundColor: '#3C9CFF' + } + }, + { + text: '放弃', + style: { + backgroundColor: '#F56C6C' + } + } + ]; + return option_detail_giveup; +} + + + +//详情编辑移除 +export function getEditRemoveOption() { + let option_edit_remove = [{ + text: '编辑', + style: { + backgroundColor: '#F1A532' + } + }, + { + text: '移除', + style: { + backgroundColor: '#F56C6C' + } + } + ]; + return option_edit_remove; +} + + +// 库存状态字典项 +export function getInventoryStatusArray() { + let array = [{ + text: '待检', + value: "INSP" + }, { + text: '合格', + value: "OK" + }, { + text: '不合格', + value: "NOK" + }, { + text: '隔离', + value: "HOLD" + }, { + text: '报废', + value: "SCRAP" + }] + return array; +} + +// 业务类型字典项 +export function getBusinessTypeArray() { + let array = [{ + text: '供应商发货', + value: "SupplierDeliver" + }, { + text: '采购收货', + value: "PurchaseReceipt" + }, { + text: '采购退货', + value: "PurchaseReturn" + }, { + text: '采购上架', + value: "PurchasePutaway" + }] + return array; +} + +export function getLocationTypeArray(data) { + var list = [] + if (data == undefined || data == null || data == "") { + return list + } + + if (data.indexOf(',') < 0) { + list.push(data) + } else { + var arrayItems = data.split(',') + arrayItems.forEach(res => { + list.push(res) + }) + } + + return list +} diff --git a/src/common/balance.js b/src/common/balance.js new file mode 100644 index 0000000..1a53c9f --- /dev/null +++ b/src/common/balance.js @@ -0,0 +1,477 @@ +import { + getManagementPrecision, + getPrecisionStrategy, + getBalanceByFilter +} from '@/api/request2.js'; + +/** + * + 获取管理精度查询策略参数 + * @param {*} + * + */ +export function getPrecisionStrategyParams(detailSource) { + var itemList = [] + detailSource.forEach(item => { + item.subList.forEach(detail => { + if (detail.scaned) { + var filterResult = itemList.filter(res => { + if (res.itemCode == item.itemCode && + res.locationCode == detail.toLocationCode) { + return res + } + }) + //去掉重复元素 + if (filterResult.length == 0) { + var result = { + itemCode: item.itemCode, + locationCode: detail.toLocationCode + } + itemList.push(result) + } + + } + }) + }) + return itemList; +} +/** + * + 获取管理精度查询策略参数 + * @param {*} + * + */ +export function getPrecisionStrategyParamsByLocation(detailSource, toLocationCode) { + var itemList = [] + detailSource.forEach(item => { + item.subList.forEach(detail => { + if (detail.scaned) { + detail.toLocationCode = toLocationCode; + var filterResult = itemList.filter(res => { + if (res.itemCode == item.itemCode && + res.locationCode == detail.toLocationCode) { + return res + } + }) + //去掉重复元素 + if (filterResult.length == 0) { + var result = { + itemCode: item.itemCode, + locationCode: detail.toLocationCode + } + itemList.push(result) + } + + } + }) + }) + return itemList; +} + +/** + * "itemCode": [], + "locationCode":"INSPECT" + 管理精度策略 + * @param {*} + * + */ +export function getPrecisionStrategyList(itemList, callback) { + // let jsonParem = JSON.stringify(param) + let result = { + list: [], + success: true, + message: '' + }; + + getPrecisionStrategy(itemList).then(res => { + if (res.data == null) { + result.success = false + result.message = '未查询到管理精度信息' + } else { + result.list = res.data; + } + callback(result); + }).catch(error => { + result.success = false; + result.message = error; + callback(result); + }) +} + +/** + * "itemCode": [], + "locationCode":"INSPECT" + 管理精度策略 + * @param {*} + * + */ +export function getManagementPrecisions(itemCodes, locationCode, callback) { + // let jsonParem = JSON.stringify(param) + let result = { + list: [], + success: true, + message: '' + }; + + var params = { + itemCodes: itemCodes, + locationCode: locationCode + } + getManagementPrecision(params).then(res => { + if (res.data == null) { + result.success = false + result.message = '未查询到管理精度信息' + } else { + result.list = res.data; + } + callback(result); + }).catch(error => { + result.success = false; + result.message = error; + callback(result); + }) +} + +export function getBalanceByManagementPrecision(label, locationCode, fromInventoryStatuses, callback) { + let result = { + list: [], + success: true, + message: '' + }; + let params = { + itemCodes: [label.itemCode], + locationCode: locationCode + }; + // let jsonParem = JSON.stringify(param) + getManagementPrecision(params).then(res => { + let managementPrecision = res.data[0].ManagementPrecision; + switch (managementPrecision) { + case 'BY_PACKAGING': + byPacking(label, locationCode, fromInventoryStatuses, res => { + res.managementPrecision = managementPrecision; + callback(res); + }); + break; + case 'BY_BATCH': + byBatch(label, locationCode, fromInventoryStatuses, res => { + res.managementPrecision = managementPrecision; + callback(res); + }); + break; + case 'BY_QUANTITY': + byQuantity(label, locationCode, fromInventoryStatuses, res => { + res.managementPrecision = managementPrecision; + callback(res); + }); + break; + case 'BY_UNIQUEID': + byUniqueId(label, fromInventoryStatuses, res => { + res.managementPrecision = managementPrecision; + callback(res); + }); + break; + } + }).catch(error => { + let result = { + success: false, + message: error + }; + callback(result); + }) +} +/** 按包装管理查询库存 + * @param {Object} label + * @param {Object} locationCode + * @param {Object} callback + */ +export function byPacking(label, locationCode, fromInventoryStatuses, callback) { + let result = { + success: true, + message: '', + data: {} + }; + var filters = [] + filters.push({ + column: "packingNumber", + action: "==", + value: label.packingNumber + }) + filters.push({ + column: "itemCode", + action: "==", + value: label.itemCode + }) + filters.push({ + column: "batch", + action: "==", + value: label.batch + }) + filters.push({ + column: "locationCode", + action: "==", + value: locationCode + }) + if (fromInventoryStatuses != null && fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: fromInventoryStatuses + }) + } + + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + getBalanceByFilter(params).then(res => { + if (res.data == null) { + result.success = false; + result.message = + "按包装管理查询、未查询到物料号[" + label.itemCode + "]" + + "到箱码[" + label.packingNumber + "]" + + "批次[" + label.batch + "]" + + "库位[" + label.locationCode + "]的信息" + } else { + result.success = true; + result.data = res.data; + } + + callback(result) + }).catch(err => { + result.success = false; + result.data = null; + result.message = err; + callback(result) + }) +} +/** 按批次管理查询库存 + * @param {Object} label + * @param {Object} locationCode + * @param {Object} callback + */ +export function byBatch(label, locationCode, fromInventoryStatuses, callback) { + var filters = [] + filters.push({ + column: "itemCode", + action: "==", + value: label.itemCode + }) + filters.push({ + column: "batch", + action: "==", + value: label.batch + }) + filters.push({ + column: "packingNumber", + action: "==", + value: null + }) + filters.push({ + column: "locationCode", + action: "==", + value: locationCode + }) + + if (fromInventoryStatuses != null && fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: fromInventoryStatuses + }) + } + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + + let result = { + success: true, + message: '', + data: {} + }; + getBalanceByFilter(params).then(res => { + if (res.data == null) { + result.success = false; + result.message = + "按批次管理查询、未查询到物料号[" + label.itemCode + "]" + + "批次[" + label.batch + "]" + + "库位[" + label.locationCode + "]的信息" + } else { + result.success = true; + result.data = res.data; + } + callback(result) + }).catch(err => { + result.success = false; + result.data = null; + result.message = err.message; + callback(result) + }) +} +/** 按数量管理查询库存 + * @param {Object} label + * @param {Object} locationCode + * @param {Object} callback + */ +export function byQuantity(label, locationCode, fromInventoryStatuses, callback) { + let result = { + success: true, + message: '', + data: {} + }; + + var filters = [] + filters.push({ + column: "itemCode", + action: "==", + value: label.itemCode + }) + filters.push({ + column: "packingNumber", + action: "==", + value: null + }) + filters.push({ + column: "batch", + action: "==", + value: null + }) + filters.push({ + column: "locationCode", + action: "==", + value: locationCode + }) + + if (fromInventoryStatuses != null && fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: fromInventoryStatuses + }) + } + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + + getBalanceByFilter(params).then(res => { + if (res.data == null) { + result.success = false; + result.message = + "按数量管理查询、未查询到物料号[" + label.itemCode + "]" + + "库位[" + label.locationCode + "]的信息" + } else { + result.success = true; + result.data = res.data; + } + callback(result) + }).catch(err => { + result.success = false; + result.data = null; + result.message = err.message; + callback(result) + }) +} +/** 按唯一码管理查询库存 + * @param {Object} label + * @param {Object} locationCode + * @param {Object} callback + */ +export function byUniqueId(label, locationCode, fromInventoryStatuses, callback) { + let param = { + packingNumber: label.packingNumber + }; + let result = { + success: true, + message: '', + data: {} + }; + + var filters = [] + filters.push({ + column: "packingNumber", + action: "==", + value: label.packingNumber + }) + + if (fromInventoryStatuses != null && fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: fromInventoryStatuses + }) + } + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + + getBalanceByFilter(params).then(res => { + if (res.data == null) { + result.success = false; + result.message = + "按唯一码管理查询、未查询到箱码[" + label.packingNumber + "]" + + "的信息" + } else { + result.success = true; + result.data = res.data; + } + callback(result) + }).catch(err => { + result.success = false; + result.data = null; + result.message = err.message; + callback(result) + }) +} +/** + * 查询指定库位下的库存 + * @param {*} param + * @param {*} callback + */ +export function balanceByLocation(locationCode, callback) { + let result = { + success: true, + message: '', + data: {} + }; + + var filters = [] + filters.push({ + column: "locationCode", + action: "==", + value: locationCode + }) + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + + getBalanceByFilter(params).then(res => { + if (res.data == null) { + result.success = false; + result.message = + "按唯一码管理查询、未查询到库位[" + label.locationCode + "]" + + "的信息" + } else { + result.success = true; + result.data = res.data; + } + callback(result) + }).catch(err => { + result.success = false; + result.data = null; + result.message = err.message; + callback(result) + }) +} diff --git a/src/common/basic.js b/src/common/basic.js new file mode 100644 index 0000000..d770a26 --- /dev/null +++ b/src/common/basic.js @@ -0,0 +1,1014 @@ +let maxPageSize = 1000; +export { + maxPageSize +} + +import { calc } from '@/common/calc' + +let jobStatusList = []; +let itemStatusList = []; +let locationAreaTypeList = []; +let uomList = []; +let inventoryStatusList = []; +let containerTypeList = []; +let packUnitList = []; +let requestStatusList = []; +let unplannedReceiptReasonList = []; +let unplannedIissueReason = []; +let scrapReasonList = []; +let inspectFailedReasonList = []; + + + +//获取字典信息 +export function clearCacheData() { + jobStatusList = []; + itemStatusList = []; + locationAreaTypeList = []; + uomList = []; + inventoryStatusList = []; + containerTypeList = []; + packUnitList = []; + requestStatusList = []; + unplannedReceiptReasonList = []; + unplannedIissueReason = []; + scrapReasonList = []; + inspectFailedReasonList = []; + +} + +//获取字典信息 +export function getDirectoryInfo(type) { + var result = []; + var list = uni.getStorageSync("dictionary") + if (list != undefined && list.length > 0) { + for (let item of list) { + if (item.type == type) { + result = item.subList + break; + } + } + } + + return result +} + + + +//将字典项转为数组 +export function getDirectoryItemArray(data) { + var array = [] + if (data == undefined || data == null || data == "") { + return array + } + + if (data.indexOf(',') < 0) { + array.push(data) + } else { + var arrayItems = data.split(',') + arrayItems.forEach(res => { + array.push(res) + }) + } + return array +} + +//查询字典项是否在列表中 +export function checkDirectoryItemExist(list, type) { + let exist = false; + if (list == null || list.length == 0) { + exist = true; + } else { + var temp = list.filter(res => { + if (res == type) { + return res + } + }) + if (temp != undefined && temp.length > 0) { + exist = true + } + } + return exist +} + +//获取任务状态 +export function getJobStateInfo(value) { + var resultInfo = ""; + if (jobStatusList.length == 0) { + jobStatusList = getDirectoryInfo("job_status") + } + if (jobStatusList.length > 0) { + for (let item of jobStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取任务状态样式 +export function getJobStateStyle(value) { + let item = getJobStateInfo(value); + if (item == null || item == '') { + return 'other' + } else { + if (item.remark == '') { + return 'other' + } else { + return item.remark; + } + } +} + +//获取库位描述 +export function getListLocationTypeDesc(lst) { + let desc = ''; + lst.forEach(res => { + desc += getLocationTypeInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取物品状态 +export function getItemStateInfo(value) { + var resultInfo = ""; + if (itemStatusList.length == 0) { + itemStatusList = getDirectoryInfo("item_status") + } + if (itemStatusList.length > 0) { + for (let item of itemStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库位类型 +export function getLocationTypeInfo(value) { + var resultInfo = ""; + if (locationAreaTypeList.length == 0) { + locationAreaTypeList = getDirectoryInfo("location_type") + } + if (locationAreaTypeList.length > 0) { + for (let item of locationAreaTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库位类型名称 +export function getLocationTypeName(value) { + let location = getLocationTypeInfo(value); + + return location == '' ? value : location.label; +} + +//获取计量单位 +export function getUomInfo(value) { + var resultInfo = ""; + if (uomList.length == 0) { + uomList = getDirectoryInfo("uom") + } + if (uomList.length > 0) { + for (let item of uomList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取包装单位 +export function getPackUnitInfo(value) { + var resultInfo = ""; + if (packUnitList.length == 0) { + packUnitList = getDirectoryInfo("pack_unit") + } + if (packUnitList.length > 0) { + for (let item of packUnitList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取申请状态 +export function getRequestStateInfo(value) { + var resultInfo = ""; + if (requestStatusList.length == 0) { + requestStatusList = getDirectoryInfo("request_status") + } + if (requestStatusList.length > 0) { + for (let item of requestStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库存状态 +export function getInventoryStatusInfo(value) { + var resultInfo = ""; + if (inventoryStatusList.length == 0) { + inventoryStatusList = getDirectoryInfo("inventory_status") + } + if (inventoryStatusList.length > 0) { + for (let item of inventoryStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库存样式 +export function getInventoryStatusStyle(value) { + let item = getInventoryStatusInfo(value); + if (item == null || item == '') { + return 'other' + } else { + if (item.remark == '') { + return 'other' + } else { + return item.remark; + } + } +} + +//获取库存状态 +export function getInventoryStatusName(value) { + let item = getInventoryStatusInfo(value); + if (item == null || item == '') { + return value + } else { + if (item.label == '') { + return value + } else { + return item.label; + } + } +} + + +//获取状态描述 +export function getInventoryStatusDesc(lst) { + let desc = ''; + lst.forEach(res => { + desc += getInventoryStatusInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + + +//获取器具状态 +export function getContainerStatusInfo(value) { + var resultInfo = ""; + if (containerTypeList.length == 0) { + containerTypeList = getDirectoryInfo("container_type") + } + if (containerTypeList.length > 0) { + for (let item of containerTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取计划外入库原因 +export function getUnPlannedReceiptReasonList(value) { + if (unplannedReceiptReasonList.length == 0) { + unplannedReceiptReasonList = getDirectoryInfo("unplanned_receipt_reason") + } + unplannedReceiptReasonList.forEach(res => { + res.text = res.label; + res.value = res.code + }) + return unplannedReceiptReasonList +} + +//获取计划外出库原因 +export function getUnPlannedIssuseReasonList(value) { + if (unplannedIissueReason.length == 0) { + unplannedIissueReason = getDirectoryInfo("unplanned_issue_reason") + } + unplannedIissueReason.forEach(res => { + res.text = res.label; + res.value = res.code + }) + return unplannedIissueReason +} + + +//获取检验不合格原因 +export function getInspectReasonList(value) { + if (inspectFailedReasonList.length == 0) { + inspectFailedReasonList = getDirectoryInfo("inspect_failed_reason") + } + inspectFailedReasonList.forEach(res => { + res.text = res.label; + res.value = res.code + }) + return inspectFailedReasonList +} + + +// //数量状态 +// export function getCoutJobStatuStyle(val) { +// if (val == 1) return 'state_inspect' +// else if (val == 2) return 'state_ok' +// else if (val == 3) return 'state_nook' +// else return 'other' +// } + +// export function getCountJobStatuDesc(val) { +// if (val == 1) return '待检' +// else if (val == 2) return '合格' +// else if (val == 3) return '不合格' +// else return "未知" +// } + +// export function getPartCodeState(val) { +// if (val == 0) return '可用' +// else if (val == 1) return '新增' +// else if (val == 2) return '隔离' +// else if (val == 3) return '未知' +// else return '未知' +// } + +// export function getLocationState(val) { +// if (val == 'kwlxINSP') return '待检库' +// else if (val == 'kwlxRAW') return '原料库' +// else if (val == 'kwlxSEMI') return '半成品库' +// else if (val == 'kwlxFG') return '成品库' +// else if (val == 'kwlxWIP') return '线边库' +// else if (val == 'kwlxHOLD') return '隔离库' +// else if (val == 'kwlxSCRAP') return '报废库' +// else if (val == 'kwlxNOK') return '不合格品库' +// else if (val == 'kwxOVERFLOW') return '溢出库' +// else if (val == 'kwlxCUsT') return '客户寄售库' +// else if (val == 'kwlxOUTSIDE') return '外库' +// else if (val == 'kwlxDIFF') return '盘点差异库' +// else if (val == 'kwxTRANSPORT') return '在途库' +// else return '未知' + +// } + +// export function getLocationStyle(val) { +// if (val == 'kwlxRAW') return 'state_raw' +// else if (val == 'kwlxFG') return 'state_fg' +// else if (val == 'kwlxSEMI') return 'state_semi' +// else if (val == 'kwlxHOLD') return 'state_hold' +// else if (val == 4) return 'state_unk' +// } + +// //任务状态 +// export function getJobStatuStyle(val) { +// if (val == 'JOB_PENDING') return 'job_state_un-doing' +// else if (val == '1') return 'job_state_doing' +// else if (val == 'reztDONE') return 'job_state_completed' +// else if (val == 'rwztCLOSED') return 'job_state_close' +// else if (val == 'rwztCANCELLED') return 'job_state_cancelled' +// else return 'unk' +// } +// //任务状态 +// //open pending completed close +// export function getJobStatuDesc(val) { +// if (val == 'JOB_PENDING') return '待处理' +// else if (val == '1') return '执行中' +// else if (val == 'reztDONE') return '完成' +// else if (val == 'rwztCLOSED') return '关闭' +// else if (val == 'rwztCANCELLED') return '作废' +// else return '其他' +// } + +// //检验任务状态 +// export function getInspectTypeStyle(val) { +// if (val == 0) return 'unk' +// else if (val == 1) return 'exempt' +// else if (val == 2) return 'full' +// else if (val == 3) return 'sampling' +// else if (val == 4) return 'pick' +// else return 'other' +// } +// //open pending completed close +// export function getInspectTypeDesc(val) { +// if (val == 0) return '未知' +// else if (val == 1) return '免检' +// else if (val == 2) return '全检' +// else if (val == 3) return '抽检' +// else if (val == 4) return '挑选' +// else return '其他' +// } + + +// //库存状态 +// export function getInventoryStatusStyle(val) { +// if (val == 'kcztUNK') return 'unk' +// else if (val == 'kcztINSP') return 'inventory_status_insp' +// else if (val == 'kcztOK') return 'inventory_status_ok' +// else if (val == 'kcztNOK') return 'inventory_status_nok' +// else if (val == 'kcztHOLD') return 'inventory_status_hold' +// else if (val == 'kcztSCRAP') return 'inventory_status_scarp' +// else return 'other' +// } + + +// //库存状态 +// export function getInventoryStatusDesc(val) { +// if (val == 'kcztUNK') return '未知' +// else if (val == 'kcztINSP') return '待检' +// else if (val == 'kcztOK') return '合格' +// else if (val == 'kcztNOK') return '不合格' +// else if (val == 'kcztHOLD') return '隔离' +// else if (val == 'kcztSCRAP') return '报废' +// else return '其他' +// } + +// //库存状态 +// export function getInventoryStatusStyle(val) { +// if (val == 0) return 'unk' +// else if (val == 1) return 'insp' +// else if (val == 2) return 'ok' +// else if (val == 3) return 'nok' +// else if (val == 4) return 'hold' +// else if (val == 5) return 'scarp' +// else if (val == 6) return 'frozen' +// else if (val == 31) return 'nok' +// else return 'other' +// } + + +// //库存状态kcztINSP +// export function getInventoryStatusDesc(val) { +// if (val == 0) return '未知' +// else if (val == 1) return '待检' +// else if (val == 2) return '合格' +// else if (val == 3) return '不合格' +// else if (val == 4) return '隔离' +// else if (val == 5) return '报废' +// else if (val == 6) return '冻结' +// else if (val == 31) return '不合格' +// // else if (val == 31) return '目检不合格' +// else return '其他' +// } + +// //物料状态 +// export function getItemStatusStyle(val) { +// if (val == "wpztUNK") return 'item_unk' +// else if (val == "wpztENABLE") return 'item_active' +// else if (val == "wpztHOLD") return 'item_hold' +// else if (val == "wpztNEW") return 'item_new' +// else if (val == "wpztPLAN") return 'item_plan' +// else if (val == "wpztDISABLE") return 'item_disable' +// else return 'other' +// } + +// export function getItemStatusStyle(val) { +// if (val == 0) return 'unk_item' +// else if (val == 1) return 'active_item' +// else if (val == 2) return 'hold_item' +// else if (val == 3) return 'new_item' +// else if (val == 4) return 'plan_item' +// else if (val == 5) return 'disable_item' +// else return 'other' +// } + + +// //物料状态描述 +// export function getItemStatusDesc(val) { +// if (val == "wpztUNK") return '未知' +// else if (val == "wpztENABLE") return '可用' +// else if (val == "wpztHOLD") return '隔离' +// else if (val == "wpztNEW") return '新增' +// else if (val == "wpztPLAN") return '规划' +// else if (val == "wpztDISABLE") return '禁用' +// else return '其他' +// } + +// //盘点状态 +// export function getCountStageTypeStyle(val) { +// if (val == 0) return 'unk' +// else if (val == 1) return 'initial' +// else if (val == 2) return 'afresh' +// else if (val == 3) return 'supervision' +// else return 'other' +// } + + +// //盘点状态 +// export function getCountStageDesc(val) { +// if (val == 0) return '未知' +// else if (val == 1) return '初盘' +// else if (val == 2) return '重盘' +// else if (val == 3) return '监盘' +// else return '其他' +// } + +// //盘点计划类型 +// export function getCheckTypeDesc(val) { +// if (val == 0) return '未知' +// else if (val == 1) return '周期盘点' +// else if (val == 2) return '物理盘点' +// else return '其他' +// } + +// //盘点方式 +// export function getCountMethodDesc(val) { +// if (val == 0) return '未知' +// else if (val == 1) return '库位盘点' +// else if (val == 2) return '物品盘点' +// else if (val == 3) return '库位物料盘点' +// else return '其他' +// } + +// //获取库位类型 +// export function getLocationType(val) { +// if (val == 'kwlxINSP') return 'location_inspect' +// else if (val == 'kwlxRAW') return 'location_raw' +// else if (val == 'kwlxSEMI') return 'location_semi' +// else if (val == 'kwlxFG') return 'location_fg' +// else if (val == 'kwlxWIP') return 'location_wip' +// else if (val == 'kwlxHOLD') return 'location_hold' +// else if (val == 'kwlxSCRAP') return 'location_scrap' +// else if (val == 'kwlxNOK') return 'location_nok' +// else if (val == 'kwxOVERFLOW') return 'location_overflow' +// else if (val == 'kwlxCUsT') return 'location_cust' +// else if (val == 'kwlxOUTSIDE') return 'location_outside' +// else if (val == 'kwlxDIFF') return 'location_diff' +// else if (val == 'kwxTRANSPORT') return 'location_transport' +// else return 'location_other' +// } + +// //获取库位类型描述 +// export function getLocationTypeDesc(val) { +// if (val == 'kwlxINSP') return '待检库' +// else if (val == 'kwlxRAW') return '原料库' +// else if (val == 'kwlxSEMI') return '半成品库' +// else if (val == 'kwlxFG') return '成品库' +// else if (val == 'kwlxWIP') return '线边库' +// else if (val == 'kwlxHOLD') return '隔离库' +// else if (val == 'kwlxSCRAP') return '报废库' +// else if (val == 'kwlxNOK') return '不合格品库' +// else if (val == 'kwxOVERFLOW') return '溢出库' +// else if (val == 'kwlxCUsT') return '客户寄售库' +// else if (val == 'kwlxOUTSIDE') return '外库' +// else if (val == 'kwlxDIFF') return '盘点差异库' +// else if (val == 'kwxTRANSPORT') return '在途库' +// else return '其他' + +// } + +// //获取任务类型描述 +// export function getJobType(val) { +// if (val == 0) return 'uno' +// else if (val == 1) return 'PurchaseReceiptJob' //采购收货 +// else if (val == 2) return 'PurchaseReturnJob' //采购退货任务 +// else if (val == 3) return 'InspectJob' //检验任务 +// else if (val == 4) return 'PutawayJob' //上架任务 +// else if (val == 5) return 'ProductReceiveJob' //完工收货任务 +// else if (val == 6) return 'IssueJob' //发料任务 +// else if (val == 7) return 'DeliverJob' //发货任务 +// else if (val == 8) return 'CheckJob' //校验任务 +// else if (val == 9) return 'CountJob' //盘点任务 +// else return 'Other' +// } + +export function getPackingNumberAndBatchByList(managementList, itemCode, packingNumber, locationCode, batch) { + var itemInfo = { + packingNumber: "", + batch: "" + } + var manageType = queryManageModelByList(managementList, itemCode, locationCode) + if (manageType == "BY_QUANTITY") { + itemInfo.packingNumber = "" + itemInfo.batch = "" + } else if (manageType == "BY_BATCH") { + itemInfo.packingNumber = "" + itemInfo.batch = batch + } else if (manageType == "BY_PACKAGING") { + itemInfo.packingNumber = packingNumber + itemInfo.batch = batch + } else if (manageType == "BY_UNIQUE_ID") { + itemInfo.packingNumber = packingNumber + itemInfo.batch = batch + } else if (manageType == "") { + itemInfo.packingNumber = packingNumber + itemInfo.batch = batch + } + return itemInfo; +} + +export function queryManageModelByList(managementList, itemCode, locationCode) { + var result = managementList.find(res => { + if (res.itemCode == itemCode && res.locationCode == locationCode) { + return res.ManagementPrecision + } + }) + + if (result != undefined) { + return result.ManagementPrecision + } else { + return "" + } +} + + +// 获取业务类型字典项 +export function getBusinessTypeDesc(type) { + if (type == "SupplierDeliver") { + return "供应商发货" + } else if (type = "PurchaseReceipt") { + return "采购收货"; + } else if (type = "PurchaseReturn") { + return "采购退货"; + } else if (type = "PurchasePutaway") { + return "采购上架"; + } +} + + +export function queryManageModel(managementList, itemCode) { + var result = managementList.filter(res => { + if (res.itemCode == itemCode) { + return res.ManagementPrecision + } + }) + + if (result != undefined) { + return result[0].ManagementPrecision + } else { + return "" + } +} + +export function getPackingNumberAndBatch(managementList, itemCode, packingNumber, batch) { + var itemInfo = { + packingNumber: "", + batch: "" + } + + var manageType = queryManageModel(managementList, itemCode) + if (manageType == "BY_QUANTITY") { + itemInfo.packingNumber = "" + itemInfo.batch = "" + } else if (manageType == "BY_BATCH") { + itemInfo.packingNumber = "" + itemInfo.batch = batch + } else if (manageType == "BY_PACKAGING") { + itemInfo.packingNumber = packingNumber + itemInfo.batch = batch + } else if (manageType == "BY_UNIQUE_ID") { + itemInfo.packingNumber = packingNumber + itemInfo.batch = batch + } + return itemInfo; +} + +// //提示是否消息 +// export function showConfirmMsg(content, callback) { +// uni.showModal({ +// title: '提示', +// cancelText: '否', +// confirmText: '是', +// content: content, +// success: function(res) { +// if (res.confirm) { +// callback(true); +// } else { +// callback(false); +// } +// }, +// }) +// scanErrorAudio(); +// } + +export function compareTime() { + return function(a, b) { + // 按照时间降序 + return Date.parse(a.time) - Date.parse(a.time) + } +} +//升序 +export function compareAsc(key) { + return function(a, b) { + var val1 = a[key]; + var val2 = b[key]; + return val1 - val2; + } +} +//倒序 +export function compareDesc(key) { + return function(a, b) { + var val1 = a[key]; + var val2 = b[key]; + return val2 - val1; + } +} + +export function goHome() { + uni.reLaunch({ + url: '/pages/index/index' + }).catch((e) => {}); + +} +/** + * 获取当天时间2023-11-07 00:00:00-->2023-11-07 23:59:59 + */ +export function getTodayDate() { + var startTime = new Date(new Date().toLocaleDateString()).getTime(); + var endTime = startTime + 24 * 60 * 60 * 1000 - 1 + console.log("获取时间", startTime + "," + endTime) + return startTime + "," + endTime; +} + +export function getCurrDateOneMonthsTimes() { + var end = Date.now() + // var end = new Date('2019/12/31 15:18').getTime() + var day = 31 + var enda = new Date(end); + var endm = enda.getMonth() + 1; + var d = enda.getDate(); + if (endm == 4 || endm == 6 || endm == 9 || endm == 11) { + day = 30 + } else { + if (d == 31) { + day = 30 + } + if (endm == 7 || endm == 12) { + day = 31 + } + } + if (endm == 1) { + var endy = enda.getFullYear(); + day = 31 + if (d == 31) { + day = 28 + } + if (d == 30) { + day = 29 + } + if (d == 29) { + day = 30 + } + if (endy % 4 == 0) { + day = 31 + if (d == 31) { + day = 29 + } + if (d == 30) { + day = 30 + } + if (d == 29) { + day = 31 + } + } + } + if (endm == 2) { + var endy = enda.getFullYear(); + day = 28 + if (endy % 4 == 0) { + day = 29 + } + } + var start = 1000 * 60 * 60 * 24 * day + var interval = end + start; + return interval; +} + + +export function getCurrDateTimes() { + var time = (new Date()).getTime(); + return time; +} + +export function getBatch() { + var date = new Date(); + var year = date.getFullYear(); //年 + var month = date.getMonth() + 1; //月 + var day = date.getDate(); //日 + var batch = year.toString() + month.toString() + day.toString() + return batch; +} + +export function getCurrDate() { + var date = new Date(); + return getDate(date); +} + +export function getCurrDateTime() { + var date = new Date(); + return getDate(date) + " " + getTime(date); +} + +export function getISODateTime() { + var date = new Date(); + return getDate(date) + "T" + getTime(date) + "Z"; +} + +//格式化处理 +export function dateFormat(time) { + var result = "" + if (time != null) { + let date = new Date(time); + result = getDate(date) + " " + getTime(date); + } + + return result; +} + +//获取日期部分 +export function getDate(date) { + var year = date.getFullYear(); //年 + var month = date.getMonth() + 1; //月 + var day = date.getDate(); //日 + + month = month < 10 ? "0" + month : month; + day = day < 10 ? "0" + day : day; + return year + "-" + month + "-" + day; +} + +//获取时间部分 +export function getTime(date) { + let hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); + let minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); + let seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); + // 拼接 + return hours + ":" + minutes + ":" + seconds; +} + +//将20220713转成2022-07-13 +export function toYYYY_MM_DD(value) { + return value.substring(0, 4) + "-" + value.substring(4, 6) + "-" + value.substring(6, 8) +} + +export function getRootFontSize() { + const self = this; + var fontSize = getApp().globalData.rootFontSize; + if (fontSize) { + return fontSize; + } else { + fontSize = uni.getStorageSync('root_font_size'); + if (fontSize) { + getApp().globalData.rootFontSize = fontSize; + } else { + fontSize = '20px'; //默认字体大小 + self.setRootFontSize(fontSize); + } + return fontSize; + + } +} + +export function getRemoveOption() { + let options = [{ + text: '移除', + style: { + backgroundColor: '#F56C6C' + } + }] + return options; +} + +export function setRootFontSize(fontSize) { + uni.setStorageSync('root_font_size', fontSize); + getApp().globalData.rootFontSize = fontSize; +} + + +export function scanErrorAudio() { + var music = null; + music = uni.createInnerAudioContext(); //创建播放器对象 + music.src = "../../static/video/error.wav"; + music.volume = 1; + music.play(); //执行播放 + music.onEnded(() => { + //播放结束 + music = null; + }); +} + + +export function newMessageAudio() { + var music = null; + music = uni.createInnerAudioContext(); //创建播放器对象 + music.src = "../../static/video/error.wav"; + music.volume = 1; + music.play(); //执行播放 + music.onEnded(() => { + //播放结束 + music = null; + }); +} + + +export function vibrate() { + uni.vibrateLong({ + success: function() { + + } + }) +} + + +export function getDataSource(subList) { + let items = []; + subList.forEach(detail => { + var item = items.find(r => + r.itemCode == detail.itemCode) + if (item == undefined) { + item = createItemInfo(detail); + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + items.push(item) + } else { + item.qty = calc.add(item.qty,detail.qty) + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + } + }) + return items; +} + +export function createItemInfo(res) { + let item = { + itemCode: res.itemCode, + itemName: res.itemName, + packQty: Number(res.packQty), + packUnit: res.packUnit, + qty: Number(res.qty), + handleQty: 0, + uom: res.uom, + subList: [] + } + return item; +} + +export function createDetailInfo(data) { + data.scaned = false; + // data.record = {}; + let detail = data; + return detail; +} + +export function updateTitle(title) { + uni.setNavigationBarTitle({ + title: title + }) +} + +export function clearTirmAndWrap(content) { + return content.replace(/<\/?.+?\/?>|\r|\n|\s*/g, '') +} + +export function navigateBack(backIndex) { + let canNavBack = getCurrentPages() + if (canNavBack && canNavBack.length - 1 > backIndex) { + uni.navigateBack({ + delta: backIndex + }) + } else { + history.back(); + } +} +/** + * 深度克隆对象 + * @param {*} target + */ +export function deepCopyData(target) { + // 克隆原始类型和null + if (!(target !== null && (typeof target === 'object' || typeof target === 'function'))) { + return target; + } + + let cloneTarget = Array.isArray(target) ? [] : {}; + // 克隆对象和数组 + for (const key in target) { + cloneTarget[key] = deepCopyData(target[key]); + } + + return cloneTarget; +} diff --git a/src/common/calc.js b/src/common/calc.js new file mode 100644 index 0000000..2b48e48 --- /dev/null +++ b/src/common/calc.js @@ -0,0 +1,17 @@ +/* 解决js计算精度问题 */ +import { Decimal } from 'decimal.js';//引入 +class Calc { + add(num1,num2) { + return new Decimal(num1).add(new Decimal(num2)).toNumber() + } + sub(num1,num2) { + return new Decimal(num1).sub(new Decimal(num2)).toNumber() + } + mul(num1,num2) { + return new Decimal(num1).mul(new Decimal(num2)).toNumber() + } + div(num1,num2) { + return new Decimal(num1).div(new Decimal(num2)).toNumber() + } +} +export const calc = new Calc(); \ No newline at end of file diff --git a/src/common/classify.data.js b/src/common/classify.data.js new file mode 100644 index 0000000..e59359c --- /dev/null +++ b/src/common/classify.data.js @@ -0,0 +1,42 @@ +export default [{ + "name": "泡沫", + "children": [{ + "name": "泡沫点检", + "icon": "/menu_search_lj.svg", + "path": "/pages/foam/check", + "index": 1, + }, + { + "name": "原料投入(泡沫)", + "icon": "/menu_search_lj.svg", + "path": "/pages/plastics/input", + "index": 2, + } + + ] + }, + + { + "name": "注塑", + "children": [{ + "name": "注塑点检", + "icon": "/menu_search_lj.svg", + "path": "/pages/plastics/check", + "index": 1, + }, + { + "name": "原料投入(注塑)", + "icon": "/menu_search_lj.svg", + "path": "/pages/plastics/input", + "index": 2, + }, + + ] + } + + + + + + +] \ No newline at end of file diff --git a/src/common/detail.js b/src/common/detail.js new file mode 100644 index 0000000..9cfb545 --- /dev/null +++ b/src/common/detail.js @@ -0,0 +1,147 @@ +import { + calc +} from '@/common/calc' + +import { + Decimal +} from 'decimal.js'; //引入 + + + +export function getTreeDataSource(dataList) { + let items = []; + + let parentList = dataList.filter(r => r.parentPackingNumber == null || r + .parentPackingNumber == ''); + let childList = dataList.filter(r => r.parentPackingNumber != '' && r.parentPackingNumber != null); + + parentList.forEach(detail => { + var item = items.find(r => + r.itemCode == detail.itemCode) + if (item == undefined) { + item = createItemInfo(detail); + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + items.push(item) + } else { + item.qty = calc.add(item.qty, detail.qty) + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + } + }) + + if (childList.length > 0) { + items.forEach(r => + r.subList.forEach(s => { + s.packList = childList.filter(c => c.parentPackingNumber == s.packingNumber) + s.packList.forEach(pac=>{ + pac.scaned=false; + }) + }) + ) + } + + return items; +} + +export function getDataSource(subList) { + let items = []; + subList.forEach(detail => { + var item = items.find(r => + r.itemCode == detail.itemCode) + if (item == undefined) { + item = createItemInfo(detail); + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + items.push(item) + } else { + item.qty = calc.add(item.qty, detail.qty) + let newDetail = createDetailInfo(detail); // + item.subList.push(newDetail); + } + }) + return items; + } + +export function createItemInfo(detail) { + let item = { + itemCode: detail.itemCode, + itemName: detail.itemName, + packQty: Number(detail.packQty) || undefined, + packUnit: detail.packUnit, + qty: Number(detail.qty), + handleQty: 0, + uom: detail.uom, + subList: [] + } + return item; +} + +export function createDetailInfo(data) { + data.scaned = false; + let detail = data; + detail.packList = []; + return detail; +} + +//根据明细创建记录 +export function createRecordInfo(detail, balance) { + var record = {} + // let record = JSON.parse(JSON.stringify(detail)); + //克隆对象,深度克隆,防止双向绑定同一个变量 + Object.assign(record, detail) + detail.scaned = true; + detail.balance = balance; + detail.recommendInventoryStatus = detail.inventoryStatus; + detail.inventoryStatus = balance.inventoryStatus; + record.qty = Number(balance.qty); + return record; +} + +//计算实际数量 +export function calcHandleQty(detailSource) { + for (let item of detailSource) { + item.handleQty = new Decimal(0).toNumber(); + item.qty = new Decimal(0).toNumber(); + for (let detail of item.subList) { + if (detail != undefined && detail.scaned) { + item.handleQty = calc.add(item.handleQty, detail.handleQty); + item.qty = calc.add(item.qty, detail.qty); + } + } + } +} + +export function calcTreeHandleQty(detailSource) { + for (let item of detailSource) { + item.handleQty = new Decimal(0).toNumber(); + + for (let detail of item.subList) { + if (detail != undefined && detail.scaned) { + if(detail.packList.length>0){ + detail.handleQty = new Decimal(0).toNumber(); + for (let pack of detail.packList){ + if(pack!=undefined&&pack.scaned){ + detail.handleQty = calc.add(detail.handleQty, pack.handleQty); + } + } + } + item.handleQty = calc.add(item.handleQty, detail.handleQty); + } + } + } +} + + + + + +export function getScanCount(subList) { + let items = subList.filter(r => { + if (r.scaned) { + return r; + } + }) + let scanCount = items != null ? items.length : 0; + return scanCount; +} \ No newline at end of file diff --git a/src/common/directory.js b/src/common/directory.js new file mode 100644 index 0000000..5eae6dc --- /dev/null +++ b/src/common/directory.js @@ -0,0 +1,572 @@ +let jobStatusList = []; +let itemStatusList = []; +let itemTypeList =[]; +let locationTypeList = []; +let uomList = []; +let inventoryStatusList = []; +let containerTypeList = []; +let packUnitList = []; +let packUnitInfoList = []; +let requestStatusList = []; +let unplannedReceiptReasonList = []; +let unplannedIssueReasonList = []; +let unplannedIissueReason = []; +let scrapReasonList = []; +let inspectFailedReasonList = []; +let inspectResultList = []; +let nextActionList = []; +let inspectTypeList = []; +let sampleMethodList = []; +let transferModeList = []; +let countStageList = []; +let locationAreaTypeList = []; + + + +// 获取业务类型字典项 +export function getBusinessTypeDesc(type) { + if (type == "SupplierDeliver") { + return "供应商发货" + } else if (type = "PurchaseReceipt") { + return "采购收货"; + } else if (type = "PurchaseReturn") { + return "采购退货"; + } else if (type = "PurchasePutaway") { + return "采购上架"; + } +} + +//获取字典信息 +export function clearCacheData() { + jobStatusList = []; + itemStatusList = []; + itemTypeList =[]; + locationTypeList = []; + uomList = []; + inventoryStatusList = []; + containerTypeList = []; + packUnitList = []; + packUnitInfoList = []; + requestStatusList = []; + unplannedReceiptReasonList = []; + unplannedIssueReasonList = []; + unplannedIissueReason = []; + scrapReasonList = []; + inspectFailedReasonList = []; + inspectResultList = []; + nextActionList = []; + inspectTypeList = []; + sampleMethodList = []; + transferModeList = []; + countStageList = []; + locationAreaTypeList=[] +} + +//获取字典信息 +export function getDirectoryInfo(type) { + + var result = []; + var list = uni.getStorageSync("dictionary") + if (list != undefined && list.length > 0) { + for (let item of list) { + if (item.type == type) { + result = item.subList + break; + } + } + } + + return result +} + +//将字典项转为数组 +export function getDirectoryItemArray(data) { + var array = [] + if (data == undefined || data == null || data == "") { + return array + } + + if (data.indexOf(',') < 0) { + array.push(data) + } else { + var arrayItems = data.split(',') + arrayItems.forEach(res => { + array.push(res) + }) + } + return array +} + +//查询字典项是否在列表中 +export function checkDirectoryItemExist(list, type) { + let exist = false; + if (list == null || list.length == 0) { + exist = true; + } else { + var temp = list.filter(res => { + if (res == type) { + return res + } + }) + if (temp != undefined && temp.length > 0) { + exist = true + } + } + return exist +} + + +//获取任务状态 +export function getJobStateInfo(value) { + var resultInfo = ""; + if (jobStatusList.length == 0) { + jobStatusList = getDirectoryInfo("job_status") + } + if (jobStatusList.length > 0) { + for (let item of jobStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取任务状态样式 +export function getJobStateStyle(value) { + let item = getJobStateInfo(value); + if (item == null || item == '') { + return 'other' + } else { + if (item.remark == '') { + return 'other' + } else { + return item.remark; + } + } +} + +//获取库区描述(多个库区) +export function getListLocationAreaTypeDesc(list) { + let desc = ''; + list.forEach(res => { + desc += getLocationAreaTypeInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取库位描述(多个库位) +export function getListLocationTypeDesc(list) { + let desc = ''; + list.forEach(res => { + desc += getLocationTypeInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + + +//获取物品状态(多个状态) +export function getListItemStateDesc(list) { + let desc = ''; + list.forEach(res => { + desc += getItemStateInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取物品类型(多个) +export function getListItemTypeDesc(list) { + let desc = ''; + list.forEach(res => { + desc += getItemTypeInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取物品类型 +export function getItemTypeInfo(value) { + var resultInfo = ""; + if (itemTypeList.length == 0) { + itemTypeList = getDirectoryInfo("item_type") + } + if (itemTypeList.length > 0) { + for (let item of itemTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + + + + +//获取物品状态 +export function getItemStateInfo(value) { + var resultInfo = ""; + if (itemStatusList.length == 0) { + itemStatusList = getDirectoryInfo("item_status") + } + if (itemStatusList.length > 0) { + for (let item of itemStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库区类型 +export function getLocationAreaTypeInfo(value) { + var resultInfo = ""; + if (locationAreaTypeList.length == 0) { + locationAreaTypeList = getDirectoryInfo("area_type") + } + if (locationAreaTypeList.length > 0) { + for (let item of locationAreaTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库位类型 +export function getLocationTypeInfo(value) { + var resultInfo = ""; + if (locationTypeList.length == 0) { + locationTypeList = getDirectoryInfo("location_type") + } + if (locationTypeList.length > 0) { + for (let item of locationTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} +//获取库区类型名称 +export function getLocationAreaTypeName(value) { + let location = getLocationAreaTypeInfo(value); + + return location == '' ? value : location.label; +} + + +//获取库位类型名称 +export function getLocationTypeName(value) { + let location = getLocationTypeInfo(value); + + return location == '' ? value : location.label; +} + + +//获取库位类型名称 +export function getLocationTypeNameList(lst) { + let desc = ''; + lst.forEach(res => { + desc += getLocationTypeInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取计量单位 +export function getUomInfo(value) { + var resultInfo = ""; + if (uomList.length == 0) { + uomList = getDirectoryInfo("uom") + } + if (uomList.length > 0) { + for (let item of uomList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取包装单位 +export function getPackUnitInfo(value) { + var resultInfo = ""; + if (packUnitList.length == 0) { + packUnitList = getDirectoryInfo("pack_unit") + } + if (packUnitList.length > 0) { + for (let item of packUnitList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取申请状态 +export function getRequestStateInfo(value) { + var resultInfo = ""; + if (requestStatusList.length == 0) { + requestStatusList = getDirectoryInfo("request_status") + } + if (requestStatusList.length > 0) { + for (let item of requestStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + + +//获取库存状态 +export function getInventoryStatusInfo(value) { + var resultInfo = ""; + if (inventoryStatusList.length == 0) { + inventoryStatusList = getDirectoryInfo("inventory_status") + } + if (inventoryStatusList.length > 0) { + for (let item of inventoryStatusList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取库存样式 +export function getInventoryStatusStyle(value) { + let item = getInventoryStatusInfo(value); + if (item == null || item == '') { + return 'other' + } else { + if (item.remark == '') { + return 'other' + } else { + return item.remark; + } + } +} + +//获取库存样式 +export function getInventoryStatusName(value) { + let item = getInventoryStatusInfo(value); + if (item == null || item == '') { + return value + } else { + if (item.label == '') { + return value + } else { + return item.label; + } + } +} + +//获取状态描述 list +export function getInventoryStatusDesc(lst) { + let desc = ''; + lst.forEach(res => { + desc += getInventoryStatusInfo(res).label + "," + }) + desc = desc.slice(0, -1); + return desc; +} + +//获取器具状态 +export function getContainerStatusInfo(value) { + var resultInfo = ""; + if (containerTypeList.length == 0) { + containerTypeList = getDirectoryInfo("container_type") + } + if (containerTypeList.length > 0) { + for (let item of containerTypeList) { + if (item.value == value) { + resultInfo = item + break; + } + } + } + return resultInfo +} + +//获取计划外入库原因 +export function getUnPlannedReceiptReasonList(value) { + if (unplannedReceiptReasonList.length == 0) { + unplannedReceiptReasonList = getDirectoryInfo("unplanned_receipt_reason") + } + unplannedReceiptReasonList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return unplannedReceiptReasonList +} + +//获取计划外出库原因 +export function getUnPlannedIssuseReasonList(value) { + if (unplannedIssueReasonList.length == 0) { + unplannedIssueReasonList = getDirectoryInfo("unplanned_issue_reason") + } + unplannedIssueReasonList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return unplannedIssueReasonList +} + +//获取报废出库原因 +export function getScarpReasonList(value) { + if (scrapReasonList.length == 0) { + scrapReasonList = getDirectoryInfo("scrap_reason") + } + scrapReasonList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return scrapReasonList +} + +//获取检验失败原因 +export function getInspectFailedReasonList(value) { + if (inspectFailedReasonList.length == 0) { + inspectFailedReasonList = getDirectoryInfo("inspect_failed_reason") + } + inspectFailedReasonList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return inspectFailedReasonList +} + +//获取检验结果 +export function getInspectResultList(value) { + if (inspectResultList.length == 0) { + inspectResultList = getDirectoryInfo("inspect_result") + } + inspectResultList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return inspectResultList +} + + + +//获取下一步动作 +export function getNextActionList(value) { + if (nextActionList.length == 0) { + nextActionList = getDirectoryInfo("next_action") + } + nextActionList.forEach(res => { + res.text = res.label; + res.value = res.value + }) + return nextActionList +} + + + +//获取检验类型 +export function getInspectType(value) { + var resultInfo = ""; + if (inspectTypeList.length == 0) { + inspectTypeList = getDirectoryInfo("inspect_type") + } + if (inspectTypeList.length > 0) { + for (let item of inspectTypeList) { + if (item.value == value) { + resultInfo = item.label + break; + } + } + } + return resultInfo +} +//获取抽检方式 +export function getSampleMethod(value) { + var resultInfo = ""; + if (sampleMethodList.length == 0) { + sampleMethodList = getDirectoryInfo("sample_method") + } + if (sampleMethodList.length > 0) { + for (let item of sampleMethodList) { + if (item.value == value) { + resultInfo = item.label + break; + } + } + } + return resultInfo +} + +//获取运输方式 +export function getTransferModeName(value) { + var resultInfo = ""; + if (transferModeList.length == 0) { + transferModeList = getDirectoryInfo("transfer_mode") + } + if (transferModeList.length > 0) { + for (let item of transferModeList) { + if (item.value == value) { + resultInfo = item.label + break; + } + } + } + return resultInfo +} + +//获取盘点阶段名称 +export function getCountStageName(value) { + var resultInfo = ""; + if (countStageList.length == 0) { + countStageList = getDirectoryInfo("count_stage") + } + if (countStageList.length > 0) { + for (let item of countStageList) { + if (item.value == value) { + resultInfo = item.label + break; + } + } + } + return resultInfo +} + +//获取包装规格 +export function getPackUnitName(value) { + var resultInfo = ""; + if (packUnitInfoList.length == 0) { + packUnitInfoList = uni.getStorageSync('packunit'); + } + if (packUnitInfoList.length > 0) { + for (let item of packUnitInfoList) { + if (item.code == value) { + resultInfo = item.name + break; + } + } + } + return resultInfo +} + + +locationAreaTypeList \ No newline at end of file diff --git a/src/common/label.js b/src/common/label.js new file mode 100644 index 0000000..03e65b8 --- /dev/null +++ b/src/common/label.js @@ -0,0 +1,197 @@ +let labelDic = []; + +import { + getLabelByHeader, + getPackageListByNumber +} from '../api/request2.js'; + +import { + checkDirectoryItemExist, + getDirectoryItemArray +} from '../common/directory.js'; + + + +export function getLabelInfo(scanMsg,headerType, callBack) { + console.log('扫描信息:', scanMsg); + if (scanMsg.length == 0) { + return null + } + let items = scanMsg.split(';'); + let header = items[0]; + let version = items[1]; + if ((header != undefined) && (version!=undefined)) { + var hearList =getDirectoryItemArray(headerType) + if(!checkDirectoryItemExist(hearList,header)){ + let labelResult = { + label: { + labelType: "", + barType: '', + code:"" + }, + package: null, + success: false, + message: '请输入'+headerType+"开始的标签", + } + callBack(labelResult); + return; + } + + //解析扫描的是一维码还是二维码 + let type = header.substring(header.length - 1, header.length); + if (type == 'Q') //qrcode + { + getQRCodeInfo(header, version, scanMsg, callBack); + } else if (type == 'B') //barcode + { + getBarCodeInfo(header, version, items[2], callBack); + } else { //直接输入文本 + getBarCodeInfo('text', 'V1.0', scanMsg, callBack); + } + }else { + getBarCodeInfo('text', 'V1.0', scanMsg, callBack); + // let labelResult = { + // label: { + // labelType: "", + // barType: '', + // code:"" + // }, + // package: null, + // success: false, + // message: '标签格式不正确', + // } + // callBack(labelResult); + } +} + +export function getQRCodeInfo(header, version, scanMsg, callBack) { + //获取包装信息 + let labelItem = labelDic.find(r => r.header == header && r.version == version); + if (labelItem == undefined) { + let labelResult = { + label: { + barType: 'QRCode', + }, + package: {}, + success: true, + message: '' + } + getLabelByHeader(header, version).then(res => { + if (res.data==null) { + labelResult.success = false; + labelResult.message = '未查找到标签头为[' + header + ']的标签类型'; + callBack(labelResult); + } else { + let newItem = { + header: header, + version: version, + label: res.data, + }; + + labelDic.push(newItem); + getLabelItems(newItem, scanMsg, callBack); + } + }).catch(err => { + labelResult.success = false; + labelResult.message = err; + callBack(err); + }) + } else { + getLabelItems(labelItem, scanMsg, callBack); + } +} + +export function getLabelItems(labelItem, scanMsg, callBack) { + let labelResult = analysisQRCodeLabel(labelItem, scanMsg); + if (labelResult.label.labelType == 'PurchaseLabel' || labelResult.label.labelType == 'MakeLabel') { + //查询包装信息 + let packingNumber = labelResult.label.packingNumber + if (packingNumber != undefined) { + getPackageListByNumber(packingNumber).then(pack => { + if (pack.data.reqPackage) { + labelResult.package = pack.data.reqPackage; + labelResult.package.subList = pack.data.subList; + console.log('包装信息', JSON.stringify(labelResult.package)) + + } else { + labelResult.success = false; + labelResult.message = '包装号[' + packingNumber + ']没有包装信息'; + } + callBack(labelResult); + }).catch(err => { + labelResult.success = false; + labelResult.message = err; + callBack(labelResult); + }) + } else { + labelResult.success = false; + labelResult.message = '在条码中未解析到箱码'; + callBack(labelResult); + } + } else { + callBack(labelResult); + } +} + +export function analysisQRCodeLabel(labelItem, scanMsg) { + let labelResult = { + label: { + labelType: labelItem.label.labelType, + barType: 'QRCode', + }, + package: {}, + success: true, + message: '' + } + + let separators = labelItem.label.separators; + if (separators == undefined || separators == null) { + labelResult.message = "未读取到分隔符"; + } else { + if (scanMsg.indexOf(separators) < 0) { + labelResult.success = false; + labelResult.message = "标签格式不正确"; + } else { + try { + let scanItems = scanMsg.split(separators); + if (scanItems.length > 0) { + scanItems.forEach((item, index) => { + let type = item.substring(0, 1); + let value = item.substring(1, item.length); + if (type == 'H') { + labelResult.label.header = item; + } else if (type == 'V') { + labelResult.label.version = item; + } else { + let barcode = labelItem.label.subList.find(code => code.prefixChar.toUpperCase() == + type + .toUpperCase()); + if (barcode != undefined) { + labelResult.label[barcode.code] = value; + } + } + }) + } + } catch (e) { + labelResult.message = e.message; + } + + } + } + // console.log('标签', labelResult.label) + return labelResult; +} + +export function getBarCodeInfo(header, version, value, callBack) { + let labelResult = { + label: { + labelType: header, + barType: 'BarCode', + code:value + }, + package: null, + success: true, + message: '', + } + callBack(labelResult); +} diff --git a/src/common/record.js b/src/common/record.js new file mode 100644 index 0000000..ab5d0c9 --- /dev/null +++ b/src/common/record.js @@ -0,0 +1,109 @@ +import { + getBusinesstypeByCode +} from '@/api/request2.js'; + +import { + getDirectoryItemArray, +} from '@/common/directory.js'; +import { calc } from '@/common/calc' +import { Decimal } from 'decimal.js';//引入 + import { + deepCopyData + } from '@/common/basic.js'; + +export function createItemInfo(balance, pack) { + let item = { + itemCode: pack.itemCode, + itemName: pack.itemName, + packQty: pack.packQty, + packUnit: pack.packUnit, + qty: new Decimal(balance.qty).toNumber(), + handleQty:new Decimal(0).toNumber(), + uom: pack.uom, + subList: [] + } + return item; +} + +export function createDetailInfo(balance, pack) { + balance.scaned = true; + // data.toInventoryStatus = this.toInventoryStatus == "" ? data.inventoryStatus : this.toInventoryStatus; + // data.inventoryStatus = data.inventoryStatus; + let detail = deepCopyData(balance); + detail.balanceQty = new Decimal(detail.qty).toNumber() + detail.qty = new Decimal(detail.qty).toNumber(); + detail.packQty = new Decimal(pack.packQty).toNumber() + detail.packUnit = pack.packUnit + detail.handleQty = new Decimal(detail.qty).toNumber() ; + detail.package = pack; + + return detail; +} + +//计算实际数量 +export function calcHandleQty(detailSource) { + for (let item of detailSource) { + item.handleQty = new Decimal(0).toNumber(); + item.qty = new Decimal(0).toNumber(); + for (let detail of item.subList) { + if(detail!=undefined){ + if(detail.scaned){ + item.handleQty = calc.add(item.handleQty,detail.handleQty); + } + item.qty = calc.add(item.qty,detail.qty); + } + } + } +} + +export function calcTreeHandleQty(detailSource) { + for (let item of detailSource) { + item.handleQty = new Decimal(0).toNumber(); + + for (let detail of item.subList) { + if (detail != undefined && detail.scaned) { + detail.handleQty = new Decimal(0).toNumber(); + for (let pack of detail.packList){ + if(pack!=undefined&&pack.scaned){ + detail.handleQty = calc.add(detail.handleQty, pack.handleQty); + } + } + item.handleQty = calc.add(item.handleQty, detail.handleQty); + } + } + } +} + +export function getBusinessType(typeCode, callback) { + let result = { + success: true, + businessType: '', + fromLocationAreaTypeList:'', + toLocationAreaTypeList:'', + itemCodeTypeList:"", + useOnTheWay:"FALSE", + fromInventoryStatuses: '', + toInventoryStatuses: '', + message: '' + }; + getBusinesstypeByCode(typeCode).then(res => { + if (res.data.total > 0) { + result.businessType = res.data.list[0]; + result.fromLocationAreaTypeList = getDirectoryItemArray(res.data.list[0].outAreaTypes) ; + result.toLocationAreaTypeList = getDirectoryItemArray(res.data.list[0].inAreaTypes) ; + result.itemCodeTypeList = getDirectoryItemArray(res.data.list[0].itemTypes) + result.fromInventoryStatuses = res.data.list[0].outInventoryStatuses; + result.toInventoryStatuses = res.data.list[0].inInventoryStatuses; + result.useOnTheWay =res.data.list[0].useOnTheWay + callback(result) + } else { + result.success = false; + result.message = '业务类型[' + typeCode + ']获取失败'; + callback(result) + } + }).catch(error => { + result.success = false; + result.message = error; + callback(result) + }) +} diff --git a/src/common/style/PDA_style-delete.css b/src/common/style/PDA_style-delete.css new file mode 100644 index 0000000..47edd46 --- /dev/null +++ b/src/common/style/PDA_style-delete.css @@ -0,0 +1,221 @@ + +@media screen and (min-width:400px) { + uni-app, uni-page-head{ + height: 60px; + } + uni-page-head .uni-page-head{ + height: 60px !important; + } + uni-page-head[uni-page-head-type=default]~uni-page-wrapper{ + height: calc(100% - 70px) !important; + } + uni-page-head .uni-page-head__title{ + font-size: 1.125rem !important; + line-height: 40px !important; + font-weight: normal !important; + } + uni-page-head .uni-btn-icon{ + font-size: 1.725rem !important; + } + .font_xs{ + font-size: 0.825rem !important; + } + .font_xl{ + font-size: 1.325rem !important; + } + .mini-type-style{ + font-size: 0.8rem !important; + } + .cen_card .label_box .label_info uni-text{ + line-height: 1.725 !important; + /* font-size: 1rem !important; */ + color: #333; + } + .cen_card .label_box .label_info{ + background-color: #eee !important; + } + .popup_box .detail-list{ + box-shadow: none !important; + } + .detail-list,.device-detail{ + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15) !important; + } + .list_form .uni-table-tr{ + background-color: #f0f0f0 !important; + } + .list_form .uni-table-th{ + border-bottom: 1px solid #cfcfcf !important; + } + /* yuanswitch + .require_wrap{ + padding-top: 0 !important; + } + .require_wrap .require_cell{ + line-height: 1.75 !important; + } + .ljh_box .tit_ljh{ + font-size: 1.25rem !important; + } + .cen_card .label_box .label_info { + background-color: #eee !important; + } + .cen_card .label_box .label_info uni-image{ + width: 48rpx !important; + height: 48rpx !important; + } + + .cen_card .label_box .label_info uni-text{ + line-height: 1.5 !important; + font-size: 1rem !important; + color: #333; + } + .ljh_box .tit_ljh .state-style, .top_card .state-style{ + font-size: 0.8rem !important; + } + .card_task .ljh_box{ + margin-bottom: 0 !important; + } + .task_num uni-image{ + width: 56rpx !important; + height: 56rpx !important; + } + .task_num uni-text{ + font-size: 1rem !important; + } + .pda_receipt_label .label_order uni-text{ + font-size: 1rem; + color: #434556; + } + .pda_receipt_label .icon_normal{ + width: 56rpx; + height: 56rpx; + } + .pda_receipt_bot .icon_normal{ + width: 56rpx; + height: 56rpx; + float: left; + } + .pda_receipt_bot .text_darkblue{ + float: left; + font-size: 1rem; + margin-top: 8rpx; + display: inline-block; + }*/ + .top_card .text_lightblue{ + font-size: 1rem !important; + } + .top_card .cell_box .cell_info{ + margin-bottom: 0; + } + .uni-tab-item-title{ + font-size: 1.125rem !important; + } + .cell_box .cell_info uni-view{ + font-size: 1rem !important; + color: #101010 !important; + } + .cell_box .cell_info .text_lightblue{ + font-size: 0.875rem !important; + color: #6A6E7A !important; + } + .cell_box .cell_info .text_black{ + font-size: 1.125rem !important; + + } + .scan_float uni-image{ + margin-top: 18rpx !important; + } + .scan_float uni-view{ + font-size: 0.875rem !important; + letter-spacing: 1px; + } + .new_btn_bot .new_save_btn,.popup_box .pop_title uni-text{ + font-size: 1rem !important; + } + .bot_card{ + background-color: #eee !important; + } + .bot_card_item uni-text{ + font-size: 0.8rem !important; + font-weight: 600; + } + .summary_state .state_point{ + font-size: 1rem !important; + } + .summary_item label{ + float: left; + } + .summary_item uni-text{ + font-size: 1.125rem !important; + font-weight: normal !important; + float: left; + } + /* popup */ + .popup_box{ + box-sizing: border-box; + } + .popup_box .uni-steps{ + width:100%; + overflow-x: hidden; + } + .popup_box .uni-steps__row-line-item{ + height: 60rpx !important; + } + .popup_box .uni-steps__row-text-container{ + margin-top: 0 !important; + } + .popup_box,.uni-popup .uni-scroll-view-content{ + border-top-left-radius:30rpx !important; + border-top-right-radius:30rpx !important; + } + .popup_box .pop_title{ + font-size: 1.125rem !important; + letter-spacing: 1px; + } + .popup_box .pop_tab .tab_tit{ + font-size: 0.875rem !important; + } + .popup_box .pop_tab .tab_tit_active{ + font-size: 1rem !important; + } + .popup_box .pop_tab .tab_info{ + min-height: 200rpx !important; + } + .popup_box .pop_tab .tab_info uni-textarea{ + height: 200rpx; + } + .popup_box .pop_tab .tab_info uni-button{ + font-size: 0.875rem !important; + letter-spacing: 1px; + } + /*底部按钮*/ + .new_btn_bot .new_save_btn{ + background-color: #E4EAFF !important; + height: 50px; + line-height: 50px; + } + .new_btn_bot .new_clear_btn{ + font-size: 1rem !important; + line-height: 50px; + } + .scroll-detail{ + padding-bottom: 70px !important; + } + .count_shadow,.device-detail{ + box-shadow: 0 0 20rpx rgba(0,0,0,0.2); + } + .list_info { + padding: 0 20rpx 20rpx; + margin-top: 0; + } + .uni-scroll-view-content .creattp_list{ + width: 100% !important; + } + .creattp_list .uni-list .list_cell uni-text{ + font-weight: bold; + } + .popup_box .scan_scroll{ + max-height: 44vh !important; + + } +} diff --git a/src/common/style/new_style.css b/src/common/style/new_style.css new file mode 100644 index 0000000..c457638 --- /dev/null +++ b/src/common/style/new_style.css @@ -0,0 +1,2772 @@ +/*WMY 20220818 cssv1.0*/ +/*公共*/ +uni-page-head .uni-page-head { + z-index: 98 !important; + background-color: #fff !important; +} + +uni-page-head .uni-page-head__title { + font-weight: normal; +} + +.whole { + width: 100%; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +.tc { + text-align: center; +} + +.text_bold { + font-weight: bold; +} + +.text_black { + color: #101010; +} + +.text_packingCode { + color: #101010; + word-break: break-all; +} + +.text_lightblue { + color: #6A6E7A; +} + +.text_darkblue { + color: #434556; +} + +.text_blue { + color: #5A7CF3; +} + +.font_xs { + font-size: 0.775rem; +} + +.font_sm { + font-size: 0.825rem; +} + +.font_xl { + font-size: 1.125rem; +} + +.font_default { + font-size: 1rem; +} + +.margin_top { + margin-top: 20rpx; +} + +.margin_bottom { + margin-bottom: 20rpx; +} + +.margin_xs_top { + margin-top: 10rpx; +} + +.margin_xs_bottom { + margin-bottom: 10rpx; +} + +.margin_right { + margin-right: 20rpx; +} + +.margin { + margin: 20rpx; +} + +.padding_10 { + padding: 10rpx; +} + +.padding_15 { + padding: 15rpx; +} + +.padding_20 { + padding: 20rpx; +} + +.padding { + padding: 20rpx; +} + +.padding_bottom { + padding-bottom: 20rpx; +} + +.nopad { + padding: 0 !important; +} + +.nopad_bot { + padding-bottom: 0 !important; +} + +/* +物料状态 +未知,可用,隔离,新增,规划,禁用 +*/ + +.item_active { + background-color: #5FCB94; + color: #FFFFFF; +} + +.item_hold { + background-color: #FF4206; + color: #FFFFFF; +} + +.item_new { + background-color: #E6A23C; + color: #FFFFFF; +} + +.item_plan { + background-color: #2677F9; + color: #FFFFFF; +} + +.item_disable { + background-color: #666; + color: #FFFFFF; +} + +/* 器具状态 */ +.container_empty { + background-color: #FF4206; + color: #FFFFFF; +} + +.container_useing { + background-color: #5FCB94; + color: #FFFFFF; +} + + +.container_repair { + background-color: #666; + color: #FFFFFF; +} + +.container_scrap { + background-color: #E6A23C; + color: #FFFFFF; +} + + + +.scan_float { + position: fixed; + z-index: 10; + right: 20rpx; + bottom: 20%; + width: 110rpx; + height: 110rpx; + background-color: #5A7CF3; + border-radius: 50%; + text-align: center; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); + opacity: 0.8; +} + +.scan_float image { + width: 40rpx; + height: 40rpx; + margin-top: 10rpx; +} + +.scan_float view { + color: #fff; + font-size: .725rem; + margin-top: -8rpx; +} + +.top_card { + background-color: #5A7CF3; + overflow: hidden; + /* padding: 20rpx 0; */ +} + +.top_card .device-detail { + /* margin-top: 0 !important; */ +} + +.top_card .mini-type-style { + color: #fff !important; + font-weight: normal; + height: 46rpx; +} + +.cen_card { + padding: 0 0rpx; + width: 100%; + box-sizing: border-box; + float: left; +} + +.cell_box { + width: 100%; +} + +.cell_box .cell_info { + position: relative; + /* width: 25%; */ + padding: 0 20rpx; + /* margin: 0 0 20rpx; */ + text-align: center; +} + +.cell_box .cell_long { + /* width: 33%; */ +} + +.cell_box .cell_info view { + font-size: 0.9375rem; + margin-bottom: 10rpx; + color: #7B8195; +} + +.cell_box .cell_info .text_black { + font-size: 0.875rem; + color: #101010; +} + +.cell_box .cell_info .text_lightblue { + color: #949CB6; + font-size: 0.8rem; +} + +.cell_box .cell_info::after { + position: absolute; + content: ""; + right: 0; + top: 50%; + transform: translateY(-50%); + width: 1px; + height: 20px; + background-color: #ddd; +} + +.cell_box .cell_info:last-child::after { + width: 0; +} + +.cen_card .label_box { + margin-bottom: 20rpx; +} + +.cen_card .label_box .label_info { + background-color: #eee; + color: #434556; + font-size: 0.875rem; + padding: 8rpx; + border-radius: 8rpx; + margin-right: 10rpx; + vertical-align: middle; +} + +.cen_card .label_box .label_info image { + /* float: left; */ + vertical-align: middle; +} + +.cen_card .label_box .label_info text { + /* line-height: 1.25; */ + /* float: left; */ + vertical-align: middle; +} + +.photo_btn { + background-color: #ececec; + color: #5A7CF3; + font-size: 0.875rem; + padding: 8rpx 10rpx; + border-radius: 8rpx; +} + +.photo_btn text { + line-height: 1.5; +} + +.cen_card .cell_box .text_black { + font-size: 0.875rem; +} + +.cen_card .cell_box .cell_info .text_lightblue { + font-size: 0.925rem; +} + +.bot_card { + background-color: #f8f8f8; + padding: 16rpx; + overflow: hidden; +} + +.bot_card_item { + width: 50%; + text-align: left; + height: 60rpx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* .item_long{ + width: 32% !important; +} +*/ +.item_short { + width: 20%; +} + +.bot_card_item uni-text { + font-size: .725rem; + margin-left: 4rpx; + color: #333333; + background-color: transparent; +} + +.bot_card_item .icon_state { + float: left; + margin-top: 22rpx; +} + +.summary_wrap { + padding: 20rpx; + padding-top: 0; +} + +.summary_state .state_point { + font-size: 0.825rem; +} + +.summary_item uni-text { + font-size: 0.825rem; +} + +.bot_card_item uni-text.state_point { + background-color: transparent; +} + +.bot_card_item label { + vertical-align: middle; +} + +.icon_normal { + width: 58rpx; + height: 58rpx; + vertical-align: middle +} + +.bot_card_item .icon_normal { + float: left; + width: 46rpx; + height: 46rpx; +} + +.icon_bg { + display: inline-block; + width: 46rpx; + height: 46rpx; + border-radius: 4rpx; +} + +.icon_bg_xm { + background-color: #45B5F3; +} + +.icon_bg_kw { + background-color: #5A7CF3; +} + +.icon_bg_pc { + background-color: #BF94EB; +} + +.icon_state { + display: inline-block; + width: 20rpx; + height: 20rpx; + border-radius: 50%; +} + +.state_point { + background: none; +} + +.title_tab { + display: flex; + justify-content: center; + height: 100rpx; +} + +.bottom { + padding: 0 !important; +} + +.uni-popup .uni-scroll-view { + overflow: visible !important; +} + +.uni-popup .uni-scroll-view-content { + overflow-y: scroll; + max-height: 94vh; + background-color: #fff; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; +} + +.uni-popup .scroll-Y { + padding-bottom: 0; +} + +.popup_box { + position: relative; + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; + background: #fff url(@/static/icons_ui/popup_bot_bg.png) no-repeat left top; + background-size: 100%; + max-height: 93vh; +} + +.popup_box .pop_title { + font-size: 0.9rem; + font-weight: bold; + color: #fff; + padding: 20rpx 20rpx; + font-size: 35rpx; +} + +.popup_box .pop_title text { + font-size: 0.9rem; + font-weight: normal; +} + +.popup_box .uni-steps { + width: 98%; +} + +.popup_box .top_bg { + width: 100%; + height: inherit; +} + +.popup_box .pop_tab { + padding: 20rpx; + box-sizing: border-box; + width: 100%; +} + +.popup_box .pop_tab .tab_tit { + font-size: .825rem; + text-align: center; + color: #333; + background-color: #fff; + /* width: 30%; */ + box-sizing: border-box; + padding: 10rpx 16rpx; + border-top-left-radius: 8rpx; + border-top-right-radius: 8rpx; + margin-right: 6rpx; +} + +.popup_box .pop_tab .tab_tit_active { + color: #5A7CF3; + font-weight: bold; + /* font-size: 0.875rem; */ +} + +.popup_box .pop_tab .tab_info { + position: relative; + background-color: #fff; + border-radius: 8rpx; + box-shadow: 0 6rpx 20rpx rgba(90, 124, 143, 0.1); + min-height: 100rpx; +} + +.popup_box .pop_tab .tab_info textarea { + height: 320rpx; +} + +.popup_box .pop_tab .tab_info .uni-textarea-placeholder { + font-size: 0.825rem; +} + +.popup_box .scan_scroll { + max-height: 41vh; + width: 100%; + overflow-x: hidden; + overflow-y: scroll; +} + +.popup_box .scan_scroll .uni-scroll-view-content { + /* width: 104%; */ + overflow-x: hidden; + background-color: transparent; +} + +.popup_box .pop_tab .next_info { + box-shadow: 0 0 20rpx rgba(90, 124, 143, 0.1); +} + +.popup_box .pop_tab .tab_notitle { + border-radius: 8rpx; +} + +.popup_box .pop_tab .tab_info button { + position: absolute; + bottom: 10rpx; + right: 20rpx; + background: #3C9CFF; + color: #fff; + border: 0; + border-radius: 8rpx; + width: 130rpx; + float: right; + font-size: .725rem; +} + +.popup_box .pop_tab .tab_info textarea { + padding-top: 20rpx; +} + +.list_wrap { + margin: 20rpx; +} + +.ljh_box { + padding: 20rpx; + z-index: 10; + width: 100%; + float: left; + box-sizing: border-box; +} + +.ljh_left { + margin-top: 10rpx; +} + +/* .ljh_right{ + float: right; +} */ +.ljh_right uni-text { + line-height: 1.5; +} + +.ljh_right .tnum .num_edit { + background-color: #FFF9DB; + width: 150rpx; +} + +.ljh_right .tnum { + font-size: 1.25rem; + color: #EC5B28; + font-weight: bold; + margin-right: 4rpx; +} + +.ljh_right .tunit { + font-size: 0.875rem; + color: #F5AB91; +} + +.ljh_box .tit_ljh { + line-height: 1.5; + font-size: 0.875rem; + color: #101010; + font-weight: bold; + word-break: break-all; +} + +.ljh_box .tit_ljh .mini-type-style { + float: left; + margin-top: 10rpx; + padding: 0 8rpx; + font-size: 0.725rem; +} + +.ljh_box .tit_ljh .state-style, +.top_card .state-style { + font-size: .625rem; + padding: 4rpx 6rpx; + margin-right: 8rpx; + vertical-align: middle; + font-weight: normal; + border-radius: 4rpx; + color: #fff; +} + +.ljh_box .tit_ljh .state-style { + /* padding: 6rpx; */ +} + +.ljh_box .tit_ljh text { + float: left; +} + +.ljh_box .desc_ljh { + line-height: 1.5; +} + +.label_normal { + margin-top: 20rpx; +} + +.label_normal .label_col image { + float: left; + vertical-align: middle; +} + +.label_normal .label_col text { + font-size: 0.825rem; + line-height: 1.25; + float: left; + color: #434556; +} + +.lo_cellbox { + margin-top: 20rpx; +} + +.lo_cellbox .cell_info { + margin-bottom: 0; +} + +/*提交按钮*/ +.new_btn_bot { + position: fixed; + bottom: 0; + left: 0; + box-sizing: border-box; + width: 100%; + background-color: #fff; + padding: 20rpx; + z-index: 10; + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.2); +} + +.bot_pos { + position: initial; +} + +.new_btn_bot .new_save_btn { + background-color: #E7ECFF; + color: #5A7CF3; + font-size: .875rem; +} + +.new_btn_bot .new_clear_btn { + background-color: #FFDADD; + color: #f00; + font-size: .875rem; + margin-right: 20rpx; +} + +.new_btn_bot .new_cancel_btn { + background-color: #eee; + color: #333; + font-size: .875rem; + margin-right: 20rpx; +} + +.new_btn_bot .btn_double { + width: 50%; +} + +.new_btn_bot uni-button:after { + border: 0; +} + +.choose_main { + position: relative; + z-index: 2; +} + +.choose_layout { + position: relative; + width: 100%; + height: 130rpx; + background-color: #fff; + +} + +.choose_icon_layout { + position: absolute; + right: 160rpx; + top: 10rpx; + bottom: 0rpx; + /* width: 100rpx; + height:100rpx; */ +} + +.choose_icon { + margin-top: 5rpx; + margin-bottom: 10rpx; + width: 100rpx; + height: 100rpx; +} + +.choose_marked { + position: absolute; + width: 100%; + /* height: 100%; */ + top: 0; + left: 0; + bottom: 0; + right: 0; + border-top: 6rpx solid #5FCB94; + background-image: linear-gradient(rgba(95, 203, 148, 0.5), rgba(95, 203, 148, 0)); + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; +} + +.choose_marked_faild { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + border-top: 6rpx solid #FF0000; + background-image: linear-gradient(rgba(255, 100, 97, 0.3), rgba(255, 100, 97, 0)); + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; +} + +.nodeliver_tag { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; + border-top: 6rpx solid #F54D4D; + background-image: linear-gradient(rgba(245, 77, 77, 0.1), rgba(245, 77, 77, 0)); + +} + +.choose_marked image { + float: right; + margin-right: 28%; + margin-top: 20rpx; + width: 120rpx; + height: 120rpx; +} + +.choose_marked_faild image { + float: right; + margin-right: 28%; + margin-top: 20rpx; + width: 120rpx; + height: 120rpx; +} + +.pop_list { + background-color: #fff; + /* padding: 20rpx; */ + padding-top: 0; + margin-top: 20rpx; +} + +.uni-scroll-view-content .creattp_list { + padding: 6rpx 20rpx 0; + box-sizing: border-box; + width: 96%; +} + +.list_info .uni-scroll-view-content { + max-height: 10vh; +} + +.pop_list .detail-content { + margin-bottom: 20rpx; + border-radius: 16rpx; + overflow: hidden; + box-shadow: 0 0 14rpx rgba(0, 0, 0, 0.1); +} + +.pop_btn { + padding: 20rpx; + padding-top: 0; +} + +.pop_btn button { + width: 49%; + height: 90rpx; + line-height: 90rpx; + font-size: 0.875rem; + margin: 0; + color: #333; +} + +.pop_btn button::after { + border: 0; +} + +.pop_btn .cancel { + background-color: #eee; +} + +.pop_btn .save { + background-color: #5A7CF3; + color: #fff; +} + +.popinpop { + margin: 10px 1%; + border-radius: 8px; + background-color: #fff; + color: #666666; + line-height: 1.5; + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); + width: 98%; + +} + +.scan_btn:after { + border: 8rpx; +} + +.popup_box .pop_tab .tab_info .clean_scan_btn { + background-color: #eee; + color: #333; + margin-right: 140rpx; + border-radius: 8rpx; +} + +.popup_box .pop_tab .tab_info .clean_scan_btn::after { + border: 0; +} + +/*检验任务-topline*/ +.card_task { + padding: 20rpx; + padding-bottom: 0; +} + +.task_num { + border-bottom: 1px solid #eee; + padding-bottom: 10rpx; + margin-bottom: 10rpx; + overflow: hidden; +} + +.top_card .task_num { + border: 0; +} + +.task_num image { + vertical-align: middle; + margin-right: 10rpx; +} + +.task_num text { + color: #333; + vertical-align: middle; +} + +.label_order image { + /* vertical-align: text-bottom; */ + vertical-align: middle; +} + +.label_order text { + font-size: .825rem; + vertical-align: middle; +} + +.tit_jxs { + font-size: 1rem !important; + margin-bottom: 10rpx; +} + +.tit_jxs .state-style { + vertical-align: middle; + margin-top: 6rpx; +} + +/* 为按序发货添加 */ +/* .state-style{ + background-color: #ececec; +} */ +.receipt_bot { + justify-content: space-between; + border-top: 1px solid #eee; + padding-top: 10rpx; +} + +/*收货列表*/ +.require_wrap { + background-color: #fff; + padding: 20rpx; +} + +.require_wrap uni-button:after { + border: 0; +} + +.require_wrap .require_cell { + background: #f5f5f5; + font-size: .825rem; + padding: 10rpx 20rpx; + margin-right: 20rpx; + border-radius: 50rpx; + line-height: 1.5; + margin-left: 0; + border: 1px solid #f5f5f5; +} + +.require_wrap .require_active { + border: 1px solid #5A7CF3; + background-color: #EFF6FF; + color: #5A7CF3; +} + +.require_wrap .require_active text { + display: inline-block; + width: 20rpx; + height: 20rpx; + background-color: #5A7CF3; + border-radius: 50%; + float: left; + margin: 12rpx 10rpx 12rpx 0; +} + +.list_inspect .uni-input-input { + color: #f00; +} + +.list_form { + padding: 20rpx; + padding-top: 0; +} + +.list_form .uni-table-tr { + background-color: #f8f8f8; + color: red; +} + +.list_form .uni-table-th { + padding: 10rpx !important; + border-bottom: 1px solid #ececec; + font-weight: normal !important; + font-size: 0.775rem; + color: red; +} + +.list_form .uni-easyinput { + background-color: #FFF9DB; +} + +.list_form .uni-easyinput__content { + min-height: 50rpx !important; + text-align: center; +} + +.count_shadow { + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); +} + +.count_list { + font-size: 0.8rem; + color: #0F5EFF; + padding: 10rpx 0; +} + +.count_list text:first-child { + margin-left: 0; +} + +.count_list text { + margin: 10rpx; +} + +.popuni_list::after { + height: 0 !important; +} + +.uni-list .list_cell { + margin-bottom: 20rpx; + height: 100rpx; + align-items: center; + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); +} + +.uni-list .list_cell:last-child { + margin-bottom: 0; +} + +.uni-list .list_cell .is-input-border { + border: 0; +} + +.uni-list .list_cell .title { + padding-left: 20rpx; + font-size: 0.875rem; +} + +.uni-list .list_cell .info { + padding-right: 20rpx; + color: #333; + font-size: 0.875rem; +} + +.popuni_list .list_cell { + background-color: #fff; + border-radius: 8rpx; + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); +} + +.popuni_list .list_cell .uni-data-tree-input { + padding-left: 0; +} + +.popuni_list .list_cell .input-value-border { + border: 0; + padding: 0; +} + +.popuni_list .list_cell .selected-list { + padding-left: 0; +} + +/* .uni-list .list_cell .necessary_tag{ + padding-right: 0; + color: #f00; +} */ +.uni-list .list_cell .uni-easyinput { + padding-right: 20rpx; + text-align: right; + box-sizing: border-box; + border: 0; +} + +.uni-list .list_cell .uni-input-input { + font-size: 0.875rem; +} + +.list_card { + margin-top: 20rpx; + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); +} + +.list_card:first-child { + margin-top: 10rpx; +} + +.inspect_form .uni-label { + font-size: 0.875rem; +} + +.pda-list-cell-db .is-input-border, +.pda-list-cell-db .input-value-border { + border: 0 !important; +} + +.list_locode { + padding: 20rpx; + padding-top: 0; +} + +.inspect_card { + background-color: #fff; + margin: 20rpx; + border-radius: 16rpx; +} + +.inspect_card .ljh_box text { + line-height: 1.75; +} + +.inspect_list_locode { + border-bottom: 1px solid #eee; + padding-bottom: 20rpx; +} + +.inspect_list_locode image { + vertical-align: middle; +} + +.default_nodata { + position: relative; + left: 50%; + transform: translateX(-50%); + margin-top: 100rpx; + width: 390rpx; + height: 300rpx; + +} + + +.default_goscan { + width: 100%; +} + +.default_goscan .img_goscan { + position: relative; + width: 500rpx; + height: 500rpx; + left: 50%; + transform: translateX(-50%); +} + +.default_goscan button { + width: 60%; + height: 100rpx; + background-color: #5A7CF3; + color: #fff; + border-radius: 50rpx; + text-align: center; + line-height: 100rpx; +} + +.default_goscan button image { + width: 30rpx; + height: 30rpx; + margin-right: 20rpx; + vertical-align: middle; + margin-top: -8rpx; + +} + +.new_bot_box { + position: fixed; + width: 100%; + left: 0; + bottom: 0; + background-color: transparent; + z-index: 10; +} + +.new_bot_box .uni-collapse { + background-color: transparent !important; +} + +.new_bot_box .uni-collapse-item__title.uni-collapse-item-border { + width: 96%; + margin: 0 2%; + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; + overflow: hidden; + text-align: center; +} + +.new_bot_box .uni-collapse-item__title-text { + padding-left: 40rpx; +} + +.new_bot_box .uni-collapse-item__title.uni-collapse-item-border, +.new_bot_box .uni-collapse-item__title-box { + background-color: #7B8195 !important; + color: #fff !important; +} + +.new_bot_box .uni-collapse-item__title-box { + height: 80rpx !important; + line-height: 80rpx !important; +} + +.new_bot_box .content { + background-color: #fff !important; +} + +.new_bot_box .content .uni-easyinput { + box-sizing: border-box; +} + +.new_bot_box .content .uni-data-picker, +.new_bot_box .input-value, +.new_bot_box .uni-input-input, +.new_bot_box .selected-item, +.new_bot_box .placeholder, +.new_bot_box .uni-easyinput__content-input { + font-size: 0.875rem !important; +} + +.new_bot_box .content .tit_bot_box { + padding: 20rpx 20rpx 10rpx; + font-size: 0.875rem; +} + +.new_bot_box .uni-collapse-item__wrap-content.uni-collapse-item--border { + border: 0; +} + +.new_bot_box .border .uni-easyinput { + border: 1px solid #e5e5e5; + border-radius: 10rpx; +} + +.hold_form .uni-table-th-content { + font-weight: normal; + font-size: 0.775rem; +} + +.top_wrap { + padding: 20rpx; + background-color: #fff; +} + +.top_wrap .top_card { + border-radius: 8px; + color: #fff; + line-height: 100rpx; +} + +.top_wrap .top_card .top_lines_info { + padding: 0 20rpx; +} + +.top_wrap .top_card .top_lines_info text { + font-size: 0.9rem; + margin-left: 10rpx; +} + +/* 按序收货 */ +.recept_form { + padding: 20rpx; +} + +.recept_form .form_title { + padding: 20rpx 20rpx 0; +} + +.recept_form .form_title image { + float: left; + margin-top: 10rpx; + margin-right: 10rpx; +} + +.recept_form .form_title text { + font-size: 1rem; + vertical-align: middle; +} + +.recept_form .table--border { + border: 0 !important; +} + +.recept_form th { + background-color: #F3F6FF; + color: #434556 !important; +} + +.recept_form th.table--border, +.recept_form td.table--border { + border: 0; +} + +.recept_form .recept_form_info { + background-color: #fff; + border-radius: 16rpx; + padding-bottom: 16rpx; +} + +.recept_form .uni-table-td { + font-size: 0.8rem; +} + +/* 天津发货详情 */ +.deliver_card { + flex: 1; + line-height: 30px; + margin: 20rpx 20rpx 0; + border-radius: 16rpx; + overflow: hidden; + background-color: transparent; + position: relative; + border-bottom-color: #f5f5f5; + border-bottom-width: 1px; + border-bottom-style: solid; +} + +.deliver_card .card_info { + background-color: #fff; +} + +.deliver_card .deliverState { + background-color: #fff; + padding: 20rpx 10rpx; + background-color: transparent; + border-left: 10rpx solid transparent; +} + +.deliver_card .deliverState .content-text image { + vertical-align: text-bottom; + margin-right: 6rpx; +} + +.deliver_card .deliverState .content-text text { + margin-right: 10rpx; +} + +.deliver_card .deliverState1 { + background-color: #fff; + border-left: 10rpx solid #F6CB61; +} + +.deliver_card .deliverState3 { + background-color: #fff; + border-left: 10rpx solid #5FCB94; +} + +.deliver_card .deliverState4 { + background-color: #fff; + border-left: 10rpx solid #EC5B28; +} + +.deliver_card .card_state { + border: 1px solid transparent; + padding: 0 20rpx; + font-size: 0.8rem; + position: absolute; + right: 20rpx; + top: 50%; + transform: translateY(-50%); + border-radius: 80rpx; +} + +.deliver_card .tjpending { + border-color: #F6CB61; + color: #F6CB61; +} + +.deliver_card .tjsent { + border-color: #5FCB94; + color: #5FCB94; +} + +.deliver_card .tjnosend { + border-color: #EC5B28; + color: #EC5B28; +} + +.login_wrap { + width: 100%; + position: relative; + top: -20rpx; + background-color: #fff; + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; +} + +.login_title { + position: absolute; + top: 120rpx; + left: 30rpx; + color: #fff; + font-size: 1.125rem; + font-weight: bold; + letter-spacing: 4rpx; + line-height: 1.5; +} + +.login_title text { + font-size: 1.125rem; + letter-spacing: 0; +} + +/* 登录 */ +.mybox .is-input-border { + border: 0 !important; +} + +/* 消息列表 */ +.msg_body { + background-color: #fff; +} + +.msg_list { + padding-top: 20rpx; +} + +.msg_list .uni-list-chat__header { + width: 60rpx !important; + height: 60rpx !important; + background-color: #3d7eff; + border-color: transparent !important; + border-radius: 6rpx !important; +} + +.msg_list .uni-list--border-top, +.msg_list .uni-list--border-bottom, +.msg_list .uni-list--border:after, +.msg_body .uni-list:after { + height: 0 !important; +} + +.msg_list .uni-list-chat__header-image { + width: 50rpx !important; + height: 50rpx !important; +} + +.msg_list .uni-badge--dot { + left: inherit !important; + right: 20rpx; + top: 40rpx !important; +} + +.msg_list .uni-list-chat__content-title { + font-size: .9rem !important; +} + +.msg_list .hasread .uni-list-chat__header { + background-color: #ccc; +} + +/* index */ +.index_top { + background-color: #5A7CF3; + width: 100%; +} + +.index_top .uni-searchbar { + padding-right: 0 !important; +} + +.index_top .index_btn { + background-color: transparent; + font-size: 0.825rem; + padding: 0 0.9rem; + +} + +.index_top uni-button:after { + border: 0 !important; +} + +.index_top .uni-searchbar__box { + background-color: rgba(255, 255, 255, 0.3) !important; + border-color: transparent !important; + justify-content: inherit !important; +} + +.index_top .uni-searchbar__text-input, +.uni-searchbar__box-icon-search, +.index_top .uniui-search { + color: #fff !important; +} + +.index_top .uni-searchbar__text-placeholder, +.index_top .uni-input-placeholder { + color: #eee !important; +} + +.index_top .uni-input-input { + color: #fff; +} + +.common_title { + font-size: .825rem; + font-weight: bold; +} + +.common_icons { + width: 100%; + padding: 20rpx; + box-sizing: border-box; +} + +.common_icons .common_info { + position: relative; + top: -120rpx; + background-color: #fff; + width: 100%; + box-sizing: border-box; + padding: 20rpx; + border-radius: 16rpx; + + /* box-shadow: 0 0 10rpx rgba(0,0,0,0.1); */ +} + +.common_icons .common_info .common_cell { + margin-right: 20rpx; + text-align: center; +} + +.common_icons .common_info .common_cell .cell_icon { + background-color: #EEF2FE; + border-radius: 50%; + width: 110rpx; + height: 110rpx; + margin: 20rpx 20rpx 0; +} + +.common_icons .common_info .common_cell .cell_icon image { + float: left; + width: 50rpx; + height: 50rpx; + margin: 35rpx; +} + +.common_icons .common_info .cell_last { + margin-right: 0; +} + +uni-tabbar .uni-tabbar-border { + height: 0; +} + +.index_menu { + width: 100%; + float: left; + margin-top: -100rpx; + /* height: calc(100% - 200px); */ +} + +.index_menu .menu_content { + width: 26%; + text-align: center; + float: left; + height: 100%; + overflow-y: scroll; +} + +.index_menu .index_title .title_left { + width: 100%; + border-left: 2px solid transparent; + line-height: 80rpx; + font-size: 0.825rem; + text-align: center; +} + +.index_menu .menu_content .index_title { + width: 100%; + float: left; + line-height: 100rpx; + font-size: 0.825rem; +} + +.index_menu .menu_content .tit_active { + box-sizing: border-box; + background-color: #fff; + border-left: 2px solid #5A7CF3; + font-weight: bold; + float: left; +} + +.index_menuinfo { + width: 74%; + float: left; + box-sizing: border-box; + padding: 20rpx; + position: relative; + overflow-y: scroll; + background-color: #fff; + /* height: 100%; */ + +} + +.menu_ab { + position: absolute; + top: 420rpx; + left: 0; + width: 100%; + z-index: 10; + /* height: calc(100% - 185px); */ + +} + +.index_menuinfo .icon_block { + position: relative; + text-align: center; + width: 33%; + float: left; + /* margin-top: -10rpx; */ +} + +.index_menuinfo .icon_block image { + float: left; + width: 80%; + height: 80rpx; + margin: 3% 10% 0; +} + +.index_menuinfo .icon_block text { + float: left; + width: 100%; + font-size: .8rem; + height: 80rpx; + color: #101010; +} + +.index_menuinfo .icon_block .index_badge { + width: 42rpx; + height: 42rpx; + font-size: 0.6rem; + background-color: #c00; + position: absolute; + right: 0; + color: #fff; + text-align: center; + line-height: 42rpx; + border-radius: 50%; +} + +uni-tabbar.uni-tabbar-bottom .uni-tabbar { + box-shadow: 0 0 20rpx rgba(0, 0, 0, 0.1); +} + +uni-modal .uni-modal__bd { + font-size: 1rem !important; + color: #000 !important; +} + +.passwordpage .uni-forms-item__label .label-text { + font-size: 0.8rem !important; +} + +.passwordpage .is-input-border { + border: 0 !important; +} + +.passwordpage .is-direction-left { + padding: 10rpx 20rpx; + background-color: #fff; + /* margin: 20rpx 0; */ +} + +.passwordpage .uni-forms-item__inner { + padding-bottom: 10rpx !important; +} + +.passwordpage .new_save_btn { + font-size: 1rem; +} + +.personal uni-button:after { + border: 0 !important; +} + +.personal .uni-list:after { + height: 0 !important; +} + +.personal .uni-list-item__icon { + margin-right: 0 !important; +} + +.personal .uni-list-item__extra-text { + font-size: 1rem !important; + color: #101010 !important; + font-weight: bold; +} + +.personal .uni-list--border-top, +.uni-list--border-bottom, +.uni-list--border::after { + background-color: transparent !important; +} + +uni-modal .uni-modal__ft { + font-size: 0.875rem; +} + +uni-modal .uni-modal__title { + color: #333; +} + +uni-modal .uni-modal__bd { + padding: 1.3em 1.6em 1.3em; + min-height: 40px; + /* font-size: 15px; */ + line-height: 1.4; + /* color: #999; */ + max-height: 400px; + overflow-x: hidden; + overflow-y: auto; +} + +uni-modal .uni-modal__hd { + padding: 1em 1.6em .3em; + height: 30px; +} + +/*dy_add*/ +.btn_unusual button { + margin-right: 10rpx; +} + +.btn_unusual button:last-child { + margin-right: 0; +} + +/* .tit_ljh .text_white{ + color: #fff !important; + font-size: 0.725rem; + font-weight: normal; + padding: 4rpx; +} */ +.bot_card .pending { + color: #5FCB94; +} + +.camera_pop { + border-top-left-radius: 16rpx; + border-top-right-radius: 16rpx; +} + +.camera_list { + padding: 20rpx; + box-sizing: border-box; + max-height: 75vh; + overflow-y: scroll; +} + +.camera_list .list_cell { + border-bottom: 1px solid #eee; + box-shadow: none; + margin-bottom: 0; +} + +.camera_list .list_cell .uni-easyinput { + padding-right: 0; +} + +.camera_list .list_cell .title { + color: #666; +} + +.camera_list .selected-item { + font-size: 0.875rem; +} + +.camera_list .input-value span { + padding: 0; + font-size: 0.875rem; +} + +.camera_pop .pop_btn { + background-color: #fff; +} + +.cell_box .result_card .text_black { + font-size: 1rem; +} + +.cell_box .result_card .red { + color: #c00; +} + +.new_btn_bot .btn_triple { + margin-right: 10rpx; +} + +.cell_box .scan_btn_fr { + float: right; + background-color: #ececec; + color: #5A7CF3; + font-size: 0.725rem; + padding: 10rpx 20rpx; + border-radius: 16rpx; + line-height: 2; + margin: 0 20rpx 20rpx 0; + height: 60rpx; +} + +.cell_box .scan_btn_fr image { + /* margin-top: 4rpx; */ + /* float: left; */ +} + +.cell_box .scan_btn_fr text {} + +.login_wrap .content-clear-icon { + display: none; +} + +.login_wrap .conone .uni-easyinput { + padding-left: 10rpx !important; +} + +.quality_cell { + height: auto !important; +} + +.quality_cell .title { + line-height: 80rpx; + color: #666; +} + +.check_textarea { + font-size: 0.875rem; + color: #333; +} + +.check_textarea uni-textarea { + padding: 10rpx 20rpx; + height: 40px; +} + +.check_textarea .uni-textarea-placeholder { + font-size: 0.875rem; + color: #ccc; +} + +.common_card .ljh_box, +.pop_card .ljh { + width: 100%; + box-sizing: border-box; +} + +.common_card .ljh_box .tit_ljh, +.pop_card .ljh_box .tit_ljh { + float: left; + width: 50%; +} + +.common_card .ljh_info, +.pop_card .ljh_info { + width: 100%; + box-sizing: border-box; +} + +.common_card .desc_card, +.pop_card .desc_card { + width: 100%; + box-sizing: border-box; + padding: 0; +} + +.common_card .label_xm, +.pop_card .label_xm { + background-color: #45B5F3; + line-height: 2.0; + padding: 0 10rpx; + color: #fff; + border-radius: 8rpx; + max-width: 300rpx; + font-size: 0.7rem; + overflow: visble; + word-break: break-all; + /* overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-size: 0.7rem;*/ +} + +.result_nodata text { + display: inline-block; + width: 100%; + text-align: center; + color: #999; + font-size: 1.125rem; + margin-top: -20rpx; +} + +.passwordpage .uni-forms-item__label { + width: 180rpx !important; +} + +/* 20221114add */ +.semi_col { + margin-top: 0; +} + +.semi_col .uni-collapse-item__title-text span { + font-size: 1rem; + /* font-weight: bold; */ +} + +.semi_col .common_card .ljh_box .tit_ljh { + font-size: 1rem; + width: 56%; + /* font-weight: normal; */ +} + +.semi_col .num_color { + color: #EC5B28; +} + +.issuelist { + position: relative; +} + +.issuelist .notuse, +.issuelist .use { + float: right; + color: #333; + font-size: 0.825rem; +} + +.issuelist .notuse image, +.issuelist .use image { + vertical-align: middle; +} + +.issuecard .task_num { + border: 0; + margin-bottom: 0; + padding: 0; + + border-bottom: 1px solid #eee; + padding-bottom: 10rpx; + margin-bottom: 10rpx; + overflow: hidden; +} + +.issuelist .tag_icon { + width: 94rpx; + height: 94rpx; + position: absolute; + right: 0; + top: -6rpx; +} + +button::after { + border: none; + border-radius: 0; +} + +.btn_confirm { + width: 50%; + border: none; + background: #009EFF; + border-radius: 0; + color: #FFFFFF; +} + +.btn_cancle { + width: 50%; + border: none; + background: #FFFFFF; + border-radius: 0; + color: #000000; +} + +.line_color { + /* color: #E7E6E4; */ + color: #F5EBF4; + /* padding-top: 10rpx; + padding-bottom: 10rpx; */ +} + + + +.filter_button { + font-size: 28rpx; + padding-left: 20rpx; + padding-right: 20rpx; + /* width: 240rpx; */ + color: #fff; + background-color: #3C9CFF; +} + +.filter_button_after { + opacity: 0.7; +} + +.btn_edit_big_confirm { + font-size: 35rpx; + width: 50%; + color: #fff; + background-color: #3C9CFF; + border: none; + border-radius: 0; +} + +.btn_edit_big_cancle { + font-size: 35rpx; + width: 50%; + color: #303133; + border: none; + border-radius: 0; + box-shadow: none; + background-color: #fff; + +} + +.btn_edit_big_after { + opacity: 0.7; +} + +.btn_add_big { + background-color: #D8D8D8; + color: #fff; + text-align: center; + display: flex; + justify-content: center; + align-items: center; +} + +.icons_close { + width: 70rpx; + height: 70rpx; + margin: 10rpx; +} + +.paizhao { + padding-bottom: 10rpx; + padding-top: 20rpx; + padding-left: 20rpx; +} + +.paizhao image { + width: 50rpx; + height: 50rpx; +} + +.card_partCode { + font-size: 36rpx; + font-weight: 500; + padding: 10rpx; + +} + +.card_itemCode { + font-size: 36rpx; + /* font-weight: 500; */ + padding: 5rpx 10rpx; +} + +.card_itemName { + color: #909399; + font-size: 30rpx; + padding: 5rpx 20rpx; +} + +.card_ProdLine { + color: #909399; + font-size: 30rpx; + padding: 5rpx 30rpx; +} + + +/* .std_pack { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 0px; + color: #909399; + font-size: 30rpx; +} + */ + + +.card_content { + font-size: 32rpx; + padding: 5px; +} + +.card_icon_normal { + width: 45rpx; + height: 45rpx; + vertical-align: middle +} + +.card_packing_code { + color: #3315EB; + padding: 5px; +} + +.card_packing_code_content { + font-size: 32rpx; + padding: 5px; +} + +.card_batch { + color: #9747FF; + padding: 5px; +} + + +.card_batch_content { + font-size: 32rpx; + padding: 5px; +} + +.card_container { + color: #0076F6; + padding: 5px; +} + + +.card_container_content { + font-size: 32rpx; + padding: 5px; +} + +.card_business { + color: #F1A532; + padding: 5px; +} + +.card_business_content { + font-size: 32rpx; + padding: 5px; +} + +.card_location { + color: #DA8910; + padding: 5px; +} + +.card_to_location { + color: #329362; + padding: 5px; +} + +.card_location_content { + font-size: 32rpx; + padding: 5px; +} + +.card_supportCode { + color: #DA8910; +} + +.card_supportCode_content { + font-size: 32rpx; +} + +.scan_view { + /* #0CC2B6 20% */ + background: linear-gradient(90deg, rgba(12, 194, 182, 0.2) 0%, rgba(12, 194, 182, 0) 100%) +} + +.card_view { + font-size: 32rpx; + padding: 5rpx; +} + +/* +.pack_view { + font-size: 32rpx; + padding: 5rpx; +} + +.location_view { + font-size: 32rpx; + padding: 5rpx; +} + +.batch_view { + font-size: 32rpx; + padding: 5rpx; +} + */ +.business_view { + font-size: 32rpx; + padding: 5rpx; +} + +.pop_customer { + border-radius: 8rpx; + background-color: #fff; +} + +.nodata { + width: 390rpx; + height: 300rpx; +} + +.text_ellipsis { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.task_top { + margin: 0rpx 10rpx; + background-color: #fff; +} + +.task_item { + margin: 0rpx 10rpx; + margin-top: 10rpx; + background-color: #fff; +} + +.task_card { + padding: 12rpx; + background-color: #fff; + border-radius: 10rpx; + margin: 12rpx; +} + +.task_number { + font-size: 35rpx; + font-weight: 600; + /* bold */ +} + +.task_text { + font-size: 30rpx; + margin: 5rpx 0rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.request_state_un-doing { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #22AF68; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.job_state_doing { + font-size: 28rpx; + background: rgba(236, 156, 0, 0.2); + color: #EC9C00; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.job_state_un-doing { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #22AF68; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.job_state_completed { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #22AF68; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.job_state_close { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #22AF68; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + + +.job_state_cancelled { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #ff0000; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.pop_detail { + background-color: #fff; + width: 100%; + border-radius: 8rpx 8rpx 0rpx 0rpx; + padding: 15rpx; +} + +.pop_detail .item { + padding-top: 5rpx; + padding-bottom: 5rpx; + + margin-left: 10rpx; + margin-right: 10rpx; + + display: flex; + flex-direction: row; + + -webkit-justify-content: space-between; + justify-content: space-between; +} + +.pop_detail .item_title { + padding-top: 5rpx; + padding-bottom: 5rpx; +} + +.pop_detail .text_wrap { + color: #909399; + word-break: break-all; + text-align: right; +} + +.pop_detail .item_big_title { + /* color: #2196F3; */ + /* font-size: 35rpx; */ + margin-left: 10rpx; + margin-right: 10rpx; + margin-top: 10rpx; + margin-bottom: 10rpx; +} + + + + +/deep/.uni-popup .uni-popup__wrapper { + width: 100% !important; + padding: 15rpx 20rpx 15rpx 20rpx; +} + +.btn_bottom { + position: fixed; + bottom: 10rpx; + right: 0; +} + +.btn_add_small { + + background-color: #3C9CFF; + width: 200rpx; + font-size: 30rpx; + color: #fff; + border-radius: 5rpx; +} + +.btn_add_small_after { + opacity: 0.7; +} + +.btn_commit_after { + opacity: 0.7; +} + +/* 禁用时样式 */ +button[disabled] { + background-color: #fff; + color: #666; +} + +.btn_commit { + background-color: #3C9CFF; + font-size: 30rpx; + color: #fff; + text-align: center; + padding-left: 80rpx; + padding-right: 80rpx; + margin-right: 20rpx; + margin-left: 10rpx; +} + +.btn_add { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + + position: absolute; + width: 97%; + height: 35px; + border-radius: 3px; + opacity: 1; + padding: 5px; + margin-left: 5px; + margin-right: 5px; + + box-sizing: border-box; + border: 1px dashed #AAAAAA; + background: #D8D8D8; + + color: #FFFFFF; + font-size: 16px; + font-weight: normal; + line-height: 26px; + letter-spacing: 0em; +} + +.btn_clear_after { + opacity: 0.7; +} + + +.btn_clear { + background-color: #fff; + font-size: 30rpx; + color: #000; + text-align: center; + padding-left: 80rpx; + padding-right: 80rpx; + margin-right: 10rpx; + margin-left: 20rpx; +} + +.icons_scan_close { + width: 35rpx; + height: 35rpx; +} + +.count_image { + width: 45rpx; + height: 45rpx; +} + +.count_type_light { + color: #0CC2B6; + font-size: 30rpx; + margin-left: 10rpx; + margin-right: 10rpx; +} + +.count_type_black { + color: #FA5151; + font-size: 30rpx; + margin-left: 10rpx; + margin-right: 10rpx; +} + +.btn_bot { + position: fixed; + bottom: 0; + right: 0; + padding-bottom: 20rpx; + padding-right: 20rpx; + z-index: 10; +} + +.btn_single_commit { + background-color: #3C9CFF; + font-size: 30rpx; + color: #fff; + text-align: center; + width: 300rpx; +} + +.btn_single_reset { + background-color: darkgray; + font-size: 30rpx; + color: #fff; + text-align: center; + width: 300rpx; +} + +.btn_single_after { + opacity: 0.7; +} + +.center { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.space_between { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.text_recommend { + color: #0A84FF; + font-size: 38rpx; +} + +.text_balance { + font-size: 36rpx; +} + +.text_default { + color: #000000; + font-size: 36rpx; +} + +.text_greater { + color: #F56C6C; + font-size: 36rpx; +} + +.text_less { + color: #FF9500; + font-size: 36rpx; +} + +.text_equal { + color: #34C759; + font-size: 38rpx; +} + +.std_pack { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 0px; + color: #909399; + font-size: 30rpx; +} + +.std_uom { + color: #909399; + font-size: 30rpx; + margin-left: 5rpx; + margin-right: 5rpx; +} + +.uom { + color: #909399; + font-size: 30rpx; + margin-left: 5rpx; + margin-right: 5rpx; + display: flex; + flex-direction: row; + align-items: center; +} + + +.std_split { + color: #909399; + font-size: 36rpx; + margin-left: 5rpx; + margin-right: 5rpx; +} + +.inspect_job { + color: #F1A532; + font-size: 36rpx; + margin-right: 10rpx; +} + +.ok_job { + color: #53C21D; + font-size: 36rpx; + margin-right: 2rpx; +} + +.nook_job { + color: #E45656; + font-size: 36rpx; + margin-right: 10rpx; +} + +.raw_location { + padding-top: 5rpx; + padding-bottom: 5rpx; + padding-left: 15rpx; + padding-right: 15rpx; + background-color: #34C759; + color: #fff; + font-size: 35rpx; +} + +.fg_location { + padding-top: 5rpx; + padding-bottom: 5rpx; + padding-left: 15rpx; + padding-right: 15rpx; + background-color: #5A7CF3; + color: #fff; + font-size: 35rpx; +} + +.semi_location { + padding-top: 5rpx; + padding-bottom: 5rpx; + padding-left: 15rpx; + padding-right: 15rpx; + background-color: #FF9500; + color: #fff; + font-size: 35rpx; +} + +.hold_location { + padding-top: 5rpx; + padding-bottom: 5rpx; + padding-left: 15rpx; + padding-right: 15rpx; + background-color: #F56C6C; + color: #fff; + font-size: 35rpx; +} + +.unk_location { + padding-top: 5rpx; + padding-bottom: 5rpx; + padding-left: 15rpx; + padding-right: 15rpx; + background-color: #999999; + color: #fff; + font-size: 35rpx; +} + +.qty_input { + width: 150rpx; + height: 60rpx; + line-height: 10rpx; + font-size: 10rpx; + color: #000000; + text-align: right; + border: 1px solid rgb(220, 211, 211); + padding: 5rpx; +} + +.qty_inspect_input { + width: 150rpx; + height: 60rpx; + line-height: 10rpx; + font-size: 10rpx; + color: #000000; + text-align: center; + border: 1px solid rgb(220, 211, 211); + padding: 5rpx; +} + +.icon_close { + width: 100rpx; + height: 100rpx; + opacity: 1; + +} + +.icon_edit { + width: 30rpx; + height: 40%; + opacity: 1; + margin-left: 10rpx; +} + +.title_popup { + margin-top: 16px; + margin-bottom: 16px; + margin-left: 8px; + margin-right: 8px; + font-size: 35rpx; + text-align: center; +} + +.close_button { + /* 自动布局子元素 */ + position: static; + left: 20px; + /* top: 1109.01px; */ + width: 100%; + height: 40px; + border-radius: 40px; + opacity: 1; + + /* 自动布局 */ + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + padding: 9px 12px; + gap: 10px; + align-self: stretch; + + /* 颜色/白色 */ + background: #FFFFFF; + box-sizing: border-box; + /* 颜色/边框 */ + border: 1px solid #E7E6E4; + z-index: 3; +} + +/** + * 申请状态 新增 + */ +.request_status_new { + font-size: 28rpx; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; + background: rgba(34, 175, 104, 0.2); + color: rgba(34, 175, 104, 1); +} + +/** + * 申请状态 审批中 + */ +.request_status_reviewing { + font-size: 28rpx; + background: rgba(236, 156, 0, 0.2); + color: rgba(236, 156, 0, 1); + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 审批通过 + */ +.request_status_agreed { + font-size: 28rpx; + background: rgba(103, 194, 57, 0.2); + color: rgba(103, 194, 57, 1); + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 审批驳回 + */ +.request_status_refused { + font-size: 28rpx; + background: rgba(245, 108, 108, 0.2); + color: rgba(245, 108, 108, 1); + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 处理中 + */ +.request_status_handling { + font-size: 28rpx; + background: rgba(60, 156, 255, 0.2); + color: rgba(60, 156, 255, 1); + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 部分完成 + */ +.request_status_partial { + font-size: 28rpx; + background: #D3FF3C; + color: #ffffff; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 已完成 + */ +.request_status_completed { + font-size: 28rpx; + background: #D3FF3C; + color: #ffffff; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 中止 + */ +.request_status_abort { + font-size: 28rpx; + background: #F33140; + color: #ffffff; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/** + * 申请状态 已关闭 + */ +.request_status_cancelled { + font-size: 28rpx; + background: #F33140; + color: #ffffff; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +.split_line { + background-color: #e0e0e0; + height: 1px; + margin: 10rpx; +} \ No newline at end of file diff --git a/src/common/style/pdabasic.css b/src/common/style/pdabasic.css new file mode 100644 index 0000000..baae1d9 --- /dev/null +++ b/src/common/style/pdabasic.css @@ -0,0 +1,762 @@ +/* +.pda-list { + padding: 10rpx 10rpx; + box-sizing: border-box; + display: flex; + width: 100%; + flex-direction: row; +} + */ + +/* 列表 */ +.pda-list { + padding: 0 20rpx; + box-sizing: border-box; + background-color: #FFFFFF; + position: relative; + width: 100%; + display: flex; + flex-direction: column; + border-radius: 16rpx; + margin-bottom: 10rpx; +} + +.pda-list:after { + position: absolute; + z-index: 10; + /* right: 0; */ + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.pda-list-cell { + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid #eee; + padding: 10rpx 0; +} + +.pda-list-cell:last-child { + border-bottom: 0; +} + +.pda-list-cell-left { + white-space: nowrap; + /* padding: 0 10rpx; */ +} + +.pda-list-cell-db, +.pda-list-cell-right { + flex: 1; +} + +.pda-list-cell .pda-list-cell-db .uni-input-input { + font-size: .875rem; +} + +.pda-list-cell .uni-easyinput__content-input, +.pda-list-cell .uni-input-placeholder { + height: 2rem; + line-height: 2rem; +} + +.pda-list-cell .placeholder { + color: #999 !important; + font-size: 0.875rem; + padding-left: 10rpx; +} + +.pda-list-cell .uni-label { + color: #434556; +} + +.list_locode .uni-collapse-item__title-box { + font-weight: bold !important; +} + +.display-flex { + display: flex; + justify-content: space-between; + align-items: center; +} + +.list-body { + /* height: 84rpx; */ + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + overflow: hidden; +} + +.list-text-top { + width: 100%; + color: #000; + font-weight: bolder; + /* line-height: 36rpx; */ + /* font-size: 30rpx; */ +} + +.list-text-bottom { + /* line-height: 30rpx; */ + /* font-size: 26rpx; */ + color: #8f8f94; +} + + +/* 改为detail-content */ +/* margin-bottom: 20rpx; */ +.device-detail { + padding: 10rpx !important; + margin: 10rpx; + border-radius: 16rpx; + background-color: #fff; + color: #666666; + line-height: 1.5; + overflow: hidden; +} + +.list-style { + margin-bottom: 0rpx; + border-radius: 16rpx; + background-color: #FFFFFF; + color: #666666; + line-height: 1.5; +} + +.border-font { + color: #000; + font-weight: bolder; +} + +.space-between { + -webkit-justify-content: space-between; + justify-content: space-between; +} + +.accept-button { + width: 30%; + font-size: 16px; + background-color: #7ac756; + color: #ffffff; +} + +.bigsave-button { + width: 80%; + font-size: 16px; + background-color: #007AFF; + color: #ffffff; +} + +.save-button { + width: 30%; + font-size: 16px; + background-color: #007AFF; + color: #ffffff; +} + +.scroll-detail { + overflow: hidden; + padding-bottom: 60px; + height: 480px; + /* 没有高度不可以回到顶部 */ + /* background-color: #ffffff; */ +} + +.scrollView { + overflow: hidden; + padding-bottom: 50px +} + +.scroll-Y { + /* height: 70ux; */ + padding-bottom: 50px +} + +.bottom1 { + position: fixed; + width: 100%; + /* padding: 10rpx 10rpx; */ + left: 0; + /* right: 0; */ + bottom: 0; + background-color: #ffffff; +} + +.bottom { + position: fixed; + display: flex; + width: 100%; + padding: 10rpx 10rpx; + left: 0; + /* right: 0; */ + bottom: 0; + background-color: #ffffff; +} + + +.pars-num { + /* font-size: 26rpx; */ +} + +.right-width { + text-align: center; + width: 100rpx; +} + +.state-style { + float: left; + margin-top: 10rpx; + /* border-radius: 16rpx; + padding: 0rpx 10rpx; */ + /* line-height: 50rpx; + height: 50rpx; */ + /* width: 120rpx; + display: flex; + flex-direction: column; + align-items: center; */ + /* 垂直居中 */ +} + +.uni-popup-view { + background-color: #fff; + border-radius: 10px; +} + +.uni-popup-button-box { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: row; + padding: 10px 15px; +} + +.uni-popup-button { + flex: 1; + /* // border-radius: 50px; + // color: #666; */ + /* font-size: 16px; */ +} + +/* 任务状态 */ +/* 打开 */ +.open { + font-size: 28rpx; + background: rgba(95, 203, 148, 0.2); + color: #22AF68; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/* 进行中 */ +.pending { + font-size: 28rpx; + background: rgba(236, 156, 0, 0.2); + color: #EC9C00; + padding: 10rpx 20rpx 10rpx 20rpx; + border-radius: 10rpx; +} + +/* 完成 */ +.completed { + background-color: #E6A23C; + color: #FFFFFF; + border-radius: 10rpx; +} + +/* 关闭 */ +.close { + background-color: #F56C6C; + color: #FFFFFF; +} + + +/* 关闭 */ +.other { + background-color: #808080; + color: #FFFFFF; + border-radius: 10rpx; +} + +/* 其他 */ +.unk { + background-color: #ececec; + color: #666; + border-radius: 10rpx; +} + +/* 检验任务状态 */ +/* 免检 */ +.exempt { + background-color: #409EFF; + color: #FFFFFF; +} + +/* 全检 */ +.full { + background-color: #67C23A; + color: #FFFFFF; +} + +/* 抽检 */ +.sampling { + background-color: #E6A23C; + color: #FFFFFF; +} + +/* 挑检 */ +.pick { + background-color: #F56C6C; + color: #FFFFFF; +} + +/* 库存状态 */ + +.uni-link { + background-color: #BD2C00; + color: #BD2C00 !important; +} + +.inventory_status_insp { + color: #F9AE3D; + margin-right: 10rpx; +} + +.inventory_status_ok { + color: #67C23A; + margin-right: 10rpx; +} + +.inventory_status_nok { + color: #FF2424; + margin-right: 10rpx; +} + +.inventory_status_hold { + color: #EC9C00; + margin-right: 10rpx; +} + +.inventory_status_scarp { + color: #999; + margin-right: 10rpx; +} + +.frozen { + color: #FF581D; + margin-right: 10rpx; +} + +.pass { + color: #67C23A !important; +} + +.unPass { + color: #FF2424 !important; +} + +.location_inspect { + background-color: #F6CB61; + color: #FFFFFF; +} + +.location_raw { + background-color: #2DA8D8; + color: #FFFFFF; +} + +.location_semi { + background-color: #EDAE50; + color: #FFFFFF; +} + +.location_fg { + background-color: #078343; + color: #FFFFFF; +} + +.location_wip { + background-color: #FC85FE; + color: #FFFFFF; +} + +.location_scrap { + background-color: #E30016; + color: #FFFFFF; +} + +.location_noc { + background-color: #C31223; + color: #FFFFFF; +} + +.location_overflow { + background-color: #7D1EDC; + color: #FFFFFF; +} + +.location_customer { + background-color: #5A7CF3; + color: #FFFFFF; +} + +.location_hold { + background-color: #FF8C00; + color: #FFFFFF; +} + + + + +/* //物料状态 +export function getItemTypeStyle(val) { + if (val == 0) return 'active' + else if (val == 1) return 'hold' + else if (val == 2) return 'new' + else if (val == 3) return 'plan' + else if (val == 4) return 'disable' + else return 'other' +} + */ + +/* 物料状态 */ +.active { + background-color: #5FCB94; + color: #FFFFFF; +} + +.hold_item { + background-color: #FF4206; + color: #FFFFFF; +} + +.new { + background-color: #E6A23C; + color: #FFFFFF; +} + +.plan { + background-color: #2677F9; + color: #FFFFFF; +} + +.disable { + background-color: #666; + color: #FFFFFF; +} + +/* 任务编号字体 */ +.text-number { + color: #000; + font-weight: bolder; +} + +/* 物料编号字体 */ +.text-itemcode { + /* font-size: 26rpx; */ + color: #000; + font-weight: bolder; +} + +.text-desc { + color: #8f8f91; + /* font-size: 22rpx; */ +} + +/* 物料编号字体 */ +.text-bolder { + color: #000; + font-weight: bolder; +} + +.detail-list { + background-color: #fff; + padding:5rpx 10rpx; + /* margin: 20rpx; */ + /* border-radius: 16rpx; */ + /* overflow: hidden; */ +} + +.detail-content { + position: relative; + flex: 1; + /* font-size: 26rpx; */ + color: #101010; +} + +.example-body { + background-color: #FFFFFF; +} + +.result-box { + text-align: center; + padding: 20px 0px; + /* font-size: 16px; */ +} + +.toptext { + padding-left: 20upx; + line-height: 80upx; +} + +.numberstyle { + display: flex; + /* flex-direction: row-reverse; */ + border-bottom: 10upx solid #EEEEEE; + width: 200upx; + padding-bottom: 20upx; +} + +.input { + height: 20rpx; + padding: 0rpx 8rpx; + line-height: 50rpx; + /* font-size: 25rpx; */ + background: #FFF; + border-radius: 4rpx; + flex: 1; +} + +.mini-type-style { + vertical-align: middle; + font-size: 0.725rem; + margin-right: 6rpx; + border-radius: 4rpx; + padding: 4rpx 8rpx; + /* width: 80rpx; */ + /* height: 46rpx; + min-width: 80rpx; + display: flex; + flex-direction: column; */ + +} + +.text-color { + color: #000; + font-weight: bolder; +} + +.tabs { + flex: 1; + flex-direction: column; + overflow: hidden; + /* background-color: #ffffff; */ +} + +/* .scroll-h { + touch-action: none; + width: 100%; + height: 100rpx; + flex-direction: row; + white-space: nowrap; + justify-content: center; +} */ + +.line-h { + height: 1rpx; + background-color: #cccccc; +} + +.uni-tab-item { + /* #ifndef APP-PLUS */ + display: inline-block; + /* #endif */ + flex-wrap: nowrap; + padding: 0 30rpx; +} + +.uni-tab-item-title { + position: relative; + color: #555; + /* font-size: 24rpx; */ + height: 100rpx; + line-height: 100rpx; + flex-wrap: nowrap; + /* #ifndef APP-PLUS */ + white-space: nowrap; + /* #endif */ +} + +.uni-tab-item-title-active { + color: #101010; + font-weight: bold; +} + +.uni-tab-item-title-active:after { + left: 50%; + transform: translateX(-50%); + position: absolute; + bottom: -20rpx; + display: inline-block; + content: ""; + width: 40rpx; + height: 8rpx; + background-color: #5a7cf3; + border-radius: 5px; +} + +/* .blece { + padding: 10upx; + color: #111111; + border-bottom: 2px solid #f5f5f5; + display: flex; + flex-wrap: wrap; +} */ + +.conbox { + /* padding: 10rpx 0; */ + padding-left: 10rpx; +} + +.myinput { + display: flex; + box-sizing: border-box; + overflow: hidden; + position: relative; + flex: 1; + justify-content: center; + flex-direction: row; + align-items: center; + height: 88rpx; + padding: 20rpx 0; + /* border-width: 0.5px; + border-style: solid; + border-color: #e5e5e5; + border-radius: 5px; + background-color: rgb(248, 248, 248); + font-size: 18px;*/ + font-size: .825rem; +} + +.qtyinput { + height: 50px; + padding: 10px 0px; + font-size: 20px; +} + + +.count-input { + padding: 5rpx 3rpx; + width: 95%; + font-size: 18px; +} + +.pda-data-picker { + padding: 5rpx 3rpx; + width: 95%; + font-size: 18px; +} + +.inputPlaceholderStyle { + font-size: 16px; +} + +.inputfocus { + border-color: #007AFF; +} + + +.txt-16 { + font-size: 16px; +} + +.txt-18 { + font-size: 18px; +} + +.txt-20 { + font-size: 20px; +} + +.pda-label { + width: 210rpx; + word-wrap: break-word; + word-break: break-all; + text-indent: 20rpx; + font-size: 16px; +} + +.fontsize-16 { + font-size: 16px; +} + +.fontsize-18 { + font-size: 18px; +} + +.fontsize-20 { + font-size: 20px; +} + +/deep/ .uni-collapse-item__title-text { + font-size: 16px; +} + + +/deep/ .input-value { + font-size: 16px; +} + +/deep/ .uni-input-input { + font-size: 18px; +} + +page { + width: 100%; + height: 100%; + background-color: #fff; +} + +.page-wraper { + display: flex; + flex-direction: column; + width: 100%; + height: 100%; + /* background-color: #fff; */ +} + +.page-header { + background-color: #fff; + font-size: 35rpx; + padding: 10rpx 20rpx; +} + +.page-header .header_item { + /* padding-left: 10rpx; */ + padding: 5rpx 10rpx; + font-size:32rpx ; +} + +.page-header .header_job_top { + padding:5rpx 0rpx; +} +.page-main { + flex: 1; + position: relative; + background: #fff; +} + +.page-main-scroll { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} + +.page-main-list { + /* height: 80rpx; + line-height: 80rpx; */ + text-align: center; + background: #e0e0e0; + +} diff --git a/src/common/style/uni.css b/src/common/style/uni.css new file mode 100644 index 0000000..6b1ded6 --- /dev/null +++ b/src/common/style/uni.css @@ -0,0 +1,3405 @@ +@font-face { + font-family: uniicons; + font-weight: normal; + font-style: normal; + src: url('~@/static/uni.ttf') format('truetype'); +} + +/* #ifdef H5 */ +.fix-left-window { + padding-left: var(--window-left); +} + +.pc-hide { + display: none !important; +} + +/* #endif */ + +/*通用 */ + +/* view{ + font-size:28rpx; + line-height:1.8; +} */ +progress, +checkbox-group { + width: 100%; +} + +form { + width: 100%; +} + +.uni-flex { + display: flex; + flex-direction: row; +} + +.uni-flex-item { + flex: 1; +} + +.uni-row { + flex-direction: row; +} + +.uni-column { + flex-direction: column; +} + +.uni-link { + color: #576B95; + font-size: 26rpx; +} + +.uni-center { + text-align: center; +} + +.uni-inline-item { + display: flex; + flex-direction: row; + align-items: center; + /* justify-content: center; */ + /* background-color: #888888; */ +} + +/* .uni-inline-item text { + margin-right: 20rpx; +} + */ +/* .uni-inline-item text:last-child { + margin-right: 0rpx; + margin-left: 20rpx; +} */ + +/* page */ +.common-page-head { + padding: 35rpx; + text-align: center; +} + +.common-page-head-title { + display: inline-block; + padding: 0 40rpx; + font-size: 30rpx; + height: 88rpx; + line-height: 88rpx; + color: #BEBEBE; + box-sizing: border-box; + border-bottom: 2rpx solid #D8D8D8; +} + +.uni-padding-wrap { + /* width:690rpx; */ + padding: 0 30rpx; +} + +.uni-word { + text-align: center; + padding: 200rpx 100rpx; +} + +.uni-title { + font-size: 30rpx; + font-weight: 500; + padding: 20rpx 0; + line-height: 1.5; +} + +.uni-text { + font-size: 28rpx; +} + +.uni-title text { + font-size: 24rpx; + color: #888; +} + +.uni-text-gray { + color: #ccc; +} + +.uni-text-small { + font-size: 24rpx; +} + +.uni-common-mb { + margin-bottom: 30rpx; +} + +.uni-common-pb { + padding-bottom: 30rpx; +} + +.uni-common-pl { + padding-left: 30rpx; +} + +.uni-common-mt { + margin-top: 30rpx; +} + +/* 背景色 */ +.uni-bg-red { + background: #F76260; + color: #FFF; +} + +.uni-bg-green { + background: #09BB07; + color: #FFF; +} + +.uni-bg-blue { + background: #007AFF; + color: #FFF; +} + +.uni-bg-white { + background: #FFFFFF; +} + +/* 标题 */ +.uni-h1 { + font-size: 80rpx; + font-weight: 700; +} + +.uni-h2 { + font-size: 60rpx; + font-weight: 700; +} + +.uni-h3 { + font-size: 48rpx; + font-weight: 700; +} + +.uni-h4 { + font-size: 36rpx; + font-weight: 700; +} + +.uni-h5 { + font-size: 28rpx; + color: #8f8f94; +} + +.uni-h6 { + font-size: 24rpx; + color: #8f8f94; +} + +.uni-bold { + font-weight: bold; +} + +/* 文本溢出隐藏 */ +.uni-ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* 竖向百分百按钮 */ +.uni-btn-v { + padding: 10rpx 0; +} + +.uni-btn-v button { + margin: 20rpx 0; +} + +/* 表单 */ +.uni-form-item { + display: flex; + width: 100%; + padding: 10rpx 0; +} + +.uni-form-item .title { + padding: 10rpx 25rpx; +} + +.uni-label { + width: 210rpx; + word-wrap: break-word; + word-break: break-all; + text-indent: 20rpx; +} + +.uni-input { + height: 80rpx; + padding: 15rpx 25rpx; + line-height: 80rpx; + font-size: 28rpx; + background: #FFF; + flex: 1; +} + +radio-group, +checkbox-group { + width: 100%; +} + +radio-group label, +checkbox-group label { + padding-right: 20rpx; +} + +.uni-form-item .with-fun { + display: flex; + flex-wrap: nowrap; + background: #FFFFFF; +} + +.uni-form-item .with-fun .uni-icon { + width: 40px; + height: 80rpx; + line-height: 80rpx; + flex-shrink: 0; +} + +/* loadmore */ +.uni-loadmore { + height: 80rpx; + line-height: 80rpx; + text-align: center; + padding-bottom: 30rpx; +} + +/*数字角标*/ +/* .uni-badge, +.uni-badge-default { + font-family: 'Helvetica Neue', Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + display: inline-block; + padding: 3px 6px; + color: #333; + border-radius: 100px; + background-color: rgba(0, 0, 0, .15); +} */ +.uni-badge.uni-badge-inverted { + padding: 0 5px 0 0; + color: #929292; + background-color: transparent +} + +.uni-badge-primary { + color: #fff; + background-color: #007aff +} + +.uni-badge-blue.uni-badge-inverted, +.uni-badge-primary.uni-badge-inverted { + color: #007aff; + background-color: transparent +} + +.uni-badge-green, +.uni-badge-success { + color: #fff; + background-color: #4cd964; +} + +.uni-badge-green.uni-badge-inverted, +.uni-badge-success.uni-badge-inverted { + color: #4cd964; + background-color: transparent +} + +.uni-badge-warning, +.uni-badge-yellow { + color: #fff; + background-color: #f0ad4e +} + +.uni-badge-warning.uni-badge-inverted, +.uni-badge-yellow.uni-badge-inverted { + color: #f0ad4e; + background-color: transparent +} + +.uni-badge-danger, +.uni-badge-red { + color: #fff; + background-color: #dd524d +} + +.uni-badge-danger.uni-badge-inverted, +.uni-badge-red.uni-badge-inverted { + color: #dd524d; + background-color: transparent +} + +.uni-badge-purple, +.uni-badge-royal { + color: #fff; + background-color: #8a6de9 +} + +.uni-badge-purple.uni-badge-inverted, +.uni-badge-royal.uni-badge-inverted { + color: #8a6de9; + background-color: transparent +} + +/*折叠面板 */ +.uni-collapse-content { + height: 0; + width: 100%; + overflow: hidden; +} + +.uni-collapse-content.uni-active { + height: auto; +} + +/*卡片视图 */ +.uni-card { + background: #fff; + border-radius: 8rpx; + margin: 20rpx 0; + position: relative; + /* box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); */ +} + +.uni-card-content { + font-size: 30rpx; +} + +.uni-card-content.image-view { + width: 100%; + margin: 0; +} + +.uni-card-content-inner { + position: relative; + padding: 30rpx; +} + +.uni-card-footer, +.uni-card-header { + position: relative; + display: flex; + min-height: 50rpx; + padding: 20rpx 30rpx; + justify-content: space-between; + align-items: center; +} + +.uni-card-header { + font-size: 36rpx; +} + +.uni-card-footer { + color: #6d6d72; +} + +.uni-card-footer:before, +.uni-card-header:after { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2rpx; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-card-header:after { + top: auto; + bottom: 0; +} + +.uni-card-media { + justify-content: flex-start; +} + +.uni-card-media-logo { + height: 84rpx; + width: 84rpx; + margin-right: 20rpx; +} + +.uni-card-media-body { + height: 84rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; +} + +.uni-card-media-text-top { + line-height: 36rpx; + font-size: 34rpx; +} + +.uni-card-media-text-bottom { + line-height: 30rpx; + font-size: 28rpx; + color: #8f8f94; +} + +.uni-card-link { + color: #007AFF; +} + +/* 列表 */ +.uni-list { + background-color: #FFFFFF; + position: relative; + width: 100%; + display: flex; + flex-direction: column; +} + +.uni-list:after { + position: absolute; + z-index: 10; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +/* .uni-list::before { + position: absolute; + z-index: 10; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} */ +.uni-list-cell { + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-hover { + background-color: #eee; +} + +.uni-list-cell-pd { + padding: 22rpx 30rpx; +} + +.uni-list-cell-left { + white-space: nowrap; + font-size: 28rpx; + padding: 0 30rpx; +} + +.uni-list-cell-db, +.uni-list-cell-right { + flex: 1; +} + +.uni-list-cell::after { + position: absolute; + z-index: 3; + right: 0; + bottom: 0; + left: 30rpx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list .uni-list-cell:last-child::after { + height: 0rpx; +} + +.uni-list-cell-last.uni-list-cell::after { + height: 0rpx; +} + +.uni-list-cell-divider { + position: relative; + display: flex; + color: #999; + background-color: #f7f7f7; + padding: 15rpx 20rpx; +} + +.uni-list-cell-divider::before { + position: absolute; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-divider::after { + position: absolute; + right: 0; + bottom: 0; + left: 0rpx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-navigate { + font-size: 30rpx; + padding: 22rpx 30rpx; + line-height: 48rpx; + position: relative; + display: flex; + box-sizing: border-box; + width: 100%; + flex: 1; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-navigate { + padding-right: 36rpx; +} + +.uni-navigate-badge { + padding-right: 50rpx; +} + +.uni-list-cell-navigate.uni-navigate-right:after { + font-family: uniicons; + content: '\e583'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom:after { + font-family: uniicons; + content: '\e581'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after { + font-family: uniicons; + content: '\e580'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-collapse.uni-list-cell { + flex-direction: column; +} + +.uni-list-cell-navigate.uni-active { + background: #eee; +} + +.uni-list.uni-collapse { + box-sizing: border-box; + height: 0; + overflow: hidden; +} + +.uni-collapse .uni-list-cell { + padding-left: 20rpx; +} + +.uni-collapse .uni-list-cell::after { + left: 52rpx; +} + +.uni-list.uni-active { + height: auto; +} + +/* 三行列表 */ +.uni-triplex-row { + display: flex; + flex: 1; + width: 100%; + box-sizing: border-box; + flex-direction: row; + padding: 22rpx 30rpx; +} + +.uni-triplex-right, +.uni-triplex-left { + display: flex; + flex-direction: column; +} + +.uni-triplex-left { + width: 84%; +} + +.uni-triplex-left .uni-title { + padding: 8rpx 0; +} + +.uni-triplex-left .uni-text, +.uni-triplex-left .uni-text-small { + color: #999999; +} + +.uni-triplex-right { + width: 16%; + text-align: right; +} + +/* 图文列表 */ +.uni-media-list { + padding: 22rpx 30rpx; + box-sizing: border-box; + display: flex; + width: 100%; + flex-direction: row; +} + +.uni-navigate-right.uni-media-list { + padding-right: 74rpx; +} + +.uni-pull-right { + flex-direction: row-reverse; +} + +.uni-pull-right>.uni-media-list-logo { + margin-right: 0rpx; + margin-left: 20rpx; +} + +.uni-media-list-logo { + height: 84rpx; + width: 84rpx; + margin-right: 20rpx; +} + +.uni-media-list-logo image { + height: 100%; + width: 100%; +} + +.uni-media-list-body { + height: 84rpx; + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + overflow: hidden; +} + +.uni-media-list-text-top { + width: 100%; + line-height: 36rpx; + font-size: 30rpx; +} + +.uni-media-list-text-bottom { + width: 100%; + line-height: 30rpx; + font-size: 26rpx; + color: #8f8f94; +} + +/* 九宫格 */ +.uni-grid-9 { + background: #f2f2f2; + width: 750rpx; + display: flex; + flex-direction: row; + flex-wrap: wrap; + border-top: 2rpx solid #eee; +} + +.uni-grid-9-item { + width: 250rpx; + height: 200rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-bottom: 2rpx solid; + border-right: 2rpx solid; + border-color: #eee; + box-sizing: border-box; +} + +.no-border-right { + border-right: none; +} + +.uni-grid-9-image { + width: 100rpx; + height: 100rpx; +} + +.uni-grid-9-text { + width: 250rpx; + line-height: 4rpx; + height: 40rpx; + text-align: center; + font-size: 30rpx; +} + +.uni-grid-9-item-hover { + background: rgba(0, 0, 0, 0.1); +} + +/* 上传 */ +.uni-uploader { + flex: 1; + flex-direction: column; +} + +.uni-uploader-head { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.uni-uploader-info { + color: #B2B2B2; +} + +.uni-uploader-body { + margin-top: 16rpx; +} + +.uni-uploader__files { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.uni-uploader__file { + margin: 10rpx; + width: 210rpx; + height: 210rpx; +} + +.uni-uploader__img { + display: block; + width: 210rpx; + height: 210rpx; +} + +.uni-uploader__input-box { + position: relative; + margin: 10rpx; + width: 208rpx; + height: 208rpx; + border: 2rpx solid #D9D9D9; +} + +.uni-uploader__input-box:before, +.uni-uploader__input-box:after { + content: " "; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + background-color: #D9D9D9; +} + +.uni-uploader__input-box:before { + width: 4rpx; + height: 79rpx; +} + +.uni-uploader__input-box:after { + width: 79rpx; + height: 4rpx; +} + +.uni-uploader__input-box:active { + border-color: #999999; +} + +.uni-uploader__input-box:active:before, +.uni-uploader__input-box:active:after { + background-color: #999999; +} + +.uni-uploader__input { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; +} + +/*问题反馈*/ +.feedback-title { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 20rpx; + color: #8f8f94; + font-size: 28rpx; +} + +.feedback-star-view.feedback-title { + justify-content: flex-start; + margin: 0; +} + +.feedback-quick { + position: relative; + padding-right: 40rpx; +} + +.feedback-quick:after { + font-family: uniicons; + font-size: 40rpx; + content: '\e581'; + position: absolute; + right: 0; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.feedback-body { + background: #fff; +} + +.feedback-textare { + height: 200rpx; + font-size: 34rpx; + line-height: 50rpx; + width: 100%; + box-sizing: border-box; + padding: 20rpx 30rpx 0; +} + +.feedback-input { + font-size: 34rpx; + height: 50rpx; + min-height: 50rpx; + padding: 15rpx 20rpx; + line-height: 50rpx; +} + +.feedback-uploader { + padding: 22rpx 20rpx; +} + +.feedback-star { + font-family: uniicons; + font-size: 40rpx; + margin-left: 6rpx; +} + +.feedback-star-view { + margin-left: 20rpx; +} + +.feedback-star:after { + content: '\e408'; +} + +.feedback-star.active { + color: #FFB400; +} + +.feedback-star.active:after { + content: '\e438'; +} + +.feedback-submit { + background: #007AFF; + color: #FFFFFF; + margin: 20rpx; +} + +/* input group */ +.uni-input-group { + position: relative; + padding: 0; + border: 0; + background-color: #fff; +} + +.uni-input-group:before { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-group:after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row { + position: relative; + display: flex; + flex-direction: row; + font-size: 28rpx; + padding: 22rpx 30rpx; + justify-content: space-between; +} + +.uni-input-group .uni-input-row:after { + position: absolute; + right: 0; + bottom: 0; + left: 30rpx; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row label { + line-height: 70rpx; +} + +/* textarea */ +.uni-textarea { + width: 100%; + background: #FFF; +} + +.uni-textarea textarea { + width: 96%; + padding: 18rpx 2%; + line-height: 1.6; + font-size: 28rpx; + height: 150rpx; +} + +/* tab bar */ +.uni-tab-bar { + display: flex; + flex: 1; + flex-direction: column; + overflow: hidden; + height: 100%; +} + +.uni-tab-bar .list { + width: 750rpx; + height: 100%; +} + +.uni-swiper-tab { + width: 100%; + white-space: nowrap; + line-height: 100rpx; + height: 100rpx; + border-bottom: 1px solid #c8c7cc; +} + +.swiper-tab-list { + font-size: 30rpx; + width: 150rpx; + display: inline-block; + text-align: center; + color: #555; +} + +.uni-tab-bar .active { + color: #007AFF; +} + +.uni-tab-bar .swiper-box { + flex: 1; + width: 100%; + height: calc(100% - 100rpx); +} + +.uni-tab-bar-loading { + padding: 20rpx 0; +} + +/* comment */ +.uni-comment { + padding: 5rpx 0; + display: flex; + flex-grow: 1; + flex-direction: column; +} + +.uni-comment-list { + flex-wrap: nowrap; + padding: 10rpx 0; + margin: 10rpx 0; + width: 100%; + display: flex; +} + +.uni-comment-face { + width: 70rpx; + height: 70rpx; + border-radius: 100%; + margin-right: 20rpx; + flex-shrink: 0; + overflow: hidden; +} + +.uni-comment-face image { + width: 100%; + border-radius: 100%; +} + +.uni-comment-body { + width: 100%; +} + +.uni-comment-top { + line-height: 1.5em; + justify-content: space-between; +} + +.uni-comment-top text { + color: #0A98D5; + font-size: 24rpx; +} + +.uni-comment-date { + line-height: 38rpx; + flex-direction: row; + justify-content: space-between; + display: flex !important; + flex-grow: 1; +} + +.uni-comment-date view { + color: #666666; + font-size: 24rpx; + line-height: 38rpx; +} + +.uni-comment-content { + line-height: 1.6em; + font-size: 28rpx; + padding: 8rpx 0; +} + +.uni-comment-replay-btn { + background: #FFF; + font-size: 24rpx; + line-height: 28rpx; + padding: 5rpx 20rpx; + border-radius: 30rpx; + color: #333 !important; + margin: 0 10rpx; +} + +/* swiper msg */ +.uni-swiper-msg { + width: 100%; + padding: 12rpx 0; + flex-wrap: nowrap; + display: flex; +} + +.uni-swiper-msg-icon { + width: 50rpx; + margin-right: 20rpx; +} + +.uni-swiper-msg-icon image { + width: 100%; + flex-shrink: 0; +} + +.uni-swiper-msg swiper { + width: 100%; + height: 50rpx; +} + +.uni-swiper-msg swiper-item { + line-height: 50rpx; +} + +/* product */ +.uni-product-list { + display: flex; + width: 100%; + flex-wrap: wrap; + flex-direction: row; +} + +.uni-product { + padding: 20rpx; + display: flex; + flex-direction: column; +} + +.image-view { + height: 330rpx; + width: 330rpx; + margin: 12rpx 0; +} + +.uni-product-image { + height: 330rpx; + width: 330rpx; +} + +.uni-product-title { + width: 300rpx; + word-break: break-all; + display: -webkit-box; + overflow: hidden; + line-height: 1.5; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.uni-product-price { + margin-top: 10rpx; + font-size: 28rpx; + line-height: 1.5; + position: relative; +} + +.uni-product-price-original { + color: #e80080; +} + +.uni-product-price-favour { + color: #888888; + text-decoration: line-through; + margin-left: 10rpx; +} + +.uni-product-tip { + position: absolute; + right: 10rpx; + background-color: #ff3333; + color: #ffffff; + padding: 0 10rpx; + border-radius: 5rpx; +} + +/* timeline */ +.uni-timeline { + margin: 35rpx 0; + display: flex; + flex-direction: column; + position: relative; +} + + +.uni-timeline-item { + display: flex; + flex-direction: row; + position: relative; + padding-bottom: 20rpx; + box-sizing: border-box; + overflow: hidden; + +} + +.uni-timeline-item .uni-timeline-item-keynode { + width: 160rpx; + flex-shrink: 0; + box-sizing: border-box; + padding-right: 20rpx; + text-align: right; + line-height: 65rpx; +} + +.uni-timeline-item .uni-timeline-item-divider { + flex-shrink: 0; + position: relative; + width: 30rpx; + height: 30rpx; + top: 15rpx; + border-radius: 50%; + background-color: #bbb; +} + + + +.uni-timeline-item-divider::before, +.uni-timeline-item-divider::after { + position: absolute; + left: 15rpx; + width: 1rpx; + height: 100vh; + content: ''; + background: inherit; +} + +.uni-timeline-item-divider::before { + bottom: 100%; +} + +.uni-timeline-item-divider::after { + top: 100%; +} + + +.uni-timeline-last-item .uni-timeline-item-divider:after { + display: none; +} + +.uni-timeline-first-item .uni-timeline-item-divider:before { + display: none; +} + +.uni-timeline-item .uni-timeline-item-content { + padding-left: 20rpx; +} + +.uni-timeline-last-item .bottom-border::after { + display: none; +} + +.uni-timeline-item-content .datetime { + color: #CCCCCC; +} + +/* 自定义节点颜色 */ +.uni-timeline-last-item .uni-timeline-item-divider { + background-color: #1AAD19; +} + + +/* uni-icon */ + +.uni-icon { + font-family: uniicons; + font-size: 24px; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; +} + +.uni-icon.uni-active { + color: #007aff; +} + +.uni-icon-contact:before { + content: '\e100'; +} + +.uni-icon-person:before { + content: '\e101'; +} + +.uni-icon-personadd:before { + content: '\e102'; +} + +.uni-icon-contact-filled:before { + content: '\e130'; +} + +.uni-icon-person-filled:before { + content: '\e131'; +} + +.uni-icon-personadd-filled:before { + content: '\e132'; +} + +.uni-icon-phone:before { + content: '\e200'; +} + +.uni-icon-email:before { + content: '\e201'; +} + +.uni-icon-chatbubble:before { + content: '\e202'; +} + +.uni-icon-chatboxes:before { + content: '\e203'; +} + +.uni-icon-phone-filled:before { + content: '\e230'; +} + +.uni-icon-email-filled:before { + content: '\e231'; +} + +.uni-icon-chatbubble-filled:before { + content: '\e232'; +} + +.uni-icon-chatboxes-filled:before { + content: '\e233'; +} + +.uni-icon-weibo:before { + content: '\e260'; +} + +.uni-icon-weixin:before { + content: '\e261'; +} + +.uni-icon-pengyouquan:before { + content: '\e262'; +} + +.uni-icon-chat:before { + content: '\e263'; +} + +.uni-icon-qq:before { + content: '\e264'; +} + +.uni-icon-videocam:before { + content: '\e300'; +} + +.uni-icon-camera:before { + content: '\e301'; +} + +.uni-icon-mic:before { + content: '\e302'; +} + +.uni-icon-location:before { + content: '\e303'; +} + +.uni-icon-mic-filled:before, +.uni-icon-speech:before { + content: '\e332'; +} + +.uni-icon-location-filled:before { + content: '\e333'; +} + +.uni-icon-micoff:before { + content: '\e360'; +} + +.uni-icon-image:before { + content: '\e363'; +} + +.uni-icon-map:before { + content: '\e364'; +} + +.uni-icon-compose:before { + content: '\e400'; +} + +.uni-icon-trash:before { + content: '\e401'; +} + +.uni-icon-upload:before { + content: '\e402'; +} + +.uni-icon-download:before { + content: '\e403'; +} + +.uni-icon-close:before { + content: '\e404'; +} + +.uni-icon-redo:before { + content: '\e405'; +} + +.uni-icon-undo:before { + content: '\e406'; +} + +.uni-icon-refresh:before { + content: '\e407'; +} + +.uni-icon-star:before { + content: '\e408'; +} + +.uni-icon-plus:before { + content: '\e409'; +} + +.uni-icon-minus:before { + content: '\e410'; +} + +.uni-icon-circle:before, +.uni-icon-checkbox:before { + content: '\e411'; +} + +.uni-icon-close-filled:before, +.uni-icon-clear:before { + content: '\e434'; +} + +.uni-icon-refresh-filled:before { + content: '\e437'; +} + +.uni-icon-star-filled:before { + content: '\e438'; +} + +.uni-icon-plus-filled:before { + content: '\e439'; +} + +.uni-icon-minus-filled:before { + content: '\e440'; +} + +.uni-icon-circle-filled:before { + content: '\e441'; +} + +.uni-icon-checkbox-filled:before { + content: '\e442'; +} + +.uni-icon-closeempty:before { + content: '\e460'; +} + +.uni-icon-refreshempty:before { + content: '\e461'; +} + +.uni-icon-reload:before { + content: '\e462'; +} + +.uni-icon-starhalf:before { + content: '\e463'; +} + +.uni-icon-spinner:before { + content: '\e464'; +} + +.uni-icon-spinner-cycle:before { + content: '\e465'; +} + +.uni-icon-search:before { + content: '\e466'; +} + +.uni-icon-plusempty:before { + content: '\e468'; +} + +.uni-icon-forward:before { + content: '\e470'; +} + +.uni-icon-back:before, +.uni-icon-left-nav:before { + content: '\e471'; +} + +.uni-icon-checkmarkempty:before { + content: '\e472'; +} + +.uni-icon-home:before { + content: '\e500'; +} + +.uni-icon-navigate:before { + content: '\e501'; +} + +.uni-icon-gear:before { + content: '\e502'; +} + +.uni-icon-paperplane:before { + content: '\e503'; +} + +.uni-icon-info:before { + content: '\e504'; +} + +.uni-icon-help:before { + content: '\e505'; +} + +.uni-icon-locked:before { + content: '\e506'; +} + +.uni-icon-more:before { + content: '\e507'; +} + +.uni-icon-flag:before { + content: '\e508'; +} + +.uni-icon-home-filled:before { + content: '\e530'; +} + +.uni-icon-gear-filled:before { + content: '\e532'; +} + +.uni-icon-info-filled:before { + content: '\e534'; +} + +.uni-icon-help-filled:before { + content: '\e535'; +} + +.uni-icon-more-filled:before { + content: '\e537'; +} + +.uni-icon-settings:before { + content: '\e560'; +} + +.uni-icon-list:before { + content: '\e562'; +} + +.uni-icon-bars:before { + content: '\e563'; +} + +.uni-icon-loop:before { + content: '\e565'; +} + +.uni-icon-paperclip:before { + content: '\e567'; +} + +.uni-icon-eye:before { + content: '\e568'; +} + +.uni-icon-arrowup:before { + content: '\e580'; +} + +.uni-icon-arrowdown:before { + content: '\e581'; +} + +.uni-icon-arrowleft:before { + content: '\e582'; +} + +.uni-icon-arrowright:before { + content: '\e583'; +} + +.uni-icon-arrowthinup:before { + content: '\e584'; +} + +.uni-icon-arrowthindown:before { + content: '\e585'; +} + +.uni-icon-arrowthinleft:before { + content: '\e586'; +} + +.uni-icon-arrowthinright:before { + content: '\e587'; +} + +.uni-icon-pulldown:before { + content: '\e588'; +} + +.uni-icon-scan:before { + content: "\e612"; +} + +/* 分界线 */ +.uni-divider { + height: 110rpx; + display: flex; + align-items: center; + justify-content: center; + position: relative; +} + +.uni-divider__content { + font-size: 28rpx; + color: #999; + padding: 0 20rpx; + position: relative; + z-index: 101; + background: #F4F5F6; +} + +.uni-divider__line { + background-color: #CCCCCC; + height: 1px; + width: 100%; + position: absolute; + z-index: 100; + top: 50%; + left: 0; + transform: translateY(50%); +} + +/* view{ + font-size:28rpx; + line-height:1.8; +} */ +progress, +checkbox-group { + width: 100%; +} + +form { + width: 100%; +} + +.uni-flex { + display: flex; + flex-direction: row; +} + +.uni-flex-item { + flex: 1; +} + +.uni-row { + flex-direction: row; +} + +.uni-column { + flex-direction: column; +} + +.uni-link { + color: #576B95; + font-size: 26rpx; +} + +.uni-center { + text-align: center; +} + +.uni-inline-item { + display: flex; + flex-direction: row; + align-items: center; +} + +.uni-inline-item text { + margin-right: 20rpx; +} + +.uni-inline-item text:last-child { + margin-right: 0rpx; + margin-left: 20rpx; +} + +/* page */ +.common-page-head { + padding: 35rpx; + text-align: center; +} + +.common-page-head-title { + display: inline-block; + padding: 0 40rpx; + font-size: 30rpx; + height: 88rpx; + line-height: 88rpx; + color: #BEBEBE; + box-sizing: border-box; + border-bottom: 2rpx solid #D8D8D8; +} + +.uni-padding-wrap { + /* width:690rpx; */ + padding: 0 30rpx; +} + +.uni-word { + text-align: center; + padding: 200rpx 100rpx; +} + +.uni-title { + font-size: 30rpx; + font-weight: 500; + padding: 20rpx 0; + line-height: 1.5; +} + +.uni-text { + font-size: 28rpx; +} + +.uni-title text { + font-size: 24rpx; + color: #888; +} + +.uni-text-gray { + color: #ccc; +} + +.uni-text-small { + font-size: 24rpx; +} + +.uni-common-mb { + margin-bottom: 30rpx; +} + +.uni-common-pb { + padding-bottom: 30rpx; +} + +.uni-common-pl { + padding-left: 30rpx; +} + +.uni-common-mt { + margin-top: 30rpx; +} + +/* 背景色 */ +.uni-bg-red { + background: #F76260; + color: #FFF; +} + +.uni-bg-green { + background: #09BB07; + color: #FFF; +} + +.uni-bg-blue { + background: #007AFF; + color: #FFF; +} + +/* 标题 */ +.uni-h1 { + font-size: 80rpx; + font-weight: 700; +} + +.uni-h2 { + font-size: 60rpx; + font-weight: 700; +} + +.uni-h3 { + font-size: 48rpx; + font-weight: 700; +} + +.uni-h4 { + font-size: 36rpx; + font-weight: 700; +} + +.uni-h5 { + font-size: 28rpx; + color: #8f8f94; +} + +.uni-h6 { + font-size: 24rpx; + color: #8f8f94; +} + +.uni-bold { + font-weight: bold; +} + +/* 文本溢出隐藏 */ +.uni-ellipsis { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* 竖向百分百按钮 */ +.uni-btn-v { + padding: 10rpx 0; +} + +.uni-btn-v button { + margin: 20rpx 0; +} + +/* 表单 */ +.uni-form-item { + display: flex; + width: 100%; + padding: 10rpx 0; +} + +.uni-form-item .title { + padding: 10rpx 25rpx; +} + +.uni-label { + width: 210rpx; + word-wrap: break-word; + word-break: break-all; + text-indent: 20rpx; +} + +.uni-input { + height: 50rpx; + padding: 15rpx 25rpx; + line-height: 50rpx; + font-size: 28rpx; + background: #FFF; + flex: 1; +} + +radio-group, +checkbox-group { + width: 100%; +} + +radio-group label, +checkbox-group label { + padding-right: 20rpx; +} + +.uni-form-item .with-fun { + display: flex; + flex-wrap: nowrap; + background: #FFFFFF; +} + +.uni-form-item .with-fun .uni-icon { + width: 40px; + height: 80rpx; + line-height: 80rpx; + flex-shrink: 0; +} + +/* loadmore */ +.uni-loadmore { + height: 80rpx; + line-height: 80rpx; + text-align: center; + padding-bottom: 30rpx; +} + +/*数字角标*/ +/* .uni-badge, +.uni-badge-default { + font-family: 'Helvetica Neue', Helvetica, sans-serif; + font-size: 12px; + line-height: 1; + display: inline-block; + padding: 3px 6px; + color: #333; + border-radius: 100px; + background-color: rgba(0, 0, 0, .15); +} */ +.uni-badge.uni-badge-inverted { + padding: 0 5px 0 0; + color: #929292; + background-color: transparent +} + +.uni-badge-primary { + color: #fff; + background-color: #007aff +} + +.uni-badge-blue.uni-badge-inverted, +.uni-badge-primary.uni-badge-inverted { + color: #007aff; + background-color: transparent +} + +.uni-badge-green, +.uni-badge-success { + color: #fff; + background-color: #4cd964; +} + +.uni-badge-green.uni-badge-inverted, +.uni-badge-success.uni-badge-inverted { + color: #4cd964; + background-color: transparent +} + +.uni-badge-warning, +.uni-badge-yellow { + color: #fff; + background-color: #f0ad4e +} + +.uni-badge-warning.uni-badge-inverted, +.uni-badge-yellow.uni-badge-inverted { + color: #f0ad4e; + background-color: transparent +} + +.uni-badge-danger, +.uni-badge-red { + color: #fff; + background-color: #dd524d +} + +.uni-badge-danger.uni-badge-inverted, +.uni-badge-red.uni-badge-inverted { + color: #dd524d; + background-color: transparent +} + +.uni-badge-purple, +.uni-badge-royal { + color: #fff; + background-color: #8a6de9 +} + +.uni-badge-purple.uni-badge-inverted, +.uni-badge-royal.uni-badge-inverted { + color: #8a6de9; + background-color: transparent +} + +/*折叠面板 */ +.uni-collapse-content { + height: 0; + width: 100%; + overflow: hidden; +} + +.uni-collapse-content.uni-active { + height: auto; +} + +/*卡片视图 */ +.uni-card { + background: #fff; + border-radius: 8rpx; + margin: 20rpx 0; + position: relative; + /* box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, .3); */ +} + +.uni-card-content { + font-size: 30rpx; +} + +.uni-card-content.image-view { + width: 100%; + margin: 0; +} + +.uni-card-content-inner { + position: relative; + padding: 30rpx; +} + +.uni-card-footer, +.uni-card-header { + position: relative; + display: flex; + min-height: 50rpx; + padding: 20rpx 30rpx; + justify-content: space-between; + align-items: center; +} + +.uni-card-header { + font-size: 36rpx; +} + +.uni-card-footer { + color: #6d6d72; +} + +.uni-card-footer:before, +.uni-card-header:after { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2rpx; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-card-header:after { + top: auto; + bottom: 0; +} + +.uni-card-media { + justify-content: flex-start; +} + +.uni-card-media-logo { + height: 84rpx; + width: 84rpx; + margin-right: 20rpx; +} + +.uni-card-media-body { + height: 84rpx; + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; +} + +.uni-card-media-text-top { + line-height: 36rpx; + font-size: 34rpx; +} + +.uni-card-media-text-bottom { + line-height: 30rpx; + font-size: 28rpx; + color: #8f8f94; +} + +.uni-card-link { + color: #007AFF; +} + +/* 列表 */ +.uni-list { + background-color: #FFFFFF; + position: relative; + width: 100%; + display: flex; + flex-direction: column; +} + +.uni-list:after { + position: absolute; + z-index: 10; + right: 0; + bottom: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +/* .uni-list::before { + position: absolute; + z-index: 10; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} */ +.uni-list-cell { + position: relative; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-hover { + background-color: #eee; +} + +.uni-list-cell-pd { + padding: 22rpx 30rpx; +} + +.uni-list-cell-left { + white-space: nowrap; + font-size: 28rpx; + padding: 0 30rpx; +} + +.uni-list-cell-db, +.uni-list-cell-right { + flex: 1; +} + +.uni-list-cell::after { + position: absolute; + z-index: 3; + right: 0; + bottom: 0; + left: 30rpx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list .uni-list-cell:last-child::after { + height: 0rpx; +} + +.uni-list-cell-last.uni-list-cell::after { + height: 0rpx; +} + +.uni-list-cell-divider { + position: relative; + display: flex; + color: #999; + background-color: #f7f7f7; + padding: 15rpx 20rpx; +} + +.uni-list-cell-divider::before { + position: absolute; + right: 0; + top: 0; + left: 0; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-divider::after { + position: absolute; + right: 0; + bottom: 0; + left: 0rpx; + height: 1px; + content: ''; + -webkit-transform: scaleY(.5); + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-list-cell-navigate { + font-size: 30rpx; + padding: 22rpx 30rpx; + line-height: 48rpx; + position: relative; + display: flex; + box-sizing: border-box; + width: 100%; + flex: 1; + justify-content: space-between; + align-items: center; +} + +.uni-list-cell-navigate { + padding-right: 36rpx; +} + +.uni-navigate-badge { + padding-right: 50rpx; +} + +.uni-list-cell-navigate.uni-navigate-right:after { + font-family: uniicons; + content: '\e583'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom:after { + font-family: uniicons; + content: '\e581'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-list-cell-navigate.uni-navigate-bottom.uni-active::after { + font-family: uniicons; + content: '\e580'; + position: absolute; + right: 24rpx; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.uni-collapse.uni-list-cell { + flex-direction: column; +} + +.uni-list-cell-navigate.uni-active { + background: #eee; +} + +.uni-list.uni-collapse { + box-sizing: border-box; + height: 0; + overflow: hidden; +} + +.uni-collapse .uni-list-cell { + padding-left: 20rpx; +} + +.uni-collapse .uni-list-cell::after { + left: 52rpx; +} + +.uni-list.uni-active { + height: auto; +} + +/* 三行列表 */ +.uni-triplex-row { + display: flex; + flex: 1; + width: 100%; + box-sizing: border-box; + flex-direction: row; + padding: 22rpx 30rpx; +} + +.uni-triplex-right, +.uni-triplex-left { + display: flex; + flex-direction: column; +} + +.uni-triplex-left { + width: 84%; +} + +.uni-triplex-left .uni-title { + padding: 8rpx 0; +} + +.uni-triplex-left .uni-text, +.uni-triplex-left .uni-text-small { + color: #999999; +} + +.uni-triplex-right { + width: 16%; + text-align: right; +} + +/* 图文列表 */ +.uni-media-list { + padding: 22rpx 30rpx; + box-sizing: border-box; + display: flex; + width: 100%; + flex-direction: row; +} + +.uni-navigate-right.uni-media-list { + padding-right: 74rpx; +} + +.uni-pull-right { + flex-direction: row-reverse; +} + +.uni-pull-right>.uni-media-list-logo { + margin-right: 0rpx; + margin-left: 20rpx; +} + +.uni-media-list-logo { + height: 84rpx; + width: 84rpx; + margin-right: 20rpx; +} + +.uni-media-list-logo image { + height: 100%; + width: 100%; +} + +.uni-media-list-body { + height: 84rpx; + display: flex; + flex: 1; + flex-direction: column; + justify-content: space-between; + align-items: flex-start; + overflow: hidden; +} + +.uni-media-list-text-top { + width: 100%; + line-height: 36rpx; + font-size: 30rpx; +} + +.uni-media-list-text-bottom { + width: 100%; + line-height: 30rpx; + font-size: 26rpx; + color: #8f8f94; +} + +/* 九宫格 */ +.uni-grid-9 { + background: #f2f2f2; + width: 750rpx; + display: flex; + flex-direction: row; + flex-wrap: wrap; + border-top: 2rpx solid #eee; +} + +.uni-grid-9-item { + width: 250rpx; + height: 200rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + border-bottom: 2rpx solid; + border-right: 2rpx solid; + border-color: #eee; + box-sizing: border-box; +} + +.no-border-right { + border-right: none; +} + +.uni-grid-9-image { + width: 100rpx; + height: 100rpx; +} + +.uni-grid-9-text { + width: 250rpx; + line-height: 4rpx; + height: 40rpx; + text-align: center; + font-size: 30rpx; +} + +.uni-grid-9-item-hover { + background: rgba(0, 0, 0, 0.1); +} + +/* 上传 */ +.uni-uploader { + flex: 1; + flex-direction: column; +} + +.uni-uploader-head { + display: flex; + flex-direction: row; + justify-content: space-between; +} + +.uni-uploader-info { + color: #B2B2B2; +} + +.uni-uploader-body { + margin-top: 16rpx; +} + +.uni-uploader__files { + display: flex; + flex-direction: row; + flex-wrap: wrap; +} + +.uni-uploader__file { + margin: 10rpx; + width: 210rpx; + height: 210rpx; +} + +.uni-uploader__img { + display: block; + width: 210rpx; + height: 210rpx; +} + +.uni-uploader__input-box { + position: relative; + margin: 10rpx; + width: 208rpx; + height: 208rpx; + border: 2rpx solid #D9D9D9; +} + +.uni-uploader__input-box:before, +.uni-uploader__input-box:after { + content: " "; + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + background-color: #D9D9D9; +} + +.uni-uploader__input-box:before { + width: 4rpx; + height: 79rpx; +} + +.uni-uploader__input-box:after { + width: 79rpx; + height: 4rpx; +} + +.uni-uploader__input-box:active { + border-color: #999999; +} + +.uni-uploader__input-box:active:before, +.uni-uploader__input-box:active:after { + background-color: #999999; +} + +.uni-uploader__input { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; +} + +/*问题反馈*/ +.feedback-title { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 20rpx; + color: #8f8f94; + font-size: 28rpx; +} + +.feedback-star-view.feedback-title { + justify-content: flex-start; + margin: 0; +} + +.feedback-quick { + position: relative; + padding-right: 40rpx; +} + +.feedback-quick:after { + font-family: uniicons; + font-size: 40rpx; + content: '\e581'; + position: absolute; + right: 0; + top: 50%; + color: #bbb; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); +} + +.feedback-body { + background: #fff; +} + +.feedback-textare { + height: 200rpx; + font-size: 34rpx; + line-height: 50rpx; + width: 100%; + box-sizing: border-box; + padding: 20rpx 30rpx 0; +} + +.feedback-input { + font-size: 34rpx; + height: 50rpx; + min-height: 50rpx; + padding: 15rpx 20rpx; + line-height: 50rpx; +} + +.feedback-uploader { + padding: 22rpx 20rpx; +} + +.feedback-star { + font-family: uniicons; + font-size: 40rpx; + margin-left: 6rpx; +} + +.feedback-star-view { + margin-left: 20rpx; +} + +.feedback-star:after { + content: '\e408'; +} + +.feedback-star.active { + color: #FFB400; +} + +.feedback-star.active:after { + content: '\e438'; +} + +.feedback-submit { + background: #007AFF; + color: #FFFFFF; + margin: 20rpx; +} + +/* input group */ +.uni-input-group { + position: relative; + padding: 0; + border: 0; + background-color: #fff; +} + +.uni-input-group:before { + position: absolute; + top: 0; + right: 0; + left: 0; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-group:after { + position: absolute; + right: 0; + bottom: 0; + left: 0; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row { + position: relative; + display: flex; + flex-direction: row; + font-size: 28rpx; + padding: 22rpx 30rpx; + justify-content: space-between; +} + +.uni-input-group .uni-input-row:after { + position: absolute; + right: 0; + bottom: 0; + left: 30rpx; + height: 2rpx; + content: ''; + transform: scaleY(.5); + background-color: #c8c7cc; +} + +.uni-input-row label { + line-height: 70rpx; +} + +/* textarea */ +.uni-textarea { + width: 100%; + background: #FFF; +} + +.uni-textarea textarea { + width: 96%; + padding: 18rpx 2%; + line-height: 1.6; + font-size: 28rpx; + height: 150rpx; +} + +/* tab bar */ +.uni-tab-bar { + display: flex; + flex: 1; + flex-direction: column; + overflow: hidden; + height: 100%; +} + +.uni-tab-bar .list { + width: 750rpx; + height: 100%; +} + +.uni-swiper-tab { + width: 100%; + white-space: nowrap; + line-height: 100rpx; + height: 100rpx; + border-bottom: 1px solid #c8c7cc; +} + +.swiper-tab-list { + font-size: 30rpx; + width: 150rpx; + display: inline-block; + text-align: center; + color: #555; +} + +.uni-tab-bar .active { + color: #007AFF; +} + +.uni-tab-bar .swiper-box { + flex: 1; + width: 100%; + height: calc(100% - 100rpx); +} + +.uni-tab-bar-loading { + padding: 20rpx 0; +} + +/* comment */ +.uni-comment { + padding: 5rpx 0; + display: flex; + flex-grow: 1; + flex-direction: column; +} + +.uni-comment-list { + flex-wrap: nowrap; + padding: 10rpx 0; + margin: 10rpx 0; + width: 100%; + display: flex; +} + +.uni-comment-face { + width: 70rpx; + height: 70rpx; + border-radius: 100%; + margin-right: 20rpx; + flex-shrink: 0; + overflow: hidden; +} + +.uni-comment-face image { + width: 100%; + border-radius: 100%; +} + +.uni-comment-body { + width: 100%; +} + +.uni-comment-top { + line-height: 1.5em; + justify-content: space-between; +} + +.uni-comment-top text { + color: #0A98D5; + font-size: 24rpx; +} + +.uni-comment-date { + line-height: 38rpx; + flex-direction: row; + justify-content: space-between; + display: flex !important; + flex-grow: 1; +} + +.uni-comment-date view { + color: #666666; + font-size: 24rpx; + line-height: 38rpx; +} + +.uni-comment-content { + line-height: 1.6em; + font-size: 28rpx; + padding: 8rpx 0; +} + +.uni-comment-replay-btn { + background: #FFF; + font-size: 24rpx; + line-height: 28rpx; + padding: 5rpx 20rpx; + border-radius: 30rpx; + color: #333 !important; + margin: 0 10rpx; +} + +/* swiper msg */ +.uni-swiper-msg { + width: 100%; + padding: 12rpx 0; + flex-wrap: nowrap; + display: flex; +} + +.uni-swiper-msg-icon { + width: 50rpx; + margin-right: 20rpx; +} + +.uni-swiper-msg-icon image { + width: 100%; + flex-shrink: 0; +} + +.uni-swiper-msg swiper { + width: 100%; + height: 50rpx; +} + +.uni-swiper-msg swiper-item { + line-height: 50rpx; +} + +/* product */ +.uni-product-list { + display: flex; + width: 100%; + flex-wrap: wrap; + flex-direction: row; +} + +.uni-product { + padding: 20rpx; + display: flex; + flex-direction: column; +} + +.image-view { + height: 330rpx; + width: 330rpx; + margin: 12rpx 0; +} + +.uni-product-image { + height: 330rpx; + width: 330rpx; +} + +.uni-product-title { + width: 300rpx; + word-break: break-all; + display: -webkit-box; + overflow: hidden; + line-height: 1.5; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.uni-product-price { + margin-top: 10rpx; + font-size: 28rpx; + line-height: 1.5; + position: relative; +} + +.uni-product-price-original { + color: #e80080; +} + +.uni-product-price-favour { + color: #888888; + text-decoration: line-through; + margin-left: 10rpx; +} + +.uni-product-tip { + position: absolute; + right: 10rpx; + background-color: #ff3333; + color: #ffffff; + padding: 0 10rpx; + border-radius: 5rpx; +} + +/* timeline */ +.uni-timeline { + margin: 35rpx 0; + display: flex; + flex-direction: column; + position: relative; +} + + +.uni-timeline-item { + display: flex; + flex-direction: row; + position: relative; + padding-bottom: 20rpx; + box-sizing: border-box; + overflow: hidden; + +} + +.uni-timeline-item .uni-timeline-item-keynode { + width: 160rpx; + flex-shrink: 0; + box-sizing: border-box; + padding-right: 20rpx; + text-align: right; + line-height: 65rpx; +} + +.uni-timeline-item .uni-timeline-item-divider { + flex-shrink: 0; + position: relative; + width: 30rpx; + height: 30rpx; + top: 15rpx; + border-radius: 50%; + background-color: #bbb; +} + + + +.uni-timeline-item-divider::before, +.uni-timeline-item-divider::after { + position: absolute; + left: 15rpx; + width: 1rpx; + height: 100vh; + content: ''; + background: inherit; +} + +.uni-timeline-item-divider::before { + bottom: 100%; +} + +.uni-timeline-item-divider::after { + top: 100%; +} + + +.uni-timeline-last-item .uni-timeline-item-divider:after { + display: none; +} + +.uni-timeline-first-item .uni-timeline-item-divider:before { + display: none; +} + +.uni-timeline-item .uni-timeline-item-content { + padding-left: 20rpx; +} + +.uni-timeline-last-item .bottom-border::after { + display: none; +} + +.uni-timeline-item-content .datetime { + color: #CCCCCC; +} + +/* 自定义节点颜色 */ +.uni-timeline-last-item .uni-timeline-item-divider { + background-color: #1AAD19; +} + + +/* uni-icon */ + +.uni-icon { + font-family: uniicons; + font-size: 24px; + font-weight: normal; + font-style: normal; + line-height: 1; + display: inline-block; + text-decoration: none; + -webkit-font-smoothing: antialiased; +} + +.uni-icon.uni-active { + color: #007aff; +} + +.uni-icon-contact:before { + content: '\e100'; +} + +.uni-icon-person:before { + content: '\e101'; +} + +.uni-icon-personadd:before { + content: '\e102'; +} + +.uni-icon-contact-filled:before { + content: '\e130'; +} + +.uni-icon-person-filled:before { + content: '\e131'; +} + +.uni-icon-personadd-filled:before { + content: '\e132'; +} + +.uni-icon-phone:before { + content: '\e200'; +} + +.uni-icon-email:before { + content: '\e201'; +} + +.uni-icon-chatbubble:before { + content: '\e202'; +} + +.uni-icon-chatboxes:before { + content: '\e203'; +} + +.uni-icon-phone-filled:before { + content: '\e230'; +} + +.uni-icon-email-filled:before { + content: '\e231'; +} + +.uni-icon-chatbubble-filled:before { + content: '\e232'; +} + +.uni-icon-chatboxes-filled:before { + content: '\e233'; +} + +.uni-icon-weibo:before { + content: '\e260'; +} + +.uni-icon-weixin:before { + content: '\e261'; +} + +.uni-icon-pengyouquan:before { + content: '\e262'; +} + +.uni-icon-chat:before { + content: '\e263'; +} + +.uni-icon-qq:before { + content: '\e264'; +} + +.uni-icon-videocam:before { + content: '\e300'; +} + +.uni-icon-camera:before { + content: '\e301'; +} + +.uni-icon-mic:before { + content: '\e302'; +} + +.uni-icon-location:before { + content: '\e303'; +} + +.uni-icon-mic-filled:before, +.uni-icon-speech:before { + content: '\e332'; +} + +.uni-icon-location-filled:before { + content: '\e333'; +} + +.uni-icon-micoff:before { + content: '\e360'; +} + +.uni-icon-image:before { + content: '\e363'; +} + +.uni-icon-map:before { + content: '\e364'; +} + +.uni-icon-compose:before { + content: '\e400'; +} + +.uni-icon-trash:before { + content: '\e401'; +} + +.uni-icon-upload:before { + content: '\e402'; +} + +.uni-icon-download:before { + content: '\e403'; +} + +.uni-icon-close:before { + content: '\e404'; +} + +.uni-icon-redo:before { + content: '\e405'; +} + +.uni-icon-undo:before { + content: '\e406'; +} + +.uni-icon-refresh:before { + content: '\e407'; +} + +.uni-icon-star:before { + content: '\e408'; +} + +.uni-icon-plus:before { + content: '\e409'; +} + +.uni-icon-minus:before { + content: '\e410'; +} + +.uni-icon-circle:before, +.uni-icon-checkbox:before { + content: '\e411'; +} + +.uni-icon-close-filled:before, +.uni-icon-clear:before { + content: '\e434'; +} + +.uni-icon-refresh-filled:before { + content: '\e437'; +} + +.uni-icon-star-filled:before { + content: '\e438'; +} + +.uni-icon-plus-filled:before { + content: '\e439'; +} + +.uni-icon-minus-filled:before { + content: '\e440'; +} + +.uni-icon-circle-filled:before { + content: '\e441'; +} + +.uni-icon-checkbox-filled:before { + content: '\e442'; +} + +.uni-icon-closeempty:before { + content: '\e460'; +} + +.uni-icon-refreshempty:before { + content: '\e461'; +} + +.uni-icon-reload:before { + content: '\e462'; +} + +.uni-icon-starhalf:before { + content: '\e463'; +} + +.uni-icon-spinner:before { + content: '\e464'; +} + +.uni-icon-spinner-cycle:before { + content: '\e465'; +} + +.uni-icon-search:before { + content: '\e466'; +} + +.uni-icon-plusempty:before { + content: '\e468'; +} + +.uni-icon-forward:before { + content: '\e470'; +} + +.uni-icon-back:before, +.uni-icon-left-nav:before { + content: '\e471'; +} + +.uni-icon-checkmarkempty:before { + content: '\e472'; +} + +.uni-icon-home:before { + content: '\e500'; +} + +.uni-icon-navigate:before { + content: '\e501'; +} + +.uni-icon-gear:before { + content: '\e502'; +} + +.uni-icon-paperplane:before { + content: '\e503'; +} + +.uni-icon-info:before { + content: '\e504'; +} + +.uni-icon-help:before { + content: '\e505'; +} + +.uni-icon-locked:before { + content: '\e506'; +} + +.uni-icon-more:before { + content: '\e507'; +} + +.uni-icon-flag:before { + content: '\e508'; +} + +.uni-icon-home-filled:before { + content: '\e530'; +} + +.uni-icon-gear-filled:before { + content: '\e532'; +} + +.uni-icon-info-filled:before { + content: '\e534'; +} + +.uni-icon-help-filled:before { + content: '\e535'; +} + +.uni-icon-more-filled:before { + content: '\e537'; +} + +.uni-icon-settings:before { + content: '\e560'; +} + +.uni-icon-list:before { + content: '\e562'; +} + +.uni-icon-bars:before { + content: '\e563'; +} + +.uni-icon-loop:before { + content: '\e565'; +} + +.uni-icon-paperclip:before { + content: '\e567'; +} + +.uni-icon-eye:before { + content: '\e568'; +} + +.uni-icon-arrowup:before { + content: '\e580'; +} + +.uni-icon-arrowdown:before { + content: '\e581'; +} + +.uni-icon-arrowleft:before { + content: '\e582'; +} + +.uni-icon-arrowright:before { + content: '\e583'; +} + +.uni-icon-arrowthinup:before { + content: '\e584'; +} + +.uni-icon-arrowthindown:before { + content: '\e585'; +} + +.uni-icon-arrowthinleft:before { + content: '\e586'; +} + +.uni-icon-arrowthinright:before { + content: '\e587'; +} + +.uni-icon-pulldown:before { + content: '\e588'; +} + +.uni-icon-scan:before { + content: "\e612"; +} + +/* 分界线 */ +.uni-divider { + height: 110rpx; + display: flex; + align-items: center; + justify-content: center; + position: relative; +} + +.uni-divider__content { + font-size: 28rpx; + color: #999; + padding: 0 20rpx; + position: relative; + z-index: 101; + background: #F4F5F6; +} + +.uni-divider__line { + background-color: #CCCCCC; + height: 1px; + width: 100%; + position: absolute; + z-index: 100; + top: 50%; + left: 0; + transform: translateY(50%); +} + +.left-win-active text { + color: #007AFF !important; +} diff --git a/src/common/utils/auth.js b/src/common/utils/auth.js new file mode 100644 index 0000000..57eeb28 --- /dev/null +++ b/src/common/utils/auth.js @@ -0,0 +1,21 @@ +const AccessTokenKey = 'ACCESS_TOKEN' +const RefreshTokenKey = 'REFRESH_TOKEN' + +// ========== Token 相关 ========== +export function getAccessToken() { + return uni.getStorageSync(AccessTokenKey) +} + +export function getRefreshToken() { + return uni.getStorageSync(RefreshTokenKey) +} + +export function setToken(token) { + uni.setStorageSync(AccessTokenKey, token.accessToken) + uni.setStorageSync(RefreshTokenKey, token.refreshToken) +} + +export function removeToken() { + uni.removeStorageSync(AccessTokenKey) + uni.removeStorageSync(RefreshTokenKey) +} diff --git a/src/common/utils/common.js b/src/common/utils/common.js new file mode 100644 index 0000000..00d4137 --- /dev/null +++ b/src/common/utils/common.js @@ -0,0 +1,54 @@ +/** +* 显示消息提示框 +* @param content 提示的标题 +*/ +export function toast(content) { + uni.showToast({ + icon: 'none', + title: content + }) +} + +/** +* 显示模态弹窗 +* @param content 提示的标题 +*/ +export function showConfirm(content) { + return new Promise((resolve, reject) => { + uni.showModal({ + title: '提示', + content: content, + cancelText: '取消', + confirmText: '确定', + success: function(res) { + resolve(res) + } + }) + }) +} + +/** +* 参数处理 +* @param params 参数 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName] + var part = encodeURIComponent(propName) + "=" + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']' + var subPart = encodeURIComponent(params) + "=" + result += subPart + encodeURIComponent(value[key]) + "&" + } + } + } else { + result += part + encodeURIComponent(value) + "&" + } + } + } + return result +} \ No newline at end of file diff --git a/src/common/utils/constant.js b/src/common/utils/constant.js new file mode 100644 index 0000000..89e54ca --- /dev/null +++ b/src/common/utils/constant.js @@ -0,0 +1,9 @@ +const constant = { + avatar: 'vuex_avatar', + name: 'vuex_name', + roles: 'vuex_roles', + permissions: 'vuex_permissions', + tenantId:'vuex_tenantId' + } + + export default constant diff --git a/src/common/utils/errorCode.js b/src/common/utils/errorCode.js new file mode 100644 index 0000000..d2111ee --- /dev/null +++ b/src/common/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + '401': '认证失败,无法访问系统资源', + '403': '当前操作没有权限', + '404': '访问资源不存在', + 'default': '系统未知错误,请反馈给管理员' +} diff --git a/src/common/utils/permission.js b/src/common/utils/permission.js new file mode 100644 index 0000000..17969f2 --- /dev/null +++ b/src/common/utils/permission.js @@ -0,0 +1,51 @@ +import store from '@/store' + +/** + * 字符权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkPermi(value) { + if (value && value instanceof Array && value.length > 0) { + const permissions = store.getters && store.getters.permissions + const permissionDatas = value + const all_permission = "*:*:*" + + const hasPermission = permissions.some(permission => { + return all_permission === permission || permissionDatas.includes(permission) + }) + + if (!hasPermission) { + return false + } + return true + } else { + console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) + return false + } +} + +/** + * 角色权限校验 + * @param {Array} value 校验值 + * @returns {Boolean} + */ +export function checkRole(value) { + if (value && value instanceof Array && value.length > 0) { + const roles = store.getters && store.getters.roles + const permissionRoles = value + const super_admin = "admin" + + const hasRole = roles.some(role => { + return super_admin === role || permissionRoles.includes(role) + }) + + if (!hasRole) { + return false + } + return true + } else { + console.error(`need roles! Like checkRole="['admin','editor']"`) + return false + } +} \ No newline at end of file diff --git a/src/common/utils/ruoyi.js b/src/common/utils/ruoyi.js new file mode 100644 index 0000000..fb60217 --- /dev/null +++ b/src/common/utils/ruoyi.js @@ -0,0 +1,47 @@ +/** + * 通用js方法封装处理 + * Copyright (c) 2019 ruoyi + */ + +// 日期格式化 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm),''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { + return ['日', '一', '二', '三', '四', '五', '六'][value] + } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} diff --git a/src/common/utils/storage.js b/src/common/utils/storage.js new file mode 100644 index 0000000..515d413 --- /dev/null +++ b/src/common/utils/storage.js @@ -0,0 +1,37 @@ +// 获取本地存储对应key +const getStorage = (key)=>{ + return uni.getStorageSync( key ); +} + +// 设置本地存储对应key +const setStorage = (key,value)=>{ + return uni.setStorageSync( key,value ); +} + +// 清除全部本地存储 +const clearStorage = ()=>{ + uni.clearStorageSync(); +} + +// 清除指定key本地存储 +const removeStorage = ( key )=>{ + uni.removeStorageSync( key ); +} + +const constant = { + id:"id", + token:"token", + avatar: 'avatar', + name: 'name', + roles: 'roles', + permissions: 'permissions' + } + + +export default { + getStorage, + setStorage, + clearStorage, + removeStorage, + constant +} \ No newline at end of file diff --git a/src/components/active-form/active-form.scss b/src/components/active-form/active-form.scss new file mode 100644 index 0000000..af47d48 --- /dev/null +++ b/src/components/active-form/active-form.scss @@ -0,0 +1,36 @@ +.active-form { + .u-radio-group--row, .u-checkbox-group--row { + flex-wrap: wrap; + } + + .u-radio, .u-checkbox { + margin: 10rpx; + } +} + +.flex-row-sb-c { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.flex-col--c { + display: flex; + flex-direction: column; + align-items: center; +} + +.pr20{ + padding-right: 20rpx; +} +.pt30{ + padding-top: 30rpx; +} +.p30{ + padding: 30rpx; +} +.font26{ + font-size: 26rpx; +} + diff --git a/src/components/active-form/active-form.vue b/src/components/active-form/active-form.vue new file mode 100644 index 0000000..9b6bd7f --- /dev/null +++ b/src/components/active-form/active-form.vue @@ -0,0 +1,787 @@ + + + + + diff --git a/src/components/active-form/active-form222.vue b/src/components/active-form/active-form222.vue new file mode 100644 index 0000000..158e5f0 --- /dev/null +++ b/src/components/active-form/active-form222.vue @@ -0,0 +1,760 @@ + + + + + diff --git a/src/components/active-form/detail.md b/src/components/active-form/detail.md new file mode 100644 index 0000000..b5b5aa1 --- /dev/null +++ b/src/components/active-form/detail.md @@ -0,0 +1,452 @@ +# 导入即用 全端支持 +### 2.0插件地址 https://ext.dcloud.net.cn/plugin?id=5842 (基于uview2.0) +### 1.0插件地址 https://ext.dcloud.net.cn/plugin?id=8755 (基于uview1.0) + +#### 注意!!! +``` +本插件基于 uview2.0进行重构 使用需要引入uview2.0支持 +[ 点击uview2.0官网地址 ](https://www.uviewui.com/) +[引入uview2.0指南](https://ext.dcloud.net.cn/plugin?id=1593) +``` +### 有问题 可评论 看到及时回复 +# 使用方式 +## 1. 注册 +### App.vue引入组件样式即可 +```javascript + + + +``` + + +## 2.页面使用 + +```javascript + + + + + + + +``` + + +# 组件参数 + + +### 1.组件props + +| 参数名 | 类型 | 是否必填 | 介绍 | +| ------------- | ------------- | ---- | -----------------------------------------------------------------------------| +| form | Object | 是 | v-model双向绑定(若要回显在此处定义,表单值) | +| formData | Array | 是 | 表单配置项option +| num | Boolean 默认false | 是 | 每个表单项前面是否带有序号 + +### 2.formData 项参数说明 (type=datetime、calendar ,部分参数参考uview2.0官方文档) + +| 参数名 | 类型 | 是否必填 | 介绍 | +| ------------- | ------------- | ---- | ----------------------------------------------------------------------------- | +| id | String number | 是 | 必填索引 不唯一 | +| placeholder | String | 是 | 提示 +| label | String | 是 | 开头标题 | +| type | String | 是 | 该表单项类型 当前支持 text(文本)、 number、 mobile、code(验证码)、 radio、 checkbox、 file(照片,文件)、 select(上拉选择)、calendar(日期选择) 、 datetime(时间选择)| +| list | Array | 是 | type为 radio、 checkbox、select时有效 +| list[index].disabled | Boolean | 否 | type为 radio、 checkbox、select时有效 +| disabled | Boolean | 否 | type为 radio、 checkbox、select时有效 +| rules.errMess | String | 是 | 校验不通过时的错误提示 | +| rules.name | String | 是 | 接收字段名 后端接收的字段 | +| rules.value | String Array | 否 | 默认值(一开始显示),回显使用form对象 | +| rules.verify | Boolean | 否 | 是否校验该字段 +| rules.regexp | String | 否 | 正侧校验字段 + +### 3.校验方法 + +| 事件名 | 返回参数 | 简介 | +| --------------------------- | ------ | ---------------------- | +| vervify() | null | *表单校验 成功会继续往下走 失败抛出异常* | +| resetForm(); | null | *重置表单* | + +```javascript +##记得组件绑定ref +methods: { + // 提交表单 + submit() { + this.$refs.activeForm.vervify() + .then(async (form) => { + console.log("表单对象:", form); + }) + .catch((err) => { + console.log("err", err); + }); //表单校验 + }, + //重置表单 + reset() { + this.$refs.activeForm.resetForm() + } +}, +``` +``` + + +### 4.由于小程序props传递函数会丢失(此处无效) 选项回调方法在目录active-form/mixins.js中自定义书写 +```javascript +export default { + data() { + return {} + }, + methods: { + // 微信小程序获取手机号 + async getphonenumber({detail}) { + + }, + // 获取验证码回调 此处调用api接口 并赋值 + async sendCodeCallback(item) { + // item.rules.value = + } + } +} + +``` diff --git a/src/components/active-form/mixins.js b/src/components/active-form/mixins.js new file mode 100644 index 0000000..87f303f --- /dev/null +++ b/src/components/active-form/mixins.js @@ -0,0 +1,15 @@ +export default { + data() { + return {} + }, + methods: { + // 微信小程序获取手机号 + async getphonenumber({detail}) { + + }, + // 获取验证码回调 此处调用api接口 并赋值 + async sendCodeCallback(item) { + // item.rules.value = + } + } +} diff --git a/src/components/active-formv1/detail.md b/src/components/active-formv1/detail.md new file mode 100644 index 0000000..3a76980 --- /dev/null +++ b/src/components/active-formv1/detail.md @@ -0,0 +1,387 @@ +#### 注意!!! + +``` +本插件基于 uview1.0进行重构 使用需要引入uview1.0支持 +[ 点击uview1.0官网地址 ](https://www.uviewui.com/) +``` + +### 有问题 可评论 看到及时回复 + +## 2.页面使用 + +```javascript + + + + + + +``` + +# 组件参数 + +### 1.组件props + +参数名 | 类型 | 介绍 | +| -------- | --------------- | ------------------------ | +| formDate | Array | v-model双向绑定 | +| num | Boolean 默认false | 每个表单项前面是否带有序号 + +### 2.form 项参数说明 + +| 参数名 | 类型 | 是否必填 | 介绍 | +| ------------- | ------------- | ---- | ----------------------------------------------------------------------------- | +| id | String number | 是 | 必填索引 不唯一 | +| placeholder | String | 是 | 提示 +| label | String | 是 | 开头标题 | +| type | String | 是 | 该表单项类型 当前支持 text(文本)、textarea、 number、 mobile、code(验证码)、 radio、 checkbox、 file(照片,文件)、 select(上拉选择) | +| list | Array | 是 | type为 radio、 checkbox、select时有效 +| list[index].disabled | Boolean | 否 | type为 radio、 checkbox、select时有效 +| disabled | Boolean | 否 | 是否禁用输入 type为 text、 number、mobile 、code 、file、textarea时有效 +| rules.errMess | String | 是 | 校验不通过时的错误提示 | +| rules.name | String | 是 | 接收字段名 后端接收的字段 | +| rules.value | String Array | 否 | 字段值 | +| rules.label | String Array | 是 | 是否校验该字段 +| rules.verify | Boolean | 否 | 是否校验该字段 +| rules.regexp | String | 否 | 正侧校验字段 +| rules.fileList | Array | 是 |type为file时的 文件类型参数 + +### 3.校验方法 + +| 事件名 | 返回参数 | 简介 | +| --------------------------- | ------ | ---------------------- | +| $vervify(this.formData) | null | *表单校验 成功会继续往下走 失败抛出异常* | +| $submitForm(this.formData); | 表单字段对象 | *校验成功 获取表单值* | + +```javascript + + + \ No newline at end of file diff --git a/src/components/active-formv1/index1.vue b/src/components/active-formv1/index1.vue new file mode 100644 index 0000000..92a33c2 --- /dev/null +++ b/src/components/active-formv1/index1.vue @@ -0,0 +1,704 @@ + + + + + diff --git a/src/components/active-formv1/mixins.js b/src/components/active-formv1/mixins.js new file mode 100644 index 0000000..87f303f --- /dev/null +++ b/src/components/active-formv1/mixins.js @@ -0,0 +1,15 @@ +export default { + data() { + return {} + }, + methods: { + // 微信小程序获取手机号 + async getphonenumber({detail}) { + + }, + // 获取验证码回调 此处调用api接口 并赋值 + async sendCodeCallback(item) { + // item.rules.value = + } + } +} diff --git a/src/components/amap-wx/js/util.js b/src/components/amap-wx/js/util.js new file mode 100644 index 0000000..65779df --- /dev/null +++ b/src/components/amap-wx/js/util.js @@ -0,0 +1,181 @@ +import amap from '@/components/amap-wx/lib/amap-wx.js'; +// 地铁颜色图 +const line = { + '1号线': '#C43B33', + '2号线': '#016299', + '4号线/大兴线': '#008E9C', + '5号线': '#A42380', + '6号线': '#D09900', + '7号线': '#F2C172', + '8号线': '#009D6A', + '9号线': '#8FC41E', + '10号线': '#009DBE', + '13号线': '#F9E701', + '14号线东段': '#D4A7A2', + '14号线西段': '#D4A7A2', + '15号线': '#5D2D69', + '八通线': '#C33A32', + '昌平线': '#DE82B1', + '亦庄线': '#E40177', + '房山线': '#E66021', + '机场线': '#A29BBC', +} + +// 150500:地铁站 ,150700:公交站 , 190700:地名地址 +const typecode = [{ + id: '150500', + icon: 'icon-ditie' +}, { + id: '150700', + icon: 'icon-gongjiao' +}, { + id: '190700', + icon: 'icon-gonglu' +}]; + +const util = { + key:'b526b09b86cd2996e7732be8ab8c4430', + /** + * 初始化高德地图api + */ + mapInit() { + return new amap.AMapWX({ + key: this.key + }); + }, + // 服务状态吗 + typecode, + /** + * 获取地图颜色 + */ + lineColor(name) { + if (line[name]) { + return line[name]; + } else { + return '#ccc'; + } + }, + /** + * 关键字颜色变化 + */ + serachNmme(val, name) { + let namestr = new RegExp(val); + let nameresult = + `
+ ${name.replace(namestr, "" + val + '')} +
` + .trim(); + + return nameresult; + }, + /** + * 地址转地铁线路 + */ + addressToLine(address, type) { + let addr = address.split(';'); + let dt = ''; + addr.forEach(elm => { + let color = '#cccccc'; + if (type === typecode[0].id) { + color = this.lineColor(elm) + } else if (type === typecode[1].id) { + color = '#4075cb' + } + let style = 'margin:5px 0;margin-right:5px;padding:0 5px;background:' + color + + ';font-size:12px;color:#fff;border-radius:3px;'; + dt += `
${elm}
`; + + }); + return `
${dt}
`; + }, + /** + * 数据处理 + */ + dataHandle(item, val) { + // 改变字体颜色 + if (val) { + item.nameNodes = util.serachNmme(val, item.name); + } else { + item.nameNodes = `
${item.name}
`; + + } + // 地址解析 地铁 + if ( + item.typecode === util.typecode[0].id || + item.typecode === util.typecode[1].id + ) { + item.addressNodes = util.addressToLine(item.address, item.typecode); + if (item.typecode === util.typecode[0].id) { + item.icon = util.typecode[0].icon; + } else if (item.typecode === util.typecode[1].id) { + item.icon = util.typecode[1].icon; + } + } else { + item.addressNodes = `${item.district}${ + item.address.length > 0 ? '·' + item.address : '' + }`.trim(); + item.icon = 'icon-weizhi'; + } + + if (item.location && item.location.length === 0) { + item.icon = 'icon-sousuo'; + } + + return item; + }, + /** + * 存储历史数据 + * val [string | object]需要存储的内容 + */ + setHistory(val) { + let searchHistory = uni.getStorageSync('search:history'); + if (!searchHistory) searchHistory = []; + let serachData = {}; + if (typeof(val) === 'string') { + serachData = { + adcode: [], + address: [], + city: [], + district: [], + id: [], + location: [], + name: val, + typecode: [] + }; + } else { + serachData = val + } + + // 判断数组是否存在,如果存在,那么将放到最前面 + for (var i = 0; i < searchHistory.length; i++) { + if (searchHistory[i].name === serachData.name) { + searchHistory.splice(i, 1); + break; + } + } + + searchHistory.unshift(util.dataHandle(serachData)); + uni.setStorage({ + key: 'search:history', + data: searchHistory, + success: function() { + // console.log('success'); + } + }); + }, + getHistory() { + + }, + removeHistory() { + uni.removeStorage({ + key: 'search:history', + success: function(res) { + console.log('success'); + } + }); + return [] + } + +} + +export default util; diff --git a/src/components/amap-wx/lib/amap-wx.js b/src/components/amap-wx/lib/amap-wx.js new file mode 100644 index 0000000..e1ef2b2 --- /dev/null +++ b/src/components/amap-wx/lib/amap-wx.js @@ -0,0 +1 @@ +function AMapWX(a){this.key=a.key,this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"}}AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(a){var c=a.longitude+","+a.latitude;wx.setStorage({key:"userLocation",data:c}),b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(a){a.data&&b(a.data)}}),a.fail({errCode:"0",errMsg:c.errMsg||""})}})},AMapWX.prototype.getRegeo=function(a){function c(c){var d=b.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:c,extensions:"all",s:d.s,platform:d.platform,appname:b.key,sdkversion:d.sdkversion,logversion:d.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var d,e,f,g,h,i,j,k,l;b.data.status&&"1"==b.data.status?(d=b.data.regeocode,e=d.addressComponent,f=[],g="",d&&d.roads[0]&&d.roads[0].name&&(g=d.roads[0].name+"附近"),h=c.split(",")[0],i=c.split(",")[1],d.pois&&d.pois[0]&&(g=d.pois[0].name+"附近",j=d.pois[0].location,j&&(h=parseFloat(j.split(",")[0]),i=parseFloat(j.split(",")[1]))),e.provice&&f.push(e.provice),e.city&&f.push(e.city),e.district&&f.push(e.district),e.streetNumber&&e.streetNumber.street&&e.streetNumber.number?(f.push(e.streetNumber.street),f.push(e.streetNumber.number)):(k="",d&&d.roads[0]&&d.roads[0].name&&(k=d.roads[0].name),f.push(k)),f=f.join(""),l=[{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:g,longitude:h,latitude:i,id:0,regeocodeData:d}],a.success(l)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this;a.location?c(a.location):b.getWxLocation(a,function(a){c(a)})},AMapWX.prototype.getWeather=function(a){function d(d){var e="base";a.type&&"forecast"==a.type&&(e="all"),wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:b.key,city:d,extensions:e,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){function c(a){var b={city:{text:"城市",data:a.city},weather:{text:"天气",data:a.weather},temperature:{text:"温度",data:a.temperature},winddirection:{text:"风向",data:a.winddirection+"风"},windpower:{text:"风力",data:a.windpower+"级"},humidity:{text:"湿度",data:a.humidity+"%"}};return b}var d,e;b.data.status&&"1"==b.data.status?b.data.lives?(d=b.data.lives,d&&d.length>0&&(d=d[0],e=c(d),e["liveData"]=d,a.success(e))):b.data.forecasts&&b.data.forecasts[0]&&a.success({forecast:b.data.forecasts[0]}):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}function e(e){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:b.key,location:e,extensions:"all",s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion},method:"GET",header:{"content-type":"application/json"},success:function(b){var c,e;b.data.status&&"1"==b.data.status?(e=b.data.regeocode,e.addressComponent?c=e.addressComponent.adcode:e.aois&&e.aois.length>0&&(c=e.aois[0].adcode),d(c)):a.fail({errCode:b.data.infocode,errMsg:b.data.info})},fail:function(b){a.fail({errCode:"0",errMsg:b.errMsg||""})}})}var b=this,c=b.requestConfig;a.city?d(a.city):b.getWxLocation(a,function(a){e(a)})},AMapWX.prototype.getPoiAround=function(a){function d(d){var e={key:b.key,location:d,s:c.s,platform:c.platform,appname:b.key,sdkversion:c.sdkversion,logversion:c.logversion};a.querytypes&&(e["types"]=a.querytypes),a.querykeywords&&(e["keywords"]=a.querykeywords),wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(b){var c,d,e,f;if(b.data.status&&"1"==b.data.status){if(b=b.data,b&&b.pois){for(c=[],d=0;d + + + + + diff --git a/src/components/custom-refresher/custom-refresher.vue b/src/components/custom-refresher/custom-refresher.vue new file mode 100644 index 0000000..1a7f6f1 --- /dev/null +++ b/src/components/custom-refresher/custom-refresher.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/components/marked/index.js b/src/components/marked/index.js new file mode 100644 index 0000000..33e56c3 --- /dev/null +++ b/src/components/marked/index.js @@ -0,0 +1 @@ +export default './lib/marked' diff --git a/src/components/marked/lib/marked.js b/src/components/marked/lib/marked.js new file mode 100644 index 0000000..6a71e92 --- /dev/null +++ b/src/components/marked/lib/marked.js @@ -0,0 +1,1573 @@ +/** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/markedjs/marked + */ + +;(function(root) { +'use strict'; + +/** + * Block-Level Grammar + */ + +var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/, + nptable: noop, + blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: '^ {0,3}(?:' // optional indentation + + '<(script|pre|style)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)' // (1) + + '|comment[^\\n]*(\\n+|$)' // (2) + + '|<\\?[\\s\\S]*?\\?>\\n*' // (3) + + '|\\n*' // (4) + + '|\\n*' // (5) + + '|)[\\s\\S]*?(?:\\n{2,}|$)' // (6) + + '|<(?!script|pre|style)([a-z][\\w-]*)(?:attribute)*? */?>(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) open tag + + '|(?=\\h*\\n)[\\s\\S]*?(?:\\n{2,}|$)' // (7) closing tag + + ')', + def: /^ {0,3}\[(label)\]: *\n? *]+)>?(?:(?: +\n? *| *\n *)(title))? *(?:\n+|$)/, + table: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading| {0,3}>|<\/?(?:tag)(?: +|\n|\/?>)|<(?:script|pre|style|!--))[^\n]+)*)/, + text: /^[^\n]+/ +}; + +block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/; +block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/; +block.def = edit(block.def) + .replace('label', block._label) + .replace('title', block._title) + .getRegex(); + +block.bullet = /(?:[*+-]|\d+\.)/; +block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; +block.item = edit(block.item, 'gm') + .replace(/bull/g, block.bullet) + .getRegex(); + +block.list = edit(block.list) + .replace(/bull/g, block.bullet) + .replace('hr', '\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))') + .replace('def', '\\n+(?=' + block.def.source + ')') + .getRegex(); + +block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + + '|track|ul'; +block._comment = //; +block.html = edit(block.html, 'i') + .replace('comment', block._comment) + .replace('tag', block._tag) + .replace('attribute', / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/) + .getRegex(); + +block.paragraph = edit(block.paragraph) + .replace('hr', block.hr) + .replace('heading', block.heading) + .replace('lheading', block.lheading) + .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks + .getRegex(); + +block.blockquote = edit(block.blockquote) + .replace('paragraph', block.paragraph) + .getRegex(); + +/** + * Normal Block Grammar + */ + +block.normal = merge({}, block); + +/** + * GFM Block Grammar + */ + +block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\n? *\1 *(?:\n+|$)/, + paragraph: /^/, + heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ +}); + +block.gfm.paragraph = edit(block.paragraph) + .replace('(?!', '(?!' + + block.gfm.fences.source.replace('\\1', '\\2') + '|' + + block.list.source.replace('\\1', '\\3') + '|') + .getRegex(); + +/** + * GFM + Tables Block Grammar + */ + +block.tables = merge({}, block.gfm, { + nptable: /^ *([^|\n ].*\|.*)\n *([-:]+ *\|[-| :]*)(?:\n((?:.*[^>\n ].*(?:\n|$))*)\n*|$)/, + table: /^ *\|(.+)\n *\|?( *[-:]+[-| :]*)(?:\n((?: *[^>\n ].*(?:\n|$))*)\n*|$)/ +}); + +/** + * Pedantic grammar + */ + +block.pedantic = merge({}, block.normal, { + html: edit( + '^ *(?:comment *(?:\\n|\\s*$)' + + '|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)' // closed tag + + '|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))') + .replace('comment', block._comment) + .replace(/tag/g, '(?!(?:' + + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b') + .getRegex(), + def: /^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/ +}); + +/** + * Block Lexer + */ + +function Lexer(options) { + this.tokens = []; + this.tokens.links = Object.create(null); + this.options = options || marked.defaults; + this.rules = block.normal; + + if (this.options.pedantic) { + this.rules = block.pedantic; + } else if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; + } + } +} + +/** + * Expose Block Rules + */ + +Lexer.rules = block; + +/** + * Static Lex Method + */ + +Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); +}; + +/** + * Preprocessing + */ + +Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, '\n') + .replace(/\t/g, ' ') + .replace(/\u00a0/g, ' ') + .replace(/\u2424/g, '\n'); + + return this.token(src, true); +}; + +/** + * Lexing + */ + +Lexer.prototype.token = function(src, top) { + src = src.replace(/^ +$/gm, ''); + var next, + loose, + cap, + bull, + b, + item, + listStart, + listItems, + t, + space, + i, + tag, + l, + isordered, + istask, + ischecked; + + while (src) { + // newline + if (cap = this.rules.newline.exec(src)) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ + type: 'space' + }); + } + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ''); + this.tokens.push({ + type: 'code', + text: !this.options.pedantic + ? rtrim(cap, '\n') + : cap + }); + continue; + } + + // fences (gfm) + if (cap = this.rules.fences.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'code', + lang: cap[2], + text: cap[3] || '' + }); + continue; + } + + // heading + if (cap = this.rules.heading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[1].length, + text: cap[2] + }); + continue; + } + + // table no leading pipe (gfm) + if (top && (cap = this.rules.nptable.exec(src))) { + item = { + type: 'table', + header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells(item.cells[i], item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // hr + if (cap = this.rules.hr.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'hr' + }); + continue; + } + + // blockquote + if (cap = this.rules.blockquote.exec(src)) { + src = src.substring(cap[0].length); + + this.tokens.push({ + type: 'blockquote_start' + }); + + cap = cap[0].replace(/^ *> ?/gm, ''); + + // Pass `top` to keep the current + // "toplevel" state. This is exactly + // how markdown.pl works. + this.token(cap, top); + + this.tokens.push({ + type: 'blockquote_end' + }); + + continue; + } + + // list + if (cap = this.rules.list.exec(src)) { + src = src.substring(cap[0].length); + bull = cap[2]; + isordered = bull.length > 1; + + listStart = { + type: 'list_start', + ordered: isordered, + start: isordered ? +bull : '', + loose: false + }; + + this.tokens.push(listStart); + + // Get each top-level item. + cap = cap[0].match(this.rules.item); + + listItems = []; + next = false; + l = cap.length; + i = 0; + + for (; i < l; i++) { + item = cap[i]; + + // Remove the list item's bullet + // so it is seen as the next token. + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ''); + + // Outdent whatever the + // list item contains. Hacky. + if (~item.indexOf('\n ')) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') + : item.replace(/^ {1,4}/gm, ''); + } + + // Determine whether the next list item belongs here. + // Backpedal if it does not belong in this list. + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join('\n') + src; + i = l - 1; + } + } + + // Determine whether item is loose or not. + // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ + // for discount behavior. + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === '\n'; + if (!loose) loose = next; + } + + if (loose) { + listStart.loose = true; + } + + // Check for task list items + istask = /^\[[ xX]\] /.test(item); + ischecked = undefined; + if (istask) { + ischecked = item[1] !== ' '; + item = item.replace(/^\[[ xX]\] +/, ''); + } + + t = { + type: 'list_item_start', + task: istask, + checked: ischecked, + loose: loose + }; + + listItems.push(t); + this.tokens.push(t); + + // Recurse. + this.token(item, false); + + this.tokens.push({ + type: 'list_item_end' + }); + } + + if (listStart.loose) { + l = listItems.length; + i = 0; + for (; i < l; i++) { + listItems[i].loose = true; + } + } + + this.tokens.push({ + type: 'list_end' + }); + + continue; + } + + // html + if (cap = this.rules.html.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize + ? 'paragraph' + : 'html', + pre: !this.options.sanitizer + && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), + text: cap[0] + }); + continue; + } + + // def + if (top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1); + tag = cap[1].toLowerCase().replace(/\s+/g, ' '); + if (!this.tokens.links[tag]) { + this.tokens.links[tag] = { + href: cap[2], + title: cap[3] + }; + } + continue; + } + + // table (gfm) + if (top && (cap = this.rules.table.exec(src))) { + item = { + type: 'table', + header: splitCells(cap[1].replace(/^ *| *\| *$/g, '')), + align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), + cells: cap[3] ? cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') : [] + }; + + if (item.header.length === item.align.length) { + src = src.substring(cap[0].length); + + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = 'right'; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = 'center'; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = 'left'; + } else { + item.align[i] = null; + } + } + + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = splitCells( + item.cells[i].replace(/^ *\| *| *\| *$/g, ''), + item.header.length); + } + + this.tokens.push(item); + + continue; + } + } + + // lheading + if (cap = this.rules.lheading.exec(src)) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'heading', + depth: cap[2] === '=' ? 1 : 2, + text: cap[1] + }); + continue; + } + + // top-level paragraph + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'paragraph', + text: cap[1].charAt(cap[1].length - 1) === '\n' + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + // Top-level should never reach here. + src = src.substring(cap[0].length); + this.tokens.push({ + type: 'text', + text: cap[0] + }); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return this.tokens; +}; + +/** + * Inline-Level Grammar + */ + +var inline = { + escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, + autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/, + url: noop, + tag: '^comment' + + '|^' // self-closing tag + + '|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>' // open tag + + '|^<\\?[\\s\\S]*?\\?>' // processing instruction, e.g. + + '|^' // declaration, e.g. + + '|^', // CDATA section + link: /^!?\[(label)\]\(href(?:\s+(title))?\s*\)/, + reflink: /^!?\[(label)\]\[(?!\s*\])((?:\\[\[\]]?|[^\[\]\\])+)\]/, + nolink: /^!?\[(?!\s*\])((?:\[[^\[\]]*\]|\\[\[\]]|[^\[\]])*)\](?:\[\])?/, + strong: /^__([^\s])__(?!_)|^\*\*([^\s])\*\*(?!\*)|^__([^\s][\s\S]*?[^\s])__(?!_)|^\*\*([^\s][\s\S]*?[^\s])\*\*(?!\*)/, + em: /^_([^\s_])_(?!_)|^\*([^\s*"<\[])\*(?!\*)|^_([^\s][\s\S]*?[^\s_])_(?!_)|^_([^\s_][\s\S]*?[^\s])_(?!_)|^\*([^\s"<\[][\s\S]*?[^\s*])\*(?!\*)|^\*([^\s*"<\[][\s\S]*?[^\s])\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`]?)\s*\1(?!`)/, + br: /^( {2,}|\\)\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\?@\[\]\\^_`{|}~])/g; + +inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/; +inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/; +inline.autolink = edit(inline.autolink) + .replace('scheme', inline._scheme) + .replace('email', inline._email) + .getRegex(); + +inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/; + +inline.tag = edit(inline.tag) + .replace('comment', block._comment) + .replace('attribute', inline._attribute) + .getRegex(); + +inline._label = /(?:\[[^\[\]]*\]|\\[\[\]]?|`[^`]*`|[^\[\]\\])*?/; +inline._href = /\s*(<(?:\\[<>]?|[^\s<>\\])*>|(?:\\[()]?|\([^\s\x00-\x1f\\]*\)|[^\s\x00-\x1f()\\])*?)/; +inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/; + +inline.link = edit(inline.link) + .replace('label', inline._label) + .replace('href', inline._href) + .replace('title', inline._title) + .getRegex(); + +inline.reflink = edit(inline.reflink) + .replace('label', inline._label) + .getRegex(); + +/** + * Normal Inline Grammar + */ + +inline.normal = merge({}, inline); + +/** + * Pedantic Inline Grammar + */ + +inline.pedantic = merge({}, inline.normal, { + strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/, + link: edit(/^!?\[(label)\]\((.*?)\)/) + .replace('label', inline._label) + .getRegex(), + reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/) + .replace('label', inline._label) + .getRegex() +}); + +/** + * GFM Inline Grammar + */ + +inline.gfm = merge({}, inline.normal, { + escape: edit(inline.escape).replace('])', '~|])').getRegex(), + url: edit(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/) + .replace('email', inline._email) + .getRegex(), + _backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/, + del: /^~+(?=\S)([\s\S]*?\S)~+/, + text: edit(inline.text) + .replace(']|', '~]|') + .replace('|', '|https?://|ftp://|www\\.|[a-zA-Z0-9.!#$%&\'*+/=?^_`{\\|}~-]+@|') + .getRegex() +}); + +/** + * GFM + Line Breaks Inline Grammar + */ + +inline.breaks = merge({}, inline.gfm, { + br: edit(inline.br).replace('{2,}', '*').getRegex(), + text: edit(inline.gfm.text).replace('{2,}', '*').getRegex() +}); + +/** + * Inline Lexer & Compiler + */ + +function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer(); + this.renderer.options = this.options; + + if (!this.links) { + throw new Error('Tokens array requires a `links` property.'); + } + + if (this.options.pedantic) { + this.rules = inline.pedantic; + } else if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } +} + +/** + * Expose Inline Rules + */ + +InlineLexer.rules = inline; + +/** + * Static Lexing/Compiling Method + */ + +InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); +}; + +/** + * Lexing/Compiling + */ + +InlineLexer.prototype.output = function(src) { + var out = '', + link, + text, + href, + title, + cap, + prevCapZero; + + while (src) { + // escape + if (cap = this.rules.escape.exec(src)) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } + + // autolink + if (cap = this.rules.autolink.exec(src)) { + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(this.mangle(cap[1])); + href = 'mailto:' + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + + // url (gfm) + if (!this.inLink && (cap = this.rules.url.exec(src))) { + do { + prevCapZero = cap[0]; + cap[0] = this.rules._backpedal.exec(cap[0])[0]; + } while (prevCapZero !== cap[0]); + src = src.substring(cap[0].length); + if (cap[2] === '@') { + text = escape(cap[0]); + href = 'mailto:' + text; + } else { + text = escape(cap[0]); + if (cap[1] === 'www.') { + href = 'http://' + text; + } else { + href = text; + } + } + out += this.renderer.link(href, null, text); + continue; + } + + // tag + if (cap = this.rules.tag.exec(src)) { + if (!this.inLink && /^/i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0]) + : cap[0] + continue; + } + + // link + if (cap = this.rules.link.exec(src)) { + src = src.substring(cap[0].length); + this.inLink = true; + href = cap[2]; + if (this.options.pedantic) { + link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href); + + if (link) { + href = link[1]; + title = link[3]; + } else { + title = ''; + } + } else { + title = cap[3] ? cap[3].slice(1, -1) : ''; + } + href = href.trim().replace(/^<([\s\S]*)>$/, '$1'); + out += this.outputLink(cap, { + href: InlineLexer.escapes(href), + title: InlineLexer.escapes(title) + }); + this.inLink = false; + continue; + } + + // reflink, nolink + if ((cap = this.rules.reflink.exec(src)) + || (cap = this.rules.nolink.exec(src))) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, ' '); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + + // strong + if (cap = this.rules.strong.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // em + if (cap = this.rules.em.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[6] || cap[5] || cap[4] || cap[3] || cap[2] || cap[1])); + continue; + } + + // code + if (cap = this.rules.code.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2].trim(), true)); + continue; + } + + // br + if (cap = this.rules.br.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + + // del (gfm) + if (cap = this.rules.del.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + + // text + if (cap = this.rules.text.exec(src)) { + src = src.substring(cap[0].length); + out += this.renderer.text(escape(this.smartypants(cap[0]))); + continue; + } + + if (src) { + throw new Error('Infinite loop on byte: ' + src.charCodeAt(0)); + } + } + + return out; +}; + +InlineLexer.escapes = function(text) { + return text ? text.replace(InlineLexer.rules._escapes, '$1') : text; +} + +/** + * Compile Link + */ + +InlineLexer.prototype.outputLink = function(cap, link) { + var href = link.href, + title = link.title ? escape(link.title) : null; + + return cap[0].charAt(0) !== '!' + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); +}; + +/** + * Smartypants Transformations + */ + +InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + // em-dashes + .replace(/---/g, '\u2014') + // en-dashes + .replace(/--/g, '\u2013') + // opening singles + .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') + // closing singles & apostrophes + .replace(/'/g, '\u2019') + // opening doubles + .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') + // closing doubles + .replace(/"/g, '\u201d') + // ellipses + .replace(/\.{3}/g, '\u2026'); +}; + +/** + * Mangle Links + */ + +InlineLexer.prototype.mangle = function(text) { + if (!this.options.mangle) return text; + var out = '', + l = text.length, + i = 0, + ch; + + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = 'x' + ch.toString(16); + } + out += '&#' + ch + ';'; + } + + return out; +}; + +/** + * Renderer + */ + +function Renderer(options) { + this.options = options || marked.defaults; +} + +Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + + if (!lang) { + return '
'
+      + (escaped ? code : escape(code, true))
+      + '
'; + } + + return '
'
+    + (escaped ? code : escape(code, true))
+    + '
\n'; +}; + +Renderer.prototype.blockquote = function(quote) { + return '
\n' + quote + '
\n'; +}; + +Renderer.prototype.html = function(html) { + return html; +}; + +Renderer.prototype.heading = function(text, level, raw) { + if (this.options.headerIds) { + return '' + + text + + '\n'; + } + // ignore IDs + return '' + text + '\n'; +}; + +Renderer.prototype.hr = function() { + return this.options.xhtml ? '
\n' : '
\n'; +}; + +Renderer.prototype.list = function(body, ordered, start) { + var type = ordered ? 'ol' : 'ul', + startatt = (ordered && start !== 1) ? (' start="' + start + '"') : ''; + return '<' + type + startatt + '>\n' + body + '\n'; +}; + +Renderer.prototype.listitem = function(text) { + return '
  • ' + text + '
  • \n'; +}; + +Renderer.prototype.checkbox = function(checked) { + return ' '; +} + +Renderer.prototype.paragraph = function(text) { + return '

    ' + text + '

    \n'; +}; + +Renderer.prototype.table = function(header, body) { + if (body) body = '' + body + ''; + + return '\n' + + '\n' + + header + + '\n' + + body + + '
    \n'; +}; + +Renderer.prototype.tablerow = function(content) { + return '\n' + content + '\n'; +}; + +Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? 'th' : 'td'; + var tag = flags.align + ? '<' + type + ' align="' + flags.align + '">' + : '<' + type + '>'; + return tag + content + '\n'; +}; + +// span level renderer +Renderer.prototype.strong = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.em = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.codespan = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.br = function() { + return this.options.xhtml ? '
    ' : '
    '; +}; + +Renderer.prototype.del = function(text) { + return '' + text + ''; +}; + +Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, '') + .toLowerCase(); + } catch (e) { + return text; + } + if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) { + return text; + } + } + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + try { + href = encodeURI(href).replace(/%25/g, '%'); + } catch (e) { + return text; + } + var out = '
    '; + return out; +}; + +Renderer.prototype.image = function(href, title, text) { + if (this.options.baseUrl && !originIndependentUrl.test(href)) { + href = resolveUrl(this.options.baseUrl, href); + } + var out = '' + text + '' : '>'; + return out; +}; + +Renderer.prototype.text = function(text) { + return text; +}; + +/** + * TextRenderer + * returns only the textual part of the token + */ + +function TextRenderer() {} + +// no need for block level renderers + +TextRenderer.prototype.strong = +TextRenderer.prototype.em = +TextRenderer.prototype.codespan = +TextRenderer.prototype.del = +TextRenderer.prototype.text = function (text) { + return text; +} + +TextRenderer.prototype.link = +TextRenderer.prototype.image = function(href, title, text) { + return '' + text; +} + +TextRenderer.prototype.br = function() { + return ''; +} + +/** + * Parsing & Compiling + */ + +function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; +} + +/** + * Static Parse Method + */ + +Parser.parse = function(src, options) { + var parser = new Parser(options); + return parser.parse(src); +}; + +/** + * Parse Loop + */ + +Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options); + // use an InlineLexer with a TextRenderer to extract pure text + this.inlineText = new InlineLexer( + src.links, + merge({}, this.options, {renderer: new TextRenderer()}) + ); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; +}; + +/** + * Next Token + */ + +Parser.prototype.next = function() { + return this.token = this.tokens.pop(); +}; + +/** + * Preview Next Token + */ + +Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; +}; + +/** + * Parse Text Tokens + */ + +Parser.prototype.parseText = function() { + var body = this.token.text; + + while (this.peek().type === 'text') { + body += '\n' + this.next().text; + } + + return this.inline.output(body); +}; + +/** + * Parse Current Token + */ + +Parser.prototype.tok = function() { + switch (this.token.type) { + case 'space': { + return ''; + } + case 'hr': { + return this.renderer.hr(); + } + case 'heading': { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + unescape(this.inlineText.output(this.token.text))); + } + case 'code': { + return this.renderer.code(this.token.text, + this.token.lang, + this.token.escaped); + } + case 'table': { + var header = '', + body = '', + i, + row, + cell, + j; + + // header + cell = ''; + for (i = 0; i < this.token.header.length; i++) { + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + + cell = ''; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell( + this.inline.output(row[j]), + { header: false, align: this.token.align[j] } + ); + } + + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case 'blockquote_start': { + body = ''; + + while (this.next().type !== 'blockquote_end') { + body += this.tok(); + } + + return this.renderer.blockquote(body); + } + case 'list_start': { + body = ''; + var ordered = this.token.ordered, + start = this.token.start; + + while (this.next().type !== 'list_end') { + body += this.tok(); + } + + return this.renderer.list(body, ordered, start); + } + case 'list_item_start': { + body = ''; + var loose = this.token.loose; + + if (this.token.task) { + body += this.renderer.checkbox(this.token.checked); + } + + while (this.next().type !== 'list_item_end') { + body += !loose && this.token.type === 'text' + ? this.parseText() + : this.tok(); + } + + return this.renderer.listitem(body); + } + case 'html': { + // TODO parse inline content if parameter markdown=1 + return this.renderer.html(this.token.text); + } + case 'paragraph': { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case 'text': { + return this.renderer.paragraph(this.parseText()); + } + } +}; + +/** + * Helpers + */ + +function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') + .replace(//g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +function unescape(html) { + // explicitly match decimal, hex, and named HTML entities + return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(_, n) { + n = n.toLowerCase(); + if (n === 'colon') return ':'; + if (n.charAt(0) === '#') { + return n.charAt(1) === 'x' + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ''; + }); +} + +function edit(regex, opt) { + regex = regex.source || regex; + opt = opt || ''; + return { + replace: function(name, val) { + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, '$1'); + regex = regex.replace(name, val); + return this; + }, + getRegex: function() { + return new RegExp(regex, opt); + } + }; +} + +function resolveUrl(base, href) { + if (!baseUrls[' ' + base]) { + // we can ignore everything in base after the last slash of its path component, + // but we might need to add _that_ + // https://tools.ietf.org/html/rfc3986#section-3 + if (/^[^:]+:\/*[^/]*$/.test(base)) { + baseUrls[' ' + base] = base + '/'; + } else { + baseUrls[' ' + base] = rtrim(base, '/', true); + } + } + base = baseUrls[' ' + base]; + + if (href.slice(0, 2) === '//') { + return base.replace(/:[\s\S]*/, ':') + href; + } else if (href.charAt(0) === '/') { + return base.replace(/(:\/*[^/]*)[\s\S]*/, '$1') + href; + } else { + return base + href; + } +} +var baseUrls = {}; +var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i; + +function noop() {} +noop.exec = noop; + +function merge(obj) { + var i = 1, + target, + key; + + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + + return obj; +} + +function splitCells(tableRow, count) { + // ensure that every cell-delimiting pipe has a space + // before it to distinguish it from an escaped pipe + var row = tableRow.replace(/\|/g, function (match, offset, str) { + var escaped = false, + curr = offset; + while (--curr >= 0 && str[curr] === '\\') escaped = !escaped; + if (escaped) { + // odd number of slashes means | is escaped + // so we leave it alone + return '|'; + } else { + // add space before unescaped | + return ' |'; + } + }), + cells = row.split(/ \|/), + i = 0; + + if (cells.length > count) { + cells.splice(count); + } else { + while (cells.length < count) cells.push(''); + } + + for (; i < cells.length; i++) { + // leading or trailing whitespace is ignored per the gfm spec + cells[i] = cells[i].trim().replace(/\\\|/g, '|'); + } + return cells; +} + +// Remove trailing 'c's. Equivalent to str.replace(/c*$/, ''). +// /c*$/ is vulnerable to REDOS. +// invert: Remove suffix of non-c chars instead. Default falsey. +function rtrim(str, c, invert) { + if (str.length === 0) { + return ''; + } + + // Length of suffix matching the invert condition. + var suffLen = 0; + + // Step left until we fail to match the invert condition. + while (suffLen < str.length) { + var currChar = str.charAt(str.length - suffLen - 1); + if (currChar === c && !invert) { + suffLen++; + } else if (currChar !== c && invert) { + suffLen++; + } else { + break; + } + } + + return str.substr(0, str.length - suffLen); +} + +/** + * Marked + */ + +function marked(src, opt, callback) { + // throw error in case of non string input + if (typeof src === 'undefined' || src === null) { + throw new Error('marked(): input parameter is undefined or null'); + } + if (typeof src !== 'string') { + throw new Error('marked(): input parameter is of type ' + + Object.prototype.toString.call(src) + ', string expected'); + } + + if (callback || typeof opt === 'function') { + if (!callback) { + callback = opt; + opt = null; + } + + opt = merge({}, marked.defaults, opt || {}); + + var highlight = opt.highlight, + tokens, + pending, + i = 0; + + try { + tokens = Lexer.lex(src, opt) + } catch (e) { + return callback(e); + } + + pending = tokens.length; + + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + + var out; + + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + + opt.highlight = highlight; + + return err + ? callback(err) + : callback(null, out); + }; + + if (!highlight || highlight.length < 3) { + return done(); + } + + delete opt.highlight; + + if (!pending) return done(); + + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== 'code') { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += '\nPlease report this to https://github.com/markedjs/marked.'; + if ((opt || marked.defaults).silent) { + return '

    An error occurred:

    '
    +        + escape(e.message + '', true)
    +        + '
    '; + } + throw e; + } +} + +/** + * Options + */ + +marked.options = +marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; +}; + +marked.getDefaults = function () { + return { + baseUrl: null, + breaks: false, + gfm: true, + headerIds: true, + headerPrefix: '', + highlight: null, + langPrefix: 'language-', + mangle: true, + pedantic: false, + renderer: new Renderer(), + sanitize: false, + sanitizer: null, + silent: false, + smartLists: false, + smartypants: false, + tables: true, + xhtml: false + }; +} + +marked.defaults = marked.getDefaults(); + +/** + * Expose + */ + +marked.Parser = Parser; +marked.parser = Parser.parse; + +marked.Renderer = Renderer; +marked.TextRenderer = TextRenderer; + +marked.Lexer = Lexer; +marked.lexer = Lexer.lex; + +marked.InlineLexer = InlineLexer; +marked.inlineLexer = InlineLexer.output; + +marked.parse = marked; + +if (typeof module !== 'undefined' && typeof exports === 'object') { + module.exports = marked; +} else if (typeof define === 'function' && define.amd) { + define(function() { return marked; }); +} else { + root.marked = marked; +} +})(this || (typeof window !== 'undefined' ? window : global)); diff --git a/src/components/mpvue-citypicker/city-data/area.js b/src/components/mpvue-citypicker/city-data/area.js new file mode 100644 index 0000000..92dfc30 --- /dev/null +++ b/src/components/mpvue-citypicker/city-data/area.js @@ -0,0 +1,12542 @@ +/* eslint-disable */ +var areaData = [ + [ + [{ + "label": "东城区", + "value": "110101" + }, + { + "label": "西城区", + "value": "110102" + }, + { + "label": "朝阳区", + "value": "110105" + }, + { + "label": "丰台区", + "value": "110106" + }, + { + "label": "石景山区", + "value": "110107" + }, + { + "label": "海淀区", + "value": "110108" + }, + { + "label": "门头沟区", + "value": "110109" + }, + { + "label": "房山区", + "value": "110111" + }, + { + "label": "通州区", + "value": "110112" + }, + { + "label": "顺义区", + "value": "110113" + }, + { + "label": "昌平区", + "value": "110114" + }, + { + "label": "大兴区", + "value": "110115" + }, + { + "label": "怀柔区", + "value": "110116" + }, + { + "label": "平谷区", + "value": "110117" + }, + { + "label": "密云区", + "value": "110118" + }, + { + "label": "延庆区", + "value": "110119" + } + ] + ], + [ + [{ + "label": "和平区", + "value": "120101" + }, + { + "label": "河东区", + "value": "120102" + }, + { + "label": "河西区", + "value": "120103" + }, + { + "label": "南开区", + "value": "120104" + }, + { + "label": "河北区", + "value": "120105" + }, + { + "label": "红桥区", + "value": "120106" + }, + { + "label": "东丽区", + "value": "120110" + }, + { + "label": "西青区", + "value": "120111" + }, + { + "label": "津南区", + "value": "120112" + }, + { + "label": "北辰区", + "value": "120113" + }, + { + "label": "武清区", + "value": "120114" + }, + { + "label": "宝坻区", + "value": "120115" + }, + { + "label": "滨海新区", + "value": "120116" + }, + { + "label": "宁河区", + "value": "120117" + }, + { + "label": "静海区", + "value": "120118" + }, + { + "label": "蓟州区", + "value": "120119" + } + ] + ], + [ + [{ + "label": "长安区", + "value": "130102" + }, + { + "label": "桥西区", + "value": "130104" + }, + { + "label": "新华区", + "value": "130105" + }, + { + "label": "井陉矿区", + "value": "130107" + }, + { + "label": "裕华区", + "value": "130108" + }, + { + "label": "藁城区", + "value": "130109" + }, + { + "label": "鹿泉区", + "value": "130110" + }, + { + "label": "栾城区", + "value": "130111" + }, + { + "label": "井陉县", + "value": "130121" + }, + { + "label": "正定县", + "value": "130123" + }, + { + "label": "行唐县", + "value": "130125" + }, + { + "label": "灵寿县", + "value": "130126" + }, + { + "label": "高邑县", + "value": "130127" + }, + { + "label": "深泽县", + "value": "130128" + }, + { + "label": "赞皇县", + "value": "130129" + }, + { + "label": "无极县", + "value": "130130" + }, + { + "label": "平山县", + "value": "130131" + }, + { + "label": "元氏县", + "value": "130132" + }, + { + "label": "赵县", + "value": "130133" + }, + { + "label": "石家庄高新技术产业开发区", + "value": "130171" + }, + { + "label": "石家庄循环化工园区", + "value": "130172" + }, + { + "label": "辛集市", + "value": "130181" + }, + { + "label": "晋州市", + "value": "130183" + }, + { + "label": "新乐市", + "value": "130184" + } + ], + [{ + "label": "路南区", + "value": "130202" + }, + { + "label": "路北区", + "value": "130203" + }, + { + "label": "古冶区", + "value": "130204" + }, + { + "label": "开平区", + "value": "130205" + }, + { + "label": "丰南区", + "value": "130207" + }, + { + "label": "丰润区", + "value": "130208" + }, + { + "label": "曹妃甸区", + "value": "130209" + }, + { + "label": "滦县", + "value": "130223" + }, + { + "label": "滦南县", + "value": "130224" + }, + { + "label": "乐亭县", + "value": "130225" + }, + { + "label": "迁西县", + "value": "130227" + }, + { + "label": "玉田县", + "value": "130229" + }, + { + "label": "唐山市芦台经济技术开发区", + "value": "130271" + }, + { + "label": "唐山市汉沽管理区", + "value": "130272" + }, + { + "label": "唐山高新技术产业开发区", + "value": "130273" + }, + { + "label": "河北唐山海港经济开发区", + "value": "130274" + }, + { + "label": "遵化市", + "value": "130281" + }, + { + "label": "迁安市", + "value": "130283" + } + ], + [{ + "label": "海港区", + "value": "130302" + }, + { + "label": "山海关区", + "value": "130303" + }, + { + "label": "北戴河区", + "value": "130304" + }, + { + "label": "抚宁区", + "value": "130306" + }, + { + "label": "青龙满族自治县", + "value": "130321" + }, + { + "label": "昌黎县", + "value": "130322" + }, + { + "label": "卢龙县", + "value": "130324" + }, + { + "label": "秦皇岛市经济技术开发区", + "value": "130371" + }, + { + "label": "北戴河新区", + "value": "130372" + } + ], + [{ + "label": "邯山区", + "value": "130402" + }, + { + "label": "丛台区", + "value": "130403" + }, + { + "label": "复兴区", + "value": "130404" + }, + { + "label": "峰峰矿区", + "value": "130406" + }, + { + "label": "肥乡区", + "value": "130407" + }, + { + "label": "永年区", + "value": "130408" + }, + { + "label": "临漳县", + "value": "130423" + }, + { + "label": "成安县", + "value": "130424" + }, + { + "label": "大名县", + "value": "130425" + }, + { + "label": "涉县", + "value": "130426" + }, + { + "label": "磁县", + "value": "130427" + }, + { + "label": "邱县", + "value": "130430" + }, + { + "label": "鸡泽县", + "value": "130431" + }, + { + "label": "广平县", + "value": "130432" + }, + { + "label": "馆陶县", + "value": "130433" + }, + { + "label": "魏县", + "value": "130434" + }, + { + "label": "曲周县", + "value": "130435" + }, + { + "label": "邯郸经济技术开发区", + "value": "130471" + }, + { + "label": "邯郸冀南新区", + "value": "130473" + }, + { + "label": "武安市", + "value": "130481" + } + ], + [{ + "label": "桥东区", + "value": "130502" + }, + { + "label": "桥西区", + "value": "130503" + }, + { + "label": "邢台县", + "value": "130521" + }, + { + "label": "临城县", + "value": "130522" + }, + { + "label": "内丘县", + "value": "130523" + }, + { + "label": "柏乡县", + "value": "130524" + }, + { + "label": "隆尧县", + "value": "130525" + }, + { + "label": "任县", + "value": "130526" + }, + { + "label": "南和县", + "value": "130527" + }, + { + "label": "宁晋县", + "value": "130528" + }, + { + "label": "巨鹿县", + "value": "130529" + }, + { + "label": "新河县", + "value": "130530" + }, + { + "label": "广宗县", + "value": "130531" + }, + { + "label": "平乡县", + "value": "130532" + }, + { + "label": "威县", + "value": "130533" + }, + { + "label": "清河县", + "value": "130534" + }, + { + "label": "临西县", + "value": "130535" + }, + { + "label": "河北邢台经济开发区", + "value": "130571" + }, + { + "label": "南宫市", + "value": "130581" + }, + { + "label": "沙河市", + "value": "130582" + } + ], + [{ + "label": "竞秀区", + "value": "130602" + }, + { + "label": "莲池区", + "value": "130606" + }, + { + "label": "满城区", + "value": "130607" + }, + { + "label": "清苑区", + "value": "130608" + }, + { + "label": "徐水区", + "value": "130609" + }, + { + "label": "涞水县", + "value": "130623" + }, + { + "label": "阜平县", + "value": "130624" + }, + { + "label": "定兴县", + "value": "130626" + }, + { + "label": "唐县", + "value": "130627" + }, + { + "label": "高阳县", + "value": "130628" + }, + { + "label": "容城县", + "value": "130629" + }, + { + "label": "涞源县", + "value": "130630" + }, + { + "label": "望都县", + "value": "130631" + }, + { + "label": "安新县", + "value": "130632" + }, + { + "label": "易县", + "value": "130633" + }, + { + "label": "曲阳县", + "value": "130634" + }, + { + "label": "蠡县", + "value": "130635" + }, + { + "label": "顺平县", + "value": "130636" + }, + { + "label": "博野县", + "value": "130637" + }, + { + "label": "雄县", + "value": "130638" + }, + { + "label": "保定高新技术产业开发区", + "value": "130671" + }, + { + "label": "保定白沟新城", + "value": "130672" + }, + { + "label": "涿州市", + "value": "130681" + }, + { + "label": "定州市", + "value": "130682" + }, + { + "label": "安国市", + "value": "130683" + }, + { + "label": "高碑店市", + "value": "130684" + } + ], + [{ + "label": "桥东区", + "value": "130702" + }, + { + "label": "桥西区", + "value": "130703" + }, + { + "label": "宣化区", + "value": "130705" + }, + { + "label": "下花园区", + "value": "130706" + }, + { + "label": "万全区", + "value": "130708" + }, + { + "label": "崇礼区", + "value": "130709" + }, + { + "label": "张北县", + "value": "130722" + }, + { + "label": "康保县", + "value": "130723" + }, + { + "label": "沽源县", + "value": "130724" + }, + { + "label": "尚义县", + "value": "130725" + }, + { + "label": "蔚县", + "value": "130726" + }, + { + "label": "阳原县", + "value": "130727" + }, + { + "label": "怀安县", + "value": "130728" + }, + { + "label": "怀来县", + "value": "130730" + }, + { + "label": "涿鹿县", + "value": "130731" + }, + { + "label": "赤城县", + "value": "130732" + }, + { + "label": "张家口市高新技术产业开发区", + "value": "130771" + }, + { + "label": "张家口市察北管理区", + "value": "130772" + }, + { + "label": "张家口市塞北管理区", + "value": "130773" + } + ], + [{ + "label": "双桥区", + "value": "130802" + }, + { + "label": "双滦区", + "value": "130803" + }, + { + "label": "鹰手营子矿区", + "value": "130804" + }, + { + "label": "承德县", + "value": "130821" + }, + { + "label": "兴隆县", + "value": "130822" + }, + { + "label": "滦平县", + "value": "130824" + }, + { + "label": "隆化县", + "value": "130825" + }, + { + "label": "丰宁满族自治县", + "value": "130826" + }, + { + "label": "宽城满族自治县", + "value": "130827" + }, + { + "label": "围场满族蒙古族自治县", + "value": "130828" + }, + { + "label": "承德高新技术产业开发区", + "value": "130871" + }, + { + "label": "平泉市", + "value": "130881" + } + ], + [{ + "label": "新华区", + "value": "130902" + }, + { + "label": "运河区", + "value": "130903" + }, + { + "label": "沧县", + "value": "130921" + }, + { + "label": "青县", + "value": "130922" + }, + { + "label": "东光县", + "value": "130923" + }, + { + "label": "海兴县", + "value": "130924" + }, + { + "label": "盐山县", + "value": "130925" + }, + { + "label": "肃宁县", + "value": "130926" + }, + { + "label": "南皮县", + "value": "130927" + }, + { + "label": "吴桥县", + "value": "130928" + }, + { + "label": "献县", + "value": "130929" + }, + { + "label": "孟村回族自治县", + "value": "130930" + }, + { + "label": "河北沧州经济开发区", + "value": "130971" + }, + { + "label": "沧州高新技术产业开发区", + "value": "130972" + }, + { + "label": "沧州渤海新区", + "value": "130973" + }, + { + "label": "泊头市", + "value": "130981" + }, + { + "label": "任丘市", + "value": "130982" + }, + { + "label": "黄骅市", + "value": "130983" + }, + { + "label": "河间市", + "value": "130984" + } + ], + [{ + "label": "安次区", + "value": "131002" + }, + { + "label": "广阳区", + "value": "131003" + }, + { + "label": "固安县", + "value": "131022" + }, + { + "label": "永清县", + "value": "131023" + }, + { + "label": "香河县", + "value": "131024" + }, + { + "label": "大城县", + "value": "131025" + }, + { + "label": "文安县", + "value": "131026" + }, + { + "label": "大厂回族自治县", + "value": "131028" + }, + { + "label": "廊坊经济技术开发区", + "value": "131071" + }, + { + "label": "霸州市", + "value": "131081" + }, + { + "label": "三河市", + "value": "131082" + } + ], + [{ + "label": "桃城区", + "value": "131102" + }, + { + "label": "冀州区", + "value": "131103" + }, + { + "label": "枣强县", + "value": "131121" + }, + { + "label": "武邑县", + "value": "131122" + }, + { + "label": "武强县", + "value": "131123" + }, + { + "label": "饶阳县", + "value": "131124" + }, + { + "label": "安平县", + "value": "131125" + }, + { + "label": "故城县", + "value": "131126" + }, + { + "label": "景县", + "value": "131127" + }, + { + "label": "阜城县", + "value": "131128" + }, + { + "label": "河北衡水经济开发区", + "value": "131171" + }, + { + "label": "衡水滨湖新区", + "value": "131172" + }, + { + "label": "深州市", + "value": "131182" + } + ] + ], + [ + [{ + "label": "小店区", + "value": "140105" + }, + { + "label": "迎泽区", + "value": "140106" + }, + { + "label": "杏花岭区", + "value": "140107" + }, + { + "label": "尖草坪区", + "value": "140108" + }, + { + "label": "万柏林区", + "value": "140109" + }, + { + "label": "晋源区", + "value": "140110" + }, + { + "label": "清徐县", + "value": "140121" + }, + { + "label": "阳曲县", + "value": "140122" + }, + { + "label": "娄烦县", + "value": "140123" + }, + { + "label": "山西转型综合改革示范区", + "value": "140171" + }, + { + "label": "古交市", + "value": "140181" + } + ], + [{ + "label": "城区", + "value": "140202" + }, + { + "label": "矿区", + "value": "140203" + }, + { + "label": "南郊区", + "value": "140211" + }, + { + "label": "新荣区", + "value": "140212" + }, + { + "label": "阳高县", + "value": "140221" + }, + { + "label": "天镇县", + "value": "140222" + }, + { + "label": "广灵县", + "value": "140223" + }, + { + "label": "灵丘县", + "value": "140224" + }, + { + "label": "浑源县", + "value": "140225" + }, + { + "label": "左云县", + "value": "140226" + }, + { + "label": "大同县", + "value": "140227" + }, + { + "label": "山西大同经济开发区", + "value": "140271" + } + ], + [{ + "label": "城区", + "value": "140302" + }, + { + "label": "矿区", + "value": "140303" + }, + { + "label": "郊区", + "value": "140311" + }, + { + "label": "平定县", + "value": "140321" + }, + { + "label": "盂县", + "value": "140322" + }, + { + "label": "山西阳泉经济开发区", + "value": "140371" + } + ], + [{ + "label": "城区", + "value": "140402" + }, + { + "label": "郊区", + "value": "140411" + }, + { + "label": "长治县", + "value": "140421" + }, + { + "label": "襄垣县", + "value": "140423" + }, + { + "label": "屯留县", + "value": "140424" + }, + { + "label": "平顺县", + "value": "140425" + }, + { + "label": "黎城县", + "value": "140426" + }, + { + "label": "壶关县", + "value": "140427" + }, + { + "label": "长子县", + "value": "140428" + }, + { + "label": "武乡县", + "value": "140429" + }, + { + "label": "沁县", + "value": "140430" + }, + { + "label": "沁源县", + "value": "140431" + }, + { + "label": "山西长治高新技术产业园区", + "value": "140471" + }, + { + "label": "潞城市", + "value": "140481" + } + ], + [{ + "label": "城区", + "value": "140502" + }, + { + "label": "沁水县", + "value": "140521" + }, + { + "label": "阳城县", + "value": "140522" + }, + { + "label": "陵川县", + "value": "140524" + }, + { + "label": "泽州县", + "value": "140525" + }, + { + "label": "高平市", + "value": "140581" + } + ], + [{ + "label": "朔城区", + "value": "140602" + }, + { + "label": "平鲁区", + "value": "140603" + }, + { + "label": "山阴县", + "value": "140621" + }, + { + "label": "应县", + "value": "140622" + }, + { + "label": "右玉县", + "value": "140623" + }, + { + "label": "怀仁县", + "value": "140624" + }, + { + "label": "山西朔州经济开发区", + "value": "140671" + } + ], + [{ + "label": "榆次区", + "value": "140702" + }, + { + "label": "榆社县", + "value": "140721" + }, + { + "label": "左权县", + "value": "140722" + }, + { + "label": "和顺县", + "value": "140723" + }, + { + "label": "昔阳县", + "value": "140724" + }, + { + "label": "寿阳县", + "value": "140725" + }, + { + "label": "太谷县", + "value": "140726" + }, + { + "label": "祁县", + "value": "140727" + }, + { + "label": "平遥县", + "value": "140728" + }, + { + "label": "灵石县", + "value": "140729" + }, + { + "label": "介休市", + "value": "140781" + } + ], + [{ + "label": "盐湖区", + "value": "140802" + }, + { + "label": "临猗县", + "value": "140821" + }, + { + "label": "万荣县", + "value": "140822" + }, + { + "label": "闻喜县", + "value": "140823" + }, + { + "label": "稷山县", + "value": "140824" + }, + { + "label": "新绛县", + "value": "140825" + }, + { + "label": "绛县", + "value": "140826" + }, + { + "label": "垣曲县", + "value": "140827" + }, + { + "label": "夏县", + "value": "140828" + }, + { + "label": "平陆县", + "value": "140829" + }, + { + "label": "芮城县", + "value": "140830" + }, + { + "label": "永济市", + "value": "140881" + }, + { + "label": "河津市", + "value": "140882" + } + ], + [{ + "label": "忻府区", + "value": "140902" + }, + { + "label": "定襄县", + "value": "140921" + }, + { + "label": "五台县", + "value": "140922" + }, + { + "label": "代县", + "value": "140923" + }, + { + "label": "繁峙县", + "value": "140924" + }, + { + "label": "宁武县", + "value": "140925" + }, + { + "label": "静乐县", + "value": "140926" + }, + { + "label": "神池县", + "value": "140927" + }, + { + "label": "五寨县", + "value": "140928" + }, + { + "label": "岢岚县", + "value": "140929" + }, + { + "label": "河曲县", + "value": "140930" + }, + { + "label": "保德县", + "value": "140931" + }, + { + "label": "偏关县", + "value": "140932" + }, + { + "label": "五台山风景名胜区", + "value": "140971" + }, + { + "label": "原平市", + "value": "140981" + } + ], + [{ + "label": "尧都区", + "value": "141002" + }, + { + "label": "曲沃县", + "value": "141021" + }, + { + "label": "翼城县", + "value": "141022" + }, + { + "label": "襄汾县", + "value": "141023" + }, + { + "label": "洪洞县", + "value": "141024" + }, + { + "label": "古县", + "value": "141025" + }, + { + "label": "安泽县", + "value": "141026" + }, + { + "label": "浮山县", + "value": "141027" + }, + { + "label": "吉县", + "value": "141028" + }, + { + "label": "乡宁县", + "value": "141029" + }, + { + "label": "大宁县", + "value": "141030" + }, + { + "label": "隰县", + "value": "141031" + }, + { + "label": "永和县", + "value": "141032" + }, + { + "label": "蒲县", + "value": "141033" + }, + { + "label": "汾西县", + "value": "141034" + }, + { + "label": "侯马市", + "value": "141081" + }, + { + "label": "霍州市", + "value": "141082" + } + ], + [{ + "label": "离石区", + "value": "141102" + }, + { + "label": "文水县", + "value": "141121" + }, + { + "label": "交城县", + "value": "141122" + }, + { + "label": "兴县", + "value": "141123" + }, + { + "label": "临县", + "value": "141124" + }, + { + "label": "柳林县", + "value": "141125" + }, + { + "label": "石楼县", + "value": "141126" + }, + { + "label": "岚县", + "value": "141127" + }, + { + "label": "方山县", + "value": "141128" + }, + { + "label": "中阳县", + "value": "141129" + }, + { + "label": "交口县", + "value": "141130" + }, + { + "label": "孝义市", + "value": "141181" + }, + { + "label": "汾阳市", + "value": "141182" + } + ] + ], + [ + [{ + "label": "新城区", + "value": "150102" + }, + { + "label": "回民区", + "value": "150103" + }, + { + "label": "玉泉区", + "value": "150104" + }, + { + "label": "赛罕区", + "value": "150105" + }, + { + "label": "土默特左旗", + "value": "150121" + }, + { + "label": "托克托县", + "value": "150122" + }, + { + "label": "和林格尔县", + "value": "150123" + }, + { + "label": "清水河县", + "value": "150124" + }, + { + "label": "武川县", + "value": "150125" + }, + { + "label": "呼和浩特金海工业园区", + "value": "150171" + }, + { + "label": "呼和浩特经济技术开发区", + "value": "150172" + } + ], + [{ + "label": "东河区", + "value": "150202" + }, + { + "label": "昆都仑区", + "value": "150203" + }, + { + "label": "青山区", + "value": "150204" + }, + { + "label": "石拐区", + "value": "150205" + }, + { + "label": "白云鄂博矿区", + "value": "150206" + }, + { + "label": "九原区", + "value": "150207" + }, + { + "label": "土默特右旗", + "value": "150221" + }, + { + "label": "固阳县", + "value": "150222" + }, + { + "label": "达尔罕茂明安联合旗", + "value": "150223" + }, + { + "label": "包头稀土高新技术产业开发区", + "value": "150271" + } + ], + [{ + "label": "海勃湾区", + "value": "150302" + }, + { + "label": "海南区", + "value": "150303" + }, + { + "label": "乌达区", + "value": "150304" + } + ], + [{ + "label": "红山区", + "value": "150402" + }, + { + "label": "元宝山区", + "value": "150403" + }, + { + "label": "松山区", + "value": "150404" + }, + { + "label": "阿鲁科尔沁旗", + "value": "150421" + }, + { + "label": "巴林左旗", + "value": "150422" + }, + { + "label": "巴林右旗", + "value": "150423" + }, + { + "label": "林西县", + "value": "150424" + }, + { + "label": "克什克腾旗", + "value": "150425" + }, + { + "label": "翁牛特旗", + "value": "150426" + }, + { + "label": "喀喇沁旗", + "value": "150428" + }, + { + "label": "宁城县", + "value": "150429" + }, + { + "label": "敖汉旗", + "value": "150430" + } + ], + [{ + "label": "科尔沁区", + "value": "150502" + }, + { + "label": "科尔沁左翼中旗", + "value": "150521" + }, + { + "label": "科尔沁左翼后旗", + "value": "150522" + }, + { + "label": "开鲁县", + "value": "150523" + }, + { + "label": "库伦旗", + "value": "150524" + }, + { + "label": "奈曼旗", + "value": "150525" + }, + { + "label": "扎鲁特旗", + "value": "150526" + }, + { + "label": "通辽经济技术开发区", + "value": "150571" + }, + { + "label": "霍林郭勒市", + "value": "150581" + } + ], + [{ + "label": "东胜区", + "value": "150602" + }, + { + "label": "康巴什区", + "value": "150603" + }, + { + "label": "达拉特旗", + "value": "150621" + }, + { + "label": "准格尔旗", + "value": "150622" + }, + { + "label": "鄂托克前旗", + "value": "150623" + }, + { + "label": "鄂托克旗", + "value": "150624" + }, + { + "label": "杭锦旗", + "value": "150625" + }, + { + "label": "乌审旗", + "value": "150626" + }, + { + "label": "伊金霍洛旗", + "value": "150627" + } + ], + [{ + "label": "海拉尔区", + "value": "150702" + }, + { + "label": "扎赉诺尔区", + "value": "150703" + }, + { + "label": "阿荣旗", + "value": "150721" + }, + { + "label": "莫力达瓦达斡尔族自治旗", + "value": "150722" + }, + { + "label": "鄂伦春自治旗", + "value": "150723" + }, + { + "label": "鄂温克族自治旗", + "value": "150724" + }, + { + "label": "陈巴尔虎旗", + "value": "150725" + }, + { + "label": "新巴尔虎左旗", + "value": "150726" + }, + { + "label": "新巴尔虎右旗", + "value": "150727" + }, + { + "label": "满洲里市", + "value": "150781" + }, + { + "label": "牙克石市", + "value": "150782" + }, + { + "label": "扎兰屯市", + "value": "150783" + }, + { + "label": "额尔古纳市", + "value": "150784" + }, + { + "label": "根河市", + "value": "150785" + } + ], + [{ + "label": "临河区", + "value": "150802" + }, + { + "label": "五原县", + "value": "150821" + }, + { + "label": "磴口县", + "value": "150822" + }, + { + "label": "乌拉特前旗", + "value": "150823" + }, + { + "label": "乌拉特中旗", + "value": "150824" + }, + { + "label": "乌拉特后旗", + "value": "150825" + }, + { + "label": "杭锦后旗", + "value": "150826" + } + ], + [{ + "label": "集宁区", + "value": "150902" + }, + { + "label": "卓资县", + "value": "150921" + }, + { + "label": "化德县", + "value": "150922" + }, + { + "label": "商都县", + "value": "150923" + }, + { + "label": "兴和县", + "value": "150924" + }, + { + "label": "凉城县", + "value": "150925" + }, + { + "label": "察哈尔右翼前旗", + "value": "150926" + }, + { + "label": "察哈尔右翼中旗", + "value": "150927" + }, + { + "label": "察哈尔右翼后旗", + "value": "150928" + }, + { + "label": "四子王旗", + "value": "150929" + }, + { + "label": "丰镇市", + "value": "150981" + } + ], + [{ + "label": "乌兰浩特市", + "value": "152201" + }, + { + "label": "阿尔山市", + "value": "152202" + }, + { + "label": "科尔沁右翼前旗", + "value": "152221" + }, + { + "label": "科尔沁右翼中旗", + "value": "152222" + }, + { + "label": "扎赉特旗", + "value": "152223" + }, + { + "label": "突泉县", + "value": "152224" + } + ], + [{ + "label": "二连浩特市", + "value": "152501" + }, + { + "label": "锡林浩特市", + "value": "152502" + }, + { + "label": "阿巴嘎旗", + "value": "152522" + }, + { + "label": "苏尼特左旗", + "value": "152523" + }, + { + "label": "苏尼特右旗", + "value": "152524" + }, + { + "label": "东乌珠穆沁旗", + "value": "152525" + }, + { + "label": "西乌珠穆沁旗", + "value": "152526" + }, + { + "label": "太仆寺旗", + "value": "152527" + }, + { + "label": "镶黄旗", + "value": "152528" + }, + { + "label": "正镶白旗", + "value": "152529" + }, + { + "label": "正蓝旗", + "value": "152530" + }, + { + "label": "多伦县", + "value": "152531" + }, + { + "label": "乌拉盖管委会", + "value": "152571" + } + ], + [{ + "label": "阿拉善左旗", + "value": "152921" + }, + { + "label": "阿拉善右旗", + "value": "152922" + }, + { + "label": "额济纳旗", + "value": "152923" + }, + { + "label": "内蒙古阿拉善经济开发区", + "value": "152971" + } + ] + ], + [ + [{ + "label": "和平区", + "value": "210102" + }, + { + "label": "沈河区", + "value": "210103" + }, + { + "label": "大东区", + "value": "210104" + }, + { + "label": "皇姑区", + "value": "210105" + }, + { + "label": "铁西区", + "value": "210106" + }, + { + "label": "苏家屯区", + "value": "210111" + }, + { + "label": "浑南区", + "value": "210112" + }, + { + "label": "沈北新区", + "value": "210113" + }, + { + "label": "于洪区", + "value": "210114" + }, + { + "label": "辽中区", + "value": "210115" + }, + { + "label": "康平县", + "value": "210123" + }, + { + "label": "法库县", + "value": "210124" + }, + { + "label": "新民市", + "value": "210181" + } + ], + [{ + "label": "中山区", + "value": "210202" + }, + { + "label": "西岗区", + "value": "210203" + }, + { + "label": "沙河口区", + "value": "210204" + }, + { + "label": "甘井子区", + "value": "210211" + }, + { + "label": "旅顺口区", + "value": "210212" + }, + { + "label": "金州区", + "value": "210213" + }, + { + "label": "普兰店区", + "value": "210214" + }, + { + "label": "长海县", + "value": "210224" + }, + { + "label": "瓦房店市", + "value": "210281" + }, + { + "label": "庄河市", + "value": "210283" + } + ], + [{ + "label": "铁东区", + "value": "210302" + }, + { + "label": "铁西区", + "value": "210303" + }, + { + "label": "立山区", + "value": "210304" + }, + { + "label": "千山区", + "value": "210311" + }, + { + "label": "台安县", + "value": "210321" + }, + { + "label": "岫岩满族自治县", + "value": "210323" + }, + { + "label": "海城市", + "value": "210381" + } + ], + [{ + "label": "新抚区", + "value": "210402" + }, + { + "label": "东洲区", + "value": "210403" + }, + { + "label": "望花区", + "value": "210404" + }, + { + "label": "顺城区", + "value": "210411" + }, + { + "label": "抚顺县", + "value": "210421" + }, + { + "label": "新宾满族自治县", + "value": "210422" + }, + { + "label": "清原满族自治县", + "value": "210423" + } + ], + [{ + "label": "平山区", + "value": "210502" + }, + { + "label": "溪湖区", + "value": "210503" + }, + { + "label": "明山区", + "value": "210504" + }, + { + "label": "南芬区", + "value": "210505" + }, + { + "label": "本溪满族自治县", + "value": "210521" + }, + { + "label": "桓仁满族自治县", + "value": "210522" + } + ], + [{ + "label": "元宝区", + "value": "210602" + }, + { + "label": "振兴区", + "value": "210603" + }, + { + "label": "振安区", + "value": "210604" + }, + { + "label": "宽甸满族自治县", + "value": "210624" + }, + { + "label": "东港市", + "value": "210681" + }, + { + "label": "凤城市", + "value": "210682" + } + ], + [{ + "label": "古塔区", + "value": "210702" + }, + { + "label": "凌河区", + "value": "210703" + }, + { + "label": "太和区", + "value": "210711" + }, + { + "label": "黑山县", + "value": "210726" + }, + { + "label": "义县", + "value": "210727" + }, + { + "label": "凌海市", + "value": "210781" + }, + { + "label": "北镇市", + "value": "210782" + } + ], + [{ + "label": "站前区", + "value": "210802" + }, + { + "label": "西市区", + "value": "210803" + }, + { + "label": "鲅鱼圈区", + "value": "210804" + }, + { + "label": "老边区", + "value": "210811" + }, + { + "label": "盖州市", + "value": "210881" + }, + { + "label": "大石桥市", + "value": "210882" + } + ], + [{ + "label": "海州区", + "value": "210902" + }, + { + "label": "新邱区", + "value": "210903" + }, + { + "label": "太平区", + "value": "210904" + }, + { + "label": "清河门区", + "value": "210905" + }, + { + "label": "细河区", + "value": "210911" + }, + { + "label": "阜新蒙古族自治县", + "value": "210921" + }, + { + "label": "彰武县", + "value": "210922" + } + ], + [{ + "label": "白塔区", + "value": "211002" + }, + { + "label": "文圣区", + "value": "211003" + }, + { + "label": "宏伟区", + "value": "211004" + }, + { + "label": "弓长岭区", + "value": "211005" + }, + { + "label": "太子河区", + "value": "211011" + }, + { + "label": "辽阳县", + "value": "211021" + }, + { + "label": "灯塔市", + "value": "211081" + } + ], + [{ + "label": "双台子区", + "value": "211102" + }, + { + "label": "兴隆台区", + "value": "211103" + }, + { + "label": "大洼区", + "value": "211104" + }, + { + "label": "盘山县", + "value": "211122" + } + ], + [{ + "label": "银州区", + "value": "211202" + }, + { + "label": "清河区", + "value": "211204" + }, + { + "label": "铁岭县", + "value": "211221" + }, + { + "label": "西丰县", + "value": "211223" + }, + { + "label": "昌图县", + "value": "211224" + }, + { + "label": "调兵山市", + "value": "211281" + }, + { + "label": "开原市", + "value": "211282" + } + ], + [{ + "label": "双塔区", + "value": "211302" + }, + { + "label": "龙城区", + "value": "211303" + }, + { + "label": "朝阳县", + "value": "211321" + }, + { + "label": "建平县", + "value": "211322" + }, + { + "label": "喀喇沁左翼蒙古族自治县", + "value": "211324" + }, + { + "label": "北票市", + "value": "211381" + }, + { + "label": "凌源市", + "value": "211382" + } + ], + [{ + "label": "连山区", + "value": "211402" + }, + { + "label": "龙港区", + "value": "211403" + }, + { + "label": "南票区", + "value": "211404" + }, + { + "label": "绥中县", + "value": "211421" + }, + { + "label": "建昌县", + "value": "211422" + }, + { + "label": "兴城市", + "value": "211481" + } + ] + ], + [ + [{ + "label": "南关区", + "value": "220102" + }, + { + "label": "宽城区", + "value": "220103" + }, + { + "label": "朝阳区", + "value": "220104" + }, + { + "label": "二道区", + "value": "220105" + }, + { + "label": "绿园区", + "value": "220106" + }, + { + "label": "双阳区", + "value": "220112" + }, + { + "label": "九台区", + "value": "220113" + }, + { + "label": "农安县", + "value": "220122" + }, + { + "label": "长春经济技术开发区", + "value": "220171" + }, + { + "label": "长春净月高新技术产业开发区", + "value": "220172" + }, + { + "label": "长春高新技术产业开发区", + "value": "220173" + }, + { + "label": "长春汽车经济技术开发区", + "value": "220174" + }, + { + "label": "榆树市", + "value": "220182" + }, + { + "label": "德惠市", + "value": "220183" + } + ], + [{ + "label": "昌邑区", + "value": "220202" + }, + { + "label": "龙潭区", + "value": "220203" + }, + { + "label": "船营区", + "value": "220204" + }, + { + "label": "丰满区", + "value": "220211" + }, + { + "label": "永吉县", + "value": "220221" + }, + { + "label": "吉林经济开发区", + "value": "220271" + }, + { + "label": "吉林高新技术产业开发区", + "value": "220272" + }, + { + "label": "吉林中国新加坡食品区", + "value": "220273" + }, + { + "label": "蛟河市", + "value": "220281" + }, + { + "label": "桦甸市", + "value": "220282" + }, + { + "label": "舒兰市", + "value": "220283" + }, + { + "label": "磐石市", + "value": "220284" + } + ], + [{ + "label": "铁西区", + "value": "220302" + }, + { + "label": "铁东区", + "value": "220303" + }, + { + "label": "梨树县", + "value": "220322" + }, + { + "label": "伊通满族自治县", + "value": "220323" + }, + { + "label": "公主岭市", + "value": "220381" + }, + { + "label": "双辽市", + "value": "220382" + } + ], + [{ + "label": "龙山区", + "value": "220402" + }, + { + "label": "西安区", + "value": "220403" + }, + { + "label": "东丰县", + "value": "220421" + }, + { + "label": "东辽县", + "value": "220422" + } + ], + [{ + "label": "东昌区", + "value": "220502" + }, + { + "label": "二道江区", + "value": "220503" + }, + { + "label": "通化县", + "value": "220521" + }, + { + "label": "辉南县", + "value": "220523" + }, + { + "label": "柳河县", + "value": "220524" + }, + { + "label": "梅河口市", + "value": "220581" + }, + { + "label": "集安市", + "value": "220582" + } + ], + [{ + "label": "浑江区", + "value": "220602" + }, + { + "label": "江源区", + "value": "220605" + }, + { + "label": "抚松县", + "value": "220621" + }, + { + "label": "靖宇县", + "value": "220622" + }, + { + "label": "长白朝鲜族自治县", + "value": "220623" + }, + { + "label": "临江市", + "value": "220681" + } + ], + [{ + "label": "宁江区", + "value": "220702" + }, + { + "label": "前郭尔罗斯蒙古族自治县", + "value": "220721" + }, + { + "label": "长岭县", + "value": "220722" + }, + { + "label": "乾安县", + "value": "220723" + }, + { + "label": "吉林松原经济开发区", + "value": "220771" + }, + { + "label": "扶余市", + "value": "220781" + } + ], + [{ + "label": "洮北区", + "value": "220802" + }, + { + "label": "镇赉县", + "value": "220821" + }, + { + "label": "通榆县", + "value": "220822" + }, + { + "label": "吉林白城经济开发区", + "value": "220871" + }, + { + "label": "洮南市", + "value": "220881" + }, + { + "label": "大安市", + "value": "220882" + } + ], + [{ + "label": "延吉市", + "value": "222401" + }, + { + "label": "图们市", + "value": "222402" + }, + { + "label": "敦化市", + "value": "222403" + }, + { + "label": "珲春市", + "value": "222404" + }, + { + "label": "龙井市", + "value": "222405" + }, + { + "label": "和龙市", + "value": "222406" + }, + { + "label": "汪清县", + "value": "222424" + }, + { + "label": "安图县", + "value": "222426" + } + ] + ], + [ + [{ + "label": "道里区", + "value": "230102" + }, + { + "label": "南岗区", + "value": "230103" + }, + { + "label": "道外区", + "value": "230104" + }, + { + "label": "平房区", + "value": "230108" + }, + { + "label": "松北区", + "value": "230109" + }, + { + "label": "香坊区", + "value": "230110" + }, + { + "label": "呼兰区", + "value": "230111" + }, + { + "label": "阿城区", + "value": "230112" + }, + { + "label": "双城区", + "value": "230113" + }, + { + "label": "依兰县", + "value": "230123" + }, + { + "label": "方正县", + "value": "230124" + }, + { + "label": "宾县", + "value": "230125" + }, + { + "label": "巴彦县", + "value": "230126" + }, + { + "label": "木兰县", + "value": "230127" + }, + { + "label": "通河县", + "value": "230128" + }, + { + "label": "延寿县", + "value": "230129" + }, + { + "label": "尚志市", + "value": "230183" + }, + { + "label": "五常市", + "value": "230184" + } + ], + [{ + "label": "龙沙区", + "value": "230202" + }, + { + "label": "建华区", + "value": "230203" + }, + { + "label": "铁锋区", + "value": "230204" + }, + { + "label": "昂昂溪区", + "value": "230205" + }, + { + "label": "富拉尔基区", + "value": "230206" + }, + { + "label": "碾子山区", + "value": "230207" + }, + { + "label": "梅里斯达斡尔族区", + "value": "230208" + }, + { + "label": "龙江县", + "value": "230221" + }, + { + "label": "依安县", + "value": "230223" + }, + { + "label": "泰来县", + "value": "230224" + }, + { + "label": "甘南县", + "value": "230225" + }, + { + "label": "富裕县", + "value": "230227" + }, + { + "label": "克山县", + "value": "230229" + }, + { + "label": "克东县", + "value": "230230" + }, + { + "label": "拜泉县", + "value": "230231" + }, + { + "label": "讷河市", + "value": "230281" + } + ], + [{ + "label": "鸡冠区", + "value": "230302" + }, + { + "label": "恒山区", + "value": "230303" + }, + { + "label": "滴道区", + "value": "230304" + }, + { + "label": "梨树区", + "value": "230305" + }, + { + "label": "城子河区", + "value": "230306" + }, + { + "label": "麻山区", + "value": "230307" + }, + { + "label": "鸡东县", + "value": "230321" + }, + { + "label": "虎林市", + "value": "230381" + }, + { + "label": "密山市", + "value": "230382" + } + ], + [{ + "label": "向阳区", + "value": "230402" + }, + { + "label": "工农区", + "value": "230403" + }, + { + "label": "南山区", + "value": "230404" + }, + { + "label": "兴安区", + "value": "230405" + }, + { + "label": "东山区", + "value": "230406" + }, + { + "label": "兴山区", + "value": "230407" + }, + { + "label": "萝北县", + "value": "230421" + }, + { + "label": "绥滨县", + "value": "230422" + } + ], + [{ + "label": "尖山区", + "value": "230502" + }, + { + "label": "岭东区", + "value": "230503" + }, + { + "label": "四方台区", + "value": "230505" + }, + { + "label": "宝山区", + "value": "230506" + }, + { + "label": "集贤县", + "value": "230521" + }, + { + "label": "友谊县", + "value": "230522" + }, + { + "label": "宝清县", + "value": "230523" + }, + { + "label": "饶河县", + "value": "230524" + } + ], + [{ + "label": "萨尔图区", + "value": "230602" + }, + { + "label": "龙凤区", + "value": "230603" + }, + { + "label": "让胡路区", + "value": "230604" + }, + { + "label": "红岗区", + "value": "230605" + }, + { + "label": "大同区", + "value": "230606" + }, + { + "label": "肇州县", + "value": "230621" + }, + { + "label": "肇源县", + "value": "230622" + }, + { + "label": "林甸县", + "value": "230623" + }, + { + "label": "杜尔伯特蒙古族自治县", + "value": "230624" + }, + { + "label": "大庆高新技术产业开发区", + "value": "230671" + } + ], + [{ + "label": "伊春区", + "value": "230702" + }, + { + "label": "南岔区", + "value": "230703" + }, + { + "label": "友好区", + "value": "230704" + }, + { + "label": "西林区", + "value": "230705" + }, + { + "label": "翠峦区", + "value": "230706" + }, + { + "label": "新青区", + "value": "230707" + }, + { + "label": "美溪区", + "value": "230708" + }, + { + "label": "金山屯区", + "value": "230709" + }, + { + "label": "五营区", + "value": "230710" + }, + { + "label": "乌马河区", + "value": "230711" + }, + { + "label": "汤旺河区", + "value": "230712" + }, + { + "label": "带岭区", + "value": "230713" + }, + { + "label": "乌伊岭区", + "value": "230714" + }, + { + "label": "红星区", + "value": "230715" + }, + { + "label": "上甘岭区", + "value": "230716" + }, + { + "label": "嘉荫县", + "value": "230722" + }, + { + "label": "铁力市", + "value": "230781" + } + ], + [{ + "label": "向阳区", + "value": "230803" + }, + { + "label": "前进区", + "value": "230804" + }, + { + "label": "东风区", + "value": "230805" + }, + { + "label": "郊区", + "value": "230811" + }, + { + "label": "桦南县", + "value": "230822" + }, + { + "label": "桦川县", + "value": "230826" + }, + { + "label": "汤原县", + "value": "230828" + }, + { + "label": "同江市", + "value": "230881" + }, + { + "label": "富锦市", + "value": "230882" + }, + { + "label": "抚远市", + "value": "230883" + } + ], + [{ + "label": "新兴区", + "value": "230902" + }, + { + "label": "桃山区", + "value": "230903" + }, + { + "label": "茄子河区", + "value": "230904" + }, + { + "label": "勃利县", + "value": "230921" + } + ], + [{ + "label": "东安区", + "value": "231002" + }, + { + "label": "阳明区", + "value": "231003" + }, + { + "label": "爱民区", + "value": "231004" + }, + { + "label": "西安区", + "value": "231005" + }, + { + "label": "林口县", + "value": "231025" + }, + { + "label": "牡丹江经济技术开发区", + "value": "231071" + }, + { + "label": "绥芬河市", + "value": "231081" + }, + { + "label": "海林市", + "value": "231083" + }, + { + "label": "宁安市", + "value": "231084" + }, + { + "label": "穆棱市", + "value": "231085" + }, + { + "label": "东宁市", + "value": "231086" + } + ], + [{ + "label": "爱辉区", + "value": "231102" + }, + { + "label": "嫩江县", + "value": "231121" + }, + { + "label": "逊克县", + "value": "231123" + }, + { + "label": "孙吴县", + "value": "231124" + }, + { + "label": "北安市", + "value": "231181" + }, + { + "label": "五大连池市", + "value": "231182" + } + ], + [{ + "label": "北林区", + "value": "231202" + }, + { + "label": "望奎县", + "value": "231221" + }, + { + "label": "兰西县", + "value": "231222" + }, + { + "label": "青冈县", + "value": "231223" + }, + { + "label": "庆安县", + "value": "231224" + }, + { + "label": "明水县", + "value": "231225" + }, + { + "label": "绥棱县", + "value": "231226" + }, + { + "label": "安达市", + "value": "231281" + }, + { + "label": "肇东市", + "value": "231282" + }, + { + "label": "海伦市", + "value": "231283" + } + ], + [{ + "label": "加格达奇区", + "value": "232701" + }, + { + "label": "松岭区", + "value": "232702" + }, + { + "label": "新林区", + "value": "232703" + }, + { + "label": "呼中区", + "value": "232704" + }, + { + "label": "呼玛县", + "value": "232721" + }, + { + "label": "塔河县", + "value": "232722" + }, + { + "label": "漠河县", + "value": "232723" + } + ] + ], + [ + [{ + "label": "黄浦区", + "value": "310101" + }, + { + "label": "徐汇区", + "value": "310104" + }, + { + "label": "长宁区", + "value": "310105" + }, + { + "label": "静安区", + "value": "310106" + }, + { + "label": "普陀区", + "value": "310107" + }, + { + "label": "虹口区", + "value": "310109" + }, + { + "label": "杨浦区", + "value": "310110" + }, + { + "label": "闵行区", + "value": "310112" + }, + { + "label": "宝山区", + "value": "310113" + }, + { + "label": "嘉定区", + "value": "310114" + }, + { + "label": "浦东新区", + "value": "310115" + }, + { + "label": "金山区", + "value": "310116" + }, + { + "label": "松江区", + "value": "310117" + }, + { + "label": "青浦区", + "value": "310118" + }, + { + "label": "奉贤区", + "value": "310120" + }, + { + "label": "崇明区", + "value": "310151" + } + ] + ], + [ + [{ + "label": "玄武区", + "value": "320102" + }, + { + "label": "秦淮区", + "value": "320104" + }, + { + "label": "建邺区", + "value": "320105" + }, + { + "label": "鼓楼区", + "value": "320106" + }, + { + "label": "浦口区", + "value": "320111" + }, + { + "label": "栖霞区", + "value": "320113" + }, + { + "label": "雨花台区", + "value": "320114" + }, + { + "label": "江宁区", + "value": "320115" + }, + { + "label": "六合区", + "value": "320116" + }, + { + "label": "溧水区", + "value": "320117" + }, + { + "label": "高淳区", + "value": "320118" + } + ], + [{ + "label": "锡山区", + "value": "320205" + }, + { + "label": "惠山区", + "value": "320206" + }, + { + "label": "滨湖区", + "value": "320211" + }, + { + "label": "梁溪区", + "value": "320213" + }, + { + "label": "新吴区", + "value": "320214" + }, + { + "label": "江阴市", + "value": "320281" + }, + { + "label": "宜兴市", + "value": "320282" + } + ], + [{ + "label": "鼓楼区", + "value": "320302" + }, + { + "label": "云龙区", + "value": "320303" + }, + { + "label": "贾汪区", + "value": "320305" + }, + { + "label": "泉山区", + "value": "320311" + }, + { + "label": "铜山区", + "value": "320312" + }, + { + "label": "丰县", + "value": "320321" + }, + { + "label": "沛县", + "value": "320322" + }, + { + "label": "睢宁县", + "value": "320324" + }, + { + "label": "徐州经济技术开发区", + "value": "320371" + }, + { + "label": "新沂市", + "value": "320381" + }, + { + "label": "邳州市", + "value": "320382" + } + ], + [{ + "label": "天宁区", + "value": "320402" + }, + { + "label": "钟楼区", + "value": "320404" + }, + { + "label": "新北区", + "value": "320411" + }, + { + "label": "武进区", + "value": "320412" + }, + { + "label": "金坛区", + "value": "320413" + }, + { + "label": "溧阳市", + "value": "320481" + } + ], + [{ + "label": "虎丘区", + "value": "320505" + }, + { + "label": "吴中区", + "value": "320506" + }, + { + "label": "相城区", + "value": "320507" + }, + { + "label": "姑苏区", + "value": "320508" + }, + { + "label": "吴江区", + "value": "320509" + }, + { + "label": "苏州工业园区", + "value": "320571" + }, + { + "label": "常熟市", + "value": "320581" + }, + { + "label": "张家港市", + "value": "320582" + }, + { + "label": "昆山市", + "value": "320583" + }, + { + "label": "太仓市", + "value": "320585" + } + ], + [{ + "label": "崇川区", + "value": "320602" + }, + { + "label": "港闸区", + "value": "320611" + }, + { + "label": "通州区", + "value": "320612" + }, + { + "label": "海安县", + "value": "320621" + }, + { + "label": "如东县", + "value": "320623" + }, + { + "label": "南通经济技术开发区", + "value": "320671" + }, + { + "label": "启东市", + "value": "320681" + }, + { + "label": "如皋市", + "value": "320682" + }, + { + "label": "海门市", + "value": "320684" + } + ], + [{ + "label": "连云区", + "value": "320703" + }, + { + "label": "海州区", + "value": "320706" + }, + { + "label": "赣榆区", + "value": "320707" + }, + { + "label": "东海县", + "value": "320722" + }, + { + "label": "灌云县", + "value": "320723" + }, + { + "label": "灌南县", + "value": "320724" + }, + { + "label": "连云港经济技术开发区", + "value": "320771" + }, + { + "label": "连云港高新技术产业开发区", + "value": "320772" + } + ], + [{ + "label": "淮安区", + "value": "320803" + }, + { + "label": "淮阴区", + "value": "320804" + }, + { + "label": "清江浦区", + "value": "320812" + }, + { + "label": "洪泽区", + "value": "320813" + }, + { + "label": "涟水县", + "value": "320826" + }, + { + "label": "盱眙县", + "value": "320830" + }, + { + "label": "金湖县", + "value": "320831" + }, + { + "label": "淮安经济技术开发区", + "value": "320871" + } + ], + [{ + "label": "亭湖区", + "value": "320902" + }, + { + "label": "盐都区", + "value": "320903" + }, + { + "label": "大丰区", + "value": "320904" + }, + { + "label": "响水县", + "value": "320921" + }, + { + "label": "滨海县", + "value": "320922" + }, + { + "label": "阜宁县", + "value": "320923" + }, + { + "label": "射阳县", + "value": "320924" + }, + { + "label": "建湖县", + "value": "320925" + }, + { + "label": "盐城经济技术开发区", + "value": "320971" + }, + { + "label": "东台市", + "value": "320981" + } + ], + [{ + "label": "广陵区", + "value": "321002" + }, + { + "label": "邗江区", + "value": "321003" + }, + { + "label": "江都区", + "value": "321012" + }, + { + "label": "宝应县", + "value": "321023" + }, + { + "label": "扬州经济技术开发区", + "value": "321071" + }, + { + "label": "仪征市", + "value": "321081" + }, + { + "label": "高邮市", + "value": "321084" + } + ], + [{ + "label": "京口区", + "value": "321102" + }, + { + "label": "润州区", + "value": "321111" + }, + { + "label": "丹徒区", + "value": "321112" + }, + { + "label": "镇江新区", + "value": "321171" + }, + { + "label": "丹阳市", + "value": "321181" + }, + { + "label": "扬中市", + "value": "321182" + }, + { + "label": "句容市", + "value": "321183" + } + ], + [{ + "label": "海陵区", + "value": "321202" + }, + { + "label": "高港区", + "value": "321203" + }, + { + "label": "姜堰区", + "value": "321204" + }, + { + "label": "泰州医药高新技术产业开发区", + "value": "321271" + }, + { + "label": "兴化市", + "value": "321281" + }, + { + "label": "靖江市", + "value": "321282" + }, + { + "label": "泰兴市", + "value": "321283" + } + ], + [{ + "label": "宿城区", + "value": "321302" + }, + { + "label": "宿豫区", + "value": "321311" + }, + { + "label": "沭阳县", + "value": "321322" + }, + { + "label": "泗阳县", + "value": "321323" + }, + { + "label": "泗洪县", + "value": "321324" + }, + { + "label": "宿迁经济技术开发区", + "value": "321371" + } + ] + ], + [ + [{ + "label": "上城区", + "value": "330102" + }, + { + "label": "下城区", + "value": "330103" + }, + { + "label": "江干区", + "value": "330104" + }, + { + "label": "拱墅区", + "value": "330105" + }, + { + "label": "西湖区", + "value": "330106" + }, + { + "label": "滨江区", + "value": "330108" + }, + { + "label": "萧山区", + "value": "330109" + }, + { + "label": "余杭区", + "value": "330110" + }, + { + "label": "富阳区", + "value": "330111" + }, + { + "label": "临安区", + "value": "330112" + }, + { + "label": "桐庐县", + "value": "330122" + }, + { + "label": "淳安县", + "value": "330127" + }, + { + "label": "建德市", + "value": "330182" + } + ], + [{ + "label": "海曙区", + "value": "330203" + }, + { + "label": "江北区", + "value": "330205" + }, + { + "label": "北仑区", + "value": "330206" + }, + { + "label": "镇海区", + "value": "330211" + }, + { + "label": "鄞州区", + "value": "330212" + }, + { + "label": "奉化区", + "value": "330213" + }, + { + "label": "象山县", + "value": "330225" + }, + { + "label": "宁海县", + "value": "330226" + }, + { + "label": "余姚市", + "value": "330281" + }, + { + "label": "慈溪市", + "value": "330282" + } + ], + [{ + "label": "鹿城区", + "value": "330302" + }, + { + "label": "龙湾区", + "value": "330303" + }, + { + "label": "瓯海区", + "value": "330304" + }, + { + "label": "洞头区", + "value": "330305" + }, + { + "label": "永嘉县", + "value": "330324" + }, + { + "label": "平阳县", + "value": "330326" + }, + { + "label": "苍南县", + "value": "330327" + }, + { + "label": "文成县", + "value": "330328" + }, + { + "label": "泰顺县", + "value": "330329" + }, + { + "label": "温州经济技术开发区", + "value": "330371" + }, + { + "label": "瑞安市", + "value": "330381" + }, + { + "label": "乐清市", + "value": "330382" + } + ], + [{ + "label": "南湖区", + "value": "330402" + }, + { + "label": "秀洲区", + "value": "330411" + }, + { + "label": "嘉善县", + "value": "330421" + }, + { + "label": "海盐县", + "value": "330424" + }, + { + "label": "海宁市", + "value": "330481" + }, + { + "label": "平湖市", + "value": "330482" + }, + { + "label": "桐乡市", + "value": "330483" + } + ], + [{ + "label": "吴兴区", + "value": "330502" + }, + { + "label": "南浔区", + "value": "330503" + }, + { + "label": "德清县", + "value": "330521" + }, + { + "label": "长兴县", + "value": "330522" + }, + { + "label": "安吉县", + "value": "330523" + } + ], + [{ + "label": "越城区", + "value": "330602" + }, + { + "label": "柯桥区", + "value": "330603" + }, + { + "label": "上虞区", + "value": "330604" + }, + { + "label": "新昌县", + "value": "330624" + }, + { + "label": "诸暨市", + "value": "330681" + }, + { + "label": "嵊州市", + "value": "330683" + } + ], + [{ + "label": "婺城区", + "value": "330702" + }, + { + "label": "金东区", + "value": "330703" + }, + { + "label": "武义县", + "value": "330723" + }, + { + "label": "浦江县", + "value": "330726" + }, + { + "label": "磐安县", + "value": "330727" + }, + { + "label": "兰溪市", + "value": "330781" + }, + { + "label": "义乌市", + "value": "330782" + }, + { + "label": "东阳市", + "value": "330783" + }, + { + "label": "永康市", + "value": "330784" + } + ], + [{ + "label": "柯城区", + "value": "330802" + }, + { + "label": "衢江区", + "value": "330803" + }, + { + "label": "常山县", + "value": "330822" + }, + { + "label": "开化县", + "value": "330824" + }, + { + "label": "龙游县", + "value": "330825" + }, + { + "label": "江山市", + "value": "330881" + } + ], + [{ + "label": "定海区", + "value": "330902" + }, + { + "label": "普陀区", + "value": "330903" + }, + { + "label": "岱山县", + "value": "330921" + }, + { + "label": "嵊泗县", + "value": "330922" + } + ], + [{ + "label": "椒江区", + "value": "331002" + }, + { + "label": "黄岩区", + "value": "331003" + }, + { + "label": "路桥区", + "value": "331004" + }, + { + "label": "三门县", + "value": "331022" + }, + { + "label": "天台县", + "value": "331023" + }, + { + "label": "仙居县", + "value": "331024" + }, + { + "label": "温岭市", + "value": "331081" + }, + { + "label": "临海市", + "value": "331082" + }, + { + "label": "玉环市", + "value": "331083" + } + ], + [{ + "label": "莲都区", + "value": "331102" + }, + { + "label": "青田县", + "value": "331121" + }, + { + "label": "缙云县", + "value": "331122" + }, + { + "label": "遂昌县", + "value": "331123" + }, + { + "label": "松阳县", + "value": "331124" + }, + { + "label": "云和县", + "value": "331125" + }, + { + "label": "庆元县", + "value": "331126" + }, + { + "label": "景宁畲族自治县", + "value": "331127" + }, + { + "label": "龙泉市", + "value": "331181" + } + ] + ], + [ + [{ + "label": "瑶海区", + "value": "340102" + }, + { + "label": "庐阳区", + "value": "340103" + }, + { + "label": "蜀山区", + "value": "340104" + }, + { + "label": "包河区", + "value": "340111" + }, + { + "label": "长丰县", + "value": "340121" + }, + { + "label": "肥东县", + "value": "340122" + }, + { + "label": "肥西县", + "value": "340123" + }, + { + "label": "庐江县", + "value": "340124" + }, + { + "label": "合肥高新技术产业开发区", + "value": "340171" + }, + { + "label": "合肥经济技术开发区", + "value": "340172" + }, + { + "label": "合肥新站高新技术产业开发区", + "value": "340173" + }, + { + "label": "巢湖市", + "value": "340181" + } + ], + [{ + "label": "镜湖区", + "value": "340202" + }, + { + "label": "弋江区", + "value": "340203" + }, + { + "label": "鸠江区", + "value": "340207" + }, + { + "label": "三山区", + "value": "340208" + }, + { + "label": "芜湖县", + "value": "340221" + }, + { + "label": "繁昌县", + "value": "340222" + }, + { + "label": "南陵县", + "value": "340223" + }, + { + "label": "无为县", + "value": "340225" + }, + { + "label": "芜湖经济技术开发区", + "value": "340271" + }, + { + "label": "安徽芜湖长江大桥经济开发区", + "value": "340272" + } + ], + [{ + "label": "龙子湖区", + "value": "340302" + }, + { + "label": "蚌山区", + "value": "340303" + }, + { + "label": "禹会区", + "value": "340304" + }, + { + "label": "淮上区", + "value": "340311" + }, + { + "label": "怀远县", + "value": "340321" + }, + { + "label": "五河县", + "value": "340322" + }, + { + "label": "固镇县", + "value": "340323" + }, + { + "label": "蚌埠市高新技术开发区", + "value": "340371" + }, + { + "label": "蚌埠市经济开发区", + "value": "340372" + } + ], + [{ + "label": "大通区", + "value": "340402" + }, + { + "label": "田家庵区", + "value": "340403" + }, + { + "label": "谢家集区", + "value": "340404" + }, + { + "label": "八公山区", + "value": "340405" + }, + { + "label": "潘集区", + "value": "340406" + }, + { + "label": "凤台县", + "value": "340421" + }, + { + "label": "寿县", + "value": "340422" + } + ], + [{ + "label": "花山区", + "value": "340503" + }, + { + "label": "雨山区", + "value": "340504" + }, + { + "label": "博望区", + "value": "340506" + }, + { + "label": "当涂县", + "value": "340521" + }, + { + "label": "含山县", + "value": "340522" + }, + { + "label": "和县", + "value": "340523" + } + ], + [{ + "label": "杜集区", + "value": "340602" + }, + { + "label": "相山区", + "value": "340603" + }, + { + "label": "烈山区", + "value": "340604" + }, + { + "label": "濉溪县", + "value": "340621" + } + ], + [{ + "label": "铜官区", + "value": "340705" + }, + { + "label": "义安区", + "value": "340706" + }, + { + "label": "郊区", + "value": "340711" + }, + { + "label": "枞阳县", + "value": "340722" + } + ], + [{ + "label": "迎江区", + "value": "340802" + }, + { + "label": "大观区", + "value": "340803" + }, + { + "label": "宜秀区", + "value": "340811" + }, + { + "label": "怀宁县", + "value": "340822" + }, + { + "label": "潜山县", + "value": "340824" + }, + { + "label": "太湖县", + "value": "340825" + }, + { + "label": "宿松县", + "value": "340826" + }, + { + "label": "望江县", + "value": "340827" + }, + { + "label": "岳西县", + "value": "340828" + }, + { + "label": "安徽安庆经济开发区", + "value": "340871" + }, + { + "label": "桐城市", + "value": "340881" + } + ], + [{ + "label": "屯溪区", + "value": "341002" + }, + { + "label": "黄山区", + "value": "341003" + }, + { + "label": "徽州区", + "value": "341004" + }, + { + "label": "歙县", + "value": "341021" + }, + { + "label": "休宁县", + "value": "341022" + }, + { + "label": "黟县", + "value": "341023" + }, + { + "label": "祁门县", + "value": "341024" + } + ], + [{ + "label": "琅琊区", + "value": "341102" + }, + { + "label": "南谯区", + "value": "341103" + }, + { + "label": "来安县", + "value": "341122" + }, + { + "label": "全椒县", + "value": "341124" + }, + { + "label": "定远县", + "value": "341125" + }, + { + "label": "凤阳县", + "value": "341126" + }, + { + "label": "苏滁现代产业园", + "value": "341171" + }, + { + "label": "滁州经济技术开发区", + "value": "341172" + }, + { + "label": "天长市", + "value": "341181" + }, + { + "label": "明光市", + "value": "341182" + } + ], + [{ + "label": "颍州区", + "value": "341202" + }, + { + "label": "颍东区", + "value": "341203" + }, + { + "label": "颍泉区", + "value": "341204" + }, + { + "label": "临泉县", + "value": "341221" + }, + { + "label": "太和县", + "value": "341222" + }, + { + "label": "阜南县", + "value": "341225" + }, + { + "label": "颍上县", + "value": "341226" + }, + { + "label": "阜阳合肥现代产业园区", + "value": "341271" + }, + { + "label": "阜阳经济技术开发区", + "value": "341272" + }, + { + "label": "界首市", + "value": "341282" + } + ], + [{ + "label": "埇桥区", + "value": "341302" + }, + { + "label": "砀山县", + "value": "341321" + }, + { + "label": "萧县", + "value": "341322" + }, + { + "label": "灵璧县", + "value": "341323" + }, + { + "label": "泗县", + "value": "341324" + }, + { + "label": "宿州马鞍山现代产业园区", + "value": "341371" + }, + { + "label": "宿州经济技术开发区", + "value": "341372" + } + ], + [{ + "label": "金安区", + "value": "341502" + }, + { + "label": "裕安区", + "value": "341503" + }, + { + "label": "叶集区", + "value": "341504" + }, + { + "label": "霍邱县", + "value": "341522" + }, + { + "label": "舒城县", + "value": "341523" + }, + { + "label": "金寨县", + "value": "341524" + }, + { + "label": "霍山县", + "value": "341525" + } + ], + [{ + "label": "谯城区", + "value": "341602" + }, + { + "label": "涡阳县", + "value": "341621" + }, + { + "label": "蒙城县", + "value": "341622" + }, + { + "label": "利辛县", + "value": "341623" + } + ], + [{ + "label": "贵池区", + "value": "341702" + }, + { + "label": "东至县", + "value": "341721" + }, + { + "label": "石台县", + "value": "341722" + }, + { + "label": "青阳县", + "value": "341723" + } + ], + [{ + "label": "宣州区", + "value": "341802" + }, + { + "label": "郎溪县", + "value": "341821" + }, + { + "label": "广德县", + "value": "341822" + }, + { + "label": "泾县", + "value": "341823" + }, + { + "label": "绩溪县", + "value": "341824" + }, + { + "label": "旌德县", + "value": "341825" + }, + { + "label": "宣城市经济开发区", + "value": "341871" + }, + { + "label": "宁国市", + "value": "341881" + } + ] + ], + [ + [{ + "label": "鼓楼区", + "value": "350102" + }, + { + "label": "台江区", + "value": "350103" + }, + { + "label": "仓山区", + "value": "350104" + }, + { + "label": "马尾区", + "value": "350105" + }, + { + "label": "晋安区", + "value": "350111" + }, + { + "label": "闽侯县", + "value": "350121" + }, + { + "label": "连江县", + "value": "350122" + }, + { + "label": "罗源县", + "value": "350123" + }, + { + "label": "闽清县", + "value": "350124" + }, + { + "label": "永泰县", + "value": "350125" + }, + { + "label": "平潭县", + "value": "350128" + }, + { + "label": "福清市", + "value": "350181" + }, + { + "label": "长乐市", + "value": "350182" + } + ], + [{ + "label": "思明区", + "value": "350203" + }, + { + "label": "海沧区", + "value": "350205" + }, + { + "label": "湖里区", + "value": "350206" + }, + { + "label": "集美区", + "value": "350211" + }, + { + "label": "同安区", + "value": "350212" + }, + { + "label": "翔安区", + "value": "350213" + } + ], + [{ + "label": "城厢区", + "value": "350302" + }, + { + "label": "涵江区", + "value": "350303" + }, + { + "label": "荔城区", + "value": "350304" + }, + { + "label": "秀屿区", + "value": "350305" + }, + { + "label": "仙游县", + "value": "350322" + } + ], + [{ + "label": "梅列区", + "value": "350402" + }, + { + "label": "三元区", + "value": "350403" + }, + { + "label": "明溪县", + "value": "350421" + }, + { + "label": "清流县", + "value": "350423" + }, + { + "label": "宁化县", + "value": "350424" + }, + { + "label": "大田县", + "value": "350425" + }, + { + "label": "尤溪县", + "value": "350426" + }, + { + "label": "沙县", + "value": "350427" + }, + { + "label": "将乐县", + "value": "350428" + }, + { + "label": "泰宁县", + "value": "350429" + }, + { + "label": "建宁县", + "value": "350430" + }, + { + "label": "永安市", + "value": "350481" + } + ], + [{ + "label": "鲤城区", + "value": "350502" + }, + { + "label": "丰泽区", + "value": "350503" + }, + { + "label": "洛江区", + "value": "350504" + }, + { + "label": "泉港区", + "value": "350505" + }, + { + "label": "惠安县", + "value": "350521" + }, + { + "label": "安溪县", + "value": "350524" + }, + { + "label": "永春县", + "value": "350525" + }, + { + "label": "德化县", + "value": "350526" + }, + { + "label": "金门县", + "value": "350527" + }, + { + "label": "石狮市", + "value": "350581" + }, + { + "label": "晋江市", + "value": "350582" + }, + { + "label": "南安市", + "value": "350583" + } + ], + [{ + "label": "芗城区", + "value": "350602" + }, + { + "label": "龙文区", + "value": "350603" + }, + { + "label": "云霄县", + "value": "350622" + }, + { + "label": "漳浦县", + "value": "350623" + }, + { + "label": "诏安县", + "value": "350624" + }, + { + "label": "长泰县", + "value": "350625" + }, + { + "label": "东山县", + "value": "350626" + }, + { + "label": "南靖县", + "value": "350627" + }, + { + "label": "平和县", + "value": "350628" + }, + { + "label": "华安县", + "value": "350629" + }, + { + "label": "龙海市", + "value": "350681" + } + ], + [{ + "label": "延平区", + "value": "350702" + }, + { + "label": "建阳区", + "value": "350703" + }, + { + "label": "顺昌县", + "value": "350721" + }, + { + "label": "浦城县", + "value": "350722" + }, + { + "label": "光泽县", + "value": "350723" + }, + { + "label": "松溪县", + "value": "350724" + }, + { + "label": "政和县", + "value": "350725" + }, + { + "label": "邵武市", + "value": "350781" + }, + { + "label": "武夷山市", + "value": "350782" + }, + { + "label": "建瓯市", + "value": "350783" + } + ], + [{ + "label": "新罗区", + "value": "350802" + }, + { + "label": "永定区", + "value": "350803" + }, + { + "label": "长汀县", + "value": "350821" + }, + { + "label": "上杭县", + "value": "350823" + }, + { + "label": "武平县", + "value": "350824" + }, + { + "label": "连城县", + "value": "350825" + }, + { + "label": "漳平市", + "value": "350881" + } + ], + [{ + "label": "蕉城区", + "value": "350902" + }, + { + "label": "霞浦县", + "value": "350921" + }, + { + "label": "古田县", + "value": "350922" + }, + { + "label": "屏南县", + "value": "350923" + }, + { + "label": "寿宁县", + "value": "350924" + }, + { + "label": "周宁县", + "value": "350925" + }, + { + "label": "柘荣县", + "value": "350926" + }, + { + "label": "福安市", + "value": "350981" + }, + { + "label": "福鼎市", + "value": "350982" + } + ] + ], + [ + [{ + "label": "东湖区", + "value": "360102" + }, + { + "label": "西湖区", + "value": "360103" + }, + { + "label": "青云谱区", + "value": "360104" + }, + { + "label": "湾里区", + "value": "360105" + }, + { + "label": "青山湖区", + "value": "360111" + }, + { + "label": "新建区", + "value": "360112" + }, + { + "label": "南昌县", + "value": "360121" + }, + { + "label": "安义县", + "value": "360123" + }, + { + "label": "进贤县", + "value": "360124" + } + ], + [{ + "label": "昌江区", + "value": "360202" + }, + { + "label": "珠山区", + "value": "360203" + }, + { + "label": "浮梁县", + "value": "360222" + }, + { + "label": "乐平市", + "value": "360281" + } + ], + [{ + "label": "安源区", + "value": "360302" + }, + { + "label": "湘东区", + "value": "360313" + }, + { + "label": "莲花县", + "value": "360321" + }, + { + "label": "上栗县", + "value": "360322" + }, + { + "label": "芦溪县", + "value": "360323" + } + ], + [{ + "label": "濂溪区", + "value": "360402" + }, + { + "label": "浔阳区", + "value": "360403" + }, + { + "label": "柴桑区", + "value": "360404" + }, + { + "label": "武宁县", + "value": "360423" + }, + { + "label": "修水县", + "value": "360424" + }, + { + "label": "永修县", + "value": "360425" + }, + { + "label": "德安县", + "value": "360426" + }, + { + "label": "都昌县", + "value": "360428" + }, + { + "label": "湖口县", + "value": "360429" + }, + { + "label": "彭泽县", + "value": "360430" + }, + { + "label": "瑞昌市", + "value": "360481" + }, + { + "label": "共青城市", + "value": "360482" + }, + { + "label": "庐山市", + "value": "360483" + } + ], + [{ + "label": "渝水区", + "value": "360502" + }, + { + "label": "分宜县", + "value": "360521" + } + ], + [{ + "label": "月湖区", + "value": "360602" + }, + { + "label": "余江县", + "value": "360622" + }, + { + "label": "贵溪市", + "value": "360681" + } + ], + [{ + "label": "章贡区", + "value": "360702" + }, + { + "label": "南康区", + "value": "360703" + }, + { + "label": "赣县区", + "value": "360704" + }, + { + "label": "信丰县", + "value": "360722" + }, + { + "label": "大余县", + "value": "360723" + }, + { + "label": "上犹县", + "value": "360724" + }, + { + "label": "崇义县", + "value": "360725" + }, + { + "label": "安远县", + "value": "360726" + }, + { + "label": "龙南县", + "value": "360727" + }, + { + "label": "定南县", + "value": "360728" + }, + { + "label": "全南县", + "value": "360729" + }, + { + "label": "宁都县", + "value": "360730" + }, + { + "label": "于都县", + "value": "360731" + }, + { + "label": "兴国县", + "value": "360732" + }, + { + "label": "会昌县", + "value": "360733" + }, + { + "label": "寻乌县", + "value": "360734" + }, + { + "label": "石城县", + "value": "360735" + }, + { + "label": "瑞金市", + "value": "360781" + } + ], + [{ + "label": "吉州区", + "value": "360802" + }, + { + "label": "青原区", + "value": "360803" + }, + { + "label": "吉安县", + "value": "360821" + }, + { + "label": "吉水县", + "value": "360822" + }, + { + "label": "峡江县", + "value": "360823" + }, + { + "label": "新干县", + "value": "360824" + }, + { + "label": "永丰县", + "value": "360825" + }, + { + "label": "泰和县", + "value": "360826" + }, + { + "label": "遂川县", + "value": "360827" + }, + { + "label": "万安县", + "value": "360828" + }, + { + "label": "安福县", + "value": "360829" + }, + { + "label": "永新县", + "value": "360830" + }, + { + "label": "井冈山市", + "value": "360881" + } + ], + [{ + "label": "袁州区", + "value": "360902" + }, + { + "label": "奉新县", + "value": "360921" + }, + { + "label": "万载县", + "value": "360922" + }, + { + "label": "上高县", + "value": "360923" + }, + { + "label": "宜丰县", + "value": "360924" + }, + { + "label": "靖安县", + "value": "360925" + }, + { + "label": "铜鼓县", + "value": "360926" + }, + { + "label": "丰城市", + "value": "360981" + }, + { + "label": "樟树市", + "value": "360982" + }, + { + "label": "高安市", + "value": "360983" + } + ], + [{ + "label": "临川区", + "value": "361002" + }, + { + "label": "东乡区", + "value": "361003" + }, + { + "label": "南城县", + "value": "361021" + }, + { + "label": "黎川县", + "value": "361022" + }, + { + "label": "南丰县", + "value": "361023" + }, + { + "label": "崇仁县", + "value": "361024" + }, + { + "label": "乐安县", + "value": "361025" + }, + { + "label": "宜黄县", + "value": "361026" + }, + { + "label": "金溪县", + "value": "361027" + }, + { + "label": "资溪县", + "value": "361028" + }, + { + "label": "广昌县", + "value": "361030" + } + ], + [{ + "label": "信州区", + "value": "361102" + }, + { + "label": "广丰区", + "value": "361103" + }, + { + "label": "上饶县", + "value": "361121" + }, + { + "label": "玉山县", + "value": "361123" + }, + { + "label": "铅山县", + "value": "361124" + }, + { + "label": "横峰县", + "value": "361125" + }, + { + "label": "弋阳县", + "value": "361126" + }, + { + "label": "余干县", + "value": "361127" + }, + { + "label": "鄱阳县", + "value": "361128" + }, + { + "label": "万年县", + "value": "361129" + }, + { + "label": "婺源县", + "value": "361130" + }, + { + "label": "德兴市", + "value": "361181" + } + ] + ], + [ + [{ + "label": "历下区", + "value": "370102" + }, + { + "label": "市中区", + "value": "370103" + }, + { + "label": "槐荫区", + "value": "370104" + }, + { + "label": "天桥区", + "value": "370105" + }, + { + "label": "历城区", + "value": "370112" + }, + { + "label": "长清区", + "value": "370113" + }, + { + "label": "章丘区", + "value": "370114" + }, + { + "label": "平阴县", + "value": "370124" + }, + { + "label": "济阳县", + "value": "370125" + }, + { + "label": "商河县", + "value": "370126" + }, + { + "label": "济南高新技术产业开发区", + "value": "370171" + } + ], + [{ + "label": "市南区", + "value": "370202" + }, + { + "label": "市北区", + "value": "370203" + }, + { + "label": "黄岛区", + "value": "370211" + }, + { + "label": "崂山区", + "value": "370212" + }, + { + "label": "李沧区", + "value": "370213" + }, + { + "label": "城阳区", + "value": "370214" + }, + { + "label": "即墨区", + "value": "370215" + }, + { + "label": "青岛高新技术产业开发区", + "value": "370271" + }, + { + "label": "胶州市", + "value": "370281" + }, + { + "label": "平度市", + "value": "370283" + }, + { + "label": "莱西市", + "value": "370285" + } + ], + [{ + "label": "淄川区", + "value": "370302" + }, + { + "label": "张店区", + "value": "370303" + }, + { + "label": "博山区", + "value": "370304" + }, + { + "label": "临淄区", + "value": "370305" + }, + { + "label": "周村区", + "value": "370306" + }, + { + "label": "桓台县", + "value": "370321" + }, + { + "label": "高青县", + "value": "370322" + }, + { + "label": "沂源县", + "value": "370323" + } + ], + [{ + "label": "市中区", + "value": "370402" + }, + { + "label": "薛城区", + "value": "370403" + }, + { + "label": "峄城区", + "value": "370404" + }, + { + "label": "台儿庄区", + "value": "370405" + }, + { + "label": "山亭区", + "value": "370406" + }, + { + "label": "滕州市", + "value": "370481" + } + ], + [{ + "label": "东营区", + "value": "370502" + }, + { + "label": "河口区", + "value": "370503" + }, + { + "label": "垦利区", + "value": "370505" + }, + { + "label": "利津县", + "value": "370522" + }, + { + "label": "广饶县", + "value": "370523" + }, + { + "label": "东营经济技术开发区", + "value": "370571" + }, + { + "label": "东营港经济开发区", + "value": "370572" + } + ], + [{ + "label": "芝罘区", + "value": "370602" + }, + { + "label": "福山区", + "value": "370611" + }, + { + "label": "牟平区", + "value": "370612" + }, + { + "label": "莱山区", + "value": "370613" + }, + { + "label": "长岛县", + "value": "370634" + }, + { + "label": "烟台高新技术产业开发区", + "value": "370671" + }, + { + "label": "烟台经济技术开发区", + "value": "370672" + }, + { + "label": "龙口市", + "value": "370681" + }, + { + "label": "莱阳市", + "value": "370682" + }, + { + "label": "莱州市", + "value": "370683" + }, + { + "label": "蓬莱市", + "value": "370684" + }, + { + "label": "招远市", + "value": "370685" + }, + { + "label": "栖霞市", + "value": "370686" + }, + { + "label": "海阳市", + "value": "370687" + } + ], + [{ + "label": "潍城区", + "value": "370702" + }, + { + "label": "寒亭区", + "value": "370703" + }, + { + "label": "坊子区", + "value": "370704" + }, + { + "label": "奎文区", + "value": "370705" + }, + { + "label": "临朐县", + "value": "370724" + }, + { + "label": "昌乐县", + "value": "370725" + }, + { + "label": "潍坊滨海经济技术开发区", + "value": "370772" + }, + { + "label": "青州市", + "value": "370781" + }, + { + "label": "诸城市", + "value": "370782" + }, + { + "label": "寿光市", + "value": "370783" + }, + { + "label": "安丘市", + "value": "370784" + }, + { + "label": "高密市", + "value": "370785" + }, + { + "label": "昌邑市", + "value": "370786" + } + ], + [{ + "label": "任城区", + "value": "370811" + }, + { + "label": "兖州区", + "value": "370812" + }, + { + "label": "微山县", + "value": "370826" + }, + { + "label": "鱼台县", + "value": "370827" + }, + { + "label": "金乡县", + "value": "370828" + }, + { + "label": "嘉祥县", + "value": "370829" + }, + { + "label": "汶上县", + "value": "370830" + }, + { + "label": "泗水县", + "value": "370831" + }, + { + "label": "梁山县", + "value": "370832" + }, + { + "label": "济宁高新技术产业开发区", + "value": "370871" + }, + { + "label": "曲阜市", + "value": "370881" + }, + { + "label": "邹城市", + "value": "370883" + } + ], + [{ + "label": "泰山区", + "value": "370902" + }, + { + "label": "岱岳区", + "value": "370911" + }, + { + "label": "宁阳县", + "value": "370921" + }, + { + "label": "东平县", + "value": "370923" + }, + { + "label": "新泰市", + "value": "370982" + }, + { + "label": "肥城市", + "value": "370983" + } + ], + [{ + "label": "环翠区", + "value": "371002" + }, + { + "label": "文登区", + "value": "371003" + }, + { + "label": "威海火炬高技术产业开发区", + "value": "371071" + }, + { + "label": "威海经济技术开发区", + "value": "371072" + }, + { + "label": "威海临港经济技术开发区", + "value": "371073" + }, + { + "label": "荣成市", + "value": "371082" + }, + { + "label": "乳山市", + "value": "371083" + } + ], + [{ + "label": "东港区", + "value": "371102" + }, + { + "label": "岚山区", + "value": "371103" + }, + { + "label": "五莲县", + "value": "371121" + }, + { + "label": "莒县", + "value": "371122" + }, + { + "label": "日照经济技术开发区", + "value": "371171" + }, + { + "label": "日照国际海洋城", + "value": "371172" + } + ], + [{ + "label": "莱城区", + "value": "371202" + }, + { + "label": "钢城区", + "value": "371203" + } + ], + [{ + "label": "兰山区", + "value": "371302" + }, + { + "label": "罗庄区", + "value": "371311" + }, + { + "label": "河东区", + "value": "371312" + }, + { + "label": "沂南县", + "value": "371321" + }, + { + "label": "郯城县", + "value": "371322" + }, + { + "label": "沂水县", + "value": "371323" + }, + { + "label": "兰陵县", + "value": "371324" + }, + { + "label": "费县", + "value": "371325" + }, + { + "label": "平邑县", + "value": "371326" + }, + { + "label": "莒南县", + "value": "371327" + }, + { + "label": "蒙阴县", + "value": "371328" + }, + { + "label": "临沭县", + "value": "371329" + }, + { + "label": "临沂高新技术产业开发区", + "value": "371371" + }, + { + "label": "临沂经济技术开发区", + "value": "371372" + }, + { + "label": "临沂临港经济开发区", + "value": "371373" + } + ], + [{ + "label": "德城区", + "value": "371402" + }, + { + "label": "陵城区", + "value": "371403" + }, + { + "label": "宁津县", + "value": "371422" + }, + { + "label": "庆云县", + "value": "371423" + }, + { + "label": "临邑县", + "value": "371424" + }, + { + "label": "齐河县", + "value": "371425" + }, + { + "label": "平原县", + "value": "371426" + }, + { + "label": "夏津县", + "value": "371427" + }, + { + "label": "武城县", + "value": "371428" + }, + { + "label": "德州经济技术开发区", + "value": "371471" + }, + { + "label": "德州运河经济开发区", + "value": "371472" + }, + { + "label": "乐陵市", + "value": "371481" + }, + { + "label": "禹城市", + "value": "371482" + } + ], + [{ + "label": "东昌府区", + "value": "371502" + }, + { + "label": "阳谷县", + "value": "371521" + }, + { + "label": "莘县", + "value": "371522" + }, + { + "label": "茌平县", + "value": "371523" + }, + { + "label": "东阿县", + "value": "371524" + }, + { + "label": "冠县", + "value": "371525" + }, + { + "label": "高唐县", + "value": "371526" + }, + { + "label": "临清市", + "value": "371581" + } + ], + [{ + "label": "滨城区", + "value": "371602" + }, + { + "label": "沾化区", + "value": "371603" + }, + { + "label": "惠民县", + "value": "371621" + }, + { + "label": "阳信县", + "value": "371622" + }, + { + "label": "无棣县", + "value": "371623" + }, + { + "label": "博兴县", + "value": "371625" + }, + { + "label": "邹平县", + "value": "371626" + } + ], + [{ + "label": "牡丹区", + "value": "371702" + }, + { + "label": "定陶区", + "value": "371703" + }, + { + "label": "曹县", + "value": "371721" + }, + { + "label": "单县", + "value": "371722" + }, + { + "label": "成武县", + "value": "371723" + }, + { + "label": "巨野县", + "value": "371724" + }, + { + "label": "郓城县", + "value": "371725" + }, + { + "label": "鄄城县", + "value": "371726" + }, + { + "label": "东明县", + "value": "371728" + }, + { + "label": "菏泽经济技术开发区", + "value": "371771" + }, + { + "label": "菏泽高新技术开发区", + "value": "371772" + } + ] + ], + [ + [{ + "label": "中原区", + "value": "410102" + }, + { + "label": "二七区", + "value": "410103" + }, + { + "label": "管城回族区", + "value": "410104" + }, + { + "label": "金水区", + "value": "410105" + }, + { + "label": "上街区", + "value": "410106" + }, + { + "label": "惠济区", + "value": "410108" + }, + { + "label": "中牟县", + "value": "410122" + }, + { + "label": "郑州经济技术开发区", + "value": "410171" + }, + { + "label": "郑州高新技术产业开发区", + "value": "410172" + }, + { + "label": "郑州航空港经济综合实验区", + "value": "410173" + }, + { + "label": "巩义市", + "value": "410181" + }, + { + "label": "荥阳市", + "value": "410182" + }, + { + "label": "新密市", + "value": "410183" + }, + { + "label": "新郑市", + "value": "410184" + }, + { + "label": "登封市", + "value": "410185" + } + ], + [{ + "label": "龙亭区", + "value": "410202" + }, + { + "label": "顺河回族区", + "value": "410203" + }, + { + "label": "鼓楼区", + "value": "410204" + }, + { + "label": "禹王台区", + "value": "410205" + }, + { + "label": "祥符区", + "value": "410212" + }, + { + "label": "杞县", + "value": "410221" + }, + { + "label": "通许县", + "value": "410222" + }, + { + "label": "尉氏县", + "value": "410223" + }, + { + "label": "兰考县", + "value": "410225" + } + ], + [{ + "label": "老城区", + "value": "410302" + }, + { + "label": "西工区", + "value": "410303" + }, + { + "label": "瀍河回族区", + "value": "410304" + }, + { + "label": "涧西区", + "value": "410305" + }, + { + "label": "吉利区", + "value": "410306" + }, + { + "label": "洛龙区", + "value": "410311" + }, + { + "label": "孟津县", + "value": "410322" + }, + { + "label": "新安县", + "value": "410323" + }, + { + "label": "栾川县", + "value": "410324" + }, + { + "label": "嵩县", + "value": "410325" + }, + { + "label": "汝阳县", + "value": "410326" + }, + { + "label": "宜阳县", + "value": "410327" + }, + { + "label": "洛宁县", + "value": "410328" + }, + { + "label": "伊川县", + "value": "410329" + }, + { + "label": "洛阳高新技术产业开发区", + "value": "410371" + }, + { + "label": "偃师市", + "value": "410381" + } + ], + [{ + "label": "新华区", + "value": "410402" + }, + { + "label": "卫东区", + "value": "410403" + }, + { + "label": "石龙区", + "value": "410404" + }, + { + "label": "湛河区", + "value": "410411" + }, + { + "label": "宝丰县", + "value": "410421" + }, + { + "label": "叶县", + "value": "410422" + }, + { + "label": "鲁山县", + "value": "410423" + }, + { + "label": "郏县", + "value": "410425" + }, + { + "label": "平顶山高新技术产业开发区", + "value": "410471" + }, + { + "label": "平顶山市新城区", + "value": "410472" + }, + { + "label": "舞钢市", + "value": "410481" + }, + { + "label": "汝州市", + "value": "410482" + } + ], + [{ + "label": "文峰区", + "value": "410502" + }, + { + "label": "北关区", + "value": "410503" + }, + { + "label": "殷都区", + "value": "410505" + }, + { + "label": "龙安区", + "value": "410506" + }, + { + "label": "安阳县", + "value": "410522" + }, + { + "label": "汤阴县", + "value": "410523" + }, + { + "label": "滑县", + "value": "410526" + }, + { + "label": "内黄县", + "value": "410527" + }, + { + "label": "安阳高新技术产业开发区", + "value": "410571" + }, + { + "label": "林州市", + "value": "410581" + } + ], + [{ + "label": "鹤山区", + "value": "410602" + }, + { + "label": "山城区", + "value": "410603" + }, + { + "label": "淇滨区", + "value": "410611" + }, + { + "label": "浚县", + "value": "410621" + }, + { + "label": "淇县", + "value": "410622" + }, + { + "label": "鹤壁经济技术开发区", + "value": "410671" + } + ], + [{ + "label": "红旗区", + "value": "410702" + }, + { + "label": "卫滨区", + "value": "410703" + }, + { + "label": "凤泉区", + "value": "410704" + }, + { + "label": "牧野区", + "value": "410711" + }, + { + "label": "新乡县", + "value": "410721" + }, + { + "label": "获嘉县", + "value": "410724" + }, + { + "label": "原阳县", + "value": "410725" + }, + { + "label": "延津县", + "value": "410726" + }, + { + "label": "封丘县", + "value": "410727" + }, + { + "label": "长垣县", + "value": "410728" + }, + { + "label": "新乡高新技术产业开发区", + "value": "410771" + }, + { + "label": "新乡经济技术开发区", + "value": "410772" + }, + { + "label": "新乡市平原城乡一体化示范区", + "value": "410773" + }, + { + "label": "卫辉市", + "value": "410781" + }, + { + "label": "辉县市", + "value": "410782" + } + ], + [{ + "label": "解放区", + "value": "410802" + }, + { + "label": "中站区", + "value": "410803" + }, + { + "label": "马村区", + "value": "410804" + }, + { + "label": "山阳区", + "value": "410811" + }, + { + "label": "修武县", + "value": "410821" + }, + { + "label": "博爱县", + "value": "410822" + }, + { + "label": "武陟县", + "value": "410823" + }, + { + "label": "温县", + "value": "410825" + }, + { + "label": "焦作城乡一体化示范区", + "value": "410871" + }, + { + "label": "沁阳市", + "value": "410882" + }, + { + "label": "孟州市", + "value": "410883" + } + ], + [{ + "label": "华龙区", + "value": "410902" + }, + { + "label": "清丰县", + "value": "410922" + }, + { + "label": "南乐县", + "value": "410923" + }, + { + "label": "范县", + "value": "410926" + }, + { + "label": "台前县", + "value": "410927" + }, + { + "label": "濮阳县", + "value": "410928" + }, + { + "label": "河南濮阳工业园区", + "value": "410971" + }, + { + "label": "濮阳经济技术开发区", + "value": "410972" + } + ], + [{ + "label": "魏都区", + "value": "411002" + }, + { + "label": "建安区", + "value": "411003" + }, + { + "label": "鄢陵县", + "value": "411024" + }, + { + "label": "襄城县", + "value": "411025" + }, + { + "label": "许昌经济技术开发区", + "value": "411071" + }, + { + "label": "禹州市", + "value": "411081" + }, + { + "label": "长葛市", + "value": "411082" + } + ], + [{ + "label": "源汇区", + "value": "411102" + }, + { + "label": "郾城区", + "value": "411103" + }, + { + "label": "召陵区", + "value": "411104" + }, + { + "label": "舞阳县", + "value": "411121" + }, + { + "label": "临颍县", + "value": "411122" + }, + { + "label": "漯河经济技术开发区", + "value": "411171" + } + ], + [{ + "label": "湖滨区", + "value": "411202" + }, + { + "label": "陕州区", + "value": "411203" + }, + { + "label": "渑池县", + "value": "411221" + }, + { + "label": "卢氏县", + "value": "411224" + }, + { + "label": "河南三门峡经济开发区", + "value": "411271" + }, + { + "label": "义马市", + "value": "411281" + }, + { + "label": "灵宝市", + "value": "411282" + } + ], + [{ + "label": "宛城区", + "value": "411302" + }, + { + "label": "卧龙区", + "value": "411303" + }, + { + "label": "南召县", + "value": "411321" + }, + { + "label": "方城县", + "value": "411322" + }, + { + "label": "西峡县", + "value": "411323" + }, + { + "label": "镇平县", + "value": "411324" + }, + { + "label": "内乡县", + "value": "411325" + }, + { + "label": "淅川县", + "value": "411326" + }, + { + "label": "社旗县", + "value": "411327" + }, + { + "label": "唐河县", + "value": "411328" + }, + { + "label": "新野县", + "value": "411329" + }, + { + "label": "桐柏县", + "value": "411330" + }, + { + "label": "南阳高新技术产业开发区", + "value": "411371" + }, + { + "label": "南阳市城乡一体化示范区", + "value": "411372" + }, + { + "label": "邓州市", + "value": "411381" + } + ], + [{ + "label": "梁园区", + "value": "411402" + }, + { + "label": "睢阳区", + "value": "411403" + }, + { + "label": "民权县", + "value": "411421" + }, + { + "label": "睢县", + "value": "411422" + }, + { + "label": "宁陵县", + "value": "411423" + }, + { + "label": "柘城县", + "value": "411424" + }, + { + "label": "虞城县", + "value": "411425" + }, + { + "label": "夏邑县", + "value": "411426" + }, + { + "label": "豫东综合物流产业聚集区", + "value": "411471" + }, + { + "label": "河南商丘经济开发区", + "value": "411472" + }, + { + "label": "永城市", + "value": "411481" + } + ], + [{ + "label": "浉河区", + "value": "411502" + }, + { + "label": "平桥区", + "value": "411503" + }, + { + "label": "罗山县", + "value": "411521" + }, + { + "label": "光山县", + "value": "411522" + }, + { + "label": "新县", + "value": "411523" + }, + { + "label": "商城县", + "value": "411524" + }, + { + "label": "固始县", + "value": "411525" + }, + { + "label": "潢川县", + "value": "411526" + }, + { + "label": "淮滨县", + "value": "411527" + }, + { + "label": "息县", + "value": "411528" + }, + { + "label": "信阳高新技术产业开发区", + "value": "411571" + } + ], + [{ + "label": "川汇区", + "value": "411602" + }, + { + "label": "扶沟县", + "value": "411621" + }, + { + "label": "西华县", + "value": "411622" + }, + { + "label": "商水县", + "value": "411623" + }, + { + "label": "沈丘县", + "value": "411624" + }, + { + "label": "郸城县", + "value": "411625" + }, + { + "label": "淮阳县", + "value": "411626" + }, + { + "label": "太康县", + "value": "411627" + }, + { + "label": "鹿邑县", + "value": "411628" + }, + { + "label": "河南周口经济开发区", + "value": "411671" + }, + { + "label": "项城市", + "value": "411681" + } + ], + [{ + "label": "驿城区", + "value": "411702" + }, + { + "label": "西平县", + "value": "411721" + }, + { + "label": "上蔡县", + "value": "411722" + }, + { + "label": "平舆县", + "value": "411723" + }, + { + "label": "正阳县", + "value": "411724" + }, + { + "label": "确山县", + "value": "411725" + }, + { + "label": "泌阳县", + "value": "411726" + }, + { + "label": "汝南县", + "value": "411727" + }, + { + "label": "遂平县", + "value": "411728" + }, + { + "label": "新蔡县", + "value": "411729" + }, + { + "label": "河南驻马店经济开发区", + "value": "411771" + } + ], + [{ + "label": "济源市", + "value": "419001" + }] + ], + [ + [{ + "label": "江岸区", + "value": "420102" + }, + { + "label": "江汉区", + "value": "420103" + }, + { + "label": "硚口区", + "value": "420104" + }, + { + "label": "汉阳区", + "value": "420105" + }, + { + "label": "武昌区", + "value": "420106" + }, + { + "label": "青山区", + "value": "420107" + }, + { + "label": "洪山区", + "value": "420111" + }, + { + "label": "东西湖区", + "value": "420112" + }, + { + "label": "汉南区", + "value": "420113" + }, + { + "label": "蔡甸区", + "value": "420114" + }, + { + "label": "江夏区", + "value": "420115" + }, + { + "label": "黄陂区", + "value": "420116" + }, + { + "label": "新洲区", + "value": "420117" + } + ], + [{ + "label": "黄石港区", + "value": "420202" + }, + { + "label": "西塞山区", + "value": "420203" + }, + { + "label": "下陆区", + "value": "420204" + }, + { + "label": "铁山区", + "value": "420205" + }, + { + "label": "阳新县", + "value": "420222" + }, + { + "label": "大冶市", + "value": "420281" + } + ], + [{ + "label": "茅箭区", + "value": "420302" + }, + { + "label": "张湾区", + "value": "420303" + }, + { + "label": "郧阳区", + "value": "420304" + }, + { + "label": "郧西县", + "value": "420322" + }, + { + "label": "竹山县", + "value": "420323" + }, + { + "label": "竹溪县", + "value": "420324" + }, + { + "label": "房县", + "value": "420325" + }, + { + "label": "丹江口市", + "value": "420381" + } + ], + [{ + "label": "西陵区", + "value": "420502" + }, + { + "label": "伍家岗区", + "value": "420503" + }, + { + "label": "点军区", + "value": "420504" + }, + { + "label": "猇亭区", + "value": "420505" + }, + { + "label": "夷陵区", + "value": "420506" + }, + { + "label": "远安县", + "value": "420525" + }, + { + "label": "兴山县", + "value": "420526" + }, + { + "label": "秭归县", + "value": "420527" + }, + { + "label": "长阳土家族自治县", + "value": "420528" + }, + { + "label": "五峰土家族自治县", + "value": "420529" + }, + { + "label": "宜都市", + "value": "420581" + }, + { + "label": "当阳市", + "value": "420582" + }, + { + "label": "枝江市", + "value": "420583" + } + ], + [{ + "label": "襄城区", + "value": "420602" + }, + { + "label": "樊城区", + "value": "420606" + }, + { + "label": "襄州区", + "value": "420607" + }, + { + "label": "南漳县", + "value": "420624" + }, + { + "label": "谷城县", + "value": "420625" + }, + { + "label": "保康县", + "value": "420626" + }, + { + "label": "老河口市", + "value": "420682" + }, + { + "label": "枣阳市", + "value": "420683" + }, + { + "label": "宜城市", + "value": "420684" + } + ], + [{ + "label": "梁子湖区", + "value": "420702" + }, + { + "label": "华容区", + "value": "420703" + }, + { + "label": "鄂城区", + "value": "420704" + } + ], + [{ + "label": "东宝区", + "value": "420802" + }, + { + "label": "掇刀区", + "value": "420804" + }, + { + "label": "京山县", + "value": "420821" + }, + { + "label": "沙洋县", + "value": "420822" + }, + { + "label": "钟祥市", + "value": "420881" + } + ], + [{ + "label": "孝南区", + "value": "420902" + }, + { + "label": "孝昌县", + "value": "420921" + }, + { + "label": "大悟县", + "value": "420922" + }, + { + "label": "云梦县", + "value": "420923" + }, + { + "label": "应城市", + "value": "420981" + }, + { + "label": "安陆市", + "value": "420982" + }, + { + "label": "汉川市", + "value": "420984" + } + ], + [{ + "label": "沙市区", + "value": "421002" + }, + { + "label": "荆州区", + "value": "421003" + }, + { + "label": "公安县", + "value": "421022" + }, + { + "label": "监利县", + "value": "421023" + }, + { + "label": "江陵县", + "value": "421024" + }, + { + "label": "荆州经济技术开发区", + "value": "421071" + }, + { + "label": "石首市", + "value": "421081" + }, + { + "label": "洪湖市", + "value": "421083" + }, + { + "label": "松滋市", + "value": "421087" + } + ], + [{ + "label": "黄州区", + "value": "421102" + }, + { + "label": "团风县", + "value": "421121" + }, + { + "label": "红安县", + "value": "421122" + }, + { + "label": "罗田县", + "value": "421123" + }, + { + "label": "英山县", + "value": "421124" + }, + { + "label": "浠水县", + "value": "421125" + }, + { + "label": "蕲春县", + "value": "421126" + }, + { + "label": "黄梅县", + "value": "421127" + }, + { + "label": "龙感湖管理区", + "value": "421171" + }, + { + "label": "麻城市", + "value": "421181" + }, + { + "label": "武穴市", + "value": "421182" + } + ], + [{ + "label": "咸安区", + "value": "421202" + }, + { + "label": "嘉鱼县", + "value": "421221" + }, + { + "label": "通城县", + "value": "421222" + }, + { + "label": "崇阳县", + "value": "421223" + }, + { + "label": "通山县", + "value": "421224" + }, + { + "label": "赤壁市", + "value": "421281" + } + ], + [{ + "label": "曾都区", + "value": "421303" + }, + { + "label": "随县", + "value": "421321" + }, + { + "label": "广水市", + "value": "421381" + } + ], + [{ + "label": "恩施市", + "value": "422801" + }, + { + "label": "利川市", + "value": "422802" + }, + { + "label": "建始县", + "value": "422822" + }, + { + "label": "巴东县", + "value": "422823" + }, + { + "label": "宣恩县", + "value": "422825" + }, + { + "label": "咸丰县", + "value": "422826" + }, + { + "label": "来凤县", + "value": "422827" + }, + { + "label": "鹤峰县", + "value": "422828" + } + ], + [{ + "label": "仙桃市", + "value": "429004" + }, + { + "label": "潜江市", + "value": "429005" + }, + { + "label": "天门市", + "value": "429006" + }, + { + "label": "神农架林区", + "value": "429021" + } + ] + ], + [ + [{ + "label": "芙蓉区", + "value": "430102" + }, + { + "label": "天心区", + "value": "430103" + }, + { + "label": "岳麓区", + "value": "430104" + }, + { + "label": "开福区", + "value": "430105" + }, + { + "label": "雨花区", + "value": "430111" + }, + { + "label": "望城区", + "value": "430112" + }, + { + "label": "长沙县", + "value": "430121" + }, + { + "label": "浏阳市", + "value": "430181" + }, + { + "label": "宁乡市", + "value": "430182" + } + ], + [{ + "label": "荷塘区", + "value": "430202" + }, + { + "label": "芦淞区", + "value": "430203" + }, + { + "label": "石峰区", + "value": "430204" + }, + { + "label": "天元区", + "value": "430211" + }, + { + "label": "株洲县", + "value": "430221" + }, + { + "label": "攸县", + "value": "430223" + }, + { + "label": "茶陵县", + "value": "430224" + }, + { + "label": "炎陵县", + "value": "430225" + }, + { + "label": "云龙示范区", + "value": "430271" + }, + { + "label": "醴陵市", + "value": "430281" + } + ], + [{ + "label": "雨湖区", + "value": "430302" + }, + { + "label": "岳塘区", + "value": "430304" + }, + { + "label": "湘潭县", + "value": "430321" + }, + { + "label": "湖南湘潭高新技术产业园区", + "value": "430371" + }, + { + "label": "湘潭昭山示范区", + "value": "430372" + }, + { + "label": "湘潭九华示范区", + "value": "430373" + }, + { + "label": "湘乡市", + "value": "430381" + }, + { + "label": "韶山市", + "value": "430382" + } + ], + [{ + "label": "珠晖区", + "value": "430405" + }, + { + "label": "雁峰区", + "value": "430406" + }, + { + "label": "石鼓区", + "value": "430407" + }, + { + "label": "蒸湘区", + "value": "430408" + }, + { + "label": "南岳区", + "value": "430412" + }, + { + "label": "衡阳县", + "value": "430421" + }, + { + "label": "衡南县", + "value": "430422" + }, + { + "label": "衡山县", + "value": "430423" + }, + { + "label": "衡东县", + "value": "430424" + }, + { + "label": "祁东县", + "value": "430426" + }, + { + "label": "衡阳综合保税区", + "value": "430471" + }, + { + "label": "湖南衡阳高新技术产业园区", + "value": "430472" + }, + { + "label": "湖南衡阳松木经济开发区", + "value": "430473" + }, + { + "label": "耒阳市", + "value": "430481" + }, + { + "label": "常宁市", + "value": "430482" + } + ], + [{ + "label": "双清区", + "value": "430502" + }, + { + "label": "大祥区", + "value": "430503" + }, + { + "label": "北塔区", + "value": "430511" + }, + { + "label": "邵东县", + "value": "430521" + }, + { + "label": "新邵县", + "value": "430522" + }, + { + "label": "邵阳县", + "value": "430523" + }, + { + "label": "隆回县", + "value": "430524" + }, + { + "label": "洞口县", + "value": "430525" + }, + { + "label": "绥宁县", + "value": "430527" + }, + { + "label": "新宁县", + "value": "430528" + }, + { + "label": "城步苗族自治县", + "value": "430529" + }, + { + "label": "武冈市", + "value": "430581" + } + ], + [{ + "label": "岳阳楼区", + "value": "430602" + }, + { + "label": "云溪区", + "value": "430603" + }, + { + "label": "君山区", + "value": "430611" + }, + { + "label": "岳阳县", + "value": "430621" + }, + { + "label": "华容县", + "value": "430623" + }, + { + "label": "湘阴县", + "value": "430624" + }, + { + "label": "平江县", + "value": "430626" + }, + { + "label": "岳阳市屈原管理区", + "value": "430671" + }, + { + "label": "汨罗市", + "value": "430681" + }, + { + "label": "临湘市", + "value": "430682" + } + ], + [{ + "label": "武陵区", + "value": "430702" + }, + { + "label": "鼎城区", + "value": "430703" + }, + { + "label": "安乡县", + "value": "430721" + }, + { + "label": "汉寿县", + "value": "430722" + }, + { + "label": "澧县", + "value": "430723" + }, + { + "label": "临澧县", + "value": "430724" + }, + { + "label": "桃源县", + "value": "430725" + }, + { + "label": "石门县", + "value": "430726" + }, + { + "label": "常德市西洞庭管理区", + "value": "430771" + }, + { + "label": "津市市", + "value": "430781" + } + ], + [{ + "label": "永定区", + "value": "430802" + }, + { + "label": "武陵源区", + "value": "430811" + }, + { + "label": "慈利县", + "value": "430821" + }, + { + "label": "桑植县", + "value": "430822" + } + ], + [{ + "label": "资阳区", + "value": "430902" + }, + { + "label": "赫山区", + "value": "430903" + }, + { + "label": "南县", + "value": "430921" + }, + { + "label": "桃江县", + "value": "430922" + }, + { + "label": "安化县", + "value": "430923" + }, + { + "label": "益阳市大通湖管理区", + "value": "430971" + }, + { + "label": "湖南益阳高新技术产业园区", + "value": "430972" + }, + { + "label": "沅江市", + "value": "430981" + } + ], + [{ + "label": "北湖区", + "value": "431002" + }, + { + "label": "苏仙区", + "value": "431003" + }, + { + "label": "桂阳县", + "value": "431021" + }, + { + "label": "宜章县", + "value": "431022" + }, + { + "label": "永兴县", + "value": "431023" + }, + { + "label": "嘉禾县", + "value": "431024" + }, + { + "label": "临武县", + "value": "431025" + }, + { + "label": "汝城县", + "value": "431026" + }, + { + "label": "桂东县", + "value": "431027" + }, + { + "label": "安仁县", + "value": "431028" + }, + { + "label": "资兴市", + "value": "431081" + } + ], + [{ + "label": "零陵区", + "value": "431102" + }, + { + "label": "冷水滩区", + "value": "431103" + }, + { + "label": "祁阳县", + "value": "431121" + }, + { + "label": "东安县", + "value": "431122" + }, + { + "label": "双牌县", + "value": "431123" + }, + { + "label": "道县", + "value": "431124" + }, + { + "label": "江永县", + "value": "431125" + }, + { + "label": "宁远县", + "value": "431126" + }, + { + "label": "蓝山县", + "value": "431127" + }, + { + "label": "新田县", + "value": "431128" + }, + { + "label": "江华瑶族自治县", + "value": "431129" + }, + { + "label": "永州经济技术开发区", + "value": "431171" + }, + { + "label": "永州市金洞管理区", + "value": "431172" + }, + { + "label": "永州市回龙圩管理区", + "value": "431173" + } + ], + [{ + "label": "鹤城区", + "value": "431202" + }, + { + "label": "中方县", + "value": "431221" + }, + { + "label": "沅陵县", + "value": "431222" + }, + { + "label": "辰溪县", + "value": "431223" + }, + { + "label": "溆浦县", + "value": "431224" + }, + { + "label": "会同县", + "value": "431225" + }, + { + "label": "麻阳苗族自治县", + "value": "431226" + }, + { + "label": "新晃侗族自治县", + "value": "431227" + }, + { + "label": "芷江侗族自治县", + "value": "431228" + }, + { + "label": "靖州苗族侗族自治县", + "value": "431229" + }, + { + "label": "通道侗族自治县", + "value": "431230" + }, + { + "label": "怀化市洪江管理区", + "value": "431271" + }, + { + "label": "洪江市", + "value": "431281" + } + ], + [{ + "label": "娄星区", + "value": "431302" + }, + { + "label": "双峰县", + "value": "431321" + }, + { + "label": "新化县", + "value": "431322" + }, + { + "label": "冷水江市", + "value": "431381" + }, + { + "label": "涟源市", + "value": "431382" + } + ], + [{ + "label": "吉首市", + "value": "433101" + }, + { + "label": "泸溪县", + "value": "433122" + }, + { + "label": "凤凰县", + "value": "433123" + }, + { + "label": "花垣县", + "value": "433124" + }, + { + "label": "保靖县", + "value": "433125" + }, + { + "label": "古丈县", + "value": "433126" + }, + { + "label": "永顺县", + "value": "433127" + }, + { + "label": "龙山县", + "value": "433130" + }, + { + "label": "湖南吉首经济开发区", + "value": "433172" + }, + { + "label": "湖南永顺经济开发区", + "value": "433173" + } + ] + ], + [ + [{ + "label": "荔湾区", + "value": "440103" + }, + { + "label": "越秀区", + "value": "440104" + }, + { + "label": "海珠区", + "value": "440105" + }, + { + "label": "天河区", + "value": "440106" + }, + { + "label": "白云区", + "value": "440111" + }, + { + "label": "黄埔区", + "value": "440112" + }, + { + "label": "番禺区", + "value": "440113" + }, + { + "label": "花都区", + "value": "440114" + }, + { + "label": "南沙区", + "value": "440115" + }, + { + "label": "从化区", + "value": "440117" + }, + { + "label": "增城区", + "value": "440118" + } + ], + [{ + "label": "武江区", + "value": "440203" + }, + { + "label": "浈江区", + "value": "440204" + }, + { + "label": "曲江区", + "value": "440205" + }, + { + "label": "始兴县", + "value": "440222" + }, + { + "label": "仁化县", + "value": "440224" + }, + { + "label": "翁源县", + "value": "440229" + }, + { + "label": "乳源瑶族自治县", + "value": "440232" + }, + { + "label": "新丰县", + "value": "440233" + }, + { + "label": "乐昌市", + "value": "440281" + }, + { + "label": "南雄市", + "value": "440282" + } + ], + [{ + "label": "罗湖区", + "value": "440303" + }, + { + "label": "福田区", + "value": "440304" + }, + { + "label": "南山区", + "value": "440305" + }, + { + "label": "宝安区", + "value": "440306" + }, + { + "label": "龙岗区", + "value": "440307" + }, + { + "label": "盐田区", + "value": "440308" + }, + { + "label": "龙华区", + "value": "440309" + }, + { + "label": "坪山区", + "value": "440310" + } + ], + [{ + "label": "香洲区", + "value": "440402" + }, + { + "label": "斗门区", + "value": "440403" + }, + { + "label": "金湾区", + "value": "440404" + } + ], + [{ + "label": "龙湖区", + "value": "440507" + }, + { + "label": "金平区", + "value": "440511" + }, + { + "label": "濠江区", + "value": "440512" + }, + { + "label": "潮阳区", + "value": "440513" + }, + { + "label": "潮南区", + "value": "440514" + }, + { + "label": "澄海区", + "value": "440515" + }, + { + "label": "南澳县", + "value": "440523" + } + ], + [{ + "label": "禅城区", + "value": "440604" + }, + { + "label": "南海区", + "value": "440605" + }, + { + "label": "顺德区", + "value": "440606" + }, + { + "label": "三水区", + "value": "440607" + }, + { + "label": "高明区", + "value": "440608" + } + ], + [{ + "label": "蓬江区", + "value": "440703" + }, + { + "label": "江海区", + "value": "440704" + }, + { + "label": "新会区", + "value": "440705" + }, + { + "label": "台山市", + "value": "440781" + }, + { + "label": "开平市", + "value": "440783" + }, + { + "label": "鹤山市", + "value": "440784" + }, + { + "label": "恩平市", + "value": "440785" + } + ], + [{ + "label": "赤坎区", + "value": "440802" + }, + { + "label": "霞山区", + "value": "440803" + }, + { + "label": "坡头区", + "value": "440804" + }, + { + "label": "麻章区", + "value": "440811" + }, + { + "label": "遂溪县", + "value": "440823" + }, + { + "label": "徐闻县", + "value": "440825" + }, + { + "label": "廉江市", + "value": "440881" + }, + { + "label": "雷州市", + "value": "440882" + }, + { + "label": "吴川市", + "value": "440883" + } + ], + [{ + "label": "茂南区", + "value": "440902" + }, + { + "label": "电白区", + "value": "440904" + }, + { + "label": "高州市", + "value": "440981" + }, + { + "label": "化州市", + "value": "440982" + }, + { + "label": "信宜市", + "value": "440983" + } + ], + [{ + "label": "端州区", + "value": "441202" + }, + { + "label": "鼎湖区", + "value": "441203" + }, + { + "label": "高要区", + "value": "441204" + }, + { + "label": "广宁县", + "value": "441223" + }, + { + "label": "怀集县", + "value": "441224" + }, + { + "label": "封开县", + "value": "441225" + }, + { + "label": "德庆县", + "value": "441226" + }, + { + "label": "四会市", + "value": "441284" + } + ], + [{ + "label": "惠城区", + "value": "441302" + }, + { + "label": "惠阳区", + "value": "441303" + }, + { + "label": "博罗县", + "value": "441322" + }, + { + "label": "惠东县", + "value": "441323" + }, + { + "label": "龙门县", + "value": "441324" + } + ], + [{ + "label": "梅江区", + "value": "441402" + }, + { + "label": "梅县区", + "value": "441403" + }, + { + "label": "大埔县", + "value": "441422" + }, + { + "label": "丰顺县", + "value": "441423" + }, + { + "label": "五华县", + "value": "441424" + }, + { + "label": "平远县", + "value": "441426" + }, + { + "label": "蕉岭县", + "value": "441427" + }, + { + "label": "兴宁市", + "value": "441481" + } + ], + [{ + "label": "城区", + "value": "441502" + }, + { + "label": "海丰县", + "value": "441521" + }, + { + "label": "陆河县", + "value": "441523" + }, + { + "label": "陆丰市", + "value": "441581" + } + ], + [{ + "label": "源城区", + "value": "441602" + }, + { + "label": "紫金县", + "value": "441621" + }, + { + "label": "龙川县", + "value": "441622" + }, + { + "label": "连平县", + "value": "441623" + }, + { + "label": "和平县", + "value": "441624" + }, + { + "label": "东源县", + "value": "441625" + } + ], + [{ + "label": "江城区", + "value": "441702" + }, + { + "label": "阳东区", + "value": "441704" + }, + { + "label": "阳西县", + "value": "441721" + }, + { + "label": "阳春市", + "value": "441781" + } + ], + [{ + "label": "清城区", + "value": "441802" + }, + { + "label": "清新区", + "value": "441803" + }, + { + "label": "佛冈县", + "value": "441821" + }, + { + "label": "阳山县", + "value": "441823" + }, + { + "label": "连山壮族瑶族自治县", + "value": "441825" + }, + { + "label": "连南瑶族自治县", + "value": "441826" + }, + { + "label": "英德市", + "value": "441881" + }, + { + "label": "连州市", + "value": "441882" + } + ], + [{ + "label": "东莞市", + "value": "441900" + }], + [{ + "label": "中山市", + "value": "442000" + }], + [{ + "label": "湘桥区", + "value": "445102" + }, + { + "label": "潮安区", + "value": "445103" + }, + { + "label": "饶平县", + "value": "445122" + } + ], + [{ + "label": "榕城区", + "value": "445202" + }, + { + "label": "揭东区", + "value": "445203" + }, + { + "label": "揭西县", + "value": "445222" + }, + { + "label": "惠来县", + "value": "445224" + }, + { + "label": "普宁市", + "value": "445281" + } + ], + [{ + "label": "云城区", + "value": "445302" + }, + { + "label": "云安区", + "value": "445303" + }, + { + "label": "新兴县", + "value": "445321" + }, + { + "label": "郁南县", + "value": "445322" + }, + { + "label": "罗定市", + "value": "445381" + } + ] + ], + [ + [{ + "label": "兴宁区", + "value": "450102" + }, + { + "label": "青秀区", + "value": "450103" + }, + { + "label": "江南区", + "value": "450105" + }, + { + "label": "西乡塘区", + "value": "450107" + }, + { + "label": "良庆区", + "value": "450108" + }, + { + "label": "邕宁区", + "value": "450109" + }, + { + "label": "武鸣区", + "value": "450110" + }, + { + "label": "隆安县", + "value": "450123" + }, + { + "label": "马山县", + "value": "450124" + }, + { + "label": "上林县", + "value": "450125" + }, + { + "label": "宾阳县", + "value": "450126" + }, + { + "label": "横县", + "value": "450127" + } + ], + [{ + "label": "城中区", + "value": "450202" + }, + { + "label": "鱼峰区", + "value": "450203" + }, + { + "label": "柳南区", + "value": "450204" + }, + { + "label": "柳北区", + "value": "450205" + }, + { + "label": "柳江区", + "value": "450206" + }, + { + "label": "柳城县", + "value": "450222" + }, + { + "label": "鹿寨县", + "value": "450223" + }, + { + "label": "融安县", + "value": "450224" + }, + { + "label": "融水苗族自治县", + "value": "450225" + }, + { + "label": "三江侗族自治县", + "value": "450226" + } + ], + [{ + "label": "秀峰区", + "value": "450302" + }, + { + "label": "叠彩区", + "value": "450303" + }, + { + "label": "象山区", + "value": "450304" + }, + { + "label": "七星区", + "value": "450305" + }, + { + "label": "雁山区", + "value": "450311" + }, + { + "label": "临桂区", + "value": "450312" + }, + { + "label": "阳朔县", + "value": "450321" + }, + { + "label": "灵川县", + "value": "450323" + }, + { + "label": "全州县", + "value": "450324" + }, + { + "label": "兴安县", + "value": "450325" + }, + { + "label": "永福县", + "value": "450326" + }, + { + "label": "灌阳县", + "value": "450327" + }, + { + "label": "龙胜各族自治县", + "value": "450328" + }, + { + "label": "资源县", + "value": "450329" + }, + { + "label": "平乐县", + "value": "450330" + }, + { + "label": "荔浦县", + "value": "450331" + }, + { + "label": "恭城瑶族自治县", + "value": "450332" + } + ], + [{ + "label": "万秀区", + "value": "450403" + }, + { + "label": "长洲区", + "value": "450405" + }, + { + "label": "龙圩区", + "value": "450406" + }, + { + "label": "苍梧县", + "value": "450421" + }, + { + "label": "藤县", + "value": "450422" + }, + { + "label": "蒙山县", + "value": "450423" + }, + { + "label": "岑溪市", + "value": "450481" + } + ], + [{ + "label": "海城区", + "value": "450502" + }, + { + "label": "银海区", + "value": "450503" + }, + { + "label": "铁山港区", + "value": "450512" + }, + { + "label": "合浦县", + "value": "450521" + } + ], + [{ + "label": "港口区", + "value": "450602" + }, + { + "label": "防城区", + "value": "450603" + }, + { + "label": "上思县", + "value": "450621" + }, + { + "label": "东兴市", + "value": "450681" + } + ], + [{ + "label": "钦南区", + "value": "450702" + }, + { + "label": "钦北区", + "value": "450703" + }, + { + "label": "灵山县", + "value": "450721" + }, + { + "label": "浦北县", + "value": "450722" + } + ], + [{ + "label": "港北区", + "value": "450802" + }, + { + "label": "港南区", + "value": "450803" + }, + { + "label": "覃塘区", + "value": "450804" + }, + { + "label": "平南县", + "value": "450821" + }, + { + "label": "桂平市", + "value": "450881" + } + ], + [{ + "label": "玉州区", + "value": "450902" + }, + { + "label": "福绵区", + "value": "450903" + }, + { + "label": "容县", + "value": "450921" + }, + { + "label": "陆川县", + "value": "450922" + }, + { + "label": "博白县", + "value": "450923" + }, + { + "label": "兴业县", + "value": "450924" + }, + { + "label": "北流市", + "value": "450981" + } + ], + [{ + "label": "右江区", + "value": "451002" + }, + { + "label": "田阳县", + "value": "451021" + }, + { + "label": "田东县", + "value": "451022" + }, + { + "label": "平果县", + "value": "451023" + }, + { + "label": "德保县", + "value": "451024" + }, + { + "label": "那坡县", + "value": "451026" + }, + { + "label": "凌云县", + "value": "451027" + }, + { + "label": "乐业县", + "value": "451028" + }, + { + "label": "田林县", + "value": "451029" + }, + { + "label": "西林县", + "value": "451030" + }, + { + "label": "隆林各族自治县", + "value": "451031" + }, + { + "label": "靖西市", + "value": "451081" + } + ], + [{ + "label": "八步区", + "value": "451102" + }, + { + "label": "平桂区", + "value": "451103" + }, + { + "label": "昭平县", + "value": "451121" + }, + { + "label": "钟山县", + "value": "451122" + }, + { + "label": "富川瑶族自治县", + "value": "451123" + } + ], + [{ + "label": "金城江区", + "value": "451202" + }, + { + "label": "宜州区", + "value": "451203" + }, + { + "label": "南丹县", + "value": "451221" + }, + { + "label": "天峨县", + "value": "451222" + }, + { + "label": "凤山县", + "value": "451223" + }, + { + "label": "东兰县", + "value": "451224" + }, + { + "label": "罗城仫佬族自治县", + "value": "451225" + }, + { + "label": "环江毛南族自治县", + "value": "451226" + }, + { + "label": "巴马瑶族自治县", + "value": "451227" + }, + { + "label": "都安瑶族自治县", + "value": "451228" + }, + { + "label": "大化瑶族自治县", + "value": "451229" + } + ], + [{ + "label": "兴宾区", + "value": "451302" + }, + { + "label": "忻城县", + "value": "451321" + }, + { + "label": "象州县", + "value": "451322" + }, + { + "label": "武宣县", + "value": "451323" + }, + { + "label": "金秀瑶族自治县", + "value": "451324" + }, + { + "label": "合山市", + "value": "451381" + } + ], + [{ + "label": "江州区", + "value": "451402" + }, + { + "label": "扶绥县", + "value": "451421" + }, + { + "label": "宁明县", + "value": "451422" + }, + { + "label": "龙州县", + "value": "451423" + }, + { + "label": "大新县", + "value": "451424" + }, + { + "label": "天等县", + "value": "451425" + }, + { + "label": "凭祥市", + "value": "451481" + } + ] + ], + [ + [{ + "label": "秀英区", + "value": "460105" + }, + { + "label": "龙华区", + "value": "460106" + }, + { + "label": "琼山区", + "value": "460107" + }, + { + "label": "美兰区", + "value": "460108" + } + ], + [{ + "label": "海棠区", + "value": "460202" + }, + { + "label": "吉阳区", + "value": "460203" + }, + { + "label": "天涯区", + "value": "460204" + }, + { + "label": "崖州区", + "value": "460205" + } + ], + [{ + "label": "西沙群岛", + "value": "460321" + }, + { + "label": "南沙群岛", + "value": "460322" + }, + { + "label": "中沙群岛的岛礁及其海域", + "value": "460323" + } + ], + [{ + "label": "儋州市", + "value": "460400" + }], + [{ + "label": "五指山市", + "value": "469001" + }, + { + "label": "琼海市", + "value": "469002" + }, + { + "label": "文昌市", + "value": "469005" + }, + { + "label": "万宁市", + "value": "469006" + }, + { + "label": "东方市", + "value": "469007" + }, + { + "label": "定安县", + "value": "469021" + }, + { + "label": "屯昌县", + "value": "469022" + }, + { + "label": "澄迈县", + "value": "469023" + }, + { + "label": "临高县", + "value": "469024" + }, + { + "label": "白沙黎族自治县", + "value": "469025" + }, + { + "label": "昌江黎族自治县", + "value": "469026" + }, + { + "label": "乐东黎族自治县", + "value": "469027" + }, + { + "label": "陵水黎族自治县", + "value": "469028" + }, + { + "label": "保亭黎族苗族自治县", + "value": "469029" + }, + { + "label": "琼中黎族苗族自治县", + "value": "469030" + } + ] + ], + [ + [{ + "label": "万州区", + "value": "500101" + }, + { + "label": "涪陵区", + "value": "500102" + }, + { + "label": "渝中区", + "value": "500103" + }, + { + "label": "大渡口区", + "value": "500104" + }, + { + "label": "江北区", + "value": "500105" + }, + { + "label": "沙坪坝区", + "value": "500106" + }, + { + "label": "九龙坡区", + "value": "500107" + }, + { + "label": "南岸区", + "value": "500108" + }, + { + "label": "北碚区", + "value": "500109" + }, + { + "label": "綦江区", + "value": "500110" + }, + { + "label": "大足区", + "value": "500111" + }, + { + "label": "渝北区", + "value": "500112" + }, + { + "label": "巴南区", + "value": "500113" + }, + { + "label": "黔江区", + "value": "500114" + }, + { + "label": "长寿区", + "value": "500115" + }, + { + "label": "江津区", + "value": "500116" + }, + { + "label": "合川区", + "value": "500117" + }, + { + "label": "永川区", + "value": "500118" + }, + { + "label": "南川区", + "value": "500119" + }, + { + "label": "璧山区", + "value": "500120" + }, + { + "label": "铜梁区", + "value": "500151" + }, + { + "label": "潼南区", + "value": "500152" + }, + { + "label": "荣昌区", + "value": "500153" + }, + { + "label": "开州区", + "value": "500154" + }, + { + "label": "梁平区", + "value": "500155" + }, + { + "label": "武隆区", + "value": "500156" + } + ], + [{ + "label": "城口县", + "value": "500229" + }, + { + "label": "丰都县", + "value": "500230" + }, + { + "label": "垫江县", + "value": "500231" + }, + { + "label": "忠县", + "value": "500233" + }, + { + "label": "云阳县", + "value": "500235" + }, + { + "label": "奉节县", + "value": "500236" + }, + { + "label": "巫山县", + "value": "500237" + }, + { + "label": "巫溪县", + "value": "500238" + }, + { + "label": "石柱土家族自治县", + "value": "500240" + }, + { + "label": "秀山土家族苗族自治县", + "value": "500241" + }, + { + "label": "酉阳土家族苗族自治县", + "value": "500242" + }, + { + "label": "彭水苗族土家族自治县", + "value": "500243" + } + ] + ], + [ + [{ + "label": "锦江区", + "value": "510104" + }, + { + "label": "青羊区", + "value": "510105" + }, + { + "label": "金牛区", + "value": "510106" + }, + { + "label": "武侯区", + "value": "510107" + }, + { + "label": "成华区", + "value": "510108" + }, + { + "label": "龙泉驿区", + "value": "510112" + }, + { + "label": "青白江区", + "value": "510113" + }, + { + "label": "新都区", + "value": "510114" + }, + { + "label": "温江区", + "value": "510115" + }, + { + "label": "双流区", + "value": "510116" + }, + { + "label": "郫都区", + "value": "510117" + }, + { + "label": "金堂县", + "value": "510121" + }, + { + "label": "大邑县", + "value": "510129" + }, + { + "label": "蒲江县", + "value": "510131" + }, + { + "label": "新津县", + "value": "510132" + }, + { + "label": "都江堰市", + "value": "510181" + }, + { + "label": "彭州市", + "value": "510182" + }, + { + "label": "邛崃市", + "value": "510183" + }, + { + "label": "崇州市", + "value": "510184" + }, + { + "label": "简阳市", + "value": "510185" + } + ], + [{ + "label": "自流井区", + "value": "510302" + }, + { + "label": "贡井区", + "value": "510303" + }, + { + "label": "大安区", + "value": "510304" + }, + { + "label": "沿滩区", + "value": "510311" + }, + { + "label": "荣县", + "value": "510321" + }, + { + "label": "富顺县", + "value": "510322" + } + ], + [{ + "label": "东区", + "value": "510402" + }, + { + "label": "西区", + "value": "510403" + }, + { + "label": "仁和区", + "value": "510411" + }, + { + "label": "米易县", + "value": "510421" + }, + { + "label": "盐边县", + "value": "510422" + } + ], + [{ + "label": "江阳区", + "value": "510502" + }, + { + "label": "纳溪区", + "value": "510503" + }, + { + "label": "龙马潭区", + "value": "510504" + }, + { + "label": "泸县", + "value": "510521" + }, + { + "label": "合江县", + "value": "510522" + }, + { + "label": "叙永县", + "value": "510524" + }, + { + "label": "古蔺县", + "value": "510525" + } + ], + [{ + "label": "旌阳区", + "value": "510603" + }, + { + "label": "罗江区", + "value": "510604" + }, + { + "label": "中江县", + "value": "510623" + }, + { + "label": "广汉市", + "value": "510681" + }, + { + "label": "什邡市", + "value": "510682" + }, + { + "label": "绵竹市", + "value": "510683" + } + ], + [{ + "label": "涪城区", + "value": "510703" + }, + { + "label": "游仙区", + "value": "510704" + }, + { + "label": "安州区", + "value": "510705" + }, + { + "label": "三台县", + "value": "510722" + }, + { + "label": "盐亭县", + "value": "510723" + }, + { + "label": "梓潼县", + "value": "510725" + }, + { + "label": "北川羌族自治县", + "value": "510726" + }, + { + "label": "平武县", + "value": "510727" + }, + { + "label": "江油市", + "value": "510781" + } + ], + [{ + "label": "利州区", + "value": "510802" + }, + { + "label": "昭化区", + "value": "510811" + }, + { + "label": "朝天区", + "value": "510812" + }, + { + "label": "旺苍县", + "value": "510821" + }, + { + "label": "青川县", + "value": "510822" + }, + { + "label": "剑阁县", + "value": "510823" + }, + { + "label": "苍溪县", + "value": "510824" + } + ], + [{ + "label": "船山区", + "value": "510903" + }, + { + "label": "安居区", + "value": "510904" + }, + { + "label": "蓬溪县", + "value": "510921" + }, + { + "label": "射洪县", + "value": "510922" + }, + { + "label": "大英县", + "value": "510923" + } + ], + [{ + "label": "市中区", + "value": "511002" + }, + { + "label": "东兴区", + "value": "511011" + }, + { + "label": "威远县", + "value": "511024" + }, + { + "label": "资中县", + "value": "511025" + }, + { + "label": "内江经济开发区", + "value": "511071" + }, + { + "label": "隆昌市", + "value": "511083" + } + ], + [{ + "label": "市中区", + "value": "511102" + }, + { + "label": "沙湾区", + "value": "511111" + }, + { + "label": "五通桥区", + "value": "511112" + }, + { + "label": "金口河区", + "value": "511113" + }, + { + "label": "犍为县", + "value": "511123" + }, + { + "label": "井研县", + "value": "511124" + }, + { + "label": "夹江县", + "value": "511126" + }, + { + "label": "沐川县", + "value": "511129" + }, + { + "label": "峨边彝族自治县", + "value": "511132" + }, + { + "label": "马边彝族自治县", + "value": "511133" + }, + { + "label": "峨眉山市", + "value": "511181" + } + ], + [{ + "label": "顺庆区", + "value": "511302" + }, + { + "label": "高坪区", + "value": "511303" + }, + { + "label": "嘉陵区", + "value": "511304" + }, + { + "label": "南部县", + "value": "511321" + }, + { + "label": "营山县", + "value": "511322" + }, + { + "label": "蓬安县", + "value": "511323" + }, + { + "label": "仪陇县", + "value": "511324" + }, + { + "label": "西充县", + "value": "511325" + }, + { + "label": "阆中市", + "value": "511381" + } + ], + [{ + "label": "东坡区", + "value": "511402" + }, + { + "label": "彭山区", + "value": "511403" + }, + { + "label": "仁寿县", + "value": "511421" + }, + { + "label": "洪雅县", + "value": "511423" + }, + { + "label": "丹棱县", + "value": "511424" + }, + { + "label": "青神县", + "value": "511425" + } + ], + [{ + "label": "翠屏区", + "value": "511502" + }, + { + "label": "南溪区", + "value": "511503" + }, + { + "label": "宜宾县", + "value": "511521" + }, + { + "label": "江安县", + "value": "511523" + }, + { + "label": "长宁县", + "value": "511524" + }, + { + "label": "高县", + "value": "511525" + }, + { + "label": "珙县", + "value": "511526" + }, + { + "label": "筠连县", + "value": "511527" + }, + { + "label": "兴文县", + "value": "511528" + }, + { + "label": "屏山县", + "value": "511529" + } + ], + [{ + "label": "广安区", + "value": "511602" + }, + { + "label": "前锋区", + "value": "511603" + }, + { + "label": "岳池县", + "value": "511621" + }, + { + "label": "武胜县", + "value": "511622" + }, + { + "label": "邻水县", + "value": "511623" + }, + { + "label": "华蓥市", + "value": "511681" + } + ], + [{ + "label": "通川区", + "value": "511702" + }, + { + "label": "达川区", + "value": "511703" + }, + { + "label": "宣汉县", + "value": "511722" + }, + { + "label": "开江县", + "value": "511723" + }, + { + "label": "大竹县", + "value": "511724" + }, + { + "label": "渠县", + "value": "511725" + }, + { + "label": "达州经济开发区", + "value": "511771" + }, + { + "label": "万源市", + "value": "511781" + } + ], + [{ + "label": "雨城区", + "value": "511802" + }, + { + "label": "名山区", + "value": "511803" + }, + { + "label": "荥经县", + "value": "511822" + }, + { + "label": "汉源县", + "value": "511823" + }, + { + "label": "石棉县", + "value": "511824" + }, + { + "label": "天全县", + "value": "511825" + }, + { + "label": "芦山县", + "value": "511826" + }, + { + "label": "宝兴县", + "value": "511827" + } + ], + [{ + "label": "巴州区", + "value": "511902" + }, + { + "label": "恩阳区", + "value": "511903" + }, + { + "label": "通江县", + "value": "511921" + }, + { + "label": "南江县", + "value": "511922" + }, + { + "label": "平昌县", + "value": "511923" + }, + { + "label": "巴中经济开发区", + "value": "511971" + } + ], + [{ + "label": "雁江区", + "value": "512002" + }, + { + "label": "安岳县", + "value": "512021" + }, + { + "label": "乐至县", + "value": "512022" + } + ], + [{ + "label": "马尔康市", + "value": "513201" + }, + { + "label": "汶川县", + "value": "513221" + }, + { + "label": "理县", + "value": "513222" + }, + { + "label": "茂县", + "value": "513223" + }, + { + "label": "松潘县", + "value": "513224" + }, + { + "label": "九寨沟县", + "value": "513225" + }, + { + "label": "金川县", + "value": "513226" + }, + { + "label": "小金县", + "value": "513227" + }, + { + "label": "黑水县", + "value": "513228" + }, + { + "label": "壤塘县", + "value": "513230" + }, + { + "label": "阿坝县", + "value": "513231" + }, + { + "label": "若尔盖县", + "value": "513232" + }, + { + "label": "红原县", + "value": "513233" + } + ], + [{ + "label": "康定市", + "value": "513301" + }, + { + "label": "泸定县", + "value": "513322" + }, + { + "label": "丹巴县", + "value": "513323" + }, + { + "label": "九龙县", + "value": "513324" + }, + { + "label": "雅江县", + "value": "513325" + }, + { + "label": "道孚县", + "value": "513326" + }, + { + "label": "炉霍县", + "value": "513327" + }, + { + "label": "甘孜县", + "value": "513328" + }, + { + "label": "新龙县", + "value": "513329" + }, + { + "label": "德格县", + "value": "513330" + }, + { + "label": "白玉县", + "value": "513331" + }, + { + "label": "石渠县", + "value": "513332" + }, + { + "label": "色达县", + "value": "513333" + }, + { + "label": "理塘县", + "value": "513334" + }, + { + "label": "巴塘县", + "value": "513335" + }, + { + "label": "乡城县", + "value": "513336" + }, + { + "label": "稻城县", + "value": "513337" + }, + { + "label": "得荣县", + "value": "513338" + } + ], + [{ + "label": "西昌市", + "value": "513401" + }, + { + "label": "木里藏族自治县", + "value": "513422" + }, + { + "label": "盐源县", + "value": "513423" + }, + { + "label": "德昌县", + "value": "513424" + }, + { + "label": "会理县", + "value": "513425" + }, + { + "label": "会东县", + "value": "513426" + }, + { + "label": "宁南县", + "value": "513427" + }, + { + "label": "普格县", + "value": "513428" + }, + { + "label": "布拖县", + "value": "513429" + }, + { + "label": "金阳县", + "value": "513430" + }, + { + "label": "昭觉县", + "value": "513431" + }, + { + "label": "喜德县", + "value": "513432" + }, + { + "label": "冕宁县", + "value": "513433" + }, + { + "label": "越西县", + "value": "513434" + }, + { + "label": "甘洛县", + "value": "513435" + }, + { + "label": "美姑县", + "value": "513436" + }, + { + "label": "雷波县", + "value": "513437" + } + ] + ], + [ + [{ + "label": "南明区", + "value": "520102" + }, + { + "label": "云岩区", + "value": "520103" + }, + { + "label": "花溪区", + "value": "520111" + }, + { + "label": "乌当区", + "value": "520112" + }, + { + "label": "白云区", + "value": "520113" + }, + { + "label": "观山湖区", + "value": "520115" + }, + { + "label": "开阳县", + "value": "520121" + }, + { + "label": "息烽县", + "value": "520122" + }, + { + "label": "修文县", + "value": "520123" + }, + { + "label": "清镇市", + "value": "520181" + } + ], + [{ + "label": "钟山区", + "value": "520201" + }, + { + "label": "六枝特区", + "value": "520203" + }, + { + "label": "水城县", + "value": "520221" + }, + { + "label": "盘州市", + "value": "520281" + } + ], + [{ + "label": "红花岗区", + "value": "520302" + }, + { + "label": "汇川区", + "value": "520303" + }, + { + "label": "播州区", + "value": "520304" + }, + { + "label": "桐梓县", + "value": "520322" + }, + { + "label": "绥阳县", + "value": "520323" + }, + { + "label": "正安县", + "value": "520324" + }, + { + "label": "道真仡佬族苗族自治县", + "value": "520325" + }, + { + "label": "务川仡佬族苗族自治县", + "value": "520326" + }, + { + "label": "凤冈县", + "value": "520327" + }, + { + "label": "湄潭县", + "value": "520328" + }, + { + "label": "余庆县", + "value": "520329" + }, + { + "label": "习水县", + "value": "520330" + }, + { + "label": "赤水市", + "value": "520381" + }, + { + "label": "仁怀市", + "value": "520382" + } + ], + [{ + "label": "西秀区", + "value": "520402" + }, + { + "label": "平坝区", + "value": "520403" + }, + { + "label": "普定县", + "value": "520422" + }, + { + "label": "镇宁布依族苗族自治县", + "value": "520423" + }, + { + "label": "关岭布依族苗族自治县", + "value": "520424" + }, + { + "label": "紫云苗族布依族自治县", + "value": "520425" + } + ], + [{ + "label": "七星关区", + "value": "520502" + }, + { + "label": "大方县", + "value": "520521" + }, + { + "label": "黔西县", + "value": "520522" + }, + { + "label": "金沙县", + "value": "520523" + }, + { + "label": "织金县", + "value": "520524" + }, + { + "label": "纳雍县", + "value": "520525" + }, + { + "label": "威宁彝族回族苗族自治县", + "value": "520526" + }, + { + "label": "赫章县", + "value": "520527" + } + ], + [{ + "label": "碧江区", + "value": "520602" + }, + { + "label": "万山区", + "value": "520603" + }, + { + "label": "江口县", + "value": "520621" + }, + { + "label": "玉屏侗族自治县", + "value": "520622" + }, + { + "label": "石阡县", + "value": "520623" + }, + { + "label": "思南县", + "value": "520624" + }, + { + "label": "印江土家族苗族自治县", + "value": "520625" + }, + { + "label": "德江县", + "value": "520626" + }, + { + "label": "沿河土家族自治县", + "value": "520627" + }, + { + "label": "松桃苗族自治县", + "value": "520628" + } + ], + [{ + "label": "兴义市", + "value": "522301" + }, + { + "label": "兴仁县", + "value": "522322" + }, + { + "label": "普安县", + "value": "522323" + }, + { + "label": "晴隆县", + "value": "522324" + }, + { + "label": "贞丰县", + "value": "522325" + }, + { + "label": "望谟县", + "value": "522326" + }, + { + "label": "册亨县", + "value": "522327" + }, + { + "label": "安龙县", + "value": "522328" + } + ], + [{ + "label": "凯里市", + "value": "522601" + }, + { + "label": "黄平县", + "value": "522622" + }, + { + "label": "施秉县", + "value": "522623" + }, + { + "label": "三穗县", + "value": "522624" + }, + { + "label": "镇远县", + "value": "522625" + }, + { + "label": "岑巩县", + "value": "522626" + }, + { + "label": "天柱县", + "value": "522627" + }, + { + "label": "锦屏县", + "value": "522628" + }, + { + "label": "剑河县", + "value": "522629" + }, + { + "label": "台江县", + "value": "522630" + }, + { + "label": "黎平县", + "value": "522631" + }, + { + "label": "榕江县", + "value": "522632" + }, + { + "label": "从江县", + "value": "522633" + }, + { + "label": "雷山县", + "value": "522634" + }, + { + "label": "麻江县", + "value": "522635" + }, + { + "label": "丹寨县", + "value": "522636" + } + ], + [{ + "label": "都匀市", + "value": "522701" + }, + { + "label": "福泉市", + "value": "522702" + }, + { + "label": "荔波县", + "value": "522722" + }, + { + "label": "贵定县", + "value": "522723" + }, + { + "label": "瓮安县", + "value": "522725" + }, + { + "label": "独山县", + "value": "522726" + }, + { + "label": "平塘县", + "value": "522727" + }, + { + "label": "罗甸县", + "value": "522728" + }, + { + "label": "长顺县", + "value": "522729" + }, + { + "label": "龙里县", + "value": "522730" + }, + { + "label": "惠水县", + "value": "522731" + }, + { + "label": "三都水族自治县", + "value": "522732" + } + ] + ], + [ + [{ + "label": "五华区", + "value": "530102" + }, + { + "label": "盘龙区", + "value": "530103" + }, + { + "label": "官渡区", + "value": "530111" + }, + { + "label": "西山区", + "value": "530112" + }, + { + "label": "东川区", + "value": "530113" + }, + { + "label": "呈贡区", + "value": "530114" + }, + { + "label": "晋宁区", + "value": "530115" + }, + { + "label": "富民县", + "value": "530124" + }, + { + "label": "宜良县", + "value": "530125" + }, + { + "label": "石林彝族自治县", + "value": "530126" + }, + { + "label": "嵩明县", + "value": "530127" + }, + { + "label": "禄劝彝族苗族自治县", + "value": "530128" + }, + { + "label": "寻甸回族彝族自治县", + "value": "530129" + }, + { + "label": "安宁市", + "value": "530181" + } + ], + [{ + "label": "麒麟区", + "value": "530302" + }, + { + "label": "沾益区", + "value": "530303" + }, + { + "label": "马龙县", + "value": "530321" + }, + { + "label": "陆良县", + "value": "530322" + }, + { + "label": "师宗县", + "value": "530323" + }, + { + "label": "罗平县", + "value": "530324" + }, + { + "label": "富源县", + "value": "530325" + }, + { + "label": "会泽县", + "value": "530326" + }, + { + "label": "宣威市", + "value": "530381" + } + ], + [{ + "label": "红塔区", + "value": "530402" + }, + { + "label": "江川区", + "value": "530403" + }, + { + "label": "澄江县", + "value": "530422" + }, + { + "label": "通海县", + "value": "530423" + }, + { + "label": "华宁县", + "value": "530424" + }, + { + "label": "易门县", + "value": "530425" + }, + { + "label": "峨山彝族自治县", + "value": "530426" + }, + { + "label": "新平彝族傣族自治县", + "value": "530427" + }, + { + "label": "元江哈尼族彝族傣族自治县", + "value": "530428" + } + ], + [{ + "label": "隆阳区", + "value": "530502" + }, + { + "label": "施甸县", + "value": "530521" + }, + { + "label": "龙陵县", + "value": "530523" + }, + { + "label": "昌宁县", + "value": "530524" + }, + { + "label": "腾冲市", + "value": "530581" + } + ], + [{ + "label": "昭阳区", + "value": "530602" + }, + { + "label": "鲁甸县", + "value": "530621" + }, + { + "label": "巧家县", + "value": "530622" + }, + { + "label": "盐津县", + "value": "530623" + }, + { + "label": "大关县", + "value": "530624" + }, + { + "label": "永善县", + "value": "530625" + }, + { + "label": "绥江县", + "value": "530626" + }, + { + "label": "镇雄县", + "value": "530627" + }, + { + "label": "彝良县", + "value": "530628" + }, + { + "label": "威信县", + "value": "530629" + }, + { + "label": "水富县", + "value": "530630" + } + ], + [{ + "label": "古城区", + "value": "530702" + }, + { + "label": "玉龙纳西族自治县", + "value": "530721" + }, + { + "label": "永胜县", + "value": "530722" + }, + { + "label": "华坪县", + "value": "530723" + }, + { + "label": "宁蒗彝族自治县", + "value": "530724" + } + ], + [{ + "label": "思茅区", + "value": "530802" + }, + { + "label": "宁洱哈尼族彝族自治县", + "value": "530821" + }, + { + "label": "墨江哈尼族自治县", + "value": "530822" + }, + { + "label": "景东彝族自治县", + "value": "530823" + }, + { + "label": "景谷傣族彝族自治县", + "value": "530824" + }, + { + "label": "镇沅彝族哈尼族拉祜族自治县", + "value": "530825" + }, + { + "label": "江城哈尼族彝族自治县", + "value": "530826" + }, + { + "label": "孟连傣族拉祜族佤族自治县", + "value": "530827" + }, + { + "label": "澜沧拉祜族自治县", + "value": "530828" + }, + { + "label": "西盟佤族自治县", + "value": "530829" + } + ], + [{ + "label": "临翔区", + "value": "530902" + }, + { + "label": "凤庆县", + "value": "530921" + }, + { + "label": "云县", + "value": "530922" + }, + { + "label": "永德县", + "value": "530923" + }, + { + "label": "镇康县", + "value": "530924" + }, + { + "label": "双江拉祜族佤族布朗族傣族自治县", + "value": "530925" + }, + { + "label": "耿马傣族佤族自治县", + "value": "530926" + }, + { + "label": "沧源佤族自治县", + "value": "530927" + } + ], + [{ + "label": "楚雄市", + "value": "532301" + }, + { + "label": "双柏县", + "value": "532322" + }, + { + "label": "牟定县", + "value": "532323" + }, + { + "label": "南华县", + "value": "532324" + }, + { + "label": "姚安县", + "value": "532325" + }, + { + "label": "大姚县", + "value": "532326" + }, + { + "label": "永仁县", + "value": "532327" + }, + { + "label": "元谋县", + "value": "532328" + }, + { + "label": "武定县", + "value": "532329" + }, + { + "label": "禄丰县", + "value": "532331" + } + ], + [{ + "label": "个旧市", + "value": "532501" + }, + { + "label": "开远市", + "value": "532502" + }, + { + "label": "蒙自市", + "value": "532503" + }, + { + "label": "弥勒市", + "value": "532504" + }, + { + "label": "屏边苗族自治县", + "value": "532523" + }, + { + "label": "建水县", + "value": "532524" + }, + { + "label": "石屏县", + "value": "532525" + }, + { + "label": "泸西县", + "value": "532527" + }, + { + "label": "元阳县", + "value": "532528" + }, + { + "label": "红河县", + "value": "532529" + }, + { + "label": "金平苗族瑶族傣族自治县", + "value": "532530" + }, + { + "label": "绿春县", + "value": "532531" + }, + { + "label": "河口瑶族自治县", + "value": "532532" + } + ], + [{ + "label": "文山市", + "value": "532601" + }, + { + "label": "砚山县", + "value": "532622" + }, + { + "label": "西畴县", + "value": "532623" + }, + { + "label": "麻栗坡县", + "value": "532624" + }, + { + "label": "马关县", + "value": "532625" + }, + { + "label": "丘北县", + "value": "532626" + }, + { + "label": "广南县", + "value": "532627" + }, + { + "label": "富宁县", + "value": "532628" + } + ], + [{ + "label": "景洪市", + "value": "532801" + }, + { + "label": "勐海县", + "value": "532822" + }, + { + "label": "勐腊县", + "value": "532823" + } + ], + [{ + "label": "大理市", + "value": "532901" + }, + { + "label": "漾濞彝族自治县", + "value": "532922" + }, + { + "label": "祥云县", + "value": "532923" + }, + { + "label": "宾川县", + "value": "532924" + }, + { + "label": "弥渡县", + "value": "532925" + }, + { + "label": "南涧彝族自治县", + "value": "532926" + }, + { + "label": "巍山彝族回族自治县", + "value": "532927" + }, + { + "label": "永平县", + "value": "532928" + }, + { + "label": "云龙县", + "value": "532929" + }, + { + "label": "洱源县", + "value": "532930" + }, + { + "label": "剑川县", + "value": "532931" + }, + { + "label": "鹤庆县", + "value": "532932" + } + ], + [{ + "label": "瑞丽市", + "value": "533102" + }, + { + "label": "芒市", + "value": "533103" + }, + { + "label": "梁河县", + "value": "533122" + }, + { + "label": "盈江县", + "value": "533123" + }, + { + "label": "陇川县", + "value": "533124" + } + ], + [{ + "label": "泸水市", + "value": "533301" + }, + { + "label": "福贡县", + "value": "533323" + }, + { + "label": "贡山独龙族怒族自治县", + "value": "533324" + }, + { + "label": "兰坪白族普米族自治县", + "value": "533325" + } + ], + [{ + "label": "香格里拉市", + "value": "533401" + }, + { + "label": "德钦县", + "value": "533422" + }, + { + "label": "维西傈僳族自治县", + "value": "533423" + } + ] + ], + [ + [{ + "label": "城关区", + "value": "540102" + }, + { + "label": "堆龙德庆区", + "value": "540103" + }, + { + "label": "林周县", + "value": "540121" + }, + { + "label": "当雄县", + "value": "540122" + }, + { + "label": "尼木县", + "value": "540123" + }, + { + "label": "曲水县", + "value": "540124" + }, + { + "label": "达孜县", + "value": "540126" + }, + { + "label": "墨竹工卡县", + "value": "540127" + }, + { + "label": "格尔木藏青工业园区", + "value": "540171" + }, + { + "label": "拉萨经济技术开发区", + "value": "540172" + }, + { + "label": "西藏文化旅游创意园区", + "value": "540173" + }, + { + "label": "达孜工业园区", + "value": "540174" + } + ], + [{ + "label": "桑珠孜区", + "value": "540202" + }, + { + "label": "南木林县", + "value": "540221" + }, + { + "label": "江孜县", + "value": "540222" + }, + { + "label": "定日县", + "value": "540223" + }, + { + "label": "萨迦县", + "value": "540224" + }, + { + "label": "拉孜县", + "value": "540225" + }, + { + "label": "昂仁县", + "value": "540226" + }, + { + "label": "谢通门县", + "value": "540227" + }, + { + "label": "白朗县", + "value": "540228" + }, + { + "label": "仁布县", + "value": "540229" + }, + { + "label": "康马县", + "value": "540230" + }, + { + "label": "定结县", + "value": "540231" + }, + { + "label": "仲巴县", + "value": "540232" + }, + { + "label": "亚东县", + "value": "540233" + }, + { + "label": "吉隆县", + "value": "540234" + }, + { + "label": "聂拉木县", + "value": "540235" + }, + { + "label": "萨嘎县", + "value": "540236" + }, + { + "label": "岗巴县", + "value": "540237" + } + ], + [{ + "label": "卡若区", + "value": "540302" + }, + { + "label": "江达县", + "value": "540321" + }, + { + "label": "贡觉县", + "value": "540322" + }, + { + "label": "类乌齐县", + "value": "540323" + }, + { + "label": "丁青县", + "value": "540324" + }, + { + "label": "察雅县", + "value": "540325" + }, + { + "label": "八宿县", + "value": "540326" + }, + { + "label": "左贡县", + "value": "540327" + }, + { + "label": "芒康县", + "value": "540328" + }, + { + "label": "洛隆县", + "value": "540329" + }, + { + "label": "边坝县", + "value": "540330" + } + ], + [{ + "label": "巴宜区", + "value": "540402" + }, + { + "label": "工布江达县", + "value": "540421" + }, + { + "label": "米林县", + "value": "540422" + }, + { + "label": "墨脱县", + "value": "540423" + }, + { + "label": "波密县", + "value": "540424" + }, + { + "label": "察隅县", + "value": "540425" + }, + { + "label": "朗县", + "value": "540426" + } + ], + [{ + "label": "乃东区", + "value": "540502" + }, + { + "label": "扎囊县", + "value": "540521" + }, + { + "label": "贡嘎县", + "value": "540522" + }, + { + "label": "桑日县", + "value": "540523" + }, + { + "label": "琼结县", + "value": "540524" + }, + { + "label": "曲松县", + "value": "540525" + }, + { + "label": "措美县", + "value": "540526" + }, + { + "label": "洛扎县", + "value": "540527" + }, + { + "label": "加查县", + "value": "540528" + }, + { + "label": "隆子县", + "value": "540529" + }, + { + "label": "错那县", + "value": "540530" + }, + { + "label": "浪卡子县", + "value": "540531" + } + ], + [{ + "label": "那曲县", + "value": "542421" + }, + { + "label": "嘉黎县", + "value": "542422" + }, + { + "label": "比如县", + "value": "542423" + }, + { + "label": "聂荣县", + "value": "542424" + }, + { + "label": "安多县", + "value": "542425" + }, + { + "label": "申扎县", + "value": "542426" + }, + { + "label": "索县", + "value": "542427" + }, + { + "label": "班戈县", + "value": "542428" + }, + { + "label": "巴青县", + "value": "542429" + }, + { + "label": "尼玛县", + "value": "542430" + }, + { + "label": "双湖县", + "value": "542431" + } + ], + [{ + "label": "普兰县", + "value": "542521" + }, + { + "label": "札达县", + "value": "542522" + }, + { + "label": "噶尔县", + "value": "542523" + }, + { + "label": "日土县", + "value": "542524" + }, + { + "label": "革吉县", + "value": "542525" + }, + { + "label": "改则县", + "value": "542526" + }, + { + "label": "措勤县", + "value": "542527" + } + ] + ], + [ + [{ + "label": "新城区", + "value": "610102" + }, + { + "label": "碑林区", + "value": "610103" + }, + { + "label": "莲湖区", + "value": "610104" + }, + { + "label": "灞桥区", + "value": "610111" + }, + { + "label": "未央区", + "value": "610112" + }, + { + "label": "雁塔区", + "value": "610113" + }, + { + "label": "阎良区", + "value": "610114" + }, + { + "label": "临潼区", + "value": "610115" + }, + { + "label": "长安区", + "value": "610116" + }, + { + "label": "高陵区", + "value": "610117" + }, + { + "label": "鄠邑区", + "value": "610118" + }, + { + "label": "蓝田县", + "value": "610122" + }, + { + "label": "周至县", + "value": "610124" + } + ], + [{ + "label": "王益区", + "value": "610202" + }, + { + "label": "印台区", + "value": "610203" + }, + { + "label": "耀州区", + "value": "610204" + }, + { + "label": "宜君县", + "value": "610222" + } + ], + [{ + "label": "渭滨区", + "value": "610302" + }, + { + "label": "金台区", + "value": "610303" + }, + { + "label": "陈仓区", + "value": "610304" + }, + { + "label": "凤翔县", + "value": "610322" + }, + { + "label": "岐山县", + "value": "610323" + }, + { + "label": "扶风县", + "value": "610324" + }, + { + "label": "眉县", + "value": "610326" + }, + { + "label": "陇县", + "value": "610327" + }, + { + "label": "千阳县", + "value": "610328" + }, + { + "label": "麟游县", + "value": "610329" + }, + { + "label": "凤县", + "value": "610330" + }, + { + "label": "太白县", + "value": "610331" + } + ], + [{ + "label": "秦都区", + "value": "610402" + }, + { + "label": "杨陵区", + "value": "610403" + }, + { + "label": "渭城区", + "value": "610404" + }, + { + "label": "三原县", + "value": "610422" + }, + { + "label": "泾阳县", + "value": "610423" + }, + { + "label": "乾县", + "value": "610424" + }, + { + "label": "礼泉县", + "value": "610425" + }, + { + "label": "永寿县", + "value": "610426" + }, + { + "label": "彬县", + "value": "610427" + }, + { + "label": "长武县", + "value": "610428" + }, + { + "label": "旬邑县", + "value": "610429" + }, + { + "label": "淳化县", + "value": "610430" + }, + { + "label": "武功县", + "value": "610431" + }, + { + "label": "兴平市", + "value": "610481" + } + ], + [{ + "label": "临渭区", + "value": "610502" + }, + { + "label": "华州区", + "value": "610503" + }, + { + "label": "潼关县", + "value": "610522" + }, + { + "label": "大荔县", + "value": "610523" + }, + { + "label": "合阳县", + "value": "610524" + }, + { + "label": "澄城县", + "value": "610525" + }, + { + "label": "蒲城县", + "value": "610526" + }, + { + "label": "白水县", + "value": "610527" + }, + { + "label": "富平县", + "value": "610528" + }, + { + "label": "韩城市", + "value": "610581" + }, + { + "label": "华阴市", + "value": "610582" + } + ], + [{ + "label": "宝塔区", + "value": "610602" + }, + { + "label": "安塞区", + "value": "610603" + }, + { + "label": "延长县", + "value": "610621" + }, + { + "label": "延川县", + "value": "610622" + }, + { + "label": "子长县", + "value": "610623" + }, + { + "label": "志丹县", + "value": "610625" + }, + { + "label": "吴起县", + "value": "610626" + }, + { + "label": "甘泉县", + "value": "610627" + }, + { + "label": "富县", + "value": "610628" + }, + { + "label": "洛川县", + "value": "610629" + }, + { + "label": "宜川县", + "value": "610630" + }, + { + "label": "黄龙县", + "value": "610631" + }, + { + "label": "黄陵县", + "value": "610632" + } + ], + [{ + "label": "汉台区", + "value": "610702" + }, + { + "label": "南郑区", + "value": "610703" + }, + { + "label": "城固县", + "value": "610722" + }, + { + "label": "洋县", + "value": "610723" + }, + { + "label": "西乡县", + "value": "610724" + }, + { + "label": "勉县", + "value": "610725" + }, + { + "label": "宁强县", + "value": "610726" + }, + { + "label": "略阳县", + "value": "610727" + }, + { + "label": "镇巴县", + "value": "610728" + }, + { + "label": "留坝县", + "value": "610729" + }, + { + "label": "佛坪县", + "value": "610730" + } + ], + [{ + "label": "榆阳区", + "value": "610802" + }, + { + "label": "横山区", + "value": "610803" + }, + { + "label": "府谷县", + "value": "610822" + }, + { + "label": "靖边县", + "value": "610824" + }, + { + "label": "定边县", + "value": "610825" + }, + { + "label": "绥德县", + "value": "610826" + }, + { + "label": "米脂县", + "value": "610827" + }, + { + "label": "佳县", + "value": "610828" + }, + { + "label": "吴堡县", + "value": "610829" + }, + { + "label": "清涧县", + "value": "610830" + }, + { + "label": "子洲县", + "value": "610831" + }, + { + "label": "神木市", + "value": "610881" + } + ], + [{ + "label": "汉滨区", + "value": "610902" + }, + { + "label": "汉阴县", + "value": "610921" + }, + { + "label": "石泉县", + "value": "610922" + }, + { + "label": "宁陕县", + "value": "610923" + }, + { + "label": "紫阳县", + "value": "610924" + }, + { + "label": "岚皋县", + "value": "610925" + }, + { + "label": "平利县", + "value": "610926" + }, + { + "label": "镇坪县", + "value": "610927" + }, + { + "label": "旬阳县", + "value": "610928" + }, + { + "label": "白河县", + "value": "610929" + } + ], + [{ + "label": "商州区", + "value": "611002" + }, + { + "label": "洛南县", + "value": "611021" + }, + { + "label": "丹凤县", + "value": "611022" + }, + { + "label": "商南县", + "value": "611023" + }, + { + "label": "山阳县", + "value": "611024" + }, + { + "label": "镇安县", + "value": "611025" + }, + { + "label": "柞水县", + "value": "611026" + } + ] + ], + [ + [{ + "label": "城关区", + "value": "620102" + }, + { + "label": "七里河区", + "value": "620103" + }, + { + "label": "西固区", + "value": "620104" + }, + { + "label": "安宁区", + "value": "620105" + }, + { + "label": "红古区", + "value": "620111" + }, + { + "label": "永登县", + "value": "620121" + }, + { + "label": "皋兰县", + "value": "620122" + }, + { + "label": "榆中县", + "value": "620123" + }, + { + "label": "兰州新区", + "value": "620171" + } + ], + [{ + "label": "嘉峪关市", + "value": "620201" + }], + [{ + "label": "金川区", + "value": "620302" + }, + { + "label": "永昌县", + "value": "620321" + } + ], + [{ + "label": "白银区", + "value": "620402" + }, + { + "label": "平川区", + "value": "620403" + }, + { + "label": "靖远县", + "value": "620421" + }, + { + "label": "会宁县", + "value": "620422" + }, + { + "label": "景泰县", + "value": "620423" + } + ], + [{ + "label": "秦州区", + "value": "620502" + }, + { + "label": "麦积区", + "value": "620503" + }, + { + "label": "清水县", + "value": "620521" + }, + { + "label": "秦安县", + "value": "620522" + }, + { + "label": "甘谷县", + "value": "620523" + }, + { + "label": "武山县", + "value": "620524" + }, + { + "label": "张家川回族自治县", + "value": "620525" + } + ], + [{ + "label": "凉州区", + "value": "620602" + }, + { + "label": "民勤县", + "value": "620621" + }, + { + "label": "古浪县", + "value": "620622" + }, + { + "label": "天祝藏族自治县", + "value": "620623" + } + ], + [{ + "label": "甘州区", + "value": "620702" + }, + { + "label": "肃南裕固族自治县", + "value": "620721" + }, + { + "label": "民乐县", + "value": "620722" + }, + { + "label": "临泽县", + "value": "620723" + }, + { + "label": "高台县", + "value": "620724" + }, + { + "label": "山丹县", + "value": "620725" + } + ], + [{ + "label": "崆峒区", + "value": "620802" + }, + { + "label": "泾川县", + "value": "620821" + }, + { + "label": "灵台县", + "value": "620822" + }, + { + "label": "崇信县", + "value": "620823" + }, + { + "label": "华亭县", + "value": "620824" + }, + { + "label": "庄浪县", + "value": "620825" + }, + { + "label": "静宁县", + "value": "620826" + }, + { + "label": "平凉工业园区", + "value": "620871" + } + ], + [{ + "label": "肃州区", + "value": "620902" + }, + { + "label": "金塔县", + "value": "620921" + }, + { + "label": "瓜州县", + "value": "620922" + }, + { + "label": "肃北蒙古族自治县", + "value": "620923" + }, + { + "label": "阿克塞哈萨克族自治县", + "value": "620924" + }, + { + "label": "玉门市", + "value": "620981" + }, + { + "label": "敦煌市", + "value": "620982" + } + ], + [{ + "label": "西峰区", + "value": "621002" + }, + { + "label": "庆城县", + "value": "621021" + }, + { + "label": "环县", + "value": "621022" + }, + { + "label": "华池县", + "value": "621023" + }, + { + "label": "合水县", + "value": "621024" + }, + { + "label": "正宁县", + "value": "621025" + }, + { + "label": "宁县", + "value": "621026" + }, + { + "label": "镇原县", + "value": "621027" + } + ], + [{ + "label": "安定区", + "value": "621102" + }, + { + "label": "通渭县", + "value": "621121" + }, + { + "label": "陇西县", + "value": "621122" + }, + { + "label": "渭源县", + "value": "621123" + }, + { + "label": "临洮县", + "value": "621124" + }, + { + "label": "漳县", + "value": "621125" + }, + { + "label": "岷县", + "value": "621126" + } + ], + [{ + "label": "武都区", + "value": "621202" + }, + { + "label": "成县", + "value": "621221" + }, + { + "label": "文县", + "value": "621222" + }, + { + "label": "宕昌县", + "value": "621223" + }, + { + "label": "康县", + "value": "621224" + }, + { + "label": "西和县", + "value": "621225" + }, + { + "label": "礼县", + "value": "621226" + }, + { + "label": "徽县", + "value": "621227" + }, + { + "label": "两当县", + "value": "621228" + } + ], + [{ + "label": "临夏市", + "value": "622901" + }, + { + "label": "临夏县", + "value": "622921" + }, + { + "label": "康乐县", + "value": "622922" + }, + { + "label": "永靖县", + "value": "622923" + }, + { + "label": "广河县", + "value": "622924" + }, + { + "label": "和政县", + "value": "622925" + }, + { + "label": "东乡族自治县", + "value": "622926" + }, + { + "label": "积石山保安族东乡族撒拉族自治县", + "value": "622927" + } + ], + [{ + "label": "合作市", + "value": "623001" + }, + { + "label": "临潭县", + "value": "623021" + }, + { + "label": "卓尼县", + "value": "623022" + }, + { + "label": "舟曲县", + "value": "623023" + }, + { + "label": "迭部县", + "value": "623024" + }, + { + "label": "玛曲县", + "value": "623025" + }, + { + "label": "碌曲县", + "value": "623026" + }, + { + "label": "夏河县", + "value": "623027" + } + ] + ], + [ + [{ + "label": "城东区", + "value": "630102" + }, + { + "label": "城中区", + "value": "630103" + }, + { + "label": "城西区", + "value": "630104" + }, + { + "label": "城北区", + "value": "630105" + }, + { + "label": "大通回族土族自治县", + "value": "630121" + }, + { + "label": "湟中县", + "value": "630122" + }, + { + "label": "湟源县", + "value": "630123" + } + ], + [{ + "label": "乐都区", + "value": "630202" + }, + { + "label": "平安区", + "value": "630203" + }, + { + "label": "民和回族土族自治县", + "value": "630222" + }, + { + "label": "互助土族自治县", + "value": "630223" + }, + { + "label": "化隆回族自治县", + "value": "630224" + }, + { + "label": "循化撒拉族自治县", + "value": "630225" + } + ], + [{ + "label": "门源回族自治县", + "value": "632221" + }, + { + "label": "祁连县", + "value": "632222" + }, + { + "label": "海晏县", + "value": "632223" + }, + { + "label": "刚察县", + "value": "632224" + } + ], + [{ + "label": "同仁县", + "value": "632321" + }, + { + "label": "尖扎县", + "value": "632322" + }, + { + "label": "泽库县", + "value": "632323" + }, + { + "label": "河南蒙古族自治县", + "value": "632324" + } + ], + [{ + "label": "共和县", + "value": "632521" + }, + { + "label": "同德县", + "value": "632522" + }, + { + "label": "贵德县", + "value": "632523" + }, + { + "label": "兴海县", + "value": "632524" + }, + { + "label": "贵南县", + "value": "632525" + } + ], + [{ + "label": "玛沁县", + "value": "632621" + }, + { + "label": "班玛县", + "value": "632622" + }, + { + "label": "甘德县", + "value": "632623" + }, + { + "label": "达日县", + "value": "632624" + }, + { + "label": "久治县", + "value": "632625" + }, + { + "label": "玛多县", + "value": "632626" + } + ], + [{ + "label": "玉树市", + "value": "632701" + }, + { + "label": "杂多县", + "value": "632722" + }, + { + "label": "称多县", + "value": "632723" + }, + { + "label": "治多县", + "value": "632724" + }, + { + "label": "囊谦县", + "value": "632725" + }, + { + "label": "曲麻莱县", + "value": "632726" + } + ], + [{ + "label": "格尔木市", + "value": "632801" + }, + { + "label": "德令哈市", + "value": "632802" + }, + { + "label": "乌兰县", + "value": "632821" + }, + { + "label": "都兰县", + "value": "632822" + }, + { + "label": "天峻县", + "value": "632823" + }, + { + "label": "大柴旦行政委员会", + "value": "632857" + }, + { + "label": "冷湖行政委员会", + "value": "632858" + }, + { + "label": "茫崖行政委员会", + "value": "632859" + } + ] + ], + [ + [{ + "label": "兴庆区", + "value": "640104" + }, + { + "label": "西夏区", + "value": "640105" + }, + { + "label": "金凤区", + "value": "640106" + }, + { + "label": "永宁县", + "value": "640121" + }, + { + "label": "贺兰县", + "value": "640122" + }, + { + "label": "灵武市", + "value": "640181" + } + ], + [{ + "label": "大武口区", + "value": "640202" + }, + { + "label": "惠农区", + "value": "640205" + }, + { + "label": "平罗县", + "value": "640221" + } + ], + [{ + "label": "利通区", + "value": "640302" + }, + { + "label": "红寺堡区", + "value": "640303" + }, + { + "label": "盐池县", + "value": "640323" + }, + { + "label": "同心县", + "value": "640324" + }, + { + "label": "青铜峡市", + "value": "640381" + } + ], + [{ + "label": "原州区", + "value": "640402" + }, + { + "label": "西吉县", + "value": "640422" + }, + { + "label": "隆德县", + "value": "640423" + }, + { + "label": "泾源县", + "value": "640424" + }, + { + "label": "彭阳县", + "value": "640425" + } + ], + [{ + "label": "沙坡头区", + "value": "640502" + }, + { + "label": "中宁县", + "value": "640521" + }, + { + "label": "海原县", + "value": "640522" + } + ] + ], + [ + [{ + "label": "天山区", + "value": "650102" + }, + { + "label": "沙依巴克区", + "value": "650103" + }, + { + "label": "新市区", + "value": "650104" + }, + { + "label": "水磨沟区", + "value": "650105" + }, + { + "label": "头屯河区", + "value": "650106" + }, + { + "label": "达坂城区", + "value": "650107" + }, + { + "label": "米东区", + "value": "650109" + }, + { + "label": "乌鲁木齐县", + "value": "650121" + }, + { + "label": "乌鲁木齐经济技术开发区", + "value": "650171" + }, + { + "label": "乌鲁木齐高新技术产业开发区", + "value": "650172" + } + ], + [{ + "label": "独山子区", + "value": "650202" + }, + { + "label": "克拉玛依区", + "value": "650203" + }, + { + "label": "白碱滩区", + "value": "650204" + }, + { + "label": "乌尔禾区", + "value": "650205" + } + ], + [{ + "label": "高昌区", + "value": "650402" + }, + { + "label": "鄯善县", + "value": "650421" + }, + { + "label": "托克逊县", + "value": "650422" + } + ], + [{ + "label": "伊州区", + "value": "650502" + }, + { + "label": "巴里坤哈萨克自治县", + "value": "650521" + }, + { + "label": "伊吾县", + "value": "650522" + } + ], + [{ + "label": "昌吉市", + "value": "652301" + }, + { + "label": "阜康市", + "value": "652302" + }, + { + "label": "呼图壁县", + "value": "652323" + }, + { + "label": "玛纳斯县", + "value": "652324" + }, + { + "label": "奇台县", + "value": "652325" + }, + { + "label": "吉木萨尔县", + "value": "652327" + }, + { + "label": "木垒哈萨克自治县", + "value": "652328" + } + ], + [{ + "label": "博乐市", + "value": "652701" + }, + { + "label": "阿拉山口市", + "value": "652702" + }, + { + "label": "精河县", + "value": "652722" + }, + { + "label": "温泉县", + "value": "652723" + } + ], + [{ + "label": "库尔勒市", + "value": "652801" + }, + { + "label": "轮台县", + "value": "652822" + }, + { + "label": "尉犁县", + "value": "652823" + }, + { + "label": "若羌县", + "value": "652824" + }, + { + "label": "且末县", + "value": "652825" + }, + { + "label": "焉耆回族自治县", + "value": "652826" + }, + { + "label": "和静县", + "value": "652827" + }, + { + "label": "和硕县", + "value": "652828" + }, + { + "label": "博湖县", + "value": "652829" + }, + { + "label": "库尔勒经济技术开发区", + "value": "652871" + } + ], + [{ + "label": "阿克苏市", + "value": "652901" + }, + { + "label": "温宿县", + "value": "652922" + }, + { + "label": "库车县", + "value": "652923" + }, + { + "label": "沙雅县", + "value": "652924" + }, + { + "label": "新和县", + "value": "652925" + }, + { + "label": "拜城县", + "value": "652926" + }, + { + "label": "乌什县", + "value": "652927" + }, + { + "label": "阿瓦提县", + "value": "652928" + }, + { + "label": "柯坪县", + "value": "652929" + } + ], + [{ + "label": "阿图什市", + "value": "653001" + }, + { + "label": "阿克陶县", + "value": "653022" + }, + { + "label": "阿合奇县", + "value": "653023" + }, + { + "label": "乌恰县", + "value": "653024" + } + ], + [{ + "label": "喀什市", + "value": "653101" + }, + { + "label": "疏附县", + "value": "653121" + }, + { + "label": "疏勒县", + "value": "653122" + }, + { + "label": "英吉沙县", + "value": "653123" + }, + { + "label": "泽普县", + "value": "653124" + }, + { + "label": "莎车县", + "value": "653125" + }, + { + "label": "叶城县", + "value": "653126" + }, + { + "label": "麦盖提县", + "value": "653127" + }, + { + "label": "岳普湖县", + "value": "653128" + }, + { + "label": "伽师县", + "value": "653129" + }, + { + "label": "巴楚县", + "value": "653130" + }, + { + "label": "塔什库尔干塔吉克自治县", + "value": "653131" + } + ], + [{ + "label": "和田市", + "value": "653201" + }, + { + "label": "和田县", + "value": "653221" + }, + { + "label": "墨玉县", + "value": "653222" + }, + { + "label": "皮山县", + "value": "653223" + }, + { + "label": "洛浦县", + "value": "653224" + }, + { + "label": "策勒县", + "value": "653225" + }, + { + "label": "于田县", + "value": "653226" + }, + { + "label": "民丰县", + "value": "653227" + } + ], + [{ + "label": "伊宁市", + "value": "654002" + }, + { + "label": "奎屯市", + "value": "654003" + }, + { + "label": "霍尔果斯市", + "value": "654004" + }, + { + "label": "伊宁县", + "value": "654021" + }, + { + "label": "察布查尔锡伯自治县", + "value": "654022" + }, + { + "label": "霍城县", + "value": "654023" + }, + { + "label": "巩留县", + "value": "654024" + }, + { + "label": "新源县", + "value": "654025" + }, + { + "label": "昭苏县", + "value": "654026" + }, + { + "label": "特克斯县", + "value": "654027" + }, + { + "label": "尼勒克县", + "value": "654028" + } + ], + [{ + "label": "塔城市", + "value": "654201" + }, + { + "label": "乌苏市", + "value": "654202" + }, + { + "label": "额敏县", + "value": "654221" + }, + { + "label": "沙湾县", + "value": "654223" + }, + { + "label": "托里县", + "value": "654224" + }, + { + "label": "裕民县", + "value": "654225" + }, + { + "label": "和布克赛尔蒙古自治县", + "value": "654226" + } + ], + [{ + "label": "阿勒泰市", + "value": "654301" + }, + { + "label": "布尔津县", + "value": "654321" + }, + { + "label": "富蕴县", + "value": "654322" + }, + { + "label": "福海县", + "value": "654323" + }, + { + "label": "哈巴河县", + "value": "654324" + }, + { + "label": "青河县", + "value": "654325" + }, + { + "label": "吉木乃县", + "value": "654326" + } + ], + [{ + "label": "石河子市", + "value": "659001" + }, + { + "label": "阿拉尔市", + "value": "659002" + }, + { + "label": "图木舒克市", + "value": "659003" + }, + { + "label": "五家渠市", + "value": "659004" + }, + { + "label": "铁门关市", + "value": "659006" + } + ] + ], + [ + [{ + "label": "台北", + "value": "660101" + }], + [{ + "label": "高雄", + "value": "660201" + }], + [{ + "label": "基隆", + "value": "660301" + }], + [{ + "label": "台中", + "value": "660401" + }], + [{ + "label": "台南", + "value": "660501" + }], + [{ + "label": "新竹", + "value": "660601" + }], + [{ + "label": "嘉义", + "value": "660701" + }], + [{ + "label": "宜兰", + "value": "660801" + }], + [{ + "label": "桃园", + "value": "660901" + }], + [{ + "label": "苗栗", + "value": "661001" + }], + [{ + "label": "彰化", + "value": "661101" + }], + [{ + "label": "南投", + "value": "661201" + }], + [{ + "label": "云林", + "value": "661301" + }], + [{ + "label": "屏东", + "value": "661401" + }], + [{ + "label": "台东", + "value": "661501" + }], + [{ + "label": "花莲", + "value": "661601" + }], + [{ + "label": "澎湖", + "value": "661701" + }] + ], + [ + [{ + "label": "香港岛", + "value": "670101" + }], + [{ + "label": "九龙", + "value": "670201" + }], + [{ + "label": "新界", + "value": "670301" + }] + ], + [ + [{ + "label": "澳门半岛", + "value": "680101" + }], + [{ + "label": "氹仔岛", + "value": "680201" + }], + [{ + "label": "路环岛", + "value": "680301" + }], + [{ + "label": "路氹城", + "value": "680401" + }] + ] +] +export default areaData; diff --git a/src/components/mpvue-citypicker/city-data/city.js b/src/components/mpvue-citypicker/city-data/city.js new file mode 100644 index 0000000..8c1dc26 --- /dev/null +++ b/src/components/mpvue-citypicker/city-data/city.js @@ -0,0 +1,1503 @@ +/* eslint-disable */ +var cityData = [ + [{ + "label": "市辖区", + "value": "1101" + }], + [{ + "label": "市辖区", + "value": "1201" + }], + [{ + "label": "石家庄市", + "value": "1301" + }, + { + "label": "唐山市", + "value": "1302" + }, + { + "label": "秦皇岛市", + "value": "1303" + }, + { + "label": "邯郸市", + "value": "1304" + }, + { + "label": "邢台市", + "value": "1305" + }, + { + "label": "保定市", + "value": "1306" + }, + { + "label": "张家口市", + "value": "1307" + }, + { + "label": "承德市", + "value": "1308" + }, + { + "label": "沧州市", + "value": "1309" + }, + { + "label": "廊坊市", + "value": "1310" + }, + { + "label": "衡水市", + "value": "1311" + } + ], + [{ + "label": "太原市", + "value": "1401" + }, + { + "label": "大同市", + "value": "1402" + }, + { + "label": "阳泉市", + "value": "1403" + }, + { + "label": "长治市", + "value": "1404" + }, + { + "label": "晋城市", + "value": "1405" + }, + { + "label": "朔州市", + "value": "1406" + }, + { + "label": "晋中市", + "value": "1407" + }, + { + "label": "运城市", + "value": "1408" + }, + { + "label": "忻州市", + "value": "1409" + }, + { + "label": "临汾市", + "value": "1410" + }, + { + "label": "吕梁市", + "value": "1411" + } + ], + [{ + "label": "呼和浩特市", + "value": "1501" + }, + { + "label": "包头市", + "value": "1502" + }, + { + "label": "乌海市", + "value": "1503" + }, + { + "label": "赤峰市", + "value": "1504" + }, + { + "label": "通辽市", + "value": "1505" + }, + { + "label": "鄂尔多斯市", + "value": "1506" + }, + { + "label": "呼伦贝尔市", + "value": "1507" + }, + { + "label": "巴彦淖尔市", + "value": "1508" + }, + { + "label": "乌兰察布市", + "value": "1509" + }, + { + "label": "兴安盟", + "value": "1522" + }, + { + "label": "锡林郭勒盟", + "value": "1525" + }, + { + "label": "阿拉善盟", + "value": "1529" + } + ], + [{ + "label": "沈阳市", + "value": "2101" + }, + { + "label": "大连市", + "value": "2102" + }, + { + "label": "鞍山市", + "value": "2103" + }, + { + "label": "抚顺市", + "value": "2104" + }, + { + "label": "本溪市", + "value": "2105" + }, + { + "label": "丹东市", + "value": "2106" + }, + { + "label": "锦州市", + "value": "2107" + }, + { + "label": "营口市", + "value": "2108" + }, + { + "label": "阜新市", + "value": "2109" + }, + { + "label": "辽阳市", + "value": "2110" + }, + { + "label": "盘锦市", + "value": "2111" + }, + { + "label": "铁岭市", + "value": "2112" + }, + { + "label": "朝阳市", + "value": "2113" + }, + { + "label": "葫芦岛市", + "value": "2114" + } + ], + [{ + "label": "长春市", + "value": "2201" + }, + { + "label": "吉林市", + "value": "2202" + }, + { + "label": "四平市", + "value": "2203" + }, + { + "label": "辽源市", + "value": "2204" + }, + { + "label": "通化市", + "value": "2205" + }, + { + "label": "白山市", + "value": "2206" + }, + { + "label": "松原市", + "value": "2207" + }, + { + "label": "白城市", + "value": "2208" + }, + { + "label": "延边朝鲜族自治州", + "value": "2224" + } + ], + [{ + "label": "哈尔滨市", + "value": "2301" + }, + { + "label": "齐齐哈尔市", + "value": "2302" + }, + { + "label": "鸡西市", + "value": "2303" + }, + { + "label": "鹤岗市", + "value": "2304" + }, + { + "label": "双鸭山市", + "value": "2305" + }, + { + "label": "大庆市", + "value": "2306" + }, + { + "label": "伊春市", + "value": "2307" + }, + { + "label": "佳木斯市", + "value": "2308" + }, + { + "label": "七台河市", + "value": "2309" + }, + { + "label": "牡丹江市", + "value": "2310" + }, + { + "label": "黑河市", + "value": "2311" + }, + { + "label": "绥化市", + "value": "2312" + }, + { + "label": "大兴安岭地区", + "value": "2327" + } + ], + [{ + "label": "市辖区", + "value": "3101" + }], + [{ + "label": "南京市", + "value": "3201" + }, + { + "label": "无锡市", + "value": "3202" + }, + { + "label": "徐州市", + "value": "3203" + }, + { + "label": "常州市", + "value": "3204" + }, + { + "label": "苏州市", + "value": "3205" + }, + { + "label": "南通市", + "value": "3206" + }, + { + "label": "连云港市", + "value": "3207" + }, + { + "label": "淮安市", + "value": "3208" + }, + { + "label": "盐城市", + "value": "3209" + }, + { + "label": "扬州市", + "value": "3210" + }, + { + "label": "镇江市", + "value": "3211" + }, + { + "label": "泰州市", + "value": "3212" + }, + { + "label": "宿迁市", + "value": "3213" + } + ], + [{ + "label": "杭州市", + "value": "3301" + }, + { + "label": "宁波市", + "value": "3302" + }, + { + "label": "温州市", + "value": "3303" + }, + { + "label": "嘉兴市", + "value": "3304" + }, + { + "label": "湖州市", + "value": "3305" + }, + { + "label": "绍兴市", + "value": "3306" + }, + { + "label": "金华市", + "value": "3307" + }, + { + "label": "衢州市", + "value": "3308" + }, + { + "label": "舟山市", + "value": "3309" + }, + { + "label": "台州市", + "value": "3310" + }, + { + "label": "丽水市", + "value": "3311" + } + ], + [{ + "label": "合肥市", + "value": "3401" + }, + { + "label": "芜湖市", + "value": "3402" + }, + { + "label": "蚌埠市", + "value": "3403" + }, + { + "label": "淮南市", + "value": "3404" + }, + { + "label": "马鞍山市", + "value": "3405" + }, + { + "label": "淮北市", + "value": "3406" + }, + { + "label": "铜陵市", + "value": "3407" + }, + { + "label": "安庆市", + "value": "3408" + }, + { + "label": "黄山市", + "value": "3410" + }, + { + "label": "滁州市", + "value": "3411" + }, + { + "label": "阜阳市", + "value": "3412" + }, + { + "label": "宿州市", + "value": "3413" + }, + { + "label": "六安市", + "value": "3415" + }, + { + "label": "亳州市", + "value": "3416" + }, + { + "label": "池州市", + "value": "3417" + }, + { + "label": "宣城市", + "value": "3418" + } + ], + [{ + "label": "福州市", + "value": "3501" + }, + { + "label": "厦门市", + "value": "3502" + }, + { + "label": "莆田市", + "value": "3503" + }, + { + "label": "三明市", + "value": "3504" + }, + { + "label": "泉州市", + "value": "3505" + }, + { + "label": "漳州市", + "value": "3506" + }, + { + "label": "南平市", + "value": "3507" + }, + { + "label": "龙岩市", + "value": "3508" + }, + { + "label": "宁德市", + "value": "3509" + } + ], + [{ + "label": "南昌市", + "value": "3601" + }, + { + "label": "景德镇市", + "value": "3602" + }, + { + "label": "萍乡市", + "value": "3603" + }, + { + "label": "九江市", + "value": "3604" + }, + { + "label": "新余市", + "value": "3605" + }, + { + "label": "鹰潭市", + "value": "3606" + }, + { + "label": "赣州市", + "value": "3607" + }, + { + "label": "吉安市", + "value": "3608" + }, + { + "label": "宜春市", + "value": "3609" + }, + { + "label": "抚州市", + "value": "3610" + }, + { + "label": "上饶市", + "value": "3611" + } + ], + [{ + "label": "济南市", + "value": "3701" + }, + { + "label": "青岛市", + "value": "3702" + }, + { + "label": "淄博市", + "value": "3703" + }, + { + "label": "枣庄市", + "value": "3704" + }, + { + "label": "东营市", + "value": "3705" + }, + { + "label": "烟台市", + "value": "3706" + }, + { + "label": "潍坊市", + "value": "3707" + }, + { + "label": "济宁市", + "value": "3708" + }, + { + "label": "泰安市", + "value": "3709" + }, + { + "label": "威海市", + "value": "3710" + }, + { + "label": "日照市", + "value": "3711" + }, + { + "label": "莱芜市", + "value": "3712" + }, + { + "label": "临沂市", + "value": "3713" + }, + { + "label": "德州市", + "value": "3714" + }, + { + "label": "聊城市", + "value": "3715" + }, + { + "label": "滨州市", + "value": "3716" + }, + { + "label": "菏泽市", + "value": "3717" + } + ], + [{ + "label": "郑州市", + "value": "4101" + }, + { + "label": "开封市", + "value": "4102" + }, + { + "label": "洛阳市", + "value": "4103" + }, + { + "label": "平顶山市", + "value": "4104" + }, + { + "label": "安阳市", + "value": "4105" + }, + { + "label": "鹤壁市", + "value": "4106" + }, + { + "label": "新乡市", + "value": "4107" + }, + { + "label": "焦作市", + "value": "4108" + }, + { + "label": "濮阳市", + "value": "4109" + }, + { + "label": "许昌市", + "value": "4110" + }, + { + "label": "漯河市", + "value": "4111" + }, + { + "label": "三门峡市", + "value": "4112" + }, + { + "label": "南阳市", + "value": "4113" + }, + { + "label": "商丘市", + "value": "4114" + }, + { + "label": "信阳市", + "value": "4115" + }, + { + "label": "周口市", + "value": "4116" + }, + { + "label": "驻马店市", + "value": "4117" + }, + { + "label": "省直辖县级行政区划", + "value": "4190" + } + ], + [{ + "label": "武汉市", + "value": "4201" + }, + { + "label": "黄石市", + "value": "4202" + }, + { + "label": "十堰市", + "value": "4203" + }, + { + "label": "宜昌市", + "value": "4205" + }, + { + "label": "襄阳市", + "value": "4206" + }, + { + "label": "鄂州市", + "value": "4207" + }, + { + "label": "荆门市", + "value": "4208" + }, + { + "label": "孝感市", + "value": "4209" + }, + { + "label": "荆州市", + "value": "4210" + }, + { + "label": "黄冈市", + "value": "4211" + }, + { + "label": "咸宁市", + "value": "4212" + }, + { + "label": "随州市", + "value": "4213" + }, + { + "label": "恩施土家族苗族自治州", + "value": "4228" + }, + { + "label": "省直辖县级行政区划", + "value": "4290" + } + ], + [{ + "label": "长沙市", + "value": "4301" + }, + { + "label": "株洲市", + "value": "4302" + }, + { + "label": "湘潭市", + "value": "4303" + }, + { + "label": "衡阳市", + "value": "4304" + }, + { + "label": "邵阳市", + "value": "4305" + }, + { + "label": "岳阳市", + "value": "4306" + }, + { + "label": "常德市", + "value": "4307" + }, + { + "label": "张家界市", + "value": "4308" + }, + { + "label": "益阳市", + "value": "4309" + }, + { + "label": "郴州市", + "value": "4310" + }, + { + "label": "永州市", + "value": "4311" + }, + { + "label": "怀化市", + "value": "4312" + }, + { + "label": "娄底市", + "value": "4313" + }, + { + "label": "湘西土家族苗族自治州", + "value": "4331" + } + ], + [{ + "label": "广州市", + "value": "4401" + }, + { + "label": "韶关市", + "value": "4402" + }, + { + "label": "深圳市", + "value": "4403" + }, + { + "label": "珠海市", + "value": "4404" + }, + { + "label": "汕头市", + "value": "4405" + }, + { + "label": "佛山市", + "value": "4406" + }, + { + "label": "江门市", + "value": "4407" + }, + { + "label": "湛江市", + "value": "4408" + }, + { + "label": "茂名市", + "value": "4409" + }, + { + "label": "肇庆市", + "value": "4412" + }, + { + "label": "惠州市", + "value": "4413" + }, + { + "label": "梅州市", + "value": "4414" + }, + { + "label": "汕尾市", + "value": "4415" + }, + { + "label": "河源市", + "value": "4416" + }, + { + "label": "阳江市", + "value": "4417" + }, + { + "label": "清远市", + "value": "4418" + }, + { + "label": "东莞市", + "value": "4419" + }, + { + "label": "中山市", + "value": "4420" + }, + { + "label": "潮州市", + "value": "4451" + }, + { + "label": "揭阳市", + "value": "4452" + }, + { + "label": "云浮市", + "value": "4453" + } + ], + [{ + "label": "南宁市", + "value": "4501" + }, + { + "label": "柳州市", + "value": "4502" + }, + { + "label": "桂林市", + "value": "4503" + }, + { + "label": "梧州市", + "value": "4504" + }, + { + "label": "北海市", + "value": "4505" + }, + { + "label": "防城港市", + "value": "4506" + }, + { + "label": "钦州市", + "value": "4507" + }, + { + "label": "贵港市", + "value": "4508" + }, + { + "label": "玉林市", + "value": "4509" + }, + { + "label": "百色市", + "value": "4510" + }, + { + "label": "贺州市", + "value": "4511" + }, + { + "label": "河池市", + "value": "4512" + }, + { + "label": "来宾市", + "value": "4513" + }, + { + "label": "崇左市", + "value": "4514" + } + ], + [{ + "label": "海口市", + "value": "4601" + }, + { + "label": "三亚市", + "value": "4602" + }, + { + "label": "三沙市", + "value": "4603" + }, + { + "label": "儋州市", + "value": "4604" + }, + { + "label": "省直辖县级行政区划", + "value": "4690" + } + ], + [{ + "label": "市辖区", + "value": "5001" + }, + { + "label": "县", + "value": "5002" + } + ], + [{ + "label": "成都市", + "value": "5101" + }, + { + "label": "自贡市", + "value": "5103" + }, + { + "label": "攀枝花市", + "value": "5104" + }, + { + "label": "泸州市", + "value": "5105" + }, + { + "label": "德阳市", + "value": "5106" + }, + { + "label": "绵阳市", + "value": "5107" + }, + { + "label": "广元市", + "value": "5108" + }, + { + "label": "遂宁市", + "value": "5109" + }, + { + "label": "内江市", + "value": "5110" + }, + { + "label": "乐山市", + "value": "5111" + }, + { + "label": "南充市", + "value": "5113" + }, + { + "label": "眉山市", + "value": "5114" + }, + { + "label": "宜宾市", + "value": "5115" + }, + { + "label": "广安市", + "value": "5116" + }, + { + "label": "达州市", + "value": "5117" + }, + { + "label": "雅安市", + "value": "5118" + }, + { + "label": "巴中市", + "value": "5119" + }, + { + "label": "资阳市", + "value": "5120" + }, + { + "label": "阿坝藏族羌族自治州", + "value": "5132" + }, + { + "label": "甘孜藏族自治州", + "value": "5133" + }, + { + "label": "凉山彝族自治州", + "value": "5134" + } + ], + [{ + "label": "贵阳市", + "value": "5201" + }, + { + "label": "六盘水市", + "value": "5202" + }, + { + "label": "遵义市", + "value": "5203" + }, + { + "label": "安顺市", + "value": "5204" + }, + { + "label": "毕节市", + "value": "5205" + }, + { + "label": "铜仁市", + "value": "5206" + }, + { + "label": "黔西南布依族苗族自治州", + "value": "5223" + }, + { + "label": "黔东南苗族侗族自治州", + "value": "5226" + }, + { + "label": "黔南布依族苗族自治州", + "value": "5227" + } + ], + [{ + "label": "昆明市", + "value": "5301" + }, + { + "label": "曲靖市", + "value": "5303" + }, + { + "label": "玉溪市", + "value": "5304" + }, + { + "label": "保山市", + "value": "5305" + }, + { + "label": "昭通市", + "value": "5306" + }, + { + "label": "丽江市", + "value": "5307" + }, + { + "label": "普洱市", + "value": "5308" + }, + { + "label": "临沧市", + "value": "5309" + }, + { + "label": "楚雄彝族自治州", + "value": "5323" + }, + { + "label": "红河哈尼族彝族自治州", + "value": "5325" + }, + { + "label": "文山壮族苗族自治州", + "value": "5326" + }, + { + "label": "西双版纳傣族自治州", + "value": "5328" + }, + { + "label": "大理白族自治州", + "value": "5329" + }, + { + "label": "德宏傣族景颇族自治州", + "value": "5331" + }, + { + "label": "怒江傈僳族自治州", + "value": "5333" + }, + { + "label": "迪庆藏族自治州", + "value": "5334" + } + ], + [{ + "label": "拉萨市", + "value": "5401" + }, + { + "label": "日喀则市", + "value": "5402" + }, + { + "label": "昌都市", + "value": "5403" + }, + { + "label": "林芝市", + "value": "5404" + }, + { + "label": "山南市", + "value": "5405" + }, + { + "label": "那曲地区", + "value": "5424" + }, + { + "label": "阿里地区", + "value": "5425" + } + ], + [{ + "label": "西安市", + "value": "6101" + }, + { + "label": "铜川市", + "value": "6102" + }, + { + "label": "宝鸡市", + "value": "6103" + }, + { + "label": "咸阳市", + "value": "6104" + }, + { + "label": "渭南市", + "value": "6105" + }, + { + "label": "延安市", + "value": "6106" + }, + { + "label": "汉中市", + "value": "6107" + }, + { + "label": "榆林市", + "value": "6108" + }, + { + "label": "安康市", + "value": "6109" + }, + { + "label": "商洛市", + "value": "6110" + } + ], + [{ + "label": "兰州市", + "value": "6201" + }, + { + "label": "嘉峪关市", + "value": "6202" + }, + { + "label": "金昌市", + "value": "6203" + }, + { + "label": "白银市", + "value": "6204" + }, + { + "label": "天水市", + "value": "6205" + }, + { + "label": "武威市", + "value": "6206" + }, + { + "label": "张掖市", + "value": "6207" + }, + { + "label": "平凉市", + "value": "6208" + }, + { + "label": "酒泉市", + "value": "6209" + }, + { + "label": "庆阳市", + "value": "6210" + }, + { + "label": "定西市", + "value": "6211" + }, + { + "label": "陇南市", + "value": "6212" + }, + { + "label": "临夏回族自治州", + "value": "6229" + }, + { + "label": "甘南藏族自治州", + "value": "6230" + } + ], + [{ + "label": "西宁市", + "value": "6301" + }, + { + "label": "海东市", + "value": "6302" + }, + { + "label": "海北藏族自治州", + "value": "6322" + }, + { + "label": "黄南藏族自治州", + "value": "6323" + }, + { + "label": "海南藏族自治州", + "value": "6325" + }, + { + "label": "果洛藏族自治州", + "value": "6326" + }, + { + "label": "玉树藏族自治州", + "value": "6327" + }, + { + "label": "海西蒙古族藏族自治州", + "value": "6328" + } + ], + [{ + "label": "银川市", + "value": "6401" + }, + { + "label": "石嘴山市", + "value": "6402" + }, + { + "label": "吴忠市", + "value": "6403" + }, + { + "label": "固原市", + "value": "6404" + }, + { + "label": "中卫市", + "value": "6405" + } + ], + [{ + "label": "乌鲁木齐市", + "value": "6501" + }, + { + "label": "克拉玛依市", + "value": "6502" + }, + { + "label": "吐鲁番市", + "value": "6504" + }, + { + "label": "哈密市", + "value": "6505" + }, + { + "label": "昌吉回族自治州", + "value": "6523" + }, + { + "label": "博尔塔拉蒙古自治州", + "value": "6527" + }, + { + "label": "巴音郭楞蒙古自治州", + "value": "6528" + }, + { + "label": "阿克苏地区", + "value": "6529" + }, + { + "label": "克孜勒苏柯尔克孜自治州", + "value": "6530" + }, + { + "label": "喀什地区", + "value": "6531" + }, + { + "label": "和田地区", + "value": "6532" + }, + { + "label": "伊犁哈萨克自治州", + "value": "6540" + }, + { + "label": "塔城地区", + "value": "6542" + }, + { + "label": "阿勒泰地区", + "value": "6543" + }, + { + "label": "自治区直辖县级行政区划", + "value": "6590" + } + ], + [{ + "label": "台北", + "value": "6601" + }, + { + "label": "高雄", + "value": "6602" + }, + { + "label": "基隆", + "value": "6603" + }, + { + "label": "台中", + "value": "6604" + }, + { + "label": "台南", + "value": "6605" + }, + { + "label": "新竹", + "value": "6606" + }, + { + "label": "嘉义", + "value": "6607" + }, + { + "label": "宜兰", + "value": "6608" + }, + { + "label": "桃园", + "value": "6609" + }, + { + "label": "苗栗", + "value": "6610" + }, + { + "label": "彰化", + "value": "6611" + }, + { + "label": "南投", + "value": "6612" + }, + { + "label": "云林", + "value": "6613" + }, + { + "label": "屏东", + "value": "6614" + }, + { + "label": "台东", + "value": "6615" + }, + { + "label": "花莲", + "value": "6616" + }, + { + "label": "澎湖", + "value": "6617" + } + ], + [{ + "label": "香港岛", + "value": "6701" + }, + { + "label": "九龙", + "value": "6702" + }, + { + "label": "新界", + "value": "6703" + } + ], + [{ + "label": "澳门半岛", + "value": "6801" + }, + { + "label": "氹仔岛", + "value": "6802" + }, + { + "label": "路环岛", + "value": "6803" + }, + { + "label": "路氹城", + "value": "6804" + } + ] +] +export default cityData; diff --git a/src/components/mpvue-citypicker/city-data/province.js b/src/components/mpvue-citypicker/city-data/province.js new file mode 100644 index 0000000..1bd680e --- /dev/null +++ b/src/components/mpvue-citypicker/city-data/province.js @@ -0,0 +1,139 @@ +/* eslint-disable */ +var provinceData = [{ + "label": "北京市", + "value": "11" + }, + { + "label": "天津市", + "value": "12" + }, + { + "label": "河北省", + "value": "13" + }, + { + "label": "山西省", + "value": "14" + }, + { + "label": "内蒙古自治区", + "value": "15" + }, + { + "label": "辽宁省", + "value": "21" + }, + { + "label": "吉林省", + "value": "22" + }, + { + "label": "黑龙江省", + "value": "23" + }, + { + "label": "上海市", + "value": "31" + }, + { + "label": "江苏省", + "value": "32" + }, + { + "label": "浙江省", + "value": "33" + }, + { + "label": "安徽省", + "value": "34" + }, + { + "label": "福建省", + "value": "35" + }, + { + "label": "江西省", + "value": "36" + }, + { + "label": "山东省", + "value": "37" + }, + { + "label": "河南省", + "value": "41" + }, + { + "label": "湖北省", + "value": "42" + }, + { + "label": "湖南省", + "value": "43" + }, + { + "label": "广东省", + "value": "44" + }, + { + "label": "广西壮族自治区", + "value": "45" + }, + { + "label": "海南省", + "value": "46" + }, + { + "label": "重庆市", + "value": "50" + }, + { + "label": "四川省", + "value": "51" + }, + { + "label": "贵州省", + "value": "52" + }, + { + "label": "云南省", + "value": "53" + }, + { + "label": "西藏自治区", + "value": "54" + }, + { + "label": "陕西省", + "value": "61" + }, + { + "label": "甘肃省", + "value": "62" + }, + { + "label": "青海省", + "value": "63" + }, + { + "label": "宁夏回族自治区", + "value": "64" + }, + { + "label": "新疆维吾尔自治区", + "value": "65" + }, + { + "label": "台湾", + "value": "66" + }, + { + "label": "香港", + "value": "67" + }, + { + "label": "澳门", + "value": "68" + } +] +export default provinceData; diff --git a/src/components/mpvue-citypicker/mpvueCityPicker.vue b/src/components/mpvue-citypicker/mpvueCityPicker.vue new file mode 100644 index 0000000..ec02c8b --- /dev/null +++ b/src/components/mpvue-citypicker/mpvueCityPicker.vue @@ -0,0 +1,230 @@ + + + + + diff --git a/src/components/mpvue-echarts/src/echarts.vue b/src/components/mpvue-echarts/src/echarts.vue new file mode 100644 index 0000000..e1cbb66 --- /dev/null +++ b/src/components/mpvue-echarts/src/echarts.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/components/mpvue-echarts/src/wx-canvas.js b/src/components/mpvue-echarts/src/wx-canvas.js new file mode 100644 index 0000000..ef58893 --- /dev/null +++ b/src/components/mpvue-echarts/src/wx-canvas.js @@ -0,0 +1,73 @@ +export default class WxCanvas { + constructor(ctx, canvasId) { + this.ctx = ctx; + this.canvasId = canvasId; + this.chart = null; + + WxCanvas.initStyle(ctx); + this.initEvent(); + } + + getContext(contextType) { + return contextType === '2d' ? this.ctx : null; + } + + setChart(chart) { + this.chart = chart; + } + + attachEvent() { + // noop + } + + detachEvent() { + // noop + } + + static initStyle(ctx) { + const styles = ['fillStyle', 'strokeStyle', 'globalAlpha', + 'textAlign', 'textBaseAlign', 'shadow', 'lineWidth', + 'lineCap', 'lineJoin', 'lineDash', 'miterLimit', 'fontSize']; + + styles.forEach((style) => { + Object.defineProperty(ctx, style, { + set: (value) => { + if ((style !== 'fillStyle' && style !== 'strokeStyle') + || (value !== 'none' && value !== null) + ) { + ctx[`set${style.charAt(0).toUpperCase()}${style.slice(1)}`](value); + } + }, + }); + }); + + ctx.createRadialGradient = () => ctx.createCircularGradient(arguments); + } + + initEvent() { + this.event = {}; + const eventNames = [{ + wxName: 'touchStart', + ecName: 'mousedown', + }, { + wxName: 'touchMove', + ecName: 'mousemove', + }, { + wxName: 'touchEnd', + ecName: 'mouseup', + }, { + wxName: 'touchEnd', + ecName: 'click', + }]; + + eventNames.forEach((name) => { + this.event[name.wxName] = (e) => { + const touch = e.mp.touches[0]; + this.chart._zr.handler.dispatch(name.ecName, { + zrX: name.wxName === 'tap' ? touch.clientX : touch.x, + zrY: name.wxName === 'tap' ? touch.clientY : touch.y, + }); + }; + }); + } +} diff --git a/src/components/mpvue-picker/mpvuePicker.vue b/src/components/mpvue-picker/mpvuePicker.vue new file mode 100644 index 0000000..93397ee --- /dev/null +++ b/src/components/mpvue-picker/mpvuePicker.vue @@ -0,0 +1,484 @@ + + + + + diff --git a/src/components/mpvueGestureLock/gestureLock.js b/src/components/mpvueGestureLock/gestureLock.js new file mode 100644 index 0000000..21cf459 --- /dev/null +++ b/src/components/mpvueGestureLock/gestureLock.js @@ -0,0 +1,175 @@ +class GestureLock { + + constructor(containerWidth, cycleRadius) { + this.containerWidth = containerWidth; // 容器宽度 + this.cycleRadius = cycleRadius; // 圆的半径 + + this.circleArray = []; // 全部圆的对象数组 + this.checkPoints = []; // 选中的圆的对象数组 + this.lineArray = []; // 已激活锁之间的线段数组 + this.lastCheckPoint = 0; // 最后一个激活的锁 + this.offsetX = 0; // 容器的 X 偏移 + this.offsetY = 0; // 容器的 Y 偏移 + this.activeLine = {}; // 最后一个激活的锁与当前位置之间的线段 + + this.windowWidth = wx.getSystemInfoSync().windowWidth; // 窗口大小(用于rpx 和 px 转换) + + this.initCircleArray(); + } + + // 初始化 画布上的 9个圆 + initCircleArray() { + const cycleMargin = (this.containerWidth - 6 * this.cycleRadius) / 6; + let count = 0; + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + count++; + this.circleArray.push({ + count: count, + x: this.rpxTopx((cycleMargin + this.cycleRadius) * (j * 2 + 1)), + y: this.rpxTopx((cycleMargin + this.cycleRadius) * (i * 2 + 1)), + radius: this.rpxTopx(this.cycleRadius), + check: false, + style: { + left: (cycleMargin + this.cycleRadius) * (j * 2 + 1) - this.cycleRadius + 'rpx', + top: (cycleMargin + this.cycleRadius) * (i * 2 + 1) - this.cycleRadius + 'rpx', + width: this.cycleRadius * 2 + 'rpx', + } + }); + } + } + } + + onTouchStart(e) { + this.setOffset(e); + this.checkTouch({ + x: e.touches[0].pageX - this.offsetX, + y: e.touches[0].pageY - this.offsetY + }); + } + + onTouchMove(e) { + this.moveDraw(e) + } + + onTouchEnd(e) { + const checkPoints = this.checkPoints; + this.reset(); + return checkPoints; + } + + // 初始化 偏移量 + setOffset(e) { + this.offsetX = e.currentTarget.offsetLeft; + this.offsetY = e.currentTarget.offsetTop; + } + + // 检测当时 触摸位置是否位于 锁上 + checkTouch({ + x, + y + }) { + for (let i = 0; i < this.circleArray.length; i++) { + let point = this.circleArray[i]; + if (this.isPointInCycle(x, y, point.x, point.y, point.radius)) { + if (!point.check) { + this.checkPoints.push(point.count); + if (this.lastCheckPoint != 0) { + // 已激活锁之间的线段 + const line = this.drawLine(this.lastCheckPoint, point); + this.lineArray.push(line); + } + this.lastCheckPoint = point; + } + point.check = true; + return; + } + } + } + + // 画线 - 返回 样式 对象 + drawLine(start, end) { + const width = this.getPointDis(start.x, start.y, end.x, end.y); + const rotate = this.getAngle(start, end); + + return { + activeLeft: start.x + 'px', + activeTop: start.y + 'px', + activeWidth: width + 'px', + activeRotate: rotate + 'deg' + } + + } + + // 获取 画线的 角度 + getAngle(start, end) { + var diff_x = end.x - start.x, + diff_y = end.y - start.y; + if (diff_x >= 0) { + return 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI); + } else { + return 180 + 360 * Math.atan(diff_y / diff_x) / (2 * Math.PI); + } + } + + // 判断 当前点是否位于 锁内 + isPointInCycle(x, y, circleX, circleY, radius) { + return (this.getPointDis(x, y, circleX, circleY) < radius) ? true : false; + } + + // 获取两点之间距离 + getPointDis(ax, ay, bx, by) { + return Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2)); + } + + // 移动 绘制 + moveDraw(e) { + // 画经过的圆 + const x = e.touches[0].pageX - this.offsetX; + const y = e.touches[0].pageY - this.offsetY; + this.checkTouch({ + x, + y + }); + + // 画 最后一个激活的锁与当前位置之间的线段 + this.activeLine = this.drawLine(this.lastCheckPoint, { + x, + y + }); + } + + // 使 画布 恢复初始状态 + reset() { + this.circleArray.forEach((item) => { + item.check = false; + }); + this.checkPoints = []; + this.lineArray = []; + this.activeLine = {}; + this.lastCheckPoint = 0; + } + + + // 获取 最后一个激活的锁与当前位置之间的线段 + getActiveLine() { + return this.activeLine; + } + + // 获取 圆对象数组 + getCycleArray() { + return this.circleArray; + } + + // 获取 已激活锁之间的线段 + getLineArray() { + return this.lineArray; + } + + // 将 RPX 转换成 PX + rpxTopx(rpx) { + return rpx / 750 * this.windowWidth; + } +} + +export default GestureLock; diff --git a/src/components/mpvueGestureLock/index.vue b/src/components/mpvueGestureLock/index.vue new file mode 100644 index 0000000..a2cefdd --- /dev/null +++ b/src/components/mpvueGestureLock/index.vue @@ -0,0 +1,138 @@ + + + + diff --git a/src/components/my-paging/my-paging.vue b/src/components/my-paging/my-paging.vue new file mode 100644 index 0000000..7c04929 --- /dev/null +++ b/src/components/my-paging/my-paging.vue @@ -0,0 +1,157 @@ + + + + + + diff --git a/src/components/page-foot/page-foot.vue b/src/components/page-foot/page-foot.vue new file mode 100644 index 0000000..1154dbe --- /dev/null +++ b/src/components/page-foot/page-foot.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/components/page-head/page-head.vue b/src/components/page-head/page-head.vue new file mode 100644 index 0000000..07ed46d --- /dev/null +++ b/src/components/page-head/page-head.vue @@ -0,0 +1,16 @@ + + diff --git a/src/components/pullDown/pullDown.vue b/src/components/pullDown/pullDown.vue new file mode 100644 index 0000000..10058a2 --- /dev/null +++ b/src/components/pullDown/pullDown.vue @@ -0,0 +1,663 @@ + + + + + diff --git a/src/components/show-modal/show-modal.vue b/src/components/show-modal/show-modal.vue new file mode 100644 index 0000000..f8b523a --- /dev/null +++ b/src/components/show-modal/show-modal.vue @@ -0,0 +1,456 @@ + + + + diff --git a/src/components/tab-nvue/mediaList.vue b/src/components/tab-nvue/mediaList.vue new file mode 100644 index 0000000..ea3d224 --- /dev/null +++ b/src/components/tab-nvue/mediaList.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/components/u-charts/u-charts.js b/src/components/u-charts/u-charts.js new file mode 100644 index 0000000..3b1b798 --- /dev/null +++ b/src/components/u-charts/u-charts.js @@ -0,0 +1,5046 @@ +/* + * uCharts v1.8.5.20190815 + * uni-app平台高性能跨全端图表,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360) + * Copyright (c) 2019 QIUN秋云 https://www.ucharts.cn All rights reserved. + * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) + * + * uCharts官方网站 + * https://www.uCharts.cn + * + * 开源地址: + * https://gitee.com/uCharts/uCharts + * + * uni-app插件市场地址: + * http://ext.dcloud.net.cn/plugin?id=271 + * + */ + +'use strict'; + +var config = { + yAxisWidth: 15, + yAxisSplit: 5, + xAxisHeight: 15, + xAxisLineHeight: 15, + legendHeight: 15, + yAxisTitleWidth: 15, + padding: [10, 10, 10, 10], + pixelRatio: 1, + rotate: false, + columePadding: 3, + fontSize: 13, + //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'], + dataPointShape: ['circle', 'circle', 'circle', 'circle'], + colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'], + pieChartLinePadding: 15, + pieChartTextPadding: 5, + xAxisTextPadding: 3, + titleColor: '#333333', + titleFontSize: 20, + subtitleColor: '#999999', + subtitleFontSize: 15, + toolTipPadding: 3, + toolTipBackground: '#000000', + toolTipOpacity: 0.7, + toolTipLineHeight: 20, + radarGridCount: 3, + radarLabelTextMargin: 15, + gaugeLabelTextMargin: 15 +}; + +let assign; +if (Object.assign) { + assign = Object.assign; +} else { + // 使用polyfill + assign = function(target, varArgs) { + if (target == null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + var to = Object(target); + for (var index = 1; index < arguments.length; index++) { + var nextSource = arguments[index]; + if (nextSource != null) { + for (var nextKey in nextSource) { + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + } +} + +var util = { + toFixed: function toFixed(num, limit) { + limit = limit || 2; + if (this.isFloat(num)) { + num = num.toFixed(limit); + } + return num; + }, + isFloat: function isFloat(num) { + return num % 1 !== 0; + }, + approximatelyEqual: function approximatelyEqual(num1, num2) { + return Math.abs(num1 - num2) < 1e-10; + }, + isSameSign: function isSameSign(num1, num2) { + return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2; + }, + isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) { + return this.isSameSign(p1.x, p2.x); + }, + isCollision: function isCollision(obj1, obj2) { + obj1.end = {}; + obj1.end.x = obj1.start.x + obj1.width; + obj1.end.y = obj1.start.y - obj1.height; + obj2.end = {}; + obj2.end.x = obj2.start.x + obj2.width; + obj2.end.y = obj2.start.y - obj2.height; + var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y; + return !flag; + } +}; + +//兼容H5点击事件 +function getH5Offset(e) { + e.mp = { + changedTouches: [] + }; + e.mp.changedTouches.push({ + x: e.offsetX, + y: e.offsetY + }); + return e; +} + +// hex 转 rgba +function hexToRgb(hexValue, opc) { + var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; + var hex = hexValue.replace(rgx, function(m, r, g, b) { + return r + r + g + g + b + b; + }); + var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + var r = parseInt(rgb[1], 16); + var g = parseInt(rgb[2], 16); + var b = parseInt(rgb[3], 16); + return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')'; +} + +function findRange(num, type, limit) { + if (isNaN(num)) { + throw new Error('[uCharts] unvalid series data!'); + } + limit = limit || 10; + type = type ? type : 'upper'; + var multiple = 1; + while (limit < 1) { + limit *= 10; + multiple *= 10; + } + if (type === 'upper') { + num = Math.ceil(num * multiple); + } else { + num = Math.floor(num * multiple); + } + while (num % limit !== 0) { + if (type === 'upper') { + num++; + } else { + num--; + } + } + return num / multiple; +} + +function calCandleMA(dayArr, nameArr, colorArr, kdata) { + let seriesTemp = []; + for (let k = 0; k < dayArr.length; k++) { + let seriesItem = { + data: [], + name: nameArr[k], + color: colorArr[k] + }; + for (let i = 0, len = kdata.length; i < len; i++) { + if (i < dayArr[k]) { + seriesItem.data.push(null); + continue; + } + let sum = 0; + for (let j = 0; j < dayArr[k]; j++) { + sum += kdata[i - j][1]; + } + seriesItem.data.push(+(sum / dayArr[k]).toFixed(3)); + } + seriesTemp.push(seriesItem); + } + return seriesTemp; +} + +function calValidDistance(distance, chartData, config, opts) { + var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3]; + var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length-1); + var validDistance = distance; + if (distance >= 0) { + validDistance = 0; + } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) { + validDistance = dataChartAreaWidth - dataChartWidth; + } + return validDistance; +} + +function isInAngleRange(angle, startAngle, endAngle) { + function adjust(angle) { + while (angle < 0) { + angle += 2 * Math.PI; + } + while (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + } + angle = adjust(angle); + startAngle = adjust(startAngle); + endAngle = adjust(endAngle); + if (startAngle > endAngle) { + endAngle += 2 * Math.PI; + if (angle < startAngle) { + angle += 2 * Math.PI; + } + } + return angle >= startAngle && angle <= endAngle; +} + +function calRotateTranslate(x, y, h) { + var xv = x; + var yv = h - y; + var transX = xv + (h - yv - xv) / Math.sqrt(2); + transX *= -1; + var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2); + return { + transX: transX, + transY: transY + }; +} + +function createCurveControlPoints(points, i) { + + function isNotMiddlePoint(points, i) { + if (points[i - 1] && points[i + 1]) { + return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y, + points[ + i + 1].y); + } else { + return false; + } + } + var a = 0.2; + var b = 0.2; + var pAx = null; + var pAy = null; + var pBx = null; + var pBy = null; + if (i < 1) { + pAx = points[0].x + (points[1].x - points[0].x) * a; + pAy = points[0].y + (points[1].y - points[0].y) * a; + } else { + pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a; + pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a; + } + + if (i > points.length - 3) { + var last = points.length - 1; + pBx = points[last].x - (points[last].x - points[last - 1].x) * b; + pBy = points[last].y - (points[last].y - points[last - 1].y) * b; + } else { + pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b; + pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b; + } + if (isNotMiddlePoint(points, i + 1)) { + pBy = points[i + 1].y; + } + if (isNotMiddlePoint(points, i)) { + pAy = points[i].y; + } + return { + ctrA: { + x: pAx, + y: pAy + }, + ctrB: { + x: pBx, + y: pBy + } + }; +} + +function convertCoordinateOrigin(x, y, center) { + return { + x: center.x + x, + y: center.y - y + }; +} + +function avoidCollision(obj, target) { + if (target) { + // is collision test + while (util.isCollision(obj, target)) { + if (obj.start.x > 0) { + obj.start.y--; + } else if (obj.start.x < 0) { + obj.start.y++; + } else { + if (obj.start.y > 0) { + obj.start.y++; + } else { + obj.start.y--; + } + } + } + } + return obj; +} + +function fillSeries(series, opts, config) { + var index = 0; + return series.map(function(item) { + if (!item.color) { + item.color = config.colors[index]; + index = (index + 1) % config.colors.length; + } + if (!item.type) { + item.type = opts.type; + } + if (typeof item.show == "undefined") { + item.show = true; + } + if (!item.type) { + item.type = opts.type; + } + if (!item.pointShape) { + item.pointShape = "circle"; + } + if (!item.legendShape) { + switch (item.type) { + case 'line': + item.legendShape = "line"; + break; + case 'column': + item.legendShape = "rect"; + break; + case 'area': + item.legendShape = "triangle"; + break; + default: + item.legendShape = "circle"; + } + } + return item; + }); +} + +function getDataRange(minData, maxData) { + var limit = 0; + var range = maxData - minData; + if (range >= 10000) { + limit = 1000; + } else if (range >= 1000) { + limit = 100; + } else if (range >= 100) { + limit = 10; + } else if (range >= 10) { + limit = 5; + } else if (range >= 1) { + limit = 1; + } else if (range >= 0.1) { + limit = 0.1; + } else if (range >= 0.01) { + limit = 0.01; + } else if (range >= 0.001) { + limit = 0.001; + } else if (range >= 0.0001) { + limit = 0.0001; + } else if (range >= 0.00001) { + limit = 0.00001; + } else { + limit = 0.000001; + } + return { + minRange: findRange(minData, 'lower', limit), + maxRange: findRange(maxData, 'upper', limit) + }; +} + +function measureText(text) { + var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize; + text = String(text); + var text = text.split(''); + var width = 0; + for (let i = 0; i < text.length; i++) { + let item = text[i]; + if (/[a-zA-Z]/.test(item)) { + width += 7; + } else if (/[0-9]/.test(item)) { + width += 5.5; + } else if (/\./.test(item)) { + width += 2.7; + } else if (/-/.test(item)) { + width += 3.25; + } else if (/[\u4e00-\u9fa5]/.test(item)) { + width += 10; + } else if (/\(|\)/.test(item)) { + width += 3.73; + } else if (/\s/.test(item)) { + width += 2.5; + } else if (/%/.test(item)) { + width += 8; + } else { + width += 10; + } + } + return width * fontSize / 10; +} + +function dataCombine(series) { + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data); + }, []); +} + +function dataCombineStack(series, len) { + var sum = new Array(len); + for (var j = 0; j < sum.length; j++) { + sum[j] = 0; + } + for (var i = 0; i < series.length; i++) { + for (var j = 0; j < sum.length; j++) { + sum[j] += series[i].data[j]; + } + } + return series.reduce(function(a, b) { + return (a.data ? a.data : a).concat(b.data).concat(sum); + }, []); +} + +function getTouches(touches, opts, e) { + let x, y; + if (touches.clientX) { + if (opts.rotate) { + y = opts.height - touches.clientX * opts.pixelRatio; + x = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) * + opts.pixelRatio; + } else { + x = touches.clientX * opts.pixelRatio; + y = (touches.pageY - e.currentTarget.offsetTop - (opts.height / opts.pixelRatio / 2) * (opts.pixelRatio - 1)) * + opts.pixelRatio; + } + } else { + if (opts.rotate) { + y = opts.height - touches.x * opts.pixelRatio; + x = touches.y * opts.pixelRatio; + } else { + x = touches.x * opts.pixelRatio; + y = touches.y * opts.pixelRatio; + } + } + return { + x: x, + y: y + } +} + +function getSeriesDataItem(series, index) { + var data = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + if (item.data[index] !== null && typeof item.data[index] !== 'undefined' && item.show) { + let seriesItem = {}; + seriesItem.color = item.color; + seriesItem.type = item.type; + seriesItem.style = item.style; + seriesItem.pointShape = item.pointShape; + seriesItem.disableLegend = item.disableLegend; + seriesItem.name = item.name; + seriesItem.show = item.show; + seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index]; + data.push(seriesItem); + } + } + return data; +} + +function getMaxTextListLength(list) { + var lengthList = list.map(function(item) { + return measureText(item); + }); + return Math.max.apply(null, lengthList); +} + +function getRadarCoordinateSeries(length) { + var eachAngle = 2 * Math.PI / length; + var CoordinateSeries = []; + for (var i = 0; i < length; i++) { + CoordinateSeries.push(eachAngle * i); + } + + return CoordinateSeries.map(function(item) { + return -1 * item + Math.PI / 2; + }); +} + +function getToolTipData(seriesData, calPoints, index, categories) { + var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + + var textList = seriesData.map(function(item) { + return { + text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data, + color: item.color + }; + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + for (let i = 0; i < validCalPoints.length; i++) { + let item = validCalPoints[i]; + offset.x = Math.round(item.x); + offset.y += item.y; + } + offset.y /= validCalPoints.length; + return { + textList: textList, + offset: offset + }; +} + +function getMixToolTipData(seriesData, calPoints, index, categories) { + var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; + var textList = seriesData.map(function(item) { + return { + text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data, + color: item.color, + disableLegend: item.disableLegend ? true : false + }; + }); + textList = textList.filter(function(item) { + if (item.disableLegend !== true) { + return item; + } + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + for (let i = 0; i < validCalPoints.length; i++) { + let item = validCalPoints[i]; + offset.x = Math.round(item.x); + offset.y += item.y; + } + offset.y /= validCalPoints.length; + return { + textList: textList, + offset: offset + }; +} + +function getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) { + var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {}; + let upColor = extra.color.upFill; + let downColor = extra.color.downFill; + //颜色顺序为开盘,收盘,最低,最高 + let color = [upColor, upColor, downColor, upColor]; + var textList = []; + let text0 = { + text: categories[index], + color: null + }; + textList.push(text0); + seriesData.map(function(item) { + if (index == 0 && item.data[1] - item.data[0] < 0) { + color[1] = downColor; + } else { + if (item.data[0] < series[index - 1][1]) { + color[0] = downColor; + } + if (item.data[1] < item.data[0]) { + color[1] = downColor; + } + if (item.data[2] > series[index - 1][1]) { + color[2] = upColor; + } + if (item.data[3] < series[index - 1][1]) { + color[3] = downColor; + } + } + let text1 = { + text: '开盘:' + item.data[0], + color: color[0] + }; + let text2 = { + text: '收盘:' + item.data[1], + color: color[1] + }; + let text3 = { + text: '最低:' + item.data[2], + color: color[2] + }; + let text4 = { + text: '最高:' + item.data[3], + color: color[3] + }; + textList.push(text1, text2, text3, text4); + }); + var validCalPoints = []; + var offset = { + x: 0, + y: 0 + }; + for (let i = 0; i < calPoints.length; i++) { + let points = calPoints[i]; + if (typeof points[index] !== 'undefined' && points[index] !== null) { + validCalPoints.push(points[index]); + } + } + offset.x = Math.round(validCalPoints[0][0].x); + return { + textList: textList, + offset: offset + }; +} + +function filterSeries(series) { + let tempSeries = []; + for (let i = 0; i < series.length; i++) { + if (series[i].show == true) { + tempSeries.push(series[i]) + } + } + return tempSeries; +} + +function findCurrentIndex(currentPoints, xAxisPoints, opts, config) { + var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; + var currentIndex = -1; + var spacing = 0; + if((opts.type=='line' || opts.type=='area') && opts.xAxis.boundaryGap=='justify'){ + spacing = opts.chartData.eachSpacing/2; + } + if (isInExactChartArea(currentPoints, opts, config)) { + xAxisPoints.forEach(function(item, index) { + if (currentPoints.x + offset + spacing > item) { + currentIndex = index; + } + }); + } + return currentIndex; +} + +function findLegendIndex(currentPoints, legendData, opts) { + let currentIndex = -1; + if (isInExactLegendArea(currentPoints, legendData.area)) { + let points = legendData.points; + let index = -1; + for (let i = 0, len = points.length; i < len; i++) { + let item = points[i]; + for (let j = 0; j < item.length; j++) { + index += 1; + let area = item[j]['area']; + if (currentPoints.x > area[0] && currentPoints.x < area[2] && currentPoints.y > area[1] && currentPoints.y < area[3]) { + currentIndex = index; + break; + } + } + } + return currentIndex; + } + return currentIndex; +} + +function isInExactLegendArea(currentPoints, area) { + return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y && + currentPoints.y < area.end.y; +} + +function isInExactChartArea(currentPoints, opts, config) { + return currentPoints.x < opts.width - opts.area[1] + 10 && currentPoints.x > opts.area[3] -10 && currentPoints.y > opts.area[0] && currentPoints.y < opts.height - opts.area[2]; +} + +function findRadarChartCurrentIndex(currentPoints, radarData, count) { + var eachAngleArea = 2 * Math.PI / count; + var currentIndex = -1; + if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) { + var fixAngle = function fixAngle(angle) { + if (angle < 0) { + angle += 2 * Math.PI; + } + if (angle > 2 * Math.PI) { + angle -= 2 * Math.PI; + } + return angle; + }; + + var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x); + angle = -1 * angle; + if (angle < 0) { + angle += 2 * Math.PI; + } + + var angleList = radarData.angleList.map(function(item) { + item = fixAngle(-1 * item); + + return item; + }); + + angleList.forEach(function(item, index) { + var rangeStart = fixAngle(item - eachAngleArea / 2); + var rangeEnd = fixAngle(item + eachAngleArea / 2); + if (rangeEnd < rangeStart) { + rangeEnd += 2 * Math.PI; + } + if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <= + rangeEnd) { + currentIndex = index; + } + }); + } + + return currentIndex; +} + +function findFunnelChartCurrentIndex(currentPoints, funnelData) { + var currentIndex = -1; + for (var i = 0, len = funnelData.series.length; i < len; i++) { + var item = funnelData.series[i]; + if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findWordChartCurrentIndex(currentPoints, wordData) { + var currentIndex = -1; + for (var i = 0, len = wordData.length; i < len; i++) { + var item = wordData[i]; + if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) { + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findMapChartCurrentIndex(currentPoints, opts) { + var currentIndex = -1; + var cData=opts.chartData.mapData; + var data=opts.series; + var tmp=pointToCoordinate(currentPoints.y, currentPoints.x,cData.bounds,cData.scale,cData.xoffset,cData.yoffset); + var poi=[tmp.x, tmp.y]; + for (var i = 0, len = data.length; i < len; i++) { + var item = data[i].geometry.coordinates; + if(isPoiWithinPoly(poi,item)){ + currentIndex = i; + break; + } + } + return currentIndex; +} + +function findPieChartCurrentIndex(currentPoints, pieData) { + var currentIndex = -1; + if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) { + var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x); + angle = -angle; + for (var i = 0, len = pieData.series.length; i < len; i++) { + var item = pieData.series[i]; + if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) { + currentIndex = i; + break; + } + } + } + + return currentIndex; +} + +function isInExactPieChartArea(currentPoints, center, radius) { + return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2); +} + +function splitPoints(points) { + var newPoints = []; + var items = []; + points.forEach(function(item, index) { + if (item !== null) { + items.push(item); + } else { + if (items.length) { + newPoints.push(items); + } + items = []; + } + }); + if (items.length) { + newPoints.push(items); + } + + return newPoints; +} + +function calLegendData(series, opts, config, chartData) { + let legendData = { + area: { + start: { + x: 0, + y: 0 + }, + end: { + x: 0, + y: 0 + }, + width: 0, + height: 0, + wholeWidth: 0, + wholeHeight: 0 + }, + points: [], + widthArr: [], + heightArr: [] + }; + if (opts.legend.show === false) { + chartData.legendData = legendData; + return legendData; + } + + let padding = opts.legend.padding; + let margin = opts.legend.margin; + let fontSize = opts.legend.fontSize; + let shapeWidth = 15 * opts.pixelRatio; + let shapeRight = 5 * opts.pixelRatio; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + let legendList = []; + let widthCount = 0; + let widthCountArr = []; + let currentRow = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize) + opts.legend.itemGap; + if (widthCount + itemWidth > opts.width - opts.padding[1] - opts.padding[3]) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap); + widthCount = itemWidth; + currentRow = [item]; + } else { + widthCount += itemWidth; + currentRow.push(item); + } + } + if (currentRow.length) { + legendList.push(currentRow); + widthCountArr.push(widthCount - opts.legend.itemGap); + legendData.widthArr = widthCountArr; + let legendWidth = Math.max.apply(null, widthCountArr); + switch (opts.legend.float) { + case 'left': + legendData.area.start.x = opts.padding[3]; + legendData.area.end.x = opts.padding[3] + 2 * padding; + break; + case 'right': + legendData.area.start.x = opts.width - opts.padding[1] - legendWidth - 2 * padding; + legendData.area.end.x = opts.width - opts.padding[1]; + break; + default: + legendData.area.start.x = (opts.width - legendWidth) / 2 - padding; + legendData.area.end.x = (opts.width + legendWidth) / 2 + padding; + } + legendData.area.width = legendWidth + 2 * padding; + legendData.area.wholeWidth = legendWidth + 2 * padding; + legendData.area.height = legendList.length * lineHeight + 2 * padding; + legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin; + legendData.points = legendList; + } + } else { + let len = series.length; + let maxHeight = opts.height - opts.padding[0] - opts.padding[2] - 2 * margin - 2 * padding; + let maxLength = Math.min(Math.floor(maxHeight / lineHeight), len); + legendData.area.height = maxLength * lineHeight + padding * 2; + legendData.area.wholeHeight = maxLength * lineHeight + padding * 2; + switch (opts.legend.float) { + case 'top': + legendData.area.start.y = opts.padding[0] + margin; + legendData.area.end.y = opts.padding[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.padding[2] - margin - legendData.area.height; + legendData.area.end.y = opts.height - opts.padding[2] - margin; + break; + default: + legendData.area.start.y = (opts.height - legendData.area.height) / 2; + legendData.area.end.y = (opts.height + legendData.area.height) / 2; + } + let lineNum = len % maxLength === 0 ? len / maxLength : Math.floor((len / maxLength) + 1); + let currentRow = []; + for (let i = 0; i < lineNum; i++) { + let temp = series.slice(i * maxLength, i * maxLength + maxLength); + currentRow.push(temp); + } + + legendData.points = currentRow; + + if (currentRow.length) { + for (let i = 0; i < currentRow.length; i++) { + let item = currentRow[i]; + let maxWidth = 0; + for (let j = 0; j < item.length; j++) { + let itemWidth = shapeWidth + shapeRight + measureText(item[j].name || 'undefined', fontSize) + opts.legend.itemGap; + if (itemWidth > maxWidth) { + maxWidth = itemWidth; + } + } + legendData.widthArr.push(maxWidth); + legendData.heightArr.push(item.length * lineHeight + padding * 2); + } + let legendWidth = 0 + for (let i = 0; i < legendData.widthArr.length; i++) { + legendWidth += legendData.widthArr[i]; + } + legendData.area.width = legendWidth - opts.legend.itemGap + 2 * padding; + legendData.area.wholeWidth = legendData.area.width + padding; + } + } + + switch (opts.legend.position) { + case 'top': + legendData.area.start.y = opts.padding[0] + margin; + legendData.area.end.y = opts.padding[0] + margin + legendData.area.height; + break; + case 'bottom': + legendData.area.start.y = opts.height - opts.padding[2] - legendData.area.height - margin; + legendData.area.end.y = opts.height - opts.padding[2] - margin; + break; + case 'left': + legendData.area.start.x = opts.padding[3]; + legendData.area.end.x = opts.padding[3] + legendData.area.width; + break; + case 'right': + legendData.area.start.x = opts.width - opts.padding[1] - legendData.area.width; + legendData.area.end.x = opts.width - opts.padding[1]; + break; + } + chartData.legendData = legendData; + return legendData; +} + +function calCategoriesData(categories, opts, config, eachSpacing) { + var result = { + angle: 0, + xAxisHeight: config.xAxisHeight + }; + var categoriesTextLenth = categories.map(function(item) { + return measureText(item); + }); + var maxTextLength = Math.max.apply(this, categoriesTextLenth); + + if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) { + result.angle = 45 * Math.PI / 180; + result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle); + } + return result; +} + +function getRadarDataPoints(angleList, center, radius, series, opts) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + + var radarOption = opts.extra.radar || {}; + radarOption.max = radarOption.max || 0; + var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series))); + + var data = []; + for (let i = 0; i < series.length; i++) { + let each = series[i]; + let listItem = {}; + listItem.color = each.color; + listItem.data = []; + each.data.forEach(function(item, index) { + let tmp = {}; + tmp.angle = angleList[index]; + + tmp.proportion = item / maxData; + tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion * + process * Math.sin(tmp.angle), center); + listItem.data.push(tmp); + }); + + data.push(listItem); + } + + return data; +} + +function getPieDataPoints(series, radius) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + + var count = 0; + var _start_ = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0) { + item._proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + } + item._radius_ = radius; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._proportion_ * Math.PI; + } + + return series; +} + +function getFunnelDataPoints(series, radius) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + series = series.sort(function(a,b){return parseInt(b.data)-parseInt(a.data);}); + for (let i = 0; i < series.length; i++) { + series[i].radius = series[i].data/series[0].data*radius*process; + series[i]._proportion_ = series[i].data/series[0].data; + } + return series.reverse(); +} + +function getRoseDataPoints(series, type, minRadius, radius) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var count = 0; + var _start_ = 0; + + var dataArr = []; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + count += item.data; + dataArr.push(item.data); + } + + var minData = Math.min.apply(null, dataArr); + var maxData = Math.max.apply(null, dataArr); + var radiusLength = radius - minRadius; + + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (count === 0 || type == 'area') { + item._proportion_ = item.data / count * process; + item._rose_proportion_ = 1 / series.length * process; + } else { + item._proportion_ = item.data / count * process; + item._rose_proportion_ = item.data / count * process; + } + item._radius_ = minRadius + radiusLength * ((item.data - minData) / (maxData - minData)); + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item._start_ = _start_; + _start_ += 2 * item._rose_proportion_ * Math.PI; + } + + return series; +} + +function getArcbarDataPoints(series, arcbarOption) { + var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; + if (process == 1) { + process = 0.999999; + } + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + let totalAngle; + if (arcbarOption.type == 'default') { + if (arcbarOption.endAngle < arcbarOption.startAngle) { + totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle; + } else{ + totalAngle = arcbarOption.startAngle - arcbarOption.endAngle; + } + } else { + totalAngle = 2; + } + item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle; + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getGaugeAxisPoints(categories, startAngle, endAngle) { + let totalAngle = startAngle - endAngle + 1; + let tempStartAngle = startAngle; + for (let i = 0; i < categories.length; i++) { + categories[i].value = categories[i].value === null ? 0 : categories[i].value; + categories[i]._startAngle_ = tempStartAngle; + categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle; + if (categories[i]._endAngle_ >= 2) { + categories[i]._endAngle_ = categories[i]._endAngle_ % 2; + } + tempStartAngle = categories[i]._endAngle_; + } + return categories; +} + +function getGaugeDataPoints(series, categories, gaugeOption) { + let process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + item.data = item.data === null ? 0 : item.data; + if (gaugeOption.pointer.color == 'auto') { + for (let i = 0; i < categories.length; i++) { + if (item.data <= categories[i].value) { + item.color = categories[i].color; + break; + } + } + } else { + item.color = gaugeOption.pointer.color; + } + let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle; + item._oldAngle_ = gaugeOption.oldAngle; + if (gaugeOption.oldAngle < gaugeOption.endAngle) { + item._oldAngle_ += 2; + } + if (item.data >= gaugeOption.oldData) { + item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle; + } else { + item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process; + } + if (item._proportion_ >= 2) { + item._proportion_ = item._proportion_ % 2; + } + } + return series; +} + +function getPieTextMaxLength(series) { + series = getPieDataPoints(series); + let maxLength = 0; + for (let i = 0; i < series.length; i++) { + let item = series[i]; + let text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%'; + maxLength = Math.max(maxLength, measureText(text)); + } + + return maxLength; +} + +function fixColumeData(points, eachSpacing, columnLen, index, config, opts) { + return points.map(function(item) { + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / columnLen); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + if (item.width <= 0) { + item.width = 1; + } + item.x += (index + 0.5 - columnLen / 2) * item.width; + return item; + }); +} + +function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) { + return points.map(function(item) { + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + + if (index > 0) { + item.width -= 2 * border; + } + return item; + }); +} + +function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) { + + return points.map(function(item, indexn) { + + if (item === null) { + return null; + } + item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2); + + if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) { + item.width = Math.min(item.width, +opts.extra.column.width); + } + return item; + }); +} + +function getXAxisPoints(categories, opts, config) { + var yAxisTotalWidth = config.yAxisWidth + config.yAxisTitleWidth; + var spacingValid = opts.width - opts.area[1] - opts.area[3]; + var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length; + if((opts.type=='line' || opts.type=='area') && dataCount>1 && opts.xAxis.boundaryGap=='justify'){ + dataCount -=1; + } + var eachSpacing = spacingValid / dataCount; + + var xAxisPoints = []; + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + categories.forEach(function(item, index) { + xAxisPoints.push(startX + index * eachSpacing); + }); + if(opts.xAxis.boundaryGap !=='justify'){ + if (opts.enableScroll === true) { + xAxisPoints.push(startX + categories.length * eachSpacing); + } else { + xAxisPoints.push(endX); + } + } + return { + xAxisPoints: xAxisPoints, + startX: startX, + endX: endX, + eachSpacing: eachSpacing + }; +} + +function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var cPoints = []; + item.forEach(function(items, indexs) { + var point = {}; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + var value = items.value || items; + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + cPoints.push(point); + }); + points.push(cPoints); + } + }); + + return points; +} + +function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) { + var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1; + var boundaryGap='center'; + if (opts.type == 'line'||opts.type == 'area'){ + boundaryGap=opts.xAxis.boundaryGap; + } + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index]; + if(boundaryGap=='center'){ + point.x += Math.round(eachSpacing / 2); + } + var value = item; + if (typeof item === 'object' && item !== null) { + value = item.value + } + var height = validHeight * (value - minRange) / (maxRange - minRange); + height *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + points.push(point); + } + }); + + return points; +} + +function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) { + var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1; + var points = []; + var validHeight = opts.height - opts.area[0] - opts.area[2]; + + data.forEach(function(item, index) { + if (item === null) { + points.push(null); + } else { + var point = {}; + point.color = item.color; + point.x = xAxisPoints[index] + Math.round(eachSpacing / 2); + + if (seriesIndex > 0) { + var value = 0; + for (let i = 0; i <= seriesIndex; i++) { + value += stackSeries[i].data[index]; + } + var value0 = value - item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = validHeight * (value0 - minRange) / (maxRange - minRange); + } else { + var value = item; + var height = validHeight * (value - minRange) / (maxRange - minRange); + var height0 = 0; + } + var heightc = height0; + height *= process; + heightc *= process; + point.y = opts.height - Math.round(height) - opts.area[2]; + point.y0 = opts.height - Math.round(heightc) - opts.area[2]; + points.push(point); + } + }); + + return points; +} + +function getYAxisTextList(series, opts, config, stack) { + var data; + if (stack == 'stack') { + data = dataCombineStack(series, opts.categories.length); + } else { + data = dataCombine(series); + } + var sorted = []; + // remove null from data + data = data.filter(function(item) { + //return item !== null; + if (typeof item === 'object' && item !== null) { + if (Array.isArray(item)) { + return item !== null; + } else { + return item.value !== null; + } + } else { + return item !== null; + } + }); + data.map(function(item) { + if (typeof item === 'object') { + if (Array.isArray(item)) { + item.map(function(subitem) { + sorted.push(subitem); + }) + } else { + sorted.push(item.value); + } + } else { + sorted.push(item); + } + }) + var minData = 0; + var maxData = 0; + if (sorted.length > 0) { + minData = Math.min.apply(this, sorted); + maxData = Math.max.apply(this, sorted); + } + if (typeof opts.yAxis.min === 'number') { + minData = Math.min(opts.yAxis.min, minData); + } + if (typeof opts.yAxis.max === 'number') { + maxData = Math.max(opts.yAxis.max, maxData); + } + + if (minData === maxData) { + var rangeSpan = maxData || 10; + maxData += rangeSpan; + } + + var dataRange = getDataRange(minData, maxData); + var minRange = dataRange.minRange; + var maxRange = dataRange.maxRange; + + var range = []; + var eachRange = (maxRange - minRange) / config.yAxisSplit; + + for (var i = 0; i <= config.yAxisSplit; i++) { + range.push(minRange + eachRange * i); + } + return range.reverse(); +} + +function calYAxisData(series, opts, config) { + //堆叠图重算Y轴 + var columnstyle = assign({}, { + type: "" + }, opts.extra.column); + var ranges = getYAxisTextList(series, opts, config, columnstyle.type); + var yAxisWidth = config.yAxisWidth; + var yAxisFontSize = opts.yAxis.fontSize || config.fontSize; + var rangesFormat = ranges.map(function(item) { + item = util.toFixed(item, 6); + item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item; + yAxisWidth = Math.max(yAxisWidth, measureText(item, yAxisFontSize) + 5); + return item; + }); + if (opts.yAxis.disabled === true) { + yAxisWidth = 0; + } + + return { + rangesFormat: rangesFormat, + ranges: ranges, + yAxisWidth: yAxisWidth + }; +} + +function calTooltipYAxisData(point, series, opts, config, eachSpacing) { + var ranges = getYAxisTextList(series, opts, config); + var spacingValid = opts.height - opts.area[0] - opts.area[2]; + let maxVal = ranges[0]; + let minVal = ranges[ranges.length - 1]; + let minAxis = opts.padding[3]; + let maxAxis = opts.padding[1] + spacingValid; + let item = maxVal - (maxVal - minVal) * (point - minAxis) / (maxAxis - minAxis); + item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item; + return item; +} + +function calMarkLineData(minRange, maxRange, points, opts) { + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + for (let i = 0; i < points.length; i++) { + let height = spacingValid * (points[i].value - minRange) / (maxRange - minRange); + points[i].y = opts.height - Math.round(height) - opts.area[2]; + } + return points; +} + +function contextRotate(context, opts) { + if (opts.rotateLock !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + } else if (opts._rotate_ !== true) { + context.translate(opts.height, 0); + context.rotate(90 * Math.PI / 180); + opts._rotate_ = true; + } +} + +function drawPointShape(points, color, shape, context, opts) { + context.beginPath(); + context.setStrokeStyle("#ffffff"); + context.setLineWidth(1 * opts.pixelRatio); + context.setFillStyle(color); + if (shape === 'diamond') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y); + context.lineTo(item.x, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y); + context.lineTo(item.x, item.y - 4.5); + } + }); + } else if (shape === 'circle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x + 3.5 * opts.pixelRatio, item.y); + context.arc(item.x, item.y, 4 * opts.pixelRatio, 0, 2 * Math.PI, false); + } + }); + } else if (shape === 'rect') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x - 3.5, item.y - 3.5); + context.rect(item.x - 3.5, item.y - 3.5, 7, 7); + } + }); + } else if (shape === 'triangle') { + points.forEach(function(item, index) { + if (item !== null) { + context.moveTo(item.x, item.y - 4.5); + context.lineTo(item.x - 4.5, item.y + 4.5); + context.lineTo(item.x + 4.5, item.y + 4.5); + context.lineTo(item.x, item.y - 4.5); + } + }); + } + context.closePath(); + context.fill(); + context.stroke(); +} + +function drawRingTitle(opts, config, context, center) { + var titlefontSize = opts.title.fontSize || config.titleFontSize; + var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize; + var title = opts.title.name || ''; + var subtitle = opts.subtitle.name || ''; + var titleFontColor = opts.title.color || config.titleColor; + var subtitleFontColor = opts.subtitle.color || config.subtitleColor; + var titleHeight = title ? titlefontSize : 0; + var subtitleHeight = subtitle ? subtitlefontSize : 0; + var margin = 5; + + if (subtitle) { + var textWidth = measureText(subtitle, subtitlefontSize); + var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX || 0); + var startY = center.y + subtitlefontSize / 2 + (opts.subtitle.offsetY || 0); + if (title) { + startY += (titleHeight + margin) / 2; + } + context.beginPath(); + context.setFontSize(subtitlefontSize); + context.setFillStyle(subtitleFontColor); + context.fillText(subtitle, startX, startY); + context.closePath(); + context.stroke(); + } + if (title) { + var _textWidth = measureText(title, titlefontSize); + var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0); + var _startY = center.y + titlefontSize / 2 + (opts.title.offsetY || 0); + if (subtitle) { + _startY -= (subtitleHeight + margin) / 2; + } + context.beginPath(); + context.setFontSize(titlefontSize); + context.setFillStyle(titleFontColor); + context.fillText(title, _startX, _startY); + context.closePath(); + context.stroke(); + } +} + +function drawPointText(points, series, config, context) { + // 绘制数据文案 + var data = series.data; + points.forEach(function(item, index) { + if (item !== null) { + //var formatVal = series.format ? series.format(data[index]) : data[index]; + context.beginPath(); + context.setFontSize(series.textSize || config.fontSize); + context.setFillStyle(series.textColor || '#666666'); + var value = data[index] + if (typeof data[index] === 'object' && data[index] !== null) { + value = data[index].value + } + var formatVal = series.format ? series.format(value) : value; + context.fillText(String(formatVal), item.x - measureText(formatVal, series.textSize || config.fontSize) / 2, item.y - + 2); + context.closePath(); + context.stroke(); + } + }); + +} + +function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) { + radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin; + + let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let totalNumber = gaugeOption.endNumber - gaugeOption.startNumber; + let splitNumber = totalNumber / gaugeOption.splitLine.splitNumber; + let nowAngle = gaugeOption.startAngle; + let nowNumber = gaugeOption.startNumber; + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + var pos = { + x: radius * Math.cos(nowAngle * Math.PI), + y: radius * Math.sin(nowAngle * Math.PI) + }; + var labelText = gaugeOption.labelFormat ? gaugeOption.labelFormat(nowNumber) : nowNumber; + pos.x += centerPosition.x - measureText(labelText) / 2; + pos.y += centerPosition.y; + var startX = pos.x; + var startY = pos.y; + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(gaugeOption.labelColor || '#666666'); + context.fillText(labelText, startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + + nowAngle += splitAngle; + if (nowAngle >= 2) { + nowAngle = nowAngle % 2; + } + nowNumber += splitNumber; + } + +} + +function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) { + var radarOption = opts.extra.radar || {}; + radius += config.radarLabelTextMargin; + + angleList.forEach(function(angle, index) { + var pos = { + x: radius * Math.cos(angle), + y: radius * Math.sin(angle) + }; + var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition); + var startX = posRelativeCanvas.x; + var startY = posRelativeCanvas.y; + if (util.approximatelyEqual(pos.x, 0)) { + startX -= measureText(opts.categories[index] || '') / 2; + } else if (pos.x < 0) { + startX -= measureText(opts.categories[index] || ''); + } + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(radarOption.labelColor || '#666666'); + context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2); + context.closePath(); + context.stroke(); + }); + +} + +function drawPieText(series, opts, config, context, radius, center) { + var lineRadius = config.pieChartLinePadding; + var textObjectCollection = []; + var lastTextObject = null; + + var seriesConvert = series.map(function(item) { + var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_.toFixed(4) * 100) +'%'; + if(item._rose_proportion_) item._proportion_=item._rose_proportion_; + var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2); + var color = item.color; + var radius = item._radius_; + return { + arc: arc, + text: text, + color: color, + radius: radius, + textColor: item.textColor, + textSize: item.textSize, + }; + }); + for (let i = 0; i < seriesConvert.length; i++) { + let item = seriesConvert[i]; + // line end + let orginX1 = Math.cos(item.arc) * (item.radius + lineRadius); + let orginY1 = Math.sin(item.arc) * (item.radius + lineRadius); + + // line start + let orginX2 = Math.cos(item.arc) * item.radius; + let orginY2 = Math.sin(item.arc) * item.radius; + + // text start + let orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding; + let orginY3 = orginY1; + let textWidth = measureText(item.text); + let startY = orginY3; + + if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, { + x: orginX3 + })) { + if (orginX3 > 0) { + startY = Math.min(orginY3, lastTextObject.start.y); + } else if (orginX1 < 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + if (orginY3 > 0) { + startY = Math.max(orginY3, lastTextObject.start.y); + } else { + startY = Math.min(orginY3, lastTextObject.start.y); + } + } + } + if (orginX3 < 0) { + orginX3 -= textWidth; + } + + let textObject = { + lineStart: { + x: orginX2, + y: orginY2 + }, + lineEnd: { + x: orginX1, + y: orginY1 + }, + start: { + x: orginX3, + y: startY + }, + width: textWidth, + height: config.fontSize, + text: item.text, + color: item.color, + textColor: item.textColor, + textSize: item.textSize + }; + lastTextObject = avoidCollision(textObject, lastTextObject); + textObjectCollection.push(lastTextObject); + } + + for (let i = 0; i < textObjectCollection.length; i++) { + let item = textObjectCollection[i]; + let lineStartPoistion = convertCoordinateOrigin(item.lineStart.x, item.lineStart.y, center); + let lineEndPoistion = convertCoordinateOrigin(item.lineEnd.x, item.lineEnd.y, center); + let textPosition = convertCoordinateOrigin(item.start.x, item.start.y, center); + context.setLineWidth(1 * opts.pixelRatio); + context.setFontSize(config.fontSize); + context.beginPath(); + context.setStrokeStyle(item.color); + context.setFillStyle(item.color); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + let curveStartX = item.start.x < 0 ? textPosition.x + item.width : textPosition.x; + let textStartX = item.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5; + context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y); + context.moveTo(lineStartPoistion.x, lineStartPoistion.y); + context.stroke(); + context.closePath(); + context.beginPath(); + context.moveTo(textPosition.x + item.width, textPosition.y); + context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFontSize(item.textSize || config.fontSize); + context.setFillStyle(item.textColor || '#666666'); + context.fillText(item.text, textStartX, textPosition.y + 3); + context.closePath(); + context.stroke(); + context.closePath(); + } +} + +function drawToolTipSplitLine(offsetX, opts, config, context) { + var toolTipOption = opts.extra.tooltip || {}; + toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType; + toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength; + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(offsetX, startY); + context.lineTo(offsetX, endY); + context.stroke(); + context.setLineDash([]); + + if (toolTipOption.xAxisLabel) { + let labelText = opts.categories[opts.tooltip.index]; + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize); + + let textX = offsetX - 0.5 * textWidth; + let textY = endY; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pixelRatio); + context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || config.fontColor); + context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize); + context.closePath(); + context.stroke(); + } +} + +function drawMarkLine(minRange, maxRange, opts, config, context) { + let markLineOption = assign({}, { + type: 'solid', + dashLength: 4, + data: [] + }, opts.extra.markLine); + let startX = opts.area[3]; + let endX = opts.width - opts.padding[1]; + let points = calMarkLineData(minRange, maxRange, markLineOption.data, opts); + + for (let i = 0; i < points.length; i++) { + let item = assign({}, { + lineColor: '#DE4A42', + showLabel: false, + labelFontColor: '#666666', + labelBgColor: '#DFE8FF', + labelBgOpacity: 0.8, + yAxisIndex: 0 + }, points[i]); + + if (markLineOption.type == 'dash') { + context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]); + } + context.setStrokeStyle(item.lineColor); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(startX, item.y); + context.lineTo(endX, item.y); + context.stroke(); + context.setLineDash([]); + if (item.showLabel) { + let labelText = opts.yAxis.format ? opts.yAxis.format(Number(item.value)) : item.value; + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize); + let bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding; + let bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2); + let bgWidth = bgEndX - bgStartX; + + let textX = bgStartX + (bgWidth - textWidth) / 2; + let textY = item.y; + context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity)); + context.setStrokeStyle(item.labelBgColor); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(item.labelFontColor); + context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize); + context.stroke(); + } + } +} + +function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + gridType: 'solid', + dashLength: 4 + }, opts.extra.tooltip); + + var startX = opts.area[3]; + var endX = opts.width - opts.padding[1]; + + if (toolTipOption.gridType == 'dash') { + context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]); + } + context.setStrokeStyle(toolTipOption.gridColor || '#cccccc'); + context.setLineWidth(1 * opts.pixelRatio); + context.beginPath(); + context.moveTo(startX, opts.tooltip.offset.y); + context.lineTo(endX, opts.tooltip.offset.y); + context.stroke(); + context.setLineDash([]); + + if (toolTipOption.yAxisLabel) { + let labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing); + context.setFontSize(config.fontSize); + let textWidth = measureText(labelText, config.fontSize); + let bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding; + let bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2); + let bgWidth = bgEndX - bgStartX; + + let textX = bgStartX + (bgWidth - textWidth) / 2; + let textY = opts.tooltip.offset.y; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity)); + context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground); + context.setLineWidth(1 * opts.pixelRatio); + context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding); + context.closePath(); + context.stroke(); + context.fill(); + + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.labelFontColor || config.fontColor); + context.fillText(labelText, textX, textY + 0.5 * config.fontSize); + context.closePath(); + context.stroke(); + } +} + +function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) { + var toolTipOption = assign({}, { + activeBgColor: '#000000', + activeBgOpacity: 0.08 + }, opts.extra.tooltip); + var startY = opts.area[0]; + var endY = opts.height - opts.area[2]; + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity)); + context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY); + context.closePath(); + context.fill(); +} + +function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) { + var toolTipOption = assign({}, { + bgColor: '#000000', + bgOpacity: 0.7, + fontColor: '#FFFFFF' + }, opts.extra.tooltip); + var legendWidth = 4 * opts.pixelRatio; + var legendMarginRight = 5 * opts.pixelRatio; + var arrowWidth = 8 * opts.pixelRatio; + var isOverRightBorder = false; + if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') { + drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context); + } + + offset = assign({ + x: 0, + y: 0 + }, offset); + offset.y -= 8 * opts.pixelRatio; + var textWidth = textList.map(function(item) { + return measureText(item.text, config.fontSize); + }); + var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth); + var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight; + + // if beyond the right border + if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) { + isOverRightBorder = true; + } + if (toolTipHeight + offset.y > opts.height) { + offset.y = opts.height - toolTipHeight; + } + // draw background rect + context.beginPath(); + context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity)); + if (isOverRightBorder) { + context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio); + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio); + context.lineTo(offset.x - arrowWidth, offset.y); + context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y); + context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight); + context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight); + context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio); + context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio); + } else { + context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio); + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio); + context.lineTo(offset.x + arrowWidth, offset.y); + context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y); + context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight); + context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight); + context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio); + context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio); + } + + context.closePath(); + context.fill(); + + // draw legend + textList.forEach(function(item, index) { + if (item.color !== null) { + context.beginPath(); + context.setFillStyle(item.color); + var startX = offset.x + arrowWidth + 2 * config.toolTipPadding; + var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + + config.toolTipPadding + 1; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding; + } + context.fillRect(startX, startY, legendWidth, config.fontSize); + context.closePath(); + } + }); + + // draw text list + + textList.forEach(function(item, index) { + var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight; + if (isOverRightBorder) { + startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight; + } + var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index + + config.toolTipPadding; + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(toolTipOption.fontColor); + context.fillText(item.text, startX, startY + config.fontSize); + context.closePath(); + context.stroke(); + }); +} + +function drawYAxisTitle(title, opts, config, context) { + var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2; + context.save(); + context.beginPath(); + context.setFontSize(config.fontSize); + context.setFillStyle(opts.yAxis.titleFontColor || '#333333'); + context.translate(0, opts.height); + context.rotate(-90 * Math.PI / 180); + context.fillText(title, startX, opts.padding[3] + 0.5 * config.fontSize); + context.closePath(); + context.stroke(); + context.restore(); +} + +function drawColumnDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + let columnOption = assign({}, { + type: 'group', + width: eachSpacing / 2, + meter: { + border: 4, + fillColor: '#FFFFFF' + } + }, opts.extra.column); + let minRange = ranges.pop(); + let maxRange = ranges.shift(); + let calPoints = []; + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing); + } + + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process); + calPoints.push(tooltipPoints); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + context.setStrokeStyle(item.color || eachSeries.color); + context.setLineWidth(1) + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX-1, item.y); + context.lineTo(startX+item.width-2,item.y); + context.lineTo(startX+item.width-2,opts.height - opts.area[2]); + context.lineTo(startX,opts.height - opts.area[2]); + context.lineTo(startX,item.y); + //context.rect(startX, item.y, item.width, height); + context.closePath(); + context.stroke(); + context.fill(); + } + }); + break; + case 'stack': + // 绘制堆叠数据图 + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, + seriesIndex, + series, process); + calPoints.push(points); + points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series); + + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2 + 1; + var height = opts.height - item.y - opts.area[2]; + var height0 = opts.height - item.y0 - opts.area[2]; + if (seriesIndex > 0) { + height -= height0; + } + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width - 2, height); + context.closePath(); + context.fill(); + } + }); + break; + case 'meter': + // 绘制温度计数据图 + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter + .border); + if (seriesIndex == 0) { + points.forEach(function(item, index) { + if (item !== null) { + //画背景颜色 + context.beginPath(); + context.setFillStyle(columnOption.meter.fillColor); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + //画边框线 + if (columnOption.meter.border > 0) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(columnOption.meter.border * opts.pixelRatio); + context.moveTo(startX + columnOption.meter.border * 0.5, item.y + height); + context.lineTo(startX + columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5); + context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + columnOption.meter.border * 0.5); + context.lineTo(startX + item.width - columnOption.meter.border * 0.5, item.y + height); + context.stroke(); + } + } + }); + } else { + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.fillRect(startX, item.y, item.width, height); + context.closePath(); + context.fill(); + } + }); + } + break; + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + switch (columnOption.type) { + case 'group': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts); + + drawPointText(points, eachSeries, config, context); + break; + case 'stack': + var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, + seriesIndex, + series, process); + drawPointText(points, eachSeries, config, context); + break; + case 'meter': + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + break; + } + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + minRange: minRange, + maxRange: maxRange + }; +} + +function drawCandleDataPoints(series, seriesMA, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var candleOption = assign({}, { + color: {}, + average: {} + }, opts.extra.candle); + candleOption.color = assign({}, { + upLine: '#f04864', + upFill: '#f04864', + downLine: '#2fc25b', + downFill: '#2fc25b' + }, candleOption.color); + candleOption.average = assign({}, { + show: false, + name: [], + day: [], + color: config.colors + }, candleOption.average); + opts.extra.candle = candleOption; + + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let minRange = ranges.pop(); + let maxRange = ranges.shift(); + let calPoints = []; + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + //画均线 + if (candleOption.average.show) { + seriesMA.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + //calPoints.push(points); + var splitPointList = splitPoints(points); + + splitPointList.forEach(function(points, index) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(1); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + points.forEach(function(item, index) { + if (index > 0) { + var ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, + item.x, item + .y); + } + }); + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + }); + }); + } + //画K线 + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + var splitPointList = splitPoints(points); + splitPointList = splitPointList[0]; + + splitPointList.forEach(function(points, index) { + context.beginPath(); + //如果上涨 + if (data[index][1] - data[index][0] > 0) { + context.setStrokeStyle(candleOption.color.upLine); + context.setFillStyle(candleOption.color.upFill); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(points[3].x, points[3].y); //顶点 + context.lineTo(points[1].x, points[1].y); //收盘中间点 + context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点 + context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点 + context.lineTo(points[0].x, points[0].y); //开盘中间点 + context.lineTo(points[2].x, points[2].y); //底点 + context.lineTo(points[0].x, points[0].y); //开盘中间点 + context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点 + context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点 + context.lineTo(points[1].x, points[1].y); //收盘中间点 + context.moveTo(points[3].x, points[3].y); //顶点 + } else { + context.setStrokeStyle(candleOption.color.downLine); + context.setFillStyle(candleOption.color.downFill); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(points[3].x, points[3].y); //顶点 + context.lineTo(points[0].x, points[0].y); //开盘中间点 + context.lineTo(points[0].x - eachSpacing / 4, points[0].y); //开盘左侧点 + context.lineTo(points[1].x - eachSpacing / 4, points[1].y); //收盘左侧点 + context.lineTo(points[1].x, points[1].y); //收盘中间点 + context.lineTo(points[2].x, points[2].y); //底点 + context.lineTo(points[1].x, points[1].y); //收盘中间点 + context.lineTo(points[1].x + eachSpacing / 4, points[1].y); //收盘右侧点 + context.lineTo(points[0].x + eachSpacing / 4, points[0].y); //开盘右侧点 + context.lineTo(points[0].x, points[0].y); //开盘中间点 + context.moveTo(points[3].x, points[3].y); //顶点 + } + context.closePath(); + context.fill(); + context.stroke(); + }); + }); + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + minRange: minRange, + maxRange: maxRange + }; +} + +function drawAreaDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var areaOption = assign({},{ + type: 'straight', + opacity: 0.2, + addLine: false, + width: 2 + },opts.extra.area); + + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let minRange = ranges.pop(); + let maxRange = ranges.shift(); + let endY = opts.height - opts.area[2]; + let calPoints = []; + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + + series.forEach(function(eachSeries, seriesIndex) { + let data = eachSeries.data; + let points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + + let splitPointList = splitPoints(points); + + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数 + context.beginPath(); + context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity)); + context.setLineWidth(areaOption.width * opts.pixelRatio); + if (points.length > 1) { + let firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + + context.moveTo(firstPoint.x, firstPoint.y); + if (areaOption.type === 'curve') { + points.forEach(function(item, index) { + if (index > 0) { + let ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x, item.y); + } + }); + } else { + points.forEach(function(item, index) { + if (index > 0) { + context.lineTo(item.x, item.y); + } + }); + } + + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, endY); + context.lineTo(item.x - eachSpacing / 2, endY); + context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + + //画连线 + if (areaOption.addLine) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(areaOption.width * opts.pixelRatio); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + if (areaOption.type === 'curve') { + points.forEach(function(item, index) { + if (index > 0) { + let ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y,item.x,item.y); + } + }); + } else { + points.forEach(function(item, index) { + if (index > 0) { + context.lineTo(item.x, item.y); + } + }); + } + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + } + } + + //画点 + if (opts.dataPointShape !== false) { + var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length]; + drawPointShape(points, eachSeries.color, shape, context, opts); + } + + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + minRange: minRange, + maxRange: maxRange + }; +} + +function drawLineDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var lineOption = opts.extra.line || { + type: 'straight', + width: 2 + }; + lineOption.type = lineOption.type ? lineOption.type : 'straight'; + lineOption.width = lineOption.width ? lineOption.width : 2; + + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + var minRange = ranges.pop(); + var maxRange = ranges.shift(); + var calPoints = []; + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + var splitPointList = splitPoints(points); + + splitPointList.forEach(function(points, index) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(lineOption.width * opts.pixelRatio); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + if (lineOption.type === 'curve') { + points.forEach(function(item, index) { + if (index > 0) { + var ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, + item.x, item + .y); + } + }); + } else { + points.forEach(function(item, index) { + if (index > 0) { + context.lineTo(item.x, item.y); + } + }); + } + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + }); + + if (opts.dataPointShape !== false) { + var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length]; + drawPointShape(points, eachSeries.color, shape, context, opts); + } + }); + + if (opts.dataLabel !== false && process === 1) { + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + drawPointText(points, eachSeries, config, context); + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + minRange: minRange, + maxRange: maxRange + }; +} + +function drawMixDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let ranges = [].concat(opts.chartData.yAxisData.ranges); + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + eachSpacing = xAxisData.eachSpacing; + + let minRange = ranges.pop(); + let maxRange = ranges.shift(); + let endY = opts.height - opts.area[2]; + let calPoints = []; + + var columnIndex = 0; + var columnLength = 0; + series.forEach(function(eachSeries, seriesIndex) { + if (eachSeries.type == 'column') { + columnLength += 1; + } + }); + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + calPoints.push(points); + + // 绘制柱状数据图 + if (eachSeries.type == 'column') { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + points.forEach(function(item, index) { + if (item !== null) { + context.beginPath(); + context.setStrokeStyle(item.color || eachSeries.color); + context.setLineWidth(1) + context.setFillStyle(item.color || eachSeries.color); + var startX = item.x - item.width / 2; + var height = opts.height - item.y - opts.area[2]; + context.moveTo(startX, item.y); + context.moveTo(startX-1, item.y); + context.lineTo(startX+item.width-2,item.y); + context.lineTo(startX+item.width-2,opts.height - opts.area[2]); + context.lineTo(startX,opts.height - opts.area[2]); + context.lineTo(startX,item.y); + //context.rect(startX, item.y, item.width, height); + context.closePath(); + context.stroke(); + context.fill(); + context.closePath(); + context.fill(); + } + }); + columnIndex += 1; + } + + //绘制区域图数据 + + if (eachSeries.type == 'area') { + let splitPointList = splitPoints(points); + for (let i = 0; i < splitPointList.length; i++) { + let points = splitPointList[i]; + // 绘制区域数据 + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setFillStyle(hexToRgb(eachSeries.color, 0.2)); + context.setLineWidth(2 * opts.pixelRatio); + if (points.length > 1) { + var firstPoint = points[0]; + let lastPoint = points[points.length - 1]; + context.moveTo(firstPoint.x, firstPoint.y); + if (eachSeries.style === 'curve') { + points.forEach(function(item, index) { + if (index > 0) { + var ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y); + } + }); + } else { + points.forEach(function(item, index) { + if (index > 0) { + context.lineTo(item.x, item.y); + } + }); + } + context.lineTo(lastPoint.x, endY); + context.lineTo(firstPoint.x, endY); + context.lineTo(firstPoint.x, firstPoint.y); + } else { + let item = points[0]; + context.moveTo(item.x - eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, item.y); + context.lineTo(item.x + eachSpacing / 2, endY); + context.lineTo(item.x - eachSpacing / 2, endY); + context.moveTo(item.x - eachSpacing / 2, item.y); + } + context.closePath(); + context.fill(); + } + } + + // 绘制折线数据图 + if (eachSeries.type == 'line') { + var splitPointList = splitPoints(points); + splitPointList.forEach(function(points, index) { + context.beginPath(); + context.setStrokeStyle(eachSeries.color); + context.setLineWidth(2 * opts.pixelRatio); + if (points.length === 1) { + context.moveTo(points[0].x, points[0].y); + context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI); + } else { + context.moveTo(points[0].x, points[0].y); + if (eachSeries.style == 'curve') { + points.forEach(function(item, index) { + if (index > 0) { + var ctrlPoint = createCurveControlPoints(points, index - 1); + context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, + item.x, + item.y); + } + }); + } else { + points.forEach(function(item, index) { + if (index > 0) { + context.lineTo(item.x, item.y); + } + }); + } + context.moveTo(points[0].x, points[0].y); + } + context.closePath(); + context.stroke(); + }); + } + + // 绘制点数据图 + if (eachSeries.type == 'point') { + points.forEach(function(pointsa, index) { + if (pointsa) { + context.beginPath(); + context.setFillStyle(eachSeries.color); + context.setStrokeStyle('#FFFFFF'); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(pointsa.x + 3.5 * opts.pixelRatio, pointsa.y); + context.arc(pointsa.x, pointsa.y, 4 * opts.pixelRatio, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + context.stroke(); + } + }); + } + + if (eachSeries.addPoint == true && eachSeries.type !== 'column') { + var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length]; + drawPointShape(points, eachSeries.color, shape, context, opts); + } + }); + if (opts.dataLabel !== false && process === 1) { + var columnIndex = 0; + series.forEach(function(eachSeries, seriesIndex) { + var data = eachSeries.data; + var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process); + if (eachSeries.type !== 'column') { + drawPointText(points, eachSeries, config, context); + } else { + points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts); + drawPointText(points, eachSeries, config, context); + columnIndex += 1; + } + + }); + } + + context.restore(); + + return { + xAxisPoints: xAxisPoints, + calPoints: calPoints, + eachSpacing: eachSpacing, + minRange: minRange, + maxRange: maxRange + }; +} + +function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) { + var toolTipOption = opts.extra.tooltip || {}; + if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) { + drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) + } + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) { + context.translate(opts._scrollDistance_, 0); + } + if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) { + drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints); + } + context.restore(); + +} + +function drawXAxis(categories, opts, config, context) { + + let xAxisData = opts.chartData.xAxisData, + xAxisPoints = xAxisData.xAxisPoints, + startX = xAxisData.startX, + endX = xAxisData.endX, + eachSpacing = xAxisData.eachSpacing; + var boundaryGap='center'; + if (opts.type == 'line'||opts.type == 'area'){ + boundaryGap=opts.xAxis.boundaryGap; + } + var startY = opts.height - opts.area[2]; + var endY = opts.area[0]; + + //绘制滚动条 + if (opts.enableScroll && opts.xAxis.scrollShow) { + var scrollY = opts.height - opts.area[2] + config.xAxisHeight; + var scrollScreenWidth = endX - startX; + var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1); + var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth; + var scrollLeft = 0; + if (opts._scrollDistance_) { + scrollLeft = -opts._scrollDistance_ * (scrollScreenWidth) / scrollTotalWidth; + } + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pixelRatio); + context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF"); + context.moveTo(startX, scrollY); + context.lineTo(endX, scrollY); + context.stroke(); + context.closePath(); + context.beginPath(); + context.setLineCap('round'); + context.setLineWidth(6 * opts.pixelRatio); + context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6"); + context.moveTo(startX + scrollLeft, scrollY); + context.lineTo(startX + scrollLeft + scrollWidth, scrollY); + context.stroke(); + context.closePath(); + context.setLineCap('butt'); + } + + context.save(); + + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + + + if (opts.xAxis.disableGrid !== true) { + context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc"); + context.setLineCap('butt'); + context.setLineWidth(1 * opts.pixelRatio); + if (opts.xAxis.gridType == 'dash') { + context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]); + } + if (opts.xAxis.type === 'calibration') { + xAxisPoints.forEach(function(item, index) { + if (index > 0) { + context.beginPath(); + context.moveTo(item - eachSpacing / 2, startY); + context.lineTo(item - eachSpacing / 2, startY + 4 * opts.pixelRatio); + context.closePath(); + context.stroke(); + } + }); + } else { + opts.xAxis.gridEval = opts.xAxis.gridEval || 1; + xAxisPoints.forEach(function(item, index) { + if (index % opts.xAxis.gridEval == 0) { + context.beginPath(); + context.moveTo(item, startY); + context.lineTo(item, endY); + context.stroke(); + } + }); + } + context.setLineDash([]); + } + + + //不绘制X轴 + if (opts.xAxis.disabled !== true) { + // 对X轴列表做抽稀处理 + let validWidth = opts.width - opts.padding[1] - opts.padding[3] - config.yAxisWidth - config.yAxisTitleWidth; + //默认全部显示X轴标签 + let maxXAxisListLength = categories.length; + //如果设置了X轴单屏数量 + if (opts.xAxis.labelCount) { + //如果设置X轴密度 + if (opts.xAxis.itemCount) { + maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount); + } else { + maxXAxisListLength = opts.xAxis.labelCount; + } + maxXAxisListLength -= 1; + } + + let ratio = Math.ceil(categories.length / maxXAxisListLength); + + let newCategories = []; + let cgLength = categories.length; + for (let i = 0; i < cgLength; i++) { + if (i % ratio !== 0) { + newCategories.push(""); + } else { + newCategories.push(categories[i]); + } + } + newCategories[cgLength - 1] = categories[cgLength - 1]; + + var xAxisFontSize = opts.xAxis.fontSize || config.fontSize; + if (config._xAxisTextAngle_ === 0) { + newCategories.forEach(function(item, index) { + var offset = - measureText(item, xAxisFontSize) / 2; + if(boundaryGap == 'center'){ + offset+=eachSpacing / 2; + } + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || '#666666'); + context.fillText(item, xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - xAxisFontSize) / 2); + context.closePath(); + context.stroke(); + }); + + } else { + newCategories.forEach(function(item, index) { + context.save(); + context.beginPath(); + context.setFontSize(xAxisFontSize); + context.setFillStyle(opts.xAxis.fontColor || '#666666'); + var textWidth = measureText(item); + var offset = - textWidth; + if(boundaryGap == 'center'){ + offset+=eachSpacing / 2; + } + var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height), + transX = _calRotateTranslate.transX, + transY = _calRotateTranslate.transY; + + context.rotate(-1 * config._xAxisTextAngle_); + context.translate(transX, transY); + context.fillText(item, xAxisPoints[index] + offset, startY + xAxisFontSize + 5); + context.closePath(); + context.stroke(); + context.restore(); + }); + } + } + context.restore(); + +} + +function drawYAxisGrid(categories, opts, config, context) { + if (opts.yAxis.disableGrid === true) { + return; + } + let spacingValid = opts.height - opts.area[0] - opts.area[2]; + let eachSpacing = spacingValid / config.yAxisSplit; + let startX = opts.area[3]; + let xAxisPoints = opts.chartData.xAxisData.xAxisPoints, + xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing; + let TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1); + let endX = startX + TotalWidth; + + let points = []; + for (let i = 0; i < config.yAxisSplit + 1; i++) { + points.push(opts.height - opts.area[2] - eachSpacing * i); + } + + context.save(); + if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) { + context.translate(opts._scrollDistance_, 0); + } + + if (opts.yAxis.gridType == 'dash') { + context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]); + } + context.setStrokeStyle(opts.yAxis.gridColor || "#cccccc"); + context.setLineWidth(1 * opts.pixelRatio); + points.forEach(function(item, index) { + context.beginPath(); + context.moveTo(startX, item); + context.lineTo(endX, item); + context.stroke(); + }); + context.setLineDash([]); + + context.restore(); +} + +function drawYAxis(series, opts, config, context) { + if (opts.yAxis.disabled === true) { + return; + } + let rangesFormat = opts.chartData.yAxisData.rangesFormat; + var spacingValid = opts.height - opts.area[0] - opts.area[2]; + var eachSpacing = Math.floor(spacingValid / config.yAxisSplit); + var startX = opts.area[3]; + var endX = opts.width - opts.area[1]; + var endY = opts.height - opts.area[2]; + var fillEndY = endY + config.xAxisHeight; + if (opts.xAxis.scrollShow) { + fillEndY -= 3 * opts.pixelRatio; + } + // set YAxis background + context.beginPath(); + context.setFillStyle(opts.background || '#ffffff'); + if (opts._scrollDistance_ < 0) { + context.fillRect(0, 0, startX, fillEndY); + } + if(opts.enableScroll == true){ + context.fillRect(endX, 0, opts.width, fillEndY); + } + context.closePath(); + context.stroke(); + + var points = []; + for (var i = 0; i <= config.yAxisSplit; i++) { + points.push(opts.area[0] + eachSpacing * i); + } + + var yAxisFontSize = opts.yAxis.fontSize || config.fontSize; + rangesFormat.forEach(function(item, index) { + var pos = points[index] ? points[index] : endY; + context.beginPath(); + context.setFontSize(yAxisFontSize); + context.setFillStyle(opts.yAxis.fontColor || '#666666'); + context.fillText(String(item), opts.area[3] - config.yAxisWidth, pos + yAxisFontSize / 2); + context.closePath(); + context.stroke(); + }); + + if (opts.yAxis.title) { + drawYAxisTitle(opts.yAxis.title, opts, config, context); + } +} + +function drawLegend(series, opts, config, context, chartData) { + if (opts.legend.show === false) { + return; + } + let legendData = chartData.legendData; + let legendList = legendData.points; + let legendArea = legendData.area; + let padding = opts.legend.padding; + let fontSize = opts.legend.fontSize; + let shapeWidth = 15 * opts.pixelRatio; + let shapeRight = 5 * opts.pixelRatio; + let itemGap = opts.legend.itemGap; + let lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize); + + //画背景及边框 + context.beginPath(); + context.setLineWidth(opts.legend.borderWidth); + context.setStrokeStyle(opts.legend.borderColor); + context.setFillStyle(opts.legend.backgroundColor); + context.moveTo(legendArea.start.x, legendArea.start.y); + context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height); + context.closePath(); + context.fill(); + context.stroke(); + + legendList.forEach(function(itemList, listIndex) { + let width = 0; + let height = 0; + width = legendData.widthArr[listIndex]; + height = legendData.heightArr[listIndex]; + let startX = 0; + let startY = 0; + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + startX = legendArea.start.x + (legendArea.width - width) / 2; + startY = legendArea.start.y + padding + listIndex * lineHeight; + } else { + if (listIndex == 0) { + width = 0; + } else { + width = legendData.widthArr[listIndex - 1]; + } + startX = legendArea.start.x + padding + width; + startY = legendArea.start.y + padding + (legendArea.height - height) / 2; + } + + context.setFontSize(config.fontSize); + for (let i = 0; i < itemList.length; i++) { + let item = itemList[i]; + item.area = [0, 0, 0, 0]; + item.area[0] = startX; + item.area[1] = startY; + item.area[3] = startY + lineHeight; + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor); + context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor); + switch (item.legendShape) { + case 'line': + context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio, 15 * opts.pixelRatio, 4 * opts.pixelRatio); + break; + case 'triangle': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + break; + case 'diamond': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio); + context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + break; + case 'circle': + context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight); + context.arc(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight, 5 * opts.pixelRatio, 0, 2 * Math.PI); + break; + case 'rect': + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio); + break; + default: + context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio); + context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio); + } + context.closePath(); + context.fill(); + context.stroke(); + + startX += shapeWidth + shapeRight; + let fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2; + context.beginPath(); + context.setFontSize(fontSize); + context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor); + context.fillText(item.name, startX, startY + fontTrans); + context.closePath(); + context.stroke(); + if (opts.legend.position == 'top' || opts.legend.position == 'bottom') { + startX += measureText(item.name, fontSize) + itemGap; + item.area[2] = startX; + } else { + item.area[2] = startX + measureText(item.name, fontSize) + itemGap;; + startX -= shapeWidth + shapeRight; + startY += lineHeight; + } + } + }); +} + +function drawPieDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var pieOption = assign({}, { + activeOpacity: 0.5, + activeRadius: 10 * opts.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * opts.pixelRatio, + ringWidth: 0, + border:false, + borderWidth:2, + borderColor:'#FFFFFF' + }, opts.extra.pie); + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = pieOption.activeRadius; + } + + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + + series = getPieDataPoints(series, radius, process); + + var activeRadius = pieOption.activeRadius; + + series = series.map(function(eachSeries) { + eachSeries._start_ += (pieOption.offsetAngle) * Math.PI / 180; + return eachSeries; + }); + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_, + eachSeries._start_ + 2 * + eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(pieOption.borderWidth * opts.pixelRatio); + context.lineJoin = "round"; + context.setStrokeStyle(pieOption.borderColor); + context.setFillStyle(eachSeries.color); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (pieOption.border == true) { + context.stroke(); + } + }); + + if (opts.type === 'ring') { + var innerPieWidth = radius * 0.6; + if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) { + innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth); + } + context.beginPath(); + context.setFillStyle(opts.background || '#ffffff'); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI); + context.closePath(); + context.fill(); + } + + if (opts.dataLabel !== false && process === 1) { + var valid = false; + for (var i = 0, len = series.length; i < len; i++) { + if (series[i].data > 0) { + valid = true; + break; + } + } + + if (valid) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + } + + if (process === 1 && opts.type === 'ring') { + drawRingTitle(opts, config, context, centerPosition); + } + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawRoseDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var roseOption = assign({}, { + type: 'area', + activeOpacity: 0.5, + activeRadius: 10 * opts.pixelRatio, + offsetAngle: 0, + labelWidth: 15 * opts.pixelRatio, + border:false, + borderWidth:2, + borderColor:'#FFFFFF' + }, opts.extra.rose); + if (config.pieChartLinePadding == 0) { + config.pieChartLinePadding = roseOption.activeRadius; + } + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding); + var minRadius = roseOption.minRadius || radius * 0.5; + + series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process); + + var activeRadius = roseOption.activeRadius; + + series = series.map(function(eachSeries) { + eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180; + return eachSeries; + }); + + series.forEach(function(eachSeries, seriesIndex) { + if (opts.tooltip) { + if (opts.tooltip.index == seriesIndex) { + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5)); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_, + eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + } + } + context.beginPath(); + context.setLineWidth(roseOption.borderWidth * opts.pixelRatio); + context.lineJoin = "round"; + context.setStrokeStyle(roseOption.borderColor); + context.setFillStyle(eachSeries.color); + context.moveTo(centerPosition.x, centerPosition.y); + context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * + eachSeries._rose_proportion_ * Math.PI); + context.closePath(); + context.fill(); + if (roseOption.border == true) { + context.stroke(); + } + }); + + if (opts.dataLabel !== false && process === 1) { + var valid = false; + for (var i = 0, len = series.length; i < len; i++) { + if (series[i].data > 0) { + valid = true; + break; + } + } + + if (valid) { + drawPieText(series, opts, config, context, radius, centerPosition); + } + } + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawArcbarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var arcbarOption = assign({}, { + startAngle: 0.75, + endAngle: 0.25, + type: 'default', + width: 12 * opts.pixelRatio + }, opts.extra.arcbar); + + series = getArcbarDataPoints(series, arcbarOption, process); + var centerPosition = { + x: opts.width / 2, + y: opts.height / 2 + }; + var radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pixelRatio; + radius -= arcbarOption.width / 2; + + //背景颜色 + context.setLineWidth(arcbarOption.width); + context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9'); + context.setLineCap('round'); + context.beginPath(); + if (arcbarOption.type == 'default') { + context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * + Math.PI, false); + } else { + context.arc(centerPosition.x, centerPosition.y, radius, 0, 2 * Math.PI, false); + } + context.stroke(); + + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + context.setLineWidth(arcbarOption.width); + context.setStrokeStyle(eachSeries.color); + context.setLineCap('round'); + context.beginPath(); + context.arc(centerPosition.x, centerPosition.y, radius, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * + Math.PI, false); + context.stroke(); + } + + drawRingTitle(opts, config, context, centerPosition); + + return { + center: centerPosition, + radius: radius, + series: series + }; +} + +function drawGaugeDataPoints(categories, series, opts, config, context) { + var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1; + var gaugeOption = assign({}, { + startAngle: 0.75, + endAngle: 0.25, + width: 15, + splitLine: { + fixRadius: 0, + splitNumber: 10, + width: 15, + color: '#FFFFFF', + childNumber: 5, + childWidth: 5 + }, + pointer: { + width: 15, + color: 'auto' + } + }, opts.extra.gauge); + + if (gaugeOption.oldAngle == undefined) { + gaugeOption.oldAngle = gaugeOption.startAngle; + } + if (gaugeOption.oldData == undefined) { + gaugeOption.oldData = 0; + } + categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle); + + var centerPosition = { + x: opts.width / 2, + y: opts.height / 2 + }; + var radius = Math.min(centerPosition.x, centerPosition.y); + radius -= 5 * opts.pixelRatio; + radius -= gaugeOption.width / 2; + var innerRadius = radius - gaugeOption.width; + + //画背景 + context.setLineWidth(gaugeOption.width); + context.setLineCap('butt'); + for (let i = 0; i < categories.length; i++) { + let eachCategories = categories[i]; + context.beginPath(); + context.setStrokeStyle(eachCategories.color); + context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * + Math.PI, false); + context.stroke(); + } + context.save(); + + //画刻度线 + let totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1; + let splitAngle = totalAngle / gaugeOption.splitLine.splitNumber; + let childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber; + let startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius; + let endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width; + let childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth; + + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + + for (let i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(2 * opts.pixelRatio); + context.moveTo(startX, 0); + context.lineTo(endX, 0); + context.stroke(); + context.rotate(splitAngle * Math.PI); + } + context.restore(); + + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((gaugeOption.startAngle - 1) * Math.PI); + + for (let i = 0; i < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; i++) { + context.beginPath(); + context.setStrokeStyle(gaugeOption.splitLine.color); + context.setLineWidth(1 * opts.pixelRatio); + context.moveTo(startX, 0); + context.lineTo(childendX, 0); + context.stroke(); + context.rotate(childAngle * Math.PI); + } + context.restore(); + + //画指针 + series = getGaugeDataPoints(series, categories, gaugeOption, process); + + for (let i = 0; i < series.length; i++) { + let eachSeries = series[i]; + context.save(); + context.translate(centerPosition.x, centerPosition.y); + context.rotate((eachSeries._proportion_ - 1) * Math.PI); + context.beginPath(); + context.setFillStyle(eachSeries.color); + context.moveTo(gaugeOption.pointer.width, 0); + context.lineTo(0, -gaugeOption.pointer.width / 2); + context.lineTo(-innerRadius, 0); + context.lineTo(0, gaugeOption.pointer.width / 2); + context.lineTo(gaugeOption.pointer.width, 0); + context.closePath(); + context.fill(); + context.beginPath(); + context.setFillStyle('#FFFFFF'); + context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false); + context.fill(); + context.restore(); + } + + if (opts.dataLabel !== false) { + drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context); + } + + drawRingTitle(opts, config, context, centerPosition); + + if (process === 1 && opts.type === 'gauge') { + opts.extra.gauge.oldAngle = series[0]._proportion_; + opts.extra.gauge.oldData = series[0].data; + } + return { + center: centerPosition, + radius: radius, + innerRadius: innerRadius, + categories: categories, + totalAngle: totalAngle + }; +} + +function drawRadarDataPoints(series, opts, config, context) { + var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + var radarOption = assign({},{ + gridColor: '#cccccc', + labelColor: '#666666', + opacity: 0.2 + },opts.extra.radar); + + var coordinateAngle = getRadarCoordinateSeries(opts.categories.length); + + var centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 + }; + + var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin), + centerPosition.y - config.radarLabelTextMargin); + //TODO逻辑不对 + radius -= opts.padding[1]; + + // draw grid + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(radarOption.gridColor); + coordinateAngle.forEach(function(angle) { + var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition); + context.moveTo(centerPosition.x, centerPosition.y); + context.lineTo(pos.x, pos.y); + }); + context.stroke(); + context.closePath(); + // draw split line grid + + var _loop = function _loop(i) { + var startPos = {}; + context.beginPath(); + context.setLineWidth(1 * opts.pixelRatio); + context.setStrokeStyle(radarOption.gridColor); + coordinateAngle.forEach(function(angle, index) { + var pos = convertCoordinateOrigin(radius / config.radarGridCount * i * Math.cos(angle), radius / config.radarGridCount * + i * Math.sin(angle), centerPosition); + if (index === 0) { + startPos = pos; + context.moveTo(pos.x, pos.y); + } else { + context.lineTo(pos.x, pos.y); + } + }); + context.lineTo(startPos.x, startPos.y); + context.stroke(); + context.closePath(); + }; + + for (var i = 1; i <= config.radarGridCount; i++) { + _loop(i); + } + + var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process); + + radarDataPoints.forEach(function(eachSeries, seriesIndex) { + // 绘制区域数据 + context.beginPath(); + context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity)); + eachSeries.data.forEach(function(item, index) { + if (index === 0) { + context.moveTo(item.position.x, item.position.y); + } else { + context.lineTo(item.position.x, item.position.y); + } + }); + context.closePath(); + context.fill(); + + if (opts.dataPointShape !== false) { + var shape = config.dataPointShape[seriesIndex % config.dataPointShape.length]; + var points = eachSeries.data.map(function(item) { + return item.position; + }); + drawPointShape(points, eachSeries.color, shape, context, opts); + } + }); + // draw label text + drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context); + + return { + center: centerPosition, + radius: radius, + angleList: coordinateAngle + }; +} + +function normalInt(min, max, iter) { + iter = iter==0?1:iter; + var arr = []; + for (var i = 0; i < iter; i++) { + arr[i] = Math.random(); + }; + return Math.floor(arr.reduce(function(i,j){return i+j})/iter*(max-min))+min; +}; + +function collisionNew(area,points,width,height){ + var isIn=false; + for(let i=0;ipoints[i].area[2]||area[1]>points[i].area[3]||area[2]width || area[3]>height){ + isIn=true; + break; + }else{ + isIn=false; + } + }else{ + isIn=true; + break; + } + } + } + return isIn; +}; + +function getBoundingBox(data) { + var bounds = {}, coords; + bounds.xMin = 180; + bounds.xMax = 0; + bounds.yMin = 90; + bounds.yMax = 0 + for (var i = 0; i < data.length; i++) { + var coorda = data[i].geometry.coordinates + for (var k = 0; k < coorda.length; k++) { + coords = coorda[k]; + if (coords.length == 1) { + coords = coords[0] + } + for (var j = 0; j < coords.length; j++) { + var longitude = coords[j][0]; + var latitude = coords[j][1]; + var point = { + x: longitude, + y: latitude + } + bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x; + bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x; + bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y; + bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y; + } + } + } + return bounds; +} + +function coordinateToPoint(latitude, longitude,bounds,scale,xoffset,yoffset) { + return { + x: (longitude - bounds.xMin) * scale+xoffset, + y: (bounds.yMax - latitude) * scale+yoffset + }; +} + +function pointToCoordinate(pointY, pointX,bounds,scale,xoffset,yoffset) { + return { + x: (pointX-xoffset)/scale+bounds.xMin, + y: bounds.yMax - (pointY-yoffset)/scale + }; +} + +function isRayIntersectsSegment(poi,s_poi,e_poi){ + if (s_poi[1]==e_poi[1]){return false;} + if (s_poi[1]>poi[1] && e_poi[1]>poi[1]){return false;} + if (s_poi[1]poi[1]){return false;} + if (e_poi[1]==poi[1] && s_poi[1]>poi[1]){return false;} + if (s_poi[0]0.7) { + return true; + }else {return false}; + }; + for (let i = 0; i < points.length; i++) { + let text = points[i].name; + let tHeight = points[i].textSize; + let tWidth = measureText(text,tHeight); + let isSpin = Spin(); + let x,y,area,areav; + let breaknum=0; + while(true) { + breaknum++; + let isCollision; + if (isSpin) { + x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2; + y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2; + area=[y-5-tWidth+opts.width/2,(-x-5+opts.height/2),y+5+opts.width/2,(-x+tHeight+5+opts.height/2)]; + areav=[opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)-5,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)-5,opts.width-(opts.width/2-opts.height/2)-(-x+tHeight+5+opts.height/2)+tHeight,(opts.height/2-opts.width/2)+(y-5-tWidth+opts.width/2)+tWidth+5]; + isCollision = collisionNew(areav,points,opts.height,opts.width); + }else{ + x = normalInt(-opts.width/2, opts.width/2,5) - tWidth/2; + y = normalInt(-opts.height/2, opts.height/2,5)+tHeight/2; + area=[x-5+opts.width/2,y-5-tHeight+opts.height/2,x+tWidth+5+opts.width/2,y+5+opts.height/2]; + isCollision = collisionNew(area,points,opts.width,opts.height); + } + if (!isCollision) break; + if (breaknum==1000){ + area=[-1000,-1000,-1000,-1000]; + break; + } + }; + if (isSpin) { + points[i].area=areav; + points[i].areav=area; + }else{ + points[i].area=area; + } + points[i].rotate=isSpin; + }; + break; + } + return points; +} + + +function drawWordCloudDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let wordOption = assign({},{ + type: 'normal', + autoColors: true + },opts.extra.word); + + context.beginPath(); + context.setFillStyle(opts.background||'#FFFFFF'); + context.rect(0,0,opts.width,opts.height); + context.fill(); + context.save(); + let points = opts.chartData.wordCloudData; + context.translate(opts.width/2,opts.height/2); + + for(let i=0;i0){ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + }else{ + context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + } + }else{ + context.fillText(text,(points[i].areav[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].areav[1]+5+tHeight-opts.height/2)*process); + } + } + }else{ + if(points[i].area[0]>0){ + if (opts.tooltip) { + if (opts.tooltip.index == i) { + context.strokeText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + }else{ + context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + } + }else{ + context.fillText(text,(points[i].area[0]+5-opts.width/2)*process-tWidth*(1-process)/2,(points[i].area[1]+5+tHeight-opts.height/2)*process); + } + + } + } + + context.stroke(); + context.restore(); + } + context.restore(); +} + +function drawFunnelDataPoints(series, opts, config, context) { + let process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1; + let funnelOption = assign({},{ + activeWidth:10, + activeOpacity:0.3, + border:false, + borderWidth:2, + borderColor:'#FFFFFF', + fillOpacity:1, + labelAlign:'right' + },opts.extra.funnel); + let eachSpacing = (opts.height - opts.area[0] - opts.area[2])/series.length; + let centerPosition = { + x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2, + y: opts.height-opts.area[2] + }; + let activeWidth = funnelOption.activeWidth; + let radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth); + series = getFunnelDataPoints(series, radius, process); + context.save(); + context.translate(centerPosition.x,centerPosition.y); + for(let i=0;i 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.opts = assign({}, this.opts, data); + this.opts.updateData = true; + let scrollPosition = data.scrollPosition || 'current'; + switch (scrollPosition) { + case 'current': + this.opts._scrollDistance_ = this.scrollOption.currentOffset; + break; + case 'left': + this.opts._scrollDistance_ = 0; + this.scrollOption = { + currentOffset: 0, + startTouchX: 0, + distance: 0, + lastMoveTime: 0 + }; + break; + case 'right': + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config), + yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let totalWidth = eachSpacing * (xAxisPoints.length - 1); + let screenWidth = endX - startX; + offsetLeft = screenWidth - totalWidth; + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + this.opts._scrollDistance_ = offsetLeft; + break; + } + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +Charts.prototype.zoom = function() { + var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount; + if (this.opts.enableScroll !== true) { + console.log('请启用滚动条后使用!') + return; + } + //当前屏幕中间点 + let centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round( + this.opts.xAxis.itemCount / 2); + this.opts.animation = false; + this.opts.xAxis.itemCount = val.itemCount; + //重新计算x轴偏移距离 + let _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config), + yAxisWidth = _calYAxisData.yAxisWidth; + this.config.yAxisWidth = yAxisWidth; + let offsetLeft = 0; + let _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config), + xAxisPoints = _getXAxisPoints0.xAxisPoints, + startX = _getXAxisPoints0.startX, + endX = _getXAxisPoints0.endX, + eachSpacing = _getXAxisPoints0.eachSpacing; + let centerLeft = eachSpacing * centerPoint; + let screenWidth = endX - startX; + let MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1); + offsetLeft = screenWidth / 2 - centerLeft; + if (offsetLeft > 0) { + offsetLeft = 0; + } + if (offsetLeft < MaxLeft) { + offsetLeft = MaxLeft; + } + this.scrollOption = { + currentOffset: offsetLeft, + startTouchX: offsetLeft, + distance: 0, + lastMoveTime: 0 + }; + this.opts._scrollDistance_ = offsetLeft; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); +}; + +Charts.prototype.stopAnimation = function() { + this.animationInstance && this.animationInstance.stop(); +}; + +Charts.prototype.addEventListener = function(type, listener) { + this.event.addEventListener(type, listener); +}; + +Charts.prototype.getCurrentDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose') { + return findPieChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.pieData); + } else if (this.opts.type === 'radar') { + return findRadarChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.radarData, this.opts.categories.length); + } else if (this.opts.type === 'funnel') { + return findFunnelChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.funnelData); + } else if (this.opts.type === 'map') { + return findMapChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts); + }else if (this.opts.type === 'word') { + return findWordChartCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.wordCloudData); + } else { + return findCurrentIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.xAxisPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset)); + } + } + return -1; +}; + +Charts.prototype.getLegendDataIndex = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + let _touches$ = getTouches(touches, this.opts, e); + return findLegendIndex({ + x: _touches$.x, + y: _touches$.y + }, this.opts.chartData.legendData); + } + return -1; +}; + +Charts.prototype.touchLegend = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches) { + var _touches$ = getTouches(touches, this.opts, e); + var index = this.getLegendDataIndex(e); + if (index >= 0) { + this.opts.series[index].show = !this.opts.series[index].show; + this.opts.animation = option.animation ? true : false; + drawCharts.call(this, this.opts.type, this.opts, this.config, this.context); + } + } + +}; + +Charts.prototype.showToolTip = function(e) { + var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (!touches) { + console.log("touchError"); + } + var _touches$ = getTouches(touches, this.opts, e); + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column') { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getToolTipData = getToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'mix') { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getMixToolTipData = getMixToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories,option), + textList = _getMixToolTipData.textList, + offset = _getMixToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'candle') { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts.chartData.calPoints, + index, this.opts.categories, this.opts.extra.candle, option), + textList = _getToolTipData.textList, + offset = _getToolTipData.offset; + offset.y = _touches$.y; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose'||this.opts.type === 'funnel' ) { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = this.opts._series_[index]; + var textList = [{ + text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data, + color: seriesData.color + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'map'||this.opts.type === 'word') { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = this.opts._series_[index]; + var textList = [{ + text: option.format ? option.format(seriesData) : seriesData.properties.name , + color: seriesData.color + }]; + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + opts.updateData = false; + drawCharts.call(this, opts.type, opts, this.config, this.context); + } + if (this.opts.type === 'radar') { + var index = this.getCurrentDataIndex(e); + if (index > -1) { + var currentOffset = this.scrollOption.currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset, + animation: false + }); + var seriesData = getSeriesDataItem(this.opts.series, index); + if (seriesData.length !== 0) { + var textList = seriesData.map(function(item) { + return { + text: option.format ? option.format(item) : item.name + ': ' + item.data, + color: item.color + }; + }); + var offset = { + x: _touches$.x, + y: _touches$.y + }; + opts.tooltip = { + textList: textList, + offset: offset, + option: option, + index: index + }; + } + } + drawCharts.call(this, opts.type, opts, this.config, this.context); + } +}; + +Charts.prototype.translate = function(distance) { + this.scrollOption = { + currentOffset: distance, + startTouchX: distance, + distance: 0, + lastMoveTime: 0 + }; + let opts = assign({}, this.opts, { + _scrollDistance_: distance, + animation: false + }); + drawCharts.call(this, this.opts.type, opts, this.config, this.context); +}; + +Charts.prototype.scrollStart = function(e) { + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + var _touches$ = getTouches(touches, this.opts, e); + if (touches && this.opts.enableScroll === true) { + this.scrollOption.startTouchX = _touches$.x; + } +}; + +Charts.prototype.scroll = function(e) { + if (this.scrollOption.lastMoveTime === 0) { + this.scrollOption.lastMoveTime = Date.now(); + } + let Limit = this.opts.extra.touchMoveLimit || 20; + let currMoveTime = Date.now(); + let duration = currMoveTime - this.scrollOption.lastMoveTime; + if (duration < Math.floor(1000 / Limit)) return; + this.scrollOption.lastMoveTime = currMoveTime; + var touches = null; + if (e.changedTouches) { + touches = e.changedTouches[0]; + } else { + touches = e.mp.changedTouches[0]; + } + if (touches && this.opts.enableScroll === true) { + var _touches$ = getTouches(touches, this.opts, e); + var _distance; + _distance = _touches$.x - this.scrollOption.startTouchX; + var currentOffset = this.scrollOption.currentOffset; + var validDistance = calValidDistance(currentOffset + _distance, this.opts.chartData, this.config, this.opts); + this.scrollOption.distance = _distance = validDistance - currentOffset; + var opts = assign({}, this.opts, { + _scrollDistance_: currentOffset + _distance, + animation: false + }); + drawCharts.call(this, opts.type, opts, this.config, this.context); + return currentOffset + _distance; + } +}; + +Charts.prototype.scrollEnd = function(e) { + if (this.opts.enableScroll === true) { + var _scrollOption = this.scrollOption, + currentOffset = _scrollOption.currentOffset, + distance = _scrollOption.distance; + this.scrollOption.currentOffset = currentOffset + distance; + this.scrollOption.distance = 0; + } +}; +if (typeof module === "object" && typeof module.exports === "object") { + module.exports = Charts; + //export default Charts;//建议使用nodejs的module导出方式,如报错请使用export方式导出 +} diff --git a/src/libs/versionUpdate.js b/src/libs/versionUpdate.js new file mode 100644 index 0000000..4417176 --- /dev/null +++ b/src/libs/versionUpdate.js @@ -0,0 +1,24 @@ +import axios from 'axios' + +const isNewVersion = () => { + let updae_url="" + // let updae_url = getApp().globalData.text; + let url = updae_url+ `/static/version.json?t=${new Date().getTime()}` + axios.get(url).then(res => { + if (res.status === 200) { + let vueVersion = res.data.version; + let localVueVersion = localStorage.getItem('vueVersion'); + if (localVueVersion && localVueVersion != vueVersion) { + localStorage.setItem('vueVersion', vueVersion); + window.location.reload(); + return; + } else { + localStorage.setItem('vueVersion', vueVersion); + } + } + }) +} + +export default { + isNewVersion +} diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..e5bb2f8 --- /dev/null +++ b/src/main.js @@ -0,0 +1,76 @@ +import App from './App' +import store from './store' +import './router/my_router.js'; //引入拦截 +import VueClipboard from 'vue-clipboard2' //复制粘贴 +import uView from './uni_modules/vk-uview-ui';// 引入 uView UI +// import uView2 from './components/uview-ui' +import comMessage from './mycomponents/common/comMessage.vue' + +// #ifndef VUE3 +import Vue from 'vue' +console.log("Vuew2222"); +Vue.config.productionTip = false +Vue.prototype.$store = store +Vue.prototype.$adpid = "1111111111" +Vue.prototype.$backgroundAudioData = { + playing: false, + playTime: 0, + formatedPlayTime: '00:00:00' +} +App.mpType = 'app' +const app = new Vue({ + store, + ...App +}) +app.$mount() +// #endif + +import { + createSSRApp +} from "vue"; +export function createApp() { + const app = createSSRApp(App); + app.use(store) + app.use(VueClipboard) + app.use(uView) + // app.use(uView2) + app.component('comMessage', comMessage) + console.log("网络22请求") + // startApp(app); + return { + app, + }; +} + +export function startApp(app) { + uni.request({ + url: `./static/config.json?t=${new Date().getTime()}`, + method: 'get', + data: {}, + success: (res) => { + if (res.data != "") { + //在配置中读url,company等信息 + // app.config.globalProperties.$baseInfo = res.data.baseInfo; + // getApp().globalData.dev_url = res.data.baseInfo.dev.value; + // getApp().globalData.request_url = res.data.baseInfo.request_url.value; + // getApp().globalData.tenantId = res.data.baseInfo.tenantId.value; + // app.config.globalProperties.$recepit_configList = res.data.recepit_configList; + // getApp().globalData.recepit_configList = res.data.recepit_configList; + // getApp().globalData.feed_configList = res.data.feed_configList; + // getApp().globalData.isDevelopment = res.data.baseInfo.isDevelopment.value + // Vue.prototype.$dev_url = res.data.baseInfo.dev.value; + // console.log("网络",res.data.baseInfo.request_url.value) + // console.log("开发环境12",res.data.baseInfo.isDevelopment.value) + // uni.setStorageSync("request_url",res.data.baseInfo.request_url.value) + // uni.setStorageSync("isDevelopment",res.data.baseInfo.isDevelopment.value) + } + }, + fail: (error) => { + + } + }) + + return { + startApp + }; +} diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..949117c --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,85 @@ +{ + "name" : "wms", + "appid" : "__UNI__43932FE", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : 1, + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "compatible" : { + "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持 + }, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : { + "Bluetooth" : {}, + "Barcode" : {}, + "Camera" : {} + }, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ], + "minSdkVersion" : 23 + }, + /* ios打包配置 */ + "ios" : { + "dSYMs" : false + }, + /* SDK配置 */ + "sdkConfigs" : { + "ad" : {} + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3" +} diff --git a/src/mycomponents/balance/balance.vue b/src/mycomponents/balance/balance.vue new file mode 100644 index 0000000..d6f8c46 --- /dev/null +++ b/src/mycomponents/balance/balance.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/mycomponents/balance/balanceDetailPopup.vue b/src/mycomponents/balance/balanceDetailPopup.vue new file mode 100644 index 0000000..62c0be1 --- /dev/null +++ b/src/mycomponents/balance/balanceDetailPopup.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/balance/balanceLabel.vue b/src/mycomponents/balance/balanceLabel.vue new file mode 100644 index 0000000..1b20c0f --- /dev/null +++ b/src/mycomponents/balance/balanceLabel.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/balance/balanceMove.vue b/src/mycomponents/balance/balanceMove.vue new file mode 100644 index 0000000..c906afe --- /dev/null +++ b/src/mycomponents/balance/balanceMove.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/mycomponents/balance/balanceSelect.vue b/src/mycomponents/balance/balanceSelect.vue new file mode 100644 index 0000000..0b63c99 --- /dev/null +++ b/src/mycomponents/balance/balanceSelect.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/mycomponents/balance/batch.vue b/src/mycomponents/balance/batch.vue new file mode 100644 index 0000000..1fda071 --- /dev/null +++ b/src/mycomponents/balance/batch.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/mycomponents/balance/bussinessType.vue b/src/mycomponents/balance/bussinessType.vue new file mode 100644 index 0000000..82029e3 --- /dev/null +++ b/src/mycomponents/balance/bussinessType.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/mycomponents/balance/handleBalance.vue b/src/mycomponents/balance/handleBalance.vue new file mode 100644 index 0000000..1707d4a --- /dev/null +++ b/src/mycomponents/balance/handleBalance.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/mycomponents/balance/location.vue b/src/mycomponents/balance/location.vue new file mode 100644 index 0000000..d5956aa --- /dev/null +++ b/src/mycomponents/balance/location.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/mycomponents/balance/moveStatus.vue b/src/mycomponents/balance/moveStatus.vue new file mode 100644 index 0000000..b65f39d --- /dev/null +++ b/src/mycomponents/balance/moveStatus.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/mycomponents/balance/pack.vue b/src/mycomponents/balance/pack.vue new file mode 100644 index 0000000..f34c1ec --- /dev/null +++ b/src/mycomponents/balance/pack.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/mycomponents/balance/productionLabel.vue b/src/mycomponents/balance/productionLabel.vue new file mode 100644 index 0000000..4f3824a --- /dev/null +++ b/src/mycomponents/balance/productionLabel.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/mycomponents/balance/purchaseLabel.vue b/src/mycomponents/balance/purchaseLabel.vue new file mode 100644 index 0000000..92c9736 --- /dev/null +++ b/src/mycomponents/balance/purchaseLabel.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/mycomponents/balance/recommendBalance.vue b/src/mycomponents/balance/recommendBalance.vue new file mode 100644 index 0000000..1acfad8 --- /dev/null +++ b/src/mycomponents/balance/recommendBalance.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/mycomponents/balance/toLocation.vue b/src/mycomponents/balance/toLocation.vue new file mode 100644 index 0000000..d44ba99 --- /dev/null +++ b/src/mycomponents/balance/toLocation.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/src/mycomponents/batch/batch.vue b/src/mycomponents/batch/batch.vue new file mode 100644 index 0000000..d251eac --- /dev/null +++ b/src/mycomponents/batch/batch.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/button/requestButton.vue b/src/mycomponents/button/requestButton.vue new file mode 100644 index 0000000..8db55a8 --- /dev/null +++ b/src/mycomponents/button/requestButton.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/common/comBlankView.vue b/src/mycomponents/common/comBlankView.vue new file mode 100644 index 0000000..96a64f6 --- /dev/null +++ b/src/mycomponents/common/comBlankView.vue @@ -0,0 +1,31 @@ + + + + + + diff --git a/src/mycomponents/common/comEmptyView.vue b/src/mycomponents/common/comEmptyView.vue new file mode 100644 index 0000000..c8b41ab --- /dev/null +++ b/src/mycomponents/common/comEmptyView.vue @@ -0,0 +1,41 @@ + + + + + + diff --git a/src/mycomponents/common/comListHint.vue b/src/mycomponents/common/comListHint.vue new file mode 100644 index 0000000..7808084 --- /dev/null +++ b/src/mycomponents/common/comListHint.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/mycomponents/common/comListItem.vue b/src/mycomponents/common/comListItem.vue new file mode 100644 index 0000000..6d7794f --- /dev/null +++ b/src/mycomponents/common/comListItem.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/mycomponents/common/comMessage.vue b/src/mycomponents/common/comMessage.vue new file mode 100644 index 0000000..9b560ca --- /dev/null +++ b/src/mycomponents/common/comMessage.vue @@ -0,0 +1,479 @@ + + + + diff --git a/src/mycomponents/common/comPopup.vue b/src/mycomponents/common/comPopup.vue new file mode 100644 index 0000000..d0b37dc --- /dev/null +++ b/src/mycomponents/common/comPopup.vue @@ -0,0 +1,39 @@ + + + + + + + diff --git a/src/mycomponents/common/comUploadCamera.vue b/src/mycomponents/common/comUploadCamera.vue new file mode 100644 index 0000000..b1f0857 --- /dev/null +++ b/src/mycomponents/common/comUploadCamera.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/mycomponents/container/container.vue b/src/mycomponents/container/container.vue new file mode 100644 index 0000000..cf510da --- /dev/null +++ b/src/mycomponents/container/container.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/mycomponents/container/containerInfo.vue b/src/mycomponents/container/containerInfo.vue new file mode 100644 index 0000000..36ef39f --- /dev/null +++ b/src/mycomponents/container/containerInfo.vue @@ -0,0 +1,54 @@ + + + + + + diff --git a/src/mycomponents/container/containerStatus.vue b/src/mycomponents/container/containerStatus.vue new file mode 100644 index 0000000..c3fe658 --- /dev/null +++ b/src/mycomponents/container/containerStatus.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/src/mycomponents/container/targetContainer.vue b/src/mycomponents/container/targetContainer.vue new file mode 100644 index 0000000..e8e0ac2 --- /dev/null +++ b/src/mycomponents/container/targetContainer.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/mycomponents/detail/comDetailCard.vue b/src/mycomponents/detail/comDetailCard.vue new file mode 100644 index 0000000..708a35d --- /dev/null +++ b/src/mycomponents/detail/comDetailCard.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/src/mycomponents/detail/comJobDetailCard.vue b/src/mycomponents/detail/comJobDetailCard.vue new file mode 100644 index 0000000..7f1d111 --- /dev/null +++ b/src/mycomponents/detail/comJobDetailCard.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/detail/comRequestDetailCard.vue b/src/mycomponents/detail/comRequestDetailCard.vue new file mode 100644 index 0000000..e687afa --- /dev/null +++ b/src/mycomponents/detail/comRequestDetailCard.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/src/mycomponents/detail/detailBalanceInfo.vue b/src/mycomponents/detail/detailBalanceInfo.vue new file mode 100644 index 0000000..43cfb89 --- /dev/null +++ b/src/mycomponents/detail/detailBalanceInfo.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/mycomponents/detail/detailCommonInfo.vue b/src/mycomponents/detail/detailCommonInfo.vue new file mode 100644 index 0000000..9705aa5 --- /dev/null +++ b/src/mycomponents/detail/detailCommonInfo.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/mycomponents/detail/detailHandleInfo.vue b/src/mycomponents/detail/detailHandleInfo.vue new file mode 100644 index 0000000..aa0597d --- /dev/null +++ b/src/mycomponents/detail/detailHandleInfo.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/mycomponents/detail/detailItemInfo.vue b/src/mycomponents/detail/detailItemInfo.vue new file mode 100644 index 0000000..b1d54b8 --- /dev/null +++ b/src/mycomponents/detail/detailItemInfo.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/mycomponents/detail/detailList.vue b/src/mycomponents/detail/detailList.vue new file mode 100644 index 0000000..b14fe54 --- /dev/null +++ b/src/mycomponents/detail/detailList.vue @@ -0,0 +1,146 @@ + + + + + + + + \ No newline at end of file diff --git a/src/mycomponents/detail/detailPackageInfo.vue b/src/mycomponents/detail/detailPackageInfo.vue new file mode 100644 index 0000000..8a45c8d --- /dev/null +++ b/src/mycomponents/detail/detailPackageInfo.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/mycomponents/detail/detailRecommendInfo.vue b/src/mycomponents/detail/detailRecommendInfo.vue new file mode 100644 index 0000000..729d5fb --- /dev/null +++ b/src/mycomponents/detail/detailRecommendInfo.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/mycomponents/detail/jobDetailPopup.vue b/src/mycomponents/detail/jobDetailPopup.vue new file mode 100644 index 0000000..2e65f35 --- /dev/null +++ b/src/mycomponents/detail/jobDetailPopup.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/mycomponents/detail/recordDetailBasicInfo.vue b/src/mycomponents/detail/recordDetailBasicInfo.vue new file mode 100644 index 0000000..0b63bbe --- /dev/null +++ b/src/mycomponents/detail/recordDetailBasicInfo.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/mycomponents/detail/recordDetailCommonInfo.vue b/src/mycomponents/detail/recordDetailCommonInfo.vue new file mode 100644 index 0000000..ef7a547 --- /dev/null +++ b/src/mycomponents/detail/recordDetailCommonInfo.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/mycomponents/detail/recordDetailPopup.vue b/src/mycomponents/detail/recordDetailPopup.vue new file mode 100644 index 0000000..a92991f --- /dev/null +++ b/src/mycomponents/detail/recordDetailPopup.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/mycomponents/detail/requestDetailBasicInfo.vue b/src/mycomponents/detail/requestDetailBasicInfo.vue new file mode 100644 index 0000000..e78caa4 --- /dev/null +++ b/src/mycomponents/detail/requestDetailBasicInfo.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/mycomponents/detail/requestDetailCommonInfo.vue b/src/mycomponents/detail/requestDetailCommonInfo.vue new file mode 100644 index 0000000..3fa9226 --- /dev/null +++ b/src/mycomponents/detail/requestDetailCommonInfo.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/mycomponents/form/customerFrom.vue b/src/mycomponents/form/customerFrom.vue new file mode 100644 index 0000000..7f04e98 --- /dev/null +++ b/src/mycomponents/form/customerFrom.vue @@ -0,0 +1,214 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/form/selectPopup.vue b/src/mycomponents/form/selectPopup.vue new file mode 100644 index 0000000..72cb9bf --- /dev/null +++ b/src/mycomponents/form/selectPopup.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/item/item.vue b/src/mycomponents/item/item.vue new file mode 100644 index 0000000..abcceaa --- /dev/null +++ b/src/mycomponents/item/item.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/mycomponents/item/itemCompareQty.vue b/src/mycomponents/item/itemCompareQty.vue new file mode 100644 index 0000000..6d46301 --- /dev/null +++ b/src/mycomponents/item/itemCompareQty.vue @@ -0,0 +1,63 @@ + + + + diff --git a/src/mycomponents/item/itemDetailInfo.vue b/src/mycomponents/item/itemDetailInfo.vue new file mode 100644 index 0000000..6649a07 --- /dev/null +++ b/src/mycomponents/item/itemDetailInfo.vue @@ -0,0 +1,74 @@ + + + + diff --git a/src/mycomponents/item/itemInfo.vue b/src/mycomponents/item/itemInfo.vue new file mode 100644 index 0000000..f40e16c --- /dev/null +++ b/src/mycomponents/item/itemInfo.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/src/mycomponents/item/itemInfoPopup.vue b/src/mycomponents/item/itemInfoPopup.vue new file mode 100644 index 0000000..9ce3580 --- /dev/null +++ b/src/mycomponents/item/itemInfoPopup.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/mycomponents/item/itemQty.vue b/src/mycomponents/item/itemQty.vue new file mode 100644 index 0000000..ed98009 --- /dev/null +++ b/src/mycomponents/item/itemQty.vue @@ -0,0 +1,67 @@ + + + + diff --git a/src/mycomponents/item/itemRecommendQty.vue b/src/mycomponents/item/itemRecommendQty.vue new file mode 100644 index 0000000..92574af --- /dev/null +++ b/src/mycomponents/item/itemRecommendQty.vue @@ -0,0 +1,65 @@ + + + + diff --git a/src/mycomponents/item/itemSelect.vue b/src/mycomponents/item/itemSelect.vue new file mode 100644 index 0000000..6a059ff --- /dev/null +++ b/src/mycomponents/item/itemSelect.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/mycomponents/item/itemStatus.vue b/src/mycomponents/item/itemStatus.vue new file mode 100644 index 0000000..b7f1c7e --- /dev/null +++ b/src/mycomponents/item/itemStatus.vue @@ -0,0 +1,47 @@ + + + + + + + diff --git a/src/mycomponents/job/jobBottom.vue b/src/mycomponents/job/jobBottom.vue new file mode 100644 index 0000000..46e9ad6 --- /dev/null +++ b/src/mycomponents/job/jobBottom.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/mycomponents/job/jobCard.vue b/src/mycomponents/job/jobCard.vue new file mode 100644 index 0000000..0b10b5c --- /dev/null +++ b/src/mycomponents/job/jobCard.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/mycomponents/job/jobComMainCard.vue b/src/mycomponents/job/jobComMainCard.vue new file mode 100644 index 0000000..3025201 --- /dev/null +++ b/src/mycomponents/job/jobComMainCard.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/job/jobComMainCardAsn.vue b/src/mycomponents/job/jobComMainCardAsn.vue new file mode 100644 index 0000000..3011c11 --- /dev/null +++ b/src/mycomponents/job/jobComMainCardAsn.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/job/jobCommonInfo.vue b/src/mycomponents/job/jobCommonInfo.vue new file mode 100644 index 0000000..28afb77 --- /dev/null +++ b/src/mycomponents/job/jobCommonInfo.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/mycomponents/job/jobDetailPopup.vue b/src/mycomponents/job/jobDetailPopup.vue new file mode 100644 index 0000000..fa69104 --- /dev/null +++ b/src/mycomponents/job/jobDetailPopup.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/mycomponents/job/jobFilter.vue b/src/mycomponents/job/jobFilter.vue new file mode 100644 index 0000000..a209c2a --- /dev/null +++ b/src/mycomponents/job/jobFilter.vue @@ -0,0 +1,155 @@ + + + + diff --git a/src/mycomponents/job/jobInfoPopup.vue b/src/mycomponents/job/jobInfoPopup.vue new file mode 100644 index 0000000..92f04d7 --- /dev/null +++ b/src/mycomponents/job/jobInfoPopup.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/mycomponents/job/jobNumber.vue b/src/mycomponents/job/jobNumber.vue new file mode 100644 index 0000000..94a3849 --- /dev/null +++ b/src/mycomponents/job/jobNumber.vue @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/src/mycomponents/job/jobPersonInfo.vue b/src/mycomponents/job/jobPersonInfo.vue new file mode 100644 index 0000000..fa28ee1 --- /dev/null +++ b/src/mycomponents/job/jobPersonInfo.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/mycomponents/job/jobProperty.vue b/src/mycomponents/job/jobProperty.vue new file mode 100644 index 0000000..f231f5e --- /dev/null +++ b/src/mycomponents/job/jobProperty.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/mycomponents/job/jobRequestInfo.vue b/src/mycomponents/job/jobRequestInfo.vue new file mode 100644 index 0000000..31cb230 --- /dev/null +++ b/src/mycomponents/job/jobRequestInfo.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/mycomponents/job/jobSettingInfo.vue b/src/mycomponents/job/jobSettingInfo.vue new file mode 100644 index 0000000..db1ab47 --- /dev/null +++ b/src/mycomponents/job/jobSettingInfo.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/mycomponents/job/jobStatus.vue b/src/mycomponents/job/jobStatus.vue new file mode 100644 index 0000000..26ea46a --- /dev/null +++ b/src/mycomponents/job/jobStatus.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/mycomponents/job/jobTop.vue b/src/mycomponents/job/jobTop.vue new file mode 100644 index 0000000..7aab393 --- /dev/null +++ b/src/mycomponents/job/jobTop.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/job/jobTopAsn.vue b/src/mycomponents/job/jobTopAsn.vue new file mode 100644 index 0000000..ad061ee --- /dev/null +++ b/src/mycomponents/job/jobTopAsn.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/mycomponents/job/jobcomDetailCard.vue b/src/mycomponents/job/jobcomDetailCard.vue new file mode 100644 index 0000000..77fc6fe --- /dev/null +++ b/src/mycomponents/job/jobcomDetailCard.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/mycomponents/label/label.vue b/src/mycomponents/label/label.vue new file mode 100644 index 0000000..438ad69 --- /dev/null +++ b/src/mycomponents/label/label.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/location/location.vue b/src/mycomponents/location/location.vue new file mode 100644 index 0000000..b2286bf --- /dev/null +++ b/src/mycomponents/location/location.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/location/locationCompare.vue b/src/mycomponents/location/locationCompare.vue new file mode 100644 index 0000000..00d3428 --- /dev/null +++ b/src/mycomponents/location/locationCompare.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/mycomponents/location/locationDetail.vue b/src/mycomponents/location/locationDetail.vue new file mode 100644 index 0000000..c6fd752 --- /dev/null +++ b/src/mycomponents/location/locationDetail.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/mycomponents/location/locationDrop.vue b/src/mycomponents/location/locationDrop.vue new file mode 100644 index 0000000..6862f92 --- /dev/null +++ b/src/mycomponents/location/locationDrop.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/location/locationInfo.vue b/src/mycomponents/location/locationInfo.vue new file mode 100644 index 0000000..6a63f0a --- /dev/null +++ b/src/mycomponents/location/locationInfo.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/mycomponents/location/locationStatus.vue b/src/mycomponents/location/locationStatus.vue new file mode 100644 index 0000000..cf26117 --- /dev/null +++ b/src/mycomponents/location/locationStatus.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/mycomponents/location/requiredLocation.vue b/src/mycomponents/location/requiredLocation.vue new file mode 100644 index 0000000..aac2b2d --- /dev/null +++ b/src/mycomponents/location/requiredLocation.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/mycomponents/package/packageBalance.vue b/src/mycomponents/package/packageBalance.vue new file mode 100644 index 0000000..8fab758 --- /dev/null +++ b/src/mycomponents/package/packageBalance.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/mycomponents/package/packageCard.vue b/src/mycomponents/package/packageCard.vue new file mode 100644 index 0000000..f56df99 --- /dev/null +++ b/src/mycomponents/package/packageCard.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/package/packageDetailPopup.vue b/src/mycomponents/package/packageDetailPopup.vue new file mode 100644 index 0000000..0c62362 --- /dev/null +++ b/src/mycomponents/package/packageDetailPopup.vue @@ -0,0 +1,204 @@ + + + + + diff --git a/src/mycomponents/package/packageHandle.vue b/src/mycomponents/package/packageHandle.vue new file mode 100644 index 0000000..ecb4274 --- /dev/null +++ b/src/mycomponents/package/packageHandle.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/mycomponents/package/packageList.vue b/src/mycomponents/package/packageList.vue new file mode 100644 index 0000000..1f7d040 --- /dev/null +++ b/src/mycomponents/package/packageList.vue @@ -0,0 +1,215 @@ + + + + + + \ No newline at end of file diff --git a/src/mycomponents/package/packageRecordCard.vue b/src/mycomponents/package/packageRecordCard.vue new file mode 100644 index 0000000..cd166b2 --- /dev/null +++ b/src/mycomponents/package/packageRecordCard.vue @@ -0,0 +1,168 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/package/packageRecordList.vue b/src/mycomponents/package/packageRecordList.vue new file mode 100644 index 0000000..1ecdac3 --- /dev/null +++ b/src/mycomponents/package/packageRecordList.vue @@ -0,0 +1,195 @@ + + + + + + \ No newline at end of file diff --git a/src/mycomponents/package/packageTarget.vue b/src/mycomponents/package/packageTarget.vue new file mode 100644 index 0000000..a1af74a --- /dev/null +++ b/src/mycomponents/package/packageTarget.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/partCode/partCode.vue b/src/mycomponents/partCode/partCode.vue new file mode 100644 index 0000000..da58578 --- /dev/null +++ b/src/mycomponents/partCode/partCode.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/mycomponents/partCode/partCodeSelect.vue b/src/mycomponents/partCode/partCodeSelect.vue new file mode 100644 index 0000000..6a059ff --- /dev/null +++ b/src/mycomponents/partCode/partCodeSelect.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/mycomponents/popup/selectList.vue b/src/mycomponents/popup/selectList.vue new file mode 100644 index 0000000..a7e9553 --- /dev/null +++ b/src/mycomponents/popup/selectList.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/mycomponents/production/productionInfo.vue b/src/mycomponents/production/productionInfo.vue new file mode 100644 index 0000000..e54bbaa --- /dev/null +++ b/src/mycomponents/production/productionInfo.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/mycomponents/purchase/purchaseInfo.vue b/src/mycomponents/purchase/purchaseInfo.vue new file mode 100644 index 0000000..b831c77 --- /dev/null +++ b/src/mycomponents/purchase/purchaseInfo.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/mycomponents/qty/balanceQty.vue b/src/mycomponents/qty/balanceQty.vue new file mode 100644 index 0000000..11fa2ed --- /dev/null +++ b/src/mycomponents/qty/balanceQty.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/src/mycomponents/qty/balanceQtyEdit.vue b/src/mycomponents/qty/balanceQtyEdit.vue new file mode 100644 index 0000000..4651d59 --- /dev/null +++ b/src/mycomponents/qty/balanceQtyEdit.vue @@ -0,0 +1,215 @@ + + + + + diff --git a/src/mycomponents/qty/compareQty.vue b/src/mycomponents/qty/compareQty.vue new file mode 100644 index 0000000..2f84458 --- /dev/null +++ b/src/mycomponents/qty/compareQty.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/mycomponents/qty/countQtyEdit.vue b/src/mycomponents/qty/countQtyEdit.vue new file mode 100644 index 0000000..dc42195 --- /dev/null +++ b/src/mycomponents/qty/countQtyEdit.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/src/mycomponents/qty/inspectQtyEdit.vue b/src/mycomponents/qty/inspectQtyEdit.vue new file mode 100644 index 0000000..0ce8e19 --- /dev/null +++ b/src/mycomponents/qty/inspectQtyEdit.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/mycomponents/qty/packQty.vue b/src/mycomponents/qty/packQty.vue new file mode 100644 index 0000000..d889322 --- /dev/null +++ b/src/mycomponents/qty/packQty.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/src/mycomponents/qty/packUnit.vue b/src/mycomponents/qty/packUnit.vue new file mode 100644 index 0000000..de9e930 --- /dev/null +++ b/src/mycomponents/qty/packUnit.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/qty/qty.vue b/src/mycomponents/qty/qty.vue new file mode 100644 index 0000000..06a4a5f --- /dev/null +++ b/src/mycomponents/qty/qty.vue @@ -0,0 +1,64 @@ + + + + + diff --git a/src/mycomponents/qty/recommendQty.vue b/src/mycomponents/qty/recommendQty.vue new file mode 100644 index 0000000..75c952c --- /dev/null +++ b/src/mycomponents/qty/recommendQty.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/src/mycomponents/qty/recommendQtyEdit.vue b/src/mycomponents/qty/recommendQtyEdit.vue new file mode 100644 index 0000000..3830001 --- /dev/null +++ b/src/mycomponents/qty/recommendQtyEdit.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/src/mycomponents/qty/stdUom.vue b/src/mycomponents/qty/stdUom.vue new file mode 100644 index 0000000..7a495d0 --- /dev/null +++ b/src/mycomponents/qty/stdUom.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/src/mycomponents/qty/uom.vue b/src/mycomponents/qty/uom.vue new file mode 100644 index 0000000..d2bcc54 --- /dev/null +++ b/src/mycomponents/qty/uom.vue @@ -0,0 +1,40 @@ + + + + + + + diff --git a/src/mycomponents/recommend/recommend.vue b/src/mycomponents/recommend/recommend.vue new file mode 100644 index 0000000..3061f1c --- /dev/null +++ b/src/mycomponents/recommend/recommend.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/recommend/recommendBalance.vue b/src/mycomponents/recommend/recommendBalance.vue new file mode 100644 index 0000000..df79f68 --- /dev/null +++ b/src/mycomponents/recommend/recommendBalance.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/mycomponents/recommend/recommendCount.vue b/src/mycomponents/recommend/recommendCount.vue new file mode 100644 index 0000000..4d2bc57 --- /dev/null +++ b/src/mycomponents/recommend/recommendCount.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/mycomponents/record/record.vue b/src/mycomponents/record/record.vue new file mode 100644 index 0000000..bd7e6b1 --- /dev/null +++ b/src/mycomponents/record/record.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/mycomponents/record/recordBottom.vue b/src/mycomponents/record/recordBottom.vue new file mode 100644 index 0000000..120265e --- /dev/null +++ b/src/mycomponents/record/recordBottom.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/mycomponents/record/recordComDetailCard.vue b/src/mycomponents/record/recordComDetailCard.vue new file mode 100644 index 0000000..81d1cd0 --- /dev/null +++ b/src/mycomponents/record/recordComDetailCard.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/mycomponents/record/recordCommonInfo.vue b/src/mycomponents/record/recordCommonInfo.vue new file mode 100644 index 0000000..efcd0f7 --- /dev/null +++ b/src/mycomponents/record/recordCommonInfo.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/mycomponents/record/recordDetailCard.vue b/src/mycomponents/record/recordDetailCard.vue new file mode 100644 index 0000000..ecaceb3 --- /dev/null +++ b/src/mycomponents/record/recordDetailCard.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/record/recordDetailCommonInfo.vue b/src/mycomponents/record/recordDetailCommonInfo.vue new file mode 100644 index 0000000..7655126 --- /dev/null +++ b/src/mycomponents/record/recordDetailCommonInfo.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/mycomponents/record/recordFilter.vue b/src/mycomponents/record/recordFilter.vue new file mode 100644 index 0000000..710a59b --- /dev/null +++ b/src/mycomponents/record/recordFilter.vue @@ -0,0 +1,116 @@ + + + + diff --git a/src/mycomponents/record/recordItemInfo.vue b/src/mycomponents/record/recordItemInfo.vue new file mode 100644 index 0000000..dc911f5 --- /dev/null +++ b/src/mycomponents/record/recordItemInfo.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/mycomponents/record/recordListCommonInfo.vue b/src/mycomponents/record/recordListCommonInfo.vue new file mode 100644 index 0000000..5d8cabe --- /dev/null +++ b/src/mycomponents/record/recordListCommonInfo.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/mycomponents/record/recordListDetailPoup.vue b/src/mycomponents/record/recordListDetailPoup.vue new file mode 100644 index 0000000..7bbdf29 --- /dev/null +++ b/src/mycomponents/record/recordListDetailPoup.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/mycomponents/record/recordMainInfo.vue b/src/mycomponents/record/recordMainInfo.vue new file mode 100644 index 0000000..8958184 --- /dev/null +++ b/src/mycomponents/record/recordMainInfo.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/mycomponents/record/recordNumber.vue b/src/mycomponents/record/recordNumber.vue new file mode 100644 index 0000000..94a3849 --- /dev/null +++ b/src/mycomponents/record/recordNumber.vue @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/src/mycomponents/record/recordPersonInfo.vue b/src/mycomponents/record/recordPersonInfo.vue new file mode 100644 index 0000000..628a0a8 --- /dev/null +++ b/src/mycomponents/record/recordPersonInfo.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/record/recordRequestInfo.vue b/src/mycomponents/record/recordRequestInfo.vue new file mode 100644 index 0000000..66d1857 --- /dev/null +++ b/src/mycomponents/record/recordRequestInfo.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/mycomponents/record/recordStatus.vue b/src/mycomponents/record/recordStatus.vue new file mode 100644 index 0000000..f0a516f --- /dev/null +++ b/src/mycomponents/record/recordStatus.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/mycomponents/record/recordTop.vue b/src/mycomponents/record/recordTop.vue new file mode 100644 index 0000000..6c52a50 --- /dev/null +++ b/src/mycomponents/record/recordTop.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/request/requestBottom.vue b/src/mycomponents/request/requestBottom.vue new file mode 100644 index 0000000..120265e --- /dev/null +++ b/src/mycomponents/request/requestBottom.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/src/mycomponents/request/requestComMainCard.vue b/src/mycomponents/request/requestComMainCard.vue new file mode 100644 index 0000000..0f4ca8a --- /dev/null +++ b/src/mycomponents/request/requestComMainCard.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/request/requestCommonInfo.vue b/src/mycomponents/request/requestCommonInfo.vue new file mode 100644 index 0000000..b044adb --- /dev/null +++ b/src/mycomponents/request/requestCommonInfo.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/mycomponents/request/requestFilter.vue b/src/mycomponents/request/requestFilter.vue new file mode 100644 index 0000000..cfdd185 --- /dev/null +++ b/src/mycomponents/request/requestFilter.vue @@ -0,0 +1,128 @@ + + + + diff --git a/src/mycomponents/request/requestItemInfo.vue b/src/mycomponents/request/requestItemInfo.vue new file mode 100644 index 0000000..dc911f5 --- /dev/null +++ b/src/mycomponents/request/requestItemInfo.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/mycomponents/request/requestListCommonInfo.vue b/src/mycomponents/request/requestListCommonInfo.vue new file mode 100644 index 0000000..611942b --- /dev/null +++ b/src/mycomponents/request/requestListCommonInfo.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/mycomponents/request/requestMainInfo.vue b/src/mycomponents/request/requestMainInfo.vue new file mode 100644 index 0000000..1c774cf --- /dev/null +++ b/src/mycomponents/request/requestMainInfo.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/mycomponents/request/requestNumber.vue b/src/mycomponents/request/requestNumber.vue new file mode 100644 index 0000000..94a3849 --- /dev/null +++ b/src/mycomponents/request/requestNumber.vue @@ -0,0 +1,36 @@ + + + + + + + + diff --git a/src/mycomponents/request/requestPersonInfo.vue b/src/mycomponents/request/requestPersonInfo.vue new file mode 100644 index 0000000..628a0a8 --- /dev/null +++ b/src/mycomponents/request/requestPersonInfo.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/mycomponents/request/requestRequestInfo.vue b/src/mycomponents/request/requestRequestInfo.vue new file mode 100644 index 0000000..66d1857 --- /dev/null +++ b/src/mycomponents/request/requestRequestInfo.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/mycomponents/request/requestStatus.vue b/src/mycomponents/request/requestStatus.vue new file mode 100644 index 0000000..4d07e6b --- /dev/null +++ b/src/mycomponents/request/requestStatus.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/src/mycomponents/request/requestTop.vue b/src/mycomponents/request/requestTop.vue new file mode 100644 index 0000000..5a49dbe --- /dev/null +++ b/src/mycomponents/request/requestTop.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/mycomponents/scan/winComScan.vue b/src/mycomponents/scan/winComScan.vue new file mode 100644 index 0000000..9a408e0 --- /dev/null +++ b/src/mycomponents/scan/winComScan.vue @@ -0,0 +1,289 @@ + + + + + + + \ No newline at end of file diff --git a/src/mycomponents/scan/winComScan222.vue b/src/mycomponents/scan/winComScan222.vue new file mode 100644 index 0000000..bb526e9 --- /dev/null +++ b/src/mycomponents/scan/winComScan222.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/src/mycomponents/scan/winComScanNormal.vue b/src/mycomponents/scan/winComScanNormal.vue new file mode 100644 index 0000000..da7f04b --- /dev/null +++ b/src/mycomponents/scan/winComScanNormal.vue @@ -0,0 +1,231 @@ + + + + + + + \ No newline at end of file diff --git a/src/mycomponents/scan/winScanAsnNumber.vue b/src/mycomponents/scan/winScanAsnNumber.vue new file mode 100644 index 0000000..38a7f90 --- /dev/null +++ b/src/mycomponents/scan/winScanAsnNumber.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/mycomponents/scan/winScanButton.vue b/src/mycomponents/scan/winScanButton.vue new file mode 100644 index 0000000..fd22865 --- /dev/null +++ b/src/mycomponents/scan/winScanButton.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/mycomponents/scan/winScanContainer.vue b/src/mycomponents/scan/winScanContainer.vue new file mode 100644 index 0000000..3324db4 --- /dev/null +++ b/src/mycomponents/scan/winScanContainer.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/mycomponents/scan/winScanItem.vue b/src/mycomponents/scan/winScanItem.vue new file mode 100644 index 0000000..bac4db7 --- /dev/null +++ b/src/mycomponents/scan/winScanItem.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/mycomponents/scan/winScanJobNumber.vue b/src/mycomponents/scan/winScanJobNumber.vue new file mode 100644 index 0000000..96cfe6c --- /dev/null +++ b/src/mycomponents/scan/winScanJobNumber.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/mycomponents/scan/winScanLocation.vue b/src/mycomponents/scan/winScanLocation.vue new file mode 100644 index 0000000..3b4b460 --- /dev/null +++ b/src/mycomponents/scan/winScanLocation.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/mycomponents/scan/winScanNormal.vue b/src/mycomponents/scan/winScanNormal.vue new file mode 100644 index 0000000..9792a9d --- /dev/null +++ b/src/mycomponents/scan/winScanNormal.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/mycomponents/scan/winScanPack.vue b/src/mycomponents/scan/winScanPack.vue new file mode 100644 index 0000000..c23e40d --- /dev/null +++ b/src/mycomponents/scan/winScanPack.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/mycomponents/scan/winScanPackAndCont.vue b/src/mycomponents/scan/winScanPackAndCont.vue new file mode 100644 index 0000000..c6b5ad6 --- /dev/null +++ b/src/mycomponents/scan/winScanPackAndCont.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/src/mycomponents/scan/winScanPackAndLocation.vue b/src/mycomponents/scan/winScanPackAndLocation.vue new file mode 100644 index 0000000..adb7be7 --- /dev/null +++ b/src/mycomponents/scan/winScanPackAndLocation.vue @@ -0,0 +1,450 @@ + + + + + diff --git a/src/mycomponents/scan/winScanPackAndLocationNoBalance.vue b/src/mycomponents/scan/winScanPackAndLocationNoBalance.vue new file mode 100644 index 0000000..9c1b478 --- /dev/null +++ b/src/mycomponents/scan/winScanPackAndLocationNoBalance.vue @@ -0,0 +1,454 @@ + + + + + diff --git a/src/mycomponents/scan/winScanPackAndPosition.vue b/src/mycomponents/scan/winScanPackAndPosition.vue new file mode 100644 index 0000000..8709d07 --- /dev/null +++ b/src/mycomponents/scan/winScanPackAndPosition.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/src/mycomponents/status/balanceStatus.vue b/src/mycomponents/status/balanceStatus.vue new file mode 100644 index 0000000..786c4ff --- /dev/null +++ b/src/mycomponents/status/balanceStatus.vue @@ -0,0 +1,71 @@ + + + + + + + + diff --git a/src/mycomponents/status/status.vue b/src/mycomponents/status/status.vue new file mode 100644 index 0000000..b771d9e --- /dev/null +++ b/src/mycomponents/status/status.vue @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/src/mycomponents/status/statusEdit.vue b/src/mycomponents/status/statusEdit.vue new file mode 100644 index 0000000..f626d4e --- /dev/null +++ b/src/mycomponents/status/statusEdit.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/mycomponents/transfer/comTransferReceipt.vue b/src/mycomponents/transfer/comTransferReceipt.vue new file mode 100644 index 0000000..1c9ba30 --- /dev/null +++ b/src/mycomponents/transfer/comTransferReceipt.vue @@ -0,0 +1,62 @@ + + + + + + diff --git a/src/mycomponents/wincom/basicCom/winHint.vue b/src/mycomponents/wincom/basicCom/winHint.vue new file mode 100644 index 0000000..2d77a47 --- /dev/null +++ b/src/mycomponents/wincom/basicCom/winHint.vue @@ -0,0 +1,70 @@ + + + + + \ No newline at end of file diff --git a/src/mycomponents/workStation/workStation.vue b/src/mycomponents/workStation/workStation.vue new file mode 100644 index 0000000..da284da --- /dev/null +++ b/src/mycomponents/workStation/workStation.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/package.json b/src/package.json new file mode 100644 index 0000000..6c5d226 --- /dev/null +++ b/src/package.json @@ -0,0 +1,18 @@ +{ + "id": "active-formv1", + "displayName": "基于uview1.0表单 动态表单 uniapp最强动态表单 表单校验 快速生成", + "version": "1.5.1", + "description": "最强动态表单 以js的方式快速生成表单接口 支持表单校验 ui设计师样式优化基于uview1.0", + "keywords": [ + "表单", + "动态表单", + "json表单", + "快速表单" + ], + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ] + } +} \ No newline at end of file diff --git a/src/pages.json b/src/pages.json new file mode 100644 index 0000000..5a931cb --- /dev/null +++ b/src/pages.json @@ -0,0 +1,123 @@ +{ + + "pages": [{ + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "WMS仓库管理系统-移动端", + "titleNView": { + // "autoBackButton": "true", + "buttons": [{}] + } + } + }, + { + "path": "pages/setter/index", + "style": { + "navigationBarTitleText": "设置", + "titleNView": { + // "autoBackButton": "true", + "buttons": [{}] + } + } + }, + { + "path": "pages/login/index", + "style": { + "navigationBarTitleText": "登录", + "titleNView": { + // "autoBackButton": "true", + "buttons": [{}] + } + } + }, + { + "path": "pages/foam/check", + "style": { + "navigationBarTitleText": "泡沫点检", + "titleNView": { + "buttons": [{}] + } + } + }, + { + "path": "pages/foam/input", + "style": { + "navigationBarTitleText": "原料投入(泡沫)", + "titleNView": { + "buttons": [{}] + } + } + }, + { + "path": "pages/plastics/check", + "style": { + "navigationBarTitleText": "注塑点检", + "titleNView": { + "buttons": [{}] + } + } + }, + { + "path": "pages/plastics/input", + "style": { + "navigationBarTitleText": "原料揉入(注塑)", + "titleNView": { + "buttons": [{}] + } + } + }, + { + "path": "pages/inputAndSelect", + "style": { + "navigationBarTitleText": "原料揉入(注塑)", + "titleNView": { + "buttons": [{}] + } + } + } + + + + ], + "globalStyle": { + "navigationBarTextStyle": "white", + "navigationBarTitleText": "WMS仓库管理系统-移动端", + "navigationBarBackgroundColor": "#3C9CFF", + "h5": { + "maxWidth": 1190, + "navigationBarTextStyle": "white", + "navigationBarBackgroundColor": "#3C9CFF !important" + }, + //增加返回首页 + // "titleNView": { + // "autoBackButton": "true", + // "buttons": [{ + // "float": "right", + // "text": "\ue696", + // "fontSrc": "/static/ali_icon/iconfont.ttf", + // "fontSize": "58rpx" + // }] + // }, + "softinputMode": "adjustPan" //adjustResize + }, + "tabBar": { + "color": "#000000", + "selectedColor": "#2678f2", + "borderStyle": "black", + "backgroundColor": "", + "list": [{ + + "pagePath": "pages/index/index", + "iconPath": "./static/bar/home.png", + "selectedIconPath": "./static/bar/home_p.png", + "text": "首页" + }, + { + "pagePath": "pages/setter/index", + "iconPath": "./static/bar/setting.png", + "selectedIconPath": "./static/bar/setting_p.png", + "text": "设置" + } + ] + } +} \ No newline at end of file diff --git a/src/pages/back/check.vue b/src/pages/back/check.vue new file mode 100644 index 0000000..4d110ed --- /dev/null +++ b/src/pages/back/check.vue @@ -0,0 +1,239 @@ + + + + + \ No newline at end of file diff --git a/src/pages/back/check1.vue b/src/pages/back/check1.vue new file mode 100644 index 0000000..527ecf1 --- /dev/null +++ b/src/pages/back/check1.vue @@ -0,0 +1,164 @@ + + + + + \ No newline at end of file diff --git a/src/pages/back/check_foam.vue b/src/pages/back/check_foam.vue new file mode 100644 index 0000000..51ff5ca --- /dev/null +++ b/src/pages/back/check_foam.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/pages/foam/check.vue b/src/pages/foam/check.vue new file mode 100644 index 0000000..15c142a --- /dev/null +++ b/src/pages/foam/check.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/src/pages/foam/input.vue b/src/pages/foam/input.vue new file mode 100644 index 0000000..02409e3 --- /dev/null +++ b/src/pages/foam/input.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue new file mode 100644 index 0000000..cca63cc --- /dev/null +++ b/src/pages/index/index.vue @@ -0,0 +1,442 @@ + + + + + \ No newline at end of file diff --git a/src/pages/inputAndSelect.vue b/src/pages/inputAndSelect.vue new file mode 100644 index 0000000..cd37539 --- /dev/null +++ b/src/pages/inputAndSelect.vue @@ -0,0 +1,154 @@ + + + + + \ No newline at end of file diff --git a/src/pages/login/index.vue b/src/pages/login/index.vue new file mode 100644 index 0000000..e08167c --- /dev/null +++ b/src/pages/login/index.vue @@ -0,0 +1,368 @@ + + + + + \ No newline at end of file diff --git a/src/pages/plastics/check.vue b/src/pages/plastics/check.vue new file mode 100644 index 0000000..15c142a --- /dev/null +++ b/src/pages/plastics/check.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/src/pages/plastics/input.vue b/src/pages/plastics/input.vue new file mode 100644 index 0000000..02409e3 --- /dev/null +++ b/src/pages/plastics/input.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/pages/setter/index.vue b/src/pages/setter/index.vue new file mode 100644 index 0000000..2398ba7 --- /dev/null +++ b/src/pages/setter/index.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/src/pages/setter/passwordpage.vue b/src/pages/setter/passwordpage.vue new file mode 100644 index 0000000..72434c6 --- /dev/null +++ b/src/pages/setter/passwordpage.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/pages/setter/setterDetail.vue b/src/pages/setter/setterDetail.vue new file mode 100644 index 0000000..708e6d0 --- /dev/null +++ b/src/pages/setter/setterDetail.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..231d5c4 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,117 @@ +//只要是未登录状态,想要跳转到名单内的路径时,直接跳到登录页。 +// 页面白名单,不受拦截 +import versionTool from '@/libs/versionUpdate.js'; + +const whiteList = [ + '/pages/login/index' +] +let apages = getCurrentPages() +console.log("getCurrentPages",apages) +function hasPermission (url) { + console.log('url',url); + + var isLogin = uni.getStorageSync("hasLogin") + // let islogin = this.$store.state.hasLogin + islogin = Boolean(Number(islogin));//返回布尔值 + // 在白名单中或有登录判断条件可以直接跳转 + if(whiteList.indexOf(url) !== -1 || islogin) { + return true + } + return true +} + +uni.addInterceptor('navigateTo', { + + // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转 + invoke (e) { + if(!hasPermission(e.url)){ + uni.reLaunch({ + url: '/pages/login/index' + }) + return false + } + return true + }, + success (e) { + versionTool.isNewVersion() + } +}) + +uni.addInterceptor('switchTab', { + // tabbar页面跳转前进行拦截 + invoke (e) { + if(!hasPermission(e.url)){ + uni.reLaunch({ + url: '/pages/login/index' + }) + return false + } + return true + }, + success (e) { + } +}) + +// import modules from './modules' +// import Vue from 'vue' +// //这里仅示范npm安装方式的引入,其它方式引入请看最上面【安装】部分 +// import Router from 'uni-simple-router' + +// Vue.use(Router) +// //初始化 +// const router = new Router({ +// routes: [...modules]//路由表 +// }); + +// //全局路由前置守卫 +// router.beforeEach((to, from, next) => { +// next() +// }) +// // 全局路由后置守卫 +// router.afterEach((to, from) => { +// }) +// export default router; + +// import Vue from 'vue' +// import store from '../store/index.js' +// import pages from '../pages.js' + +// import Router, { +// RouterMount +// } from 'uni-simple-router' + + + +// Vue.use(Router) + +// const myRouter = +// pages().pages.map(item => ({ +// path: `/${item.path}`, +// meta: item.meta || {} +// })) +// //初始化 +// const router = new Router({ +// routes: myRouter +// }); + +// //全局路由前置守卫 +// router.beforeEach((to, from, next) => { + +// const isLogin = sessionStorage.getItem("isLogin") +// console.log('路由前置守卫',isLogin) +// // if (!isLogin && to.meta.needLogin) { +// if (!isLogin ) { +// next({ +// path: '/pages/login/index', +// query: { +// redirect: to.path +// } +// }) +// } else { +// next() +// } + +// }) +// // 全局路由后置守卫 +// router.afterEach((to, from) => {console.log('路由后置守卫')}) +// export default router; diff --git a/src/router/modules/home.js b/src/router/modules/home.js new file mode 100644 index 0000000..49586d0 --- /dev/null +++ b/src/router/modules/home.js @@ -0,0 +1,29 @@ +// router/modules/home.js +const home = [ + { + //注意:path必须跟pages.json中的地址对应,最前面别忘了加'/'哦 + path: '/pages/index/index', + aliasPath:'/', //对于h5端你必须在首页加上aliasPath并设置为/ + name: 'index', + meta: { + title: 'WMS仓库管理系统', + }, + }, + // { + // path: '/pages/list/index', + // aliasPath:'/' + // name: 'list', + // meta: { + // title: '列表', + // }, + // }, + { + path: '/pages/login/index', + aliasPath:'/' + name: 'login', + meta: { + title: '登录', + }, + }, +] +export default home \ No newline at end of file diff --git a/src/router/modules/index.js b/src/router/modules/index.js new file mode 100644 index 0000000..b17abbe --- /dev/null +++ b/src/router/modules/index.js @@ -0,0 +1,11 @@ +// router/modules/index.js +const files = require.context('.', false, /\.js$/) +const modules = [] + +files.keys().forEach(key => { + if (key === './index.js') return + const item = files(key).default + modules.push(...item) +}) + +export default modules \ No newline at end of file diff --git a/src/router/my_router.js b/src/router/my_router.js new file mode 100644 index 0000000..2fc2a68 --- /dev/null +++ b/src/router/my_router.js @@ -0,0 +1,46 @@ +//只要是未登录状态,想要跳转到名单内的路径时,直接跳到登录页 +// 页面白名单,不受拦截 +const whiteList = [ + '/pages/login/index', + '/pages/config/config' +] + +function hasPermission(url) { + var isLogin = uni.getStorageSync("hasLogin") + if (isLogin == null) { + isLogin = false + } + + // 在白名单中或有登录判断条件可以直接跳转 + if (whiteList.indexOf(url) !== -1 || isLogin) { + return true + } + return false +} +uni.addInterceptor('navigateTo', { + // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转 + invoke(e) { + if (!hasPermission(e.url)) { + uni.reLaunch({ + url: '/pages/login/index' + }) + return false + } + return true + }, + success(e) {} +}) + +uni.addInterceptor('switchTab', { + // tabbar页面跳转前进行拦截 + invoke(e) { + if (!hasPermission(e.url)) { + uni.reLaunch({ + url: '/pages/login/index' + }) + return false + } + return true + }, + success(e) {} +}) diff --git a/src/router/router.js b/src/router/router.js new file mode 100644 index 0000000..ddc0dce --- /dev/null +++ b/src/router/router.js @@ -0,0 +1,20 @@ +// router.js +import {RouterMount,createRouter} from 'uni-simple-router'; + +const router = createRouter({ + platform: process.env.VUE_APP_PLATFORM, + routes: [...ROUTES] +}); +//全局路由前置守卫 +router.beforeEach((to, from, next) => { + next(); +}); +// 全局路由后置守卫 +router.afterEach((to, from) => { + console.log('跳转结束') +}) + +export { + router, + RouterMount +} \ No newline at end of file diff --git a/src/shime-uni.d.ts b/src/shime-uni.d.ts new file mode 100644 index 0000000..b3d3cc9 --- /dev/null +++ b/src/shime-uni.d.ts @@ -0,0 +1,6 @@ +export {}; + +declare module "vue" { + type Hooks = App.AppInstance & Page.PageInstance; + interface ComponentCustomOptions extends Hooks {} +} \ No newline at end of file diff --git a/src/static/ali_icon/iconfont.css b/src/static/ali_icon/iconfont.css new file mode 100644 index 0000000..8034fb9 --- /dev/null +++ b/src/static/ali_icon/iconfont.css @@ -0,0 +1,25 @@ +@font-face { + font-family: "iconfont"; /* Project id 4087030 */ + src: url('/static/ali_icon/iconfont.ttf') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-shezhi:before { + content: "\e706"; +} + +.icon-icon_home:before { + content: "\e696"; +} + +.icon-guolv:before { + content: "\e6e2"; +} + diff --git a/src/static/ali_icon/iconfont.ttf b/src/static/ali_icon/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..984d072b18127ec867b150ac4a681ae14409b468 GIT binary patch literal 2604 zcmd^B-)~b@9RGgruioCtTVK|Ep69Mpc@K|I9xD*L=(&?Tept1Yv~Fy zo@R^>DpBJPV#Eg$v3&2Ba_x@*}48PuY3IGSmdSLJVWO~~tPhBJZH0g&Ys>S*j-}Ia( z{cq|YPFLoq=CAg20`MPEzfmp~C!?bmUnK00)N^GrSZ?yKko-0Ejpb_dq>BXN-lf4+ zsZA95K|Dv?_eoc(#glbxhrh^AF(Eu#td?Bow|xp=SpeXs>$SON;KG#%fc01M?*z)7 zUszj!LjtJ)G_uv)-vr%4*6IC)8{^Jxe}ZaYZ@u^B5(65~wFQA9ktzentkhT}0q(M( z)RkSXQ9i)uk&@Nkwax>x=8U24-$?=MzSDCrd6PH z-vW`QdzJg1Y;PJ*yaQ<@CI=!<)fOglD;2w7O+6D|Lz9ICcM9sN^{Z4 z1H=s%mQBtPvNCp@p0sMR3y>pSHg;(F%<}COX^r;cUx~cNdKiW!t4Bb#w*Pyx=^KzW zw}JM1`Haz7T`k`>Iy;9I+AY?NQ@~L?hrf|Vhh|o&4g7Ex?f~>fG|UcRI*1+z@(~Am zf|wq{tcLF1NVI_2XcD866Qu|}v%@%qNz^cgx-YjC)45^HF%0=~=@15yVTi|k-VNyS zhS19}na$+&dYtG$hBCbpMPktzihOJq4H<@*Qh#P3%c$hc_iK9KtvEnw(R5_*w>b1< z3fSA>ku1Fu*)6`HPLE+nCe4CUa9@5%pR$AF9v>eZ96!c}!Nh1hKKeWxvfrvMr`>7` zC^6Y9zb4BuMUqhR*`H8dE_J)ZCyJ6tKKV4c6V`wo?M|0UB$r*a2NX?KRmMsxqR0`e zz*q%h@x)3PtT?f(#9BHR^2=R0cc>9|t17Q(-LY6eQ#e)i^wcBnykF@G5d{4?ceoMs zC^kXW0$P$m6xAK92R%9B2S3Xnt{=|p10IX*d2UZUPD5<<1tVQS6qQZJ#G90WT`<#i z+U=BX+*qS#l|&SMj-mBzMM<)121!!_Ht8P8LZpO2iYt;R5NTL-B@*2Um8ZNz^&WT5 zZ}GFdMOs=z&ZvQ0r|) zkQJw5EwtOYNqc)i>2e7z*(Q(4wjVx7MaCkjvwt}H9KYjL?DluIevqQ&3e&##V8@bE9nas|S`~Ic14>YYCXJI2h9fXf;|xqd4Q63V zADa*9`v^S^$Du;Z#zWo**#`;TfH}gkm|@sVWtMt~wVP10I`YA6=HLX)mZlt=lu?*^ zgCbQ)8Zq-LQ6?3V!*qbmca-8x5L$z>&Z@%}D(vLF^{nGHeVtX~9}KHD_8;a^O+XHL c6i@_du3S1*p0Tq1A1~LcC2{(At#Sh3AMo68{{R30 literal 0 HcmV?d00001 diff --git a/src/static/avatar.png b/src/static/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..cbc3c6fbabc4911c0e26ae2d7c2c4bd25afcb9fb GIT binary patch literal 5403 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 VpE^6KP_S)AXQXEaRO#F!{ttyg5!?U( literal 0 HcmV?d00001 diff --git a/src/static/bar/home_p.png b/src/static/bar/home_p.png new file mode 100644 index 0000000000000000000000000000000000000000..4576514100ebc6f641a708b29e6025179f1370d6 GIT binary patch literal 5297 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 literal 0 HcmV?d00001 diff --git a/src/static/bar/message.png b/src/static/bar/message.png new file mode 100644 index 0000000000000000000000000000000000000000..83fe65cccf0739dba26110310c258a718fbdf0b2 GIT binary patch literal 6099 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 NK&a}dls~Wz{vWDRaf|=} literal 0 HcmV?d00001 diff --git a/src/static/bar/message_p.png b/src/static/bar/message_p.png new file mode 100644 index 0000000000000000000000000000000000000000..e52621eb57c0797c75c1ae109e9f6b48661b28b7 GIT binary patch literal 6213 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 literal 0 HcmV?d00001 diff --git a/src/static/bar/setting.png b/src/static/bar/setting.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2c2af85187b7f28c06fa6026bbec35d1734bd3 GIT binary patch literal 11321 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 literal 0 HcmV?d00001 diff --git a/src/static/bar/sy.svg b/src/static/bar/sy.svg new file mode 100644 index 0000000..09cbb42 --- /dev/null +++ b/src/static/bar/sy.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/bar/sya.svg b/src/static/bar/sya.svg new file mode 100644 index 0000000..29704b2 --- /dev/null +++ b/src/static/bar/sya.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/bar/sz.svg b/src/static/bar/sz.svg new file mode 100644 index 0000000..5a7549b --- /dev/null +++ b/src/static/bar/sz.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/bar/sza.svg b/src/static/bar/sza.svg new file mode 100644 index 0000000..57dbaaa --- /dev/null +++ b/src/static/bar/sza.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/bar/xx.png b/src/static/bar/xx.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8b45de14639da1c199c86cd2b335d997f6e5b2 GIT binary patch literal 1861 zcmaJ?dpMJO9G~byG?y?Tuh9{*?HyaTjCNCVERx$H=h;lod^o4+f); zmxe|nk^Dfq2$mCsIt)Q0SE6hT#>Y>i6p9id1c-&=qzVSUzvet1kct`j2nwIXSF)ja z>Ecusv@CT=s3RS-ZSczTFPAP7*Y1kj5@rGoPSG6^ITN$5-U0KMoGDxEwZ`1asYYbvpX9>Vee zW((ah@bL(uq!WqB$;pIdPXerpBZ4#QCshG|M=Tj-(Tz~d_iYEwisZ1t`Ljze}Y#N(FL&q^L2NosC zAq6tV6_0cMNfUB)tsqyTmN}40x)Kumt6(`W8Zuovu`iqn^}cb%6Z*pCPRJ#q&JcBl z{a2yKj?nJWEyvpy-HbOrq(Hk}g|>BU7uOEGE!8{@GgNc0Hc}p+BgCyaBayK0%clR_ za&0ao`H%q?c>lR2mVB@~i ze0Q|(_UqR>D~5bmHCOlbp1skkeRLz~&5M*b+UowQg@AzT78VxPT)e$*hG4cS)=RH3 z{gdEvM0oi6%FhoAT1NuQhYuQ5J;O!wWCnyDT+SWmf?l9iAKCEuMFx1nxiYE;n?5tY z*8S4eB;!89T~hHEz4w@(?ADSf;p^6W`*`h92G|r0mWyaP#JfttN`wBK@Tt=W^xXHo zEXLMZ2@G3iRO-bnOc%T8sWVvT_82}eIPK|d{DA$7-}X(#7Ii9tOR!1XU|URagq3Mf z!~8|ULkG@Rchyh!#|3Mjfh4^Sqn)=0dgOKNhgdPNaE*y2PCL}15E$h)K(|cx5-(=k zwG5ip7Hn*^7Lc;qCsBSoAOVkcY$+t?6uTYen+y?wV1aKj^DMm4*ou^KW&4RZO8ix7r|Aga&f`z!&cP?EgW8*+Ba_- z+kTsMY)_PfBWY-$(Wx(^7h6GxAJF2_=W^0tNi{dz2yM{E-6nx!M?vF z*7QJGSBia^+^Y$*GOj#7rg1Rf$_ww~cXrfg!WH-4GG!%6Wg?4Svw`+GS%HO*4ws(7 zZL{j$wa2(#`(-Or;Jd|Rre*VV7A|7frtl{;#*vdFi)K~Yn)L?d?7yR~4r0kO;_9GN zp@Hrf`pCKN0+*w0D=a}r`=jp?nfoq;x$;#BPfNFuvlKzCRj1o4f@`OmV^1Y&f$p}X z&Rw{KF4yaw7aunMxHL}_=eEFExMTMppNmH}J@A|q|Kyx|+*HoWfCL%&<|}MzZNLA{$JO;2j}G>I~0k`MjQKd-Wm_CB6u c{KZm$ncn+FmZjeNSodS&ahGt)Sc1&I0nC`-ssI20 literal 0 HcmV?d00001 diff --git a/src/static/bar/xx.svg b/src/static/bar/xx.svg new file mode 100644 index 0000000..42893c5 --- /dev/null +++ b/src/static/bar/xx.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/static/bar/xxa.svg b/src/static/bar/xxa.svg new file mode 100644 index 0000000..fb354b3 --- /dev/null +++ b/src/static/bar/xxa.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/static/config.js b/src/static/config.js new file mode 100644 index 0000000..a6ee209 --- /dev/null +++ b/src/static/config.js @@ -0,0 +1,9 @@ +let request_url = "http://dev.ccwin-in.com:25300/api/admin-api" +// let request_url = "http://192.168.0.113:12080/admin-api" + +let isDevelopment = true + +export default { + request_url, + isDevelopment +} diff --git a/src/static/config.json b/src/static/config.json new file mode 100644 index 0000000..9563e13 --- /dev/null +++ b/src/static/config.json @@ -0,0 +1,143 @@ +{ + "baseInfo": { + "companyCode": { + "name": "companyCode", + "value": "DongYang", + "desc": "公司代码" + }, + "warehouseCode": { + "name": "warehouseCode", + "value": "T8", + "desc": "仓库代码" + }, + "dev": { + "name": "dev", + "value": "http://dev.ccwin-in.com:23132", + "desc": "api请求地址" + }, + + "request_url": { + "name": "request_url", + "value": "http://dev.ccwin-in.com:25100/api/admin-api", + "dev2": "http://192.168.0.157:12080/admin-api", + "chefang": "http://192.168.0.176:12080/admin-api", + "chenxinming": "http://192.179.0.230:12080/admin-api", + "liuchen": "http://192.168.0.157:12080/admin-api", + "xuebing": "http://192.168.0.106:12080/admin-api", + "dev": "http://dev.ccwin-in.com:25100/api/admin-api", + "local": "http://localhost:12080", + "desc": "api请求地址" + }, + + "tenantId": { + "name": "tenantId", + "value": "1", + "desc": "租户id" + }, + "isDevelopment": { + "name": "isDevelopment", + "value": true, + "desc": "是否是开发模式,true是开发模式,false不是开发模式" + } + + + }, + "recepit_configList": [ + + { + "name": "receipt_isEditLocation", + "value": true, + "desc": "采购收货_实际库位与推荐库位是否一致" + }, + { + "name": "receipt_isEditQty", + "value": true, + "desc": "采购收货_允许编辑数量" + }, + { + "name": "receipt_isHandleQtyGreaterRecommendQty", + "value": true, + "desc": "采购收货_允许实际数量大于推荐数量" + }, + { + "name": "receipt_isHandleQtyLessRecommendQty", + "value": true, + "desc": "采购收货_允许实际数量小于推荐数量" + }, + { + "name": "receipt_isContinueScanning", + "value": true, + "desc": "采购收货_是否连续扫描" + }, + { + "name": "receipt_isPartCommit", + "value": true, + "desc": "采购收货_是否允许部分提交" + }, + { + "name": "receipt_isMatchByPartAndBatch", + "value": true, + "desc": "采购收货_允许模糊匹配(零件+批次)" + } + ], + "feed_configList": [ + + { + "name": "feed_isEditLocation", + "value": true, + "desc": "发料_实际库位与推荐库位是否一致" + }, + { + "name": "feed_isEditQty", + "value": true, + "desc": "发料_允许编辑数量" + }, + { + "name": "feed_isHandleQtyGreaterRecommendQty", + "value": true, + "desc": "发料_允许实际数量大于推荐数量" + }, + { + "name": "feed_isHandleQtyLessRecommendQty", + "value": true, + "desc": "发料_允许实际数量小于推荐数量" + }, + { + "name": "feed_isContinueScanning", + "value": true, + "desc": "发料_是否连续扫描" + }, + { + "name": "feed_isPartCommit", + "value": true, + "desc": "发料_是否允许部分提交" + }, + { + "name": "feed_isMatchByPartAndBatch", + "value": true, + "desc": "发料_允许模糊匹配(零件+批次)" + }, + { + "name": "feed_isOutIn", + "value": true, + "desc": "是否按批次先进先出发料" + }, + { + "name": "feed_isHandleQtyNoRecommedQty", + "value": true, + "desc": "实际发料数量是否允许与需求量不同" + }, + { + "name": "feed_isScanNoExits", + "value": true, + "desc": "如果扫描的批次不在列表中,是否允许发料" + }, + { + "name": "feed_isScanUpdateCount", + "value": true, + "desc": "扫描完是否直接修改数量" + } + ] + + +} diff --git a/src/static/customicons.ttf b/src/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/src/static/font/iconfont.css b/src/static/font/iconfont.css new file mode 100644 index 0000000..39aed3d --- /dev/null +++ b/src/static/font/iconfont.css @@ -0,0 +1,90 @@ +@font-face { + font-family: "iconfont"; + src: url('/static/font/iconfont.ttf') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + display: inline-block; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-user:before { + content: "\e7ae"; +} + +.icon-password:before { + content: "\e8b2"; +} + +.icon-code:before { + content: "\e699"; +} + +.icon-setting:before { + content: "\e6cc"; +} + +.icon-share:before { + content: "\e739"; +} + +.icon-edit:before { + content: "\e60c"; +} + +.icon-version:before { + content: "\e63f"; +} + +.icon-service:before { + content: "\e6ff"; +} + +.icon-friendfill:before { + content: "\e726"; +} + +.icon-community:before { + content: "\e741"; +} + +.icon-people:before { + content: "\e736"; +} + +.icon-dianzan:before { + content: "\ec7f"; +} + +.icon-right:before { + content: "\e7eb"; +} + +.icon-logout:before { + content: "\e61d"; +} + +.icon-help:before { + content: "\e616"; +} + +.icon-github:before { + content: "\e628"; +} + +.icon-aixin:before { + content: "\e601"; +} + +.icon-clean:before { + content: "\e607"; +} + +.icon-refresh:before { + content: "\e604"; +} + diff --git a/src/static/font/iconfont.ttf b/src/static/font/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..53915cafcb782962308dc5f2bea68bb528f84de4 GIT binary patch literal 6724 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 literal 0 HcmV?d00001 diff --git a/src/static/icon_personal_name.png b/src/static/icon_personal_name.png new file mode 100644 index 0000000000000000000000000000000000000000..88746da4aea86c0e20535e38b7fa5ebbfdd39f26 GIT binary patch literal 13394 zcmXwfc|6qL_y2v(j4j)c$Ud?brL2{hLDpfCv|m1KeLW}IDE{$PEOm*SHz}z#IjO41 zVP-R9s}Di!4+jz*vsL`V#cmH;N1x>7cHJ+qkd60~h-(^UnLF`w`?J*vF$SLdQhhv^ zMDXIwn4GuT_VbK7q-YeQqK~4!KA(&%f`~=|T(ifHi_2-I3G>OvUM@?;U17D7ofsi+ zcG19~q~&v-H8);K%f-2^&*q$jqPY=(6w}1$f4|c$mdB9OoBRF#iHT#9COmv16Dg&S z51yUtkqd+-X(7;^V?U}gUtw6*{nxOJ_94&l*YE6`CpTj#I#4$!0@yIy9?U%FlHP91 zwKp?T;o-P!e~JMu_CUV@V*>Ic0WiDlwUcts{mWMC;n~uNrnJ=h^yH+V-$IH>bpd*P zLd6^qIHk{ZxK(Mdm8Ix2`qlI4xc_7Ov*d&DkNSt-ZzWT|3;%6qxV&Qzo*x21Wgf2tqkbmE)0JnQTXU0% zT&lIBL!UqZRK`O&SI_>-Goqe*Zm0Rp?C#2VxxyJqnG!8((?M~M^5UmerbVZH1R3Cf>XBB?q7_{GR4ey%{SSe&Nv0-{Y8r+;u#=t zL@QMAy6Q`CR}Bz8JBDIYtED|zYyGe3_~aXPpv)nTmjG1jb}h7&Wi}_j8eT$rl_46* zdpTY-t!xl@6m#aVqPo6+JMdVyB;gGkz?gIzQ0!7_?zFma_gvgRr zB#jONs?Ra=@ij!#6HQRSk(Uu`#EwGDA|P)gM7V(yYr8gfH0bL3a+|*vAXNE?Fmma@H7wy+A#nZ+UAej^(ZAS&G{!$ zfCPdNdS&5ot2(&N3oi!Ve|mk?@*)aBIKn%I^^K;*65qO{A3yJ(MI{nr>A|VIhwACx zA>L##%bIrv?lmH>g6%gcs#i}HB>77)USol98qv#i-J!$ZguWpLZ~%S2mkdS|<7qhO z*MF=;xg@ir!T`p|V+T3Qb2pI422hSWfgdts&aM0-lTStkYXCGl`4HGWzmIb}p^Elw zRH>{KFHCh~2XqU)>!O+j30!i#Mn$O;_0+NY zAY);qk#YDs&7`uefn~bYlgCrLli@@UdY~(zzt{5k9vK{J=@82$p!kl|cx)J!fHq>6 zI4uK2Rlf=1X7kUr7}l4}T~|Gc2Jyg(0!{_T;+%{S60cddGuj1lcO7*wg$o@7Hq{Jz za3pIhfPe9e6dojeo+KI*QAVI(r>Lk?K(X1aK#ZW9DNQ_&0v9rWvVt9=^go?-frmGp zH_`07+gDbwtcs3S@&S)Z7q+UE#Xd6aK!iVXe`)GG6P&-htAXg?5_tW>&J!6Utl);c zjZX)6GIB$e0b}d)tmy0yIxwo{ZnI4fWZtGyco*Cq@>^d3cyBLZ#b^HBlXg!sQh?iV zxma)>?q^RA_@>3Mz%3kuIVuNT%xXC_JA_CjW7EO-a@WZG_v&_luP2G35G(7kkHp#A zbKWVN-qBLjXQ$|nOb{PSNOYEb#=L*%c zh$x8yR^1S`dDIpGS`*IooTH_E93ntqnVU*KT!>%<#Iq#{>bX&yf*j=$fQXc$03!hu zlqv)qkA`7EJgX}1fF6vJrdYur4Rp5vg1}j_i^T1*p~@oxkp}KQ$r?l$M1%amCP8qh zjxJU}5Uv;RA_3ISXFF)MsrQmVj>wSG8c zgaXi=x*05E>ddM#JGBKtxH z4X-@Aei3>0q6-}?Z{nR;hk$DzQn|-{vwO`abm;)^RJGT?hM;h!qKSTA%~ScM5NSAY zWctqCYXBs~_mi~XD`z^AB%QzndQaj{V2=V^Hn;Q6^1Xb91e0np(l}jVB+t17g988( z-%k;Vx-?*PZQ|(AclRHxz%452+3?~nxkul`m@VNXBo}o6%M&DCt>%Uj7{K{uI$(Ca zDU$BS3E=2)SOzx@+Son$(%hi?hKXJU5T^w}H>d5+;!o<*Ee6YOeS-92I{(WEw@<8q z_#k6K;P`z&3daN7EBmRmpGz4(xzYC-2=LByX9q^7AcC2I<319c&+ww%+=;kC2x0{A zVsayR<;W0t)BW(1kOB?u0Fso21vt&11v+}M{{;1VlMb|M*EB!vXGQCQVxb1l@ER<@ z$hPquHOAu55bowqrDqfX(HYVEP~8edTxJEW=4dkb=>YN$kl<0`cRF;JH$TX7r@Vv9 z>-Ki%Phx%jouVs6!OS5NgwAaEL$~Zf`Ldwa4E%HwaaT(@_k85K+X3d?K~&s69pEsC zqIH?ydZa#Y1w^60?TwQy5qV7bN!Bu=hG()uJom@QTy@eVR6 z^1gm#RSf)BEECCAnd*zjN$Y|v3Ix(tb2uh7XbJsTKsx#}9-%7;qT!KtMNZQ^aXUrq z7X`*t01P`V(?2L*eCX$OA73-FWp`trbcWJL4{bB;U&6HrVf>np0Z@DR@ zB+%mOk^8WSVXB%mJL= zrjs({8Y^hKL;d>k=MPTbS90`Ko7b&W$j(+2N$+|+9jGdk=_rD+3vBi~udJE@o;g3O z#Y$$;Fp6#c&(pg*qdrPk*7~XQSMd4Jr)MJSt8M*=yU1&4PMdZ5x`9XhKg&gu6TI|J zM9W+KejMW$(1N_Rysos>nV@-gwFl46M63z@j^KC$b=%?>saKV2h8J9@N#X~m%4VfM zdY^4$Vp1qY@-Wrmw{MJMaY^7h`%Atnw?1A`J>t7we4usA$;#U6KvKT%`gnC0*Y9AF z4I|!Hj<>tx2ndv1G_w&BC5#Et~{tZYOVzWl@l$6E93^ARQjalZG5SFYTR0_ zSyCF$?m$w?CLKnu+5vi0&wO^AT(&EWlcr3nURY&aFh6uBYSC{^>^C_Ga$qo>QaG1K zzBfw_v|f}CQs_W z2I}I#qfW%{Sjc84s{7K$xQcPNsCqC45o5uLc~!s&)BN6B!IGw|)qK{c21*_$@D+p; ze<#wk9>#rM78L3^LtS|weaNn#uNFefucTuQ>JqPTVm6p?9Ma*%yTT|bN> zv!mRrrf19v9ay1`LoIqg%frWXe*QndRq)<8W9<~)TOXj_SWqWBxViWIam303L&(gB zsIZgbsLAS%GLWRw^Lj4|Jyn_PQPFSDtA?Y-uuC5CQ{O+^Qtk#4hIx}R-dW^7D{N_NC}qqi0?Ot`x? z#7}YHa$cWndL*@5Fs#rYM~gJPG-wgJ9!MGESMpW|6JKw5zESDLp5$(oDssyAe))vA zp?Ca#OjzUc&Bs0av(k*WmMx_XhWcC^_g3wb`Jc?xMo7kl9idIr4q{WTd1uOqR5_>F z9QR764JVe~T(VYu``y?E;)!GX(&$4rck<&(>Zf#<>@bHH4VCrMo%tNc=<9Y`Qk;xv zc11o&;S{(DW{>K-ft!xQ!QcAbkcL%7|3?8r(Dz5>9<^ahl`yH)!8#!GPw^fyb>h1h=gtZ?5Q`U{VJ3TfnfZkq`vy! zt2@-yF2=dSiC5Ep-o5>PX(NPm_?~gmeG*6V3eF#7oc}Ecx-;>JCt^kYjX8(-FXzhT zofIZJ;}m6zdYn&A!kPlLs=+s=JQZCAa4A%&Is6leg(hpR(l1mM!*7kuqwk6$e9T{= zLNCSAmrHu*M*gR=BhNDeM@n#1Im_X-=kAogChE{eg3IQ@wOgfnnC8qVHHO@Q8@ zfNyifxlfTtCb?5tUM0*-73t$=^#oK2w1IM{&s@!~l?#)hR1~P3O1oMzRj$O=I%+a@ zAXDGAY%2J}Zp{l5g(27mu4->2k_s<)@An+i2|AG#B}dx|AK$O)VM3JNV-jHm=_2U} zaqgW$BuJ)C3i}T`JYHP+@t4s_ToY4ish$ol3$PQb?E*bp@+WOv|saGR!-eX`^ zvv#;SV^fI42wOoid#nv@^FJB~$w{lPqO4P^lXQsLfkJ)Iua|)?4hWB9;H%i9i;3vg zWR)N3!!rRpMep$Ql)at+0;}vPnzQ`qhAMx3x0Z`6ptp=VxMZe=aW=fa&}kR4qY{Q+ zmYe)G{$yWLvG4k1R3Dh%|N81|5}d#ZJ5}+pNg&3-fs-Iq_f|INaDPT+ZFO@ zjh%IQx3{r%(>`3eVN8mY1QX6cb52Mk`q^-~Vp`+)=h+t^t?ex(>QS!@Vc`He&d6jf zQvLpy=QnT~%MEK(x&jZsIbifu%DBpd`fAL9>j$l)1?@?Q#EV=|*k-BRPqAPDQ!keB zyAB(KgJ0Nxot`=IKv%6a@3&{~d!|Lg@|-!>vSr~({qw5HY_bz+2TjuTH9sUJA_)KV z*T2v}S5+a^dU7hgw~tnT$RAh;iZKGia6v+%i?T(xoVJn*gKyl2>S|5A1l1MqX3ldOaY3%A%YR|*Vh?$23u zZen*^w+ffoYw@mCEd8y3BwipuXDJJ`qo|O;qX2}>b3o#nuzWa<#LRoAqB)!RpJH zilOD}NP_aTDQ#?&QM<`Ag3QR&E(&Z=$x}6UWw%oS<*f4#l)wKpf52B0wHm*`4wOMa zb%6St(a$>IiT#&mx*N(YRr5-tJiiXHZoI+-@>|;!tI-a)v02yOuEN?{IV+pO8dWWT zKsBO^Gv){9k!EWQI%L7B_AM87%82$+j9;0iASo2W6%4jdu@+S?LT*-un%jjJTt1>$!6)ou;Lb}$ZDsuWvUOQEP|84)TAV;J=v$`5}C z_d^&jjsu0~>Wg|6lvqX!yBH@6{_sF6j3B&19bxk_VxbM}Hg7Ek=z`TznFzuTS6hAt zB?{v=y^0W=Asw`AZPlaxuZafefy)w>L-!T?=q8U1aTD4trJ2%`V*nOyT@#6E(ZyiGFHteJ+XMFoj*U-$9j?Q8fSQkt(S%%l&Uw7Z@Zu4tq~F zUP*H-Ic@+j$6q=8P${ouiiK96EsSHe02`{zBd&4NM2##6J+wl=aTV4f{S-TZe(Gz0 zkn(=Z?Te2ClOL{F4>e_HXwd_|wPB;Es?AO&2q4_LbO@q`a+*L`Sbe@w zbc`FIex=0$FBQ=_*zLuPRxFjeTl9T{FAV)EBn}97PhVhg`)k5JAk{)e^9?CgK8UK( zKmA47>dR7nXFu4t#S>nck<$&EcQg_2>|k3}ydoS^1In zB;VA?rLat{pUTEw>sZiu6qub;N1$e=Ubz?|9PcH`;Hs5pb{D4il~EkuUT4gBaoq*y z5ieF}&tis{EelOL+_Zva|H^^}F@QTCd!I^H25>9^qsPU!GMP4Nz)j3g+vTmaPH8v2 zv-kW80nKi^EO(d-k{)dv+CoIxp7?hQqbgcC*|OiUKW+DeC!K>ha2dEych22wfN#V8i~k3ij^WY zhN49yhagx@n?6V7y^u0MM$<@q-3YzbH8M<@T(a2v(Y zv__qwm@iVWhwZ1K_n6R5BMw;_^s&q^Y6#vleP*C3eU32F=T0@ZvnbzNIa))#Diq_! z3QlP+)S25sX|PTCgDtusRVO+@Bj?!+_S#E%PYHHnP-!w#-YvgvRaJ%ZwXQALT-)i2 zrD#=LzS9v6j>Qiktyi*hg}Up@zpj(->q`Aqv7Ur!uas`bLAbmAas7T}$-6m>1Bnn1 z!s^@mHAC3tIi}H>M8X}ryEQp9KL5dXfyTvg9{VBxNG<+aOob()p&FA5Lf3JrGGl1AD#~9sYNytfG z^otH4u+;Ac)5%&K9)tNNBvOS7kn~0m%{ys~Mp=oqW;v*jT74Arw482Y6wDx;9bh7= zf%!76qWI%QJdcIAV??5Xr~UcsS92-;Ux%%)@j<|COsg&OY`c@&MWNM%R5_YL4LY*j z_@#HB1mGd~g9!wU(n5xXhYCT21o(7)`+i?m)Mr{ymU`8@+3g50(~|{)|N9M-*fZp#Qm^W5_ ziD9?NaL9E31(6nq)$t@NxmRhL^HNnNhXvi}AW$5BNf**Jq;nJ_hN=<_b`P4cF3~Fw zx&n-1;m9Lie_qfm9L~uECL+pjOF4I9h`N6Wrz@%7Q{0dEX_JvV!T{VL);22|j& zb>HDZT}oHysgsiXlRh+6gv5JvA0=ed1H$#$*OPV4P4~F`j+Fu*#m^>V8`Xk=HP~XA ze;J`s#%L`p;hXbqsopZ~$Q>&^E_}hk-*G|M}wf7e$Mm7QWoZi^zY;$Q4|7 zlR7zJv_p486KT}7hevr<)-0FqrfS7yCLUjZeTx1`=ctn|Ae~D7a&P^; zMM&C5ioIBRV|rTN`TaiTgtSun{Ad3pa%Nu(pFB~_lc1G(J4TMw_CeD6fcgE!yKIg$ zuvnSKRcDk_4WkPDw})1X-YM^R2jI2%i#_DpCTADn7YR=49hW@~mRlF>YkcdiV*=&V zXZU_QqIV2!7kY~%3AE03&zXRmg?q-ZIZ68#zv)5S-l`Y%R8d&sa<;W;GBU9CL_2&4 z49cw8-c7l;eWs?cy6Ps(+GL;L5pZHbEr*t~U~tdmQ<@aGiX~>hQw2#fb{@HbA zCVh)|0j+(5l67dv01|S_cEWBRKE7!+;7JL~t~{Mq7jtVMMKKu(#iTX*&sY5V{rEB= zR40WTuu9zAnyKAg_`FlJ@-v!xNFB)AEBZ6#VO2O$zV1bpooF&^TsEXUa4kK0gt{wQ z9M16B`dXyI0olKF6<s1v85~E{beo4nw@x} ze8kX%q9H}$iluRxu#loi_T=E0BSVje=(%IwH=FqYBcaZjqB@r>3%wL_q?;l+xj{!p z|YoX>&?J&t;MggDYAC`X4FDZ6^qZdNbI#PSfcC8y)k{))#wsU_V#Hb#&2du|Go1<>Ln#_$UFX;m^H>>BYQ<4Cb79fEjF3MZ;$6FoZ@JdG=dxdfZGb4w z9n&3C%T0K304BMuHpA|3`zpQLlO3$&b7Vn{+GRTV>mUhLxob!gU2?!cDpzNKS@;Z& zD1VXG%(}053o?J*&?JX@La@i?KcB(bJlH6!klx(-E^fEDH6nTEE{?!{Z@DxyZ%1~d z3#-S1x*_Mj?nWgB{9VqIdk$q}Ic}@h!UNrK^QDij;RToNbqTRfDtb=;t6p~Klz|9r zN~duz<+^TimFzacu@AWenjm;2HeWB;fJsxxfsPm*+3)Vpd0*GF$R!3#<9Smib;S<6 zrXk35TlE=w7E0bKVkQG!kATmx2cWT38j$9HU_DCL&6XUM_Nw zjKL7ifChZ1?bg_E6(Y#!EHI12oe6c>_C5U$S+=X*!}sF7<1OTmauF~o0@iV5g5O{P zUki%3!2-@R5c1^(J@=CpA8aedE^fYF4EYm(`;iUXbm3Kg#_hpaeTu)3xHuGj?7?>5 z*x`CZv#C?rgcjZ$O+1#Ij9(j}%cdWFV|E!GG&x?4%A0H8%TGgTZ)?dRKA%h`Pab{1 z(*KiS3JWglf)N{R8TlHLt;b)5=o=yc%Uof)J$6^qkd9-3FE5>IA2AtU;YYnF5*T7=sO2L8@ z#qBLO>OW?}$;h69CNCg2zEkMq_ZvTvH#SS9@6MR{{zoZgeWH3+ecy{3HG1-gb7HJO zyZ5=D#Xno&7)xw@5=ZPy+;Ic`W&GaH^jcS6&#CUoaPu5<;Mg=h#$)ThvApTpVcHnu zX@oTI*)fgrhr(GkwHDW%_e=N8d7vH!{R66<14S!0d1yD_QCj=;==!%Q$n;Y-1WrE( z3s&HWx?GzqPp$K!blPM6Y1WPH+=*%LPrj|BrIfPkpV`@f({^%*x5_oLZ3haC?ro9j z26&F_ycryGskOIDDkykA@=QAMVDB!H5Er7L|1yRfx=DOYt?P^3@Am)ix^Zbp-g%U6 z4?Iulvx{IQJ^D^Fs8*_p-|}d2FUQ0;6B#Fx4Yob?Z4F#;l!JTYti?!4*I8451)LPa) zdO&H^X*<|;{T_>*-q{;=ckjWu;ZSDshmgo-gCoU357b9gp8PzR)`t&~yg${RpTrJq zL~q=%{$k1u!jH{BHX7#4!aX6`w`MkatT|Dusfoq6d?jmVaJs%mw~IH zzcJz1{f?%q8E9z;JV`42U@TR*~t4`e|LqeAzxex zpG-!JF(Z0A2GhswKf?F_ZoyTmsWbM|91_POw}clN5$ahC>8{`Tr7vUI`s3ynzQP`m zE`i^_MlUg9-v{HklEON^CO6(Kn27$4oV*1Ci|QWEM^NNbc8B2Xp$b@ru|*_C&xEzc zu!{bsyTazO32>iKhpY4>(JLC&VHHVGIDGcFv3s_(xnNL6yJKWEMP$-tJB6 z9G?G;%il()0~OO81OgbzeB4^5=6pmF==35~;Cbt2jc+#IQvyUL01x32OEG-_N8|)G zxncT8vlw#G#Unrh34jqxY8Lf69BjJ_6NL^r?OQ+Q09km6|B3^*;UXW%x(k;7E$ZyX z5a-2)yrOA^Zw_!XNj*_o@?xA1tbi|Vu2)8e2v6l@GfY|i79=dW0>~_Mypl>ka z-|aV*{MTEXBm1cDKLFwyRV|VcfYykxxF_Ru;9imm)8VK;exg!SC z?aj_CQtymAfTv0Sxa5SDQNu1UfY)$L19!&0=E6ba>o`C>$1|LUhEtyW&f@=9g-aUl zW`bq=+)|Dze}NHrh=EQ5oT>YAeZx8q4j>QMw#$El%b%{o0 z^8TZmHcuY#qXF}x4W>FDukmu+2@nNl-#t`?$6=|yPjP-E0J6-%?Xz&%z|8maU6{`X z9Bvf+lWYUP8?)jqy}^Dx1c*c-K)15;{?0*Wut{tnTyr=7e32yhFSr)zc94-lp9q z$5$FfEIC-|@~Cmifd~Q&d`f3Om=l5#`FFlt6z;;O0|0nR$H}?)AUi33rms&XG5+qN zoS>;D;LDNEZ)@=u7Q1FLiQa(pWYWzl?bjzH$I|*Sm5_{*W;>bPzqhJ6-nJs1&h?r; zhK%ytW$mWaV$;$r^8P$3b2$S6bHZ7x{bV{;qjE#(LDa8S=bfTQ&KjbO=(I5F!FN~$ zO<$ML=jgx7)_*ubG!1=Ub=QbL(5Q}QX__5 z{bwyc!5QEJ{1SR}Rh z)<-6e{Xs+!>_z{w?uv6_)VAHBc4rz#tF2^(=ff)v-$u@=hw6dJ?|;V9B{`|x9F+&A z&s_Tg{A{-GmtG5}4|+Rv&;Wa)f8H%6{XEZ%G7KTtks&8)w}^FTn@Pxlmv-P0{6${L zkbEIPACV)umGSsjyNWmEfYpc{jAo?^DO>ls>*f+(5uPZxs+Z_C^}=0%mXgs1 za6ZE9l{5%|h*6*%a~qqusq0G{_8bQYE8hlpE6tp`tb5S(VAYCGBh%P8n;G;z$Jw5Q z)%l^_(#r`Lu*7)sow1=!4+EUcK>)wZcT^b#%IO>PVDf9mr=;J4F|Z;d$zDClOXb|S zgH|%7MS{AkvF!naQ%z`3dss>OO{&i~wuJ#)pM*kW{Vp91xMsd*Le;-D-lPl9-RNdo z7A2*wCL{r7L=5-SB`bO#16kR?0G@+xOL{*(&J-eCe7u|SQiSoW5c~qDGPv$LKl6eJ zKA89Q`E#8AU=}JlFb^i+fkS)2WJkD?lpC`DtKs-p4$T@mO!LX4+OEZ$wt!c%o;KTl z>oQWXQq1ZYI{f%;j0tB_XXG2183+i6!`v1hR$!EeAUG?E2GO}S$5$c`Pq!SfyW=ZkEt)GgFoe; z`-B3a0kG=jRC{+I&3O$F4fyxIKb(OjWT|6JZNYn0QD3pYoa-EOdq_V z-ayIHJIcdHN%?lTw+`%>2P=@D-Q2O3nq|WE1=l}LMQfX2fX#IwMe_Iub_iE?GFk@~ zK*H0Xn_fk_@gVtM5M1=5L(?|`0B#}r3ZYv||Le<5$oXfjHQjMKf&x-kKeV@Bzj=5) z8v!2gM}!!NNW*&!oIDPxEihg)I`rK&2Agw*thC@-_B8%N0yF53V(mz)I3bJxc^IXK z>#OPs{KrkJ*-3Z&mF3Bw-7lfRDNQ9xQP+TV;*k#?fV74Kd1*5b8(}#nG)U+4iV||H zsD5`_H@Dx&H#5P}VYAMr#(VtK_IDn%M4bux9L1?^9H385J@=8q7luc26EyzC-r0FC zNCLv@*NP?aD3;!x$GmX;<~C_~SXc2G93Z}Lw_Us|tpNv!_&L5F`wY;LHLX8QuoIhw zHVg>D-8UE4Q>QF>Me4 ztE^$vQF?F_2fuO@n>ANv2p2|=07MubXQ2hU|8?;LHSDz0N+BI8vRj#9|OmP z)@{~Sm>^upzwS?@D5=6=7NH6N2i!#ohQW>gLnAg{Zb5-)UjCK#r;W>KaK3n9>x1tJ z=bvlOFO+>GB1(A00Pr6w{yqrJH>r0r$Xh5QCKb`NwSlr>ar|{!@M?>sy(SR8Y@PRRf*Z}hUIp@w>5Ga>wdn(?rL;H(*RvoJIe#0w;;V;BM5*Kt4Fp%)u1RV+p5JljGo5$WkFdzvtu^^1>Eq^U=AwbvJ^Ypk8 z$ISH0_N>AFhiXTO4gv02cw?n|PH2=7i>Ded+3b+4PD`?_-L@LH4G)iF2GLk06Zpna z*TO=?P`6GXCrkRY1TU&80Nl^~R=YZ*iSJV@iZUP&!wWFJd@GC$5DvFlWz#<5`WX@1#=hF zVdfvs4_Py#z_Cvps=&ESw&eA6F6)jUJ1Png)g0MT#q7z4??V7F2>$NAT+>(sgNXIo z5p5xO)<9sSk#+C^hFMNYFoJ>1aq`B{e27>i>v#H7VE~+DM)~afOz6xLgb^6+n|}?{ z_UUwX)Y*Uy!#xVODwOm`HRJr2)} zgEPPb#{60J;cz}anvR^PQW$~l1*6wFa%sVi$1VJN(!~J(!tFDRSW6)o_brE>ec5qE zj}vvV<+qC6O8}C1cpGJ;D$>#)4uS3(yI<+rY2RDScVk2m;P+eaxoCTo1S@FIXo&KI z(d1t7bcEVoxkh>MnWEE&fzJfJPXOHQ3hS9x>T&9mIMrr5^VHc~f9E<)XI@SrqD)M*xg1&+*N#^%G9^OnP?Dc|Ha5pKy+rTEAf* z%R`QjSSml)7SyH2`um@H?@rB8x222i_++$hf=pIEdxJJVU}6E2QBt+=)@93ruj_~T zq&}J5$(Lvb=VR!aS-M;kp791di3u@q>M6qszN0LzjXcgF$&FZMf&6;j^X2l)Yukl> zF&@7LtzgZq$YTbjiF#tLm2A2!f HY=ZtD3{*Xk literal 0 HcmV?d00001 diff --git a/src/static/icon_personal_password.png b/src/static/icon_personal_password.png new file mode 100644 index 0000000000000000000000000000000000000000..56112873da74f32c85ef99f492f1b4c40f1560a2 GIT binary patch literal 12185 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

    #W{_)m4aGSipPXO_bQwQswj=g+!U z(oVfip8)EUwBKrn)2oLwpa$l1Z&vdgn+x(50A}WuI$kDFRUULS7Ghj#wFM76&x}?O z03rc1Gh9DcE1&)Jx9H+w0baJl{{fgtI>KnEg(L52$>L$k2=FLjh1#G_ARF~YG5*cY z+UpsQD}p1Z_Q%|Z)3}!{r!_Y<#CeN=Cf#6{bk75ZP&GAUt8Z*ue|dPYw@OYBP@g2* ztd>5ru>jYVg&}|FJqC=E##nGXy$Ko0sGwD1CBKE9$0{jve3ukN%;S>5D? zDfO1m5cUE^;ARULLU*+0z_y}!Q- z{x$-pJCtr}TMfg&jtThvS+8tThC!K_*tg4?tF=yQVMkLJq`{F{+ylET$eiNOk-53A zJ78uoi=&3X7gO_{Uvq3=1l4f>gTCu`OriAw^1arR89KLxLG17z2aieTDP|BO+Sj?^ zc~=RC`tAcy+AXK{HZ&kJmrZr{`7z?^3cxq@3kB1x;R;O9J6Wurn$x<+0?M-p#%$1^ zXiOqR*5aTVDat^xB6T@+c&{Mj#g%^`Zh zPSu3afAteyR(POnVzRL{R4mfKuYOk)QH4k8DT@{~ax)?rJ6TXB_XFSt0&VYqj`Jge zC=%)}G)i$1L?;%&c>oLJ>nGNgq5uVZ8XARrB8WaL!011+?7C7kprCii5be$aj_;5s zPOMi#G&3aoazzk>S%8PC@A{0R(;aA7w>((_!cVgw}tYmd^~_vhb1-nR1MjxsZRdB6pd=QrKf@1f^Iogtsc zix0eDuaxAVA9ZBKJImDhEoGFuSi-8%$2o7ET%+bfv}1%M!O^YR!3E)U=s^g*!EMW~ zXGgQaDxjTGjwdRg6}5n6bV|9FY`ZAq1`m+?#DxNuuM~}itxtJvp6QIm^I?%EylCK1 zo@vZzMJ3Tn&VosvBn*n+yDZian!EYGil>XPJZTipb++lAMhZj}?cwfRvG|;NMIR7u zd1Vnrd4M5@X7t=^9mIzc|uNO*1hA-cjNx@bC5592$*aEO!Aa zTg~>67Vu)h;ZQB|1@nIFDDsJY`>=S=vMv*}{HI2Zo3B|ZCw46DcOvBqEa(=T+UuvV zKIz|UG_@$gb9kSej?PLZ!TJXed{3`GQm8OJXMm(zg7BkkJbDKxy0~heaB_{F6%@D~4eRX` zSkac;Mq!_|VJspEi~45zPevL|2%jn;EdLTazyi*mscx8rW1CBWsrtZBgIBJq>WN-? zsUyeG;EE8|z;^s%m#RYpn15cdq-#P;kKKCB0xV%2AX&4wH5Mz^PL7U)1U|@ccuKjV zpoUM#RxMf`0Z0uC8hIQqwEeH$BJ7K*X0J9N-yhX!ELd#&D+m^&!o{8*gt0Iz3STI= z-ldKPNjf}W@lLo{J|sJ1QKXBItbqmtSy}{x%&;V;@Uj#02UW1(&?8$6VR5;RJ}H0F zKluHkG)D9JX+V%vV2MR9$w{!I^M8+NWIP0j8D~`cvVP{WY5*sA`k0yiaB@n$i5$IC zVEJ$$Q`?HyArM%y&uq2qMu9}9K(MZ3^QY1!-+DkwIRlgiK><|tIIvaTC?#ChXrG7_2~J|?t%9w}JA+r9acTPweya;RJGw)W{X(^mU* z6J6FmFtx5XOg?w4-TXbA$aAL>H$+UUeEZz8ix{+cW~`IO-LKgj#Ia}V24`XC1ySH$ z`uA`HH{6?60&zJZ^v;1-(1nz1)8*YM{;m1!HPg{8Um+wTu*@D#4p=}u4dep1TvpH+ zjYm%a$RmY2G)FCtn0xTEyctJJRYc!EZE-wqIlX-QsLML}Bg>9Pi^SU;TVc{k<#j4M zO^Cy%WxZi&8e%lu*U7L#mcTx0%Y13`jW>)G-$P3>T`uW5Hhivd-(OGS@t*d7;eU3D zp+D7f-nbTh_k0}rj5%7W{&YEslbd5XJSE=9_F{JQjq1Z-0A_$LWHplb;~UI#1z(bv zrSD+|4Zq`s#`4>B+?OvZmi089!DwJk#jv6QMXSvyvdLdJE@F5xyQVzIA4sH}VyA2{ZgH*w V{h33i3p(9E|E%$ug3}In{tq;1!F>P# literal 0 HcmV?d00001 diff --git a/src/static/icon_personal_setting.png b/src/static/icon_personal_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..7508cf6782b555381b0e2fa6d83b123d42268c65 GIT binary patch literal 14302 zcmY*=c|6o#^!J@%kWr(uMfQrqQ1*33B~-RHOLn2M7Fh~2k|-fx2$4No zwot~t?`Gz?zQ5=9yk5^AUgmS|a_&9%oO{oGpL3rW8|v<5=Vu21?A6yhdkFv}{D}l? zEb!loU)L7=x5rb@+zSBo!QDRuNJ!#?M1W0ZaQ)2>!0D;qbwJvm;3Mq z>X`YnhX(yZt{LVRCE)W{>GSnu|q z{@~MB%ou)b<_31S{?eLB;>L;QB%<6`wNdBH^@Z}W#Q|Uo)2n|=!8T% z8b*YTx4uQyx^guJI3GXG_rm^9Q<~Km`LLfAAd49Vj86?#CQe@%Q|9#>Ounuzv@~k{ z>XV+{(32OZzcv>>OLp-ccbGkrq*3H@4ZM1c1d@8|r-iS}rxbjDsbl>;p{ilR-tk&Q z$at=kTYZr0MFm|uz!ic7)XUvP(T``&NUzM@>Jc$SGs!33<1iE+3^W8Qp-9mCtqUD7 zHW(4OWF?PXh~`1X#2c_b@+y)M?mP~ZbP>S2eUO&3HtHvFYB+jk$-cEk>!Nw4i2qCV z*qt53nJ~(EE^t%9YQfjiChmC}RrKKRJwEG-v0ThbrzYMC570lQt2{=D_ zXL|6ac6SGLlqGXg_G_L97xQ{(4@5Hn-q>vAkHAyJqo+tPnun$2Bf0_7ifrF4y42ggo2)Z z8EjmDj}MJAj(N-3R?pSc*0zTo!2tyj=A;9pZ&m?MxPa^qVFKj+O-WNVUE*>;i$9|wZv z#?;8S#oh*U9s;n|A9|TSUOBnQgbri=N@C&!f-4bf$?}c9eI|9#cedghxAKfmwzC?m0)Q22H)QYDHJz5hIBAI|v09Sb2nvWPhKG zxl9NAXQG)$qlOO2iDq%3@S!UeHnMAfumlkKtxnq-Rzuz&s?MnN9N?>QP(dm(zl_&lC4G~2C$#oZ_NG}px>UvK}k#YMoxzi zHol2j{X(`QB*TX$J;YUO-r~S3r=a6X7zVvJ$6VXp8?ciO5$0A{i5-y~x@$W_HrTt7 z_YsodZU^hu&F?k<7{>Lc^gbAgpgpvN)HZa`v%*|9KsoM^ZdxKIDeMGT-bN6X`Vx5n z-qBtv%;-NIR%Rz6@-~==I7uYS8AO`|9M1wq2hWfMTa-}@pr^A@F(`aATwe--3sIQ? zsE7z0coZT=Qsx5JZ5LUI3&zZ@kx1Kva1}YRPl-QGfGe?17<|*+pLdd-c#pbTHL$=6 zR&CvOc0Od-sAJ87k+$4{c^KbqCVXXY!;Jds?w&Gm7SZN-`~DqEwY3TWZcC`{^HWjX zry`-ZC`S_TUQ{M)N&%w9(`QMWf6$HRFvr=6wPT$<-;cbJ@BR@Ez|`#+GXrD7_vSj2=|7!ezRmg}ie*f4@YI7-A=$lH-^m)(k}qXk$|$dj!~&o1 z5gt$sc&0;#hRH6}X9{KxXyS(ubbTGP7{GsAl_|A%d(_@xKH%03#PgvgiKQe+{%Kau zSp2J)c86b?xnzChufF*Eb~j-_Id4!QnPq|^8txR2uKAA!0pitvvG&Ug^U<>juOHuR z-jC;5cUWWvpEBd6M{+v6)blV2VEn)yQ zg1o&Zv|(S}W%)S_q-x~J?HBlizyV^_FWO{qp$sS)69&&a0|xlZs&iU7vS#-KxKJXQ zF=`l8cRsMCVt_GQpc7^8&#ez>{oLSzjb+!@y^rYtgtkpToL1p7%RU6$x0t}Iw?50D za1vZJ{JsCb?;}x2BNB`*1A6nD69d9vBq3&Td_$EQ#)5jlOwnWj;>XaP3ZjTQ zxIZVX`)@A-kWQQA^Mvy6<;VwmEws#AG$wE&vz=mfM%!I4L<+pOuBeD^fHLN7G~XH@ zvaw8gMPXKCqKF3}KngpSpYIAQu^R^{m&M8yVtQ0(n>WQYoqw2A?2 zXXSJe+TP$M>>atk*@U=`0-p&0uh)@51eXxj!icslR=|9lK4rh152wvQN!3ox1Tv!h_iub{}GqIF;?CR z4fcgOHW9&{=>pt-sIXs~$`OxiK^h-BeXO56Vov>rR7I`BNJA7+AK}03+^sPICH1 z`+ZBCHB#Gfezb;TPxF}BdQ2bm*!!ia9mu<2^AwF?@uGNW`#iBCfRF9d&R{-wgTui; zx#cee`Wf$P6(?#@W4$4hCue-DW-K0ka?aV<9KqXC;7$#uf0NjT?b+Gf|f z%09f-R>Md=M*5;&=!v0IIu~i;vChK3TShSxLKOtFl>0Zzf&UTog4Ct7AMC`x7YKYi zH6z}V(~0Z%edCYvpN?koqlxm0j~VUUUA*-{FH{itF!+*EwsC86Ze~|5s2evkiC_eN zkGL{eALBvZ4ogi5e1!#f?+l?luYtU6U2C<~);Zy-vX?j5@7^8!zeJ(3 zZNfqj3u8n%kXez8A0H_|kG$ROrXrjs%3O<#iEY9XUm}TvxFwObu;-lUvxY5Y;9d3k zKAO0!J%Md6Z1d+M+W0<#v+lyd8Tv^{NZb#J<8RT%Tk6wY5fRXpwB=OWn3yuD=EX(+ z{SkYujbmNaEC~lS$E&*R1cmr77h5zRud1acd-V9K?Q3;LOjvgBa2TWVNN(!p`L@Fr zW^XFbwAu&HCskr8;GEAKf5+Ie>ANFGg%O?;IF_+fYwJoLZINSBE{4*arF>s(&R?-W zQ09dFOP_`k0hpeb}h#^D$;VVs>w8QE(qkIdrQc}JG&qTE1SxxHPaNS7i9G&4^C3CZAolybBftTj=KVn6^)ZO(B zOK7NH3`w$FYo_TJyEb z*+IxX`a>J%qtxL=jL>I=94$GneBV!b1Omm@!cOc*KbrqhB2?0bBvOT0{@!*zJA;`P zAr*5BbndB9nQ92;av-j-Mk`^gC#jF$9nmVL7hRol^B!Gwscu?p`}pGGnB zTmy1DVcMMAAx7b-Z@%YT?dm}&7ubG(PwuNBdmF1gVIdMruMUhg6WMWm)@Rx!XDf=L ztd=MqzsBAwnLZRw`>IP&Gm_@CZb~^2cU=?(Y6w(bGH&CUnMlB!!cj$4SD}(m9c_ zWPBN*#tv~vs{TCzQZ)ShUnDZxFi;2gknw)5N9L13DLb+EY^e2x@cZIxVQnQ*s8gKb zLF0iJ7bqxv0&Rj^O=TkE9yK^hFO(1S^N>u{IN~M@iNR>1!Zv0lyjS@2Icd(6ANM3E z6cp$qtkhhcF$yc<+d0z?1!L+z$IO=nM7E=YN}kaw8O}ZoNmep`L$dWG1&_jW$r`Y= ziQ5yhnCycWev#?{6E`Sev`azCK}czbltAA9D6!<~;-Pn|(Mxa{qggarsO5k}i?+V? zwh?M(2E%S0qYT;Uh8$*Eu>x&$UD>(28~=1>FgdWk2a75THT%E%`?t>||NoSLRX0UO>hX zp+=oNymz(0Y5fX_^IMqMn?Vn!A!?C-qOCnpGatan8qW1mudpW?%9+%oGV%t6=Vvf= zYtLZJo|uVfv|m2#*@UE=d-I!-hqWhAEMUtJ>rvu$VT75yDCI;gofx?vefHNg*GeA` z3ow&drSKxjX*D35GhugWeHk2dQH5HhiRzct!<6?Ze0gUAr!99Z8Rx@b<0j*;xJ}Id zR*GbDw*Y41;|wwj8E5MPt1C(+Klw@D{3j2R7!KU_1pK@L&qkjHY~YZsO5BSEEevu( zQ?Kx6LRYX5qJpMtADq>|;{^nG!0Z}l1nyd!7r}IwNfsKGbU3XeT+Kjj5+fsGj&5Z@ z|FW$+2>0HrO63@l{tevdmd(KF84O>N575$>KgP4sCCfr|S) zx~j;k7Ad^LLdFl+E5-l4UJT;kKE^9`T}u!AT$phveuA#08#}|{$HWL%dEOcnv!(6B zABN1H_6i#xhQ?Kyhc>QhZ!41zgm;>=9N;0O%f*r@gn%0YOu=SFUk_8tj;51+lFmto z(|%o8EA0B_u34sHRqCYr_;~zxr11Hw;vZU>yL-2>rFc;#FR%p6_5`~Q!C|Y6b8~_& zN6|sA=&QYhpR3TSGRPG(r@2m*&1o|%UB>5yqX&E7PvHvZuvZ2S!S`oI>^C@t%I}D_ zH7~Yr&e>RB1{(ghc49mVg5+vXs^OAWCA*UO%KCsHcgNbVhksgP3VWJv?_cN{uMaKV zhtl3>E}b{yZNP&Lpf#I5bP^ak?$BuTWw5&F-!IJb*|(jTZuoy_LJb3ZzFmy_ir!1#B%j_ z{0g=4-MZQ-|BrQ5H=hy^lo8jd^H09&y=J3*FqXwlk;iZRrOQK>>&~2>vr4V}EewHY zy{QCmp)=~I)Y|?|Un%Bc!d025Op&AZrI@g}8njLn63ep3=S!t|Hri2D6Z|g8+7v|; z{yvk)aB<|>nO51!&Dr%Lb=9cjFR(Xn{f<9vd%;|Kp|8H^LZ1RpmLNY1QsBp1c_8(P zDt?#A_6rMg2H3zHn(m}Y|VjL+3 z3Pk&Qp)AAOd8;t1=_q!~*?-m9j#u7s4Avg)|8YIYlnapKs(BR-kgIP`CN8zUcYg_8 zx<7BxV-`x{3uC&)u|Y$EVktaq63ssh=s!&CQ$Vj?E&b!`*{wuR-*O@J&6t|bscy(! za`593%2Onzx9|)y3ujOG)xNw~Hn*jmJ_u;?@&b7W;F&jh?I_|J7qCPOXuv+wKAXu@ z2)Qf>km-G?Mp2q7FRMZ`QR!E*UjSveeItnH8sGo4BCQgdtdxBy!*-H}LV7%Dv4s4P zQlfyLg~<6Lu|1w&KzRR~4VxP3*}RBBh7Go$k2d^VhORX*J`pjaM-;O?M8?1RD7D9P z*-A2y1@PB6&dh)I_2+!@gNJb}d42t_~hTv98Fn?Y_^woTyKY!kPiMd7^Y3{ zi>Rx{Suks)R-8*5N;t+7e(J~|y-*%>L#QaYsW+7e7-VAn?H1=#eLkdY2}K+rGFjP9QXrqOc8$cNQ?pA0m%$|OoIMSzEtQ_Qg9@gMj`rXk) z?4aK`9Itr*eH*H;`c~=M;($%-3)!Il7^$9_gxr{*3X76~l#0!5AN}^Fm(0aYQWDj# z-v6)1Mu$gJ#2w4n zW;XA?DjHh-Xf4c+q^Yco-DziEf9=yPR8o9(YoC=vuy9L}0If8qdw6-QL(aFb zi-(N!{U~J7sbihtAe^ZqFlZx^<<=O9aFcUS^mS3eVIJJo9~u}g$#Ykl5XG4#ow8Pg0eMzytm zP;_omZAW*_bAGr6;?v+pr6$DU#MUOFnnau2%`eV`-f*4~^G`cCX~9OFH?K3Sm^^cP zOVwBL#s%rTs*An|%2E6(G~?tGJOs@#MqRa)f$u~PuLDi9P;h=LDXx54N2{z2sz89d zB}>5o0)kgQ;k43>RF|F*LKzcoE79e3izT(45;N}LdC$b){ggSgaLF^&lI3Fy3oH;y ztx`CaB?#wHGC-R)v}xTMUZghY;NJ8M-?`2lG(mTozi6c;^Bnzo>ejC5n;fZ`p}RbW zYl`({lx<8${jMM5F%Ya+n9gpA5-Z7bDqa5Gi9DJ0F54#RoJrz!FuhxMJ*xD9LsuPR zG?PBm`%XA9=oyyhsMQWsspLAO)yS>jRrxOdEsI)3%IfKvRvFXdXt(X{iVf!#hk$7- zWvevS@DHkysI9wSxu5Q@bCP~qipsmTJ4uhH*rzgr`RL=0Y4r#!3)5;=_T=YV@Kl;b za-u)Q>aD1PER-p4`^}wClVsc~DMVX=X1T4f&?7~QvpV~$YSVY-{1fO>cK4pFPT2|$ zE`=@{-Ox+;N5^c{3*XeTa`dJbtv`M#tV?K%1w|C&3D-Vr-yA362NnNrJG}>y`yAJE z-w5A#=63%Jr_;%1A}r58(Y(QJ%2lq&-eDO>BL=}|j81DS<-6n+U%LQziWR9JbIj*T z_R$**pfABULyvtuNYA~H_F6NWba9=`_YNAOaCiTHH4yA|Xgj+mszB0lj=17wl_`2b z@RF35^T%7@eP=9mP=qDHY2BID%KYD{!rjt#CTlHMcnK_>Z(tFw0E`F`@umH=gWK0{ zwe~c9PE^#jQFg2jf;(UxbYz1cY*vJwk7kH#vT`yv{+dhe9X{{-x>uz$ab-%yd9g3R zaw^?h;%76r<-Hjp*Nrprr|W$UNGk)Kb-Pt9wn}B2Y_MI$ol89j&_r^%ztr@<6FgbT zyk)X~M$3;GW1?bh{2}YqBCV#;^n2G|qrDt`fJ%h*&#ThU`J75h*d&b~9G>wDr+v%* z(!9uPE9m%db-ioj^y^a$*8$nQZmX!L8>dnii3iNp>-XbHKLYYC&OwDj_MBK&`>lpE z|J;nbeh_Oi)#K2(o)dwj8%;D3MmQll%_*sg^jxHx*$2D4R%J7rkjU2b^zc8a;FBix zT5!AR=0xZ+!_x#X&&cu)4D=ZB+P*tA0SbCQj$NMh);_Vmld6+-y^mbYVagHK+^qXO zPF4H)%55Xw&qnsaQm+Gd(#fC8He38k%T3fkaY;Ds_#kb$Ezi?jeAycy-`^q@GpO&8 z5L^x_FJ%SLgZYWb= znKWFMuHJDfS}{CraP+^LJ!jrdfQO{gkF`%wLzmXlmzi`A4q#tZidW(h&&!(ZVuHq% z2WSFnn)C@a63dUEF6YN)BQlP~Nz)y7?vTab0keN6*6PJ;ro}s&0Q1*QEHR?I?FkCo zsgpU=TI^$aItc$fLhwUTx+=q$cl&Y@t%sQx@vDBKQQ*%5#@~OZ_mzPrt)2P1<=C>s z?L`OoQA@`Sa>!Q`A4XGB9i8r%JV=P7UZwD&3K!_9vEeASl~~4cMz0R8HRpX<#9QGn z5j_oI9O7wS`h6-=nddXm4#^f@w|c)~43l%VcXI zR%-p*i0bTz&n5ZExN-T4<)RDilQkJ$5BoP~AI#YY-wS#iD65rp?>GN1o^qp*;4Lz> zemq~GYh?`w>)%@%iHc~NAFyP#RL4358)mW(9rnk|Y%MeFS-qVnZ|E{DNr09Or)%`!aou{50h% zWw+5%lMs?mhOrlgx7v^PuK%TTak{;=I;F-%l!QJTqszoE-^rNB#tp~s2>nj3ZRxIw z>avq02!U7aW3fq67op66Sh_H#=@|xfg!o z>=fQQmb1=9byVHzsSL96cFvXgx4m-HxjA)AkcBZ&M-RI9qSq$*Xg2K=J&6b0VkN3Z z_d|DTxT1K6hx{Eme1Bf*)(O+pX=|!j)x_L&tN2fBZOJQBhM_(jK67%Xe0;O>1?f)S z3%Qf(m+T3WZJ+nyxqe5S6eL=7nvv$le*`hLn~j8hxnP*nu=>koKHzA5Q2)}Leo)_t z*-fTIi@dyT--Fv1at}_-RMTA*pcLoX?zn7v7~9k$2OFc1#?N|QK787nn%J9KrJJ{% zi>qWYBN(EIZutrlyV%1V)r6SMD*r1UI+}EfFdRXDVdz@@meYKSHsUl?M6JM_4|h76t@cISv?u(u`>BQ^?pK$%$(+JN?VeEP zQFu!H>==OyxjE{(D6!Tfx7KYz_yR_hC{BNF1-qNTkX0Rn2M+YY`Y(p^aQrG3Xgffa zj~26akfuwOmKneWSw5l*l%uyj;2r*2*dgL$Q68$04#h%^_zx)b3@B{Z3G`{w?IZ`D@!PKEtZkJQiK$c12?;}(tFUML70%SI75S)i9= ziaE7MJ7J&7relUIx&v1}6xX|Qi{TC>b3#f=jV8qoTwrf8*~!GJQbkRkl7u4LM4uzi zQ`Q;PE(NKkqHAIK_jJLpAB(OI#{s{dI>45JT4YaV>H`^Mf~N~f=mGTWTq3K7d^KU8 zMKdQU@!Tk&PyBa(w%N4BKDbKrXe+B4FKO1Zl9m%SNObMVtrsfT=@DCFm2fS%gTNmk zm0EsB5_aMeB@#pRoKLMWreF6rv%EzcE;-xvRIAz(Jnb5-ZODx_Cg3^qO^CeG+m;t6 zg6=6&9T0AcxbQl_@XfacGA9L zj%s$?yOuuk(CQvNxBIZ#JAL3%kBVFg>JSSUnSXqKIL#UQg=)55=AsL0eR>dCc!z%M z;l;%-wcQk2^aXp#3Syb^-R@T4tv;wC2pIUXv(6u9T)Z^AjIAk{q+8tdco&K-*ku$4l29nhwVckUJ*r6GEXSS{;f9|QI14a?YtCx zXETsNrmQmplFJvpO3XQutmqG9*jDyD^Nl(?*;>{)Q+$DBgAwHK>|UH$Zi=X)^A9H2 z!+E%5TKChwPT5>vxBBxW1U>Q6!|Na5H}sXnvb@TV@HED1x>RW%rz)M8(z?KNzs{W; zkW1h3k#J_HJ#QSxt+0>0)b$;%-iqy!(LTids3SN>_l4knIGay_v!hDij&+98yrR}m z=+0o~J`-LNl{K zZddh(3|ie*T9xKN?LQ21fYON!{<>IzyHb~cU?--fDG7p4yEM2MXI|&X6yS!ascvQ< zNkv1=%!kPR0~@_!7iSkc87br^DC}}PR@~OVf=#V-&0la>5N10*4vZ3;V3bM9D9QBu?hMN zot*L+R(OK~>j+!%T4Zn`6eT()zHiB`qLBIS0=d3 zm47)I5aCo~rFbFo5Rs^&t%)&39VU zmnj&+o)BkV&{@LvbtVj6Mu>d(6b4EV>V+sjLAq`>rF$lYo%k}$_vh0>FQhAkT@x-w z!>N8{RWi>e5L^o~9kz$mz@D0uKuKGg(_rn(aoAnRIasx{zbt>uANnJ2KmgwiRA z`!rvO1BWx&OVuLV6`+~MZ(5HM;#1IIlt@L9@d|q&^k2KyPB(>M@+3o}$b&r(WgmPK z3A>C^4E#B@dKI_|%*nBZ%fS21L8#&$t`9!sHU!zAD3O^=DFDt6+Evgp2WAqb2nL;Lh~o$qACSHV-~{m;YTKGcSLa9h=yDyHRbVSx$@J{OMI z9gbKxq=0dC7=_*yEZ;i07?zIHellYDYDiZi;Z|5^mg+$j_J!ah>Jl^ z@k2YlQ`DT(%6%}pr7Xl*`}03;S0>GMbDyj;n&*T=j*o>`wjuFuE`|PhP8O&XS3M7H zcOn7b*_awaJdDH@phYY>9?@ag#6@ib?m|Of*8aC>h491S;Yksw8v3m?Xpp`aiZ1_1 zusDyvAK~xr=3UA+8%>7r^!j-I$T{RM(}4Xb|Cm*bocXNg*q zqdQZrzG|wOzIVm}jyip-b@1I>;H9$dVMcZ~lEdDAolviNDgDv|TmC&sY9%Bq;u++M zzC-Xl3>NdAl$k@}+i%juQ}6mRCg(+tUXW!Oy>H8*ml{hyBy)xNG4ycT2CLm<14WKX zRf3WGw&Qn0>d`;gof-H3A)?+7f5_LxKpnsOCf4aMDhx?^@x-c#xK*883Oc{ zOEI1Gb1E@A3Q`o}iZy^9?CWBNU-DPn_@%#dHdn8Kx7DTGkkwyPiRvTVU;=`0h6j)1 zwSLV)hE^w5b`9}Rj2DtaZvyOQHt2w)_Up%O9)x`$jK8dKNX~|nJRt*Kk?)!j4|@yY zBVcAC%a0YijwQmM9@9g39e1A(v}aeE!&y`O7MG;D6KKfsl`iq$f6Ir3ct|%BRwq8% zaDD4PC=oqm;*XF!BE%P^7M5FoX8T1-LpV^SUS^u0^E6@Tc8LRuqdI{R6x!;`s2!}o zRlD8k{oV_$Me5exRh9l>P#@%ycf9q84>i^nl>8S2YG6X7-kU||4q=`1KN`+tM$fzl zW^VJrO{shi-+O~Mn@s$bDdycAwMsJFN!ngXV|q$<892IeDBw z^7>5Uh)wa2d4!ovpco7RFoUkMY8$3sJLyHEZu2jL@c>T^5ZIaiXT>U#!4!-Hc*>|` z0+*5hb?~-zkKCIK0Pu02G#7eXVxaW+s&iz%LGrJY#yXjOlrMIYI^Ik8fZfbrX(-Bk{i_m7+p69w9+O zGXqkx)QwePv7glQ-Qs=t$B;2G`t)s@^TQLMBLn6P0WkllbE}p4D#*I5I~S*42IP@| zhfUP1e26ZL6)1z_93@oHUPNU$*ZY*@6~IverR$7GGd)pyUPHVw&5rjeU40m8rwW_}PGDM9xXmTxumM&c)zk)I-6`pOXCmBh*}EirP}^**T509K;0pC= zb+rp153w@?*N-h{2-%A1py4sH^f)KTiz&mzo7qn{fO$@R}dt_YVZ0d;5bUqjFbUg2jLP}#Oy%;h3Cnt{^L>Kt@(ON#EI@TpNoS2JYhxRYpAu1 zUv(|=9kwu?FdPz=Z``SdH{8e|>x&uD;8ZlD^W91LE;W~DhYkX~n_~o_^BBFSle!Oo z&W6oNa&$5n7`ylk^|oY4)0?Qk+kc7j?X2tgCzvWG;XX`Q>Xr1eQEo#}(~U6CBHdPu z*+5rJWV03z2Y!FC zcRUNg(Y)pExW@l1;kf{Y=|n?gO}W$2Q<&>66EM3oYo$_gPNR9$=CB$-J=jUbM#iUg zn>#eeK~3ze8!l4E?D~?b+ICdHb$R=&Yn-Kt3Cp=duN{T%2wNd?vn+?l%rN%W0_GyixngVZ*YEXUiO{r2-Ftp6YGVV zQ5!8a5H+Le=ikA%%yLp2^oA!Fn-ruzs}|q_`(ii&admQ}fSjyrBqWf`t)h(>;e&Gf zRG=|A9Q4W#S1bumeDf3m;W>1P9P3F9oL7Li^~i2cvtNP;@z_|f)~|Gs)%%i_=a`!P z@Q5D3dwFJ7!_0OKiX|YvAE_7?<^n=?Sb$HS{HxWIX=^Wq% zB(0eM-Dc62ZQ5zXh-ehtU{OX(%e^?XR*+18f|;tcZokeOvlB*6xsv%=nNT&GS)nTA2q6 zIoOa3A<6C9I3C7A8-lHOOxAM9`Ps$Jy?<+?e^3oB;z~25FB(wSjZkqGLA2T4mwq0wJfFb{62g55ohCrxa6L3; zsyCxhD!JyrJoZQ(1o0IQ^7EfGGRh3TVM$Eq1g8r$M%Mq@Z(nWMB=2VjuEzzr4h!8+s0AbH zJV7f_NT3M^5m5Innhu{)cyJ+!vSu46;UUHG>@>(?N8^^@;}CZXHoa`cuX!TIN<2Ya zFn|#%rUS@)uf<%(v8=Z*8W#F^e%25`zBEclgRgrC;!7z0avhj*CYK>e!q4<}S0UKAShi;Nzf#a~!@y z?e`meIx-&aNfXH`_x`FZqw2eQcY=v0K;aMywCSK94wi?}s~lcF6j8> z0#3Cl)iDh7Ne2O3wVl~U-*x-l7#BTxPMz6%&yGT3K;RqRfR=?|8501Q^e(ep`~K2r z$?O#u%A4IXzY#msd{1`GwEDTK&pMtU35XBh-eUUQFMg-vsGNQ* zzNtEFpuR_+Y^$ap{Cv>UZ_L?Y)@*G)vo55tm_4k@{Y(W}YW@XwV9V$kz092M+}$#` t5!jiU(a?M^eU0~2!0)3z^F#(6w}`)5B7<$|h0pPTzK-G9oYS@s{|~G5*%1H$ literal 0 HcmV?d00001 diff --git a/src/static/icons/arrow_down.svg b/src/static/icons/arrow_down.svg new file mode 100644 index 0000000..e4d8276 --- /dev/null +++ b/src/static/icons/arrow_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/black_count.svg b/src/static/icons/black_count.svg new file mode 100644 index 0000000..7122e62 --- /dev/null +++ b/src/static/icons/black_count.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/checkmark-circle.svg b/src/static/icons/checkmark-circle.svg new file mode 100644 index 0000000..d16c84e --- /dev/null +++ b/src/static/icons/checkmark-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/close-circle.svg b/src/static/icons/close-circle.svg new file mode 100644 index 0000000..55c1ffe --- /dev/null +++ b/src/static/icons/close-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/close-circle2.svg b/src/static/icons/close-circle2.svg new file mode 100644 index 0000000..48be751 --- /dev/null +++ b/src/static/icons/close-circle2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/close.svg b/src/static/icons/close.svg new file mode 100644 index 0000000..e6a2272 --- /dev/null +++ b/src/static/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/data-checkbox.png b/src/static/icons/data-checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..748bdcbe36faff874f06ebf45f135d6e166e5ec5 GIT binary patch literal 1888 zcmV-m2cP(fP)Px+8c9S!RA@u(S!qmER}}v448u4qf}n_kidtn5qpeW`TCLWtwi=fPtGF|*tuT!E3U}Yr+FfL|(N_Hf5wKBaIY+rqZe(SVrO!)B6*mcn?ta1%z;b zv<9FCNCgNU;f6H8d=@| zzFTb+yBQPMJbiM+Dk-`Wh%lm~hFbtSz1!Cxu_O6m-MDMx?i?JuSOUgyQ=g>mD#e;h zB5}z#qlsWW&A}GW2}7HfYALubWq8DQ9nD96aTP|t6KIFa&zZzuj3S0$wML~aj^yLa z3zthGI+~FLkc5yRPbAIm=n7BL^9r+o)mtCboFAP-o8ens2Rq$_)px`RfPp3HX#{lz z?2<@aV#WbN$nYV3{V}Nl%Bu8<1u3SgDuPdA+M-97`f|pH6(}Tv_}2!S}_y*ibQxj+Vjr6hCdaFFs18T9*NLDWId7{9QpE zKP42AoxL3zJ$$|hzwOJbdB#VWX``x3@$9uyr0skJt5B;N+1U%9PY8k9Q{gnwoIEc> z#!#+L(mIY{9c|Y{5)Jo2Si6~Hg3!GY7&mG80F%!q6z` z({e#^6&9?>s`lM#?UlMX^0M1RC}oQKFx&yq{{6QDFn&lYSD51Sf6_~#-;pD3`skj{ z_m(5DKMp^}-jjv=FicOS;oYSebX}|fW+Yr+pj0S+(5Myoer`wjde`s!j*OL>ENCuK z)}~)(vS8t=J192`U;>$?PYz$(U_@eQx{oiEHwh3N-Ltv)cGy@eb;l!|xmwEK;BP4( zn!2T=^sXHPUSL#GM!5bAnh~o6+06gejSEI}4|(Mxh4`6kB}n}&jivGGXPG2e#{>6{%D^Uk;8eBBSXAuORpy z23Qn-TZ|hUY&VL?FB48{wmmQeu&VCyNLNj{W9Z3yoT}7lcId--CMl z zng90nR$@eS00#8(b2g-Q3S}d?_L}5FIs4 z1jM^vv5oP)6Vb^F;b9tt2JyRJ6+Bf0l~oMIWmU+|Gs9pkM@H6D+g{)#j0|jU8jaX3 zBLVe9-6F!#s&C^pvl#?gxAFX9fe^CNiihjg)4~7mZM=P0`1g?;{Ry!;_&$OPFjRjZ zVeG7+RPIen=z9K@`aa@LIW(lM+ojcz&bWisM8uuwHHL0eMj9ik?qD`$#GU9hhVE;V ak^cbcP=`^xbzQaq0000 \ No newline at end of file diff --git a/src/static/icons/icon_customer.svg b/src/static/icons/icon_customer.svg new file mode 100644 index 0000000..1ec2604 --- /dev/null +++ b/src/static/icons/icon_customer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icon_date.svg b/src/static/icons/icon_date.svg new file mode 100644 index 0000000..fd7b17c --- /dev/null +++ b/src/static/icons/icon_date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icon_eye-fill.svg b/src/static/icons/icon_eye-fill.svg new file mode 100644 index 0000000..6cabb84 --- /dev/null +++ b/src/static/icons/icon_eye-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icon_eye-off-outline.svg b/src/static/icons/icon_eye-off-outline.svg new file mode 100644 index 0000000..a99c7e5 --- /dev/null +++ b/src/static/icons/icon_eye-off-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icon_filter.svg b/src/static/icons/icon_filter.svg new file mode 100644 index 0000000..a916a83 --- /dev/null +++ b/src/static/icons/icon_filter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/iconfont.ttf b/src/static/icons/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..d9c6e1a5bd7b13dae475633a5f4f6266c649c0b0 GIT binary patch literal 1616 zcmd^9%}W$v82`O9>+ZUn=0{2N#U$mSWLGz`i1Lu8hoZvFQ;_5C?1#+GY_p?iC&5z` z)S*+?i0IZekn$Epgb?H)*KYg7!n&nIr*oH>i@fn>W!ZZM{GhubMM8(S#%PAE0eGX4PtW zcHtHM99pU7*8TT|(<2O({)N(ifiWV?rKQ7sC@9e$s3+XU+^~v;C z85qqmXp1zH&?HNdl{B=fijqz70k$}#NPh}F=!Z5qbafQXw&^=KD4PgG`v1kku9QsH z4>JXQ(ksXa#1$KhK|DqS7rw83AonPo#dqWcGc`2mWOtDp#mfaOt}m}I2j>C(3+5Om zd-yAwTu`;dHF)DdcSwm*6?=`W%ipjRNpn4ltR862gs!AqFD_l!M0*4gV$#*IoBR;8c1Hby5!g2B! z6;9z4E-Rd7#hQF0VvSs<3-byK_Wx304b6D1uulG+!ZG4yg&WX;HHG8ke=D5A7{B+h zei~gOKj2xWZxxJ*S)-D7oucdb(L7?6rfk!T%xE67yn4lTjNVL7L=9Vx!pE z)t|*qY+{2KD1DQxlV@}W \ No newline at end of file diff --git a/src/static/icons/icons_close-circle.svg b/src/static/icons/icons_close-circle.svg new file mode 100644 index 0000000..01bb878 --- /dev/null +++ b/src/static/icons/icons_close-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icons_close.svg b/src/static/icons/icons_close.svg new file mode 100644 index 0000000..5574d0b --- /dev/null +++ b/src/static/icons/icons_close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icons_edit.svg b/src/static/icons/icons_edit.svg new file mode 100644 index 0000000..e81fde4 --- /dev/null +++ b/src/static/icons/icons_edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/icons_scan_close.svg b/src/static/icons/icons_scan_close.svg new file mode 100644 index 0000000..15a32b8 --- /dev/null +++ b/src/static/icons/icons_scan_close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/light_count.svg b/src/static/icons/light_count.svg new file mode 100644 index 0000000..0e4b9ab --- /dev/null +++ b/src/static/icons/light_count.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/plus.svg b/src/static/icons/plus.svg new file mode 100644 index 0000000..d8c2ef6 --- /dev/null +++ b/src/static/icons/plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/question-circle.svg b/src/static/icons/question-circle.svg new file mode 100644 index 0000000..1829a60 --- /dev/null +++ b/src/static/icons/question-circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/search.svg b/src/static/icons/search.svg new file mode 100644 index 0000000..0de882b --- /dev/null +++ b/src/static/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons/warning.svg b/src/static/icons/warning.svg new file mode 100644 index 0000000..a517020 --- /dev/null +++ b/src/static/icons/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons_ui/default_blank.png b/src/static/icons_ui/default_blank.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f0fdaad1ab72fa34d558d7da3069352e7fea32 GIT binary patch literal 34952 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 CC;>G9 literal 0 HcmV?d00001 diff --git a/src/static/icons_ui/default_data.png b/src/static/icons_ui/default_data.png new file mode 100644 index 0000000000000000000000000000000000000000..939913ab43c772b87400d7303ba5709d48da01fa GIT binary patch literal 15053 zcmb_@Ra{$7v^DM)+`YJ4ae`ZLCeB z;4lgP`@qBHd?SUOgm>3gl!2@JNqG!AK(dimlZJz9Ou~FNM}~tFwNRFm*7bou3-nL_ zH0*1$v9@s)q=FWjEQg7Qu*W0&!*vflXq)!U_zKTrM%v#ZhD^kaQfw6Mtu^>8{^z*V z_h60z1Ik@92Qcj|z@LK-X(eq#ZqV6cSSV3J{9UMdL_`BH3369V^Sx@!>$(_nO4L}3@AZ6Put~ic52+re;uHgr)Rm6jxQ<;^eA|=mQ9aiPt*yFv zcZnG(yuZS5iZ%3T5Fq}==o{1DAUJZgO|knc6j3ozX96sg;woMT*({4e04BcA;-N^9 znop6~=`6)HU-lC+>{&nEn$UE9N?y33?Xw9mpCZ-!%aV?gY{qWTqmY><4{3ar;y8JX zlkkoMY3WrmW1FjkB({TTua(`c>hNM9(<+9!4w{)9UlyHk5J*n-v+rSA!EhG z#k;Jq;SpnF9GU$-nq#oSQ5;BSz*%n>NjY*(*2-i_w+KG0ZExCuwE_NogPM4HPQs50 zP~`qYc3PnKM^0d)cgdU{moKLbx(4g$M-LtxrNrI`>!i#|Fd*}N44fTHQ*=;D;bN61 z(mC&LQ+7fb*2qr8Vv!bgtPkQ!q^ZFUEv1NG%Q8S+qoN-47?eEfXe*9|VhN9Dj~|I5 zEt|CQ0TpsID&Txk+rIg@`cBGaK+w8 z|7~>wI~&H%CjGG2Ke<2_|1PF;D`g7sB<8$-Y=~mXYLSQ@@wL*%r|WC~$D#^HwBnE@ z4?HbWlXpHNk^LW6vjCw#+UC?S2Vz(}@cZK@y_j%e{VldY7*AEaT_d5#$dDVeo!IK& zA;n@yq?UMWI2H*EjPsTV>o@yEoV9F8MY?af)f@OvsiX{Z)i`=r_@8R7#2n78Dh7H< z!Us`YKND*>J1RnY_v=mni!+k=Dr5pBqMiLr)ALL5LrH-mXRQ&Ht#=so89}4}ZnxZL zB>a(zt9~G9zY8gwBTiVFoo%29Zf-5zOAR}WmHzYyJwDF6+X{XwFyj!;0#?DH;&jhr zI~CiY|DH_U+h#8I)!UqmcuvT`n-hQe)Iem@zIZVnw?8! z;YSm>@?$KgQQP16Erd{Xa466VXQ~L=DQqs3h=f**dz<_UvVIi2Zc|MWh!_6+dr{1I z`BY)`yUOg87i=UOJz=~TW(Wpwl;Za%ICz6;bm}oIUefZxCvNoE6e?spB8f-e4z3~GxSCI$y|pn$p?vSPQP+`_b`!u zK=LY+6u7&hf&FnRROmE58^fJAxIrc4XT zM7icf#dN#giH8U#`vO0l{S2`6-N4LP>)OT#psG|x4i;DOGN6fF5XX)*(d=HkAj75;}d|MHgd%A;@kIG>5)%G)&# z{-)U%zXDG%Mj7s>JmdB!@^m!`=iOz9VX#5)3Ksq`s{*~iB4-nH(-*ioj7u$k-(WVy zngu){HD8TZ8@@fG$`tWcLSme^@}~iLU-0!6LPHzc3CSl6fp4huUFe29<#`7rrYfYjbi=i?%RPs{!)+WON=RoHkfq>wuUD*g?;%6fzVi>xevw=$T(JxM~Dhits zI$=U(&>)8^ON$M}e5gEjv^Ea*_GQS$^bvM6Ekyapz8{``+pVQ)%3-cF?Vn37$sFKD zlE>`U{7W5oK&H@Qm&v*{f7u*X=J!oUo0mB$OEveegte5!LW}oH3ZIqEkcVPWr`wAD zd#>NZYBY1Vb3Y3iwRIy7jU;7z4{l3x&>;Jgj5QfD<2DX0E}j)+AG}##=4ku7R%|Hg|~T zoZvbwAnjV4lWMtk$kGQ{NPu%ein??YJPAtt>wF0k_6v?kOeHQMq>Qfh09r2Vl&2MRGI*u6!mh{f=~_{ z&Jy7!iWg#f(9>^u%jWQyT|F?SD`iqka);RzT3a@;OF+Og!6%m}Vz(Z%k6Mkl{c$7K z=<3h;LATsX+|IHscvHelJh3x)OO>lGL07pgk) zR$iQP9?isj{1J6GSy@@aCKp|Z`o^9aPgDFeLr4s`bgPO3b%C=uMm2#`OkX%%aiKCr zbB3G#Rw!uil1HiiIUe$<{f_=zUtb>@QBa7{`1}ryG21hPN`@FSoiTg|Z)`i=9w5kn z?O3w`ch~(P6fednG>0@@6bE$))?a^^1kMYhAKY<|1P9{0na z@fG;p&zIFShGRc`K;eDh4dsP2Yw`Mn*E0O@m)he#b3Z zOx1pRGMjp*gb7GA&P8iUemQ8biPQ~ilFWkn#+nCTwmABkr5+>x1HGUJZ(PCO+dnJr z6a&4hmGv$f<jp6+aC%Rkh71o)qK9@asyzoVs~S_cYs)_rG7QNohA{~eBq zEA{+W(PuyKX>ALVm6Idd?RRrBGlakZdTMY=k1xdJHpo|u;B+k?tSG3wHV9}U)@HI^ z_-mI1ueN=w%XWkQy7|~F_0$Z|f)9Fx=9`EJ3V974?d{bYY2^2II3506k5Z6RZz6b_}u6PMp-)j{+VzQ$0uU_pIDpHI1 zzCJ&^Vb;=pF&|}`r~kXGo2YOJmGJ*M$nzx6jZY>K_;_t2>RZs@@C|fu+p_!YM>ifG zqOxpUcMG4F)0%_~FH?)SiXH}=bcPVy@2>0WJi5{d^BQ$9z(O%^Ve55Bm`*qrG#{g0%ub_ zqj6&md1x=bzYpBTVQ7Rdcg)#h+tEd}GSoz-e=#tIhT7?STZ#wmXW_X{EtPP6>iAsK z+Um(!7Ayq|Yvg{vLs3&#K2m-8HR$;B?D}fb^!2jub&B?n)$MKYW&5n9+=lK+@zDMK)2vE&eZW5ZZV|@Ma`cfY#fZXoi?iac z(0-4Li@@!x5xt6<$SKOJrmFO@y{E0WAf%|J)&0rL`Vw|Xsrh@?g6seRK0a;ss3^Hn zn&f3wTkU98__gAN!{N`H5*z!{M^ z6hSPr2H#@$x`T>K9q`MZ(&j#k1cA3-xjfVSw(JDA0Yi-TY14l?W73mKJMQ~1z0Al} zTiA6Qu{-MG=f2ZlAKX7M1FzB7#60-2Uuyl4wGc z!GgPgXM&YcEr{OXEdvnacmvJR{$F;soc!wVg&qaK^t#22ud*>mebCkAmBAUKHe2*M zru}2){OB0^-mJ}%4mT-hh|p>A{MlqLhXxT4hRlGM6WQ-LwYc?i z?oA<2L@)Pr)J~N={jnSND@Zhm=EGqCG~L0gdkPmvM@J&PDEd{!dNU5?24ZbVVvl>^ zlm92^X0M|Go2Tp5?O9rpikZ3BQ;enE}r9`if5aHGvqvYLt(ca6O=lJMQkBs!*@9Fce6sgX{{b86yT zz;-0bQXE^z#%*JVv`%VvyfBz*(ne0%D=(f|2Hlo7O%dJ9C?*Q|9o~Q}u7n49tru;c zI__EE<1tg?k3lvN#_;gGJcV^{yimCs4C-kNrt!?YdcW&?ddQR$-my4F*wZ2)iKis~ z21LVk-g-5WWt`7(ba)!!vD6TuqjSl{imz99)5~ox!773Ry|bUU^|dlClIH= zPapH)zJo1OVOHyFKlXn7d`v(@i_g0jZM)JJNYP&<-#?+NKv!iCAmL;y4wU}d+Op1C zG#B@N!vp$*%6mP9@G2(LH0UO|a=WuGW)RL-n*%?B(wxVp8NIETD<+`bvC~Ft+GGW~ zbl6e{l32|&Mw8fL zToW#t4M&jfyHGsp$EEftUfC-x`+xwEvE3z_xBJoD!%Lp((is2q!g?jAQIRjy0?!-# z5_u5G$mqbqjw|vNNyq4T{;w!iUx5fdrswBDVi_to&^bVDZ7rwN<6M%Y_t9)&74Pc@ zu_7%SF(vTqH4b(kMbwOJi)$ha0oZbU6+OZ!)*E53F}pRXG+|hP<8wjiC(Jb^MMivB z)KcrYU91oC^k{3B`oyN7OJpuK!L9_f{B_Y~B6WFP(QA<*K(y!2JiRmPd`KS#L;S*a3j#Dk#)HI@-^ z&p|(uHhEPbnhu<3K1mxuH2;09>(oclyw?G>Wz)Ac2?+_o``y9>WREO-D!mXCXR7%r z1V3r&_J0lgm;FUfpZj@pr2JnW4vp$+t5uom`+^9RN{^YP9>yDEy|-R`o_^-(U3t0) znooZH{#20gqinDLTv|4Tte$dscJ#Ek(vT@}5;v}QG)jmsKJIGcBIqvR@$r%3)68ki zr{I?pebc}jQw2puOI*h_p#$ByFH81tb`11SddELAP5kzImE;`XEp}t^DbKbgj(M$a zn&AfT1U*<(Ry=RM@BNn$*YS!!^lzk6r<^`kZijekef{sV`%K`oRCHA0+py{Lux~%h zkHEVPHJZ@}nz6IBI~8U}iRIKDRH?NBgV_w?d+eRmg3{*(gF9|(BRos5#yv+A?+s59 zCjfBNk$R)Ubr+SVjmyEo!3cfV;m=w7mSj1kZ*pw(k@{xL&ngd?&h$?LZE z-5AUnn}@ffPGs;hGGRVy_}tGk0Kj6ml>iDDx}&v^*!7gU;lJ!-@MV>0Z#wfOudR2~ zb)3N>_Q7BqN0uN$=;Pt@-)JdE!$u2vzsawhyB4tpq_KEF#z5NCJP>0XqICB8kF(u@ zF0=T=%WJQ{v+pRI6=-2|;M{ZBco{Md&iVH~;dpk)GD$*+jsw-`0v4>xN_L0%rl;SF zB{ol~mVWI_bhi)id(2a$3B0bUpx2Cyle71)kcs^6@kqrCjlQPbH>vJQ<{ZqaWyy^m z6u?2S`wGh{`I8O8)}CnYu!wOqp2n=NK%c^1G-pet#3&*u`HF6mhnPK^-Li=r^f&xq zb#+yZKJ9_(nd#Ct>UJLEtDTp4J<5j(Ewr0Kg1*i4;YE{!`S1CX_#4b?xoN>V-M6o1GC03#a0^dw=nXh;(8| zE$`G*rJdR_lS_m?p(*Vo0g0Cf&6`iV)JhtGF(`P71kX#wKTgM}*1I*0^zTezP+y3% z3QfSdtQDc{SaM_s$&ShvXTzv%{U*mOJzj*rXg-;VI%#=fanTr=FLsn3&_wqM9l`GQ zQ#+a5oYG#XU4a6u(HgxQmSF{Hq#fT@LKMhb(xSui>;A!Xu8sx#za=9V0N~3%@)I3T&zor2f?zZH@fILp!wa)qgrv)nd;Zh9Vi@4d zLr$bCmU_BxtFM&O|Y9>2dC#S{@xL=DzvuoY$)5*Xo03fgBk^_8AN z_?a)Y<@Rr9cnQqci2|PeqB0*Qyevad^4_D_!?py_`_R`-Snmfn;O+ z>B`&N+d>$s#EqLox)MsjM0gP8YLDS?6|gDr>?ny$z70);LxzU1W1F66vb5fFQtaAw zJe_2|U2D80asIj6^mh^TOZY&@7`cVe$H}rTIQuzLt04#H8)MGigN#6e^xD4=NtC;39iW2 zNt@RwNCW6ve$OzYv>qnk8HUeD5Cj?c+sltnq8gxMNoYYRp#FkCErPy0bCvF>SU?BI z)B2elSXl;LsIzk>WWUc$-X;57UiPQ=sjT?fGknNL=G#|d;7H(0Om0et$JBWQuhS!` zNKp1~iB;SUGQcsBMCBM71|_Q7AO+KSdwA#yj!#j9{@Lp5^K}I8t&KI!Y%|+YPnU!i zFp}Gm$_fF%U@AN64h4@l&zl>a)4K2HyJcl%%BG(WQ;(#jCnhZX4*N*H5Ets=NZ`69 z{P;}t^$7u6p70hdGf_Kaq$yTv%>cCkO3Tj88~ir;cSJ_6psvojMOkZ3JXDJ(t?o5l zpF-+rRnWP3wUMQ0xQcoCDM2-wsa)@S%bpQLiBBC9K)k>#`ydKUOPf1}A-rD;0@4?y zQ?uZtP_r1@&EaPLjv&x7HiZx+0cJeR0G6YPf~NP^P^stZ^-h;k7?qSPHqC;a<6B9$ zNTW}pKcRPe>8Gu%Z|pwJtY7!Z*TlM^CZs9E6Q6e@w+_GTZoYnpY1uyt?`txrnjb+X zTlPibCRAATb2UNuZbrd))}GETUX%jqfnuPutp|ju{B^$KMLF9_RPZ4pXS3lld9GqR zYyEi0szY&WAMD|~&~k`+Hd$^jSjCYT8zR^HmEA)G6f&}%n3S-nW1~FCRk+Bj>I*3R z)_)_Mf-!c0RLAVxbzBDE#myo>@IB1)Ub0+or$#qO8k)ONkVerlv$tovJziMAWgsK~{Fq_NmG0FxSX1%KRxty4enr^{vL#|E!hyH05D$1R90X z#)Bu-8GXgS zbwj)Dh3!pF@2Z|?x%#w@tSW`fT5A@3^gbkCR$7&IEl+Oh;$8>nUCGsxJn{>g6bg9g zyiT;F5+mrKak}FzG(Mg)06>Dv{r42P3Zs9HU9-pL)0acPwRHRoe8#4&GqtRGd~bom zk_+5~kq_*Ee@tU;53a`| zWaV~z1^L#c#av%RI_UXs{{p8l#_DsmxEopksq7=_7PeE{5~r?!jFwJLP9&ARV#H@d zy3FF=y}XI<`bJ*NBOXSu->?6zWI=ofKr2&zzjKL9kE0txbRA#TJ7!(DWt6Pb$^|fg z6!mO~U1IuZCF8`qOy5irWUD`RQqR+e%LT!k&`SrBnoU39pTuiU0HX{zXd>jf z*s+{1=L;4QbK`v<*uT)mK=+nZ)zuag)j$FO*8+wF`oBu#!P#aV8cqy5U6pOOw=;%@ zM$wMG6|IP@!6p)OC!tf(8m@1|tE*CGIS)=+NJ~Ru0?yLEy??tjt5(a&-?tQ11+kG4 z5|@{wnc%gNI7{&eYUlQSGphY99{#D52RqWy5!g0jIe}Pz-Po9)e~lcnyO(XkXr42` zFXUsu^)+C;vpK>5Vvwk2Gj+zytFcExs0`lz@l~w77!-FS|Rur3d3_ ze4Hm*giPR7-e zZ)yqOh_lB{6$tH}WSZ@cnx2B<_S`r5nH^$0!^JOOtbl}r3=B>JV0eQezLMDF+muD% zvw1>&=^#zy-0G5-^>BthWNs}VL^u{bt}l9eFaLV#@*fPmZpHw+wm*03 z3kTZas~>#iq7U@hv6Gdc!&o*Kj;aLGVUXY+J5xGwhTN{(x@hfjCCf*b*K*E|J=n*z4}yea1-{=3xI%vj!zz9Q z;P#d1sW%fQ`eqat9?n$$gBU~#-a3|r@ebEUb5BInn#rz{lxTdiPe$G*t`-)`4g)6G zVW%n2n4Wc#f2b1|e|kii(H8OrSB{voVUAjuwGJ1T(7BA6vzsypoJBXjl1)^bRamg; z2;w@;DpeMU?@P#s{9J7mFmpi=!o#vO1kwxoP!DTH38Z`kQom|4%_=+tPft$?s+Vhg z*SAicW_i0BH`VFiBOi`&bqIDiUr3HJvWZ&uS5vxRaiG@t`q6W3d&|_4tRz6 z7dOsZe4A&_|j&t{%=gzZ4l)f;WBWgW+vr}rQL{E@vyBzg0pS34}Uj0y7iz;HZ zu+>H2op!ld6*WnHT_-y~8=Ks;PZj*A*Nt^IhxQP+2OP4vpCvNoK8iEf6PKrJ7)zz- zYtGkyRgiGORFY3vPCxwOk1hq0Nb(?S4fq)jX+b4ItS9NP7IzElA!PX0AH=1ZGNmaiM|dldW~4GnXN1XNp~{^RE~2D3CI+EWaK~ zxaPnu=us>Gn2a@86<)8<$$7!%n&R&pbf5PDYNflu;)a>w2o5;8`cY}OZ)Z!c>oj?7 z#3E6NBg?>^EP<4$e$sX+u%Gm46>-!18`u9tda%bpjm&cb`C(%5%@7kiwkA^7I z*4v(4FKrGmP8zHOxLNckaP=gOsnL@|ZJk`Ce76T87kO%g9!pXdg^CD)qGH5urEKBH zTNP`oqIMXn7e3d1B}@O@R;A=f=@CRCqI1JhMKnrO02DhpSHM0AD_W(#v~jQrSQ=#< z?UEz&I&mOvTdD1)Nt0g~w`msaGiSSyq=7xTFbkHR5E#3zIMy5??;K!yUp3|Dx8P3( zIZ=2_aT~u!5V^cu)Ds}nVJ1Mc?AT>V=3j-!wmTc81JMy3R zkvUTnd_=;o*O!Z@X*u40ftl<WmM04w9f(mRN)n z_7b+wC*+v5(uT#e&ZTR@1zpxeYm#Z%PP>1u(11!+&)x{|7FuB zW9!k!AZtB?J(IQ9VqaUuHxsk9?v(1wDjE@4K+3U{F>z1LVprA9&TyPQ4l};%o_?`Z zPn;Bfq$B-xZ*9-ZuMBp5YUp65Z%uo&8QKM@Qgz8K?z6>U6n5Vj(Pg9M=!br2o{3jD zjg*GmwolWKtR2G-C#+S@kergrL}blz#c8D*lO!Ge?=7^L@lq%cSGs1)f^`5kRZ{I%bz5ldUZA`zy(jxLB5Cg z9T|hD#Zo%rr9)QQX{yP2&Qv=0=6t!}Y;u}DsokI@S*t$8FPtYmV>2eIQz}E22q&z+EcJ(U@mkvqRKXz@9o z1;wWaVjFaIQjJY4lj?@1V~q9B#-0FDNf}wDcj|T_pHKZ)9eF_E1a&gnM3&Q|yK)@bG? z*MuE+Vg8EfgDi1O#WZE9iQ;{RuvEm-q%5o{aoT^PCP$yup)tQhL%2?O*2c7p;wu;I zelVp*LJ-THiV~w;8{OJN?Z>z;ah4~Os{v&jRthxUkTUk)@RYK3a-u5x0xSWia&nkj z`ISD~Z;lI8Jd{0f`qb}-mmfr%L|wAQ8m0|u4MHKup6sYP-4kM#&-QuRlZJQI2iaW3 zUr~L1WzoocO%&bwuw73)xi8w8;u^cJc{~cPvVj?$!Z7w}eqq7GYdS}epa?5njaF3h z`LC>KXrd6X(0DHQv&JaX{e>-8?)h=mfTjUvK@?r^>2`&))hD+Ob9V~jcJf3uubVuK z#k^^n(3&U$0s`z^28J_eLxtr>nWugQ%akz>Mq-MpxM78##@+WuP#v9i&E7C^ax+ht z&oOeg%YHLgZ^t4FfxKYw=uCq7V-?wP}_C>gxLXau*x?)1}&6 zLjE7|=tB|3ib>joA?T%brGgfm4@9UL|-UMht>kb+r)U5#vE!9>PhuJwK zd_6)5Y6nS=MiVylZbsQh*m0Y44LTF`lhtLaYO)`h=?59rlalVVxw?=ET-M4JU@oinXSgF(;{Jnx4@HSDqHJxu$4^d!WZb> zGx=>8XE~m@l*HW**7&{+#lFQygWWH2HwGF?>0}jy=~?AyW$5rU#9k4`AIuE=pG-~K zgI)lvx#aaV71!~X@ppuhUxFJn^q7 zyekD-^8)kPm1Y|Up2Va=KH1!)g%ki_x0!tWI{l%6=KhX0{}cR4PbG&iVHVKk z^W{C8Lca{Hfyhx$#EE(owzqE&-b1kpeZKOW-?z(bt|YA8u@r{2)U>qsejbLVUdw*- zGUT=_y96=23n+5*g2~;HR56n9Zohi`7OUPCy@rWMZhT#_yRw)DY*S zhn42b!?Kl-olaN2c7EmM(afTs6&ua*=5<}V2SE2yYhzY#$v~p#h*YUH3qfQSU+GMV5309ijVuZ)kcN}Q7 zFg~Qdu#m8PnZzbQOfs1?~V_vE0b^hj(~)FDd6+t^#|Re zY4zJ9jkn*N04z%cL^fIEIZHknoAPjGebFMEO=xX#DuWOIk6t~)?*s9Gr zOi*{IzfRD2H&3aNr2gQ-pypuPaN$JJVbA%9*WzH~#;NC6y0?csYWfJMR8c?K8%6)K z{6u)6m^+MOU$Ds!{AzF{yK94}8U|E}Jlto_Bymb^4FkA7dA{qz7 zASC9~C#q*+Qp1#!i)iV+2=fopr9z!4%WZ9K-J7ZFmD?3T=oJyIG~IWb!9SjAZTI!l zh0oNPqVbOhnlfOCGKi5eKa&gQv~l(sNf77cDy?JWNtfc+tE7l zE2mD^H|_KL9nqh(5wFM`CH15B4oO9dk_i)1uDc2EttB7!2HWcrj)3HtLomT{RGXVfy45nmX1)xGvd;4;K zKHB+JT?C0~z??5k)g#`uVF(zNoKn3m4bi-@e0qyZRrCbAVdxfX-m58kSsc{i_MKT zSZOq(!i{!gqXX;pA^*)cn74iFY4eU6CQPf>%aKYS?eJJ!Ts$+y@@-BB5XBoHk6E&F ziCHxM3euvhfT`ZyX(BT~Olv^;-0IRoyh1e%jSHCY;)TrsxCAR;-fRoq{ecOFUb*m& zfB#pIHoi1SZZn>W}u-qouAk2X=77Zqqio$8t%S6Nvp`Kb+4VcZNMn{4O)w6(ig zqFhD&;t{44XfI;kq!KTKxZq*ODHYRT*T1E}lxnPBEZNsbhdIJ_aQ&0EM+p`*rSXl0 zib9`DQm`a%e_8ssG>9Exyzx_SMw;OT2NsF{!HaK#$$Aly5=Pq@kgHw*>rAt@&g{&T z6%Xxt_PD@Lrvsa)hV#(^-S>~neUj`w?4=ZjXepnPcx>swxOCVcq}418WiQelDk66z zdae>r8MR9`vIEFLAz`6BC_s%>WVZY#wxBwZM}#W z*cpNj_QETF3nPQ0>hXcx!JPz?aMdI8b1(e$I(Ei7BGxMy|IyZ9@PchL=8RY1I3-t< z>mC}l_tb5p141k zeLk3P_|6D3p6pSE5dtSR=T#IwqVshiPBk6x8T@%tA>4rZi)N9d(R6crMXQf^hBi z$p4`6Q*cVxtf}%ZBg|P=g#o!l6i8szh-53HWa70aX~;Ay70h8nLIm(zLSotKJHS|f zhG_zEo1&NelBr~catfreivYb$Y;e!eJC;&g+Md;nC~7e!F_yNSbVsa5{+y`cEgV}S z4ZC{qsynS(TwQ;(m+P~qCCbUWv8Z@Po5~Sgi%oO3MZM=F?z}n|?Wd3SFQv zeYIW%`O<50A>H)mENY-aSSY;zh*$X}I?RY@FnOSMo3h3wEZ=L3k+Vqd2gK{KUEy7y;ORacDwSS?LIJGUl@%-mFVRbgs z9h_eRV#%5HbRVi7crRf-9*4%}5C`+x8|h)cu`1GBxE(b|mb;cqp85}6t_l#SkQ^mzN9V+lwUX)z9pKME z+v)ez^n`z204Q`F zZ|$y*a{d^BEZ|PW5xOO>V1vcKlznONQ)POm%18kKnA$GLi<UwXA)d`iJE(XeJBTH+?cGE)Op;}` z;YKu)fv@RyR^F#g7n|#JruEVkZEPZ2ZvH^xLoFbSBwGb`$!BZ&z4kX~oTwtt1Bc9w z*NH%r&bT{FMoRT)Uk@2xCF#-AutIO$SU$IlWTmX&ygeN~k!clD(cjN|e-=udH%rHX zm8@`Xo(OqW_oUH?y|JV0kle^bocEp0doB^BS4ZH68luPKCS=d0@n7qX1sqdm?98bE zv?+LX%udz*PMW>f8&*n+M(BzX>6glIgK+;1I1oru<5RN`{E4tJv?3w1jO}<=$QHBo z4}+-E+gukmmTY29uXlg*dBd=AKjB$mOrH@_?$vBjX9%9xeC7a57T!!PdW&%Wa>GHJ z6xi>VX!4L3kECSDJQiMNh8fL;Eh5V#tJ+&)Hrp#Xut@2k`?2We4MhUzm0ZA}t;T z>L@p9A(8?oCZY|od)P54>lFGcJ0fSUDioj#+G3XZbR#823V7spCwTOS!Hf{4*uRgU z9Q}q$oqV*>rQb zn3SCRcooYjNY3Gt(qPg4(Qr#1Ep7llFz4~Jh{|9Fk5q{-6931S6L(U@JKCOCMel1m z+Q4nlT_|>BTf(2^L5$u+YL>5xW0P%W)w2J897@dpitRRh2}mGA-hjP*3a2cuE>|aG G7WO~eFwtTF literal 0 HcmV?d00001 diff --git a/src/static/icons_ui/default_notpassed.png b/src/static/icons_ui/default_notpassed.png new file mode 100644 index 0000000000000000000000000000000000000000..b78385be19bacf356cdbb8782e3e01b5a040ec1a GIT binary patch literal 12915 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 B4E6v3 literal 0 HcmV?d00001 diff --git a/src/static/icons_ui/icon_add.svg b/src/static/icons_ui/icon_add.svg new file mode 100644 index 0000000..5edc037 --- /dev/null +++ b/src/static/icons_ui/icon_add.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_apply_num.svg b/src/static/icons_ui/icon_apply_num.svg new file mode 100644 index 0000000..9c098c4 --- /dev/null +++ b/src/static/icons_ui/icon_apply_num.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_asn.svg b/src/static/icons_ui/icon_asn.svg new file mode 100644 index 0000000..e1ab37d --- /dev/null +++ b/src/static/icons_ui/icon_asn.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_avn.svg b/src/static/icons_ui/icon_avn.svg new file mode 100644 index 0000000..d2694bc --- /dev/null +++ b/src/static/icons_ui/icon_avn.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_buy_num.svg b/src/static/icons_ui/icon_buy_num.svg new file mode 100644 index 0000000..9a6f363 --- /dev/null +++ b/src/static/icons_ui/icon_buy_num.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_camera_black.svg b/src/static/icons_ui/icon_camera_black.svg new file mode 100644 index 0000000..94c440c --- /dev/null +++ b/src/static/icons_ui/icon_camera_black.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/static/icons_ui/icon_camera_white.svg b/src/static/icons_ui/icon_camera_white.svg new file mode 100644 index 0000000..8bdb5dc --- /dev/null +++ b/src/static/icons_ui/icon_camera_white.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/static/icons_ui/icon_close.svg b/src/static/icons_ui/icon_close.svg new file mode 100644 index 0000000..7c0e9dd --- /dev/null +++ b/src/static/icons_ui/icon_close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons_ui/icon_customer.svg b/src/static/icons_ui/icon_customer.svg new file mode 100644 index 0000000..ced7ba7 --- /dev/null +++ b/src/static/icons_ui/icon_customer.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_date.svg b/src/static/icons_ui/icon_date.svg new file mode 100644 index 0000000..de352cd --- /dev/null +++ b/src/static/icons_ui/icon_date.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_down.svg b/src/static/icons_ui/icon_down.svg new file mode 100644 index 0000000..95a4c41 --- /dev/null +++ b/src/static/icons_ui/icon_down.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons_ui/icon_erp.svg b/src/static/icons_ui/icon_erp.svg new file mode 100644 index 0000000..385359d --- /dev/null +++ b/src/static/icons_ui/icon_erp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_form.svg b/src/static/icons_ui/icon_form.svg new file mode 100644 index 0000000..d6fc9f2 --- /dev/null +++ b/src/static/icons_ui/icon_form.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_kw.svg b/src/static/icons_ui/icon_kw.svg new file mode 100644 index 0000000..54f3ffc --- /dev/null +++ b/src/static/icons_ui/icon_kw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/static/icons_ui/icon_kw_blue.svg b/src/static/icons_ui/icon_kw_blue.svg new file mode 100644 index 0000000..23f200d --- /dev/null +++ b/src/static/icons_ui/icon_kw_blue.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_kw_use.svg b/src/static/icons_ui/icon_kw_use.svg new file mode 100644 index 0000000..f0f037a --- /dev/null +++ b/src/static/icons_ui/icon_kw_use.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/static/icons_ui/icon_login_password.svg b/src/static/icons_ui/icon_login_password.svg new file mode 100644 index 0000000..4ece043 --- /dev/null +++ b/src/static/icons_ui/icon_login_password.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_login_user.svg b/src/static/icons_ui/icon_login_user.svg new file mode 100644 index 0000000..a628595 --- /dev/null +++ b/src/static/icons_ui/icon_login_user.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_notpass.svg b/src/static/icons_ui/icon_notpass.svg new file mode 100644 index 0000000..9c4ea07 --- /dev/null +++ b/src/static/icons_ui/icon_notpass.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_num.svg b/src/static/icons_ui/icon_num.svg new file mode 100644 index 0000000..75ba510 --- /dev/null +++ b/src/static/icons_ui/icon_num.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_passed.svg b/src/static/icons_ui/icon_passed.svg new file mode 100644 index 0000000..5a06471 --- /dev/null +++ b/src/static/icons_ui/icon_passed.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_pc.svg b/src/static/icons_ui/icon_pc.svg new file mode 100644 index 0000000..95698a0 --- /dev/null +++ b/src/static/icons_ui/icon_pc.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/static/icons_ui/icon_ponumber.svg b/src/static/icons_ui/icon_ponumber.svg new file mode 100644 index 0000000..3f1e82d --- /dev/null +++ b/src/static/icons_ui/icon_ponumber.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_prod_line.svg b/src/static/icons_ui/icon_prod_line.svg new file mode 100644 index 0000000..eabccd5 --- /dev/null +++ b/src/static/icons_ui/icon_prod_line.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_qiju_end.svg b/src/static/icons_ui/icon_qiju_end.svg new file mode 100644 index 0000000..b1780e4 --- /dev/null +++ b/src/static/icons_ui/icon_qiju_end.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_qiju_num.svg b/src/static/icons_ui/icon_qiju_num.svg new file mode 100644 index 0000000..3879b8e --- /dev/null +++ b/src/static/icons_ui/icon_qiju_num.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_qiju_start.svg b/src/static/icons_ui/icon_qiju_start.svg new file mode 100644 index 0000000..d2b3dc4 --- /dev/null +++ b/src/static/icons_ui/icon_qiju_start.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_return_num.svg b/src/static/icons_ui/icon_return_num.svg new file mode 100644 index 0000000..5677a55 --- /dev/null +++ b/src/static/icons_ui/icon_return_num.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_scan_white.svg b/src/static/icons_ui/icon_scan_white.svg new file mode 100644 index 0000000..a661468 --- /dev/null +++ b/src/static/icons_ui/icon_scan_white.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_send_request.svg b/src/static/icons_ui/icon_send_request.svg new file mode 100644 index 0000000..f352b54 --- /dev/null +++ b/src/static/icons_ui/icon_send_request.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_senditem.svg b/src/static/icons_ui/icon_senditem.svg new file mode 100644 index 0000000..2f8404b --- /dev/null +++ b/src/static/icons_ui/icon_senditem.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_supplier.svg b/src/static/icons_ui/icon_supplier.svg new file mode 100644 index 0000000..f0991f8 --- /dev/null +++ b/src/static/icons_ui/icon_supplier.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/static/icons_ui/icon_take_photo.svg b/src/static/icons_ui/icon_take_photo.svg new file mode 100644 index 0000000..e6421d3 --- /dev/null +++ b/src/static/icons_ui/icon_take_photo.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/static/icons_ui/icon_tasknum.svg b/src/static/icons_ui/icon_tasknum.svg new file mode 100644 index 0000000..247dbf2 --- /dev/null +++ b/src/static/icons_ui/icon_tasknum.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_tenant.svg b/src/static/icons_ui/icon_tenant.svg new file mode 100644 index 0000000..7707804 --- /dev/null +++ b/src/static/icons_ui/icon_tenant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/icons_ui/icon_time.svg b/src/static/icons_ui/icon_time.svg new file mode 100644 index 0000000..a706317 --- /dev/null +++ b/src/static/icons_ui/icon_time.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_tm.svg b/src/static/icons_ui/icon_tm.svg new file mode 100644 index 0000000..669bfcb --- /dev/null +++ b/src/static/icons_ui/icon_tm.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/static/icons_ui/icon_xm.svg b/src/static/icons_ui/icon_xm.svg new file mode 100644 index 0000000..80425fc --- /dev/null +++ b/src/static/icons_ui/icon_xm.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icon_xm_blue.svg b/src/static/icons_ui/icon_xm_blue.svg new file mode 100644 index 0000000..468012f --- /dev/null +++ b/src/static/icons_ui/icon_xm_blue.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/icons_common_recceipt.svg b/src/static/icons_ui/icons_common_recceipt.svg new file mode 100644 index 0000000..78ee356 --- /dev/null +++ b/src/static/icons_ui/icons_common_recceipt.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/static/icons_ui/icons_common_sjadd.svg b/src/static/icons_ui/icons_common_sjadd.svg new file mode 100644 index 0000000..2f67b51 --- /dev/null +++ b/src/static/icons_ui/icons_common_sjadd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/static/icons_ui/label_scx.svg b/src/static/icons_ui/label_scx.svg new file mode 100644 index 0000000..31d0882 --- /dev/null +++ b/src/static/icons_ui/label_scx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/icons_ui/login_bg.png b/src/static/icons_ui/login_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a062de190ef3ebb8cff98eb5b0812ac7e0adb13e GIT binary patch literal 102876 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%0Ajk%6E*`Jy;z?GjKe0s?Yi8!n?A@5)d!bvAP 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 literal 0 HcmV?d00001 diff --git a/src/static/images/message.svg b/src/static/images/message.svg new file mode 100644 index 0000000..28380e5 --- /dev/null +++ b/src/static/images/message.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/static/images/profile.jpg b/src/static/images/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3a940b21cc9dcea01e62d94e243eebcf76d96bc GIT binary patch literal 81131 zcmV)4K+3;~P)_)70R420Yh<@7k#O9&B5O>zQyJ8nI*K$y zVVZzuK+7`#Idt8GshO}W-Wv-(?~muewH@dt*U2o8$In#9=I8OHmut@J;`zpDhAidx zP+tWQr$Cw&DEI^9>RuL_{5vaBWCcGT zIO>NmGepankfsEU^(BRn`8g<@u8?L9rv217sH%pFrm|_+rm1*!gqH$gi&$BdVzWw2}mj%lLVs-symQF9&C zeH)Hrmqx*JSJ%bkRffW2BuRqNB*1VIVDGSx-XKI6C&;y&+w|mEJbTAB;Mzb|7|;wI zag<>m7T`|Kix_&Lqu>VB)TZLS-hb5j->Yy&VX6Gd(y%hWMtlcIpG8L%BooJQUE(DZ%OJO{pK!LdxxP^AW@#fBNjd!5{sz-$EQ~I6fX>QcR%D3z((_&(`64 zhU_Tb2O34Y-G*)3%J5AGQI=yko?t$iBaUMfx{f5z5T)u`<1E9t$S^hy%yk!`=0N*v z-}hMIyPkN&d6MJK{t$b;fd1#iC{7|oxj^dX@y2musP}o6hFZ;l=iBgH9j2+vXCzsU zD9*(&X7dbDn99wS#V(@?Z?y6>Gzh?<2Uu9JB;$=vkt7+?M2@Z^mZla(A{jF9eOzE3 zw^nzt)~Tc6yJ*%dc%BR0G{68O20?cR<@qba<1vQgnHa{w(J>DC0cN~=I=!>1QyB(it$2=EmPl0Pu~QmH%A0QhS_Z=~;nDz2 z9ggck^KzVj^kID04}TmFteu5s<`~Up_|9|B;#;5n9HL%~JP9zJr^w?3QJ%ojO%*X* zT_P);Vzb$VU#qEz?%ERJ#?u*wgR$(IRIWuw#OTL;V`!MAIR=J_sqG@wEQGvsf8(QX zFMPKqhQUR>wKu@M{b^|wr^Znk126v6P)4bm8SQ$LW z#@b2^okk5!-;qs4!{9L)g1K;-pat#V{(!%MD&S1a5xYHsSfML<}*Inv0ri$%G!y_#HuNra%A7>y>FP6Kg%Nt((2iL)HJt|MlIC{oN}VC*(9HEqO&j(`s8XFv9I z;W;kSv_P1|xV=Bbon2)Z%Hvhu`E&s* z>%ij*bV?baR20)SQy`J7U9JNI>pWX z1UC*Mj6&u>D$Al#xUMU?f@P{ZFwYWL8uKQubBZhvk*2ZA~!u86ENhlX)zAjs6CXj)?{YhK-q7$H*dtG7;t}W<0CE`(qz0YMv__ zZWKnixj(|qyF>B9)y92;OFIesV#4*EuTNj%Vf@wn@hC8FeXV8qY2ad zOmLALhu*GAQXM9Vjw{}TA(t0MZ%(`)M}%Suv!^+eRQ|p4)ROG#h8PAD;6}rN?=um% z#W0v?F1{rF6(doRi^mvG=jab+Dq{2}h!bUSH0B~r;afnnX(QJ{Xay+>2ZO;3DGjbr zpKt0aAF7gBWq74`UG(CGatwwF4a*TYI-bvPeLu$Q`yu)PBTJ4Tsn1>;4`* zbj%DBW2=ERm=+=0k1jYkvxdfRd zVU=thHH!(j3EOoPLq+eM$FRAnOif_NXcS=_TFBC{BrWKq$~>mLc7a0@alybT5uV7w zWdx~tsMme?gjHnIgnr~D5&E3wL}YfjuEL@Tp}=)BK!S+Tt<$ow-7>M{dnil|z0n-^ z4rA;M=a|Q2(g>%x&KhjZg3h048RCq_tRpE>cm@6vJ;asQj-VGIOu~V@@)~c($qciZx*=o(Y7W{BSH9}>_}&6^`AZmEK_PmgH#0O< zqADy2iHQ>KaMN;eEAJ~1g>+@haHp?Bm(KulqkuuihKySgoib5OT+4f~ z=x79p7A7>EFj5(n7>}Vt7biix&*&s!**08ybK8dPCUERJEMdANz6j=LA~A~}Xc_@qD@fr15?ArtYi-hGK})S z5Zb@^2me{oaO;BM52sT+`^pZUe{l~wDMww^D5}l+<^=M@+iDPge0`~gcHKg!=A-Vr z(5yFxTB%W#RAqI87rp44Jt|qM6PmL;k7{G7P|m2P*enG=)JsK}tlSKxv!j90Tk>;g zQ2Z}92q{P?qax)>!x)Sw*zFC`KMD}%^ty_-f9frDxOt3up`&i37-kNhzaB8~LDvag za`9}sVX03%iMXfdb^>Ec#z*c)8BQgL3Z;uBSI>^&oLa-T*3viNvu!MQxn@O z2tX*96&8XxLKwxeF{*Q?SFYBpayHd^%KGxWVaRziIyLGwv}&$+WJzWXI=V7~l<=3= z%KOH@;l@mWf=q5ZM-{UJXOn!;$G@$m3hKQ0Dwh zIz2jU?RS6WZxo$+TMXlP8saZrypFFwdmCDoDy$_7Sk*L6>lgg_3Dy_b0&FbTvDWs{ zY1Wlt*r#EZH;eS4(5WS-UqOvG8$`9iwUV=6^hy;~s}}jR)F*> zdM8rFI08pPJlWl+HIM%o998G3aJz0)jz?{N-OylK>b{wUhFO?Nw9*k{wd=#P6F6o| zQOt$f5Y>ica++iYW>F|?8KXrNVb%4Y){PdEe_^>8J;caVQtLZ}#V$NDdP0PFg8!?v zr_9<_MBpXkylPQrkpgI2gG;CZ>X=>3<*{N#5)eWxjG`&U5 zv#_%4W2x<-+pMF}@OYn33}G?qys?<{#^m!9TB(p*5dc;6QqZA_4D`yU)$Ef^Q2w4C zTo$lUk&j_kB1Ku0iup}J2$PAokD?gE(l8EtLmVAXqzGgcr1&y;bpvOYeVBTNFfY*W z#~966dnxJAGUpMG$7oSj>v@OKR^+*gj4Y?@U-mjWR7mI8Pu zhEdji_;1&;VOvI7h*Y%-*0`wDu%yCICt?VxGYLb?qFBMmd5mC2#A6{bNzEF_O-t$& zhqXG64Ifj}LgsjYSp#g|Bk@LXj1;v@hxUcv{H3DVY%69cOz_1QzKt*ahgUJ3WSA$c zQmZ6Kd3Qrmox1W0vf1JcrpDTZiS_k5)|Py%bXus@6$`Wooz!P33zrB|!m35@RsD?b zWukRj5L3si4016#2=XYs^rCSn)=5F9)9SfOvKe;i=~7A%#QUa*;tZq7M4(i^H^E_l zCWRy}FrkXB7clJthNa7$Ao8@@Ek)b+Euh*bR}gy z4d#+;v%<~q!-#~4A`McbKuEM|dYJfi9M~@UmWR}|pjl1ij*ZMW;2IW|c?=e4S*G~& z-~Hvnb$mqeOtA8oUU~sv{Ill~hC0TxKoxV!P^l7GhHoZmWD$VrEJTz5^@fM7jk@F+ z>+L2w?S^ci6VFr{0XI%%7!p$6l$0(;6E4_EbSRVT%7}Oa$@VOw_eIRin@c*k+Kg4i zkP3RN=-;$RkYwsTQbdeX45w2Z4@NldPtiM`A(q7>jO9jGIv+|z1O=qz^kc#JLR!kgujm05_)XOJ(2~l@FDUwx& zVOfeyu}f{0IH`>HP?S)LNi@kIu?T6vf{8Rv(7CjNAN-*o!uf|D6++?ewO8?{pZ^?g zynILWd8ZCbX}iSXl|@Y+&lQ6(rAW)Nf)pT2A|)+S%%%YtB}wJaqXZEpJfK{KCaIXq z&@nN$T=ZQJ$EJ(1d5OI@@(HNk+D1fz;DMB{=% zrBbRqeOdH=10TM)h>J;o6~PolP*q~Vw~O@wNqiNRSQ!SZ`doxCPNiVP#FRgaSf^m3 zp3>8%7)-`E9*i;QPjNIDAeC&4*q@=F*qQetN6gJ7iLruF^ts}9tEgJSx3Yv$)=Sj& z5_TwuLmaMXPN`()zO9E8NG^4;%8Xo{CVwMPt8!G zKvvbcM+%^}=HsXT{y)TnXPzh{3dM~D`t#fP-~Q=;ix<9f`-D!WQ7}JK1xTJLMDxac zr&)K=tk+=Kie2RKSjC=&0p?*M@($K1NTdk+#iDtxValkfnV8!;W|obC>0;>knAU2@ z{021A)1HA3Z*Srqt1F1&09TFE zO;d@Pqt)=lqX-m30_+ZYC?Zz3xj|AfohEb7VVa0xQB5GXQ5ay>V#?&ZtZ5iDDrH-e&$0GIr)N8kG78zKG-hQOi!a`5sV$IN z7Se!5;lLITuWBow_%DAFAN$^)61`5YMJlouwy=YL{JH-V|Ld>(s;Ysg?V)IOlXW7M zciLJm^^``_ms*8F6DsfI-VBo*^EkmQ2$7^JCn0;5Xd1$-z&KA485Tmzz}&GhGwSI3 zK2ooN)M>zM8u&kj*e$&)@;1>;u_9xbg{m+gl3DfZ>LP^RE8zq zec`o8$4auPEBwkuP!XY2d5U)>RG=TBlCzYnm$}-#(u9dw zgyA@lXgCdKBIBT8@TM^OiHLAC!O>uh!@=aFfT&QkddXsnT>dn-5!_wY9{3(^LV+l> z7sC`RTsZ_q2#{trkeM0mTtigmTyMK%qUGvRe6t-L2ZJ21+=;NXWT2K?uxuur4r~pW zQuRSqmSH1~LxD1`Q$ue!lVmhvEhVKagh{Io({n_2&1BTfOi=+>N?PJ}itr54QrU2* zPBmC%UnuDDnnhQpj74%UdUw-=N5z4q!>ZNbW^+9A@$bV={md`IGaATPBQY|F(1Ao! zVd9_v!T*Rq_@}=E$8wcnS``b$+*B!LSrcp48zS`}DL^=zL}f)g$q*+QMl9Z?xm55O z>8O0r;9#od=*1~!Y)Nn$n0h86$H&O)K=Vwjo>|7H9(fCX?&%K@mx`E|c^0iV4M))a z@qh7Giy+T%JPj}$1sDyc2&XaTag2aCm3;^rr3et|c9Xgk*O71~n0%IqVJx*8c<90k z&a5`E-tC~-@|6r)*bbG9@^gf;ml}TwmSi(4gOH6~QfAfPsh_J5DjFAIYpO+2kg3|N zgaJa~m1F^xrV6SNRwW`i7Q>j%MY%~G%`D83CF~I)ETrswhQV-*!{ZV9lc`kZd8_Hs zXvo#(7ARpFr*x~-05mBqsrM-HBa40fITx>boh03)jH%X5EhIX3xrzHXa%`V*VZxF7 zc4vQvm+qxlYG~*hE@0(wZC{)O$r2N`f)83E8+tO05K@kwQ0h-AS>0DE2Rhw0=Hn?s z<{sS0xnjb2&k3h1$Fc~em~hMIrz%laNsYP}G;R_vl)kVpg!u@UwsWzK|LK4E-*JBF zE$Zz?h`g|&%b)7#rTh4Y|J~2x?pN=K_vh!^4h@ppCq@n(jV9|To1RHS^UY=C zg#|rNgaT9r1yRjG`?*iNyBN&om`2<Bi$mSS=!LvJ;ksJS(f|0}~Pdt&HxapuL?zxtb~=`C4g6ufAv?e`-SI`P@*0ulE<)+$o$pTbLpRHcUrJb zOTNS?k{F}ORB~R5QiCuQ$p=Y5UI*8w-EPA3>#%JPM^S`>d5D5}Pt8JRdFXo%-uCc) z_$MF#Td=GKv^+tmWw6gY6UqO~E#CQ8gV6qS@7iW^Bhd(H(_EJNklDr2bX z7wUJpBy~JDdhY7|l_K{yoYF^{_x_Ax<F7V>*5Werj%`>D~gl=nDmNA!nCXvlQ4PsHdYTSQ%hBV+k zb8!@mWgVSV6Wti03!Os2h*5$=R*%b4hnyn~gUvpzT2mUExS<*GRG-CZZA)Nk*TvSwW0%JH%e#?C%l zXM>p|xzcdN=pG6Dq(G3BeZoBIsE5BZVZVk>Y{*UTTJdAjT|CWMlKh zsa0XPZ8dD^MTisf(QIy-V>%C{QcC%>lvFv(iOisC-YGXXy*WRV3=IuqJe`VX>M`dU zjud_^^A^bs%4C}73+2SSf)c#G|?<1`whN6BArM z=i|aMtLO%Nr-9wU1kYWcAun`nt#*+lktE-wG@GuAGb?S8`6qFX-Tj_;NJa-UF%V=S zOs|GJhXc$f5uA<(Emf_?5+RuQ(ead0Z&3@RG$ z?%8NIJV6^w#2w3#&OaIj9W|W{BYeuXPBBa6KAT z9S7kIvn+<~+0Z==X3fW-)FZ__3bkp3QArXDZM)P`-Evv3VL~hz zPGqAfCT4+&BJ9bDN0pSJ@+N#=1$zXt$X8ViJZ;udpLeQURh#ux`dt03N`{GFm0*p< zDE?OJ7IFF4N(adrKVF#UR0!|v|hoD3dU7b zXqAL39g&jR^Cbi?^B|;@t)Wv-@#OiobSYY9j^%C#$FnI8_9K{}>tc0f1>tcYS9fmX#+@BZ3IpR_fZim)B#054Ib2;s-SZJd zq0(nb;g%7OwU`{uW*wW|wzTl_z7f}tCUezLrm3|O3ZA_&1{J9$bUTJa8M($f2qS<2 zf1{3C!$&?%k&i+YnQ9Iq8N&V_-Y<$F34t3mw%jWC#7M!loXn=8f09;NLN8HnC~_u> zL#bO3icxyr>a^kd4cJZ%$8n5d9znM=bej&eMh!c)ZTyM1jK>~4kH3B2Wjt!P5SqZ< zIKoSV0X{uF#=&}sOh zpBMEaWy^*ko@=Yqk$wSU<35wyIFL%Rk`PPj=0q)9u}DndDg#k4N$H0aBSqAgtAw}A zB?Rm8gv#EAO3PKXaGrQG6`xdoQ|1Kfy$tni#xYRyZ1GfNz64T~hA|wEC1M=*C#7K! zCaK8_>hsEKJZmUa!JYKKSC#p)Z@cVYsK^0&I~6Dtwy%tXdZ$DyaG|Z?k+XH|4imH; z1DkECQFUqP>4&;RiOtm|tgNg_FSu^m=nW5Xc4HgOr8R*U`}gijfo}WE8XiBt1+$oA z)ElBVpWs_puHyOY`*?MCgjojEZ3m4;1INQbSuj&tG8zUIy`FF3+-eJYdEJay!wH8F zFlV7rD6yTM=^$-Tm_BTSRbvfqy^e-O3A-z#jh1P`iovs?CCpJE=!6AAB`k&Lu?WE_ zrLSrgvzU^b0BNEqb&=mYWXnuMa~eg6R4kSK@D4hi4r+}yOzNPL2$QUUSJ&WnJ$QZ# zuh*CG%E}pRHP&&yRfAVo!xCnBg3rbUcBdN5*%0Yy0PUar}%mQsQW3Na~H;h>^^ zN+w7)VO2k1LSKpI*e1)3N1c&?`jZ?$@{=;3s9>2?sCCtIpuCde#$}^YK9G`?q9kM@ zZLLheg{CYOqp~2S)P0dXs|>QLDpznyny7>>F2$ELY8p(Mp~enH6JUw%(F+bPEZewP zPm!7IJ}Yo*5M$>!!(g0XNa=*8qh*=cSYO7a3m5S2$KEcE=<{Fv0hox2%kKexy!?7@!1!(&YzVqTM_*Y-MhRMu8p|gkGgqcCWoSY{VWy(C#sV8ti zg#$MuTX&@o47R0|3ygMg4usTol?))K!-#Bzey^l@dC#O}*>}-!Ja|$gQECC+9~OtT z5>D}FL6Qi2NTVQ=$h?R5w$*A03Bk3aK~94y#zBC29HHTPSX){~v(<&>dD5af&LVhA zHd@^}^7b-@OBZmvxsIcH2lu-*6kZ)Kq;ER_>r!@VI9LiK#G>Ko@V z+P()eQB5<%){2YwKG4K{jT~2wLfkqkaJwJkI7mc-Q#X{T&+}`dT3%W0;QZNhc;Ngc z(83Aw@f6xmfB!?p`Sn$tU0p}Rb43)mcRa)1V1U1f9=}KE_dN6DaYn>LB z>NUj3F`mWf4MrlRSgtqVyB0K?c|s~Ob}~gmS2ABXX~HiD5|qQh7CrCj$e7AJ7L~o# zK!FOLGsnqIC-#!tm_3#!)A%c)`_iG)O8)Szr_Jvg4IAq{0@liX*) za24}(D(S8avZ8Y}nMPs2)L1ArkmwoehK0g1v7`fUIqTz*vmVGpeEzu+c80M?N_;EB zs#}O~j$L%DK(m*CEZ<6Z3F}*DaN*+puTG!(zzvUKe&y-#DJ~Upto1>o4@r(_}mNMgwJ|mZeki_vH{y3DF!vzVK7TE zjLN(Yh5Vj3i$mN9V>u`y1s$AuA}|!kCEcG@@46ye8lJEEJghRmlWIStzn^k+(#|nk zbAw36EhU6CY}pmL31@{hBx-mbB}t6#Lmc;q(!R>`TJChwZg*fd>X_yk=E%@mZDRFI z8(!xO_G?S{y1R~N?FK@pj=<94YbnN@cNHYa<2mv$1ST_RfBOd?D_XvXjdn+-2Bo5GL{-GWaQ50DX#7A;`-eqEII7n^WpepdpH5m28~bx zrZgm!Y)vT(sTinA|00{JENwFfQP`<$WRQQHGE>~hlAo8-+A6P*&nTgqK&h(3sZ@_v z(L<{6rEI=pjw-`Y5o3n^qak`@MhvQ6D+x-)mYquGPa)!IPr*rHl1)f4`bX!yGvd$87eok;Y0PpurVrB`g+MB5G;N zp>0*qKAj1RfYnq<{$2*XF=CXOtV(IkpRvP^FG8mgStBYo{1*_S>l&lve>s=39+w1VU8`!ID;5%*?pD`^YmXDg@$~A_R z(5Gw#PGJO7Tny*X{?3oQuc$i~T&<8{Rh$mk8%{7LwhiX!Pi7bgIJ3IL5^RJ_A`smczE9{`tqzKKF&r%VgEb{Q*3x=Wch6+xpe1a+SiD8rl zDCyUI!#u0XOP@+Yq`F=*K@vTfFqVwbDTS+sE~w3{dZm?-srrqY5;8kAjM3~w3Q^?^ zl1EhP*pulWZyYUDMM23;a$RH}Mik@BvWItGZllOjT->T598dA(=f)UJbzD4S;>?l_ z*R?Q9Y=rX(a*>J@0*^Yi239t=VR$}VzlkTFdIz!)c<#k#aoFF(ox>iUees$MhFk60 za4bf79q+wx9?yL5Q+VKs$1y+T)RPJ78y6799$xs;XYt~*FJP3r7*2b5>0lqb#{pJa z4r~}OT}zlp&dcHkrRFJ0$ONfc6_Ef3#;G-{1|^j3%+k_&D*d4rtL4|>JDk{3j^`;L zo}Q6}!bK`2(kR6s2*fawG#2q=Ri|pTnpj@y2%Jij2;=cF4tjl|bJ-8yZnV*9FT-ip z5oy58NMLtrSUY65Tuv@$$Vr{O+H84Nj_K zdwogzG8!H)__W|A#k*?IMA`g)0ynA#C?PVd{*3bGmK}tP@TE$^)z1{WQ~iv|VD-KF zPW`S*n5CXlMkN{s^Pb9RxQQz$bvz1icr+3b;bMEJ;_grD5O1!%oE-b4pW8-Gr7MeZ zrjBQxT*a1=<87NY><*^*^0gTd6?o@mM|#Hla~;8$BtQ;0uGEOg)-)_1okkZ{qb1Yz z8ud2nOKX?}Gu*uPvP|B4{>pXS+wDvL0qY_pLoTlRIJ?ruN1oWgTc3U}>K7jsCWk{? zjpa?m!5n}32Y-kgFFlXPpLi5{y^i1g%$M;OSFg)DdQPMovgif5IwS@-+lwj3!n6_Q zdwh{nu7*00$`yfOnJ>}+Xc(L^MHPiGf|Q@Qwu+E7SB#H+D1#srNYBmBV+!stG^wqu zEVt2aGGZhcPR7{T-xo^PHXU>u9W1Y`!EV%r0w1{r{B{SewKen_Yv{Qv_#@52Ex#r$ zx1R06&O#wJ-W^AHcNXIQC`2LLsd3Vv^2oeteHEp3=DL$hZ?Pxs5@pLMQ_B@)Q zX8ZWQ4?Tj1FI<*F3q@#Gj}Gx`zxOAI1_92jwcY6w9ldv5LVFV6z`uJhJtPCZxlnMpxCMLlr%9r=*oVGiaC-no~nq^8?cTs zmM=ABiwu!AX8|WPz;Dwj2V0Zrj zH}-nsd7G||{oY)dnfE=ojSoD&j(5HPU0A#L7>wF7;z1u_;lOP-kVQj0|K+dX_x|ml z;KKR)@$~s7zIAs8zy8NxgM}2GR!xW!R(tr(bk5omMWkw2hVn&~_*2CXH2|S(;Vp;T zG1+c$Zk4Tu>B&Sy&YtxxbQ=xSnl*_IVHitZI|)L8ZUWI{N=YF@)mB!P&}lU#k{^$T zxU;h(G9C(1mzrIyZ*0M7)#VJTV2uG6;$CH`hK9=5jaXy2*S0l3^T=L=^aDQlMg|P7UyM7;_cf z#1XKwj_sy-j!!(gfls~v9RBFpU3~7jd-$;@+xWm`4R?=cxN&UZ^?e%~4GpuLVKAZ0e>S!eP$tBQ;6jh93N%&I0+Bf*s-&jX1d(b+KrVZShQUbItoy2-Wa!dw z(QUO+tJh^%8v87cr<56~nOKrz2vGyH+BGb9mr(OOK>@u%A9wHVU@{HFFuLs}Y|t<| zP0Wy@X92O_LeyHpxV?!lIv(ygK6I-t4(K6G$9v5L52guLvKUKwfL4^jm>)v>JD+&E zAnvnRm@!GUMmQYJg%voO1UMc?NYX$}ctC;g`_Pkk;-QO}juNC{hCAsDzy0a2U^)n~ z*>SMU5jssz@)3UCBD|=)>0;u&IQC|dvK91N)-@_T%gXJObfyko>!NIwNtB0#hOWE zx7NS|=QeR1W%&1>{{n9B-Nic}I14=<<9L?9$}N1~d(PnCc#Pd%ik-bNo_X>D-uc02 z;G1=X=?rE*LjPb7dxIF~+b(YPZsOe8M=;JTeEm!R0h`S_zJ7Oze|M{gOD!rBJ!ENs zUPN6T>s@RsR&_73W~?JoG+H^Ps^%kd6V8URG_?I1TAqh?y`cukS+)$#U{R8D2Uzu< z@=**E)hk0tNl31cMTXU-7M40))a!N3(+G$C9`4@0gUM(D&2+G`w2Za2HCU}S=9+=K zS&CQd4cuz3V%lE8uG2tTYoKXq_^{>ReaNt;Cs^e(n1%`N9u6^@gg6|}F`BZflgP*tUiAGJ*74-q9+aZpc$ng~{sI2qXRitmywUcs z-15-w_^8)TCrT`C_)|EgHd_@@7Hb6Z{z4bSkYO7_#hx0)iE%Iz3CuZ#TndU+l<;Y5 zYxViEix)Zv6@aa#dY?k6{UE@Ul;GXzk{0N;hR_Y@s{&-JpI@u934+F4PzYK zo#Xy@K7{+8cn|FP5VyYhr)YI-jE=^5ZRZFNUtYrt*LHFFfk$xV<{|nAx3IOkjz7M- ziz!KsvZeQEnBeXxhb29&WyCOzlbQ}G-b&IV(L;hVqn?GOMjdUxE>4rR2v);ejXFB4 zSii|I=%7T<$jQw@{}xzZ>0o_nMHr|co?*9lh+DVsVmh9R6rYvvGi%#$T5SZ-a3xOh zMa#pL_69V+hJ3Y)OQwUrYSr*oC&6lAp_Zj+#dA3GF@k9y!@)l8-n|9w?|kx|1)m{7 zC?$h%qZB*6AqL|BN25SA{=|Z=t-+w6Oi!@7x+I0XqgjDl_x8~1jo}!!7zL&0?C|qE zP1+G<-<1h>Rp>dPGs|LIRWYs%sQP!+&s6meoOu0{>4+-1Q?E+i{FjHDEk=vVC>HAv z)u!f9=jm*Y{%9=B+~IH}I-LqKRm@Z+=}^~I(a@*HadJjQ3deMDc16PvJoN;+&IlJe zDJ*?}s|O*z^sNL>KiWXs&~f7s2#XNYaUm1E3748RA6gbcuW^cthleg*z(&`@d=|iJ zba8Ee7srDkKKqp`cwpJa-~8y)SX*u3>h2uZUcHNtJh_FX%MZfT9cWpIabO}2rf8pE zmEz)+FMR>6H65d2hTAuLSif9D?{0vl?gn0Y{W{K`S%TB(;CH_K3Q|_4^9<9%!fSV9 z(XgGUrP)SM%6vrgRt?Xl%9uY#F8Z|9R!gD=hhoz(C^c%en^@{Di(&BZ*nBjY1Q<;? zwqNy#(D8BV;QDeKo9pW$H=#&%_h<*#@9as$V7;Tex`Hz+XW`b`7;C^Q$ne?B!OiZ5 zD8Jv)=-?U8#yQ)-Ds(KfKpakC%mR!D``GW_!}UA2@Zw8Xp#9>HK3z~+EOSAjl(G8* zPUD-(l#nE*PKpeL4a;W#GoJyGi&pAde~if>7934Y%}TqDm2Lw|jT(Gkb%j-iQAx0? z-r+@Kc(Xw)<{T&ceqosO$t1yw!d)1Zug3Ddu?eS2z89m$Vic={eIhd`4TF;N!?DV* z)HPHO%{f)_R^4Y6#5+CjvaPissS)CV%{G4gyBpv)@kfuD34Xsmmsw zeW{1zu`5{mXl|lEiA3&AO_A4V;cynC;kR&pc^QrkEG?~|HwbWjaD*ZW@vRqL$FghU zCx7s}ao^*QNiFBofA~eL_*1<7$;aWGyMUTm!)!KzlP9?O>bK$5Yp6Fhy#B%qSa0bV zkJ-C_Bt=DD>l}{A)gRd2#(hAz`uIv})7Ieyt7*rMzO0koX;?Iq>Wo)jl37a&Xk8x-3 zHm=;fi|KF%%hs{Hv4-uH^Kffj473a{r!hXKd6+cX_)xQnw|Oo$sXm5*x~{>RPY_Oz z(CZ!I&b`}s>FO0+zq60gaH4XIZo?O&pm9u-1bfFLY5yEgrUDUY7)?HRz*cRj+(0bD z-##AT&fyd@O3$HTx#7zs!gi|xzs_MxS%({w`IXu%v%eC>?BM)PD9AF+K_{#Gyq2E8k*<}Ym@zIZ9dFvwFhL7*Oauv^g z?OXW3d*6n)z2kk@zk6NkRGDj|7#-uvx1JRR^tshGj&@(e+G-ucL5@V9!_H#pegiv) zbKDscwzcrW%>j;P6WrO4g|3x>1tn}c$tOyh`ZSlUhFN5&`3}~*EinugF*tNV7is;{ z%BmFSXar&yld06mxXyf!G|Sm0&TXF&*$11Ug82lucW&T?*KZ*h&qW@;vbKut^^0(t z9gw(wG0AWjHn!>=JV*k=wb0T%ct~JJBTOd~93JlB%C#5q(yLc-us0TJ+Oqf?S?Ns7nWwpX5r6+G{&uiA+GK9F$)tcHGQly$7t11 zZzxKx>gQhE@KqsCl(A*&Y2}rx_bqO?#r%WcQ+m#GsM;;%_Y19>C&|4UsDDz#t2|ou z;29>6r?8Iw+Uofj9ELC;oSLcvpL(4}jKwN^^_kWAD!8Sh3OgZ}eH}ml$@gN}$uJ$f zj_0n$*cpWQ&;QDKG#dka^Tk57u^Pa&!#UzXj&qw`>>f{`*(+!-FXQg*dngdXcMYt! zmn9Dfk)dAe;9vayzr%1g!oz1;`0JngL22#WySan2m(Swgf99*wa{ImyeGseq2zPG0 zi0-+EpzAT_(_)x4wE?3TihFXV@7ha9tn4 zFqHFs^LS0w_j0@Jlrz%pjL}gi; ze9t<_g>z>m!S)>wvtWo@_ip03tJe@r=5QeNQ@|N71j00+z z7W|N!urY#B9|wm!ct+h7Vbx%#s$V};w>JLY_zCXg9qoH&}tuD2((&SKQN6P%wCS8mQvKeK} z_8al}n;}$H16hPBVi;xrafSb@%5{|sRNh@ln5!oMoytq9w%Mvjq&hAKxN%bUcrp{s z)N!Dm*`_vsHR8V_0hCewB}MH*(-hJe-~Y~Y_~B>13)$=jUViNkzVcEJ-}UG!KJu7_ z&%ZoGGA7MvVCTTZYx}!+;OsJ{lMs7DU}^IK>>utS91rFBhO8^xfBuq;&fHpA#p;F2 z`1RlTm)IW#xY(-Ur+)0iSUZ5-YFjtE6p&z(V$ zS{U^YFrN;j)z@)Y$ctpM%iW_H-nvyoth@Nkt3%|WhUa%i=+D&Pf;d%!DJu1{G6*(l zEw&MyIulicuq9%wwA!fGI6;O_b+WL&x`Oq!4V8S8{Fw(*uwzFlogEd!bWY4k7%|qD zSETiJIvwK9{w+Lr}= z;riX1*f}^v6mTr5h1FFXo82ZFwYoA4HlNFkAU16z8TJPgOs1r4nPkPHT&y`ZTAqV5 zYaMAlVOqWx&+xNt8UEIh$13mvFCH#!pO;agtL-+-#xj2Y zbDzg}7NTVr_**~xeq4O~NgUn1js9^6zvabTH=Ag7+cJ`W zG9Ah@DrUh1*_=hW5Qa;&DIXQ4I* z+e0#*%8)kAHnFzSmd31&<+eNqLHoO(dT&ALF|A)Sa#hC|%%n+#2P8%&o!f9ZI>(aa zY;CD6b4-V$nI!7>1{2)w_hrxkBg*O$o9LO7EE>k?bab*gZ(uJLo+?y5DxiuMi;U7D zEhsCB|hrEGqQ#V{x)V(vCytj>e0jp9zKutrh|X|)vJ=&ed_(^VQK}wb34Sj zRU1vXxZ9h4n~?H}Uj)-y;?9S6;b-oyiOs zjq%a%ei|S6*vD}1_BBinb}-_!_T0kly}3NX_rYx+$2+eei)L6^U6SY4*>(eay+gFU zCi>Gp?j4SC|5^iwlL!~qySO!p@Grl<2aCc%BZih4xIGMkoI?`S(~TtWDjzs1lNH5r zu)bldVQWZ4GQQbuV7b{AhKOQE7J)a`*RZjv3_}phe5!Jckg5XpxZ*S;gmZCzn^0;+ z)Bs^H!QI2_c;U)xGU}6g%W``a_1X$_s&zT>kWYAJeilZU1S9PCcW`g#0E6SPObDsF zb$J9CFXHUh61F!Q(k1EDeQ3YK{Q>p{6IhvswQd`&rjKUbQO`mstKN$&R7KyOK#_$ZW{bH-wP7nL z^+s=`9!5z^;6~>>+LOt9^2`Z7hDuE!SoTnJmTT`VuZ~En#!H4Tl3D{@#y2Q#5TySS7Y3(irX?4KbecsXU=< zB6-S=WyzC0`8+!|uk)cT^E8(v{l@+P{pk!XX8v7DgBxhNwm_-M%b!A=ita2Q@Gg(C zstR@0gVM`()UrrXZS2LWcV#3M5kSM>bi}GwQW=Kyb(d7HB*d9A4E`O5b)D2G3Q92& zxpDGb^64DId2m|bEA>^C(pQYS0Oly*mJ)W=er%xA)bRd?&)}&`U0lAfickO9cW~wU z0Y3W7MHw`)b1=o3Zbt^A9Zg2Kv|7V%FT%}(nQVUcw@6gYB4PUMg3rhxl^NjtN)7M2 zd|8BXENo?3j*!MYoQk)7>l5$9Q}1~kx39f~!JU11K>fie#x$AZwb$-oea#a=W0B5b z*cr}mF2RL?7@W5?7cJHop1ljV=Hg7tg5_KI!tFw)rm#<&FFr|%t)56>k1%h8_(!fAy5aDd&zK8_BD*grnPey=Cctl>FW z={B+2R`bs|HG33urdo=c@8jHhTMWZu#QFO_{=QGuUf zl}{_J4C2iO!oRQBDH=u)@_bc-$oHxS7d5G`$^jSwm{9XG<>B^a?jn(d^J^(!WAYcK zLS2jDNs+J0Cl(&@EDsyuq(ORgdU-x;JjX+4>Ui?f3jWGF?nfNX@jIXSx~N>={@^lR zytRkAQ$xeiaQkpB5A$5MO?>k%tKAUN!*or7ET)yB?K;vtQ&%JG2$SQL1)L~5p2uDWAA(%g`42u<}FN)$JjrdA;=2sAC53fXIQ4llSAH&6kX58 z`Z`5*8pfkJrg1E-v0r*=7u#J2os}lObZsOWEI#y+tptb19M7sA4#O_RR8LjoQbw^M z+g-VKDYV>DklD=9taY);VSJ?XJ9StNwNrI$Z=J#VnJqM$9a*#4Y^HJy8b;1RbCkO$ zGOS~LV-4L_M->yZ7^Be$qv-@XC#@8G-gt`1aDx8e7_Z#AiC16S$6(l(A=fM+T-sj2 z#f`2Qh|A|i7PfTy4W?A`=2+?0u)5q-k2?4V|LF&c^>$sFR9MZVVeB1`u``$;n5gF? z(nM`)cIk9w@+ z={#6gysOt@y<*WoB>CgBJ<2JA{BQMp9#hRMQVsc4lB}MO!DlFx4{I-L7&Me{9t)J> z(C0~{@{z^Fx`KKq&xIkrmLULz(A{h|ee2mao_=T@AAIs5eDj4@@&Ek!Yxu+m-v+CQ zaD6|(O2@{XI|oP%8!L4WySo7nQ((?^V9o&JvmGo>VCAEM)eK(x&$Fv_+_&1m`HgeX z{WiR28(I`07!O6>PI{e5bi3Qd)_p6O&qIv&$GE$Qs6vW$g|ZA>u60bgO9U~O~P*WvCp&oy3**X!$x7jS~L*I^wnuz-mIltI!c&5Sg$ zr&CpTSI(#EoT_u5_xsQ3u91D4N6$!fPj_{l|NFo6hS~^EUTPvlML(0`1Rk_>zVC*( z%JMug2>2{X$`X4sb1YsginuXBA{xU?CW>4#fkcQIBY=1+j=4e+#rZizVsZKVon9OD zc1NUC=~NX8^VylArOVPU9nS~~oY|C@Si4n$LCXaD`ErTbXgBce<*Rt+g{x9Nv1D4v zXL0lDB4!h$#(LrMdqE=$iYc_)G}@uqga@%0%WoI7-+9;TERLwSAYmfpf@Q1Tz;<0V zpw`HgUqX1iRG;>#Ne|UT`XbV+95tD7`1PbHCX!J}lL}p{f@69D_3}Pqy613$<2=D(bOtbRmg*Z&}1`H!R@qKL3Q2Aosp<0lV8>5hbhFNd6j&-mGiv z!%mX|%yQQ%RTlAC8Viq}lKLzIs46%c_TZ+Yiq-CirZpaf8@t8+!o4fr9jx1-em=9xjr;a_{g=6V3&RnTV z@33RI@NCI|n?01vD^9h&5$(MUrAfsLj<#v!XpkpP^%lGI3dtVmZjn*By)`Gf>2ujXZ&aGuau0!*SvJTjL@6tsWZnJzM#l zEWV&*+Tmz`wNeRBzi`CTL;Xfs9;Y2`6K(T7OK!pNt+_{F!} zA*Str{kiYruA7#zvJk}9Mnk>>#Ue^oLmot<<;Q@YZ-cHJXzF#rJpr)@LBAJt3}g^< zT)q?w;+B)g;10zQ%g?|Qh=ZEEX0wfcy@GbLfnK{VCEeVi1X8m(k(R0MRQ@fUeQQt8U1PIh3f^N5ddRuv8o4Vtax!Wkc9*WX6diAv_ol zDUU=YL!~dqibHvFXbAZgH^Ud!kWK{vlOhNTPnV2F;12}_4svK|c|S1t-Y_tl-441v z+6HL*ydLg3NNc5FGcON)$brKy>U(?GuJ58h>S8uiz)X5Uuzg%yo_XOC&aPb$!M9hO zI*DV;MF}ubJn2*DgH?l1$|w#_Xp!uuo0efCAT? z5IJxX`FZ;Wn6_^q<+~>?5mcsvhTj$rJ31f6ufOvZc>K&79(-m4@4ELm+!GzG9@V-@ zu<2u?){}!)YEhDBgmf?r7-a#y+Xl>#B)W4OBBgga({VW-heyk!p+BT!OFr(xv+b^F3w+g3D3TG9-(*~r&m|7 zvQQ9s(|9t#ptpxXoA4Ho&|1lQ3{Wtf0@+kR{m@Uo-pa)S@N={ZmqhATt&Z(_OE#ht zPNjU@j59rsrC#F!VUH0H#jtvK3B5)`k%WRF>@=I`3_9|QYt#$c-%+S7_cZL>2?WAM zt}BroZ@%e%V+zf=4+`YwT&`}lND}>BdOPbQQH~IWaUwH4Y&Jd0AKI&|0w^NLrc5lx zX#GnqqoIx#!INDB12WZ^g(yT|Yfp*pl}i&dMDjpHk&p5_+-;a6B*Ovm&U@`mNxbvE zTk*I5`ZV6SsNoUj}n z4X_yZV|8f(ODjw8M)Qcx&Ps_vKDn0`TlFeBjVh|8EmWF&=yyA~{q&r?KfY83&GjyJ z1|wkDL3>2GQV*J)p{U#+UX0=5)m_y4z)i;zXw*51)p2Alj_zQHzka%dYfY~-w}G)H z<~hEYg}2{#T71uSkB(=qb+NJ0#Q*lzQ8^!VCM=>|IAUy`pP`BGbzfZ#=UHZddfDDkDaw{{r4tC! zMM(@M)kt}u>*Agi7%R26c>@0TY@)E2Ou?g@US^2pP*ewyS#;+tqpYg z9c1DjEG*?<5uoS|qgrai@@m*F?a8eginvi}j^KldR5FA|Uo64x)kK83KN#bV<4FuA z7XI^>_s|)5;PEL3-1caI_x$*cc;o3sam`8=Q@FadgD7URQieSlUv>kPsCTz8DxJLQ!6) z*{-bE9~3b5z?k#|i`8lwxU$v2 z)p8#Z!ac}M@cE$|x=hNbTuxQNbzxnjjWc?+2URR5F5IPsc+qma$q4 zVq-_giNzR>&L!}FeqjsibqygmGxS)jyMFP3+i*uQh4k#A+CP{z>~%1lDCQOqKc@#QQ@kEJ0V&dxE&6dCkZ?L%9Pq&p#|DrGD}Zx0n9l;a?}6nTW>?JHOBgG3Ada+3{BI~ZT8{yTGB{Yt9?9qu_C50 z@t{`#Y&@VWAJoWrDEg}*uZDS8)Db~}CaD1%RABbBHFR5kY_5~6p3PeidQ zt%fw6YB@-TA5}3_9WVS}=`jwhz+T>C$lTjDmT@wP!`gE)#q>nV!A&{e^B{w$2vGvk znrgz0k!*@NRTJrb+pLC~Mk+8^hA7Kl-uh0-M&n8ej27!$PPiQBqXV@OSs;p7H1R+r z>svBbr3Nd#@P6a%cc4=1W4pS8SDaqOz-VEp8?sC*RjXJpcktYWCcT)%OD`VwOGzYJ zt+qBU$C&|bf_%({V>v&T3-g#;y#;|x0>My5bYZ#fpm#g>3B!IDrqP2j=%Tk%#_sk8 zb}M@bhFmzjoI)s+K&W^O{aPK3-3s>V4FQ2#ehr1095%Pw@Ps@vZhqp$lI*0q<^*@I z#8Do4@n0X@5+feVN9V9HjK~a?W@1zyVXaX|!!+=^Bg@K7D-y-oOIvvU zg$-Of+e0!CMJ^sjA{<3D9mSEwc^o@_0=dFGf}yBfh2=#gmo8=O=_jcrS#as@nM^2zvSdqZ~NiOXUd*$zulPbBUAuQ)%y1LK7fn3 z#CL%sI38>^a!NZ^dAkv^EISoZ%%MwA6Jvzc zg)scd4F2G2+b}HBTTK|01v1^D#GwU%nFZ?QhA^n~;Ia%9kEg^`=fcH0N*iNn`WU%n z5QWsNKwOgX5YovwmR1&U^w=u0`FZ$QN>NsG&_ZKx4?E?u-1b4L7ly;~%s37ucZG5} z%qZnb38hL|daYtMi(`jZQ7EoRDaBw?6Gs}(m@+XFimWw+Y4*`;HPx1#nWIPNB@YrY zzd)XNv1=dxneVmo@tAlj^N?~1vA$QAzz{;Z!3CcW#dHFNB*(h!>c?p4L!n>}20a)g zyZZwIQJ|NE)P&R=<(Ay>!<*VsNIyY;30Vr!JIoH8DYV6OCb@26H6=XY98za#=L8+g zDcMaJ3MtFQ9Y4p(+I71PiZa_jTQY_@mK_7L1+}FF5@XRJ$sQcgi<_8Q9t?^DaA+VB zXI{)?JgC%$D5OI8@mC+lT4_hP$v3RdqTlMk?I#*_h!?L^u(sX8PLq?bf#?AH-84k8 z#4nxMm~yCGK+%@r)`c)u4=rNu*eUqZ1!K&N6j=|0@ zs@rQ=+uT4n8N>~TW-xR5)$oNA=#@56-M)fObr0K36Kj>aj8(6c>L^v+nDpCNSt`O9 z*5FT0ko2YS-=A*_oz|j?;MfHN1_A~bktTHAg9({`f{gH^*XMg?$|O*1l4%?ncVi}+ zLOMeUoFtOTIF21&!jYq^NM`f!1|#yAM|wy06SYbehG9u*L!mVyc4>y%8PZ{?hi0>h zt=&!RR?C9mEzaa{c;y%hvn!%+D;d?U2qa^8X~si=4O&_^F=#jJz!;*}<8si4bb^#@ zT35TF{r-FIk-%V&L9cgO7_V3A0t?|(irqbHF7_e0cu1IhTzFOJRoAB8C-F%Je8fq9G3!=hBjS;;AGweS~vYs(A9k1_pf^r)Wq-)zG0M0)Z2mqf?rn zAG1N=wI}DWa`com+<|yf@Mi&zEp6*(W(^A8nZu#f^h0`mTSH759aOGfKxu1BeE1H{ zgmCK{egu*9yr_B)yLD{8cpj~48D}l7w-Jk|A_4u&fwuc{Rk?i ziLYK5W0QC(j*sc0L})qTwRAbc7;clAx3ouiHke-jHX+^?;*1!V8Y>!t_Y2*Xt-(cCc65lS_)_ z;E|PMm@6C+(i3|F*VvTHktH)xx}qBm>J_vwYS*NRZ?zQ4fxR<_5kvv2z9_^v;R*%($izZ2#*2pil3AMV7V5nbymkrV3sJS3GWQdV=vM(A zLfc;0KD{sBVMwsp;%A)wI3<_*a_$JOw-|HEt^FEnYJBQ^j_6m1bHQ?oc4;&oVgDga zvyswaC9Rb)%#on;x*UIuMw|53fo%Sjzqm7Gkce=88?jiU#TIY;bi^Z<#p-MvZ@6g@ zl}1y>*c1ut4oAo&L-1=JJpR%e&YatWuDcKm(n5g{c;1v6+Cu{&FA$;-f;Ge)i)q|; z>m5kV6u}*vYXATs07*naRN;w4;R^+zu_T~+28}4aKG`}`<((ISU+PlYRT>ykW_4p5 z8yBBOrPYGl)y3VfzaMj_UIV?qE6zsaP8;iIAHmgf4{I&upK+u(hwr)f2Z8!Egcla^ zna_R+Uw-mgY&G1t)-c7wnMOMV4^j+4OfpFrqj2?vMZ77Q*~?;31lZgnua%4kkWVEr z6H8(y&aHe5$BwOF`PeGLiCF}Kad}_$K?}ovM|c!`rW{Q0!!$UCpPHrRX7yN@P4K1~KhGNvE4Wn9~6v}B>nc7U*vWP(dX zrNn*^7;eH3ObLw5or-8mQ87atbo@REj6|3MyaAD4Y;@YPAr?;rFCB3>`U{K4LVGk4 zy;e?Zrw{w|7Fsfct?#5ttAi1f>M0bg`+7{2Dv6w|@Nae_Qw@p(5z%e@lPvsfuL^at zmB$}<8nW=yNZC}nQq^VQz$zXgSv?7kUAuxx|u!ogw1h2oLC@}4O zHpE$&)Wz|T5Ak>spMT^GuB=l<-4x=N&+nFURo6B2%svu9KY}g|hhkp5`qon@96g3W zGy!igD8M(qZnparKbEnx#}6$)2U0b7;LN^OE1}tFL+{qmDX(LDw+dSNoWAh{ZoU5< zFj`%h;{gJZFuEHT@YI9fz+;;&gaT3A_r}*C+izg}=(lm`T|b6Dc=!sw_1N>ge-zVhT*? z{QH6IKW}YyT%DjeXr}GTWq((pU>fqZ>|<;M6W^TaQ7}KxNzjN=KQtm44CMAWXygxU zb^|^IlH{#RWq101u#_4Q=*I;iH{APjlXh5HmT-wlipd2vgrX6&x;?DUr}4cfXV7f) zkj+HJ+=em9TA6k4R~|o$OV^sxi{+#Ae^ZK!G8(otWJ4~*T)=BrkKp9VWANv)@I};= zMFQBRT%Bl=-R};dxlFME=+jV>Hq5;-hTSI6Ypcz;K19D$gDc?0%4`~Me&FXtMcvZ+ z@QSpiALqXQw|MlKJ@_(Ny!O?%BBJ-;Klfc^zvpgz=)p61{-sT{bU$``Blz5^;dk?y zy4*1Kab#SYDpHqNNt31^ful*hWRoF;LkTQoV<^tXQOKsTa{L754;@D!J_F4ck?FoM z>Wk9*px0Fyo#0hBgmoz1EwvVQt1Z-;6_l$xsMIPFoQ3QRRu8XYZjRP!aW!BuSSIOG zEpYJR1jcyOLBH1!Y*}0SWL=hesZ?B=Z)pKO`m^_1#K;qP#Y4luVB=VA>vEu&F-R{Y zTsIL4$hek2NCIOxQABf!57SL)qG7=06n7C^lGUp+EGL>YR7tfL8N^aim5Q}JbDzX$Bx5IqEc8nDp7oleb9in;Mhd{S_wN_ zTjCMXGj%kEWZBVjD~RKV<`76E(XX{pS$_%Tojn-t34Z)t??UA8QTRKYD0$%u1hMhR z7x4IZ&myvN5=RalLP)QnSlh(KWEP+L(i7OIo7nA7&|zjUC*t&^1&Nt*VJz6Cfns{H zPbE@<%Q%mQkS74Qk0rH*Xjn}(3yCO}my#$_1M2V%C@dd^KROG|7n0o&r)ykPlD){D zkgi-Z5j4B#wENhuG*I4apw_IRTrHv2sEJ1K+)Q2qBcDHnh|TRFKb^30zP6B9u(`z$ zlVj~cuZ?!AhIUJr{n374M3lOX_J{BNek+$Gd0gF!42-MgicBEXsFQ~1E)i2p63`W7 zQYLe+hyGCcMH^#XHsU^S09`KFOa=@okIIkQDSsSdlB#4BN$KT#4EdCUixTdzpLX`_tKKXgu< zgICf)j4Zb-pY*X;bb`|%O?0_tQW1pV!3{Uwgj~KLWt2Y>RAnh4Bb>N(8ZbI-v7KfE z&T%B4AL*ijgz~DR-!+51xqca!p8hVbUR%R!?z<1C?s*f;{!n3&5(%t5{xv-J#KXuR z{T_roCVWN>N0LGO{go=d`kiays#NRfsOm!mU0#s-2_kC86dEAVaU|l`RCia%V-p@) zO89`F+rSLvGv^{AuaxxrFABwc6M0;LoQA`FsKbcU8``wBXIlixCfm!$?dxI zk}S8BDNP(wQj7@b&*KlE*&ZMf_G4jr3Ez40Sv>LF22zm#mf}IQO;eVT z)t2IfEGE4;b#zgBlhIH^IG)1H%sjl&7((%&pbB^+Gbkp#CbVE!UfZz8(PbBBuWaDj zUKPVhM0CCGTu$TY(ZiDIyPH?>)h8ar;@l$cfBVk@i731yz>|n$=h-K*_S|=nUp|H2 z&NZas5oG4__}CYpz`s6qMKDsso*U(Xg@9)y8CFVIjeQ0eX%m6Zu$1O-g8EFfMGJe{ zxb^lKy#BsBuz1s35DiAKb>UH5JM%13@g*!CJ&EkxQFtObDyu0$j?qx~=YxJ*Y?b{U z#lV!nX!o#Hsi9PAqS0xhRNW9eX5#Yl$qZJOk6?CYX`kD{(zrk5XsFz zAI(l&>^TBrN9OV#h;L12js0H0-do6)-0`v_H(|=xZhCynbE!O^58&X+-$Eg1U0w#B z194~L$5c=IDn(!-hn<1K@{c1xHroz@mNzTs)rCZew{iEeC6DcNaT71Klo- zKj{SxWD*{{@%AI&(v=(hL?(yyY!QKI6rNxZ6GKP8QWh;*Zzu_EXyWpfi}>e<&*Oic zEx{LzBS>Z>RM|^j!jcm$~;lRXRmlw)F9B0{CyWGkyntLskQWaR!=k_6y?BV?n z+=$oy(9gk&{vf>YDH9nOIRE%Z(YRE_!phCa%rh`%WWq+36*gql*X{LN;_6D|wUkn$ zj$~dA5=x~y8r>$!wM|s2btT`)z*szr+{`?}c8?);$HTrNN<|_Fhl$8Ag=aDv=rR_j zJW;3DLo^maIuV!6w_L1$`u-oV;<1P-r6v~IgQ2L=Q7MAl+mT_3ATQ~v$si|BgnGDT zKTvND&>nKpr{wa9bti_0SQW~>Q$6M74e|7pN_OayHV*6p2tu@uK`D+SEP>GiE)yVb|)QURe@4$qyvgz8om z*|--27jX7U9p$bLuc?VKWqllw*YU<<5xnzNt1w+2#KJyg78VhX&ma&AVmNGK*xZw* zloq^ZZ4b|$yM(8<`grVW6YYr$agTw;R2cba6wh5+!)+^Z{LpPj5zHj;!sCzQH9z_` zEWhGjSe_uX;Q+PskKyunA4GEL2r`Kj(lbf?>$4?%^e_JgWy6PD&?6;jr9I|!T6Qf$ z<8^DWXtZbzWv9W?jOYSw1pLGUGx)_{{(ZpnS{N=LywrALBMmq9w!eYP4}TGJ^EV^A za2)P%c0VxKFmo!^>v6{35JuUoCPNrgfx+Ds10$PCN+~6o>k}XN0V^2^DkQ5%6JGGOas$TA z&eY1z5G)ILFs7G*`}in3yEwYABAG*}PAXP&3~Nhq$^wtsgVTQTr&fCnrd6@KQoFz&ii~*b)kV$gzX?p@Ne2S1L}f=hg)&Zn8;Zf53sVF#i?Qxr{*Fe zZm?DB3d|y$UBcGYb=1l`;!ebk^_88b{JbMakK*CyFNr&<+3n-jV+FkaR2KOd0hw;h z9Xf<~ei{C71je9-VW%S{)S%Tur(DLBOI0Keui}aGm+;s#=fx!c2VQX-7D6QS>|nl_ zL-Ftoax+Do|JD}~DlXyHH~kD;n!1g5&OL(e?lu-)@mjct1GtkZ{O-s98DD+yo8mF9 zl+1xP>89-E2+X9I0{J5pgy03?9z%{4$KPH9ANiv<Ymx0{i*H%tsk&eK5IbPx-=~^i=b-M38rV9v&Q{v_eqNVP zHRSdLilxbZV^3#NFR}h(fie@AMh*wzAT625=>qEGg3lQp3-m++P&qdVa8hi>iQIJy z8kVET!)XuhK2d~Wnpod!V?LjUrG=pNhPZU?3L@lEkOFF$LZeNmbJ(uvLg*nMdM;01 zG^bM$Sxz!A62-$JZx5p_fI%Wo`}JKkwl;)k;SWYcDX`w|A`tW=5mX?<{L%ulb4A&h z`y)v-UOI!TFFuS{zU_lRAPl$VL2KQx=Bp(f-Y_IE>$ zVr{@B-)jzD+oZ5`F}CeWz~KwcOF4u z@iwIA4oP5en#MPEGU|!A9LpwhfcU<$sb^qtw^6Rtu)Etvt5-vLZymeUia?Pv@g(Mp z%gANt5Q%b&u9lu0y6_yO(s9H^Xq;;V1EWD-0!=Lo`^w)hP5DrTrPKcG1NU3Wcu;Ov zi`uPv7i&9Zv>J+vX-HtW#DqN=4vXj-N3#T8Ra2mE zIdA66`-SU9w^KwWr$Kh$B2Hj9|G$%cIJ)FvWv}4SRGAbAQQ_B+DmJfkiJ3A_du3&-QEa8t_wuKT9tQBU^vaU+$?0s$(D7DY$7P5?b8b}y!O;Q zhP^JToe^@Wq^RYEeG&AAL&b>X`(mrMj}2YQYp=^hl;yk22RBj7UaufPbHycO7mpwi zO~Ep{Qg4rWBet3t)ppSBjG(u=2>V0u#9}fC;iO88LNhaPMMx{~!}5m_7&LMAD}Ro| zuYCuS$8LqYZ=kz-K~yOHnR$4N$MKD)p27eAz^{l>V8>LKn?ZiJE&QOKn<8+@B+Sk1 zJO(+TUbhLaF~ME$EZ`%*@o|`*+c{L1k*bW`-6K5z(0@U1%fQ0QNu&yg5C~@^Fyz`X z`Y^=KxUIgoS2@D6lp=v?hg_iwH`X<5SJnkV%#23=y@mV|ve`LArIg|peI&B6e7QXI z(WplBpZeha7WG6maw{~N+IO&4s-oN&2-le022u+X z;h=B_h$*3l>To!~Ub`<6o!ixx@MbxEiAR-gEk$;DqfSqWuFC-Sp>=L|r+m5&Jm`49 z*an9Of8X9&@V2%WUTmC2M#mOZlX0r47JB=oo25!MCph@^Zg^yK&ur2gjL;b<oHnEM|W$z&lL8=tv?uV~eZCOpsB*SR5Te$1SdE9+0kFd{;QnQ6@B#O=TGH!pv z{m8^-P`dIgLN0oWs8CmSWgbDZPDUin1Q1L`VVE?MX(5xJM{4N^0`U|k)Xp**Agq;$ z-7#5v^%~6nKx%DoC?xzDZ-58QWsg>QXLEc$MhF^e=e~_eB!i{9epnh^5{iQ91x(zG z&M|)LH$H-|edBQn%+5#+P*`p^W6IR;r9?XLjVJKL7e5RCZ~@ts1;l6PB`{o`fP6pteK0U614N|}Ld6*vybPSc*sFEW z9n`S3vyPp;UFq>s(KO~}7m>>q5REAQI4c1L1~2wpHjY@7HrvFOnJ`Cv^f-d9H9@KY z10$6TOJK;w`K(o98B4m@gwy}fVHrZ@lS&D^dE*=Ua8TKI@RQy{q%<5eo z8?`n{m6qJv(HK=jd`R%&gaQIZm(qnLlr4ZfT_Oo&Kz13|H|cVyr{wgf0fW;XZ?^8; zesFMN<&;;Zr5b8yiKh`;B)bPiNRlAaCK!)sPNGJFl+EPkyCJY<>i4pga{Tt}(JsHI z?Yrl7dqt3ed<_1abkr|2&R3qE$8F0AguE8qo*>5h2v@I_aMusN8#f(0jcZSS32t); ze;_2UM*$oCg0O`#mPHp_6o2bVy3gj95T84YV0s1?my|<}$NjJ@Kkr4138U!u4|KZR zO3BcI55AxW9!)_;+ywpTJ&YR{p|?87-}N@pnDQm!a3$t}eii@x*?+-*`siOHkqBZ$ znNU+*1k9RFh8OslY`)bvoOn6e$9gPyEg~Q+47D+S_am>zefK^9m+L5i5GIon%+|Ab z>Khl}4WuzUzld0_C`K=|QJZLEOol^&g%A=ho-H0l3N!7%*sHh2KCRQQVry>$<#Ji3 zSLs;h-((Da58;mc+{n+Q1SIJ5QR;_*p`+JfkHM*wj%bWf_%K32_NB}izxrk?9t>kV zGUVnQy2iLl$a1xdW}gfwq9rxKNM*P-k25gbvc;{o``D_rv0ZJez=#A83;9HPg@=v* zIDsIC+r~pVZ!kxz>hlNsQ%=b;{il;DrX5*TiKcG!{Y+vDJadFB0b(nn%jC*dMd#0x z|7NhtluDIJe619C;O>TpyV+**tu%2Jg;o>B+*n`_YFZ}d?3|pCvFHM#L9f*Kt4nFT z_VfbwDrIDeh@DutST5nN*S#5UeDysjJ^LVx0XfZHIZ%GT4=%n}M5HpSv8LBY=ryad zpvx8(5G@=+C|wZPg*j;05EVARrYN~cFGU!=MF_b4`s{4Uz;L;V6=O-%hS|Cbv)x7P z##dv+Ub0@6W#`|0j?5U%{BcFk#4XV#N$X zaXz9BfP20#jo!hskD73ZERh73FpqXkxb2r^>B11FM;9l2IYGYKCkz?0&$VR z@T*dsaCG(^)n*s9W*417O&paPfK9<{Yq1d zfx(}ldW^16aTyp?h7=LNzxWULSlL2CusfV~^xFn@T0@b?;l#-@lt3@n`pHNbnOIyF zJe=Az`lh_dYt^PKcsQbEI6~FxRKaaf^9*5EI ziDVI{IDW4m6F;?nS)=2cvHP~iDB|4e;UI#HNJDCU%{7Kcrh#L4q7%IR{v&wv_ntsHRzR)M z#pM@yAGt(JDmJr#*lYoTa1tJ`0;gI!OZct?ftVQulqo9V=$$Ub*!s$ftY5{o?KNzd zN-|N+#nLF|7m-aXRYMuSvm_g+VFXpoMYYC#9rqY2W9$dUrKkVE zN*=x&E>8i2)&-Q#ehE*0;}KkWiR?W>Aw-Z=Bn;{QmW{;3(Pn52(a}xRdO9}u>OuyJ zgo20(>70VSLHIl>V>llKwe91lq{mR1!s#;(b{;AV@P=|GLh5rWh^Fl)9miJ5Fro^g zGLyW?wk;WNT^?#jZc})}14`#81r#dhsZ2l#9csX;!07g)PLD#_+5#Rd!=kfPn_!12GaivBsgoz$mo9r80Ku>4A%dE=1 z49hcx1mN=2qEh-;ItOL)!uN^PX6|-8COl&=OfN9MqT%pd9%(I$bTWg*#bu;ta>!+i zh~^7Io^pBoDgzBwU=VgL&38aSl}5vs2yOG(v_xNc4_CLYV!N~{W8G{tg}K5Ka+!IA zqcN!vsFc#zdkBSt`+*ViYrDb`vf^Y6pap22wl^eh_q+OZqWC z8$i2f!fVmo#)am94jKmD`?K%Ds}_oAZeCQh-iaFl@{EH~XrYiyd&rS()%S#@mI~AK zK8wWCAq0~JAqbhh8rrp8xVhD(tc*V@S&bzODX(r1)$4hfIfUgznwJVW)0!YoEprG@ zGKXL~fxrIbC-GPR>l^5rn#hDk{Olh!=w=7j#5TO=)XBD1a4tD{7VO)&kR{yAu9PWe z!5_*HqS&*4;+JLM%uE(b^EsS2TEODMjNI($nF3;TNQz{jadb|ugwaEf??1=2X3+ap21xuj58xht_`EbQ>EogQQ# zLnWmZmr5#y$}-Mw+@0H+Zy?dM{ItX3P<#Yi#lzWu*nf|igwPg#o?~Ul27ottzsDU0 zOD-y)Yx3`eO%PH~AR+%A1H)|=lBok3Kleaf7BN6(M!)%H)s4JNfwenAY{EzUt zN6({SSlFrQ;P{#W8wpSflTxg@0+!jkB&h6NqT8)r z6_>7EL}{liKaUxMrBo_8D}f=p1oXogs=z4BW{`-7q?EE)Jq!qv?TQLxcVvikCwc2i zD_5T9(87cd?qGDtE#-ta4FAUmZa#(w|M_?D@aHy>3}+FK_@!>A81PQBjVpT{k=dad zHod7sk$_MVsrtrWPRbe%fo#=49v0GCskrBqPfDXnWf9psO!;R!n`*wvQ~;FixG-pK z86A6kdOdVq2@E?t3dc^_k>(Vn?SueGmQ37=s~{Menn*-ak+9Wg1J7n%O}U@GbpQY$ z07*naRGp+Wvuy)}s?JAm&-A6Kx8-#Lt_jkKpm<@l46^dv2zp)U^-Y{wh~u|E@Bz4+ z6%4AoGFl~9!b^xY2{!xyen5f0x_SqdYisD}9UQ&sPJu<_ii_~Ya+r9D3-iKl8t89d z!uHw)k)ZUZ3W8Ph$UuO4x>QSKapS0<5HzVc?^JW)cDu2)iO>AiU*fCJuHjO(g`r8E zF!~?45cIgDmn1BR^xu6b3}NLWa-qh|9-5WXWK^CpCrEC1n6+gxrm$+{qAV6>akMy# z)s;CE7K@0bXOK*05lv^|4JF|6QsI&ZwkM-nmQuWPM6I5IF&LmNpCe?)K&!ontD9F) z-rE(oVX9&>Fz8Vp3`A7(-EX6->msI5%;yk~Qa*_n?nH(f1S>Y`9aw=VVzH#0S7So% ze2-sa@^sqUW=027@BtTsoM-;h-O69$Q~&kPVU+wxC4$n_vQ(({y0~2KK=0E|$}gi@ z{uzz9;POV);)jQZJse5argx`EW#R+T6UhvPKu4uMHfw{}T3?V;g}U8naS z(r4^jUL6GA^afirq-YQ`V7=Ot$qSiWeSIwIMAWCN*LASAoXs#%=y2r1GWRyel@Qe7K+r62a zP#Ff5KLB?$hKo-=hOd9=3wZ4EE}mQ81uX79`WS0IVPEn<)thbU!=#y)=f?L_O{Y{g zSCD-69UNbieJC1ZEQdV|92bHCpO{e2_T2dBhWGBvM&K=#a$M?NuXXj%s<+ zGcf3(NPz_^k8rxw(|L*Mw&+?7Yvn5_?d-{TI2lf%IJ1CMS_KB5nLc3VS4_piOa{q_ zPqyD8n`9CyKN1jOFf)$?0hFBTxpZ_IC1@i{mur`90sK%~2TqTaqBoVq<-dnt$De-U zL+CsMai!rzqNf9;Mn_61Dr#^!k_?3qiwEHkDG43Il6m{fHX5`-R=_`X@TbPK9#zK* zqnV`&gVnJhljW-l4B3l_*n$HvQHSyRCf^PQ#~;ptnAqcC=jImz(_ko*C}T20e=tI; zJ;Z=Iw)zCsR_{7dXQy0~%*LND(xvnrcL|e^fx-O_eF$UW05*3T&;sg`;Z~Yu++4(k zdtP}IZ~x(+Lhq$#F){jz&+S(uZjP7-RLQIFN!B&P86^E)gyT^JvUw2>)7$}>(u5N! zTzmEjV9-Q7J0raYODdLSe6QRt5&+z4F~|3oB@r`5APkq!kMDl@pYY;~FXF+o8+d-J zE!%l!3}#8{yF}t4G+G^1%1#lr_5(x4!sNsAGIJr|_X>$=j3I&n#c^?&2Bmyhk1}I)?Tn$+2y3`nx{T7!jsQZF zkt7P)MWizYgo1H7_$Ps>pGzYh3m_Q_z~B|ywV2~n-l+&X%V zZD^ChB@3RUyn&`hBx6`E0?o}?gGXKUE{-t&27mHr`4Z)7OI$68AFvZvO92~BO+fj z?Y*r!4rhtyOsSmAqriU$d~x}%6KYS{Mlpn@>xSTF>RrN~>9o_|Uu;cik|H{|b}1*6 zOQK6{CLjd~*vptYW-}?Nk;$lIc9U{Ipza#NnugQMVZ8Gv9>5}{XDVCJSWbC^QdY5U zXFV-4_uCb;xfeNc7^y-Y$QBTeC-Ks^A4TQGGgvxu6k5oSII&o4UJ3B?aETR=n_B3; zqEN-9v|3^kGvx|~p?8}2)@T0)yY((!C{^(7=k`S1oi{%(E@mb|;n}=8dyDI@AN5}> zr3gRau1lVeZ;U(cyb(9tcngBD2wIgIp84)ma2p0rEiYkZaRJF(Mglz&&ms~}Nnp4+ znX~L(qD5(&fuhG!Lf#Gxj$f%2M#Gq9t0Ea=cXwCLS2C2qY<2;eY;iv@2t@3SblDTJ z$H*n42nJl@#>D4Ir9$>Bu1FfO~1xs!k^2hCT6rExWG z2uB0jIv)DYNAZO}{w9{=MG&UWj6stBUaNx(rJBgw6DmUGi+J2ZA{B%;=z=-&U@}zr z6IxC&{}94VzL7l-rh~n51e>RKB?k}hdYfS>g>0&= z(=W&rWI~HF8pd$bKSZ+8xkF1MH|xRkRdq6HO=L{Q$V zi%$r*!g3&82BOs7(p)H}G`!~3uftnke-GN1o|D_l&4bN`)f18fHW+l!Z#A)XX&shn zVfDl@gmSZ}l*_2Uco9p7mk~R@ifExAP5*GvRl5VhPz2zncr`cbZXej?F}q2Ic5@0A z#`^iE@Y0z_u~pS^Zo7h~uk~el#t|%e;FGa#+p9VJmIKi*`F*7PR?|ih$NQ9^4J_TadquHzVJ`~1MWs0r&o?6na{%;A!mce_bCB4GB8+Ku>7G& zLAOguQ?F9?uqaxs0D&ZuF=I5E6|8Mt5g$H6Qj(Db^0|2=6M6UpVOu<}EhShm7(gMP zMJ}6^vX-h?95)WSTmTvvQSdtu6Xf7mL_ClE-4g@Kny&%zfw19mlDQeBkib+Fr4-snQT!4DXFf@7zc_X z&e&JN$^N>1Xoy`WJLMD)JL#)zlsQG>sJ2{dqS0gzqKHkBU8ssNwPhETarlH@OP_3m zJ=1t32m#)_)Bt9gL4E=WJ?yn&{(yX+`E&rOXdLf<|9^nLvIf0X6QOJ__*@>PYb2#7 zN5)hOY&6l_-NvLjL^=_{%I&9-SUC>=?5q&OTw@EvUKWG{l@ju?JEYlEr{A zHF&5=YxeQf*FP(en9HRazWU@Eu5}Fb`pl|?(eP5?pEh4c-bWiq>G1ejs_~NZTC#gF zpyR#2{&RTmPyPx5psv$M%pch^>5~yIUwj%5{^MVu7>WqB)gOr>mPjL`|_MD$8>!l(m1(H z8Z)_+Vi!&bt0C;XFJ*9_&QKcNx4g0h<)rQQLGKVfbAUud!)so#gcGNZA~ZV# z*EooFtBl83yLDBIJUA3tk2f zfsWP)-ar(+UJYly{P*ImeQvLW2hY@SX{RZpY916;uLd*0%a8|ZI(V>@Rf7+Y01f>5Qkk?>DY1qsThND{6QxRR4_7v>pxvy)A5<<)g)G^7Ia!)oCdp=9DWziJuw;vL zCa&x*%ptVNP>e$LpROcd(cW*tvnToX^|-}~6lVP^Hc(5!@5!gB(pdIdIb%8qNO ze;xn&sXxQH=c-~G<=osd{*=_uK0*QO9N2|A)b@s4#*a!Co+W~F@b`BZ`x#%EZ93y% z6@bq4?O@Wx?=6t^u_b}A*Jz{G?t@@8PTg4ci3y{ODV2zrlv1*9@hHzZPTgo*>sB!7 z&Y-7Y-gH=kDN2PdF2ZQ<>+xeQq0}?Fx*LD;+aJWFvMG2apUWlFrD%+}A^rdhlXed~ zS2hq0g^=Jla`_ZNSwNU3?-N0f>a{JQsCulR$}|@3;plEmp zg~FUn6nG8@z*^tf!J{v&qdBPIqyO!fF@Nj4h z4C7!3W;g(=XNpR=-rhmHkb|Fx!^JEW#F%tnP8df6Sd$@Q#iJNR+<5%Y{s6IP5>H>g zfETW{aDID;J~!Tjkt(6-B;k}#_Nba~r^CUP%Za_0KEmlYeGfkN`=3A}l(R1?dkd=a zwgi|gO2-{M`sKez=h_8CQ?p2?(@5lU2u9NI`Dr6&pxbMr(P*I49>^ubQ7;3A!5|h1 zk}-7Ale)Zl8J%_$v2X;bcpSOpEJ6{Ip1d$eCR%+8+ZhrV#7ZR-5qNzbjE#Y8zYR9> z`bYwUb^{Cy=bUJt`mGMSFK$|xzxl%=hv{lv4wZN?+(26r~d#Giqq6RXRQgq6L<)50cI3N4sXZG#wWDDCeQjMBz%+z%0v){(^K~K~)N&TaI zEBGc=J3Z`B>8{mBtcoaU% zL^_c|I2VT&45HiaB6Vm6o`eq?m#g6vLeT^!zOcyAaG}Mel`j%Pq_`-ArAPkeBQRS% zJhffHrH!7bqHNYDXmb$2s(zmZd?09{-amVoAVURBh8Mr^`@f0z{?G$ziYb}d*@Ybh z2IGS?*bC2p3s)ceiXdt;nGDi1dC3?I;>nnBj|S?L&g}FAph@@t^c60)##k?JhZj+pEg&?ewQ(JpXj}|Gy8I=Y zLvhS}>V-{Q+v#ED=or8DpMDbQg&&1Ao&nq;fRZXAuEu37%Zc-NWMmRoSrf>y~}2ttZNjsoLzI z+8T)BU9CYQcJ5qwpv8J-pF_^yg)n`NxuqPmRM}-rR95l2EJUM0=z~80s@$|3J9>Cy zk?iKzkPf>+{?Erg_)Az!`rtcyi`d+m6l2DVs>obPU$dO-dxWJ&=ir!O`F7nq|O0mb_d&ViD)@yHCMxz2_ z`wCqB4tDxo{PAc10b0w4AA09IaN{fPL@b(>d%s#+L*wkj(6%ni;)-yA?VTPTzqoAA1Q0W&M6N*!F0&xH;vT;79+An<_$}Oi z+s*j7dvC*-BG5P9j&$L$?033bYq<3ELujvEfxm6RXGRc+#R0F0cp`#WegOuR+OrY( z(rH-K6gCDh`+a+Vq!6~!pN)sm!V!dK79c3}PzGyH`~$xE`7hyLUuYr{3}L(0KyyMZ z%n2ss#uFH6mr~9!Lyf!{6huLhOEtmj_uY<9{+CZ89LU+(Lgf_)B+4(8V6jW8N^K2i zzxq$ITw{-sOlRQ_$KmybFdh%l>9$14oElQxgRzu42n;2K#K55U2Lpq6r(85Hyq9!p z7XCmAE|*uBr<_VLppwZ1=4aE$&>+dHP!~k;aw*M;Br`gp=^?+peV69kv@B8^2aPS% z≺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 literal 0 HcmV?d00001 diff --git a/src/static/login.png b/src/static/login.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc9c2f920afaeec0e39f0c6f6b55d3bca862347 GIT binary patch literal 55166 zcmbSy2Ut_Vwr&s<5CsJVlqS-Vj?#+)QUger-a&d#=%7-i_YNW*q}LD#U7CRO8ahNm ziHM<>m*6?~-S6G|-Fwd4-^b2mGizqeTK{UZC*f~Ynd>a4&+*Od5Q3n8UnE`+s zg9NuQPwu2A&tX0uxxaqvuHj_m4mNeQ1iZ3vGP8W5;9zQPscva%;pNhADTbi}*=W9X zf2#}>F?Vv{GR5}c@^o;Z5+j)qM&V0pV(N4Kh=4m%%kiq zZTZed-rLnu!&^nu+}qAv*y5?A#1k=35zGJ%mhPrcJRR&E-9$XapI(nEf@xzPb3c7@ z-NoHb{OMn&-YUO&BJJdA`Q!zc0H--Gzt9swVJ_Ym!a{t{IiB$G@CtDA2y^p3=j7oP z;Sm<$;eGOt>nUb7R|_i2WMsF{}|ZO z?H_`|h>Y9Q)R~)?i-+660lTj2-fr&dmj9QH|F*ZArkArNx4Na9lZUH0MjuuT|0Kr9 z?th*L+Y!T!h^ng%Mk%KDGEU|m4wjDY3NqqPG5_JRu(1%~6E?N7;(0E}X~}D8&MENX zxd5k-m9P*eAHT5abACP^Gjl7me~$Ct(en!nNj;Ypk{0BBEy&CJT3U!tP(X^Gk5^iV zM@r~5FW*0D6&&5%O&!fG|2ek}X6}E`O8t+tBGRswrtVIznodsk|3tx?cTVn3Ztt9& zpGZq%wJ!LCRmaBB!U^oghE>zwRm)hq+JG!AWL=#co?OdW#OA-@;a^+-UwVuGU-@xk znBvBQA_E0=B^#y28mInx zCU=~)7#16RBlxwvECJ6G;U}H(QTKeZTB|sqwNMVdL%v%6+5<6F9W5(b#FYV`s+FZ- z^RqJcGUVCp?iOOJ2-+;Vt+{!!A&dz4Lvj^LcNM9QB)p0B0loXa+7}2_EhimnBJ6iL zSMHL_gTOUxdpV4jks24<>Xqfe!F;^Dz5_lGVxRrJ-veUX)P{xio2=ND5WDR4lfTac zO>SVG{k;S5$gmy$-k+pm+d|Dd3k|%y-@aZPDa|)pj_)t0I*SQ0w>V<{K<`+n$&3W+ z;&@HE@vxmcuI~gGF9-lcbBQ(@|0G2Sxna6flSSkA2Ca2ssewYYMbY>F%S3;t`^OOf zd7!_;{ax38vpNesyXfl`TYNuVLW~I{F1TYM zN&)~(n^tuFzi8$o#sTc8$j;VkmgRdZX%vj*pSrC|a7q6%rwkr(%QHInc1i9H;2T9& z%Z;~+!@k$?{Fd}GZf>I}Pe>68}GQQLYy+N@Ge&I7t zw3Vp*Fz_Mh2G&w31My!08$5T0zjPotEZSF(_?}>-zb*sxP1V?|160MF*k04XV5IEWJ0dPGwj$ab}Azh%{0xlc$`hJ-9!f zbJ$yY;x+By;=TEEu8in@VVW2Rf4VsW(6&ibku{U@&ZwM5QbEdz!Ozm#48~31e3}GQ zJgi2uQ{jt|cZraEJ=d^bFBIfLLkp|?#w$Fu_DYKjKq0MoBj!co0yL#~8s_~a+nY~A zRXnLwr^VMyv;d4^wB?($Z7yony3A<13{LRnx|+_p_(m0=tVRi)KSh7lJP1}N*-Jr| zjc`uXj*uf~D>sl4#(Ks0B;T}1mFCLo=Fdo2CvPsF-v*@FefaXZ!_eh7CG3pU?LUy$-++jY}q|mUzmq3>}&MPo6m--I^!$$VNG6MN(r7#mq;1-~hG|)rAAjc+Mwxep5eC+>jORyt zRkWttqG?bqMT=+IKFIJCmpSo=q|{4?4&dGS1MYPsH~{tjbXktJc=o<5SN?^fsQ(sI zJYnEL&qLC7-2@w+1O|uCtTgkI7g;gID1Q_~gGTr`)BE4}Fq8}0`s#Zg^6CP9hBWqD zhS8`Azw;SbaF;1`$H8JeJP!K3#`FBgZ>bWet0_?=ep&Pm8Ml(x)8R0@@2IQn-U%Pr zTJ~vC8`=XMt|}q+^C;!8;gQZ#9NGRiX92tyOA zwm(W}KUtIf9dx>0v{!6=I*FJ>*9-T#zp@z_t0<_U1l$99+tBo9SAJ*#zDn<)3ZYhE)9xUg{yo^u6jQCSf_|VIg9Liub4!_9XL+3 zQSW!S=`G&{toCMWqRuLOti4RXg?xT65lpG~aAXxyf}$aj#Z^3p{c%?%lS=$Cnx z9DMENie_@~s1&H;8lF118fWm*+8w;P?ssdJR>W34UuMr+ z30;1*!;(|Oz}zm7UoM}KHZ){3aAt*Zw+Q#Uhdnwv`MfV^)`|#-5#y-9qjKT=R=`W3(6)*-l6xFnJTtE%lOjKWz<2 zI3C^nIa|b3XC)vT?e_ z`wQ$K3p@$->lH_@lXZnYun{E{+HmL-cs%FZFZ=7-TtAwB3HV)M<0xAD3a;9w2Zua947%u%)GZD;oHy2?yZk9FlAH%&eTLoxFK8`YiN};o z!>ssznj4Qqo-SQZrQk17@@js<4J12yQRs>zM8&6N{qDf4#Q!(9XhZKuliX--(M9|9n1pB>6@);9T$G zI7Y&BzT+NjgA+W_7%)hK-d8n>X@KLlS38T~I!mzBy&rk^+u60(m!Jl=LU)mXm|Qvu zMi4Nu$V}y(qbA*$N3z61rH^4KFZ&;@AkvC;EFO8dL>__Ir+t?Aze~N-6}xhiyvjU9 zTrK%!=aVsE34R;wDY6H)B1BP9n7OdA2qd0+cSbTprT(-Lb~Xx^?(ZyaL%SJks!@#4@&l-oPGL{jqVC`Tjb;ye@An|U2_ z4xMys-mc@C9g&%vxmWCY8yiy@_%-pBX%T(_-bX5H+*flENb|N4`F_ZWCpz&OY zKbqSg@!oqdW3Lzt+dX_ZpC8qFqO5})&q<3Z+{HBr-72FwNaZoR0ib~Uqc-8e?jDh|62VBuH*PlL(Rew*?6f|b;T^Hcyd9=^78x>=S*yQUMc_FCVH z9HE@OW_*IC0DDI|Rm{y({OZW5EkANa$mq6L#fGq?RR%7$EXvFkY}q@^>aG+wE+!Gb zi2dkkx-Oi8xTJI-#wgXNomxD)|6VWNOb^2mDf%}{t$x4-zQmu{(Rd=p5eRUrnbXE? z>=01V^=FdnBGs804}f}6*$+BBJqk#zXG&3&+Txw31!R8Q&m;_O9%|ZhQDK7+y8s)! z?nL)*(URQ3gwXVbQ#)hN+&9LjuEVcdFdvE)*?tvoR9nSbJ?5#*B*`*=dPHpV^nMgr z{SdBQ#E&w`DC)L9_8TrAECGwrB0#`*3@HxN2eTTY_NB)qBi|?3vQ&9nR3-V#KJ>Th zH?|tikvKSY`#r}p`Hn&VN&>iX1AwwrU64pUAEjuT_uINeQ&7m+_yC-_FgRWoKm56? z8gA^BY-5nJH)w1~U9gMO4iSP*f;6pGJ)MEh`ry30P`l zo|#0$L4alDnt5aDy(N}ZgXYlbjotahplCuYZrd|doR)-Jva64e$A&=fa5XUE$7bP_ zQfl{9a7-vD8ozZL%rtzT|E|BDYH+xZDRO8wMSxU~Uh_ceZVGbntYXq(&%JkoLXC$? zXKM>Rm?AP07voJZ^}_#BSNzwaF)(jX2$Kv3uiOhfB*Lc8LJbtg96|)2FRru1=rRuB zTbOoxiCNTts_uTaolZ-f8K5r}h_MxUAj8Syza>XB*SMbB18n6&{qWx|LIUrSW7k0a zuaz$r)HeW>l~)@9-gog$UtV2Y9kWp50VwTwOfmInd%vXZ2lz) zIlDg!1pvNn2OOtyyW9f+DBk}&W!V3p45(?&{%$b%^Q_zh1Rh9UeShY3Q6I482E z>BPQCA6}g?KuBxB2)ifY?2f5sm+h$!+`mB{^xC)8Ndgdo|K1wIS6Bf;L?XhQN1Fzp z*6NMt=mOo^F|r zxJPstlfk<6MI!D+fApDPi@+MdsA(E@dg!oxLQ&jut#yK|E(FHbe8;H@soRN;zD=t} zW4siW%zAUsxYZBw%QA)qnN(>aGF{-kp|Pc62ZWt-U}obhXLBK37TfU_nP*B31GlY3 zpIWzF1hTB&Xg$jUgY0~a*+8~!27@@6xR|}8cAsCL7i=o7po{);qmnJ(Uvi9GIQZ?J zbT)`zTcmBym6ZQ>rQfP$_~}$*&D8o>pBvZ61@9a+*6^2s;s=l(72~VcfWvIFAM38~ zt};=pwK>MlPjIlTI^>jzgh!ko`Y5&>zDV<)7OlW~_bjKjnvoL+1^qK>48Ism{Fqid z|HBXUcyI-mJPK>}NpVSV17q?O$z#8moj;UgQy{|5Yw_|QRxjnC{-9$d(u?UXkLWgD zW(#{oZ$Koh^#6u}>JdNx3ZwH=$AXVbhvhm*KNO^^LrmlM0&I64lu>iEI;}K61pp9Z z@G8XMUFF(}y7~e1L$yKXzibAe&gitbTTCWcu40D~!d~0@g@+LMB)){Z_}h#PJ>q3* zY%mm;I1Pt*|8j1GT-lUP7@v;HO>V<@*8;N%y|@Ctc&m)NH}-mYI!uh`P%>9NPAO#Hw9HaKd5A4^NInt=CY-;_Id|%47@Ogj;Y}O zT#}4T5OMFp7>??YeV0je0hupYSb*80Uc^PXL8Q9+zdMSo^Bj(@B@^fIV_>X!>AW2O zqnNf{mP5c#d|EZh{k#}8#p9qpH>Qy^G4R$)o$pJh0koyQ?W7%;X%HX6M*zbic!V#O zVcWW;ljC$5B`D9{Buq{alJ*JR;FM7+2)pcO|Fxh)cm4}FT13ra^BU!kNP;J9F1D`B zP0&fyzQJUr29~owc4+}BbQrfe%$j=V%yY~OSX#TzePzsDGHc&7oa62uupUaQbu}4q z8RXsDXj~G6lemu;kA%b`WU@2pE)HUdA1mhHy+As(Jb%YJD+k37G&k+WYoBHPv_hvb z^+4=Os>FXoaIcK+j3fm9e1Ec1aWdwrFAs@-xgd_tEwV;3V0f?etzQlo`=A4Rs)h2M zPx3wzt(X|3T^bP=wUItTQF$PuY5k!1*py*s;uRH$J>@R5h6Bny;5d&Tjj^u@Fl^iQ zSB}0&=hb1G%QURt?95uC@lC*akAWY0wlm}lK8fOs94akmYhRWcS()q+A51>cJxGfF zRHTl+TRF6I&|Jww>bu;f_3P{05Azr%AKN2<^R12`N+~% z=|h%}hyBo{I)zB8tBK3KEqQ$1y}7}8`t$E265#j|^wRk@w`5uln&?VIr|mR@#9mZ! z+_VzH7d3dNshSl)O=brKWG2y<(cI)i%TB#t4_0sc6=AG1;ui(spNXz}Xv5D}>f-Uj z*Zb{yWb!o#Svh}Wgt;dhO4@crM~ObT>Qw@9-!`GKVHnfSA6kHl?#LUFbqfz)`(eeC z&K*l*{Mp?zTV!YW!p$paz}5Cgdsx^3ql5HZ7-oDy=^gSVrd=^(j8$N5J&zGy*OM(` z$7jpeZ-9UB4726obaft~Ioe5TL)PG+=^!&V2osn{1gUUbSBdxaIS!9zYARn7u(;}+ zJ6*L>Ow#$iKY8w)&nb^B6n8E9{N51H4qrPGY4;h|+D2uBMQcAp%=7VPT8ZaK)OlwF z(inD?jvKI&e^*{VR)Bt2dafTE$wIUkm)+K?#WBiVIO(olNDO!EdFaI|lQU!X` zl^2`1=nYealooO&2OEqfQHqp_LN*{Scyxqr=+5{CP~-Yr^Mh)m4gd8I3*m z)wfg4U1xjO4EjTYNbendplDs+x!D?G^71?9i*9-xiKjf1M>-L$guU+1uJMIJe{n|?Nh6^fVYc$Q) zlPFz75ak-9R;9!RutMUpA98w5$9Y)ef{60Z4z^Re_GDz}U(K4j$;IX|$x6M4ZaKy? zf{)a^;DT02kEPfWr_x19v}S1-o1DLYX`^)x=Z+C$&ea;S+&d>GpRuxz#-j^oT#la7K_m;*ask0I>Buyc;HdVo^%# z*Ilj~hcu3?xFaq5%A(gjjTAlRmj^qn$5j8mHcPPINiE3pm;*HTZX;vL-^`XCvn#cg zz{WFcP_pHoN#nb9Z_qt=UJR|{NVrS=?t#P7Z=bAr)Mnw6-2?!`h=t-FB}GF+n==sc8jIt{9)58| zPCFT+oY7Q#5E=-4gcqoSO(olH$HFs5qS96B{gi$JS3@ikWNf5=e_I7zucKVSnr~ri zn9rfetNPZ>42-FqNDTlIWUsR%+ys?E_|bYU5nBS1BV8M%G4;hjZ1zEQEL)(k>2=oO z92xs1(vUm0(6PEDD3Q@)99Cz=*&!S^%I}r1rE6(wPZ`&<^Sa|X=k;XrB42l*>wnZq zXh@Acf?^9xQi@E;Zv1K3Ny7>F&8%Jyqz+4#L_8<4YL^jOJpl`42 zPDUz7_}b0G?q^aB$@>#yGO&N7>~bkC1c1npk}EeK@8X=E$c;e2wHJuk3Cp;D!Ersq za#h`;_?SW;|POsnBGpNAQ^Hap)FQzLi zfglXC!_2A91ORG1!Pp?dX*I#!L=(yCM|asib!wN6xx6gCOku3(s`NnPXUQ5notq2X z?XyxN^S@(3>)0mjI>#nLJ>#>8T)3t3}1 ziJ+j3K+@0@i``^)k?(gR{D*7oVV{3s1i_^#FT|x;FQ>hZA~jlQraS_lz({S8=5Nj)tN7 zp!nn1Dy~!x$q?;*ktB7G>B=TFZ{fq()z}GQ?r@T4S|;PlGF#CtL2DQ^W6G0;iQ5bw z_^_?FhzJ8nM*`B^-&>nT5jYF1{?zr}uc;2%Ql#{r{_-yU1;K~Nz(nRonm;wbGD((F!y7Yoia5P)8RzUIlI85D_;6jxvBwWb z)lz?w6A=^Xm$E*Q>`i}9khdBa^X|Fq$#0XITg=8YBSdy@&aKZ{%+r^8gTRx#yrXUX zH!fYZFY0fzXi+LyB6ZN(R%sW|pd`&sqfR3TAdsJcdBFvDSPN0#x>~XRfi4BQ%w*(9G0Ww&q@gI{vm=xNe3)oQf5wX2-EIj+56pVz#Niw!KF z$6a>k9Sj;p2g-@twswtrBf8Gcwh9mYQba2uG&nXl!k*3R*A3u+QNuY)M$~7=;=lmn zNP%$o$+q;GZc^Za$ODQuHJX!2u+`C6&%3IWHoRGJ{G|an*g)bq>N063u{d4*XIt1{ z#BBo{R)pWfK)YOhda>h;$2?z+V1KD|Vl zeqhD(NrB=CB1Dp{7Hve%h$kMC>BVg<+9kA9J z-pZZ0-D|Z+75byP&RHUzvoHgFw_-`D5^TBt+}rQRgyZ*TcwwGFT_I7Ok~HD_I5l63 ze3Y5Vs5BRfBXTw^1)G7Qk{=DFDm|009gX1DfPnZ^llAQM$q}7X<^GTI620F}2Pd5s z=FS?v>FO}kIB1QJ^MwARsayvCrLRsuleffs>zVN*3;df6-WrcJN_5|RWf%kMq0$*R zV9#ULO_t3NVJ_8z07K91ZrSHx<4+(F0h4lH718>3P3wi-8;i%WXJD{gYhOn2_EQcE zlmuudAGamn8X#H5e!Lh!J%8|Dj{fJTCGr3HhY(@YBSG>JGlTAst%^cp$J3Mm#`0Sg1#neSkXhvu}kKZ#R7E(ccL3Q=RJ+-I5 zk&xto#tcDidgj4MpJ5+RN|7Q3z{IH|Xc)k=xoqk!2rauB+GAe?_Kx{W#xWDf6F5hx ztcorluJJv6T43dtXI0zt$yPUf_w$^J)94YI0KGiR_6U=nlNxZE@@Pv|@}U5k9#qWkpBXnf}2$APzaSsKCv(;#2p7 zw?=^cN>`CM^zdni8K3el*8$%bZP{HWj(lT^on{}*0U4|y89z^K^R2JB3NBPAIN>KV zx^SbO-ex>8TagOqlV}QZPEdce-I9>3Cuo!;^Kf>DAPhK^P+|-+ejuo*p8nNVPQfnD zPt1D^t_7o#QIzb&qfR-IeSSDX@A^&bPH={ z8Wu(U$0|lYC;CO=dVC$_6kVbBzf?!W7t|!v+>1;4UbrQnEX!H08h7_$*BX?BWYo|C z-F_+6e;KpuI@!3#Bj*!(BE%@^d;G(H2Z=0Q{LCAas7+|9P6${w_|Ts_pqxGSAW9l@ ze64pkT44!MhkClbI5KJa%p-5NFvN0YDqNnRf7iWy0rlPJG>*7!8{B*j?S=aG8Ukl` z=Wk|rUr=tyA141OB6B9zxjY1H^Vvh~VL4~DHgifg2H_@DigVlYiiF<^-M7^()*a34 zp-F+OQVOg(yD6~2k1782Eh?IQoTicw%BQ22gInLme|%0>A^i6=ow@4__IyPZf+CC8 zUk6%HKAfS_L%%3m&#_(F8tPM?s=g-RGX=5%ka<-tH~ z8)+^5XI?&h0OFI$jRh`{{dr_n^-5`p`pVjFaOXEpE&)fJvvcp2E61I_a5d8j%hw9p z%VCv-<^xmTBKKE4y$<+Ew-32?7uLTy-m~@f5OVnbDJ5m`v>qRus!~kgk5gUhPM?Lb z!WTAnRc4WU8c#JEEMEDj4LdyPM+9?kJe~?=RIAFZApdq)^8-dhQ7%Zx!k0AYcrS;N zZmynWzJMk;E=B727^(JD>iRX)LKtt^^v%=)8~!18&PE)w6_f~+W_E4#KBS(S+oI^x z!*4Q&6LF0^w(7~2br9>^8ig;+lNpSO90`0=&8JOUEzHH7cd+^C$It}F{)wi1TVHG4 zscgXj5YgyvGg;emlh+*z&z-mZCI$ZQO(Dt@86jJrcsS18%O|w9$10kn!fUPBNut+NJ46S2#%X))6abxNA!4Z(Iffjz{{}+8WdlK_I}_MfhkVR z?>UXl!0%|LmnJr86KTY-7H)L6s*vgg6Jza)rwSGq&+}Rd^p1O=Q)TkDQ~8fk4RxVN zSa%LWR)v6xGKS|9MQHrgyBtE%UMN~q*J{Ed9%5stfb3FMYxEQBeCm(`BEDXn`-Bv0 z+6cmtJ07V#6_a1GgZ|OD$=FErq4v2JGult2)X8+cIgc?{ym4A4Ns9+;r^5Jo8;J_f zo??hp_ipmO>CA((O!`q_DcC{_VVmS25G`DwGFfO|GlZ(yO3fVK7iu)Gshc%LtbzP} z(`QZYix|R1dw%Oc4(y)U&9do7ct1`llSqUN{rm)5g3Nl%OH>G;VeZNZu2X~Gw`Iw@ zb#m}JMH^LPfEt0x=d6kM2P-!e%#K9E zjrnV)*fsa#V=PI}Eq56AZ&pVw1y6lY8Y_)uyG77_i2n zpB(yE8F4-QnqVcaIJ4F4-`<>4U((g{?UPU_MVcxL+HOz==k;vx{`53I)p@PG*`W1N z($ckit(_vK_b%aQw3D`q2(_(db?9Y_Ol%5pAFoY!9{(ObZJO&1XB#g~0yV&hfUF%` zA^ud`c^(EJ8Yqn)hkhPwM9%_OV2;Wl(g8W;svxw&gMG`|ROdWa-Z#lH%sKfH|Dbej zy)dQk2E6cbijANDxzNf8NDfS=2RzHDcqD9^kB6XqIDq$zMm5*nvca;{;%z8j z+$Tc?f-{-xQ;Za2He>W0npsS<4_tUh;D!t80`fpZLJhbPHJuJhPp4sIC;@d5`htNa zh%~c7s2y5mx>F}N{U;;p!3LUsyfKmuSqdUmWZW@UE&^$MJFdSC5K1wrQC414zJe*M zeO5lRbU2{gcpp7b*gUN-*8L5G>Pu5|VP@RAxE~0kv+xaaKh)jcZh1MD(IMP4Ey;41 zHtn$oJ+2Io{j1AK2wp!rr0@4DC`Y1*G(6IM*~W(@m|cGT~3zy`a_M?WkQtc0*_HIDgG45GUV8}a$`9o!ujnp3jG?rH{#{2J42|Dak zZWWqChRlEBidRCN`f4#GBDCfr%+d~f_4}!exaS<_RVQl8{|1>Y+7TZ zycJT(4PbZpJ6WT3TZzF*AbG<)o5Al%vLxlg1~N_AjMzUHmwuAl%BWwD^Yn>=-)l@! zEbC8e~BBd0%&`-qo+96hQtM8qCX7e%Jee0eareO&78XJlvy3ErLD7Al#}U^7O}C((m4 zUOYA$!TOCuI^e2$tBVJRZkY>Dbx_YqCU2s!IV>BMetn&dH31Un998CSq8_E$xhyEE?L`AIA5M^ zZM)?rS@}R`n^hFFsIQ;#9K_#H z_sAh2*~4dbVcpHs@m-~u;M%D$C2vQ6SXW;uQ7rsBe1wTxv5`fA%ZX3VOqBf_x9_CB z@h?E6SWfCG<9(#&%yczJSWK?~Q)b`xQdEAj(tC?Yny3Sx3SespHw@xFZocR@yqcj6 zP@(9+Vqi;@+zCXV>Q?Alj2T%s8=Ja&Eez z^4rG14Jv2_M`R|jP$MZnoIPU0gjA&7BaX-joKR9XOqSIRszCHiY{xRF^@1o^!z&F>>&ctUKY7Mh~AMRZy0PF zs<74)O4A8Y(X_#!QPeeje&2ALQ&5{B5U|#&w1PQ5<@RN7qQZY@0FqmGpRp2Vq3zc% zqs-Sh`epB{V4k$^a?#j=qvRvmS}Z&l-hPQ%I{q=z$5)YG85#K<0WsXMJz{3NkiciI zrmBYchcvu;?ZBUsMnvnZ$P#iHN2Xu)B`y8oK(Mj#NU57lMLbl)Sn(~l^2Jug`}V5U z3~6|Yf#9rDNc{&aRL!oslyL~aGYgMNjc<6aTynf;92zUl8QWRd`yDp_a#VY7&Q_7) z=KJ?#BBIZ2EVfV; z9!`@-Of8sX&BWSt`mo2WV$-cHS|$nfQHH{RRPv|VTyT}?xC~U`i^{|%@JpTqF$LE$ zo_F)*3o352Y0!J)3P4W{I3{=b_ z6gS%jYk{-z_v5|m^1a>28r7j8-K=m(9~%@6%^KT4WhO5$;c{(ek|D@_97ikIjn(=d z*Ns((#$~Nn7M2VYhD)l-P}SK^LehB0RP2hM7iVNc)lBEgfYutYr=|$EFRu!_Ih$=p zBF6`FrbP;KY0catw^62agEKEA*j*52(8b;djyY^;MuC*rr)e@+RjOlcxhJk-`Modp{sRvxomN~0( zYrW`~TjhzR*Q+(Y4}{<_=VIayysujc;G4lUgwI?BHA3KqJaOFeDIyene6CmiGxdgh zpnk`Z%j$Kv0Z+Y`V)jnRi05f|LiihV{(5Bc@y!fx6ASkiY?8ESCQEiHN34U{cWC7b znp0GECb%A9ej>P63YhzBmX4Z7vN9`swC9a^R5s0y_q#ie9gpI{Gr>yZx=L$w43|lr z&u2F76sBA{?m%W#bI^9)o%&7t4=!QnZ-0M0xxedvW-Ka3=JArXYsAoR#A}ot2c9KB zuDVhipsirY(GyJVRb^IUSU;$gqO1}5QT@U5W`>u{3pNK=$;WCJ^=+jBL1YH9nAd2_ zZ=@8KHg8O3CUyl6`bXnYBpm-*9lT7AK>E$5-}oV6b2MF!ADI2q3>5_3dbwx7pdn2s z7Tc=Acb44Od8|Hf^Cg#o^FmHoF3l6qR7Nl$`D0pzblAf2R`#Q6yk@$sWg_DEAQ8PW&uW#GL(3RKOsEJU>F@o6i8!b_Qn4Uu! znM`w=+qv}=1Y-@wX=!#aD)2pA z(tR2RXfl+8y?Z#3%1wTFOI}x{G{9q9#ezXr1G6bze9tUBc-)(@Z4mkSK@9QNOFd)8 zCkiPl3;SIICo>O%X%bmeWHB2%B6&LgInp_mXE0+iq*~0_5#9^%chV$F8yeZp4C0X% z?)#4dsE&L<(xH&i5duub@X_GODeCD9@JhNGDa532Z`V~$Y4H<#CS|=?;-Waj?TD}) zM02tS>74OksZnY<+$PG`U}s<)d*xv`YBeE{NG}=Xh63eSN8lD8CYE{DNlzUHt0nEd z3lnX#6Ma~5CJtr53l&kVe4O@9wFgPUxuVAytSuF2NUOHL{Z>1YXEyF(TYDP{@#HgB zTICETs^jQz-LvrSW=Q8ek$!6P3zGNw&Teg%D__bRHi`)TWc?sy0XWW^DqGgIkF1d( zvK1ZzD=I2Vi8m)OTT&6F=0@bL(3Bi?%I(Dmw;5h~#ZA-vcK*m3lyF&354TYq(yW{^ zLlt)gL=t;0y`VQ*YC@*pFDwlQ zQ=QtAg-b}u`bMcEgblCo=msue{x;3nj};()BYhbgT(%rks+xVOVrA>}H8or1WJWY~ z1wr&`;5f=kNs>va2eI_U{$|3jlcC2M`49U}<*MLwcg#;mE<(kOD~YMCEZ;<3i6>_5 zL5+gf9$eCrkA)t&yj1XEcl7wk`ReAA)a6);UcPi6gPa||`tmVDMyALhQFlw5bA;VA zJ&!+o>ew?;+|bOYfaO0g5TtAD&S_O4-BVNbh^M+s%sG5%z@5Yj87O=;uTv3v`QX{K z<-#AZjfd+R^v~rPD-N_7!Csc{bDucG8!^^?nh{!QvVA-gB?Da@g zd{bQfti9C|R8&Es_3e1pAEmR6@ZobQO}{#*Ghp~xCgzCJI3K&sUgxKbDJIK-$_Y3W ztfhDJf&K+HA9y=Z3Oy3f*a3Y6B8%)jKI-`@$NyNBeRCeBkzD%x+=qZ=K@-=2N4Rl# zp^)OJz{99fcy{+HmC|?-4)?pgSt?+CIF$>qlL zd$9mtMHhO96EQ*z*SR9#UH&&3C{?ype-=WhLr6OTRVl>wbzMHbz4H|g2^YZp{9nF~ zlKxsZC9Hk z=XCH29mTe;#2m^}%eOtVE`J_^dW-d?goxAjdBdb%gKxhT4Mf&Q9It)2Q#QcJUxu-5 zgFE`d&ze2IQGi5m4jL_x`5@#MH~q!KTO$z9*pO43jeaa|LYi@?Wql=xz?~aIaQU?P ztpYHxu*Tjih{2tBZP@I{O8Ei|Uld>5y}c+N8q!OU@wlPPqTkDX1vLQ1)mi8e-*nGa zLOlRaFLVcxOuyC->fp{!xu58%`5IK9N;(dmVgf#lD3YY}7AL_NH>(HgvB3D_NJAyQ z93|GY+4~93p{xspHPV~kLgQf(sq~ou%F-g%qDQrx2HL2cA_JW0djy|OTgQT%H4J47 zq*>3v-QyLfor+5%Rqoo`3n#=xWxJap%)VELn<4PwpX&0fvl6z_^A85}l3=9>J)K>) zps4Ofd^W?ZpP;HOZG8P{^3xl9FL_ofzR%LeG?Dv)7t1)PIe`!5trR&+O=|iOXtP6} z;HTLQlRg{70qgmA3zsyzAu9AGrytR8-AYbX72PQsE)MzL&e)DZVdTsqp*u8`8p+?yMdU=;vvMZ;G6p zdL&MMmOr52jxNaP@qGjjse2xDO?KC)!Ly5XqNE|%Fh*giIRhqz>$;Q9_I3bY%~-rV zb3QhcSyz1MSvK-v1ym_FkSRiiPt0Q3=K40|9xM~gj`__?x_?QI z8B#?{8K39D8tWjW?PQg_N6CZ9D?&7~jQnZn5vgN7pXssB(x0!eVDxUBji8pmqGby= zaIe)3NpavbP~{$fR+$Dzl>1*=IE+h$ph}n16NjEx7H282#(lWsr$G>-cKvh@H) zT*8KuIg?lUt^F^aC(=!M5MEk^p1cYA7FC?@vH!^HU8D8g-5YobALp&&W|*@aF6~od3YKzL&tg>;O%1ZSJvlk)AFazC+GqFz&?_ErxJ&AY zE30Psk{^;A-^^y%;P|W4;{j7LFyT~I+2FO(RMEtE!_JMaYeG>vO-!*N3g~G z`w|o{Wg6uxD)m9C8%FK+58n(;V3mR z*NO)~{eiB>&|`%ptN-$5kK=>4RwhjSbs{5{n4eK5>S-0VA=hf;G*S;L&sh~_WCS=s z(}xG!e(BmCL>t=?X!tkhilr@Ym-g~6DuqkDKX@ViRv%io!x=qUC(|`Q>r>qmWU!pH zoJo#W8CNgRlJ8efGkP1G$cWwrx#i?JC5$*TsPVb-$?yrM2=LYXawYEwD)Od_Dr#k| zcFJ~IB3uzTc;DDcRI9WG0&kPjH7tafJ01(UuzW|B3g;v>%q4$iVmqgK1#N1bt&R-A zF)^66=<%|d7d~;+n5h~GcjPolQPkUu_R!;YMP*-&PxxiAd2v-qdzV&DD!^e29!V8sThH8s~n9Kv_&lJ@Tzm|nm^UB-J#ij zUOR5PQ&@xMT4FonH|4&FZW6c6D)Y_NQbQl}l~C)nDnJ)BKhrO2!A@E}oJBrK&HSR= zg`5wHa}YTSO)Z)=OhpvBJ#_5qW>4hU(RY+qRHKySq=$*J2CzQVz1d#kzSE3=9sAnK z#aP1HfFpW|&qgwG&403kO0?NbbwX$EsNvAOMS{CuTN(IpIK@qeZ1fuM@@#($uQ`ii)Lq>aO{wU%Bw$jfXWW^q znEbt<=_8fL1`vuna64+D22Z8OK<}Hg{h}W?g!+7HQs!AWapMJp(<~=s$a$5Rq#n6& z?NW0M5%Av{mF&z#D!PK!WapC)M1+)H5}u*DcdJCrC?zDdzFq-3*7LbN8@iW184jJ< zPF6NkR-DrMQ3>`eoNrp}jx@Pw_8jvC`{$JyAou3C^!Y`TUe%Ky%Dpe4QV~kSp>!## zI6Hb%oOdR?578~OhNQFYIl6kLTGdK79$N5L4u4dCYxBi0nCW4uqstDjeVh4Y)Ual! z+iGXX!kfg#st8{K7E|TK=&3LA(wynCckcm-&&O!jc`b;G*h-1iMjzqqKk7)1Wz|;E=8+?<1`UB0k z*(TA35Gf7W)?7ks#Cq3H3Vy*Jm+x>ST7f{y@Skec>Xp8+l0>xxT)( z7uV)aqOR+#x2B|Nv$6yx0E{i5g!A&M>07JL!R^Nh=gj8(9TvKW$B~U^Ro?Oo-7bdZj>uJ^D5(y z_kHg21|exBNkIU+oP#%YxNh!{tfjNb@!b)P1zI|=W@8Wg*}L@LYKeN1$HbzfEavu~YC2>)6sZd-z2vgu;As#EV? zVD91)-p3mnxd)Yz5j!qo-^(b8?B`*+m!>@o;ct4ZxF-3k-*0w(ZSR!W2H`(n`x8%D zg_7&pyb32pYaf%a^Oq^YdXm0S*In32Pyujz+wL#Y{hGeT>+$HwZO*OrnZ4)JTIc@G zbg%HZcH#VdUi}OcHJwgahljoN2ik3X^EKFQ3To=9jG=m$3nsZ;r;?>^kFwN{yeNO& zU$sYD|0{&H4uZ+nBwT2}s9d*p<@L$G)c($ctEy6Os+AW_d0abH>Lf1pHgtrA^pZW? zqPT@E2V4{~_td!G*#|H?L&2!t6HD(&iD6p+w+JBHcEFaVq(nhv)u@O$@_8xz4sK!m z+y`OTHRxUd2kE|{!aa2`U)s%cvB=iFrB`aZe4(q^d|($-ZIfjx$j(EjQv-0~Wd z>EFt&Ny&<=Rn;p=;?Wa(3%BVjXjkD=7QWN0K``0&g_!8NEN*;Zh!?Mi`IqrUE_{Bt z*qIYL@q`^0AUBu!e!X47MD+t~nsZO$d#wIF=~q&rP(%;%o4 zE>V6*Ip>CtwXP?eJ8|Hf0!{Iq_UldiJ$s}dB<)p-Ib?qHMBd`SuUlIQ_>iLsB_NpW zbP=qlY56eHx0pSC0fq(Pr*a{QFMf+?!^99u?A?)4`!fA*s+X>v+<$(DBuO1FqTyx_XQB)*f?w;@+^hv8JFay7fZ%AJo8 zN?NC~MEf0#!$rTa)o5BLuN5b?)}0anxWzdt{&ROR`>H_FJqL}JOn*^k>30j^tGgpN zaHyLCeSengf7qrVZku5QMO-nTMZzX+~6WuM0c*@_ubC*+6ox@ zbb?7dbxTezOVcJy7}hnd4nS)@bh!Ot%8kbe0JaGu@%!!e6*)?>*zxO2rJ{NG@$VW& zPvX6%fI|h7RaNl%MjPY4(!y@QT(m^fje@HzNku*M!j#*Pkft=SdYVX}|L30(Ro3i06uu z!RQSp=QgC)-SDb=LF!BSp;mV(LzKB`J;tg{72{Hm>R8dl_|m;=Bz~krHuI9r6w@@Z zdzHwj(DlPy&1bp4=*!BHshb085?6Uk+J;VDWeu~sl1(^<_2`K|-Gucv+U+XVxAdK1lxKWvBCFqIG=jGpVcSQ*Z0GRq>63MX3P}Vt>&Tx6`)l z#yxidrRvz(JJ9|-T!zt=(x@cOI>*2CZ~j`4s8*Fp_uaa?Z4GeHMs=zl;D;F^4C>Q4 z9wvGL^luf+@64^)Yvy{5~;$vn54Rx>AEJl>|K)E6Gpjo zC9hxX=4KlsHXBlgDPDw5Q%p1BDWRoM znMu_2s%nrXsoSt#>Zi#9d9(KWGJZ%fIk^{1Unq$ed-pDAmu))AlldjUeWhKbW{QE%RnKO+hd@dV23Gu^2{1;tdk1#a$qm4G&aLF`N-0z*+Ii6B2L;h^{IjT<>!v&LdCyw}- zulia5r*n>7)gkE?52@FWsO9r39gWT6jTYlII3fInLM-j)Ca$EYH?BuK(=IZN=LpB6 zz2`}Lqfl2^r)tMlILS?3_sb@J{Zy8QQNHHu+-bxt?Wsc2CYYSeg|ja6YZtT2#ZeZv zmvvgN=iRD!{K5X|NaKYgp{Tn5EI=xoU}@jDk3ldwt$P7}S5cWRAfZG`*2&+)0&sU?)^35I?%qN2Q=+s!v0$?P z!k(ALPTR7J-E$X8TuDFeU*P4MyDIzdG{ha3RYeN`jO|=&de?`9H4xp`bE|WrHjl1i z%^5$M`WBZ_Ufw4noWrZ`!e$m0mqk;xAJ3>zSI(^Li0{n8Rtx zP{mC5JcQXg_{0HYRiFr?Q{7HT_iMu6`!2u)6<{2li|z)1-BFVD<%4zWl(H(A@Ooc9 zzxIW_?sH(L!bqVLS$h(l!)2y`PU+0yu;DpwyRCkfaW|0N#}dE(v~2cID_x0f*$2h8 zXD#bc{5A%D-3d1}2qvSsF!oLN3Gb!zo#)FNBgUOy9Sw|}z%Ly4?0dsPJlC>W0NDhy z`Fvr^0=xZ1^osQz!!CZ`ri0Pir=T-mx?5s&)#7*nYLLa_>-H5|H&v_qIq^D&zR%-^ z!*JKY?#IJ4-LRfV))%(VrR8NEb3MRy{>*O94>gs~6x*MZmfM?~Qg3wGYMXp+`uM`0>N(~(c=#bWN5C^fsz)%EqPwV|2)n&oXvHk_@7o7T1IxORg{ z{2aE1bJw(uQ+Qs1eT9=v;bPtAHVaM5R(bWfa|1p}8#CRl^o0%sbOvZL$U3K9Ll}CcO5$s9I$WqTbr>{?JG8%kM78k zJr+KUg!lHi*y&rjn~G6gY|?D9bT^{sh^teX@%<|$ikQu{S7g{&*SzP6!6+Hcr7 zK7NbWoq%An^F_9=R=ae(yLa|lcgGXAqv-j(P{TSiAI?hMM2gaFG-NAp%@#Ja$?H$b z>xIzLEx&s%7u)U#Nq3ZO)u>w-!7PhyUXV{mCFopZ9B8$V&{YJ*ncwV;jjCqx#eunW3pMc zKWE8b?dFWpnqzsJOeVbU2`0lfMtdPuZa2`dc4F0qv%V{&&Z{a{yr3(bX2S)>hLYUv zQ<5Z^O8ju9RIZR=dpQhp_u!O5+)b-#_5E&fB@U`{;Znm%x2o2<{e`Iae|}c4v6JhA ztVwjiB+-?l$8k&4=YUjtU{~7cEcSsI%R<`3GNqsY5#Rg=F-H6Bq4HvqM z-L*bZ*AHj*Sm`9GzrL%^6XyOCGe>0NHKJNcOO@sd#0Qm@*J#w-P$cDu1F>_>7$k}cL+ZgsIf#O3cm zH!uczZuWRg>gO!cOW!cAO6oRh)V8e}KTAX&GGDlj7w1|=O^ljOr}g@idd-Qg_$BLc zldA16>h|8ZV|^$TvF(kaRn_uUgF1Bu7tLt>z9X@3(i47;Et14pa z;;JpC8R&7H0k(Nzhm*hQ|GAsP<*HD)km5FyY&Ij(?dyW^joWCyM&)!CxgVn4g%eKq zB(Q1$@v6<@IDz1%9mRD)cWo%re&3?_ZegcA*B@K@T78orm?!N#8)Ez1m6-aDvvln8 zA_S4LZf{!qtIJZ@>0VFzt}kP%@I{+Gz2ngdA$>n{tLx+&Yxq3vC-F%emvzbh^CsEU z_BEwYlB;m)f_ZD#=@m!nwl~!_&FYBz6O33NA(%8na3LL*t=+sA^TJkHa2N1+al30G z=k~<81?;-sH>JO$>!)$mRmpO@$X!N~!oQhKwLPl@H@^!qx^y3?^}7T6!WRxf-_@hnoXi zp8Z8Pz8jFFrgu<7N1-IFwQ-BQjNS1a!vzyMcQ`~i>AOJHYsgki>2ep){`Di_0>{F2 zY<1n~nKn{iZ=*%=_Oh&8^`m%GMyF>R@EaUVXj~4=eI73g-x{GljqsLu54IOdV`DnTiCzF zj+ErCvE31 z(!^puR|~s`i?Smn#;?V3Q^3;B3nZj|E*RUKtok~Jq4T)y*8=N8Z(qBK=M~2ns<=dY zbAi-;-hcmvulv1#+n*c5HK?%HWLYd-mPx&{cGKoe`-^}P2X42aXwupb&;ENMQx{#O z({}$Wo<5t`TUD&m1otLjxN_V{Z$OFnr;A@xoW^}HIl!rIDGj;>+%C1cd98(V>)-Xp z3;Y>f0(#SQJlAoN7xnO?tIW0T0?-{Pp@nY~OjZr4c7qB51w&pa`|g;s14IX5pN?JJRKJ5myM>$M{#egwreY`5`~S!#^o zII{Ttrq9Q!g=(9^4X{eQek5Ky*PXi6ZF8;BmY#6ZeGK3>fn@o*+uXGc9WA#v*23Qb zzOvI_j0vB|^#$X;uG>ZMK3Llp8{PbofRf1uqkg(#7+DEbux(h7nJRkwX;#f?*+iA> zL{ayJ-CG%rwCLu0Z`lVq=WvpBrxOg(xig(n-e!@V3nMZ@BGb2SGPmx$cJ2;UADZl- zbra;=aVl&TE<2@5r_B(%H2TCScgQF)H+Wdwa8l?_&mo{(cE@g0P>q8~xEOXvL^h4c zg$gmv%?oq3H*9d6_Ut-iCYo0t%FerOuw?%%ncgCInYF*Q+)PD@?|*SU!XevlT)DOV z@z6%Ynkl!2xqb6T`dW)JSE)%_dz~~lcoVlziZN^3cf5AGeVs5%H=N}B-;AC#KeQ~$ zkEf9LZE0|mzWOO|oSVskaFw3QI?2^*96HrvHid?El@Hfo!efLD6LT9(%B73yy6@3f zR_&%8hfN)b;XAou&SJ6@O5z%HCN6oW-LbiTxKQ)?+&A9DuP3q1Uxf_khW*N(JE`T_ zrRPI+F4ukjru|H|*%xIDf$P*C<50(B)d*Vrv3Oo_|DCh4ca)@CQERLFU&f63c;fVK zzVx0GqdUX(XuNhEH7RdDpXF*X&s8=_)nuBfRHybD7q1oPbEhx9Qx!%@O0}3taLet*VAbMljPE&Iw-MvIjx8O_)9H-# zU0haG)mruEZhK+G4X63qQ1)7`RBm^Vm))~NXR5VEW$9YizVUhLVeV9K%Iw|%j&n@< zK0hwV5RXK6ZwjsBswBE!%ub!Rr|iT|hqveH@V!^G>mkqMO+`lKH_0|O49TSZB-O2( zVfM9_MBzx*!e~{O_g*!-<4~`?U5-h%?x5au$jIHrPwK{E7rE!|4vUPG#0^EuJ{(I2 z>iq8RuNpbA)f(*Zx!Z+Qs*}ytE% zj4vqNX(^T2^$v(Ahy!1DPnwk`BrjeU|R?7D%wGBx2 z`{lZxZWfOaxy)qCyV?c&Dp|ex?x{@g%HlM2+Y?6kIvI8f>mEWVv2S*MUwgOX_~do5 zFEZmAlx!>+szlh6H=8G(OviOqCrVt-1M$ys+SKcc5YX3@_p+;_AzlOuc;I5cG=8rhr9HZrjjH~ zUr3gQm0H7Pduq%heA)S$+J#+D;ugC5#a1e@L2kJ$V|2h-J2Hx3vg+TuyTA6mo!XR! zOTH*BmGD(+>CRl=bJ^Dkqhp4#UXzxuH~v~vUyIE0G~^d>ni~O-`Fe?+8`mt*Nm?DVFl=>c z9qq6bUjBm-gOkG7*gWSXZ+e4rW_y+`J8quX~m-?>(-)lN7c3sw!mol zy&aZrF3NS^xNst`3+W_Drzzf;an%}>v1heS9nPT^wx83wn~lGV*{%Rd-?_NCS)^=1 zCAS%(x%HZg=KL&snMA=r6@Kx&{H1EUX;Q_4ZUFJu_C)X8h3(rNe%19O9vupy#7^_7 zJ}u3bANLrqxn0_PHq@NYu%o7IG$W$`cDi2g-C@&{66<_>30)qWY9+MI=Xt$PiJK?b zBz@O`Emu9`(V?P)GlmoMHYdOC9Si1Lk2{$3Rnb~CO>5gtI9CN3;8Z&5%JeP#t%8Sd z%VE?cyk7d|#S_eNlWT3?M#yfTk){OjZL4CoLyT|Wwvjh|FsU>wfjl*Z9brk6aHCQC zQ3}2Da^G!B(f3U!4*l<}3Qw8Qts4QW0?(LbeNWD98jf_Z-6+Yzb+rAkn9lUl-9}l= z6CX4?R8|&e7eH1mc5;gc3pJn3s^jGDDA{UdrSer6+`?&heqR?(IJuAQ$#NIr%Xp}ZW@&JNG72IP|=M>cfC(~r$3hVwUnk=G~I;P4R&jHt_qb>t8UER zB>48eXDg#bn5_d&4?W^c8wiu$7Y4i!Y%?W zFoTdGi~+H;2*eD!Mgj>#(i*ZIYf<7clGE|I`)1_8~hUcTKbq2UD^ARJ+oi3~!f99K`sV0!F!J-Kyt@Sq4| z`k#z78dV%E^T$PEGHn9wAd{oXv7T20#ddWZWa6r#rQaO_6O9Rc9KUAQ4>EI)9h7TX zL-ahSpE3PWak}6^7r_As6+T#qNj*8`pMhLp7paS$45eunG;)0sx+tT5dQ=+IFaTfu zP`SJ~3~Hd%A|hkg@e*48h<-_F_7R{1u6=YQ>p3Z{w;{IHwOcvPG!K=5uO%A;k-b-} zCl)!*z7>jyD2zhl}dX1X|ln6D!Mkvl0{rc3A_T7SUqFLa(NUYj{PX? zOhHn0gvy9i9@Lt}wfmV6q3R=3Q6A)XT}QPz0YxIOZ;#BB5EGRtjq5F%9AH+VgykL} z&vy?3w*!?efJP~B^97=GBgFIyO~c+56*%Q+3rHyY#GxwIMyS3DNxR)u+E|?|fcH|O zn7N}+vXfyKWy*_3LCxY;HBA-?iK;`gDygv4< z=&?R6Eo=&v+%aVZlF|aH)5301?FQ0&sMvLEGO|O3L^EPU{koIJN!jJvZv93X zMEVyZR52Bywp=7}xT6R|$dSRQt&}2Gy5J~jk*_mgsn{x}3pJW}q@)@>$q;x^GRCTr zlCozL3ZV*O(kC<3UrDSN%N^6bkJ9#zSGR29F;)>{#xkFobimr(0o@wX0;eEh;H!QD zbDv#g5;AasX}i3?us?URaBbe(t`AkT^?6xucH6V5EtV{$X)DU8l?OW&Bm#jL#Y1Vt zil~^d@2Si}Mw_eVxhRkrs%>ilFN_6HA(EP1cBU`H&YHK){mrgvT9G7D0`zvy(?Di| zAhJBLfYj@ZuxOAg1$|^{i8IkrQ6kaNQ9Wj=U(EWJt*sS5Yg1lBuqVdEXzEST7`w~t zG^i%n2I5KtcVa;Rkr9w6jr&Tc1@_|sg23@nMpBBbDu^;6DBlGj`yTriftb7!CJ2I9 z!D(JikUZfuCNfzkA7SRlJhe1p)&@eHASs%BbH|FFuSHaP!i)wn@iCj%F6|ObqM9O( zvU!-ej+8YK^o33tDWM~8b9OUwXErdtx9-W*SxjuLY!t8?%>gFHL|aNsDm8(+{T_jn zs7V%J`pOhg#2N;OK_)`P0ByO_KN%T3Q%*qQs=vmt6S+YM!xFW+9y&j}zn7ftcArkpHTxu(LENfkKC& z*tS&b*q?psi&B;?73qvj&})WwsmAtu8XuSD$p#X3(oE-T)c)yC|Gpm{UF zn#n$^>ER;D*wU{6A{ISFAhwT~WMjX~yr!OK!ig)Kc)x5FdBo0{%d>8`ihM$j*C1No zOj4^H%lNdc+uE8VRCZdEP(@oK998r%Pk}bRK20o*)Jg(l2z^qYE2=ld!8*xQ!Yd>D zZ+F+aVD-=&QLidHmz5DpSwx6X1p&ca1)CluPIBS2LT1}t^{{c37TB2gvc;%S077hq zq!bC!K!CH^ymo5LL@p6A0fweuXp$zh-}UE_7JN1lh{-(1g>KE1L;>=N@>2)xvbY`! zDiU_q{nzhlk|j~q4IxQNV49wzi(IS5wH}wP$&j!?f2S4rDscnEP1U0UjKuyui;m03 z(O6UQevu(F+@tK86B<|=X`!tJdq=vKH=H8_m+-v|Jy$bKXx_MEDU z?Le&(yH14>pzMK-+8;zeQewX^T7>N&?!3+ZZdR_ppTLpLGLoxx&2ewbi`~iVYqV-2 z5R(x~i{?F(k&DNk8X;j)TH@e(QrBXO682Qx6nsu+TUzQJ7s(t?`euBcWV~*c5M{@& z>)3G`JgR{u*ArEYF)1u6Oit~dJ`f{stL;sZl?&iIJ9C$9m1I*OE4a)On(frU#uNqq zXq`?szBt?8Ght-Kg4IkuEG5@q%*!U2$fRI1H{0_d(B04Ez}`uHgxGGv((m)^!k?Fc zV^BAyD*nA?C)PY7(k~^l38ECGMbR+61c8_)vXcHgT^tb<=UhO&G`Z#q zPt6l^b91o*BCFBX8HlLzpU+Ddj@}F7MV_mk-S-SM^O1m@n&-KQg?hbjuWS~FrI3EL zLB_KN_ajL<{>cy*-9lA(JX)_{yh5pn!1tr$Iq~?7QwonrHY{qZy?$n0BTd+WD`naF zg<8*ZIZ3(IH9R9RttHhVF_Tn2jG$!SSVKy5pZNsmJH#|D`c(w=Jgrcb=YLRg(?ck% zXUqI;Cedli7=l0`wqqhQ*_wDPpHNjZLThbX32_io6@o&>||T>vspK{yB|y<3TUdapd{8F(ccAgl*GgY=9p@lpk>e< zmJpL(%_qZ$j`V7G4daB^5?aMe4uP29gkxv1%0AOo0!z!{HL^q|d!9TCN|prKg%7j! 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 SYs}WS&%*SCNx89m_ \ No newline at end of file diff --git a/src/static/menus/count.svg b/src/static/menus/count.svg new file mode 100644 index 0000000..12ee9bb --- /dev/null +++ b/src/static/menus/count.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/customer_return.svg b/src/static/menus/customer_return.svg new file mode 100644 index 0000000..4c7f32c --- /dev/null +++ b/src/static/menus/customer_return.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/deliver.svg b/src/static/menus/deliver.svg new file mode 100644 index 0000000..5148af0 --- /dev/null +++ b/src/static/menus/deliver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/hold_to_ok.svg b/src/static/menus/hold_to_ok.svg new file mode 100644 index 0000000..bb22391 --- /dev/null +++ b/src/static/menus/hold_to_ok.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/hold_to_scrap.svg b/src/static/menus/hold_to_scrap.svg new file mode 100644 index 0000000..6e46345 --- /dev/null +++ b/src/static/menus/hold_to_scrap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/inspect.svg b/src/static/menus/inspect.svg new file mode 100644 index 0000000..a18cd65 --- /dev/null +++ b/src/static/menus/inspect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/inventory_move.svg b/src/static/menus/inventory_move.svg new file mode 100644 index 0000000..e310f68 --- /dev/null +++ b/src/static/menus/inventory_move.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/issue.svg b/src/static/menus/issue.svg new file mode 100644 index 0000000..3222d1a --- /dev/null +++ b/src/static/menus/issue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/menu_search_lj.svg b/src/static/menus/menu_search_lj.svg new file mode 100644 index 0000000..fb40fa7 --- /dev/null +++ b/src/static/menus/menu_search_lj.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/static/menus/merge_package.svg b/src/static/menus/merge_package.svg new file mode 100644 index 0000000..b2d27ad --- /dev/null +++ b/src/static/menus/merge_package.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/ok_to_hold.svg b/src/static/menus/ok_to_hold.svg new file mode 100644 index 0000000..4f5d182 --- /dev/null +++ b/src/static/menus/ok_to_hold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/ok_to_scrap.svg b/src/static/menus/ok_to_scrap.svg new file mode 100644 index 0000000..1dee036 --- /dev/null +++ b/src/static/menus/ok_to_scrap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/over_package.svg b/src/static/menus/over_package.svg new file mode 100644 index 0000000..7a3c203 --- /dev/null +++ b/src/static/menus/over_package.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/product_dismantle.svg b/src/static/menus/product_dismantle.svg new file mode 100644 index 0000000..26efa1f --- /dev/null +++ b/src/static/menus/product_dismantle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/product_putaway.svg b/src/static/menus/product_putaway.svg new file mode 100644 index 0000000..e14ec51 --- /dev/null +++ b/src/static/menus/product_putaway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/product_receipt.svg b/src/static/menus/product_receipt.svg new file mode 100644 index 0000000..bb318a2 --- /dev/null +++ b/src/static/menus/product_receipt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/static/menus/production_receipt.svg b/src/static/menus/production_receipt.svg new file mode 100644 index 0000000..bb318a2 --- /dev/null +++ b/src/static/menus/production_receipt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/static/menus/production_return.svg b/src/static/menus/production_return.svg new file mode 100644 index 0000000..86ab315 --- /dev/null +++ b/src/static/menus/production_return.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/purchase_receipt.svg b/src/static/menus/purchase_receipt.svg new file mode 100644 index 0000000..b2d972f --- /dev/null +++ b/src/static/menus/purchase_receipt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/purchase_return.svg b/src/static/menus/purchase_return.svg new file mode 100644 index 0000000..1dcb2cf --- /dev/null +++ b/src/static/menus/purchase_return.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/putaway.svg b/src/static/menus/putaway.svg new file mode 100644 index 0000000..aeafb4f --- /dev/null +++ b/src/static/menus/putaway.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_container.svg b/src/static/menus/query_container.svg new file mode 100644 index 0000000..23278b2 --- /dev/null +++ b/src/static/menus/query_container.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_inspect.svg b/src/static/menus/query_inspect.svg new file mode 100644 index 0000000..cecb013 --- /dev/null +++ b/src/static/menus/query_inspect.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_issue_request.svg b/src/static/menus/query_issue_request.svg new file mode 100644 index 0000000..112a70d --- /dev/null +++ b/src/static/menus/query_issue_request.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_item.svg b/src/static/menus/query_item.svg new file mode 100644 index 0000000..bdbb713 --- /dev/null +++ b/src/static/menus/query_item.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_location.svg b/src/static/menus/query_location.svg new file mode 100644 index 0000000..3b1587a --- /dev/null +++ b/src/static/menus/query_location.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/query_supplier_deliver.svg b/src/static/menus/query_supplier_deliver.svg new file mode 100644 index 0000000..b100017 --- /dev/null +++ b/src/static/menus/query_supplier_deliver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/repleinsh.svg b/src/static/menus/repleinsh.svg new file mode 100644 index 0000000..afaf5f9 --- /dev/null +++ b/src/static/menus/repleinsh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/return_to_hold.svg b/src/static/menus/return_to_hold.svg new file mode 100644 index 0000000..9faa33d --- /dev/null +++ b/src/static/menus/return_to_hold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/return_to_store.svg b/src/static/menus/return_to_store.svg new file mode 100644 index 0000000..71349db --- /dev/null +++ b/src/static/menus/return_to_store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/scrap.svg b/src/static/menus/scrap.svg new file mode 100644 index 0000000..d17ef49 --- /dev/null +++ b/src/static/menus/scrap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/scrap_to_hold.svg b/src/static/menus/scrap_to_hold.svg new file mode 100644 index 0000000..92777a5 --- /dev/null +++ b/src/static/menus/scrap_to_hold.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/split_package.svg b/src/static/menus/split_package.svg new file mode 100644 index 0000000..5a4b0a3 --- /dev/null +++ b/src/static/menus/split_package.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/transfer_deliver.svg b/src/static/menus/transfer_deliver.svg new file mode 100644 index 0000000..acd90f7 --- /dev/null +++ b/src/static/menus/transfer_deliver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/transfer_receipt.svg b/src/static/menus/transfer_receipt.svg new file mode 100644 index 0000000..007cc6d --- /dev/null +++ b/src/static/menus/transfer_receipt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/unbind_pallet.svg b/src/static/menus/unbind_pallet.svg new file mode 100644 index 0000000..2849d84 --- /dev/null +++ b/src/static/menus/unbind_pallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/unplanned_issue.svg b/src/static/menus/unplanned_issue.svg new file mode 100644 index 0000000..1eb8765 --- /dev/null +++ b/src/static/menus/unplanned_issue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/menus/unplanned_receipt.svg b/src/static/menus/unplanned_receipt.svg new file mode 100644 index 0000000..29dc3a1 --- /dev/null +++ b/src/static/menus/unplanned_receipt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/no_more.png b/src/static/no_more.png new file mode 100644 index 0000000000000000000000000000000000000000..8bca5fedb43c82dcc608024e4566782da8dc55ea GIT binary patch literal 79568 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%0AQ{*`^) z$%jhVk?!&%O*Pp}quRG2=T8TiQ6sI+OgfmE+Sy|m9hj3#z>=pQ5bS@pOmBc0FW6-# z*)3d*Xye3Y(fFxg@ZvBp2g>o1+@i|)ms>=F_DGqxXV=pJ87x+m@fBz*-^=kyh%cg0 zu|RC?MP^AXYdZ)hChs%G=G2N{U%nzq-TZW%Zi0Fs!ox|;7R8Kn^gXb?(0T{(f+GL4 z4Mc@0-bSK{JL1OQbY7v!QxPYr82YzlXOS;3kbsLl(f8!YE7jiF;vwfConlBs(6P55 zhWniEDNRPso1cbA3+&u%RwU9`>7ei3dl7H{#m-kW(!nwBdGf4?4a)(Ib~i-_L%3+qcEvH=(m8PO(p4dapJSI7()NP?zGARABEY zrSihfaUn`%A_WJ#8xh9YeHl~F#9?8?d!IQJ5_G;^gIHG01>xfnA1#gG*-WFSRbvtF z+ASo8Z3)tEROAsWR_v~-H-1JB(%~X9dO#zl>stPv%=J%Pf*fckuHR?=qqgk!{|frF z_}xNz{0&{1vMGM@Eo?6bEnFybi2>Q21alEPgkzh0)OCb;^Ands-`W!}%-1Nc>Yry0;GxznHkOPX|2q6jRkAkLiT zL$cnow;vk)u88y2LT1g9Z3~%Idgu(Rm;t<74q6Q8)-j2PIUV6=l0zcf_w=vH?LK?w z#I2tVu*nKJ3nnT>=s=RR>N-oV=1I0+e1PYQ5_zFEZ0Gc9XkZ9`ZM47WL5#*fyn=A2 zLS_xv75E8Tj$am!FA3FoVTufL*7s-a0*e6)Pp=7tzkok+lvnci-e$(fMkiUhs=bC9 zu;=ijoQGwlEgRIYIyGK6XRfv|YvPo`CcB(iW~#5nb4~cO)Vu0^Lx)y9w}QW-qkv z8_FiNx5+0FV`CjK!Jp!Y^auF;cj0%`hwXYRMAwq{Vt1S7-sk?>)#NAtdl6^^oHhX6 z94UpBCZ4xBvn%^?xXLD!{dCW1*lczc-d1@}_JhfKLeVL`Y}*QOpH+{7pxK zzJ9jQJ>GqO>%Hs3rg~$N>aXhk^Fx(~<3fnL%Wqsy%Zs&FAy(vMd2*!!tSEo4ckkYF z(+^QKQ2QOEHVyLDB zpfQTrOz4ts8W>lX)BjEY({d*t_P|q07#ikb?MAsDc=3TG)t0)=R2c zp{O*tX1Ul&{Y~Xf@pOe)-bm)TUJF*oPn5U^R|4nxBG7EGGhHf0Cx7@gAClRwhPWzu zzjsbwRDGox0S0rj&OJ`B{zImaYDYOcOqIb&$r{1N7~B~%HtDp)vY^cfI3+s1Q1Ul@ zllH#LlzkE*#5eCFe!Ih9E2HqY=*@-l;#w|P>bMd0!O@uw# zL0$WH!Rf`9FJA)Bz9cN@$=&WUYe;MQauq0DOOT^p)Qf(51H`Rw7=Pt>!JE?Y_Ss67 z6k3cnhr3ltloR9CrqfS>oSs5u2B3+phc` zH@lU3vf0kDKr9nZQEKIQL)I@S&ZC?^wzWK}L*FzC=q*IkJi9K{ncvR%ZyZN4bGmFS+GncKxR#-^L-W1Knh^<@B zYNb4pH!=~BJ87|wap_D|ez--44Hapv6U()nnFj%|4sq7!s(kQa6j}XY63xyw7Kf%g zWQMyxNydxQ4~ZXEm?7{Tg{*wP?V2a%jiKWC4Pj#yVz1v`AGzSK?HGeiqpc7LS|XbM zD!XTI-@a!QYX+k6M!-7X~s`rT?1?taG zZtAucR!RHE;}1n>sI9GkX3VE@{Eu8F(em~xqpD0~)bnKw+3j;)URa-}{AecS3M-$n z{K3HA{Bnp{bm7(x(eT|VYfYUdfwmm{z&$ZLEoqfkr9U27BKeH9lxPY!@oFoL#!AB72XlE_JH@1Cy596R=I878He=)2ZVf(gi#tOOhpBjedoQXlV?`7%^ricBO0U zP0K-BhKM0DVWBaY6wM_1pwebOP&*dzH#?V~ADmIaqs+BTG*J~Tp3QJYKZd-6>K_-9 zkiNp#T4$!>drNAfvEMz zDQp)JO;5JjwHX6R)DMzhh^Q0c*x9rmgfi=(959%c7OkU9RMrs5rt_M&wHkQ?wjJ&- zKK_@Z5rM=S)RwRV-TVo5w|cg0^p#W{VG?l-vbNlS*Hojcwd#qR>?Xy-Y&<8d8>P09 zo5kAVOIl-mOZwkiES09wS++Vj*iG$~G4hi7skZ6g|Lv$xb&aIC?A9~PH4V-|gz`Ms zXEH4WpB3Pwm)j{U$X9MK%4z22JuKJY6#$Cez1d;HKIr`rsPmZ|Dzz9r!K9=KbF^26 z+#S^lS*lz`HW4hNOzqk++x_+a5y#wX6qmpIU%Mp4K|dsXdDgNqhx!W93A- zadlhjFIhepnz-&t3tVx|Jbw3A4I335CAl;>@;Qv!yZn%4g?D?!3q;wuJ;Cvt=;&zC z9LV(n+49il^935Hkv0>O8K}l;eZ^3a{0WHHDP5r*-oIBm6Y_>6k_RDyx~$ywck%w1 z4wqBqK+Br+W+ICjxRhkJCY67L-6aA3dWp_*@yQawvt+{I=v^)MD3q1 zcf4{$@V31A@>vOs_Lc3=6w6O#G}0i#rQFkaSd4{gEiwgnn9;`$4xp))mUGv+i>o;l$%Ny6%&vNq3O*WAkJ1^6Yu%u4>#Ps+Z)*PRpC zQpBrUH4#zwP5K0X&IG4O8fHv&=3u+NjdBMt7T5TyjSy~o_17<6QopoR`J2msDW)<* zg?!$AR(9o_09H(UFwc+02`d_P!`}a77wiiv7lGvdd;wmLp3e}@ebYCu!iMI^nP|Ob=de3>xuiF$r@7W% z1j6%q*sm87DU>3{L6cXb>g5+8e*K#RF63n`Mzk!$p_cE|j8DAL(=nIt;4OJWw~Q23 z_Nk|cAoEB^!y+bF*GaGQk8rmFOJiKl(qzn3)%SV zlcSA*t<28hUB50~u3umHgdO2-s5HMHQwQWpU{^~7gSbLL&zh%4@j0DZT(CG_{%z+O z5`6CdVvewi5HFaasff{)-D>oYxODymaS!xJ1491LLyqxhjT0^ctj3sSQv-b~=>Wcr z?gGEBV;@pwCsB*8+#m}3pA@$i_Y-R3IUxG0EcG;qzI~+V?ZaFf61=tEW_wH}DHS

    V|NqUzL^{ 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

    ^ULdC>s+h9K%Soo+^A_+;{oUT1>(^udL; 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

    =^FnIIhF8W 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 literal 0 HcmV?d00001 diff --git a/src/static/scss/colorui.css b/src/static/scss/colorui.css new file mode 100644 index 0000000..fade3b2 --- /dev/null +++ b/src/static/scss/colorui.css @@ -0,0 +1,3912 @@ +/* + ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24 + 仅供学习交流,如作它用所承受的法律责任一概与作者无关 + + *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 + + (QQ交流群:240787041) +*/ + +/* ================== + 初始化 + ==================== */ +body { + background-color: #f1f1f1; + font-size: 28upx; + color: #333333; + font-family: Helvetica Neue, Helvetica, sans-serif; +} + +view, +scroll-view, +swiper, +button, +input, +textarea, +label, +navigator, +image { + box-sizing: border-box; +} + +.round { + border-radius: 5000upx; +} + +.radius { + border-radius: 6upx; +} + +/* ================== + 图片 + ==================== */ + +image { + max-width: 100%; + display: inline-block; + position: relative; + z-index: 0; +} + +image.loading::before { + content: ""; + background-color: #f5f5f5; + display: block; + position: absolute; + width: 100%; + height: 100%; + z-index: -2; +} + +image.loading::after { + content: "\e7f1"; + font-family: "cuIcon"; + position: absolute; + top: 0; + left: 0; + width: 32upx; + height: 32upx; + line-height: 32upx; + right: 0; + bottom: 0; + z-index: -1; + font-size: 32upx; + margin: auto; + color: #ccc; + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: block; +} + +.response { + width: 100%; +} + +/* ================== + 开关 + ==================== */ + +switch, +checkbox, +radio { + position: relative; +} + +switch::after, +switch::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 0%; + left: 0upx; + font-size: 26upx; + line-height: 26px; + width: 50%; + text-align: center; + pointer-events: none; + transform: scale(0, 0); + transition: all 0.3s ease-in-out 0s; + z-index: 9; + bottom: 0; + height: 26px; + margin: auto; +} + +switch::before { + content: "\e646"; + right: 0; + transform: scale(1, 1); + left: auto; +} + +switch[checked]::after, +switch.checked::after { + transform: scale(1, 1); +} + +switch[checked]::before, +switch.checked::before { + transform: scale(0, 0); +} + +/* #ifndef MP-ALIPAY */ +radio::before, +checkbox::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 50%; + margin-top: -8px; + right: 5px; + font-size: 32upx; + line-height: 16px; + pointer-events: none; + transform: scale(1, 1); + transition: all 0.3s ease-in-out 0s; + z-index: 9; +} + +radio .wx-radio-input, +checkbox .wx-checkbox-input, +radio .uni-radio-input, +checkbox .uni-checkbox-input { + margin: 0; + width: 24px; + height: 24px; +} + +checkbox.round .wx-checkbox-input, +checkbox.round .uni-checkbox-input { + border-radius: 100upx; +} + +/* #endif */ + +switch[checked]::before { + transform: scale(0, 0); +} + +switch .wx-switch-input, +switch .uni-switch-input { + border: none; + padding: 0 24px; + width: 48px; + height: 26px; + margin: 0; + border-radius: 100upx; +} + +switch .wx-switch-input:not([class*="bg-"]), +switch .uni-switch-input:not([class*="bg-"]) { + background: #8799a3 !important; +} + +switch .wx-switch-input::after, +switch .uni-switch-input::after { + margin: auto; + width: 26px; + height: 26px; + border-radius: 100upx; + left: 0upx; + top: 0upx; + bottom: 0upx; + position: absolute; + transform: scale(0.9, 0.9); + transition: all 0.1s ease-in-out 0s; +} + +switch .wx-switch-input.wx-switch-input-checked::after, +switch .uni-switch-input.uni-switch-input-checked::after { + margin: auto; + left: 22px; + box-shadow: none; + transform: scale(0.9, 0.9); +} + +radio-group { + display: inline-block; +} + + + +switch.radius .wx-switch-input::after, +switch.radius .wx-switch-input, +switch.radius .wx-switch-input::before, +switch.radius .uni-switch-input::after, +switch.radius .uni-switch-input, +switch.radius .uni-switch-input::before { + border-radius: 10upx; +} + +switch .wx-switch-input::before, +radio.radio::before, +checkbox .wx-checkbox-input::before, +radio .wx-radio-input::before, +switch .uni-switch-input::before, +radio.radio::before, +checkbox .uni-checkbox-input::before, +radio .uni-radio-input::before { + display: none; +} + +radio.radio[checked]::after, +radio.radio .uni-radio-input-checked::after { + content: ""; + background-color: transparent; + display: block; + position: absolute; + width: 8px; + height: 8px; + z-index: 999; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + border-radius: 200upx; + /* #ifndef MP */ + border: 7px solid #ffffff !important; + /* #endif */ + + /* #ifdef MP */ + border: 8px solid #ffffff !important; + /* #endif */ +} + +.switch-sex::after { + content: "\e71c"; +} + +.switch-sex::before { + content: "\e71a"; +} + +.switch-sex .wx-switch-input, +.switch-sex .uni-switch-input { + background: #e54d42 !important; + border-color: #e54d42 !important; +} + +.switch-sex[checked] .wx-switch-input, +.switch-sex.checked .uni-switch-input { + background: #0081ff !important; + border-color: #0081ff !important; +} + +switch.red[checked] .wx-switch-input.wx-switch-input-checked, +checkbox.red[checked] .wx-checkbox-input, +radio.red[checked] .wx-radio-input, +switch.red.checked .uni-switch-input.uni-switch-input-checked, +checkbox.red.checked .uni-checkbox-input, +radio.red.checked .uni-radio-input { + background-color: #e54d42 !important; + border-color: #e54d42 !important; + color: #ffffff !important; +} + +switch.orange[checked] .wx-switch-input, +checkbox.orange[checked] .wx-checkbox-input, +radio.orange[checked] .wx-radio-input, +switch.orange.checked .uni-switch-input, +checkbox.orange.checked .uni-checkbox-input, +radio.orange.checked .uni-radio-input { + background-color: #f37b1d !important; + border-color: #f37b1d !important; + color: #ffffff !important; +} + +switch.yellow[checked] .wx-switch-input, +checkbox.yellow[checked] .wx-checkbox-input, +radio.yellow[checked] .wx-radio-input, +switch.yellow.checked .uni-switch-input, +checkbox.yellow.checked .uni-checkbox-input, +radio.yellow.checked .uni-radio-input { + background-color: #fbbd08 !important; + border-color: #fbbd08 !important; + color: #333333 !important; +} + +switch.olive[checked] .wx-switch-input, +checkbox.olive[checked] .wx-checkbox-input, +radio.olive[checked] .wx-radio-input, +switch.olive.checked .uni-switch-input, +checkbox.olive.checked .uni-checkbox-input, +radio.olive.checked .uni-radio-input { + background-color: #8dc63f !important; + border-color: #8dc63f !important; + color: #ffffff !important; +} + +switch.green[checked] .wx-switch-input, +switch[checked] .wx-switch-input, +checkbox.green[checked] .wx-checkbox-input, +checkbox[checked] .wx-checkbox-input, +radio.green[checked] .wx-radio-input, +radio[checked] .wx-radio-input, +switch.green.checked .uni-switch-input, +switch.checked .uni-switch-input, +checkbox.green.checked .uni-checkbox-input, +checkbox.checked .uni-checkbox-input, +radio.green.checked .uni-radio-input, +radio.checked .uni-radio-input { + background-color: #39b54a !important; + border-color: #39b54a !important; + color: #ffffff !important; + border-color: #39B54A !important; +} + +switch.cyan[checked] .wx-switch-input, +checkbox.cyan[checked] .wx-checkbox-input, +radio.cyan[checked] .wx-radio-input, +switch.cyan.checked .uni-switch-input, +checkbox.cyan.checked .uni-checkbox-input, +radio.cyan.checked .uni-radio-input { + background-color: #1cbbb4 !important; + border-color: #1cbbb4 !important; + color: #ffffff !important; +} + +switch.blue[checked] .wx-switch-input, +checkbox.blue[checked] .wx-checkbox-input, +radio.blue[checked] .wx-radio-input, +switch.blue.checked .uni-switch-input, +checkbox.blue.checked .uni-checkbox-input, +radio.blue.checked .uni-radio-input { + background-color: #0081ff !important; + border-color: #0081ff !important; + color: #ffffff !important; +} + +switch.purple[checked] .wx-switch-input, +checkbox.purple[checked] .wx-checkbox-input, +radio.purple[checked] .wx-radio-input, +switch.purple.checked .uni-switch-input, +checkbox.purple.checked .uni-checkbox-input, +radio.purple.checked .uni-radio-input { + background-color: #6739b6 !important; + border-color: #6739b6 !important; + color: #ffffff !important; +} + +switch.mauve[checked] .wx-switch-input, +checkbox.mauve[checked] .wx-checkbox-input, +radio.mauve[checked] .wx-radio-input, +switch.mauve.checked .uni-switch-input, +checkbox.mauve.checked .uni-checkbox-input, +radio.mauve.checked .uni-radio-input { + background-color: #9c26b0 !important; + border-color: #9c26b0 !important; + color: #ffffff !important; +} + +switch.pink[checked] .wx-switch-input, +checkbox.pink[checked] .wx-checkbox-input, +radio.pink[checked] .wx-radio-input, +switch.pink.checked .uni-switch-input, +checkbox.pink.checked .uni-checkbox-input, +radio.pink.checked .uni-radio-input { + background-color: #e03997 !important; + border-color: #e03997 !important; + color: #ffffff !important; +} + +switch.brown[checked] .wx-switch-input, +checkbox.brown[checked] .wx-checkbox-input, +radio.brown[checked] .wx-radio-input, +switch.brown.checked .uni-switch-input, +checkbox.brown.checked .uni-checkbox-input, +radio.brown.checked .uni-radio-input { + background-color: #a5673f !important; + border-color: #a5673f !important; + color: #ffffff !important; +} + +switch.grey[checked] .wx-switch-input, +checkbox.grey[checked] .wx-checkbox-input, +radio.grey[checked] .wx-radio-input, +switch.grey.checked .uni-switch-input, +checkbox.grey.checked .uni-checkbox-input, +radio.grey.checked .uni-radio-input { + background-color: #8799a3 !important; + border-color: #8799a3 !important; + color: #ffffff !important; +} + +switch.gray[checked] .wx-switch-input, +checkbox.gray[checked] .wx-checkbox-input, +radio.gray[checked] .wx-radio-input, +switch.gray.checked .uni-switch-input, +checkbox.gray.checked .uni-checkbox-input, +radio.gray.checked .uni-radio-input { + background-color: #f0f0f0 !important; + border-color: #f0f0f0 !important; + color: #333333 !important; +} + +switch.black[checked] .wx-switch-input, +checkbox.black[checked] .wx-checkbox-input, +radio.black[checked] .wx-radio-input, +switch.black.checked .uni-switch-input, +checkbox.black.checked .uni-checkbox-input, +radio.black.checked .uni-radio-input { + background-color: #333333 !important; + border-color: #333333 !important; + color: #ffffff !important; +} + +switch.white[checked] .wx-switch-input, +checkbox.white[checked] .wx-checkbox-input, +radio.white[checked] .wx-radio-input, +switch.white.checked .uni-switch-input, +checkbox.white.checked .uni-checkbox-input, +radio.white.checked .uni-radio-input { + background-color: #ffffff !important; + border-color: #ffffff !important; + color: #333333 !important; +} + +/* ================== + 边框 + ==================== */ + +/* -- 实线 -- */ + +.solid, +.solid-top, +.solid-right, +.solid-bottom, +.solid-left, +.solids, +.solids-top, +.solids-right, +.solids-bottom, +.solids-left, +.dashed, +.dashed-top, +.dashed-right, +.dashed-bottom, +.dashed-left { + position: relative; +} + +.solid::after, +.solid-top::after, +.solid-right::after, +.solid-bottom::after, +.solid-left::after, +.solids::after, +.solids-top::after, +.solids-right::after, +.solids-bottom::after, +.solids-left::after, +.dashed::after, +.dashed-top::after, +.dashed-right::after, +.dashed-bottom::after, +.dashed-left::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; +} + +.solid::after { + border: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-top::after { + border-top: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-right::after { + border-right: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-bottom::after { + border-bottom: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-left::after { + border-left: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solids::after { + border: 8upx solid #eee; +} + +.solids-top::after { + border-top: 8upx solid #eee; +} + +.solids-right::after { + border-right: 8upx solid #eee; +} + +.solids-bottom::after { + border-bottom: 8upx solid #eee; +} + +.solids-left::after { + border-left: 8upx solid #eee; +} + +/* -- 虚线 -- */ + +.dashed::after { + border: 1upx dashed #ddd; +} + +.dashed-top::after { + border-top: 1upx dashed #ddd; +} + +.dashed-right::after { + border-right: 1upx dashed #ddd; +} + +.dashed-bottom::after { + border-bottom: 1upx dashed #ddd; +} + +.dashed-left::after { + border-left: 1upx dashed #ddd; +} + +/* -- 阴影 -- */ + +.shadow[class*='white'] { + --ShadowSize: 0 1upx 6upx; +} + +.shadow-lg { + --ShadowSize: 0upx 40upx 100upx 0upx; +} + +.shadow-warp { + position: relative; + box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1); +} + +.shadow-warp:before, +.shadow-warp:after { + position: absolute; + content: ""; + top: 20upx; + bottom: 30upx; + left: 20upx; + width: 50%; + box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2); + transform: rotate(-3deg); + z-index: -1; +} + +.shadow-warp:after { + right: 20upx; + left: auto; + transform: rotate(3deg); +} + +.shadow-blur { + position: relative; +} + +.shadow-blur::before { + content: ""; + display: block; + background: inherit; + filter: blur(10upx); + position: absolute; + width: 100%; + height: 100%; + top: 10upx; + left: 10upx; + z-index: -1; + opacity: 0.4; + transform-origin: 0 0; + border-radius: inherit; + transform: scale(1, 1); +} + +/* ================== + 按钮 + ==================== */ + +.cu-btn { + position: relative; + border: 0upx; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0 30upx; + font-size: 28upx; + height: 64upx; + line-height: 1; + text-align: center; + text-decoration: none; + overflow: visible; + margin-left: initial; + transform: translate(0upx, 0upx); + margin-right: initial; +} + +.cu-btn::after { + display: none; +} + +.cu-btn:not([class*="bg-"]) { + background-color: #f0f0f0; +} + +.cu-btn[class*="line"] { + background-color: transparent; +} + +.cu-btn[class*="line"]::after { + content: " "; + display: block; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 12upx; + z-index: 1; + pointer-events: none; +} + +.cu-btn.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-btn[class*="lines"]::after { + border: 6upx solid currentColor; +} + +.cu-btn[class*="bg-"]::after { + display: none; +} + +.cu-btn.sm { + padding: 0 20upx; + font-size: 20upx; + height: 48upx; +} + +.cu-btn.lg { + padding: 0 40upx; + font-size: 32upx; + height: 80upx; +} + +.cu-btn.cuIcon.sm { + width: 48upx; + height: 48upx; +} + +.cu-btn.cuIcon { + width: 64upx; + height: 64upx; + border-radius: 500upx; + padding: 0; +} + +button.cuIcon.lg { + width: 80upx; + height: 80upx; +} + +.cu-btn.shadow-blur::before { + top: 4upx; + left: 4upx; + filter: blur(6upx); + opacity: 0.6; +} + +.cu-btn.button-hover { + transform: translate(1upx, 1upx); +} + +.block { + display: block; +} + +.cu-btn.block { + display: flex; +} + +.cu-btn[disabled] { + opacity: 0.6; + color: #ffffff; +} + +/* ================== + 徽章 + ==================== */ + +.cu-tag { + font-size: 24upx; + vertical-align: middle; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0upx 16upx; + height: 48upx; + font-family: Helvetica Neue, Helvetica, sans-serif; + white-space: nowrap; +} + +.cu-tag:not([class*="bg"]):not([class*="line"]) { + background-color: #f1f1f1; +} + +.cu-tag[class*="line-"]::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: inherit; + z-index: 1; + pointer-events: none; +} + +.cu-tag.radius[class*="line"]::after { + border-radius: 12upx; +} + +.cu-tag.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-tag[class*="line-"]::after { + border-radius: 0; +} + +.cu-tag+.cu-tag { + margin-left: 10upx; +} + +.cu-tag.sm { + font-size: 20upx; + padding: 0upx 12upx; + height: 32upx; +} + +.cu-capsule { + display: inline-flex; + vertical-align: middle; +} + +.cu-capsule+.cu-capsule { + margin-left: 10upx; +} + +.cu-capsule .cu-tag { + margin: 0; +} + +.cu-capsule .cu-tag[class*="line-"]:last-child::after { + border-left: 0upx solid transparent; +} + +.cu-capsule .cu-tag[class*="line-"]:first-child::after { + border-right: 0upx solid transparent; +} + +.cu-capsule.radius .cu-tag:first-child { + border-top-left-radius: 6upx; + border-bottom-left-radius: 6upx; +} + +.cu-capsule.radius .cu-tag:last-child::after, +.cu-capsule.radius .cu-tag[class*="line-"] { + border-top-right-radius: 12upx; + border-bottom-right-radius: 12upx; +} + +.cu-capsule.round .cu-tag:first-child { + border-top-left-radius: 200upx; + border-bottom-left-radius: 200upx; + text-indent: 4upx; +} + +.cu-capsule.round .cu-tag:last-child::after, +.cu-capsule.round .cu-tag:last-child { + border-top-right-radius: 200upx; + border-bottom-right-radius: 200upx; + text-indent: -4upx; +} + +.cu-tag.badge { + border-radius: 200upx; + position: absolute; + top: -10upx; + right: -10upx; + font-size: 20upx; + padding: 0upx 10upx; + height: 28upx; + color: #ffffff; +} + +.cu-tag.badge:not([class*="bg-"]) { + background-color: #dd514c; +} + +.cu-tag:empty:not([class*="cuIcon-"]) { + padding: 0upx; + width: 16upx; + height: 16upx; + top: -4upx; + right: -4upx; +} + +.cu-tag[class*="cuIcon-"] { + width: 32upx; + height: 32upx; + top: -4upx; + right: -4upx; +} + +/* ================== + 头像 + ==================== */ + +.cu-avatar { + font-variant: small-caps; + margin: 0; + padding: 0; + display: inline-flex; + text-align: center; + justify-content: center; + align-items: center; + background-color: #ccc; + color: #ffffff; + white-space: nowrap; + position: relative; + width: 64upx; + height: 64upx; + background-size: cover; + background-position: center; + vertical-align: middle; + font-size: 1.5em; +} + +.cu-avatar.sm { + width: 48upx; + height: 48upx; + font-size: 1em; +} + +.cu-avatar.lg { + width: 96upx; + height: 96upx; + font-size: 2em; +} + +.cu-avatar.xl { + width: 128upx; + height: 128upx; + font-size: 2.5em; +} + +.cu-avatar .avatar-text { + font-size: 0.4em; +} + +.cu-avatar-group { + direction: rtl; + unicode-bidi: bidi-override; + padding: 0 10upx 0 40upx; + display: inline-block; +} + +.cu-avatar-group .cu-avatar { + margin-left: -30upx; + border: 4upx solid #f1f1f1; + vertical-align: middle; +} + +.cu-avatar-group .cu-avatar.sm { + margin-left: -20upx; + border: 1upx solid #f1f1f1; +} + +/* ================== + 进度条 + ==================== */ + +.cu-progress { + overflow: hidden; + height: 28upx; + background-color: #ebeef5; + display: inline-flex; + align-items: center; + width: 100%; +} + +.cu-progress+view, +.cu-progress+text { + line-height: 1; +} + +.cu-progress.xs { + height: 10upx; +} + +.cu-progress.sm { + height: 20upx; +} + +.cu-progress view { + width: 0; + height: 100%; + align-items: center; + display: flex; + justify-items: flex-end; + justify-content: space-around; + font-size: 20upx; + color: #ffffff; + transition: width 0.6s ease; +} + +.cu-progress text { + align-items: center; + display: flex; + font-size: 20upx; + color: #333333; + text-indent: 10upx; +} + +.cu-progress.text-progress { + padding-right: 60upx; +} + +.cu-progress.striped view { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 72upx 72upx; +} + +.cu-progress.active view { + animation: progress-stripes 2s linear infinite; +} + +@keyframes progress-stripes { + from { + background-position: 72upx 0; + } + + to { + background-position: 0 0; + } +} + +/* ================== + 加载 + ==================== */ + +.cu-load { + display: block; + line-height: 3em; + text-align: center; +} + +.cu-load::before { + font-family: "cuIcon"; + display: inline-block; + margin-right: 6upx; +} + +.cu-load.loading::before { + content: "\e67a"; + animation: cuIcon-spin 2s infinite linear; +} + +.cu-load.loading::after { + content: "加载中..."; +} + +.cu-load.over::before { + content: "\e64a"; +} + +.cu-load.over::after { + content: "没有更多了"; +} + +.cu-load.erro::before { + content: "\e658"; +} + +.cu-load.erro::after { + content: "加载失败"; +} + +.cu-load.load-cuIcon::before { + font-size: 32upx; +} + +.cu-load.load-cuIcon::after { + display: none; +} + +.cu-load.load-cuIcon.over { + display: none; +} + +.cu-load.load-modal { + position: fixed; + top: 0; + right: 0; + bottom: 140upx; + left: 0; + margin: auto; + width: 260upx; + height: 260upx; + background-color: #ffffff; + border-radius: 10upx; + box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + font-size: 28upx; + z-index: 9999; + line-height: 2.4em; +} + +.cu-load.load-modal [class*="cuIcon-"] { + font-size: 60upx; +} + +.cu-load.load-modal image { + width: 70upx; + height: 70upx; +} + +.cu-load.load-modal::after { + content: ""; + position: absolute; + background-color: #ffffff; + border-radius: 50%; + width: 200upx; + height: 200upx; + font-size: 10px; + border-top: 6upx solid rgba(0, 0, 0, 0.05); + border-right: 6upx solid rgba(0, 0, 0, 0.05); + border-bottom: 6upx solid rgba(0, 0, 0, 0.05); + border-left: 6upx solid #f37b1d; + animation: cuIcon-spin 1s infinite linear; + z-index: -1; +} + +.load-progress { + pointer-events: none; + top: 0; + position: fixed; + width: 100%; + left: 0; + z-index: 2000; +} + +.load-progress.hide { + display: none; +} + +.load-progress .load-progress-bar { + position: relative; + width: 100%; + height: 4upx; + overflow: hidden; + transition: all 200ms ease 0s; +} + +.load-progress .load-progress-spinner { + position: absolute; + top: 10upx; + right: 10upx; + z-index: 2000; + display: block; +} + +.load-progress .load-progress-spinner::after { + content: ""; + display: block; + width: 24upx; + height: 24upx; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 4upx transparent; + border-top-color: inherit; + border-left-color: inherit; + border-radius: 50%; + -webkit-animation: load-progress-spinner 0.4s linear infinite; + animation: load-progress-spinner 0.4s linear infinite; +} + +@-webkit-keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/* ================== + 列表 + ==================== */ +.grayscale { + filter: grayscale(1); +} + +.cu-list+.cu-list { + margin-top: 30upx +} + +.cu-list>.cu-item { + transition: all .6s ease-in-out 0s; + transform: translateX(0upx) +} + +.cu-list>.cu-item.move-cur { + transform: translateX(-260upx) +} + +.cu-list>.cu-item .move { + position: absolute; + right: 0; + display: flex; + width: 260upx; + height: 100%; + transform: translateX(100%) +} + +.cu-list>.cu-item .move view { + display: flex; + flex: 1; + justify-content: center; + align-items: center +} + +.cu-list.menu-avatar { + overflow: hidden; +} + +.cu-list.menu-avatar>.cu-item { + position: relative; + display: flex; + padding-right: 10upx; + height: 140upx; + background-color: #ffffff; + justify-content: flex-end; + align-items: center +} + +.cu-list.menu-avatar>.cu-item>.cu-avatar { + position: absolute; + left: 30upx +} + +.cu-list.menu-avatar>.cu-item .flex .text-cut { + max-width: 510upx +} + +.cu-list.menu-avatar>.cu-item .content { + position: absolute; + left: 146upx; + width: calc(100% - 96upx - 60upx - 120upx - 20upx); + line-height: 1.6em; +} + +.cu-list.menu-avatar>.cu-item .content.flex-sub { + width: calc(100% - 96upx - 60upx - 20upx); +} + +.cu-list.menu-avatar>.cu-item .content>view:first-child { + font-size: 30upx; + display: flex; + align-items: center +} + +.cu-list.menu-avatar>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu-avatar>.cu-item .action { + width: 100upx; + text-align: center +} + +.cu-list.menu-avatar>.cu-item .action view+view { + margin-top: 10upx +} + +.cu-list.menu-avatar.comment>.cu-item .content { + position: relative; + left: 0; + width: auto; + flex: 1; +} + +.cu-list.menu-avatar.comment>.cu-item { + padding: 30upx 30upx 30upx 120upx; + height: auto +} + +.cu-list.menu-avatar.comment .cu-avatar { + align-self: flex-start +} + +.cu-list.menu>.cu-item { + position: relative; + display: flex; + padding: 0 30upx; + min-height: 100upx; + background-color: #ffffff; + justify-content: space-between; + align-items: center +} + +.cu-list.menu>.cu-item:last-child:after { + border: none +} + +.cu-list.menu-avatar>.cu-item:after, +.cu-list.menu>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-bottom: 1upx solid #ddd; + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.menu>.cu-item.grayscale { + background-color: #f5f5f5 +} + +.cu-list.menu>.cu-item.cur { + background-color: #fcf7e9 +} + +.cu-list.menu>.cu-item.arrow { + padding-right: 90upx +} + +.cu-list.menu>.cu-item.arrow:before { + position: absolute; + top: 0; + right: 30upx; + bottom: 0; + display: block; + margin: auto; + width: 30upx; + height: 30upx; + color: #8799a3; + content: "\e6a3"; + text-align: center; + font-size: 34upx; + font-family: cuIcon; + line-height: 30upx +} + +.cu-list.menu>.cu-item button.content { + padding: 0; + background-color: transparent; + justify-content: flex-start +} + +.cu-list.menu>.cu-item button.content:after { + display: none +} + +.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar { + border-color: #ffffff +} + +.cu-list.menu>.cu-item .content>view:first-child { + display: flex; + align-items: center +} + +.cu-list.menu>.cu-item .content>text[class*=cuIcon] { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + text-align: center +} + +.cu-list.menu>.cu-item .content>image { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + height: 1.6em; + vertical-align: middle +} + +.cu-list.menu>.cu-item .content { + font-size: 30upx; + line-height: 1.6em; + flex: 1 +} + +.cu-list.menu>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu>.cu-item .action .cu-tag:empty { + right: 10upx +} + +.cu-list.menu { + display: block; + overflow: hidden +} + +.cu-list.menu.sm-border>.cu-item:after { + left: 30upx; + width: calc(200% - 120upx) +} + +.cu-list.grid>.cu-item { + position: relative; + display: flex; + padding: 20upx 0 30upx; + transition-duration: 0s; + flex-direction: column +} + +.cu-list.grid>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-right: 1px solid rgba(0, 0, 0, .1); + border-bottom: 1px solid rgba(0, 0, 0, .1); + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.grid>.cu-item text { + display: block; + margin-top: 10upx; + color: #888; + font-size: 26upx; + line-height: 40upx +} + +.cu-list.grid>.cu-item [class*=cuIcon] { + position: relative; + display: block; + margin-top: 20upx; + width: 100%; + font-size: 48upx +} + +.cu-list.grid>.cu-item .cu-tag { + right: auto; + left: 50%; + margin-left: 20upx +} + +.cu-list.grid { + background-color: #ffffff; + text-align: center +} + +.cu-list.grid.no-border>.cu-item { + padding-top: 10upx; + padding-bottom: 20upx +} + +.cu-list.grid.no-border>.cu-item:after { + border: none +} + +.cu-list.grid.no-border { + padding: 20upx 10upx +} + +.cu-list.grid.col-3>.cu-item:nth-child(3n):after, +.cu-list.grid.col-4>.cu-item:nth-child(4n):after, +.cu-list.grid.col-5>.cu-item:nth-child(5n):after { + border-right-width: 0 +} + +.cu-list.card-menu { + overflow: hidden; + margin-right: 30upx; + margin-left: 30upx; + border-radius: 20upx +} + + +/* ================== + 操作条 + ==================== */ + +.cu-bar { + display: flex; + position: relative; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-bar .action { + display: flex; + align-items: center; + height: 100%; + justify-content: center; + max-width: 100%; +} + +.cu-bar .action.border-title { + position: relative; + top: -10upx; +} + +.cu-bar .action.border-title text[class*="bg-"]:last-child { + position: absolute; + bottom: -0.5rem; + min-width: 2rem; + height: 6upx; + left: 0; +} + +.cu-bar .action.sub-title { + position: relative; + top: -0.2rem; +} + +.cu-bar .action.sub-title text { + position: relative; + z-index: 1; +} + +.cu-bar .action.sub-title text[class*="bg-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.2rem; + border-radius: 6upx; + width: 100%; + height: 0.6rem; + left: 0.6rem; + opacity: 0.3; + z-index: 0; +} + +.cu-bar .action.sub-title text[class*="text-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.7rem; + left: 0.5rem; + opacity: 0.2; + z-index: 0; + text-align: right; + font-weight: 900; + font-size: 36upx; +} + +.cu-bar.justify-center .action.border-title text:last-child, +.cu-bar.justify-center .action.sub-title text:last-child { + left: 0; + right: 0; + margin: auto; + text-align: center; +} + +.cu-bar .action:first-child { + margin-left: 30upx; + font-size: 30upx; +} + +.cu-bar .action text.text-cut { + text-align: left; + width: 100%; +} + +.cu-bar .cu-avatar:first-child { + margin-left: 20upx; +} + +.cu-bar .action:first-child>text[class*="cuIcon-"] { + margin-left: -0.3em; + margin-right: 0.3em; +} + +.cu-bar .action:last-child { + margin-right: 30upx; +} + +.cu-bar .action>text[class*="cuIcon-"], +.cu-bar .action>view[class*="cuIcon-"] { + font-size: 36upx; +} + +.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] { + margin-left: 0.5em; +} + +.cu-bar .content { + position: absolute; + text-align: center; + width: calc(100% - 340upx); + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: auto; + height: 60upx; + font-size: 32upx; + line-height: 60upx; + cursor: none; + pointer-events: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.cu-bar.ios .content { + bottom: 7px; + height: 30px; + font-size: 32upx; + line-height: 30px; +} + +.cu-bar.btn-group { + justify-content: space-around; +} + +.cu-bar.btn-group button { + padding: 20upx 32upx; +} + +.cu-bar.btn-group button { + flex: 1; + margin: 0 20upx; + max-width: 50%; +} + +.cu-bar .search-form { + background-color: #f5f5f5; + line-height: 64upx; + height: 64upx; + font-size: 24upx; + color: #333333; + flex: 1; + display: flex; + align-items: center; + margin: 0 30upx; +} + +.cu-bar .search-form+.action { + margin-right: 30upx; +} + +.cu-bar .search-form input { + flex: 1; + padding-right: 30upx; + height: 64upx; + line-height: 64upx; + font-size: 26upx; + background-color: transparent; +} + +.cu-bar .search-form [class*="cuIcon-"] { + margin: 0 0.5em 0 0.8em; +} + +.cu-bar .search-form [class*="cuIcon-"]::before { + top: 0upx; +} + +.cu-bar.fixed, +.nav.fixed { + position: fixed; + width: 100%; + top: 0; + z-index: 1024; + box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.foot { + position: fixed; + width: 100%; + bottom: 0; + z-index: 1024; + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar { + padding: 0; + height: calc(100upx + env(safe-area-inset-bottom) / 2); + padding-bottom: calc(env(safe-area-inset-bottom) / 2); +} + +.cu-tabbar-height { + min-height: 100upx; + height: calc(100upx + env(safe-area-inset-bottom) / 2); +} + +.cu-bar.tabbar.shadow { + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar .action { + font-size: 22upx; + position: relative; + flex: 1; + text-align: center; + padding: 0; + display: block; + height: auto; + line-height: 1; + margin: 0; + background-color: inherit; + overflow: initial; +} + +.cu-bar.tabbar.shop .action { + width: 140upx; + flex: initial; +} + +.cu-bar.tabbar .action.add-action { + position: relative; + z-index: 2; + padding-top: 50upx; +} + +.cu-bar.tabbar .action.add-action [class*="cuIcon-"] { + position: absolute; + width: 70upx; + z-index: 2; + height: 70upx; + border-radius: 50%; + line-height: 70upx; + font-size: 50upx; + top: -35upx; + left: 0; + right: 0; + margin: auto; + padding: 0; +} + +.cu-bar.tabbar .action.add-action::after { + content: ""; + position: absolute; + width: 100upx; + height: 100upx; + top: -50upx; + left: 0; + right: 0; + margin: auto; + box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08); + border-radius: 50upx; + background-color: inherit; + z-index: 0; +} + +.cu-bar.tabbar .action.add-action::before { + content: ""; + position: absolute; + width: 100upx; + height: 30upx; + bottom: 30upx; + left: 0; + right: 0; + margin: auto; + background-color: inherit; + z-index: 1; +} + +.cu-bar.tabbar .btn-group { + flex: 1; + display: flex; + justify-content: space-around; + align-items: center; + padding: 0 10upx; +} + +.cu-bar.tabbar button.action::after { + border: 0; +} + +.cu-bar.tabbar .action [class*="cuIcon-"] { + width: 100upx; + position: relative; + display: block; + height: auto; + margin: 0 auto 10upx; + text-align: center; + font-size: 40upx; +} + +.cu-bar.tabbar .action .cuIcon-cu-image { + margin: 0 auto; +} + +.cu-bar.tabbar .action .cuIcon-cu-image image { + width: 50upx; + height: 50upx; + display: inline-block; +} + +.cu-bar.tabbar .submit { + align-items: center; + display: flex; + justify-content: center; + text-align: center; + position: relative; + flex: 2; + align-self: stretch; +} + +.cu-bar.tabbar .submit:last-child { + flex: 2.6; +} + +.cu-bar.tabbar .submit+.submit { + flex: 2; +} + +.cu-bar.tabbar.border .action::before { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + transform: scale(0.5); + transform-origin: 0 0; + border-right: 1upx solid rgba(0, 0, 0, 0.1); + z-index: 3; +} + +.cu-bar.tabbar.border .action:last-child:before { + display: none; +} + +.cu-bar.input { + padding-right: 20upx; + background-color: #ffffff; +} + +.cu-bar.input input { + overflow: initial; + line-height: 64upx; + height: 64upx; + min-height: 64upx; + flex: 1; + font-size: 30upx; + margin: 0 20upx; +} + +.cu-bar.input .action { + margin-left: 20upx; +} + +.cu-bar.input .action [class*="cuIcon-"] { + font-size: 48upx; +} + +.cu-bar.input input+.action { + margin-right: 20upx; + margin-left: 0upx; +} + +.cu-bar.input .action:first-child [class*="cuIcon-"] { + margin-left: 0upx; +} + +.cu-custom { + display: block; + position: relative; +} + +.cu-custom .cu-bar .content { + width: calc(100% - 440upx); +} + +/* #ifdef MP-ALIPAY */ +.cu-custom .cu-bar .action .cuIcon-back { + opacity: 0; +} + +/* #endif */ + +.cu-custom .cu-bar .content image { + height: 60upx; + width: 240upx; +} + +.cu-custom .cu-bar { + min-height: 0px; + /* #ifdef MP-WEIXIN */ + padding-right: 220upx; + /* #endif */ + /* #ifdef MP-ALIPAY */ + padding-right: 150upx; + /* #endif */ + box-shadow: 0upx 0upx 0upx; + z-index: 9999; +} + +.cu-custom .cu-bar .border-custom { + position: relative; + background: rgba(0, 0, 0, 0.15); + border-radius: 1000upx; + height: 30px; +} + +.cu-custom .cu-bar .border-custom::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + border: 1upx solid #ffffff; + opacity: 0.5; +} + +.cu-custom .cu-bar .border-custom::before { + content: " "; + width: 1upx; + height: 110%; + position: absolute; + top: 22.5%; + left: 0; + right: 0; + margin: auto; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + opacity: 0.6; + background-color: #ffffff; +} + +.cu-custom .cu-bar .border-custom text { + display: block; + flex: 1; + margin: auto !important; + text-align: center; + font-size: 34upx; +} + +/* ================== + 导航栏 + ==================== */ + +.nav { + white-space: nowrap; +} + +::-webkit-scrollbar { + display: none; +} + +.nav .cu-item { + height: 90upx; + display: inline-block; + line-height: 90upx; + margin: 0 10upx; + padding: 0 20upx; +} + +.nav .cu-item.cur { + border-bottom: 4upx solid; +} + +/* ================== + 时间轴 + ==================== */ + +.cu-timeline { + display: block; + background-color: #ffffff; +} + +.cu-timeline .cu-time { + width: 120upx; + text-align: center; + padding: 20upx 0; + font-size: 26upx; + color: #888; + display: block; +} + +.cu-timeline>.cu-item { + padding: 30upx 30upx 30upx 120upx; + position: relative; + display: block; + z-index: 0; +} + +.cu-timeline>.cu-item:not([class*="text-"]) { + color: #ccc; +} + +.cu-timeline>.cu-item::after { + content: ""; + display: block; + position: absolute; + width: 1upx; + background-color: #ddd; + left: 60upx; + height: 100%; + top: 0; + z-index: 8; +} + +.cu-timeline>.cu-item::before { + font-family: "cuIcon"; + display: block; + position: absolute; + top: 36upx; + z-index: 9; + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item:not([class*="cuIcon-"])::before { + content: "\e763"; +} + +.cu-timeline>.cu-item[class*="cuIcon-"]::before { + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item>.content { + padding: 30upx; + border-radius: 6upx; + display: block; + line-height: 1.6; +} + +.cu-timeline>.cu-item>.content:not([class*="bg-"]) { + background-color: #f1f1f1; + color: #333333; +} + +.cu-timeline>.cu-item>.content+.content { + margin-top: 20upx; +} + +/* ================== + 聊天 + ==================== */ + +.cu-chat { + display: flex; + flex-direction: column; +} + +.cu-chat .cu-item { + display: flex; + padding: 30upx 30upx 70upx; + position: relative; +} + +.cu-chat .cu-item>.cu-avatar { + width: 80upx; + height: 80upx; +} + +.cu-chat .cu-item>.main { + max-width: calc(100% - 260upx); + margin: 0 40upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>image { + height: 320upx; +} + +.cu-chat .cu-item>.main .content { + padding: 20upx; + border-radius: 6upx; + display: inline-flex; + max-width: 100%; + align-items: center; + font-size: 30upx; + position: relative; + min-height: 80upx; + line-height: 40upx; + text-align: left; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"]) { + background-color: #ffffff; + color: #333333; +} + +.cu-chat .cu-item .date { + position: absolute; + font-size: 24upx; + color: #8799a3; + width: calc(100% - 320upx); + bottom: 20upx; + left: 160upx; +} + +.cu-chat .cu-item .action { + padding: 0 30upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>.main .content::after { + content: ""; + top: 27upx; + transform: rotate(45deg); + position: absolute; + z-index: 100; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; +} + +.cu-chat .cu-item.self>.main .content::after { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item>.main .content::before { + content: ""; + top: 30upx; + transform: rotate(45deg); + position: absolute; + z-index: -1; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; + filter: blur(5upx); + opacity: 0.3; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"])::before { + background-color: #333333; + opacity: 0.1; +} + +.cu-chat .cu-item.self>.main .content::before { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item.self { + justify-content: flex-end; + text-align: right; +} + +.cu-chat .cu-info { + display: inline-block; + margin: 20upx auto; + font-size: 24upx; + padding: 8upx 12upx; + background-color: rgba(0, 0, 0, 0.2); + border-radius: 6upx; + color: #ffffff; + max-width: 400upx; + line-height: 1.4; +} + +/* ================== + 卡片 + ==================== */ + +.cu-card { + display: block; + overflow: hidden; +} + +.cu-card>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; + border-radius: 10upx; + margin: 30upx; +} + +.cu-card>.cu-item.shadow-blur { + overflow: initial; +} + +.cu-card.no-card>.cu-item { + margin: 0upx; + border-radius: 0upx; +} + +.cu-card .grid.grid-square { + margin-bottom: -20upx; +} + +.cu-card.case .image { + position: relative; +} + +.cu-card.case .image image { + width: 100%; +} + +.cu-card.case .image .cu-tag { + position: absolute; + right: 0; + top: 0; +} + +.cu-card.case .image .cu-bar { + position: absolute; + bottom: 0; + width: 100%; + background-color: transparent; + padding: 0upx 30upx; +} + +.cu-card.case.no-card .image { + margin: 30upx 30upx 0; + overflow: hidden; + border-radius: 10upx; +} + +.cu-card.dynamic { + display: block; +} + +.cu-card.dynamic>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; +} + +.cu-card.dynamic>.cu-item>.text-content { + padding: 0 30upx 0; + max-height: 6.4em; + overflow: hidden; + font-size: 30upx; + margin-bottom: 20upx; +} + +.cu-card.dynamic>.cu-item .square-img { + width: 100%; + height: 200upx; + border-radius: 6upx; +} + +.cu-card.dynamic>.cu-item .only-img { + width: 100%; + height: 320upx; + border-radius: 6upx; +} + +/* card.dynamic>.cu-item .comment { + padding: 20upx; + background-color: #f1f1f1; + margin: 0 30upx 30upx; + border-radius: 6upx; +} */ + +.cu-card.article { + display: block; +} + +.cu-card.article>.cu-item { + padding-bottom: 30upx; +} + +.cu-card.article>.cu-item .title { + font-size: 30upx; + font-weight: 900; + color: #333333; + line-height: 100upx; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content { + display: flex; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content>image { + width: 240upx; + height: 6.4em; + margin-right: 20upx; + border-radius: 6upx; +} + +.cu-card.article>.cu-item .content .desc { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.cu-card.article>.cu-item .content .text-content { + font-size: 28upx; + color: #888; + height: 4.8em; + overflow: hidden; +} + +/* ================== + 表单 + ==================== */ + +.cu-form-group { + background-color: #ffffff; + padding: 1upx 30upx; + display: flex; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-form-group+.cu-form-group { + border-top: 1upx solid #eee; +} + +.cu-form-group .title { + text-align: justify; + padding-right: 30upx; + font-size: 30upx; + position: relative; + height: 60upx; + line-height: 60upx; +} + +.cu-form-group input { + flex: 1; + font-size: 30upx; + color: #555; + padding-right: 20upx; +} + +.cu-form-group>text[class*="cuIcon-"] { + font-size: 36upx; + padding: 0; + box-sizing: border-box; +} + +.cu-form-group textarea { + margin: 32upx 0 30upx; + height: 4.6em; + width: 100%; + line-height: 1.2em; + flex: 1; + font-size: 28upx; + padding: 0; +} + +.cu-form-group.align-start .title { + height: 1em; + margin-top: 32upx; + line-height: 1em; +} + +.cu-form-group picker { + flex: 1; + padding-right: 40upx; + overflow: hidden; + position: relative; +} + +.cu-form-group picker .picker { + line-height: 100upx; + font-size: 28upx; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 100%; + text-align: right; +} + +.cu-form-group picker::after { + font-family: cuIcon; + display: block; + content: "\e6a3"; + position: absolute; + font-size: 34upx; + color: #8799a3; + line-height: 100upx; + width: 60upx; + text-align: center; + top: 0; + bottom: 0; + right: -20upx; + margin: auto; +} + +.cu-form-group textarea[disabled], +.cu-form-group textarea[disabled] .placeholder { + color: transparent; +} + +/* ================== + 模态窗口 + ==================== */ + +.cu-modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1110; + opacity: 0; + outline: 0; + text-align: center; + -ms-transform: scale(1.185); + transform: scale(1.185); + backface-visibility: hidden; + perspective: 2000upx; + background: rgba(0, 0, 0, 0.6); + transition: all 0.3s ease-in-out 0s; + pointer-events: none; +} + +.cu-modal::before { + content: "\200B"; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.cu-modal.show { + opacity: 1; + transition-duration: 0.3s; + -ms-transform: scale(1); + transform: scale(1); + overflow-x: hidden; + overflow-y: auto; + pointer-events: auto; +} + +.cu-dialog { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680upx; + max-width: 100%; + background-color: #f8f8f8; + border-radius: 10upx; + overflow: hidden; +} + +.cu-modal.bottom-modal::before { + vertical-align: bottom; +} + +.cu-modal.bottom-modal .cu-dialog { + width: 100%; + border-radius: 0; +} + +.cu-modal.bottom-modal { + margin-bottom: -1000upx; +} + +.cu-modal.bottom-modal.show { + margin-bottom: 0; +} + +.cu-modal.drawer-modal { + transform: scale(1); + display: flex; +} + +.cu-modal.drawer-modal .cu-dialog { + height: 100%; + min-width: 200upx; + border-radius: 0; + margin: initial; + transition-duration: 0.3s; +} + +.cu-modal.drawer-modal.justify-start .cu-dialog { + transform: translateX(-100%); +} + +.cu-modal.drawer-modal.justify-end .cu-dialog { + transform: translateX(100%); +} + +.cu-modal.drawer-modal.show .cu-dialog { + transform: translateX(0%); +} +.cu-modal .cu-dialog>.cu-bar:first-child .action{ + min-width: 100rpx; + margin-right: 0; + min-height: 100rpx; +} +/* ================== + 轮播 + ==================== */ +swiper .a-swiper-dot { + display: inline-block; + width: 16upx; + height: 16upx; + background: rgba(0, 0, 0, .3); + border-radius: 50%; + vertical-align: middle; +} + +swiper[class*="-dot"] .wx-swiper-dots, +swiper[class*="-dot"] .a-swiper-dots, +swiper[class*="-dot"] .uni-swiper-dots { + display: flex; + align-items: center; + width: 100%; + justify-content: center; +} + +swiper.square-dot .wx-swiper-dot, +swiper.square-dot .a-swiper-dot, +swiper.square-dot .uni-swiper-dot { + background-color: #ffffff; + opacity: 0.4; + width: 10upx; + height: 10upx; + border-radius: 20upx; + margin: 0 8upx !important; +} + +swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.square-dot .a-swiper-dot.a-swiper-dot-active, +swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active { + opacity: 1; + width: 30upx; +} + +swiper.round-dot .wx-swiper-dot, +swiper.round-dot .a-swiper-dot, +swiper.round-dot .uni-swiper-dot { + width: 10upx; + height: 10upx; + position: relative; + margin: 4upx 8upx !important; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after { + content: ""; + position: absolute; + width: 10upx; + height: 10upx; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + background-color: #ffffff; + border-radius: 20upx; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active { + width: 18upx; + height: 18upx; +} + +.screen-swiper { + min-height: 375upx; +} + +.screen-swiper image, +.screen-swiper video, +.swiper-item image, +.swiper-item video { + width: 100%; + display: block; + height: 100%; + margin: 0; + pointer-events: none; +} + +.card-swiper { + height: 420upx !important; +} + +.card-swiper swiper-item { + width: 610upx !important; + left: 70upx; + box-sizing: border-box; + padding: 40upx 0upx 70upx; + overflow: initial; +} + +.card-swiper swiper-item .swiper-item { + width: 100%; + display: block; + height: 100%; + border-radius: 10upx; + transform: scale(0.9); + transition: all 0.2s ease-in 0s; + overflow: hidden; +} + +.card-swiper swiper-item.cur .swiper-item { + transform: none; + transition: all 0.2s ease-in 0s; +} + + +.tower-swiper { + height: 420upx; + position: relative; + max-width: 750upx; + overflow: hidden; +} + +.tower-swiper .tower-item { + position: absolute; + width: 300upx; + height: 380upx; + top: 0; + bottom: 0; + left: 50%; + margin: auto; + transition: all 0.2s ease-in 0s; + opacity: 1; +} + +.tower-swiper .tower-item.none { + opacity: 0; +} + +.tower-swiper .tower-item .swiper-item { + width: 100%; + height: 100%; + border-radius: 6upx; + overflow: hidden; +} + +/* ================== + 步骤条 + ==================== */ + +.cu-steps { + display: flex; +} + +scroll-view.cu-steps { + display: block; + white-space: nowrap; +} + +scroll-view.cu-steps .cu-item { + display: inline-block; +} + +.cu-steps .cu-item { + flex: 1; + text-align: center; + position: relative; + min-width: 100upx; +} + +.cu-steps .cu-item:not([class*="text-"]) { + color: #8799a3; +} + +.cu-steps .cu-item [class*="cuIcon-"], +.cu-steps .cu-item .num { + display: block; + font-size: 40upx; + line-height: 80upx; +} + +.cu-steps .cu-item::before, +.cu-steps .cu-item::after, +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: ""; + display: block; + position: absolute; + height: 0px; + width: calc(100% - 80upx); + border-bottom: 1px solid #ccc; + left: calc(0px - (100% - 80upx) / 2); + top: 40upx; + z-index: 0; +} + +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: "\e6a3"; + font-family: 'cuIcon'; + height: 30upx; + border-bottom-width: 0px; + line-height: 30upx; + top: 0; + bottom: 0; + margin: auto; + color: #ccc; +} + +.cu-steps.steps-bottom .cu-item::before, +.cu-steps.steps-bottom .cu-item::after { + bottom: 40upx; + top: initial; +} + +.cu-steps .cu-item::after { + border-bottom: 1px solid currentColor; + width: 0px; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"]::after { + width: calc(100% - 80upx); + color: currentColor; +} + +.cu-steps .cu-item:first-child::before, +.cu-steps .cu-item:first-child::after { + display: none; +} + +.cu-steps .cu-item .num { + width: 40upx; + height: 40upx; + border-radius: 50%; + line-height: 40upx; + margin: 20upx auto; + font-size: 24upx; + border: 1px solid currentColor; + position: relative; + overflow: hidden; +} + +.cu-steps .cu-item[class*="text-"] .num { + background-color: currentColor; +} + +.cu-steps .cu-item .num::before, +.cu-steps .cu-item .num::after { + content: attr(data-index); + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + transition: all 0.3s ease-in-out 0s; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num::before { + transform: translateY(-40upx); + color: #ffffff; +} + +.cu-steps .cu-item .num::after { + transform: translateY(40upx); + color: #ffffff; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"] .num::after { + content: "\e645"; + font-family: 'cuIcon'; + color: #ffffff; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num.err::after { + content: "\e646"; +} + +/* ================== + 布局 + ==================== */ + +/* -- flex弹性布局 -- */ + +.flex { + display: flex; +} + +.basis-xs { + flex-basis: 20%; +} + +.basis-sm { + flex-basis: 40%; +} + +.basis-df { + flex-basis: 50%; +} + +.basis-lg { + flex-basis: 60%; +} + +.basis-xl { + flex-basis: 80%; +} + +.flex-sub { + flex: 1; +} + +.flex-twice { + flex: 2; +} + +.flex-treble { + flex: 3; +} + +.flex-direction { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.align-center { + align-items: center; +} + +.align-stretch { + align-items: stretch; +} + +.self-start { + align-self: flex-start; +} + +.self-center { + align-self: flex-center; +} + +.self-end { + align-self: flex-end; +} + +.self-stretch { + align-self: stretch; +} + +.align-stretch { + align-items: stretch; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +/* grid布局 */ + +.grid { + display: flex; + flex-wrap: wrap; +} + +.grid.grid-square { + overflow: hidden; +} + +.grid.grid-square .cu-tag { + position: absolute; + right: 0; + top: 0; + border-bottom-left-radius: 6upx; + padding: 6upx 12upx; + height: auto; + background-color: rgba(0, 0, 0, 0.5); +} + +.grid.grid-square>view>text[class*="cuIcon-"] { + font-size: 52upx; + position: absolute; + color: #8799a3; + margin: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.grid.grid-square>view { + margin-right: 20upx; + margin-bottom: 20upx; + border-radius: 6upx; + position: relative; + overflow: hidden; +} +.grid.grid-square>view.bg-img image { + width: 100%; + height: 100%; + position: absolute; +} +.grid.col-1.grid-square>view { + padding-bottom: 100%; + height: 0; + margin-right: 0; +} + +.grid.col-2.grid-square>view { + padding-bottom: calc((100% - 20upx)/2); + height: 0; + width: calc((100% - 20upx)/2); +} + +.grid.col-3.grid-square>view { + padding-bottom: calc((100% - 40upx)/3); + height: 0; + width: calc((100% - 40upx)/3); +} + +.grid.col-4.grid-square>view { + padding-bottom: calc((100% - 60upx)/4); + height: 0; + width: calc((100% - 60upx)/4); +} + +.grid.col-5.grid-square>view { + padding-bottom: calc((100% - 80upx)/5); + height: 0; + width: calc((100% - 80upx)/5); +} + +.grid.col-2.grid-square>view:nth-child(2n), +.grid.col-3.grid-square>view:nth-child(3n), +.grid.col-4.grid-square>view:nth-child(4n), +.grid.col-5.grid-square>view:nth-child(5n) { + margin-right: 0; +} + +.grid.col-1>view { + width: 100%; +} + +.grid.col-2>view { + width: 50%; +} + +.grid.col-3>view { + width: 33.33%; +} + +.grid.col-4>view { + width: 25%; +} + +.grid.col-5>view { + width: 20%; +} + +/* -- 内外边距 -- */ + +.margin-0 { + margin: 0; +} + +.margin-xs { + margin: 10upx; +} + +.margin-sm { + margin: 20upx; +} + +.margin { + margin: 30upx; +} + +.margin-lg { + margin: 40upx; +} + +.margin-xl { + margin: 50upx; +} + +.margin-top-xs { + margin-top: 10upx; +} + +.margin-top-sm { + margin-top: 20upx; +} + +.margin-top { + margin-top: 30upx; +} + +.margin-top-lg { + margin-top: 40upx; +} + +.margin-top-xl { + margin-top: 50upx; +} + +.margin-right-xs { + margin-right: 10upx; +} + +.margin-right-sm { + margin-right: 20upx; +} + +.margin-right { + margin-right: 30upx; +} + +.margin-right-lg { + margin-right: 40upx; +} + +.margin-right-xl { + margin-right: 50upx; +} + +.margin-bottom-xs { + margin-bottom: 10upx; +} + +.margin-bottom-sm { + margin-bottom: 20upx; +} + +.margin-bottom { + margin-bottom: 30upx; +} + +.margin-bottom-lg { + margin-bottom: 40upx; +} + +.margin-bottom-xl { + margin-bottom: 50upx; +} + +.margin-left-xs { + margin-left: 10upx; +} + +.margin-left-sm { + margin-left: 20upx; +} + +.margin-left { + margin-left: 30upx; +} + +.margin-left-lg { + margin-left: 40upx; +} + +.margin-left-xl { + margin-left: 50upx; +} + +.margin-lr-xs { + margin-left: 10upx; + margin-right: 10upx; +} + +.margin-lr-sm { + margin-left: 20upx; + margin-right: 20upx; +} + +.margin-lr { + margin-left: 30upx; + margin-right: 30upx; +} + +.margin-lr-lg { + margin-left: 40upx; + margin-right: 40upx; +} + +.margin-lr-xl { + margin-left: 50upx; + margin-right: 50upx; +} + +.margin-tb-xs { + margin-top: 10upx; + margin-bottom: 10upx; +} + +.margin-tb-sm { + margin-top: 20upx; + margin-bottom: 20upx; +} + +.margin-tb { + margin-top: 30upx; + margin-bottom: 30upx; +} + +.margin-tb-lg { + margin-top: 40upx; + margin-bottom: 40upx; +} + +.margin-tb-xl { + margin-top: 50upx; + margin-bottom: 50upx; +} + +.padding-0 { + padding: 0; +} + +.padding-xs { + padding: 10upx; +} + +.padding-sm { + padding: 20upx; +} + +.padding { + padding: 30upx; +} + +.padding-lg { + padding: 40upx; +} + +.padding-xl { + padding: 50upx; +} + +.padding-top-xs { + padding-top: 10upx; +} + +.padding-top-sm { + padding-top: 20upx; +} + +.padding-top { + padding-top: 30upx; +} + +.padding-top-lg { + padding-top: 40upx; +} + +.padding-top-xl { + padding-top: 50upx; +} + +.padding-right-xs { + padding-right: 10upx; +} + +.padding-right-sm { + padding-right: 20upx; +} + +.padding-right { + padding-right: 30upx; +} + +.padding-right-lg { + padding-right: 40upx; +} + +.padding-right-xl { + padding-right: 50upx; +} + +.padding-bottom-xs { + padding-bottom: 10upx; +} + +.padding-bottom-sm { + padding-bottom: 20upx; +} + +.padding-bottom { + padding-bottom: 30upx; +} + +.padding-bottom-lg { + padding-bottom: 40upx; +} + +.padding-bottom-xl { + padding-bottom: 50upx; +} + +.padding-left-xs { + padding-left: 10upx; +} + +.padding-left-sm { + padding-left: 20upx; +} + +.padding-left { + padding-left: 30upx; +} + +.padding-left-lg { + padding-left: 40upx; +} + +.padding-left-xl { + padding-left: 50upx; +} + +.padding-lr-xs { + padding-left: 10upx; + padding-right: 10upx; +} + +.padding-lr-sm { + padding-left: 20upx; + padding-right: 20upx; +} + +.padding-lr { + padding-left: 30upx; + padding-right: 30upx; +} + +.padding-lr-lg { + padding-left: 40upx; + padding-right: 40upx; +} + +.padding-lr-xl { + padding-left: 50upx; + padding-right: 50upx; +} + +.padding-tb-xs { + padding-top: 10upx; + padding-bottom: 10upx; +} + +.padding-tb-sm { + padding-top: 20upx; + padding-bottom: 20upx; +} + +.padding-tb { + padding-top: 30upx; + padding-bottom: 30upx; +} + +.padding-tb-lg { + padding-top: 40upx; + padding-bottom: 40upx; +} + +.padding-tb-xl { + padding-top: 50upx; + padding-bottom: 50upx; +} + +/* -- 浮动 -- */ + +.cf::after, +.cf::before { + content: " "; + display: table; +} + +.cf::after { + clear: both; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +/* ================== + 背景 + ==================== */ + +.line-red::after, +.lines-red::after { + border-color: #e54d42; +} + +.line-orange::after, +.lines-orange::after { + border-color: #f37b1d; +} + +.line-yellow::after, +.lines-yellow::after { + border-color: #fbbd08; +} + +.line-olive::after, +.lines-olive::after { + border-color: #8dc63f; +} + +.line-green::after, +.lines-green::after { + border-color: #39b54a; +} + +.line-cyan::after, +.lines-cyan::after { + border-color: #1cbbb4; +} + +.line-blue::after, +.lines-blue::after { + border-color: #0081ff; +} + +.line-purple::after, +.lines-purple::after { + border-color: #6739b6; +} + +.line-mauve::after, +.lines-mauve::after { + border-color: #9c26b0; +} + +.line-pink::after, +.lines-pink::after { + border-color: #e03997; +} + +.line-brown::after, +.lines-brown::after { + border-color: #a5673f; +} + +.line-grey::after, +.lines-grey::after { + border-color: #8799a3; +} + +.line-gray::after, +.lines-gray::after { + border-color: #aaaaaa; +} + +.line-black::after, +.lines-black::after { + border-color: #333333; +} + +.line-white::after, +.lines-white::after { + border-color: #ffffff; +} + +.bg-red { + background-color: #e54d42; + color: #ffffff; +} + +.bg-orange { + background-color: #f37b1d; + color: #ffffff; +} + +.bg-yellow { + background-color: #fbbd08; + color: #333333; +} + +.bg-olive { + background-color: #8dc63f; + color: #ffffff; +} + +.bg-green { + background-color: #39b54a; + color: #ffffff; +} + +.bg-cyan { + background-color: #1cbbb4; + color: #ffffff; +} + +.bg-blue { + background-color: #0081ff; + color: #ffffff; +} + +.bg-purple { + background-color: #6739b6; + color: #ffffff; +} + +.bg-mauve { + background-color: #9c26b0; + color: #ffffff; +} + +.bg-pink { + background-color: #e03997; + color: #ffffff; +} + +.bg-brown { + background-color: #a5673f; + color: #ffffff; +} + +.bg-grey { + background-color: #8799a3; + color: #ffffff; +} + +.bg-gray { + background-color: #f0f0f0; + color: #333333; +} + +.bg-black { + background-color: #333333; + color: #ffffff; +} + +.bg-white { + background-color: #ffffff; + color: #666666; +} + +.bg-shadeTop { + background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01)); + color: #ffffff; +} + +.bg-shadeBottom { + background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1)); + color: #ffffff; +} + +.bg-red.light { + color: #e54d42; + background-color: #fadbd9; +} + +.bg-orange.light { + color: #f37b1d; + background-color: #fde6d2; +} + +.bg-yellow.light { + color: #fbbd08; + background-color: #fef2ced2; +} + +.bg-olive.light { + color: #8dc63f; + background-color: #e8f4d9; +} + +.bg-green.light { + color: #39b54a; + background-color: #d7f0dbff; +} + +.bg-cyan.light { + color: #1cbbb4; + background-color: #d2f1f0; +} + +.bg-blue.light { + color: #0081ff; + background-color: #cce6ff; +} + +.bg-purple.light { + color: #6739b6; + background-color: #e1d7f0; +} + +.bg-mauve.light { + color: #9c26b0; + background-color: #ebd4ef; +} + +.bg-pink.light { + color: #e03997; + background-color: #f9d7ea; +} + +.bg-brown.light { + color: #a5673f; + background-color: #ede1d9; +} + +.bg-grey.light { + color: #8799a3; + background-color: #e7ebed; +} + +.bg-gradual-red { + background-image: linear-gradient(45deg, #f43f3b, #ec008c); + color: #ffffff; +} + +.bg-gradual-orange { + background-image: linear-gradient(45deg, #ff9700, #ed1c24); + color: #ffffff; +} + +.bg-gradual-green { + background-image: linear-gradient(45deg, #39b54a, #8dc63f); + color: #ffffff; +} + +.bg-gradual-purple { + background-image: linear-gradient(45deg, #9000ff, #5e00ff); + color: #ffffff; +} + +.bg-gradual-pink { + background-image: linear-gradient(45deg, #ec008c, #6739b6); + color: #ffffff; +} + +.bg-gradual-blue { + background-image: linear-gradient(45deg, #0081ff, #1cbbb4); + color: #ffffff; +} + +.shadow[class*="-red"] { + box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.shadow[class*="-orange"] { + box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.shadow[class*="-yellow"] { + box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.shadow[class*="-olive"] { + box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.shadow[class*="-green"] { + box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.shadow[class*="-cyan"] { + box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.shadow[class*="-blue"] { + box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.shadow[class*="-purple"] { + box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.shadow[class*="-mauve"] { + box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.shadow[class*="-pink"] { + box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.shadow[class*="-brown"] { + box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.shadow[class*="-grey"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-gray"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-black"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.shadow[class*="-white"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.text-shadow[class*="-red"] { + text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.text-shadow[class*="-orange"] { + text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.text-shadow[class*="-yellow"] { + text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.text-shadow[class*="-olive"] { + text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.text-shadow[class*="-green"] { + text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.text-shadow[class*="-cyan"] { + text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.text-shadow[class*="-blue"] { + text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.text-shadow[class*="-purple"] { + text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.text-shadow[class*="-mauve"] { + text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.text-shadow[class*="-pink"] { + text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.text-shadow[class*="-brown"] { + text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.text-shadow[class*="-grey"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-gray"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-black"] { + text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.bg-img { + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.bg-mask { + background-color: #333333; + position: relative; +} + +.bg-mask::after { + content: ""; + border-radius: inherit; + width: 100%; + height: 100%; + display: block; + background-color: rgba(0, 0, 0, 0.4); + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; +} + +.bg-mask view, +.bg-mask cover-view { + z-index: 5; + position: relative; +} + +.bg-video { + position: relative; +} + +.bg-video video { + display: block; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; + position: absolute; + top: 0; + z-index: 0; + pointer-events: none; +} + +/* ================== + 文本 + ==================== */ + +.text-xs { + font-size: 20upx; +} + +.text-sm { + font-size: 24upx; +} + +.text-df { + font-size: 28upx; +} + +.text-lg { + font-size: 32upx; +} + +.text-xl { + font-size: 36upx; +} + +.text-xxl { + font-size: 44upx; +} + +.text-sl { + font-size: 80upx; +} + +.text-xsl { + font-size: 120upx; +} + +.text-Abc { + text-transform: Capitalize; +} + +.text-ABC { + text-transform: Uppercase; +} + +.text-abc { + text-transform: Lowercase; +} + +.text-price::before { + content: "¥"; + font-size: 80%; + margin-right: 4upx; +} + +.text-cut { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.text-bold { + font-weight: bold; +} + +.text-center { + text-align: center; +} + +.text-content { + line-height: 1.6; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-red, +.line-red, +.lines-red { + color: #e54d42; +} + +.text-orange, +.line-orange, +.lines-orange { + color: #f37b1d; +} + +.text-yellow, +.line-yellow, +.lines-yellow { + color: #fbbd08; +} + +.text-olive, +.line-olive, +.lines-olive { + color: #8dc63f; +} + +.text-green, +.line-green, +.lines-green { + color: #39b54a; +} + +.text-cyan, +.line-cyan, +.lines-cyan { + color: #1cbbb4; +} + +.text-blue, +.line-blue, +.lines-blue { + color: #0081ff; +} + +.text-purple, +.line-purple, +.lines-purple { + color: #6739b6; +} + +.text-mauve, +.line-mauve, +.lines-mauve { + color: #9c26b0; +} + +.text-pink, +.line-pink, +.lines-pink { + color: #e03997; +} + +.text-brown, +.line-brown, +.lines-brown { + color: #a5673f; +} + +.text-grey, +.line-grey, +.lines-grey { + color: #8799a3; +} + +.text-gray, +.line-gray, +.lines-gray { + color: #aaaaaa; +} + +.text-black, +.line-black, +.lines-black { + color: #333333; +} + +.text-white, +.line-white, +.lines-white { + color: #ffffff; +} diff --git a/src/static/scss/global.scss b/src/static/scss/global.scss new file mode 100644 index 0000000..ac636bd --- /dev/null +++ b/src/static/scss/global.scss @@ -0,0 +1,90 @@ +.text-center { + text-align: center; +} + +.font-13 { + font-size: 13px; +} + +.font-12 { + font-size: 12px; +} + +.font-11 { + font-size: 11px; +} + +.text-grey1 { + color: #888; +} +.text-grey2 { + color: #aaa; +} + +.list-cell-arrow::before { + content: ' '; + height: 10px; + width: 10px; + border-width: 2px 2px 0 0; + border-color: #c0c0c0; + border-style: solid; + -webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0); + transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0); + position: absolute; + top: 50%; + margin-top: -6px; + right: 30rpx; + } + + .list-cell { + position: relative; + width: 100%; + box-sizing: border-box; + background-color: #fff; + color: #333; + padding: 26rpx 30rpx; + } + + .list-cell:first-child { + border-radius: 8rpx 8rpx 0 0; + } + + .list-cell:last-child { + border-radius: 0 0 8rpx 8rpx; + } + + .list-cell::after { + content: ''; + position: absolute; + border-bottom: 1px solid #eaeef1; + -webkit-transform: scaleY(0.5) translateZ(0); + transform: scaleY(0.5) translateZ(0); + transform-origin: 0 100%; + bottom: 0; + right: 0; + left: 0; + pointer-events: none; + } + + + .menu-list { + margin: 15px 15px; + + .menu-item-box { + width: 100%; + display: flex; + align-items: center; + + .menu-icon { + color: #007AFF; + font-size: 16px; + margin-right: 5px; + } + + .text-right { + margin-left: auto; + margin-right: 34rpx; + color: #999; + } + } + } diff --git a/src/static/scss/index.scss b/src/static/scss/index.scss new file mode 100644 index 0000000..0ae6983 --- /dev/null +++ b/src/static/scss/index.scss @@ -0,0 +1,4 @@ +// global +@import "./global.scss"; +// color-ui +@import "@/static/scss/colorui.css"; \ No newline at end of file diff --git a/src/static/search.svg b/src/static/search.svg new file mode 100644 index 0000000..8238711 --- /dev/null +++ b/src/static/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/static/uni.ttf b/src/static/uni.ttf new file mode 100644 index 0000000000000000000000000000000000000000..60a1968d08cc6056c70b5402b2effac43c6f96a3 GIT binary patch literal 26164 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 literal 0 HcmV?d00001 diff --git a/src/static/version.json b/src/static/version.json new file mode 100644 index 0000000..05c4a4c --- /dev/null +++ b/src/static/version.json @@ -0,0 +1,3 @@ +{ + "version": "02.24.2" +} \ No newline at end of file diff --git a/src/static/video/error.wav b/src/static/video/error.wav new file mode 100644 index 0000000000000000000000000000000000000000..b89de3e20bca41da52c39eab9ed17e20017ac8d7 GIT binary patch literal 280044 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 z z#6968jN`LxMNdgDd~omhJPX9~^47A)9+DZH2Z#J`$z_@dOWOO8B={%Zq5+B?XeR|!eaWuv;C7xS*F)StOSiBYQJbd>l)~f7%CgvTT(2$;&UhX zt*zouoBigfp_%c6uDiZGd6nI&J!+#Wf!?e9a6rPUHl&TVvr7)diU||xXVt+bw7zNgZ3k@+oVT6x zJPSOXeSi4g`7Zme_}2NV_(b0@I+DM5wzK(BcviXpz;*xB)r-v309e)&9HkwZOvHEeKl*ukcpm!R(ofY8>X0h9jeAd7yb!YRrO-|Gqkr-J3Pjz}VrZaM z@x@Bnld9-Nc?lycnRzQe%=%w=JKSh>a&8jUWE*5>;FX-u)a&uDhv~WZGAkTlM%=BQ zq5j65@TmH-x{11zx|X_w`nEbv-2tE5F%rvb>0RHXeyCmn&tM4IUbF%kK9T0U|BkZz9D}}PU=`%M z3UI$GggQmnM0?>f~p%Q-w8 zh2(kVeWi))LJy$oRKVf+Jk}vr0oPkaNY7P;Jos+^L4(B>c=y@2XK>Sb#A(tM4#iZ|=O*lp zefai^;5DiQr#r@eU=WRkkQ-tr=yN+kX7WS8M{fK+iTV%ReH?+ZXtxvS3^PYBM@Dgr zGLRpff~JxPZ*o2fmQ$V%=!?zVWqj%00_41ZBfpa;>WeJpo;lE7#eObzOzNbxTxqpv z0d9+8d_dh%-C37g*9rIcRg(BK@z#FuuJV=)ehYZe7dx?4uL)D^EFSP{B$Ts@UBovE zxwxF?JhwJcD>c+LWz3`yKXsX;lvOQ{_t4XxtbV z#gO=lIkKx{ro;K2?ao=>lA*X<^|hVQ}2 zp{AjR;WDJY%A%z&i{|EjI-0w$AT2KKE1kraG&9YcNFwz#Z>oP~UvOk7r2Xj~c964g zBwb6V(lA99MN?*rb<7-1)b(+&tySx|1C8ZgK9B6x?_>(AY6jB4F-yA#CX+$imwitO z&2YH-Gn7wBlMhuEg6VXVjomqzks;M*(u37ix0UUbiQ>P^*?Mv(5P;$ASETo(0eBr#$)bA0Eh2T%Gj>a@vK=%$U6Sh*|KhRPf=BHFT;_V* zLl(jSx)YVe8p9E33S)jx;A!9vjm4KEwun+vS<;>Fmj>O?8S&GZ`3CR4BDfA;M40BD zwq)QN$aL_}GI@%dX)Q~XHHY6Dfg|#W`Kc6rz-434qFXps>fxIU3U6_f7A2XoT)2dX zbPZmscm7={WWV_nf;R%CLrL@ojtut3%S(ZgzjUx>a3y&Fdo(*V8z=tLYtgafd~OB5 zv8_8CtR7Ab`=HPFfrHtaz1wy2s*NKZBi+zt`UQFgE(F#GCgJxl9r_v!Fte12q`=3y z5^02=>jN&`^TEG^XVH-qq=*fuqvPcV<$3V}3_>S&Dw>FWpwb59H5EtX8PIm^@|Sp2 z_TcjxE?+J$g>T?E^VtCIOQksLJK=ki(tzF!_S_1%HA!T`-*LN%@DmzAj_0r}I~_q~ zWbcI>l5{4E+^}nfSaNg^=ZRh#lw_CXl$GGu$tyKV<0S7;w^zqP(Cl)AQ$h#GiPwg4 zIERjUBR;J^$&Wt^9fez$4wvdvq&qC8@50Q?HW6VUb4#tjOaBOW&{f=d#-VcWa@7yI z14D!oWb9`PCE$|}aaDFDr|nCtLJwhYTr8RQtZ7hVlr%ZCLj(N44zC;;pf`8|=fi$F z$V~c+zPifFS;}K#VP$)KDc@xE$k7&%e-UNM4%%hfO$NUqi)FQCn>Bm<8Yn84Og7UU z<70?S!)W0cVC-f5)0iCRitDMHr(2|bq@ANr)jv13H`TR1u?|o0B&?1X69$-{nsXag z8!G7T>-IxL)Tw@{euH`VNgSulr5vb~DC3olVFW$p`<@q0PDS=K(_uWGbDrd>7kTbC z@Z^`Jg)quSxtaZJMxTrhX)gRJ$;qpdt;xTqK27=4meuBQy>{L5o%OY%`za&%IcVW- z`O1IXUj-)9LC;uEDNn%Nh?LKFs8%U7ajbBbb|yOB!HqQ9bKCdY%Co7?;W%NR=B((f zz&)zBx10A5JafYXg93y2*(`zS-z8ieGVyG7lc&P<`NmC!*Ja@TFpJL2A<`LaONZjV zcT03+CZ>|*e?pe*Ih&x?xE?3t$0#lNO=6V(C(+4I$`->h*^j4W6RG58>fhC?A)xf) z-g6thd@Q|8V>CxJRncgh!J{pqou`dzT4)nBOEsO<>(sl@U!rs*J;5p05O@9|y!q$R zR>r9;s#eMmVr9iW`4jF~Ghw^jN1L2Zr=EbKx03|^1vZ;OxmnQx9&Kmzg;}((*M*1m zBUV|E;Pch;vsjBRP=GE2Dd%Km{BFNV21;gerf6Z0eS?iKJab1Gm=nmt9i%rigd|oX zwoy1qPBxeDlqcjy=sdUh79oH5a5w@JWeF^@$#{D2@flpkC3=TH=a4sE1bb*7dzu~i zFrLK5vE#@SyTjaLCoAA(&vBRi_jmrk!SIRjLujBK={CK=-Pi$>`YPu^_h2d5C%Xcd z@FO-sldZsWx)7%KK76$Humt|ty3k*tlc7%B?%t4X%q=Y~JuCetErWk|86J#=;Su3K z@B&w)Z|h%tvc37%B=KCgsJkThQn$w*0vtzLd{sF=Xn z-U?4pS>+bxNb#rGP;o)g3NOAWZwR??A}7xiHmNT8QWOO#DW{=mw2#opC%|=@i)Z)? z`k|hTz~YELIwBT`b>=>(l8%%PgO~9wmPP1K|7l&O$c}t27huyp=C9|KmdBIu4X1Gz zJks-p39*v+T!u&b()&1?zP;WwS;fJ0kN4?)a%Qe_XxYo@U$;aKh0jO+hzyI$qC#{< zq-^+1s72r(|7%YRbbz0(>iF|3L$te(m$w{uT@`*8hy9_wak4Ubdvev}`}XGcZuCVI z!F4iLUs@k!KF}zV@Vs@3TJhG+=Pfb}AJl8|2jA#l_t6=XtgNMKL4Vg-h&{n^jza@!O&bv2DL?SXOK&fLg+11@c6LkGiI-6dTGx(=V=duwR; z+pyV^-}*7WYr@WWS;AV&2TK*>bmLDr2%|Ld+7bM-^1yumC~imPnXEj;UDPI5C|+_W zA3`s|8?V<}ky)&!s~()Ubmvv)dR)N@o_~X*8na4%^w_xcQ)x?63ZnaGi85@*MM2AqRViF2hTKsev7kXO_}yFcmgwXY@ZS zKWhi?kz(i#H6?vW9ZR63EMQ`_FrzGzooA!GNcK&ZCha5B;d3esBi_&CDwSShm)uhJ zQPED}P%cpRRu`i&`8Ce`3-lM{P@h))&DTfBKD+3D zE6NS2B%b^n>dNX%s()x-udO<$?5G?q#yAn~Gljg6=@98&Mc0z)A4|8%0nX^-Y$-ZKjC9CU z42<{1ydC^6e0{m6w1erKIjg4xp9Hsr=7oB)mr=$tqTT4?ScHC54nM679+N&C7ycFb zk6yD4!e$iElQgE*q~p~GKYAIAy36RZFPT#o(Sf!PE#)FKmC`Wg_daUAzIU zCiBVf4xQy4$!QV)qDR(KzE-YPWK*nC)Z~uSUqO-(AI2$p7CcvRash|iYP=?||DRDm zfo7kZZQLtaHE9RwF*-}Xhx0`q1Ph1eK&{Mz=RXe~Au}CGv-u?LLSu;lmpca?Dz#xg zu4W#dMQ_mz=7)Wp-P?q{cmx-+FS|xl&&ueZ=spEQ&R_+0Vu_r&YIZ(zVZC1uoDBS8 zzDgqNIR>tqId+nF%MQ*AdfKAi$j`vgzf+x12ooV}A8^LVlqTT`C8i z6P=aQrRj6hYNnlb^>9t)-Lakx<1yWQU2U?-SJB$%qif%#kN6&+TPL)!@rp5uRq%h- zszd6ia=7Xtd*o&CQ(lpZU8H}m|7mJ$u4Fw3?I2_|TKZZtIAb~+2O5W&29Y+_nmd}B zmt2JNN|pg5d!baJHFCvc`5 z%qWoY4p;to{KD6g8YL}BDV4H0qjQExDzLlvckdi#iw5LflW9{JGw+a7jNt$c7;8*gIx$Dk7$A@-55DjH4J>2E- zj$Nl?sy)hWBYLw85=xA1N0MOAIt8_R&oOW4j|I$MUqy4rU1nXeo2U+cNu}nR}LUN66&3 z4x}yYX82Ax10Jn2@-<@PIlj)$q@pyBlr5|4V7J*wI)-QcYS;J|BnMEyYqrl(XcWqJiR$A`V~1eE5+! zVHy--zjK9qOdV-&bhc9PGCxRX$*!>V+Ar&im-ifgpJD8fcH%*97v2!g5}6q3&vf<$ z0_SAzJoeadAqJ%>5-A?-jc)3P+tQ5BaU}Qb7Brq*!v{1RippZ%XL(~!+2LFa{|X)o zb|Od8$lt>M(wE^IOmE3*=DE{or%CXY8brQ_e?@0R55oYy&$D(Poi;l(kX>{o$2qq+ zmbgp0Z-&N(YLHs?@pqKRH{9O+ySqZVGChs^&k_`a9dMYpDjF#+YbI&V$gI4kKW{wwmKkVRi|Ngi(l^%_-$$H3ufH^X zffHQ)To;@(o&BA0&ah*dV*#GplXPWRZF@7ar0+-@N)KU{)SW4ww3TUzcENtZwbFHj zR)LY6)8GA1{onl0AW6)nmEaj}*v06!Cm>ms@mal3JWbsS_dsWEXOP~Y*7l&Si(PKd z;rPd1+39fNpQ7lO-=AKOzo6PwB7f zgFB^#x;5uSR8>M%O*N4%@pEO0(x%D_A-}$64;|B+G*WFy-9s~v)2D#Cw|Wk{V-qgg zf0bWJX3bMhQ+DUiD$0ns2EA~+Vw7AaKO^lWjgfL)NpolgQon8SM}^sImu3GlimZ=H znpZjyhuJ<@t$OysrPyCxmIkFm@Ct2YYM+W41OgO4XLsD1@6Z9~$NEOrMsmZZ${(o9 zTfHW1jy3Q$)4(>!kG_28;FI8M_CDL$&D@N>CON$%I)h%*8F)`D_^?8xejelN+sEFgGTQ2& z(tgsCLVaOUWLxB6=o?zeUT(HlZch_}ZMg&C6bL2bYVkzAMV2#{REB9e1uo@VbfcEA z?t&zn9MVRzr?4V#DDsQ7#NDXv>3r@T#7pv`ioeJoXGJq>Bby^r(tA>kZl6@L>AUdp z_uzN`H8cMpxhXls`81fbq(*pXI5pgozO%D*2DoTepDN9bC;L-O5DYO5KRGQa=3q=E zk#UZU!+pGi#L|A6u5(CQpwEi28_{2+rYFIxIq%=*AHlc$q4z)U7T(Rx=|uWT;<^KU zUe{n&)rmc)>+ur5=ILlA&u)U>=zr%P4As!(n&r>#-%Y>I0+J?!@!N)cDZbt5bJNS< zcYB!JJ$VK9gcI!bXK6}ka>aer`|*DdCz~A$p9^n8*GhqbF_JuOAw@~WNWPz)RaaEU zxC7PW`EI6Mrc6_p)F|Vc#~m}t&EqUDEW<6gEDg;I%xY6b(_-TmqrxOYQ8{3GX?$y3 zg~x57?x60iHm7cy{;PhR$!p3Ve=2@zf-K90_J*-lBNt6)uTuBPqW|PO0;*V}#=Ythar(dNxbO zj`WGC;gpTZIg<;d981myJ5p!6pJ8+*IU9RRdu?PLG!U-q&_~^x&uj*5$!_m8ub%#O zjpvIy>U!lm?wsZ9kB@GQy@Fk|pR#G~$KbqW*rN7}_OZ?;P8D5AgJ3rqe7SsKfRE?! zyh!jZ-=^E)g2i+Jc4I|y1T)DO_Qp^8E?kTz!U0h$=SK(jLd{`*w3H8! z&*kr}z4wKl+%Ye=`o2z)sgWH)ii=w!wDYa{W>$|P@@=$kQ1-H+Xkt-?(z2vcAe zEnW|Enm+T$0RPcHc?%%pAH zzY4Nl-4VJTGK7nU_eD-dYSTM%ShAg5-hVYr{Tt`; zcs|?9cpoR=EZ9Ojc2;-*tz|=GH(^XYlsqQMq@~louTTgc-h{}c$m?)8e1zGqCHI)_ zk`Iz|u$*%7d*3O%5x%kWJ|8>5Cx3{0SXq*)Zg%#EBt4jS+ev?uI)$^sv1rHW`f%;= zGx}mIeD5u2PAy=b8ezc{2o?=q4V?(JVHb9g1V9OV_p{g-&49{z3mqgiFeUJ(_q#{$ z-R$WP#rALX_hQ^dH{;BC0@JCDvzT*Kdj9n48Bf#ac&*+~^dilMgj`Oi(e+l>P*2A* zIX6@{R0Z}^3;c~oP{|f4_bPXB?^&hNsy~a}m1`BE*j_v>-c{$-ywO*U`(126q*X@RwiLLosFj%7S0Us3U4)7 zNoQzXFYgH0W$31_>{IO1?Ro8sY=v!?(p#lpOs$%lD`igd{N$9Ra;b+>bhbkoV_nr; zO?<_CfAby5i_c&#d%-WfAGWaw~rn zXHv1Um8v9>OS+@$o+aOSof)72-}$~U9>3ttSkL6wR#K8)Lv>8Re}5gOTNN@yPXglt z^I#8c$5YoKSTA@DH|?zO%5Vl5$9kj@`_f*~4i3~uc#^x=0Z->%lp8(dJttOPJc*TX zcFczJ^fhdb2ykEUTs=B2 zI-FhFH!^C|@P>92cS0Ll&#ttxSVpl&A&2Mo1`_dTd?shP?^KaB;P(4Wrj}=wui)OZ z1m9^BT(GzKcd3i|+K%%o9}4+#W<@J!{%k?QPi?m33l4?m>}ST%L8`(@-wVAd02^*U zr|%SWxql^>Bu&{rwH30_RWK!bkh%E+UX;p#gg}S{?M-I$6o1S=5+>8B&|3PRH{wma z6}g5JD2BVg2uX{~9>Tr;YW{TBEZ1_9{||jLef?tPW3Ty+X8Qg^Y&w=ZhB>OFN>aUP z$I=#&y=_acbq*-fEj1N2imCT>x{mXcBa7oGG};cf9yVJ>H9CI!aKCy+563t6Bljoo4{uv`^xFbE z0!M=zf}LuEOOe}pfF2f!)MgNL>V*|)l+H2T8ytBdxwfM@n0+vFb1_}ftB20`S? zhgv%h=GRKJw>j*GE~BeFl~0oAQT~IEcAsj8dI2n^p6a2h8LIorZ%QM6lS{PztW&>I z@6h-)*@k=?rVi^keheiTPURyIQLq}XUg}J zBfQJ$c!>`=a&O zMH|@Dlw>x$M%R~{Ddi%Jf)ix3^RvCW2^%Y)w59Yup5f8F8~zSCLI?T%42ET~4DQwq z{qoeGh19TbH$G>`jXQe*;>^RU*^H20EiOEWU5F+|*WvSR z9SoD(Zp_`Mmv15G!z8}Dp}?cSt7@v=@-*;L!;^X`DYk&B(?2Te(>#n8{N-7L2Zv3|B5V3)j_ z+>dCkWgcl-015vW8=tc#qcMwdqyC7#5F5{Ok|E1e|}$zH#>dmG_BD(p!f8Ghqn)X_8a_^>5gKKPG~7v=?m*i6Z;Y8_doQXhtSa#SMG0khm5>0zoYwogz|G7ulKCj$=G=zNw`jeuqo=S1ZK%? zo*I?Bth^%LuJ&vax6880yRu)qB9Tk8Nee<2%r6@NyZ#}2^lfaByK72m6dJc$fkP#a zsw@OZmFhlSJt|Fp$oXNC$j!9Bm{zK4c4>OzeY>g3rS6UAtu^}YbXfTd`OiQ2-(6MC zRK9~7=}}CF5A=up19z+>*lp9fpFNAdBS)_k(#X5I$X__g9gl-aH<`Q72-L^oWcc^T zqOle9B~B;nl>9kPJ%jND>VX?E!@+Jn2n87UW1gx>fz`^^4ZzS^*p#xP%0BY zc4}x58f3@FJ9N%$xLr~s68eZQut9BxqyBX`GgDXtA6-#q{)_03dRSVk!jHnI{>RZ- zKuL9`TeRG(tE#ITcXxMp2<{fNad(2dyF0-W+?_yhcZblpwwL?8w`TV&)~viYlaQw5 zzyEi>bM^`Uq~WFlu8c%f+Q}i(FCmGO~9>zguRI3-tAE+xu*utekeC)5B%tRCq z52iDTn#{hCy6A^_={Kp4U#%Qla5b~%EIgCvpgtUigOyCa=qdNdMRa#eXBXC#yGc5G z`1*X3+%z=2XBH`lH@1fOQs_s1%u~ zS9+tj%gf5wlM}id>KgikZD=j#pWLDM!4mY#wBfyqH6$??i!iiCjFD+xT9Gx zHn0z6zxxKPTT_xIM>^U^M|9t6Cs)ISe-6jS4%%ppM=XHr)G(!a;A1o zx4;+Z%0JEZVkX-@+AhF=RK@j+J4rsdJ~Pi{>qqNC>w2r)8nwh*tQM0wt9ifSpekn3XQ18B@okEK2^Iw4Oc= zUE2E8n$A?mXgUQVf%}0v`0{s$2jEUQ7xLgw`7_WvaLWG&O@tc%T3=7!OYb&ZK4;NX zdb>B^r<35_?tz{!px0J&ORjUCgP!_yC13Za_zRFiTuGPpQ$A-0&?CF?8NH1=B^!My zf|v`R)*$XFb7Tu~U95%IkO~*R2}!Y|JjZ4z?<+HV8S?UWl)aRd z)NWNrtwozt@6ugmhuj8I+jKguBlr%pWqR~=-*q9qhBL))$YtziOhJcgY&dRcqd%|D zd?XI^$VBn6aN zm1|Vf$ld>`T7d@QlbS>i2w5N(ZRcK`4IX?u z5KTpQF|kiigV0+c+$(Ix`*)aq&;zvD%J}jJ(SN=I&&PfA)KYNnTZtb8xokzW0G{63 zq>-19f0}{1PzT>uS$4^FQBgjjs{WvdV=A|N15f9zc#{j_q(=c(UZe z`PLC$R~I_i4d^M2Xg0eC%Q4I+=_-240lH1+qfCF3b>-W>nr>5t{5svwC#54Kj@m$Uen8MRqAFcHqwQL^>x4%*h?uJ;doc>P~6x zx_Hej4HKbeqxQRYjPaZ?n{|-Y5;rvNXME!R9`Ehd+o&oaf5*R3To(_s|auZ~W% zhW$$Kmi~=ha$0ixm|+6Bsn=$kL- zS1b&7)hVB*XbcGSbi`&EzEnN>R9esL zIRYQ8MsZhO5xV49{3*%NwCF7I>I2D13=38Y-o{DNl#b-7+?Vo0qa6^L8(EDL(ZsAD zmfYM_oRS6&DP1s$2Y3Q(7Y~aQxdlyu$1;t(+XZye4d@v^@oX>08{HQkQ>#!>RJisb z1s+{J{K)IVUZIoJ25ox@JD)k?9z1vVI8(}y!G0qvAYTm0?~SS|Zs;*&qZX=Ns+Q_l z)d=RzzMLDI;KQ_1+~t{_LYMt;II8z>15f< z9pa|^jobk9a3@@ZigY1W%Iq4UqqmNJhrT#Y%oudP>zex9yr<|+8uOc)Td!E}+8f4g zinnK35+97;ijTGi=g1fs*A?-ljHQXal(nPvu=%a|ydm9ih|Onl*pXG}A?(8v@<-g% z_^5qyTz1<`Thu%}#$w!VtWU$tpj@_1&j`J=M3ucO1{)cf2Wuyw^P6@xEju=j?YZcN}%p z!$*7D5q9ly_3{??&h(E$pB)`M%6_8{TI27$FMspITLF_e58V@gvtJ;s5w*d1SKyBQ zC^zyAy@{i`x$+P8h0AzGE#&6g5P$v?MOWo5MKg$rr%5X3L8-W;8by+IxUPsU-tbl5 z&{)Md!Z?$@jbnx+y;uKKe~*^aXZqHLPRu>^Xk%MvJVncC3M6bf1ngw`!s=x%n|S?~+zlBGU{4`)98BV*yB6kv~g zH0Y+`r)p>*o`i>JqX}dq8}WTzg$L%l@Ksm`%cD^wIa~|=aWlRZE%=r^Dm3<3@5{lydBv9dv89REWVlO5H9H>JlYEQvd1!4$hf^cg*);dC+`55 zELXW1je~D}BJ?U$i=1f-)VJ@Xeb(X3ofGK>!&NUfWrwVi6p~epV~13p8xP4JX}na1 zf4%~Y%_szw;`o3v8^JQOguP)V-X)J*3TM(4D4DlmpcUtq+KaniNA71CG`ogKgT05M zvwiG5lZHaY_7_!60}-0zKyykn&#R@bXjJ$(iA5P zKZhr0tC$rrHDVXXrr2A?mBF9i8nW9Ni^CFQDQ9VD>1?@Xd1R??X=TZ7E@sXkm%JSQ zq1u#SinnaAOoWv`-5wKn-&Q}iJmlKRFtDvK-&g8d>ig5dF;>$`+gqd2E`fXcoYti| zXg$@~AH;K`{^hg#vwCWKHn}##PALp6Hk+$29mX|X-<;*0iH;yW^NUiAsg{%($=g$G zDI?OuX>(kqU8j6geNTf2@NM744><}d*h-v%34x#VnWp=<`R#D568+2kHMz0m^xgC( zLr}?ZFK{O_Sygx4akhc0pmm>eE%S8o93yi$gubzH!Fj=IG?k8QyG!M`f*JWX^+)n!iy)aI51S)?q)jl{KpJmr*VgDE{2b=yh z9@$OG^~!e;=;GN!Xyke2+u;eiBGrU%LQSz;WQS}5rXk~Rx^?dRvB^0?8J()og z@X$t?ea2*VQSfbk6S6|~l7+{^Ab1P$p%xyhe0Wgik@xs2JQrG`wa=mZr)ZwWhL6fEGck#Mod8^I!`^7Dyw6um={ek=)60xjxGY5EG1 zr&&T~XpU@)>;%u%QruVS(5DfHH)JKG*@qB@r?UGQ9WESx!2fkDGKE<|DJGz&EW@9& zo$pExvdslyL|2DdQHDM5c$mWtnIK=PYN;!!x8O=nRgY3XQ1@1yB`-QpDUe9d_x~27 zdaxaK@oSp$Fbe)N^v^GNZfemleFKfQq*xh0U1RaI7!{3ZCY|sTc~Sh|XXXU)v-PJ* ztp$JYNAiOQ=#rj|AHNlM$0hg{UcmP1#q2l=4Wy~?JhBM(-Kx-Nl$2bd^q?4Q5o#W) zht9E$o{}QsGiIO3coV3*82 znq2G+N^1Yoeozn47?{W1+Sa;T##qyI>qF~DdzCmL?)Uh1aYy40#Rk~>!;!@_*LcS`-u%%lSeMyc_H}V@addd8U7MZzVHwnM zKEa)mm@z6{o?a~Vuawit+36u%p4>a_OX^uif5$XW2hVE%41aApzAn;hKRj3>c#`~J zvA`FUk$wJI{(Ao7zG2X3>UnE;UgCM_$nRW;d&)A$BZ#!6oXL)%t}3pso{FAwzI?v3 z{xklf!Q#Og%<((P)bAw6HVz*^R?#J#hatL*T*@i@rEaKOPhnzoq;K*X37@R^xt4LF zl!iNBk_2u6@?&TlicO?|S}4XV%#Z~eXnv?IxjHn+@zt0DKF8adMC@>0r8T~I^@c%s=jZs)m(hT%bGZ}hH zXLTFZTey!N7}5=81EGWsW50R|Pj@m|ml1FdKI5R-$urT&j$|#L=z4HEuH&9e;LKS; z*K%=GfSmMonDD&GG$Db~oxAfD z<^&=9oc&3BWH(ApF4^wr56+a#J=8{g8hvqt4dZMT(IKyAa$@1HwfMiMKEUi#CfZFV zmu~n1Y)B{bj{Fh%6bZt4D^K=njZ_V- zS4rl!2K$=s+)xyp2A@Tb_$K--`V@Y^8aBMcJOK#}{nak$n<}%Nd?l|7QsvBx#n%qckapuF3?3VJ9 zE$YSd=@{)sIpM2xq%Xi2l|y8*viTl~XR!?DwjKiQY;JJFv^=_C3%SF=Kot1o*U-N01i#z;D*3@Zt|w! z)<8~r+B2dzqFrUb$@1W#o$H01m~KlSn;MgvmtMWr!p}%P-D7PI%g-2FOvLD+R`X2hO+XqIc{&}-TdUcesVh>(kBl2hJC-kI(- z?yl@$zBvy&|G_)5!&%)~zDr02EnzTY`Pm((%7f#yr%bvU_X;7Mw>TvRB_7(Hx z42A>Q=u9q4r~OU3eSQVj2eg56{;J$fTKU4>RqWW6-ou`z_~Y8Tf4bV!n7je5^$Pye z*yV6ec2{>7+an6(!p2xY!ME$@kx*|F-T8TVgH{39p3G>r zn9HoQhE6q|rjMoot;r|USu`(Ijnprc%~e_O5#-|RyvsdxHd^>iZZnlpsJse~Vgatl zEa*k2I4Aef<y3A^aLxxqE+ML(~&2!3vcL>E+UR5hu9pi z`Ukw;)9G1nCL~6#p)_vsmhd(X{PJJKC4LS)|1gZ=huq)19*5_6#_9}N#=Ue8dEPXh z6@@jT+5?OIAX>?9JR3#|ql8v)%M#e?r?CUgV6q>XkkkO43qa12YTTOXwAvmgRJ-H>F&|HS4QD0t7 z{v5T+6)?b}ZRnlhp6_-;puObk<9ZE2asl4At!#WtJI-g^PHUCcJmoTE>rY9aQkta< z$Vg2u>iN%IiPK{j`@l_^zU^=nvdEC{^tZzZYu)wj~u*H_$^>K*8{c&pL! zQ=A-82YTLXpr!`1@v{` zYaL*3_6+}VBi(cyguisp*%5Vvbv;8{TiaOkial~ol?coF2id#vxIcPC>*GnNDyyu> zshFqgp(@S;a!zLQgnP?H{N{fPUg0|5#{sZ(z3{kZ!n_=)`dxJz-u3VDuJVO=qz>|3 z{VCd|^^x2l5=?MJWq6o{|+qHm=bvOcxYfWqV(uEXH3g*(eE zy77Kb3YFk_aWA+bn3aFKDe^1apWO2)a{Ra>ga@385$+!O$=$tVkKBUn_$s>MPmyZrP%CP8yW(^#`lvsZ1@ELJ6}{-S?lB(9X{WW9dC zB;E)^{t2hbEV3tm!9{t_KIH@F(p)$+tN8tQi2KEB5{fOIY|~{SPVc?&9V*DTLHbUW zaz@Wd7wABXqtZMw77!`-4C6Zf=ABoi*ZRCpsxIKH4Oj zPi0kg=bOD0eb1$CulcU}?f)~OL~i)4IX)&nwr#98u6+Es_|tF>p4um&r@XiRu$Hmq zpxLy(&0_muonUEh@zB7L2;Z=bxt;m6MQL5h&Usf{?)cy1?#Fe4TI;p6vR1+iw*(6O zY28wNA8iNjDF?MN_&!gN7C)hSqsmF|W&zlL)dNifZ#=1>%s0;4(?$h4Q-f{i` z{*=JCK)Fy6_$fMC$J4`g$hVfDWAhz*gk|hL>*CGoN!IrY-A;dzKCK8j`UE*KKhLKY z%ohW>AMeJSvYl=}mwXX)*j!B1|0*u4PN*7awc1Ivu3tCIHmoxIVYtt<(-EF^EDd0N z^&|CN4GD&j!EB5%);6k)9brc%8P6TF5;WRE`eV9hxKqmM`k~Jl zHD}rR++p|dp4&k?Jf->hTyA1dIVU=kJ98KE(0x>0R9Enbd}bf?fv)lfWLfUP9mxiz zz8*ecJI~aHD2pkOrrz-PyooAh3vgY%6=KATWGDKNP3un2P9T^qR1hx7D1202c{ar< z`F;6x&X76i*{9JZwsT)`iqph9q+HLT?HnS@EAjMR$UdnHxtkBNtGGG0(7K+FiN*JS z&)XaB|1ZfpT%n7|4jn)PccmMSvvqv_D+J}dvtxq4;qBT@zr^Fn%E)YZo<#*Q;uW93 zqAi0GEsqx9x!r~?(`T^WI&uELfKR~bD*J*y+JIf|U$Un%ozzg0NPIf&1gth*!m5YkCneb?^e@cxf;DYHIkiF z-eS7ln@Zv6Bv~%{akX@6>t)Skt9WWfU>;wW{-J~LT{MIA(<3MmY4We=%x$=9G?U4r z$H{e`6kd{9Qiehh4eh~wfja>`+UsB%t@V)~uwx>TKIqK!N+>WmlpL;6-e}{}+$a_$qZzYSpwz>JoP&_YZNW*vMcv6tQHr zJR;9pgdNZA$eT#-KxgtzA z%j_TRL3`)8q4sO`uCbfx_L<6gGTs)liMCR!}2Mf4@Hk+=1_6;8W4H^r#qh_%G57We3Ox6gJ-$=xdd2Dcb#2H;nYU=nC2Lg5lGLIwm-E+@{J@*(%4_;(Ns#N|CM$U zzil1A*LNW}GuVxelm7IYuB6|jR^XGrKYfCmeD!^IyhEW|`!d}po_X$A_Y~;13+Z?N z>{#irJO6X|owuAV+=XDLWcN1qSMuKvTnb#q-*PFmKP1AAEGa02BBCgy(M{V6pXMjL zNH3!wqDipMljJeXJ%VBeT~a$ZSr#gfD7$b^QF8|#p!liSD=$H(MINZmrIbIJE}B7A z8lT9b43bl1Po zC+m9ZPr%8Ws(T1=@(5eHJ-WKwT8@zf9jhs!8Njn*zM_)CEPsGAB!Pr(KjFON z_39bw8ql03umc?ft1u4T;S9UXk~}vbz!+OX_qv&m#Id9wYjUofrAc!b+NJ|vMh5hG zceq4kap(dR$0Z>LjbXRYPuH`X*#jRgH|)n8begtewrHax5jrrnp|rSc(jS+jm~nq{2=4}j+ESJc_VpC&WS8|wz7qS z@KwEm9c1ESBj?HZ^e3m&mnm#V=udQF8&2Rq@U~}mgB4|8vzk73rI1}XD?Ah&+*=NC zFRzE9AF&8e5hMBKR z@hgGuqj%`b|KKSqjSKlDyZE}it~GgYd%%gBgJ;MedL0S`GuWI?Wbb(o53N4jgS=;3 zp@47+J^BtBa8>zp*%aLWyQ5X3)1k;3Q5VxaQ$3q-y*))y+7=x`PyKRP{)iZ^>B-?) z4W~7f`XaRrtvH{!qi$EtRQ*i{Ojeyqw^A`z(O4)Wbmsj|j@*h&jP{GJRqa$A)_%mz zZP2b#MOCwDOw-Xu5~m%h6^(686RnS|4eUGZ_2M?g%^^eh+9ueJSub1X@T(6R$tBB4 z%Q(1hMNL&q^9}nA`Axk|pDnemMeM8W-Q%ysuZ&NR&tw0??tvTG*nHBwiH`Qgy6*b* z5o6{zDz>+32hv`XyGX7YUsLwrc%^d z)^Q`_4!f;qDUDLbrrb|XOf8q1%`q>doadT5iQUep&_QOq%8?vouXW*Tp}&L8gMM~B z$-arc^W0NL`6TvcO}*PaH9Xzje)c_Y(Nd~AkD%FHaE)~}_Lw{w-lyIb{)K*bAP}g9 z4mpoJ{rt$NNM~L@yZB3(h5y2h@^^<$mRoqKQ^}@lXqjBf`+WxwP+=ThZ8=q{ayR^- z7@?HpdlmWFxy0eOk}HZR5=rn?(Ilzc>qPB#)Y*lw@CUK)Ii`IIwK{_~fw{Wl&{P!0 zeC&~D8WZUW%OoC5gC}_qK3+kHk)O4t@Y|Nqm7uG=h^~;%p}nImrTxV7a<+Ord*s#J zkJoTd*%TekuRhVjvi$H!#w(6xPT6N_J3|h0Mt^^1QpF_o9ROj3kg9lwiCG zd=h%XIq3|4=x=rr?cwTM&;n0E=52uouzY9+93*Arp!h{JvHSglolzh3*}k-24dQd0 zC*lZig}Xe4=W$NiQ98D|%3tGGugAv6iRSd4jCLiwEQfh^>ZN1!VR^-zwDi72mplMh zae=%pyX1j#1w6?h&XD+UB6Dniwi)|_g~N~WATEZTbUoY`FWe|$DzndP(ah;t8h?wx zWO`A!g9?+2JHT&3qWDwH>|tubx%QgrbRg%|I5tgRNm}fK-`av4;W#?PQ^_Mf#`V&W z=f)_h4sNqmObhL$lj3z6iBF2ZL0l|>U#7q6qUw&ilx7Q0;M1CN+W8v0wlh4YJNWa1 zs^Kv9KCoN9uX>Bm*2KOwNTb*U)kZp=HqaL~ikUBsGesV~B))+pC&%&flKo*N^w(P` zxD^zVY^=PBY^H1^`n85%quBlAM*sLsf9@;!3;vEGY=S4qhro8(OW)8S?)Rg~J&D0| z7zb|xwF1=x8w1k{aF8_xx{SEx@d`sy@`p4UgCdav+ZSH37Hgp?yb%t;qccU4# z72flRt}p2C0b+5Lix!{tkT!|4W{JZ)Aqh4%g#bVH%!*mNacG;_m(r zIn{M!MJwPR*o(id6iUiXr4cok@E&i3LqeEGv7DZ$F2 z#>_wRaEWkH`iPgx*2`AGWogJg;4GYjGCb?g;+Mb8ezB=^L$pGvUyQFoAhlghX;7x) z2J_R)@gKRC5Wd$n=(HQ6X1+mk(zk`#qfL?hgcTm6ysN0rE?G_@csV^w6#}XLPTcNK z(3Nh3?|z8M=Plld!I9B$+y^cQ>D_kv64$bbI=_scqdMh80iWt>E3 zU`y5%=ZUi-S0YQ`N@jzFo&#^#c9_qzBLyP+U~ZL?QpKY5iH?>ANtNiFYAa3XXH~!7gD3otPWo5Vj=y(>Kx~a*7@y0g}xES#z0PEvU-rTF~yZUpH0rMKfKU ztnQ#WsR`T{U;n}1o$+j7EFO0t)T8)DyuhqhL1Lt9rGz}DLSwVk!~uy(RK%t7-T zc&RrH9)q9h$7|_otrYinT-7YQviyv%on@r`oPDX~lckVphv~C^jbR85(L36G^!l`= zPv`;raQ;fZvxk8lPZH#0hCbW8h` z8cyz?+$4Et(z%p8DWx<1Nq4)CyHotH{6>-v*h9j%xUbA1?K72}@-zP=PKZ0coxXk$ z-W*=N_lf7SdmOz!MO{6d=?<@Bh2sFU+Z!msqWg*afOk21$`Jp(z`ej5SaJT)S9S|; z!v4s)$UFEs6UCZ5`7Wb*ZRGiKFuIn#&mxHUy&;|pB*!Kz=i^CmLP=Ah_5Xo4r41R6 zS-6<4$~WQr$_4eh9eo7@VBW9OkJkUvzh!@1O8<_Y@Bk_l2UF)DfP6HR#Fv3H!Z~sslZQ zZIy52pX8-!^!mmfyb1Y~V7O#t4im>oUXz@W#*y3H*Y=PpnoZ89fUJ^iJ6u!+J>K2J z1;hJb=U+o}+6<9-1HRHx?0x+Fd#|B6t%Jw(on7c!QiB0*1fOBBG-C@~0dj6txeU7R zELby6nF*!xA@oOmC>6@^uwb4r4X3!fEcpIQz&sg^ZW9B)Sw;ux3eH6p^H&P&z1HF^ z(u>zPRSaTba&d2>Z=zYr+7^^IlfS}Sb`U?@m53BMNjqvo`b_JG{h_tt^5GGv%e6$W z@E(8PNj$VO&|_{1`}uv+goEg%pYaTwV7H;t6k~(DSW}z1$HhK*6M23IothP39Xx`Z z^DjzDHnzxrlGa>H=SeDht(RT$e(p%cVV>+p%Wi`g+d)70JF%*?AS%a^a*l0x4}}RH z#hIvG=9lV_NG`}}ekuB=?7VCw+4t}ARP^g0o0|dhsk|>%^pqyz5BQfR{5yj=Q|h84 z-Vd09+3C8|!u_cXk9I+1iC9W(5d9%-Aop+*KFSrbvsi{cpLck%{&V+om-IdG)`|$> zw&aPv)AN)7QRW)osr_kd(vGDrOPvF8!#)2gObPCb;8ky8eNGoI<5oPpRt8#1f1umN_@RuWN1 zgZDT?!}v_L`x9{JJGlYn^>z2gd&_vv9XQ`K@lcTRC`cC~al-Dlm$yqmm@ z*s*P-f87g(B0HbC0F1;(Jvl0DgL%+P9L~LcCEls;==DFy?smZO_BY-I9gV=# z$+cf5>rs{aKvn##3-~Pb#~0CDF<8+;RYx^aQ%6%mm#%H9&jSInp8gP;>uvibS$*yYOMQ;(NV-t-=LJ3l&ubd2$w4{l!k_F&$Ln#Dh@8&WJPdCFH`_ znnG@{hiZdrF$$wdPvL{iJTiBj=iC7fLk>E^>=PlOIW~ADI0VngJhme@ajH3a4cf`N z%T9^s#XT^qUPLxVDu@q-L~i!S@yImcW>N>&#&R^^mJqHR;$Ckf%O%^vbkQ9r{U?}f zlgZtd!lCyTCgR`BN+!j9c@r3Q>)FF>3yloz3JwmI#`87`25m=N`3smwuQJE)Lp7;O z{&Y@sZuEEbqi!^$wdZ~^9sa=s;j^$6Z~Ft7Qo9tV6xGp)dS-sF$-Z2P*n~ygKih@7 zlJZ#{mPa0k|BWnyO{W$|pvipUR9Ptvk#>p;aU<=4C3!a5ke1>R+~ZQ!#WiD~td6Je zd${I?#?O5vRy{>sO0`tA9Jav<w zB9=u>-Y7nk=sIJEd!FsietbgZWL;!Uc;6!I7DvOM@p0eWi_XyvZFT`kpURw$b>ZJF zmujOOH4rA#QMv^l(=7Nhc>>J>lj+br3U8)3diKsp5B^LJVHaN7-=YfkY-Z^Koc7;? z{{_1EUU(PMB#|TdIB)>J@nrh58{@Kzftk=CqkhJ}KM(x8nY1pcn=8hZUA!*HX{!sH z-`m!L%C^?PHVG+}yg` z8W%Ss?p%DaEcM9{Hbam3YAI_yXfm4j8fqJJp$RnAm0%~T)IZU7)?Lx4wMUsfxAA)Z zgA#T(APe57Dc$A?x_5FmR>RkN)|DT3+9PK#r^E3iV?f5kw1#PuQ*Pq!`;{~&^>NCs zj64}b-Fe*!qy+DBjtmG@CN*TCU8+APaX&IY$C!Td_^w+eato0 z)ySFK+162-mXBGEUud)&@au12?=ywn^RoaBqF{(VnfIZu;Zy9(hD7=a1<_PK3;UU{ zXG#mCqtW{?Ew0P@G2a$OQ#p+vI|tvHDfsXw;dKis1}cl7BUI^rJoJ z`SzAH_*MLChw!|`kn^cR*q{au|~w?KbJ-<&p64La>@&X(8u4u-<|zx12nNmj&> zV#Y)JRGXiEWI1PyPIp4PL7P|mjOXTE^>me_9HbECo9Ud&PM_Rep1DQvPPSJxRg6^i zBXL|n-3{ki0yFywU@bM#b2=*@}6>7EwO zODFF_TIpAWvU5*q&gb;C{3Y3(Qp&+(YJ1`_zY*EW>@zalkezbN=tF5Ixt=$Q1&TrV zz=q&?aieCtnFaqwtK1*$1Vj3!l#=OCiGGqk;;o;>_Xaf+uV^ntd$K^;BcAYRx@QWa z!DkPC4P-$pD@%t)Q#h#8!)wtYCvvxFOHTZ<)QTpL=X7z6rGIIU@J@Cd$LF=kIcic6^w8&8}T z_6$u%z6?+LKi-kvk8u9NFu+c-tE|g@@)dceq0BygL-|6tNL{T)_g${)uByp1ZWw(r zWwqP1qcxv!#^uyj;BMnJ#hMpek6UZn$J(pLO^Taozi1y7yD9c2XG$MfwAZY6tt~C> zE!~-s_89*$elnPhLrlj^xvjIT8(?C$iGLaYEv`d+-q>-m6X;6bZj3Q)*4KiaqSr6t zj$+sTr#-2usr}4(zfO5YDMZW2o<*_j_6^ z$Lfqy8O_q}rj{g?ydwD}vyUdFc*gGZf}Th2HG$s)CrQ2+7cyXg#YBpSz6DF-%s&mU zt)VaK{qEcDYwVYN>wIl|M(=G;R`*NSIA>Mozm5ftY|amkiFjxS;-T&5Yv-#&N6??a zYr%eyoeH9Bm*u(GpUlTvbjogc5RbsYDj6*V9Y9ZhFd25p0r_uyXPqSe*D80iN&G;v zW+t7va%DUj{~L6MJ!3aC7JcG1xz$8SrmyHL$ff^`YF$TvmCbNz-1ecN1Vf|9w51mI_3qQ(vnm49s>(i4wk$&Yq&{L{t{!wRk z5YA9o6ieZn^=IyxgmdaFJTNbm+(gwoni52I#qE`G%qmfGbhm_bVL5w|M`TJJsyz72 zZ>rbOCgDf@IKut$0B1@Ievka zL8B;)-)*y)PppHp#m9MjgN%O-_;+id$|T@0-AX!Y0Q$>O{Gs`z7Z9!ninaKh|IS_I zo@@cRoK2j^~KPuz>ke;-+sVBku?5<0`P_gbhv{N+&SV`vPyw^tEghD16*z6zNlEm2&F0q~X2i^UN;mr8TA-OsP~TPmhA(A5`;BE9km~Bunrw6> z_a*a_lU;p+Y7VcmSzQfM?R|DX@5mg^#qXF$9wR>s8%rsL$PZqJsPIlWi%#2>XOoIO z+&p}U+u<_Rhfh%vFI*N$6wBjJxyx=%k2s%WmU6dyw+J zZ{E6O?V}2faws!aG;EDra$j^`P2H7xICV&BHP2gj5%IS0h~C`!hW>`vy6d`H%G}DH zQbEZH>(I;%Fnx$!^9ZD{_yk@rMI-U0w=w*Vx^!i;E zcXpSYZO;taH&Suj^oQ_vKO;GPS$e;;wA8$*^HNr)d`!NRnj=-|n4FR7UgaLZ{?{FR zAGFb_{S}|u_2A;*SGtT^`vh;)d&S!q%G*IY#a83bALni0ZA8yUC8yI-$dQ~;!J$T@ zZRAXFw{Z7h z|F-@Ts@FPB|KFg~&PHP?L<`{-!vg~VJ{Wq-4Bzp*eb#q_@wpII?QG6uCEnT5q=WwD zneY!2Q;0KaIiK!hsvN2<=&`3|zstIi_^nJ{=E_!}{gCz8sJy3CWxGDGoZlSra;GCFB2eMpoQr?R6Qw|i%56TQ>e|#cVJfMwn zfY_wl-2E3w)6tTX$uaJh^&_1Rg znP3!rLN4ae4N^^bOh4!~jpbJ{v9$OUde#eAmmAR|{@{$tkDnq%kwsYv-jP=94vVf# zM1%;~l`d>cgiUIs7TJrE!cjamyGbOQ(2S=sBOPO&tIxe68J+Yj``n{+A(X`Pb_9(! zq8_Lz0?X`(I+x}ty1^|nqG^gUN|E&7DKez3;ct$F7k&j@w>O^1>#_^$=$@Dp+O{|@&qG59X{3Ch7#=KW%@WjDdtY>ZxBUJMAFO44HXL>4Bib!g(9g&UD$ zyq4d5oqVlm)LTp5$xJ>XD)Z6pF*RBrEmEB!&p4N~Iq6Bt`ji870AD9TUcmI;xY{zx zQi^t%p{n7k=XinlXR@rAPyKYi-6BtURtp&jKWAqchHg!3Z5rBNIl8KDnMHG9+hE)0 z*mCxv_Dl9Y_QUp@v1+?5_P5y2oHbKzhip$RQOi>Ed2`fQ+O*gB&DhYq)%?}k#g?Bv zk)BQRD|?f;T()sG$=o95ow2^D7kr_J?!La1POiV8?Z;hZsy3u9rkSB!svN-2>kMlm zA%C8L$7AxAaA$YhT#ub|@Q-XGle2~f9-H%!L*dwwu_>)!nm4%*D($~XA5!Y2yh!hn zUfb<;HS*{3PYHGnuEDo3BUC$-pUs*RC1n&urhxANZOKi1Hs4ckU2lZ8_OI@Xbh`I) zX2tP#*0IXj%z524*R_}a!zsRjzS-=OtKyg|Oh;88Ql9$A`|y9TzbZ-&F;l+_;C=i` zCwVDYz@>9|3YY#WdVPM^C24nSN08WRz*Dif;w2tSGa9Fi%|Ta~`DbKr;Ln-VDs_E+ z>6CetMew5Cz*Chj6cYC_x1T2){!N)1b#^s9G$&y+j8LfX+kb>=a+=+VS*$IthSPYP zL~>d%cW7_;WjL8c?KJf1rD#UaU{hHnyHt@oqM07Qg2J}Q!l+Yv1K&M2)Q4-_-!5`T z%c;~TztPS)7jN$_y7;=G(vBxTc$}SgJv7=;uoW68Y>K($<*G)rMgNX0jpPVM104ee z0}FXyx1$9dVb`-CKSehfF6;RJ=A-KbBqOI=>u6J{rQ{T%&=QXc<#B+_=e{wXId2I* zW}nO~9}5AhHu;J`I8Q`|<3JYvfUbWs)Cqq|+ek_{2Ye$NS?PNGY#UKhy279yDNGX{ z!{OS4_jd*FaZcQ!7u7k~`!v(6$Ag|9-_KA^>-l6cDv%+Z!hS6bk$5)R%Y1w)*SU)? zW0z&6qkK+ue$>G0^e-HqKEgnuKTKK!+R0T}9B#H+bhn?8`=fbfv3&Paq!;A1OGmrF z#GK46#>HoeM=gr@Ao*z6RhQW%C&A9mjjwnXgy2=d+1yg51sjC2g@(YGc}n&=4$V0M zKUFdw|6=m5vR3j`ymE`B3gL61M*c*f(tp9XfnM>a{5%85ZU*5%Z4Yh>K6hPq4NtF~ z-XX)7G2EZs@1nD^9V%!K@@Eriw%aD#BRd*i6E=mPhB7->*22Whr!{J8k$;ux+UlBW z_G)Uv^bpl8H7)gP^?S`}<~Ft+wwd-sw!yXIH1^+NytR!TVLNQg2|IF=^@4ScWv}Iq z`MG%={p%?Pi_u{I-Mr3fvc13~w>(~!WhN}z7Pfh|S7vL>cS9Rvl5QKjjcdABnoI0F z)7WC4quY0vy0x;lvJAc3r5eB;yVm?NII&?`Vk~KpyN68u-uP#$aM#QQ$bPw+eor z?`vjXk5BIF>n-dp3gztztj!0`(axsMUye!6c;_A00M}YiBTq-##S{Tmpi%JmU~!nX zg~)c6AyZ$1&0ki|{5$wL8nA(V!!G0|9G$SNm^@BVob=!mMNM2O#c90yUng=4SB(;x_jC-=(_*#Pi%xanW%lmU2~$kxcWcXEn4)= zu6$=(Fp=k?)44n6-fLJ4_sPwEQzh~&jVgw+rCh+Xaw4j;m(#J5Vgih}`zi-JQH`pV zY8~BH1z}BBkoA_uFhhMtNxBo3!goUwQ-?jg7JW1UuUvcjJf1KCevH14_Jm(lGvcSC zLl$W*o)G5KKC_E^x?Z_Kag3?QhcEvMJjIXXecI8kyc34vFLq8%==Ax;^KmWRVx4&g zza&336P@-by6aKcDb>iX3}>hJ3cu$3a3K=OTf?8&Uy7uY^FT@)jIY@u%O_g{i|vIIOrMafWa$G>(jVh}FTQVTQ0=Sc;TI!| z+D`sl9+v$s_d@!9BmIKvIYP<}10tTRwvyLzH#7DtXtbMf1a9SCn96-B3hPCMzp!Db zLZ~dc*&l(ofvK<#Ptcoeh&&H3<@=t84#H);hsV&%%R`VWDXtQn+(lk^t9c81j=8%A zjDhz|^iN=i?%>3#&TE?JKH_dk{{Khn%G57-P#4pSTtnkgCmPNhGJEYlvmbxS?0b{@ zVm(+a2{;O0tL~|aFo!RIk9pG>csqdp#~b{x00e$=p>0 zTj^M=O87!?+t=)I8P%_!JkH7nT=eSARb6Dlh>h`Wy;v8@Iu2 zavyTdfEs(-IoP?w(biFw>1Tght+Wq#-m<3*N&X}CbxQM$$LXKw>i7%RL2I~dy+WO7 zY^W1j7EB1P3UmtG^w0Gx{I`5Vn0=!7*=l-qUISU5Q?3!Ne)O+z#h-HBvDER8bG37j zyQTXN?+9;C|3H66AR35;L3uTFCNvT~s~`GZZ*Hsgacb-M%$Z~cydhpcN#6zSMNe~bRs4)gbx%1} zUh0Oz)!IyFSWC!}d)YQ*SN^A1h$d;5#mJsTU&G(HA*)DVS20xK%; zU7Lu*q%->SA2{C{!&B?a`#1$QL3bf3vJgkx0(LhM&WIT0JN)^pNIox8CMen~_QS_J z2q$k)G$u3k$KEG~CwM7tMbDz`iP;wJ86FqRNn>Z@pe(#U^dP(x z$K8)`o5*jGW_S>wH;Y$b!DMn%%ED6e2)V_c^jd%8z7it)sF7J^J)n0L%3c2nG&<( zklh7~VWn`6rjP`&zm$sKuOAxi4id*#VPI{MjmGWv5^vricucLiGu35Z*?R`iuCz{$zgwT5SXkU{j=H#3=qNjDVlqnEB=_ z^PHZ4^PCVdY`8-6Xp<-%d=eOoF7uW5S|E?noQ(Dq8nuq6j7lk!^x)UsjJ6qmVS#Xx zF5cGWvgUH8vZlA{SL*!CXYbgV8HAJgXv;_QsnzP%%`;8Bc8dO_ zemk6{^2{yE?XT_q;2ey}?CZftTh-Rg_JDm)<=ASm%WZ3H7cAE;$)T(-@eMu`A<5THCZcWCyP#mrkyp zay+?m`n|M2;j{JN77{}yWOZnEXe#H*K3vN0>Gk>MU*vcDwlUG<_IbUhy{)|lZ+nlz z6Gwi~#Z;Bg`M~kZvD>i+2TTEaKO!E#NA#)ucLTTR^za2!LYLvG&j`PS+5C;ZxJk?a zPq-6Lg6cONhR{{?Pdy~JRK+bt7rN(G@qN6=J>?8t=4L)$PI*uKsDF|YULh}!cKV)t zSvgn-)gV9qtzW>FEf=}uar#l*RcvgA>+!yogT2%PjrOIXp7EZcnQ^WmYIvZpY0#4e z%G78Jk~wtHZTbz)+g-fS$F+O3ZMFHe{WY-~qxvsZ8Tz@Z$s=?*+#~s)H#$4II(m_B zX;v79X>{ie!!uEZZfBR&Jh~cY`$wrw^rx(c{3zUy7s|$})8tfc)2R4OUO*8?qWUf= zkw5uU7mf^!l!G7Mly1hMp~In-!X@E5j;!379jG*9wT}K4-5r@08JFo#A%E|~8+b-m zT((0|QPEBr!)r4LPE~GYTevJa@QFXg<(n^h6vo>PsaEurG#rg~1atqt@>S3wCNc*! zmS<(Nv6`GklfYa5O12s!!eR10Z6d=X4I}TuFTyifXk|Fd-uSoIcjK;!ce1LPp zO)~kt5QCRD8KtHjny(9{hKKt=F?QJ3B0q7t{D+UWB#Q5ukR^PZT;%lda@b2pq=nKJ z?nu9J&#TJ4C-Y8GfCRy0JjKV!iB3YpPE^;XTm2dB!ACR;Nd7FtfqVl!r3aaeo_Lf_ z(!uf;?d2kWox*(oO7TPSQ=TE;!g-O&^pc4&c!Sn*2YSFBF}sw=gwq_4%369$d!pC2 z;yx7%?I4nwsphn;!I{#EGcB___Za)+E$~%B+!OMN$wJ3SwaAvx=1|LEm*BR*4t}i( z+zuWKo(pdak3-kG1NX)NscIa&1iSo{tS0)(bo}?q;GBThx7eo*T=$=3#yo+)ZVmsg z*Z2V=-uvE~8ENS&(~G5-^IUQNL$}p-^>B4olhxGEFvwt11(h=Cnm9LP$7N~=RgA*w zQzNA6YU{S^d@$@!YX`!E*slJLzjK{V%gy7WMY3Fu&0-JRyK|=eYo8FiGxiES8#Qfp zxvAvAr+?ZyDrR=f2y*y&44n-I_MU!oLQIv|U9olIx5qb&-xRO5x3MpW<76=HHLcMP zF(}xR=F>_r6?SNUY8q?jvBR!U5Bz5`-d>@UI5+q*nA0}^eo6{kpSP}yt}(8*Wcz;c z-OuTK?pT-6I%7{-v$R<$#*|XY$CGp^8RJn>!eW#fK4H#`>i;GFPk7(Pz} za|3_*J3$6_`V{`VKEZd@x1PODJ8#r;(A~sc0)}>3=Y2;u7hqqT|EJI z!&W*=)Adyi3z&QM&<9%tI@3yW$tn_tbMPP6fZL>mru9l|)ScHp);6KBcdMocK8fAx z|5OW9?RX}h=L~zt&vyzI7tLVN4@?vRZcq8tW!0ZK?-J;{=)u`IojmwMv7q!(Rz{xA zlT}9Er#9N+8ytLp$hXKFk~IlP@zLLKvit_IWI4OnN}+zCU3gdx%oy9)jaFbsJDr@K zTKXy;Waqvb|5%sEhwv*rV{`C$6;QmDr?Y9FOgF_X+#3~8uUE*c$iL7BRv6kr^XPl& z6T6vVvOJJ&x61lJMyxGY$XB5T#o}}MLbh*as0x!$g-{*%?lb8ibg=pHg<`_HBNro0 zm~SdGH*J<}lU-#ZErHMNrf`cJ#{yvpUX>_{>vx$BPnktgl$oj@?5M6V`&QtkSp_G1 z5O=OebU1B{jES5jBho-BCk;gDc@1HDkT{xcawV}Qp4yh^)k?^qZPbTQXCL$FEzCLo z3#VZ*%}4l=MNv?$G5@@0$}6I(sH%@|zzj8S3BLThitma{jkhQBya3s&sr-2Uv4NaWKU{+N^Gatpy&d;Z|y(}*(%*SXR&H{CKZRnV{ zj(3_ntNWU7uy16fNW{(E^%`eleVS%7)yM1UQ_{uMO{p5^Du+G1FXSh^R0B50Q&{yI z)FahHd15_;`LquT-X(TbubB77utQG4xmk)PwIb>v>SOBv)aCKkJ~sU@&9fb`)sLGK z_b#qrygIH<+{)Oav2$SN&$Ug*4fn!U*jCWio_%sb`k03qml@70yp|DkuCIs- z#=VcL7GK6b!yaoLZH<^_o9E)QxTo8s_iC@`E@%hPjg_Fg#181PI-Pp3QZSjWira$T z;3KcrSBXCPo$i4+K#w%}E_ttddUy(>sMO>v$>n&P zQ4&o?<^1k==eq0aM6YQtl-sGKW9m$9RF~A{Z%$rjjha6gS{$Zvoja zAJ2~%T%Q8Iwzud6J>W<7!JX0y-Jm|2>>EW}cDrv-aJ9-y5WiB;#;?QOSOR5YtiC>O z=V|&kx@2-$6_|XQ<4;M_tz!P%hmW?Q@lRvAp}X-9!w-XkXG1OgwY%VNj)SqXlYd61 zuLhebRzH;U=!SL{{>9;%erh>q#ztihg#!*)Q`uR##66iI$|%YyMlsi9BRe{h-PBi{ zo9m?{X_J^F7Dvk{kB6iY4TNh{zf`N4|CQ`!F0v{3%xoW&8qq;`QjCivkmu_anh-pM z^KDY-4&9(W$s9exHn|!(#mVrf%fefJ0)6@#+yFaH)RK@u-f*MOt$eQd8=avB=W3Gt zh`b)od}H)94%*5j1bRrhq8GXM6`)1ve;l0ybX@BihR2>{W|GvlZQHi(p4zsRQ`_cg zo7zZi+lVvPp1tQjxvQ(^p5E2dCNs1D|HJz}Z&J7s>>(etgPyS9&Qkk-K_9df|9&dE zuFf#b^Po{_EtG{i9xL=`f_fWvK_fJ|4t6sI*-_o+{n3drVi8F^4fSi}y)i=zI>M0CA$s-^dJYfwYo2 zw2i!`pLme1n$eme=-niBUrinLadjCyJuUHgm8KROidXV1bC)P`IQ~LCD6gyvD|4n| z3L04~k>Td(cut3|hi(X|P_6QZo`vd&J5cB}BfokNyX5?2n65^d;(*Kf8NcBfe2=rp zqW%oyx;lEFio8DEIe%p&aWo|>IUBrzCuma2`YQNtdE>nu(DN)rpC84B`4X>Ef3!vM zQ0o@czfGnVyu$3dTJTIDyKgf@roEn6JS;`=FNbA6=#r1hno(me(1x zj+^#KX}7qQ?A_#uGZ8H!3PcRmRMC{8(Z=F~ z@@lGT&*~HOi_KTf#jT^PKjFOHf?MzcfAL`EE6?HR=d)BWWHj)XP9oxtM}`FYp>|ClL;Kf z-~BIt=Lo!vACoinCV<`R9sq}&A`_j9l-+-oY+BwO&*FDQUhHPbwI{wV)2_xaDw}m+~ z8)klE-oKOLB=HyQ({@r9sUKX?{oEca*eNt2ug?#~c^G*Um&x^c!cCQx6n3p*oT4v$ zp~mD8R)h1riuq@5CaMDS)?9{2gO=XsE1B!5B>U`xQyqhMXDp21c;?>4jjN22#yQ5R z8F_5v6`s-M)A!WH)AzJM^Olo|Oex(T_CJrbm$c(y9dy;0HFwZmMdDnoF3-XYbOU$o zXEF%ah7UkGeF)#}ExY>)>;c!{IbOs(Wi9%RRFZM3@I6ddeo>xOWm0#LnT%jFdU_9YlfvBR|Ami+Z!qV&EItrFkd(ZU zO>M^cvJZMzUh1Ol`1H!)kz0j-Z@=(e*o(tCGo6nG%}XgbQt@P0%w`)ijO>o4?DTH4 z4~wC%QlU+%3SZ>X@oMe)QW4AhswUpVI#} zV4hM+Ra$kLPsDy0bA8cFWRYcqW3W~#0W-1(x{euSCg(y&+zpM-F1eTOTYg1nX0YGz zrzWE2EzS3p;Vn2xHtTKJlP#!;C1y=lXcqsX6gZEzCtg@2NP*7~Wp6P>Y)`W98NVj@ zE6_uzAgl;=#k+7re1&#yD*D?^^5XKz%yZPCr9w%vO{T+hPevE|3P0Pj@Nno|C&E?G z+DCYvxF4pCA&K0PI@+ai^(7y*g(iolkTJ?w3jKF(RY2)MM_VEA)Zdy6$8>TOU-7!^ z)H=1(V6VM~!*mPwT|xB#b&&Z=x-qv&jBIFmYpa41RvjI%HIMRI%h`0+iq`#>yOxg@ zx5a8HYT01^&)fz#{vyL&LrdcsW6y{`5eICwqQY!`W=H#?8`)0Sen<3;TxqOg8cz1F zq;`wPnGT4YD4zvFx z9?h!0Ea-bGdjFuLZA_Ii%l(h5kgKLM$uZlJ3pV9CdxT@R{gGq3qc~Z~N{`EZ%zKnN z<+|^N{~|NNUxB>jT{gl!KaE+64S$(YlF&p<q;wXyNh4}e9>oQVvMpf*8!ReOrw^Md|@ ze!O8lQ>rHLQ~DdL!lUh|KdHY!j&&pG6c%>JX6}qkx=OlyOjrJp`j$=m9$)e@bx)N> zwL{T^?BdI^{hWEtsh|sx0VSfq%;3;Qs*9_yQJWu@rOQr|SF;-ZdUk2FG!CA8XVpbq zwDZ)NQGjkn?>bF>fu80vzT_RuXe%;@z-z zY2saa@r;~|Hr#vZJS$0PK%*3Q8wXsYsn?(-b1=t3~;I=miyz^%dUSRiA2Pa`^RJ5~$J=kkpMt}d6 zr{O(3Izu=tHG>tU4;2e_BfGsHJw|3;gL<$n9r7r}DQb;_%tULj@fyhdL>sgRYO_ji5%;!e^->Urh}XE9=Pf{S43Y7tXa~=-civ%bABV{|9@YI5K)(k?k`YV$3YO zJl)V_o*<`jA9Y+$e@B!mH~c&B0q#Ycm^<`Icn$w@3VqZ>G=cTW8Jo{+bqQN^uV;qm zio2)#2*k+>qFnrmzg0m>&fN?Tmg|fwHRW(h>E!oGX7Yb4!z|wjN4bZgqM?nUyx}pL zh(T->TZjJQ<$e?D#Aoa@>ZaTD?l^;Wwc)L;BKPPGTI2rcA8MMrnm<{iZ1Z8EREgOX zQ#5*BbUE7;TeP(?6xwOlMevzUST0!t5wge&rst-5#_7h^rvFUk;UDC(9k6waeoK8* zAZE8M(Y7J-bL2NuOLI*_nxQT_(0ZNd*)rXl-aJj2);{HLa_6L*i8~X8gxN`{iFHz6ru22>a1?}N zaK*RFR}aQ-8}{?X{E0p#v!{Aqt@jno>RX;QsNJf1in>!=>zqxUy&Xo!WP3ro6J>rr zxZqaw|J$9TopaG4m-80)4n@~Ln3>n)KzlTnlVG)<5aeQ9=ro?rab(Z75zhTe}fCg6;M{-}? zQ55~tne0a40qU!rsmZ1J3N=5E@;md*7IGWUC9Lk!Wi4loF@{`PflupT-@7_ z*pryiF6@9e>*fZW#h&V~vZ<=I^02ZtT>WmOOYK3|Hvr9ieQ}NWF<4f3PX6F?UuJ(+ z7|P?wkKRUhc*c&k1O1JhjGimxh%E@#3SJgEQK$41Q<(c*X6KcWeKZ+oWhuCpdC=3{ zW1h1VE?Wfs&v5$pBW!@KFdrPkYr2xXMjw99dcKDmWQ-OFzG5!y$I}^0J^v|?8oV3q zi8en?ND*YBR_w^kwL9~VUi|FGd(#vB$vOPvJ4hjnhXHq+xzY^gzFpxt)MmaJNgYyG zSSgf3-;x+`1WF)NzD3>DSWpRbIHPKir}ahp2#M`pdk=!$u#h=qWy>@#9337f)5yli zLJ+QVNn?dT@RffkKIWmm?t#344`kAoWdG`-H`7yN)^-(fT}@t+yfnFX@@`iXS3Lf< zkp7%rYkhC&7g0ZA3g=5HG>gZAqd1Fy2cMG7U4W`2GivZ(c!l$$c?fF;X`5+xXa_QX zahYnG^H`@^HPPdvcST!bHb*(5j1Ugw*230TmK2NCTEO~)d{a|o(a68XNKoWH^oLV{cMRMKbt%)fK z#bGkdOH4?}ntC>+JTsSpWcSP?KcjV^c;Gjjjpq2`>-l89k+7|Mc&p(GEaH8PGXJ@I zsk<#Xhx^gKbo_tX$JF#9%u;t_ugBGE0&1-d7fT zvwO|VZeas;c41iq?v`BW+4M~H-HO}v4sFm)&QyKEG4n!oNLf|&LD5NBfd1z_x8zmo z<}aM(?X_89GF67X)X&h`(A2P2zgh1l*Jn4H*pM!Z{&%&uIf{*vMELk>_nQ|QURJl;!(5c{^;Ojtq-~i0g?aZCWzzyjfDgo;tEAHkj z_;N-`1JTFK#KWYeUV2Ne+F`use_+o>Xr^d-YTj%5Ymzku*!^@?zfx!6JTDKAHoLMZ zF6@ycW}Jr_kqcs`ntZ}S%7?J7IFZpxzn86ui$pf@rAwd?)L66zG&Z&P_B>|z8Q{# zh0_x5XB2nuz_hYytjpT~SYtqW6?R5@!zVn{+ZVC*8b+Q=;``F+l^6JXt zIh*OL0y%%T_nddE_n~*ZH$c78#+~5W=B(kY;P{9trLx^^UuREotaX&h$XsSFQySLf zAoz%*{jk@3F`ZzOlF6` zB<;bSrBaSk)}_v0PQ7{ujY^25!v8pPPQvV5gr;P*ewcoXezyJ`I{ow7vnXK?p=55M zOV#CqY*5*7hMCFM(q_@N)o3*9 z>EU<7UGU3Z$X?+$zCxdS1wPqO>W*rp(7cDg)tMRM0iLfKXx2tD8*jlKa|*A=Z`3Px zRUP$j_CIIQ#T{c(`Wa@(52#K?crpJ9&tRjOgG*th-w1kxYAP9zqAGk>8fN!fSB+gr$m{d_C~k zykozy5T0`m_RJbS`A_jxj}{AvN2n)!{(U5sZT8Pcd-O1{HW1A|t~5UTG&J~Ac=l(& zD4T&6*Drn)YljMj&IyP3Y99(a$z@8Feo0xGK#YLh*b{Aj6{)AR5D#G(7TQbp$RXHu z5B|cEXpCmzjjn{w_#b%%c^GZ%ckuu$ zy2FB%{_U{;D5((zNz7a2U&tQl8Ht>u=mB#|*Twtf1pS3gvjIL=Iq8g;7MKu-@a|;0 zbJV@Z*UYzH>??l8S#kpXP;qLTch1w!qRA;qOA<;Zv?8w}4)4NgbsM$O_z<$mQ$w=q zk*XpNf`u^VilRk|<(>Qo4qT9ouv?mv+9Y*%jY{1OqTn|5J3i5I=BMU6R;RUf^wQ{a z>~Nx^nnz``R<#bXOoDRYunfTWla-C~rpSYlYI9+8Cu6L!nrXf1V?@u$DBD4_a*boY zpnMx|i?Sv?(n;PlYxP!-=OpT=F- zy~(+XERG$HW6V*@Ii511eVe{Hy=Hp*v|wsZ^4E7J6-~;Vv^_B{sYBAm)M=?cm~cbM z1ItQnG6&v4MBpRpH--PDZ@JF^akIMjr{^8LV{cS%Q{9=|`PjEFf^}QV{*}D2w&^na z$@Jn5r~RUHt8=(}h`RvZp&7oFzKQ;^e1`i3PQoNVCyWxNhH8akP_y49zv2kl0}t_G zl!nVOKv9dzKAx&r4?A+XvNXP$ZtQpVq0m06@G_Ac0ZE`aPwg$m9ek}i?S4&2_n)q| zA%<;EAH!buJm+;^*!&EnQc2SJ^p!}0%}k9l%{a(-$@tAs&6uEXY3NCw*agm;?C4V( zp=TMXTaQ}0ur3Meb!DwWdxt)9wyK6IFBL&O>ez?jcq;9|d|q?N4xy!LPKvLnRI1vM z-J6cDzB*pW?V>0a46_lCACzZeF8fVcOI3p#)(*WPB=;`Hc2jJ7cHVmG}EWfmO675C>1em zv!By{WRss0zl!V8Z6D|BtiY7EF}=?mSR+C9KLhamc+t09mUglA*(IG5FuWouZn}iINMNb1}_!^eI90JXI?G<1DJe?0r;pc#G&CZz>bGUsm8xk5)ES zbRk=y68x5%VI7>?ne36>^gaWa*ZdG0NuME+hoGfLQ9rIG+h_%~d~`^6c;*YsjKxuh^OyNFK{3ybpGuf60%BVI7X2_rBY{Lg*^q@cr~)KJ*FZ za5LOclVv*D8fL^pq!jT!464)28fTK1yw6|X-%~V*6R724*{R5*ad1GhJfp*bm;*WbH7tZojk# z=|$f%qs>npJ{eZ@KH;h`onEk?dzpJZI$DMEJsR3V4uP%Db<%xau$zfVJCy39#~VTK zQz&86-`|P764$2YOTCBA{uSDt+5W2jwJ_ceqD?u&EMyW{r;ohd(WhMYob%Lx^_I!A z&Ry31!a3PFf%)tR{62@_uNXK}29o$5a^7~{aPM%>_73+x!Uua6*Z3NA{)dA@gQ9Rj z$Rd6ZorH5>kb>em-p^R>+28QFiYg)$LDc!9sd=v}&#^`PK?3(RyvfUy|FXlpDHmbZ zrpe2|WPL==#X~Y(-!lvOuKxikrGVjI`kGGoeKw(9>w-phiT;>=s^JRy{AtEdhK5F& zVU(d4?6*hgkh|(WP~p7J*dFulttB^Xu!)%#OA^RVL{*;*tAfI9 z9J#iq_#}w%tu4^rjxedsif==dTNSxrZT^EFp*cREEBGJh^5^#8)Q=)3AUirHJsAU^ zWSQizm}_jL4tc>WY%bidp5%Bu!>?+@2NJEwOa@(Zxl#5cTvYlg28BmLpZ4!ur|+2WUWTgk33ApD&kx8SQ(Xb?F7IkMoFRO% zGWj3bI<{(aU9DW5(jwAgQ>&yN=Y09X8F&-#ByrtOVlCs{9~fOM*FSZZTBNeMmmk7 zOmp=m4BxbIx?Ea8`%AM`Yr_?A9=*^})j5?M??-jGqN8AbH*){$zU2JGi4yPF#+-Hz zxnb|^GkE&Xr9Vs?kTx(yOrDpNJE>oiA?bGVf@FKz%d{4*rmj?Py0<#7X}4f?c!0l1 zB1k1kE!y87O3f~BCvO+8%KOwamIT87E`3m-it zS-qEB_Jd4mzrvy&Wq4vZ!O4@siOi+zNk(!F-EJ~z$Fb`<02}Tx9_7p0E!yf@Ns}E1 z%5hGGKk$bV(MPR>LvKTubPW!GhI_gjgrJjTLl{v})RIk;?PTxMSiCH53P;OsD#|Fo zkpY~C*_%OCMzsXqhsYKtF`P@53EEK`@+tE08T}N<9BhR)r5yX>4&*=-fyJ{2Fa9&? z6&-qo2WUpd;)iX@E}%#FhonRCNyURU|D|Fgda>rp8p=xKg4}0Ey%-AJZD}AI?Wxj` z3xee?kF>-)ANSz3AHt0by;+@rww}zzffF9 zbLuvP-Le@5@vLyoaEL0mGpe1U+TPR*Y531h;rHpT=|z8E$2`nj$~x3qGkSUSjp!^f z^`e$VeYcuy9jpVb>a5x2TdtPpHVWEF+YneWT_mrHL5W@CS^>Y zm{c;yZbTNf>@<}(uP}5nM(73oU+o*+ZS6{(TRVr0=Kk6XDwpaF+Nw`N-q2v*S>JFd z)Nh?`XC3y#5AgAnbbPg+uyS9VCC!lAFvu`ae^fsSx*s<8xZAm_Sc3mXmfS6M@O{ ze)6sGEbrrKSwgq69!^R><|+%|5N*Tn_z!n+cP5=R<&x|f`t@F9H5G?Tw$5M4UpRO- zutX?_3Z^2eIwfg>rC?vOz2Z4-LI1Q1-TN}0p?4_r+p@3Sgl4WdOv!`P0jJ@to#NbS z!X9TU-O~(qJ(l2KnE9^*m8g1tp-&kHGukY@5gmAfH=`pNOFm{^X1-nMp~g}}edFwX zud1g0rf#hnr1`{*_O)gcyM~pjG}SD8b?4}H?NBXtv6uZ!9>-T0O>1x^Y+#1enZCvk zwXHWkoftT`)6x2V4>c4g!DwjCv)t?d?nwpw$a?bhutJuxTO7dL*&X(UwS0oyR4F-_ zzi*~ynT(G1JzrA}He6kVFfOQJX!DEsH~HqmIUsjaI|=gEYO(o|XQV{zqhHS3wW=9}c4nfy;rJWd7Dk$&u1LRhfFo)!g-k z*_+kyRlm`^#{5UGF~s6Jh@z$&>Ko)c%7l9qyYGgoKC1g#D=yf&`Y7!(?Kbwv<(W54 zfwkPvbi{Pd5^3#1m68_KI=T%!+DKb-_C7^O_bF#xZ{2U5Zdq)3YJP8?Yg}*Kh2JgS zs5cFcycBsfN*8U9X_Dz^j5DTt)Vio|k;N=~OgYR(!(~Ghvzofv?7AE<7G7%_Ynx=u zw>aB>$yD;Wp}0_cSTbMTdQXBg#i@6Gheli2Q3ZX+TuNJ-Wv%r$TGWwwY@FW+q^ZCs#c_m4N8LWdo zZi{<|tCp)5>i-mGv$feK4U`k*?*8rG<~{9A#6$QR9?KcBl8=+jdlcRF zGxDkKlebio&oF9gJRw^-Q=Z7)Q$-EUZ{;kd(Re1ShRma&=WKqSl-#E#qc&6+n z%!Cmzu1|`E$%dLhR(Y4eLiX!_g8jr*VkdMGEBWrWvgaJdvvL*P<|OLyLZSbJ(&3BJ zD*S-yoU8rOybXbITVGjN*&62cBiS50ge}6K*w{`aGx@nRQp#Y3?U8koy~FkLhPiJ7 z`m39GVsN}?7x7ETLa7q!wExPlpHN+EQ)Dt6U*f=TSCui^I@jhDFxn=mc& zUX^q&^cK3)h0rd@Oy9#XvUgOYnbqUeKJ`#dlx7ubj$xYa_~}OD_r9yl%zJ)9IUEg6 zI-cZ%s#6eYHmL5PS-(T=IFf$TCNs$F@B}Wvn(>oU-TVJ+;~b>>sF=Z?RrH~UuEd#< znf#trY{L$OH-+25*Rm1XatXaqD@9Gzg$0=VSC(5K<(Z`a#1!GIkUba`{0x_HG<%|N&$=l^Qeqwb9MjpgY2av-(Pu?b)l~nKoz`y7W{vPBI9Mnp{FF{h zv&cp}q5Z3^0K5K?y1HgQF8FHn`foKV?G)o~j2xjXmiX{lr1OO8=ZM81~ihhb?XvF`ZeJJkf=1FyWpwa4`m7rX|cMNjO zazxUlY_Jc5pHwgPNXm`m>?m<+C3Q>wp40%gU1zpLGVf>4bLJn7(Y@B=^D#S6D$pNh zc0-@lci20_+ZYw{QU2@zwTj9;-*wDc*0~riWkwpuTzflvw8Lw^;k@A7=4^1TYwu}gI0>`r ztLdXr7QKdbkQYDIQ2L-LWJ)@8P4#^^NwVl#L$_XtYHli->}K6XvVC%EuW@JoQTI}R zQmw|Pw~o(T781#8{J-}(9)6D}R;Ef+-c(&sUFF;>Pd`2kuUrS%)sLkV=@e&PK~)u1 zS#@poCi2c+pa~w!bDhd8H!kcAuYe!2OK=L`1BHVR{AwuIw%`n&wvTXR{*f)G5|5Q_ zq()do-sMC5mfK-Zuat7afvdy3<*&SiGKQ(;K9r`1I8~yQefjz{;rk?r$58`B@)aC} zOH?MDgMP;>e@PbGDzqARWc{T&XmiI2SI~6jA{T2^pff%nXP{HC5Bt4WWX|3a)-i)@ zgWqp8yG665VEZ%_~ic zdI&t)1?oi7;tHbOAIWf|SJ}_UOGkM*}9Jn$y&>E7M zuQ3B}gr=F2oyuu@!$4c^riY<`jY)u{UuS~tifMc2}0Fl_Sa=)7s3?fJY?bKJ)k4ds9#j88V|INSL{nS0) zxzzdCan8|&XTE~N&aU?yGuqARN68^6K^K;L-TezWmrlvyVgF>{g1n~ zue7g@KLT}1AAe^5O`pTN&$|p|NHGlcM_fT4u*YLy_L>W~CwofCTw_B()@+&JSm#gC7j`@^3 z$mRVP?de1`li%^0tRp{WHLj$~xKv_s)Sgu&DdL$c59YI-3}0o3m?ADBKP%N=EO62H z$2X4o#*5&u;B02q4cXEb;tmc-*}|R4CfpcoA1oqV3vR}H7a@CqCwhnc9vK`N9NhjW zj2H7%$jLN|r#CABC)FqIl!7ot>hbSwWQpNuQVp}9wymL%DHgL)-Ge7!8N96q>@`HV z{k??T!hHI$YUI4%AeCc?*hj2@%0C;l)iW@+dy>PIpC|Ty=tXERd!vukFF8O{zY8@&S%!kYQYG63@$baGP+=F{?hMCd7_z?2YizP7WIY+)oL3)RiXy=ZE ze~0ICHY`j1|FklRa&F870FeT z)6=)5_Yg7(shabeIP*&Lz=%c>KJLE}Xa`CLUic3|7wIhK7SD6uX4ST%YWPnVOMcg8 zc-Ir*fX^VCql&4gDLJyR<)N)$RH^9g(TDK+)MrOLk)6*2n6zE!gYH|;SU*R;i;OVm zGtcDnzKCbwH)lsP+cn#um`^czGOf)N9lauYr6tnw< zEne5;*M1?t?KRAzXJSY+kw#U_)6kRMl@%@RcgMeu66B=6qlVaKKS;Kh5+bcRWoh#D z#C(Zo6ATG&63Qi9OfH{%6OZ9r_dfR`-vD1zm?w<_s=#2pA;0i^n|+tPWxdIsM3_u@ zJfGb^T?=s^?{r3!#<3lK%K7wm>1)y(rq@BO`<=PWUDtWnT+bYj-|HhcEY&B&IWz}; z$6aBguoXRbRj~+4+J8l>RFzyD)cL&Ahw!^?R%~IHToTg3!id6_Z1Z7WEcSw?F z6-wn0JY-?TCk0M3)ph1rS9D`_-(bB3^-ld5m zXJa$tE8`MFKH~~~5kr!0s{W|1sD7tTrr*rgZWebyZ#FuSFvh$COho zyUU4^NKY{)9EUby8fv_pno64X>bYu@qLm_&y-Zm&T~nCTPR9p0o(#ok^4a56NvaC? z?bh)8b%6($HC!y*f_Y*`*szhz!2g9|l!d)ZjZnFejSP)Mc3)~}LJ{GB^h-D@G$P|` zjPNb!LL)yz<_?c#KHP~d*nDpAwmffx6xCqJ-Id*d74eLjzz(z@?ZO@@6DPs~^j%rx z7iClMrnExu-9;=cj>k7V7B{pxcr)M*9u3xoCAXE_uy|-nZG!`YhhdcU$1Ajs@8MtW z*sau5<3j(jW!@g@$Q=0-`joM)@jg$VTf%=ZR zKl=Q1WnGnDS%eO^G2F=UFs_I4>tr_QM)boT>b~o2yJm!;MM{s@Km8S}Kyw)oR#5BS zqNa5!3Mzka|7?TvyAD5jJ-pe0unfJ91Owubya5`OE{f9lrAo-(p$V)gC5ipf<7|Vc z+nug-9{cvj{$5o4CD1_ZBtJ7K3>R~WS4b!rF7t)Q$=&4Db_w6%45{V2>wV!G>B{2% z=o$tYzAC-wKeDB=?D)+Wd#8JK=uA7Om{Km;2iueB0g5W*3M*Rg_Nc!5sp_lJr8wy~ zooIdL+%@s*H^6&Q1?^Qw?GGKAnsQjPd5O5v#0f+u`V3F_AGdV@gMD zhoAD)lEr+|JQ%{z2Hg;SNo`O&S(8h9NE5AnrqOHv5=&!d57CBqa9ZGe;008I#;%sG z!cL!~g)`YP+o^J9cW!r>IRUz)r=_({eV0-@`BaiFX?UWH%&_07gHw;PA4>Dw^VAKL z4>aTRXA7!>n*vh<`{9V+^{w%>^yToa_YT2HxE=z{eO|$tuIcb-+dJNnmzJu& zv=;P@;}yeUxjFdMRaDv)&CqGLQFi5Syv}S*rZ6#Cd7zl6vZ_XDM6~(ewE6TObyb+v z{-XD3tZS=_)|H~_NMM&7uUEp0oQHStCES@Q28Ho5r;MnZu5Y8eLAFml-4ksN&XGDW z%BNAMbVgsh9-VkAO=k6ORdeMxbnQ*4Q@j}oMBy1|8xrN;scTm%Lol%FkkeiUJxMP7 zv7gD9u}Hn8E>zY7RU6^zw^m20im1ja<|=wpf4ssMbc!A0J5JH8cyfUr zWzWg)EDptNx73*=n}x7*C&CRsfR|vFtPQlYDm+&+Wf}AEUG!4x$m3Xu$J9*LPYmyG zPv$Bog7HB&nHtB*3iPmzu0YDx9L|A$a10v44f%z7KMfz57mY^%Qkqj9qfpAL$&cap zSxjbEd!Y{umP-&ZmjutlPk0Fn@jMk!#x6QcXB&`05V(JcEydwtS*aJj!$?^wH%Bj6 z`HM9_NH=ZAwr!$zJUfmP>dcw~`2SbaTUJ3mn!#(`L%vNcDL;)>9aZPZQU0rVt++z} zQ%IIsc7+^gJvu@eEVoBeNBr%l*i^*I+cTT8GVg8(yJR zO~LR+^mczjwSyM}F3()gBi961cJDjShG73-2tPt4&hqJ@!J)a1o{rB6dlJ(AZ2Y53 z-j(!$Jx6WGQb!HT4OgilZfnkJ8n91`g5~RFXXYoV=$!n%d=^^3WKARObzYAw>bB~i zYDxVAU!i2oY)Z7`vHpe|c`Q0ICU5kZ=%uzBw#?RQbUodyBWzK4N^Bb7tDR5wZc zTAN+dMzfze#4j#wLiAA7;`83e);wUmcu;xg-XR5XwNQrm9HHdm4B&KLZq~} z@pOe9nZ@9|zH|d+w*WxS6>&)hCNmgMFZ!K>t^mpyhf>$Shxlk}I z&p~|q0tW0ZN~RAl7G9ZovhufX{Z^mHj|~XSD8!=ogJRQ zKjA^_R+ffuv*&T5<2B>I?~lIsDf8D6;p5@icyw#gd)Q?y<@uGv*ivMLN4r|tjk;=v z{4mu-7}uFjR*Kx5qrz{YdSDFm(y@59>j!QN$-*E!ItNL|TQ2`sewVHF6O#3slIL{^ zo!}BYy?NO)ydhgpPqN`OcG-i;58=*US$e*#DI%hriQ2U?{Ep5TzLw4a- z>AN^F+?wsH$a8O#7NDv1z?g{-Yw;!TQ%q7lSEZ@j!Of4<&O#5N)lAe(K?64dKgLpa zW?hvN>G6i4@SBKR<0HzqUu=@i)F~!~m3pI3xKsEDxk}eV_Rs`K2f4+~ViwMgRMfI< z*-s^rNZ1Z<#UjWAh1lCo;&lp!EwUZtyp2U;;>5kYS^f`fo3wCA>7n>XSSLIPYz`Fh z=k|~AErgcn^VO#xiGblbCDbr<0R6*P_%CniBkS>gWC|Zc|5{ww>TBiut|V(;`zDLvJ#!+8Ap_oQ&vg`(nEiQ#w=cOy@FX zitZd8XYp88m>p&#-j!NxIXv2TXkrTU^Q-m&fv^SC71h(xjkkgwJ{TSRcFz@0J6Bsc zY{`xjFif&snuu5*Rr$RE1N?O#V0XJ`Xl5HH407%c7vst51-&A z_!LXIMQgyZ{z-0F1*w!&1^-zMX5`JN0FI!*SV)@Y7)3sub+3691o}S}9^Ez6K-J|( z*ptqXvNL6TDV~s;NE7hNRi{2T%0H0pI8#ttz5EX{J8> z|2pM5S;;e)(T3H1G*#eXjaGdn$FzcK71|Al(h8wzg=&{-A6-Hn)i(6icgR;*1oPqs z`qTozYey!vt*xIepDj{^F7iLqE7MHl zeH1DKO~)dN!-lI8H8kc)%vxqDZ=*6XPx)iXY2If}GLTiMFJ;KdGx0(@9)Er--CEN0 zW;5ryin=l{ub_&V(kGAL8SEPB>g=rSv^!2ZQXL!Ny>)WjAS+{d`s1{_sixE;$v=~3 zLysJr{2YDC>eM5UR#toZdfNK)`OibmkAlQpGVtF2$T!26&G&(6>v``E?+9;R?^n-g zkImB^zmE$o?IlNT@`GmDC&9SBjy|P`Gw68dy6tM~>Fjyx{oz%x=lA&2{T1k@#xOtc z70MSXE()PoC_Q)iaa6i3*<{7wGIx^qr$#BJw4u%4&o(iYxxoXaL$OLZnI3ru`pNES zs;i^BI6}V7G4xUQ&>G&t0jMX>r+~hjehI4l9JfzWQbQKl-91uN#c-3{{PF z$+*9XX0Q;s%Hz?{=4Ia#iT~A>LH`0( z37R*~?%hIvp&-uC^Zu#+&+M|-vIE{4+!wr0hWdTx#;3%iVm}nQU&G(|Zfl3%Gf!DZ zUSzvamryUV#UH^pno7D-Gf1%^d1=K4+=|CSf0#j>Cf%${&_%t{43=Utv!K81gR)8{ zDJrbT$r~9y#0>i!$!oPxiag}WUQPx28~v=L>7|_ncc{1ah<2+cL9-dQ*g91L+tvcG z-UKEI9Uz8(QYqDX^>k)y8#s&R(eo8ReSa2xY-4FSxnW~)*}N8$r71A(6l{BbQW?@C z%gf`Re8X2DN4=vW-F$dBA3NxL?2`kq;vVweO3aQV<}C#{^_HR3$xcsL#8=Q)-rLT5 ziO+69vXd_b4v||T1((C8{tag(f!_2!illPl^IX2ln?n{62X!!!r&4FmVartdH%R_`cr&AahYZdzF<;& z&mZt@Ly@EKW%r%sOsVEg^2{V1X@q+mCrVD|Mn^vCpT@WoGr>{_*>Bievb|1l*?_m{YrLqO_kY{m(}ytYqf)^*y7@KcV^{rrcAa2XlwU-k73RrTBSFUU-;soSDU#6#%O<|Eff;NJ|eRBmf; zXu4>0>dmSy%8;T1Or~2f3W}hcoJ{rH9ff8(HMmW!R?p!Eovc`=D9!9PhS`Gw9qVe` zChyR5HBv2Rvbb9{30<53_hlOy^Mml4++l)r9MLX>i?XWtKn>?}f@EB$hg1oMxF3;l?DO31^kRvn`ziD%P zK3#)Zp;;6SKL0=R~Q`t@T6_<$PnW61RLqAsWQ*i~&TLbnPvo!&Y zg{~gOr zCoZHUf4dVJn#QtXaIqTDMV>?xq#%EO3_9Ae%uRE^C(x24a-BW1f;sO;xV5F3_TIoP zC5K~BG4w$wLv6U0Obt0Yo+ec2^YB{tKo@v2G%&P=KJXi7*cxia)l6$LL$1jj+9%}l zpYkQK<81F0J;nI%m%&cRf?w(){>m*pD=X7_r}aq5m2wHT&n9-`h#HhON@vM(YEM?SNb zwUv%q9p$jKib}H9WS2bH`p1&R`qvV+?6B;ze2jP<@t^Ue@u@ype;HlYB6GTVsa0uf z8FM+NY^FJxgsAe-|Da`gYHDIG1`Bbo?qB@@)aQ-y4;Dm=UQe?gAMG90UnZO{M1`~> za4S%bo%u%BE|=Z$$Wa#-t=qmH?ffkJ9(xsg`}ALFB~#;4grvzys}rLVizHo1ERgy( zWfM6XdAwdvduAW|&_gYxF7Jci+v(fntL01e7G=Zc^`biDOo*zWb6@_GGE|D(W(zKZYgy21a~&`EQwnuP_hVt+PyON0SND8*Tgx zDv@aN!S~}^&crRbT5!M&NeoTmmfuBZQWo7(3|iZ7kQT?$wGWo9k}25uW=Hoq4ez`L z|86ySnjM3~*tc8{1##<~m0f15GEG*A`nCHVwMpz@BrhF(<*3$bl;yl`mBgRZ0H6>6w zurtsk;Ni2q8`id&Gk!sE5t$$dgeuHB2T?0+;>TXjzX5m|E0IN5jUSt+gv#RW-^)B} zh+?gxJ#(M8QugpV^3GaQOI;0afJd7xxEzM=a-lX^XRBd@K4C^{=T5&R)q=-%26mE6 zDj`*nO_8~oyLVLIQ1^mweGF#DUX4xbM4RtY4O9PAcHvBEM(&0Z_2YQx*2&5oWC$lI z!)WvK;nT>bxXX^LRJdLE9^TDop={#aP#Li{bx>uz6fNj}+T-<{%In#H*~e)Z)-mkW zzTjkYjWo(_`p1k5D-Q&sU$;195#=XsTpSmSS_?;x63C~5%81_8z+)kZO z_RZMj>oCVWwHvsrCNqPNHDApew4js;ASJ&0;5A1}@x8YS|I&(Jk6qxJDv$AJwHb zk5xI;3-Lq6F{6EAj55u#JhvQ-Qb0k;8dD;AWb}S=HF{Z>SS4n+?X4rM`OxTZhrx83 zOy&-zt)_;iIMacMvXR4VLEF3NPBCp_{)6Q-ExLhqpY^YKbi_boKGPt58-oDr?SOWQ z?yYu^?gqTXt(rTUkt8&%;B{R=#_LwkYfn{jcG{t1E9QLe`0f~rPUWTDW&Z~r^?`I{ z+N9K4$;U_`Y?-(*DN9nz)Wnn}j%tpxo>A~qYLIWdHDE_iZy+%_imgv$UkHa(8_p90 zIR$Z^NY7^XBKA8*6mL&BP2~1%>F?6#r;o9hvfpuRb!>OVqEFf4G5d1*1YgJ};mK+g z)X@9n5Ehd&F8mO$pcqxbxZcID?n44H zFmr6mJYy8PjKZprvXI8D-k_bL?W*g+X_5m?%0RtSS5}`5h2lK@bt<_mhL(nXhSi23 z6WlWfQ9sFWPhZtg9Bs-9bhDLUT-)*e{Ltp1U#f-rwiIlwVbq&%)sxXg1Qdr9y-qDndl6E?wBd{# z#ExPnHTEfHoF%B4pE3`95qL{>(i_~#nFG_I*GEvF=cAr~k9MK~CzzhJ)M-LAc}Pcv zQTTtBvm1B~-)t-V$QtA{mRA;1dU$ql*~(7hLmr2FpcgfClkhjHha1dPDuu7{yu3h3 zKY)p4W}c~?DDi#%c>g*70)HN6so7vB2}CPdsf8M`qevkgr9HEmOn7d`p&kApej)km z1N`V0%t2m=70@Ndldm(AuCx&S$8jc}QmCAmAHUEQ_N|5C_>~u2K@(?JB-*c^;xq9a z`n{Rxg0sU?ISvn^GC2v8ptU9_S}W(NLaO`J_*0nAHqji_+=Ov0sQRgcoGEqjjp~#& znO4r_ez9_X7vzrFr%WIRB$;%cJF=6^XuEKxyca{E(oCG@@)g$R`@h2d)QI_PDY=%e zZwj@g1J2uNH1Sp7sC>pFxlp!PR#aX9VviEWbxTqx!GH)$R z$KMmLaWrbXLd53yCd(zzT{O|kVy5J{rAZ2X& z9Kt;Tb*<}c^7!N*f9L%@o7y0C4`*%Rm_0B)sy$36w~aA z@a>e^lBn~$>3(Ue>vC(yYLhiZv_^d;{SA}D)ZMbr5*al*Do6C3=!sDeqRQ9?*kY}F ztOaZZZQq!~_OT7NtwvFM*X%TxGmbQtG|n)lnL9)*wo2Bc(RpJY#+1+WHmYLua(2&K z&3Pk~q;(V`d7_@Kn*O48p>D3$gr0V~b{Q#=Wtl}R75@_#z-qk3{^qgsoAa6DINRNi z_N(?bC|&d5`0=DyNPnG{KlO5oI(d0g`^4u76B5;l8{z1C$WK4%-r&CEJLKySs1hiM z-g2(Lh5rG2(hWu6r!3XW4ACfAHtBxyZuZitnb0O`3+T3MPgC7& z(e~5k(dO0MR)4_>Itd-^JgVq7R4DQAh~oHUj(~sv5KU4ARc?|JTd4ZuyD3BO^G>WL zY3YvqvH|kE>?zKoO&O_Lsw%=wTLMp6H8dS^bXr5CjZ!zfseR}YTEf1=-XFYyU!@iL zm3+$l&{5VX&!DAU$qqLqxFe_w?dEfKPJDqjD-Ex}e4evebU*XpC?>*%*u;s^i1ThU zO5d%VBOB47Ex`ZWlvJy`@K$#z{#A@;!tfjI%XFc%(k&BH&NR_nV=`Ik3V}aI_dJvE34s)JI?2_Bj?s_rt?>Lr8dj`^2MrTRc_5R z^lrz=;@F}&tu@?eq|Z?0ooO{*=ZRv1dCt>{EVjG!jdw^`J%#t@2V}%MY1`6lsb5pJF|Q1vsVJ;6 zs_ro5yQh!SZ^0M#46oRQz)B|eO#_kK3ExytRiZYlE*aLr80|}K3-x}|)vl}MxaU_e zb8Q>BF|w*H))tH7XL{7DsQ+v}o6=UscHDZ|x)OS%3*Ot~i02VnQ&!Vu!*`fu6O3y( zU*1`p+H5fkW3t4|jcFKlFzO%62g`TUXmfMust|9&W#RY3V6rQ`#h5O}r23O_www zu~q7)lznhkntILNIsqlF+2{Pc%XjI5q<7l41SV5GpNHh+rc^5N*`wIg;cB_#Jx{IdRiO zYaWwNAjfG{5$E^-eHndg{S5L1uQRi*gF~nmh0VX1beD!G8~c0-_O zU~jNVuqs)Hd(e0d#;^ZBp3XYViF0qmlZo4IvdJ#)R@~hwP~6=eiWhe;#i6*nyHl*V zyA^j^k8X4_`R+Y`d>2U8QsNK|AXXt(Y;P;`@QEvn}j6Sr~ zM^pz?G34SFCKI@0dYSaXDPNMC!YvvTC>|KVKC!hvkA5Ombe#69W}7fT*vK97iBG5} z%-`kIX47ETt8umtMi1D4%=VJ%f$E+x2=bfinZA=#`oU&`n%^RRo&B*r99PNq%&LuB zVLfl{Yn^7@2amQ#?6BBB(CY3reldP9)-a7>M!VZuJua_(pWPTgDt?yjp{=!LyQP$Q ztNCw31>-T@bp2iJUR`%~O-;zUYDAt*8mR_z#2w->JXPZZhXdo_m#lEFN1MMLC0o>4 z2^zs;=dYxt_jl|~FO+^HwN&a+m`p#DIwx&Q&Xt^yb}%*SJnB5{o#1Wi&*qN?9tQgH z>`h_5I?-R;e-m$EVZ1=EG8U1V+#X`YZ0{^jyvOgFFaMyDG zfgk8MYQdfGQ||I>o#6)CgofdAcx?D6zO;Oix6(#DGM(tz^P+MrAT$v&`N;+*j|D%j5bUxi|_)2p~ z7CeQnc@aI%F%rXc#^%P5p{p@q7-X!0SGl5op8mQn%qDrMt_*to2`B-U@$Zyp^K%#f zkXN%4eM%Pf6yoL2aB@TwUA6ODVQ4ege{y`Pnpdm zbGG(oH*#LuDb++5kpO8eju~wewDv9F%XFY8Tu6pmCpKd3*qB~LueloyNLje~S)*s= z4yfO5pp9rix0dOtwuv8bHEvLt;U(l@c5*4OnC<93{Lo*5uR{08<0yn;jadQtc~9s? zf9JpbKKh0&i81;OhC@*_8Acq%IXQ323cm=1ONp;ZHpqrQVkq@n4QY(Dn3Jgkv$q9M zDDP2!^*}dUO0$G+U?BM? zkJW#xMD=pI9a(Ho)z%dz(^h;Mce!8oGDRu{k7lws0(MCPz2I^AtlSs>U2n+#9i@F} z6COuy%eA3J)Pi!ih7C_Gp(pc+XPhaw*~;~yhWnMh`UTFTH*i+dgtxGj29c-UJX#ih zN(ne?M_|i*_ur$}uR}#Q#lIOpZm&?)kX?EhUW4`_9ff8h^Q)}vlNZas$c^dqOo6rj zK|VQSv%jT3hI8o;_>#MY{lYNLW1shvcVcRl)PhNu620jY(|e-%8cZH{{@9e5+pz~? zkMO)MK}T^1(t(c@$6j(V`6*t>x$HCV=o0iJbx(Ei+Hu+&nrzx6`ueVDTI`m7mfp5= zw(WKaE>pzTHf|BU&nfF4%v4@l(@5etXI&0Qa+GP0=@-LjNZK0>>89akm35)Dmi?l= zVf;z_K7H)5)&bTj=u;-4qaCEHsc%cxFHADsFlLKsnp)ay>U!!6kRghaFEuxCKA_4d zmhr`%=)UFJ4U<-lvu~ZVuhZbn)X$HD9eFvmMe4ES{K@T-&Lr+kGAD_t^HK^rA3Lsl z=Xy&99R8!hfsgIOFdI=lT#EgD$>8kglg?^(CA`yGS)W$9b=i?uK8J?JzddCQ^jF%M)}IL+Rc3 zqM^Qphkg<)(UPb{GxIKV>|#x5@NctMl*Iu`S)cUI^nkEd=&0zS zIE(N04xQ^n`Xv*-p}%1?cZ8l_iCy8cQ2EeZ7%B%N3t`{oW0Kk<+Enf?tI_ADNp|$@ zQF$t}pv%fKsuJi?w3-Q;_UK99;rzKwg}03}Iaw^Myufa#4AsgVTpBMR9!$smlc3a+ zzgS<)2NQiGyp)TaBLmoX&y?OvyZIi}fKm6JEXYj?l~_(OS}~3uDU%$i5J>l%(N)z5{tUf=ubW@Wtgm0m z{pCSIBAS7lbh3w|_wZ#cMt^mVEQy@HOBvts-_Jt7pIcB1dB{jS#}v}#xai1}c9Z<9 zNzSFr$XhGb$_h;PUKkD=_K~lkk3N*=FlTwfdA2>$H?o6U;~u``gSr59!!_+x^=GvU zcJE6~F6|=7g}bRalC8DkX4~%D8ri1Xg4Wz|FVM}-vCJnGd4;8frJUtZ%-NWHrW&S_ z@DKMhPh4ouFb}t;SP$9D#P5yIl@PS`vOl-fwT?5ZV`dnBHMV6-8qZwzm}WLQ^6J_? znjK`L)K-s#XOvg|Rc;5PU@AF0c|GMkCGaKN-B(>2_a@giS54PNJO||+AJc24y-h8V zaw_>iQqiPR$tROaq}@;L;mYBf0n6Y3eWU>;)Mq}Q3PC?q@G^l7{z3kT@2+o=uZ1tc zcQd1U#vAV|&mW%gF%5E72a9QQ|kE6q4D{^eD*$mfj6kY zbEEVwk30P*p0WYlUeD!Qkcp>8X9$bgDePA)r~m&ICx0g2E0x_(D$m_w9Pa@Vf4Yg+ z#1KTFOm;|s+V~89kqz38+REtir=pF`^a18zzH%F%L_E`yx_Aj|7^WM#8SazDe$PZaNd)f>FT5_hjnz~`PP8dwg*Bv0cSJ=y znf~X8yi@)XUJ!nWHor$u2xf!H^e@?g``E?(g}P*acr{~v(f_>Vd>Vy5>;P;qA2oAC zRzxK^HaZD!S1)+kBOG0cLEaP!mDGc<)XM>TqUKZnTr`KD^Dex)q0de62bJFNDK`Q^bGVM zSK}`_{>^~}foSk{Z~{3Usr0u~n4wliqx_ZsezWL*^1g71@J00ERha@fysNwpd{h^y zk>0VhT&*~$7)~FxKmBkzTc4D@=_ArV`d0XUWsjW`#`P9zh*Da!wj3Vm+7W%Ep=6OJ z;Y(@=D>S^QfnihI(8r(yfP$rA@cl7Z0-UvA2s~6W_+Z%zh;9b6f*B zw6EdO{)+0YhPA#`N6L>iCT~n(Q$y2E<5%Mmvn8e`wM+7d+lN`VS+m6q zj45qAZglH*>91&KprI9Y)nP2;(AL!E(&W>)_zskT-_r_yUnx=pkGpTVeXhr@m(U|O z!n2P$|ANUh%CRiHT6%W$D5jL9$?KD{B$ZFTp0t`=!UD`!vw6Lqc$~~+&IaDe$*MJ-ACz(_bdgOfEWnDz`&zLSpP>t~Rga-9vKKNAh=y;`fmZb(wwtX?$e(#W;vL?MeN2yg>&2L{u!bNaCmg@n9+)(-86x zo|A3z7@bjHb%5SwGtAd|;t8ISRcI}*F<1F2qzgf&$d6SIA&-?+?Ns20`)K*jm0wfbz|_z{sXhA58AIv+=ua@%AtFKFZ>7vzK2xd(&$Py zvkwW7O7b5(xyP`ZKcR0Ap%*VEUysy64L5}Df3!FdzfTo5$;Ffd*?+ZER8>?!gK-Fr z+cEsz+o)GY;`ezE>m`P?2_Ns@5_I(Q;Wkx77gRJTk*rreaG1R2ePq|3NAqTbIg}fg z+vrGV*z?!r+w74`Fn_p*j#iSAr6=&Im*V)m08`&h9@k>}mIvq-lA|>QYouEwLW;yR zbfBY|4b7ql(uXgHG6}T;;nlhMp=r zegY|6So+E)_96t0D$LSdB=GEKlO9J;(H!^FS$0po&}})WHPgux>Bp&goO4Bw_J|}C z_D9?mFevj%m%{?QPM`mcKj@QuO<|D@#~YQEnl8vRdoP^2?9l^qA>kTXCnjMaedbUp zJ-h)=&=VMl9{)!F5ccSW$u|51L$r5fROAr4^FHYn(kqep*)Khib{g&S8+b9Am~ZB7 z%vz14-F-y6v;nWtBs}5`<-&4lGG4mD-RKMjXg}1BpPEYAi<*#Tv+ka*2YUN>OMT0! zxb!%;t*m{c?TxK=+_<>b&}i>igVw2WyW(EJ!1l!IErrbW&9w}ZIKAo^u9_N}FIbvb zbD-y67@rdF<=?$QX2)T(K4u5xvby8~m(~{6UDmAE9>!-hAH`inm0x`^b1%Yvt2<}w zS?^2lWA|FLU}>8W3mTPDv;awPthq)+;sGB3sL zxaNp@l0Cisjr^0zojF6Yt{B`0LHsromWyO@D10{Gsf<0;dC6pPJoXIrOrr`K2<>*Z zGZ#drn~qr5P53FR+=IQH(5F=Mee^$}_t_j+&*b1=dhOeMa*5Q^ZhRVpsi~gAjy#N} zY#lZAP$u=m*_HMryYnGcN|2qboepAwQdIR5zlb}iXD5?^^^$$ zsy7)_h86lF`kkC5b)dIRru%84@2#&*?f1YS8}!De#!Ci^@wL7@d!OO@Vd&%z^8H$a zx53EyUy7M}AyUK+;`bS*DWWN_{sB#4rgEvGuVO!M>QU5Wt6_Il66y*M#rtAMRcj{p zb5#lW2s~_GFEJ_jjWeYT`jTnXQ=7@^5Y-i^ya-e39e0Kow$m&5r~HDQ%pkg`LHNA3 z;wzlP&gHf;hpM{zZ)gX#HE%ds8ZlcL0pof<^=Uw?tK1^qh51)Vc~E(g^z5IcFCK?= zpi_QhXLOW|AOrK?;gQ*qjd*>glNT}`g5*BPj>E~veWWNa_Jj@5gn3CtYOV&+3NST; z(L{QmSLmACh^T@yP`ELi;waY*&aD3Wre@gl$~cW^6E9v^RovF2fs2U8Z4FM zGiZ)KVYhrls4T2g39p|h*0@GW7sQ^_xauz*GVZ62F z(>|q|T_>D}IHQ`NL;Rt?uP?(UvZA`M`V9A#HT)D}#H-*5=IpKTAoS(A9;iF1>rJL+ zMfFPcTC~OUHTN{N3{wr`>1%dbKUoXf+S*FmI@&75b&IQE?Pz^w`DS@&d2Ly4S!1Cc zi)m--Y`Tq}&17t4RG5dD-&wj@huD+s*7(Ws6Ks!dXDwN*<;Bj3Dqp3KC zu6Yk0fVR|)L)DYi?@&b5|#GM~c&JtIBD36a|9kg~&lD8&(N}ZpY!p~;QcLlDiUv(W~thb1JpL>O?s%sV}N^|EAhsL$rImG>oyOKADR|&gz4WH?&z=Obp z;Qrw2(1wr!PelaP<1uunCD05FB=Z6(e7}3aoal7`w)3z56bS^d- zW8l%w!G|-7YC$9Hh<-pj_k^ui56+dJY*?T0j#UyhViw^)lovP9`D{n~{#yRd4Dl@5 zuA$U5chHo&=md_TFU-vh(nzMM25t0A_SmD~v`^s2#Q)8?EK)OS+*{E*(X#j?2EqX8 z$o_Z=?CX}{#^D9hd}*P)R6Zn}7mo2xX2Xx&ovpPhl0TwHN0T3Vu@L$ZoWc%iM7UXa zq|{#efMTRL^pXv1_!7wZdqWP-F}#+)GDA*NWahrDq0>2}PJv3B2WH@DK1unu&BmWI1t+{aVU5h+mO4E!V`y<`RL_Qm>1_hzC z!pIz~3)x2<(Ez^0qw0VswVGUm8Dz2+ASZc0+G3IU^$hyLW(BFo!hPlQ+jQMq<&chz9aO4H) zXKkgQFv^#SGsR})rwu|&+l?A-hx(`bj@qqW208hj@tbkA<+5cJdz-%SQ?}cl*-FK= zic3bXf5vjfGKH+4Y1RqWr?C%WN1G>@M;hlD3qm`XN`}X0OH=CtTZT=7=A^SXx4*L# zv~D-6V$Q;U&k3nAJ3hI*+Lzj#u%J5Qm1xgC?l1A8xQv_&Q%^lWJh;nC(v9*2uCHEBZ9t(1u=^BmnAUe6oPOW!$P_dw}D zAaF5I1%8jk|IxPz2L3Q#NuS+!1%hOajJMzs+!CuW|I8Zp87z~zWfFL>pCixsy(i=KOjXO*Dr@&oyG7c9F?y+ zqy7i^Us=dh?}rYh9zE-EgV8vUJ^dJiU~Gk|wzvKP%v!5{I_FAO2$BW(qZvtr0l4`m zwIj5-wCCCT7}dkr)=ng;`yywFfnHz+8S5{2UhdJGY4H(mXXcaX&G;J4CtN_8|2|Sq zuE$L9ftaAIOs;88zVg%JBfKe16vfyb^~WzGGQWElE+X9zMuJOVY1|0h4pa?S3qO=! z%EdSXUa?PC@uMHPc`vDluaf(+3O@A>dYTLDwF@ZU(D$8(s`-W++y(P{tKuUp126fj zi}0D8z|;RKIy>5t+>nXv(Z+~9=$4v`g<+f>#aC1;pbDr1Z~YsYtNa7AqY`YfxoF|6 zXfyiZ6EDJhsurT;h7F45mCMK$NJ=BvC1*oVTM=4Xar8PSGH4I*m3D#%XJST~fWLWr z@GuUszSJr$g2iFe?&K^Q9BCTqF1Ln^)}I_g2Z(;A@U;Zh8&uy^RmllE$#;3FxLF*BmiZGi@m$KB{Jn!>oG9aZ%Au&sxmSk0>x#(U zNG-PA1(~Tlgx^^T&YhNX<34A9LuMXZ$w0M}9r~Hc9qEj8MV*A=oQUhmK3xi1G8ekH za_ri>p~=%pSHnrclfj~a_&`U0cmG$v&tEn8TW~uyr9yfTUPzx+JbF6?<t zT(QV3w} zrjxP7Eh}sadqVuc_#w6(wsn@rmO19P=0C{Q8?Gy<@2D+9@3RnkP;0GKGgy-YM?@Fy zxW4!wj?kqy#O2oj*4kM#X^EUE>tQj~Wt#HSF%5F$%=Aa8ol<)xKTTSfs7$<&SR-*- z$}cHv90MG;Jv%)M`8-#1j~xznLB*XO*cxaOfMi7udkvgbfs79@Abj5C-YcFyp6+g) zJG<+Nvxzgt+02>US;u8@T_sm&g0~f{1Cy`5zk$Cn-th*^QLHigV_vTN zj3&Pd#K;=dH3f86wf|`!;UHYdeCD*KyJjIZ=|AW|cJdzEd3tow0Q&B%(Obe}L9H|> z&#KO|v#6l1Nuuv7QhFaoVo;HcmJ2c$3W$v;(JHF3XKbC!`nlxxZ&FfU!qgc<`1Xm znT1}x9U7i$up(A?Y)ZVC4cuViLj5Fb)EYMv|b z*h)xM|Cf`xS$-r}Ms0Qrc7CRw>xa4_euzb+6%->MtF^iW%#^b1%g#a(%}cE^4u#)B zyn}zk>Cz}2qJ@4g1ZQR_d+*oiQ@){*Im4-^#uq+VcqwEkI*EnYIj>~))|Z}o5Idh~ zDBcRQgb)!Kh}!&jrRHWZ}z;lezsPY#TKWjiMa-qdG!T`XKC-@MJ@|_R;|ygF9(tKx%P*)Jvv&2J|Cw? zR@}%@QciLkM;j6iCE3*v=L|Z`&lbm*yqSOYPqGUyX>VzlYk${vVejL^)iy;PQuXKg z9fN}V7SE%OXKo>tfL@`)@6%an!Y5k{YS1Wj_nE0WFVI}gBCq#9vQ2A{g*9HiMtvGb zZEZ9bFHzJi{vSK(HadunZ-FE1_NVdgYoJf$4=qDkaudzlVz_Kt&VYT~?KxoD zj)T4J2^*#5c;Wg%dm93qC7&!34FFayt4`9L%(BAqmEQWnXo#tn;o?V=28~C z>%-x^{EJ69k@Nm<>WOu@lCw~MWv~OkO8R;&v8-55Ou#Qi;*U^Dc)*T-p;QCLk}cFW z&^pk8{LIDv!~TtsA&TOCy+GDoeB`LK7cOBQCgT0rt;Iw)qhIV19^p6nH5t3$FW=9Y z6KW7rG8>eX2Vu0c) zn%hq#EebrE+Ed1`(G%OkQr))I=CZen-(pX* z2jj}vM#7dASoPGhHo*52wOo(A5_{5o+(dtIJM$8iWg~J~iUdal^JVnNDD0_A z9nskR#=Me|lE)sZ|h*`G8u>2cEUN!rwlDXpA&oJKVF>wRN= zs{;c9y~t#X22KVV1tOdbMf|7O{0#P$%A{Fk+(q-Y(bLXT)cw)5&e_nJnM1h8(abRd zJ*~<8)g^jEp0gP@GHP%RE$2*`#s;$!td2RnC;O$L(oFcrIb)@G{q-Ylm#yQ%8fK1)CS#gZ6~HFKiK6g z(C^Y$)psM0!=j%-c4-m>1gAcqVF)~}Glm#uDlIuz9vklH^T1Hq3OCZlBxMX*w*iou zT9V13(;d@x$In(u(_H;jwSr8LCHSDdqXM4LV)2q zC2~750Kvo1n9{mR6#9%Nnw=f2qLp`wz8S;Q`=5P9>f6vTam{y45Wmj_)ero~PnkjY;3=p@ceF;?mVfRT`PjoCNd8MI;X(BIMulA= z$%bfm=5h}tF_JDdBmKMvjGI?zXi7nZT(28u_ICvZE*kk^wf@W}rUeSQlz7~@g@Nl<~W
    BthLoJ5wE5lOly{sFXftZne$9& zX{aVu*@>8cVj^Z^OlM6`O$xg)eduE_0;#_q8W=UiEwiSs#>f8Uv!;T!B|EY28nd

    *YZxd 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%0Af+`dA7Ha+SU$=hz#olqac32BD|)2DKtK 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 DKy>)H literal 0 HcmV?d00001 diff --git a/src/store/getters.js b/src/store/getters.js new file mode 100644 index 0000000..e5dbfae --- /dev/null +++ b/src/store/getters.js @@ -0,0 +1,10 @@ +const getters = { + id:id=>state.user.id, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + roles: state => state.user.roles, + permissions: state => state.user.permissions, + hasLogin:state=>state.user.hasLogin +} +export default getters diff --git a/src/store/index.js b/src/store/index.js new file mode 100644 index 0000000..ec5bd8f --- /dev/null +++ b/src/store/index.js @@ -0,0 +1,10 @@ +import user from '@/store/modules/user' +import getters from './getters' +import { createStore } from "vuex"; +const store = createStore({ + modules: { + user + }, + getters +}); +export default store; \ No newline at end of file diff --git a/src/store/modules/user.js b/src/store/modules/user.js new file mode 100644 index 0000000..dab7585 --- /dev/null +++ b/src/store/modules/user.js @@ -0,0 +1,130 @@ +import storage from '@/common/utils/storage.js' +import { + login, + logout, + getPermissionInfo, + getTenantInfo +} from '@/api/request2' +// import picUrl from "../../static/images/profile.jpg"; + + +const user = { + state: { + id: storage.getStorage(storage.constant.id), // 用户编号 + name: storage.getStorage(storage.constant.name), + avatar: storage.getStorage(storage.constant.avatar), + roles: storage.getStorage(storage.constant.roles), + permissions: storage.getStorage(storage.constant.permissions) + }, + + mutations: { + SET_ID: (state, id) => { + state.id = id + storage.setStorage(storage.constant.id, id) + }, + SET_NAME: (state, name) => { + state.name = name + storage.setStorage(storage.constant.name, name) + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + storage.setStorage(storage.constant.avatar, avatar) + }, + SET_ROLES: (state, roles) => { + state.roles = roles + storage.setStorage(storage.constant.roles, roles) + }, + SET_PERMISSIONS: (state, permissions) => { + state.permissions = permissions + storage.setStorage(storage.constant.permissions, permissions) + }, + + }, + + actions: { + // 登录 + Login({ + commit + }, userInfo) { + const username = userInfo.username + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + + return new Promise((resolve, reject) => { + login(username, password, code, uuid).then(res => { + if(res.data){ + res = res.data; + // 设置 token + storage.setStorage(storage.constant.token,res.accessToken) + resolve(res) + }else { + uni.showToast({ + title:res.msg + }) + } + + }).catch(error => { + reject(error) + uni.showToast({ + title:error + }) + }) + }) + }, + + // 获取用户信息 + getPermissionInfo({ + commit, + state + }) { + return new Promise((resolve, reject) => { + getPermissionInfo().then(res => { + res = res.data; // 读取 data 数据 + const user = res.user + const avatar="" + // const avatar = (user == null || user.avatar == "" || user.avatar == null||user.avatar == undefined) ? + // picUrl: user.avatar + const nickname = (user == null || user.nickname === "" || user.nickname == + null) ? "" : user.nickname + if (res.roles && res.roles.length > 0) { + commit('SET_ROLES', res.roles) + commit('SET_PERMISSIONS', res.permissions) + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']) + } + commit('SET_NAME', nickname) + commit('SET_AVATAR', avatar) + commit('SET_ID',user.id) + resolve(res) + }).catch(error => { + reject(error) + // uni.showToast({ + // title:"用户信息获取失败" + // }) + }) + }) + }, + + // 退出系统 + LogOut({ + commit, + state + }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + commit('SET_ID',[]) + storage.removeStorage(storage.constant.token) + storage.clearStorage() + resolve() + }).catch(error => { + reject(error) + }) + }) + } + } +} + +export default user diff --git a/src/uni.scss b/src/uni.scss new file mode 100644 index 0000000..0530dee --- /dev/null +++ b/src/uni.scss @@ -0,0 +1,78 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color: #333; // 基本色 +$uni-text-color-inverse: #fff; // 反色 +$uni-text-color-grey: #999; // 辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable: #c0c0c0; + +/* 背景颜色 */ +$uni-bg-color: #fff; +$uni-bg-color-grey: #f8f8f8; +$uni-bg-color-hover: #f1f1f1; // 点击状态颜色 +$uni-bg-color-mask: rgba(0, 0, 0, 0.4); // 遮罩颜色 + +/* 边框颜色 */ +$uni-border-color: #c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm: 12px; +$uni-font-size-base: 14px; +$uni-font-size-lg: 16; + +/* 图片尺寸 */ +$uni-img-size-sm: 20px; +$uni-img-size-base: 26px; +$uni-img-size-lg: 40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2c405a; // 文章标题颜色 +$uni-font-size-title: 20px; +$uni-color-subtitle: #555; // 二级标题颜色 +$uni-font-size-subtitle: 18px; +$uni-color-paragraph: #3f536e; // 文章段落颜色 +$uni-font-size-paragraph: 15px; +@import "@/uni_modules/vk-uview-ui/theme.scss"; +@import '@/uni_modules/uni-scss/index.scss'; \ No newline at end of file diff --git a/src/uni_modules/uni-badge/changelog.md b/src/uni_modules/uni-badge/changelog.md new file mode 100644 index 0000000..544ecc1 --- /dev/null +++ b/src/uni_modules/uni-badge/changelog.md @@ -0,0 +1,29 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge) +## 1.1.7(2021-11-08) +- 优化 升级ui +- 修改 size 属性默认值调整为 small +- 修改 type 属性,默认值调整为 error,info 替换 default +## 1.1.6(2021-09-22) +- 修复 在字节小程序上样式不生效的 bug +## 1.1.5(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.4(2021-07-29) +- 修复 去掉 nvue 不支持css 的 align-self 属性,nvue 下不暂支持 absolute 属性 +## 1.1.3(2021-06-24) +- 优化 示例项目 +## 1.1.1(2021-05-12) +- 新增 组件示例地址 +## 1.1.0(2021-05-12) +- 新增 uni-badge 的 absolute 属性,支持定位 +- 新增 uni-badge 的 offset 属性,支持定位偏移 +- 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +## 1.0.7(2021-05-07) +- 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- 新增 uni-badge 属性 custom-style, 支持自定义样式 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-badge/components/uni-badge/uni-badge.vue b/src/uni_modules/uni-badge/components/uni-badge/uni-badge.vue new file mode 100644 index 0000000..1981b4e --- /dev/null +++ b/src/uni_modules/uni-badge/components/uni-badge/uni-badge.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/src/uni_modules/uni-badge/package.json b/src/uni_modules/uni-badge/package.json new file mode 100644 index 0000000..7ba6d2f --- /dev/null +++ b/src/uni_modules/uni-badge/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-badge", + "displayName": "uni-badge 数字角标", + "version": "1.2.0", + "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。", + "keywords": [ + "", + "badge", + "uni-ui", + "uniui", + "数字角标", + "徽章" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-badge/readme.md b/src/uni_modules/uni-badge/readme.md new file mode 100644 index 0000000..bdf175d --- /dev/null +++ b/src/uni_modules/uni-badge/readme.md @@ -0,0 +1,10 @@ +## Badge 数字角标 +> **组件名:uni-badge** +> 代码块: `uBadge` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-badge) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-breadcrumb/changelog.md b/src/uni_modules/uni-breadcrumb/changelog.md new file mode 100644 index 0000000..016e6ce --- /dev/null +++ b/src/uni_modules/uni-breadcrumb/changelog.md @@ -0,0 +1,6 @@ +## 0.1.2(2022-06-08) +- 修复 微信小程序 separator 不显示问题 +## 0.1.1(2022-06-02) +- 新增 支持 uni.scss 修改颜色 +## 0.1.0(2022-04-21) +- 初始化 diff --git a/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue b/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue new file mode 100644 index 0000000..b9edbd6 --- /dev/null +++ b/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue @@ -0,0 +1,121 @@ + + + diff --git a/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue b/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue new file mode 100644 index 0000000..94493a2 --- /dev/null +++ b/src/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/uni_modules/uni-breadcrumb/package.json b/src/uni_modules/uni-breadcrumb/package.json new file mode 100644 index 0000000..e5f33e8 --- /dev/null +++ b/src/uni_modules/uni-breadcrumb/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-breadcrumb", + "displayName": "uni-breadcrumb 面包屑", + "version": "0.1.2", + "description": "Breadcrumb 面包屑", + "keywords": [ + "uni-breadcrumb", + "breadcrumb", + "uni-ui", + "面包屑导航", + "面包屑" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} diff --git a/src/uni_modules/uni-breadcrumb/readme.md b/src/uni_modules/uni-breadcrumb/readme.md new file mode 100644 index 0000000..6976b8d --- /dev/null +++ b/src/uni_modules/uni-breadcrumb/readme.md @@ -0,0 +1,66 @@ + +## breadcrumb 面包屑导航 +> **组件名:uni-breadcrumb** +> 代码块: `ubreadcrumb` + +显示当前页面的路径,快速返回之前的任意页面。 + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + {{route.name}} + +``` + +```js +export default { + name: "uni-stat-breadcrumb", + data() { + return { + routes: [{ + to: '/A', + name: 'A页面' + }, { + to: '/B', + name: 'B页面' + }, { + to: '/C', + name: 'C页面' + }] + }; + } + } +``` + + +## API + +### Breadcrumb Props + +|属性名 |类型 |默认值 |说明 | +|:-: |:-: |:-: |:-: | +|separator |String |斜杠'/' |分隔符 | +|separatorClass |String | |图标分隔符 class | + +### Breadcrumb Item Props + +|属性名 |类型 |默认值 |说明 | +|:-: |:-: |:-: |:-: | +|to |String | |路由跳转页面路径 | +|replace|Boolean | |在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持) | + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb](https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb) \ No newline at end of file diff --git a/src/uni_modules/uni-calendar/changelog.md b/src/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..6df4493 --- /dev/null +++ b/src/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,16 @@ +## 1.4.5(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.4(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.3(2021-09-22) +- 修复 startDate、 endDate 属性失效的 bug +## 1.4.2(2021-08-24) +- 新增 支持国际化 +## 1.4.1(2021-08-05) +- 修复 弹出层被 tabbar 遮盖 bug +## 1.4.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.3.16(2021-05-12) +- 新增 组件示例地址 +## 1.3.15(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/src/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..fcbd13c --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..1ca43de --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "确定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..e0fe33b --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "確定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..0353011 --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..a2c33d0 --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,554 @@ + + + + + diff --git a/src/uni_modules/uni-calendar/components/uni-calendar/util.js b/src/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..bae9273 --- /dev/null +++ b/src/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,354 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + } + this._getWeek(fullDate) + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/src/uni_modules/uni-calendar/package.json b/src/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..40455c8 --- /dev/null +++ b/src/uni_modules/uni-calendar/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 日历", + "version": "1.4.5", + "description": "日历组件", + "keywords": [ + "uni-ui", + "uniui", + "日历", + "", + "打卡", + "日历选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-calendar/readme.md b/src/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4f3ca0e --- /dev/null +++ b/src/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 日历 +> **组件名:uni-calendar** +> 代码块: `uCalendar` + + +日历组件 + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js) +> - 仅支持自定义组件模式 +> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date() +> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意 +> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动 + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + + +``` + +### 通过方法打开日历 + +需要设置 `insert` 为 `false` + +```html + + + + +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 属性名 | 类型 | 默认值| 说明 | +| | | +| date | String |- | 自定义当前时间,默认为今天 | +| lunar | Boolean | false | 显示农历 | +| startDate | String |- | 日期选择范围-开始日期 | +| endDate | String |- | 日期选择范围-结束日期 | +| range | Boolean | false | 范围选择 | +| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 | +|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 | +| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] | +|showMonth | Boolean | true | 是否显示月份为背景 | + +### Calendar Events + +| 事件名 | 说明 |返回值| +| | | | +| open | 弹出日历组件,`insert :false` 时生效|- | + + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) \ No newline at end of file diff --git a/src/uni_modules/uni-card/changelog.md b/src/uni_modules/uni-card/changelog.md new file mode 100644 index 0000000..c3cd8c4 --- /dev/null +++ b/src/uni_modules/uni-card/changelog.md @@ -0,0 +1,26 @@ +## 1.3.1(2021-12-20) +- 修复 在vue页面下略缩图显示不正常的bug +## 1.3.0(2021-11-19) +- 重构插槽的用法 ,header 替换为 title +- 新增 actions 插槽 +- 新增 cover 封面图属性和插槽 +- 新增 padding 内容默认内边距离 +- 新增 margin 卡片默认外边距离 +- 新增 spacing 卡片默认内边距 +- 新增 shadow 卡片阴影属性 +- 取消 mode 属性,可使用组合插槽代替 +- 取消 note 属性 ,使用actions插槽代替 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-card](https://uniapp.dcloud.io/component/uniui/uni-card) +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-07-01) +- 优化 图文卡片无图片加载时,提供占位图标 +- 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- 修复 thumbnail 不存在仍然占位的 bug +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-card/components/uni-card/uni-card.vue b/src/uni_modules/uni-card/components/uni-card/uni-card.vue new file mode 100644 index 0000000..38cf594 --- /dev/null +++ b/src/uni_modules/uni-card/components/uni-card/uni-card.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/uni_modules/uni-card/package.json b/src/uni_modules/uni-card/package.json new file mode 100644 index 0000000..f16224d --- /dev/null +++ b/src/uni_modules/uni-card/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-card", + "displayName": "uni-card 卡片", + "version": "1.3.1", + "description": "Card 组件,提供常见的卡片样式。", + "keywords": [ + "uni-ui", + "uniui", + "card", + "", + "卡片" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-card/readme.md b/src/uni_modules/uni-card/readme.md new file mode 100644 index 0000000..7434e71 --- /dev/null +++ b/src/uni_modules/uni-card/readme.md @@ -0,0 +1,12 @@ + + +## Card 卡片 +> **组件名:uni-card** +> 代码块: `uCard` + +卡片视图组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-collapse/changelog.md b/src/uni_modules/uni-collapse/changelog.md new file mode 100644 index 0000000..292e4c7 --- /dev/null +++ b/src/uni_modules/uni-collapse/changelog.md @@ -0,0 +1,36 @@ +## 1.4.3(2022-01-25) +- 修复 初始化的时候 ,open 属性失效的bug +## 1.4.2(2022-01-21) +- 修复 微信小程序resize后组件收起的bug +## 1.4.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.4.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-collapse](https://uniapp.dcloud.io/component/uniui/uni-collapse) +## 1.3.3(2021-08-17) +- 优化 show-arrow 属性默认为true +## 1.3.2(2021-08-17) +- 新增 show-arrow 属性,控制是否显示右侧箭头 +## 1.3.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.3.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.2(2021-07-21) +- 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +## 1.2.1(2021-07-21) +- 优化 组件示例 +## 1.2.0(2021-07-21) +- 新增 组件折叠动画 +- 新增 value\v-model 属性 ,动态修改面板折叠状态 +- 新增 title 插槽 ,可定义面板标题 +- 新增 border 属性 ,显示隐藏面板内容分隔线 +- 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- 修复 resize 方法失效的Bug +- 修复 change 事件返回参数不正确的Bug +- 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.1.5(2021-02-05) +- 调整为uni_modules目录规范 \ No newline at end of file diff --git a/src/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue b/src/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..50a72a5 --- /dev/null +++ b/src/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/src/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue b/src/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue new file mode 100644 index 0000000..384c39a --- /dev/null +++ b/src/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue @@ -0,0 +1,147 @@ + + + diff --git a/src/uni_modules/uni-collapse/package.json b/src/uni_modules/uni-collapse/package.json new file mode 100644 index 0000000..65349cf --- /dev/null +++ b/src/uni_modules/uni-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-collapse", + "displayName": "uni-collapse 折叠面板", + "version": "1.4.3", + "description": "Collapse 组件,可以折叠 / 展开的内容区域。", + "keywords": [ + "uni-ui", + "折叠", + "折叠面板", + "手风琴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-collapse/readme.md b/src/uni_modules/uni-collapse/readme.md new file mode 100644 index 0000000..bc758eb --- /dev/null +++ b/src/uni_modules/uni-collapse/readme.md @@ -0,0 +1,12 @@ + + +## Collapse 折叠面板 +> **组件名:uni-collapse** +> 代码块: `uCollapse` +> 关联组件:`uni-collapse-item`、`uni-icons`。 + + +折叠面板用来折叠/显示过长的内容或者是列表。通常是在多内容分类项使用,折叠不重要的内容,显示重要内容。点击可以展开折叠部分。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-collapse) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-combox/changelog.md b/src/uni_modules/uni-combox/changelog.md new file mode 100644 index 0000000..23c2748 --- /dev/null +++ b/src/uni_modules/uni-combox/changelog.md @@ -0,0 +1,15 @@ +## 1.0.1(2021-11-23) +- 优化 label、label-width 属性 +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-combox](https://uniapp.dcloud.io/component/uniui/uni-combox) +## 0.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.6(2021-05-12) +- 新增 组件示例地址 +## 0.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 0.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-combox/components/uni-combox/uni-combox.vue b/src/uni_modules/uni-combox/components/uni-combox/uni-combox.vue new file mode 100644 index 0000000..981c422 --- /dev/null +++ b/src/uni_modules/uni-combox/components/uni-combox/uni-combox.vue @@ -0,0 +1,297 @@ + + + + + diff --git a/src/uni_modules/uni-combox/package.json b/src/uni_modules/uni-combox/package.json new file mode 100644 index 0000000..4a05c3f --- /dev/null +++ b/src/uni_modules/uni-combox/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-combox", + "displayName": "uni-combox 组合框", + "version": "1.0.1", + "description": "可以选择也可以输入的表单项 ", + "keywords": [ + "uni-ui", + "uniui", + "combox", + "组合框", + "select" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-combox/readme.md b/src/uni_modules/uni-combox/readme.md new file mode 100644 index 0000000..ffa2cc8 --- /dev/null +++ b/src/uni_modules/uni-combox/readme.md @@ -0,0 +1,11 @@ + + +## Combox 组合框 +> **组件名:uni-combox** +> 代码块: `uCombox` + + +组合框组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-combox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-countdown/changelog.md b/src/uni_modules/uni-countdown/changelog.md new file mode 100644 index 0000000..f25beef --- /dev/null +++ b/src/uni_modules/uni-countdown/changelog.md @@ -0,0 +1,24 @@ +## 1.2.2(2022-01-19) +- 修复 在微信小程序中样式不生效的bug +## 1.2.1(2022-01-18) +- 新增 update 方法 ,在动态更新时间后,刷新组件 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-countdown](https://uniapp.dcloud.io/component/uniui/uni-countdown) +## 1.1.3(2021-10-18) +- 重构 +- 新增 font-size 支持自定义字体大小 +## 1.1.2(2021-08-24) +- 新增 支持国际化 +## 1.1.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-06-18) +- 修复 uni-countdown 重复赋值跳两秒的 bug +## 1.0.4(2021-05-12) +- 新增 组件示例地址 +## 1.0.3(2021-05-08) +- 修复 uni-countdown 不能控制倒计时的 bug +## 1.0.2(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json new file mode 100644 index 0000000..06309cb --- /dev/null +++ b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "day", + "uni-countdown.h": "h", + "uni-countdown.m": "m", + "uni-countdown.s": "s" +} diff --git a/src/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json new file mode 100644 index 0000000..358cdd1 --- /dev/null +++ b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "时", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json new file mode 100644 index 0000000..e5a63de --- /dev/null +++ b/src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "時", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/src/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue b/src/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue new file mode 100644 index 0000000..1f8ef4e --- /dev/null +++ b/src/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue @@ -0,0 +1,271 @@ + + + diff --git a/src/uni_modules/uni-countdown/package.json b/src/uni_modules/uni-countdown/package.json new file mode 100644 index 0000000..70e99ee --- /dev/null +++ b/src/uni_modules/uni-countdown/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-countdown", + "displayName": "uni-countdown 倒计时", + "version": "1.2.2", + "description": "CountDown 倒计时组件", + "keywords": [ + "uni-ui", + "uniui", + "countdown", + "倒计时" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-countdown/readme.md b/src/uni_modules/uni-countdown/readme.md new file mode 100644 index 0000000..4bcb1aa --- /dev/null +++ b/src/uni_modules/uni-countdown/readme.md @@ -0,0 +1,10 @@ + + +## CountDown 倒计时 +> **组件名:uni-countdown** +> 代码块: `uCountDown` + +倒计时组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-countdown) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-data-checkbox/changelog.md b/src/uni_modules/uni-data-checkbox/changelog.md new file mode 100644 index 0000000..dbc517a --- /dev/null +++ b/src/uni_modules/uni-data-checkbox/changelog.md @@ -0,0 +1,43 @@ +## 1.0.2(2022-06-30) +- 优化 在 uni-forms 中的依赖注入方式 +## 1.0.1(2022-02-07) +- 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-checkbox](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +## 0.2.5(2021-08-23) +- 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +## 0.2.4(2021-08-17) +- 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +## 0.2.3(2021-08-11) +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +## 0.2.2(2021-07-30) +- 优化 在uni-forms组件,与label不对齐的问题 +## 0.2.1(2021-07-27) +- 修复 单选默认值为0不能选中的Bug +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.11(2021-07-06) +- 优化 删除无用日志 +## 0.1.10(2021-07-05) +- 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +## 0.1.9(2021-07-05) +- 修复 nvue 黑框样式问题 +## 0.1.8(2021-06-28) +- 修复 selectedTextColor 属性不生效的Bug +## 0.1.7(2021-06-02) +- 新增 map 属性,可以方便映射text/value属性 +## 0.1.6(2021-05-26) +- 修复 不关联服务空间的情况下组件报错的Bug +## 0.1.5(2021-05-12) +- 新增 组件示例地址 +## 0.1.4(2021-04-09) +- 修复 nvue 下无法选中的问题 +## 0.1.3(2021-03-22) +- 新增 disabled属性 +## 0.1.2(2021-02-24) +- 优化 默认颜色显示 +## 0.1.1(2021-02-24) +- 新增 支持nvue +## 0.1.0(2021-02-18) +- “暂无数据”显示居中 diff --git a/src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue b/src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue new file mode 100644 index 0000000..2e51712 --- /dev/null +++ b/src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue @@ -0,0 +1,817 @@ + + + + + diff --git a/src/uni_modules/uni-data-checkbox/package.json b/src/uni_modules/uni-data-checkbox/package.json new file mode 100644 index 0000000..51470a9 --- /dev/null +++ b/src/uni_modules/uni-data-checkbox/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-data-checkbox", + "displayName": "uni-data-checkbox 数据选择器", + "version": "1.0.2", + "description": "通过数据驱动的单选框和复选框", + "keywords": [ + "uni-ui", + "checkbox", + "单选", + "多选", + "单选多选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-load-more","uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-data-checkbox/readme.md b/src/uni_modules/uni-data-checkbox/readme.md new file mode 100644 index 0000000..6eb253d --- /dev/null +++ b/src/uni_modules/uni-data-checkbox/readme.md @@ -0,0 +1,18 @@ + + +## DataCheckbox 数据驱动的单选复选框 +> **组件名:uni-data-checkbox** +> 代码块: `uDataCheckbox` + + +本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括: + +1. 数据绑定型组件:给本组件绑定一个data,会自动渲染一组候选内容。再以往,开发者需要编写不少代码实现类似功能 +2. 自动的表单校验:组件绑定了data,且符合[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)组件的表单校验规范,搭配使用会自动实现表单校验 +3. 本组件合并了单选多选 +4. 本组件有若干风格选择,如普通的单选多选框、并列button风格、tag风格。开发者可以快速选择需要的风格。但作为一个封装组件,样式代码虽然不用自己写了,却会牺牲一定的样式自定义性 + +在uniCloud开发中,`DB Schema`中配置了enum枚举等类型后,在web控制台的[自动生成表单](https://uniapp.dcloud.io/uniCloud/schema?id=autocode)功能中,会自动生成``uni-data-checkbox``组件并绑定好data + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-data-picker/changelog.md b/src/uni_modules/uni-data-picker/changelog.md new file mode 100644 index 0000000..083e521 --- /dev/null +++ b/src/uni_modules/uni-data-picker/changelog.md @@ -0,0 +1,64 @@ +## 1.0.7(2022-07-06) +- 优化 pc端图标位置不正确的问题 +## 1.0.6(2022-07-05) +- 优化 显示样式 +## 1.0.5(2022-07-04) +- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +## 1.0.4(2022-04-19) +- 修复 字节小程序 本地数据无法选择下一级的Bug +## 1.0.3(2022-02-25) +- 修复 nvue 不支持的 v-show 的 bug +## 1.0.2(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.0.1(2021-11-23) +- 修复 由上个版本引发的map、v-model等属性不生效的bug +## 1.0.0(2021-11-19) +- 优化 组件 UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-picker](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +## 0.4.9(2021-10-28) +- 修复 VUE2 v-model 概率无效的 bug +## 0.4.8(2021-10-27) +- 修复 v-model 概率无效的 bug +## 0.4.7(2021-10-25) +- 新增 属性 spaceInfo 服务空间配置 HBuilderX 3.2.11+ +- 修复 树型 uniCloud 数据类型为 int 时报错的 bug +## 0.4.6(2021-10-19) +- 修复 非 VUE3 v-model 为 0 时无法选中的 bug +## 0.4.5(2021-09-26) +- 新增 清除已选项的功能(通过 clearIcon 属性配置是否显示按钮),同时提供 clear 方法以供调用,二者等效 +- 修复 readonly 为 true 时报错的 bug +## 0.4.4(2021-09-26) +- 修复 上一版本造成的 map 属性失效的 bug +- 新增 ellipsis 属性,支持配置 tab 选项长度过长时是否自动省略 +## 0.4.3(2021-09-24) +- 修复 某些情况下级联未触发的 bug +## 0.4.2(2021-09-23) +- 新增 提供 show 和 hide 方法,开发者可以通过 ref 调用 +- 新增 选项内容过长自动添加省略号 +## 0.4.1(2021-09-15) +- 新增 map 属性 字段映射,将 text/value 映射到数据中的其他字段 +## 0.4.0(2021-07-13) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.3.5(2021-06-04) +- 修复 无法加载云端数据的问题 +## 0.3.4(2021-05-28) +- 修复 v-model 无效问题 +- 修复 loaddata 为空数据组时加载时间过长问题 +- 修复 上个版本引出的本地数据无法选择带有 children 的 2 级节点 +## 0.3.3(2021-05-12) +- 新增 组件示例地址 +## 0.3.2(2021-04-22) +- 修复 非树形数据有 where 属性查询报错的问题 +## 0.3.1(2021-04-15) +- 修复 本地数据概率无法回显时问题 +## 0.3.0(2021-04-07) +- 新增 支持云端非树形表结构数据 +- 修复 根节点 parent_field 字段等于 null 时选择界面错乱问题 +## 0.2.0(2021-03-15) +- 修复 nodeclick、popupopened、popupclosed 事件无法触发的问题 +## 0.1.9(2021-03-09) +- 修复 微信小程序某些情况下无法选择的问题 +## 0.1.8(2021-02-05) +- 优化 部分样式在 nvue 上的兼容表现 +## 0.1.7(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/src/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js b/src/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/src/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue new file mode 100644 index 0000000..410888d --- /dev/null +++ b/src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue @@ -0,0 +1,554 @@ + + + + + diff --git a/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js new file mode 100644 index 0000000..c12fd54 --- /dev/null +++ b/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js @@ -0,0 +1,563 @@ +export default { + props: { + localdata: { + type: [Array, Object], + default () { + return [] + } + }, + spaceInfo: { + type: Object, + default () { + return {} + } + }, + collection: { + type: String, + default: '' + }, + action: { + type: String, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: [String, Object], + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 20 + }, + getcount: { + type: [Boolean, String], + default: false + }, + getone: { + type: [Boolean, String], + default: false + }, + gettree: { + type: [Boolean, String], + default: false + }, + manual: { + type: Boolean, + default: false + }, + value: { + type: [Array, String, Number], + default () { + return [] + } + }, + modelValue: { + type: [Array, String, Number], + default () { + return [] + } + }, + preload: { + type: Boolean, + default: false + }, + stepSearh: { + type: Boolean, + default: true + }, + selfField: { + type: String, + default: '' + }, + parentField: { + type: String, + default: '' + }, + multiple: { + type: Boolean, + default: false + }, + map: { + type: Object, + default() { + return { + text: "text", + value: "value" + } + } + } + }, + data() { + return { + loading: false, + errorMessage: '', + loadMore: { + contentdown: '', + contentrefresh: '', + contentnomore: '' + }, + dataList: [], + selected: [], + selectedIndex: 0, + page: { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + } + } + }, + computed: { + isLocaldata() { + return !this.collection.length + }, + postField() { + let fields = [this.field]; + if (this.parentField) { + fields.push(`${this.parentField} as parent_value`); + } + return fields.join(','); + }, + dataValue() { + let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || this.modelValue !== undefined) + return isModelValue ? this.modelValue : this.value + }, + hasValue() { + if (typeof this.dataValue === 'number') { + return true + } + return (this.dataValue != null) && (this.dataValue.length > 0) + } + }, + created() { + this.$watch(() => { + var al = []; + ['pageCurrent', + 'pageSize', + 'spaceInfo', + 'value', + 'modelValue', + 'localdata', + 'collection', + 'action', + 'field', + 'orderby', + 'where', + 'getont', + 'getcount', + 'gettree' + ].forEach(key => { + al.push(this[key]) + }); + return al + }, (newValue, oldValue) => { + let needReset = false + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] != oldValue[i]) { + needReset = true + break + } + } + if (newValue[0] != oldValue[0]) { + this.page.current = this.pageCurrent + } + this.page.size = this.pageSize + + this.onPropsChange() + }) + this._treeData = [] + }, + methods: { + onPropsChange() { + this._treeData = [] + }, + getCommand(options = {}) { + /* eslint-disable no-undef */ + let db = uniCloud.database(this.spaceInfo) + + const action = options.action || this.action + if (action) { + db = db.action(action) + } + + const collection = options.collection || this.collection + db = db.collection(collection) + + const where = options.where || this.where + if (!(!where || !Object.keys(where).length)) { + db = db.where(where) + } + + const field = options.field || this.field + if (field) { + db = db.field(field) + } + + const orderby = options.orderby || this.orderby + if (orderby) { + db = db.orderBy(orderby) + } + + const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current + const size = options.pageSize !== undefined ? options.pageSize : this.page.size + const getCount = options.getcount !== undefined ? options.getcount : this.getcount + const getTree = options.gettree !== undefined ? options.gettree : this.gettree + + const getOptions = { + getCount, + getTree + } + if (options.getTreePath) { + getOptions.getTreePath = options.getTreePath + } + + db = db.skip(size * (current - 1)).limit(size).get(getOptions) + + return db + }, + getNodeData(callback) { + if (this.loading) { + return + } + this.loading = true + this.getCommand({ + field: this.postField, + where: this._pathWhere() + }).then((res) => { + this.loading = false + this.selected = res.result.data + callback && callback() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + getTreePath(callback) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + getTreePath: { + startWith: `${this.selfField}=='${this.dataValue}'` + } + }).then((res) => { + this.loading = false + let treePath = [] + this._extractTreePath(res.result.data, treePath) + this.selected = treePath + callback && callback() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + loadData() { + if (this.isLocaldata) { + this._processLocalData() + return + } + + if (this.dataValue != null) { + this._loadNodeData((data) => { + this._treeData = data + this._updateBindData() + this._updateSelected() + }) + return + } + + if (this.stepSearh) { + this._loadNodeData((data) => { + this._treeData = data + this._updateBindData() + }) + } else { + this._loadAllData((data) => { + this._treeData = [] + this._extractTree(data, this._treeData, null) + this._updateBindData() + }) + } + }, + _loadAllData(callback) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + gettree: true, + startwith: `${this.selfField}=='${this.dataValue}'` + }).then((res) => { + this.loading = false + callback(res.result.data) + this.onDataChange() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + _loadNodeData(callback, pw) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + where: pw || this._postWhere(), + pageSize: 500 + }).then((res) => { + this.loading = false + callback(res.result.data) + this.onDataChange() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + _pathWhere() { + let result = [] + let where_field = this._getParentNameByField(); + if (where_field) { + result.push(`${where_field} == '${this.dataValue}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + _postWhere() { + let result = [] + let selected = this.selected + let parentField = this.parentField + if (parentField) { + result.push(`${parentField} == null || ${parentField} == ""`) + } + if (selected.length) { + for (var i = 0; i < selected.length - 1; i++) { + result.push(`${parentField} == '${selected[i].value}'`) + } + } + + let where = [] + if (this.where) { + where.push(`(${this.where})`) + } + if (result.length) { + where.push(`(${result.join(' || ')})`) + } + + return where.join(' && ') + }, + _nodeWhere() { + let result = [] + let selected = this.selected + if (selected.length) { + result.push(`${this.parentField} == '${selected[selected.length - 1].value}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + _getParentNameByField() { + const fields = this.field.split(','); + let where_field = null; + for (let i = 0; i < fields.length; i++) { + const items = fields[i].split('as'); + if (items.length < 2) { + continue; + } + if (items[1].trim() === 'value') { + where_field = items[0].trim(); + break; + } + } + return where_field + }, + _isTreeView() { + return (this.parentField && this.selfField) + }, + _updateSelected() { + var dl = this.dataList + var sl = this.selected + let textField = this.map.text + let valueField = this.map.value + for (var i = 0; i < sl.length; i++) { + var value = sl[i].value + var dl2 = dl[i] + for (var j = 0; j < dl2.length; j++) { + var item2 = dl2[j] + if (item2[valueField] === value) { + sl[i].text = item2[textField] + break + } + } + } + }, + _updateBindData(node) { + const { + dataList, + hasNodes + } = this._filterData(this._treeData, this.selected) + + let isleaf = this._stepSearh === false && !hasNodes + + if (node) { + node.isleaf = isleaf + } + + this.dataList = dataList + this.selectedIndex = dataList.length - 1 + + if (!isleaf && this.selected.length < dataList.length) { + this.selected.push({ + value: null, + text: "请选择" + }) + } + + return { + isleaf, + hasNodes + } + }, + _filterData(data, paths) { + let dataList = [] + let hasNodes = true + + dataList.push(data.filter((item) => { + return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '') + })) + for (let i = 0; i < paths.length; i++) { + var value = paths[i].value + var nodes = data.filter((item) => { + return item.parent_value === value + }) + + if (nodes.length) { + dataList.push(nodes) + } else { + hasNodes = false + } + } + + return { + dataList, + hasNodes + } + }, + _extractTree(nodes, result, parent_value) { + let list = result || [] + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + if (parent_value !== null && parent_value !== undefined && parent_value !== '') { + child.parent_value = parent_value + } + result.push(child) + + let children = node.children + if (children) { + this._extractTree(children, result, node[valueField]) + } + } + }, + _extractTreePath(nodes, result) { + let list = result || [] + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + result.push(child) + + let children = node.children + if (children) { + this._extractTreePath(children, result) + } + } + }, + _findNodePath(key, nodes, path = []) { + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + let children = node.children + let text = node[textField] + let value = node[valueField] + + path.push({ + value, + text + }) + + if (value === key) { + return path + } + + if (children) { + const p = this._findNodePath(key, children, path) + if (p.length) { + return p + } + } + + path.pop() + } + return [] + }, + _processLocalData() { + this._treeData = [] + this._extractTree(this.localdata, this._treeData) + + var inputValue = this.dataValue + if (inputValue === undefined) { + return + } + + if (Array.isArray(inputValue)) { + inputValue = inputValue[inputValue.length - 1] + if (typeof inputValue === 'object' && inputValue[this.map.value]) { + inputValue = inputValue[this.map.value] + } + } + + this.selected = this._findNodePath(inputValue, this.localdata) + } + } +} diff --git a/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue new file mode 100644 index 0000000..065aac2 --- /dev/null +++ b/src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue @@ -0,0 +1,333 @@ + + + + diff --git a/src/uni_modules/uni-data-picker/package.json b/src/uni_modules/uni-data-picker/package.json new file mode 100644 index 0000000..9900380 --- /dev/null +++ b/src/uni_modules/uni-data-picker/package.json @@ -0,0 +1,93 @@ +{ + "id": "uni-data-picker", + "displayName": "uni-data-picker 数据驱动的picker选择器", + "version": "1.0.7", + "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景", + "keywords": [ + "uni-ui", + "uniui", + "picker", + "级联", + "省市区", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-load-more", + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-data-picker/readme.md b/src/uni_modules/uni-data-picker/readme.md new file mode 100644 index 0000000..6cda224 --- /dev/null +++ b/src/uni_modules/uni-data-picker/readme.md @@ -0,0 +1,22 @@ +## DataPicker 级联选择 +> **组件名:uni-data-picker** +> 代码块: `uDataPicker` +> 关联组件:`uni-data-pickerview`、`uni-load-more`。 + + +`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。 + +支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。 + +候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。 + +`` 组件尤其适用于地址选择、分类选择等选择类。 + +`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。 + +`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。 + +在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-data-select/changelog.md b/src/uni_modules/uni-data-select/changelog.md new file mode 100644 index 0000000..d5beaa3 --- /dev/null +++ b/src/uni_modules/uni-data-select/changelog.md @@ -0,0 +1,16 @@ +## 0.1.6(2022-07-06) +- 修复 pc端宽度异常的bug +## 0.1.5 +- 修复 pc端宽度异常的bug +## 0.1.4(2022-07-05) +- 优化 显示样式 +## 0.1.3(2022-06-02) +- 修复 localdata 赋值不生效的 bug +- 新增 支持 uni.scss 修改颜色 +- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +## 0.1.2(2022-05-08) +- 修复 当 value 为 0 时选择不生效的 bug +## 0.1.1(2022-05-07) +- 新增 记住上次的选项(仅 collection 存在时有效) +## 0.1.0(2022-04-22) +- 初始化 diff --git a/src/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/src/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue new file mode 100644 index 0000000..16995bd --- /dev/null +++ b/src/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue @@ -0,0 +1,426 @@ + + + + + diff --git a/src/uni_modules/uni-data-select/package.json b/src/uni_modules/uni-data-select/package.json new file mode 100644 index 0000000..1ebd8dd --- /dev/null +++ b/src/uni_modules/uni-data-select/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-data-select", + "displayName": "uni-data-select 下拉框选择器", + "version": "0.1.6", + "description": "通过数据驱动的下拉框选择器", + "keywords": [ + "uni-ui", + "select", + "uni-data-select", + "下拉框", + "下拉选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-load-more"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "n" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-data-select/readme.md b/src/uni_modules/uni-data-select/readme.md new file mode 100644 index 0000000..eb58de3 --- /dev/null +++ b/src/uni_modules/uni-data-select/readme.md @@ -0,0 +1,8 @@ +## DataSelect 下拉框选择器 +> **组件名:uni-data-select** +> 代码块: `uDataSelect` + +当选项过多时,使用下拉菜单展示并选择内容 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-dateformat/changelog.md b/src/uni_modules/uni-dateformat/changelog.md new file mode 100644 index 0000000..d551d7b --- /dev/null +++ b/src/uni_modules/uni-dateformat/changelog.md @@ -0,0 +1,10 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +## 0.0.5(2021-07-08) +- 调整 默认时间不再是当前时间,而是显示'-'字符 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 +- 修复 iOS 平台日期格式化出错的问题 diff --git a/src/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/src/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js new file mode 100644 index 0000000..e00d559 --- /dev/null +++ b/src/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js @@ -0,0 +1,200 @@ +// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型 +function pad(str, length = 2) { + str += '' + while (str.length < length) { + str = '0' + str + } + return str.slice(-length) +} + +const parser = { + yyyy: (dateObj) => { + return pad(dateObj.year, 4) + }, + yy: (dateObj) => { + return pad(dateObj.year) + }, + MM: (dateObj) => { + return pad(dateObj.month) + }, + M: (dateObj) => { + return dateObj.month + }, + dd: (dateObj) => { + return pad(dateObj.day) + }, + d: (dateObj) => { + return dateObj.day + }, + hh: (dateObj) => { + return pad(dateObj.hour) + }, + h: (dateObj) => { + return dateObj.hour + }, + mm: (dateObj) => { + return pad(dateObj.minute) + }, + m: (dateObj) => { + return dateObj.minute + }, + ss: (dateObj) => { + return pad(dateObj.second) + }, + s: (dateObj) => { + return dateObj.second + }, + SSS: (dateObj) => { + return pad(dateObj.millisecond, 3) + }, + S: (dateObj) => { + return dateObj.millisecond + }, +} + +// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12 +function getDate(time) { + if (time instanceof Date) { + return time + } + switch (typeof time) { + case 'string': + { + // 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000 + if (time.indexOf('T') > -1) { + return new Date(time) + } + return new Date(time.replace(/-/g, '/')) + } + default: + return new Date(time) + } +} + +export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') { + if (!date && date !== 0) { + return '' + } + date = getDate(date) + const dateObj = { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + millisecond: date.getMilliseconds() + } + const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/ + let flag = true + let result = format + while (flag) { + flag = false + result = result.replace(tokenRegExp, function(matched) { + flag = true + return parser[matched](dateObj) + }) + } + return result +} + +export function friendlyDate(time, { + locale = 'zh', + threshold = [60000, 3600000], + format = 'yyyy/MM/dd hh:mm:ss' +}) { + if (time === '-') { + return time + } + if (!time && time !== 0) { + return '' + } + const localeText = { + zh: { + year: '年', + month: '月', + day: '天', + hour: '小时', + minute: '分钟', + second: '秒', + ago: '前', + later: '后', + justNow: '刚刚', + soon: '马上', + template: '{num}{unit}{suffix}' + }, + en: { + year: 'year', + month: 'month', + day: 'day', + hour: 'hour', + minute: 'minute', + second: 'second', + ago: 'ago', + later: 'later', + justNow: 'just now', + soon: 'soon', + template: '{num} {unit} {suffix}' + } + } + const text = localeText[locale] || localeText.zh + let date = getDate(time) + let ms = date.getTime() - Date.now() + let absMs = Math.abs(ms) + if (absMs < threshold[0]) { + return ms < 0 ? text.justNow : text.soon + } + if (absMs >= threshold[1]) { + return formatDate(date, format) + } + let num + let unit + let suffix = text.later + if (ms < 0) { + suffix = text.ago + ms = -ms + } + const seconds = Math.floor((ms) / 1000) + const minutes = Math.floor(seconds / 60) + const hours = Math.floor(minutes / 60) + const days = Math.floor(hours / 24) + const months = Math.floor(days / 30) + const years = Math.floor(months / 12) + switch (true) { + case years > 0: + num = years + unit = text.year + break + case months > 0: + num = months + unit = text.month + break + case days > 0: + num = days + unit = text.day + break + case hours > 0: + num = hours + unit = text.hour + break + case minutes > 0: + num = minutes + unit = text.minute + break + default: + num = seconds + unit = text.second + break + } + + if (locale === 'en') { + if (num === 1) { + num = 'a' + } else { + unit += 's' + } + } + + return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g, + suffix) +} diff --git a/src/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue b/src/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue new file mode 100644 index 0000000..c5ed030 --- /dev/null +++ b/src/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/uni_modules/uni-dateformat/package.json b/src/uni_modules/uni-dateformat/package.json new file mode 100644 index 0000000..786a670 --- /dev/null +++ b/src/uni_modules/uni-dateformat/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-dateformat", + "displayName": "uni-dateformat 日期格式化", + "version": "1.0.0", + "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式", + "keywords": [ + "uni-ui", + "uniui", + "日期格式化", + "时间格式化", + "格式化时间", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-dateformat/readme.md b/src/uni_modules/uni-dateformat/readme.md new file mode 100644 index 0000000..37ddb6e --- /dev/null +++ b/src/uni_modules/uni-dateformat/readme.md @@ -0,0 +1,11 @@ + + +### DateFormat 日期格式化 +> **组件名:uni-dateformat** +> 代码块: `uDateformat` + + +日期格式化组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/changelog.md b/src/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..5c9735a --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,93 @@ +## 2.2.6(2022-06-30) +- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +## 2.2.5(2022-06-24) +- 修复 日历顶部年月及底部确认未国际化 bug +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的 bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的 bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的 bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的 bug +- 修复 单选赋默认值时,赋值日期未高亮的 bug +- 修复 赋默认值时,移动端未正确显示时间的 bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的 bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的 bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的 bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的 bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的 bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的 bug +- 修复 start 和 end 不能动态赋值的 bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的 bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的 bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的 bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的 bug +- 修复 chang事件触发2次的 bug +- 修复 分、秒 end 范围错误的 bug +- 优化 更好的 nvue 适配 diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..3d2dbea --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..8f7f181 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,907 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..9acf1ab --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select datetime", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "确认" +} \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "確認" +} \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js new file mode 100644 index 0000000..9601aba --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif \ No newline at end of file diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..699aa63 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,927 @@ + + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..9bdf8bc --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1012 @@ + + + + diff --git a/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..efa5773 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,410 @@ +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + // multipleStatus + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + // this.multipleStatus = multipleStatus + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), + month: full.month, + disable: !(disableBefore && disableAfter), + isDay, + userChecked: false + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDay, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = this.dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDay) + } + + isLogicAfter(currentDay, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = this.dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDay) + } + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this._getWeek(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (this.lastHover) return + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this._getWeek(fullDate) + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (this.dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this._getWeek(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this._getWeek(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/src/uni_modules/uni-datetime-picker/package.json b/src/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..60fa1d0 --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.6", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-datetime-picker/readme.md b/src/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/src/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-drawer/changelog.md b/src/uni_modules/uni-drawer/changelog.md new file mode 100644 index 0000000..6d2488c --- /dev/null +++ b/src/uni_modules/uni-drawer/changelog.md @@ -0,0 +1,13 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-drawer](https://uniapp.dcloud.io/component/uniui/uni-drawer) +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-drawer/components/uni-drawer/keypress.js b/src/uni_modules/uni-drawer/components/uni-drawer/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/src/uni_modules/uni-drawer/components/uni-drawer/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue b/src/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue new file mode 100644 index 0000000..2471521 --- /dev/null +++ b/src/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/uni_modules/uni-drawer/package.json b/src/uni_modules/uni-drawer/package.json new file mode 100644 index 0000000..dd056e4 --- /dev/null +++ b/src/uni_modules/uni-drawer/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-drawer", + "displayName": "uni-drawer 抽屉", + "version": "1.2.1", + "description": "抽屉式导航,用于展示侧滑菜单,侧滑导航。", + "keywords": [ + "uni-ui", + "uniui", + "drawer", + "抽屉", + "侧滑导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-drawer/readme.md b/src/uni_modules/uni-drawer/readme.md new file mode 100644 index 0000000..dcf6e6b --- /dev/null +++ b/src/uni_modules/uni-drawer/readme.md @@ -0,0 +1,10 @@ + + +## Drawer 抽屉 +> **组件名:uni-drawer** +> 代码块: `uDrawer` + +抽屉侧滑菜单。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-drawer) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-easyinput/changelog.md b/src/uni_modules/uni-easyinput/changelog.md new file mode 100644 index 0000000..1e8c6f9 --- /dev/null +++ b/src/uni_modules/uni-easyinput/changelog.md @@ -0,0 +1,47 @@ +## 1.1.0(2022-06-30) +- 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容 +- 新增 clear 事件,点击右侧叉号图标触发 +- 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发 +- 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等 +- +## 1.0.5(2022-06-07) +- 优化 clearable 显示策略 +## 1.0.4(2022-06-07) +- 优化 clearable 显示策略 +## 1.0.3(2022-05-20) +- 修复 关闭图标某些情况下无法取消的bug +## 1.0.2(2022-04-12) +- 修复 默认值不生效的bug +## 1.0.1(2022-04-02) +- 修复 value不能为0的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-easyinput](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +## 0.1.4(2021-08-20) +- 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +## 0.1.3(2021-08-11) +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +## 0.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 0.1.1 +- 优化 errorMessage 属性支持 Boolean 类型 +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.16(2021-06-29) +- 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug +## 0.0.15(2021-06-21) +- 修复 passwordIcon 属性拼写错误的 bug +## 0.0.14(2021-06-18) +- 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标 +- 修复 confirmType 属性不生效的问题 +## 0.0.13(2021-06-04) +- 修复 disabled 状态可清出内容的 bug +## 0.0.12(2021-05-12) +- 新增 组件示例地址 +## 0.0.11(2021-05-07) +- 修复 input-border 属性不生效的问题 +## 0.0.10(2021-04-30) +- 修复 ios 遮挡文字、显示一半的问题 +## 0.0.9(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/src/uni_modules/uni-easyinput/components/uni-easyinput/common.js b/src/uni_modules/uni-easyinput/components/uni-easyinput/common.js new file mode 100644 index 0000000..df9abe1 --- /dev/null +++ b/src/uni_modules/uni-easyinput/components/uni-easyinput/common.js @@ -0,0 +1,56 @@ +/** + * @desc 函数防抖 + * @param func 目标函数 + * @param wait 延迟执行毫秒数 + * @param immediate true - 立即执行, false - 延迟执行 + */ +export const debounce = function(func, wait = 1000, immediate = true) { + let timer; + console.log(1); + return function() { + console.log(123); + let context = this, + args = arguments; + if (timer) clearTimeout(timer); + if (immediate) { + let callNow = !timer; + timer = setTimeout(() => { + timer = null; + }, wait); + if (callNow) func.apply(context, args); + } else { + timer = setTimeout(() => { + func.apply(context, args); + }, wait) + } + } +} +/** + * @desc 函数节流 + * @param func 函数 + * @param wait 延迟执行毫秒数 + * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发 + */ +export const throttle = (func, wait = 1000, type = 1) => { + let previous = 0; + let timeout; + return function() { + let context = this; + let args = arguments; + if (type === 1) { + let now = Date.now(); + + if (now - previous > wait) { + func.apply(context, args); + previous = now; + } + } else if (type === 2) { + if (!timeout) { + timeout = setTimeout(() => { + timeout = null; + func.apply(context, args) + }, wait) + } + } + } +} diff --git a/src/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue b/src/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue new file mode 100644 index 0000000..5818d7f --- /dev/null +++ b/src/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue @@ -0,0 +1,593 @@ + + + + + diff --git a/src/uni_modules/uni-easyinput/package.json b/src/uni_modules/uni-easyinput/package.json new file mode 100644 index 0000000..3cc793e --- /dev/null +++ b/src/uni_modules/uni-easyinput/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-easyinput", + "displayName": "uni-easyinput 增强输入框", + "version": "1.1.0", + "description": "Easyinput 组件是对原生input组件的增强", + "keywords": [ + "uni-ui", + "uniui", + "input", + "uni-easyinput", + "输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-easyinput/readme.md b/src/uni_modules/uni-easyinput/readme.md new file mode 100644 index 0000000..f1faf8f --- /dev/null +++ b/src/uni_modules/uni-easyinput/readme.md @@ -0,0 +1,11 @@ + + +### Easyinput 增强输入框 +> **组件名:uni-easyinput** +> 代码块: `uEasyinput` + + +easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-fab/changelog.md b/src/uni_modules/uni-fab/changelog.md new file mode 100644 index 0000000..24e26b1 --- /dev/null +++ b/src/uni_modules/uni-fab/changelog.md @@ -0,0 +1,17 @@ +## 1.2.2(2021-12-29) +- 更新 组件依赖 +## 1.2.1(2021-11-19) +- 修复 阴影颜色不正确的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fab](https://uniapp.dcloud.io/component/uniui/uni-fab) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 按钮背景色调整 +- 优化 兼容pc端 diff --git a/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..bef97f1 --- /dev/null +++ b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue @@ -0,0 +1,475 @@ + + + + + diff --git a/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue.bak b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue.bak new file mode 100644 index 0000000..5adc72a --- /dev/null +++ b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue.bak @@ -0,0 +1,379 @@ + + + + + diff --git a/src/uni_modules/uni-fab/package.json b/src/uni_modules/uni-fab/package.json new file mode 100644 index 0000000..0f27daa --- /dev/null +++ b/src/uni_modules/uni-fab/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-fab", + "displayName": "uni-fab 悬浮按钮", + "version": "1.2.2", + "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。", + "keywords": [ + "uni-ui", + "uniui", + "按钮", + "悬浮按钮", + "fab" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-fab/readme.md b/src/uni_modules/uni-fab/readme.md new file mode 100644 index 0000000..9a444e8 --- /dev/null +++ b/src/uni_modules/uni-fab/readme.md @@ -0,0 +1,9 @@ +## Fab 悬浮按钮 +> **组件名:uni-fab** +> 代码块: `uFab` + + +点击可展开一个图形按钮菜单 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-fav/changelog.md b/src/uni_modules/uni-fav/changelog.md new file mode 100644 index 0000000..d8a08d4 --- /dev/null +++ b/src/uni_modules/uni-fav/changelog.md @@ -0,0 +1,19 @@ +## 1.2.1(2022-05-30) +- 新增 stat 属性 ,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fav](https://uniapp.dcloud.io/component/uniui/uni-fav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 组件示例地址 +## 1.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.3(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json new file mode 100644 index 0000000..9a0759e --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "collect", + "uni-fav.collected": "collected" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js b/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue b/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue new file mode 100644 index 0000000..d2c58df --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/uni_modules/uni-fav/package.json b/src/uni_modules/uni-fav/package.json new file mode 100644 index 0000000..cc14697 --- /dev/null +++ b/src/uni_modules/uni-fav/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-fav", + "displayName": "uni-fav 收藏按钮", + "version": "1.2.1", + "description": " Fav 收藏组件,可自定义颜色、大小。", + "keywords": [ + "fav", + "uni-ui", + "uniui", + "收藏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-fav/readme.md b/src/uni_modules/uni-fav/readme.md new file mode 100644 index 0000000..4de125d --- /dev/null +++ b/src/uni_modules/uni-fav/readme.md @@ -0,0 +1,10 @@ + + +## Fav 收藏按钮 +> **组件名:uni-fav** +> 代码块: `uFav` + +用于收藏功能,可点击切换选中、不选中的状态。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-file-picker/changelog.md b/src/uni_modules/uni-file-picker/changelog.md new file mode 100644 index 0000000..5c81026 --- /dev/null +++ b/src/uni_modules/uni-file-picker/changelog.md @@ -0,0 +1,63 @@ +## 1.0.2(2022-07-04) +- 修复 在uni-forms下样式不生效的bug +## 1.0.1(2021-11-23) +- 修复 参数为对象的情况下,url在某些情况显示错误的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +## 0.2.16(2021-11-08) +- 修复 传入空对象 ,显示错误的Bug +## 0.2.15(2021-08-30) +- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug +## 0.2.14(2021-08-23) +- 新增 参数中返回 fileID 字段 +## 0.2.13(2021-08-23) +- 修复 腾讯云传入fileID 不能回显的bug +- 修复 选择图片后,不能放大的问题 +## 0.2.12(2021-08-17) +- 修复 由于 0.2.11 版本引起的不能回显图片的Bug +## 0.2.11(2021-08-16) +- 新增 clearFiles(index) 方法,可以手动删除指定文件 +- 修复 v-model 值设为 null 报错的Bug +## 0.2.10(2021-08-13) +- 修复 return-type="object" 时,无法删除文件的Bug +## 0.2.9(2021-08-03) +- 修复 auto-upload 属性失效的Bug +## 0.2.8(2021-07-31) +- 修复 fileExtname属性不指定值报错的Bug +## 0.2.7(2021-07-31) +- 修复 在某种场景下图片不回显的Bug +## 0.2.6(2021-07-30) +- 修复 return-type为object下,返回值不正确的Bug +## 0.2.5(2021-07-30) +- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +## 0.2.3(2021-07-28) +- 优化 调整示例代码 +## 0.2.2(2021-07-27) +- 修复 vue3 下赋值错误的Bug +- 优化 h5平台下上传文件导致页面卡死的问题 +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.1(2021-07-02) +- 修复 sourceType 缺少默认值导致 ios 无法选择文件 +## 0.1.0(2021-06-30) +- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +## 0.0.11(2021-06-30) +- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +## 0.0.10(2021-06-29) +- 优化 文件上传后进度条消失时机 +## 0.0.9(2021-06-29) +- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +## 0.0.8(2021-06-15) +- 修复 删除文件时无法触发 v-model 的Bug +## 0.0.7(2021-05-12) +- 新增 组件示例地址 +## 0.0.6(2021-04-09) +- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug +## 0.0.5(2021-04-09) +- 优化 更新组件示例 +## 0.0.4(2021-04-09) +- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js new file mode 100644 index 0000000..24a07f5 --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js @@ -0,0 +1,224 @@ +'use strict'; + +const ERR_MSG_OK = 'chooseAndUploadFile:ok'; +const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; + +function chooseImage(opts) { + const { + count, + sizeType = ['original', 'compressed'], + sourceType = ['album', 'camera'], + extension + } = opts + return new Promise((resolve, reject) => { + uni.chooseImage({ + count, + sizeType, + sourceType, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseVideo(opts) { + const { + camera, + compressed, + maxDuration, + sourceType = ['album', 'camera'], + extension + } = opts; + return new Promise((resolve, reject) => { + uni.chooseVideo({ + camera, + compressed, + maxDuration, + sourceType, + extension, + success(res) { + const { + tempFilePath, + duration, + size, + height, + width + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFilePaths: [tempFilePath], + tempFiles: [ + { + name: (res.tempFile && res.tempFile.name) || '', + path: tempFilePath, + size, + type: (res.tempFile && res.tempFile.type) || '', + width, + height, + duration, + fileType: 'video', + cloudPath: '', + }, ], + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseAll(opts) { + const { + count, + extension + } = opts; + return new Promise((resolve, reject) => { + let chooseFile = uni.chooseFile; + if (typeof wx !== 'undefined' && + typeof wx.chooseMessageFile === 'function') { + chooseFile = wx.chooseMessageFile; + } + if (typeof chooseFile !== 'function') { + return reject({ + errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', + }); + } + chooseFile({ + type: 'all', + count, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res)); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function normalizeChooseAndUploadFileRes(res, fileType) { + res.tempFiles.forEach((item, index) => { + if (!item.name) { + item.name = item.path.substring(item.path.lastIndexOf('/') + 1); + } + if (fileType) { + item.fileType = fileType; + } + item.cloudPath = + Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); + }); + if (!res.tempFilePaths) { + res.tempFilePaths = res.tempFiles.map((file) => file.path); + } + return res; +} + +function uploadCloudFiles(files, max = 5, onUploadProgress) { + files = JSON.parse(JSON.stringify(files)) + const len = files.length + let count = 0 + let self = this + return new Promise(resolve => { + while (count < max) { + next() + } + + function next() { + let cur = count++ + if (cur >= len) { + !files.find(item => !item.url && !item.errMsg) && resolve(files) + return + } + const fileItem = files[cur] + const index = self.files.findIndex(v => v.uuid === fileItem.uuid) + fileItem.url = '' + delete fileItem.errMsg + + uniCloud + .uploadFile({ + filePath: fileItem.path, + cloudPath: fileItem.cloudPath, + fileType: fileItem.fileType, + onUploadProgress: res => { + res.index = index + onUploadProgress && onUploadProgress(res) + } + }) + .then(res => { + fileItem.url = res.fileID + fileItem.index = index + if (cur < len) { + next() + } + }) + .catch(res => { + fileItem.errMsg = res.errMsg || res.message + fileItem.index = index + if (cur < len) { + next() + } + }) + } + }) +} + + + + + +function uploadFiles(choosePromise, { + onChooseFile, + onUploadProgress +}) { + return choosePromise + .then((res) => { + if (onChooseFile) { + const customChooseRes = onChooseFile(res); + if (typeof customChooseRes !== 'undefined') { + return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? + res : chooseRes); + } + } + return res; + }) + .then((res) => { + if (res === false) { + return { + errMsg: ERR_MSG_OK, + tempFilePaths: [], + tempFiles: [], + }; + } + return res + }) +} + +function chooseAndUploadFile(opts = { + type: 'all' +}) { + if (opts.type === 'image') { + return uploadFiles(chooseImage(opts), opts); + } + else if (opts.type === 'video') { + return uploadFiles(chooseVideo(opts), opts); + } + return uploadFiles(chooseAll(opts), opts); +} + +export { + chooseAndUploadFile, + uploadCloudFiles +}; diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue new file mode 100644 index 0000000..0928a41 --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue @@ -0,0 +1,656 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue new file mode 100644 index 0000000..625d92e --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue new file mode 100644 index 0000000..2a29bc2 --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js new file mode 100644 index 0000000..60aaa3e --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -0,0 +1,109 @@ +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/src/uni_modules/uni-file-picker/package.json b/src/uni_modules/uni-file-picker/package.json new file mode 100644 index 0000000..08bd66e --- /dev/null +++ b/src/uni_modules/uni-file-picker/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.2", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-file-picker/readme.md b/src/uni_modules/uni-file-picker/readme.md new file mode 100644 index 0000000..c8399a5 --- /dev/null +++ b/src/uni_modules/uni-file-picker/readme.md @@ -0,0 +1,11 @@ + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-forms/changelog.md b/src/uni_modules/uni-forms/changelog.md new file mode 100644 index 0000000..5a4bb79 --- /dev/null +++ b/src/uni_modules/uni-forms/changelog.md @@ -0,0 +1,86 @@ +## 1.4.6(2022-07-13) +- 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug +## 1.4.5(2022-07-05) +- 新增 更多表单示例 +- 优化 子表单组件过期提示的问题 +- 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 +## 1.4.4(2022-07-04) +- 更新 删除组件日志 +## 1.4.3(2022-07-04) +- 修复 由 1.4.0 引发的 label 插槽不生效的bug +## 1.4.2(2022-07-04) +- 修复 子组件找不到 setValue 报错的bug +## 1.4.1(2022-07-04) +- 修复 uni-data-picker 在 uni-forms-item 中报错的bug +- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +## 1.4.0(2022-06-30) +- 【重要】组件逻辑重构,部分用法用旧版本不兼容,请注意兼容问题 +- 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 +- 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 +- 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 +- 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 +- 新增 子表单的 setRules 方法,配合自定义校验函数使用 +- 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 +- 优化 动态表单校验方式,废弃拼接name的方式 +## 1.3.3(2022-06-22) +- 修复 表单校验顺序无序问题 +## 1.3.2(2021-12-09) +- +## 1.3.1(2021-11-19) +- 修复 label 插槽不生效的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-forms](https://uniapp.dcloud.io/component/uniui/uni-forms) +## 1.2.7(2021-08-13) +- 修复 没有添加校验规则的字段依然报错的Bug +## 1.2.6(2021-08-11) +- 修复 重置表单错误信息无法清除的问题 +## 1.2.5(2021-08-11) +- 优化 组件文档 +## 1.2.4(2021-08-11) +- 修复 表单验证只生效一次的问题 +## 1.2.3(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.2(2021-07-26) +- 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- 修复 1.2.1 引起的示例在小程序平台报错的Bug +## 1.2.1(2021-07-22) +- 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- 修复 不指定name属性时,运行报错的Bug +- 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- 优化 组件示例,新增动态校验示例代码 +- 优化 组件文档,使用方式更清晰 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-06-25) +- 修复 pattern 属性在微信小程序平台无效的问题 +## 1.1.1(2021-06-22) +- 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +## 1.1.0(2021-06-22) +- 修复 只写setRules方法而导致校验不生效的Bug +- 修复 由上个办法引发的错误提示文字错位的Bug +## 1.0.48(2021-06-21) +- 修复 不设置 label 属性 ,无法设置label插槽的问题 +## 1.0.47(2021-06-21) +- 修复 不设置label属性,label-width属性不生效的bug +- 修复 setRules 方法与rules属性冲突的问题 +## 1.0.46(2021-06-04) +- 修复 动态删减数据导致报错的问题 +## 1.0.45(2021-06-04) +- 新增 modelValue 属性 ,value 即将废弃 +## 1.0.44(2021-06-02) +- 新增 uni-forms-item 可以设置单独的 rules +- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- 优化 submit 事件重命名为 validate +## 1.0.43(2021-05-12) +- 新增 组件示例地址 +## 1.0.42(2021-04-30) +- 修复 自定义检验器失效的问题 +## 1.0.41(2021-03-05) +- 更新 校验器 +- 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug +## 1.0.40(2021-03-04) +- 修复 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +## 1.0.39(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 校验器传入 int 等类型 ,返回String类型的Bug diff --git a/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue b/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue new file mode 100644 index 0000000..250ed87 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue @@ -0,0 +1,627 @@ + + + + + diff --git a/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue new file mode 100644 index 0000000..ed2f6d9 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue @@ -0,0 +1,397 @@ + + + + + diff --git a/src/uni_modules/uni-forms/components/uni-forms/utils.js b/src/uni_modules/uni-forms/components/uni-forms/utils.js new file mode 100644 index 0000000..6da2421 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/utils.js @@ -0,0 +1,293 @@ +/** + * 简单处理对象拷贝 + * @param {Obejct} 被拷贝对象 + * @@return {Object} 拷贝对象 + */ +export const deepCopy = (val) => { + return JSON.parse(JSON.stringify(val)) +} +/** + * 过滤数字类型 + * @param {String} format 数字类型 + * @@return {Boolean} 返回是否为数字类型 + */ +export const typeFilter = (format) => { + return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp'; +} + +/** + * 把 value 转换成指定的类型,用于处理初始值,原因是初始值需要入库不能为 undefined + * @param {String} key 字段名 + * @param {any} value 字段值 + * @param {Object} rules 表单校验规则 + */ +export const getValue = (key, value, rules) => { + const isRuleNumType = rules.find(val => val.format && typeFilter(val.format)); + const isRuleBoolType = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool'); + // 输入类型为 number + if (!!isRuleNumType) { + if (!value && value !== 0) { + value = null + } else { + value = isNumber(Number(value)) ? Number(value) : value + } + } + + // 输入类型为 boolean + if (!!isRuleBoolType) { + value = isBoolean(value) ? value : false + } + + return value; +} + +/** + * 获取表单数据 + * @param {String|Array} name 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + * @param {any} value 需要设置的值 + */ +export const setDataValue = (field, formdata, value) => { + formdata[field] = value + return value || '' +} + +/** + * 获取表单数据 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + */ +export const getDataValue = (field, data) => { + return objGet(data, field) +} + +/** + * 获取表单类型 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + */ +export const getDataValueType = (field, data) => { + const value = getDataValue(field, data) + return { + type: type(value), + value + } +} + +/** + * 获取表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const realName = (name, data = {}) => { + const base_name = _basePath(name) + if (typeof base_name === 'object' && Array.isArray(base_name) && base_name.length > 1) { + const realname = base_name.reduce((a, b) => a += `#${b}`, '_formdata_') + return realname + } + return base_name[0] || name +} + +/** + * 判断是否表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const isRealName = (name) => { + const reg = /^_formdata_#*/ + return reg.test(name) +} + +/** + * 获取表单数据的原始格式 + * @@return {Object|Array} object 需要解析的数据 + */ +export const rawData = (object = {}, name) => { + let newData = JSON.parse(JSON.stringify(object)) + let formData = {} + for(let i in newData){ + let path = name2arr(i) + objSet(formData,path,newData[i]) + } + return formData +} + +/** + * 真实name还原为 array + * @param {*} name + */ +export const name2arr = (name) => { + let field = name.replace('_formdata_#', '') + field = field.split('#').map(v => (isNumber(v) ? Number(v) : v)) + return field +} + +/** + * 对象中设置值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} value 需要设置的值 + */ +export const objSet = (object, path, value) => { + if (typeof object !== 'object') return object; + _basePath(path).reduce((o, k, i, _) => { + if (i === _.length - 1) { + // 若遍历结束直接赋值 + o[k] = value + return null + } else if (k in o) { + // 若存在对应路径,则返回找到的对象,进行下一次遍历 + return o[k] + } else { + // 若不存在对应路径,则创建对应对象,若下一路径是数字,新对象赋值为空数组,否则赋值为空对象 + o[k] = /^[0-9]{1,}$/.test(_[i + 1]) ? [] : {} + return o[k] + } + }, object) + // 返回object + return object; +} + +// 处理 path, path有三种形式:'a[0].b.c'、'a.0.b.c' 和 ['a','0','b','c'],需要统一处理成数组,便于后续使用 +function _basePath(path) { + // 若是数组,则直接返回 + if (Array.isArray(path)) return path + // 若有 '[',']',则替换成将 '[' 替换成 '.',去掉 ']' + return path.replace(/\[/g, '.').replace(/\]/g, '').split('.') +} + +/** + * 从对象中获取值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} defaultVal 如果无法从调用链中获取值的默认值 + */ +export const objGet = (object, path, defaultVal = 'undefined') => { + // 先将path处理成统一格式 + let newPath = _basePath(path) + // 递归处理,返回最后结果 + let val = newPath.reduce((o, k) => { + return (o || {})[k] + }, object); + return !val || val !== undefined ? val : defaultVal +} + + +/** + * 是否为 number 类型 + * @param {any} num 需要判断的值 + * @return {Boolean} 是否为 number + */ +export const isNumber = (num) => { + return !isNaN(Number(num)) +} + +/** + * 是否为 boolean 类型 + * @param {any} bool 需要判断的值 + * @return {Boolean} 是否为 boolean + */ +export const isBoolean = (bool) => { + return (typeof bool === 'boolean') +} +/** + * 是否有必填字段 + * @param {Object} rules 规则 + * @return {Boolean} 是否有必填字段 + */ +export const isRequiredField = (rules) => { + let isNoField = false; + for (let i = 0; i < rules.length; i++) { + const ruleData = rules[i]; + if (ruleData.required) { + isNoField = true; + break; + } + } + return isNoField; +} + + +/** + * 获取数据类型 + * @param {Any} obj 需要获取数据类型的值 + */ +export const type = (obj) => { + var class2type = {}; + + // 生成class2type映射 + "Boolean Number String Function Array Date RegExp Object Error".split(" ").map(function(item, index) { + class2type["[object " + item + "]"] = item.toLowerCase(); + }) + if (obj == null) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[Object.prototype.toString.call(obj)] || "object" : + typeof obj; +} + +/** + * 判断两个值是否相等 + * @param {any} a 值 + * @param {any} b 值 + * @return {Boolean} 是否相等 + */ +export const isEqual = (a, b) => { + //如果a和b本来就全等 + if (a === b) { + //判断是否为0和-0 + return a !== 0 || 1 / a === 1 / b; + } + //判断是否为null和undefined + if (a == null || b == null) { + return a === b; + } + //接下来判断a和b的数据类型 + var classNameA = toString.call(a), + classNameB = toString.call(b); + //如果数据类型不相等,则返回false + if (classNameA !== classNameB) { + return false; + } + //如果数据类型相等,再根据不同数据类型分别判断 + switch (classNameA) { + case '[object RegExp]': + case '[object String]': + //进行字符串转换比较 + return '' + a === '' + b; + case '[object Number]': + //进行数字转换比较,判断是否为NaN + if (+a !== +a) { + return +b !== +b; + } + //判断是否为0或-0 + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + return +a === +b; + } + //如果是对象类型 + if (classNameA == '[object Object]') { + //获取a和b的属性长度 + var propsA = Object.getOwnPropertyNames(a), + propsB = Object.getOwnPropertyNames(b); + if (propsA.length != propsB.length) { + return false; + } + for (var i = 0; i < propsA.length; i++) { + var propName = propsA[i]; + //如果对应属性对应值不相等,则返回false + if (a[propName] !== b[propName]) { + return false; + } + } + return true; + } + //如果是数组类型 + if (classNameA == '[object Array]') { + if (a.toString() == b.toString()) { + return true; + } + return false; + } +} diff --git a/src/uni_modules/uni-forms/components/uni-forms/validate.js b/src/uni_modules/uni-forms/components/uni-forms/validate.js new file mode 100644 index 0000000..69a70db --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/validate.js @@ -0,0 +1,486 @@ +var pattern = { + email: /^\S+?@\S+?\.\S+?$/, + idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, + url: new RegExp( + "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", + 'i') +}; + +const FORMAT_MAPPING = { + "int": 'integer', + "bool": 'boolean', + "double": 'number', + "long": 'number', + "password": 'string' + // "fileurls": 'array' +} + +function formatMessage(args, resources = '') { + var defaultMessage = ['label'] + defaultMessage.forEach((item) => { + if (args[item] === undefined) { + args[item] = '' + } + }) + + let str = resources + for (let key in args) { + let reg = new RegExp('{' + key + '}') + str = str.replace(reg, args[key]) + } + return str +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (typeof value === 'string' && !value) { + return true; + } + + if (Array.isArray(value) && !value.length) { + return true; + } + + if (type === 'object' && !Object.keys(value).length) { + return true; + } + + return false; +} + +const types = { + integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + string(value) { + return typeof value === 'string'; + }, + number(value) { + if (isNaN(value)) { + return false; + } + return typeof value === 'number'; + }, + "boolean": function(value) { + return typeof value === 'boolean'; + }, + "float": function(value) { + return types.number(value) && !types.integer(value); + }, + array(value) { + return Array.isArray(value); + }, + object(value) { + return typeof value === 'object' && !types.array(value); + }, + date(value) { + return value instanceof Date; + }, + timestamp(value) { + if (!this.integer(value) || Math.abs(value).toString().length > 16) { + return false + } + return true; + }, + file(value) { + return typeof value.url === 'string'; + }, + email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + pattern(reg, value) { + try { + return new RegExp(reg).test(value); + } catch (e) { + return false; + } + }, + method(value) { + return typeof value === 'function'; + }, + idcard(value) { + return typeof value === 'string' && !!value.match(pattern.idcard); + }, + 'url-https'(value) { + return this.url(value) && value.startsWith('https://'); + }, + 'url-scheme'(value) { + return value.startsWith('://'); + }, + 'url-web'(value) { + return false; + } +} + +class RuleValidator { + + constructor(message) { + this._message = message + } + + async validateRule(fieldKey, fieldValue, value, data, allData) { + var result = null + + let rules = fieldValue.rules + + let hasRequired = rules.findIndex((item) => { + return item.required + }) + if (hasRequired < 0) { + if (value === null || value === undefined) { + return result + } + if (typeof value === 'string' && !value.length) { + return result + } + } + + var message = this._message + + if (rules === undefined) { + return message['default'] + } + + for (var i = 0; i < rules.length; i++) { + let rule = rules[i] + let vt = this._getValidateType(rule) + + Object.assign(rule, { + label: fieldValue.label || `["${fieldKey}"]` + }) + + if (RuleValidatorHelper[vt]) { + result = RuleValidatorHelper[vt](rule, value, message) + if (result != null) { + break + } + } + + if (rule.validateExpr) { + let now = Date.now() + let resultExpr = rule.validateExpr(value, allData, now) + if (resultExpr === false) { + result = this._getMessage(rule, rule.errorMessage || this._message['default']) + break + } + } + + if (rule.validateFunction) { + result = await this.validateFunction(rule, value, data, allData, vt) + if (result !== null) { + break + } + } + } + + if (result !== null) { + result = message.TAG + result + } + + return result + } + + async validateFunction(rule, value, data, allData, vt) { + let result = null + try { + let callbackMessage = null + const res = await rule.validateFunction(rule, value, allData || data, (message) => { + callbackMessage = message + }) + if (callbackMessage || (typeof res === 'string' && res) || res === false) { + result = this._getMessage(rule, callbackMessage || res, vt) + } + } catch (e) { + result = this._getMessage(rule, e.message, vt) + } + return result + } + + _getMessage(rule, message, vt) { + return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']) + } + + _getValidateType(rule) { + var result = '' + if (rule.required) { + result = 'required' + } else if (rule.format) { + result = 'format' + } else if (rule.arrayType) { + result = 'arrayTypeFormat' + } else if (rule.range) { + result = 'range' + } else if (rule.maximum !== undefined || rule.minimum !== undefined) { + result = 'rangeNumber' + } else if (rule.maxLength !== undefined || rule.minLength !== undefined) { + result = 'rangeLength' + } else if (rule.pattern) { + result = 'pattern' + } else if (rule.validateFunction) { + result = 'validateFunction' + } + return result + } +} + +const RuleValidatorHelper = { + required(rule, value, message) { + if (rule.required && isEmptyValue(value, rule.format || typeof value)) { + return formatMessage(rule, rule.errorMessage || message.required); + } + + return null + }, + + range(rule, value, message) { + const { + range, + errorMessage + } = rule; + + let list = new Array(range.length); + for (let i = 0; i < range.length; i++) { + const item = range[i]; + if (types.object(item) && item.value !== undefined) { + list[i] = item.value; + } else { + list[i] = item; + } + } + + let result = false + if (Array.isArray(value)) { + result = (new Set(value.concat(list)).size === list.length); + } else { + if (list.indexOf(value) > -1) { + result = true; + } + } + + if (!result) { + return formatMessage(rule, errorMessage || message['enum']); + } + + return null + }, + + rangeNumber(rule, value, message) { + if (!types.number(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let { + minimum, + maximum, + exclusiveMinimum, + exclusiveMaximum + } = rule; + let min = exclusiveMinimum ? value <= minimum : value < minimum; + let max = exclusiveMaximum ? value >= maximum : value > maximum; + + if (minimum !== undefined && min) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ? + 'exclusiveMinimum' : 'minimum' + ]) + } else if (maximum !== undefined && max) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ? + 'exclusiveMaximum' : 'maximum' + ]) + } else if (minimum !== undefined && maximum !== undefined && (min || max)) { + return formatMessage(rule, rule.errorMessage || message['number'].range) + } + + return null + }, + + rangeLength(rule, value, message) { + if (!types.string(value) && !types.array(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let min = rule.minLength; + let max = rule.maxLength; + let val = value.length; + + if (min !== undefined && val < min) { + return formatMessage(rule, rule.errorMessage || message['length'].minLength) + } else if (max !== undefined && val > max) { + return formatMessage(rule, rule.errorMessage || message['length'].maxLength) + } else if (min !== undefined && max !== undefined && (val < min || val > max)) { + return formatMessage(rule, rule.errorMessage || message['length'].range) + } + + return null + }, + + pattern(rule, value, message) { + if (!types['pattern'](rule.pattern, value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + return null + }, + + format(rule, value, message) { + var customTypes = Object.keys(types); + var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType); + + if (customTypes.indexOf(format) > -1) { + if (!types[format](value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + } + + return null + }, + + arrayTypeFormat(rule, value, message) { + if (!Array.isArray(value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + + for (let i = 0; i < value.length; i++) { + const element = value[i]; + let formatResult = this.format(rule, element, message) + if (formatResult !== null) { + return formatResult + } + } + + return null + } +} + +class SchemaValidator extends RuleValidator { + + constructor(schema, options) { + super(SchemaValidator.message); + + this._schema = schema + this._options = options || null + } + + updateSchema(schema) { + this._schema = schema + } + + async validate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, false, allData) + } + return result.length ? result[0] : null + } + + async validateAll(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, true, allData) + } + return result + } + + async validateUpdate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidateUpdate(data, false, allData) + } + return result.length ? result[0] : null + } + + async invokeValidate(data, all, allData) { + let result = [] + let schema = this._schema + for (let key in schema) { + let value = schema[key] + let errorMessage = await this.validateRule(key, value, data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + async invokeValidateUpdate(data, all, allData) { + let result = [] + for (let key in data) { + let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + _checkFieldInSchema(data) { + var keys = Object.keys(data) + var keys2 = Object.keys(this._schema) + if (new Set(keys.concat(keys2)).size === keys2.length) { + return '' + } + + var noExistFields = keys.filter((key) => { + return keys2.indexOf(key) < 0; + }) + var errorMessage = formatMessage({ + field: JSON.stringify(noExistFields) + }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid']) + return [{ + key: 'invalid', + errorMessage + }] + } +} + +function message() { + return { + TAG: "", + default: '验证错误', + defaultInvalid: '提交的字段{field}在数据库中并不存在', + validateFunction: '验证无效', + required: '{label}必填', + 'enum': '{label}超出范围', + timestamp: '{label}格式无效', + whitespace: '{label}不能为空', + typeError: '{label}类型无效', + date: { + format: '{label}日期{value}格式无效', + parse: '{label}日期无法解析,{value}无效', + invalid: '{label}日期{value}无效' + }, + length: { + minLength: '{label}长度不能少于{minLength}', + maxLength: '{label}长度不能超过{maxLength}', + range: '{label}必须介于{minLength}和{maxLength}之间' + }, + number: { + minimum: '{label}不能小于{minimum}', + maximum: '{label}不能大于{maximum}', + exclusiveMinimum: '{label}不能小于等于{minimum}', + exclusiveMaximum: '{label}不能大于等于{maximum}', + range: '{label}必须介于{minimum}and{maximum}之间' + }, + pattern: { + mismatch: '{label}格式不匹配' + } + }; +} + + +SchemaValidator.message = new message(); + +export default SchemaValidator diff --git a/src/uni_modules/uni-forms/package.json b/src/uni_modules/uni-forms/package.json new file mode 100644 index 0000000..e69d39b --- /dev/null +++ b/src/uni_modules/uni-forms/package.json @@ -0,0 +1,91 @@ +{ + "id": "uni-forms", + "displayName": "uni-forms 表单", + "version": "1.4.6", + "description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "keywords": [ + "uni-ui", + "表单", + "校验", + "表单校验", + "表单验证" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-forms/readme.md b/src/uni_modules/uni-forms/readme.md new file mode 100644 index 0000000..63d5a04 --- /dev/null +++ b/src/uni_modules/uni-forms/readme.md @@ -0,0 +1,23 @@ + + +## Forms 表单 + +> **组件名:uni-forms** +> 代码块: `uForms`、`uni-forms-item` +> 关联组件:`uni-forms-item`、`uni-easyinput`、`uni-data-checkbox`、`uni-group`。 + + +uni-app的内置组件已经有了 `

    `组件,用于提交表单内容。 + +然而几乎每个表单都需要做表单验证,为了方便做表单验证,减少重复开发,`uni ui` 又基于 ``组件封装了 ``组件,内置了表单验证功能。 + +`` 提供了 `rules`属性来描述校验规则、``子组件来包裹具体的表单项,以及给原生或三方组件提供了 `binddata()` 来设置表单值。 + +每个要校验的表单项,不管input还是checkbox,都必须放在``组件中,且一个``组件只能放置一个表单项。 + +``组件内部预留了显示error message的区域,默认是在表单项的底部。 + +另外,``组件下面的各个表单项,可以通过``包裹为不同的分组。同一``下的不同表单项目将聚拢在一起,同其他group保持垂直间距。``仅影响视觉效果。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-forms) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-goods-nav/changelog.md b/src/uni_modules/uni-goods-nav/changelog.md new file mode 100644 index 0000000..c6264c6 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/changelog.md @@ -0,0 +1,18 @@ +## 1.2.1(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-goods-nav](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json new file mode 100644 index 0000000..dcdba41 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "shop", + "uni-goods-nav.options.cart": "cart", + "uni-goods-nav.buttonGroup.addToCart": "add to cart", + "uni-goods-nav.buttonGroup.buyNow": "buy now" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json new file mode 100644 index 0000000..48ee344 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店铺", + "uni-goods-nav.options.cart": "购物车", + "uni-goods-nav.buttonGroup.addToCart": "加入购物车", + "uni-goods-nav.buttonGroup.buyNow": "立即购买" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json new file mode 100644 index 0000000..d0a0255 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店鋪", + "uni-goods-nav.options.cart": "購物車", + "uni-goods-nav.buttonGroup.addToCart": "加入購物車", + "uni-goods-nav.buttonGroup.buyNow": "立即購買" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue new file mode 100644 index 0000000..8a16b17 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/uni_modules/uni-goods-nav/package.json b/src/uni_modules/uni-goods-nav/package.json new file mode 100644 index 0000000..636e45e --- /dev/null +++ b/src/uni_modules/uni-goods-nav/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-goods-nav", + "displayName": "uni-goods-nav 商品导航", + "version": "1.2.1", + "description": "商品导航组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作", + "keywords": [ + "uni-ui", + "uniui", + "商品导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-goods-nav/readme.md b/src/uni_modules/uni-goods-nav/readme.md new file mode 100644 index 0000000..07df93f --- /dev/null +++ b/src/uni_modules/uni-goods-nav/readme.md @@ -0,0 +1,10 @@ + + +## GoodsNav 商品导航 +> **组件名:uni-goods-nav** +> 代码块: `uGoodsNav` + +商品加入购物车,立即购买等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-grid/changelog.md b/src/uni_modules/uni-grid/changelog.md new file mode 100644 index 0000000..d301166 --- /dev/null +++ b/src/uni_modules/uni-grid/changelog.md @@ -0,0 +1,13 @@ +## 1.4.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-grid](https://uniapp.dcloud.io/component/uniui/uni-grid) +## 1.3.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.3.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.3.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.4(2021-05-12) +- 新增 组件示例地址 +## 1.2.3(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue b/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue new file mode 100644 index 0000000..19c08d7 --- /dev/null +++ b/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue b/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..0edc7ff --- /dev/null +++ b/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/uni_modules/uni-grid/package.json b/src/uni_modules/uni-grid/package.json new file mode 100644 index 0000000..ccb2c91 --- /dev/null +++ b/src/uni_modules/uni-grid/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-grid", + "displayName": "uni-grid 宫格", + "version": "1.4.0", + "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。", + "keywords": [ + "uni-ui", + "uniui", + "九宫格", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-grid/readme.md b/src/uni_modules/uni-grid/readme.md new file mode 100644 index 0000000..0aa44cc --- /dev/null +++ b/src/uni_modules/uni-grid/readme.md @@ -0,0 +1,11 @@ + + +## Grid 宫格 +> **组件名:uni-grid** +> 代码块: `uGrid` + + +宫格组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-grid) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-group/changelog.md b/src/uni_modules/uni-group/changelog.md new file mode 100644 index 0000000..a7024fd --- /dev/null +++ b/src/uni_modules/uni-group/changelog.md @@ -0,0 +1,16 @@ +## 1.2.2(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-group](https://uniapp.dcloud.io/component/uniui/uni-group) +## 1.1.7(2021-11-08) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 优化 组件文档 +## 1.0.3(2021-05-12) +- 新增 组件示例地址 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/src/uni_modules/uni-group/components/uni-group/uni-group.vue b/src/uni_modules/uni-group/components/uni-group/uni-group.vue new file mode 100644 index 0000000..3425ecd --- /dev/null +++ b/src/uni_modules/uni-group/components/uni-group/uni-group.vue @@ -0,0 +1,134 @@ + + + + diff --git a/src/uni_modules/uni-group/package.json b/src/uni_modules/uni-group/package.json new file mode 100644 index 0000000..ea00a08 --- /dev/null +++ b/src/uni_modules/uni-group/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-group", + "displayName": "uni-group 分组", + "version": "1.2.2", + "description": "分组组件可用于将组件用于分组,添加间隔,以产生明显的区块", + "keywords": [ + "uni-ui", + "uniui", + "group", + "分组", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-group/readme.md b/src/uni_modules/uni-group/readme.md new file mode 100644 index 0000000..bae67f4 --- /dev/null +++ b/src/uni_modules/uni-group/readme.md @@ -0,0 +1,9 @@ + +## Group 分组 +> **组件名:uni-group** +> 代码块: `uGroup` + +分组组件可用于将组件分组,添加间隔,以产生明显的区块。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-group) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-icons/changelog.md b/src/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/src/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-icons/components/uni-icons/icons.js b/src/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..86e7444 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/uni_modules/uni-icons/components/uni-icons/uni.ttf b/src/uni_modules/uni-icons/components/uni-icons/uni.ttf new file mode 100644 index 0000000000000000000000000000000000000000..60a1968d08cc6056c70b5402b2effac43c6f96a3 GIT binary patch literal 26164 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 literal 0 HcmV?d00001 diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons.css b/src/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..835f33bc9411461b8b9046b3fec742e921d6ce3a GIT binary patch literal 35760 zcmeFacbp?vl{Q?rN>WLsSXIigCAC7gI!S6tox^m`be^1}CwPJ>yxZ{uSzi{WC_=LI+*Wx!<-H!v})21fuKMZQ#fB2Fs zuEGwU_ZyDmuR3&e_s&PS@Be}0T=(JF$l;w=9Als0-iQ4lE^0cm^YDeWhnK#G<4!$@ z>-QZydhsP6Kl0Pv9Cw|EbP-?YO$@C;`+ zuKnR1zxV)MXnddfv56Dn_-W<%#_jZ^d%1f!hyI(6O8C!lXY}93nl=3f9^gzbYS03Jm0vJ;T)Z1IKntfUtypB#zx`e6wG3 zC5AhB&Me^QdH${3yL1otSUp#NN^cKN_yKnkm%XqxczWUgrT^Oo|6lL`SPy&+DZ_DX z1{?B^82rf|!cpSXHhg1*;kZecHy+MI*MqCu>g9T0eYieaf9edzAC9!tJL|pm0UQ~l zBQN;JaG!_sb8)VT%i=%By_I_#_ZIFh?(N(=xVtf?-^|^~y@`7RcMEqbcN=#*_eSmx z?)BVjxU0EqFm9T;Q`~9pTJAdTdhWH{>+qBtxEr~fxSP3Gb60T(xkKDx?g)33JH{R7 zPH-1465x0fg%5CGeb33>TxSiZCZa24wyO7(&Q z>$wfwMs5?gnVaOMxM^;NYvpFSIc_<(f-7(s&u0CxL#u8VbF$klItIryQ@x|5W z48lm`>dOtnnB(dz48rK+>MISxIOOW948n-y>Z=XH*yQSK48kbo>T3axcUVKK~8Y>od!W-aP?gVL3VKU-3CF5aP>U~L7s5+3k`x~;p%%0f{fwn z`wW7#;p+Phg52Ti2MmG);_4R}1X;w@scs-hC9Y0&13^AJNK#+l4o$3aH zH00`3HxT3^SEssxAR)Or)eQt$$+z7tkWDxWPSHIIBXb!IaW`m$ZxcXZRf;QpmZ#4*d zg{!~KAZQq_ewRVeHC+Ae20`m^^>-Kq{lnGoHVB%CtKVY~bP`v;*C1#ou700E&{JIf zeuJQ~xcWN{g6`t#?=lEljH|!fAm}r${tpI0vvKtY41$j1>hCcK+K#I~Xb|)sSAVZT z(12Y1eFi}na`pEc1g*%`|Ir}mN3Q+>gPp}tAE%avLosrF^GJG z`bQ0dZsqD9GYDFitAE@e=v%J-34@?{x%wv!f)3{DpE3yAn5#cz5cD!v|Fl8S&|Lj9 z20>SI_0JjvtVjlpxwFpV+N5QQ~$g{(D+>a3kE^= zbM-G81S^26f5{-&16=*f2Ej7m>R&MkHUd}wszKz<)E_qpb^}-cnn7g6)t@j3wggxI zxp1QBm2=klxXa|a&TVx+;Qp=WwVt{>D}O~9QXW)O>O0h5db_-@^8Ud$^pPT-1=NS-v_4k2r|_kM*0!vaW9xyNll~`AaKH zuPQxR4wv6t{%QC2?wh**v$DGKU?rS_5?F|crGafkiL7dNk-%Y_E4VmkSn6>Hb;SUukEx3l0# zej=BS$yT%Av8Uc*J`xpdRw>aQ5n{34Scli{%@0hjo|#!%t;CXMOO1~vM@By$$wu(0 z7+*JsbCF0c%-{dHFL+pQI~s3&zjaOf89{d%!`6o3fsCO(`6

    PqiNa$~E4XJ#a8s%?nsx`&SiQ7Wz{CE9c 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 literal 0 HcmV?d00001 diff --git a/src/uni_modules/uni-icons/package.json b/src/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/src/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "1.3.5", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-icons/readme.md b/src/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/src/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-indexed-list/changelog.md b/src/uni_modules/uni-indexed-list/changelog.md new file mode 100644 index 0000000..08fa71c --- /dev/null +++ b/src/uni_modules/uni-indexed-list/changelog.md @@ -0,0 +1,17 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-indexed-list](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 diff --git a/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue new file mode 100644 index 0000000..19284bd --- /dev/null +++ b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue new file mode 100644 index 0000000..ee3a7ec --- /dev/null +++ b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue @@ -0,0 +1,367 @@ + + + diff --git a/src/uni_modules/uni-indexed-list/package.json b/src/uni_modules/uni-indexed-list/package.json new file mode 100644 index 0000000..125c0e7 --- /dev/null +++ b/src/uni_modules/uni-indexed-list/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-indexed-list", + "displayName": "uni-indexed-list 索引列表", + "version": "1.2.1", + "description": "索引列表组件,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景", + "keywords": [ + "uni-ui", + "索引列表", + "索引", + "列表" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-indexed-list/readme.md b/src/uni_modules/uni-indexed-list/readme.md new file mode 100644 index 0000000..44ad84b --- /dev/null +++ b/src/uni_modules/uni-indexed-list/readme.md @@ -0,0 +1,11 @@ + + +## IndexedList 索引列表 +> **组件名:uni-indexed-list** +> 代码块: `uIndexedList` + + +用于展示索引列表。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-link/changelog.md b/src/uni_modules/uni-link/changelog.md new file mode 100644 index 0000000..2cfbf59 --- /dev/null +++ b/src/uni_modules/uni-link/changelog.md @@ -0,0 +1,17 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-link](https://uniapp.dcloud.io/component/uniui/uni-link) +## 1.1.7(2021-11-08) +## 0.0.7(2021-09-03) +- 修复 在 nvue 下不显示的 bug +## 0.0.6(2021-07-30) +- 新增 支持自定义插槽 +## 0.0.5(2021-06-21) +- 新增 download 属性,H5平台下载文件名 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-03-09) +- 新增 href 属性支持 tel:|mailto: + +## 0.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-link/components/uni-link/uni-link.vue b/src/uni_modules/uni-link/components/uni-link/uni-link.vue new file mode 100644 index 0000000..27c5468 --- /dev/null +++ b/src/uni_modules/uni-link/components/uni-link/uni-link.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/uni_modules/uni-link/package.json b/src/uni_modules/uni-link/package.json new file mode 100644 index 0000000..77b1986 --- /dev/null +++ b/src/uni_modules/uni-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-link", + "displayName": "uni-link 超链接", + "version": "1.0.0", + "description": "uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打", + "keywords": [ + "uni-ui", + "uniui", + "link", + "超链接", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-link/readme.md b/src/uni_modules/uni-link/readme.md new file mode 100644 index 0000000..7f09e94 --- /dev/null +++ b/src/uni_modules/uni-link/readme.md @@ -0,0 +1,11 @@ + + +## Link 链接 +> **组件名:uni-link** +> 代码块: `uLink` + + +uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-link) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-list/changelog.md b/src/uni_modules/uni-list/changelog.md new file mode 100644 index 0000000..6aa6e4e --- /dev/null +++ b/src/uni_modules/uni-list/changelog.md @@ -0,0 +1,20 @@ +## 1.2.1(2022-03-30) +- 删除无用文件 +## 1.2.0(2021-11-23) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list) +## 1.1.3(2021-08-30) +- 修复 在vue3中to属性在发行应用的时候报错的bug +## 1.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.1(2021-07-21) +- 修复 与其他组件嵌套使用时,点击失效的Bug +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.17(2021-05-12) +- 新增 组件示例地址 +## 1.0.16(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.15(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 uni-list-chat 角标显示不正常的问题 diff --git a/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue b/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue new file mode 100644 index 0000000..b9349c2 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss new file mode 100644 index 0000000..311f8d9 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss @@ -0,0 +1,58 @@ +/** + * 这里是 uni-list 组件内置的常用样式变量 + * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码 + * + */ + +// 背景色 +$background-color : #fff; +// 分割线颜色 +$divide-line-color : #e5e5e5; + +// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像 +// nvue 页面不支持修改头像大小 +$avatar-width : 45px ; + +// 头像边框 +$avatar-border-radius: 5px; +$avatar-border-color: #eee; +$avatar-border-width: 1px; + +// 标题文字样式 +$title-size : 16px; +$title-color : #3b4144; +$title-weight : normal; + +// 描述文字样式 +$note-size : 12px; +$note-color : #999; +$note-weight : normal; + +// 右侧额外内容默认样式 +$right-text-size : 12px; +$right-text-color : #999; +$right-text-weight : normal; + +// 角标样式 +// nvue 页面不支持修改圆点位置以及大小 +// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动 +$badge-left: 0px; +$badge-top: 0px; + +// 显示圆点时,圆点大小 +$dot-width: 10px; +$dot-height: 10px; + +// 显示角标时,角标大小和字体大小 +$badge-size : 18px; +$badge-font : 12px; +// 显示角标时,角标前景色 +$badge-color : #fff; +// 显示角标时,角标背景色 +$badge-background-color : #ff5a5f; +// 显示角标时,角标左右间距 +$badge-space : 6px; + +// 状态样式 +// 选中颜色 +$hover : #f5f5f5; diff --git a/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue new file mode 100644 index 0000000..2b31008 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue @@ -0,0 +1,538 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue b/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..2c7d9ea --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,454 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-list - 副本.vue b/src/uni_modules/uni-list/components/uni-list/uni-list - 副本.vue new file mode 100644 index 0000000..1c85003 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-list - 副本.vue @@ -0,0 +1,106 @@ + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-list.vue b/src/uni_modules/uni-list/components/uni-list/uni-list.vue new file mode 100644 index 0000000..ecda676 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-list.vue @@ -0,0 +1,108 @@ + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue b/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue new file mode 100644 index 0000000..3b4c5a2 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs b/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs new file mode 100644 index 0000000..818a6b7 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs @@ -0,0 +1,87 @@ +var pullDown = { + threshold: 95, + maxHeight: 200, + callRefresh: 'onrefresh', + callPullingDown: 'onpullingdown', + refreshSelector: '.uni-refresh' +}; + +function ready(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.canPullDown = newValue; + // console.log(newValue); +} + +function touchStart(e, instance) { + var state = instance.getState(); + state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); + state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); + if (!state.canPullDown) { + return + } + + // console.log("touchStart"); + + state.height = 0; + state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; + state.refreshInstance.setStyle({ + 'height': 0 + }); + state.refreshInstance.callMethod("onchange", true); +} + +function touchMove(e, ownerInstance) { + var instance = e.instance; + var state = instance.getState(); + if (!state.canPullDown) { + return + } + + var oldHeight = state.height; + var endY = e.touches[0].pageY || e.changedTouches[0].pageY; + var height = endY - state.touchStartY; + if (height > pullDown.maxHeight) { + return; + } + + var refreshInstance = state.refreshInstance; + refreshInstance.setStyle({ + 'height': height + 'px' + }); + + height = height < pullDown.maxHeight ? height : pullDown.maxHeight; + state.height = height; + refreshInstance.callMethod(pullDown.callPullingDown, { + height: height + }); +} + +function touchEnd(e, ownerInstance) { + var state = e.instance.getState(); + if (!state.canPullDown) { + return + } + + state.refreshInstance.callMethod("onchange", false); + + var refreshInstance = state.refreshInstance; + if (state.height > pullDown.threshold) { + refreshInstance.callMethod(pullDown.callRefresh); + return; + } + + refreshInstance.setStyle({ + 'height': 0 + }); +} + +function propObserver(newValue, oldValue, instance) { + pullDown = newValue; +} + +module.exports = { + touchmove: touchMove, + touchstart: touchStart, + touchend: touchEnd, + propObserver: propObserver +} diff --git a/src/uni_modules/uni-list/package.json b/src/uni_modules/uni-list/package.json new file mode 100644 index 0000000..66e8bef --- /dev/null +++ b/src/uni_modules/uni-list/package.json @@ -0,0 +1,91 @@ +{ + "id": "uni-list", + "displayName": "uni-list 列表", + "version": "1.2.1", + "description": "List 组件 ,帮助使用者快速构建列表。", + "keywords": [ + "", + "uni-ui", + "uniui", + "列表", + "", + "list" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-badge", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-list/readme.md b/src/uni_modules/uni-list/readme.md new file mode 100644 index 0000000..32c2865 --- /dev/null +++ b/src/uni_modules/uni-list/readme.md @@ -0,0 +1,346 @@ +## List 列表 +> **组件名:uni-list** +> 代码块: `uList`、`uListItem` +> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad` + + +List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。 + +涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。 + +下文均有样例给出。 + +uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29) + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 组件需要依赖 `sass` 插件 ,请自行手动安装 +> - 组件内部依赖 `'uni-icons'` 、`uni-badge` 组件 +> - `uni-list` 和 `uni-list-item` 需要配套使用,暂不支持单独使用 `uni-list-item` +> - 只有开启点击反馈后,会有点击选中效果 +> - 使用插槽时,可以完全自定义内容 +> - note 、rightText 属性暂时没做限制,不支持文字溢出隐藏,使用时应该控制长度显示或通过默认插槽自行扩展 +> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译 +> - 如果需要修改 `switch`、`badge` 样式,请使用插槽自定义 +> - 在 `HBuilderX` 低版本中,可能会出现组件显示 `undefined` 的问题,请升级最新的 `HBuilderX` 或者 `cli` +> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + +### 基本用法 + +- 设置 `title` 属性,可以显示列表标题 +- 设置 `disabled` 属性,可以禁用当前项 + +```html + + + + + +``` + +### 多行内容显示 + +- 设置 `note` 属性 ,可以在第二行显示描述文本信息 + +```html + + + + + +``` + +### 右侧显示角标、switch + +- 设置 `show-badge` 属性 ,可以显示角标内容 +- 设置 `show-switch` 属性,可以显示 switch 开关 + +```html + + + + + +``` + +### 左侧显示略缩图、图标 + +- 设置 `thumb` 属性 ,可以在列表左侧显示略缩图 +- 设置 `show-extra-icon` 属性,并指定 `extra-icon` 可以在左侧显示图标 + +```html + + + + +``` + +### 开启点击反馈和右侧箭头 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,并给列表右侧添加一个箭头 +- 设置 `to` 属性,可以跳转页面,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` + +```html + + + + + + + +``` + + +### 聊天列表示例 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` +- 设置 `to` 属性,可以跳转页面 +- `time` 属性,通常会设置成时间显示,但是这个属性不仅仅可以设置时间,你可以传入任何文本,注意文本长度可能会影响显示 +- `avatar` 和 `avatarList` 属性同时只会有一个生效,同时设置的话,`avatarList` 属性的长度大于1 ,`avatar` 属性将失效 +- 可以通过默认插槽自定义列表右侧内容 + +```html + + + + + + + + + + + + + + + + + 刚刚 + + + + + + + +``` + +```javascript + +export default { + components: {}, + data() { + return { + avatarList: [{ + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }] + } + } +} + +``` + + +```css + +.chat-custom-right { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: space-between; + align-items: flex-end; +} + +.chat-custom-text { + font-size: 12px; + color: #999; +} + +``` + +## API + +### List Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +border |Boolean |true | 是否显示边框 + + +### ListItem Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +ellipsis |Number |0 | title 是否溢出隐藏,可选值,0:默认; 1:显示一行; 2:显示两行;【nvue 暂不支持】 +thumb |String |- | 左侧缩略图,若thumb有值,则不会显示扩展图标 +thumbSize |String |medium | 略缩图尺寸,可选值,lg:大图; medium:一般; sm:小图; +showBadge |Boolean |false | 是否显示数字角标 +badgeText |String |- | 数字角标内容 +badgeType |String |- | 数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21) +badgeStyle |Object |- | 数字角标样式,使用uni-badge的custom-style参数 +rightText |String |- | 右侧文字内容 +disabled |Boolean |false | 是否禁用 +showArrow |Boolean |true | 是否显示箭头图标 +link |String |navigateTo | 新页面跳转方式,可选值见下表 +to |String |- | 新页面跳转地址,如填写此属性,click 会返回页面是否跳转成功 +clickable |Boolean |false | 是否开启点击反馈 +showSwitch |Boolean |false | 是否显示Switch +switchChecked |Boolean |false | Switch是否被选中 +showExtraIcon |Boolean |false | 左侧是否显示扩展图标 +extraIcon |Object |- | 扩展图标参数,格式为 ``{color: '#4cd964',size: '22',type: 'spinner'}``,参考 [uni-icons](https://ext.dcloud.net.cn/plugin?id=28) +direction | String |row | 排版方向,可选值,row:水平排列; column:垂直排列; 3个插槽是水平排还是垂直排,也受此属性控制 + + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItem Events + +事件称名 |说明 |返回参数 +:-: |:-: |:-: +click |点击 uniListItem 触发事件,需开启点击反馈 |- +switchChange |点击切换 Switch 时触发,需显示 switch |e={value:checked} + + + +### ListItem Slots + +名称 | 说明 +:-: | :-: +header | 左/上内容插槽,可完全自定义默认显示 +body | 中间内容插槽,可完全自定义中间内容 +footer | 右/下内容插槽,可完全自定义右侧内容 + + +> **通过插槽扩展** +> 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现 +> 如果 `uni-list-item` 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。 +> uni-list-item提供了3个可扩展的插槽:`header`、`body`、`footer` +> - 当 `direction` 属性为 `row` 时表示水平排列,此时 `header` 表示列表的左边部分,`body` 表示列表的中间部分,`footer` 表示列表的右边部分 +> - 当 `direction` 属性为 `column` 时表示垂直排列,此时 `header` 表示列表的上边部分,`body` 表示列表的中间部分,`footer` 表示列表的下边部分 +> 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。 + + +**示例** + +```html + + + + + + + + + 自定义插槽 + + + + +``` + + + + + +### ListItemChat Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +clickable |Boolean |false | 是否开启点击反馈 +badgeText |String |- | 数字角标内容,设置为 `dot` 将显示圆点 +badgePositon |String |right | 角标位置 +link |String |navigateTo | 是否展示右侧箭头并开启点击反馈,可选值见下表 +clickable |Boolean |false | 是否开启点击反馈 +to |String |- | 跳转页面地址,如填写此属性,click 会返回页面是否跳转成功 +time |String |- | 右侧时间显示 +avatarCircle |Boolean |false | 是否显示圆形头像 +avatar |String |- | 头像地址,avatarCircle 不填时生效 +avatarList |Array |- | 头像组,格式为 [{url:''}] + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItemChat Slots + +名称 | 说明 +:- | :- +default | 自定义列表右侧内容(包括时间和角标显示) + +### ListItemChat Events +事件称名 | 说明 | 返回参数 +:-: | :-: | :-: +@click | 点击 uniListChat 触发事件 | {data:{}} ,如有 to 属性,会返回页面跳转信息 + + + + + + +## 基于uni-list扩展的页面模板 + +通过扩展插槽,可实现多种常见样式的列表 + +**新闻列表类** + +1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546) +2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583) +3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584) +4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585) +5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586) +6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587) +7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588) + +**商品列表类** + +1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651) +2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671) +3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672) + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/list/list](https://hellouniapp.dcloud.net.cn/pages/extUI/list/list) \ No newline at end of file diff --git a/src/uni_modules/uni-load-more/changelog.md b/src/uni_modules/uni-load-more/changelog.md new file mode 100644 index 0000000..8f03f1d --- /dev/null +++ b/src/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,19 @@ +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 0000000..a4f14a5 --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 0000000..f15d510 --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 0000000..a255c6d --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..e5eff4d --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/src/uni_modules/uni-load-more/package.json b/src/uni_modules/uni-load-more/package.json new file mode 100644 index 0000000..2fa6f04 --- /dev/null +++ b/src/uni_modules/uni-load-more/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.3", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-load-more/readme.md b/src/uni_modules/uni-load-more/readme.md new file mode 100644 index 0000000..54dc1fa --- /dev/null +++ b/src/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-nav-bar/changelog.md b/src/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 0000000..f0f6b56 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,41 @@ +## 1.3.6(2022-06-30) +- 修复 组件示例中插槽用法无法显示内容的bug +## 1.3.5(2022-05-24) +- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +## 1.3.4(2022-01-24) +- 更新 组件示例 +## 1.3.3(2022-01-24) +- 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +## 1.3.2(2022-01-18) +- 修复 在vue下,标题不垂直居中的bug +## 1.3.1(2022-01-18) +- 修复 height 属性类型错误 +## 1.3.0(2022-01-18) +- 新增 height 属性,可修改组件高度 +- 新增 dark 属性可可开启暗黑模式 +- 优化 标题字数过多显示省略号 +- 优化 插槽,插入内容可完全覆盖 +## 1.2.1(2022-01-10) +- 修复 color 属性不生效的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-30) +- 修复 在nvue下fixed为true,宽度不能撑满的Bug +## 1.0.9(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.8(2021-04-14) +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug + +## 1.0.7(2021-02-25) +- 修复 easycom 下,找不到 uni-status-bar 的bug + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..cbfc168 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 0000000..6a68874 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/uni_modules/uni-nav-bar/package.json b/src/uni_modules/uni-nav-bar/package.json new file mode 100644 index 0000000..e3fe073 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar 自定义导航栏", + "version": "1.3.6", + "description": "自定义导航栏组件,主要用于头部导航。", + "keywords": [ + "uni-ui", + "导航", + "导航栏", + "自定义导航栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-nav-bar/readme.md b/src/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 0000000..3934b32 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar 导航栏 +> **组件名:uni-nav-bar** +> 代码块: `uNavBar` + +导航栏组件,主要用于头部导航。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/src/uni_modules/uni-notice-bar/changelog.md b/src/uni_modules/uni-notice-bar/changelog.md new file mode 100644 index 0000000..9ee75a0 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/changelog.md @@ -0,0 +1,16 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 组件示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue b/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..424430d --- /dev/null +++ b/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,395 @@ + + + + + diff --git a/src/uni_modules/uni-notice-bar/package.json b/src/uni_modules/uni-notice-bar/package.json new file mode 100644 index 0000000..97719a0 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-notice-bar", + "displayName": "uni-notice-bar 通告栏", + "version": "1.2.0", + "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告", + "keywords": [ + "uni-ui", + "uniui", + "通告栏", + "公告", + "跑马灯" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-notice-bar/readme.md b/src/uni_modules/uni-notice-bar/readme.md new file mode 100644 index 0000000..fb2ede2 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/readme.md @@ -0,0 +1,13 @@ + + +## NoticeBar 通告栏 +> **组件名:uni-notice-bar** +> 代码块: `uNoticeBar` + + +通告栏组件 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-number-box/changelog.md b/src/uni_modules/uni-number-box/changelog.md new file mode 100644 index 0000000..5925c32 --- /dev/null +++ b/src/uni_modules/uni-number-box/changelog.md @@ -0,0 +1,25 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box) +## 1.1.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-20) +- 修复 uni-number-box 浮点数运算不精确的 bug +- 修复 uni-number-box change 事件触发不正确的 bug +- 新增 uni-number-box v-model 双向绑定 +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 + +## 1.0.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 v-model +- 新增 支持 focus、blur 事件 +- 新增 支持 PC 端 diff --git a/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..8d255fb --- /dev/null +++ b/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,220 @@ + + + diff --git a/src/uni_modules/uni-number-box/package.json b/src/uni_modules/uni-number-box/package.json new file mode 100644 index 0000000..ad82336 --- /dev/null +++ b/src/uni_modules/uni-number-box/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-number-box", + "displayName": "uni-number-box 数字输入框", + "version": "1.2.1", + "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。", + "keywords": [ + "uni-ui", + "uniui", + "数字输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-number-box/readme.md b/src/uni_modules/uni-number-box/readme.md new file mode 100644 index 0000000..affc56f --- /dev/null +++ b/src/uni_modules/uni-number-box/readme.md @@ -0,0 +1,13 @@ + + +## NumberBox 数字输入框 +> **组件名:uni-number-box** +> 代码块: `uNumberBox` + + +带加减按钮的数字输入框。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-pagination/changelog.md b/src/uni_modules/uni-pagination/changelog.md new file mode 100644 index 0000000..4934027 --- /dev/null +++ b/src/uni_modules/uni-pagination/changelog.md @@ -0,0 +1,22 @@ +## 1.2.2(2022-07-06) +- 修复 es 语言 i18n 错误 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-pagination](https://uniapp.dcloud.io/component/uniui/uni-pagination) +## 1.1.2(2021-10-08) +- 修复 current 、value 属性未监听,导致高亮样式失效的 bug +## 1.1.1(2021-08-20) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-12) +- 新增 PC 和 移动端适配不同的 ui +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json new file mode 100644 index 0000000..d6e2897 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "prev", + "uni-pagination.nextText": "next", + "uni-pagination.piecePerPage": "piece/page" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json new file mode 100644 index 0000000..604a113 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "anterior", + "uni-pagination.nextText": "prxima", + "uni-pagination.piecePerPage": "Artculo/Pgina" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json new file mode 100644 index 0000000..a7a0c77 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "précédente", + "uni-pagination.nextText": "suivante", + "uni-pagination.piecePerPage": "Articles/Pages" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json new file mode 100644 index 0000000..782bbe4 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一页", + "uni-pagination.nextText": "下一页", + "uni-pagination.piecePerPage": "条/页" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json new file mode 100644 index 0000000..180fddb --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一頁", + "uni-pagination.nextText": "下一頁", + "uni-pagination.piecePerPage": "條/頁" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue b/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..7135034 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,463 @@ + + + + + diff --git a/src/uni_modules/uni-pagination/package.json b/src/uni_modules/uni-pagination/package.json new file mode 100644 index 0000000..644859b --- /dev/null +++ b/src/uni_modules/uni-pagination/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-pagination", + "displayName": "uni-pagination 分页器", + "version": "1.2.2", + "description": "Pagination 分页器组件,用于展示页码、请求数据等。", + "keywords": [ + "uni-ui", + "uniui", + "分页器", + "页码" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-pagination/readme.md b/src/uni_modules/uni-pagination/readme.md new file mode 100644 index 0000000..97ea1d6 --- /dev/null +++ b/src/uni_modules/uni-pagination/readme.md @@ -0,0 +1,11 @@ + + +## Pagination 分页器 +> **组件名:uni-pagination** +> 代码块: `uPagination` + + +分页器组件,用于展示页码、请求数据等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-pagination) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-popup/changelog.md b/src/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..a9e2d66 --- /dev/null +++ b/src/uni_modules/uni-popup/changelog.md @@ -0,0 +1,60 @@ +## 1.7.9(2022-04-02) +- 修复 弹出层内部无法滚动的bug +## 1.7.8(2022-03-28) +- 修复 小程序中高度错误的bug +## 1.7.7(2022-03-17) +- 修复 快速调用open出现问题的Bug +## 1.7.6(2022-02-14) +- 修复 safeArea 属性不能设置为false的bug +## 1.7.5(2022-01-19) +- 修复 isMaskClick 失效的bug +## 1.7.4(2022-01-19) +- 新增 cancelText \ confirmText 属性 ,可自定义文本 +- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 1.7.3(2022-01-13) +- 修复 设置 safeArea 属性不生效的bug +## 1.7.2(2021-11-26) +- 优化 组件示例 +## 1.7.1(2021-11-26) +- 修复 vuedoc 文字错误 +## 1.7.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2(2021-08-24) +- 新增 支持国际化 +## 1.6.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.6.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.5.0(2021-06-23) +- 新增 mask-click 遮罩层点击事件 +## 1.4.5(2021-06-22) +- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.4(2021-06-18) +- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.3(2021-06-08) +- 修复 错误的 watch 字段 +- 修复 safeArea 属性不生效的问题 +- 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.4.2(2021-05-12) +- 新增 组件示例地址 +## 1.4.1(2021-04-29) +- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +## 1.4.0 (2021-04-29) +- 新增 type 属性的 left\right 值,支持左右弹出 +- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- 新增 safeArea 属性,是否适配底部安全区 +- 修复 App\h5\微信小程序底部安全区占位不对的Bug +- 修复 App 端弹出等待的Bug +- 优化 提升低配设备性能,优化动画卡顿问题 +- 优化 更简单的组件自定义方式 +## 1.2.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.2.8(2021-02-05) +- 调整为uni_modules目录规范 +## 1.2.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 +- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端 diff --git a/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..a5d0f2a --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..5be7624 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..7f1bd06 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..5e3003c --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..13e39eb --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/keypress.js b/src/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-popup/components/uni-popup/popup.js b/src/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c4e5781 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..db90c59 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,474 @@ + + + + diff --git a/src/uni_modules/uni-popup/package.json b/src/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..069e9ce --- /dev/null +++ b/src/uni_modules/uni-popup/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.7.9", + "description": " Popup 组件,提供常用的弹层", + "keywords": [ + "uni-ui", + "弹出层", + "弹窗", + "popup", + "弹框" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-popup/readme.md b/src/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/src/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 弹出层 +> **组件名:uni-popup** +> 代码块: `uPopup` +> 关联组件:`uni-transition` + + +弹出层组件,在应用中弹出一个消息提示窗口、提示框等 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/src/uni_modules/uni-rate/changelog.md b/src/uni_modules/uni-rate/changelog.md new file mode 100644 index 0000000..8a98a61 --- /dev/null +++ b/src/uni_modules/uni-rate/changelog.md @@ -0,0 +1,25 @@ +## 1.3.1(2022-02-25) +- 修复 条件判断 `NaN` 错误的 bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-rate](https://uniapp.dcloud.io/component/uniui/uni-rate) +## 1.2.2(2021-09-10) +- 优化 默认值修改为 0 颗星 +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-05-12) +- 新增 组件示例地址 +## 1.1.1(2021-04-21) +- 修复 布局变化后 uni-rate 星星计算不准确的 bug +- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +## 1.1.0(2021-04-16) +- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug + +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 支持 pc 端 diff --git a/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..857f5f9 --- /dev/null +++ b/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/src/uni_modules/uni-rate/package.json b/src/uni_modules/uni-rate/package.json new file mode 100644 index 0000000..64e8e33 --- /dev/null +++ b/src/uni_modules/uni-rate/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-rate", + "displayName": "uni-rate 评分", + "version": "1.3.1", + "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。", + "keywords": [ + "uni-ui", + "uniui", + "评分" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-rate/readme.md b/src/uni_modules/uni-rate/readme.md new file mode 100644 index 0000000..eae7b5c --- /dev/null +++ b/src/uni_modules/uni-rate/readme.md @@ -0,0 +1,12 @@ + + +## Rate 评分 +> **组件名:uni-rate** +> 代码块: `uRate` +> 关联组件:`uni-icons` + + +评分组件,多用于购买商品后,对商品进行评价等场景 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-row/changelog.md b/src/uni_modules/uni-row/changelog.md new file mode 100644 index 0000000..5b465bc --- /dev/null +++ b/src/uni_modules/uni-row/changelog.md @@ -0,0 +1,10 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-row](https://uniapp.dcloud.io/component/uniui/uni-row) +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 新增uni-row组件 diff --git a/src/uni_modules/uni-row/components/uni-col/uni-col.vue b/src/uni_modules/uni-row/components/uni-col/uni-col.vue new file mode 100644 index 0000000..84e2deb --- /dev/null +++ b/src/uni_modules/uni-row/components/uni-col/uni-col.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/src/uni_modules/uni-row/components/uni-row/uni-row.vue b/src/uni_modules/uni-row/components/uni-row/uni-row.vue new file mode 100644 index 0000000..f8e8542 --- /dev/null +++ b/src/uni_modules/uni-row/components/uni-row/uni-row.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/uni_modules/uni-row/package.json b/src/uni_modules/uni-row/package.json new file mode 100644 index 0000000..3f52fa6 --- /dev/null +++ b/src/uni_modules/uni-row/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-row", + "displayName": "uni-row 布局-行", + "version": "1.0.0", + "description": "流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。", + "keywords": [ + "uni-ui", + "uniui", + "栅格", + "布局", + "layout" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-row/readme.md b/src/uni_modules/uni-row/readme.md new file mode 100644 index 0000000..3c9c8b9 --- /dev/null +++ b/src/uni_modules/uni-row/readme.md @@ -0,0 +1,10 @@ +## Layout 布局 + +> **组件名 uni-row、uni-col** +> 代码块: `uRow`、`uCol` + + +流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-row) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-scss/changelog.md b/src/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/src/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/src/uni_modules/uni-scss/index.scss b/src/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/src/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/src/uni_modules/uni-scss/package.json b/src/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/src/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "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" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-scss/readme.md b/src/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/src/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/index.scss b/src/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/src/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/src/uni_modules/uni-scss/styles/setting/_border.scss b/src/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/setting/_color.scss b/src/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/src/uni_modules/uni-scss/styles/setting/_radius.scss b/src/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/src/uni_modules/uni-scss/styles/setting/_space.scss b/src/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/setting/_styles.scss b/src/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/src/uni_modules/uni-scss/styles/setting/_text.scss b/src/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/src/uni_modules/uni-scss/styles/setting/_variables.scss b/src/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/src/uni_modules/uni-scss/styles/tools/functions.scss b/src/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/src/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/src/uni_modules/uni-scss/theme.scss b/src/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/src/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/src/uni_modules/uni-scss/variables.scss b/src/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/src/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/src/uni_modules/uni-search-bar/changelog.md b/src/uni_modules/uni-search-bar/changelog.md new file mode 100644 index 0000000..b41fdd3 --- /dev/null +++ b/src/uni_modules/uni-search-bar/changelog.md @@ -0,0 +1,33 @@ +## 1.2.3(2022-05-24) +- 新增 readonly 属性,组件只读 +## 1.2.2(2022-05-06) +- 修复 vue3 input 事件不生效的bug +## 1.2.1(2022-05-06) +- 修复 多余代码导致的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +## 1.1.2(2021-08-30) +- 修复 value 属性与 modelValue 属性不兼容的Bug +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 项目示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-04-15) +- uni-ui 新增 uni-search-bar 的 focus 事件 + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持双向绑定 +- 更改 input 事件的返回值,e={value:Number} --> e=value +- 新增 支持图标插槽 +- 新增 支持 clear、blur 事件 +- 新增 支持 focus 属性 +- 去掉组件背景色 diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json new file mode 100644 index 0000000..dd083a5 --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "Search enter content" +} \ No newline at end of file diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json new file mode 100644 index 0000000..d4e5c12 --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "请输入搜索内容" +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json new file mode 100644 index 0000000..318b6ef --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "請輸入搜索內容" +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 0000000..5a518a8 --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/src/uni_modules/uni-search-bar/package.json b/src/uni_modules/uni-search-bar/package.json new file mode 100644 index 0000000..9352c57 --- /dev/null +++ b/src/uni_modules/uni-search-bar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-search-bar", + "displayName": "uni-search-bar 搜索栏", + "version": "1.2.3", + "description": "搜索栏组件,通常用于搜索商品、文章等", + "keywords": [ + "uni-ui", + "uniui", + "搜索框", + "搜索栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-search-bar/readme.md b/src/uni_modules/uni-search-bar/readme.md new file mode 100644 index 0000000..253092f --- /dev/null +++ b/src/uni_modules/uni-search-bar/readme.md @@ -0,0 +1,14 @@ + + +## SearchBar 搜索栏 + +> **组件名:uni-search-bar** +> 代码块: `uSearchBar` + + +搜索栏组件 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-section/changelog.md b/src/uni_modules/uni-section/changelog.md new file mode 100644 index 0000000..738f2b3 --- /dev/null +++ b/src/uni_modules/uni-section/changelog.md @@ -0,0 +1,2 @@ +## 0.0.1(2022-07-22) +- 初始化 diff --git a/src/uni_modules/uni-section/components/uni-section/uni-section.vue b/src/uni_modules/uni-section/components/uni-section/uni-section.vue new file mode 100644 index 0000000..9a52e0b --- /dev/null +++ b/src/uni_modules/uni-section/components/uni-section/uni-section.vue @@ -0,0 +1,167 @@ + + + + diff --git a/src/uni_modules/uni-section/package.json b/src/uni_modules/uni-section/package.json new file mode 100644 index 0000000..0a31fb5 --- /dev/null +++ b/src/uni_modules/uni-section/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-section", + "displayName": "uni-section 标题栏", + "version": "0.0.1", + "description": "标题栏组件", + "keywords": [ + "uni-ui", + "uniui", + "标题栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-section/readme.md b/src/uni_modules/uni-section/readme.md new file mode 100644 index 0000000..d47faab --- /dev/null +++ b/src/uni_modules/uni-section/readme.md @@ -0,0 +1,8 @@ +## Section 标题栏 +> **组件名:uni-section** +> 代码块: `uSection` + +uni-section 组件主要用于文章、列表详情等标题展示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-section) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-segmented-control/changelog.md b/src/uni_modules/uni-segmented-control/changelog.md new file mode 100644 index 0000000..a44385d --- /dev/null +++ b/src/uni_modules/uni-segmented-control/changelog.md @@ -0,0 +1,9 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-05-12) +- 新增 项目示例地址 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue b/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue new file mode 100644 index 0000000..044a495 --- /dev/null +++ b/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/uni_modules/uni-segmented-control/package.json b/src/uni_modules/uni-segmented-control/package.json new file mode 100644 index 0000000..6cae41d --- /dev/null +++ b/src/uni_modules/uni-segmented-control/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-segmented-control", + "displayName": "uni-segmented-control 分段器", + "version": "1.2.0", + "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示", + "keywords": [ + "uni-ui", + "uniui", + "分段器", + "segement", + "顶部选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-segmented-control/readme.md b/src/uni_modules/uni-segmented-control/readme.md new file mode 100644 index 0000000..3527b03 --- /dev/null +++ b/src/uni_modules/uni-segmented-control/readme.md @@ -0,0 +1,13 @@ + + +## SegmentedControl 分段器 +> **组件名:uni-segmented-control** +> 代码块: `uSegmentedControl` + + +用作不同视图的显示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-steps/changelog.md b/src/uni_modules/uni-steps/changelog.md new file mode 100644 index 0000000..cb9d367 --- /dev/null +++ b/src/uni_modules/uni-steps/changelog.md @@ -0,0 +1,16 @@ +## 1.1.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-steps](https://uniapp.dcloud.io/component/uniui/uni-steps) +## 1.0.8(2021-05-12) +- 新增 项目示例地址 +## 1.0.7(2021-05-06) +- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue b/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..a6c8f28 --- /dev/null +++ b/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/src/uni_modules/uni-steps/package.json b/src/uni_modules/uni-steps/package.json new file mode 100644 index 0000000..c687b40 --- /dev/null +++ b/src/uni_modules/uni-steps/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-steps", + "displayName": "uni-steps 步骤条", + "version": "1.1.1", + "description": "步骤条组件,提供横向和纵向两种布局格式。", + "keywords": [ + "uni-ui", + "uniui", + "步骤条", + "时间轴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-steps/readme.md b/src/uni_modules/uni-steps/readme.md new file mode 100644 index 0000000..da7a4bf --- /dev/null +++ b/src/uni_modules/uni-steps/readme.md @@ -0,0 +1,13 @@ + + +## Steps 步骤条 +> **组件名:uni-steps** +> 代码块: `uSteps` + + +步骤条,常用于显示进度 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-swipe-action/changelog.md b/src/uni_modules/uni-swipe-action/changelog.md new file mode 100644 index 0000000..c007cb5 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/changelog.md @@ -0,0 +1,41 @@ +## 1.3.7(2022-06-06) +- 修复 vue3 下使用组件不能正常运行的Bug +## 1.3.6(2022-05-31) +- 修复 h5端点击click触发两次的Bug +## 1.3.5(2022-05-23) +- 修复 isPC 找不到的Bug +## 1.3.4(2022-05-19) +- 修复 在 nvue 下 disabled 失效的bug +## 1.3.3(2022-03-31) +- 修复 按钮字体大小不能设置的bug +## 1.3.2(2022-03-16) +- 修复 h5和app端下报el错误的bug +## 1.3.1(2022-03-07) +- 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swipe-action](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +## 1.2.4(2021-08-20) +- 优化 close-all 方法 +## 1.2.3(2021-08-20) +- 新增 close-all 方法,关闭所有已打开的组件 +## 1.2.2(2021-08-17) +- 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.2.1(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.1.10(2021-06-17) +- 修复 按钮点击执行两次的bug +## 1.1.9(2021-05-12) +- 新增 项目示例地址 +## 1.1.8(2021-03-26) +- 修复 微信小程序 nv_navigator is not defined 报错的bug +## 1.1.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 左侧滑动 +- 新增 插槽使用方式 +- 新增 threshold 属性,可以控制滑动缺省值 +- 优化 长列表滚动性能 +- 修复 滚动页面时触发组件滑动的Bug diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..755c97c --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,302 @@ +let bindIngXMixins = {} + +// #ifdef APP-NVUE +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +bindIngXMixins = { + data() { + return {} + }, + + watch: { + show(newVal) { + if (this.autoClose) return + if (this.stop) return + this.stop = true + if (newVal) { + this.open(newVal) + } else { + this.close() + } + }, + leftOptions() { + this.getSelectorQuery() + this.init() + }, + rightOptions(newVal) { + this.init() + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.box = this.getEl(this.$refs['selector-box--hock']) + this.selector = this.getEl(this.$refs['selector-content--hock']); + this.leftButton = this.getEl(this.$refs['selector-left-button--hock']); + this.rightButton = this.getEl(this.$refs['selector-right-button--hock']); + this.init() + }, + // beforeDestroy() { + // this.swipeaction.children.forEach((item, index) => { + // if (item === this) { + // this.swipeaction.children.splice(index, 1) + // } + // }) + // }, + methods: { + init() { + this.$nextTick(() => { + this.x = 0 + this.button = { + show: false + } + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }) + }, + onClick(index, item, position) { + this.$emit('click', { + content: item, + index, + position + }) + }, + touchstart(e) { + // fix by mehaotian 禁止滑动 + if (this.disabled) return + // 每次只触发一次,避免多次监听造成闪烁 + if (this.stop) return + this.stop = true + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + let expression = this.range(this.x, -rightWidth, leftWidth) + let leftExpression = this.range(this.x - leftWidth, -leftWidth, 0) + let rightExpression = this.range(this.x + rightWidth, 0, rightWidth) + + this.eventpan = BindingX.bind({ + anchor: this.box, + eventType: 'pan', + props: [{ + element: this.selector, + property: 'transform.translateX', + expression + }, { + element: this.leftButton, + property: 'transform.translateX', + expression: leftExpression + }, { + element: this.rightButton, + property: 'transform.translateX', + expression: rightExpression + }, ] + }, (e) => { + // nope + if (e.state === 'end') { + this.x = e.deltaX + this.x; + this.isclick = true + this.bindTiming(e.deltaX) + } + }); + }, + touchend(e) { + if (this.isopen !== 'none' && !this.isclick) { + this.open('none') + } + }, + bindTiming(x) { + const left = this.x + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + const threshold = this.threshold + if (!this.isopen || this.isopen === 'none') { + if (left > threshold) { + this.open('left') + } else if (left < -threshold) { + this.open('right') + } else { + this.open('none') + } + } else { + if ((x > -leftWidth && x < 0) || x > rightWidth) { + if ((x > -threshold && x < 0) || (x - rightWidth > threshold)) { + this.open('left') + } else { + this.open('none') + } + } else { + if ((x < threshold && x > 0) || (x + leftWidth < -threshold)) { + this.open('right') + } else { + this.open('none') + } + } + } + }, + + /** + * 移动范围 + * @param {Object} num + * @param {Object} mix + * @param {Object} max + */ + range(num, mix, max) { + return `min(max(x+${num}, ${mix}), ${max})` + }, + + /** + * 开启swipe + */ + open(type) { + this.animation(type) + }, + + /** + * 关闭swipe + */ + close() { + this.animation('none') + }, + + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + const time = 300 + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + if (this.eventpan && this.eventpan.token) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + + switch (type) { + case 'left': + Promise.all([ + this.move(this.selector, leftWidth), + this.move(this.leftButton, 0), + this.move(this.rightButton, rightWidth * 2) + ]).then(() => { + this.setEmit(leftWidth, type) + }) + break + case 'right': + Promise.all([ + this.move(this.selector, -rightWidth), + this.move(this.leftButton, -leftWidth * 2), + this.move(this.rightButton, 0) + ]).then(() => { + this.setEmit(-rightWidth, type) + }) + break + default: + Promise.all([ + this.move(this.selector, 0), + this.move(this.leftButton, -leftWidth), + this.move(this.rightButton, rightWidth) + ]).then(() => { + this.setEmit(0, type) + }) + + } + }, + setEmit(x, type) { + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + this.isopen = this.isopen || 'none' + this.stop = false + this.isclick = false + // 只有状态不一致才会返回结果 + if (this.isopen !== type && this.x !== x) { + if (type === 'left' && leftWidth > 0) { + this.$emit('change', 'left') + } + if (type === 'right' && rightWidth > 0) { + this.$emit('change', 'right') + } + if (type === 'none') { + this.$emit('change', 'none') + } + } + this.x = x + this.isopen = type + }, + move(ref, value) { + return new Promise((resolve, reject) => { + animation.transition(ref, { + styles: { + transform: `translateX(${value})`, + }, + duration: 150, //ms + timingFunction: 'linear', + needLayout: false, + delay: 0 //ms + }, function(res) { + resolve(res) + }) + }) + + }, + + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + Promise.all([ + this.getDom('left'), + this.getDom('right'), + ]).then((data) => { + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + + if (show === 'none') { + // this.close() + } else { + this.open(show) + } + + }) + + }, + getDom(str) { + return new Promise((resolve, reject) => { + dom.getComponentRect(this.$refs[`selector-${str}-button--hock`], (data) => { + if (data) { + this.button[str] = data.size + resolve(data) + } else { + reject() + } + }) + }) + } + } +} + +// #endif + +export default bindIngXMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs new file mode 100644 index 0000000..10ddb56 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/index.wxs @@ -0,0 +1,323 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function sizeReady(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + var buttonPositions = JSON.parse(newValue) + if (!buttonPositions || !buttonPositions.data || buttonPositions.data.length === 0) return + state.leftWidth = buttonPositions.data[0].width + state.rightWidth = buttonPositions.data[1].width + state.threshold = instance.getDataset().threshold + + if (buttonPositions.show && buttonPositions.show !== 'none') { + openState(buttonPositions.show, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ins) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ins.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ins) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var position = state.position + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + sizeReady: sizeReady, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js new file mode 100644 index 0000000..917cb48 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js @@ -0,0 +1,12 @@ +export function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (let v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..43cd56b --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,193 @@ +export default { + data() { + return { + x: 0, + transition: false, + width: 0, + viewWidth: 0, + swipeShow: 0 + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal && newVal !== 'none') { + this.transition = true + this.open(newVal) + } else { + this.close() + } + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.isopen = false + setTimeout(() => { + this.getQuerySelect() + }, 50) + }, + methods: { + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + /** + * 移动触发 + * @param {Object} e + */ + onChange(e) { + this.moveX = e.detail.x + this.isclose = false + }, + touchstart(e) { + this.transition = false + this.isclose = true + this.autoClose && this.swipeaction.closeOther(this) + }, + touchmove(e) {}, + touchend(e) { + // 0的位置什么都不执行 + if (this.isclose && this.isopen === 'none') return + if (this.isclose && this.isopen !== 'none') { + this.transition = true + this.close() + } else { + this.move(this.moveX + this.leftWidth) + } + }, + + /** + * 移动 + * @param {Object} moveX + */ + move(moveX) { + // 打开关闭的处理逻辑不太一样 + this.transition = true + // 未打开状态 + if (!this.isopen || this.isopen === 'none') { + if (moveX > this.threshold) { + this.open('left') + } else if (moveX < -this.threshold) { + this.open('right') + } else { + this.close() + } + } else { + if (moveX < 0 && moveX < this.rightWidth) { + const rightX = this.rightWidth + moveX + if (rightX < this.threshold) { + this.open('right') + } else { + this.close() + } + } else if (moveX > 0 && moveX < this.leftWidth) { + const leftX = this.leftWidth - moveX + if (leftX < this.threshold) { + this.open('left') + } else { + this.close() + } + } + + } + + }, + + /** + * 打开 + */ + open(type) { + this.x = this.moveX + this.animation(type) + }, + + /** + * 关闭 + */ + close() { + this.x = this.moveX + // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 + this.$nextTick(() => { + this.x = -this.leftWidth + if (this.isopen !== 'none') { + this.$emit('change', 'none') + } + this.isopen = 'none' + }) + }, + + /** + * 执行结束动画 + * @param {Object} type + */ + animation(type) { + this.$nextTick(() => { + if (type === 'left') { + this.x = 0 + } else { + this.x = -this.rightWidth - this.leftWidth + } + + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + }) + + }, + getSlide(x) {}, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.movable-view--hock').boundingClientRect(data => { + this.leftWidth = data[1].width + this.rightWidth = data[2].width + this.width = data[0].width + this.viewWidth = this.width + this.rightWidth + this.leftWidth + if (this.leftWidth === 0) { + // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 + this.x = -0.1 + } else { + this.x = -this.leftWidth + } + this.moveX = this.x + this.$nextTick(() => { + this.swipeShow = 1 + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show !== 'none') { + this.transition = true + this.open(this.shows) + } + }).exec(); + + } + } +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..9a8bcbb --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,259 @@ +let otherMixins = {} + +// #ifndef APP-PLUS|| MP-WEIXIN || H5 +const MIN_DISTANCE = 10; +otherMixins = { + data() { + // TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug + const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + uniShow: false, + left: 0, + buttonShow: 'none', + ani: false, + moveLeft: '', + elClass + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + left() { + this.moveLeft = `translateX(${this.left}px)` + }, + buttonShow(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + leftOptions() { + this.init() + }, + rightOptions() { + this.init() + } + }, + mounted() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + this.init() + }, + methods: { + init() { + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.getSelectorQuery() + }, 100) + // 移动距离 + this.left = 0 + this.x = 0 + }, + + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + touchstart(e) { + if (this.disabled) return + this.ani = false + this.x = this.left || 0 + this.stopTouchStart(e) + this.autoClose && this.closeSwipe() + }, + touchmove(e) { + if (this.disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e); + if (this.direction !== 'horizontal') { + return; + } + this.move(this.x + this.deltaX) + return false + }, + touchend() { + if (this.disabled) return + this.moveDirection(this.left) + }, + /** + * 设置移动距离 + * @param {Object} value + */ + move(value) { + value = value || 0 + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + // 获取可滑动范围 + this.left = this.range(value, -rightWidth, leftWidth); + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + */ + moveDirection(left) { + const threshold = this.threshold + const isopen = this.isopen || 'none' + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + if (this.deltaX === 0) { + this.openState('none') + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > + 0 && rightWidth + + left < threshold)) { + // right + this.openState('right') + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > + 0 && + leftWidth - left < threshold)) { + // left + this.openState('left') + } else { + // default + this.openState('none') + } + }, + + /** + * 开启状态 + * @param {Boolean} type + */ + openState(type) { + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + let left = '' + this.isopen = this.isopen ? this.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + + if (this.isopen !== type) { + this.throttle = true + this.$emit('change', type) + } + + this.isopen = type + // 添加动画类 + this.ani = true + this.$nextTick(() => { + this.move(left) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 + }, + close() { + this.openState('none') + }, + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus() { + this.direction = ''; + this.deltaX = 0; + this.deltaY = 0; + this.offsetX = 0; + this.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event) { + this.resetTouchStatus(); + const touch = event.touches[0]; + this.startX = touch.clientX; + this.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event) { + const touch = event.touches[0]; + this.deltaX = touch.clientX - this.startX; + this.deltaY = touch.clientY - this.startY; + this.offsetX = Math.abs(this.deltaX); + this.offsetY = Math.abs(this.deltaY); + this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); + }, + + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.' + this.elClass) + .boundingClientRect(data => { + if (data.length === 0) return + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + this.leftWidth = data[0].width || 0 + this.rightWidth = data[1].width || 0 + this.buttonShow = show + }) + .exec() + } + } +} + +// #endif + +export default otherMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..435e0fb --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,83 @@ +let mpMixins = {} +let is_pc = null +// #ifdef H5 +import { + isPC +} from "./isPC" +is_pc = isPC() +// #endif +// #ifdef APP-VUE|| MP-WEIXIN || H5 + +mpMixins = { + data() { + return { + is_show: 'none' + } + }, + watch: { + show(newVal) { + this.is_show = this.show + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.is_show = this.show + }, + methods: { + // wxs 中调用 + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + + change(e) { + this.$emit('change', e.open) + if (this.is_show !== e.open) { + this.is_show = e.open + } + }, + + appTouchStart(e) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + onClickForPC(index, item, position) { + if (!is_pc) return + // #ifdef H5 + this.$emit('click', { + content: item, + index, + position + }) + // #endif + } + } +} + +// #endif +export default mpMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js new file mode 100644 index 0000000..78f0ec6 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js @@ -0,0 +1,270 @@ +const MIN_DISTANCE = 10; +export default { + showWatch(newVal, oldVal, ownerInstance, instance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + if (!$el) return + this.getDom(instance, ownerInstance, self) + if (newVal && newVal !== 'none') { + this.openState(newVal, instance, ownerInstance, self) + return + } + + if (state.left) { + this.openState('none', instance, ownerInstance, self) + } + this.resetTouchStatus(instance, self) + }, + + /** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ + touchstart(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state; + this.getDom(instance, ownerInstance, self) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + this.stopTouchStart(e, ownerInstance, self) + }, + + /** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchmove(e, ownerInstance, self) { + let instance = e.instance; + // 删除之后已经那不到实例了 + if (!instance) return; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e, self); + if (state.direction !== 'horizontal') { + return; + } + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + let x = state.x + state.deltaX + this.move(x, instance, ownerInstance, self) + }, + + /** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchend(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + this.moveDirection(state.left, instance, ownerInstance, self) + + }, + + /** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ + move(value, instance, ownerInstance, self) { + value = value || 0 + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = this.range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + + }, + + /** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ + getDom(instance, ownerInstance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + var leftDom = $el.querySelector('.button-group--left') + var rightDom = $el.querySelector('.button-group--right') + + state.leftWidth = leftDom.offsetWidth || 0 + state.rightWidth = rightDom.offsetWidth || 0 + state.threshold = instance.getDataset().threshold + }, + + getDisabledType(value) { + return (typeof(value) === 'string' ? JSON.parse(value) : value) || false; + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + + + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ + moveDirection(left, ins, ownerInstance, self) { + var state = self.state + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + this.openState('none', ins, ownerInstance, self) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + this.openState('right', ins, ownerInstance, self) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left', ins, ownerInstance, self) + } else { + // default + this.openState('none', ins, ownerInstance, self) + } + }, + + + /** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ + openState(type, ins, ownerInstance, self) { + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + let left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(() => { + ins.addClass('ani'); + this.move(left, ins, ownerInstance, self) + }) + }, + + + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus(instance, self) { + let state = self.state; + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event, ownerInstance, self) { + let instance = event.instance; + let state = self.state + this.resetTouchStatus(instance, self); + var touch = event.touches[0]; + state.startX = touch.clientX; + state.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event, self) { + let instance = event.instance; + let state = self.state; + let touch = event.touches[0]; + + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || this.getDirection(state.offsetX, state.offsetY); + } +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..d79c297 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,347 @@ + + + + + + diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs new file mode 100644 index 0000000..b394244 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs @@ -0,0 +1,341 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function showWatch(newVal, oldVal, ownerInstance, instance) { + var state = instance.getState() + getDom(instance, ownerInstance) + if (newVal && newVal !== 'none') { + openState(newVal, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + getDom(instance, ownerInstance) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ownerInstance) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ +function getDom(instance, ownerInstance) { + var state = instance.getState() + var leftDom = ownerInstance.selectComponent('.button-group--left') + var rightDom = ownerInstance.selectComponent('.button-group--right') + var leftStyles = { + width: 0 + } + var rightStyles = { + width: 0 + } + leftStyles = leftDom.getBoundingClientRect() + rightStyles = rightDom.getBoundingClientRect() + + state.leftWidth = leftStyles.width || 0 + state.rightWidth = rightStyles.width || 0 + state.threshold = instance.getDataset().threshold +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + showWatch: showWatch, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue b/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..4971782 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/uni_modules/uni-swipe-action/package.json b/src/uni_modules/uni-swipe-action/package.json new file mode 100644 index 0000000..c8998d9 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swipe-action", + "displayName": "uni-swipe-action 滑动操作", + "version": "1.3.7", + "description": "SwipeAction 滑动操作操作组件", + "keywords": [ + "", + "uni-ui", + "uniui", + "滑动删除", + "侧滑删除" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "快应用": { + "华为": "y", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-swipe-action/readme.md b/src/uni_modules/uni-swipe-action/readme.md new file mode 100644 index 0000000..93a5cac --- /dev/null +++ b/src/uni_modules/uni-swipe-action/readme.md @@ -0,0 +1,11 @@ + + +## SwipeAction 滑动操作 +> **组件名:uni-swipe-action** +> 代码块: `uSwipeAction`、`uSwipeActionItem` + + +通过滑动触发选项的容器 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-swiper-dot/changelog.md b/src/uni_modules/uni-swiper-dot/changelog.md new file mode 100644 index 0000000..85cf54d --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/changelog.md @@ -0,0 +1,12 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swiper-dot](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 clickItem 事件,支持指示点控制轮播 +- 新增 支持 pc 可用 diff --git a/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue b/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..e66b6c7 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/uni_modules/uni-swiper-dot/package.json b/src/uni_modules/uni-swiper-dot/package.json new file mode 100644 index 0000000..f2dd8d2 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swiper-dot", + "displayName": "uni-swiper-dot 轮播图指示点", + "version": "1.2.0", + "description": "自定义轮播图指示点组件", + "keywords": [ + "uni-ui", + "uniui", + "轮播图指示点", + "dot", + "swiper" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-swiper-dot/readme.md b/src/uni_modules/uni-swiper-dot/readme.md new file mode 100644 index 0000000..7d397e2 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/readme.md @@ -0,0 +1,11 @@ + + +## SwiperDot 轮播图指示点 +> **组件名:uni-swiper-dot** +> 代码块: `uSwiperDot` + + +自定义轮播图指示点 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-table/changelog.md b/src/uni_modules/uni-table/changelog.md new file mode 100644 index 0000000..8233b20 --- /dev/null +++ b/src/uni_modules/uni-table/changelog.md @@ -0,0 +1,23 @@ +## 1.2.1(2022-06-06) +- 修复 微信小程序存在无使用组件的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-table](https://uniapp.dcloud.io/component/uniui/uni-table) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-07-08) +- 新增 uni-th 支持 date 日期筛选范围 +## 1.0.6(2021-07-05) +- 新增 uni-th 支持 range 筛选范围 +## 1.0.5(2021-06-28) +- 新增 uni-th 筛选功能 +## 1.0.4(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.3(2021-04-16) +- 新增 sortable 属性,是否开启单列排序 +- 优化 表格多选逻辑 +## 1.0.2(2021-03-22) +- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-table/components/uni-table/uni-table.vue b/src/uni_modules/uni-table/components/uni-table/uni-table.vue new file mode 100644 index 0000000..91b74fa --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-table/uni-table.vue @@ -0,0 +1,455 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue b/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue new file mode 100644 index 0000000..fbe1bdc --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-td/uni-td.vue b/src/uni_modules/uni-table/components/uni-td/uni-td.vue new file mode 100644 index 0000000..9ce93e9 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-td/uni-td.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue b/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue new file mode 100644 index 0000000..bc9a0e3 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue @@ -0,0 +1,503 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-th/uni-th.vue b/src/uni_modules/uni-table/components/uni-th/uni-th.vue new file mode 100644 index 0000000..883e3f2 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-th/uni-th.vue @@ -0,0 +1,278 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue b/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue new file mode 100644 index 0000000..0dd18cd --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue b/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue new file mode 100644 index 0000000..158f3ff --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue b/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue new file mode 100644 index 0000000..f9b9671 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/uni_modules/uni-table/i18n/en.json b/src/uni_modules/uni-table/i18n/en.json new file mode 100644 index 0000000..e32023c --- /dev/null +++ b/src/uni_modules/uni-table/i18n/en.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reset", + "filter-dropdown.search": "Search", + "filter-dropdown.submit": "Submit", + "filter-dropdown.filter": "Filter", + "filter-dropdown.gt": "Greater or equal to", + "filter-dropdown.lt": "Less than or equal to", + "filter-dropdown.date": "Date" +} diff --git a/src/uni_modules/uni-table/i18n/es.json b/src/uni_modules/uni-table/i18n/es.json new file mode 100644 index 0000000..9afd04b --- /dev/null +++ b/src/uni_modules/uni-table/i18n/es.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reiniciar", + "filter-dropdown.search": "Búsqueda", + "filter-dropdown.submit": "Entregar", + "filter-dropdown.filter": "Filtrar", + "filter-dropdown.gt": "Mayor o igual a", + "filter-dropdown.lt": "Menos que o igual a", + "filter-dropdown.date": "Fecha" +} diff --git a/src/uni_modules/uni-table/i18n/fr.json b/src/uni_modules/uni-table/i18n/fr.json new file mode 100644 index 0000000..b006237 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/fr.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Réinitialiser", + "filter-dropdown.search": "Chercher", + "filter-dropdown.submit": "Soumettre", + "filter-dropdown.filter": "Filtre", + "filter-dropdown.gt": "Supérieur ou égal à", + "filter-dropdown.lt": "Inférieur ou égal à", + "filter-dropdown.date": "Date" +} diff --git a/src/uni_modules/uni-table/i18n/index.js b/src/uni_modules/uni-table/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-table/i18n/zh-Hans.json b/src/uni_modules/uni-table/i18n/zh-Hans.json new file mode 100644 index 0000000..862af17 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "确定", + "filter-dropdown.filter": "筛选", + "filter-dropdown.gt": "大于等于", + "filter-dropdown.lt": "小于等于", + "filter-dropdown.date": "日期范围" +} diff --git a/src/uni_modules/uni-table/i18n/zh-Hant.json b/src/uni_modules/uni-table/i18n/zh-Hant.json new file mode 100644 index 0000000..64f8061 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "確定", + "filter-dropdown.filter": "篩選", + "filter-dropdown.gt": "大於等於", + "filter-dropdown.lt": "小於等於", + "filter-dropdown.date": "日期範圍" +} diff --git a/src/uni_modules/uni-table/package.json b/src/uni_modules/uni-table/package.json new file mode 100644 index 0000000..f224ab7 --- /dev/null +++ b/src/uni_modules/uni-table/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-table", + "displayName": "uni-table 表格", + "version": "1.2.1", + "description": "表格组件,多用于展示多条结构类似的数据,如", + "keywords": [ + "uni-ui", + "uniui", + "table", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-datetime-picker"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "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", + "字节跳动": "n", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-table/readme.md b/src/uni_modules/uni-table/readme.md new file mode 100644 index 0000000..bb08c79 --- /dev/null +++ b/src/uni_modules/uni-table/readme.md @@ -0,0 +1,13 @@ + + +## Table 表单 +> 组件名:``uni-table``,代码块: `uTable`。 + +用于展示多条结构类似的数据 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + diff --git a/src/uni_modules/uni-tag/changelog.md b/src/uni_modules/uni-tag/changelog.md new file mode 100644 index 0000000..c0c5839 --- /dev/null +++ b/src/uni_modules/uni-tag/changelog.md @@ -0,0 +1,21 @@ +## 2.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-tag](https://uniapp.dcloud.io/component/uniui/uni-tag) +## 2.0.0(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +- 移除 插槽 +- 移除 type 属性的 royal 选项 +## 1.1.1(2021-08-11) +- type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-06-18) +- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.0.6(2021-06-04) +- 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.0.5(2021-05-10) +- 修复 royal 类型无效的bug +- 修复 uni-tag 宽度不自适应的bug +- 新增 uni-tag 支持属性 custom-style 自定义样式 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..418c955 --- /dev/null +++ b/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/src/uni_modules/uni-tag/package.json b/src/uni_modules/uni-tag/package.json new file mode 100644 index 0000000..1878088 --- /dev/null +++ b/src/uni_modules/uni-tag/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-tag", + "displayName": "uni-tag 标签", + "version": "2.1.0", + "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。", + "keywords": [ + "uni-ui", + "uniui", + "", + "tag", + "标签" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-tag/readme.md b/src/uni_modules/uni-tag/readme.md new file mode 100644 index 0000000..6e78ff5 --- /dev/null +++ b/src/uni_modules/uni-tag/readme.md @@ -0,0 +1,13 @@ + + +## Tag 标签 +> **组件名:uni-tag** +> 代码块: `uTag` + + +用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-title/changelog.md b/src/uni_modules/uni-title/changelog.md new file mode 100644 index 0000000..7626216 --- /dev/null +++ b/src/uni_modules/uni-title/changelog.md @@ -0,0 +1,10 @@ +## 1.1.1(2022-05-19) +- 修改组件描述 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-title](https://uniapp.dcloud.io/component/uniui/uni-title) +## 1.0.2(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-title/components/uni-title/uni-title.vue b/src/uni_modules/uni-title/components/uni-title/uni-title.vue new file mode 100644 index 0000000..bf4f926 --- /dev/null +++ b/src/uni_modules/uni-title/components/uni-title/uni-title.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/uni_modules/uni-title/package.json b/src/uni_modules/uni-title/package.json new file mode 100644 index 0000000..2249f5a --- /dev/null +++ b/src/uni_modules/uni-title/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-title", + "displayName": "uni-title 章节标题", + "version": "1.1.1", + "description": "章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题", + "keywords": [ + "uni-ui", + "uniui", + "标题", + "章节", + "章节标题", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-title/readme.md b/src/uni_modules/uni-title/readme.md new file mode 100644 index 0000000..0e60b1b --- /dev/null +++ b/src/uni_modules/uni-title/readme.md @@ -0,0 +1,14 @@ + + +## Title 标题 +> **组件名:uni-title** +> 代码块: `uTitle` + + +章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-title) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + diff --git a/src/uni_modules/uni-tooltip/changelog.md b/src/uni_modules/uni-tooltip/changelog.md new file mode 100644 index 0000000..00f1572 --- /dev/null +++ b/src/uni_modules/uni-tooltip/changelog.md @@ -0,0 +1,10 @@ +## 0.2.1(2022-05-09) +- 修复 content 为空时仍然弹出的bug +## 0.2.0(2022-05-07) +**注意:破坏性更新** +- 更新 text 属性变更为 content +- 更新 移除 width 属性 +## 0.1.1(2022-04-27) +- 修复 组件根 text 嵌套组件 warning +## 0.1.0(2022-04-21) +- 初始化 diff --git a/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue b/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue new file mode 100644 index 0000000..ffbb6fa --- /dev/null +++ b/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue @@ -0,0 +1,68 @@ + + + + + + diff --git a/src/uni_modules/uni-tooltip/package.json b/src/uni_modules/uni-tooltip/package.json new file mode 100644 index 0000000..b626efb --- /dev/null +++ b/src/uni_modules/uni-tooltip/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-tooltip", + "displayName": "uni-tooltip", + "version": "0.2.1", + "description": "Tooltip 提示文字", + "keywords": [ + "uni-tooltip", + "uni-ui", + "tooltip", + "tip", + "文字提示" +], + "repository": "", +"engines": { + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无 ", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "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", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-tooltip/readme.md b/src/uni_modules/uni-tooltip/readme.md new file mode 100644 index 0000000..faafa2e --- /dev/null +++ b/src/uni_modules/uni-tooltip/readme.md @@ -0,0 +1,8 @@ +## Badge 数字角标 +> **组件名:uni-tooltip** +> 代码块: `uTooltip` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tooltip) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-transition/changelog.md b/src/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..b1a824b --- /dev/null +++ b/src/uni_modules/uni-transition/changelog.md @@ -0,0 +1,20 @@ +## 1.3.1(2021-11-23) +- 修复 init 方法初始化问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1(2021-09-27) +- 修复 init 方法不生效的 Bug +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.1(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的 Bug +## 1.1.0(2021-04-22) +- 新增 通过方法自定义动画 +- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- 优化 动画触发逻辑,使动画更流畅 +- 优化 支持单独的动画类型 +- 优化 文档示例 +## 1.0.2(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..5f54365 --- /dev/null +++ b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,128 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + this.animation = uni.createAnimation(options) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..0d739bd --- /dev/null +++ b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/src/uni_modules/uni-transition/package.json b/src/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..d15fdf0 --- /dev/null +++ b/src/uni_modules/uni-transition/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 过渡动画", + "version": "1.3.1", + "description": "元素的简单过渡动画", + "keywords": [ + "uni-ui", + "uniui", + "动画", + "过渡", + "过渡动画" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "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" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-transition/readme.md b/src/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..2f8a77e --- /dev/null +++ b/src/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 过渡动画 +> **组件名:uni-transition** +> 代码块: `uTransition` + + +元素过渡动画 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/vk-uview-ui/changelog.md b/src/uni_modules/vk-uview-ui/changelog.md new file mode 100644 index 0000000..95c58b1 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/changelog.md @@ -0,0 +1,135 @@ +## 1.4.5(2022-12-05) +* 【修复】`u-row`、`u-col` 使用 `@click.stop` 会报错的问题,同时建议改用 `@click.native.stop` 来代替 `@click.stop` +## 1.4.4(2022-11-12) +* 【修复】`u-calendar` `u-modal` `u-picker` `u-popup` 组件在页面进入后马上需要弹窗时,无法正常弹窗的问题。 +## 1.4.3(2022-10-22) +* 【优化】部分组件的细节 +## 1.4.2(2022-10-15) +* 【修复】`1.4.1` 引出的 `u-subsection` 的部分问题 +## 1.4.1(2022-10-14) +* 【修复】`u-count-to` 若设置了千分位符合,会错误显示-的问题 +* 【修复】`u-subsection` 部分细节问题 +## 1.4.0(2022-10-07) +* 【修复】`u-section` 点击更多,会触发两次事件的问题 +* 【修复】`loadMore` 加载更多,icon-type为circle不会转动的问题 +* 【修复】`u-subsection` current 有转入值时,变更值,样式不更新(需用 `v-model="current"` 代替 `:current="current"`) +## 1.3.13(2022-09-28) +* 【修复】`u-avatar-cropper` 组件在vue3中会报错的问题。 +## 1.3.12(2022-08-30) +* 【优化】`u-keyboard` 组件内部细节。 +## 1.3.11(2022-08-30) +* 【修复】`u-subsection` 组件的 `list` 属性不支持动态修改的问题。 +## 1.3.10(2022-07-30) +* 【优化】上传组件部分细节 +## 1.3.9(2022-07-07) +* 【更新】省市区数据源 +* 【优化】`u-subsection` 组件支持在右上角显示数字角标 +```html + +``` + +```js +export default { + data() { + return { + list: [ + { + name: '待发货', + num: 10 + }, + { + name: '待付款', + num: 5 + }, + { + name: '待评价', + num: 15 + } + ] + } + } +} +``` +## 1.3.8(2022-06-13) +* 【优化】组件 `u-icon`,使之更方便的兼容第三方icon(满足规则自动计算customPrefix) +**规则如下:** +* 当 `name` 中包含 `-icon-` 字符串时 +* 如 `vk-icon-goods`,则组件的 `customPrefix` 属性自动识别为 `vk-icon` ,`name`属性 自动识别为 `goods` +* 如 `vk-2-icon-goods-list`,则组件的 `customPrefix` 属性自动识别为 `vk-2-icon` ,`name`属性 自动识别为 `goods-list` +## 1.3.7(2022-06-10) +* 【优化】组件 `u-action-sheet` `u-calendar` `u-dropdown-item` `u-field` `u-input` `u-keyboard` `u-modal` `u-radio-group` `u-rate` `u-search` `u-slider` `u-switch` `u-tabbar` `u-waterfall` 在 `vue3` 模式下的细节问题。 +## 1.3.6(2022-06-10) +* 【优化】组件 `u-action-sheet` `u-calendar` `u-dropdown-item` `u-field` `u-input` `u-keyboard` `u-modal` `u-radio-group` `u-rate` `u-search` `u-slider` `u-switch` `u-tabbar` `u-waterfall` 在 `vue3` 模式下的细节问题。 +## 1.3.5(2022-05-28) +* 【优化】组件 `u-mask` `u-popup` `u-select` `u-modal` `u-keyboard` `u-calendar` `u-action-sheet` `u-picker` 均新增 `blur` 属性,可用于设置弹出遮罩的模糊度,默认为0(不模糊) +* ![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-cf0c5e69-620c-4f3c-84ab-f4619262939f/49b773a3-273f-4b1c-95e8-a42dcba1a53c.png) +## 1.3.4(2022-05-03) +* 【修复】`u-tabs` 组件细节问题。 +## 1.1.4(2022-03-22) +* 【修复】`u-field` 组件 `arrowDirection` 属性无效的问题。 +## 1.1.3(2022-03-21) +* 【优化】部分细节。 +## 1.1.2(2022-03-21) +* 【优化】部分细节。 +## 1.1.1(2022-03-17) +* 【优化】部分细节。 +## 1.1.0(2022-03-12) +* 【重要】`u-picker` 组件新增 `regionDiscern` 方法 智能识别省市区街道地址 +如将字符串 `浙江省杭州市西湖区希望路1333弄是啊我庭12号楼1203` 中识别为 +```json +{ + "province": { + "code": "330000", + "name": "浙江省" + }, + "city": { + "code": "330100", + "name": "杭州市" + }, + "area": { + "code": "330106", + "name": "西湖区" + }, + "address": "龙井路1号", + "formatted_address": "浙江省杭州市西湖区龙井路1号" +} +``` +而组件的 `addressDiscern` 方法还可以识别收货信息,如 `张三 13888888888 上海市嘉定区希望路1333弄是啊我庭12号楼1203` 中识别姓名、手机号、地址(支持多种格式) +## 1.0.13(2022-03-12) +* 【优化】部分细节。 +## 1.0.12(2022-03-09) +* 【修复】`u-radio-group` 在 vue3 模式下,设置默认值可能会无效的问题。 +## 1.0.11(2022-03-07) +* 【优化】部分细节。 +## 1.0.10(2022-03-05) +* 【修复】`u-radio` 中的值相等的判断 == 改为 === +* 【优化】部分注释的错别字。 +## 1.0.9(2022-03-03) +* 【修复】`u-parse` 在 vue3模式下编译到app无法正常显示的问题。 +## 1.0.8(2022-02-26) +* 【优化】`u-form` 组件新增2个属性 `inputAlign` 和 `clearable` 用于统一设置表单内所有 `u-input` 组件的对应属性默认值 +* 【优化】更新城市数据源信息 +## 1.0.7(2022-02-25) +* 【重要】`u-picker` 组件新增 `addressDiscern` 方法 智能识别收货信息 + +如在 `张三 13888888888 上海市嘉定区希望路1333弄是啊我庭12号楼1203` 中识别姓名、手机号、地址(支持多种格式) +即使这样的字符串也能识别 `!!!!~~~$张三~~~上海市嘉定区希望路1333弄是啊我庭12号楼1203【【【【13888888888】` +## 1.0.6(2022-02-24) +* 【优化】`u-form-item` 组件的 `prop` 属性支持 a.b 形式 +## 1.0.5(2022-01-11) +* 【修复】`u-sticky` 组件 在微信小程序中无法正常吸顶的问题 +## 1.0.4(2021-12-31) +* 【优化】`u-dropdown-item` 组件 0和"" 无法区分的问题。 +* 【修复】`u-modal` 在Vue3版本中使用了mask-close-able属性无效的问题 +## 1.0.3(2021-12-20) +【优化】u-icon在微信小程序下可能会显示null字符串的问题 +## 1.0.2(2021-12-09) +* 1、【优化】`u-button` 组件新增 `timerId` 属性 +* 之前的效果是:所有按钮一定时间内只能点击1次(`共用计算时间`)导致点击按钮A后无法马上点击按钮B +* 优化的效果是:每个按钮一定时间内只能点击1次(`分开计算时间`)且支持设置相同的 timerId 来达到指定按钮 `共用计算时间` +## 1.0.1(2021-11-22) +* 修复 u-parse 组件在微信小程序上的显示问题。 +## 1.0.0(2021-11-18) +uView Vue3.0 横空出世,继承uView1.0意志,再战江湖,风云再起!by vk 2021-11-18 diff --git a/src/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue b/src/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue new file mode 100644 index 0000000..c5261a1 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue b/src/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue new file mode 100644 index 0000000..48b3d85 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue b/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue new file mode 100644 index 0000000..a48dd54 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js b/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js new file mode 100644 index 0000000..6dac900 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js @@ -0,0 +1,1256 @@ +/** + * we-cropper v1.3.9 + * (c) 2020 dlhandsome + * @license MIT + */ +'use strict'; + +var device = void 0; +var TOUCH_STATE = ['touchstarted', 'touchmoved', 'touchended']; + +function firstLetterUpper(str) { + return str.charAt(0).toUpperCase() + str.slice(1) +} + +function setTouchState(instance) { + var arg = [], + len = arguments.length - 1; + while (len-- > 0) arg[len] = arguments[len + 1]; + + TOUCH_STATE.forEach(function(key, i) { + if (arg[i] !== undefined) { + instance[key] = arg[i]; + } + }); +} + +function validator(instance, o) { + Object.defineProperties(instance, o); +} + +function getDevice() { + if (!device) { + device = uni.getSystemInfoSync(); + } + return device +} + +var tmp = {}; + +var ref = getDevice(); +var pixelRatio = ref.pixelRatio; + +var DEFAULT = { + id: { + default: 'cropper', + get: function get() { + return tmp.id + }, + set: function set(value) { + if (typeof(value) !== 'string') { + console.error(("id:" + value + " is invalid")); + } + tmp.id = value; + } + }, + width: { + default: 750, + get: function get() { + return tmp.width + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("width:" + value + " is invalid")); + } + tmp.width = value; + } + }, + height: { + default: 750, + get: function get() { + return tmp.height + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("height:" + value + " is invalid")); + } + tmp.height = value; + } + }, + pixelRatio: { + default: pixelRatio, + get: function get() { + return tmp.pixelRatio + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("pixelRatio:" + value + " is invalid")); + } + tmp.pixelRatio = value; + } + }, + scale: { + default: 2.5, + get: function get() { + return tmp.scale + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("scale:" + value + " is invalid")); + } + tmp.scale = value; + } + }, + zoom: { + default: 5, + get: function get() { + return tmp.zoom + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("zoom:" + value + " is invalid")); + } else if (value < 0 || value > 10) { + console.error("zoom should be ranged in 0 ~ 10"); + } + tmp.zoom = value; + } + }, + src: { + default: '', + get: function get() { + return tmp.src + }, + set: function set(value) { + if (typeof(value) !== 'string') { + console.error(("src:" + value + " is invalid")); + } + tmp.src = value; + } + }, + cut: { + default: {}, + get: function get() { + return tmp.cut + }, + set: function set(value) { + if (typeof(value) !== 'object') { + console.error(("cut:" + value + " is invalid")); + } + tmp.cut = value; + } + }, + boundStyle: { + default: {}, + get: function get() { + return tmp.boundStyle + }, + set: function set(value) { + if (typeof(value) !== 'object') { + console.error(("boundStyle:" + value + " is invalid")); + } + tmp.boundStyle = value; + } + }, + onReady: { + default: null, + get: function get() { + return tmp.ready + }, + set: function set(value) { + tmp.ready = value; + } + }, + onBeforeImageLoad: { + default: null, + get: function get() { + return tmp.beforeImageLoad + }, + set: function set(value) { + tmp.beforeImageLoad = value; + } + }, + onImageLoad: { + default: null, + get: function get() { + return tmp.imageLoad + }, + set: function set(value) { + tmp.imageLoad = value; + } + }, + onBeforeDraw: { + default: null, + get: function get() { + return tmp.beforeDraw + }, + set: function set(value) { + tmp.beforeDraw = value; + } + } +}; + +var ref$1 = getDevice(); +var windowWidth = ref$1.windowWidth; + +function prepare() { + var self = this; + + // v1.4.0 版本中将不再自动绑定we-cropper实例 + self.attachPage = function() { + var pages = getCurrentPages(); + // 获取到当前page上下文 + var pageContext = pages[pages.length - 1]; + // 把this依附在Page上下文的wecropper属性上,便于在page钩子函数中访问 + Object.defineProperty(pageContext, 'wecropper', { + get: function get() { + console.warn( + 'Instance will not be automatically bound to the page after v1.4.0\n\n' + + 'Please use a custom instance name instead\n\n' + + 'Example: \n' + + 'this.mycropper = new WeCropper(options)\n\n' + + '// ...\n' + + 'this.mycropper.getCropperImage()' + ); + return self + }, + configurable: true + }); + }; + + self.createCtx = function() { + var id = self.id; + var targetId = self.targetId; + + if (id) { + self.ctx = self.ctx || uni.createCanvasContext(id); + self.targetCtx = self.targetCtx || uni.createCanvasContext(targetId); + } else { + console.error("constructor: create canvas context failed, 'id' must be valuable"); + } + }; + + self.deviceRadio = windowWidth / 750; +} + +var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== + 'undefined' ? self : {}; + + + + + +function createCommonjsModule(fn, module) { + return module = { + exports: {} + }, fn(module, module.exports), module.exports; +} + +var tools = createCommonjsModule(function(module, exports) { + /** + * String type check + */ + exports.isStr = function(v) { + return typeof v === 'string'; + }; + /** + * Number type check + */ + exports.isNum = function(v) { + return typeof v === 'number'; + }; + /** + * Array type check + */ + exports.isArr = Array.isArray; + /** + * undefined type check + */ + exports.isUndef = function(v) { + return v === undefined; + }; + + exports.isTrue = function(v) { + return v === true; + }; + + exports.isFalse = function(v) { + return v === false; + }; + /** + * Function type check + */ + exports.isFunc = function(v) { + return typeof v === 'function'; + }; + /** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + */ + exports.isObj = exports.isObject = function(obj) { + return obj !== null && typeof obj === 'object' + }; + + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + var _toString = Object.prototype.toString; + exports.isPlainObject = function(obj) { + return _toString.call(obj) === '[object Object]' + }; + + /** + * Check whether the object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + exports.hasOwn = function(obj, key) { + return hasOwnProperty.call(obj, key) + }; + + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/) + */ + exports.noop = function(a, b, c) {}; + + /** + * Check if val is a valid array index. + */ + exports.isValidArrayIndex = function(val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val) + }; +}); + +var tools_7 = tools.isFunc; +var tools_10 = tools.isPlainObject; + +var EVENT_TYPE = ['ready', 'beforeImageLoad', 'beforeDraw', 'imageLoad']; + +function observer() { + var self = this; + + self.on = function(event, fn) { + if (EVENT_TYPE.indexOf(event) > -1) { + if (tools_7(fn)) { + event === 'ready' ? + fn(self) : + self[("on" + (firstLetterUpper(event)))] = fn; + } + } else { + console.error(("event: " + event + " is invalid")); + } + return self + }; +} + +function wxPromise(fn) { + return function(obj) { + var args = [], + len = arguments.length - 1; + while (len-- > 0) args[len] = arguments[len + 1]; + + if (obj === void 0) obj = {}; + return new Promise(function(resolve, reject) { + obj.success = function(res) { + resolve(res); + }; + obj.fail = function(err) { + reject(err); + }; + fn.apply(void 0, [obj].concat(args)); + }) + } +} + +function draw(ctx, reserve) { + if (reserve === void 0) reserve = false; + + return new Promise(function(resolve) { + ctx.draw(reserve, resolve); + }) +} + +var getImageInfo = wxPromise(uni.getImageInfo); + +var canvasToTempFilePath = wxPromise(uni.canvasToTempFilePath); + +var base64 = createCommonjsModule(function(module, exports) { + /*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */ + (function(root) { + + // Detect free variables `exports`. + var freeExports = 'object' == 'object' && exports; + + // Detect free variable `module`. + var freeModule = 'object' == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, and use + // it as `root`. + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var InvalidCharacterError = function(message) { + this.message = message; + }; + InvalidCharacterError.prototype = new Error; + InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + + var error = function(message) { + // Note: the error messages used throughout this file match those used by + // the native `atob`/`btoa` implementation in Chromium. + throw new InvalidCharacterError(message); + }; + + var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // http://whatwg.org/html/common-microsyntaxes.html#space-character + var REGEX_SPACE_CHARACTERS = /[\t\n\f\r ]/g; + + // `decode` is designed to be fully compatible with `atob` as described in the + // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob + // The optimized base64-decoding algorithm used is based on @atk’s excellent + // implementation. https://gist.github.com/atk/1020396 + var decode = function(input) { + input = String(input) + .replace(REGEX_SPACE_CHARACTERS, ''); + var length = input.length; + if (length % 4 == 0) { + input = input.replace(/==?$/, ''); + length = input.length; + } + if ( + length % 4 == 1 || + // http://whatwg.org/C#alphanumeric-ascii-characters + /[^+a-zA-Z0-9/]/.test(input) + ) { + error( + 'Invalid character: the string to be decoded is not correctly encoded.' + ); + } + var bitCounter = 0; + var bitStorage; + var buffer; + var output = ''; + var position = -1; + while (++position < length) { + buffer = TABLE.indexOf(input.charAt(position)); + bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer; + // Unless this is the first of a group of 4 characters… + if (bitCounter++ % 4) { + // …convert the first 8 bits to a single ASCII character. + output += String.fromCharCode( + 0xFF & bitStorage >> (-2 * bitCounter & 6) + ); + } + } + return output; + }; + + // `encode` is designed to be fully compatible with `btoa` as described in the + // HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa + var encode = function(input) { + input = String(input); + if (/[^\0-\xFF]/.test(input)) { + // Note: no need to special-case astral symbols here, as surrogates are + // matched, and the input is supposed to only contain ASCII anyway. + error( + 'The string to be encoded contains characters outside of the ' + + 'Latin1 range.' + ); + } + var padding = input.length % 3; + var output = ''; + var position = -1; + var a; + var b; + var c; + var buffer; + // Make sure any padding is handled outside of the loop. + var length = input.length - padding; + + while (++position < length) { + // Read three bytes, i.e. 24 bits. + a = input.charCodeAt(position) << 16; + b = input.charCodeAt(++position) << 8; + c = input.charCodeAt(++position); + buffer = a + b + c; + // Turn the 24 bits into four chunks of 6 bits each, and append the + // matching character for each of them to the output. + output += ( + TABLE.charAt(buffer >> 18 & 0x3F) + + TABLE.charAt(buffer >> 12 & 0x3F) + + TABLE.charAt(buffer >> 6 & 0x3F) + + TABLE.charAt(buffer & 0x3F) + ); + } + + if (padding == 2) { + a = input.charCodeAt(position) << 8; + b = input.charCodeAt(++position); + buffer = a + b; + output += ( + TABLE.charAt(buffer >> 10) + + TABLE.charAt((buffer >> 4) & 0x3F) + + TABLE.charAt((buffer << 2) & 0x3F) + + '=' + ); + } else if (padding == 1) { + buffer = input.charCodeAt(position); + output += ( + TABLE.charAt(buffer >> 2) + + TABLE.charAt((buffer << 4) & 0x3F) + + '==' + ); + } + + return output; + }; + + var base64 = { + 'encode': encode, + 'decode': decode, + 'version': '0.1.0' + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof undefined == 'function' && + typeof undefined.amd == 'object' && + undefined.amd + ) { + undefined(function() { + return base64; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = base64; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in base64) { + base64.hasOwnProperty(key) && (freeExports[key] = base64[key]); + } + } + } else { // in Rhino or a web browser + root.base64 = base64; + } + + }(commonjsGlobal)); +}); + +function makeURI(strData, type) { + return 'data:' + type + ';base64,' + strData +} + +function fixType(type) { + type = type.toLowerCase().replace(/jpg/i, 'jpeg'); + var r = type.match(/png|jpeg|bmp|gif/)[0]; + return 'image/' + r +} + +function encodeData(data) { + var str = ''; + if (typeof data === 'string') { + str = data; + } else { + for (var i = 0; i < data.length; i++) { + str += String.fromCharCode(data[i]); + } + } + return base64.encode(str) +} + +/** + * 获取图像区域隐含的像素数据 + * @param canvasId canvas标识 + * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标 + * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标 + * @param width 将要被提取的图像数据矩形区域的宽度 + * @param height 将要被提取的图像数据矩形区域的高度 + * @param done 完成回调 + */ +function getImageData(canvasId, x, y, width, height, done) { + uni.canvasGetImageData({ + canvasId: canvasId, + x: x, + y: y, + width: width, + height: height, + success: function success(res) { + done(res, null); + }, + fail: function fail(res) { + done(null, res); + } + }); +} + +/** + * 生成bmp格式图片 + * 按照规则生成图片响应头和响应体 + * @param oData 用来描述 canvas 区域隐含的像素数据 { data, width, height } = oData + * @returns {*} base64字符串 + */ +function genBitmapImage(oData) { + // + // BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx + // BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx + // + var biWidth = oData.width; + var biHeight = oData.height; + var biSizeImage = biWidth * biHeight * 3; + var bfSize = biSizeImage + 54; // total header size = 54 bytes + + // + // typedef struct tagBITMAPFILEHEADER { + // WORD bfType; + // DWORD bfSize; + // WORD bfReserved1; + // WORD bfReserved2; + // DWORD bfOffBits; + // } BITMAPFILEHEADER; + // + var BITMAPFILEHEADER = [ + // WORD bfType -- The file type signature; must be "BM" + 0x42, 0x4D, + // DWORD bfSize -- The size, in bytes, of the bitmap file + bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff, + // WORD bfReserved1 -- Reserved; must be zero + 0, 0, + // WORD bfReserved2 -- Reserved; must be zero + 0, 0, + // DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits. + 54, 0, 0, 0 + ]; + + // + // typedef struct tagBITMAPINFOHEADER { + // DWORD biSize; + // LONG biWidth; + // LONG biHeight; + // WORD biPlanes; + // WORD biBitCount; + // DWORD biCompression; + // DWORD biSizeImage; + // LONG biXPelsPerMeter; + // LONG biYPelsPerMeter; + // DWORD biClrUsed; + // DWORD biClrImportant; + // } BITMAPINFOHEADER, *PBITMAPINFOHEADER; + // + var BITMAPINFOHEADER = [ + // DWORD biSize -- The number of bytes required by the structure + 40, 0, 0, 0, + // LONG biWidth -- The width of the bitmap, in pixels + biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff, + // LONG biHeight -- The height of the bitmap, in pixels + biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff, + // WORD biPlanes -- The number of planes for the target device. This value must be set to 1 + 1, 0, + // WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap + // has a maximum of 2^24 colors (16777216, Truecolor) + 24, 0, + // DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed + 0, 0, 0, 0, + // DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps + biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff, + // LONG biXPelsPerMeter, unused + 0, 0, 0, 0, + // LONG biYPelsPerMeter, unused + 0, 0, 0, 0, + // DWORD biClrUsed, the number of color indexes of palette, unused + 0, 0, 0, 0, + // DWORD biClrImportant, unused + 0, 0, 0, 0 + ]; + + var iPadding = (4 - ((biWidth * 3) % 4)) % 4; + + var aImgData = oData.data; + + var strPixelData = ''; + var biWidth4 = biWidth << 2; + var y = biHeight; + var fromCharCode = String.fromCharCode; + + do { + var iOffsetY = biWidth4 * (y - 1); + var strPixelRow = ''; + for (var x = 0; x < biWidth; x++) { + var iOffsetX = x << 2; + strPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) + + fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) + + fromCharCode(aImgData[iOffsetY + iOffsetX]); + } + + for (var c = 0; c < iPadding; c++) { + strPixelRow += String.fromCharCode(0); + } + + strPixelData += strPixelRow; + } while (--y) + + var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData); + + return strEncoded +} + +/** + * 转换为图片base64 + * @param canvasId canvas标识 + * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标 + * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标 + * @param width 将要被提取的图像数据矩形区域的宽度 + * @param height 将要被提取的图像数据矩形区域的高度 + * @param type 转换图片类型 + * @param done 完成回调 + */ +function convertToImage(canvasId, x, y, width, height, type, done) { + if (done === void 0) done = function() {}; + + if (type === undefined) { + type = 'png'; + } + type = fixType(type); + if (/bmp/.test(type)) { + getImageData(canvasId, x, y, width, height, function(data, err) { + var strData = genBitmapImage(data); + tools_7(done) && done(makeURI(strData, 'image/' + type), err); + }); + } else { + console.error('暂不支持生成\'' + type + '\'类型的base64图片'); + } +} + +var CanvasToBase64 = { + convertToImage: convertToImage, + // convertToPNG: function (width, height, done) { + // return convertToImage(width, height, 'png', done) + // }, + // convertToJPEG: function (width, height, done) { + // return convertToImage(width, height, 'jpeg', done) + // }, + // convertToGIF: function (width, height, done) { + // return convertToImage(width, height, 'gif', done) + // }, + convertToBMP: function(ref, done) { + if (ref === void 0) ref = {}; + var canvasId = ref.canvasId; + var x = ref.x; + var y = ref.y; + var width = ref.width; + var height = ref.height; + if (done === void 0) done = function() {}; + + return convertToImage(canvasId, x, y, width, height, 'bmp', done) + } +}; + +function methods() { + var self = this; + + var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度 + var boundHeight = self.height; // 裁剪框默认高度,即整个画布高度 + + var id = self.id; + var targetId = self.targetId; + var pixelRatio = self.pixelRatio; + + var ref = self.cut; + var x = ref.x; + if (x === void 0) x = 0; + var y = ref.y; + if (y === void 0) y = 0; + var width = ref.width; + if (width === void 0) width = boundWidth; + var height = ref.height; + if (height === void 0) height = boundHeight; + + self.updateCanvas = function(done) { + if (self.croperTarget) { + // 画布绘制图片 + self.ctx.drawImage( + self.croperTarget, + self.imgLeft, + self.imgTop, + self.scaleWidth, + self.scaleHeight + ); + } + tools_7(self.onBeforeDraw) && self.onBeforeDraw(self.ctx, self); + + self.setBoundStyle(self.boundStyle); // 设置边界样式 + + self.ctx.draw(false, done); + return self + }; + + self.pushOrigin = self.pushOrign = function(src) { + self.src = src; + + tools_7(self.onBeforeImageLoad) && self.onBeforeImageLoad(self.ctx, self); + + return getImageInfo({ + src: src + }) + .then(function(res) { + var innerAspectRadio = res.width / res.height; + var customAspectRadio = width / height; + + self.croperTarget = res.path; + + if (innerAspectRadio < customAspectRadio) { + self.rectX = x; + self.baseWidth = width; + self.baseHeight = width / innerAspectRadio; + self.rectY = y - Math.abs((height - self.baseHeight) / 2); + } else { + self.rectY = y; + self.baseWidth = height * innerAspectRadio; + self.baseHeight = height; + self.rectX = x - Math.abs((width - self.baseWidth) / 2); + } + + self.imgLeft = self.rectX; + self.imgTop = self.rectY; + self.scaleWidth = self.baseWidth; + self.scaleHeight = self.baseHeight; + + self.update(); + + return new Promise(function(resolve) { + self.updateCanvas(resolve); + }) + }) + .then(function() { + tools_7(self.onImageLoad) && self.onImageLoad(self.ctx, self); + }) + }; + + self.removeImage = function() { + self.src = ''; + self.croperTarget = ''; + return draw(self.ctx) + }; + + self.getCropperBase64 = function(done) { + if (done === void 0) done = function() {}; + + CanvasToBase64.convertToBMP({ + canvasId: id, + x: x, + y: y, + width: width, + height: height + }, done); + }; + + self.getCropperImage = function(opt, fn) { + var customOptions = opt; + + var canvasOptions = { + canvasId: id, + x: x, + y: y, + width: width, + height: height + }; + + var task = function() { + return Promise.resolve(); + }; + + if ( + tools_10(customOptions) && + customOptions.original + ) { + // original mode + task = function() { + self.targetCtx.drawImage( + self.croperTarget, + self.imgLeft * pixelRatio, + self.imgTop * pixelRatio, + self.scaleWidth * pixelRatio, + self.scaleHeight * pixelRatio + ); + + canvasOptions = { + canvasId: targetId, + x: x * pixelRatio, + y: y * pixelRatio, + width: width * pixelRatio, + height: height * pixelRatio + }; + + return draw(self.targetCtx) + }; + } + + return task() + .then(function() { + if (tools_10(customOptions)) { + canvasOptions = Object.assign({}, canvasOptions, customOptions); + } + + if (tools_7(customOptions)) { + fn = customOptions; + } + + var arg = canvasOptions.componentContext ? [canvasOptions, canvasOptions.componentContext] : [canvasOptions]; + + return canvasToTempFilePath.apply(null, arg) + }) + .then(function(res) { + var tempFilePath = res.tempFilePath; + + return tools_7(fn) ? + fn.call(self, tempFilePath, null) : + tempFilePath + }) + .catch(function(err) { + if (tools_7(fn)) { + fn.call(self, null, err); + } else { + throw err + } + }) + }; +} + +/** + * 获取最新缩放值 + * @param oldScale 上一次触摸结束后的缩放值 + * @param oldDistance 上一次触摸结束后的双指距离 + * @param zoom 缩放系数 + * @param touch0 第一指touch对象 + * @param touch1 第二指touch对象 + * @returns {*} + */ +var getNewScale = function(oldScale, oldDistance, zoom, touch0, touch1) { + var xMove, yMove, newDistance; + // 计算二指最新距离 + xMove = Math.round(touch1.x - touch0.x); + yMove = Math.round(touch1.y - touch0.y); + newDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove)); + + return oldScale + 0.001 * zoom * (newDistance - oldDistance) +}; + +function update() { + var self = this; + + if (!self.src) { + return + } + + self.__oneTouchStart = function(touch) { + self.touchX0 = Math.round(touch.x); + self.touchY0 = Math.round(touch.y); + }; + + self.__oneTouchMove = function(touch) { + var xMove, yMove; + // 计算单指移动的距离 + if (self.touchended) { + return self.updateCanvas() + } + xMove = Math.round(touch.x - self.touchX0); + yMove = Math.round(touch.y - self.touchY0); + + var imgLeft = Math.round(self.rectX + xMove); + var imgTop = Math.round(self.rectY + yMove); + + self.outsideBound(imgLeft, imgTop); + + self.updateCanvas(); + }; + + self.__twoTouchStart = function(touch0, touch1) { + var xMove, yMove, oldDistance; + + self.touchX1 = Math.round(self.rectX + self.scaleWidth / 2); + self.touchY1 = Math.round(self.rectY + self.scaleHeight / 2); + + // 计算两指距离 + xMove = Math.round(touch1.x - touch0.x); + yMove = Math.round(touch1.y - touch0.y); + oldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove)); + + self.oldDistance = oldDistance; + }; + + self.__twoTouchMove = function(touch0, touch1) { + var oldScale = self.oldScale; + var oldDistance = self.oldDistance; + var scale = self.scale; + var zoom = self.zoom; + + self.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1); + + // 设定缩放范围 + self.newScale <= 1 && (self.newScale = 1); + self.newScale >= scale && (self.newScale = scale); + + self.scaleWidth = Math.round(self.newScale * self.baseWidth); + self.scaleHeight = Math.round(self.newScale * self.baseHeight); + var imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2); + var imgTop = Math.round(self.touchY1 - self.scaleHeight / 2); + + self.outsideBound(imgLeft, imgTop); + + self.updateCanvas(); + }; + + self.__xtouchEnd = function() { + self.oldScale = self.newScale; + self.rectX = self.imgLeft; + self.rectY = self.imgTop; + }; +} + +var handle = { + // 图片手势初始监测 + touchStart: function touchStart(e) { + var self = this; + var ref = e.touches; + var touch0 = ref[0]; + var touch1 = ref[1]; + + if (!self.src) { + return + } + + setTouchState(self, true, null, null); + + // 计算第一个触摸点的位置,并参照改点进行缩放 + self.__oneTouchStart(touch0); + + // 两指手势触发 + if (e.touches.length >= 2) { + self.__twoTouchStart(touch0, touch1); + } + }, + + // 图片手势动态缩放 + touchMove: function touchMove(e) { + var self = this; + var ref = e.touches; + var touch0 = ref[0]; + var touch1 = ref[1]; + + if (!self.src) { + return + } + + setTouchState(self, null, true); + + // 单指手势时触发 + if (e.touches.length === 1) { + self.__oneTouchMove(touch0); + } + // 两指手势触发 + if (e.touches.length >= 2) { + self.__twoTouchMove(touch0, touch1); + } + }, + + touchEnd: function touchEnd(e) { + var self = this; + + if (!self.src) { + return + } + + setTouchState(self, false, false, true); + self.__xtouchEnd(); + } +}; + +function cut() { + var self = this; + var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度 + var boundHeight = self.height; + // 裁剪框默认高度,即整个画布高度 + var ref = self.cut; + var x = ref.x; + if (x === void 0) x = 0; + var y = ref.y; + if (y === void 0) y = 0; + var width = ref.width; + if (width === void 0) width = boundWidth; + var height = ref.height; + if (height === void 0) height = boundHeight; + + /** + * 设置边界 + * @param imgLeft 图片左上角横坐标值 + * @param imgTop 图片左上角纵坐标值 + */ + self.outsideBound = function(imgLeft, imgTop) { + self.imgLeft = imgLeft >= x ? + x : + self.scaleWidth + imgLeft - x <= width ? + x + width - self.scaleWidth : + imgLeft; + + self.imgTop = imgTop >= y ? + y : + self.scaleHeight + imgTop - y <= height ? + y + height - self.scaleHeight : + imgTop; + }; + + /** + * 设置边界样式 + * @param color 边界颜色 + */ + self.setBoundStyle = function(ref) { + if (ref === void 0) ref = {}; + var color = ref.color; + if (color === void 0) color = '#04b00f'; + var mask = ref.mask; + if (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)'; + var lineWidth = ref.lineWidth; + if (lineWidth === void 0) lineWidth = 1; + + var half = lineWidth / 2; + var boundOption = [{ + start: { + x: x - half, + y: y + 10 - half + }, + step1: { + x: x - half, + y: y - half + }, + step2: { + x: x + 10 - half, + y: y - half + } + }, + { + start: { + x: x - half, + y: y + height - 10 + half + }, + step1: { + x: x - half, + y: y + height + half + }, + step2: { + x: x + 10 - half, + y: y + height + half + } + }, + { + start: { + x: x + width - 10 + half, + y: y - half + }, + step1: { + x: x + width + half, + y: y - half + }, + step2: { + x: x + width + half, + y: y + 10 - half + } + }, + { + start: { + x: x + width + half, + y: y + height - 10 + half + }, + step1: { + x: x + width + half, + y: y + height + half + }, + step2: { + x: x + width - 10 + half, + y: y + height + half + } + } + ]; + + // 绘制半透明层 + self.ctx.beginPath(); + self.ctx.setFillStyle(mask); + self.ctx.fillRect(0, 0, x, boundHeight); + self.ctx.fillRect(x, 0, width, y); + self.ctx.fillRect(x, y + height, width, boundHeight - y - height); + self.ctx.fillRect(x + width, 0, boundWidth - x - width, boundHeight); + self.ctx.fill(); + + boundOption.forEach(function(op) { + self.ctx.beginPath(); + self.ctx.setStrokeStyle(color); + self.ctx.setLineWidth(lineWidth); + self.ctx.moveTo(op.start.x, op.start.y); + self.ctx.lineTo(op.step1.x, op.step1.y); + self.ctx.lineTo(op.step2.x, op.step2.y); + self.ctx.stroke(); + }); + }; +} + +var version = "1.3.9"; + +var WeCropper = function WeCropper(params) { + var self = this; + var _default = {}; + + validator(self, DEFAULT); + + Object.keys(DEFAULT).forEach(function(key) { + _default[key] = DEFAULT[key].default; + }); + Object.assign(self, _default, params); + + self.prepare(); + self.attachPage(); + self.createCtx(); + self.observer(); + self.cutt(); + self.methods(); + self.init(); + self.update(); + + return self +}; + +WeCropper.prototype.init = function init() { + var self = this; + var src = self.src; + + self.version = version; + + typeof self.onReady === 'function' && self.onReady(self.ctx, self); + + if (src) { + self.pushOrign(src); + } else { + self.updateCanvas(); + } + setTouchState(self, false, false, false); + + self.oldScale = 1; + self.newScale = 1; + + return self +}; + +Object.assign(WeCropper.prototype, handle); + +WeCropper.prototype.prepare = prepare; +WeCropper.prototype.observer = observer; +WeCropper.prototype.methods = methods; +WeCropper.prototype.cutt = cut; +WeCropper.prototype.update = update; + +export default WeCropper; diff --git a/src/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue b/src/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue new file mode 100644 index 0000000..ab21c46 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue b/src/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue new file mode 100644 index 0000000..7970fc7 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue b/src/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue new file mode 100644 index 0000000..fc99562 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-button/u-button.vue b/src/uni_modules/vk-uview-ui/components/u-button/u-button.vue new file mode 100644 index 0000000..2647afc --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-button/u-button.vue @@ -0,0 +1,602 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue b/src/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue new file mode 100644 index 0000000..fe9f2dc --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue @@ -0,0 +1,666 @@ + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/src/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 0000000..e55db26 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-card/u-card.vue b/src/uni_modules/vk-uview-ui/components/u-card/u-card.vue new file mode 100644 index 0000000..03f9924 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-card/u-card.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue b/src/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue new file mode 100644 index 0000000..3fbca72 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue b/src/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue new file mode 100644 index 0000000..b512d80 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/src/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 0000000..18c39e7 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue b/src/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue new file mode 100644 index 0000000..a0498fe --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue b/src/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 0000000..46e7c18 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-col/u-col.vue b/src/uni_modules/vk-uview-ui/components/u-col/u-col.vue new file mode 100644 index 0000000..fc47dfa --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-col/u-col.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue b/src/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 0000000..963e98f --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue b/src/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue new file mode 100644 index 0000000..f6e4bf0 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue b/src/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue new file mode 100644 index 0000000..709ca5c --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue b/src/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue new file mode 100644 index 0000000..0d7cc21 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-count-down/utils.js b/src/uni_modules/vk-uview-ui/components/u-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/src/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue b/src/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue new file mode 100644 index 0000000..1825072 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue b/src/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue new file mode 100644 index 0000000..6f8d7e6 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/src/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 0000000..6ed9301 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue b/src/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue new file mode 100644 index 0000000..b9438b4 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue b/src/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue new file mode 100644 index 0000000..2c77b24 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/src/uni_modules/vk-uview-ui/components/u-field/u-field.vue b/src/uni_modules/vk-uview-ui/components/u-field/u-field.vue new file mode 100644 index 0000000..efa31e6 --- /dev/null +++ b/src/uni_modules/vk-uview-ui/components/u-field/u-field.vue @@ -0,0 +1,402 @@ +