From d9783e74d7e21b42ee12a86867663f9c9caccdff Mon Sep 17 00:00:00 2001
From: aiShuiJiaoDeXioShou <2832294398@qq.com>
Date: Tue, 1 Oct 2024 09:11:18 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
acdr-ui/.eslintrc-auto-import.json | 5 +-
acdr-ui/.gitignore | 4 +-
acdr-ui/env/.env | 41 +-
acdr-ui/env/.env.development | 30 +
acdr-ui/env/.env.production | 13 +-
acdr-ui/index.html | 2 +-
acdr-ui/manifest.config.ts | 159 +-
acdr-ui/package.json | 2 +-
acdr-ui/pages.config.ts | 1059 ++++++-------
acdr-ui/src/App.vue | 55 +-
acdr-ui/src/components/AddressCell.vue | 11 +-
acdr-ui/src/components/EmptyState.vue | 33 +-
acdr-ui/src/components/Map.vue | 4 +
acdr-ui/src/components/PetSitterCard.vue | 2 +-
acdr-ui/src/components/Tabbar.vue | 6 +-
acdr-ui/src/interceptors/route.ts | 2 +-
acdr-ui/src/logic/pay.js | 1 +
acdr-ui/src/main.ts | 5 +-
acdr-ui/src/manifest.json | 66 +-
.../modules/mall/activity/groupon/detail.vue | 10 +-
.../modules/mall/activity/groupon/list.vue | 4 +-
.../modules/mall/activity/groupon/order.vue | 8 +-
acdr-ui/src/modules/mall/activity/index.vue | 8 +-
.../modules/mall/activity/seckill/list.vue | 8 +-
acdr-ui/src/modules/mall/app/sign.vue | 4 +-
.../mall/chat/components/messageList.vue | 4 +-
.../mall/chat/components/messageListItem.vue | 4 +-
.../modules/mall/chat/components/order.vue | 2 +-
.../mall/chat/components/select-popup.vue | 4 +-
.../mall/chat/components/toolsPopup.vue | 2 +-
acdr-ui/src/modules/mall/chat/index.vue | 8 +-
.../mall/commission/commission-ranking.vue | 6 +-
.../commission/components/account-info.vue | 6 +-
.../components/account-type-select.vue | 2 +-
.../commission/components/commission-auth.vue | 4 +-
.../commission/components/commission-info.vue | 2 +-
.../commission/components/commission-log.vue | 6 +-
.../commission/components/commission-menu.vue | 2 +-
acdr-ui/src/modules/mall/commission/goods.vue | 12 +-
acdr-ui/src/modules/mall/commission/index.vue | 2 +-
acdr-ui/src/modules/mall/commission/order.vue | 8 +-
.../src/modules/mall/commission/promoter.vue | 4 +-
acdr-ui/src/modules/mall/commission/team.vue | 4 +-
.../src/modules/mall/commission/wallet.vue | 8 +-
.../src/modules/mall/commission/withdraw.vue | 8 +-
acdr-ui/src/modules/mall/coupon/detail.vue | 12 +-
acdr-ui/src/modules/mall/coupon/list.vue | 6 +-
.../src/modules/mall/goods/comment/add.vue | 4 +-
.../src/modules/mall/goods/comment/list.vue | 2 +-
.../components/detail/detail-activity-tip.vue | 2 +-
.../components/detail/detail-comment-card.vue | 4 +-
.../components/detail/detail-content-card.vue | 2 +-
.../goods/components/detail/detail-navbar.vue | 6 +-
.../components/detail/detail-skeleton.vue | 2 +-
.../goods/components/detail/detail-tabbar.vue | 6 +-
.../components/groupon/groupon-card-list.vue | 6 +-
.../goods/components/list/list-goods-card.vue | 2 +-
.../goods/components/list/list-navbar.vue | 4 +-
acdr-ui/src/modules/mall/goods/groupon.vue | 8 +-
acdr-ui/src/modules/mall/goods/index.vue | 12 +-
acdr-ui/src/modules/mall/goods/list.vue | 6 +-
acdr-ui/src/modules/mall/goods/seckill.vue | 10 +-
acdr-ui/src/modules/mall/index/cart.vue | 4 +-
acdr-ui/src/modules/mall/index/category.vue | 8 +-
.../mall/index/components/first-one.vue | 2 +-
.../mall/index/components/first-two.vue | 4 +-
.../mall/index/components/second-one.vue | 2 +-
acdr-ui/src/modules/mall/index/index.vue | 79 +-
acdr-ui/src/modules/mall/index/login.vue | 2 +-
acdr-ui/src/modules/mall/index/page.vue | 2 +-
acdr-ui/src/modules/mall/index/search.vue | 2 +-
acdr-ui/src/modules/mall/index/user.vue | 2 +-
.../modules/mall/order/addressSelection.vue | 2 +-
.../modules/mall/order/aftersale/apply.vue | 12 +-
.../modules/mall/order/aftersale/detail.vue | 6 +-
.../src/modules/mall/order/aftersale/list.vue | 8 +-
.../modules/mall/order/aftersale/log-item.vue | 2 +-
.../src/modules/mall/order/aftersale/log.vue | 2 +-
.../mall/order/aftersale/return-delivery.vue | 6 +-
acdr-ui/src/modules/mall/order/confirm.vue | 8 +-
acdr-ui/src/modules/mall/order/detail.vue | 8 +-
.../src/modules/mall/order/express/log.vue | 4 +-
acdr-ui/src/modules/mall/order/list.vue | 8 +-
.../src/modules/mall/order/pickUpVerify.vue | 2 +-
acdr-ui/src/modules/mall/pay/index.vue | 10 +-
acdr-ui/src/modules/mall/pay/recharge-log.vue | 6 +-
acdr-ui/src/modules/mall/pay/recharge.vue | 8 +-
acdr-ui/src/modules/mall/pay/result.vue | 10 +-
acdr-ui/src/modules/mall/public/error.vue | 2 +-
acdr-ui/src/modules/mall/public/faq.vue | 2 +-
acdr-ui/src/modules/mall/public/richtext.vue | 2 +-
acdr-ui/src/modules/mall/public/setting.vue | 4 +-
.../src/modules/mall/user/address/edit.vue | 8 +-
.../src/modules/mall/user/address/list.vue | 6 +-
.../src/modules/mall/user/goods-collect.vue | 6 +-
acdr-ui/src/modules/mall/user/goods-log.vue | 6 +-
.../mall/user/goods_details_store/index.vue | 4 +-
acdr-ui/src/modules/mall/user/info.vue | 8 +-
.../src/modules/mall/user/wallet/money.vue | 8 +-
.../src/modules/mall/user/wallet/score.vue | 6 +-
acdr-ui/src/pages.json | 1030 ++++++-------
.../pages/address/components/AddAddress.vue | 156 --
acdr-ui/src/pages/address/index.vue | 191 ---
acdr-ui/src/pages/ai/ai-interactive-space.vue | 50 -
.../certification/components/certPopup.vue | 70 -
acdr-ui/src/pages/certification/index.vue | 201 ---
.../src/pages/certification/pet-sitter.vue | 155 --
acdr-ui/src/pages/extended/index.vue | 64 -
acdr-ui/src/pages/h5mall/index.vue | 67 -
acdr-ui/src/pages/index/components/hurry.vue | 2 +-
.../pages/index/components/profileInfo.vue | 4 +-
.../index/components/quickServiceCarousel.vue | 4 +-
.../index/components/recommendedServices.vue | 4 +-
acdr-ui/src/pages/index/index.vue | 102 +-
acdr-ui/src/pages/login/index.vue | 198 ---
acdr-ui/src/pages/login/phone.vue | 162 --
acdr-ui/src/pages/map/index.vue | 24 -
acdr-ui/src/pages/message/chat.vue | 171 ---
acdr-ui/src/pages/message/index.vue | 133 --
acdr-ui/src/pages/message/message-list.vue | 117 --
acdr-ui/src/pages/message/privatechat.vue | 40 -
acdr-ui/src/pages/my/index.vue | 421 ------
.../src/pages/order/components/OrderItem.vue | 281 ----
acdr-ui/src/pages/order/index.vue | 141 --
acdr-ui/src/pages/order/order-detail.vue | 142 --
acdr-ui/src/pages/order/take.vue | 109 --
acdr-ui/src/pages/others/agreement.vue | 16 -
acdr-ui/src/pages/others/null.vue | 11 -
acdr-ui/src/pages/others/official-account.vue | 86 --
acdr-ui/src/pages/permission/bind-phone.vue | 87 --
.../src/pages/permission/real-name-auth.vue | 141 --
acdr-ui/src/pages/pet/index.vue | 16 -
acdr-ui/src/pages/pet/pet-add-page.vue | 405 -----
acdr-ui/src/pages/pet/pet-detail-page.vue | 188 ---
acdr-ui/src/pages/push/door.vue | 374 -----
acdr-ui/src/pages/push/goods.vue | 42 -
acdr-ui/src/pages/push/index.vue | 101 --
acdr-ui/src/pages/push/share.vue | 195 ---
acdr-ui/src/pages/service/accompany.vue | 16 -
acdr-ui/src/pages/service/detail.vue | 443 ------
acdr-ui/src/pages/service/door.vue | 14 -
acdr-ui/src/pages/service/index.vue | 20 -
acdr-ui/src/pages/service/knowledge.vue | 16 -
acdr-ui/src/pages/service/my-service.vue | 111 --
acdr-ui/src/pages/service/search.vue | 246 ---
acdr-ui/src/pages/service/shop.vue | 20 -
acdr-ui/src/pages/service/slippery.vue | 177 ---
acdr-ui/src/pages/service/store.vue | 20 -
acdr-ui/src/pages/settings/index.vue | 251 ---
.../src/pages/space/components/UserPost.vue | 407 -----
acdr-ui/src/pages/space/index.vue | 400 -----
acdr-ui/src/pages/webview/webview.vue | 24 -
acdr-ui/src/service/mapService.js | 2 +-
acdr-ui/src/sheep/api/infra/file.js | 45 -
acdr-ui/src/sheep/api/member/address.js | 53 -
acdr-ui/src/sheep/api/member/auth.js | 132 --
acdr-ui/src/sheep/api/member/point.js | 19 -
acdr-ui/src/sheep/api/member/signin.js | 37 -
acdr-ui/src/sheep/api/member/social.js | 76 -
acdr-ui/src/sheep/api/member/user.js | 84 --
acdr-ui/src/sheep/api/migration/app.js | 21 -
acdr-ui/src/sheep/api/migration/index.js | 10 -
acdr-ui/src/sheep/api/migration/third.js | 18 -
acdr-ui/src/sheep/api/pay/channel.js | 14 -
acdr-ui/src/sheep/api/pay/order.js | 22 -
acdr-ui/src/sheep/api/pay/wallet.js | 68 -
acdr-ui/src/sheep/api/product/category.js | 21 -
acdr-ui/src/sheep/api/product/comment.js | 22 -
acdr-ui/src/sheep/api/product/favorite.js | 54 -
acdr-ui/src/sheep/api/product/history.js | 39 -
acdr-ui/src/sheep/api/product/spu.js | 41 -
acdr-ui/src/sheep/api/promotion/activity.js | 16 -
acdr-ui/src/sheep/api/promotion/article.js | 12 -
.../src/sheep/api/promotion/combination.js | 76 -
acdr-ui/src/sheep/api/promotion/coupon.js | 101 --
acdr-ui/src/sheep/api/promotion/diy.js | 56 -
acdr-ui/src/sheep/api/promotion/kefu.js | 31 -
.../src/sheep/api/promotion/rewardActivity.js | 14 -
acdr-ui/src/sheep/api/promotion/seckill.js | 33 -
acdr-ui/src/sheep/api/system/area.js | 13 -
acdr-ui/src/sheep/api/trade/afterSale.js | 63 -
acdr-ui/src/sheep/api/trade/brokerage.js | 93 --
acdr-ui/src/sheep/api/trade/cart.js | 50 -
acdr-ui/src/sheep/api/trade/config.js | 13 -
acdr-ui/src/sheep/api/trade/delivery.js | 31 -
acdr-ui/src/sheep/api/trade/order.js | 149 --
.../s-activity-pop/s-activity-pop.vue | 106 --
.../s-address-item/s-address-item.vue | 111 --
.../s-auth-modal/components/account-login.vue | 108 --
.../s-auth-modal/components/change-mobile.vue | 126 --
.../components/change-password.vue | 105 --
.../components/mp-authorization.vue | 153 --
.../components/reset-password.vue | 118 --
.../s-auth-modal/components/sms-login.vue | 120 --
.../sheep/components/s-auth-modal/index.scss | 151 --
.../components/s-auth-modal/s-auth-modal.vue | 244 ---
.../components/s-block-item/s-block-item.vue | 83 -
.../src/sheep/components/s-block/s-block.vue | 54 -
.../components/s-count-down/s-count-down.vue | 207 ---
.../s-coupon-block/s-coupon-block.vue | 182 ---
.../s-coupon-card/s-coupon-card.vue | 109 --
.../components/s-coupon-get/s-coupon-get.vue | 110 --
.../s-coupon-list/s-coupon-list.vue | 199 ---
.../s-coupon-select/s-coupon-select.vue | 156 --
.../components/navbar-item.vue | 67 -
.../s-custom-navbar/components/navbar.vue | 312 ----
.../s-custom-navbar/s-custom-navbar.vue | 198 ---
.../s-discount-list/s-discount-list.vue | 115 --
.../src/sheep/components/s-empty/s-empty.vue | 94 --
.../components/s-float-menu/s-float-menu.vue | 89 --
.../components/s-goods-card/s-goods-card.vue | 293 ----
.../s-goods-column/s-goods-column.vue | 751 ---------
.../components/s-goods-item/s-goods-item.vue | 182 ---
.../s-goods-scroll/s-goods-scroll.vue | 35 -
.../s-goods-shelves/s-goods-shelves.vue | 148 --
.../s-groupon-block/s-groupon-block.vue | 171 ---
.../s-hotzone-block/s-hotzone-block.vue | 46 -
.../s-image-banner/s-image-banner.vue | 46 -
.../s-image-block/s-image-block.vue | 29 -
.../components/s-image-cube/s-image-cube.vue | 111 --
.../sheep/components/s-layout/s-layout.vue | 247 ---
.../components/s-line-block/s-line-block.vue | 17 -
.../components/s-live-block/s-live-block.vue | 143 --
.../components/s-live-card/s-live-card.vue | 235 ---
.../s-menu-button/s-menu-button.vue | 372 -----
.../components/s-menu-grid/s-menu-grid.vue | 105 --
.../components/s-menu-list/s-menu-list.vue | 67 -
.../components/s-menu-tools/s-menu-tools.vue | 119 --
.../s-notice-block/s-notice-block.vue | 39 -
.../components/s-order-card/s-order-card.vue | 134 --
.../s-popup-image/s-popup-image.vue | 86 --
.../s-richtext-block/s-richtext-block.vue | 43 -
.../s-search-block/s-search-block.vue | 166 --
.../s-seckill-block/s-seckill-block.vue | 181 ---
.../s-select-groupon-sku.vue | 509 -------
.../s-select-seckill-sku.vue | 435 ------
.../components/s-select-sku/s-select-sku.vue | 429 ------
.../s-share-modal/canvas-poster/index.vue | 167 --
.../canvas-poster/poster/goods.js | 127 --
.../canvas-poster/poster/groupon.js | 124 --
.../canvas-poster/poster/index.js | 39 -
.../canvas-poster/poster/user.js | 76 -
.../s-share-modal/s-share-modal.vue | 208 ---
.../components/s-statusbar/s-statusbar.vue | 10 -
.../sheep/components/s-tabbar/s-tabbar.vue | 88 --
.../s-title-block/s-title-block.vue | 112 --
.../s-uploader/choose-and-upload-file.js | 213 ---
.../components/s-uploader/s-uploader.vue | 676 ---------
.../components/s-uploader/upload-file.vue | 333 ----
.../components/s-uploader/upload-image.vue | 306 ----
.../src/sheep/components/s-uploader/utils.js | 110 --
.../components/s-user-card/s-user-card.vue | 184 ---
.../s-video-block/s-video-block.vue | 33 -
.../s-wallet-card/s-wallet-card.vue | 133 --
acdr-ui/src/sheep/config/index.js | 23 -
acdr-ui/src/sheep/config/zIndex.js | 20 -
acdr-ui/src/sheep/helper/digit.js | 168 ---
acdr-ui/src/sheep/helper/index.js | 708 ---------
acdr-ui/src/sheep/helper/test.js | 285 ----
acdr-ui/src/sheep/helper/throttle.js | 31 -
acdr-ui/src/sheep/helper/tools.js | 67 -
acdr-ui/src/sheep/helper/utils.js | 172 ---
acdr-ui/src/sheep/hooks/useApp.js | 0
acdr-ui/src/sheep/hooks/useGoods.js | 398 -----
acdr-ui/src/sheep/hooks/useModal.js | 141 --
acdr-ui/src/sheep/hooks/useWebSocket.js | 153 --
acdr-ui/src/sheep/index.js | 51 -
.../src/sheep/libs/mplive-manifest-plugin.js | 32 -
acdr-ui/src/sheep/libs/permission.js | 244 ---
acdr-ui/src/sheep/libs/sdk-h5-weixin.js | 190 ---
acdr-ui/src/sheep/platform/index.js | 175 ---
acdr-ui/src/sheep/platform/pay.js | 360 -----
.../src/sheep/platform/provider/apple/app.js | 36 -
.../sheep/platform/provider/apple/index.js | 9 -
.../sheep/platform/provider/wechat/index.js | 15 -
.../platform/provider/wechat/miniProgram.js | 213 ---
.../provider/wechat/officialAccount.js | 105 --
.../platform/provider/wechat/openPlatform.js | 64 -
acdr-ui/src/sheep/platform/share.js | 206 ---
acdr-ui/src/sheep/request/index.js | 302 ----
acdr-ui/src/sheep/router/index.js | 185 ---
.../sheep/router/utils/strip-json-comments.js | 79 -
.../sheep/router/utils/uni-read-pages-v3.js | 105 --
acdr-ui/src/sheep/scss/_main.scss | 365 -----
acdr-ui/src/sheep/scss/_mixins.scss | 63 -
acdr-ui/src/sheep/scss/_tools.scss | 280 ----
acdr-ui/src/sheep/scss/_var.scss | 162 --
.../sheep/scss/font/OPPOSANS-M-subfont.ttf | Bin 9832 -> 0 bytes
acdr-ui/src/sheep/scss/icon/_coloricon.scss | 1341 -----------------
acdr-ui/src/sheep/scss/icon/_icon.scss | 182 ---
acdr-ui/src/sheep/scss/icon/_sheepicon.scss | 94 --
acdr-ui/src/sheep/scss/icon/_style.scss | 43 -
acdr-ui/src/sheep/scss/index.scss | 27 -
acdr-ui/src/sheep/scss/style/_avatar.scss | 0
acdr-ui/src/sheep/scss/style/_background.scss | 202 ---
acdr-ui/src/sheep/scss/style/_border.scss | 140 --
acdr-ui/src/sheep/scss/style/_button.scss | 87 --
acdr-ui/src/sheep/scss/style/_card.scss | 353 -----
acdr-ui/src/sheep/scss/style/_code.scss | 55 -
acdr-ui/src/sheep/scss/style/_flex.scss | 79 -
acdr-ui/src/sheep/scss/style/_form.scss | 121 --
acdr-ui/src/sheep/scss/style/_grid.scss | 103 --
acdr-ui/src/sheep/scss/style/_markdown.scss | 62 -
acdr-ui/src/sheep/scss/style/_menu.scss | 54 -
acdr-ui/src/sheep/scss/style/_shadow.scss | 90 --
acdr-ui/src/sheep/scss/style/_table.scss | 133 --
acdr-ui/src/sheep/scss/style/_tag.scss | 0
acdr-ui/src/sheep/scss/style/_text.scss | 104 --
acdr-ui/src/sheep/scss/theme/_dark.scss | 37 -
acdr-ui/src/sheep/scss/theme/_light.scss | 37 -
acdr-ui/src/sheep/scss/theme/_style.scss | 68 -
acdr-ui/src/sheep/scss/ui.scss | 19 -
acdr-ui/src/sheep/store/app.js | 134 --
acdr-ui/src/sheep/store/cart.js | 112 --
acdr-ui/src/sheep/store/index.js | 17 -
acdr-ui/src/sheep/store/modal.js | 29 -
acdr-ui/src/sheep/store/sys.js | 32 -
acdr-ui/src/sheep/store/user.js | 165 --
acdr-ui/src/sheep/ui/su-coupon/su-coupon.vue | 320 ----
.../ui/su-data-checkbox/su-data-checkbox.vue | 893 -----------
acdr-ui/src/sheep/ui/su-dialog/su-dialog.vue | 269 ----
acdr-ui/src/sheep/ui/su-fixed/su-fixed.vue | 218 ---
acdr-ui/src/sheep/ui/su-image/su-image.vue | 131 --
.../ui/su-inner-navbar/su-inner-navbar.vue | 365 -----
acdr-ui/src/sheep/ui/su-navbar/su-navbar.vue | 485 ------
.../sheep/ui/su-notice-bar/su-notice-bar.vue | 475 ------
.../sheep/ui/su-number-box/su-number-box.vue | 226 ---
.../src/sheep/ui/su-popover/su-popover.vue | 308 ----
acdr-ui/src/sheep/ui/su-popup/keypress.js | 45 -
acdr-ui/src/sheep/ui/su-popup/su-popup.vue | 589 --------
.../src/sheep/ui/su-progress/su-progress.vue | 202 ---
acdr-ui/src/sheep/ui/su-radio/su-radio.vue | 302 ----
.../ui/su-region-picker/su-region-picker.vue | 245 ---
.../sheep/ui/su-status-bar/su-status-bar.vue | 16 -
acdr-ui/src/sheep/ui/su-sticky/su-sticky.vue | 267 ----
.../src/sheep/ui/su-subline/su-subline.vue | 63 -
acdr-ui/src/sheep/ui/su-swiper/su-swiper.vue | 503 -------
acdr-ui/src/sheep/ui/su-switch/su-switch.vue | 103 --
.../src/sheep/ui/su-tab-item/su-tab-item.vue | 170 ---
acdr-ui/src/sheep/ui/su-tab/su-tab.vue | 462 ------
.../ui/su-tabbar-item/su-tabbar-item.vue | 234 ---
acdr-ui/src/sheep/ui/su-tabbar/su-tabbar.vue | 228 ---
acdr-ui/src/sheep/ui/su-tabs-item/props.js | 3 -
.../sheep/ui/su-tabs-item/su-tabs-item.vue | 26 -
acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue | 434 ------
.../sheep/ui/su-time-line/su-time-line.vue | 38 -
.../ui/su-timeline-item/su-timeline-item.vue | 77 -
.../src/sheep/ui/su-toolbar/su-toolbar.vue | 130 --
acdr-ui/src/sheep/ui/su-video/su-video.vue | 200 ---
acdr-ui/src/sheep/url/index.js | 199 ---
acdr-ui/src/sheep/util/const.js | 109 --
acdr-ui/src/sheep/util/index.js | 139 --
acdr-ui/src/sheep/validate/form.js | 164 --
acdr-ui/src/static/addresscell/location.png | Bin 1604 -> 0 bytes
acdr-ui/src/static/ai/ai_bg.png | Bin 106736 -> 0 bytes
acdr-ui/src/static/app/icons/1024x1024.png | Bin 59336 -> 0 bytes
acdr-ui/src/static/app/icons/120x120.png | Bin 3231 -> 0 bytes
acdr-ui/src/static/app/icons/144x144.png | Bin 3791 -> 0 bytes
acdr-ui/src/static/app/icons/152x152.png | Bin 3981 -> 0 bytes
acdr-ui/src/static/app/icons/167x167.png | Bin 4479 -> 0 bytes
acdr-ui/src/static/app/icons/180x180.png | Bin 4844 -> 0 bytes
acdr-ui/src/static/app/icons/192x192.png | Bin 5319 -> 0 bytes
acdr-ui/src/static/app/icons/20x20.png | Bin 574 -> 0 bytes
acdr-ui/src/static/app/icons/29x29.png | Bin 780 -> 0 bytes
acdr-ui/src/static/app/icons/40x40.png | Bin 985 -> 0 bytes
acdr-ui/src/static/app/icons/58x58.png | Bin 1483 -> 0 bytes
acdr-ui/src/static/app/icons/60x60.png | Bin 1521 -> 0 bytes
acdr-ui/src/static/app/icons/72x72.png | Bin 1802 -> 0 bytes
acdr-ui/src/static/app/icons/76x76.png | Bin 1972 -> 0 bytes
acdr-ui/src/static/app/icons/80x80.png | Bin 2060 -> 0 bytes
acdr-ui/src/static/app/icons/87x87.png | Bin 2289 -> 0 bytes
acdr-ui/src/static/app/icons/96x96.png | Bin 2396 -> 0 bytes
.../static/certification/certification_bg.png | Bin 270529 -> 0 bytes
acdr-ui/src/static/js/amap-wx.js | 526 -------
acdr-ui/src/static/null/mapnull.png | Bin 48254 -> 0 bytes
acdr-ui/src/static/null/messagenull.png | Bin 33151 -> 0 bytes
acdr-ui/src/static/null/searchnull.png | Bin 48299 -> 0 bytes
acdr-ui/src/static/permission/idcard.png | Bin 7994 -> 0 bytes
acdr-ui/src/static/permission/idcard_back.png | Bin 5507 -> 0 bytes
acdr-ui/src/static/tabbar/24gl-paperPlane.png | Bin 9144 -> 486 bytes
.../src/static/tabbar/24gl-paperPlaneL.png | Bin 9346 -> 353 bytes
acdr-ui/src/static/tabbar/home.png | Bin 1327 -> 876 bytes
acdr-ui/src/static/tabbar/homeL.png | Bin 991 -> 413 bytes
acdr-ui/src/static/tabbar/message.png | Bin 1368 -> 893 bytes
acdr-ui/src/static/tabbar/messageL.png | Bin 1141 -> 482 bytes
acdr-ui/src/static/tabbar/my.png | Bin 1291 -> 772 bytes
acdr-ui/src/static/tabbar/myL.png | Bin 1030 -> 433 bytes
acdr-ui/src/static/tabbar/space.png | Bin 1758 -> 1105 bytes
acdr-ui/src/static/tabbar/spaceL.png | Bin 1402 -> 491 bytes
acdr-ui/src/store/routers.js | 8 +-
acdr-ui/src/store/user.js | 2 +-
acdr-ui/src/style/iconfont.css | 28 -
acdr-ui/src/style/index.css | 44 -
acdr-ui/src/style/index.scss | 22 -
acdr-ui/src/types/uni-pages.d.ts | 87 +-
acdr-ui/src/uni.scss | 2 +-
.../uni-fab/components/uni-fab/uni-fab.vue | 2 +-
acdr-ui/src/utils/commUtils.js | 36 +-
acdr-ui/src/utils/http.ts | 4 +-
acdr-ui/vite.config.ts | 7 +-
400 files changed, 1711 insertions(+), 39817 deletions(-)
delete mode 100644 acdr-ui/src/pages/address/components/AddAddress.vue
delete mode 100644 acdr-ui/src/pages/address/index.vue
delete mode 100644 acdr-ui/src/pages/ai/ai-interactive-space.vue
delete mode 100644 acdr-ui/src/pages/certification/components/certPopup.vue
delete mode 100644 acdr-ui/src/pages/certification/index.vue
delete mode 100644 acdr-ui/src/pages/certification/pet-sitter.vue
delete mode 100644 acdr-ui/src/pages/extended/index.vue
delete mode 100644 acdr-ui/src/pages/h5mall/index.vue
delete mode 100644 acdr-ui/src/pages/login/index.vue
delete mode 100644 acdr-ui/src/pages/login/phone.vue
delete mode 100644 acdr-ui/src/pages/map/index.vue
delete mode 100644 acdr-ui/src/pages/message/chat.vue
delete mode 100644 acdr-ui/src/pages/message/index.vue
delete mode 100644 acdr-ui/src/pages/message/message-list.vue
delete mode 100644 acdr-ui/src/pages/message/privatechat.vue
delete mode 100644 acdr-ui/src/pages/my/index.vue
delete mode 100644 acdr-ui/src/pages/order/components/OrderItem.vue
delete mode 100644 acdr-ui/src/pages/order/index.vue
delete mode 100644 acdr-ui/src/pages/order/order-detail.vue
delete mode 100644 acdr-ui/src/pages/order/take.vue
delete mode 100644 acdr-ui/src/pages/others/agreement.vue
delete mode 100644 acdr-ui/src/pages/others/null.vue
delete mode 100644 acdr-ui/src/pages/others/official-account.vue
delete mode 100644 acdr-ui/src/pages/permission/bind-phone.vue
delete mode 100644 acdr-ui/src/pages/permission/real-name-auth.vue
delete mode 100644 acdr-ui/src/pages/pet/index.vue
delete mode 100644 acdr-ui/src/pages/pet/pet-add-page.vue
delete mode 100644 acdr-ui/src/pages/pet/pet-detail-page.vue
delete mode 100644 acdr-ui/src/pages/push/door.vue
delete mode 100644 acdr-ui/src/pages/push/goods.vue
delete mode 100644 acdr-ui/src/pages/push/index.vue
delete mode 100644 acdr-ui/src/pages/push/share.vue
delete mode 100644 acdr-ui/src/pages/service/accompany.vue
delete mode 100644 acdr-ui/src/pages/service/detail.vue
delete mode 100644 acdr-ui/src/pages/service/door.vue
delete mode 100644 acdr-ui/src/pages/service/index.vue
delete mode 100644 acdr-ui/src/pages/service/knowledge.vue
delete mode 100644 acdr-ui/src/pages/service/my-service.vue
delete mode 100644 acdr-ui/src/pages/service/search.vue
delete mode 100644 acdr-ui/src/pages/service/shop.vue
delete mode 100644 acdr-ui/src/pages/service/slippery.vue
delete mode 100644 acdr-ui/src/pages/service/store.vue
delete mode 100644 acdr-ui/src/pages/settings/index.vue
delete mode 100644 acdr-ui/src/pages/space/components/UserPost.vue
delete mode 100644 acdr-ui/src/pages/space/index.vue
delete mode 100644 acdr-ui/src/pages/webview/webview.vue
delete mode 100644 acdr-ui/src/sheep/api/infra/file.js
delete mode 100644 acdr-ui/src/sheep/api/member/address.js
delete mode 100644 acdr-ui/src/sheep/api/member/auth.js
delete mode 100644 acdr-ui/src/sheep/api/member/point.js
delete mode 100644 acdr-ui/src/sheep/api/member/signin.js
delete mode 100644 acdr-ui/src/sheep/api/member/social.js
delete mode 100644 acdr-ui/src/sheep/api/member/user.js
delete mode 100644 acdr-ui/src/sheep/api/migration/app.js
delete mode 100644 acdr-ui/src/sheep/api/migration/index.js
delete mode 100644 acdr-ui/src/sheep/api/migration/third.js
delete mode 100644 acdr-ui/src/sheep/api/pay/channel.js
delete mode 100644 acdr-ui/src/sheep/api/pay/order.js
delete mode 100644 acdr-ui/src/sheep/api/pay/wallet.js
delete mode 100644 acdr-ui/src/sheep/api/product/category.js
delete mode 100644 acdr-ui/src/sheep/api/product/comment.js
delete mode 100644 acdr-ui/src/sheep/api/product/favorite.js
delete mode 100644 acdr-ui/src/sheep/api/product/history.js
delete mode 100644 acdr-ui/src/sheep/api/product/spu.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/activity.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/article.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/combination.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/coupon.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/diy.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/kefu.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/rewardActivity.js
delete mode 100644 acdr-ui/src/sheep/api/promotion/seckill.js
delete mode 100644 acdr-ui/src/sheep/api/system/area.js
delete mode 100644 acdr-ui/src/sheep/api/trade/afterSale.js
delete mode 100644 acdr-ui/src/sheep/api/trade/brokerage.js
delete mode 100644 acdr-ui/src/sheep/api/trade/cart.js
delete mode 100644 acdr-ui/src/sheep/api/trade/config.js
delete mode 100644 acdr-ui/src/sheep/api/trade/delivery.js
delete mode 100644 acdr-ui/src/sheep/api/trade/order.js
delete mode 100644 acdr-ui/src/sheep/components/s-activity-pop/s-activity-pop.vue
delete mode 100644 acdr-ui/src/sheep/components/s-address-item/s-address-item.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/account-login.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/change-mobile.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/change-password.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/mp-authorization.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/reset-password.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/components/sms-login.vue
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/index.scss
delete mode 100644 acdr-ui/src/sheep/components/s-auth-modal/s-auth-modal.vue
delete mode 100644 acdr-ui/src/sheep/components/s-block-item/s-block-item.vue
delete mode 100644 acdr-ui/src/sheep/components/s-block/s-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-count-down/s-count-down.vue
delete mode 100644 acdr-ui/src/sheep/components/s-coupon-block/s-coupon-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-coupon-card/s-coupon-card.vue
delete mode 100644 acdr-ui/src/sheep/components/s-coupon-get/s-coupon-get.vue
delete mode 100644 acdr-ui/src/sheep/components/s-coupon-list/s-coupon-list.vue
delete mode 100644 acdr-ui/src/sheep/components/s-coupon-select/s-coupon-select.vue
delete mode 100644 acdr-ui/src/sheep/components/s-custom-navbar/components/navbar-item.vue
delete mode 100644 acdr-ui/src/sheep/components/s-custom-navbar/components/navbar.vue
delete mode 100644 acdr-ui/src/sheep/components/s-custom-navbar/s-custom-navbar.vue
delete mode 100644 acdr-ui/src/sheep/components/s-discount-list/s-discount-list.vue
delete mode 100644 acdr-ui/src/sheep/components/s-empty/s-empty.vue
delete mode 100644 acdr-ui/src/sheep/components/s-float-menu/s-float-menu.vue
delete mode 100644 acdr-ui/src/sheep/components/s-goods-card/s-goods-card.vue
delete mode 100644 acdr-ui/src/sheep/components/s-goods-column/s-goods-column.vue
delete mode 100644 acdr-ui/src/sheep/components/s-goods-item/s-goods-item.vue
delete mode 100644 acdr-ui/src/sheep/components/s-goods-scroll/s-goods-scroll.vue
delete mode 100644 acdr-ui/src/sheep/components/s-goods-shelves/s-goods-shelves.vue
delete mode 100644 acdr-ui/src/sheep/components/s-groupon-block/s-groupon-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-hotzone-block/s-hotzone-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-image-banner/s-image-banner.vue
delete mode 100644 acdr-ui/src/sheep/components/s-image-block/s-image-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-image-cube/s-image-cube.vue
delete mode 100644 acdr-ui/src/sheep/components/s-layout/s-layout.vue
delete mode 100644 acdr-ui/src/sheep/components/s-line-block/s-line-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-live-block/s-live-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-live-card/s-live-card.vue
delete mode 100644 acdr-ui/src/sheep/components/s-menu-button/s-menu-button.vue
delete mode 100644 acdr-ui/src/sheep/components/s-menu-grid/s-menu-grid.vue
delete mode 100644 acdr-ui/src/sheep/components/s-menu-list/s-menu-list.vue
delete mode 100644 acdr-ui/src/sheep/components/s-menu-tools/s-menu-tools.vue
delete mode 100644 acdr-ui/src/sheep/components/s-notice-block/s-notice-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-order-card/s-order-card.vue
delete mode 100644 acdr-ui/src/sheep/components/s-popup-image/s-popup-image.vue
delete mode 100644 acdr-ui/src/sheep/components/s-richtext-block/s-richtext-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-search-block/s-search-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-seckill-block/s-seckill-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue
delete mode 100644 acdr-ui/src/sheep/components/s-select-seckill-sku/s-select-seckill-sku.vue
delete mode 100644 acdr-ui/src/sheep/components/s-select-sku/s-select-sku.vue
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/canvas-poster/index.vue
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/goods.js
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/groupon.js
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/index.js
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/user.js
delete mode 100644 acdr-ui/src/sheep/components/s-share-modal/s-share-modal.vue
delete mode 100644 acdr-ui/src/sheep/components/s-statusbar/s-statusbar.vue
delete mode 100644 acdr-ui/src/sheep/components/s-tabbar/s-tabbar.vue
delete mode 100644 acdr-ui/src/sheep/components/s-title-block/s-title-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-uploader/choose-and-upload-file.js
delete mode 100644 acdr-ui/src/sheep/components/s-uploader/s-uploader.vue
delete mode 100644 acdr-ui/src/sheep/components/s-uploader/upload-file.vue
delete mode 100644 acdr-ui/src/sheep/components/s-uploader/upload-image.vue
delete mode 100644 acdr-ui/src/sheep/components/s-uploader/utils.js
delete mode 100644 acdr-ui/src/sheep/components/s-user-card/s-user-card.vue
delete mode 100644 acdr-ui/src/sheep/components/s-video-block/s-video-block.vue
delete mode 100644 acdr-ui/src/sheep/components/s-wallet-card/s-wallet-card.vue
delete mode 100644 acdr-ui/src/sheep/config/index.js
delete mode 100644 acdr-ui/src/sheep/config/zIndex.js
delete mode 100644 acdr-ui/src/sheep/helper/digit.js
delete mode 100644 acdr-ui/src/sheep/helper/index.js
delete mode 100644 acdr-ui/src/sheep/helper/test.js
delete mode 100644 acdr-ui/src/sheep/helper/throttle.js
delete mode 100644 acdr-ui/src/sheep/helper/tools.js
delete mode 100644 acdr-ui/src/sheep/helper/utils.js
delete mode 100644 acdr-ui/src/sheep/hooks/useApp.js
delete mode 100644 acdr-ui/src/sheep/hooks/useGoods.js
delete mode 100644 acdr-ui/src/sheep/hooks/useModal.js
delete mode 100644 acdr-ui/src/sheep/hooks/useWebSocket.js
delete mode 100644 acdr-ui/src/sheep/index.js
delete mode 100644 acdr-ui/src/sheep/libs/mplive-manifest-plugin.js
delete mode 100644 acdr-ui/src/sheep/libs/permission.js
delete mode 100644 acdr-ui/src/sheep/libs/sdk-h5-weixin.js
delete mode 100644 acdr-ui/src/sheep/platform/index.js
delete mode 100644 acdr-ui/src/sheep/platform/pay.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/apple/app.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/apple/index.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/wechat/index.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/wechat/miniProgram.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/wechat/officialAccount.js
delete mode 100644 acdr-ui/src/sheep/platform/provider/wechat/openPlatform.js
delete mode 100644 acdr-ui/src/sheep/platform/share.js
delete mode 100644 acdr-ui/src/sheep/request/index.js
delete mode 100644 acdr-ui/src/sheep/router/index.js
delete mode 100644 acdr-ui/src/sheep/router/utils/strip-json-comments.js
delete mode 100644 acdr-ui/src/sheep/router/utils/uni-read-pages-v3.js
delete mode 100644 acdr-ui/src/sheep/scss/_main.scss
delete mode 100644 acdr-ui/src/sheep/scss/_mixins.scss
delete mode 100644 acdr-ui/src/sheep/scss/_tools.scss
delete mode 100644 acdr-ui/src/sheep/scss/_var.scss
delete mode 100644 acdr-ui/src/sheep/scss/font/OPPOSANS-M-subfont.ttf
delete mode 100644 acdr-ui/src/sheep/scss/icon/_coloricon.scss
delete mode 100644 acdr-ui/src/sheep/scss/icon/_icon.scss
delete mode 100644 acdr-ui/src/sheep/scss/icon/_sheepicon.scss
delete mode 100644 acdr-ui/src/sheep/scss/icon/_style.scss
delete mode 100644 acdr-ui/src/sheep/scss/index.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_avatar.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_background.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_border.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_button.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_card.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_code.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_flex.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_form.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_grid.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_markdown.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_menu.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_shadow.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_table.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_tag.scss
delete mode 100644 acdr-ui/src/sheep/scss/style/_text.scss
delete mode 100644 acdr-ui/src/sheep/scss/theme/_dark.scss
delete mode 100644 acdr-ui/src/sheep/scss/theme/_light.scss
delete mode 100644 acdr-ui/src/sheep/scss/theme/_style.scss
delete mode 100644 acdr-ui/src/sheep/scss/ui.scss
delete mode 100644 acdr-ui/src/sheep/store/app.js
delete mode 100644 acdr-ui/src/sheep/store/cart.js
delete mode 100644 acdr-ui/src/sheep/store/index.js
delete mode 100644 acdr-ui/src/sheep/store/modal.js
delete mode 100644 acdr-ui/src/sheep/store/sys.js
delete mode 100644 acdr-ui/src/sheep/store/user.js
delete mode 100644 acdr-ui/src/sheep/ui/su-coupon/su-coupon.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-data-checkbox/su-data-checkbox.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-dialog/su-dialog.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-fixed/su-fixed.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-image/su-image.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-inner-navbar/su-inner-navbar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-navbar/su-navbar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-notice-bar/su-notice-bar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-number-box/su-number-box.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-popover/su-popover.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-popup/keypress.js
delete mode 100644 acdr-ui/src/sheep/ui/su-popup/su-popup.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-progress/su-progress.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-radio/su-radio.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-region-picker/su-region-picker.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-status-bar/su-status-bar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-sticky/su-sticky.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-subline/su-subline.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-swiper/su-swiper.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-switch/su-switch.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tab-item/su-tab-item.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tab/su-tab.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tabbar-item/su-tabbar-item.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tabbar/su-tabbar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tabs-item/props.js
delete mode 100644 acdr-ui/src/sheep/ui/su-tabs-item/su-tabs-item.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-time-line/su-time-line.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-timeline-item/su-timeline-item.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-toolbar/su-toolbar.vue
delete mode 100644 acdr-ui/src/sheep/ui/su-video/su-video.vue
delete mode 100644 acdr-ui/src/sheep/url/index.js
delete mode 100644 acdr-ui/src/sheep/util/const.js
delete mode 100644 acdr-ui/src/sheep/util/index.js
delete mode 100644 acdr-ui/src/sheep/validate/form.js
delete mode 100644 acdr-ui/src/static/addresscell/location.png
delete mode 100644 acdr-ui/src/static/ai/ai_bg.png
delete mode 100644 acdr-ui/src/static/app/icons/1024x1024.png
delete mode 100644 acdr-ui/src/static/app/icons/120x120.png
delete mode 100644 acdr-ui/src/static/app/icons/144x144.png
delete mode 100644 acdr-ui/src/static/app/icons/152x152.png
delete mode 100644 acdr-ui/src/static/app/icons/167x167.png
delete mode 100644 acdr-ui/src/static/app/icons/180x180.png
delete mode 100644 acdr-ui/src/static/app/icons/192x192.png
delete mode 100644 acdr-ui/src/static/app/icons/20x20.png
delete mode 100644 acdr-ui/src/static/app/icons/29x29.png
delete mode 100644 acdr-ui/src/static/app/icons/40x40.png
delete mode 100644 acdr-ui/src/static/app/icons/58x58.png
delete mode 100644 acdr-ui/src/static/app/icons/60x60.png
delete mode 100644 acdr-ui/src/static/app/icons/72x72.png
delete mode 100644 acdr-ui/src/static/app/icons/76x76.png
delete mode 100644 acdr-ui/src/static/app/icons/80x80.png
delete mode 100644 acdr-ui/src/static/app/icons/87x87.png
delete mode 100644 acdr-ui/src/static/app/icons/96x96.png
delete mode 100644 acdr-ui/src/static/certification/certification_bg.png
delete mode 100644 acdr-ui/src/static/js/amap-wx.js
delete mode 100644 acdr-ui/src/static/null/mapnull.png
delete mode 100644 acdr-ui/src/static/null/messagenull.png
delete mode 100644 acdr-ui/src/static/null/searchnull.png
delete mode 100644 acdr-ui/src/static/permission/idcard.png
delete mode 100644 acdr-ui/src/static/permission/idcard_back.png
delete mode 100644 acdr-ui/src/style/iconfont.css
delete mode 100644 acdr-ui/src/style/index.css
delete mode 100644 acdr-ui/src/style/index.scss
diff --git a/acdr-ui/.eslintrc-auto-import.json b/acdr-ui/.eslintrc-auto-import.json
index 6817f780..59ddf9fc 100644
--- a/acdr-ui/.eslintrc-auto-import.json
+++ b/acdr-ui/.eslintrc-auto-import.json
@@ -80,16 +80,15 @@
"triggerRef": true,
"unref": true,
"useAttrs": true,
+ "useColPickerData": true,
"useCssModule": true,
"useCssVars": true,
"useRequest": true,
"useSlots": true,
"useUpload": true,
- "useUpload2": true,
"watch": true,
"watchEffect": true,
"watchPostEffect": true,
- "watchSyncEffect": true,
- "useColPickerData": true
+ "watchSyncEffect": true
}
}
diff --git a/acdr-ui/.gitignore b/acdr-ui/.gitignore
index 3197009d..76f9aecd 100644
--- a/acdr-ui/.gitignore
+++ b/acdr-ui/.gitignore
@@ -9,9 +9,9 @@ lerna-debug.log*
node_modules
.DS_Store
-dist
+#dist
*.local
-
+tootls
# Editor directories and files
.idea
*.suo
diff --git a/acdr-ui/env/.env b/acdr-ui/env/.env
index 3bf51434..d8d3bb82 100644
--- a/acdr-ui/env/.env
+++ b/acdr-ui/env/.env
@@ -1,8 +1,8 @@
-VITE_APP_TITLE = '宠屋'
-VITE_APP_PORT = 8081
+VITE_APP_TITLE='宠屋'
+VITE_APP_PORT=8081
-VITE_UNI_APPID = '__UNI__D748B51'
-VITE_WX_APPID = 'wxf2c6d4b7361366b4'
+VITE_UNI_APPID='__UNI__D748B51'
+VITE_WX_APPID='wxf2c6d4b7361366b4'
# h5部署网站的base,配置到 manifest.config.ts 里的 h5.router.base
VITE_APP_PUBLIC_BASE=/acdr/
@@ -11,41 +11,44 @@ VITE_FALLBACK_LOCALE=zh-Hans
# VITE_SERVER_BASEURL = 'http://47.99.70.12:28184/api'
# VITE_UPLOAD_BASEURL = 'http://47.99.70.12:28184'
# VITE_SERVER_BASEURL = 'http://localhost:28184/api'
-# VITE_SERVER_BASEURL = 'http://localhost:48080/app-api'
-VITE_SERVER_BASEURL = 'http://47.99.70.12:48080/app-api'
-# VITE_WS_BASEURL = 'ws://47.99.70.12:28184/api'
-VITE_UPLOAD_BASEURL = 'http://localhost:28184'
-VITE_OSS_BASEURL = 'http://116.204.119.171:9000/linghe'
+# VITE_SERVER_BASEURL = 'http://127.0.0.1:48080/app-api'
+# VITE_SERVER_BASEURL = 'http://47.99.70.12:48080/app-api'
+VITE_SERVER_BASEURL='http://116.204.119.171:48080/app-api'
+VITE_UPLOAD_BASEURL='http://116.204.119.171:48080/app-api'
+VITE_WS_BASEURL='ws://116.204.119.171:48080/app-api'
+# VITE_UPLOAD_BASEURL = 'http://localhost:48080/app-api'
+VITE_OSS_BASEURL='http://116.204.119.171:9000/linghe'
# h5是否需要配置代理
VITE_APP_PROXY=false
-VITE_APP_PROXY_PREFIX = '/api'
+VITE_APP_PROXY_PREFIX='/api'
# 版本号
-SHOPRO_VERSION = v1.8.3
+SHOPRO_VERSION=v1.8.3
# 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development)
-SHOPRO_BASE_URL = http://api-dashboard.yudao.iocoder.cn
+SHOPRO_BASE_URL=http://116.204.119.171:48080
# 后端接口 - 测试环境(通过 process.env.NODE_ENV = development)
# SHOPRO_DEV_BASE_URL = http://127.0.0.1:48080
-SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
+# SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
+SHOPRO_DEV_BASE_URL=http://116.204.119.171:48080
### SHOPRO_DEV_BASE_URL = http://yunai.natapp1.cc
# 后端接口前缀(一般不建议调整)
-SHOPRO_API_PATH = /app-api
+SHOPRO_API_PATH=/app-api
# 后端 websocket 接口前缀
-SHOPRO_WEBSOCKET_PATH = /infra/ws
+SHOPRO_WEBSOCKET_PATH=/infra/ws
# 开发环境运行端口
-SHOPRO_DEV_PORT = 3000
+SHOPRO_DEV_PORT=3000
# 客户端静态资源地址 空=默认使用服务端指定的CDN资源地址前缀 | local=本地 | http(s)://xxx.xxx=自定义静态资源地址前缀
-SHOPRO_STATIC_URL = https://file.sheepjs.com
+SHOPRO_STATIC_URL=https://file.sheepjs.com
# 是否开启直播 1 开启直播 | 0 关闭直播 (小程序官方后台未审核开通直播权限时请勿开启)
-SHOPRO_MPLIVE_ON = 0
+SHOPRO_MPLIVE_ON=0
# 租户ID 默认 1
-SHOPRO_TENANT_ID = 1
+SHOPRO_TENANT_ID=1
diff --git a/acdr-ui/env/.env.development b/acdr-ui/env/.env.development
index 320a4a6b..d35fb32a 100644
--- a/acdr-ui/env/.env.development
+++ b/acdr-ui/env/.env.development
@@ -6,3 +6,33 @@ VITE_DELETE_CONSOLE = false
VITE_SHOW_SOURCEMAP = true
VITE_WX_APPID = wxf2c6d4b7361366b4
VITE_UNI_APPID = __UNI__9D479DC
+
+# 变量必须以 VITE_ 为前缀才能暴露给外部读取
+# 是否去除console 和 debugger
+VITE_DELETE_CONSOLE = true
+# 是否开启sourcemap
+VITE_SHOW_SOURCEMAP = false
+VITE_SERVER_BASEURL = 'http://47.99.70.12:48080/app-api'
+VITE_OSS_BASEURL = 'http://116.204.119.171:9000/linghe'
+
+SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
+VITE_UPLOAD_BASEURL = 'http://47.99.70.12:48080/app-api'
+VITE_WS_BASEURL = 'ws://47.99.70.12:48080/app-api'
+# VITE_UPLOAD_BASEURL = 'http://localhost:48080/app-api'
+VITE_OSS_BASEURL = 'http://116.204.119.171:9000/linghe'
+SHOPRO_BASE_URL = http://47.99.70.12:48080
+SHOPRO_DEV_BASE_URL = http://47.99.70.12:48080
+
+# 变量必须以 VITE_ 为前缀才能暴露给外部读取
+# NODE_ENV='production'
+# 是否去除console 和 debugger
+# VITE_DELETE_CONSOLE=true
+# 是否开启sourcemap
+# VITE_SHOW_SOURCEMAP=false
+# VITE_SERVER_BASEURL='http://127.0.0.1:48080/app-api'
+# VITE_UPLOAD_BASEURL='http://127.0.0.1:48080/app-api'
+# VITE_WS_BASEURL='ws://127.0.0.1:48080/app-api'
+# VITE_UPLOAD_BASEURL = 'http://localhost:48080/app-api'
+# VITE_OSS_BASEURL='http://116.204.119.171:9000/linghe'
+# SHOPRO_BASE_URL=http://127.0.0.1:48080
+# SHOPRO_DEV_BASE_URL=http://127.0.0.1:48080
diff --git a/acdr-ui/env/.env.production b/acdr-ui/env/.env.production
index 8a1b50ca..0a9e120c 100644
--- a/acdr-ui/env/.env.production
+++ b/acdr-ui/env/.env.production
@@ -1,6 +1,13 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
-NODE_ENV = 'development'
+NODE_ENV='production'
# 是否去除console 和 debugger
-VITE_DELETE_CONSOLE = true
+VITE_DELETE_CONSOLE=true
# 是否开启sourcemap
-VITE_SHOW_SOURCEMAP = false
+VITE_SHOW_SOURCEMAP=false
+VITE_SERVER_BASEURL='http://116.204.119.171:48080/app-api'
+VITE_UPLOAD_BASEURL='http://116.204.119.171:48080/app-api'
+VITE_WS_BASEURL='ws://116.204.119.171:48080/app-api'
+# VITE_UPLOAD_BASEURL = 'http://localhost:48080/app-api'
+VITE_OSS_BASEURL='http://116.204.119.171:9000/linghe'
+SHOPRO_BASE_URL=http://116.204.119.171:48080
+SHOPRO_DEV_BASE_URL=http://116.204.119.171:48080
diff --git a/acdr-ui/index.html b/acdr-ui/index.html
index 2e368d0b..1978bab0 100644
--- a/acdr-ui/index.html
+++ b/acdr-ui/index.html
@@ -2,7 +2,7 @@
-
+
diff --git a/acdr-ui/src/components/AddressCell.vue b/acdr-ui/src/components/AddressCell.vue
index b1d3c6d0..2f004674 100644
--- a/acdr-ui/src/components/AddressCell.vue
+++ b/acdr-ui/src/components/AddressCell.vue
@@ -2,33 +2,38 @@
-
-
+
+
{{
!addressDetail.addressComponent
? '正在加载...'
: `${addressDetail.addressComponent.city} ${addressDetail.addressComponent.district}`
}}
+ 未获取
+
diff --git a/acdr-ui/src/modules/mall/index/login.vue b/acdr-ui/src/modules/mall/index/login.vue
index 0bc08920..722becd3 100644
--- a/acdr-ui/src/modules/mall/index/login.vue
+++ b/acdr-ui/src/modules/mall/index/login.vue
@@ -5,7 +5,7 @@
-
-
diff --git a/acdr-ui/src/pages/address/index.vue b/acdr-ui/src/pages/address/index.vue
deleted file mode 100644
index 2a59165b..00000000
--- a/acdr-ui/src/pages/address/index.vue
+++ /dev/null
@@ -1,191 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '新增地址',
- },
-}
-
-
-
-
-
-
- {{ address.type }}
-
- {{ address.name }} {{ address.mobile }} -
- {{ `${address['province']}-${address['city']}-${address['district']}` }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/ai/ai-interactive-space.vue b/acdr-ui/src/pages/ai/ai-interactive-space.vue
deleted file mode 100644
index 8353e16e..00000000
--- a/acdr-ui/src/pages/ai/ai-interactive-space.vue
+++ /dev/null
@@ -1,50 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: "AI互动空间",
- navigationStyle: "custom",
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/certification/components/certPopup.vue b/acdr-ui/src/pages/certification/components/certPopup.vue
deleted file mode 100644
index 655aaf4f..00000000
--- a/acdr-ui/src/pages/certification/components/certPopup.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/certification/index.vue b/acdr-ui/src/pages/certification/index.vue
deleted file mode 100644
index 2af39986..00000000
--- a/acdr-ui/src/pages/certification/index.vue
+++ /dev/null
@@ -1,201 +0,0 @@
-
-{
- layout: "default",
- style: {
- navigationBarTitleText: "宠托师认证页面",
- navigationStyle: "custom",
- },
-}
-
-
-
-
-
-
-
-
-
- 您还未认证,加入我们成为宠托师!
-
-
-
-
-
-
-
-
- 您的宠托师证书
-
- 证书详情
-
- 证书编号: {{ certificate.cardId }}
- 证书类型: {{ certificate.type || "宠托师" }}
- 服务次数: {{ certificate.serviceNumber }}
- 创建时间: {{ formatDate(certificate.createTime) }}
- 过期时间: {{ formatDate(certificate.expiredTime) }}
- 最后更新: {{ formatDate(certificate.updateTime) }}
-
-
-
-
-
- {{ applyStateData }}
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/certification/pet-sitter.vue b/acdr-ui/src/pages/certification/pet-sitter.vue
deleted file mode 100644
index d6488949..00000000
--- a/acdr-ui/src/pages/certification/pet-sitter.vue
+++ /dev/null
@@ -1,155 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠托师资格证申请页面',
- // 设置为白色
- navigationBarBackgroundColor: '#ffffff', // 设置导航栏背景颜色为白色
- },
-}
-
-
-
-
-
-
-
-
-
- {{ positionOptions[application.typeIndex] || '请选择职位' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/extended/index.vue b/acdr-ui/src/pages/extended/index.vue
deleted file mode 100644
index 1a7811d1..00000000
--- a/acdr-ui/src/pages/extended/index.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '更多应用',
- },
-}
-
-
-
-
-
-
-
-
- 宠物宝典
-
-
-
- 商城选择
-
-
-
- 宠物医疗
-
-
-
- 宠物美容
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/h5mall/index.vue b/acdr-ui/src/pages/h5mall/index.vue
deleted file mode 100644
index 20c7b07d..00000000
--- a/acdr-ui/src/pages/h5mall/index.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠物商城',
- },
-}
-
-
-
-
-
-
-
- 加载中...
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/index/components/hurry.vue b/acdr-ui/src/pages/index/components/hurry.vue
index 5ac52f3b..664d3ae8 100644
--- a/acdr-ui/src/pages/index/components/hurry.vue
+++ b/acdr-ui/src/pages/index/components/hurry.vue
@@ -104,7 +104,7 @@ const props = defineProps<{
position: absolute;
top: -15%;
right: 12%;
- z-index: 999;
+ z-index: 1;
}
.loading-dots {
diff --git a/acdr-ui/src/pages/index/components/profileInfo.vue b/acdr-ui/src/pages/index/components/profileInfo.vue
index 4c9bacf0..53b25b53 100644
--- a/acdr-ui/src/pages/index/components/profileInfo.vue
+++ b/acdr-ui/src/pages/index/components/profileInfo.vue
@@ -34,8 +34,8 @@ const props = defineProps<{
const genderIcon = computed(
() =>
props.gender === 1
- ? '/static/icons/arrow-icon.png' // 使用绝对路径
- : '/static/icons/female-icon.png', // 使用绝对路径
+ ? '/static/icons/arrow-logo.png' // 使用绝对路径
+ : '/static/icons/female-logo.png', // 使用绝对路径
)
diff --git a/acdr-ui/src/pages/index/components/quickServiceCarousel.vue b/acdr-ui/src/pages/index/components/quickServiceCarousel.vue
index a55e2aba..f7e8c883 100644
--- a/acdr-ui/src/pages/index/components/quickServiceCarousel.vue
+++ b/acdr-ui/src/pages/index/components/quickServiceCarousel.vue
@@ -4,14 +4,14 @@
-
+
宠物宝典
宠物陪伴
-
+
定制商城
diff --git a/acdr-ui/src/pages/index/components/recommendedServices.vue b/acdr-ui/src/pages/index/components/recommendedServices.vue
index c916cbb6..32c95302 100644
--- a/acdr-ui/src/pages/index/components/recommendedServices.vue
+++ b/acdr-ui/src/pages/index/components/recommendedServices.vue
@@ -26,7 +26,7 @@ import LocalLoader from '@/components/LocalLoader.vue'
const toDetail = (item) => {
uni.navigateTo({
- url: '/pages/service/detail?id=' + item.id,
+ url: '/modules/pet/service/detail?id=' + item.id,
})
}
const loading = ref(false)
@@ -43,6 +43,8 @@ const getQuickServices = async () => {
onLoad(async () => {
loading.value = true
+ // 设置定时器在三秒后关闭
+ setTimeout(()=> { loading.value = false }, 3000)
await getQuickServices()
loading.value = false
})
diff --git a/acdr-ui/src/pages/index/index.vue b/acdr-ui/src/pages/index/index.vue
index 1ee2582a..05dc1114 100644
--- a/acdr-ui/src/pages/index/index.vue
+++ b/acdr-ui/src/pages/index/index.vue
@@ -1,8 +1,8 @@
{
style: {
- navigationBarTitleText: '首页',
- navigationStyle: 'custom',
+ navigationBarTitleText: "首页",
+ navigationStyle: "custom",
},
}
@@ -12,16 +12,16 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -75,58 +96,61 @@
diff --git a/acdr-ui/src/pages/login/phone.vue b/acdr-ui/src/pages/login/phone.vue
deleted file mode 100644
index 92f410f9..00000000
--- a/acdr-ui/src/pages/login/phone.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '手机号登录',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/map/index.vue b/acdr-ui/src/pages/map/index.vue
deleted file mode 100644
index b8b8ef3c..00000000
--- a/acdr-ui/src/pages/map/index.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '地图详细页面',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/message/chat.vue b/acdr-ui/src/pages/message/chat.vue
deleted file mode 100644
index c554bfc2..00000000
--- a/acdr-ui/src/pages/message/chat.vue
+++ /dev/null
@@ -1,171 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '客服',
- },
-}
-
-
-
-
-
-
-
-
-
- {{ message.text }}
-
-
- {{ message.time }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/message/index.vue b/acdr-ui/src/pages/message/index.vue
deleted file mode 100644
index 4e442265..00000000
--- a/acdr-ui/src/pages/message/index.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '消息',
- },
-}
-
-
-
-
-
-
-
-
- {{ message.title }}
- {{ message.description }}
-
-
- {{ message.badge }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/message/message-list.vue b/acdr-ui/src/pages/message/message-list.vue
deleted file mode 100644
index b359de09..00000000
--- a/acdr-ui/src/pages/message/message-list.vue
+++ /dev/null
@@ -1,117 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '消息列表',
- },
-}
-
-
-
-
-
-
- {{ truncateString(message.content) }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/message/privatechat.vue b/acdr-ui/src/pages/message/privatechat.vue
deleted file mode 100644
index a5220952..00000000
--- a/acdr-ui/src/pages/message/privatechat.vue
+++ /dev/null
@@ -1,40 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '聊天',
- },
-}
-
-
-
-
- 客服聊天系统
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/my/index.vue b/acdr-ui/src/pages/my/index.vue
deleted file mode 100644
index 9290e55f..00000000
--- a/acdr-ui/src/pages/my/index.vue
+++ /dev/null
@@ -1,421 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '我的页面',
- navigationStyle: 'custom',
- },
- needLogin: true,
-}
-
-
-
-
-
-
-
-
-
-
- {{ userInfo.nickname }}
- 爱猫猫,爱狗狗
-
-
-
-
-
- {{ item.number }}
- {{ item.label }}
-
-
-
-
-
-
-
-
-
- {{ service.label }}
-
-
-
-
-
-
-
-
-
- 我的宠物
-
-
-
- {{ pet.name }}
-
-
-
- +
-
- 添加
-
-
-
-
-
-
-
-
-
-
- {{ item.label }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/order/components/OrderItem.vue b/acdr-ui/src/pages/order/components/OrderItem.vue
deleted file mode 100644
index 5c50dec4..00000000
--- a/acdr-ui/src/pages/order/components/OrderItem.vue
+++ /dev/null
@@ -1,281 +0,0 @@
-
-
-
-
-
-
-
-
- 服务类型:
- {{ serviceInfo.type }}
-
-
- 服务地址:
- {{ serviceInfo.address }}
-
-
- 预约时间:
- {{ reservationTime }}
-
-
- 服务时长:
- {{ serviceHours }} 小时
-
-
-
-
-
-
-
-
- 宠物名称:
- {{ pet.name }}
-
-
- 宠物品种:
- {{ pet.breed }}
-
-
-
-
-
-
-
- 下单用户:
- {{ user.nickname }} ({{ user.phone }})
-
-
- 用户地址:
- {{ address.province }} {{ address.city }} {{ address.district }}
- {{ address.detailAddress }}
-
-
-
-
-
-
- 支付方式:
- {{ paymentMethod }}
-
-
- 支付状态:
- {{ isPay ? '已支付' : '未支付' }}
-
-
- 总价:
- ¥{{ price }}
-
-
-
-
-
- ¥{{ price }} 共{{ serviceHours }}小时
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/order/index.vue b/acdr-ui/src/pages/order/index.vue
deleted file mode 100644
index ca78db6a..00000000
--- a/acdr-ui/src/pages/order/index.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '服务订单',
- navigationBarBackgroundColor: '#ffff',
- },
-}
-
-
-
-
-
-
- {{ tab }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/order/order-detail.vue b/acdr-ui/src/pages/order/order-detail.vue
deleted file mode 100644
index 7dbae4c0..00000000
--- a/acdr-ui/src/pages/order/order-detail.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
-
-
-
- 服务类型:
- {{ orderDetail.serviceInfo.type }}
-
-
- 服务地址:
- {{ orderDetail.serviceInfo.address }}
-
-
- 预约时间:
- {{ orderDetail.reservationTime }}
-
-
- 服务时长:
- {{ orderDetail.serviceHours }} 小时
-
-
-
-
-
-
-
-
- 宠物名称:
- {{ orderDetail.pet.name }}
-
-
- 宠物品种:
- {{ orderDetail.pet.breed }}
-
-
-
-
-
-
-
- 下单用户:
- {{ orderDetail.user.nickname }} ({{ orderDetail.user.mobile }})
-
-
- 用户地址:
- {{ orderDetail.address.province }} {{ orderDetail.address.city }}
- {{ orderDetail.address.district }} {{ orderDetail.address.detailAddress }}
-
-
-
-
-
-
- 支付方式:
- {{ orderDetail.paymentMethod }}
-
-
- 支付状态:
- {{ orderDetail.isPay ? '已支付' : '未支付' }}
-
-
- 总价:
- ¥{{ orderDetail.price }}
-
-
-
-
-
-
- 订单二维码
-
-
- 加载中...
-
-
-
-
-
diff --git a/acdr-ui/src/pages/order/take.vue b/acdr-ui/src/pages/order/take.vue
deleted file mode 100644
index c207179b..00000000
--- a/acdr-ui/src/pages/order/take.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠托师接单页面',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
- 还没有相关的订单呢
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/others/agreement.vue b/acdr-ui/src/pages/others/agreement.vue
deleted file mode 100644
index 1957f4b7..00000000
--- a/acdr-ui/src/pages/others/agreement.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '服务条款页面',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/others/null.vue b/acdr-ui/src/pages/others/null.vue
deleted file mode 100644
index 0ef145b5..00000000
--- a/acdr-ui/src/pages/others/null.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
- 空空如也
-
-
-
-
-
diff --git a/acdr-ui/src/pages/others/official-account.vue b/acdr-ui/src/pages/others/official-account.vue
deleted file mode 100644
index 4d117742..00000000
--- a/acdr-ui/src/pages/others/official-account.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '宠屋微信公众号',
- },
-}
-
-
-
-
-
-
-
- 宠屋微信公众号
-
-
-
-
-
-
-
-
-
- 长按识别右侧二维码
-
- 你将获得
-
-
-
- 宠物行业一手资讯
-
-
-
- 官方活动重要通知
-
-
-
- 享受平台下单优惠
-
-
-
- 养猫常见问题科普
-
-
-
- 宠托师课程及培训
-
-
-
- 文末留言互动有礼
-
-
-
- 养护技巧攻略分享
-
-
-
- 每月定期宠粉福利
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/permission/bind-phone.vue b/acdr-ui/src/pages/permission/bind-phone.vue
deleted file mode 100644
index 7166d7cf..00000000
--- a/acdr-ui/src/pages/permission/bind-phone.vue
+++ /dev/null
@@ -1,87 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '手机号绑定',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/permission/real-name-auth.vue b/acdr-ui/src/pages/permission/real-name-auth.vue
deleted file mode 100644
index e69119ee..00000000
--- a/acdr-ui/src/pages/permission/real-name-auth.vue
+++ /dev/null
@@ -1,141 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '实名认证',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
-
- 请进行身份证实名认证
-
-
-
-
- 身份证人像面
-
-
-
- 身份证国徽面
-
-
-
-
-
-
-
-
-
- 您已经完成了实名认证!
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/pet/index.vue b/acdr-ui/src/pages/pet/index.vue
deleted file mode 100644
index 19b12e4d..00000000
--- a/acdr-ui/src/pages/pet/index.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠物管理',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/pet/pet-add-page.vue b/acdr-ui/src/pages/pet/pet-add-page.vue
deleted file mode 100644
index 22c95234..00000000
--- a/acdr-ui/src/pages/pet/pet-add-page.vue
+++ /dev/null
@@ -1,405 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '宠物档案信息',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
- 宠物头像
-
-
-
-
-
- 宠物名字
-
-
-
-
-
- 宠物生日
-
-
- {{ petBirthday || '请选择生日' }}
-
-
-
-
-
-
- 宠物性别
-
-
-
-
-
-
-
-
- 宠物品种
-
-
-
-
-
- 宠物毛色
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/pet/pet-detail-page.vue b/acdr-ui/src/pages/pet/pet-detail-page.vue
deleted file mode 100644
index 05dc9900..00000000
--- a/acdr-ui/src/pages/pet/pet-detail-page.vue
+++ /dev/null
@@ -1,188 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '宠物详情',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 0
- 粉丝
-
-
- 0
- 关注度
-
-
- 0
- 获得赞
-
-
-
-
-
-
- {{ petInfo.name || 'cat' }}
-
-
-
- 距离生日还有{{ daysUntilBirthday(petInfo.age) }}天哦
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ tab }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/push/door.vue b/acdr-ui/src/pages/push/door.vue
deleted file mode 100644
index 947ced81..00000000
--- a/acdr-ui/src/pages/push/door.vue
+++ /dev/null
@@ -1,374 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '发布上门服务',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ serviceTypes[selectedServiceType] }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 服务地点(范围)
- {{ serviceLocation }}
-
-
-
- 正在定位......
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/push/goods.vue b/acdr-ui/src/pages/push/goods.vue
deleted file mode 100644
index 37e0cb0a..00000000
--- a/acdr-ui/src/pages/push/goods.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
- ×
- 发闲置
-
-
-
-
-
-
- + 添加优质首图更吸引人~
-
-
-
- 广州 增城区
- 描述范例
- 搜索发布
-
-
-
- 价格
- ¥ 0.00
-
-
- 发货方式
- 邮寄(运费未填)
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/push/index.vue b/acdr-ui/src/pages/push/index.vue
deleted file mode 100644
index c1cc93cd..00000000
--- a/acdr-ui/src/pages/push/index.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '发布与分享',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
- 发布上门服务
-
-
- 发布我的专属上门服务
-
-
-
-
-
-
- 发布商品服务
-
-
- 发布我的专属商品服务
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/push/share.vue b/acdr-ui/src/pages/push/share.vue
deleted file mode 100644
index d1dfc51b..00000000
--- a/acdr-ui/src/pages/push/share.vue
+++ /dev/null
@@ -1,195 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '发布页面',
- },
-}
-
-
-
-
-
-
-
- 发布笔记
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ tag }}
-
-
-
-
-
-
- 添加地点
-
-
-
- 公开可见
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/accompany.vue b/acdr-ui/src/pages/service/accompany.vue
deleted file mode 100644
index c0892db0..00000000
--- a/acdr-ui/src/pages/service/accompany.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠物陪伴',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/detail.vue b/acdr-ui/src/pages/service/detail.vue
deleted file mode 100644
index 92fc31b7..00000000
--- a/acdr-ui/src/pages/service/detail.vue
+++ /dev/null
@@ -1,443 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '宠托师服务详情',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ serviceData.userName }}
-
- 认证{{ serviceData.certificationTime }}
- 服务过 {{ serviceData.serviceNumber }} 次
-
-
-
- {{ serviceData.address }}
-
- {{ serviceData.description }}
-
-
-
-
- {{ serviceData.serviceName }}服务费
-
-
-
-
- 食具清洁
-
-
-
- 添粮换水
-
-
-
- 铲屎添砂
-
-
- ¥{{ serviceData.price }}/次
-
-
-
-
-
- 其他费用
-
-
-
- 基础上门费
- 1km以内23元
-
-
-
- 每公里加价
- 每多1km加10元
-
-
-
-
-
-
- 用户评价
-
-
- {{ serviceData.comment.star }}
-
-
-
- ({{ serviceData.comment.commentNum }}条评论)
-
- {{ serviceData.comment.comment }}
-
- 暂无评论
-
-
-
-
- 服务位置
-
-
-
-
-
-
-
- ¥{{ serviceData.price }}/次 起
-
-
-
-
-
-
-
-
-
-
- 选择预约信息
-
-
- 服务宠物
-
-
-
- {{ pet.name }}
-
-
-
-
- +
-
-
-
-
- 预约时间
-
- {{ reservationDate || '选择日期' }}
-
-
-
- 选择服务时长
-
-
-
-
-
- 选择地址
-
-
- {{ selectedAddress.display || '请选择地址' }}
-
-
-
-
- +
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/door.vue b/acdr-ui/src/pages/service/door.vue
deleted file mode 100644
index 36470837..00000000
--- a/acdr-ui/src/pages/service/door.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '上门服务',
- },
-}
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/index.vue b/acdr-ui/src/pages/service/index.vue
deleted file mode 100644
index 250a4517..00000000
--- a/acdr-ui/src/pages/service/index.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '服务页面',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/knowledge.vue b/acdr-ui/src/pages/service/knowledge.vue
deleted file mode 100644
index 30ea8e74..00000000
--- a/acdr-ui/src/pages/service/knowledge.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '宠物宝典',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/my-service.vue b/acdr-ui/src/pages/service/my-service.vue
deleted file mode 100644
index 322b2195..00000000
--- a/acdr-ui/src/pages/service/my-service.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '我的服务',
- },
-}
-
-
-
-
-
-
- {{ service.serviceName }}
-
-
-
-
-
- {{ service.description }}
- 价格: ¥{{ service.price }}
- 地点: {{ service.address }}
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/search.vue b/acdr-ui/src/pages/service/search.vue
deleted file mode 100644
index 3968f61e..00000000
--- a/acdr-ui/src/pages/service/search.vue
+++ /dev/null
@@ -1,246 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '选择服务',
- navigationBarBackgroundColor: '#ffff',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 离我最近
-
-
- 价格
-
-
-
- 新发布
-
-
- 区域
-
-
-
-
-
-
- 选择服务
-
-
-
-
-
-
- {{ serviceType.label }}
-
-
-
-
-
-
-
- 选择宠托师
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/shop.vue b/acdr-ui/src/pages/service/shop.vue
deleted file mode 100644
index 24036e70..00000000
--- a/acdr-ui/src/pages/service/shop.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '商城页面',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/slippery.vue b/acdr-ui/src/pages/service/slippery.vue
deleted file mode 100644
index c857090e..00000000
--- a/acdr-ui/src/pages/service/slippery.vue
+++ /dev/null
@@ -1,177 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '宠物培溜',
- },
-}
-
-
-
-
-
-
-
-
-
-
- 上门喂猫
-
-
-
-
- 上门遛狗
-
-
-
-
-
-
- 已累计服务宠物
- 19,5602
- 截至2024.06
-
-
-
-
-
- 关注公众号
-
-
-
- 年卡优惠
-
-
-
- 小红书征集
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/service/store.vue b/acdr-ui/src/pages/service/store.vue
deleted file mode 100644
index 24036e70..00000000
--- a/acdr-ui/src/pages/service/store.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '商城页面',
- },
-}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/settings/index.vue b/acdr-ui/src/pages/settings/index.vue
deleted file mode 100644
index d7288ad4..00000000
--- a/acdr-ui/src/pages/settings/index.vue
+++ /dev/null
@@ -1,251 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: '设置',
- },
-}
-
-
-
-
-
-
-
- 修改
-
-
-
-
-
- 国际化设置
-
-
-
-
-
-
- 账户名称
- {{ sinfo.userName }}
-
-
-
- 手机号绑定
- {{ sinfo.mobile }}
-
-
-
- 实名认证
- 已实名
- 未实名
-
-
-
-
-
-
-
- 修改用户名
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/space/components/UserPost.vue b/acdr-ui/src/pages/space/components/UserPost.vue
deleted file mode 100644
index df8b76ff..00000000
--- a/acdr-ui/src/pages/space/components/UserPost.vue
+++ /dev/null
@@ -1,407 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ post.username }}
- {{ post.location }}
-
-
- {{ post.time }}
-
-
-
-
- {{ post.content }}
-
-
-
-
-
- {{ post.likes || '0' }}
-
-
-
-
- {{ post.favorites || '0' }}
-
-
-
- {{ post.comments || '0' }}
-
-
-
-
-
-
-
-
- {{ comment.userName }}
-
- {{ comment.content }}
-
-
- {{ comment.createdTime }}
- •
- {{ '国内' }}
-
-
-
-
- 加载更多...
-
-
-
-
-
-
- {{ beCommentId ? '@' + beCommentId.userName : beCommentId.userNamebeCommentId.userName }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/space/index.vue b/acdr-ui/src/pages/space/index.vue
deleted file mode 100644
index cb27ff02..00000000
--- a/acdr-ui/src/pages/space/index.vue
+++ /dev/null
@@ -1,400 +0,0 @@
-
-{
- style: {
- navigationBarTitleText: '互动空间',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
- 您已经互动了
- 10次,
- 还有
- 2次~
-
-
-
-
-
-
-
-
-
- 7月
- 17
- 今日任务
-
-
-
-
-
-
-
- {{ tab }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ user.name }}
-
-
-
- 暂无内容...
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/pages/webview/webview.vue b/acdr-ui/src/pages/webview/webview.vue
deleted file mode 100644
index 4cd61548..00000000
--- a/acdr-ui/src/pages/webview/webview.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-
-{
- layout: 'default',
- style: {
- navigationBarTitleText: 'h5小程序',
- navigationStyle: 'custom',
- },
-}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/service/mapService.js b/acdr-ui/src/service/mapService.js
index 9f1296e8..31760982 100644
--- a/acdr-ui/src/service/mapService.js
+++ b/acdr-ui/src/service/mapService.js
@@ -74,7 +74,7 @@ export const getLocation = async () => {
return res // 返回最新的位置信息
} catch (err) {
console.log(err)
- toast('获取位置失败')
+ // toast('获取位置失败')
throw err // 抛出错误,供调用者处理
}
}
diff --git a/acdr-ui/src/sheep/api/infra/file.js b/acdr-ui/src/sheep/api/infra/file.js
deleted file mode 100644
index ad01a79e..00000000
--- a/acdr-ui/src/sheep/api/infra/file.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import { baseUrl, apiPath, tenantId } from '@/sheep/config'
-
-const FileApi = {
- // 上传文件
- uploadFile: (file) => {
- // TODO 芋艿:访问令牌的接入;
- const token = uni.getStorageSync('token')
- uni.showLoading({
- title: '上传中',
- })
- return new Promise((resolve, reject) => {
- uni.uploadFile({
- url: baseUrl + apiPath + '/infra/file/upload',
- filePath: file,
- name: 'file',
- header: {
- // Accept: 'text/json',
- Accept: '*/*',
- 'tenant-id': tenantId,
- // Authorization: 'Bearer test247',
- },
- success: (uploadFileRes) => {
- const result = JSON.parse(uploadFileRes.data)
- if (result.error === 1) {
- uni.showToast({
- icon: 'none',
- title: result.msg,
- })
- } else {
- return resolve(result)
- }
- },
- fail: (error) => {
- console.log('上传失败:', error)
- return resolve(false)
- },
- complete: () => {
- uni.hideLoading()
- },
- })
- })
- },
-}
-
-export default FileApi
diff --git a/acdr-ui/src/sheep/api/member/address.js b/acdr-ui/src/sheep/api/member/address.js
deleted file mode 100644
index e54fa59e..00000000
--- a/acdr-ui/src/sheep/api/member/address.js
+++ /dev/null
@@ -1,53 +0,0 @@
-import request from '@/sheep/request'
-
-const AddressApi = {
- // 获得用户收件地址列表
- getAddressList: () => {
- return request({
- url: '/member/address/list',
- method: 'GET',
- })
- },
- // 创建用户收件地址
- createAddress: (data) => {
- return request({
- url: '/member/address/create',
- method: 'POST',
- data,
- custom: {
- showSuccess: true,
- successMsg: '保存成功',
- },
- })
- },
- // 更新用户收件地址
- updateAddress: (data) => {
- return request({
- url: '/member/address/update',
- method: 'PUT',
- data,
- custom: {
- showSuccess: true,
- successMsg: '更新成功',
- },
- })
- },
- // 获得用户收件地址
- getAddress: (id) => {
- return request({
- url: '/member/address/get',
- method: 'GET',
- params: { id },
- })
- },
- // 删除用户收件地址
- deleteAddress: (id) => {
- return request({
- url: '/member/address/delete',
- method: 'DELETE',
- params: { id },
- })
- },
-}
-
-export default AddressApi
diff --git a/acdr-ui/src/sheep/api/member/auth.js b/acdr-ui/src/sheep/api/member/auth.js
deleted file mode 100644
index 016b9d54..00000000
--- a/acdr-ui/src/sheep/api/member/auth.js
+++ /dev/null
@@ -1,132 +0,0 @@
-import request from '@/sheep/request'
-
-const AuthUtil = {
- // 使用手机 + 密码登录
- login: (data) => {
- return request({
- url: '/member/auth/login',
- method: 'POST',
- data,
- custom: {
- showSuccess: true,
- loadingMsg: '登录中',
- successMsg: '登录成功',
- },
- })
- },
- // 使用手机 + 验证码登录
- smsLogin: (data) => {
- return request({
- url: '/member/auth/sms-login',
- method: 'POST',
- data,
- custom: {
- showSuccess: true,
- loadingMsg: '登录中',
- successMsg: '登录成功',
- },
- })
- },
- // 发送手机验证码
- sendSmsCode: (mobile, scene) => {
- return request({
- url: '/member/auth/send-sms-code',
- method: 'POST',
- data: {
- mobile,
- scene,
- },
- custom: {
- loadingMsg: '发送中',
- showSuccess: true,
- successMsg: '发送成功',
- },
- })
- },
- // 登出系统
- logout: () => {
- return request({
- url: '/member/auth/logout',
- method: 'POST',
- })
- },
- // 刷新令牌
- refreshToken: (refreshToken) => {
- return request({
- url: '/member/auth/refresh-token',
- method: 'POST',
- params: {
- refreshToken,
- },
- custom: {
- loading: false, // 不用加载中
- showError: false, // 不展示错误提示
- },
- })
- },
- // 社交授权的跳转
- socialAuthRedirect: (type, redirectUri) => {
- return request({
- url: '/member/auth/social-auth-redirect',
- method: 'GET',
- params: {
- type,
- redirectUri,
- },
- custom: {
- showSuccess: true,
- loadingMsg: '登陆中',
- },
- })
- },
- // 社交快捷登录
- socialLogin: (type, code, state) => {
- return request({
- url: '/member/auth/social-login',
- method: 'POST',
- data: {
- type,
- code,
- state,
- },
- custom: {
- showSuccess: true,
- loadingMsg: '登陆中',
- },
- })
- },
- // 微信小程序的一键登录
- weixinMiniAppLogin: (phoneCode, loginCode, state) => {
- return request({
- url: '/member/auth/weixin-mini-app-login',
- method: 'POST',
- data: {
- phoneCode,
- loginCode,
- state,
- },
- custom: {
- showSuccess: true,
- loadingMsg: '登陆中',
- successMsg: '登录成功',
- },
- })
- },
- // 创建微信 JS SDK 初始化所需的签名
- createWeixinMpJsapiSignature: (url) => {
- return request({
- url: '/member/auth/create-weixin-jsapi-signature',
- method: 'POST',
- params: {
- url,
- },
- custom: {
- showError: false,
- showLoading: false,
- },
- })
- },
- //
-}
-
-export default AuthUtil
diff --git a/acdr-ui/src/sheep/api/member/point.js b/acdr-ui/src/sheep/api/member/point.js
deleted file mode 100644
index 285f8bf5..00000000
--- a/acdr-ui/src/sheep/api/member/point.js
+++ /dev/null
@@ -1,19 +0,0 @@
-import request from '@/sheep/request'
-
-const PointApi = {
- // 获得用户积分记录分页
- getPointRecordPage: (params) => {
- if (params.addStatus === undefined) {
- delete params.addStatus
- }
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/member/point/record/page?${queryString}`,
- method: 'GET',
- })
- },
-}
-
-export default PointApi
diff --git a/acdr-ui/src/sheep/api/member/signin.js b/acdr-ui/src/sheep/api/member/signin.js
deleted file mode 100644
index 873dfe55..00000000
--- a/acdr-ui/src/sheep/api/member/signin.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import request from '@/sheep/request'
-
-const SignInApi = {
- // 获得签到规则列表
- getSignInConfigList: () => {
- return request({
- url: '/member/sign-in/config/list',
- method: 'GET',
- })
- },
- // 获得个人签到统计
- getSignInRecordSummary: () => {
- return request({
- url: '/member/sign-in/record/get-summary',
- method: 'GET',
- })
- },
- // 签到
- createSignInRecord: () => {
- return request({
- url: '/member/sign-in/record/create',
- method: 'POST',
- })
- },
- // 获得签到记录分页
- getSignRecordPage: (params) => {
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/member/sign-in/record/page?${queryString}`,
- method: 'GET',
- })
- },
-}
-
-export default SignInApi
diff --git a/acdr-ui/src/sheep/api/member/social.js b/acdr-ui/src/sheep/api/member/social.js
deleted file mode 100644
index 509418a7..00000000
--- a/acdr-ui/src/sheep/api/member/social.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import request from '@/sheep/request'
-
-const SocialApi = {
- // 获得社交用户
- getSocialUser: (type) => {
- return request({
- url: '/member/social-user/get',
- method: 'GET',
- params: {
- type,
- },
- custom: {
- showLoading: false,
- },
- })
- },
- // 社交绑定
- socialBind: (type, code, state) => {
- return request({
- url: '/member/social-user/bind',
- method: 'POST',
- data: {
- type,
- code,
- state,
- },
- custom: {
- custom: {
- showSuccess: true,
- loadingMsg: '绑定中',
- successMsg: '绑定成功',
- },
- },
- })
- },
- // 社交绑定
- socialUnbind: (type, openid) => {
- return request({
- url: '/member/social-user/unbind',
- method: 'DELETE',
- data: {
- type,
- openid,
- },
- custom: {
- showLoading: false,
- loadingMsg: '解除绑定',
- successMsg: '解绑成功',
- },
- })
- },
- // 获取订阅消息模板列表
- getSubscribeTemplateList: () =>
- request({
- url: '/member/social-user/get-subscribe-template-list',
- method: 'GET',
- custom: {
- showError: false,
- showLoading: false,
- },
- }),
- // 获取微信小程序码
- getWxaQrcode: async (path, query) => {
- return await request({
- url: '/member/social-user/wxa-qrcode',
- method: 'POST',
- data: {
- scene: query,
- path,
- checkPath: false, // TODO 开发环境暂不检查 path 是否存在
- },
- })
- },
-}
-
-export default SocialApi
diff --git a/acdr-ui/src/sheep/api/member/user.js b/acdr-ui/src/sheep/api/member/user.js
deleted file mode 100644
index 9287be91..00000000
--- a/acdr-ui/src/sheep/api/member/user.js
+++ /dev/null
@@ -1,84 +0,0 @@
-import request from '@/sheep/request'
-
-const UserApi = {
- // 获得基本信息
- getUserInfo: () => {
- return request({
- url: '/member/user/get',
- method: 'GET',
- custom: {
- showLoading: false,
- auth: true,
- },
- })
- },
- // 修改基本信息
- updateUser: (data) => {
- return request({
- url: '/member/user/update',
- method: 'PUT',
- data,
- custom: {
- auth: true,
- showSuccess: true,
- successMsg: '更新成功',
- },
- })
- },
- // 修改用户手机
- updateUserMobile: (data) => {
- return request({
- url: '/member/user/update-mobile',
- method: 'PUT',
- data,
- custom: {
- loadingMsg: '验证中',
- showSuccess: true,
- successMsg: '修改成功',
- },
- })
- },
- // 基于微信小程序的授权码,修改用户手机
- updateUserMobileByWeixin: (code) => {
- return request({
- url: '/member/user/update-mobile-by-weixin',
- method: 'PUT',
- data: {
- code,
- },
- custom: {
- showSuccess: true,
- loadingMsg: '获取中',
- successMsg: '修改成功',
- },
- })
- },
- // 修改密码
- updateUserPassword: (data) => {
- return request({
- url: '/member/user/update-password',
- method: 'PUT',
- data,
- custom: {
- loadingMsg: '验证中',
- showSuccess: true,
- successMsg: '修改成功',
- },
- })
- },
- // 重置密码
- resetUserPassword: (data) => {
- return request({
- url: '/member/user/reset-password',
- method: 'PUT',
- data,
- custom: {
- loadingMsg: '验证中',
- showSuccess: true,
- successMsg: '修改成功',
- },
- })
- },
-}
-
-export default UserApi
diff --git a/acdr-ui/src/sheep/api/migration/app.js b/acdr-ui/src/sheep/api/migration/app.js
deleted file mode 100644
index 7ce3beae..00000000
--- a/acdr-ui/src/sheep/api/migration/app.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import request from '@/sheep/request'
-
-// TODO 芋艿:小程序直播还不支持
-export default {
- // 小程序直播
- mplive: {
- getRoomList: (ids) =>
- request({
- url: 'app/mplive/getRoomList',
- method: 'GET',
- params: {
- ids: ids.join(','),
- },
- }),
- getMpLink: () =>
- request({
- url: 'app/mplive/getMpLink',
- method: 'GET',
- }),
- },
-}
diff --git a/acdr-ui/src/sheep/api/migration/index.js b/acdr-ui/src/sheep/api/migration/index.js
deleted file mode 100644
index 53961a7f..00000000
--- a/acdr-ui/src/sheep/api/migration/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const files = import.meta.glob('./*.js', { eager: true })
-let api = {}
-Object.keys(files).forEach((key) => {
- api = {
- ...api,
- [key.replace(/(.*\/)*([^.]+).*/gi, '$2')]: files[key].default,
- }
-})
-
-export default api
diff --git a/acdr-ui/src/sheep/api/migration/third.js b/acdr-ui/src/sheep/api/migration/third.js
deleted file mode 100644
index 8be35292..00000000
--- a/acdr-ui/src/sheep/api/migration/third.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import request from '@/sheep/request'
-
-export default {
- // 苹果相关
- apple: {
- // 第三方登录
- login: (data) =>
- request({
- url: 'third/apple/login',
- method: 'POST',
- data,
- custom: {
- showSuccess: true,
- loadingMsg: '登陆中',
- },
- }),
- },
-}
diff --git a/acdr-ui/src/sheep/api/pay/channel.js b/acdr-ui/src/sheep/api/pay/channel.js
deleted file mode 100644
index f1f44990..00000000
--- a/acdr-ui/src/sheep/api/pay/channel.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import request from '@/sheep/request'
-
-const PayChannelApi = {
- // 获得指定应用的开启的支付渠道编码列表
- getEnableChannelCodeList: (appId) => {
- return request({
- url: '/pay/channel/get-enable-code-list',
- method: 'GET',
- params: { appId },
- })
- },
-}
-
-export default PayChannelApi
diff --git a/acdr-ui/src/sheep/api/pay/order.js b/acdr-ui/src/sheep/api/pay/order.js
deleted file mode 100644
index b900c9fc..00000000
--- a/acdr-ui/src/sheep/api/pay/order.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import request from '@/sheep/request'
-
-const PayOrderApi = {
- // 获得支付订单
- getOrder: (id) => {
- return request({
- url: '/pay/order/get',
- method: 'GET',
- params: { id },
- })
- },
- // 提交支付订单
- submitOrder: (data) => {
- return request({
- url: '/pay/order/submit',
- method: 'POST',
- data,
- })
- },
-}
-
-export default PayOrderApi
diff --git a/acdr-ui/src/sheep/api/pay/wallet.js b/acdr-ui/src/sheep/api/pay/wallet.js
deleted file mode 100644
index 24e902d6..00000000
--- a/acdr-ui/src/sheep/api/pay/wallet.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import request from '@/sheep/request'
-
-const PayWalletApi = {
- // 获取钱包
- getPayWallet() {
- return request({
- url: '/pay/wallet/get',
- method: 'GET',
- custom: {
- showLoading: false,
- auth: true,
- },
- })
- },
- // 获得钱包流水分页
- getWalletTransactionPage: (params) => {
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/pay/wallet-transaction/page?${queryString}`,
- method: 'GET',
- })
- },
- // 获得钱包流水统计
- getWalletTransactionSummary: (params) => {
- const queryString = `createTime=${params.createTime[0]}&createTime=${params.createTime[1]}`
- return request({
- url: `/pay/wallet-transaction/get-summary?${queryString}`,
- // url: `/pay/wallet-transaction/get-summary`,
- method: 'GET',
- // params: params
- })
- },
- // 获得钱包充值套餐列表
- getWalletRechargePackageList: () => {
- return request({
- url: '/pay/wallet-recharge-package/list',
- method: 'GET',
- custom: {
- showError: false,
- showLoading: false,
- },
- })
- },
- // 创建钱包充值记录(发起充值)
- createWalletRecharge: (data) => {
- return request({
- url: '/pay/wallet-recharge/create',
- method: 'POST',
- data,
- })
- },
- // 获得钱包充值记录分页
- getWalletRechargePage: (params) => {
- return request({
- url: '/pay/wallet-recharge/page',
- method: 'GET',
- params,
- custom: {
- showError: false,
- showLoading: false,
- },
- })
- },
-}
-
-export default PayWalletApi
diff --git a/acdr-ui/src/sheep/api/product/category.js b/acdr-ui/src/sheep/api/product/category.js
deleted file mode 100644
index f3be8cd2..00000000
--- a/acdr-ui/src/sheep/api/product/category.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import request from '@/sheep/request'
-
-const CategoryApi = {
- // 查询分类列表
- getCategoryList: () => {
- return request({
- url: '/product/category/list',
- method: 'GET',
- })
- },
- // 查询分类列表,指定编号
- getCategoryListByIds: (ids) => {
- return request({
- url: '/product/category/list-by-ids',
- method: 'GET',
- params: { ids },
- })
- },
-}
-
-export default CategoryApi
diff --git a/acdr-ui/src/sheep/api/product/comment.js b/acdr-ui/src/sheep/api/product/comment.js
deleted file mode 100644
index 83c1ffd2..00000000
--- a/acdr-ui/src/sheep/api/product/comment.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import request from '@/sheep/request'
-
-const CommentApi = {
- // 获得商品评价分页
- getCommentPage: (spuId, pageNo, pageSize, type) => {
- return request({
- url: '/product/comment/page',
- method: 'GET',
- params: {
- spuId,
- pageNo,
- pageSize,
- type,
- },
- custom: {
- showLoading: false,
- showError: false,
- },
- })
- },
-}
-export default CommentApi
diff --git a/acdr-ui/src/sheep/api/product/favorite.js b/acdr-ui/src/sheep/api/product/favorite.js
deleted file mode 100644
index fd603bf5..00000000
--- a/acdr-ui/src/sheep/api/product/favorite.js
+++ /dev/null
@@ -1,54 +0,0 @@
-import request from '@/sheep/request'
-
-const FavoriteApi = {
- // 获得商品收藏分页
- getFavoritePage: (data) => {
- return request({
- url: '/product/favorite/page',
- method: 'GET',
- params: data,
- })
- },
- // 检查是否收藏过商品
- isFavoriteExists: (spuId) => {
- return request({
- url: '/product/favorite/exits',
- method: 'GET',
- params: {
- spuId,
- },
- })
- },
- // 添加商品收藏
- createFavorite: (spuId) => {
- return request({
- url: '/product/favorite/create',
- method: 'POST',
- data: {
- spuId,
- },
- custom: {
- auth: true,
- showSuccess: true,
- successMsg: '收藏成功',
- },
- })
- },
- // 取消商品收藏
- deleteFavorite: (spuId) => {
- return request({
- url: '/product/favorite/delete',
- method: 'DELETE',
- data: {
- spuId,
- },
- custom: {
- auth: true,
- showSuccess: true,
- successMsg: '取消成功',
- },
- })
- },
-}
-
-export default FavoriteApi
diff --git a/acdr-ui/src/sheep/api/product/history.js b/acdr-ui/src/sheep/api/product/history.js
deleted file mode 100644
index 25104f5a..00000000
--- a/acdr-ui/src/sheep/api/product/history.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import request from '@/sheep/request'
-
-const SpuHistoryApi = {
- // 删除商品浏览记录
- deleteBrowseHistory: (spuIds) => {
- return request({
- url: '/product/browse-history/delete',
- method: 'DELETE',
- data: { spuIds },
- custom: {
- showSuccess: true,
- successMsg: '删除成功',
- },
- })
- },
- // 清空商品浏览记录
- cleanBrowseHistory: () => {
- return request({
- url: '/product/browse-history/clean',
- method: 'DELETE',
- custom: {
- showSuccess: true,
- successMsg: '清空成功',
- },
- })
- },
- // 获得商品浏览记录分页
- getBrowseHistoryPage: (data) => {
- return request({
- url: '/product/browse-history/page',
- method: 'GET',
- data,
- custom: {
- showLoading: false,
- },
- })
- },
-}
-export default SpuHistoryApi
diff --git a/acdr-ui/src/sheep/api/product/spu.js b/acdr-ui/src/sheep/api/product/spu.js
deleted file mode 100644
index 300801ba..00000000
--- a/acdr-ui/src/sheep/api/product/spu.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import request from '@/sheep/request'
-
-const SpuApi = {
- // 获得商品 SPU 列表
- getSpuListByIds: (ids) => {
- return request({
- url: '/product/spu/list-by-ids',
- method: 'GET',
- params: { ids },
- custom: {
- showLoading: false,
- showError: false,
- },
- })
- },
- // 获得商品 SPU 分页
- getSpuPage: (params) => {
- return request({
- url: '/product/spu/page',
- method: 'GET',
- params,
- custom: {
- showLoading: false,
- showError: false,
- },
- })
- },
- // 查询商品
- getSpuDetail: (id) => {
- return request({
- url: '/product/spu/get-detail',
- method: 'GET',
- params: { id },
- custom: {
- showLoading: false,
- showError: false,
- },
- })
- },
-}
-export default SpuApi
diff --git a/acdr-ui/src/sheep/api/promotion/activity.js b/acdr-ui/src/sheep/api/promotion/activity.js
deleted file mode 100644
index f2c5ea7b..00000000
--- a/acdr-ui/src/sheep/api/promotion/activity.js
+++ /dev/null
@@ -1,16 +0,0 @@
-import request from '@/sheep/request'
-
-const ActivityApi = {
- // 获得单个商品,近期参与的每个活动
- getActivityListBySpuId: (spuId) => {
- return request({
- url: '/promotion/activity/list-by-spu-id',
- method: 'GET',
- params: {
- spuId,
- },
- })
- },
-}
-
-export default ActivityApi
diff --git a/acdr-ui/src/sheep/api/promotion/article.js b/acdr-ui/src/sheep/api/promotion/article.js
deleted file mode 100644
index bb51b450..00000000
--- a/acdr-ui/src/sheep/api/promotion/article.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import request from '@/sheep/request'
-
-export default {
- // 获得文章详情
- getArticle: (id, title) => {
- return request({
- url: '/promotion/article/get',
- method: 'GET',
- params: { id, title },
- })
- },
-}
diff --git a/acdr-ui/src/sheep/api/promotion/combination.js b/acdr-ui/src/sheep/api/promotion/combination.js
deleted file mode 100644
index f8d52a23..00000000
--- a/acdr-ui/src/sheep/api/promotion/combination.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import request from '@/sheep/request'
-
-// 拼团 API
-const CombinationApi = {
- // 获得拼团活动列表
- getCombinationActivityList: (count) => {
- return request({
- url: '/promotion/combination-activity/list',
- method: 'GET',
- params: { count },
- })
- },
-
- // 获得拼团活动分页
- getCombinationActivityPage: (params) => {
- return request({
- url: '/promotion/combination-activity/page',
- method: 'GET',
- params,
- })
- },
-
- // 获得拼团活动明细
- getCombinationActivity: (id) => {
- return request({
- url: '/promotion/combination-activity/get-detail',
- method: 'GET',
- params: {
- id,
- },
- })
- },
-
- // 获得最近 n 条拼团记录(团长发起的)
- getHeadCombinationRecordList: (activityId, status, count) => {
- return request({
- url: '/promotion/combination-record/get-head-list',
- method: 'GET',
- params: {
- activityId,
- status,
- count,
- },
- })
- },
-
- // 获得我的拼团记录分页
- getCombinationRecordPage: (params) => {
- return request({
- url: '/promotion/combination-record/page',
- method: 'GET',
- params,
- })
- },
-
- // 获得拼团记录明细
- getCombinationRecordDetail: (id) => {
- return request({
- url: '/promotion/combination-record/get-detail',
- method: 'GET',
- params: {
- id,
- },
- })
- },
-
- // 获得拼团记录的概要信息
- getCombinationRecordSummary: () => {
- return request({
- url: '/promotion/combination-record/get-summary',
- method: 'GET',
- })
- },
-}
-
-export default CombinationApi
diff --git a/acdr-ui/src/sheep/api/promotion/coupon.js b/acdr-ui/src/sheep/api/promotion/coupon.js
deleted file mode 100644
index b6213a18..00000000
--- a/acdr-ui/src/sheep/api/promotion/coupon.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import request from '@/sheep/request'
-
-const CouponApi = {
- // 获得优惠劵模板列表
- getCouponTemplateListByIds: (ids) => {
- return request({
- url: '/promotion/coupon-template/list-by-ids',
- method: 'GET',
- params: { ids },
- custom: {
- showLoading: false, // 不展示 Loading,避免领取优惠劵时,不成功提示
- showError: false,
- },
- })
- },
- // 获得优惠劵模版列表
- getCouponTemplateList: (spuId, productScope, count) => {
- return request({
- url: '/promotion/coupon-template/list',
- method: 'GET',
- params: { spuId, productScope, count },
- })
- },
- // 获得优惠劵模版分页
- getCouponTemplatePage: (params) => {
- return request({
- url: '/promotion/coupon-template/page',
- method: 'GET',
- params,
- })
- },
- // 获得优惠劵模版
- getCouponTemplate: (id) => {
- return request({
- url: '/promotion/coupon-template/get',
- method: 'GET',
- params: { id },
- })
- },
- // 我的优惠劵列表
- getCouponPage: (params) => {
- return request({
- url: '/promotion/coupon/page',
- method: 'GET',
- params,
- })
- },
- // 领取优惠券
- takeCoupon: (templateId) => {
- return request({
- url: '/promotion/coupon/take',
- method: 'POST',
- data: { templateId },
- custom: {
- auth: true,
- showLoading: true,
- loadingMsg: '领取中',
- showSuccess: true,
- successMsg: '领取成功',
- },
- })
- },
- // 获得优惠劵
- getCoupon: (id) => {
- return request({
- url: '/promotion/coupon/get',
- method: 'GET',
- params: { id },
- })
- },
- // 获得未使用的优惠劵数量
- getUnusedCouponCount: () => {
- return request({
- url: '/promotion/coupon/get-unused-count',
- method: 'GET',
- custom: {
- showLoading: false,
- auth: true,
- },
- })
- },
- // 获得匹配指定商品的优惠劵列表
- getMatchCouponList: (price, spuIds, skuIds, categoryIds) => {
- return request({
- url: '/promotion/coupon/match-list',
- method: 'GET',
- params: {
- price,
- spuIds: spuIds.join(','),
- skuIds: skuIds.join(','),
- categoryIds: categoryIds.join(','),
- },
- custom: {
- showError: false,
- showLoading: false, // 避免影响 settlementOrder 结算的结果
- },
- })
- },
-}
-
-export default CouponApi
diff --git a/acdr-ui/src/sheep/api/promotion/diy.js b/acdr-ui/src/sheep/api/promotion/diy.js
deleted file mode 100644
index 8f6484b3..00000000
--- a/acdr-ui/src/sheep/api/promotion/diy.js
+++ /dev/null
@@ -1,56 +0,0 @@
-import request from '@/sheep/request'
-
-const DiyApi = {
- getUsedDiyTemplate: () => {
- return request({
- url: '/promotion/diy-template/used',
- method: 'GET',
- custom: {
- showError: false,
- showLoading: false,
- },
- })
- },
- getDiyTemplate: (id) => {
- return request({
- url: '/promotion/diy-template/get',
- method: 'GET',
- params: {
- id,
- },
- custom: {
- showError: false,
- showLoading: false,
- },
- })
- },
- getDiyPage: (id) => {
- return request({
- url: '/promotion/diy-page/get',
- method: 'GET',
- params: {
- id,
- },
- })
- },
- updatePhone: (id) => {
- return request({
- url: '/api/setting/updatePhone',
- method: 'POST',
- params: {
- id,
- },
- })
- },
- getCode: (id) => {
- return request({
- url: '/public/getCode',
- method: 'GET',
- params: {
- id,
- },
- })
- },
-}
-
-export default DiyApi
diff --git a/acdr-ui/src/sheep/api/promotion/kefu.js b/acdr-ui/src/sheep/api/promotion/kefu.js
deleted file mode 100644
index fc31eb84..00000000
--- a/acdr-ui/src/sheep/api/promotion/kefu.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import request from '@/sheep/request'
-
-const KeFuApi = {
- sendKefuMessage: (data) => {
- return request({
- url: '/promotion/kefu-message/send',
- method: 'POST',
- data,
- custom: {
- auth: true,
- showLoading: true,
- loadingMsg: '发送中',
- showSuccess: true,
- successMsg: '发送成功',
- },
- })
- },
- getKefuMessagePage: (params) => {
- return request({
- url: '/promotion/kefu-message/page',
- method: 'GET',
- params,
- custom: {
- auth: true,
- showLoading: false,
- },
- })
- },
-}
-
-export default KeFuApi
diff --git a/acdr-ui/src/sheep/api/promotion/rewardActivity.js b/acdr-ui/src/sheep/api/promotion/rewardActivity.js
deleted file mode 100644
index 52491457..00000000
--- a/acdr-ui/src/sheep/api/promotion/rewardActivity.js
+++ /dev/null
@@ -1,14 +0,0 @@
-import request from '@/sheep/request'
-
-const RewardActivityApi = {
- // 获得满减送活动
- getRewardActivity: (id) => {
- return request({
- url: '/promotion/reward-activity/get',
- method: 'GET',
- params: { id },
- })
- },
-}
-
-export default RewardActivityApi
diff --git a/acdr-ui/src/sheep/api/promotion/seckill.js b/acdr-ui/src/sheep/api/promotion/seckill.js
deleted file mode 100644
index d02cd031..00000000
--- a/acdr-ui/src/sheep/api/promotion/seckill.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import request from '@/sheep/request'
-
-const SeckillApi = {
- // 获得秒杀时间段列表
- getSeckillConfigList: () => {
- return request({ url: 'promotion/seckill-config/list', method: 'GET' })
- },
-
- // 获得当前秒杀活动
- getNowSeckillActivity: () => {
- return request({ url: 'promotion/seckill-activity/get-now', method: 'GET' })
- },
-
- // 获得秒杀活动分页
- getSeckillActivityPage: (params) => {
- return request({ url: 'promotion/seckill-activity/page', method: 'GET', params })
- },
-
- /**
- * 获得秒杀活动明细
- * @param {number} id 秒杀活动编号
- * @return {*}
- */
- getSeckillActivity: (id) => {
- return request({
- url: 'promotion/seckill-activity/get-detail',
- method: 'GET',
- params: { id },
- })
- },
-}
-
-export default SeckillApi
diff --git a/acdr-ui/src/sheep/api/system/area.js b/acdr-ui/src/sheep/api/system/area.js
deleted file mode 100644
index 317ecb14..00000000
--- a/acdr-ui/src/sheep/api/system/area.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import request from '@/sheep/request'
-
-const AreaApi = {
- // 获得地区树
- getAreaTree: () => {
- return request({
- url: '/system/area/tree',
- method: 'GET',
- })
- },
-}
-
-export default AreaApi
diff --git a/acdr-ui/src/sheep/api/trade/afterSale.js b/acdr-ui/src/sheep/api/trade/afterSale.js
deleted file mode 100644
index 396b7dea..00000000
--- a/acdr-ui/src/sheep/api/trade/afterSale.js
+++ /dev/null
@@ -1,63 +0,0 @@
-import request from '@/sheep/request'
-
-const AfterSaleApi = {
- // 获得售后分页
- getAfterSalePage: (params) => {
- return request({
- url: `/trade/after-sale/page`,
- method: 'GET',
- params,
- custom: {
- showLoading: false,
- },
- })
- },
- // 创建售后
- createAfterSale: (data) => {
- return request({
- url: `/trade/after-sale/create`,
- method: 'POST',
- data,
- })
- },
- // 获得售后
- getAfterSale: (id) => {
- return request({
- url: `/trade/after-sale/get`,
- method: 'GET',
- params: {
- id,
- },
- })
- },
- // 取消售后
- cancelAfterSale: (id) => {
- return request({
- url: `/trade/after-sale/cancel`,
- method: 'DELETE',
- params: {
- id,
- },
- })
- },
- // 获得售后日志列表
- getAfterSaleLogList: (afterSaleId) => {
- return request({
- url: `/trade/after-sale-log/list`,
- method: 'GET',
- params: {
- afterSaleId,
- },
- })
- },
- // 退回货物
- deliveryAfterSale: (data) => {
- return request({
- url: `/trade/after-sale/delivery`,
- method: 'PUT',
- data,
- })
- },
-}
-
-export default AfterSaleApi
diff --git a/acdr-ui/src/sheep/api/trade/brokerage.js b/acdr-ui/src/sheep/api/trade/brokerage.js
deleted file mode 100644
index 230bc694..00000000
--- a/acdr-ui/src/sheep/api/trade/brokerage.js
+++ /dev/null
@@ -1,93 +0,0 @@
-import request from '@/sheep/request'
-
-const BrokerageApi = {
- // 绑定分销用户
- bindBrokerageUser: (data) => {
- return request({
- url: '/trade/brokerage-user/bind',
- method: 'PUT',
- data,
- })
- },
- // 获得个人分销信息
- getBrokerageUser: () => {
- return request({
- url: '/trade/brokerage-user/get',
- method: 'GET',
- })
- },
- // 获得个人分销统计
- getBrokerageUserSummary: () => {
- return request({
- url: '/trade/brokerage-user/get-summary',
- method: 'GET',
- })
- },
- // 获得分销记录分页
- getBrokerageRecordPage: (params) => {
- if (params.status === undefined) {
- delete params.status
- }
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/trade/brokerage-record/page?${queryString}`,
- method: 'GET',
- })
- },
- // 创建分销提现
- createBrokerageWithdraw: (data) => {
- return request({
- url: '/trade/brokerage-withdraw/create',
- method: 'POST',
- data,
- })
- },
- // 获得商品的分销金额
- getProductBrokeragePrice: (spuId) => {
- return request({
- url: '/trade/brokerage-record/get-product-brokerage-price',
- method: 'GET',
- params: { spuId },
- })
- },
- // 获得分销用户排行(基于佣金)
- getRankByPrice: (params) => {
- const queryString = `times=${params.times[0]}×=${params.times[1]}`
- return request({
- url: `/trade/brokerage-user/get-rank-by-price?${queryString}`,
- method: 'GET',
- })
- },
- // 获得分销用户排行分页(基于佣金)
- getBrokerageUserChildSummaryPageByPrice: (params) => {
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/trade/brokerage-user/rank-page-by-price?${queryString}`,
- method: 'GET',
- })
- },
- // 获得分销用户排行分页(基于用户量)
- getBrokerageUserRankPageByUserCount: (params) => {
- const queryString = Object.keys(params)
- .map((key) => encodeURIComponent(key) + '=' + params[key])
- .join('&')
- return request({
- url: `/trade/brokerage-user/rank-page-by-user-count?${queryString}`,
- method: 'GET',
- })
- },
- // 获得下级分销统计分页
- getBrokerageUserChildSummaryPage: (params) => {
- return request({
- url: '/trade/brokerage-user/child-summary-page',
- method: 'GET',
- params,
- })
- },
-}
-
-export default BrokerageApi
diff --git a/acdr-ui/src/sheep/api/trade/cart.js b/acdr-ui/src/sheep/api/trade/cart.js
deleted file mode 100644
index 31b833f7..00000000
--- a/acdr-ui/src/sheep/api/trade/cart.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import request from '@/sheep/request'
-
-const CartApi = {
- addCart: (data) => {
- return request({
- url: '/trade/cart/add',
- method: 'POST',
- data,
- custom: {
- showSuccess: true,
- successMsg: '已添加到购物车~',
- },
- })
- },
- updateCartCount: (data) => {
- return request({
- url: '/trade/cart/update-count',
- method: 'PUT',
- data,
- })
- },
- updateCartSelected: (data) => {
- return request({
- url: '/trade/cart/update-selected',
- method: 'PUT',
- data,
- })
- },
- deleteCart: (ids) => {
- return request({
- url: '/trade/cart/delete',
- method: 'DELETE',
- params: {
- ids,
- },
- })
- },
- getCartList: () => {
- return request({
- url: '/trade/cart/list',
- method: 'GET',
- custom: {
- showLoading: false,
- auth: true,
- },
- })
- },
-}
-
-export default CartApi
diff --git a/acdr-ui/src/sheep/api/trade/config.js b/acdr-ui/src/sheep/api/trade/config.js
deleted file mode 100644
index 67a0e298..00000000
--- a/acdr-ui/src/sheep/api/trade/config.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import request from '@/sheep/request'
-
-const TradeConfigApi = {
- // 获得交易配置
- getTradeConfig: () => {
- return request({
- url: `/trade/config/get`,
- method: 'GET',
- })
- },
-}
-
-export default TradeConfigApi
diff --git a/acdr-ui/src/sheep/api/trade/delivery.js b/acdr-ui/src/sheep/api/trade/delivery.js
deleted file mode 100644
index 92ac72fa..00000000
--- a/acdr-ui/src/sheep/api/trade/delivery.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import request from '@/sheep/request'
-
-const DeliveryApi = {
- // 获得快递公司列表
- getDeliveryExpressList: () => {
- return request({
- url: `/trade/delivery/express/list`,
- method: 'get',
- })
- },
- // 获得自提门店列表
- getDeliveryPickUpStoreList: (params) => {
- return request({
- url: `/trade/delivery/pick-up-store/list`,
- method: 'GET',
- params,
- })
- },
- // 获得自提门店
- getDeliveryPickUpStore: (id) => {
- return request({
- url: `/trade/delivery/pick-up-store/get`,
- method: 'GET',
- params: {
- id,
- },
- })
- },
-}
-
-export default DeliveryApi
diff --git a/acdr-ui/src/sheep/api/trade/order.js b/acdr-ui/src/sheep/api/trade/order.js
deleted file mode 100644
index df404ec6..00000000
--- a/acdr-ui/src/sheep/api/trade/order.js
+++ /dev/null
@@ -1,149 +0,0 @@
-import request from '@/sheep/request'
-import { isEmpty } from '@/sheep/helper/utils'
-
-const OrderApi = {
- // 计算订单信息
- settlementOrder: (data) => {
- const data2 = {
- ...data,
- }
- // 移除多余字段
- if (!(data.couponId > 0)) {
- delete data2.couponId
- }
- if (!(data.addressId > 0)) {
- delete data2.addressId
- }
- if (!(data.pickUpStoreId > 0)) {
- delete data2.pickUpStoreId
- }
- if (isEmpty(data.receiverName)) {
- delete data2.receiverName
- }
- if (isEmpty(data.receiverMobile)) {
- delete data2.receiverMobile
- }
- if (!(data.combinationActivityId > 0)) {
- delete data2.combinationActivityId
- }
- if (!(data.combinationHeadId > 0)) {
- delete data2.combinationHeadId
- }
- if (!(data.seckillActivityId > 0)) {
- delete data2.seckillActivityId
- }
- // 解决 SpringMVC 接受 List- 参数的问题
- delete data2.items
- for (let i = 0; i < data.items.length; i++) {
- data2[encodeURIComponent('items[' + i + '' + '].skuId')] = data.items[i].skuId + ''
- data2[encodeURIComponent('items[' + i + '' + '].count')] = data.items[i].count + ''
- if (data.items[i].cartId) {
- data2[encodeURIComponent('items[' + i + '' + '].cartId')] = data.items[i].cartId + ''
- }
- }
- const queryString = Object.keys(data2)
- .map((key) => key + '=' + data2[key])
- .join('&')
- return request({
- url: `/trade/order/settlement?${queryString}`,
- method: 'GET',
- custom: {
- showError: true,
- showLoading: true,
- },
- })
- },
- // 创建订单
- createOrder: (data) => {
- return request({
- url: `/trade/order/create`,
- method: 'POST',
- data,
- })
- },
- // 获得订单
- getOrder: (id) => {
- return request({
- url: `/trade/order/get-detail`,
- method: 'GET',
- params: {
- id,
- },
- custom: {
- showLoading: false,
- },
- })
- },
- // 订单列表
- getOrderPage: (params) => {
- return request({
- url: '/trade/order/page',
- method: 'GET',
- params,
- custom: {
- showLoading: false,
- },
- })
- },
- // 确认收货
- receiveOrder: (id) => {
- return request({
- url: `/trade/order/receive`,
- method: 'PUT',
- params: {
- id,
- },
- })
- },
- // 取消订单
- cancelOrder: (id) => {
- return request({
- url: `/trade/order/cancel`,
- method: 'DELETE',
- params: {
- id,
- },
- })
- },
- // 删除订单
- deleteOrder: (id) => {
- return request({
- url: `/trade/order/delete`,
- method: 'DELETE',
- params: {
- id,
- },
- })
- },
- // 获得交易订单的物流轨迹
- getOrderExpressTrackList: (id) => {
- return request({
- url: `/trade/order/get-express-track-list`,
- method: 'GET',
- params: {
- id,
- },
- })
- },
- // 获得交易订单数量
- getOrderCount: () => {
- return request({
- url: '/trade/order/get-count',
- method: 'GET',
- custom: {
- showLoading: false,
- auth: true,
- },
- })
- },
- // 创建单个评论
- createOrderItemComment: (data) => {
- return request({
- url: `/trade/order/item/create-comment`,
- method: 'POST',
- data,
- })
- },
-}
-
-export default OrderApi
diff --git a/acdr-ui/src/sheep/components/s-activity-pop/s-activity-pop.vue b/acdr-ui/src/sheep/components/s-activity-pop/s-activity-pop.vue
deleted file mode 100644
index 3d9f3f02..00000000
--- a/acdr-ui/src/sheep/components/s-activity-pop/s-activity-pop.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
- 营销活动
-
-
-
- 满减
-
-
- {{ formatRewardActivityRule(state.activityMap[item.id], rule) }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-address-item/s-address-item.vue b/acdr-ui/src/sheep/components/s-address-item/s-address-item.vue
deleted file mode 100644
index d71a3957..00000000
--- a/acdr-ui/src/sheep/components/s-address-item/s-address-item.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
-
-
-
- {{ props.item.areaName }}
-
-
- {{ props.item.detailAddress }}
-
- {{ props.item.name }} {{ props.item.mobile }}
-
-
- 请选择收货地址
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/account-login.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/account-login.vue
deleted file mode 100644
index 902e5503..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/account-login.vue
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
-
-
-
-
- 短信登录
-
- 账号登录
-
- 如果未设置过密码,请点击忘记密码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/change-mobile.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/change-mobile.vue
deleted file mode 100644
index 097c6b6a..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/change-mobile.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-
-
-
-
- {{ userInfo.mobile ? '更换手机号' : '绑定手机号' }}
-
- 为了您的账号安全,请使用本人手机号码
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/change-password.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/change-password.vue
deleted file mode 100644
index 7d8cc388..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/change-password.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
- 修改密码
- 如密码丢失或未设置,请点击忘记密码重新设置
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/mp-authorization.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/mp-authorization.vue
deleted file mode 100644
index 659a7dec..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/mp-authorization.vue
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
-
-
- 授权信息
-
- 完善您的头像、昵称、手机号
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/reset-password.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/reset-password.vue
deleted file mode 100644
index 5921efb0..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/reset-password.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
- 重置密码
- 为了您的账号安全,设置密码前请先进行安全验证
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/components/sms-login.vue b/acdr-ui/src/sheep/components/s-auth-modal/components/sms-login.vue
deleted file mode 100644
index 2cd76f57..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/components/sms-login.vue
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
- 短信登录
-
- 账号登录
-
-
- 未注册的手机号,验证后自动注册账号
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/index.scss b/acdr-ui/src/sheep/components/s-auth-modal/index.scss
deleted file mode 100644
index a24a40c1..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/index.scss
+++ /dev/null
@@ -1,151 +0,0 @@
-@keyframes title-animation {
- 0% {
- font-size: 32rpx;
- }
- 100% {
- font-size: 36rpx;
- }
-}
-
-.login-wrap {
- min-height: 500rpx;
- padding: 50rpx 34rpx;
- background-color: #fff;
- border-radius: 20rpx 20rpx 0 0;
-}
-
-.head-box {
- .head-title {
- min-width: 160rpx;
- font-size: 36rpx;
- font-weight: bold;
- line-height: 36rpx;
- color: #333333;
- }
- .head-title-active {
- width: 160rpx;
- font-size: 32rpx;
- font-weight: 600;
- line-height: 36rpx;
- color: #999;
- }
- .head-title-animation {
- animation-name: title-animation;
- animation-duration: 0.1s;
- animation-timing-function: ease-out;
- animation-fill-mode: forwards;
- }
- .head-title-line {
- position: relative;
- &::before {
- position: absolute;
- top: 50%;
- left: -30rpx;
- width: 1rpx;
- height: 34rpx;
- content: '';
- background-color: #e4e7ed;
- transform: translateY(-50%);
- }
- }
- .head-subtitle {
- display: flex;
- font-size: 26rpx;
- font-weight: 400;
- color: #afb6c0;
- text-align: left;
- }
-}
-
-// .code-btn[disabled] {
-// background-color: #fff;
-// }
-.code-btn-start {
- width: 160rpx;
- height: 56rpx;
- font-size: 26rpx;
- font-weight: 400;
- line-height: normal;
- color: var(--ui-BG-Main);
- border: 2rpx solid var(--ui-BG-Main);
- border-radius: 28rpx;
- opacity: 1;
-}
-
-.forgot-btn {
- width: 160rpx;
- font-size: 30rpx;
- font-weight: 500;
- line-height: 56rpx;
- color: #999;
-}
-
-.login-btn-start {
- width: 158rpx;
- height: 56rpx;
- font-size: 26rpx;
- font-weight: 500;
- line-height: normal;
- color: #fff;
- background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
- border-radius: 28rpx;
-}
-
-.type-btn {
- width: 200rpx;
- padding: 20rpx;
- margin: 40rpx auto;
- font-size: 30rpx;
- font-weight: 500;
- color: #999999;
-}
-
-.auto-login-box {
- width: 100%;
- .auto-login-btn {
- width: 68rpx;
- height: 68rpx;
- margin: 0 30rpx;
- border-radius: 50%;
- }
- .auto-login-img {
- width: 68rpx;
- height: 68rpx;
- border-radius: 50%;
- }
-}
-
-.agreement-box {
- margin: 80rpx auto 0;
- .protocol-check {
- transform: scale(0.7);
- }
- .agreement-text {
- font-size: 26rpx;
- font-weight: 500;
- color: #999999;
- .tcp-text {
- color: var(--ui-BG-Main);
- }
- }
-}
-
-// 修改密码
-.editPwd-btn-box {
- .save-btn {
- width: 690rpx;
- font-size: 28rpx;
- font-weight: 500;
- line-height: 70rpx;
- color: #ffffff;
- background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
- border-radius: 35rpx;
- }
- .forgot-btn {
- width: 690rpx;
- font-size: 28rpx;
- font-weight: 500;
- line-height: 70rpx;
- color: #999999;
- }
-}
diff --git a/acdr-ui/src/sheep/components/s-auth-modal/s-auth-modal.vue b/acdr-ui/src/sheep/components/s-auth-modal/s-auth-modal.vue
deleted file mode 100644
index d08bf217..00000000
--- a/acdr-ui/src/sheep/components/s-auth-modal/s-auth-modal.vue
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 还没有账号?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-block-item/s-block-item.vue b/acdr-ui/src/sheep/components/s-block-item/s-block-item.vue
deleted file mode 100644
index 35394839..00000000
--- a/acdr-ui/src/sheep/components/s-block-item/s-block-item.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-block/s-block.vue b/acdr-ui/src/sheep/components/s-block/s-block.vue
deleted file mode 100644
index 5bca282f..00000000
--- a/acdr-ui/src/sheep/components/s-block/s-block.vue
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-count-down/s-count-down.vue b/acdr-ui/src/sheep/components/s-count-down/s-count-down.vue
deleted file mode 100644
index ab4c38f5..00000000
--- a/acdr-ui/src/sheep/components/s-count-down/s-count-down.vue
+++ /dev/null
@@ -1,207 +0,0 @@
-
-
- {{ tipText }}
-
- {{ day }}{{ bgColor.isDay ? '天' : '' }}
-
-
- {{ dayText }}
-
-
- {{ hour }}
-
-
- {{ hourText }}
-
-
- {{ minute }}
-
-
- {{ minuteText }}
-
-
- {{ second }}
-
- {{ secondText }}
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-coupon-block/s-coupon-block.vue b/acdr-ui/src/sheep/components/s-coupon-block/s-coupon-block.vue
deleted file mode 100644
index bb3dbc3a..00000000
--- a/acdr-ui/src/sheep/components/s-coupon-block/s-coupon-block.vue
+++ /dev/null
@@ -1,182 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-coupon-card/s-coupon-card.vue b/acdr-ui/src/sheep/components/s-coupon-card/s-coupon-card.vue
deleted file mode 100644
index 1514a3a7..00000000
--- a/acdr-ui/src/sheep/components/s-coupon-card/s-coupon-card.vue
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-coupon-get/s-coupon-get.vue b/acdr-ui/src/sheep/components/s-coupon-get/s-coupon-get.vue
deleted file mode 100644
index 7935ab8b..00000000
--- a/acdr-ui/src/sheep/components/s-coupon-get/s-coupon-get.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
- 优惠券
-
- 可使用优惠券
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-coupon-list/s-coupon-list.vue b/acdr-ui/src/sheep/components/s-coupon-list/s-coupon-list.vue
deleted file mode 100644
index 357469a9..00000000
--- a/acdr-ui/src/sheep/components/s-coupon-list/s-coupon-list.vue
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-
-
- {{ data.discountType === 1 ? '满减券' : '折扣券' }}
-
-
-
-
- {{ data.name }}
-
-
-
- ¥
-
- {{
- data.discountType === 1
- ? fen2yuan(data.discountPrice)
- : data.discountPercent / 10.0
- }}
-
-
- 折
-
-
-
-
-
-
- 有效期:领取后 {{ data.fixedEndTerm }} 天内可用
-
-
- 有效期: {{ sheep.$helper.timeFormat(data.validStartTime, 'yyyy-mm-dd') }} 至
- {{ sheep.$helper.timeFormat(data.validEndTime, 'yyyy-mm-dd') }}
-
-
- 满 {{ fen2yuan(data.usePrice) }} 可用
-
-
-
-
-
-
-
-
- {{ data.description }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-coupon-select/s-coupon-select.vue b/acdr-ui/src/sheep/components/s-coupon-select/s-coupon-select.vue
deleted file mode 100644
index 26d7051d..00000000
--- a/acdr-ui/src/sheep/components/s-coupon-select/s-coupon-select.vue
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
-
- 优惠券
-
-
- 可使用优惠券
-
-
-
-
- 可用原因:
- {{ item.description || '已达到使用门槛' }}
-
-
-
-
-
-
-
-
- 不可使用优惠券
-
-
-
-
- 不可用原因:
- {{ item.description || '未达到使用门槛' }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar-item.vue b/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar-item.vue
deleted file mode 100644
index 099dfab8..00000000
--- a/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar-item.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
- {{ data.text }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar.vue b/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar.vue
deleted file mode 100644
index 25894922..00000000
--- a/acdr-ui/src/sheep/components/s-custom-navbar/components/navbar.vue
+++ /dev/null
@@ -1,312 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-custom-navbar/s-custom-navbar.vue b/acdr-ui/src/sheep/components/s-custom-navbar/s-custom-navbar.vue
deleted file mode 100644
index 3180bbd2..00000000
--- a/acdr-ui/src/sheep/components/s-custom-navbar/s-custom-navbar.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-discount-list/s-discount-list.vue b/acdr-ui/src/sheep/components/s-discount-list/s-discount-list.vue
deleted file mode 100644
index 21193509..00000000
--- a/acdr-ui/src/sheep/components/s-discount-list/s-discount-list.vue
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
- 活动优惠
-
-
-
- 共{{ item.goods_ids.length }}件,
-
- 满{{ item.discount_rule.full }}打{{ item.discount_rule.discount }}折,已减
-
- 满赠
-
- 满{{ item.discount_rule.full }}减{{ item.discount_rule.discount }},已减
-
- ¥{{ item.promo_discount_money || '0.00' }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-empty/s-empty.vue b/acdr-ui/src/sheep/components/s-empty/s-empty.vue
deleted file mode 100644
index b838af0a..00000000
--- a/acdr-ui/src/sheep/components/s-empty/s-empty.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
- {{ text }}
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-float-menu/s-float-menu.vue b/acdr-ui/src/sheep/components/s-float-menu/s-float-menu.vue
deleted file mode 100644
index 274a9c69..00000000
--- a/acdr-ui/src/sheep/components/s-float-menu/s-float-menu.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-goods-card/s-goods-card.vue b/acdr-ui/src/sheep/components/s-goods-card/s-goods-card.vue
deleted file mode 100644
index 7ee08268..00000000
--- a/acdr-ui/src/sheep/components/s-goods-card/s-goods-card.vue
+++ /dev/null
@@ -1,293 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-goods-column/s-goods-column.vue b/acdr-ui/src/sheep/components/s-goods-column/s-goods-column.vue
deleted file mode 100644
index a97af7bd..00000000
--- a/acdr-ui/src/sheep/components/s-goods-column/s-goods-column.vue
+++ /dev/null
@@ -1,751 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ data.title || data.name }}
-
-
- {{ priceUnit }}
- {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.title || data.name }}
-
-
- {{ priceUnit }}
- {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.title || data.name }}
-
-
- {{ data.subtitle || data.introduction }}
-
-
-
-
- {{ item.title }}
-
-
-
-
-
- {{ priceUnit }}
- {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
-
-
-
- {{ priceUnit }}
- {{ fen2yuan(data.marketPrice) }}
-
-
-
-
- {{ salesAndStock }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 秒杀
-
- 拼团
-
-
-
-
-
- {{ data.title || data.name }}
-
-
- {{ data.subtitle || data.introduction }}
-
-
-
-
-
-
- {{ item.title }}
-
-
-
-
-
- {{ priceUnit }}
- {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
-
-
- {{ priceUnit }}
- {{ fen2yuan(data.marketPrice) }}
-
-
-
- {{ salesAndStock }}
-
-
-
-
-
- 去购买
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ data.title || data.name }}
-
-
- {{ data.subtitle || data.introduction }}
-
-
-
-
-
-
- {{ item.title }}
-
-
-
-
-
- {{ priceUnit }}
- {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
-
-
- {{ priceUnit }}
- {{ fen2yuan(data.marketPrice) }}
-
-
-
- {{ salesAndStock }}
-
-
-
-
-
- 去购买
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-goods-item/s-goods-item.vue b/acdr-ui/src/sheep/components/s-goods-item/s-goods-item.vue
deleted file mode 100644
index 6633f40d..00000000
--- a/acdr-ui/src/sheep/components/s-goods-item/s-goods-item.vue
+++ /dev/null
@@ -1,182 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ title }}
- {{ skuString }}
-
-
-
-
-
-
- ¥{{ fen2yuan(price) }}
-
- x {{ num }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-goods-scroll/s-goods-scroll.vue b/acdr-ui/src/sheep/components/s-goods-scroll/s-goods-scroll.vue
deleted file mode 100644
index 750d663f..00000000
--- a/acdr-ui/src/sheep/components/s-goods-scroll/s-goods-scroll.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-goods-shelves/s-goods-shelves.vue b/acdr-ui/src/sheep/components/s-goods-shelves/s-goods-shelves.vue
deleted file mode 100644
index 2264a5d3..00000000
--- a/acdr-ui/src/sheep/components/s-goods-shelves/s-goods-shelves.vue
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-groupon-block/s-groupon-block.vue b/acdr-ui/src/sheep/components/s-groupon-block/s-groupon-block.vue
deleted file mode 100644
index 51059615..00000000
--- a/acdr-ui/src/sheep/components/s-groupon-block/s-groupon-block.vue
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-hotzone-block/s-hotzone-block.vue b/acdr-ui/src/sheep/components/s-hotzone-block/s-hotzone-block.vue
deleted file mode 100644
index caf58b73..00000000
--- a/acdr-ui/src/sheep/components/s-hotzone-block/s-hotzone-block.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-image-banner/s-image-banner.vue b/acdr-ui/src/sheep/components/s-image-banner/s-image-banner.vue
deleted file mode 100644
index 1ab010bf..00000000
--- a/acdr-ui/src/sheep/components/s-image-banner/s-image-banner.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-image-block/s-image-block.vue b/acdr-ui/src/sheep/components/s-image-block/s-image-block.vue
deleted file mode 100644
index 086262c8..00000000
--- a/acdr-ui/src/sheep/components/s-image-block/s-image-block.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-image-cube/s-image-cube.vue b/acdr-ui/src/sheep/components/s-image-cube/s-image-cube.vue
deleted file mode 100644
index 6adb454e..00000000
--- a/acdr-ui/src/sheep/components/s-image-cube/s-image-cube.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-layout/s-layout.vue b/acdr-ui/src/sheep/components/s-layout/s-layout.vue
deleted file mode 100644
index f05677ba..00000000
--- a/acdr-ui/src/sheep/components/s-layout/s-layout.vue
+++ /dev/null
@@ -1,247 +0,0 @@
-
-
-
-
- emits('search', e)"
- :defaultSearch="defaultSearch"
- />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-line-block/s-line-block.vue b/acdr-ui/src/sheep/components/s-line-block/s-line-block.vue
deleted file mode 100644
index 26f41f15..00000000
--- a/acdr-ui/src/sheep/components/s-line-block/s-line-block.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-live-block/s-live-block.vue b/acdr-ui/src/sheep/components/s-live-block/s-live-block.vue
deleted file mode 100644
index 3ed001be..00000000
--- a/acdr-ui/src/sheep/components/s-live-block/s-live-block.vue
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-live-card/s-live-card.vue b/acdr-ui/src/sheep/components/s-live-card/s-live-card.vue
deleted file mode 100644
index b8e651e8..00000000
--- a/acdr-ui/src/sheep/components/s-live-card/s-live-card.vue
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-
-
-
-
- {{ state.liveStatus[data.status].title }}
-
-
-
-
- {{ data.name }}
-
-
- 主播:{{ data.anchor_name }}
-
-
-
-
-
-
-
- {{ state.liveStatus[data.status].title }}
-
-
-
-
- {{ data.name }}
-
-
- 主播:{{ data.anchor_name }}
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-menu-button/s-menu-button.vue b/acdr-ui/src/sheep/components/s-menu-button/s-menu-button.vue
deleted file mode 100644
index aa3722f1..00000000
--- a/acdr-ui/src/sheep/components/s-menu-button/s-menu-button.vue
+++ /dev/null
@@ -1,372 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ state.cur + 1 }} / {{ menuList.length }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-menu-grid/s-menu-grid.vue b/acdr-ui/src/sheep/components/s-menu-grid/s-menu-grid.vue
deleted file mode 100644
index 5a43c77e..00000000
--- a/acdr-ui/src/sheep/components/s-menu-grid/s-menu-grid.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-
- {{ item.badge.text }}
-
-
-
-
-
-
- {{ item.title }}
-
-
- {{ item.subtitle }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-menu-list/s-menu-list.vue b/acdr-ui/src/sheep/components/s-menu-list/s-menu-list.vue
deleted file mode 100644
index 8a64aa85..00000000
--- a/acdr-ui/src/sheep/components/s-menu-list/s-menu-list.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-menu-tools/s-menu-tools.vue b/acdr-ui/src/sheep/components/s-menu-tools/s-menu-tools.vue
deleted file mode 100644
index 417f3c60..00000000
--- a/acdr-ui/src/sheep/components/s-menu-tools/s-menu-tools.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-
-
-
-
-
- 快捷菜单
-
-
-
-
- {{ item.title }}
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-notice-block/s-notice-block.vue b/acdr-ui/src/sheep/components/s-notice-block/s-notice-block.vue
deleted file mode 100644
index 9dbc9664..00000000
--- a/acdr-ui/src/sheep/components/s-notice-block/s-notice-block.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-order-card/s-order-card.vue b/acdr-ui/src/sheep/components/s-order-card/s-order-card.vue
deleted file mode 100644
index c4d03bd2..00000000
--- a/acdr-ui/src/sheep/components/s-order-card/s-order-card.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-popup-image/s-popup-image.vue b/acdr-ui/src/sheep/components/s-popup-image/s-popup-image.vue
deleted file mode 100644
index e511cb6b..00000000
--- a/acdr-ui/src/sheep/components/s-popup-image/s-popup-image.vue
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-richtext-block/s-richtext-block.vue b/acdr-ui/src/sheep/components/s-richtext-block/s-richtext-block.vue
deleted file mode 100644
index 771afc22..00000000
--- a/acdr-ui/src/sheep/components/s-richtext-block/s-richtext-block.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-search-block/s-search-block.vue b/acdr-ui/src/sheep/components/s-search-block/s-search-block.vue
deleted file mode 100644
index be54fbb9..00000000
--- a/acdr-ui/src/sheep/components/s-search-block/s-search-block.vue
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
- {{ placeholder }}
-
-
-
-
-
-
- {{ item }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-seckill-block/s-seckill-block.vue b/acdr-ui/src/sheep/components/s-seckill-block/s-seckill-block.vue
deleted file mode 100644
index e7a47bcd..00000000
--- a/acdr-ui/src/sheep/components/s-seckill-block/s-seckill-block.vue
+++ /dev/null
@@ -1,181 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue b/acdr-ui/src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue
deleted file mode 100644
index 79bd8a5f..00000000
--- a/acdr-ui/src/sheep/components/s-select-groupon-sku/s-select-groupon-sku.vue
+++ /dev/null
@@ -1,509 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ property.name }}
-
-
-
-
-
- 购买数量
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-select-seckill-sku/s-select-seckill-sku.vue b/acdr-ui/src/sheep/components/s-select-seckill-sku/s-select-seckill-sku.vue
deleted file mode 100644
index a4afd2d4..00000000
--- a/acdr-ui/src/sheep/components/s-select-seckill-sku/s-select-seckill-sku.vue
+++ /dev/null
@@ -1,435 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ property.name }}
-
-
-
-
-
- 购买数量
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-select-sku/s-select-sku.vue b/acdr-ui/src/sheep/components/s-select-sku/s-select-sku.vue
deleted file mode 100644
index da534ad2..00000000
--- a/acdr-ui/src/sheep/components/s-select-sku/s-select-sku.vue
+++ /dev/null
@@ -1,429 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ property.name }}
-
-
-
-
-
- 购买数量
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/index.vue b/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/index.vue
deleted file mode 100644
index 04aed9a7..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/index.vue
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/goods.js b/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/goods.js
deleted file mode 100644
index 099735da..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/goods.js
+++ /dev/null
@@ -1,127 +0,0 @@
-import sheep from '@/sheep'
-import { formatImageUrlProtocol, getWxaQrcode } from './index'
-
-const goods = async (poster) => {
- const width = poster.width
- const userInfo = sheep.$store('user').userInfo
- const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query)
- return [
- {
- type: 'image',
- src: formatImageUrlProtocol(
- sheep.$url.cdn(sheep.$store('app').platform.share.posterInfo.goods_bg),
- ),
- css: {
- width,
- position: 'fixed',
- 'object-fit': 'contain',
- top: '0',
- left: '0',
- zIndex: -1,
- },
- },
- {
- type: 'text',
- text: userInfo.nickname,
- css: {
- color: '#333',
- fontSize: 16,
- fontFamily: 'sans-serif',
- position: 'fixed',
- top: width * 0.06,
- left: width * 0.22,
- },
- },
- {
- type: 'image',
- src: formatImageUrlProtocol(sheep.$url.cdn(userInfo.avatar)),
- css: {
- position: 'fixed',
- left: width * 0.04,
- top: width * 0.04,
- width: width * 0.14,
- height: width * 0.14,
- },
- },
- {
- type: 'image',
- src: formatImageUrlProtocol(poster.shareInfo.poster.image),
- css: {
- position: 'fixed',
- left: width * 0.03,
- top: width * 0.21,
- width: width * 0.94,
- height: width * 0.94,
- },
- },
- {
- type: 'text',
- text: poster.shareInfo.poster.title,
- css: {
- position: 'fixed',
- left: width * 0.04,
- top: width * 1.18,
- color: '#333',
- fontSize: 14,
- lineHeight: 15,
- maxWidth: width * 0.91,
- },
- },
- {
- type: 'text',
- text: '¥' + poster.shareInfo.poster.price,
- css: {
- position: 'fixed',
- left: width * 0.04,
- top: width * 1.31,
- fontSize: 20,
- fontFamily: 'OPPOSANS',
- color: '#333',
- },
- },
- {
- type: 'text',
- text:
- poster.shareInfo.poster.original_price > 0
- ? '¥' + poster.shareInfo.poster.original_price
- : '',
- css: {
- position: 'fixed',
- left: width * 0.3,
- top: width * 1.33,
- color: '#999',
- fontSize: 10,
- fontFamily: 'OPPOSANS',
- textDecoration: 'line-through',
- },
- },
- // #ifndef MP-WEIXIN
- {
- type: 'qrcode',
- text: poster.shareInfo.link,
- css: {
- position: 'fixed',
- left: width * 0.75,
- top: width * 1.3,
- width: width * 0.2,
- height: width * 0.2,
- },
- },
- // #endif
- // #ifdef MP-WEIXIN
- {
- type: 'image',
- src: wxa_qrcode,
- css: {
- position: 'fixed',
- left: width * 0.75,
- top: width * 1.3,
- width: width * 0.2,
- height: width * 0.2,
- },
- },
- // #endif
- ]
-}
-
-export default goods
diff --git a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/groupon.js b/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/groupon.js
deleted file mode 100644
index 639d9542..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/groupon.js
+++ /dev/null
@@ -1,124 +0,0 @@
-import sheep from '@/sheep'
-import { formatImageUrlProtocol, getWxaQrcode } from './index'
-
-const groupon = async (poster) => {
- const width = poster.width
- const userInfo = sheep.$store('user').userInfo
- const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query)
- return [
- {
- type: 'image',
- src: formatImageUrlProtocol(
- sheep.$url.cdn(sheep.$store('app').platform.share.posterInfo.groupon_bg),
- ),
- css: {
- width,
- position: 'fixed',
- 'object-fit': 'contain',
- top: '0',
- left: '0',
- zIndex: -1,
- },
- },
- {
- type: 'text',
- text: userInfo.nickname,
- css: {
- color: '#333',
- fontSize: 16,
- fontFamily: 'sans-serif',
- position: 'fixed',
- top: width * 0.06,
- left: width * 0.22,
- },
- },
- {
- type: 'image',
- src: formatImageUrlProtocol(sheep.$url.cdn(userInfo.avatar)),
- css: {
- position: 'fixed',
- left: width * 0.04,
- top: width * 0.04,
- width: width * 0.14,
- height: width * 0.14,
- },
- },
- {
- type: 'image',
- src: formatImageUrlProtocol(poster.shareInfo.poster.image),
- css: {
- position: 'fixed',
- left: width * 0.03,
- top: width * 0.21,
- width: width * 0.94,
- height: width * 0.94,
- borderRadius: 10,
- },
- },
- {
- type: 'text',
- text: poster.shareInfo.poster.title,
- css: {
- color: '#333',
- fontSize: 14,
- position: 'fixed',
- top: width * 1.18,
- left: width * 0.04,
- maxWidth: width * 0.91,
- lineHeight: 5,
- },
- },
- {
- type: 'text',
- text: '¥' + poster.shareInfo.poster.price,
- css: {
- color: '#ff0000',
- fontSize: 20,
- fontFamily: 'OPPOSANS',
- position: 'fixed',
- top: width * 1.3,
- left: width * 0.04,
- },
- },
- {
- type: 'text',
- text: '2人团',
- css: {
- color: '#fff',
- fontSize: 12,
- fontFamily: 'OPPOSANS',
- position: 'fixed',
- left: width * 0.84,
- top: width * 1.3,
- },
- },
- // #ifndef MP-WEIXIN
- {
- type: 'qrcode',
- text: poster.shareInfo.link,
- css: {
- position: 'fixed',
- left: width * 0.5,
- top: width * 1.3,
- width: width * 0.2,
- height: width * 0.2,
- },
- },
- // #endif
- // #ifdef MP-WEIXIN
- {
- type: 'image',
- src: wxa_qrcode,
- css: {
- position: 'fixed',
- left: width * 0.75,
- top: width * 1.3,
- width: width * 0.2,
- height: width * 0.2,
- },
- },
- // #endif
- ]
-}
-
-export default groupon
diff --git a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/index.js b/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/index.js
deleted file mode 100644
index 5c8e9c91..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import user from './user'
-import goods from './goods'
-import groupon from './groupon'
-import SocialApi from '@/sheep/api/member/social'
-
-export function getPosterData(options) {
- switch (options.shareInfo.poster.type) {
- case 'user':
- return user(options)
- case 'goods':
- return goods(options)
- case 'groupon':
- return groupon(options)
- }
-}
-
-export function formatImageUrlProtocol(url) {
- // #ifdef H5
- // H5平台 https协议下需要转换
- if (window.location.protocol === 'https:' && url.indexOf('http:') === 0) {
- url = url.replace('http:', 'https:')
- }
- // #endif
-
- // #ifdef MP-WEIXIN
- // 小程序平台 需要强制转换为https协议
- if (url.indexOf('http:') === 0) {
- url = url.replace('http:', 'https:')
- }
- // #endif
-
- return url
-}
-
-// 获得微信小程序码 (Base64 image)
-export async function getWxaQrcode(path, query) {
- const res = await SocialApi.getWxaQrcode(path, query)
- return 'data:image/png;base64,' + res.data
-}
diff --git a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/user.js b/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/user.js
deleted file mode 100644
index 056beae1..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/canvas-poster/poster/user.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import sheep from '@/sheep'
-import { formatImageUrlProtocol, getWxaQrcode } from './index'
-
-const user = async (poster) => {
- const width = poster.width
- const userInfo = sheep.$store('user').userInfo
- const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query)
- return [
- {
- type: 'image',
- src: formatImageUrlProtocol(
- sheep.$url.cdn(sheep.$store('app').platform.share.posterInfo.user_bg),
- ),
- css: {
- width,
- position: 'fixed',
- 'object-fit': 'contain',
- top: '0',
- left: '0',
- zIndex: -1,
- },
- },
- {
- type: 'text',
- text: userInfo.nickname,
- css: {
- color: '#333',
- fontSize: 14,
- textAlign: 'center',
- fontFamily: 'sans-serif',
- position: 'fixed',
- top: width * 0.4,
- left: width / 2,
- },
- },
- {
- type: 'image',
- src: formatImageUrlProtocol(sheep.$url.cdn(userInfo.avatar)),
- css: {
- position: 'fixed',
- left: width * 0.4,
- top: width * 0.16,
- width: width * 0.2,
- height: width * 0.2,
- },
- },
- // #ifndef MP-WEIXIN
- {
- type: 'qrcode',
- text: poster.shareInfo.link,
- css: {
- position: 'fixed',
- left: width * 0.35,
- top: width * 0.84,
- width: width * 0.3,
- height: width * 0.3,
- },
- },
- // #endif
- // #ifdef MP-WEIXIN
- {
- type: 'image',
- src: wxa_qrcode,
- css: {
- position: 'fixed',
- left: width * 0.35,
- top: width * 0.84,
- width: width * 0.3,
- height: width * 0.3,
- },
- },
- // #endif
- ]
-}
-
-export default user
diff --git a/acdr-ui/src/sheep/components/s-share-modal/s-share-modal.vue b/acdr-ui/src/sheep/components/s-share-modal/s-share-modal.vue
deleted file mode 100644
index 8d8a67f2..00000000
--- a/acdr-ui/src/sheep/components/s-share-modal/s-share-modal.vue
+++ /dev/null
@@ -1,208 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-statusbar/s-statusbar.vue b/acdr-ui/src/sheep/components/s-statusbar/s-statusbar.vue
deleted file mode 100644
index c46985c3..00000000
--- a/acdr-ui/src/sheep/components/s-statusbar/s-statusbar.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-tabbar/s-tabbar.vue b/acdr-ui/src/sheep/components/s-tabbar/s-tabbar.vue
deleted file mode 100644
index 047d9a6b..00000000
--- a/acdr-ui/src/sheep/components/s-tabbar/s-tabbar.vue
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-title-block/s-title-block.vue b/acdr-ui/src/sheep/components/s-title-block/s-title-block.vue
deleted file mode 100644
index 134be1d5..00000000
--- a/acdr-ui/src/sheep/components/s-title-block/s-title-block.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
- {{ data.title }}
-
-
- {{ data.description }}
-
-
-
-
- {{ data.more.text }}
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-uploader/choose-and-upload-file.js b/acdr-ui/src/sheep/components/s-uploader/choose-and-upload-file.js
deleted file mode 100644
index 0bcc930b..00000000
--- a/acdr-ui/src/sheep/components/s-uploader/choose-and-upload-file.js
+++ /dev/null
@@ -1,213 +0,0 @@
-'use strict'
-import FileApi from '@/sheep/api/infra/file'
-
-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
- const self = this
- return new Promise((resolve) => {
- while (count < max) {
- next()
- }
-
- function next() {
- const 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
- })
- .then(async (files) => {
- for (const file of files.tempFiles) {
- const { data } = await FileApi.uploadFile(file.path)
- file.url = data
- }
- return files
- })
-}
-
-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/acdr-ui/src/sheep/components/s-uploader/s-uploader.vue b/acdr-ui/src/sheep/components/s-uploader/s-uploader.vue
deleted file mode 100644
index ad71ea47..00000000
--- a/acdr-ui/src/sheep/components/s-uploader/s-uploader.vue
+++ /dev/null
@@ -1,676 +0,0 @@
-
-
-
-
-
- {{ subtitle }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-uploader/upload-file.vue b/acdr-ui/src/sheep/components/s-uploader/upload-file.vue
deleted file mode 100644
index 1dc69f37..00000000
--- a/acdr-ui/src/sheep/components/s-uploader/upload-file.vue
+++ /dev/null
@@ -1,333 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ item.name }}
-
-
-
-
-
-
-
-
-
- 点击重试
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-uploader/upload-image.vue b/acdr-ui/src/sheep/components/s-uploader/upload-image.vue
deleted file mode 100644
index 7bcbafad..00000000
--- a/acdr-ui/src/sheep/components/s-uploader/upload-image.vue
+++ /dev/null
@@ -1,306 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-uploader/utils.js b/acdr-ui/src/sheep/components/s-uploader/utils.js
deleted file mode 100644
index 8725b625..00000000
--- a/acdr-ui/src/sheep/components/s-uploader/utils.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * 获取文件名和后缀
- * @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)) {
- const extname = fileExtname.replace(/(\[|\])/g, '')
- return extname.split(',')
- } else {
- return fileExtname
- }
- return []
-}
-
-/**
- * 获取文件和检测是否可选
- */
-export const get_files_and_is_max = (res, _extname) => {
- const filePaths = []
- const files = []
- if (!_extname || _extname.length === 0) {
- return {
- filePaths,
- files,
- }
- }
- res.tempFiles.forEach((v) => {
- const 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') => {
- // 最终需要上传数据库的数据
- const fileFullName = get_file_ext(files.name)
- const extname = fileFullName.ext.toLowerCase()
- const 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/acdr-ui/src/sheep/components/s-user-card/s-user-card.vue b/acdr-ui/src/sheep/components/s-user-card/s-user-card.vue
deleted file mode 100644
index 47b1c7f6..00000000
--- a/acdr-ui/src/sheep/components/s-user-card/s-user-card.vue
+++ /dev/null
@@ -1,184 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ userInfo?.nickname || nickname }}
-
-
-
-
-
-
-
-
-
-
-
-
- 点击绑定手机号确保账户安全
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-video-block/s-video-block.vue b/acdr-ui/src/sheep/components/s-video-block/s-video-block.vue
deleted file mode 100644
index b04fb121..00000000
--- a/acdr-ui/src/sheep/components/s-video-block/s-video-block.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/components/s-wallet-card/s-wallet-card.vue b/acdr-ui/src/sheep/components/s-wallet-card/s-wallet-card.vue
deleted file mode 100644
index 9f4c6540..00000000
--- a/acdr-ui/src/sheep/components/s-wallet-card/s-wallet-card.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/config/index.js b/acdr-ui/src/sheep/config/index.js
deleted file mode 100644
index bb7cd5ed..00000000
--- a/acdr-ui/src/sheep/config/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// 开发环境配置
-export let baseUrl
-export let version
-if (process.env.NODE_ENV === 'development') {
- baseUrl = import.meta.env.SHOPRO_DEV_BASE_URL
-} else {
- baseUrl = import.meta.env.SHOPRO_BASE_URL
-}
-version = import.meta.env.SHOPRO_VERSION
-console.log(`[芋道商城 ${version} ${baseUrl}] http://doc.iocoder.cn`)
-
-export const apiPath = import.meta.env.SHOPRO_API_PATH
-export const staticUrl = import.meta.env.SHOPRO_STATIC_URL
-export const tenantId = import.meta.env.SHOPRO_TENANT_ID
-export const websocketPath = import.meta.env.SHOPRO_WEBSOCKET_PATH
-
-export default {
- baseUrl,
- apiPath,
- staticUrl,
- tenantId,
- websocketPath,
-}
diff --git a/acdr-ui/src/sheep/config/zIndex.js b/acdr-ui/src/sheep/config/zIndex.js
deleted file mode 100644
index 85f13246..00000000
--- a/acdr-ui/src/sheep/config/zIndex.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// uniapp在H5中各API的z-index值如下:
-/**
- * actionsheet: 999
- * modal: 999
- * navigate: 998
- * tabbar: 998
- * toast: 999
- */
-
-export default {
- toast: 10090,
- noNetwork: 10080,
- popup: 10075, // popup包含popup,actionsheet,keyboard,picker的值
- mask: 10070,
- navbar: 980,
- topTips: 975,
- sticky: 970,
- indexListSticky: 965,
- popover: 960,
-}
diff --git a/acdr-ui/src/sheep/helper/digit.js b/acdr-ui/src/sheep/helper/digit.js
deleted file mode 100644
index 4608b2c4..00000000
--- a/acdr-ui/src/sheep/helper/digit.js
+++ /dev/null
@@ -1,168 +0,0 @@
-let _boundaryCheckingState = true // 是否进行越界检查的全局开关
-
-/**
- * 把错误的数据转正
- * @private
- * @example strip(0.09999999999999998)=0.1
- */
-function strip(num, precision = 15) {
- return +parseFloat(Number(num).toPrecision(precision))
-}
-
-/**
- * Return digits length of a number
- * @private
- * @param {*number} num Input number
- */
-function digitLength(num) {
- // Get digit length of e
- const eSplit = num.toString().split(/[eE]/)
- const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0)
- return len > 0 ? len : 0
-}
-
-/**
- * 把小数转成整数,如果是小数则放大成整数
- * @private
- * @param {*number} num 输入数
- */
-function float2Fixed(num) {
- if (num.toString().indexOf('e') === -1) {
- return Number(num.toString().replace('.', ''))
- }
- const dLen = digitLength(num)
- return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num)
-}
-
-/**
- * 检测数字是否越界,如果越界给出提示
- * @private
- * @param {*number} num 输入数
- */
-function checkBoundary(num) {
- if (_boundaryCheckingState) {
- if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
- console.warn(`${num} 超出了精度限制,结果可能不正确`)
- }
- }
-}
-
-/**
- * 把递归操作扁平迭代化
- * @param {number[]} arr 要操作的数字数组
- * @param {function} operation 迭代操作
- * @private
- */
-function iteratorOperation(arr, operation) {
- const [num1, num2, ...others] = arr
- let res = operation(num1, num2)
-
- others.forEach((num) => {
- res = operation(res, num)
- })
-
- return res
-}
-
-/**
- * 高精度乘法
- * @export
- */
-export function times(...nums) {
- if (nums.length > 2) {
- return iteratorOperation(nums, times)
- }
-
- const [num1, num2] = nums
- const num1Changed = float2Fixed(num1)
- const num2Changed = float2Fixed(num2)
- const baseNum = digitLength(num1) + digitLength(num2)
- const leftValue = num1Changed * num2Changed
-
- checkBoundary(leftValue)
-
- return leftValue / Math.pow(10, baseNum)
-}
-
-/**
- * 高精度加法
- * @export
- */
-export function plus(...nums) {
- if (nums.length > 2) {
- return iteratorOperation(nums, plus)
- }
-
- const [num1, num2] = nums
- // 取最大的小数位
- const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)))
- // 把小数都转为整数然后再计算
- return (times(num1, baseNum) + times(num2, baseNum)) / baseNum
-}
-
-/**
- * 高精度减法
- * @export
- */
-export function minus(...nums) {
- if (nums.length > 2) {
- return iteratorOperation(nums, minus)
- }
-
- const [num1, num2] = nums
- const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2)))
- return (times(num1, baseNum) - times(num2, baseNum)) / baseNum
-}
-
-/**
- * 高精度除法
- * @export
- */
-export function divide(...nums) {
- if (nums.length > 2) {
- return iteratorOperation(nums, divide)
- }
-
- const [num1, num2] = nums
- const num1Changed = float2Fixed(num1)
- const num2Changed = float2Fixed(num2)
- checkBoundary(num1Changed)
- checkBoundary(num2Changed)
- // 重要,这里必须用strip进行修正
- return times(
- num1Changed / num2Changed,
- strip(Math.pow(10, digitLength(num2) - digitLength(num1))),
- )
-}
-
-/**
- * 四舍五入
- * @export
- */
-export function round(num, ratio) {
- const base = Math.pow(10, ratio)
- let result = divide(Math.round(Math.abs(times(num, base))), base)
- if (num < 0 && result !== 0) {
- result = times(result, -1)
- }
- // 位数不足则补0
- return result
-}
-
-/**
- * 是否进行边界检查,默认开启
- * @param flag 标记开关,true 为开启,false 为关闭,默认为 true
- * @export
- */
-export function enableBoundaryChecking(flag = true) {
- _boundaryCheckingState = flag
-}
-
-export default {
- times,
- plus,
- minus,
- divide,
- round,
- enableBoundaryChecking,
-}
diff --git a/acdr-ui/src/sheep/helper/index.js b/acdr-ui/src/sheep/helper/index.js
deleted file mode 100644
index f9271384..00000000
--- a/acdr-ui/src/sheep/helper/index.js
+++ /dev/null
@@ -1,708 +0,0 @@
-import test from './test.js'
-import { round } from './digit.js'
-/**
- * @description 如果value小于min,取min;如果value大于max,取max
- * @param {number} min
- * @param {number} max
- * @param {number} value
- */
-function range(min = 0, max = 0, value = 0) {
- return Math.max(min, Math.min(max, Number(value)))
-}
-
-/**
- * @description 用于获取用户传递值的px值 如果用户传递了"xxpx"或者"xxrpx",取出其数值部分,如果是"xxxrpx"还需要用过uni.upx2px进行转换
- * @param {number|string} value 用户传递值的px值
- * @param {boolean} unit
- * @returns {number|string}
- */
-export function getPx(value, unit = false) {
- if (test.number(value)) {
- return unit ? `${value}px` : Number(value)
- }
- // 如果带有rpx,先取出其数值部分,再转为px值
- if (/(rpx|upx)$/.test(value)) {
- return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value)))
- }
- return unit ? `${parseInt(value)}px` : parseInt(value)
-}
-
-/**
- * @description 进行延时,以达到可以简写代码的目的
- * @param {number} value 堵塞时间 单位ms 毫秒
- * @returns {Promise} 返回promise
- */
-export function sleep(value = 30) {
- return new Promise((resolve) => {
- setTimeout(() => {
- resolve()
- }, value)
- })
-}
-/**
- * @description 运行期判断平台
- * @returns {string} 返回所在平台(小写)
- * @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台
- */
-export function os() {
- return uni.getSystemInfoSync().platform.toLowerCase()
-}
-/**
- * @description 获取系统信息同步接口
- * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync
- */
-export function sys() {
- return uni.getSystemInfoSync()
-}
-
-/**
- * @description 取一个区间数
- * @param {Number} min 最小值
- * @param {Number} max 最大值
- */
-function random(min, max) {
- if (min >= 0 && max > 0 && max >= min) {
- const gab = max - min + 1
- return Math.floor(Math.random() * gab + min)
- }
- return 0
-}
-
-/**
- * @param {Number} len uuid的长度
- * @param {Boolean} firstU 将返回的首字母置为"u"
- * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
- */
-export function guid(len = 32, firstU = true, radix = null) {
- const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
- const uuid = []
- radix = radix || chars.length
-
- if (len) {
- // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
- for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
- } else {
- let r
- // rfc4122标准要求返回的uuid中,某些位为固定的字符
- uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
- uuid[14] = '4'
-
- for (let i = 0; i < 36; i++) {
- if (!uuid[i]) {
- r = 0 | (Math.random() * 16)
- uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
- }
- }
- }
- // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
- if (firstU) {
- uuid.shift()
- return `u${uuid.join('')}`
- }
- return uuid.join('')
-}
-
-/**
-* @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
- this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
- 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
- 值(默认为undefined),就是查找最顶层的$parent
-* @param {string|undefined} name 父组件的参数名
-*/
-export function $parent(name = undefined) {
- let parent = this.$parent
- // 通过while历遍,这里主要是为了H5需要多层解析的问题
- while (parent) {
- // 父组件
- if (parent.$options && parent.$options.name !== name) {
- // 如果组件的name不相等,继续上一级寻找
- parent = parent.$parent
- } else {
- return parent
- }
- }
- return false
-}
-
-/**
- * @description 样式转换
- * 对象转字符串,或者字符串转对象
- * @param {object | string} customStyle 需要转换的目标
- * @param {String} target 转换的目的,object-转为对象,string-转为字符串
- * @returns {object|string}
- */
-export function addStyle(customStyle, target = 'object') {
- // 字符串转字符串,对象转对象情形,直接返回
- if (
- test.empty(customStyle) ||
- (typeof customStyle === 'object' && target === 'object') ||
- (target === 'string' && typeof customStyle === 'string')
- ) {
- return customStyle
- }
- // 字符串转对象
- if (target === 'object') {
- // 去除字符串样式中的两端空格(中间的空格不能去掉,比如padding: 20px 0如果去掉了就错了),空格是无用的
- customStyle = trim(customStyle)
- // 根据";"将字符串转为数组形式
- const styleArray = customStyle.split(';')
- const style = {}
- // 历遍数组,拼接成对象
- for (let i = 0; i < styleArray.length; i++) {
- // 'font-size:20px;color:red;',如此最后字符串有";"的话,会导致styleArray最后一个元素为空字符串,这里需要过滤
- if (styleArray[i]) {
- const item = styleArray[i].split(':')
- style[trim(item[0])] = trim(item[1])
- }
- }
- return style
- }
- // 这里为对象转字符串形式
- let string = ''
- for (const i in customStyle) {
- // 驼峰转为中划线的形式,否则css内联样式,无法识别驼峰样式属性名
- const key = i.replace(/([A-Z])/g, '-$1').toLowerCase()
- string += `${key}:${customStyle[i]};`
- }
- // 去除两端空格
- return trim(string)
-}
-
-/**
- * @description 添加单位,如果有rpx,upx,%,px等单位结尾或者值为auto,直接返回,否则加上px单位结尾
- * @param {string|number} value 需要添加单位的值
- * @param {string} unit 添加的单位名 比如px
- */
-export function addUnit(value = 'auto', unit = 'px') {
- value = String(value)
- return test.number(value) ? `${value}${unit}` : value
-}
-
-/**
- * @description 深度克隆
- * @param {object} obj 需要深度克隆的对象
- * @returns {*} 克隆后的对象或者原值(不是对象)
- */
-function deepClone(obj) {
- // 对常见的“非”值,直接返回原来值
- if ([null, undefined, NaN, false].includes(obj)) return obj
- if (typeof obj !== 'object' && typeof obj !== 'function') {
- // 原始类型直接返回
- return obj
- }
- const o = test.array(obj) ? [] : {}
- for (const i in obj) {
- if (obj.hasOwnProperty(i)) {
- o[i] = typeof obj[i] === 'object' ? deepClone(obj[i]) : obj[i]
- }
- }
- return o
-}
-
-/**
- * @description JS对象深度合并
- * @param {object} target 需要拷贝的对象
- * @param {object} source 拷贝的来源对象
- * @returns {object|boolean} 深度合并后的对象或者false(入参有不是对象)
- */
-export function deepMerge(target = {}, source = {}) {
- target = deepClone(target)
- if (typeof target !== 'object' || typeof source !== 'object') return false
- for (const prop in source) {
- if (!source.hasOwnProperty(prop)) continue
- if (prop in target) {
- if (typeof target[prop] !== 'object') {
- target[prop] = source[prop]
- } else if (typeof source[prop] !== 'object') {
- target[prop] = source[prop]
- } else if (target[prop].concat && source[prop].concat) {
- target[prop] = target[prop].concat(source[prop])
- } else {
- target[prop] = deepMerge(target[prop], source[prop])
- }
- } else {
- target[prop] = source[prop]
- }
- }
- return target
-}
-
-/**
- * @description error提示
- * @param {*} err 错误内容
- */
-function error(err) {
- // 开发环境才提示,生产环境不会提示
- if (process.env.NODE_ENV === 'development') {
- console.error(`SheepJS:${err}`)
- }
-}
-
-/**
- * @description 打乱数组
- * @param {array} array 需要打乱的数组
- * @returns {array} 打乱后的数组
- */
-function randomArray(array = []) {
- // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0
- return array.sort(() => Math.random() - 0.5)
-}
-
-// padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
-// 所以这里做一个兼容polyfill的兼容处理
-if (!String.prototype.padStart) {
- // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
- String.prototype.padStart = function (maxLength, fillString = ' ') {
- if (Object.prototype.toString.call(fillString) !== '[object String]') {
- throw new TypeError('fillString must be String')
- }
- const str = this
- // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
- if (str.length >= maxLength) return String(str)
-
- const fillLength = maxLength - str.length
- let times = Math.ceil(fillLength / fillString.length)
- while ((times >>= 1)) {
- fillString += fillString
- if (times === 1) {
- fillString += fillString
- }
- }
- return fillString.slice(0, fillLength) + str
- }
-}
-
-/**
- * @description 格式化时间
- * @param {String|Number} dateTime 需要格式化的时间戳
- * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd
- * @returns {string} 返回格式化后的字符串
- */
-function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') {
- let date
- // 若传入时间为假值,则取当前时间
- if (!dateTime) {
- date = new Date()
- }
- // 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容)
- else if (/^\d{10}$/.test(dateTime?.toString().trim())) {
- date = new Date(dateTime * 1000)
- }
- // 若用户传入字符串格式时间戳,new Date无法解析,需做兼容
- else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) {
- date = new Date(Number(dateTime))
- }
- // 其他都认为符合 RFC 2822 规范
- else {
- // 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间
- date = new Date(typeof dateTime === 'string' ? dateTime.replace(/-/g, '/') : dateTime)
- }
-
- const timeSource = {
- y: date.getFullYear().toString(), // 年
- m: (date.getMonth() + 1).toString().padStart(2, '0'), // 月
- d: date.getDate().toString().padStart(2, '0'), // 日
- h: date.getHours().toString().padStart(2, '0'), // 时
- M: date.getMinutes().toString().padStart(2, '0'), // 分
- s: date.getSeconds().toString().padStart(2, '0'), // 秒
- // 有其他格式化字符需求可以继续添加,必须转化成字符串
- }
-
- for (const key in timeSource) {
- const [ret] = new RegExp(`${key}+`).exec(formatStr) || []
- if (ret) {
- // 年可能只需展示两位
- const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0
- formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex))
- }
- }
-
- return formatStr
-}
-
-/**
- * @description 时间戳转为多久之前
- * @param {String|Number} timestamp 时间戳
- * @param {String|Boolean} format
- * 格式化规则如果为时间格式字符串,超出一定时间范围,返回固定的时间格式;
- * 如果为布尔值false,无论什么时间,都返回多久以前的格式
- * @returns {string} 转化后的内容
- */
-function timeFrom(timestamp = null, format = 'yyyy-mm-dd') {
- if (timestamp == null) timestamp = Number(new Date())
- timestamp = parseInt(timestamp)
- // 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位)
- if (timestamp.toString().length == 10) timestamp *= 1000
- let timer = new Date().getTime() - timestamp
- timer = parseInt(timer / 1000)
- // 如果小于5分钟,则返回"刚刚",其他以此类推
- let tips = ''
- switch (true) {
- case timer < 300:
- tips = '刚刚'
- break
- case timer >= 300 && timer < 3600:
- tips = `${parseInt(timer / 60)}分钟前`
- break
- case timer >= 3600 && timer < 86400:
- tips = `${parseInt(timer / 3600)}小时前`
- break
- case timer >= 86400 && timer < 2592000:
- tips = `${parseInt(timer / 86400)}天前`
- break
- default:
- // 如果format为false,则无论什么时间戳,都显示xx之前
- if (format === false) {
- if (timer >= 2592000 && timer < 365 * 86400) {
- tips = `${parseInt(timer / (86400 * 30))}个月前`
- } else {
- tips = `${parseInt(timer / (86400 * 365))}年前`
- }
- } else {
- tips = timeFormat(timestamp, format)
- }
- }
- return tips
-}
-
-/**
- * @description 去除空格
- * @param String str 需要去除空格的字符串
- * @param String pos both(左右)|left|right|all 默认both
- */
-function trim(str, pos = 'both') {
- str = String(str)
- if (pos == 'both') {
- return str.replace(/^\s+|\s+$/g, '')
- }
- if (pos == 'left') {
- return str.replace(/^\s*/, '')
- }
- if (pos == 'right') {
- return str.replace(/(\s*$)/g, '')
- }
- if (pos == 'all') {
- return str.replace(/\s+/g, '')
- }
- return str
-}
-
-/**
- * @description 对象转url参数
- * @param {object} data,对象
- * @param {Boolean} isPrefix,是否自动加上"?"
- * @param {string} arrayFormat 规则 indices|brackets|repeat|comma
- */
-function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') {
- const prefix = isPrefix ? '?' : ''
- const _result = []
- if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1)
- arrayFormat = 'brackets'
- for (const key in data) {
- const value = data[key]
- // 去掉为空的参数
- if (['', undefined, null].indexOf(value) >= 0) {
- continue
- }
- // 如果值为数组,另行处理
- if (value.constructor === Array) {
- // e.g. {ids: [1, 2, 3]}
- switch (arrayFormat) {
- case 'indices':
- // 结果: ids[0]=1&ids[1]=2&ids[2]=3
- for (let i = 0; i < value.length; i++) {
- _result.push(`${key}[${i}]=${value[i]}`)
- }
- break
- case 'brackets':
- // 结果: ids[]=1&ids[]=2&ids[]=3
- value.forEach((_value) => {
- _result.push(`${key}[]=${_value}`)
- })
- break
- case 'repeat':
- // 结果: ids=1&ids=2&ids=3
- value.forEach((_value) => {
- _result.push(`${key}=${_value}`)
- })
- break
- case 'comma':
- // 结果: ids=1,2,3
- let commaStr = ''
- value.forEach((_value) => {
- commaStr += (commaStr ? ',' : '') + _value
- })
- _result.push(`${key}=${commaStr}`)
- break
- default:
- value.forEach((_value) => {
- _result.push(`${key}[]=${_value}`)
- })
- }
- } else {
- _result.push(`${key}=${value}`)
- }
- }
- return _result.length ? prefix + _result.join('&') : ''
-}
-
-/**
- * 显示消息提示框
- * @param {String} title 提示的内容,长度与 icon 取值有关。
- * @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000
- */
-function toast(title, duration = 2000) {
- uni.showToast({
- title: String(title),
- icon: 'none',
- duration,
- })
-}
-
-/**
- * @description 根据主题type值,获取对应的图标
- * @param {String} type 主题名称,primary|info|error|warning|success
- * @param {boolean} fill 是否使用fill填充实体的图标
- */
-function type2icon(type = 'success', fill = false) {
- // 如果非预置值,默认为success
- if (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success'
- let iconName = ''
- // 目前(2019-12-12),info和primary使用同一个图标
- switch (type) {
- case 'primary':
- iconName = 'info-circle'
- break
- case 'info':
- iconName = 'info-circle'
- break
- case 'error':
- iconName = 'close-circle'
- break
- case 'warning':
- iconName = 'error-circle'
- break
- case 'success':
- iconName = 'checkmark-circle'
- break
- default:
- iconName = 'checkmark-circle'
- }
- // 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的
- if (fill) iconName += '-fill'
- return iconName
-}
-
-/**
- * @description 数字格式化
- * @param {number|string} number 要格式化的数字
- * @param {number} decimals 保留几位小数
- * @param {string} decimalPoint 小数点符号
- * @param {string} thousandsSeparator 千分位符号
- * @returns {string} 格式化后的数字
- */
-function priceFormat(number, decimals = 0, decimalPoint = '.', thousandsSeparator = ',') {
- number = `${number}`.replace(/[^0-9+-Ee.]/g, '')
- const n = !isFinite(+number) ? 0 : +number
- const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
- const sep = typeof thousandsSeparator === 'undefined' ? ',' : thousandsSeparator
- const dec = typeof decimalPoint === 'undefined' ? '.' : decimalPoint
- let s = ''
-
- s = (prec ? round(n, prec) + '' : `${Math.round(n)}`).split('.')
- const re = /(-?\d+)(\d{3})/
- while (re.test(s[0])) {
- s[0] = s[0].replace(re, `$1${sep}$2`)
- }
-
- if ((s[1] || '').length < prec) {
- s[1] = s[1] || ''
- s[1] += new Array(prec - s[1].length + 1).join('0')
- }
- return s.join(dec)
-}
-
-/**
- * @description 获取duration值
- * 如果带有ms或者s直接返回,如果大于一定值,认为是ms单位,小于一定值,认为是s单位
- * 比如以30位阈值,那么300大于30,可以理解为用户想要的是300ms,而不是想花300s去执行一个动画
- * @param {String|number} value 比如: "1s"|"100ms"|1|100
- * @param {boolean} unit 提示: 如果是false 默认返回number
- * @return {string|number}
- */
-function getDuration(value, unit = true) {
- const valueNum = parseInt(value)
- if (unit) {
- if (/s$/.test(value)) return value
- return value > 30 ? `${value}ms` : `${value}s`
- }
- if (/ms$/.test(value)) return valueNum
- if (/s$/.test(value)) return valueNum > 30 ? valueNum : valueNum * 1000
- return valueNum
-}
-
-/**
- * @description 日期的月或日补零操作
- * @param {String} value 需要补零的值
- */
-function padZero(value) {
- return `00${value}`.slice(-2)
-}
-
-/**
- * @description 获取某个对象下的属性,用于通过类似'a.b.c'的形式去获取一个对象的的属性的形式
- * @param {object} obj 对象
- * @param {string} key 需要获取的属性字段
- * @returns {*}
- */
-function getProperty(obj, key) {
- if (!obj) {
- return
- }
- if (typeof key !== 'string' || key === '') {
- return ''
- }
- if (key.indexOf('.') !== -1) {
- const keys = key.split('.')
- let firstObj = obj[keys[0]] || {}
-
- for (let i = 1; i < keys.length; i++) {
- if (firstObj) {
- firstObj = firstObj[keys[i]]
- }
- }
- return firstObj
- }
- return obj[key]
-}
-
-/**
- * @description 设置对象的属性值,如果'a.b.c'的形式进行设置
- * @param {object} obj 对象
- * @param {string} key 需要设置的属性
- * @param {string} value 设置的值
- */
-function setProperty(obj, key, value) {
- if (!obj) {
- return
- }
- // 递归赋值
- const inFn = function (_obj, keys, v) {
- // 最后一个属性key
- if (keys.length === 1) {
- _obj[keys[0]] = v
- return
- }
- // 0~length-1个key
- while (keys.length > 1) {
- const k = keys[0]
- if (!_obj[k] || typeof _obj[k] !== 'object') {
- _obj[k] = {}
- }
- const key = keys.shift()
- // 自调用判断是否存在属性,不存在则自动创建对象
- inFn(_obj[k], keys, v)
- }
- }
-
- if (typeof key !== 'string' || key === '') {
- } else if (key.indexOf('.') !== -1) {
- // 支持多层级赋值操作
- const keys = key.split('.')
- inFn(obj, keys, value)
- } else {
- obj[key] = value
- }
-}
-
-/**
- * @description 获取当前页面路径
- */
-function page() {
- const pages = getCurrentPages()
- // 某些特殊情况下(比如页面进行redirectTo时的一些时机),pages可能为空数组
- return `/${pages[pages.length - 1]?.route ?? ''}`
-}
-
-/**
- * @description 获取当前路由栈实例数组
- */
-function pages() {
- const pages = getCurrentPages()
- return pages
-}
-
-/**
- * 获取H5-真实根地址 兼容hash+history模式
- */
-export function getRootUrl() {
- let url = ''
- // #ifdef H5
- url = location.origin + '/'
-
- if (location.hash !== '') {
- url += '#/'
- }
- // #endif
- return url
-}
-
-/**
- * copyText 多端复制文本
- */
-export function copyText(text) {
- // #ifndef H5
- uni.setClipboardData({
- data: text,
- success: function () {
- toast('复制成功!')
- },
- fail: function () {
- toast('复制失败!')
- },
- })
- // #endif
- // #ifdef H5
- const createInput = document.createElement('textarea')
- createInput.value = text
- document.body.appendChild(createInput)
- createInput.select()
- document.execCommand('Copy')
- createInput.className = 'createInput'
- createInput.style.display = 'none'
- toast('复制成功')
- // #endif
-}
-
-export default {
- range,
- getPx,
- sleep,
- os,
- sys,
- random,
- guid,
- $parent,
- addStyle,
- addUnit,
- deepClone,
- deepMerge,
- error,
- randomArray,
- timeFormat,
- timeFrom,
- trim,
- queryParams,
- toast,
- type2icon,
- priceFormat,
- getDuration,
- padZero,
- getProperty,
- setProperty,
- page,
- pages,
- test,
- getRootUrl,
- copyText,
-}
diff --git a/acdr-ui/src/sheep/helper/test.js b/acdr-ui/src/sheep/helper/test.js
deleted file mode 100644
index 1c58d169..00000000
--- a/acdr-ui/src/sheep/helper/test.js
+++ /dev/null
@@ -1,285 +0,0 @@
-/**
- * 验证电子邮箱格式
- */
-function email(value) {
- return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value)
-}
-
-/**
- * 验证手机格式
- */
-function mobile(value) {
- return /^1[23456789]\d{9}$/.test(value)
-}
-
-/**
- * 验证URL格式
- */
-function url(value) {
- return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(
- value,
- )
-}
-
-/**
- * 验证日期格式
- */
-function date(value) {
- if (!value) return false
- // 判断是否数值或者字符串数值(意味着为时间戳),转为数值,否则new Date无法识别字符串时间戳
- if (number(value)) value = +value
- return !/Invalid|NaN/.test(new Date(value).toString())
-}
-
-/**
- * 验证ISO类型的日期格式
- */
-function dateISO(value) {
- return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value)
-}
-
-/**
- * 验证十进制数字
- */
-function number(value) {
- return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value)
-}
-
-/**
- * 验证字符串
- */
-function string(value) {
- return typeof value === 'string'
-}
-
-/**
- * 验证整数
- */
-function digits(value) {
- return /^\d+$/.test(value)
-}
-
-/**
- * 验证身份证号码
- */
-function idCard(value) {
- return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)
-}
-
-/**
- * 是否车牌号
- */
-function carNo(value) {
- // 新能源车牌
- const xreg =
- /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/
- // 旧车牌
- const creg =
- /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/
- if (value.length === 7) {
- return creg.test(value)
- }
- if (value.length === 8) {
- return xreg.test(value)
- }
- return false
-}
-
-/**
- * 金额,只允许2位小数
- */
-function amount(value) {
- // 金额,只允许保留两位小数
- return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value)
-}
-
-/**
- * 中文
- */
-function chinese(value) {
- const reg = /^[\u4e00-\u9fa5]+$/gi
- return reg.test(value)
-}
-
-/**
- * 只能输入字母
- */
-function letter(value) {
- return /^[a-zA-Z]*$/.test(value)
-}
-
-/**
- * 只能是字母或者数字
- */
-function enOrNum(value) {
- // 英文或者数字
- const reg = /^[0-9a-zA-Z]*$/g
- return reg.test(value)
-}
-
-/**
- * 验证是否包含某个值
- */
-function contains(value, param) {
- return value.indexOf(param) >= 0
-}
-
-/**
- * 验证一个值范围[min, max]
- */
-function range(value, param) {
- return value >= param[0] && value <= param[1]
-}
-
-/**
- * 验证一个长度范围[min, max]
- */
-function rangeLength(value, param) {
- return value.length >= param[0] && value.length <= param[1]
-}
-
-/**
- * 是否固定电话
- */
-function landline(value) {
- const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/
- return reg.test(value)
-}
-
-/**
- * 判断是否为空
- */
-function empty(value) {
- switch (typeof value) {
- case 'undefined':
- return true
- case 'string':
- if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true
- break
- case 'boolean':
- if (!value) return true
- break
- case 'number':
- if (value === 0 || isNaN(value)) return true
- break
- case 'object':
- if (value === null || value.length === 0) return true
- for (const i in value) {
- return false
- }
- return true
- }
- return false
-}
-
-/**
- * 是否json字符串
- */
-function jsonString(value) {
- if (typeof value === 'string') {
- try {
- const obj = JSON.parse(value)
- if (typeof obj === 'object' && obj) {
- return true
- }
- return false
- } catch (e) {
- return false
- }
- }
- return false
-}
-
-/**
- * 是否数组
- */
-function array(value) {
- if (typeof Array.isArray === 'function') {
- return Array.isArray(value)
- }
- return Object.prototype.toString.call(value) === '[object Array]'
-}
-
-/**
- * 是否对象
- */
-function object(value) {
- return Object.prototype.toString.call(value) === '[object Object]'
-}
-
-/**
- * 是否短信验证码
- */
-function code(value, len = 6) {
- return new RegExp(`^\\d{${len}}$`).test(value)
-}
-
-/**
- * 是否函数方法
- * @param {Object} value
- */
-function func(value) {
- return typeof value === 'function'
-}
-
-/**
- * 是否promise对象
- * @param {Object} value
- */
-function promise(value) {
- return object(value) && func(value.then) && func(value.catch)
-}
-
-/** 是否图片格式
- * @param {Object} value
- */
-function image(value) {
- const newValue = value.split('?')[0]
- const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i
- return IMAGE_REGEXP.test(newValue)
-}
-
-/**
- * 是否视频格式
- * @param {Object} value
- */
-function video(value) {
- const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i
- return VIDEO_REGEXP.test(value)
-}
-
-/**
- * 是否为正则对象
- * @param {Object}
- * @return {Boolean}
- */
-function regExp(o) {
- return o && Object.prototype.toString.call(o) === '[object RegExp]'
-}
-
-export default {
- email,
- mobile,
- url,
- date,
- dateISO,
- number,
- digits,
- idCard,
- carNo,
- amount,
- chinese,
- letter,
- enOrNum,
- contains,
- range,
- rangeLength,
- empty,
- isEmpty: empty,
- isNumber: number,
- jsonString,
- landline,
- object,
- array,
- code,
-}
diff --git a/acdr-ui/src/sheep/helper/throttle.js b/acdr-ui/src/sheep/helper/throttle.js
deleted file mode 100644
index d0874605..00000000
--- a/acdr-ui/src/sheep/helper/throttle.js
+++ /dev/null
@@ -1,31 +0,0 @@
-let timer
-let flag
-/**
- * 节流原理:在一定时间内,只能触发一次
- *
- * @param {Function} func 要执行的回调函数
- * @param {Number} wait 延时的时间
- * @param {Boolean} immediate 是否立即执行
- * @return null
- */
-function throttle(func, wait = 500, immediate = true) {
- if (immediate) {
- if (!flag) {
- flag = true
- // 如果是立即执行,则在wait毫秒内开始时执行
- typeof func === 'function' && func()
- timer = setTimeout(() => {
- flag = false
- }, wait)
- } else {
- }
- } else if (!flag) {
- flag = true
- // 如果是非立即执行,则在wait毫秒内的结束处执行
- timer = setTimeout(() => {
- flag = false
- typeof func === 'function' && func()
- }, wait)
- }
-}
-export default throttle
diff --git a/acdr-ui/src/sheep/helper/tools.js b/acdr-ui/src/sheep/helper/tools.js
deleted file mode 100644
index 3e82c426..00000000
--- a/acdr-ui/src/sheep/helper/tools.js
+++ /dev/null
@@ -1,67 +0,0 @@
-import router from '@/sheep/router'
-export default {
- /**
- * 打电话
- * @param {String} phoneNumber - 数字字符串
- */
- callPhone(phoneNumber = '') {
- const num = phoneNumber.toString()
- uni.makePhoneCall({
- phoneNumber: num,
- fail(err) {
- console.log('makePhoneCall出错', err)
- },
- })
- },
-
- /**
- * 微信头像
- * @param {String} url -图片地址
- */
- checkMPUrl(url) {
- // #ifdef MP
- if (
- url.substring(0, 4) === 'http' &&
- url.substring(0, 5) !== 'https' &&
- url.substring(0, 12) !== 'http://store' &&
- url.substring(0, 10) !== 'http://tmp' &&
- url.substring(0, 10) !== 'http://usr'
- ) {
- url = 'https' + url.substring(4, url.length)
- }
- // #endif
- return url
- },
-
- /**
- * getUuid 生成唯一id
- */
- getUuid(len = 32, firstU = true, radix = null) {
- const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
- const uuid = []
- radix = radix || chars.length
-
- if (len) {
- // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
- for (let i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)]
- } else {
- let r
- // rfc4122标准要求返回的uuid中,某些位为固定的字符
- uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
- uuid[14] = '4'
-
- for (let i = 0; i < 36; i++) {
- if (!uuid[i]) {
- r = 0 | (Math.random() * 16)
- uuid[i] = chars[i == 19 ? (r & 0x3) | 0x8 : r]
- }
- }
- }
- // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
- if (firstU) {
- uuid.shift()
- return `u${uuid.join('')}`
- }
- return uuid.join('')
- },
-}
diff --git a/acdr-ui/src/sheep/helper/utils.js b/acdr-ui/src/sheep/helper/utils.js
deleted file mode 100644
index 84c6f0dc..00000000
--- a/acdr-ui/src/sheep/helper/utils.js
+++ /dev/null
@@ -1,172 +0,0 @@
-export function isArray(value) {
- if (typeof Array.isArray === 'function') {
- return Array.isArray(value)
- } else {
- return Object.prototype.toString.call(value) === '[object Array]'
- }
-}
-
-export function isObject(value) {
- return Object.prototype.toString.call(value) === '[object Object]'
-}
-
-export function isNumber(value) {
- return !isNaN(Number(value))
-}
-
-export function isFunction(value) {
- return typeof value === 'function'
-}
-
-export function isString(value) {
- return typeof value === 'string'
-}
-
-export function isEmpty(value) {
- if (value === '' || value === undefined || value === null) {
- return true
- }
-
- if (isArray(value)) {
- return value.length === 0
- }
-
- if (isObject(value)) {
- return Object.keys(value).length === 0
- }
-
- return false
-}
-
-export function isBoolean(value) {
- return typeof value === 'boolean'
-}
-
-export function last(data) {
- if (isArray(data) || isString(data)) {
- return data[data.length - 1]
- }
-}
-
-export function cloneDeep(obj) {
- const d = isArray(obj) ? [...obj] : {}
-
- if (isObject(obj)) {
- for (const key in obj) {
- if (obj[key]) {
- if (obj[key] && typeof obj[key] === 'object') {
- d[key] = cloneDeep(obj[key])
- } else {
- d[key] = obj[key]
- }
- }
- }
- }
-
- return d
-}
-
-export function clone(obj) {
- return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj))
-}
-
-export function deepMerge(a, b) {
- let k
- for (k in b) {
- a[k] = a[k] && a[k].toString() === '[object Object]' ? deepMerge(a[k], b[k]) : (a[k] = b[k])
- }
- return a
-}
-
-export function contains(parent, node) {
- while (node && (node = node.parentNode)) if (node === parent) return true
- return false
-}
-
-export function orderBy(list, key) {
- return list.sort((a, b) => a[key] - b[key])
-}
-
-export function deepTree(list) {
- const newList = []
- const map = {}
-
- list.forEach((e) => (map[e.id] = e))
-
- list.forEach((e) => {
- const parent = map[e.parentId]
-
- if (parent) {
- ;(parent.children || (parent.children = [])).push(e)
- } else {
- newList.push(e)
- }
- })
-
- const fn = (list) => {
- list.map((e) => {
- if (e.children instanceof Array) {
- e.children = orderBy(e.children, 'orderNum')
-
- fn(e.children)
- }
- })
- }
-
- fn(newList)
-
- return orderBy(newList, 'orderNum')
-}
-
-export function revDeepTree(list = []) {
- const d = []
- let id = 0
-
- const deep = (list, parentId) => {
- list.forEach((e) => {
- if (!e.id) {
- e.id = id++
- }
-
- e.parentId = parentId
-
- d.push(e)
-
- if (e.children && isArray(e.children)) {
- deep(e.children, e.id)
- }
- })
- }
-
- deep(list || [], null)
-
- return d
-}
-
-export function basename(path) {
- let index = path.lastIndexOf('/')
- index = index > -1 ? index : path.lastIndexOf('\\')
- if (index < 0) {
- return path
- }
- return path.substring(index + 1)
-}
-
-export function isWxBrowser() {
- const ua = navigator.userAgent.toLowerCase()
- if (ua.match(/MicroMessenger/i) == 'micromessenger') {
- return true
- } else {
- return false
- }
-}
-
-/**
- * @description 如果value小于min,取min;如果value大于max,取max
- * @param {number} min
- * @param {number} max
- * @param {number} value
- */
-export function range(min = 0, max = 0, value = 0) {
- return Math.max(min, Math.min(max, Number(value)))
-}
diff --git a/acdr-ui/src/sheep/hooks/useApp.js b/acdr-ui/src/sheep/hooks/useApp.js
deleted file mode 100644
index e69de29b..00000000
diff --git a/acdr-ui/src/sheep/hooks/useGoods.js b/acdr-ui/src/sheep/hooks/useGoods.js
deleted file mode 100644
index 88c9a2a8..00000000
--- a/acdr-ui/src/sheep/hooks/useGoods.js
+++ /dev/null
@@ -1,398 +0,0 @@
-import { ref } from 'vue'
-import dayjs from 'dayjs'
-import $url from '@/sheep/url'
-import { formatDate } from '@/sheep/util'
-
-/**
- * 格式化销量
- * @param {'exact' | string} type 格式类型:exact=精确值,其它=大致数量
- * @param {number} num 销量
- * @return {string} 格式化后的销量字符串
- */
-export function formatSales(type, num) {
- const prefix = type !== 'exact' && num < 10 ? '销量' : '已售'
- return formatNum(prefix, type, num)
-}
-
-/**
- * 格式化兑换量
- * @param {'exact' | string} type 格式类型:exact=精确值,其它=大致数量
- * @param {number} num 销量
- * @return {string} 格式化后的销量字符串
- */
-export function formatExchange(type, num) {
- return formatNum('已兑换', type, num)
-}
-
-/**
- * 格式化库存
- * @param {'exact' | any} type 格式类型:exact=精确值,其它=大致数量
- * @param {number} num 销量
- * @return {string} 格式化后的销量字符串
- */
-export function formatStock(type, num) {
- return formatNum('库存', type, num)
-}
-
-/**
- * 格式化数字
- * @param {string} prefix 前缀
- * @param {'exact' | string} type 格式类型:exact=精确值,其它=大致数量
- * @param {number} num 销量
- * @return {string} 格式化后的销量字符串
- */
-export function formatNum(prefix, type, num) {
- num = num || 0
- // 情况一:精确数值
- if (type === 'exact') {
- return prefix + num
- }
- // 情况二:小于等于 10
- if (num < 10) {
- return `${prefix}≤10`
- }
- // 情况三:大于 10,除第一位外,其它位都显示为0
- // 例如:100 - 199 显示为 100+
- // 9000 - 9999 显示为 9000+
- const numStr = num.toString()
- const first = numStr[0]
- const other = '0'.repeat(numStr.length - 1)
- return `${prefix}${first}${other}+`
-}
-
-// 格式化价格
-export function formatPrice(e) {
- return e.length === 1 ? e[0] : e.join('~')
-}
-
-// 视频格式后缀列表
-const VIDEO_SUFFIX_LIST = ['.avi', '.mp4']
-
-/**
- * 转换商品轮播的链接列表:根据链接的后缀,判断是视频链接还是图片链接
- *
- * @param {string[]} urlList 链接列表
- * @return {{src: string, type: 'video' | 'image' }[]} 转换后的链接列表
- */
-export function formatGoodsSwiper(urlList) {
- return (
- urlList
- ?.filter((url) => url)
- .map((url, key) => {
- const isVideo = VIDEO_SUFFIX_LIST.some((suffix) => url.includes(suffix))
- const type = isVideo ? 'video' : 'image'
- const src = $url.cdn(url)
- return { type, src }
- }) || []
- )
-}
-
-/**
- * 格式化订单状态的颜色
- *
- * @param order 订单
- * @return {string} 颜色的 class 名称
- */
-export function formatOrderColor(order) {
- if (order.status === 0) {
- return 'info-color'
- }
- if (order.status === 10 || order.status === 20 || (order.status === 30 && !order.commentStatus)) {
- return 'warning-color'
- }
- if (order.status === 30 && order.commentStatus) {
- return 'success-color'
- }
- return 'danger-color'
-}
-
-/**
- * 格式化订单状态
- *
- * @param order 订单
- */
-export function formatOrderStatus(order) {
- if (order.status === 0) {
- return '待付款'
- }
- if (order.status === 10 && order.deliveryType === 1) {
- return '待发货'
- }
- if (order.status === 10 && order.deliveryType === 2) {
- return '待核销'
- }
- if (order.status === 20) {
- return '待收货'
- }
- if (order.status === 30 && !order.commentStatus) {
- return '待评价'
- }
- if (order.status === 30 && order.commentStatus) {
- return '已完成'
- }
- return '已关闭'
-}
-
-/**
- * 格式化订单状态的描述
- *
- * @param order 订单
- */
-export function formatOrderStatusDescription(order) {
- if (order.status === 0) {
- return `请在 ${formatDate(order.payExpireTime)} 前完成支付`
- }
- if (order.status === 10) {
- return '商家未发货,请耐心等待'
- }
- if (order.status === 20) {
- return '商家已发货,请耐心等待'
- }
- if (order.status === 30 && !order.commentStatus) {
- return '已收货,快去评价一下吧'
- }
- if (order.status === 30 && order.commentStatus) {
- return '交易完成,感谢您的支持'
- }
- return '交易关闭'
-}
-
-/**
- * 处理订单的 button 操作按钮数组
- *
- * @param order 订单
- */
-export function handleOrderButtons(order) {
- order.buttons = []
- if (order.type === 3) {
- // 查看拼团
- order.buttons.push('combination')
- }
- if (order.status === 20) {
- // 确认收货
- order.buttons.push('confirm')
- }
- if (order.logisticsId > 0) {
- // 查看物流
- order.buttons.push('express')
- }
- if (order.status === 0) {
- // 取消订单 / 发起支付
- order.buttons.push('cancel')
- order.buttons.push('pay')
- }
- if (order.status === 30 && !order.commentStatus) {
- // 发起评价
- order.buttons.push('comment')
- }
- if (order.status === 40) {
- // 删除订单
- order.buttons.push('delete')
- }
-}
-
-/**
- * 格式化售后状态
- *
- * @param afterSale 售后
- */
-export function formatAfterSaleStatus(afterSale) {
- if (afterSale.status === 10) {
- return '申请售后'
- }
- if (afterSale.status === 20) {
- return '商品待退货'
- }
- if (afterSale.status === 30) {
- return '商家待收货'
- }
- if (afterSale.status === 40) {
- return '等待退款'
- }
- if (afterSale.status === 50) {
- return '退款成功'
- }
- if (afterSale.status === 61) {
- return '买家取消'
- }
- if (afterSale.status === 62) {
- return '商家拒绝'
- }
- if (afterSale.status === 63) {
- return '商家拒收货'
- }
- return '未知状态'
-}
-
-/**
- * 格式化售后状态的描述
- *
- * @param afterSale 售后
- */
-export function formatAfterSaleStatusDescription(afterSale) {
- if (afterSale.status === 10) {
- return '退款申请待商家处理'
- }
- if (afterSale.status === 20) {
- return '请退货并填写物流信息'
- }
- if (afterSale.status === 30) {
- return '退货退款申请待商家处理'
- }
- if (afterSale.status === 40) {
- return '等待退款'
- }
- if (afterSale.status === 50) {
- return '退款成功'
- }
- if (afterSale.status === 61) {
- return '退款关闭'
- }
- if (afterSale.status === 62) {
- return `商家不同意退款申请,拒绝原因:${afterSale.auditReason}`
- }
- if (afterSale.status === 63) {
- return `商家拒绝收货,不同意退款,拒绝原因:${afterSale.auditReason}`
- }
- return '未知状态'
-}
-
-/**
- * 处理售后的 button 操作按钮数组
- *
- * @param afterSale 售后
- */
-export function handleAfterSaleButtons(afterSale) {
- afterSale.buttons = []
- if ([10, 20, 30].includes(afterSale.status)) {
- // 取消订单
- afterSale.buttons.push('cancel')
- }
- if (afterSale.status === 20) {
- // 退货信息
- afterSale.buttons.push('delivery')
- }
-}
-
-/**
- * 倒计时
- * @param toTime 截止时间
- * @param fromTime 起始时间,默认当前时间
- * @return {{s: string, ms: number, h: string, m: string}} 持续时间
- */
-export function useDurationTime(toTime, fromTime = '') {
- toTime = getDayjsTime(toTime)
- if (fromTime === '') {
- fromTime = dayjs()
- }
- const duration = ref(toTime - fromTime)
- if (duration.value > 0) {
- setTimeout(() => {
- if (duration.value > 0) {
- duration.value -= 1000
- }
- }, 1000)
- }
-
- const durationTime = dayjs.duration(duration.value)
- return {
- h: (durationTime.months() * 30 * 24 + durationTime.days() * 24 + durationTime.hours())
- .toString()
- .padStart(2, '0'),
- m: durationTime.minutes().toString().padStart(2, '0'),
- s: durationTime.seconds().toString().padStart(2, '0'),
- ms: durationTime.$ms,
- }
-}
-
-/**
- * 转换为 Dayjs
- * @param {any} time 时间
- * @return {dayjs.Dayjs}
- */
-function getDayjsTime(time) {
- time = time.toString()
- if (time.indexOf('-') > 0) {
- // 'date'
- return dayjs(time)
- }
- if (time.length > 10) {
- // 'timestamp'
- return dayjs(parseInt(time))
- }
- if (time.length === 10) {
- // 'unixTime'
- return dayjs.unix(parseInt(time))
- }
-}
-
-/**
- * 将分转成元
- *
- * @param price 分,例如说 100 分
- * @returns {string} 元,例如说 1.00 元
- */
-export function fen2yuan(price) {
- return (price / 100.0).toFixed(2)
-}
-
-/**
- * 从商品 SKU 数组中,转换出商品属性的数组
- *
- * 类似结构:[{
- * id: // 属性的编号
- * name: // 属性的名字
- * values: [{
- * id: // 属性值的编号
- * name: // 属性值的名字
- * }]
- * }]
- *
- * @param skus 商品 SKU 数组
- */
-export function convertProductPropertyList(skus) {
- const result = []
- for (const sku of skus) {
- if (!sku.properties) {
- continue
- }
- for (const property of sku.properties) {
- // ① 先处理属性
- let resultProperty = result.find((item) => item.id === property.propertyId)
- if (!resultProperty) {
- resultProperty = {
- id: property.propertyId,
- name: property.propertyName,
- values: [],
- }
- result.push(resultProperty)
- }
- // ② 再处理属性值
- const resultValue = resultProperty.values.find((item) => item.id === property.valueId)
- if (!resultValue) {
- resultProperty.values.push({
- id: property.valueId,
- name: property.valueName,
- })
- }
- }
- }
- return result
-}
-
-/**
- * 格式化满减送活动的规则
- *
- * @param activity 活动信息
- * @param rule 优惠规格
- * @returns {string} 规格字符串
- */
-export function formatRewardActivityRule(activity, rule) {
- if (activity.conditionType === 10) {
- return `满 ${fen2yuan(rule.limit)} 元减 ${fen2yuan(rule.discountPrice)} 元`
- }
- if (activity.conditionType === 20) {
- return `满 ${rule.limit} 件减 ${fen2yuan(rule.discountPrice)} 元`
- }
- return ''
-}
diff --git a/acdr-ui/src/sheep/hooks/useModal.js b/acdr-ui/src/sheep/hooks/useModal.js
deleted file mode 100644
index bf64b367..00000000
--- a/acdr-ui/src/sheep/hooks/useModal.js
+++ /dev/null
@@ -1,141 +0,0 @@
-import $store from '@/sheep/store'
-import $helper from '@/sheep/helper'
-import dayjs from 'dayjs'
-import { ref } from 'vue'
-import test from '@/sheep/helper/test.js'
-import AuthUtil from '@/sheep/api/member/auth'
-
-// 打开授权弹框
-export function showAuthModal(type = 'smsLogin') {
- const modal = $store('modal')
- if (modal.auth !== '') {
- // 注意:延迟修改,保证下面的 closeAuthModal 先执行掉
- setTimeout(() => {
- modal.$patch((state) => {
- state.auth = type
- })
- }, 500)
- closeAuthModal()
- } else {
- modal.$patch((state) => {
- state.auth = type
- })
- }
-}
-
-// 关闭授权弹框
-export function closeAuthModal() {
- $store('modal').$patch((state) => {
- state.auth = ''
- })
-}
-
-// 打开分享弹框
-export function showShareModal() {
- $store('modal').$patch((state) => {
- state.share = true
- })
-}
-
-// 关闭分享弹框
-export function closeShareModal() {
- $store('modal').$patch((state) => {
- state.share = false
- })
-}
-
-// 打开快捷菜单
-export function showMenuTools() {
- $store('modal').$patch((state) => {
- state.menu = true
- })
-}
-
-// 关闭快捷菜单
-export function closeMenuTools() {
- $store('modal').$patch((state) => {
- state.menu = false
- })
-}
-
-// 发送短信验证码 60秒
-export function getSmsCode(event, mobile) {
- const modalStore = $store('modal')
- const lastSendTimer = modalStore.lastTimer[event]
- if (typeof lastSendTimer === 'undefined') {
- $helper.toast('短信发送事件错误')
- return
- }
-
- const duration = dayjs().unix() - lastSendTimer
- const canSend = duration >= 60
- if (!canSend) {
- $helper.toast('请稍后再试')
- return
- }
- // 只有 mobile 非空时才校验。因为部分场景(修改密码),不需要输入手机
- if (mobile && !test.mobile(mobile)) {
- $helper.toast('手机号码格式不正确')
- return
- }
-
- // 发送验证码 + 更新上次发送验证码时间
- let scene = -1
- switch (event) {
- case 'resetPassword':
- scene = 4
- break
- case 'changePassword':
- scene = 3
- break
- case 'changeMobile':
- scene = 2
- break
- case 'smsLogin':
- scene = 1
- break
- }
- AuthUtil.sendSmsCode(mobile, scene).then((res) => {
- if (res.code === 0) {
- modalStore.$patch((state) => {
- state.lastTimer[event] = dayjs().unix()
- })
- }
- })
-}
-
-// 获取短信验证码倒计时 -- 60秒
-export function getSmsTimer(event, mobile = '') {
- const modalStore = $store('modal')
- const lastSendTimer = modalStore.lastTimer[event]
-
- if (typeof lastSendTimer === 'undefined') {
- $helper.toast('短信发送事件错误')
- return
- }
-
- const duration = ref(dayjs().unix() - lastSendTimer - 60)
- const canSend = duration.value >= 0
-
- if (canSend) {
- return '获取验证码'
- }
-
- if (!canSend) {
- setTimeout(() => {
- duration.value++
- }, 1000)
- return -duration.value.toString() + ' 秒'
- }
-}
-
-// 记录广告弹框历史
-export function saveAdvHistory(adv) {
- const modal = $store('modal')
-
- modal.$patch((state) => {
- if (!state.advHistory.includes(adv.imgUrl)) {
- state.advHistory.push(adv.imgUrl)
- }
- })
-}
diff --git a/acdr-ui/src/sheep/hooks/useWebSocket.js b/acdr-ui/src/sheep/hooks/useWebSocket.js
deleted file mode 100644
index 567f405c..00000000
--- a/acdr-ui/src/sheep/hooks/useWebSocket.js
+++ /dev/null
@@ -1,153 +0,0 @@
-import { onBeforeUnmount, reactive, ref } from 'vue'
-import { baseUrl, websocketPath } from '@/sheep/config'
-import { copyValueToTarget } from '@/sheep/util'
-
-/**
- * WebSocket 创建 hook
- * @param opt 连接配置
- * @return {{options: *}}
- */
-export function useWebSocket(opt) {
- const getAccessToken = () => {
- return uni.getStorageSync('token')
- }
-
- const options = reactive({
- url: (baseUrl + websocketPath).replace('http', 'ws') + '?token=' + getAccessToken(), // ws 地址
- isReconnecting: false, // 正在重新连接
- reconnectInterval: 3000, // 重连间隔,单位毫秒
- heartBeatInterval: 5000, // 心跳间隔,单位毫秒
- pingTimeoutDuration: 1000, // 超过这个时间,后端没有返回pong,则判定后端断线了。
- heartBeatTimer: null, // 心跳计时器
- destroy: false, // 是否销毁
- pingTimeout: null, // 心跳检测定时器
- reconnectTimeout: null, // 重连定时器ID的属性
- onConnected: () => {}, // 连接成功时触发
- onClosed: () => {}, // 连接关闭时触发
- onMessage: (data) => {}, // 收到消息
- })
- const SocketTask = ref(null) // SocketTask 由 uni.connectSocket() 接口创建
-
- const initEventListeners = () => {
- // 监听 WebSocket 连接打开事件
- SocketTask.value.onOpen(() => {
- console.log('WebSocket 连接成功')
- // 连接成功时触发
- options.onConnected()
- // 开启心跳检查
- startHeartBeat()
- })
- // 监听 WebSocket 接受到服务器的消息事件
- SocketTask.value.onMessage((res) => {
- try {
- if (res.data === 'pong') {
- // 收到心跳重置心跳超时检查
- resetPingTimeout()
- } else {
- options.onMessage(JSON.parse(res.data))
- }
- } catch (error) {
- console.error(error)
- }
- })
- // 监听 WebSocket 连接关闭事件
- SocketTask.value.onClose((event) => {
- // 情况一:实例销毁
- if (options.destroy) {
- options.onClosed()
- } else {
- // 情况二:连接失败重连
- // 停止心跳检查
- stopHeartBeat()
- // 重连
- reconnect()
- }
- })
- }
-
- // 发送消息
- const sendMessage = (message) => {
- if (SocketTask.value && !options.destroy) {
- SocketTask.value.send({ data: message })
- }
- }
- // 开始心跳检查
- const startHeartBeat = () => {
- options.heartBeatTimer = setInterval(() => {
- sendMessage('ping')
- options.pingTimeout = setTimeout(() => {
- // 如果在超时时间内没有收到 pong,则认为连接断开
- reconnect()
- }, options.pingTimeoutDuration)
- }, options.heartBeatInterval)
- }
- // 停止心跳检查
- const stopHeartBeat = () => {
- clearInterval(options.heartBeatTimer)
- resetPingTimeout()
- }
-
- // WebSocket 重连
- const reconnect = () => {
- if (options.destroy || !SocketTask.value) {
- // 如果WebSocket已被销毁或尚未完全关闭,不进行重连
- return
- }
-
- // 重连中
- options.isReconnecting = true
-
- // 清除现有的重连标志,以避免多次重连
- if (options.reconnectTimeout) {
- clearTimeout(options.reconnectTimeout)
- }
-
- // 设置重连延迟
- options.reconnectTimeout = setTimeout(() => {
- // 检查组件是否仍在运行和WebSocket是否关闭
- if (!options.destroy) {
- // 重置重连标志
- options.isReconnecting = false
- // 初始化新的WebSocket连接
- initSocket()
- }
- }, options.reconnectInterval)
- }
-
- const resetPingTimeout = () => {
- if (options.pingTimeout) {
- clearTimeout(options.pingTimeout)
- options.pingTimeout = null // 清除超时ID
- }
- }
-
- const close = () => {
- options.destroy = true
- stopHeartBeat()
- if (options.reconnectTimeout) {
- clearTimeout(options.reconnectTimeout)
- }
- if (SocketTask.value) {
- SocketTask.value.close()
- SocketTask.value = null
- }
- }
-
- const initSocket = () => {
- options.destroy = false
- copyValueToTarget(options, opt)
- SocketTask.value = uni.connectSocket({
- url: options.url,
- complete: () => {},
- success: () => {},
- })
- initEventListeners()
- }
-
- initSocket()
-
- onBeforeUnmount(() => {
- close()
- })
- return { options }
-}
diff --git a/acdr-ui/src/sheep/index.js b/acdr-ui/src/sheep/index.js
deleted file mode 100644
index a8a5c39f..00000000
--- a/acdr-ui/src/sheep/index.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import $url from '@/sheep/url'
-import $router from '@/sheep/router'
-import $platform from '@/sheep/platform'
-import $helper from '@/sheep/helper'
-import zIndex from '@/sheep/config/zIndex.js'
-import $store from '@/sheep/store'
-import dayjs from 'dayjs'
-import relativeTime from 'dayjs/plugin/relativeTime'
-import duration from 'dayjs/plugin/duration'
-import 'dayjs/locale/zh-cn'
-
-dayjs.locale('zh-cn')
-dayjs.extend(relativeTime)
-dayjs.extend(duration)
-
-const sheep = {
- $store,
- $url,
- $router,
- $platform,
- $helper,
- $zIndex: zIndex,
-}
-
-// 加载Shopro底层依赖
-export async function ShoproInit() {
- // 应用初始化
- await $store('app').init()
-
- // 平台初始化加载(各平台provider提供不同的加载流程)
- $platform.load()
-
- if (process.env.NODE_ENV === 'development') {
- ShoproDebug()
- }
-}
-
-// 开发模式
-function ShoproDebug() {
- // 开发环境引入vconsole调试
- // #ifdef H5
- // import("vconsole").then(vconsole => {
- // new vconsole.default();
- // });
- // #endif
- // TODO 芋艿:可以打印路由
- // 同步前端页面到后端
- // console.log(ROUTES)
-}
-
-export default sheep
diff --git a/acdr-ui/src/sheep/libs/mplive-manifest-plugin.js b/acdr-ui/src/sheep/libs/mplive-manifest-plugin.js
deleted file mode 100644
index 6babd593..00000000
--- a/acdr-ui/src/sheep/libs/mplive-manifest-plugin.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const fs = require('fs')
-
-const manifestPath = process.env.UNI_INPUT_DIR + '/manifest.json'
-
-let Manifest = fs.readFileSync(manifestPath, {
- encoding: 'utf-8',
-})
-
-function mpliveMainfestPlugin(isOpen) {
- if (process.env.UNI_PLATFORM !== 'mp-weixin') return
-
- const manifestData = JSON.parse(Manifest)
-
- if (isOpen === '0') {
- delete manifestData['mp-weixin'].plugins['live-player-plugin']
- }
-
- if (isOpen === '1') {
- manifestData['mp-weixin'].plugins['live-player-plugin'] = {
- version: '1.3.5',
- provider: 'wx2b03c6e691cd7370',
- }
- }
-
- Manifest = JSON.stringify(manifestData, null, 2)
-
- fs.writeFileSync(manifestPath, Manifest, {
- flag: 'w',
- })
-}
-
-export default mpliveMainfestPlugin
diff --git a/acdr-ui/src/sheep/libs/permission.js b/acdr-ui/src/sheep/libs/permission.js
deleted file mode 100644
index e2cbca7b..00000000
--- a/acdr-ui/src/sheep/libs/permission.js
+++ /dev/null
@@ -1,244 +0,0 @@
-/// null = 未请求,1 = 已允许,0 = 拒绝|受限, 2 = 系统未开启
-
-let isIOS
-
-function album() {
- let result = 0
- const PHPhotoLibrary = plus.ios.import('PHPhotoLibrary')
- const authStatus = PHPhotoLibrary.authorizationStatus()
- if (authStatus === 0) {
- result = null
- } else if (authStatus == 3) {
- result = 1
- } else {
- result = 0
- }
- plus.ios.deleteObject(PHPhotoLibrary)
- return result
-}
-
-function camera() {
- let result = 0
- const AVCaptureDevice = plus.ios.import('AVCaptureDevice')
- const authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide')
- if (authStatus === 0) {
- result = null
- } else if (authStatus == 3) {
- result = 1
- } else {
- result = 0
- }
- plus.ios.deleteObject(AVCaptureDevice)
- return result
-}
-
-function location() {
- let result = 0
- const cllocationManger = plus.ios.import('CLLocationManager')
- const enable = cllocationManger.locationServicesEnabled()
- const status = cllocationManger.authorizationStatus()
- if (!enable) {
- result = 2
- } else if (status === 0) {
- result = null
- } else if (status === 3 || status === 4) {
- result = 1
- } else {
- result = 0
- }
- plus.ios.deleteObject(cllocationManger)
- return result
-}
-
-function push() {
- let result = 0
- const UIApplication = plus.ios.import('UIApplication')
- const app = UIApplication.sharedApplication()
- let enabledTypes = 0
- if (app.currentUserNotificationSettings) {
- const settings = app.currentUserNotificationSettings()
- enabledTypes = settings.plusGetAttribute('types')
- if (enabledTypes == 0) {
- result = 0
- console.log('推送权限没有开启')
- } else {
- result = 1
- console.log('已经开启推送功能!')
- }
- plus.ios.deleteObject(settings)
- } else {
- enabledTypes = app.enabledRemoteNotificationTypes()
- if (enabledTypes == 0) {
- result = 3
- console.log('推送权限没有开启!')
- } else {
- result = 4
- console.log('已经开启推送功能!')
- }
- }
- plus.ios.deleteObject(app)
- plus.ios.deleteObject(UIApplication)
- return result
-}
-
-function contact() {
- let result = 0
- const CNContactStore = plus.ios.import('CNContactStore')
- const cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0)
- if (cnAuthStatus === 0) {
- result = null
- } else if (cnAuthStatus == 3) {
- result = 1
- } else {
- result = 0
- }
- plus.ios.deleteObject(CNContactStore)
- return result
-}
-
-function record() {
- let result = null
- const avaudiosession = plus.ios.import('AVAudioSession')
- const avaudio = avaudiosession.sharedInstance()
- const status = avaudio.recordPermission()
- console.log('permissionStatus:' + status)
- if (status === 1970168948) {
- result = null
- } else if (status === 1735552628) {
- result = 1
- } else {
- result = 0
- }
- plus.ios.deleteObject(avaudiosession)
- return result
-}
-
-function calendar() {
- let result = null
- const EKEventStore = plus.ios.import('EKEventStore')
- const ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0)
- if (ekAuthStatus == 3) {
- result = 1
- console.log('日历权限已经开启')
- } else {
- console.log('日历权限没有开启')
- }
- plus.ios.deleteObject(EKEventStore)
- return result
-}
-
-function memo() {
- let result = null
- const EKEventStore = plus.ios.import('EKEventStore')
- const ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1)
- if (ekAuthStatus == 3) {
- result = 1
- console.log('备忘录权限已经开启')
- } else {
- console.log('备忘录权限没有开启')
- }
- plus.ios.deleteObject(EKEventStore)
- return result
-}
-
-function requestIOS(permissionID) {
- return new Promise((resolve, reject) => {
- switch (permissionID) {
- case 'push':
- resolve(push())
- break
- case 'location':
- resolve(location())
- break
- case 'record':
- resolve(record())
- break
- case 'camera':
- resolve(camera())
- break
- case 'album':
- resolve(album())
- break
- case 'contact':
- resolve(contact())
- break
- case 'calendar':
- resolve(calendar())
- break
- case 'memo':
- resolve(memo())
- break
- default:
- resolve(0)
- break
- }
- })
-}
-
-function requestAndroid(permissionID) {
- return new Promise((resolve, reject) => {
- plus.android.requestPermissions(
- [permissionID],
- function (resultObj) {
- let result = 0
- for (var i = 0; i < resultObj.granted.length; i++) {
- const grantedPermission = resultObj.granted[i]
- console.log('已获取的权限:' + grantedPermission)
- result = 1
- }
- for (var i = 0; i < resultObj.deniedPresent.length; i++) {
- const deniedPresentPermission = resultObj.deniedPresent[i]
- console.log('拒绝本次申请的权限:' + deniedPresentPermission)
- result = 0
- }
- for (var i = 0; i < resultObj.deniedAlways.length; i++) {
- const deniedAlwaysPermission = resultObj.deniedAlways[i]
- console.log('永久拒绝申请的权限:' + deniedAlwaysPermission)
- result = -1
- }
- resolve(result)
- },
- function (error) {
- console.log('result error: ' + error.message)
- resolve({
- code: error.code,
- message: error.message,
- })
- },
- )
- })
-}
-
-function gotoAppPermissionSetting() {
- if (permission.isIOS) {
- const UIApplication = plus.ios.import('UIApplication')
- const application2 = UIApplication.sharedApplication()
- const NSURL2 = plus.ios.import('NSURL')
- const setting2 = NSURL2.URLWithString('app-settings:')
- application2.openURL(setting2)
- plus.ios.deleteObject(setting2)
- plus.ios.deleteObject(NSURL2)
- plus.ios.deleteObject(application2)
- } else {
- const Intent = plus.android.importClass('android.content.Intent')
- const Settings = plus.android.importClass('android.provider.Settings')
- const Uri = plus.android.importClass('android.net.Uri')
- const mainActivity = plus.android.runtimeMainActivity()
- const intent = new Intent()
- intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
- const uri = Uri.fromParts('package', mainActivity.getPackageName(), null)
- intent.setData(uri)
- mainActivity.startActivity(intent)
- }
-}
-
-const permission = {
- get isIOS() {
- return typeof isIOS === 'boolean' ? isIOS : (isIOS = uni.getSystemInfoSync().platform === 'ios')
- },
- requestIOS,
- requestAndroid,
- gotoAppSetting: gotoAppPermissionSetting,
-}
-
-export default permission
diff --git a/acdr-ui/src/sheep/libs/sdk-h5-weixin.js b/acdr-ui/src/sheep/libs/sdk-h5-weixin.js
deleted file mode 100644
index fcae9161..00000000
--- a/acdr-ui/src/sheep/libs/sdk-h5-weixin.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
- * 本模块封装微信浏览器下的一些方法。
- * 更多微信网页开发sdk方法,详见:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html
- * 有 the permission value is offline verifying 报错请参考 @see https://segmentfault.com/a/1190000042289419 解决
- */
-
-import jweixin from 'weixin-js-sdk'
-import $helper from '@/sheep/helper'
-import AuthUtil from '@/sheep/api/member/auth'
-
-let configSuccess = false
-
-export default {
- // 判断是否在微信中
- isWechat() {
- const ua = window.navigator.userAgent.toLowerCase()
- // noinspection EqualityComparisonWithCoercionJS
- return ua.match(/micromessenger/i) == 'micromessenger'
- },
-
- isReady(api) {
- jweixin.ready(api)
- },
-
- // 初始化 JSSDK
- async init(callback) {
- if (!this.isWechat()) {
- $helper.toast('请使用微信网页浏览器打开')
- return
- }
-
- // 调用后端接口,获得 JSSDK 初始化所需的签名
- const url = location.href.split('#')[0]
- const { code, data } = await AuthUtil.createWeixinMpJsapiSignature(url)
- if (code === 0) {
- jweixin.config({
- debug: false,
- appId: data.appId,
- timestamp: data.timestamp,
- nonceStr: data.nonceStr,
- signature: data.signature,
- jsApiList: [
- 'chooseWXPay',
- 'openLocation',
- 'getLocation',
- 'updateTimelineShareData',
- 'scanQRCode',
- ], // TODO 芋艿:后续可以设置更多权限;
- openTagList: data.openTagList,
- })
- }
-
- // 监听结果
- configSuccess = true
- jweixin.error((err) => {
- configSuccess = false
- console.error('微信 JSSDK 初始化失败', err)
- // $helper.toast('微信JSSDK:' + err.errMsg);
- })
- jweixin.ready(() => {
- if (configSuccess) {
- console.log('微信 JSSDK 初始化成功')
- }
- })
-
- // 回调
- if (callback) {
- callback(data)
- }
- },
-
- // 在需要定位页面调用 TODO 芋艿:未测试
- getLocation(callback) {
- this.isReady(() => {
- jweixin.getLocation({
- type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
- success: function (res) {
- callback(res)
- },
- fail: function (res) {
- console.log('%c微信H5sdk,getLocation失败:', 'color:green;background:yellow')
- },
- })
- })
- },
-
- // 获取微信收货地址
- openAddress(callback) {
- this.isReady(() => {
- jweixin.openAddress({
- success: function (res) {
- callback.success && callback.success(res)
- },
- fail: function (err) {
- callback.error && callback.error(err)
- console.log('%c微信H5sdk,openAddress失败:', 'color:green;background:yellow')
- },
- complete: function (res) {},
- })
- })
- },
-
- // 微信扫码 TODO 芋艿:未测试
- scanQRCode(callback) {
- this.isReady(() => {
- jweixin.scanQRCode({
- needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
- scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
- success: function (res) {
- callback(res)
- },
- fail: function (res) {
- console.log('%c微信H5sdk,scanQRCode失败:', 'color:green;background:yellow')
- },
- })
- })
- },
-
- // 更新微信分享信息 TODO 芋艿:未测试
- updateShareInfo(data, callback = null) {
- this.isReady(() => {
- const shareData = {
- title: data.title,
- desc: data.desc,
- link: data.link,
- imgUrl: data.image,
- success: function (res) {
- if (callback) {
- callback(res)
- }
- // 分享后的一些操作,比如分享统计等等
- },
- cancel: function (res) {},
- }
-
- // 新版 分享聊天api
- jweixin.updateAppMessageShareData(shareData)
- // 新版 分享到朋友圈api
- jweixin.updateTimelineShareData(shareData)
- })
- },
-
- // 打开坐标位置 TODO 芋艿:未测试
- openLocation(data, callback) {
- this.isReady(() => {
- jweixin.openLocation({
- ...data,
- success: function (res) {
- console.log(res)
- },
- })
- })
- },
-
- // 选择图片 TODO 芋艿:未测试
- chooseImage(callback) {
- this.isReady(() => {
- jweixin.chooseImage({
- count: 1,
- sizeType: ['compressed'],
- sourceType: ['album'],
- success: function (rs) {
- callback(rs)
- },
- })
- })
- },
-
- // 微信支付
- wxpay(data, callback) {
- this.isReady(() => {
- jweixin.chooseWXPay({
- timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
- nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
- package: data.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
- signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
- paySign: data.paySign, // 支付签名
- success: function (res) {
- callback.success && callback.success(res)
- },
- fail: function (err) {
- callback.fail && callback.fail(err)
- },
- cancel: function (err) {
- callback.cancel && callback.cancel(err)
- },
- })
- })
- },
-}
diff --git a/acdr-ui/src/sheep/platform/index.js b/acdr-ui/src/sheep/platform/index.js
deleted file mode 100644
index 117aa437..00000000
--- a/acdr-ui/src/sheep/platform/index.js
+++ /dev/null
@@ -1,175 +0,0 @@
-/**
- * Shopro 第三方平台功能聚合
- * @version 1.0.3
- * @author lidongtony
- * @param {String} name - 厂商+平台名称
- * @param {String} provider - 厂商
- * @param {String} platform - 平台名称
- * @param {String} os - 系统型号
- * @param {Object} device - 设备信息
- */
-
-import { isEmpty } from 'lodash-es'
-// #ifdef H5
-import { isWxBrowser } from '@/sheep/helper/utils'
-// #endif
-import wechat from './provider/wechat/index.js'
-import apple from './provider/apple'
-import share from './share'
-import Pay from './pay'
-
-const device = uni.getSystemInfoSync()
-
-const os = device.platform
-
-let name = ''
-let provider = ''
-let platform = ''
-let isWechatInstalled = true
-
-// #ifdef H5
-if (isWxBrowser()) {
- name = 'WechatOfficialAccount'
- provider = 'wechat'
- platform = 'officialAccount'
-} else {
- name = 'H5'
- platform = 'h5'
-}
-// #endif
-
-// #ifdef APP-PLUS
-name = 'App'
-platform = 'openPlatform'
-// 检查微信客户端是否安装,否则AppleStore会因此拒绝上架
-if (os === 'ios') {
- isWechatInstalled = plus.ios.import('WXApi').isWXAppInstalled()
-}
-// #endif
-
-// #ifdef MP-WEIXIN
-name = 'WechatMiniProgram'
-platform = 'miniProgram'
-provider = 'wechat'
-// #endif
-
-if (isEmpty(name)) {
- uni.showToast({
- title: '暂不支持该平台',
- icon: 'none',
- })
-}
-
-// 加载当前平台前置行为
-const load = () => {
- if (provider === 'wechat') {
- wechat.load()
- }
-}
-
-// 使用厂商独占sdk name = 'wechat' | 'alipay' | 'apple'
-const useProvider = (_provider = '') => {
- if (_provider === '') _provider = provider
- if (_provider === 'wechat') return wechat
- if (_provider === 'apple') return apple
-}
-
-// 支付服务转发
-const pay = (payment, orderType, orderSN) => {
- return new Pay(payment, orderType, orderSN)
-}
-
-/**
- * 检查更新 (只检查小程序和App)
- * @param {Boolean} silence - 静默检查
- */
-const checkUpdate = (silence = false) => {
- let canUpdate
- // #ifdef MP-WEIXIN
- useProvider().checkUpdate(silence)
- // #endif
-
- // #ifdef APP-PLUS
- // TODO: 热更新
- // #endif
-}
-
-/**
- * 检查网络
- * @param {Boolean} silence - 静默检查
- */
-async function checkNetwork() {
- const networkStatus = await uni.getNetworkType()
- if (networkStatus.networkType == 'none') {
- return Promise.resolve(false)
- }
- return Promise.resolve(true)
-}
-
-// 获取小程序胶囊信息
-const getCapsule = () => {
- // #ifdef MP
- let capsule = uni.getMenuButtonBoundingClientRect()
- if (!capsule) {
- capsule = {
- bottom: 56,
- height: 32,
- left: 278,
- right: 365,
- top: 24,
- width: 87,
- }
- }
- return capsule
- // #endif
-
- // #ifndef MP
- return {
- bottom: 56,
- height: 32,
- left: 278,
- right: 365,
- top: 24,
- width: 87,
- }
- // #endif
-}
-
-const capsule = getCapsule()
-
-// 标题栏高度
-const getNavBar = () => {
- return device.statusBarHeight + 44
-}
-const navbar = getNavBar()
-
-function getLandingPage() {
- let page = ''
- // #ifdef H5
- page = location.href.split('?')[0]
- // #endif
- return page
-}
-
-// 设置ios+公众号网页落地页 解决微信sdk签名问题
-const landingPage = getLandingPage()
-
-const _platform = {
- name,
- device,
- os,
- provider,
- platform,
- useProvider,
- checkUpdate,
- checkNetwork,
- pay,
- share,
- load,
- capsule,
- navbar,
- landingPage,
- isWechatInstalled,
-}
-
-export default _platform
diff --git a/acdr-ui/src/sheep/platform/pay.js b/acdr-ui/src/sheep/platform/pay.js
deleted file mode 100644
index 7e3cb72e..00000000
--- a/acdr-ui/src/sheep/platform/pay.js
+++ /dev/null
@@ -1,360 +0,0 @@
-import sheep from '@/sheep'
-// #ifdef H5
-import $wxsdk from '@/sheep/libs/sdk-h5-weixin'
-// #endif
-import { getRootUrl } from '@/sheep/helper'
-import PayOrderApi from '@/sheep/api/pay/order'
-
-/**
- * 支付
- *
- * @param {String} payment = ['wechat','alipay','wallet','mock'] - 支付方式
- * @param {String} orderType = ['goods','recharge','groupon'] - 订单类型
- * @param {String} id - 订单号
- */
-
-export default class SheepPay {
- constructor(payment, orderType, id) {
- this.payment = payment
- this.id = id
- this.orderType = orderType
- this.payAction()
- }
-
- payAction() {
- const payAction = {
- WechatOfficialAccount: {
- wechat: () => {
- this.wechatOfficialAccountPay()
- },
- alipay: () => {
- this.redirectPay() // 现在公众号可以直接跳转支付宝页面
- },
- wallet: () => {
- this.walletPay()
- },
- mock: () => {
- this.mockPay()
- },
- },
- WechatMiniProgram: {
- wechat: () => {
- this.wechatMiniProgramPay()
- },
- alipay: () => {
- this.copyPayLink()
- },
- wallet: () => {
- this.walletPay()
- },
- mock: () => {
- this.mockPay()
- },
- },
- App: {
- wechat: () => {
- this.wechatAppPay()
- },
- alipay: () => {
- this.alipay()
- },
- wallet: () => {
- this.walletPay()
- },
- mock: () => {
- this.mockPay()
- },
- },
- H5: {
- wechat: () => {
- this.wechatWapPay()
- },
- alipay: () => {
- this.redirectPay()
- },
- wallet: () => {
- this.walletPay()
- },
- mock: () => {
- this.mockPay()
- },
- },
- }
- return payAction[sheep.$platform.name][this.payment]()
- }
-
- // 预支付
- prepay(channel) {
- return new Promise(async (resolve, reject) => {
- const data = {
- id: this.id,
- channelCode: channel,
- channelExtras: {},
- }
- // 特殊逻辑:微信公众号、小程序支付时,必须传入 openid
- if (['wx_pub', 'wx_lite'].includes(channel)) {
- const openid = await sheep.$platform.useProvider('wechat').getOpenid()
- // 如果获取不到 openid,微信无法发起支付,此时需要引导
- if (!openid) {
- this.bindWeixin()
- return
- }
- data.channelExtras.openid = openid
- }
- // 发起预支付 API 调用
- PayOrderApi.submitOrder(data).then((res) => {
- // 成功时
- res.code === 0 && resolve(res)
- // 失败时
- if (res.code !== 0 && res.msg.indexOf('无效的openid') >= 0) {
- // 特殊逻辑:微信公众号、小程序支付时,必须传入 openid 不正确的情况
- if (
- res.msg.indexOf('无效的openid') >= 0 || // 获取的 openid 不正确时,或者随便输入了个 openid
- res.msg.indexOf('下单账号与支付账号不一致') >= 0
- ) {
- // https://developers.weixin.qq.com/community/develop/doc/00008c53c347804beec82aed051c00
- this.bindWeixin()
- }
- }
- })
- })
- }
-
- // #ifdef H5
- // 微信公众号 JSSDK 支付
- async wechatOfficialAccountPay() {
- const { code, data } = await this.prepay('wx_pub')
- if (code !== 0) {
- return
- }
- const payConfig = JSON.parse(data.displayContent)
- $wxsdk.wxpay(payConfig, {
- success: () => {
- this.payResult('success')
- },
- cancel: () => {
- sheep.$helper.toast('支付已手动取消')
- },
- fail: (error) => {
- if (error.errMsg.indexOf('chooseWXPay:没有此SDK或暂不支持此SDK模拟') >= 0) {
- sheep.$helper.toast(
- '发起微信支付失败,原因:可能是微信开发者工具不支持,建议使用微信打开网页后支付',
- )
- return
- }
- this.payResult('fail')
- },
- })
- }
-
- // 浏览器微信 H5 支付 TODO 芋艿:待接入
- async wechatWapPay() {
- const { error, data } = await this.prepay()
- if (error === 0) {
- const redirect_url = `${getRootUrl()}pages/pay/result?id=${this.id}&payment=${this.payment}&orderType=${this.orderType}`
- location.href = `${data.pay_data.h5_url}&redirect_url=${encodeURIComponent(redirect_url)}`
- }
- }
-
- // 支付链接 TODO 芋艿:待接入
- async redirectPay() {
- const { error, data } = await this.prepay()
- if (error === 0) {
- const redirect_url = `${getRootUrl()}pages/pay/result?id=${this.id}&payment=${this.payment}&orderType=${this.orderType}`
- location.href = data.pay_data + encodeURIComponent(redirect_url)
- }
- }
-
- // #endif
-
- // 微信小程序支付
- async wechatMiniProgramPay() {
- // let that = this;
- const { code, data } = await this.prepay('wx_lite')
- if (code !== 0) {
- return
- }
- // 调用微信小程序支付
- const payConfig = JSON.parse(data.displayContent)
- uni.requestPayment({
- provider: 'wxpay',
- timeStamp: payConfig.timeStamp,
- nonceStr: payConfig.nonceStr,
- package: payConfig.packageValue,
- signType: payConfig.signType,
- paySign: payConfig.paySign,
- success: (res) => {
- this.payResult('success')
- },
- fail: (err) => {
- if (err.errMsg === 'requestPayment:fail cancel') {
- sheep.$helper.toast('支付已手动取消')
- } else {
- this.payResult('fail')
- }
- },
- })
- }
-
- // 余额支付
- async walletPay() {
- const { code } = await this.prepay('wallet')
- code === 0 && this.payResult('success')
- }
-
- // 模拟支付
- async mockPay() {
- const { code } = await this.prepay('mock')
- code === 0 && this.payResult('success')
- }
-
- // 支付宝复制链接支付 TODO 芋艿:待接入
- async copyPayLink() {
- const that = this
- const { error, data } = await this.prepay()
- if (error === 0) {
- // 引入showModal 点击确认 复制链接;
- uni.showModal({
- title: '支付宝支付',
- content: '复制链接到外部浏览器',
- confirmText: '复制链接',
- success: (res) => {
- if (res.confirm) {
- sheep.$helper.copyText(data.pay_data)
- }
- },
- })
- }
- }
-
- // 支付宝支付 TODO 芋艿:待接入
- async alipay() {
- const that = this
- const { error, data } = await this.prepay()
- if (error === 0) {
- uni.requestPayment({
- provider: 'alipay',
- orderInfo: data.pay_data, // 支付宝订单数据
- success: (res) => {
- that.payResult('success')
- },
- fail: (err) => {
- if (err.errMsg === 'requestPayment:fail [paymentAlipay:62001]user cancel') {
- sheep.$helper.toast('支付已手动取消')
- } else {
- that.payResult('fail')
- }
- },
- })
- }
- }
-
- // 微信支付 TODO 芋艿:待接入
- async wechatAppPay() {
- const that = this
- const { error, data } = await this.prepay()
- if (error === 0) {
- uni.requestPayment({
- provider: 'wxpay',
- orderInfo: data.pay_data, // 微信订单数据(官方说是string。实测为object)
- success: (res) => {
- that.payResult('success')
- },
- fail: (err) => {
- err.errMsg !== 'requestPayment:fail cancel' && that.payResult('fail')
- },
- })
- }
- }
-
- // 支付结果跳转,success:成功,fail:失败
- payResult(resultType) {
- sheep.$router.redirect('/modules/mall/pay/result', {
- id: this.id,
- orderType: this.orderType,
- payState: resultType,
- })
- }
-
- // 引导绑定微信
- bindWeixin() {
- uni.showModal({
- title: '微信支付',
- content: '请先绑定微信再使用微信支付',
- success: function (res) {
- if (res.confirm) {
- sheep.$platform.useProvider('wechat').bind()
- }
- },
- })
- }
-}
-
-export function getPayMethods(channels) {
- const payMethods = [
- {
- icon: '/static/img/shop/pay/wechat.png',
- title: '微信支付',
- value: 'wechat',
- disabled: true,
- },
- {
- icon: '/static/img/shop/pay/alipay.png',
- title: '支付宝支付',
- value: 'alipay',
- disabled: true,
- },
- {
- icon: '/static/img/shop/pay/wallet.png',
- title: '余额支付',
- value: 'wallet',
- disabled: true,
- },
- {
- icon: '/static/img/shop/pay/apple.png',
- title: 'Apple Pay',
- value: 'apple',
- disabled: true,
- },
- {
- icon: '/static/img/shop/pay/wallet.png',
- title: '模拟支付',
- value: 'mock',
- disabled: true,
- },
- ]
- const platform = sheep.$platform.name
-
- // 1. 处理【微信支付】
- const wechatMethod = payMethods[0]
- if (
- (platform === 'WechatOfficialAccount' && channels.includes('wx_pub')) ||
- (platform === 'WechatMiniProgram' && channels.includes('wx_lite')) ||
- (platform === 'App' && channels.includes('wx_app'))
- ) {
- wechatMethod.disabled = false
- }
- wechatMethod.disabled = false // TODO 芋艿:临时测试
-
- // 2. 处理【支付宝支付】
- const alipayMethod = payMethods[1]
- if (
- (platform === 'WechatOfficialAccount' && channels.includes('alipay_wap')) ||
- (platform === 'WechatMiniProgram' && channels.includes('alipay_wap')) ||
- (platform === 'App' && channels.includes('alipay_app'))
- ) {
- alipayMethod.disabled = false
- }
- // 3. 处理【余额支付】
- const walletMethod = payMethods[2]
- if (channels.includes('wallet')) {
- walletMethod.disabled = false
- }
- // 4. 处理【苹果支付】TODO 芋艿:未来接入
- // 5. 处理【模拟支付】
- const mockMethod = payMethods[4]
- if (channels.includes('mock')) {
- mockMethod.disabled = false
- }
- return payMethods
-}
diff --git a/acdr-ui/src/sheep/platform/provider/apple/app.js b/acdr-ui/src/sheep/platform/provider/apple/app.js
deleted file mode 100644
index de3254c1..00000000
--- a/acdr-ui/src/sheep/platform/provider/apple/app.js
+++ /dev/null
@@ -1,36 +0,0 @@
-// import third from '@/sheep/api/third';
-// TODO 芋艿:等后面搞 App 再弄
-
-const login = () => {
- return new Promise(async (resolve, reject) => {
- const loginRes = await uni.login({
- provider: 'apple',
- success: () => {
- uni.getUserInfo({
- provider: 'apple',
- success: async (res) => {
- if (res.errMsg === 'getUserInfo:ok') {
- const payload = res.userInfo
- const { error } = await third.apple.login({
- payload,
- shareInfo: uni.getStorageSync('shareLog') || {},
- })
- if (error === 0) {
- resolve(true)
- } else {
- resolve(false)
- }
- }
- },
- })
- },
- fail: (err) => {
- resolve(false)
- },
- })
- })
-}
-
-export default {
- login,
-}
diff --git a/acdr-ui/src/sheep/platform/provider/apple/index.js b/acdr-ui/src/sheep/platform/provider/apple/index.js
deleted file mode 100644
index 805edde6..00000000
--- a/acdr-ui/src/sheep/platform/provider/apple/index.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// #ifdef APP-PLUS
-import service from './app'
-// #endif
-
-let apple = {}
-if (typeof service !== 'undefined') {
- apple = service
-}
-export default apple
diff --git a/acdr-ui/src/sheep/platform/provider/wechat/index.js b/acdr-ui/src/sheep/platform/provider/wechat/index.js
deleted file mode 100644
index f34405b5..00000000
--- a/acdr-ui/src/sheep/platform/provider/wechat/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// #ifdef H5
-import service from './officialAccount'
-// #endif
-
-// #ifdef MP-WEIXIN
-import service from './miniProgram'
-// #endif
-
-// #ifdef APP-PLUS
-import service from './openPlatform'
-// #endif
-
-const wechat = service
-
-export default wechat
diff --git a/acdr-ui/src/sheep/platform/provider/wechat/miniProgram.js b/acdr-ui/src/sheep/platform/provider/wechat/miniProgram.js
deleted file mode 100644
index 397f72f0..00000000
--- a/acdr-ui/src/sheep/platform/provider/wechat/miniProgram.js
+++ /dev/null
@@ -1,213 +0,0 @@
-import AuthUtil from '@/sheep/api/member/auth'
-import SocialApi from '@/sheep/api/member/social'
-import UserApi from '@/sheep/api/member/user'
-
-const socialType = 34 // 社交类型 - 微信小程序
-
-let subscribeEventList = []
-
-// 加载微信小程序
-function load() {
- checkUpdate()
- getSubscribeTemplate()
-}
-
-// 微信小程序静默授权登陆
-const login = async () => {
- return new Promise(async (resolve, reject) => {
- // 1. 获得微信 code
- const codeResult = await uni.login()
- if (codeResult.errMsg !== 'login:ok') {
- return resolve(false)
- }
-
- // 2. 社交登录
- const loginResult = await AuthUtil.socialLogin(socialType, codeResult.code, 'default')
- if (loginResult.code === 0) {
- setOpenid(loginResult.data.openid)
- return resolve(true)
- } else {
- return resolve(false)
- }
- })
-}
-
-// 微信小程序手机号授权登陆
-const mobileLogin = async (e) => {
- return new Promise(async (resolve, reject) => {
- if (e.errMsg !== 'getPhoneNumber:ok') {
- return resolve(false)
- }
-
- // 1. 获得微信 code
- const codeResult = await uni.login()
- if (codeResult.errMsg !== 'login:ok') {
- return resolve(false)
- }
-
- // 2. 一键登录
- const loginResult = await AuthUtil.weixinMiniAppLogin(e.code, codeResult.code, 'default')
- if (loginResult.code === 0) {
- setOpenid(loginResult.data.openid)
- return resolve(true)
- } else {
- return resolve(false)
- }
- })
-}
-
-// 微信小程序绑定
-const bind = () => {
- return new Promise(async (resolve, reject) => {
- // 1. 获得微信 code
- const codeResult = await uni.login()
- if (codeResult.errMsg !== 'login:ok') {
- return resolve(false)
- }
-
- // 2. 绑定账号
- const bindResult = await SocialApi.socialBind(socialType, codeResult.code, 'default')
- if (bindResult.code === 0) {
- setOpenid(bindResult.data)
- return resolve(true)
- } else {
- return resolve(false)
- }
- })
-}
-
-// 微信小程序解除绑定
-const unbind = async (openid) => {
- const { code } = await SocialApi.socialUnbind(socialType, openid)
- return code === 0
-}
-
-// 绑定用户手机号
-const bindUserPhoneNumber = (e) => {
- return new Promise(async (resolve, reject) => {
- const { code } = await UserApi.updateUserMobileByWeixin(e.code)
- if (code === 0) {
- resolve(true)
- }
- resolve(false)
- })
-}
-
-// 设置 openid 到本地存储,目前只有 pay 支付时会使用
-function setOpenid(openid) {
- uni.setStorageSync('openid', openid)
-}
-
-// 获得 openid
-async function getOpenid(force = false) {
- let openid = uni.getStorageSync('openid')
- if (!openid && force) {
- const info = await getInfo()
- if (info && info.openid) {
- openid = info.openid
- setOpenid(openid)
- }
- }
- return openid
-}
-
-// 获得社交信息
-async function getInfo() {
- const { code, data } = await SocialApi.getSocialUser(socialType)
- if (code !== 0) {
- return undefined
- }
- return data
-}
-
-// ========== 非登录相关的逻辑 ==========
-
-// 小程序更新
-const checkUpdate = async (silence = true) => {
- if (uni.canIUse('getUpdateManager')) {
- const updateManager = uni.getUpdateManager()
- updateManager.onCheckForUpdate(function (res) {
- // 请求完新版本信息的回调
- if (res.hasUpdate) {
- updateManager.onUpdateReady(function () {
- uni.showModal({
- title: '更新提示',
- content: '新版本已经准备好,是否重启应用?',
- success: function (res) {
- if (res.confirm) {
- // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
- updateManager.applyUpdate()
- }
- },
- })
- })
- updateManager.onUpdateFailed(function () {
- // 新的版本下载失败
- // uni.showModal({
- // title: '已经有新版本了哟~',
- // content: '新版本已经上线啦,请您删除当前小程序,重新搜索打开~',
- // });
- })
- } else {
- if (!silence) {
- uni.showModal({
- title: '当前为最新版本',
- showCancel: false,
- })
- }
- }
- })
- }
-}
-
-// 获取订阅消息模板
-async function getSubscribeTemplate() {
- const { code, data } = await SocialApi.getSubscribeTemplateList()
- if (code === 0) {
- subscribeEventList = data
- }
-}
-
-// 订阅消息
-function subscribeMessage(event, callback = undefined) {
- const tmplIds = []
- if (typeof event === 'string') {
- const temp = subscribeEventList.find((item) => item.title.includes(event))
- if (temp) {
- tmplIds.push(temp.id)
- }
- }
- if (typeof event === 'object') {
- event.forEach((e) => {
- const temp = subscribeEventList.find((item) => item.title.includes(e))
- if (temp) {
- tmplIds.push(temp.id)
- }
- })
- }
- if (tmplIds.length === 0) return
-
- uni.requestSubscribeMessage({
- tmplIds,
- success: () => {
- // 不管是拒绝还是同意都触发
- callback && callback()
- },
- fail: (err) => {
- console.log(err)
- },
- })
-}
-
-export default {
- load,
- login,
- bind,
- unbind,
- bindUserPhoneNumber,
- mobileLogin,
- getInfo,
- getOpenid,
- subscribeMessage,
- checkUpdate,
-}
diff --git a/acdr-ui/src/sheep/platform/provider/wechat/officialAccount.js b/acdr-ui/src/sheep/platform/provider/wechat/officialAccount.js
deleted file mode 100644
index 10a03c67..00000000
--- a/acdr-ui/src/sheep/platform/provider/wechat/officialAccount.js
+++ /dev/null
@@ -1,105 +0,0 @@
-import $wxsdk from '@/sheep/libs/sdk-h5-weixin'
-import { getRootUrl } from '@/sheep/helper'
-import AuthUtil from '@/sheep/api/member/auth'
-import SocialApi from '@/sheep/api/member/social'
-
-const socialType = 31 // 社交类型 - 微信公众号
-
-// 加载微信公众号JSSDK
-async function load() {
- $wxsdk.init()
-}
-
-// 微信公众号登陆
-async function login(code = '', state = '') {
- // 情况一:没有 code 时,去获取 code
- if (!code) {
- const loginUrl = await getLoginUrl()
- if (loginUrl) {
- uni.setStorageSync('returnUrl', location.href)
- window.location = loginUrl
- }
- // 情况二:有 code 时,使用 code 去自动登录
- } else {
- // 解密 code 发起登陆
- const loginResult = await AuthUtil.socialLogin(socialType, code, state)
- if (loginResult.code === 0) {
- setOpenid(loginResult.data.openid)
- return loginResult
- }
- }
- return false
-}
-
-// 微信公众号绑定
-async function bind(code = '', state = '') {
- // 情况一:没有 code 时,去获取 code
- if (code === '') {
- const loginUrl = await getLoginUrl('bind')
- if (loginUrl) {
- uni.setStorageSync('returnUrl', location.href)
- window.location = loginUrl
- }
- } else {
- // 情况二:有 code 时,使用 code 去自动绑定
- const loginResult = await SocialApi.socialBind(socialType, code, state)
- if (loginResult.code === 0) {
- setOpenid(loginResult.data)
- return loginResult
- }
- }
- return false
-}
-
-// 微信公众号解除绑定
-const unbind = async (openid) => {
- const { code } = await SocialApi.socialUnbind(socialType, openid)
- return code === 0
-}
-
-// 获取公众号登陆地址
-async function getLoginUrl(event = 'login') {
- const page = getRootUrl() + 'pages/index/login' + '?event=' + event // event 目的,区分是 login 还是 bind
- const { code, data } = await AuthUtil.socialAuthRedirect(socialType, page)
- if (code !== 0) {
- return undefined
- }
- return data
-}
-
-// 设置 openid 到本地存储,目前只有 pay 支付时会使用
-function setOpenid(openid) {
- uni.setStorageSync('openid', openid)
-}
-
-// 获得 openid
-async function getOpenid(force = false) {
- let openid = uni.getStorageSync('openid')
- if (!openid && force) {
- const info = await getInfo()
- if (info && info.openid) {
- openid = info.openid
- setOpenid(openid)
- }
- }
- return openid
-}
-
-// 获得社交信息
-async function getInfo() {
- const { code, data } = await SocialApi.getSocialUser(socialType)
- if (code !== 0) {
- return undefined
- }
- return data
-}
-
-export default {
- load,
- login,
- bind,
- unbind,
- getInfo,
- getOpenid,
- jsWxSdk: $wxsdk,
-}
diff --git a/acdr-ui/src/sheep/platform/provider/wechat/openPlatform.js b/acdr-ui/src/sheep/platform/provider/wechat/openPlatform.js
deleted file mode 100644
index 65da6214..00000000
--- a/acdr-ui/src/sheep/platform/provider/wechat/openPlatform.js
+++ /dev/null
@@ -1,64 +0,0 @@
-// 登录
-import third from '@/sheep/api/migration/third'
-import SocialApi from '@/sheep/api/member/social'
-import $share from '@/sheep/platform/share'
-
-// TODO 芋艿:等后面搞 App 再弄
-const socialType = 32 // 社交类型 - 微信开放平台
-
-const load = async () => {}
-
-// 微信开放平台移动应用授权登陆
-const login = () => {
- return new Promise(async (resolve, reject) => {
- const loginRes = await uni.login({
- provider: 'weixin',
- onlyAuthorize: true,
- })
- debugger
- if (loginRes.errMsg == 'login:ok') {
- // TODO third.wechat.login 函数未实现
- const res = await third.wechat.login({
- platform: 'openPlatform',
- shareInfo: uni.getStorageSync('shareLog') || {},
- payload: encodeURIComponent(
- JSON.stringify({
- code: loginRes.code,
- }),
- ),
- })
-
- if (res.error === 0) {
- $share.bindBrokerageUser()
- resolve(true)
- }
- } else {
- uni.showToast({
- icon: 'none',
- title: loginRes.errMsg,
- })
- }
- resolve(false)
- })
-}
-
-// 微信 App 解除绑定
-const unbind = async (openid) => {
- const { code } = await SocialApi.socialUnbind(socialType, openid)
- return code === 0
-}
-
-// 获得社交信息
-async function getInfo() {
- const { code, data } = await SocialApi.getSocialUser(socialType)
- if (code !== 0) {
- return undefined
- }
- return data
-}
-
-export default {
- load,
- login,
- getInfo,
-}
diff --git a/acdr-ui/src/sheep/platform/share.js b/acdr-ui/src/sheep/platform/share.js
deleted file mode 100644
index 612e033d..00000000
--- a/acdr-ui/src/sheep/platform/share.js
+++ /dev/null
@@ -1,206 +0,0 @@
-import $store from '@/sheep/store'
-import $platform from '@/sheep/platform'
-import $router from '@/sheep/router'
-import $url from '@/sheep/url'
-import BrokerageApi from '@/sheep/api/trade/brokerage'
-// #ifdef H5
-import $wxsdk from '@/sheep/libs/sdk-h5-weixin'
-// #endif
-
-// 设置分享的平台渠道: 1=H5,2=微信公众号网页,3=微信小程序,4=App,...按需扩展
-const platformMap = ['H5', 'WechatOfficialAccount', 'WechatMiniProgram', 'App']
-
-// 设置分享方式: 1=直接转发,2=海报,3=复制链接,...按需扩展
-const fromMap = ['forward', 'poster', 'link']
-
-// TODO 芋艿:分享的接入
-// 设置分享信息参数
-const getShareInfo = (
- scene = {
- title: '', // 自定义分享标题
- desc: '', // 自定义描述
- image: '', // 自定义分享图片
- params: {}, // 自定义分享参数
- },
- poster = {
- // 自定义海报数据
- type: 'user',
- },
-) => {
- const shareInfo = {
- title: '', // 分享标题
- desc: '', // 描述
- image: '', // 分享图片
- path: '', // 分享页面+参数
- link: '', // 分享Url+参数
- query: '', // 分享参数
- poster, // 海报所需数据
- }
-
- const app = $store('app')
- const shareConfig = app.platform.share
-
- // 自动拼接分享用户参数
- const query = buildSpmQuery(scene.params)
- shareInfo.query = query
-
- // 配置分享链接地址
- shareInfo.link = buildSpmLink(query, shareConfig.linkAddress)
- // 配置页面地址带参数
- shareInfo.path = buildSpmPath(query)
-
- // 配置转发参数
- if (shareConfig.methods.includes('forward')) {
- // TODO puhui999: forward 这块有点问题
- if (shareConfig.forwardInfo.title === '' || shareConfig.forwardInfo.image === '') {
- console.log('请在平台设置中配置转发信息')
- }
- // 设置自定义分享信息
- shareInfo.title = scene.title || shareConfig.forwardInfo.title
- shareInfo.image = $url.cdn(scene.image || shareConfig.forwardInfo.image)
- shareInfo.desc = scene.desc || shareConfig.forwardInfo.subtitle
- shareInfo.path = buildSpmPath(scene.path, query)
- }
-
- return shareInfo
-}
-
-/**
- * 构造 spm 分享参数
- *
- * @param params json 格式,其中包含:1)shareId 分享用户的编号;2)page 页面类型;3)query 页面 ID(参数);4)platform 平台类型;5)from 分享来源类型。
- * @return 分享串 `spm=${shareId}.${page}.${query}.${platform}.${from}`
- */
-const buildSpmQuery = (params) => {
- const user = $store('user')
- let shareId = '0' // 设置分享者用户ID
- if (typeof params.shareId === 'undefined') {
- if (user.isLogin) {
- shareId = user.userInfo.id
- }
- }
- let page = '1' // 页面类型: 1=首页(默认),2=商品,3=拼团商品,4=秒杀商品,5=邀请参团,6=分销邀请...按需扩展
- if (typeof params.page !== 'undefined') {
- page = params.page
- }
- let query = '0' // 设置页面ID: 如商品ID、拼团ID等
- if (typeof params.query !== 'undefined') {
- query = params.query
- }
- const platform = platformMap.indexOf($platform.name) + 1
- let from = '1'
- if (typeof params.from !== 'undefined') {
- from = platformMap.indexOf(params.from) + 1
- }
- // spmParams = ... 可按需扩展
- return `spm=${shareId}.${page}.${query}.${platform}.${from}`
-}
-
-// 构造页面分享参数: 所有的分享都先到首页进行 spm 参数解析
-const buildSpmPath = (query) => {
- // 默认是主页,页面 page,例如 pages/index/index,根路径前不要填加 /,
- // 不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面。scancode_time为系统保留参数,不允许配置
- return `pages/index/index`
-}
-
-// 构造分享链接
-const buildSpmLink = (query, linkAddress = '') => {
- return `${linkAddress}?${query}`
-}
-
-// 解析Spm
-const decryptSpm = (spm) => {
- const user = $store('user')
- const shareParamsArray = spm.split('.')
- const shareParams = {
- spm,
- shareId: 0,
- page: '',
- query: {},
- platform: '',
- from: '',
- }
- let query
- shareParams.shareId = shareParamsArray[0]
- switch (shareParamsArray[1]) {
- case '1':
- // 默认首页不跳转
- shareParams.page = '/modules/mall/index/index'
- break
- case '2':
- // 普通商品
- shareParams.page = '/modules/mall/goods/index'
- shareParams.query = {
- id: shareParamsArray[2],
- }
- break
- case '3':
- // 拼团商品
- shareParams.page = '/modules/mall/goods/groupon'
- query = shareParamsArray[2].split(',')
- shareParams.query = {
- id: query[0],
- activity_id: query[1], // TODO 芋艿:接入分享后,应该统一成 id 参数
- }
- break
- case '4':
- // 秒杀商品
- shareParams.page = '/modules/mall/goods/seckill'
- query = shareParamsArray[2].split(',')
- shareParams.query = {
- id: query[1],
- }
- break
- case '5':
- // 参与拼团
- shareParams.page = '/modules/mall/activity/groupon/detail'
- shareParams.query = {
- id: shareParamsArray[2],
- }
- break
- }
- shareParams.platform = platformMap[shareParamsArray[3] - 1]
- shareParams.from = fromMap[shareParamsArray[4] - 1]
- if (shareParams.shareId !== 0) {
- // 已登录 绑定推广员
- if (user.isLogin) {
- bindBrokerageUser(shareParams.shareId)
- } else {
- // 记录分享者编号
- uni.setStorageSync('shareId', shareParams.shareId)
- }
- }
-
- if (shareParams.page !== '/modules/mall/index/index') {
- $router.go(shareParams.page, shareParams.query)
- }
- return shareParams
-}
-
-// 绑定推广员
-const bindBrokerageUser = async (val = undefined) => {
- try {
- const shareId = val || uni.getStorageSync('shareId')
- if (!shareId) {
- return
- }
- await BrokerageApi.bindBrokerageUser({ bindUserId: shareId })
- uni.removeStorageSync('shareId')
- } catch {}
-}
-
-// 更新公众号分享sdk
-const updateShareInfo = (shareInfo) => {
- // #ifdef H5
- if ($platform.name === 'WechatOfficialAccount') {
- $wxsdk.updateShareInfo(shareInfo)
- }
- // #endif
-}
-
-export default {
- getShareInfo,
- updateShareInfo,
- decryptSpm,
- bindBrokerageUser,
-}
diff --git a/acdr-ui/src/sheep/request/index.js b/acdr-ui/src/sheep/request/index.js
deleted file mode 100644
index 75e56d75..00000000
--- a/acdr-ui/src/sheep/request/index.js
+++ /dev/null
@@ -1,302 +0,0 @@
-/**
- * Shopro-request
- * @description api模块管理,loading配置,请求拦截,错误处理
- */
-
-import Request from 'luch-request'
-import { apiPath, baseUrl, tenantId } from '@/sheep/config'
-import $store from '@/sheep/store'
-import $platform from '@/sheep/platform'
-import { showAuthModal } from '@/sheep/hooks/useModal'
-import AuthUtil from '@/sheep/api/member/auth'
-import { getTerminal } from '@/sheep/util/const'
-
-const options = {
- // 显示操作成功消息 默认不显示
- showSuccess: false,
- // 成功提醒 默认使用后端返回值
- successMsg: '',
- // 显示失败消息 默认显示
- showError: true,
- // 失败提醒 默认使用后端返回信息
- errorMsg: '',
- // 显示请求时loading模态框 默认显示
- showLoading: true,
- // loading提醒文字
- loadingMsg: '加载中',
- // 需要授权才能请求 默认放开
- auth: false,
- // ...
-}
-
-// Loading全局实例
-const LoadingInstance = {
- target: null,
- count: 0,
-}
-
-/**
- * 关闭loading
- */
-function closeLoading() {
- if (LoadingInstance.count > 0) LoadingInstance.count--
- if (LoadingInstance.count === 0) uni.hideLoading()
-}
-
-/**
- * @description 请求基础配置 可直接使用访问自定义请求
- */
-const http = new Request({
- baseURL: baseUrl + apiPath,
- timeout: 8000,
- method: 'GET',
- header: {
- Accept: 'text/json',
- 'Content-Type': 'application/json;charset=UTF-8',
- platform: $platform.name,
- },
- // #ifdef APP-PLUS
- sslVerify: false,
- // #endif
- // #ifdef H5
- // 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+)
- withCredentials: false,
- // #endif
- custom: options,
-})
-
-/**
- * @description 请求拦截器
- */
-http.interceptors.request.use(
- (config) => {
- // 自定义处理【auth 授权】:必须登录的接口,则跳出 AuthModal 登录弹窗
- if (config.custom.auth && !$store('user').isLogin) {
- showAuthModal()
- return Promise.reject()
- }
-
- // 自定义处理【loading 加载中】:如果需要显示 loading,则显示 loading
- if (config.custom.showLoading) {
- LoadingInstance.count++
- LoadingInstance.count === 1 &&
- uni.showLoading({
- title: config.custom.loadingMsg,
- mask: true,
- fail: () => {
- uni.hideLoading()
- },
- })
- }
-
- // 增加 token 令牌、terminal 终端、tenant 租户的请求头
- const token = getAccessToken()
- if (token) {
- config.header.Authorization = token
- }
- config.header.terminal = getTerminal()
-
- config.header.Accept = '*/*'
- config.header['tenant-id'] = tenantId
- return config
- },
- (error) => {
- return Promise.reject(error)
- },
-)
-
-/**
- * @description 响应拦截器
- */
-http.interceptors.response.use(
- (response) => {
- // 约定:如果是 /auth/ 下的 URL 地址,并且返回了 accessToken 说明是登录相关的接口,则自动设置登陆令牌
- if (response.config.url.indexOf('/member/auth/') >= 0 && response.data?.data?.accessToken) {
- $store('user').setToken(response.data.data.accessToken, response.data.data.refreshToken)
- }
-
- // 自定处理【loading 加载中】:如果需要显示 loading,则关闭 loading
- response.config.custom.showLoading && closeLoading()
-
- // 自定义处理【error 错误提示】:如果需要显示错误提示,则显示错误提示
- if (response.data.code !== 0) {
- // 特殊:如果 401 错误码,则跳转到登录页 or 刷新令牌
- if (response.data.code === 401) {
- return refreshToken(response.config)
- }
-
- // 错误提示
- if (response.config.custom.showError) {
- uni.showToast({
- title: response.data.msg || '服务器开小差啦,请稍后再试~',
- icon: 'none',
- mask: true,
- })
- }
- }
-
- // 自定义处理【showSuccess 成功提示】:如果需要显示成功提示,则显示成功提示
- if (
- response.config.custom.showSuccess &&
- response.config.custom.successMsg !== '' &&
- response.data.code === 0
- ) {
- uni.showToast({
- title: response.config.custom.successMsg,
- icon: 'none',
- })
- }
-
- // 返回结果:包括 code + data + msg
- return Promise.resolve(response.data)
- },
- (error) => {
- const userStore = $store('user')
- const isLogin = userStore.isLogin
- let errorMessage = '网络请求出错'
- if (error !== undefined) {
- switch (error.statusCode) {
- case 400:
- errorMessage = '请求错误'
- break
- case 401:
- errorMessage = isLogin ? '您的登陆已过期' : '请先登录'
- // 正常情况下,后端不会返回 401 错误,所以这里不处理 handleAuthorized
- break
- case 403:
- errorMessage = '拒绝访问'
- break
- case 404:
- errorMessage = '请求出错'
- break
- case 408:
- errorMessage = '请求超时'
- break
- case 429:
- errorMessage = '请求频繁, 请稍后再访问'
- break
- case 500:
- errorMessage = '服务器开小差啦,请稍后再试~'
- break
- case 501:
- errorMessage = '服务未实现'
- break
- case 502:
- errorMessage = '网络错误'
- break
- case 503:
- errorMessage = '服务不可用'
- break
- case 504:
- errorMessage = '网络超时'
- break
- case 505:
- errorMessage = 'HTTP 版本不受支持'
- break
- }
- if (error.errMsg.includes('timeout')) errorMessage = '请求超时'
- // #ifdef H5
- if (error.errMsg.includes('Network'))
- errorMessage = window.navigator.onLine ? '服务器异常' : '请检查您的网络连接'
- // #endif
- }
-
- if (error && error.config) {
- if (error.config.custom.showError === false) {
- uni.showToast({
- title: error.data?.msg || errorMessage,
- icon: 'none',
- mask: true,
- })
- }
- error.config.custom.showLoading && closeLoading()
- }
-
- return false
- },
-)
-
-// Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现
-let requestList = [] // 请求队列
-let isRefreshToken = false // 是否正在刷新中
-const refreshToken = async (config) => {
- // 如果当前已经是 refresh-token 的 URL 地址,并且还是 401 错误,说明是刷新令牌失败了,直接返回 Promise.reject(error)
- if (config.url.indexOf('/member/auth/refresh-token') >= 0) {
- return Promise.reject('error')
- }
-
- // 如果未认证,并且未进行刷新令牌,说明可能是访问令牌过期了
- if (!isRefreshToken) {
- isRefreshToken = true
- // 1. 如果获取不到刷新令牌,则只能执行登出操作
- const refreshToken = getRefreshToken()
- if (!refreshToken) {
- return handleAuthorized()
- }
- // 2. 进行刷新访问令牌
- try {
- const refreshTokenResult = await AuthUtil.refreshToken(refreshToken)
- if (refreshTokenResult.code !== 0) {
- // 如果刷新不成功,直接抛出 e 触发 2.2 的逻辑
- // noinspection ExceptionCaughtLocallyJS
- throw new Error('刷新令牌失败')
- }
- // 2.1 刷新成功,则回放队列的请求 + 当前请求
- config.header.Authorization = 'Bearer ' + getAccessToken()
- requestList.forEach((cb) => {
- cb()
- })
- requestList = []
- return request(config)
- } catch (e) {
- // 为什么需要 catch 异常呢?刷新失败时,请求因为 Promise.reject 触发异常。
- // 2.2 刷新失败,只回放队列的请求
- requestList.forEach((cb) => {
- cb()
- })
- // 提示是否要登出。即不回放当前请求!不然会形成递归
- return handleAuthorized()
- } finally {
- requestList = []
- isRefreshToken = false
- }
- } else {
- // 添加到队列,等待刷新获取到新的令牌
- return new Promise((resolve) => {
- requestList.push(() => {
- config.header.Authorization = 'Bearer ' + getAccessToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- resolve(request(config))
- })
- })
- }
-}
-
-/**
- * 处理 401 未登录的错误
- */
-const handleAuthorized = () => {
- const userStore = $store('user')
- userStore.logout(true)
- showAuthModal()
- // 登录超时
- return Promise.reject({
- code: 401,
- msg: userStore.isLogin ? '您的登陆已过期' : '请先登录',
- })
-}
-
-/** 获得访问令牌 */
-const getAccessToken = () => {
- return uni.getStorageSync('token')
-}
-
-/** 获得刷新令牌 */
-const getRefreshToken = () => {
- return uni.getStorageSync('refresh-token')
-}
-
-const request = (config) => {
- return http.middleware(config)
-}
-
-export default request
diff --git a/acdr-ui/src/sheep/router/index.js b/acdr-ui/src/sheep/router/index.js
deleted file mode 100644
index 19589c76..00000000
--- a/acdr-ui/src/sheep/router/index.js
+++ /dev/null
@@ -1,185 +0,0 @@
-import $store from '@/sheep/store'
-import { showAuthModal, showShareModal } from '@/sheep/hooks/useModal'
-import { isNumber, isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash-es'
-import throttle from '@/sheep/helper/throttle'
-
-const _go = (
- path,
- params = {},
- options = {
- redirect: false,
- },
-) => {
- let page = '' // 跳转页面
- let query = '' // 页面参数
- let url = '' // 跳转页面完整路径
-
- if (isString(path)) {
- // 判断跳转类型是 path | 还是http
- if (startsWith(path, 'http')) {
- // #ifdef H5
- window.location = path
- return
- // #endif
- // #ifndef H5
- page = `/modules/mall/public/webview`
- query = `url=${encodeURIComponent(path)}`
- // #endif
- } else if (startsWith(path, 'action:')) {
- handleAction(path)
- return
- } else {
- ;[page, query] = path.split('?')
- }
- if (!isEmpty(params)) {
- const query2 = paramsToQuery(params)
- if (isEmpty(query)) {
- query = query2
- } else {
- query += '&' + query2
- }
- }
- }
-
- if (isObject(path)) {
- page = path.url
- if (!isNil(path.params)) {
- query = paramsToQuery(path.params)
- }
- }
-
- const nextRoute = ROUTES_MAP[page]
-
- // 未找到指定跳转页面
- // mark: 跳转404页
- if (!nextRoute) {
- console.log(`%c跳转路径参数错误<${page || 'EMPTY'}>`, 'color:red;background:yellow')
- return
- }
-
- // 页面登录拦截
- if (nextRoute.meta?.auth && !$store('user').isLogin) {
- showAuthModal()
- return
- }
-
- url = page
- if (!isEmpty(query)) {
- url += `?${query}`
- }
-
- // 跳转底部导航
- if (TABBAR.includes(page)) {
- uni.switchTab({
- url,
- })
- return
- }
-
- // 使用redirect跳转
- if (options.redirect) {
- uni.redirectTo({
- url,
- })
- return
- }
-
- uni.navigateTo({
- url,
- })
-}
-
-// 限流 防止重复点击跳转
-function go(...args) {
- throttle(() => {
- _go(...args)
- })
-}
-
-function paramsToQuery(params) {
- if (isEmpty(params)) {
- return ''
- }
- // return new URLSearchParams(Object.entries(params)).toString();
- const query = []
- for (const key in params) {
- query.push(key + '=' + params[key])
- }
-
- return query.join('&')
-}
-
-function back() {
- // #ifdef H5
- history.back()
- // #endif
-
- // #ifndef H5
- uni.navigateBack()
- // #endif
-}
-
-function redirect(path, params = {}) {
- go(path, params, {
- redirect: true,
- })
-}
-
-// 检测是否有浏览器历史
-function hasHistory() {
- // #ifndef H5
- const pages = getCurrentPages()
- if (pages.length > 1) {
- return true
- }
- return false
- // #endif
-
- // #ifdef H5
- return !!history.state.back
- // #endif
-}
-
-function getCurrentRoute(field = '') {
- const currentPage = getCurrentPage()
- // #ifdef MP
- currentPage.$page.route = currentPage.route
- currentPage.$page.options = currentPage.options
- // #endif
- if (field !== '') {
- return currentPage.$page[field]
- } else {
- return currentPage.$page
- }
-}
-
-function getCurrentPage() {
- const pages = getCurrentPages()
- return pages[pages.length - 1]
-}
-
-function handleAction(path) {
- const action = path.split(':')
- switch (action[1]) {
- case 'showShareModal':
- showShareModal()
- break
- }
-}
-
-function error(errCode, errMsg = '') {
- redirect('/modules/mall/public/error', {
- errCode,
- errMsg,
- })
-}
-
-export default {
- go,
- back,
- hasHistory,
- redirect,
- getCurrentPage,
- getCurrentRoute,
- error,
-}
diff --git a/acdr-ui/src/sheep/router/utils/strip-json-comments.js b/acdr-ui/src/sheep/router/utils/strip-json-comments.js
deleted file mode 100644
index ba55b2b5..00000000
--- a/acdr-ui/src/sheep/router/utils/strip-json-comments.js
+++ /dev/null
@@ -1,79 +0,0 @@
-const singleComment = Symbol('singleComment')
-const multiComment = Symbol('multiComment')
-
-const stripWithoutWhitespace = () => ''
-const stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/\S/g, ' ')
-
-const isEscaped = (jsonString, quotePosition) => {
- let index = quotePosition - 1
- let backslashCount = 0
-
- while (jsonString[index] === '\\') {
- index -= 1
- backslashCount += 1
- }
-
- return Boolean(backslashCount % 2)
-}
-
-export default function stripJsonComments(jsonString, { whitespace = true } = {}) {
- if (typeof jsonString !== 'string') {
- throw new TypeError(
- `Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``,
- )
- }
-
- const strip = whitespace ? stripWithWhitespace : stripWithoutWhitespace
-
- let isInsideString = false
- let isInsideComment = false
- let offset = 0
- let result = ''
-
- for (let index = 0; index < jsonString.length; index++) {
- const currentCharacter = jsonString[index]
- const nextCharacter = jsonString[index + 1]
-
- if (!isInsideComment && currentCharacter === '"') {
- const escaped = isEscaped(jsonString, index)
- if (!escaped) {
- isInsideString = !isInsideString
- }
- }
-
- if (isInsideString) {
- continue
- }
-
- if (!isInsideComment && currentCharacter + nextCharacter === '//') {
- result += jsonString.slice(offset, index)
- offset = index
- isInsideComment = singleComment
- index++
- } else if (isInsideComment === singleComment && currentCharacter + nextCharacter === '\r\n') {
- index++
- isInsideComment = false
- result += strip(jsonString, offset, index)
- offset = index
- continue
- } else if (isInsideComment === singleComment && currentCharacter === '\n') {
- isInsideComment = false
- result += strip(jsonString, offset, index)
- offset = index
- } else if (!isInsideComment && currentCharacter + nextCharacter === '/*') {
- result += jsonString.slice(offset, index)
- offset = index
- isInsideComment = multiComment
- index++
- continue
- } else if (isInsideComment === multiComment && currentCharacter + nextCharacter === '*/') {
- index++
- isInsideComment = false
- result += strip(jsonString, offset, index + 1)
- offset = index + 1
- continue
- }
- }
-
- return result + (isInsideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset))
-}
diff --git a/acdr-ui/src/sheep/router/utils/uni-read-pages-v3.js b/acdr-ui/src/sheep/router/utils/uni-read-pages-v3.js
deleted file mode 100644
index 4dfab3e1..00000000
--- a/acdr-ui/src/sheep/router/utils/uni-read-pages-v3.js
+++ /dev/null
@@ -1,105 +0,0 @@
-import stripJsonComments from './strip-json-comments'
-import { isArray, isEmpty } from 'lodash'
-;('use strict')
-Object.defineProperty(exports, '__esModule', {
- value: true,
-})
-const fs = require('fs')
-
-class TransformPages {
- constructor({ includes, pagesJsonDir }) {
- this.includes = includes
- this.uniPagesJSON = JSON.parse(stripJsonComments(fs.readFileSync(pagesJsonDir, 'utf-8')))
- this.routes = this.getPagesRoutes().concat(this.getSubPackagesRoutes())
- this.tabbar = this.getTabbarRoutes()
- this.routesMap = this.transformPathToKey(this.routes)
- }
-
- /**
- * 通过读取pages.json文件 生成直接可用的routes
- */
- getPagesRoutes(pages = this.uniPagesJSON.pages, rootPath = null) {
- const routes = []
- for (let i = 0; i < pages.length; i++) {
- const item = pages[i]
- const route = {}
- for (let j = 0; j < this.includes.length; j++) {
- const key = this.includes[j]
- let value = item[key]
- if (key === 'path') {
- value = rootPath ? `/${rootPath}/${value}` : `/${value}`
- }
- if (key === 'aliasPath' && i == 0 && rootPath == null) {
- route[key] = route[key] || '/'
- } else if (value !== undefined) {
- route[key] = value
- }
- }
- routes.push(route)
- }
- return routes
- }
-
- /**
- * 解析小程序分包路径
- */
- getSubPackagesRoutes() {
- if (!(this.uniPagesJSON && this.uniPagesJSON.subPackages)) {
- return []
- }
- const subPackages = this.uniPagesJSON.subPackages
- let routes = []
- for (let i = 0; i < subPackages.length; i++) {
- const subPages = subPackages[i].pages
- const root = subPackages[i].root
- const subRoutes = this.getPagesRoutes(subPages, root)
- routes = routes.concat(subRoutes)
- }
- return routes
- }
-
- getTabbarRoutes() {
- if (!(this.uniPagesJSON && this.uniPagesJSON.tabBar && this.uniPagesJSON.tabBar.list)) {
- return []
- }
- const tabbar = this.uniPagesJSON.tabBar.list
- const tabbarMap = []
- tabbar.forEach((bar) => {
- tabbarMap.push('/' + bar.pagePath)
- })
- return tabbarMap
- }
-
- transformPathToKey(list) {
- if (!isArray(list) || isEmpty(list)) {
- return []
- }
- const map = {}
- list.forEach((i) => {
- map[i.path] = i
- })
- return map
- }
-}
-
-function uniReadPagesV3Plugin({ pagesJsonDir, includes }) {
- const defaultIncludes = ['path', 'aliasPath', 'name']
- includes = [...defaultIncludes, ...includes]
- const pages = new TransformPages({
- pagesJsonDir,
- includes,
- })
- return {
- name: 'uni-read-pages-v3',
- config(config) {
- return {
- define: {
- ROUTES: pages.routes,
- ROUTES_MAP: pages.routesMap,
- TABBAR: pages.tabbar,
- },
- }
- },
- }
-}
-exports.default = uniReadPagesV3Plugin
diff --git a/acdr-ui/src/sheep/scss/_main.scss b/acdr-ui/src/sheep/scss/_main.scss
deleted file mode 100644
index 211ef43f..00000000
--- a/acdr-ui/src/sheep/scss/_main.scss
+++ /dev/null
@@ -1,365 +0,0 @@
-body {
- color: var(--text-a);
- background-color: var(--ui-BG-1) !important;
- font-family:
- system-ui,
- -apple-system,
- 'Segoe UI',
- Roboto,
- 'Helvetica Neue',
- Arial,
- 'Noto Sans',
- sans-serif,
- 'Apple Color Emoji',
- 'Segoe UI Emoji',
- 'Segoe UI Symbol',
- 'Noto Color Emoji';
-}
-
-/* ==================
- 初始化
- ==================== */
-.ui-link {
- cursor: pointer;
-}
-navigator {
- display: inline-flex;
-}
-navigator.navigator-hover {
- background-color: inherit;
- transform: translate(1rpx, 1rpx);
- // opacity: 1;
-}
-
-/* ==================
- 辅助类
- ==================== */
-.none {
- display: none !important;
-}
-.inline {
- display: inline !important;
-}
-.inline-block {
- display: inline-block !important;
-}
-.block {
- display: block !important;
-}
-.touch-none {
- pointer-events: none;
-}
-.touch-all {
- pointer-events: all;
-}
-.flex {
- display: flex !important;
-}
-.inline-flex {
- display: inline-flex !important;
-}
-.w-100 {
- width: 100%;
-}
-/* -- 浮动 -- */
-.cf::after,
-.cf::before {
- content: '';
- display: table;
-}
-.cf::after {
- clear: both;
-}
-.fl {
- float: left;
-}
-.fr {
- float: right;
-}
-.position-center {
- @include position-center;
-}
-.position-relative {
- position: relative;
-}
-/* -- 工具类 -- */
-@function negativify-map($map) {
- $result: ();
- @each $key, $value in $map {
- @if $key != 0 {
- $result: map-merge($result, ('n' + $key: (-$value)));
- }
- }
- @return $result;
-}
-
-$utilities: () !default;
-$utilities: map-merge(
- (
- 'margin': (
- responsive: true,
- property: margin,
- class: m,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-x': (
- property: margin-right margin-left,
- class: mx,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-y': (
- property: margin-top margin-bottom,
- class: my,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-top': (
- property: margin-top,
- class: mt,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-right': (
- property: margin-right,
- class: mr,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-bottom': (
- property: margin-bottom,
- class: mb,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'margin-left': (
- property: margin-left,
- class: ml,
- values:
- map-merge(
- $spacers,
- (
- auto: auto,
- )
- ),
- ),
- 'padding': (
- responsive: true,
- property: padding,
- class: p,
- values: $spacers,
- ),
- 'padding-x': (
- property: padding-right padding-left,
- class: px,
- values: $spacers,
- ),
- 'padding-y': (
- property: padding-top padding-bottom,
- class: py,
- values: $spacers,
- ),
- 'padding-top': (
- property: padding-top,
- class: pt,
- values: $spacers,
- ),
- 'padding-right': (
- property: padding-right,
- class: pr,
- values: $spacers,
- ),
- 'padding-bottom': (
- property: padding-bottom,
- class: pb,
- values: $spacers,
- ),
- 'padding-left': (
- property: padding-left,
- class: pl,
- values: $spacers,
- ),
- 'font-weight': (
- property: font-weight,
- class: text,
- values: (
- light: $font-weight-light,
- lighter: $font-weight-lighter,
- normal: $font-weight-normal,
- bold: $font-weight-bold,
- bolder: $font-weight-bolder,
- ),
- ),
- 'text-align': (
- property: text-align,
- class: text,
- values: left right center,
- ),
- 'font-color': (
- property: color,
- class: text,
- values:
- map-merge(
- $colors,
- map-merge(
- $grays,
- map-merge(
- $darks,
- (
- 'reset': inherit,
- )
- )
- )
- ),
- ),
- 'line-height': (
- property: line-height,
- class: lh,
- values: (
- 1: 1,
- sm: $line-height-sm,
- base: $line-height-base,
- lg: $line-height-lg,
- ),
- ),
- 'white-space': (
- property: white-space,
- class: text,
- values: (
- nowrap: nowrap,
- ),
- ),
- 'radius': (
- property: border-radius,
- class: radius,
- values: (
- null: $radius,
- sm: $radius-sm,
- lg: $radius-lg,
- 0: 0,
- ),
- ),
- 'round': (
- property: border-radius,
- class: round,
- values: (
- null: $round-pill,
- circle: 50%,
- ),
- ),
- 'radius-top': (
- property: border-top-left-radius border-top-right-radius,
- class: radius-top,
- values: (
- null: $radius,
- ),
- ),
- 'radius-right': (
- property: border-top-right-radius border-bottom-right-radius,
- class: radius-right,
- values: (
- null: $radius,
- ),
- ),
- 'radius-bottom': (
- property: border-bottom-right-radius border-bottom-left-radius,
- class: radius-bottom,
- values: (
- null: $radius,
- ),
- ),
- 'radius-left': (
- property: border-bottom-left-radius border-top-left-radius,
- class: radius-left,
- values: (
- null: $radius,
- ),
- ),
- 'radius-lr': (
- property: border-top-left-radius border-bottom-right-radius,
- class: radius-lr,
- values: (
- null: $radius,
- ),
- ),
- 'radius-lrs': (
- property: border-top-right-radius border-bottom-left-radius,
- class: radius-lr,
- values: (
- null: 0,
- ),
- ),
- 'radius-rl': (
- property: border-top-right-radius border-bottom-left-radius,
- class: radius-rl,
- values: (
- null: $radius,
- ),
- ),
- 'radius-rls': (
- property: border-top-left-radius border-bottom-right-radius,
- class: radius-rl,
- values: (
- null: 0,
- ),
- ),
- ),
- $utilities
-);
-@each $key, $utility in $utilities {
- @if type-of($utility) == 'map' {
- $values: map-get($utility, values);
- @if type-of($values) == 'string' or type-of(nth($values, 1)) != 'list' {
- $values: zip($values, $values);
- }
- @each $key, $value in $values {
- $properties: map-get($utility, property);
- @if type-of($properties) == 'string' {
- $properties: append((), $properties);
- }
- $property-class: if(
- map-has-key($utility, class),
- map-get($utility, class),
- nth($properties, 1)
- );
- $property-class: if($property-class == null, '', $property-class);
- $property-class-modifier: if($key, if($property-class == '', '', '-') + $key, '');
- .#{$property-class + $property-class-modifier} {
- @each $property in $properties {
- #{$property}: $value !important;
- }
- }
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/_mixins.scss b/acdr-ui/src/sheep/scss/_mixins.scss
deleted file mode 100644
index 428cf67d..00000000
--- a/acdr-ui/src/sheep/scss/_mixins.scss
+++ /dev/null
@@ -1,63 +0,0 @@
-@mixin bg-square {
- background: {
- position:
- 0 0,
- 20rpx 20rpx;
- color: #fff;
- image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%),
- linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%);
- size: 40rpx 40rpx;
- }
-}
-
-@mixin flex($direction: row) {
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- flex-direction: $direction;
-}
-@mixin flex-bar {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: space-between;
-}
-@mixin flex-center {
- display: flex;
- align-items: center;
- justify-content: center;
-}
-
-@mixin arrow {
- position: absolute;
- width: 0;
- height: 0;
- content: '';
-}
-@mixin arrow-top {
- @include arrow;
- // border-color: transparent transparent $ui-BG;
- border-style: none solid solid;
- border-width: 0 20rpx 20rpx;
-}
-
-@mixin arrow-right {
- @include arrow;
- // border-color: transparent $ui-BG transparent;
- border-style: solid solid solid none;
- border-width: 20rpx 20rpx 20rpx 0;
-}
-@mixin position-center {
- position: absolute !important;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- margin: auto;
-}
-
-@mixin blur {
- color: var(--ui-TC);
- -webkit-backdrop-filter: blur(20px);
- backdrop-filter: blur(20px);
-}
diff --git a/acdr-ui/src/sheep/scss/_tools.scss b/acdr-ui/src/sheep/scss/_tools.scss
deleted file mode 100644
index 51a6b1ac..00000000
--- a/acdr-ui/src/sheep/scss/_tools.scss
+++ /dev/null
@@ -1,280 +0,0 @@
-// ==================
-// 常用工具
-// ====================
-
-.ss-bg-opactity-block {
- color: #fff;
- background-color: rgba(#000, 0.2);
-}
-
-// ==================
-// flex布局
-// ====================
-
-.ss-flex {
- display: flex;
- flex-direction: row;
- align-items: center;
-}
-
-.ss-flex-1 {
- flex: 1;
-}
-
-.ss-flex-col {
- display: flex;
- flex-direction: column;
-}
-
-.ss-flex-wrap {
- flex-wrap: wrap;
-}
-
-.ss-flex-nowrap {
- flex-wrap: nowrap;
-}
-
-.ss-col-center {
- align-items: center;
-}
-
-.ss-col-top {
- align-items: flex-start;
-}
-
-.ss-col-bottom {
- align-items: flex-end;
-}
-
-.ss-col-stretch {
- align-items: stretch;
-}
-
-.ss-row-center {
- justify-content: center;
-}
-
-.ss-row-left {
- justify-content: flex-start;
-}
-
-.ss-row-right {
- justify-content: flex-end;
-}
-
-.ss-row-between {
- justify-content: space-between;
-}
-
-.ss-row-around {
- justify-content: space-around;
-}
-
-.ss-self-start {
- align-self: flex-start;
-}
-
-.ss-self-end {
- align-self: flex-end;
-}
-
-.ss-self-center {
- align-self: center;
-}
-.ss-h-100 {
- height: 100%;
-}
-.ss-w-100 {
- width: 100%;
-}
-
-// ==================
-
-// margin padding: 内外边距
-
-// ====================
-@for $i from 0 through 100 {
- // 只要双数和能被5除尽的数
- @if $i % 2==0 or $i % 5==0 {
- // 得出:u-margin-30或者u-m-30
- .ss-margin-#{$i},
- .ss-m-#{$i} {
- margin: $i + rpx;
- }
- .ss-m-x-#{$i} {
- margin-right: $i + rpx;
- margin-left: $i + rpx;
- }
- .ss-m-y-#{$i} {
- margin-top: $i + rpx;
- margin-bottom: $i + rpx;
- }
-
- // 得出:u-padding-30或者u-p-30
- .ss-padding-#{$i},
- .ss-p-#{$i} {
- padding: $i + rpx;
- }
- .ss-p-x-#{$i} {
- padding-right: $i + rpx;
- padding-left: $i + rpx;
- }
- .ss-p-y-#{$i} {
- padding-top: $i + rpx;
- padding-bottom: $i + rpx;
- }
-
- @each $short, $long in l left, t top, r right, b bottom {
- // 缩写版,结果如: u-m-l-30
- // 定义外边距
- .ss-m-#{$short}-#{$i} {
- margin-#{$long}: $i + rpx;
- }
-
- // 定义内边距
- .ss-p-#{$short}-#{$i} {
- padding-#{$long}: $i + rpx;
- }
-
- // 完整版,结果如:u-margin-left-30
- // 定义外边距
- .ss-margin-#{$long}-#{$i} {
- margin-#{$long}: $i + rpx;
- }
-
- // 定义内边距
- .ss-padding-#{$long}-#{$i} {
- padding-#{$long}: $i + rpx;
- }
- }
- }
-}
-/* ==================
-
- radius
-
- ==================== */
-@for $i from 0 through 100 {
- // 只要双数和能被5除尽的数
- @if $i % 2==0 or $i % 5==0 {
- .ss-radius-#{$i},
- .ss-r-#{$i} {
- border-radius: $i + rpx;
- }
-
- .ss-r-t-#{$i} {
- border-top-left-radius: $i + rpx;
- border-top-right-radius: $i + rpx;
- }
-
- .ss-r-b-#{$i} {
- border-bottom-right-radius: $i + rpx;
- border-bottom-left-radius: $i + rpx;
- }
-
- @each $short, $long in tl 'top-left', tr 'top-right', bl 'bottom-right', br 'bottom-right' {
- // 定义外边距
- .ss-r-#{$short}-#{$i} {
- border-#{$long}-radius: $i + rpx;
- }
-
- // 定义内边距
- .ss-radius-#{$long}-#{$i} {
- border-#{$long}-radius: $i + rpx;
- }
- }
- }
-}
-/* ==================
-
- 溢出省略号
- @param {Number} 行数
-
- ==================== */
-@mixin ellipsis($rowCount: 1) {
- display: -webkit-box;
- // @if $rowCount <=1 {
- // overflow: hidden;
- // text-overflow: ellipsis;
- // white-space: nowrap;
- // } @else {
- // min-width: 0;
- // overflow: hidden;
- // text-overflow: ellipsis;
- // display: -webkit-box;
- // -webkit-line-clamp: $rowCount;
- // -webkit-box-orient: vertical;
- // }
- min-width: 0;
- overflow: hidden;
- text-overflow: ellipsis;
- -webkit-line-clamp: $rowCount;
- -webkit-box-orient: vertical;
-}
-
-@for $i from 1 through 6 {
- .ss-line-#{$i} {
- @include ellipsis($i);
- }
-}
-/* ==================
- hover
- ==================== */
-.ss-hover-class {
- background-color: $gray-c;
- opacity: 0.6;
-}
-.ss-hover-btn {
- transform: translate(1px, 1px);
-}
-/* ==================
- 底部安全区域
- ==================== */
-
-.ss-safe-bottom {
- padding-bottom: 0;
- padding-bottom: calc(constant(safe-area-inset-bottom) / 5 * 3);
- padding-bottom: calc(env(safe-area-inset-bottom) / 5 * 3);
-}
-/* ==================
-
- 字体大小
-
- ==================== */
-
-@for $i from 20 through 50 {
- .ss-font-#{$i} {
- font-size: $i + rpx;
- }
-}
-/* ==================
- 按钮
- ==================== */
-.ss-reset-button {
- position: relative;
- box-sizing: border-box;
- /* #ifndef APP-NVUE */
- display: flex;
- /* #endif */
- align-items: center;
- justify-content: center;
- padding: 0;
- margin: 0;
- font-size: inherit;
- color: inherit;
- text-align: center;
- text-decoration: none;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: transparent;
- border: 0rpx;
- transform: translate(0, 0);
-}
-.ss-reset-button.button-hover {
- background: none;
- transform: translate(1px, 1px);
-}
-
-.ss-reset-button::after {
- border: none;
-}
diff --git a/acdr-ui/src/sheep/scss/_var.scss b/acdr-ui/src/sheep/scss/_var.scss
deleted file mode 100644
index b0d88c82..00000000
--- a/acdr-ui/src/sheep/scss/_var.scss
+++ /dev/null
@@ -1,162 +0,0 @@
-@import './mixins';
-
-//颜色 ,渐变背景60%
-$yellow: #ffc300; //ss-黄
-$orange: #ff6000; //ss-橘
-$red: #ff3000; //ss-红
-$pink: #e03997;
-$mauve: #b745cb;
-$purple: #652abf; //rgba(101, 42, 191, 1); // ss-紫
-$blue: #0081ff;
-$cyan: #37c0fe;
-$green: #2aae67; //ss-绿
-$olive: #8dc63f;
-$grey: #8799a3;
-$brown: #a5673f;
-$black: #484848; //ss-黑
-$golden: #e9b461; //ss-金
-
-$colors: ();
-$colors: map-merge(
- (
- 'yellow': $yellow,
- 'orange': $orange,
- 'red': $red,
- 'pink': $pink,
- 'mauve': $mauve,
- 'purple': $purple,
- 'violet': $purple,
- 'blue': $blue,
- 'cyan': $cyan,
- 'green': $green,
- 'olive': $olive,
- 'grey': $grey,
- 'brown': $brown,
- 'black': $black,
- 'golden': $golden,
- ),
- $colors
-);
-
-//灰度
-$bg-page: #f6f6f6;
-$white: #ffffff;
-$gray-f: #f8f9fa;
-$gray-e: #eeeeee;
-$gray-d: #dddddd;
-$gray-c: #cccccc;
-$gray-b: #bbbbbb;
-$gray-a: #aaaaaa;
-$dark-9: #999999;
-$dark-8: #888888;
-$dark-7: #777777;
-$dark-6: #666666;
-$dark-5: #555555;
-$dark-4: #484848; //ss-黑
-$dark-3: #333333;
-$dark-2: #222222;
-$dark-1: #111111;
-$black: #000000;
-
-$grays: ();
-$grays: map-merge(
- (
- 'white': $white,
- 'gray-f': $gray-f,
- 'gray-e': $gray-e,
- 'gray-d': $gray-d,
- 'gray-c': $gray-c,
- 'gray-b': $gray-b,
- 'gray-a': $gray-a,
- 'gray': $gray-a,
- ),
- $grays
-);
-
-$darks: ();
-$darks: map-merge(
- (
- 'dark-9': $dark-9,
- 'dark-8': $dark-8,
- 'dark-7': $dark-7,
- 'dark-6': $dark-6,
- 'dark-5': $dark-5,
- 'dark-4': $dark-4,
- 'dark-3': $dark-3,
- 'dark-2': $dark-2,
- 'dark-1': $dark-1,
- 'black': $black,
- ),
- $darks
-);
-
-// 边框
-$border-width: 1rpx !default; // 边框大小
-$border-color: $gray-d !default; // 边框颜色
-
-// 圆角
-$radius: 10rpx !default; // 默认圆角大小
-$radius-lg: 40rpx !default; // 大圆角
-$radius-sm: 6rpx !default; // 小圆角
-$round-pill: 1000rpx !default; // 半圆
-
-// 动画过渡
-$transition-base: all 0.2s ease-in-out !default; // 默认过渡
-$transition-base-out: all 0.04s ease-in-out !default; // 进场过渡
-$transition-fade: opacity 0.15s linear !default; // 透明过渡
-$transition-collapse: height 0.35s ease !default; // 收缩过渡
-
-// 间距
-$spacer: 20rpx !default;
-$spacers: () !default;
-$spacers: map-merge(
- (
- 0: 0,
- 1: $spacer * 0.25,
- 2: $spacer * 0.5,
- 3: $spacer,
- 4: $spacer * 1.5,
- 5: $spacer * 3,
- 6: $spacer * 5,
- ),
- $spacers
-);
-// 字形
-$font-weight-lighter: lighter !default;
-$font-weight-light: 300 !default;
-$font-weight-normal: 400 !default;
-$font-weight-bold: 700 !default;
-$font-weight-bolder: 900 !default;
-$fontsize: () !default;
-$fontsize: map-merge(
- (
- xs: 20,
- sm: 24,
- df: 28,
- lg: 32,
- xl: 36,
- xxl: 44,
- sl: 80,
- xsl: 120,
- ),
- $fontsize
-);
-// 段落
-$line-height-base: 1.5 !default;
-$line-height-lg: 2 !default;
-$line-height-sm: 1.25 !default;
-// 图标
-$iconsize: () !default;
-$iconsize: map-merge(
- (
- xs: 0.5,
- sm: 0.75,
- df: 1,
- lg: 1.25,
- xl: 1.5,
- xxl: 2,
- sl: 6,
- xsl: 10,
- ),
- $iconsize
-);
diff --git a/acdr-ui/src/sheep/scss/font/OPPOSANS-M-subfont.ttf b/acdr-ui/src/sheep/scss/font/OPPOSANS-M-subfont.ttf
deleted file mode 100644
index 88ff8353fd5fb53cf1a4d7055ba7e09a12a94514..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 9832
zcmcI~d3apKm2XwuZnbu)Ey-GJNxfKVZPwQ6MN)T5t(IC+FWUFDTf1y6wj^xX7;Fdx
z8yh?EGMNw(AVY{fc>w|#GO=N71_y=!AsCoIf|+4hJbZ*CBrutYb^HD5cFUHXyf=Tm
z?{$B5Z{4aor_MQb&Z$%9UP1{W(PSSHNOg02QR%{1YzA6hM)8f#`nMhSKN3L*Eg*!s
zCjE=s&>lsIu#9{7hl30k1RAF=<=_dnZ
zkPMMw;v>7s&14U`h1?qWFc1K~8}Z~^ho_iS0FPC|W4{iMe=VNCzk!ls&{9lH#0)Al
zpf{f+p>-We1-0QMouuKO9ylNPL*O@o&jTxg&j|^f3H&1P?}66>zb4y){DPwY=N}FG
zpHa}-w)&2Np>~(s*=293ZZMk6B;JWLTD5g8R76B`$=T$hlT
zv_3f{HElyvV{?D2Z)18!rb?~RZpzBm<>cn&7i=ypDlRG2ml-_6-oF2tfdBs^D4|&4
zNa)XW;D>^reTbTZBtWN>YNcGQRA(g!`ec({NYF-6!M_sDo?h9{mRDZB_)6<{zvub+
zTWu$Qz&^b4qF}bHRGDZY&HmG$#J9zZl!{z&2qQ^>^XwdSSAkhbmRg~uda8|LOeX%+
zJ4MrW(zN+4d-wg|6G46DJ?fxe5pUse0%-!=65!&Y8yY|+#!@ZlDb1isiD8NiN|pLj
zqoFKYn^2aWFFmlO@+pV-EG@GR8)_;VIz{`F*1G!2hgzJ^J?CtB&@pZn)cQfIy*D9Y
zl0Fb1wUyRdF}2Ps{<;ZzWeS{T_p{H)2Fz7zO2%xOLTV_pQGMz9WJR`C6N`y4?co!;
z&g3K0mF#n!56p_cqw%v3bWR@H`^|6eJw#iVPmc=f(bKz*oLc$%Nyvjrc+!CfelH=c@SnZnzx4|0-qrEzFdlw0K^m*Y^)z*gKbfS@vjd{oD;|@E
zhIoGhysJZU{;Qlr+*YbJsM!%T1S7u4XVmFoZ{U4iq2`#t!(
z1dM-Xk`EF!`9h+E{3+n3!|dR%aFJsw$Xo
z<$I&^Av*pBaL`6MCq%EL`UuJr#Row}%`M_7x~qzw5VwMk<8(&6QZT&onc0>{09>IMJAAE!Sbx?2?Qsbcr6EV8>-b^xZ0
zJrd-R>&K&jyQ-~xq3#Frz!TrriO56*!$)2XW?rQ3xmr)nr5Y)Eq?&fas
z3BLDndOIX~6X55GJXxy?yJlFDEz579nN`osH5Hd$CA>F4))1b2Vm|gN?aODC*OMNi
z{U~UUCCQ*&8={;0j0CtI$z|kIT72^)EvTC`kN19li}=9fPM6F1IE@jX6x0=4oc=x0
z;^XweriS|F;2PyY=B_mz~6tbLv)RipjR
zrMf*WTfV-bBWcvt(x+{8?%u`{?W4w4w{AL`yK(zi?bgbHjvSla!P;Pfh>J)`w0{KKVUKcfYkV4&C*$`&Wk9gPb1~
z__-gj@MCg7QVCR`Ea#W$0DD!;ZuAMTMPu4mn%gZPE
z+)m8hE65NFWvzPPY+aZ_EBQ0N198Ky-I2eOAox=d-%=@}yZm
z>OJVSnZ4=84)zb?Bc%rKp}w_~Qi)#$_(dE``3|=h{o3u1mUnE4Z;PxnlzQ?o!9-$P
z{ML5wPKRSBOLbM~a*IskwT^L9cUFaqvv{xx{FH&8`c;19Hwuz#XR>euKlF1M#8~5;
z<6^Y>GkmhKJU4`xpYJJwD63N1%WXjsno4QMN_~fsX02uD>KYboy>=?y&QkolTk
zC5K`I?nQX4Kr1}U4#%>`%dcM8TApNac^;P9bg&O@Bxu&ns}9RiJ6Vo7oZ`o
z)6~Aoc$U=7hTFv__f5)175c#evq6{QsVl*5ov3%G}dWKOUpJF7sbT4
zVO}lf-OBFg`jj9=1g0d(FeQ(rhxd9nFDHAwYO|}mug`awJ}cgvn-lJh>2%R8%}0;&
z;D_^m8af%naln%Y!PkZt$@BvzvmG1U;;X6k3=Yex;`?{bjnccs1C7ot-Ly`$br?CG
z6zFyZ@F2cG%)objR`IJX?`}PHip6kmAV$+a@^Kp2+9<{$j=nCo5Jtbh^~jN}50Bn_
zWcJ9-9EN@-t^-^G{S7Z6SXKa79$V-X+SQ{gJ@btdvoBp(I&yT&KmBvn=bzI&s`>O&
z@m=v>I9<@Ga=;+ILfm7L2rCzVKJC9ebMpHv=E^&7ur^Uif6MV3z(W+qULR9LiFvd`
ze41Vme;D6vq34?|ViiOO8_9?4nh`ff@%)Zl@`%t4n$jK(Ir`E3?I`mau9_#My
z?e2EJ`NE5DzWL${Z?@CMhaYs(#+OwFHzc-`Qm3UlMcA)Uk5#JWJQ&`H6S0uC^PvZ|UL?w;F|UCJI?
zV_$Dm(G6JMi0xFid2*k1jk#szzOW4@tk$lcsiWTCkojz7|>1<0xZw0ki}B#FT+
z+9bre2C7%;ah77Xc^Ka#(p
zyxuuy9qw*)cFB7i>U$rpU#zz8Y-;(|#9Loj%JQqWH+uTpow4qL0lt=Y$is}exVN6Vs7GrnXhOM-)(&eheXtCAR*XKe3ZCqaGA+OJZ@}gY%v?ikoKI9r@ic+H~sHC8U
zSuAy5-}Y!hs;LnZAtG}xR*SV=@}By}-X8jK^SzUAePJ!luioC+umI8h2c+fcA8;d;
z#`pZ6ke85&gzcNwL?Cw~^5D@&g>*%Y%hno*C(k4I2s<_fse-mV9~&Dz9HofN&lzcQ
zICOhUx$d(dUV0gLah_Zo+pMjx&cbKngcm_g@#G~57mps-P??a(
zMFS#M5p`{h9*$N-tij`O9(6c!_9AFxq%m-Yya3%0c)SIdB`DV5no3(t%ap<_jph_9
zUwL6(3cnC}N&FNA&d}drP12DKCN$(Bt~rQU8iyD(NelHc3Tv=Z$0n`AHn*`QX`u&U
zV|w1E)Qu?}8QF0;63ZGbeL!o>H901;8ayR^6$N#r+LVmO$~M1FDL#CS07|lG3XZP7
z!}*-hWQ9(lGwDppI=#Y_OuP2AO-yv$c24z_aw7hzO!~=j+sTu*6d>O?AO;4TX!Jd!tFUUodI5_B
zR6;0{;Hgob?BMyI^_5siY1iSZ#q*7ZU;+g31^k258}?#!OkAusGgBKE8y%CMUDju9
z<+a?bf`Y8vnCRHJR%;(X*`Bm)m8w{kWr~k8WvPo*8*|gNIld;F#-L8mOUo|sTWTmviCWAf+4~lG^Qql?m;WE|%zF()bQF_~G&n+n(>zc}Er?!ucHqRt?
zXa;u9-25|>1?iFsr=_;;(4k15E5}?HN$nfwI{KGm4jznXuhsdK;s=?FKL2g>H5D7He>FPRi*Lv9#4RPS1kMQ?V5f+BC}hHq$smm%lToCE5A&XS{q@&<7cX8s^~%gM
zXQ%0&w(+(np1_4JiGNF{xSS~IAu~+FjNGTwRSXDQndWTkGtac1rMdiimXBo^`!v(g
zPeU?=#QDF6z9br@@@ea_AZNcqnHrb|V8_Snd+z@ZPg_cJUmF)g
zld=q1822qY&hgRTedqq3S6hD0$9X7YMR=8$jt7W4c$$}j`*dW>d0K$$J?xHNYHhB_
zHfmDU>(Vv6YF4MH6Vlc6usquAO<5lwpSe*MSsttfX=tE!X2aU^7y!94_#OJ;cfZ^F
zdh11Mr?cWQ`nt%M9dZ8if{Cp_PI0SoK*E}6Q$RXTE?HpE{E_bo(h2esf-g~|-j_W6
z*y#KFbGqr9U1E5CQBgh${Z^>iv)V8+KRh%)KQufq&LLk~UtLpQUsGK#ejiP9bLbL(
zP;a-_^MZ9T29&Z0_TP9r=mr81
zvvd~C=o5>(k;r~#_u$`UnTpSEJ@&z^xBmOFL+|XWm~xm}l^eRv))BLL#A@i=An%m>
z-Bz31ZL_-R?XMM>Y8IRm_xDWxWapmqGqnbbz2&x#PkilP_sm|{>pRg_S*kZXb~QEa
za_9@Y)$esqPj_}sam5r!5n`^-u!m+MhA6`Vtmd?D47rkd&QOs|;rc=wZ5Rbp68&tZ
zZt{rtrs|fil6?I@WyL_5r~jNGek8v0t1F*nZLTjf6&0Cj?7I#_k885Z+iM)Nx9li1
zHx-w)6&ALZ*#`?Q4t(WDJCCzno5~9{*3AV5!^$ULXuah%Et38Y1-i+Z&|Zc_&d^|J
zC*wL>$vVg-Ar7371g%bgsil2{b({(69PcN;czby3aGd1}5+z*b&2N|V+#%gB96y4L
z%|%%Rybgi)V!RbUzzCPc^MuH3feW}s@RsX-e&GU{rr9vnH%StEh%~Y1iHZFe?n5Yb
zD1X4SNSbH@>7pwnjopj33eqGzhCAAYbYf&Th3@yE?G}>9#z_wQGv2TRrz{gN=ZK2^
zJ&9%iK+NnQDMfLz&A8t~%GfC0zaJr5_EkLJN?cS%YN#x5f$61st8fNmZ$()O!2zBg
z#&ZnO(G!5o`HHBdqOJaIYvsbI;X@V=kmy?X&^Ap6MwBCnClM5M*kMSJKH{Th9Mo~3WF
zFr1*r*kSfEyCe`{y-+5!2~)y8;aTBNvTWIi?6~YnnJCYYTjUe+ee%Qd=j0!SrG&MG
z9S(aW>=Q+_qF7O@7*Xs|998_i;x)zl;j!V>;RE4E!(R;lbwpl-FJec;p@_#L-ir8R
zWLaceSWYYQ7=cm6P+FHiuOe>MemQkFZ!kEOECp8
ze-m>#=F3=_q*;FA;cw#bWB5WsMSPM9hD$B@nu5k&)j!y0s7`UVEDO~cbk`QD3&{D`
zh3Y(KI2fwSk%O2F)x*%f7^*8U-z}kfIDGE6L-lyPmpB=!E8(*rgMCq00s(bTh3beS
z>H1Kekyx4+stcqT--ZOo%P?jtRF{(!x+hc*L;LYiT|uhp$xuBU{9X>#<4HUfLvUs#-;pHr=E-R!;EKfS2(tCkl0
zW8<^_g{`XjiQw!F{<&S#D(C#%(&Fk+@A%mCO|xW_%;Rg1U1WhwV-2Rr65`}=G8%}0
z>`U4i{N1%v#9=$V>#}>grAn^@&j%O
z^!P#dIGL4b+lsb%GJ)$VR3U7dbFvF_sfbgWZwc_L{i}R>CH|+udPnG&k*Z)){_G19$$I$nN>ygYAE~
diff --git a/acdr-ui/src/sheep/scss/icon/_coloricon.scss b/acdr-ui/src/sheep/scss/icon/_coloricon.scss
deleted file mode 100644
index 5976c8fe..00000000
--- a/acdr-ui/src/sheep/scss/icon/_coloricon.scss
+++ /dev/null
@@ -1,1341 +0,0 @@
-@font-face {
- font-family: 'coloricon';
- src: url('data:application/x-font-woff2;charset=utf-8;base64,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')
- format('woff2');
- /* #ifdef MP-ALIPAY */
- src:
- url('//at.alicdn.com/t/font_1656945_d66u4pxvlq6.woff2') format('woff2'),
- url('//at.alicdn.com/t/font_1656945_d66u4pxvlq6.woff') format('woff'),
- url('//at.alicdn.com/t/font_1656945_d66u4pxvlq6.ttf') format('truetype');
- /* #endif */
- font-weight: normal;
- font-style: normal;
-}
-[class*='cicon-'] {
- font-family: 'coloricon';
- display: inline-block;
-}
-
-.cicon-Aa:before {
- content: '\e7a1';
-}
-.cicon-accounts:before {
- content: '\e681';
-}
-.cicon-accounts-o:before {
- content: '\e686';
-}
-.cicon-add:before {
- content: '\e6e4';
-}
-.cicon-add-round:before {
- content: '\e717';
-}
-.cicon-add-round-o:before {
- content: '\e718';
-}
-.cicon-alarm:before {
- content: '\e61e';
-}
-.cicon-album:before {
- content: '\e759';
-}
-.cicon-alipay:before {
- content: '\e6e1';
-}
-.cicon-android:before {
- content: '\e6e2';
-}
-.cicon-angle:before {
- content: '\e605';
-}
-.cicon-apple:before {
- content: '\e8e7';
-}
-.cicon-apps:before {
- content: '\e737';
-}
-.cicon-archive:before {
- content: '\e7ae';
-}
-.cicon-archive-o:before {
- content: '\e7ad';
-}
-.cicon-arrow:before {
- content: '\e608';
-}
-.cicon-at-line:before {
- content: '\e75c';
-}
-.cicon-avatar:before {
- content: '\e663';
-}
-.cicon-avatar-o:before {
- content: '\e665';
-}
-.cicon-avatars:before {
- content: '\e67e';
-}
-.cicon-avatars-o:before {
- content: '\e680';
-}
-.cicon-back:before {
- content: '\e600';
-}
-.cicon-backspace:before {
- content: '\e6a9';
-}
-.cicon-backup:before {
- content: '\e61f';
-}
-.cicon-backup-restore:before {
- content: '\e62d';
-}
-.cicon-barcode:before {
- content: '\e71f';
-}
-.cicon-book:before {
- content: '\e6a2';
-}
-.cicon-bookmark:before {
- content: '\e6a3';
-}
-.cicon-bookmark-o:before {
- content: '\e697';
-}
-.cicon-bookmarks:before {
- content: '\e6a6';
-}
-.cicon-box:before {
- content: '\e714';
-}
-.cicon-box-block:before {
- content: '\e6ac';
-}
-.cicon-box-right:before {
- content: '\e6a0';
-}
-.cicon-brand:before {
- content: '\e726';
-}
-.cicon-brand-o:before {
- content: '\e727';
-}
-.cicon-building:before {
- content: '\e6c3';
-}
-.cicon-building-o:before {
- content: '\e6c7';
-}
-.cicon-camera:before {
- content: '\e6fa';
-}
-.cicon-camera-add:before {
- content: '\e736';
-}
-.cicon-camera-add-o:before {
- content: '\e735';
-}
-.cicon-camera-lens:before {
- content: '\e68f';
-}
-.cicon-camera-lens-o:before {
- content: '\e68e';
-}
-.cicon-camera-o:before {
- content: '\e6fb';
-}
-.cicon-camera-rotate:before {
- content: '\e71e';
-}
-.cicon-card:before {
- content: '\e744';
-}
-.cicon-cardboard:before {
- content: '\e7a9';
-}
-.cicon-cardboard-o:before {
- content: '\e7aa';
-}
-.cicon-cardboard-off-o:before {
- content: '\e7af';
-}
-.cicon-cart:before {
- content: '\e70b';
-}
-.cicon-cart-o:before {
- content: '\e708';
-}
-.cicon-chat:before {
- content: '\e739';
-}
-.cicon-chat-bubble:before {
- content: '\e69b';
-}
-.cicon-chat-bubble-o:before {
- content: '\e6a7';
-}
-.cicon-chat-list:before {
- content: '\e69d';
-}
-.cicon-chat-list-o:before {
- content: '\e6aa';
-}
-.cicon-chat-o:before {
- content: '\e73c';
-}
-.cicon-chat-smile:before {
- content: '\e779';
-}
-.cicon-chat-smile-o:before {
- content: '\e78e';
-}
-.cicon-chat-smiles:before {
- content: '\e76b';
-}
-.cicon-chat-smiles-o:before {
- content: '\e74a';
-}
-.cicon-check:before {
- content: '\e69f';
-}
-.cicon-checkbox:before {
- content: '\e713';
-}
-.cicon-checkbox-o:before {
- content: '\e715';
-}
-.cicon-check-round:before {
- content: '\e6f1';
-}
-.cicon-check-round-o:before {
- content: '\e6f2';
-}
-.cicon-choiceness:before {
- content: '\e728';
-}
-.cicon-choiceness-o:before {
- content: '\e729';
-}
-.cicon-chrome:before {
- content: '\e6e3';
-}
-.cicon-circle:before {
- content: '\e7b0';
-}
-.cicon-circle-o:before {
- content: '\e7b1';
-}
-.cicon-close:before {
- content: '\e6ed';
-}
-.cicon-close-round:before {
- content: '\e6f3';
-}
-.cicon-close-round-o:before {
- content: '\e6f4';
-}
-.cicon-clothes:before {
- content: '\e72a';
-}
-.cicon-clothes-o:before {
- content: '\e72b';
-}
-.cicon-cloud:before {
- content: '\e64e';
-}
-.cicon-cloud-done:before {
- content: '\e641';
-}
-.cicon-cloud-download:before {
- content: '\e647';
-}
-.cicon-cloud-o:before {
- content: '\e646';
-}
-.cicon-cloud-off:before {
- content: '\e64b';
-}
-.cicon-cloud-upload:before {
- content: '\e687';
-}
-.cicon-code-box:before {
- content: '\e7c3';
-}
-.cicon-coin:before {
- content: '\e78a';
-}
-.cicon-coin-o:before {
- content: '\e79d';
-}
-.cicon-comment:before {
- content: '\e738';
-}
-.cicon-comment-o:before {
- content: '\e70e';
-}
-.cicon-community:before {
- content: '\e742';
-}
-.cicon-community-o:before {
- content: '\e743';
-}
-.cicon-countdown:before {
- content: '\e722';
-}
-.cicon-countdown-o:before {
- content: '\e723';
-}
-.cicon-creative:before {
- content: '\e72c';
-}
-.cicon-creative-o:before {
- content: '\e72d';
-}
-.cicon-crop:before {
- content: '\e6d9';
-}
-.cicon-crown:before {
- content: '\e776';
-}
-.cicon-crown-o:before {
- content: '\e777';
-}
-.cicon-cut:before {
- content: '\e74b';
-}
-.cicon-DarkMode:before {
- content: '\e7c4';
-}
-.cicon-dashboard:before {
- content: '\e62e';
-}
-.cicon-delete:before {
- content: '\e6bd';
-}
-.cicon-delete-close:before {
- content: '\e6ae';
-}
-.cicon-delete-line:before {
- content: '\e707';
-}
-.cicon-delete-line-o:before {
- content: '\e709';
-}
-.cicon-delete-o:before {
- content: '\e69a';
-}
-.cicon-deliver:before {
- content: '\e7f7';
-}
-.cicon-deliver-o:before {
- content: '\e6ff';
-}
-.cicon-demo:before {
- content: '\e916';
-}
-.cicon-discover:before {
- content: '\e70c';
-}
-.cicon-discover-o:before {
- content: '\e702';
-}
-.cicon-discuss-fill:before {
- content: '\e790';
-}
-.cicon-discuss-line:before {
- content: '\e78f';
-}
-.cicon-dollar:before {
- content: '\e79f';
-}
-.cicon-dollar-o:before {
- content: '\e79e';
-}
-.cicon-done:before {
- content: '\e633';
-}
-.cicon-done-all:before {
- content: '\e62a';
-}
-.cicon-douyin:before {
- content: '\e6e7';
-}
-.cicon-drop-down:before {
- content: '\e61c';
-}
-.cicon-drop-up:before {
- content: '\e61d';
-}
-.cicon-eject:before {
- content: '\e63a';
-}
-.cicon-ellipse:before {
- content: '\e74c';
-}
-.cicon-emoji:before {
- content: '\e78d';
-}
-.cicon-emoji-o:before {
- content: '\e6ee';
-}
-.cicon-equalizer:before {
- content: '\e802';
-}
-.cicon-eraser:before {
- content: '\e770';
-}
-.cicon-eraser-o:before {
- content: '\e772';
-}
-.cicon-evaluate:before {
- content: '\e7f0';
-}
-.cicon-evaluate-o:before {
- content: '\e700';
-}
-.cicon-event-close:before {
- content: '\e6a5';
-}
-.cicon-event-done:before {
- content: '\e6b2';
-}
-.cicon-event-list:before {
- content: '\e6b8';
-}
-.cicon-explore:before {
- content: '\e628';
-}
-.cicon-explore-line:before {
- content: '\e719';
-}
-.cicon-explore-line-o:before {
- content: '\e710';
-}
-.cicon-explore-o:before {
- content: '\e626';
-}
-.cicon-extension:before {
- content: '\e620';
-}
-.cicon-extension-o:before {
- content: '\e63f';
-}
-.cicon-eye:before {
- content: '\e740';
-}
-.cicon-eye-favor:before {
- content: '\e7b4';
-}
-.cicon-eye-favor-o:before {
- content: '\e7b5';
-}
-.cicon-eye-o:before {
- content: '\e741';
-}
-.cicon-eye-off:before {
- content: '\e7b3';
-}
-.cicon-eye-off-o:before {
- content: '\e7b2';
-}
-.cicon-facebook:before {
- content: '\e6ea';
-}
-.cicon-favorite:before {
- content: '\e623';
-}
-.cicon-favorite-o:before {
- content: '\e621';
-}
-.cicon-female:before {
- content: '\e72f';
-}
-.cicon-file:before {
- content: '\e857';
-}
-.cicon-file-copy:before {
- content: '\e85c';
-}
-.cicon-file-copy-o:before {
- content: '\e7bc';
-}
-.cicon-file-o:before {
- content: '\e7bb';
-}
-.cicon-file-text:before {
- content: '\e858';
-}
-.cicon-file-text-o:before {
- content: '\e7b9';
-}
-.cicon-filter:before {
- content: '\e6ec';
-}
-.cicon-fingerprint:before {
- content: '\e63b';
-}
-.cicon-first-page:before {
- content: '\e60c';
-}
-.cicon-flag:before {
- content: '\e64d';
-}
-.cicon-flag-o:before {
- content: '\e64c';
-}
-.cicon-flash-close:before {
- content: '\e73b';
-}
-.cicon-flash-off:before {
- content: '\e6d5';
-}
-.cicon-flash-on:before {
- content: '\e6dc';
-}
-.cicon-flash-open:before {
- content: '\e74f';
-}
-.cicon-folder:before {
- content: '\e6a1';
-}
-.cicon-folder-add:before {
- content: '\e6b4';
-}
-.cicon-folder-o:before {
- content: '\e6b0';
-}
-.cicon-folder-special:before {
- content: '\e65c';
-}
-.cicon-forward:before {
- content: '\e601';
-}
-.cicon-fullscreen:before {
- content: '\e915';
-}
-.cicon-fullscreen-exit:before {
- content: '\e914';
-}
-.cicon-game:before {
- content: '\e6c0';
-}
-.cicon-game-o:before {
- content: '\e6d1';
-}
-.cicon-git-commit:before {
- content: '\e7be';
-}
-.cicon-git-commit-o:before {
- content: '\e7bd';
-}
-.cicon-github:before {
- content: '\e6e9';
-}
-.cicon-github-circle:before {
- content: '\ead8';
-}
-.cicon-goods:before {
- content: '\e778';
-}
-.cicon-goodsnew:before {
- content: '\e7bf';
-}
-.cicon-goodsnew-o:before {
- content: '\e7c0';
-}
-.cicon-goods-o:before {
- content: '\e70f';
-}
-.cicon-GooglePlaylogo:before {
- content: '\e6e5';
-}
-.cicon-grid:before {
- content: '\e6ce';
-}
-.cicon-grid-o:before {
- content: '\e6cc';
-}
-.cicon-group:before {
- content: '\e7f5';
-}
-.cicon-group-o:before {
- content: '\e753';
-}
-.cicon-guanli:before {
- content: '\e750';
-}
-.cicon-headset:before {
- content: '\e6a4';
-}
-.cicon-headset-mic:before {
- content: '\e6b1';
-}
-.cicon-help:before {
- content: '\e66b';
-}
-.cicon-help-o:before {
- content: '\e65e';
-}
-.cicon-home:before {
- content: '\e70d';
-}
-.cicon-home-2:before {
- content: '\e6fd';
-}
-.cicon-home-2-o:before {
- content: '\e6cf';
-}
-.cicon-home-3:before {
- content: '\e6fc';
-}
-.cicon-home-3-o:before {
- content: '\e6e0';
-}
-.cicon-home-4:before {
- content: '\e732';
-}
-.cicon-home-4-o:before {
- content: '\e6e6';
-}
-.cicon-home-community:before {
- content: '\e799';
-}
-.cicon-home-dot:before {
- content: '\e794';
-}
-.cicon-home-dot-o:before {
- content: '\e797';
-}
-.cicon-home-line:before {
- content: '\e793';
-}
-.cicon-home-line-o:before {
- content: '\e792';
-}
-.cicon-home-o:before {
- content: '\e70a';
-}
-.cicon-home-sm:before {
- content: '\e798';
-}
-.cicon-home-smile:before {
- content: '\e79c';
-}
-.cicon-home-smile-o:before {
- content: '\e7a0';
-}
-.cicon-home-smline:before {
- content: '\e791';
-}
-.cicon-home-smline-o:before {
- content: '\e731';
-}
-.cicon-home-sm-o:before {
- content: '\e79b';
-}
-.cicon-hotel:before {
- content: '\e7a8';
-}
-.cicon-hotel-o:before {
- content: '\e7a3';
-}
-.cicon-huohu:before {
- content: '\e72e';
-}
-.cicon-IE:before {
- content: '\e922';
-}
-.cicon-image-text:before {
- content: '\e781';
-}
-.cicon-image-text-o:before {
- content: '\e758';
-}
-.cicon-import-export:before {
- content: '\e615';
-}
-.cicon-info:before {
- content: '\e6ef';
-}
-.cicon-info-o:before {
- content: '\e705';
-}
-.cicon-input:before {
- content: '\e75f';
-}
-.cicon-input-o:before {
- content: '\e6c8';
-}
-.cicon-keyboard:before {
- content: '\e6b6';
-}
-.cicon-kinds:before {
- content: '\e748';
-}
-.cicon-last-page:before {
- content: '\e60d';
-}
-.cicon-layout:before {
- content: '\e7e8';
-}
-.cicon-layout-o:before {
- content: '\e7e7';
-}
-.cicon-LightMode:before {
- content: '\e7ba';
-}
-.cicon-link:before {
- content: '\e6ab';
-}
-.cicon-link-off:before {
- content: '\e6b9';
-}
-.cicon-loader-fill:before {
- content: '\e76d';
-}
-.cicon-loading:before {
- content: '\e746';
-}
-.cicon-loading1:before {
- content: '\e749';
-}
-.cicon-loading2:before {
- content: '\e7f1';
-}
-.cicon-location-off:before {
- content: '\e671';
-}
-.cicon-location-off-o:before {
- content: '\e66d';
-}
-.cicon-location-on:before {
- content: '\e65f';
-}
-.cicon-location-on-o:before {
- content: '\e661';
-}
-.cicon-lock:before {
- content: '\e6ad';
-}
-.cicon-lock-o:before {
- content: '\e6b3';
-}
-.cicon-lock-open:before {
- content: '\e6ba';
-}
-.cicon-logout:before {
- content: '\e76e';
-}
-.cicon-loop:before {
- content: '\e616';
-}
-.cicon-magic:before {
- content: '\e6b7';
-}
-.cicon-magic-o:before {
- content: '\e6c2';
-}
-.cicon-mail:before {
- content: '\e6be';
-}
-.cicon-mail-o:before {
- content: '\e6bc';
-}
-.cicon-male:before {
- content: '\e730';
-}
-.cicon-mic:before {
- content: '\e656';
-}
-.cicon-mic-none:before {
- content: '\e642';
-}
-.cicon-mic-off:before {
- content: '\e652';
-}
-.cicon-miniprogram:before {
- content: '\e7d6';
-}
-.cicon-mobile:before {
- content: '\e854';
-}
-.cicon-mobile-o:before {
- content: '\e7b6';
-}
-.cicon-moneybag:before {
- content: '\e7ce';
-}
-.cicon-moneybag-o:before {
- content: '\e7d1';
-}
-.cicon-more:before {
- content: '\e688';
-}
-.cicon-more-tag:before {
- content: '\e672';
-}
-.cicon-move:before {
- content: '\e768';
-}
-.cicon-move-round:before {
- content: '\e602';
-}
-.cicon-move-round-o:before {
- content: '\e603';
-}
-.cicon-music:before {
- content: '\e795';
-}
-.cicon-music-off:before {
- content: '\e796';
-}
-.cicon-my:before {
- content: '\e78c';
-}
-.cicon-my-o:before {
- content: '\e78b';
-}
-.cicon-near-me:before {
- content: '\e654';
-}
-.cicon-near-me-o:before {
- content: '\e649';
-}
-.cicon-not:before {
- content: '\e667';
-}
-.cicon-notice:before {
- content: '\e666';
-}
-.cicon-notice-active:before {
- content: '\e66f';
-}
-.cicon-notice-active-o:before {
- content: '\e65d';
-}
-.cicon-notice-o:before {
- content: '\e664';
-}
-.cicon-notice-off:before {
- content: '\e6b5';
-}
-.cicon-notice-off-o:before {
- content: '\e6bb';
-}
-.cicon-numcode:before {
- content: '\e755';
-}
-.cicon-order:before {
- content: '\e786';
-}
-.cicon-order-o:before {
- content: '\e7b8';
-}
-.cicon-paint:before {
- content: '\e75d';
-}
-.cicon-paint-o:before {
- content: '\e75a';
-}
-.cicon-palette:before {
- content: '\e696';
-}
-.cicon-palette-o:before {
- content: '\e691';
-}
-.cicon-pause:before {
- content: '\e669';
-}
-.cicon-pause-circle:before {
- content: '\e678';
-}
-.cicon-person:before {
- content: '\e679';
-}
-.cicon-person-add:before {
- content: '\e668';
-}
-.cicon-person-add-o:before {
- content: '\e66a';
-}
-.cicon-person-o:before {
- content: '\e67d';
-}
-.cicon-person-pin-circle:before {
- content: '\e66c';
-}
-.cicon-person-pin-circle-o:before {
- content: '\e670';
-}
-.cicon-phone:before {
- content: '\e6f0';
-}
-.cicon-phone-call:before {
- content: '\e6d7';
-}
-.cicon-pic:before {
- content: '\e756';
-}
-.cicon-pic-o:before {
- content: '\e69e';
-}
-.cicon-pin-drop:before {
- content: '\e648';
-}
-.cicon-pin-drop-o:before {
- content: '\e655';
-}
-.cicon-place:before {
- content: '\e651';
-}
-.cicon-place-o:before {
- content: '\e650';
-}
-.cicon-play-arrow:before {
- content: '\e66e';
-}
-.cicon-play-circle:before {
- content: '\e674';
-}
-.cicon-play-circle-o:before {
- content: '\e67f';
-}
-.cicon-popover:before {
- content: '\e74e';
-}
-.cicon-popover-o:before {
- content: '\e757';
-}
-.cicon-present:before {
- content: '\e73a';
-}
-.cicon-present-o:before {
- content: '\e711';
-}
-.cicon-progress:before {
- content: '\e784';
-}
-.cicon-qq:before {
- content: '\e7d9';
-}
-.cicon-qr-code-fill:before {
- content: '\e767';
-}
-.cicon-qr-code-line:before {
- content: '\e75e';
-}
-.cicon-quill:before {
- content: '\e760';
-}
-.cicon-quill-o:before {
- content: '\e761';
-}
-.cicon-radio:before {
- content: '\e6d4';
-}
-.cicon-radiobox:before {
- content: '\e763';
-}
-.cicon-radiobox-o:before {
- content: '\e75b';
-}
-.cicon-recharge:before {
- content: '\e71c';
-}
-.cicon-recharge-o:before {
- content: '\e71d';
-}
-.cicon-record:before {
- content: '\e7a4';
-}
-.cicon-record-o:before {
- content: '\e7a6';
-}
-.cicon-redo:before {
- content: '\e612';
-}
-.cicon-redpacket:before {
- content: '\e7d3';
-}
-.cicon-redpacket-o:before {
- content: '\e71a';
-}
-.cicon-refresh:before {
- content: '\e611';
-}
-.cicon-repair:before {
- content: '\e73f';
-}
-.cicon-repair-o:before {
- content: '\e73e';
-}
-.cicon-repeat:before {
- content: '\e617';
-}
-.cicon-replay:before {
- content: '\e619';
-}
-.cicon-reply:before {
- content: '\e618';
-}
-.cicon-reply-all:before {
- content: '\e614';
-}
-.cicon-road-map:before {
- content: '\e769';
-}
-.cicon-road-map-o:before {
- content: '\e76a';
-}
-.cicon-round:before {
- content: '\e716';
-}
-.cicon-round-angle:before {
- content: '\e6f5';
-}
-.cicon-round-angle-o:before {
- content: '\e6f6';
-}
-.cicon-round-arrow-line:before {
- content: '\e734';
-}
-.cicon-round-box:before {
- content: '\e604';
-}
-.cicon-safe:before {
- content: '\e77f';
-}
-.cicon-safe-check:before {
- content: '\e875';
-}
-.cicon-safe-check-o:before {
- content: '\e876';
-}
-.cicon-safe-flash:before {
- content: '\e783';
-}
-.cicon-safe-flash-o:before {
- content: '\e775';
-}
-.cicon-safe-key:before {
- content: '\e76c';
-}
-.cicon-safe-key-o:before {
- content: '\e766';
-}
-.cicon-safe-o:before {
- content: '\e77e';
-}
-.cicon-save:before {
- content: '\e677';
-}
-.cicon-save-o:before {
- content: '\e684';
-}
-.cicon-scan:before {
- content: '\e703';
-}
-.cicon-scissors:before {
- content: '\e762';
-}
-.cicon-search:before {
- content: '\e6f7';
-}
-.cicon-search-line:before {
- content: '\e771';
-}
-.cicon-searchlist:before {
- content: '\e720';
-}
-.cicon-search-o:before {
- content: '\e782';
-}
-.cicon-search-sm:before {
- content: '\e631';
-}
-.cicon-service:before {
- content: '\e73d';
-}
-.cicon-service-fill:before {
- content: '\e704';
-}
-.cicon-service-o:before {
- content: '\e721';
-}
-.cicon-set:before {
- content: '\e773';
-}
-.cicon-set-list:before {
- content: '\e76f';
-}
-.cicon-set-o:before {
- content: '\e774';
-}
-.cicon-settings:before {
- content: '\e77a';
-}
-.cicon-settings-o:before {
- content: '\e780';
-}
-.cicon-share:before {
- content: '\e6c5';
-}
-.cicon-share-line-o:before {
- content: '\e74d';
-}
-.cicon-shengji:before {
- content: '\e747';
-}
-.cicon-shopping-cart:before {
- content: '\e685';
-}
-.cicon-shopping-cart-o:before {
- content: '\e676';
-}
-.cicon-show:before {
- content: '\e785';
-}
-.cicon-show-o:before {
- content: '\e787';
-}
-.cicon-shuffle:before {
- content: '\e61a';
-}
-.cicon-sip:before {
- content: '\e764';
-}
-.cicon-sip-o:before {
- content: '\e765';
-}
-.cicon-skip-next:before {
- content: '\e6dd';
-}
-.cicon-skip-previous:before {
- content: '\e6d6';
-}
-.cicon-slack:before {
- content: '\e87b';
-}
-.cicon-slack-square:before {
- content: '\e891';
-}
-.cicon-sort:before {
- content: '\e6bf';
-}
-.cicon-sort-order:before {
- content: '\e6fe';
-}
-.cicon-sound:before {
- content: '\e77b';
-}
-.cicon-sponsor:before {
- content: '\e77c';
-}
-.cicon-sponsor-o:before {
- content: '\e77d';
-}
-.cicon-star:before {
- content: '\e683';
-}
-.cicon-star-half:before {
- content: '\e67c';
-}
-.cicon-star-o:before {
- content: '\e67b';
-}
-.cicon-stock:before {
- content: '\e789';
-}
-.cicon-stop:before {
- content: '\e6db';
-}
-.cicon-store:before {
- content: '\e7ac';
-}
-.cicon-store-0:before {
- content: '\e7ab';
-}
-.cicon-store-2:before {
- content: '\e7a7';
-}
-.cicon-store-2-o:before {
- content: '\e7a5';
-}
-.cicon-sub-left:before {
- content: '\e60b';
-}
-.cicon-sub-right:before {
- content: '\e60f';
-}
-.cicon-subtitles:before {
- content: '\e6da';
-}
-.cicon-subtitles-o:before {
- content: '\e6d8';
-}
-.cicon-sync-alt:before {
- content: '\e613';
-}
-.cicon-tag:before {
- content: '\e751';
-}
-.cicon-tag-o:before {
- content: '\e752';
-}
-.cicon-taobao:before {
- content: '\e712';
-}
-.cicon-terminal:before {
- content: '\e7c1';
-}
-.cicon-terminal-o:before {
- content: '\e7c2';
-}
-.cicon-thumb-down:before {
- content: '\e6c1';
-}
-.cicon-thumb-down-o:before {
- content: '\e6c9';
-}
-.cicon-thumb-up:before {
- content: '\e6c6';
-}
-.cicon-thumb-up-line:before {
- content: '\e71b';
-}
-.cicon-thumb-up-line-o:before {
- content: '\e6eb';
-}
-.cicon-thumb-up-o:before {
- content: '\e6cb';
-}
-.cicon-ticket:before {
- content: '\e800';
-}
-.cicon-ticket-o:before {
- content: '\e701';
-}
-.cicon-time:before {
- content: '\e6f8';
-}
-.cicon-time-o:before {
- content: '\e6f9';
-}
-.cicon-timer:before {
- content: '\e69c';
-}
-.cicon-title:before {
- content: '\e82f';
-}
-.cicon-titles:before {
- content: '\e745';
-}
-.cicon-toggle:before {
- content: '\e706';
-}
-.cicon-toggle-o:before {
- content: '\e733';
-}
-.cicon-topbar:before {
- content: '\e788';
-}
-.cicon-translate:before {
- content: '\e79a';
-}
-.cicon-tree:before {
- content: '\e659';
-}
-.cicon-Tt:before {
- content: '\e7a2';
-}
-.cicon-twiter:before {
- content: '\e6e8';
-}
-.cicon-cicon-community-o:before {
- content: '\e6df';
-}
-.cicon-undo:before {
- content: '\e61b';
-}
-.cicon-unfold-less:before {
- content: '\e60e';
-}
-.cicon-unfold-more:before {
- content: '\e609';
-}
-.cicon-upstage:before {
- content: '\e724';
-}
-.cicon-upstage-o:before {
- content: '\e725';
-}
-.cicon-view-agenda:before {
- content: '\e639';
-}
-.cicon-view-array:before {
- content: '\e636';
-}
-.cicon-view-carousel:before {
- content: '\e638';
-}
-.cicon-view-column:before {
- content: '\e632';
-}
-.cicon-view-day:before {
- content: '\e627';
-}
-.cicon-view-headline:before {
- content: '\e62b';
-}
-.cicon-view-list:before {
- content: '\e63c';
-}
-.cicon-view-module:before {
- content: '\e629';
-}
-.cicon-view-quilt:before {
- content: '\e630';
-}
-.cicon-volume:before {
- content: '\e6c4';
-}
-.cicon-volume-off:before {
- content: '\e6cd';
-}
-.cicon-warn:before {
- content: '\e662';
-}
-.cicon-warn-o:before {
- content: '\e675';
-}
-.cicon-wechat-pay:before {
- content: '\e7e6';
-}
-.cicon-weibo-fill:before {
- content: '\e7e4';
-}
-.cicon-weibo-o:before {
- content: '\e7e3';
-}
-.cicon-weixin:before {
- content: '\e6de';
-}
-.cicon-whatshot:before {
- content: '\e6ca';
-}
-.cicon-whatshot-o:before {
- content: '\e6d0';
-}
-.cicon-wifi:before {
- content: '\e6d2';
-}
-.cicon-wifi-off:before {
- content: '\e6d3';
-}
-.cicon-yamaxun:before {
- content: '\e7b7';
-}
-.cicon-zuoji:before {
- content: '\e754';
-}
diff --git a/acdr-ui/src/sheep/scss/icon/_icon.scss b/acdr-ui/src/sheep/scss/icon/_icon.scss
deleted file mode 100644
index ede36005..00000000
--- a/acdr-ui/src/sheep/scss/icon/_icon.scss
+++ /dev/null
@@ -1,182 +0,0 @@
-@font-face {
- font-family: 'colorui'; /* Project id 2620914 */
- src: url('data:application/x-font-woff2;charset=utf-8;base64,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')
- format('woff2');
- /* #ifdef MP-ALIPAY */
- src:
- url('//at.alicdn.com/t/font_2620914_57y9q5zpbel.woff?t=1624238023908') format('woff'),
- url('//at.alicdn.com/t/font_2620914_57y9q5zpbel.ttf?t=1624238023908') format('truetype');
- /* #endif */
-}
-
-[class*='_icon-'] {
- font-family: 'colorui' !important;
- display: inline-block;
-}
-@font-face {
- font-family: 'ui-num';
- src: url('data:application/x-font-ttf;base64,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')
- format('woff2');
- font-weight: normal;
- font-style: normal;
-}
-
-._icon-checkbox:before {
- content: '\e713';
-}
-
-._icon-box:before {
- content: '\e714';
-}
-
-._icon-checkbox-o:before {
- content: '\e715';
-}
-
-._icon-round:before {
- content: '\e716';
-}
-
-._icon-home-o:before {
- content: '\e70a';
-}
-
-._icon-home:before {
- content: '\e70d';
-}
-
-._icon-edit:before {
- content: '\e649';
-}
-
-._icon-close:before {
- content: '\e6ed';
-}
-
-._icon-check-round:before {
- content: '\e6f1';
-}
-
-._icon-check-round-o:before {
- content: '\e6f2';
-}
-
-._icon-close-round:before {
- content: '\e6f3';
-}
-
-._icon-close-round-o:before {
- content: '\e6f4';
-}
-
-._icon-waiting:before {
- content: '\e6f8';
-}
-
-._icon-waiting-o:before {
- content: '\e6f9';
-}
-
-._icon-warn:before {
- content: '\e662';
-}
-
-._icon-warn-o:before {
- content: '\e675';
-}
-
-._icon-more:before {
- content: '\e688';
-}
-
-._icon-delete:before {
- content: '\e707';
-}
-
-._icon-delete-o:before {
- content: '\e709';
-}
-
-._icon-add-round:before {
- content: '\e717';
-}
-
-._icon-add-round-o:before {
- content: '\e718';
-}
-
-._icon-add:before {
- content: '\e6e4';
-}
-
-._icon-info:before {
- content: '\e6ef';
-}
-
-._icon-info-o:before {
- content: '\e705';
-}
-
-._icon-move:before {
- content: '\e768';
-}
-
-._icon-title:before {
- content: '\e82f';
-}
-
-._icon-titles:before {
- content: '\e745';
-}
-
-._icon-loading:before {
- content: '\e746';
-}
-
-._icon-copy-o:before {
- content: '\e7bc';
-}
-
-._icon-copy:before {
- content: '\e85c';
-}
-
-._icon-loader:before {
- content: '\e76d';
-}
-
-._icon-search:before {
- content: '\e782';
-}
-
-._icon-back:before {
- content: '\e600';
-}
-
-._icon-forward:before {
- content: '\e601';
-}
-
-._icon-arrow:before {
- content: '\e608';
-}
-
-._icon-drop-down:before {
- content: '\e61c';
-}
-
-._icon-drop-up:before {
- content: '\e61d';
-}
-
-._icon-check:before {
- content: '\e69f';
-}
-
-._icon-move-round:before {
- content: '\e602';
-}
-
-._icon-move-round-o:before {
- content: '\e603';
-}
diff --git a/acdr-ui/src/sheep/scss/icon/_sheepicon.scss b/acdr-ui/src/sheep/scss/icon/_sheepicon.scss
deleted file mode 100644
index 18ae410d..00000000
--- a/acdr-ui/src/sheep/scss/icon/_sheepicon.scss
+++ /dev/null
@@ -1,94 +0,0 @@
-@font-face {
- font-family: 'sheepicon';
- src: url('data:application/x-font-woff2;charset=utf-8;base64,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')
- format('woff2');
-}
-
-[class*='sicon-'] {
- display: inline-block;
- font-family: 'sheepicon';
-}
-
-.sicon-edit:before {
- content: '\e711';
-}
-
-.sicon-basic:before {
- content: '\e712';
-}
-
-.sicon-home:before {
- content: '\e70c';
-}
-
-.sicon-more:before {
- content: '\e707';
-}
-
-.sicon-check-line:before {
- content: '\e708';
-}
-
-.sicon-transport:before {
- content: '\e709';
-}
-
-.sicon-goods-card:before {
- content: '\e70a';
-}
-
-.sicon-collect:before {
- content: '\e70b';
-}
-
-.sicon-warning-line:before {
- content: '\e70d';
-}
-
-.sicon-score1:before {
- content: '\e70e';
-}
-
-.sicon-score2:before {
- content: '\e70f';
-}
-
-.sicon-goods-list:before {
- content: '\e710';
-}
-
-.sicon-back:before {
- content: '\e706';
-}
-
-.sicon-unchecked:before {
- content: '\e703';
-}
-
-.sicon-warning-outline:before {
- content: '\e6ff';
-}
-
-.sicon-question-outline:before {
- content: '\e700';
-}
-
-.sicon-circlecheck:before {
- content: '\e701';
-}
-
-.sicon-circleclose:before {
- content: '\e702';
-}
-
-.sicon-delivery:before {
- content: '\e6fd';
-}
-
-.sicon-orders:before {
- content: '\e6fe';
-}
-
-.sicon-qrcode:before {
- content: '\e6f9';
-}
diff --git a/acdr-ui/src/sheep/scss/icon/_style.scss b/acdr-ui/src/sheep/scss/icon/_style.scss
deleted file mode 100644
index a2c4dc82..00000000
--- a/acdr-ui/src/sheep/scss/icon/_style.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-@import './icon'; //核心图标库
-@import './coloricon'; //扩展图标库
-@import './sheepicon';
-.icon-spin {
- animation: icon-spin 2s infinite linear;
-}
-
-.icon-pulse {
- animation: icon-spin 1s infinite steps(8);
-}
-
-@keyframes icon-spin {
- 0% {
- transform: rotate(0deg);
- }
- 100% {
- transform: rotate(359deg);
- }
-}
-.icon-90 {
- transform: rotate(90deg);
-}
-.icon-180 {
- transform: rotate(180deg);
-}
-.icon-270 {
- transform: rotate(270deg);
-}
-.icon-x {
- transform: scale(-1, 1);
-}
-.icon-y {
- transform: scale(1, -1);
-}
-.icon-fw {
- width: calc(18em / 14);
- text-align: center;
-}
-@each $class, $value in $iconsize {
- .icon-#{$class} {
- transform: scale(#{$value});
- }
-}
diff --git a/acdr-ui/src/sheep/scss/index.scss b/acdr-ui/src/sheep/scss/index.scss
deleted file mode 100644
index d84a6992..00000000
--- a/acdr-ui/src/sheep/scss/index.scss
+++ /dev/null
@@ -1,27 +0,0 @@
-@import './_tools';
-@import './ui';
-
-// 字体文件
-@font-face {
- font-family: OPPOSANS;
- src: url('~@/sheep/scss/font/OPPOSANS-M-subfont.ttf');
-}
-.font-OPPOSANS {
- font-family: OPPOSANS;
-}
-page {
- -webkit-overflow-scrolling: touch; // 解决ios滑动不流畅
- width: 100%;
- height: 100%;
- // font-family: OPPOSANS;
- color: $dark-3;
- word-break: break-all; //英文文本不换行
- white-space: normal;
- background-color: $bg-page;
-}
-::-webkit-scrollbar {
- display: none;
- width: 0;
- height: 0;
- color: transparent;
-}
diff --git a/acdr-ui/src/sheep/scss/style/_avatar.scss b/acdr-ui/src/sheep/scss/style/_avatar.scss
deleted file mode 100644
index e69de29b..00000000
diff --git a/acdr-ui/src/sheep/scss/style/_background.scss b/acdr-ui/src/sheep/scss/style/_background.scss
deleted file mode 100644
index c3f901ea..00000000
--- a/acdr-ui/src/sheep/scss/style/_background.scss
+++ /dev/null
@@ -1,202 +0,0 @@
-/* ==================
- 背景
- ==================== */
-/* -- 基础色 -- */
-@each $color, $value in map-merge($colors, $darks) {
- .bg-#{$color} {
- background-color: $value !important;
- @if $color == 'yellow' {
- color: #333333 !important;
- } @else {
- color: #ffffff !important;
- }
- }
-}
-/* -- 浅色 -- */
-@each $color, $value in $colors {
- .bg-#{$color}-light {
- color: $value !important;
- background-image: linear-gradient(45deg, white, mix(white, $value, 85%)) !important;
- }
-
- .bg-#{$color}-thin {
- color: $value !important;
- background-color: rgba($value, var(--ui-BG-opacity)) !important;
- }
-}
-/* -- 渐变色 -- */
-
-@each $color, $value in $colors {
- @each $colorsub, $valuesub in $colors {
- @if $color != $colorsub {
- .bg-#{$color}-#{$colorsub} {
- color: #ffffff !important;
- // background-color: $value !important;
- background-image: linear-gradient(130deg, $value, $valuesub) !important;
- }
- }
- }
-}
-.bg-yellow-gradient {
- color: $dark-3 !important;
- background-image: linear-gradient(45deg, #f5fe00, #ff6600) !important;
-}
-.bg-orange-gradient {
- color: $white !important;
- background-image: linear-gradient(90deg, #ff6000, #fe832a) !important;
-}
-.bg-red-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #f33a41, #ed0586) !important;
-}
-.bg-pink-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #fea894, #ff1047) !important;
-}
-.bg-mauve-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #c01f95, #7115cc) !important;
-}
-.bg-purple-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #9829ea, #5908fb) !important;
-}
-.bg-blue-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #00b8f9, #0166eb) !important;
-}
-.bg-cyan-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #06edfe, #48b2fe) !important;
-}
-.bg-green-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #3ab54a, #8cc63f) !important;
-}
-.bg-olive-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #90e630, #39d266) !important;
-}
-.bg-grey-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #9aadb9, #354855) !important;
-}
-.bg-brown-gradient {
- color: $white !important;
- background-image: linear-gradient(45deg, #ca6f2e, #cb1413) !important;
-}
-
-@each $color, $value in $grays {
- .bg-#{$color} {
- color: #333333 !important;
- background-color: $value !important;
- }
-}
-
-.bg-square {
- @include bg-square;
-}
-.bg-none {
- color: inherit !important;
- background: transparent !important;
-}
-
-[class*='bg-mask'] {
- position: relative;
- //background: transparent !important;
- color: #ffffff !important;
- > view,
- > text {
- position: relative;
- z-index: 1;
- color: #ffffff;
- }
- &::before {
- z-index: 0;
- width: 100%;
- height: 100%;
- content: '';
- background-color: rgba(0, 0, 0, 0.4);
- border-radius: inherit;
- @include position-center;
- }
- @at-root .bg-mask-80::before {
- background: rgba(0, 0, 0, 0.8) !important;
- }
- @at-root .bg-mask-50::before {
- background: rgba(0, 0, 0, 0.5) !important;
- }
- @at-root .bg-mask-20::before {
- background: rgba(0, 0, 0, 0.2) !important;
- }
- @at-root .bg-mask-top::before {
- background-color: rgba(0, 0, 0, 0);
- background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.618), rgba(0, 0, 0, 0.01));
- }
- @at-root .bg-white-top {
- background-color: rgba(0, 0, 0, 0);
- background-image: linear-gradient(rgba(255, 255, 255, 1), rgba(255, 255, 255, 0.3));
- }
- @at-root .bg-mask-bottom::before {
- background-color: rgba(0, 0, 0, 0);
- background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.618), rgba(0, 0, 0, 1));
- }
-}
-.bg-img {
- background-repeat: no-repeat;
- background-position: center;
- background-size: cover;
-}
-
-[class*='bg-blur'] {
- position: relative;
- > view,
- > text {
- position: relative;
- z-index: 1;
- }
- &::before {
- box-sizing: border-box;
- width: 100%;
- height: 100%;
- pointer-events: none;
- content: '';
- border-radius: inherit;
- transform-origin: 0 0;
- @include position-center;
- }
-}
-@supports (-webkit-backdrop-filter: blur(20px)) or (backdrop-filter: blur(20px)) {
- .bg-blur::before {
- @include blur;
- background-color: var(--ui-Blur-1);
- }
- .bg-blur-1::before {
- @include blur;
- background-color: var(--ui-Blur-2);
- }
- .bg-blur-2::before {
- @include blur;
- background-color: var(--ui-Blur-3);
- }
-}
-@supports not (backdrop-filter: blur(5px)) {
- .bg-blur {
- color: var(--ui-TC);
- &::before {
- background-color: var(--ui-BG);
- }
- }
- .bg-blur-1 {
- color: var(--ui-TC);
- &::before {
- background-color: var(--ui-BG-1);
- }
- }
- .bg-blur-2 {
- color: var(--ui-TC);
- &::before {
- background-color: var(--ui-BG-2);
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_border.scss b/acdr-ui/src/sheep/scss/style/_border.scss
deleted file mode 100644
index 0ae40f97..00000000
--- a/acdr-ui/src/sheep/scss/style/_border.scss
+++ /dev/null
@@ -1,140 +0,0 @@
-/* ==================
- 边框
- ==================== */
-/* -- 实线 -- */
-.border {
- overflow: initial !important;
- @at-root [class*='border'],
- [class*='dashed'] {
- position: relative;
- &.dline {
- --ui-Border: var(--ui-BG-3);
- }
- &::after {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 0;
- box-sizing: border-box;
- width: 200%;
- height: 200%;
- pointer-events: none;
- content: ' ';
- border-radius: inherit;
- transform: scale(0.5);
- transform-origin: 0 0;
- }
- &.radius::after {
- border-radius: calc(#{$radius} * 2);
- }
- &.round::after {
- border-radius: #{$round-pill};
- }
- }
- &::after {
- border: 1px solid var(--ui-Border);
- }
- &s::after {
- border: 4rpx solid var(--ui-Border);
- }
- &ss::after {
- border: 8rpx solid var(--ui-Border);
- }
- @each $value in (top, right, bottom, left) {
- &-#{$value}::after {
- border-#{$value}: 1px solid var(--ui-Border);
- }
- &s-#{$value}::after {
- border-#{$value}: 4rpx solid var(--ui-Border);
- }
- &ss-#{$value}::after {
- border-#{$value}: 8rpx solid var(--ui-Border);
- }
- }
-}
-/* -- 虚线 -- */
-.dashed {
- &::after {
- border: 4rpx dashed var(--ui-Border);
- }
- &s::after {
- border: 6rpx dashed var(--ui-Border);
- }
- @each $value in (top, right, bottom, left) {
- &-#{$value}::after {
- border-#{$value}: 4rpx dashed var(--ui-Border);
- }
- &s-#{$value}::after {
- border-#{$value}: 6rpx dashed var(--ui-Border);
- }
- }
-}
-@each $color, $value in map-merge($colors, map-merge($darks, $grays)) {
- .border-#{$color}::after,
- .border-#{$color}[class*='-shine']::before {
- border-color: $value !important;
- }
-}
-@each $value in (a, b, c, d, e) {
- .main-#{$value}-border::after,
- .main-#{$value}-border[class*='-shine']::before {
- border-color: var(--main-#{$value}) !important;
- }
-}
-.dashed-shine,
-.dasheds-shine {
- position: relative;
- overflow: hidden;
- &::after,
- &::before {
- width: calc(200% + 40px);
- height: 200%;
- border-color: var(--ui-Border);
- border-style: dashed;
- border-width: 2px 0;
- animation: shineafter 1s infinite linear;
- }
- &::before {
- position: absolute;
- box-sizing: border-box;
- width: 200%;
- height: calc(200% + 40px);
- pointer-events: none;
- content: ' ';
- border-width: 0 2px;
- transform: scale(0.5);
- transform-origin: 0 0;
- animation: shinebefore 1s infinite linear;
- }
-}
-.dasheds-shine {
- &::after,
- &::before {
- border-width: 4px 0;
- }
- &::before {
- border-width: 0 4px;
- }
-}
-
-@keyframes shineafter {
- 0% {
- top: 0;
- left: -22px;
- }
- 100% {
- top: 0px;
- left: 0px;
- }
-}
-
-@keyframes shinebefore {
- 0% {
- top: -22px;
- left: 0;
- }
- 100% {
- top: 0px;
- left: 0px;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_button.scss b/acdr-ui/src/sheep/scss/style/_button.scss
deleted file mode 100644
index fdaf1026..00000000
--- a/acdr-ui/src/sheep/scss/style/_button.scss
+++ /dev/null
@@ -1,87 +0,0 @@
-.ui-btn-box {
- display: inline-block;
-}
-.ui-btn {
- position: relative;
- box-sizing: border-box;
- display: inline-block;
- align-items: center;
- justify-content: center;
- padding: 0.7857em 1.5em 0.7857em;
- margin: 0 0.25em 0 0;
- overflow: visible;
- font-size: 28rpx;
- line-height: 1em;
- color: var(--text-a);
- text-align: center;
- text-decoration: none;
- white-space: nowrap;
- vertical-align: baseline;
- background-color: var(--ui-BG);
- border: 0rpx;
- border-radius: $radius;
- transform: translate(0rpx, 0rpx);
- &:first-child:last-child {
- margin: 0;
- }
- &:not([class*='round'])::after {
- border-radius: calc(#{$radius} * 2);
- }
- &:not([class*='border'])::after {
- // content: ' ';
- // width: 200%;
- // height: 200%;
- // display: block;
- // position: absolute;
- // z-index: 0;
- // top: 0;
- // left: 0;
- // transform: scale(0.5);
- // transform-origin: 0 0;
- // pointer-events: none;
- // box-sizing: border-box;
- display: none;
- }
- &.round::after {
- border-radius: #{$round-pill};
- }
- &.icon {
- padding: 0.8em 0.8em;
- }
-
- &.sm {
- font-size: 24rpx;
- }
-
- &.lg {
- font-size: 32rpx;
- }
-
- &.xl {
- font-size: 36rpx;
- }
-
- &.block {
- display: block;
- width: 100%;
- font-size: 32rpx;
- }
-
- &[disabled] {
- opacity: 0.6;
- }
-
- &.none-style {
- position: absolute;
- top: 0;
- left: 0;
- display: flex;
- width: 100%;
- height: 100%;
- background-color: transparent !important;
- }
-}
-
-.ui-btn:not(.icon) [class*='icon-'] {
- margin: 0 0.25em;
-}
diff --git a/acdr-ui/src/sheep/scss/style/_card.scss b/acdr-ui/src/sheep/scss/style/_card.scss
deleted file mode 100644
index fc07f9e7..00000000
--- a/acdr-ui/src/sheep/scss/style/_card.scss
+++ /dev/null
@@ -1,353 +0,0 @@
-/* ==================
- 卡片
- ==================== */
-
-.ui-cards {
- display: block;
- overflow: hidden;
- & .ui-btn.badge {
- top: 0;
- right: 0;
- height: 40rpx;
- padding: 0rpx 15rpx;
- font-size: 24rpx;
- }
- &.no-card > .ui-item {
- margin: 0rpx;
- border-radius: 0rpx;
- }
- & > .ui-item {
- display: block;
- margin: 30rpx;
- overflow: hidden;
- border-radius: 10rpx;
- }
- & > .ui-item.shadow-blur {
- overflow: initial;
- }
- .grid.grid-square {
- margin-bottom: -20rpx;
- }
- &.article {
- display: block;
- & > .ui-item {
- display: flex;
- align-items: flex-start;
- padding: 30rpx;
- background-color: var(--box-bg);
- }
- & > .time {
- padding: 30rpx 0 0 30rpx;
- }
- & > .ui-item .title {
- font-size: 30rpx;
- font-weight: 900;
- color: #333333;
- }
- & > .ui-item .content {
- flex: 1;
- }
- & > .ui-item > image {
- width: 240rpx;
- height: 6.4em;
- margin-left: 20rpx;
- border-radius: 6rpx;
- }
- & > .ui-item .content .desc {
- font-size: 12px;
- color: var(--text-c);
- }
- & > .ui-item .content .text-content {
- font-size: 28rpx;
- color: #888;
- }
- }
- &.case {
- .image {
- position: relative;
- image {
- display: block;
- width: 100%;
- }
- .ui-tag {
- position: absolute;
- top: 0;
- right: 0;
- }
- .ui-bar {
- position: absolute;
- bottom: 0;
- width: 100%;
- padding: 0rpx 30rpx;
- background-color: transparent;
- }
- .bg-black {
- position: absolute;
- bottom: 0;
- width: 100%;
- background-color: rgba(0, 0, 0, 0.6);
- }
- }
- &.no-card .image {
- margin: 30rpx 30rpx 0;
- overflow: hidden;
- border-radius: 10rpx;
- }
- }
- &.dynamic {
- display: block;
- & > .ui-item {
- display: block;
- overflow: hidden;
- & > .text-content {
- padding: 0 30rpx 0;
- margin-bottom: 20rpx;
- font-size: 30rpx;
- }
- & .square-img {
- width: 100%;
- height: 200rpx;
- border-radius: 6rpx;
- }
- & .only-img {
- width: 100%;
- height: 320rpx;
- border-radius: 6rpx;
- }
- }
- }
- &.goods {
- display: block;
- & > .ui-item {
- position: relative;
- display: flex;
- padding: 30rpx;
- background-color: var(--ui-BG);
- & + .ui-item {
- border-top: 1rpx solid #eeeeee;
- }
- .content {
- width: 410rpx;
- padding: 0rpx;
- }
- .title {
- height: 1.4em;
- overflow: hidden;
- font-size: 30rpx;
- font-weight: 900;
- line-height: 1.4;
- color: #333333;
- }
- }
- &.col-goods.col-twice {
- display: flex;
- flex-wrap: wrap;
- padding-bottom: 30rpx;
- & > .ui-item {
- width: calc(50% - 30rpx);
- margin: 20rpx 20rpx 0rpx 20rpx;
- .content {
- padding: 20rpx;
- }
- }
- & > .ui-item:nth-child(2n) {
- margin-left: 0rpx;
- }
- }
- &.col-goods > .ui-item {
- display: block;
- padding: 0rpx;
- border: 0px;
- .content {
- width: 100%;
- padding: 30rpx;
- }
- }
- &.no-card > .ui-item .content {
- width: 470rpx;
- padding: 0rpx;
- }
- &.no-card > .ui-item .title,
- &.col-goods > .ui-item .title {
- height: 3em;
- overflow: hidden;
- }
- & > .ui-item .text-linecut-2 {
- -webkit-line-clamp: 1;
- }
- &.no-card > .ui-item .text-linecut-2,
- &.col-goods > .ui-item .text-linecut-2 {
- height: 3.2em;
- line-height: 1.6em;
- -webkit-line-clamp: 2;
- }
- & > .ui-item > image {
- width: 200rpx;
- height: 200rpx;
- margin-right: 20rpx;
- border-radius: 6rpx;
- }
- &.no-card > .ui-item > image {
- width: 220rpx;
- height: 170rpx;
- }
- &.col-goods > .ui-item > image {
- display: block;
- width: 100%;
- height: 340rpx;
- border-bottom-right-radius: 0rpx;
- border-bottom-left-radius: 0rpx;
- }
- &.col-goods.col-twice > .ui-item > image {
- height: 236rpx;
- }
- }
- &.loan {
- display: block;
- & > .ui-item {
- position: relative;
- display: flex;
- padding: 30rpx 0 30rpx 30rpx;
- background-color: var(--box-bg);
-
- .content {
- width: 450rpx;
- padding: 0rpx;
- .tag-list {
- display: flex;
- flex-wrap: wrap;
- width: 450rpx;
- margin-top: 18rpx;
- font-size: 12px;
- }
- }
- .action {
- display: flex;
- flex: 1;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- }
- }
- }
- &.houses {
- display: block;
- & > .ui-item {
- position: relative;
- display: flex;
- padding: 20rpx;
- background-color: var(--box-bg);
- .image {
- width: 230rpx;
- height: 180rpx;
- margin-right: 20rpx;
- border-radius: 6rpx;
- }
- .content {
- width: 400rpx;
- padding: 0rpx;
- .tag-list {
- display: flex;
- flex-wrap: wrap;
- width: 400rpx;
- margin-top: 10rpx;
- font-size: 12px;
- .ui-item {
- height: 20px;
- line-height: 20px;
- }
- }
- }
- .action {
- display: flex;
- flex: 1;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- }
- }
- }
-
- &.product {
- display: flex;
- flex-wrap: wrap;
- padding-bottom: 30rpx;
- & > .ui-item {
- position: relative;
- width: calc(100% - 15rpx);
- margin: 20rpx 20rpx 0rpx 20rpx;
- background-color: var(--box-bg);
- box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
- // display: flex;
- // flex-wrap: wrap;
- .content {
- padding: 20rpx;
- // width: calc(100% - 345rpx);
- .text-cut {
- font-size: 16px;
- }
- }
- .image {
- display: block;
- width: 100%;
- height: 240rpx;
- border-radius: 6rpx 0 0 6rpx;
- }
- .ui-progress-tag {
- width: 4em;
- font-size: 12px;
- text-align: right;
- }
- .border-top {
- width: 100%;
- }
- .ui-tag {
- position: absolute;
- top: 0;
- left: 0;
- border-radius: 6rpx 0 6rpx 0;
- }
- }
- // & > .ui-item:nth-child(2n) {
- // margin-left: 0rpx;
- // }
- }
- &.shop {
- display: flex;
- flex-wrap: wrap;
- padding-bottom: 30rpx;
- & > .ui-item {
- width: calc(50% - 30rpx);
- padding: 20rpx;
- margin: 20rpx 20rpx 0rpx 20rpx;
- background-color: var(--box-bg);
- .content {
- margin-top: 15rpx;
- }
- .image {
- display: block;
- width: 100%;
- height: 285rpx;
- border-radius: 6rpx;
- }
- }
- & > .ui-item:nth-child(2n) {
- margin-left: 0rpx;
- }
- }
-
- &.orders .ui-item {
- margin-top: 30rpx;
- .address-box {
- position: relative;
- padding: 15rpx;
- margin: 0 30rpx 30rpx;
- border: 1px solid;
- border-color: var(--main-a);
- border-radius: 10px;
- .ui-form-group {
- min-height: 10px;
- }
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_code.scss b/acdr-ui/src/sheep/scss/style/_code.scss
deleted file mode 100644
index a56b601a..00000000
--- a/acdr-ui/src/sheep/scss/style/_code.scss
+++ /dev/null
@@ -1,55 +0,0 @@
-.ui-code {
- position: relative;
- z-index: 1;
- font-family: Monaco, Menlo, Consolas, 'Courier New';
- font-size: 90%;
- color: var(--ui-TC);
- .ui-rich-text {
- display: inline-block;
- }
-
- &.code {
- display: inline-block;
- padding: 0 10rpx;
- margin: 0 10rpx;
- line-height: 1.6;
- vertical-align: baseline;
- border-radius: $radius-sm;
- }
-
- &.pre {
- display: block;
- margin: 1em 0;
- line-height: 1.6;
- &.hasTitle {
- margin: 3.2em 0 1em;
- }
- // border-radius: $radius-sm;
- .ui-code-title {
- position: absolute;
- top: -2.2em;
- left: 0;
- color: var(--ui-TC-2);
- }
- .ui-rich-text {
- padding: 40rpx;
- word-break: break-all;
- word-wrap: break-word;
- white-space: pre-wrap;
- }
- .ui-scroll-view {
- &.ui-scroll {
- max-height: 500px;
- white-space: pre;
- }
- }
- .ui-copy-btn {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- padding: 0.8em;
- border-radius: 0 $radius-sm 0 $radius-sm;
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_flex.scss b/acdr-ui/src/sheep/scss/style/_flex.scss
deleted file mode 100644
index 1daa45b8..00000000
--- a/acdr-ui/src/sheep/scss/style/_flex.scss
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ==================
- 弹性布局
- ==================== */
-.flex {
- display: flex !important;
- &-sub {
- flex: 1 !important;
- }
- &-twice {
- flex: 2 !important;
- }
- &-treble {
- flex: 3 !important;
- }
- &-column {
- flex-direction: column !important;
- }
- &-row {
- flex-direction: row !important;
- }
- &-column-reverse {
- flex-direction: column-reverse !important;
- }
- &-row-reverse {
- flex-direction: row-reverse !important;
- }
- &-wrap {
- flex-wrap: wrap !important;
- }
- &-center {
- @include flex-center;
- }
- &-bar {
- @include flex-bar;
- }
-}
-.basis {
- @each $class, $value in (xs: 20%, sm: 40%, df: 50%, lg: 60%, xl: 80%) {
- &-#{$class} {
- flex-basis: $value !important;
- }
- }
-}
-.align {
- @each $class,
- $value
- in (start: flex-start, end: flex-end, center: center, stretch: stretch, baseline: baseline)
- {
- &-#{$class} {
- align-items: $value !important;
- }
- }
-}
-.self {
- @each $class,
- $value
- in (start: flex-start, end: flex-end, center: center, stretch: stretch, baseline: baseline)
- {
- &-#{$class} {
- align-self: $value !important;
- }
- }
-}
-.justify {
- @each $class,
- $value
- in (
- start: flex-start,
- end: flex-end,
- center: center,
- between: space-between,
- around: space-around
- )
- {
- &-#{$class} {
- justify-content: $value !important;
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_form.scss b/acdr-ui/src/sheep/scss/style/_form.scss
deleted file mode 100644
index 0fa37ece..00000000
--- a/acdr-ui/src/sheep/scss/style/_form.scss
+++ /dev/null
@@ -1,121 +0,0 @@
-/* ==================
- 表单
- ==================== */
-.ui-form-item {
- display: flex;
- align-items: center;
- justify-content: space-between;
- min-height: 100rpx;
- padding: 1rpx 24rpx;
- .title {
- position: relative;
- height: 60rpx;
- padding-right: 30rpx;
- font-size: 30rpx;
- line-height: 60rpx;
- text-align: justify;
- }
- .content {
- flex: 1;
- }
- input,
- ui-input {
- flex: 1;
- padding-right: 20rpx;
- font-size: 30rpx;
- color: #555;
- }
- text[class*='icon-'] {
- box-sizing: border-box;
- padding: 0;
- font-size: 36rpx;
- }
- textarea {
- flex: 1;
- width: 100%;
- height: 4.6em;
- padding: 0;
- margin: 32rpx 0 30rpx;
- font-size: 28rpx;
- line-height: 1.2em;
- }
- picker,
- .arrow {
- position: relative;
- flex: 1;
- padding-right: 40rpx;
- overflow: hidden;
- }
- picker .picker,
- .arrow > view {
- width: 100%;
- overflow: hidden;
- line-height: 100rpx;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- picker::after,
- .arrow::after {
- position: absolute;
- top: 0;
- right: -20rpx;
- bottom: 0;
- display: block;
- width: 60rpx;
- margin: auto;
- font-family: 'ui';
- font-size: 34rpx;
- line-height: 100rpx;
- color: #8799a3;
- text-align: center;
- content: '\e605';
- }
- textarea[disabled],
- textarea[disabled] .placeholder {
- color: transparent;
- }
- &.align-start .title {
- height: 1em;
- margin-top: 32rpx;
- line-height: 1em;
- }
- .grid-square {
- > view {
- background-color: #f8f8f8;
- border-radius: 12rpx;
- .mask {
- position: absolute;
- bottom: 0;
- width: 100%;
- padding: 6rpx 0;
- font-size: 20rpx;
- color: #ffffff;
- text-align: center;
- background-color: rgba(0, 0, 0, 0.6);
- &.red-mask {
- background-color: rgba(255, 80, 80, 0.6);
- }
- }
- [class*='icon'] {
- position: absolute;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: 100%;
- transform: scale(1.5);
- }
- .text-gray {
- position: absolute;
- bottom: 20rpx;
- width: 100%;
- font-size: 24rpx;
- text-align: center;
- }
- }
- }
-}
-.disabled {
- cursor: not-allowed !important;
- opacity: 0.6;
-}
diff --git a/acdr-ui/src/sheep/scss/style/_grid.scss b/acdr-ui/src/sheep/scss/style/_grid.scss
deleted file mode 100644
index b9b0ea95..00000000
--- a/acdr-ui/src/sheep/scss/style/_grid.scss
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ==================
- 栅栏
- ==================== */
-@use 'sass:math';
-
-@mixin make_col($screen) {
- @for $i from 1 through 12 {
- .ui-col-#{$screen}-#{$i} {
- width: calc(100% / 12 * #{$i});
- }
- .ui-cols-#{$screen}-#{$i} .ui-item {
- width: calc(100% / #{$i});
- }
- }
-}
-.ui-container {
- box-sizing: border-box;
- width: 100%;
- max-width: 1440px;
- padding-right: 30rpx;
- padding-left: 30rpx;
- margin-right: auto;
- margin-left: auto;
- &-fluid {
- max-width: 100%;
- padding-right: 0;
- padding-left: 0;
- }
-}
-.ui-grid {
- display: flex;
- flex-wrap: wrap;
- &.multi-column {
- display: block;
- column-count: 2;
- column-width: 0px;
- column-gap: 0px;
- > .ui-item {
- break-inside: avoid;
- padding: 0.001em;
- }
- }
- &.grid-square {
- overflow: hidden;
- > .ui-item {
- position: relative;
- margin-right: 20rpx;
- margin-bottom: 20rpx;
- overflow: hidden;
- }
- @for $i from 1 through 12 {
- &.ui-cols-#{$i} > .ui-item {
- width: calc((100% - #{20rpx * ($i - 1)}) / #{$i});
- height: 0;
- padding-bottom: calc((100% - #{20rpx * ($i - 1)}) / #{$i});
- }
- }
- @for $i from 1 through 12 {
- &.ui-cols-#{$i} > .ui-item:nth-child(#{$i}n) {
- margin-right: 0;
- }
- }
- }
-}
-@for $i from 1 through 12 {
- .ui-cols-#{$i} .ui-item {
- width: calc(100% / #{$i});
- }
-}
-@for $i from 1 through 12 {
- .ui-col-#{$i} {
- width: calc(100% / 12 * #{$i});
- }
-}
-// 小屏
-@media screen and (min-width: 0px) {
- @include make_col('xs');
-}
-
-// 小屏
-@media screen and (min-width: 320px) {
- @include make_col('sm');
-}
-
-// 中屏
-@media screen and (min-width: 768px) {
- @include make_col('md');
-}
-
-// 普通屏
-@media screen and (min-width: 1025px) {
- @include make_col('lg');
-}
-
-// 大屏
-@media screen and (min-width: 1440px) {
- @include make_col('xl');
-}
-
-// 超大屏
-@media screen and (min-width: 1920px) {
- @include make_col('xxl');
-}
diff --git a/acdr-ui/src/sheep/scss/style/_markdown.scss b/acdr-ui/src/sheep/scss/style/_markdown.scss
deleted file mode 100644
index bca7b70d..00000000
--- a/acdr-ui/src/sheep/scss/style/_markdown.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-.cu-markdown {
- position: relative;
- z-index: 1;
- &.selectable {
- cursor: auto;
- user-select: text;
- }
- inline {
- display: inline-block;
- }
-
- .list {
- .list-item {
- line-height: 1.8;
- .list {
- margin-left: 1.28571em;
- .ui-title {
- transform: scale(0.6);
- &:before {
- content: '\e716';
- }
- }
- }
- }
- .list-item-p {
- position: relative;
- padding-left: 1.5em;
- .list-item-t {
- position: absolute;
- left: 0;
- display: block;
- width: 1.3em;
- text-align: center;
- }
- }
- }
- .md-table + .md-table {
- margin-top: 30rpx;
- }
-}
-
-.paragraph {
- margin: 0 0 40rpx;
- line-height: 1.8;
-}
-
-.blockquote {
- @extend .paragraph;
- padding: 20rpx 30rpx;
- background: none repeat scroll 0 0 rgba(102, 128, 153, 0.05);
- border-color: var(--ui-Border);
- border-left-style: solid;
- border-left-width: 10rpx;
-
- .paragraph {
- margin-bottom: 30rpx;
- }
-
- .paragraph:last-child {
- margin-bottom: 0;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_menu.scss b/acdr-ui/src/sheep/scss/style/_menu.scss
deleted file mode 100644
index 6b33f718..00000000
--- a/acdr-ui/src/sheep/scss/style/_menu.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-.ui-menu {
- background-color: var(--ui-BG);
-}
-
-.ui-menu-item {
- position: relative;
- @include flex-bar;
- min-height: 4em;
- padding: 0 30rpx;
- .ui-menu-item-icon {
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 1.7em;
- margin-right: 0.3em;
- transform: scale(1.3);
- }
- .ui-menu-item-icon .ui-menu-item-image {
- display: inline-block;
- width: 1.2em;
- height: 1.2em;
- }
- .ui-menu-item-content {
- position: relative;
- flex: 1;
- @include flex-bar;
- }
- .ui-menu-item-arrow {
- width: 1.6em;
- color: var(--ui-TC-3);
- text-align: center;
- }
- &::after {
- position: absolute;
- top: 0;
- left: 30rpx;
- box-sizing: border-box;
- width: calc(200% - 120rpx);
- height: 200%;
- pointer-events: none;
- content: ' ';
- border-top: 1px solid var(--ui-Border);
- border-radius: inherit;
- transform: scale(1);
- transform-origin: 0 0;
- }
- &.first-item::after {
- display: none;
- }
- &:first-child::after {
- display: none;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_shadow.scss b/acdr-ui/src/sheep/scss/style/_shadow.scss
deleted file mode 100644
index ac65e3dc..00000000
--- a/acdr-ui/src/sheep/scss/style/_shadow.scss
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ==================
- 阴影
- ==================== */
-
-.shadow {
- box-shadow: var(--ui-Shadow);
- &-sm {
- box-shadow: var(--ui-Shadow-sm);
- }
- &-lg {
- box-shadow: var(--ui-Shadow-lg);
- }
- &-inset {
- box-shadow: var(--ui-Shadow-inset);
- }
- @each $color, $value in $colors {
- @at-root .shadow-#{$color} {
- box-shadow: 0 0.5em 1em rgba($value, var(--ui-Shadow-opacity));
- }
- &-sm.shadow-#{$color} {
- box-shadow: 0 0.125em 0.25em rgba($value, var(--ui-Shadow-opacity));
- }
- &-lg.shadow-#{$color} {
- box-shadow: 0 1em 3em rgba($value, var(--ui-Shadow-opacity-lg));
- }
- }
-
- &-warp {
- position: relative;
- }
- &-warp:before,
- &-warp:after {
- position: absolute;
- bottom: -10rpx;
- left: 20rpx;
- z-index: -1;
- width: calc(50% - #{40rpx});
- height: 30rpx;
- content: '';
- background-color: rgba(0, 0, 0, var(--ui-Shadow-opacity));
- filter: blur(20rpx);
- opacity: 0.5;
- transform: skew(0deg, -6deg);
- transform-origin: 50% 50%;
- }
- &-warp:after {
- right: 20rpx;
- left: auto;
- transform: skew(0deg, 6deg);
- }
- &-blur {
- position: relative;
- }
- &-blur::before {
- position: absolute;
- top: 0.5em;
- left: 0.5em;
- z-index: -1;
- display: block;
- width: 100%;
- height: 100%;
- content: '';
- background: inherit;
- filter: blur(20rpx);
- border-radius: inherit;
- opacity: var(--ui-Shadow-opacity-lg);
- transform: scale(1, 1);
- transform-origin: 0 0;
- }
-}
-.drop-shadow {
- filter: drop-shadow(0 0 30rpx rgba(0, 0, 0, 0.1));
- &-sm {
- filter: drop-shadow(0 4rpx 4rpx rgba(0, 0, 0, 0.06));
- }
- &-lg {
- filter: drop-shadow(0 30rpx 60rpx rgba(0, 0, 0, 0.2));
- }
- @each $color, $value in $colors {
- @at-root .drop-shadow-#{$color} {
- filter: drop-shadow(0 15rpx 15rpx rgba(darken($value, 10%), 0.3));
- }
- &-sm.drop-shadow-#{$color} {
- filter: drop-shadow(0 4rpx 4rpx rgba(darken($value, 10%), 0.3));
- }
- &-lg.drop-shadow-#{$color} {
- filter: drop-shadow(0 50rpx 100rpx rgba(darken($value, 10%), 0.2));
- }
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_table.scss b/acdr-ui/src/sheep/scss/style/_table.scss
deleted file mode 100644
index f38eac52..00000000
--- a/acdr-ui/src/sheep/scss/style/_table.scss
+++ /dev/null
@@ -1,133 +0,0 @@
-.ui-table {
- display: table;
- max-width: 100%;
- background-color: var(--ui-BG);
- &.table-full {
- width: 100%;
- }
- &.table-radius {
- border-radius: $radius;
- .ui-table-header {
- .ui-table-tr {
- border-top-left-radius: $radius;
- border-top-right-radius: $radius;
- }
- .ui-table-th {
- &:first-child {
- border-top-left-radius: $radius;
- }
- &:last-child {
- border-top-right-radius: $radius;
- }
- }
- }
- }
- .ui-table-header {
- display: table-header-group;
- .ui-table-th {
-
- padding: 1em 0.8em;
- font-weight: bold;
- white-space: nowrap;
- border-bottom: 1px solid var(--ui-Border);
- }
- }
-
- .ui-table-tr {
- z-index: 1;
- display: table-row;
- }
-
- .ui-table-body {
- position: relative;
- display: table-row-group;
- .ui-table-tr:hover {
- background-color: var(--ui-BG-1) !important;
- }
- .ui-table-loading {
- position: absolute !important;
- z-index: 2;
- display: flex;
- align-items: center;
- justify-content: center;
- width: 100%;
- height: 100%;
- min-height: 300px;
- border: 1px solid var(--ui-Border);
- }
- }
-
- .ui-table-td,
- .ui-table-th {
- display: table-cell;
- padding: 0.5em 0.8em;
- text-align: unset;
- // font-size: 90%;
- vertical-align: middle;
- }
-}
-
-.ui-table.table-border {
- &,
- & .ui-table-td,
- & .ui-table-th {
- position: relative;
- &::after {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1;
- box-sizing: border-box;
- width: 200%;
- height: 200%;
- pointer-events: none;
- content: ' ';
- border: 1px solid var(--ui-Border);
- border-radius: inherit;
- transform: scale(0.5);
- transform-origin: 0 0;
- }
- }
- .ui-table-td,
- .ui-table-th {
- &::after {
- border-width: 1px 1px 0 0;
- }
- &:last-child::after {
- border-right: none;
- }
- }
-}
-.ui-table.table-radius {
- &::after {
- border-radius: calc(#{$radius} * 2);
- }
- & .ui-table-tr .ui-table-th:first-child {
- border-top-left-radius: calc(#{$radius} * 2);
- }
- & .ui-table-tr .ui-table-th:last-child {
- border-top-right-radius: calc(#{$radius} * 2);
- }
- & .ui-table-tr:last-child .ui-table-td:first-child {
- border-bottom-left-radius: #{$radius};
- }
- & .ui-table-tr:last-child .ui-table-td:last-child {
- border-bottom-right-radius: #{$radius};
- }
-}
-.ui-table.table-striped > .ui-table-body > .ui-table-tr:nth-child(2n + 1),
-.ui-table.table-striped > .ui-table-body > .ui-table-tr:nth-child(2n + 1) {
- background-color: var(--ui-BG-1);
-}
-
-.table-responsive {
- box-sizing: border-box;
- width: inherit;
- max-width: 100%;
- height: 100%;
- overflow: hidden;
- .table-responsive-box {
- position: relative;
- overflow: hidden;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/style/_tag.scss b/acdr-ui/src/sheep/scss/style/_tag.scss
deleted file mode 100644
index e69de29b..00000000
diff --git a/acdr-ui/src/sheep/scss/style/_text.scss b/acdr-ui/src/sheep/scss/style/_text.scss
deleted file mode 100644
index 3085e650..00000000
--- a/acdr-ui/src/sheep/scss/style/_text.scss
+++ /dev/null
@@ -1,104 +0,0 @@
-/* ==================
- 文本
- ==================== */
-@use 'sass:math';
-.font-0 {
- font-size: 24rpx;
- --textSize: -4rpx;
-}
-.font-1 {
- font-size: 28rpx;
- --textSize: 0rpx;
-}
-.font-2 {
- font-size: 32rpx;
- --textSize: 4rpx;
-}
-.font-3 {
- font-size: 36rpx;
- --textSize: 8rpx;
-}
-.font-4 {
- font-size: 40rpx;
- --textSize: 12rpx;
-}
-.text {
- @each $class, $value in $fontsize {
- &-#{$class},
- &-#{math.div($value ,2)} {
- font-size: calc(#{$value}rpx + var(--textSize)) !important;
- }
- }
- &-cut {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- @at-root [class*='text-linecut'] {
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
- overflow: hidden;
- word-break: break-all;
- }
- @for $i from 2 through 10 {
- &-linecut-#{$i} {
- -webkit-line-clamp: #{$i};
- }
- }
- &-justify {
- text-align: justify;
- }
- &-justify-line {
- margin-top: 0.5em;
- line-height: 0.5em;
- text-align: justify;
- &::after {
- display: inline-block;
- width: 100%;
- content: '.';
- }
- }
-
- &-Abc {
- text-transform: Capitalize !important;
- }
- &-ABC {
- text-transform: Uppercase !important;
- }
- &-abc {
- text-transform: Lowercase !important;
- }
- &-del,
- &-line {
- text-decoration: line-through !important;
- }
- &-bottomline {
- text-decoration: underline !important;
- }
- &-italic {
- font-style: italic !important;
- }
- &-style-none {
- text-decoration: none !important;
- }
- &-break {
- word-break: break-word !important;
- overflow-wrap: break-word !important;
- }
- &-reset {
- color: inherit !important;
- }
- &-price::before {
- margin-right: 4rpx;
- font-size: 80%;
- content: '¥';
- }
- &-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/theme/_dark.scss b/acdr-ui/src/sheep/scss/theme/_dark.scss
deleted file mode 100644
index 33a6f931..00000000
--- a/acdr-ui/src/sheep/scss/theme/_dark.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-// 核心主题样式文件
-@mixin theme-dark {
- // 背景色
- --ui-BG: #393939;
- --ui-BG-1: #333333;
- --ui-BG-2: #2c2c2c;
- --ui-BG-3: #292929;
- --ui-BG-4: #222222;
-
- // 文本色
- --ui-TC: #ffffff;
- --ui-TC-1: #d4d4d4;
- --ui-TC-2: #919191;
- --ui-TC-3: #6a6a6a;
- --ui-TC-4: #474747;
-
- // 模糊
- --ui-Blur: rgba(38, 38, 38, 0.98);
- --ui-Blur-1: rgba(38, 38, 38, 0.75);
- --ui-Blur-2: rgba(38, 38, 38, 0.25);
- --ui-Blur-3: rgba(38, 38, 38, 0.05);
-
- // 边框
- --ui-Border: rgba(119, 119, 119, 0.25);
- --ui-Outline: rgba(255, 255, 255, 0.1);
- --ui-Line: rgba(119, 119, 119, 0.25);
-
- // 透明与阴影
- --ui-Shadow: 0 0.5em 1em rgba(0, 0, 0, 0.45);
- --ui-Shadow-sm: 0 0.125em 0.25em rgba(0, 0, 0, 0.475);
- --ui-Shadow-lg: 0 1em 3em rgba(0, 0, 0, 0.475);
- --ui-Shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.475);
- --ui-Shadow-opacity: 0.55;
- --ui-Shadow-opacity-sm: 0.175;
- --ui-Shadow-opacity-lg: 0.75;
- --ui-BG-opacity: 0.1;
-}
diff --git a/acdr-ui/src/sheep/scss/theme/_light.scss b/acdr-ui/src/sheep/scss/theme/_light.scss
deleted file mode 100644
index 6be36ea7..00000000
--- a/acdr-ui/src/sheep/scss/theme/_light.scss
+++ /dev/null
@@ -1,37 +0,0 @@
-// 核心主题样式文件
-@mixin theme-light {
- // 背景色
- --ui-BG: #ffffff;
- --ui-BG-1: #f6f6f6;
- --ui-BG-2: #f1f1f1;
- --ui-BG-3: #e8e8e8;
- --ui-BG-4: #e0e0e0;
-
- // 文本色
- --ui-TC: #303030;
- --ui-TC-1: #525252;
- --ui-TC-2: #777777;
- --ui-TC-3: #9e9e9e;
- --ui-TC-4: #c6c6c6;
-
- // 模糊
- --ui-Blur: rgba(255, 255, 255, 0.98);
- --ui-Blur-1: rgba(255, 255, 255, 0.75);
- --ui-Blur-2: rgba(255, 255, 255, 0.25);
- --ui-Blur-3: rgba(255, 255, 255, 0.05);
-
- // 边框
- --ui-Border: rgba(119, 119, 119, 0.25);
- --ui-Outline: rgba(0, 0, 0, 0.1);
- --ui-Line: rgba(119, 119, 119, 0.25);
-
- // 透明与阴影
- --ui-Shadow: 0 0.5em 1em rgba(0, 0, 0, 0.15);
- --ui-Shadow-sm: 0 0.125em 0.25em rgba(0, 0, 0, 0.075);
- --ui-Shadow-lg: 0 1em 3em rgba(0, 0, 0, 0.175);
- --ui-Shadow-inset: inset 0 0.1em 0.2em rgba(0, 0, 0, 0.075);
- --ui-Shadow-opacity: 0.45;
- --ui-Shadow-opacity-sm: 0.075;
- --ui-Shadow-opacity-lg: 0.65;
- --ui-BG-opacity: 0.1;
-}
diff --git a/acdr-ui/src/sheep/scss/theme/_style.scss b/acdr-ui/src/sheep/scss/theme/_style.scss
deleted file mode 100644
index f879b9f2..00000000
--- a/acdr-ui/src/sheep/scss/theme/_style.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-@import './light'; //浅蓝主题
-@import './dark'; //深蓝主题
-// 多主题
-.theme-light {
- @include theme-light;
-}
-.theme-dark {
- @include theme-dark;
-}
-.theme-auto {
- @include theme-light;
-}
-@media (prefers-color-scheme: dark) {
- .theme-auto {
- @include theme-dark;
- }
-}
-
-@each $value in ('', '-1', '-2', '-3', '-4') {
- // 背景色 + 文字色 : 白色 + 默认色;
- .ui-BG#{$value} {
- color: var(--ui-TC);
- background-color: var(--ui-BG#{$value}) !important;
- }
- // 文字颜色
- .ui-TC#{$value} {
- color: var(--ui-TC#{$value}) !important;
- }
- // 主题色背景
- .ui-BG-Main#{$value} {
- color: var(--ui-BG-Main-TC) !important;
- background-color: var(--ui-BG-Main#{$value}) !important;
- }
- // 主题色渐变,横向
- .ui-BG-Main-Gradient {
- color: var(--ui-BG-Main-TC) !important;
- background: linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient)) !important;
- }
- // 主题色文字
- .ui-TC-Main#{$value} {
- color: var(--ui-BG-Main#{$value}) !important;
- }
- // 主题色阴影
- .ui-Shadow-Main {
- box-shadow: var(--ui-Main-box-shadow) !important;
- }
- .ui-BG-Main-light {
- color: var(--ui-BG-Main#{$value}) !important;
- background: var(----ui-BG-Main-light) !important;
- }
-}
-
-@each $color, $value in $colors {
- .main-#{$color} {
- --ui-BG-Main: #{$value};
- --ui-BG-Main-tag: #{rgba($value, 0.05)};
- --ui-BG-Main-gradient: #{rgba($value, 0.6)};
- --ui-BG-Main-light: #{rgba($value, 0.2)};
- --ui-BG-Main-opacity-1: #{rgba($value, 0.1)};
- --ui-BG-Main-opacity-4: #{rgba($value, 0.4)};
- --ui-Main-box-shadow: 0 0.2em 0.5em #{rgba($value, var(--ui-Shadow-opacity))};
- --ui-BG-Main-1: #{mix(rgba(255, 255, 255, 0.7), desaturate($value, 20%), 10%)};
- --ui-BG-Main-2: #{mix(rgba(255, 255, 255, 0.6), desaturate($value, 40%), 20%)};
- --ui-BG-Main-3: #{mix(rgba(119, 119, 119, 0.2), desaturate($value, 40%), 40%)};
- --ui-BG-Main-4: #{mix(rgba(119, 119, 119, 0.1), desaturate($value, 40%), 60%)};
- --ui-BG-Main-TC: #ffffff !important;
- }
-}
diff --git a/acdr-ui/src/sheep/scss/ui.scss b/acdr-ui/src/sheep/scss/ui.scss
deleted file mode 100644
index b9b73811..00000000
--- a/acdr-ui/src/sheep/scss/ui.scss
+++ /dev/null
@@ -1,19 +0,0 @@
-@import './theme/style'; //系统主题
-@import './main'; //主样式*
-
-@import './style/background'; //背景
-@import './style/grid'; //列
-@import './style/flex'; //布局
-@import './style/border'; //边框
-@import './style/text'; //文本
-@import './style/shadow'; //阴影
-@import './icon/style'; //图标
-@import './style/tag'; //标签
-@import './style/button'; //按钮
-@import './style/avatar'; //头像
-@import './style/table'; //表格
-@import './style/code'; //代码片段
-@import './style/form'; //表单
-@import './style/menu'; //表单
-@import './style/markdown'; //表单
-@import './style/card'; //表单
diff --git a/acdr-ui/src/sheep/store/app.js b/acdr-ui/src/sheep/store/app.js
deleted file mode 100644
index 08c72bf6..00000000
--- a/acdr-ui/src/sheep/store/app.js
+++ /dev/null
@@ -1,134 +0,0 @@
-import DiyApi from '@/sheep/api/promotion/diy'
-import { defineStore } from 'pinia'
-import $platform from '@/sheep/platform'
-import $router from '@/sheep/router'
-import user from './user'
-import sys from './sys'
-
-const app = defineStore({
- id: 'app',
- state: () => ({
- info: {
- // 应用信息
- name: '', // 商城名称
- logo: '', // logo
- version: '', // 版本号
- copyright: '', // 版权信息 I
- copytime: '', // 版权信息 II
-
- cdnurl: '', // 云存储域名
- filesystem: '', // 云存储平台
- },
- platform: {
- share: {
- methods: [], // 支持的分享方式
- forwardInfo: {}, // 默认转发信息
- posterInfo: {}, // 海报信息
- linkAddress: '', // 复制链接地址
- },
- bind_mobile: 0, // 登陆后绑定手机号提醒 (弱提醒,可手动关闭)
- },
- template: {
- // 店铺装修模板
- basic: {}, // 基本信息
- home: {
- // 首页模板
- style: {},
- data: [],
- },
- user: {
- // 个人中心模板
- style: {},
- data: [],
- },
- },
- shareInfo: {}, // 全局分享信息
- has_wechat_trade_managed: 0, // 小程序发货信息管理 0 没有 || 1 有
- }),
- actions: {
- // 获取Shopro应用配置和模板
- async init(templateId = null) {
- // 检查网络
- const networkStatus = await $platform.checkNetwork()
- if (!networkStatus) {
- $router.error('NetworkError')
- }
-
- // 加载装修配置
- await adaptTemplate(this.template, templateId)
-
- // TODO 芋艿:未来支持管理后台可配;对应 https://api.shopro.sheepjs.com/shop/api/init
- if (true) {
- this.info = {
- name: '芋道商城',
- logo: 'https://static.iocoder.cn/ruoyi-vue-pro-logo.png',
- version: '2.2.0',
- copyright: '全部开源,个人与企业可 100% 免费使用',
- copytime: 'Copyright© 2018-2024',
-
- cdnurl: 'https://file.sheepjs.com', // 云存储域名
- filesystem: 'qcloud', // 云存储平台
- }
- this.platform = {
- share: {
- methods: ['poster', 'link'],
- linkAddress: 'http://127.0.0.1:3000', // TODO 芋艿:可以考虑改到 .env 那
- posterInfo: {
- user_bg: '/static/img/shop/config/user-poster-bg.png',
- goods_bg: '/static/img/shop/config/goods-poster-bg.png',
- groupon_bg: '/static/img/shop/config/groupon-poster-bg.png',
- },
- },
- bind_mobile: 0,
- }
- this.has_wechat_trade_managed = 0
-
- // 加载主题
- const sysStore = sys()
- sysStore.setTheme()
-
- // 模拟用户登录
- const userStore = user()
- if (userStore.isLogin) {
- userStore.loginAfter()
- }
- return Promise.resolve(true)
- } else {
- $router.error('InitError', res.msg || '加载失败')
- }
- },
- },
- persist: {
- enabled: true,
- strategies: [
- {
- key: 'app-store',
- },
- ],
- },
-})
-
-// todo: @owen 先做数据适配,后期重构
-const adaptTemplate = async (appTemplate, templateId) => {
- const { data: diyTemplate } = templateId
- ? // 查询指定模板,一般是预览时使用
- await DiyApi.getDiyTemplate(templateId)
- : await DiyApi.getUsedDiyTemplate()
- // 模板不存在
- if (!diyTemplate) {
- $router.error('TemplateError')
- return
- }
-
- const tabBar = diyTemplate?.property?.tabBar
- if (tabBar) {
- appTemplate.basic.tabbar = tabBar
- if (tabBar?.theme) {
- appTemplate.basic.theme = tabBar?.theme
- }
- }
- appTemplate.home = diyTemplate?.home
- appTemplate.user = diyTemplate?.user
-}
-
-export default app
diff --git a/acdr-ui/src/sheep/store/cart.js b/acdr-ui/src/sheep/store/cart.js
deleted file mode 100644
index faa25b49..00000000
--- a/acdr-ui/src/sheep/store/cart.js
+++ /dev/null
@@ -1,112 +0,0 @@
-import { defineStore } from 'pinia'
-import CartApi from '@/sheep/api/trade/cart'
-
-const cart = defineStore({
- id: 'cart',
- state: () => ({
- list: [], // 购物车列表
- selectedIds: [], // 已选列表
- isAllSelected: false, // 是否全选
- totalPriceSelected: 0, // 选中项总金额
- }),
- actions: {
- // 获取购物车列表
- async getList() {
- const { data, code } = await CartApi.getCartList()
- if (code === 0) {
- this.list = data.validList
-
- // 计算各种关联属性
- this.selectedIds = []
- this.isAllSelected = true
- this.totalPriceSelected = 0
- this.list.forEach((item) => {
- if (item.selected) {
- this.selectedIds.push(item.id)
- this.totalPriceSelected += item.count * item.sku.price
- } else {
- this.isAllSelected = false
- }
- })
- }
- },
-
- // 添加购物车
- async add(goodsInfo) {
- // 添加购物项
- const { code } = await CartApi.addCart({
- skuId: goodsInfo.id,
- count: goodsInfo.goods_num,
- })
- // 刷新购物车列表
- if (code === 0) {
- await this.getList()
- }
- },
-
- // 更新购物车
- async update(goodsInfo) {
- const { code } = await CartApi.updateCartCount({
- id: goodsInfo.goods_id,
- count: goodsInfo.goods_num,
- })
- if (code === 0) {
- await this.getList()
- }
- },
-
- // 移除购物车
- async delete(ids) {
- let idsTemp = ''
- if (Array.isArray(ids)) {
- idsTemp = ids.join(',')
- } else {
- idsTemp = ids
- }
- const { code } = await CartApi.deleteCart(idsTemp)
- if (code === 0) {
- await this.getList()
- }
- },
-
- // 单选购物车商品
- async selectSingle(goodsId) {
- const { code } = await CartApi.updateCartSelected({
- ids: [goodsId],
- selected: !this.selectedIds.includes(goodsId), // 取反
- })
- if (code === 0) {
- await this.getList()
- }
- },
-
- // 全选购物车商品
- async selectAll(flag) {
- const { code } = await CartApi.updateCartSelected({
- ids: this.list.map((item) => item.id),
- selected: flag,
- })
- if (code === 0) {
- await this.getList()
- }
- },
-
- // 清空购物车。注意,仅用于用户退出时,重置数据
- emptyList() {
- this.list = []
- this.selectedIds = []
- this.isAllSelected = true
- this.totalPriceSelected = 0
- },
- },
- persist: {
- enabled: true,
- strategies: [
- {
- key: 'cart-store',
- },
- ],
- },
-})
-
-export default cart
diff --git a/acdr-ui/src/sheep/store/index.js b/acdr-ui/src/sheep/store/index.js
deleted file mode 100644
index ddebc020..00000000
--- a/acdr-ui/src/sheep/store/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { createPinia } from 'pinia'
-import piniaPersist from 'pinia-plugin-persist-uni'
-
-// 自动注入所有pinia模块
-const files = import.meta.glob('./*.js', { eager: true })
-const modules = {}
-Object.keys(files).forEach((key) => {
- modules[key.replace(/(.*\/)*([^.]+).*/gi, '$2')] = files[key].default
-})
-
-export const setupPinia = (pinia) => {
- pinia.use(piniaPersist)
-}
-
-export default (name) => {
- return modules[name]()
-}
diff --git a/acdr-ui/src/sheep/store/modal.js b/acdr-ui/src/sheep/store/modal.js
deleted file mode 100644
index 5e4f7baf..00000000
--- a/acdr-ui/src/sheep/store/modal.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { defineStore } from 'pinia'
-
-const modal = defineStore({
- id: 'modal',
- state: () => ({
- auth: '', // 授权弹框 accountLogin|smsLogin|resetPassword|changeMobile|changePassword|changeUsername
- share: false, // 分享弹框
- menu: false, // 快捷菜单弹框
- advHistory: [], // 广告弹框记录
- lastTimer: {
- // 短信验证码计时器,为了防止刷新请求做了持久化
- smsLogin: 0,
- changeMobile: 0,
- resetPassword: 0,
- changePassword: 0,
- },
- }),
- persist: {
- enabled: true,
- strategies: [
- {
- key: 'modal-store',
- paths: ['lastTimer', 'advHistory'],
- },
- ],
- },
-})
-
-export default modal
diff --git a/acdr-ui/src/sheep/store/sys.js b/acdr-ui/src/sheep/store/sys.js
deleted file mode 100644
index 0f7e4b55..00000000
--- a/acdr-ui/src/sheep/store/sys.js
+++ /dev/null
@@ -1,32 +0,0 @@
-import { defineStore } from 'pinia'
-import app from './app'
-
-const sys = defineStore({
- id: 'sys',
- state: () => ({
- theme: '', // 主题,
- mode: 'light', // 明亮模式、暗黑模式(暂未支持)
- modeAuto: false, // 跟随系统
- fontSize: 1, // 设置默认字号等级(0-4)
- }),
- getters: {},
- actions: {
- setTheme(theme = '') {
- if (theme === '') {
- this.theme = app().template?.basic.theme || 'orange'
- } else {
- this.theme = theme
- }
- },
- },
- persist: {
- enabled: true,
- strategies: [
- {
- key: 'sys-store',
- },
- ],
- },
-})
-
-export default sys
diff --git a/acdr-ui/src/sheep/store/user.js b/acdr-ui/src/sheep/store/user.js
deleted file mode 100644
index d8d80cd8..00000000
--- a/acdr-ui/src/sheep/store/user.js
+++ /dev/null
@@ -1,165 +0,0 @@
-import { defineStore } from 'pinia'
-import $share from '@/sheep/platform/share'
-import { clone, cloneDeep } from 'lodash-es'
-import cart from './cart'
-import app from './app'
-import { showAuthModal } from '@/sheep/hooks/useModal'
-import UserApi from '@/sheep/api/member/user'
-import PayWalletApi from '@/sheep/api/pay/wallet'
-import OrderApi from '@/sheep/api/trade/order'
-import CouponApi from '@/sheep/api/promotion/coupon'
-
-// 默认用户信息
-const defaultUserInfo = {
- avatar: '', // 头像
- nickname: '', // 昵称
- gender: 0, // 性别
- mobile: '', // 手机号
- point: 0, // 积分
-}
-
-// 默认钱包信息
-const defaultUserWallet = {
- balance: 0, // 余额
-}
-
-// 默认订单、优惠券等其他资产信息
-const defaultNumData = {
- unusedCouponCount: 0,
- orderCount: {
- allCount: 0,
- unpaidCount: 0,
- undeliveredCount: 0,
- deliveredCount: 0,
- uncommentedCount: 0,
- afterSaleCount: 0,
- },
-}
-
-const user = defineStore({
- id: 'user',
- state: () => ({
- userInfo: clone(defaultUserInfo), // 用户信息
- userWallet: clone(defaultUserWallet), // 用户钱包信息
- isLogin: !!uni.getStorageSync('token'), // 登录状态
- numData: cloneDeep(defaultNumData), // 用户其他数据
- lastUpdateTime: 0, // 上次更新时间
- }),
-
- actions: {
- // 获取用户信息
- async getInfo() {
- const { code, data } = await UserApi.getUserInfo()
- if (code !== 0) {
- return
- }
- this.userInfo = data
- return Promise.resolve(data)
- },
-
- // 获得用户钱包
- async getWallet() {
- const { code, data } = await PayWalletApi.getPayWallet()
- if (code !== 0) {
- return
- }
- this.userWallet = data
- },
-
- // 获取订单、优惠券等其他资产信息
- getNumData() {
- OrderApi.getOrderCount().then((res) => {
- if (res.code === 0) {
- this.numData.orderCount = res.data
- }
- })
- CouponApi.getUnusedCouponCount().then((res) => {
- if (res.code === 0) {
- this.numData.unusedCouponCount = res.data
- }
- })
- },
-
- // 设置 token
- setToken(token = '', refreshToken = '') {
- if (token === '') {
- this.isLogin = false
- uni.removeStorageSync('token')
- uni.removeStorageSync('refresh-token')
- } else {
- this.isLogin = true
- uni.setStorageSync('token', token)
- uni.setStorageSync('refresh-token', refreshToken)
- this.loginAfter()
- }
- return this.isLogin
- },
-
- // 更新用户相关信息 (手动限流,5 秒之内不刷新)
- async updateUserData() {
- if (!this.isLogin) {
- this.resetUserData()
- return
- }
- // 防抖,5 秒之内不刷新
- const nowTime = new Date().getTime()
- if (this.lastUpdateTime + 5000 > nowTime) {
- return
- }
- this.lastUpdateTime = nowTime
-
- // 获取最新信息
- await this.getInfo()
- this.getWallet()
- this.getNumData()
- return this.userInfo
- },
-
- // 重置用户默认数据
- resetUserData() {
- // 清空 token
- this.setToken()
- // 清空用户相关的缓存
- this.userInfo = clone(defaultUserInfo)
- this.userWallet = clone(defaultUserWallet)
- this.numData = cloneDeep(defaultNumData)
- // 清空购物车的缓存
- cart().emptyList()
- },
-
- // 登录后,加载各种信息
- // TODO 芋艿:整理下;
- async loginAfter() {
- await this.updateUserData()
-
- // 加载购物车
- cart().getList()
- // 登录后设置全局分享参数
- $share.getShareInfo()
-
- // 提醒绑定手机号
- if (app().platform.bind_mobile && !this.userInfo.mobile) {
- showAuthModal('changeMobile')
- }
-
- // 绑定推广员
- $share.bindBrokerageUser()
- },
-
- // 登出系统
- async logout() {
- this.resetUserData()
- return !this.isLogin
- },
- },
- persist: {
- enabled: true,
- strategies: [
- {
- key: 'user-store',
- },
- ],
- },
-})
-
-export default user
diff --git a/acdr-ui/src/sheep/ui/su-coupon/su-coupon.vue b/acdr-ui/src/sheep/ui/su-coupon/su-coupon.vue
deleted file mode 100644
index 9a7010c1..00000000
--- a/acdr-ui/src/sheep/ui/su-coupon/su-coupon.vue
+++ /dev/null
@@ -1,320 +0,0 @@
-
-
-
-
-
-
- {{ type === 'reduce' ? value : Number(value) }}
- {{ type === 'reduce' ? '元' : '折' }}
-
- {{ props.title }}
-
-
-
-
-
-
-
-
-
-
-
-
- {{ type === 'reduce' ? value : Number(value) }}
- {{ type === 'reduce' ? '元' : '折' }}
-
-
- {{ props.title }}
- 仅剩:{{ props.surplus }}张
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ type === 'reduce' ? value : Number(value) }}
- {{ type === 'reduce' ? '元' : '折' }}
-
-
- {{ props.title }}
- 有效期:{{ props.sellBy }}
-
-
-
-
-
-
- 仅剩:{{ props.surplus }}张
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-data-checkbox/su-data-checkbox.vue b/acdr-ui/src/sheep/ui/su-data-checkbox/su-data-checkbox.vue
deleted file mode 100644
index 99866231..00000000
--- a/acdr-ui/src/sheep/ui/su-data-checkbox/su-data-checkbox.vue
+++ /dev/null
@@ -1,893 +0,0 @@
-
-
-
-
-
- {{ mixinDatacomErrorMessage }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-dialog/su-dialog.vue b/acdr-ui/src/sheep/ui/su-dialog/su-dialog.vue
deleted file mode 100644
index 84ac0ce1..00000000
--- a/acdr-ui/src/sheep/ui/su-dialog/su-dialog.vue
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-fixed/su-fixed.vue b/acdr-ui/src/sheep/ui/su-fixed/su-fixed.vue
deleted file mode 100644
index edd3cde9..00000000
--- a/acdr-ui/src/sheep/ui/su-fixed/su-fixed.vue
+++ /dev/null
@@ -1,218 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-image/su-image.vue b/acdr-ui/src/sheep/ui/su-image/su-image.vue
deleted file mode 100644
index c1a4721c..00000000
--- a/acdr-ui/src/sheep/ui/su-image/su-image.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-inner-navbar/su-inner-navbar.vue b/acdr-ui/src/sheep/ui/su-inner-navbar/su-inner-navbar.vue
deleted file mode 100644
index e0e298cd..00000000
--- a/acdr-ui/src/sheep/ui/su-inner-navbar/su-inner-navbar.vue
+++ /dev/null
@@ -1,365 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ title }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-navbar/su-navbar.vue b/acdr-ui/src/sheep/ui/su-navbar/su-navbar.vue
deleted file mode 100644
index 7390123f..00000000
--- a/acdr-ui/src/sheep/ui/su-navbar/su-navbar.vue
+++ /dev/null
@@ -1,485 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-notice-bar/su-notice-bar.vue b/acdr-ui/src/sheep/ui/su-notice-bar/su-notice-bar.vue
deleted file mode 100644
index 4f54448a..00000000
--- a/acdr-ui/src/sheep/ui/su-notice-bar/su-notice-bar.vue
+++ /dev/null
@@ -1,475 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ text }}
-
-
-
-
-
- {{ moreText }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-number-box/su-number-box.vue b/acdr-ui/src/sheep/ui/su-number-box/su-number-box.vue
deleted file mode 100644
index 81e1cde9..00000000
--- a/acdr-ui/src/sheep/ui/su-number-box/su-number-box.vue
+++ /dev/null
@@ -1,226 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-popover/su-popover.vue b/acdr-ui/src/sheep/ui/su-popover/su-popover.vue
deleted file mode 100644
index f24c8237..00000000
--- a/acdr-ui/src/sheep/ui/su-popover/su-popover.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-
-
-
-
-
-
-
-
- {{ tips }}
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-popup/keypress.js b/acdr-ui/src/sheep/ui/su-popup/keypress.js
deleted file mode 100644
index 4158b848..00000000
--- a/acdr-ui/src/sheep/ui/su-popup/keypress.js
+++ /dev/null
@@ -1,45 +0,0 @@
-// #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/acdr-ui/src/sheep/ui/su-popup/su-popup.vue b/acdr-ui/src/sheep/ui/su-popup/su-popup.vue
deleted file mode 100644
index 701e73bc..00000000
--- a/acdr-ui/src/sheep/ui/su-popup/su-popup.vue
+++ /dev/null
@@ -1,589 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-progress/su-progress.vue b/acdr-ui/src/sheep/ui/su-progress/su-progress.vue
deleted file mode 100644
index d725386c..00000000
--- a/acdr-ui/src/sheep/ui/su-progress/su-progress.vue
+++ /dev/null
@@ -1,202 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- {{ percentage }}%
-
-
-
-
- {{ percentage }}%
-
-
-
-
-
- {{ percentage }}%
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-radio/su-radio.vue b/acdr-ui/src/sheep/ui/su-radio/su-radio.vue
deleted file mode 100644
index d95af98b..00000000
--- a/acdr-ui/src/sheep/ui/su-radio/su-radio.vue
+++ /dev/null
@@ -1,302 +0,0 @@
-
-
-
-
-
-
-
- {{ label }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-region-picker/su-region-picker.vue b/acdr-ui/src/sheep/ui/su-region-picker/su-region-picker.vue
deleted file mode 100644
index ebae4b32..00000000
--- a/acdr-ui/src/sheep/ui/su-region-picker/su-region-picker.vue
+++ /dev/null
@@ -1,245 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ province.name }}
-
-
-
-
- {{ city.name }}
-
-
-
-
- {{ district.name }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-status-bar/su-status-bar.vue b/acdr-ui/src/sheep/ui/su-status-bar/su-status-bar.vue
deleted file mode 100644
index c4212e27..00000000
--- a/acdr-ui/src/sheep/ui/su-status-bar/su-status-bar.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-sticky/su-sticky.vue b/acdr-ui/src/sheep/ui/su-sticky/su-sticky.vue
deleted file mode 100644
index 3084ec22..00000000
--- a/acdr-ui/src/sheep/ui/su-sticky/su-sticky.vue
+++ /dev/null
@@ -1,267 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-subline/su-subline.vue b/acdr-ui/src/sheep/ui/su-subline/su-subline.vue
deleted file mode 100644
index 40ecb5a2..00000000
--- a/acdr-ui/src/sheep/ui/su-subline/su-subline.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-swiper/su-swiper.vue b/acdr-ui/src/sheep/ui/su-swiper/su-swiper.vue
deleted file mode 100644
index 600eb1b6..00000000
--- a/acdr-ui/src/sheep/ui/su-swiper/su-swiper.vue
+++ /dev/null
@@ -1,503 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ state.cur + 1 }} / {{ props.list.length }}
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-switch/su-switch.vue b/acdr-ui/src/sheep/ui/su-switch/su-switch.vue
deleted file mode 100644
index 91806c4b..00000000
--- a/acdr-ui/src/sheep/ui/su-switch/su-switch.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tab-item/su-tab-item.vue b/acdr-ui/src/sheep/ui/su-tab-item/su-tab-item.vue
deleted file mode 100644
index b76bc51f..00000000
--- a/acdr-ui/src/sheep/ui/su-tab-item/su-tab-item.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
- {{ props.data.title }}
-
-
- {{ props.data.tag }}
-
-
- {{ props.data.subtitle }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tab/su-tab.vue b/acdr-ui/src/sheep/ui/su-tab/su-tab.vue
deleted file mode 100644
index 8c83bfe4..00000000
--- a/acdr-ui/src/sheep/ui/su-tab/su-tab.vue
+++ /dev/null
@@ -1,462 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tabbar-item/su-tabbar-item.vue b/acdr-ui/src/sheep/ui/su-tabbar-item/su-tabbar-item.vue
deleted file mode 100644
index a744b8af..00000000
--- a/acdr-ui/src/sheep/ui/su-tabbar-item/su-tabbar-item.vue
+++ /dev/null
@@ -1,234 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ text }}
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tabbar/su-tabbar.vue b/acdr-ui/src/sheep/ui/su-tabbar/su-tabbar.vue
deleted file mode 100644
index e5c67ccd..00000000
--- a/acdr-ui/src/sheep/ui/su-tabbar/su-tabbar.vue
+++ /dev/null
@@ -1,228 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tabs-item/props.js b/acdr-ui/src/sheep/ui/su-tabs-item/props.js
deleted file mode 100644
index 70902b06..00000000
--- a/acdr-ui/src/sheep/ui/su-tabs-item/props.js
+++ /dev/null
@@ -1,3 +0,0 @@
-export default {
- props: {},
-}
diff --git a/acdr-ui/src/sheep/ui/su-tabs-item/su-tabs-item.vue b/acdr-ui/src/sheep/ui/su-tabs-item/su-tabs-item.vue
deleted file mode 100644
index f8cffec8..00000000
--- a/acdr-ui/src/sheep/ui/su-tabs-item/su-tabs-item.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue b/acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue
deleted file mode 100644
index b5ba54ce..00000000
--- a/acdr-ui/src/sheep/ui/su-tabs/su-tabs.vue
+++ /dev/null
@@ -1,434 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ item[keyName] }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-time-line/su-time-line.vue b/acdr-ui/src/sheep/ui/su-time-line/su-time-line.vue
deleted file mode 100644
index ee42604f..00000000
--- a/acdr-ui/src/sheep/ui/su-time-line/su-time-line.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-timeline-item/su-timeline-item.vue b/acdr-ui/src/sheep/ui/su-timeline-item/su-timeline-item.vue
deleted file mode 100644
index 4ba386b8..00000000
--- a/acdr-ui/src/sheep/ui/su-timeline-item/su-timeline-item.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-toolbar/su-toolbar.vue b/acdr-ui/src/sheep/ui/su-toolbar/su-toolbar.vue
deleted file mode 100644
index 6a3b8926..00000000
--- a/acdr-ui/src/sheep/ui/su-toolbar/su-toolbar.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-
-
-
-
- {{ cancelText }}
-
-
- {{ title }}
-
-
- {{ confirmText }}
-
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/ui/su-video/su-video.vue b/acdr-ui/src/sheep/ui/su-video/su-video.vue
deleted file mode 100644
index 35872bbe..00000000
--- a/acdr-ui/src/sheep/ui/su-video/su-video.vue
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-
-
-
-
-
diff --git a/acdr-ui/src/sheep/url/index.js b/acdr-ui/src/sheep/url/index.js
deleted file mode 100644
index e7a4c2c2..00000000
--- a/acdr-ui/src/sheep/url/index.js
+++ /dev/null
@@ -1,199 +0,0 @@
-import $store from '@/sheep/store'
-import { staticUrl } from '@/sheep/config'
-
-const cdn = (url = '', cdnurl = '') => {
- if (!url) return ''
- if (url.indexOf('http') === 0) {
- return url
- }
- if (cdnurl === '') {
- cdnurl = $store('app').info.cdnurl
- }
- return cdnurl + url
-}
-export default {
- // 添加cdn域名前缀
- cdn,
- // 对象存储自动剪裁缩略图
- thumb: (url = '', params) => {
- url = cdn(url)
- return append_thumbnail_params(url, params)
- },
- // 静态资源地址
- static: (url = '', staticurl = '') => {
- if (staticurl === '') {
- staticurl = staticUrl
- }
- if (staticurl !== 'local') {
- url = cdn(url, staticurl)
- }
- return url
- },
- // css背景图片地址
- css: (url = '', staticurl = '') => {
- if (staticurl === '') {
- staticurl = staticUrl
- }
- if (staticurl !== 'local') {
- url = cdn(url, staticurl)
- }
- // #ifdef APP-PLUS
- if (staticurl === 'local') {
- url = plus.io.convertLocalFileSystemURL(url)
- }
- // #endif
- return `url(${url})`
- },
-}
-
-/**
- * 追加对象存储自动裁剪/压缩参数
- *
- * @return string
- */
-function append_thumbnail_params(url, params) {
- const filesystem = $store('app').info.filesystem
- if (filesystem === 'public') {
- return url
- }
- const width = params.width || '200' // 宽度
- const height = params.height || '200' // 高度
- let mode = params.mode || 'lfit' // 缩放模式
- const quality = params.quality || 90 // 压缩质量
- const gravity = params.gravity || 'center' // 剪裁质量
- let suffix = ''
- let crop_str = ''
- let quality_str = ''
- let size = width + 'x' + height
- switch (filesystem) {
- case 'aliyun':
- // 裁剪
- if (!gravity && gravity != 'center') {
- // 指定了裁剪区域
- mode = 'mfit'
- crop_str = '/crop,g_' + gravityFormatMap('aliyun', gravity) + ',w_' + width + ',h_' + height
- }
-
- // 质量压缩
- if (quality > 0 && quality < 100) {
- quality_str = '/quality,q_' + quality
- }
-
- // 缩放参数
- suffix = 'x-oss-process=image/resize,m_' + mode + ',w_' + width + ',h_' + height
-
- // 拼接裁剪和质量压缩
- suffix += crop_str + quality_str
- break
- case 'qcloud':
- let mode_str = 'thumbnail'
- if (mode == 'fill' || (!gravity && gravity != 'center')) {
- // 指定了裁剪区域
- mode_str = 'crop'
- mode = 'fill'
- crop_str = '/gravity/' + gravityFormatMap('qcloud', gravity)
- }
-
- // 质量压缩
- if (quality > 0 && quality < 100) {
- quality_str = '/rquality/' + quality
- }
-
- switch (mode) {
- case 'lfit':
- size = '' + size + '>'
- break
- case 'mfit':
- size = '!' + size + 'r'
- case 'fill':
- break
- case 'pad':
- size = size + '/pad/1'
- break
- case 'fixed':
- size = size + '!'
- break
- }
-
- suffix = 'imageMogr2/' + mode_str + '/' + size + crop_str + quality_str
- break
- case 'qiniu':
- if (mode == 'fill' || (!gravity && gravity != 'center')) {
- // 指定了裁剪区域,全部转为 mfit
- mode = 'mfit'
- crop_str = '/gravity/' + gravityFormatMap('qiniu', gravity) + '/crop/' + size
- }
- // 质量压缩
- if (quality > 0 && quality < 100) {
- quality_str = '/quality/' + quality
- }
-
- switch (mode) {
- case 'lfit':
- case 'pad': // 七牛不支持在缩放之后,尺寸不足时,填充背景色,所以这里和 lfit 模式一样
- size = size + '>'
- break
- case 'mfit':
- size = '!' + size + 'r'
- break
- case 'fill':
- // 会被转为 mfit
- break
- case 'fixed':
- size = size + '!'
- break
- }
-
- suffix = 'imageMogr2/thumbnail/' + size + crop_str + quality_str
- break
- }
- return url + '?' + suffix
-}
-
-/**
- * 裁剪区域格式转换
- *
- * @param string $type aliyun|qcloud|qiniu
- * @param string $gravity 统一的裁剪区域字符
- *
- * @return string
- */
-function gravityFormatMap(type, gravity) {
- const gravityFormat = {
- aliyun: {
- north_west: 'nw', // 左上
- north: 'north', // 中上
- north_east: 'ne', // 右上
- west: 'west', // 左中
- center: 'center', // 中部
- east: 'east', // 右中
- south_west: 'sw', // 左下
- south: 'south', // 中下
- south_east: 'se', // 右下
- },
- qcloud: {
- northwest: 'nw', // 左上
- north: 'north', // 中上
- northeast: 'ne', // 右上
- west: 'west', // 左中
- center: 'center', // 中部
- east: 'east', // 右中
- southwest: 'sw', // 左下
- south: 'south', // 中下
- southeast: 'se', // 右下
- },
- qiniu: {
- NorthWest: 'nw', // 左上
- North: 'north', // 中上
- NorthEast: 'ne', // 右上
- West: 'west', // 左中
- Center: 'center', // 中部
- East: 'east', // 右中
- SouthWest: 'sw', // 左下
- South: 'south', // 中下
- SouthEast: 'se', // 右下
- },
- }
-
- return gravityFormat[type][gravity]
-}
diff --git a/acdr-ui/src/sheep/util/const.js b/acdr-ui/src/sheep/util/const.js
deleted file mode 100644
index 2f7d043c..00000000
--- a/acdr-ui/src/sheep/util/const.js
+++ /dev/null
@@ -1,109 +0,0 @@
-// ========== COMMON - 公共模块 ==========
-
-/**
- * 与后端Terminal枚举一一对应
- */
-// ========== MALL - 营销模块 ==========
-
-import dayjs from 'dayjs'
-
-export const TerminalEnum = {
- UNKNOWN: 0, // 未知, 目的:在无法解析到 terminal 时,使用它
- WECHAT_MINI_PROGRAM: 10, // 微信小程序
- WECHAT_WAP: 11, // 微信公众号
- H5: 20, // H5 网页
- APP: 31, // 手机 App
-}
-
-/**
- * 将 uni-app 提供的平台转换为后端所需的 terminal值
- *
- * @return 终端
- */
-export const getTerminal = () => {
- const platformType = uni.getSystemInfoSync().uniPlatform
- // 与后端terminal枚举一一对应
- switch (platformType) {
- case 'app':
- return TerminalEnum.APP
- case 'web':
- return TerminalEnum.H5
- case 'mp-weixin':
- return TerminalEnum.WECHAT_MINI_PROGRAM
- default:
- return TerminalEnum.UNKNOWN
- }
-}
-
-/**
- * 优惠类型枚举
- */
-export const PromotionDiscountTypeEnum = {
- PRICE: {
- type: 1,
- name: '满减',
- },
- PERCENT: {
- type: 2,
- name: '折扣',
- },
-}
-
-/**
- * 优惠劵模板的有限期类型的枚举
- */
-export const CouponTemplateValidityTypeEnum = {
- DATE: {
- type: 1,
- name: '固定日期可用',
- },
- TERM: {
- type: 2,
- name: '领取之后可用',
- },
-}
-
-/**
- * 营销的商品范围枚举
- */
-export const PromotionProductScopeEnum = {
- ALL: {
- scope: 1,
- name: '通用劵',
- },
- SPU: {
- scope: 2,
- name: '商品劵',
- },
- CATEGORY: {
- scope: 3,
- name: '品类劵',
- },
-}
-
-// 时间段的状态枚举
-export const TimeStatusEnum = {
- WAIT_START: '即将开始',
- STARTED: '进行中',
- END: '已结束',
-}
-
-/**
- * 微信小程序的订阅模版
- */
-export const WxaSubscribeTemplate = {
- TRADE_ORDER_DELIVERY: '订单发货通知',
- PROMOTION_COMBINATION_SUCCESS: '拼团结果通知',
- PAY_WALLET_RECHARGER_SUCCESS: '充值成功通知',
-}
-
-export const getTimeStatusEnum = (startTime, endTime) => {
- const now = dayjs()
- if (now.isBefore(startTime)) {
- return TimeStatusEnum.WAIT_START
- } else if (now.isAfter(endTime)) {
- return TimeStatusEnum.END
- } else {
- return TimeStatusEnum.STARTED
- }
-}
diff --git a/acdr-ui/src/sheep/util/index.js b/acdr-ui/src/sheep/util/index.js
deleted file mode 100644
index 5aa6b8a1..00000000
--- a/acdr-ui/src/sheep/util/index.js
+++ /dev/null
@@ -1,139 +0,0 @@
-import dayjs from 'dayjs'
-
-/**
- * 将一个整数转换为分数保留两位小数
- * @param {number | string | undefined} num 整数
- * @return {number} 分数
- */
-export const formatToFraction = (num) => {
- if (typeof num === 'undefined') return 0
- const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
- return parseFloat((parsedNumber / 100).toFixed(2))
-}
-
-/**
- * 将一个数转换为 1.00 这样
- * 数据呈现的时候使用
- *
- * @param {number | string | undefined} num 整数
- * @return {string} 分数
- */
-export const floatToFixed2 = (num) => {
- let str = '0.00'
- if (typeof num === 'undefined') {
- return str
- }
- const f = formatToFraction(num)
- const decimalPart = f.toString().split('.')[1]
- const len = decimalPart ? decimalPart.length : 0
- switch (len) {
- case 0:
- str = f.toString() + '.00'
- break
- case 1:
- str = f.toString() + '.0'
- break
- case 2:
- str = f.toString()
- break
- }
- return str
-}
-
-/**
- * 将一个分数转换为整数
- *
- * @param {number | string | undefined} num 分数
- * @return {number} 整数
- */
-export const convertToInteger = (num) => {
- if (typeof num === 'undefined') return 0
- const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
- // TODO 分转元后还有小数则四舍五入
- return Math.round(parsedNumber * 100)
-}
-
-/**
- * 时间日期转换
- * @param {dayjs.ConfigType} date 当前时间,new Date() 格式
- * @param {string} format 需要转换的时间格式字符串
- * @description format 字符串随意,如 `YYYY-mm、YYYY-mm-dd`
- * @description format 季度:"YYYY-mm-dd HH:MM:SS QQQQ"
- * @description format 星期:"YYYY-mm-dd HH:MM:SS WWW"
- * @description format 几周:"YYYY-mm-dd HH:MM:SS ZZZ"
- * @description format 季度 + 星期 + 几周:"YYYY-mm-dd HH:MM:SS WWW QQQQ ZZZ"
- * @returns {string} 返回拼接后的时间字符串
- */
-export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
- // 日期不存在,则返回空
- if (!date) {
- return ''
- }
- // 日期存在,则进行格式化
- if (format === undefined) {
- format = 'YYYY-MM-DD HH:mm:ss'
- }
- return dayjs(date).format(format)
-}
-
-/**
- * 构造树型结构数据
- *
- * @param {*} data 数据源
- * @param {*} id id字段 默认 'id'
- * @param {*} parentId 父节点字段 默认 'parentId'
- * @param {*} children 孩子节点字段 默认 'children'
- * @param {*} rootId 根Id 默认 0
- */
-export function handleTree(
- data,
- id = 'id',
- parentId = 'parentId',
- children = 'children',
- rootId = 0,
-) {
- // 对源数据深度克隆
- const cloneData = JSON.parse(JSON.stringify(data))
- // 循环所有项
- const treeData = cloneData.filter((father) => {
- const branchArr = cloneData.filter((child) => {
- // 返回每一项的子级数组
- return father[id] === child[parentId]
- })
- branchArr.length > 0 ? (father.children = branchArr) : ''
- // 返回第一层
- return father[parentId] === rootId
- })
- return treeData !== '' ? treeData : data
-}
-
-/**
- * 重置分页对象
- *
- * TODO 芋艿:需要处理其它页面
- *
- * @param pagination 分页对象
- */
-export function resetPagination(pagination) {
- pagination.list = []
- pagination.total = 0
- pagination.pageNo = 1
-}
-
-/**
- * 将值复制到目标对象,且以目标对象属性为准,例:target: {a:1} source:{a:2,b:3} 结果为:{a:2}
- * @param target 目标对象
- * @param source 源对象
- */
-export const copyValueToTarget = (target, source) => {
- const newObj = Object.assign({}, target, source)
- // 删除多余属性
- Object.keys(newObj).forEach((key) => {
- // 如果不是target中的属性则删除
- if (Object.keys(target).indexOf(key) === -1) {
- delete newObj[key]
- }
- })
- // 更新目标对象值
- Object.assign(target, newObj)
-}
diff --git a/acdr-ui/src/sheep/validate/form.js b/acdr-ui/src/sheep/validate/form.js
deleted file mode 100644
index ecb42699..00000000
--- a/acdr-ui/src/sheep/validate/form.js
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Validate v1.0.0 通用验证
- * @description 项目中用到的表单验证规则
- */
-import test from '@/sheep/helper/test.js'
-
-// 手机号
-export const mobile = {
- rules: [
- {
- required: true,
- errorMessage: '请输入手机号',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!test.mobile(value)) {
- callback('手机号码格式不正确')
- }
- return true
- },
- },
- ],
-}
-
-// 密码
-export const password = {
- rules: [
- {
- required: true,
- errorMessage: '请输入密码',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]+\S{5,12}$/.test(value)) {
- callback('需包含字母和数字,长度在6-12之间')
- }
- return true
- },
- },
- ],
-}
-
-// 短信验证码
-export const code = {
- rules: [
- {
- required: true,
- errorMessage: '请输入验证码',
- },
- ],
-}
-
-// 真实姓名
-export const realName = {
- rules: [
- {
- required: true,
- errorMessage: '请输入姓名',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!test.chinese(value)) {
- callback('请输入汉字')
- }
- return true
- },
- },
- ],
-}
-
-export const taxName = {
- rules: [
- {
- required: true,
- errorMessage: '请输入发票抬头名称',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!test.chinese(value)) {
- callback('请输入汉字')
- }
- return true
- },
- },
- ],
-}
-
-// 税号
-export const taxNo = {
- rules: [
- {
- required: true,
- errorMessage: '请输入税号',
- },
- ],
-}
-
-// 开户行
-export const bankName = {
- rules: [
- {
- required: true,
- errorMessage: '请输入开户行',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!test.chinese(value)) {
- callback('请输入汉字')
- }
- return true
- },
- },
- ],
-}
-// 银行卡号
-export const bankCode = {
- rules: [
- {
- required: true,
- errorMessage: '请输入银行卡号',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- if (!test.number(value)) {
- callback('请输入正确账号')
- }
- return true
- },
- },
- ],
-}
-
-// 支付宝账号
-export const alipayAccount = {
- rules: [
- {
- required: true,
- errorMessage: '请输入支付宝账号',
- },
- {
- validateFunction: function (rule, value, data, callback) {
- const isEmail = test.email(value)
- const isMobile = test.mobile(value)
-
- if (!isEmail && !isMobile) {
- callback('请输入正确账号')
- }
- return true
- },
- },
- ],
-}
-
-export default {
- mobile,
- alipayAccount,
- bankCode,
- bankName,
- realName,
- password,
- code,
- taxNo,
- taxName,
-}
diff --git a/acdr-ui/src/static/addresscell/location.png b/acdr-ui/src/static/addresscell/location.png
deleted file mode 100644
index 29aed1076d4a69c33a88954531928ed8e2a2f119..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1604
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