From 9df90c11768aeec4aaaa702805d341852e2cb806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Thu, 16 Jul 2026 01:18:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(address):=20=E6=96=B0=E5=A2=9E=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E5=9C=B0=E5=9D=80=E4=B8=8E=E5=94=AE=E5=90=8E=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增地址编辑页面,支持地址智能识别、地图选点、地区选择和默认地址设置 - 实现地址列表页面,支持地址查看、删除、设为默认及选择返回结算页 - 新增售后申请页面,支持退款类型选择、商品选择、原因填写、图片上传和提交审核 - 修复 passport 分包配置,移除不存在分包并补充缺失声明,避免 Taro 编译报错 - 新增地址类型定义,增强前端地址数据结构类型安全 - 优化页面交互体验,完善表单校验及错误提示逻辑 - 统一代码格式与命名规范,保持代码风格一致性 --- .idea/vcs.xml | 6 + .idea/workspace.xml | 556 + ...d3038127a38b710567283f1da199d8c7585b928b7e | Bin 0 -> 2561552 bytes .workbuddy/memory/2026-07-16.md | 16 + README.md | 263 + babel.config.js | 11 + config/app.ts | 7 + config/dev.ts | 17 + config/env.js | 28 + config/index.ts | 120 + config/prod.ts | 12 + models.json | 316 + package.json | 90 + pnpm-lock.yaml | 18401 ++++++++++++++++ postcss.config.js | 7 + project.config.json | 55 + project.private.config.json | 23 + src/api/cms/cmsAd/index.ts | 115 + src/api/cms/cmsAd/model/index.ts | 60 + src/api/cms/cmsAdRecord/index.ts | 106 + src/api/cms/cmsAdRecord/model/index.ts | 35 + src/api/cms/cmsArticle/index.ts | 218 + src/api/cms/cmsArticle/model/index.ts | 132 + src/api/cms/cmsArticleCategory/index.ts | 108 + src/api/cms/cmsArticleCategory/model/index.ts | 59 + src/api/cms/cmsArticleComment/index.ts | 106 + src/api/cms/cmsArticleComment/model/index.ts | 47 + src/api/cms/cmsArticleContent/index.ts | 106 + src/api/cms/cmsArticleContent/model/index.ts | 25 + src/api/cms/cmsArticleCount/index.ts | 106 + src/api/cms/cmsArticleCount/model/index.ts | 25 + src/api/cms/cmsArticleLike/index.ts | 106 + src/api/cms/cmsArticleLike/model/index.ts | 25 + src/api/cms/cmsComponents/index.ts | 106 + src/api/cms/cmsComponents/model/index.ts | 43 + src/api/cms/cmsDesign/index.ts | 102 + src/api/cms/cmsDesign/model/index.ts | 60 + src/api/cms/cmsDesignRecord/index.ts | 106 + src/api/cms/cmsDesignRecord/model/index.ts | 51 + src/api/cms/cmsDocs/index.ts | 106 + src/api/cms/cmsDocs/model/index.ts | 45 + src/api/cms/cmsDocsBook/index.ts | 106 + src/api/cms/cmsDocsBook/model/index.ts | 37 + src/api/cms/cmsDocsContent/index.ts | 106 + src/api/cms/cmsDocsContent/model/index.ts | 25 + src/api/cms/cmsDomain/index.ts | 151 + src/api/cms/cmsDomain/model/index.ts | 44 + src/api/cms/cmsForm/index.ts | 106 + src/api/cms/cmsForm/model/index.ts | 53 + src/api/cms/cmsFormRecord/index.ts | 106 + src/api/cms/cmsFormRecord/model/index.ts | 41 + src/api/cms/cmsLang/index.ts | 105 + src/api/cms/cmsLang/model/index.ts | 39 + src/api/cms/cmsLangLog/index.ts | 105 + src/api/cms/cmsLangLog/model/index.ts | 27 + src/api/cms/cmsLink/index.ts | 106 + src/api/cms/cmsLink/model/index.ts | 43 + src/api/cms/cmsModel/index.ts | 106 + src/api/cms/cmsModel/model/index.ts | 57 + src/api/cms/cmsMp/index.ts | 106 + src/api/cms/cmsMp/model/index.ts | 61 + src/api/cms/cmsMpAd/index.ts | 106 + src/api/cms/cmsMpAd/model/index.ts | 47 + src/api/cms/cmsMpField/index.ts | 106 + src/api/cms/cmsMpField/model/index.ts | 35 + src/api/cms/cmsMpMenu/index.ts | 106 + src/api/cms/cmsMpMenu/model/index.ts | 79 + src/api/cms/cmsMpPages/index.ts | 106 + src/api/cms/cmsMpPages/model/index.ts | 47 + src/api/cms/cmsNavigation/index.ts | 138 + src/api/cms/cmsNavigation/model/index.ts | 117 + src/api/cms/cmsOrder/index.ts | 106 + src/api/cms/cmsOrder/model/index.ts | 69 + src/api/cms/cmsSpec/index.ts | 106 + src/api/cms/cmsSpec/model/index.ts | 35 + src/api/cms/cmsSpecValue/index.ts | 106 + src/api/cms/cmsSpecValue/model/index.ts | 29 + src/api/cms/cmsWebsite/index.ts | 147 + src/api/cms/cmsWebsite/model/index.ts | 138 + src/api/cms/cmsWebsiteField/index.ts | 129 + src/api/cms/cmsWebsiteField/model/index.ts | 63 + src/api/cms/link/index.ts | 113 + src/api/cms/link/model/index.ts | 31 + src/api/cms/mpOfficialMenu/index.ts | 106 + src/api/cms/mpOfficialMenu/model/index.ts | 37 + src/api/index.ts | 61 + src/api/json/china-provinces.geo.json | 1 + src/api/json/industry-data.json | 1 + src/api/json/regions-data.json | 1 + src/api/layout/index.ts | 116 + src/api/layout/model/index.ts | 29 + src/api/passport/login/index.ts | 75 + src/api/passport/login/model/index.ts | 52 + src/api/passport/qr-login/index.ts | 244 + src/api/passport/wx-login/index.ts | 127 + src/api/share.ts | 23 + src/api/shop/shopActivity/index.ts | 110 + src/api/shop/shopActivity/model/index.ts | 89 + src/api/shop/shopAfterSale/index.ts | 154 + src/api/shop/shopArticle/index.ts | 101 + src/api/shop/shopArticle/model/index.ts | 123 + src/api/shop/shopBooking/index.ts | 121 + src/api/shop/shopBooking/model/index.ts | 53 + src/api/shop/shopCart/index.ts | 153 + src/api/shop/shopCart/model/index.ts | 80 + src/api/shop/shopChatConversation/index.ts | 101 + .../shop/shopChatConversation/model/index.ts | 37 + src/api/shop/shopChatMessage/index.ts | 115 + src/api/shop/shopChatMessage/model/index.ts | 66 + src/api/shop/shopCommissionRecord.ts | 29 + src/api/shop/shopCommissionRole/index.ts | 101 + .../shop/shopCommissionRole/model/index.ts | 35 + src/api/shop/shopCoupon/index.ts | 115 + src/api/shop/shopCoupon/model/index.ts | 97 + src/api/shop/shopCustomerService/index.ts | 17 + src/api/shop/shopCustomerService/model.ts | 26 + src/api/shop/shopDealerApply/index.ts | 155 + src/api/shop/shopDealerApply/model/index.ts | 47 + src/api/shop/shopDealerCapital/index.ts | 101 + src/api/shop/shopDealerCapital/model.ts | 109 + src/api/shop/shopDealerCapital/model/index.ts | 41 + src/api/shop/shopDealerOrder/index.ts | 101 + src/api/shop/shopDealerOrder/model/index.ts | 60 + src/api/shop/shopDealerReferee/index.ts | 101 + src/api/shop/shopDealerReferee/model/index.ts | 31 + src/api/shop/shopDealerSetting/index.ts | 101 + src/api/shop/shopDealerSetting/model/index.ts | 25 + src/api/shop/shopDealerUser/index.ts | 103 + src/api/shop/shopDealerUser/model/index.ts | 53 + src/api/shop/shopDealerWithdraw/index.ts | 145 + .../shop/shopDealerWithdraw/model/index.ts | 48 + src/api/shop/shopEvaluation/index.ts | 119 + src/api/shop/shopEvaluation/model/index.ts | 77 + src/api/shop/shopEvent/index.ts | 80 + src/api/shop/shopEvent/model/index.ts | 96 + src/api/shop/shopExpress/index.ts | 101 + src/api/shop/shopExpress/model/index.ts | 35 + src/api/shop/shopExpressTemplate/index.ts | 101 + .../shop/shopExpressTemplate/model/index.ts | 41 + .../shop/shopExpressTemplateDetail/index.ts | 101 + .../shopExpressTemplateDetail/model/index.ts | 45 + src/api/shop/shopGift/index.ts | 260 + src/api/shop/shopGift/model/index.ts | 127 + src/api/shop/shopGiftCard/index.ts | 21 + src/api/shop/shopGiftCard/model.ts | 29 + src/api/shop/shopGoods/index.ts | 112 + src/api/shop/shopGoods/model/index.ts | 160 + src/api/shop/shopGoodsBrowse/index.ts | 52 + src/api/shop/shopGoodsBrowse/model/index.ts | 39 + src/api/shop/shopGoodsCategory/index.ts | 101 + src/api/shop/shopGoodsCategory/model/index.ts | 64 + src/api/shop/shopGoodsComment/index.ts | 69 + src/api/shop/shopGoodsComment/model.ts | 77 + src/api/shop/shopGoodsEvaluate/index.ts | 22 + src/api/shop/shopGoodsEvaluate/model.ts | 39 + src/api/shop/shopGoodsFavorite/index.ts | 48 + src/api/shop/shopGoodsFavorite/model.ts | 24 + src/api/shop/shopGoodsRoleCommission/index.ts | 101 + .../shopGoodsRoleCommission/model/index.ts | 35 + src/api/shop/shopGoodsSku/index.ts | 113 + src/api/shop/shopGoodsSku/model/index.ts | 50 + src/api/shop/shopGoodsSpec/index.ts | 101 + src/api/shop/shopGoodsSpec/model/index.ts | 29 + src/api/shop/shopGroupBuy/index.ts | 36 + src/api/shop/shopGroupBuy/model.ts | 61 + src/api/shop/shopInvite/index.ts | 283 + src/api/shop/shopInvite/model/index.ts | 279 + src/api/shop/shopInvoiceTitle/index.ts | 166 + src/api/shop/shopInvoiceTitle/model.ts | 155 + src/api/shop/shopLogistics/index.ts | 258 + src/api/shop/shopMemberBenefit.ts | 29 + src/api/shop/shopMemberCenter.ts | 113 + src/api/shop/shopMemberRegister.ts | 108 + src/api/shop/shopMerchant/index.ts | 101 + src/api/shop/shopMerchant/model/index.ts | 95 + src/api/shop/shopMerchantAccount/index.ts | 101 + .../shop/shopMerchantAccount/model/index.ts | 39 + src/api/shop/shopMerchantApply/index.ts | 115 + src/api/shop/shopMerchantApply/model/index.ts | 72 + src/api/shop/shopMerchantCount/index.ts | 103 + src/api/shop/shopMerchantCount/model/index.ts | 29 + src/api/shop/shopMerchantType/index.ts | 103 + src/api/shop/shopMerchantType/model/index.ts | 30 + src/api/shop/shopMessage/index.ts | 37 + src/api/shop/shopMessage/model/index.ts | 20 + src/api/shop/shopNotification/index.ts | 140 + src/api/shop/shopNotification/model/index.ts | 25 + src/api/shop/shopOrder/index.ts | 196 + src/api/shop/shopOrder/model/index.ts | 281 + src/api/shop/shopOrderGoods/index.ts | 30 + src/api/shop/shopOrderGoods/model/index.ts | 70 + src/api/shop/shopOrderRefund/index.ts | 52 + src/api/shop/shopPointsOrder/index.ts | 66 + src/api/shop/shopPointsOrder/model/index.ts | 62 + src/api/shop/shopPointsProduct/index.ts | 44 + src/api/shop/shopPointsProduct/model/index.ts | 51 + src/api/shop/shopRecharge/index.ts | 35 + src/api/shop/shopRecharge/model/index.ts | 17 + src/api/shop/shopRechargeCode/index.ts | 48 + src/api/shop/shopRechargeCode/model/index.ts | 28 + src/api/shop/shopRechargeOrder.ts | 40 + src/api/shop/shopSeckill/index.ts | 31 + src/api/shop/shopSeckill/model.ts | 48 + src/api/shop/shopSetting/index.ts | 138 + src/api/shop/shopSetting/model/index.ts | 43 + src/api/shop/shopSigninConfig/index.ts | 31 + src/api/shop/shopSigninConfig/model/index.ts | 29 + src/api/shop/shopSigninRecord/index.ts | 58 + src/api/shop/shopSigninRecord/model/index.ts | 33 + src/api/shop/shopSpec/index.ts | 101 + src/api/shop/shopSpec/model/index.ts | 38 + src/api/shop/shopSpecValue/index.ts | 101 + src/api/shop/shopSpecValue/model/index.ts | 29 + src/api/shop/shopStore/index.ts | 130 + src/api/shop/shopStore/model/index.ts | 81 + src/api/shop/shopStoreFence/index.ts | 101 + src/api/shop/shopStoreFence/model/index.ts | 43 + src/api/shop/shopStoreRider/index.ts | 101 + src/api/shop/shopStoreRider/model/index.ts | 71 + src/api/shop/shopStoreUser/index.ts | 116 + src/api/shop/shopStoreUser/model/index.ts | 36 + src/api/shop/shopStoreWarehouse/index.ts | 101 + .../shop/shopStoreWarehouse/model/index.ts | 53 + src/api/shop/shopUserAddress.ts | 41 + src/api/shop/shopUserAddress/index.ts | 112 + src/api/shop/shopUserAddress/model.ts | 19 + src/api/shop/shopUserAddress/model/index.ts | 53 + src/api/shop/shopUserCard/index.ts | 71 + src/api/shop/shopUserCard/model/index.ts | 28 + src/api/shop/shopUserCoupon/index.ts | 155 + src/api/shop/shopUserCoupon/model/index.ts | 84 + src/api/shop/shopUserReferee/index.ts | 101 + src/api/shop/shopUserReferee/model/index.ts | 33 + src/api/shop/shopWithdrawRecord.ts | 50 + src/api/system/access-key/index.ts | 59 + src/api/system/access-key/model/index.ts | 20 + src/api/system/appstore/index.ts | 11 + src/api/system/appstore/model/index.ts | 13 + src/api/system/cache/index.ts | 76 + src/api/system/cache/model/index.ts | 18 + src/api/system/chat/index.ts | 157 + src/api/system/chat/model/index.ts | 49 + src/api/system/chatConversation/index.ts | 106 + .../system/chatConversation/model/index.ts | 37 + src/api/system/chatMessage/index.ts | 120 + src/api/system/chatMessage/model/index.ts | 49 + src/api/system/company/index.ts | 161 + src/api/system/company/model/index.ts | 120 + src/api/system/companyComment/index.ts | 106 + src/api/system/companyComment/model/index.ts | 43 + src/api/system/companyContent/index.ts | 106 + src/api/system/companyContent/model/index.ts | 25 + src/api/system/companyGit/index.ts | 106 + src/api/system/companyGit/model/index.ts | 41 + src/api/system/companyParameter/index.ts | 106 + .../system/companyParameter/model/index.ts | 33 + src/api/system/companyUrl/index.ts | 106 + src/api/system/companyUrl/model/index.ts | 39 + src/api/system/dict-data/index.ts | 87 + src/api/system/dict-data/model/index.ts | 46 + src/api/system/dict/index.ts | 61 + src/api/system/dict/model/index.ts | 29 + src/api/system/dictionary-data/index.ts | 87 + src/api/system/dictionary-data/model/index.ts | 33 + src/api/system/dictionary/index.ts | 61 + src/api/system/dictionary/model/index.ts | 29 + src/api/system/environment/index.ts | 125 + src/api/system/environment/model/index.ts | 25 + src/api/system/file/index.ts | 140 + src/api/system/file/model/index.ts | 54 + src/api/system/login-record/index.ts | 32 + src/api/system/login-record/model/index.ts | 38 + src/api/system/menu/index.ts | 98 + src/api/system/menu/model/index.ts | 67 + src/api/system/modules/index.ts | 118 + src/api/system/modules/model/index.ts | 22 + src/api/system/operation-record/index.ts | 32 + .../system/operation-record/model/index.ts | 56 + src/api/system/order/index.ts | 105 + src/api/system/order/model/index.ts | 93 + src/api/system/orderGoods/index.ts | 115 + src/api/system/orderGoods/model/index.ts | 58 + src/api/system/organization/index.ts | 86 + src/api/system/organization/model/index.ts | 42 + src/api/system/parameter/index.ts | 106 + src/api/system/parameter/model/index.ts | 31 + src/api/system/payment/index.ts | 144 + src/api/system/payment/model/index.ts | 55 + src/api/system/plug/index.ts | 125 + src/api/system/plug/model/index.ts | 67 + src/api/system/role/index.ts | 119 + src/api/system/role/model/index.ts | 27 + src/api/system/setting/index.ts | 126 + src/api/system/setting/model/index.ts | 127 + src/api/system/tenant/index.ts | 178 + src/api/system/tenant/model/index.ts | 46 + src/api/system/url/index.ts | 106 + src/api/system/url/model/index.ts | 37 + src/api/system/user-collection/index.ts | 106 + src/api/system/user-collection/model/index.ts | 25 + src/api/system/user-file/index.ts | 89 + src/api/system/user-file/model/index.ts | 39 + src/api/system/user-group/index.ts | 120 + src/api/system/user-group/model/index.ts | 23 + src/api/system/user/balance-log/index.ts | 31 + .../system/user/balance-log/model/index.ts | 23 + src/api/system/user/balance.ts | 23 + src/api/system/user/index.ts | 261 + src/api/system/user/model/count.ts | 15 + src/api/system/user/model/index.ts | 35 + src/api/system/user/points/index.ts | 44 + src/api/system/user/points/model/index.ts | 13 + src/api/system/user/withdraw/index.ts | 18 + src/api/system/user/withdraw/model/index.ts | 19 + src/api/system/userRole/index.ts | 47 + src/api/system/userRole/model/index.ts | 30 + src/api/system/userVerify/index.ts | 130 + src/api/system/userVerify/model/index.ts | 58 + src/api/system/version/index.ts | 119 + src/api/system/version/model/index.ts | 26 + src/api/system/white-domain/index.ts | 146 + src/api/system/white-domain/model/index.ts | 27 + src/app.config.ts | 183 + src/app.scss | 80 + src/app.tsx | 92 + src/assets/icons/cart.svg | 1 + src/assets/icons/index.ts | 3 + src/assets/logo.png | Bin 0 -> 158093 bytes src/assets/tabbar/README.md | 27 + src/assets/tabbar/cart-active.png | Bin 0 -> 1251 bytes src/assets/tabbar/cart.png | Bin 0 -> 1229 bytes src/assets/tabbar/category-active.png | Bin 0 -> 3534 bytes src/assets/tabbar/category.png | Bin 0 -> 3512 bytes src/assets/tabbar/home-active.png | Bin 0 -> 2028 bytes src/assets/tabbar/home.png | Bin 0 -> 1976 bytes src/assets/tabbar/order-active.png | Bin 0 -> 2272 bytes src/assets/tabbar/order.png | Bin 0 -> 2205 bytes src/assets/tabbar/points-active.png | Bin 0 -> 4794 bytes src/assets/tabbar/points.png | Bin 0 -> 4650 bytes src/assets/tabbar/user-active.png | Bin 0 -> 2839 bytes src/assets/tabbar/user.png | Bin 0 -> 2696 bytes src/components/ErrorBoundary.scss | 87 + src/components/ErrorBoundary.tsx | 75 + src/components/NavBar/index.tsx | 33 + src/components/QRLoginScanner.tsx | 135 + src/components/SharePoster/index.tsx | 204 + src/components/business/AddressCard/index.tsx | 121 + src/components/business/CouponCard/index.tsx | 113 + .../business/CouponSelect/index.tsx | 185 + src/components/business/MemberBadge/index.tsx | 27 + src/components/business/PayModal/index.tsx | 122 + src/components/business/SkuSelector/index.tsx | 355 + src/components/common/ArrowRight/index.tsx | 42 + src/components/common/Badge/index.tsx | 72 + src/components/common/BottomButton/index.scss | 59 + src/components/common/BottomButton/index.tsx | 42 + src/components/common/EmptyState/index.tsx | 48 + src/components/common/FixedButton/index.tsx | 43 + src/components/common/LazyImage/index.tsx | 58 + src/components/common/LoadMore/index.tsx | 29 + src/components/common/Loading/index.tsx | 48 + src/components/common/OrderCard/index.tsx | 166 + src/components/common/Price/index.tsx | 67 + src/components/common/ProductCard/index.tsx | 68 + src/components/common/VirtualList/index.tsx | 69 + src/config/app.ts | 1 + src/contexts/AppContext.tsx | 15 + src/contexts/CartContext.tsx | 247 + src/contexts/UserContext.tsx | 156 + src/hooks/index.ts | 30 + src/hooks/useAddress.ts | 120 + src/hooks/useAppContext.ts | 12 + src/hooks/useCountDown.ts | 145 + src/hooks/useCountUp.ts | 130 + src/hooks/useCoupon.ts | 104 + src/hooks/useNewOrderDetector.ts | 129 + src/hooks/usePagination.ts | 110 + src/hooks/usePayment.ts | 77 + src/hooks/useRequest.ts | 335 + src/hooks/useScrollHeight.ts | 24 + src/hooks/useShare.ts | 98 + src/hooks/useTheme.ts | 42 + src/hooks/useUser.ts | 63 + src/hooks/useVipStatus.ts | 48 + src/index.html | 12 + src/pages/activity/detail/index.config.ts | 5 + src/pages/activity/detail/index.tsx | 276 + src/pages/activity/list/index.config.ts | 3 + src/pages/activity/list/index.tsx | 220 + src/pages/after-sale/apply/index.config.ts | 3 + src/pages/after-sale/apply/index.tsx | 251 + src/pages/after-sale/list/index.config.ts | 3 + src/pages/after-sale/list/index.tsx | 180 + src/pages/after-sale/progress/index.config.ts | 3 + src/pages/after-sale/progress/index.tsx | 175 + src/pages/apply.config.ts | 3 + src/pages/apply.tsx | 151 + src/pages/balance-log.tsx | 169 + src/pages/balance.config.ts | 3 + src/pages/balance.tsx | 187 + src/pages/booking.config.ts | 3 + src/pages/booking.tsx | 167 + src/pages/booking/detail/index.config.ts | 3 + src/pages/booking/detail/index.tsx | 242 + src/pages/booking/list/index.config.ts | 3 + src/pages/booking/list/index.tsx | 226 + src/pages/booking/reschedule/index.config.ts | 3 + src/pages/booking/reschedule/index.tsx | 229 + src/pages/commission.config.ts | 3 + src/pages/commission.tsx | 92 + src/pages/dashboard.tsx | 198 + src/pages/detail.config.ts | 3 + src/pages/detail.tsx | 147 + src/pages/event/detail/index.config.ts | 5 + src/pages/event/detail/index.tsx | 228 + src/pages/event/list/index.config.ts | 3 + src/pages/event/list/index.tsx | 147 + src/pages/event/my/index.config.ts | 3 + src/pages/event/my/index.tsx | 170 + src/pages/event/register/index.config.ts | 3 + src/pages/event/register/index.tsx | 317 + src/pages/exchange.config.ts | 4 + src/pages/exchange.tsx | 226 + src/pages/favorite-list.tsx | 97 + src/pages/gift-card/balance/index.config.ts | 3 + src/pages/gift-card/balance/index.tsx | 187 + src/pages/gift-card/exchange/index.config.ts | 3 + src/pages/gift-card/exchange/index.tsx | 205 + src/pages/gift-card/purchase/index.config.ts | 3 + src/pages/gift-card/purchase/index.tsx | 143 + src/pages/group-buy-detail.config.ts | 3 + src/pages/group-buy-detail.tsx | 324 + src/pages/group-buy-list.tsx | 120 + src/pages/help-center.tsx | 146 + src/pages/help-detail.tsx | 50 + src/pages/history-list.tsx | 114 + src/pages/index/article-detail.tsx | 28 + src/pages/index/article-list.config.ts | 3 + src/pages/index/article-list.tsx | 126 + src/pages/index/coupon-center.config.ts | 3 + src/pages/index/coupon-center.tsx | 125 + src/pages/index/coupon-center/index.config.ts | 3 + src/pages/index/coupon-center/index.tsx | 164 + src/pages/index/index.config.ts | 8 + src/pages/index/index.scss | 9 + src/pages/index/index.tsx | 410 + src/pages/index/notification.tsx | 87 + src/pages/index/search.tsx | 115 + src/pages/invite-record.config.ts | 3 + src/pages/invite-record.tsx | 89 + src/pages/invoice/apply/index.tsx | 153 + src/pages/invoice/records/index.tsx | 224 + src/pages/invoice/title/index.tsx | 297 + src/pages/list.config.ts | 3 + src/pages/list.tsx | 131 + src/pages/member.config.ts | 3 + src/pages/member.tsx | 137 + src/pages/message/detail/index.config.ts | 3 + src/pages/message/detail/index.tsx | 169 + src/pages/message/list/index.config.ts | 3 + src/pages/message/list/index.tsx | 262 + src/pages/order-list.tsx | 221 + src/pages/order/after-sale-apply.tsx | 341 + src/pages/order/after-sale-detail.tsx | 258 + src/pages/order/after-sale-list.tsx | 174 + src/pages/order/detail.tsx | 560 + src/pages/order/evaluate-detail.config.ts | 3 + src/pages/order/evaluate-detail.tsx | 186 + .../order/evaluate-detail/index.config.ts | 3 + src/pages/order/evaluate-detail/index.tsx | 190 + src/pages/order/evaluate-list.config.ts | 3 + src/pages/order/evaluate-list.tsx | 238 + src/pages/order/evaluate-list/index.config.ts | 3 + src/pages/order/evaluate-list/index.tsx | 238 + src/pages/order/evaluate.config.ts | 3 + src/pages/order/evaluate.tsx | 186 + src/pages/order/evaluate/index.config.ts | 3 + src/pages/order/evaluate/index.tsx | 186 + src/pages/order/list.tsx | 257 + src/pages/order/logistics.tsx | 324 + src/pages/order/order.config.ts | 6 + src/pages/order/order.scss | 9 + src/pages/order/order.tsx | 65 + src/pages/order/refund-detail.tsx | 93 + src/pages/order/refund.tsx | 113 + src/pages/points-rules.tsx | 168 + src/pages/points/exchange.tsx | 87 + src/pages/points/exchange/index.config.ts | 4 + src/pages/points/exchange/index.tsx | 226 + src/pages/points/index.config.ts | 3 + src/pages/points/index.tsx | 117 + src/pages/points/order-list/index.tsx | 223 + src/pages/points/points-rules/index.tsx | 168 + src/pages/points/product-detail.config.ts | 5 + src/pages/points/product-detail.tsx | 201 + src/pages/points/product-list/index.config.ts | 3 + src/pages/points/product-list/index.tsx | 171 + src/pages/points/signin.tsx | 149 + src/pages/progress.config.ts | 3 + src/pages/progress.tsx | 170 + src/pages/promotion.config.ts | 3 + src/pages/promotion.tsx | 110 + src/pages/purchase.config.ts | 3 + src/pages/purchase.tsx | 145 + src/pages/rebate/records/index.tsx | 259 + src/pages/rebate/withdraw/index.tsx | 117 + src/pages/records.tsx | 224 + src/pages/redeem.config.ts | 3 + src/pages/redeem.tsx | 294 + src/pages/reschedule.config.ts | 3 + src/pages/reschedule.tsx | 158 + src/pages/sales.tsx | 227 + src/pages/seckill-detail.config.ts | 3 + src/pages/seckill-detail.tsx | 280 + src/pages/seckill-list.config.ts | 3 + src/pages/seckill-list.tsx | 150 + src/pages/share/index.config.ts | 5 + src/pages/share/index.tsx | 132 + src/pages/shop/cart.tsx | 286 + src/pages/shop/category.tsx | 288 + src/pages/shop/checkout.tsx | 625 + .../shop/group-buy-detail/index.config.ts | 5 + src/pages/shop/group-buy-detail/index.tsx | 355 + src/pages/shop/group-buy-list/index.tsx | 120 + src/pages/shop/index.config.ts | 5 + src/pages/shop/index.tsx | 398 + src/pages/shop/product-detail.config.ts | 5 + src/pages/shop/product-detail.tsx | 497 + src/pages/shop/seckill-detail/index.config.ts | 5 + src/pages/shop/seckill-detail/index.tsx | 310 + src/pages/shop/seckill-list/index.config.ts | 3 + src/pages/shop/seckill-list/index.tsx | 150 + src/pages/statistics/dashboard/index.tsx | 197 + src/pages/statistics/sales/index.tsx | 226 + src/pages/statistics/users/index.tsx | 194 + src/pages/store/booking/index.config.ts | 3 + src/pages/store/booking/index.scss | 69 + src/pages/store/booking/index.tsx | 389 + src/pages/store/center/index.config.ts | 3 + src/pages/store/center/index.tsx | 254 + src/pages/store/goods/index.tsx | 1054 + src/pages/store/list/index.config.ts | 3 + src/pages/store/list/index.tsx | 347 + src/pages/store/login/index.config.ts | 5 + src/pages/store/login/index.scss | 137 + src/pages/store/login/index.tsx | 142 + src/pages/store/orders/index.tsx | 758 + src/pages/store/users/index.tsx | 445 + src/pages/team.config.ts | 3 + src/pages/team.tsx | 127 + src/pages/title.tsx | 297 + src/pages/user/about/index.config.ts | 3 + src/pages/user/about/index.tsx | 280 + src/pages/user/address-edit.tsx | 647 + src/pages/user/address-list.tsx | 116 + src/pages/user/balance-log/index.tsx | 169 + .../user/benefit-exchange-confirm/index.scss | 200 + .../user/benefit-exchange-confirm/index.tsx | 179 + .../user/benefit-exchange-list/index.scss | 158 + .../user/benefit-exchange-list/index.tsx | 170 + src/pages/user/benefit-packages/index.scss | 136 + src/pages/user/benefit-packages/index.tsx | 98 + src/pages/user/commission/index.config.ts | 3 + src/pages/user/commission/index.scss | 159 + src/pages/user/commission/index.tsx | 151 + src/pages/user/coupon-list.tsx | 259 + .../user/customer-service/index.config.ts | 3 + src/pages/user/customer-service/index.tsx | 439 + src/pages/user/favorite-list/index.tsx | 104 + src/pages/user/help-center/index.tsx | 157 + src/pages/user/help-detail/index.tsx | 50 + src/pages/user/history-list/index.tsx | 239 + src/pages/user/index.tsx | 223 + src/pages/user/invite-record/index.config.ts | 3 + src/pages/user/invite-record/index.tsx | 89 + .../user/invite-subordinate/index.config.ts | 5 + src/pages/user/invite-subordinate/index.tsx | 348 + src/pages/user/member-upgrade/index.config.ts | 5 + src/pages/user/member-upgrade/index.tsx | 261 + src/pages/user/member/index.config.ts | 3 + src/pages/user/member/index.tsx | 271 + src/pages/user/points-record.tsx | 260 + src/pages/user/profile.tsx | 229 + src/pages/user/promotion/index.config.ts | 5 + src/pages/user/promotion/index.tsx | 131 + src/pages/user/recharge-record/index.tsx | 196 + src/pages/user/recharge.tsx | 213 + src/pages/user/redeem/index.config.ts | 3 + src/pages/user/redeem/index.tsx | 294 + src/pages/user/register-pay/index.config.ts | 3 + src/pages/user/register-pay/index.tsx | 240 + src/pages/user/setting.tsx | 77 + src/pages/user/shop-setting/index.tsx | 217 + src/pages/user/team/index.config.ts | 3 + src/pages/user/team/index.tsx | 127 + src/pages/user/user.config.ts | 6 + src/pages/user/user.scss | 9 + src/pages/user/user.tsx | 325 + src/pages/user/vip-review/index.tsx | 389 + src/pages/user/vip-upgrade/index.config.ts | 5 + src/pages/user/vip-upgrade/index.tsx | 216 + src/pages/user/wallet.tsx | 102 + src/pages/user/withdraw-list/index.scss | 139 + src/pages/user/withdraw-list/index.tsx | 169 + src/pages/user/withdraw/index.scss | 105 + src/pages/user/withdraw/index.tsx | 163 + src/pages/users.tsx | 195 + src/pages/withdraw.tsx | 116 + src/passport/agreement.config.ts | 4 + src/passport/agreement.scss | 55 + src/passport/agreement.tsx | 178 + src/passport/auth-flow.ts | 112 + src/passport/forget.config.ts | 4 + src/passport/forget.tsx | 37 + src/passport/invite/index.config.ts | 5 + src/passport/invite/index.tsx | 508 + src/passport/login.config.ts | 4 + src/passport/login.scss | 392 + src/passport/login.tsx | 398 + src/passport/pay/index.config.ts | 5 + src/passport/pay/index.tsx | 400 + src/passport/phone-auth/index.tsx | 355 + src/passport/qr-confirm/index.config.ts | 5 + src/passport/qr-confirm/index.tsx | 359 + src/passport/qr-login/index.config.ts | 5 + src/passport/qr-login/index.tsx | 191 + src/passport/register.config.ts | 5 + src/passport/register.tsx | 319 + src/passport/setting.config.ts | 4 + src/passport/setting.tsx | 82 + src/passport/sms-login.config.ts | 4 + src/passport/sms-login.scss | 332 + src/passport/sms-login.tsx | 327 + src/passport/unified-qr/index.config.ts | 4 + src/passport/unified-qr/index.tsx | 177 + src/passport/webview/index.config.ts | 5 + src/passport/webview/index.tsx | 22 + src/styles/global.scss | 36 + src/types/address.ts | 8 + src/types/coupon.ts | 17 + src/types/global.d.ts | 57 + src/types/index.ts | 5 + src/types/member.ts | 27 + src/types/order.ts | 83 + src/types/product.ts | 36 + src/utils/auth.ts | 65 + src/utils/common.ts | 35 + src/utils/geofence.ts | 131 + src/utils/image.ts | 96 + src/utils/index.ts | 114 + src/utils/invite.ts | 66 + src/utils/login-guard.ts | 95 + src/utils/privacy.ts | 79 + src/utils/request.ts | 284 + src/utils/server.ts | 23 + src/utils/vip.ts | 68 + tailwind.config.js | 27 + tsconfig.json | 33 + 658 files changed, 85984 insertions(+) create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 .swc/plugins/v7_macos_aarch64_0.104.8/7ca3755447b46c29f7e44fd3038127a38b710567283f1da199d8c7585b928b7e create mode 100644 .workbuddy/memory/2026-07-16.md create mode 100644 README.md create mode 100644 babel.config.js create mode 100644 config/app.ts create mode 100644 config/dev.ts create mode 100644 config/env.js create mode 100644 config/index.ts create mode 100644 config/prod.ts create mode 100644 models.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 postcss.config.js create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 src/api/cms/cmsAd/index.ts create mode 100644 src/api/cms/cmsAd/model/index.ts create mode 100644 src/api/cms/cmsAdRecord/index.ts create mode 100644 src/api/cms/cmsAdRecord/model/index.ts create mode 100644 src/api/cms/cmsArticle/index.ts create mode 100644 src/api/cms/cmsArticle/model/index.ts create mode 100644 src/api/cms/cmsArticleCategory/index.ts create mode 100644 src/api/cms/cmsArticleCategory/model/index.ts create mode 100644 src/api/cms/cmsArticleComment/index.ts create mode 100644 src/api/cms/cmsArticleComment/model/index.ts create mode 100644 src/api/cms/cmsArticleContent/index.ts create mode 100644 src/api/cms/cmsArticleContent/model/index.ts create mode 100644 src/api/cms/cmsArticleCount/index.ts create mode 100644 src/api/cms/cmsArticleCount/model/index.ts create mode 100644 src/api/cms/cmsArticleLike/index.ts create mode 100644 src/api/cms/cmsArticleLike/model/index.ts create mode 100644 src/api/cms/cmsComponents/index.ts create mode 100644 src/api/cms/cmsComponents/model/index.ts create mode 100644 src/api/cms/cmsDesign/index.ts create mode 100644 src/api/cms/cmsDesign/model/index.ts create mode 100644 src/api/cms/cmsDesignRecord/index.ts create mode 100644 src/api/cms/cmsDesignRecord/model/index.ts create mode 100644 src/api/cms/cmsDocs/index.ts create mode 100644 src/api/cms/cmsDocs/model/index.ts create mode 100644 src/api/cms/cmsDocsBook/index.ts create mode 100644 src/api/cms/cmsDocsBook/model/index.ts create mode 100644 src/api/cms/cmsDocsContent/index.ts create mode 100644 src/api/cms/cmsDocsContent/model/index.ts create mode 100644 src/api/cms/cmsDomain/index.ts create mode 100644 src/api/cms/cmsDomain/model/index.ts create mode 100644 src/api/cms/cmsForm/index.ts create mode 100644 src/api/cms/cmsForm/model/index.ts create mode 100644 src/api/cms/cmsFormRecord/index.ts create mode 100644 src/api/cms/cmsFormRecord/model/index.ts create mode 100644 src/api/cms/cmsLang/index.ts create mode 100644 src/api/cms/cmsLang/model/index.ts create mode 100644 src/api/cms/cmsLangLog/index.ts create mode 100644 src/api/cms/cmsLangLog/model/index.ts create mode 100644 src/api/cms/cmsLink/index.ts create mode 100644 src/api/cms/cmsLink/model/index.ts create mode 100644 src/api/cms/cmsModel/index.ts create mode 100644 src/api/cms/cmsModel/model/index.ts create mode 100644 src/api/cms/cmsMp/index.ts create mode 100644 src/api/cms/cmsMp/model/index.ts create mode 100644 src/api/cms/cmsMpAd/index.ts create mode 100644 src/api/cms/cmsMpAd/model/index.ts create mode 100644 src/api/cms/cmsMpField/index.ts create mode 100644 src/api/cms/cmsMpField/model/index.ts create mode 100644 src/api/cms/cmsMpMenu/index.ts create mode 100644 src/api/cms/cmsMpMenu/model/index.ts create mode 100644 src/api/cms/cmsMpPages/index.ts create mode 100644 src/api/cms/cmsMpPages/model/index.ts create mode 100644 src/api/cms/cmsNavigation/index.ts create mode 100644 src/api/cms/cmsNavigation/model/index.ts create mode 100644 src/api/cms/cmsOrder/index.ts create mode 100644 src/api/cms/cmsOrder/model/index.ts create mode 100644 src/api/cms/cmsSpec/index.ts create mode 100644 src/api/cms/cmsSpec/model/index.ts create mode 100644 src/api/cms/cmsSpecValue/index.ts create mode 100644 src/api/cms/cmsSpecValue/model/index.ts create mode 100644 src/api/cms/cmsWebsite/index.ts create mode 100644 src/api/cms/cmsWebsite/model/index.ts create mode 100644 src/api/cms/cmsWebsiteField/index.ts create mode 100644 src/api/cms/cmsWebsiteField/model/index.ts create mode 100644 src/api/cms/link/index.ts create mode 100644 src/api/cms/link/model/index.ts create mode 100644 src/api/cms/mpOfficialMenu/index.ts create mode 100644 src/api/cms/mpOfficialMenu/model/index.ts create mode 100644 src/api/index.ts create mode 100644 src/api/json/china-provinces.geo.json create mode 100644 src/api/json/industry-data.json create mode 100644 src/api/json/regions-data.json create mode 100644 src/api/layout/index.ts create mode 100644 src/api/layout/model/index.ts create mode 100644 src/api/passport/login/index.ts create mode 100644 src/api/passport/login/model/index.ts create mode 100644 src/api/passport/qr-login/index.ts create mode 100644 src/api/passport/wx-login/index.ts create mode 100644 src/api/share.ts create mode 100644 src/api/shop/shopActivity/index.ts create mode 100644 src/api/shop/shopActivity/model/index.ts create mode 100644 src/api/shop/shopAfterSale/index.ts create mode 100644 src/api/shop/shopArticle/index.ts create mode 100644 src/api/shop/shopArticle/model/index.ts create mode 100644 src/api/shop/shopBooking/index.ts create mode 100644 src/api/shop/shopBooking/model/index.ts create mode 100644 src/api/shop/shopCart/index.ts create mode 100644 src/api/shop/shopCart/model/index.ts create mode 100644 src/api/shop/shopChatConversation/index.ts create mode 100644 src/api/shop/shopChatConversation/model/index.ts create mode 100644 src/api/shop/shopChatMessage/index.ts create mode 100644 src/api/shop/shopChatMessage/model/index.ts create mode 100644 src/api/shop/shopCommissionRecord.ts create mode 100644 src/api/shop/shopCommissionRole/index.ts create mode 100644 src/api/shop/shopCommissionRole/model/index.ts create mode 100644 src/api/shop/shopCoupon/index.ts create mode 100644 src/api/shop/shopCoupon/model/index.ts create mode 100644 src/api/shop/shopCustomerService/index.ts create mode 100644 src/api/shop/shopCustomerService/model.ts create mode 100644 src/api/shop/shopDealerApply/index.ts create mode 100644 src/api/shop/shopDealerApply/model/index.ts create mode 100644 src/api/shop/shopDealerCapital/index.ts create mode 100644 src/api/shop/shopDealerCapital/model.ts create mode 100644 src/api/shop/shopDealerCapital/model/index.ts create mode 100644 src/api/shop/shopDealerOrder/index.ts create mode 100644 src/api/shop/shopDealerOrder/model/index.ts create mode 100644 src/api/shop/shopDealerReferee/index.ts create mode 100644 src/api/shop/shopDealerReferee/model/index.ts create mode 100644 src/api/shop/shopDealerSetting/index.ts create mode 100644 src/api/shop/shopDealerSetting/model/index.ts create mode 100644 src/api/shop/shopDealerUser/index.ts create mode 100644 src/api/shop/shopDealerUser/model/index.ts create mode 100644 src/api/shop/shopDealerWithdraw/index.ts create mode 100644 src/api/shop/shopDealerWithdraw/model/index.ts create mode 100644 src/api/shop/shopEvaluation/index.ts create mode 100644 src/api/shop/shopEvaluation/model/index.ts create mode 100644 src/api/shop/shopEvent/index.ts create mode 100644 src/api/shop/shopEvent/model/index.ts create mode 100644 src/api/shop/shopExpress/index.ts create mode 100644 src/api/shop/shopExpress/model/index.ts create mode 100644 src/api/shop/shopExpressTemplate/index.ts create mode 100644 src/api/shop/shopExpressTemplate/model/index.ts create mode 100644 src/api/shop/shopExpressTemplateDetail/index.ts create mode 100644 src/api/shop/shopExpressTemplateDetail/model/index.ts create mode 100644 src/api/shop/shopGift/index.ts create mode 100644 src/api/shop/shopGift/model/index.ts create mode 100644 src/api/shop/shopGiftCard/index.ts create mode 100644 src/api/shop/shopGiftCard/model.ts create mode 100644 src/api/shop/shopGoods/index.ts create mode 100644 src/api/shop/shopGoods/model/index.ts create mode 100644 src/api/shop/shopGoodsBrowse/index.ts create mode 100644 src/api/shop/shopGoodsBrowse/model/index.ts create mode 100644 src/api/shop/shopGoodsCategory/index.ts create mode 100644 src/api/shop/shopGoodsCategory/model/index.ts create mode 100644 src/api/shop/shopGoodsComment/index.ts create mode 100644 src/api/shop/shopGoodsComment/model.ts create mode 100644 src/api/shop/shopGoodsEvaluate/index.ts create mode 100644 src/api/shop/shopGoodsEvaluate/model.ts create mode 100644 src/api/shop/shopGoodsFavorite/index.ts create mode 100644 src/api/shop/shopGoodsFavorite/model.ts create mode 100644 src/api/shop/shopGoodsRoleCommission/index.ts create mode 100644 src/api/shop/shopGoodsRoleCommission/model/index.ts create mode 100644 src/api/shop/shopGoodsSku/index.ts create mode 100644 src/api/shop/shopGoodsSku/model/index.ts create mode 100644 src/api/shop/shopGoodsSpec/index.ts create mode 100644 src/api/shop/shopGoodsSpec/model/index.ts create mode 100644 src/api/shop/shopGroupBuy/index.ts create mode 100644 src/api/shop/shopGroupBuy/model.ts create mode 100644 src/api/shop/shopInvite/index.ts create mode 100644 src/api/shop/shopInvite/model/index.ts create mode 100644 src/api/shop/shopInvoiceTitle/index.ts create mode 100644 src/api/shop/shopInvoiceTitle/model.ts create mode 100644 src/api/shop/shopLogistics/index.ts create mode 100644 src/api/shop/shopMemberBenefit.ts create mode 100644 src/api/shop/shopMemberCenter.ts create mode 100644 src/api/shop/shopMemberRegister.ts create mode 100644 src/api/shop/shopMerchant/index.ts create mode 100644 src/api/shop/shopMerchant/model/index.ts create mode 100644 src/api/shop/shopMerchantAccount/index.ts create mode 100644 src/api/shop/shopMerchantAccount/model/index.ts create mode 100644 src/api/shop/shopMerchantApply/index.ts create mode 100644 src/api/shop/shopMerchantApply/model/index.ts create mode 100644 src/api/shop/shopMerchantCount/index.ts create mode 100644 src/api/shop/shopMerchantCount/model/index.ts create mode 100644 src/api/shop/shopMerchantType/index.ts create mode 100644 src/api/shop/shopMerchantType/model/index.ts create mode 100644 src/api/shop/shopMessage/index.ts create mode 100644 src/api/shop/shopMessage/model/index.ts create mode 100644 src/api/shop/shopNotification/index.ts create mode 100644 src/api/shop/shopNotification/model/index.ts create mode 100644 src/api/shop/shopOrder/index.ts create mode 100644 src/api/shop/shopOrder/model/index.ts create mode 100644 src/api/shop/shopOrderGoods/index.ts create mode 100644 src/api/shop/shopOrderGoods/model/index.ts create mode 100644 src/api/shop/shopOrderRefund/index.ts create mode 100644 src/api/shop/shopPointsOrder/index.ts create mode 100644 src/api/shop/shopPointsOrder/model/index.ts create mode 100644 src/api/shop/shopPointsProduct/index.ts create mode 100644 src/api/shop/shopPointsProduct/model/index.ts create mode 100644 src/api/shop/shopRecharge/index.ts create mode 100644 src/api/shop/shopRecharge/model/index.ts create mode 100644 src/api/shop/shopRechargeCode/index.ts create mode 100644 src/api/shop/shopRechargeCode/model/index.ts create mode 100644 src/api/shop/shopRechargeOrder.ts create mode 100644 src/api/shop/shopSeckill/index.ts create mode 100644 src/api/shop/shopSeckill/model.ts create mode 100644 src/api/shop/shopSetting/index.ts create mode 100644 src/api/shop/shopSetting/model/index.ts create mode 100644 src/api/shop/shopSigninConfig/index.ts create mode 100644 src/api/shop/shopSigninConfig/model/index.ts create mode 100644 src/api/shop/shopSigninRecord/index.ts create mode 100644 src/api/shop/shopSigninRecord/model/index.ts create mode 100644 src/api/shop/shopSpec/index.ts create mode 100644 src/api/shop/shopSpec/model/index.ts create mode 100644 src/api/shop/shopSpecValue/index.ts create mode 100644 src/api/shop/shopSpecValue/model/index.ts create mode 100644 src/api/shop/shopStore/index.ts create mode 100644 src/api/shop/shopStore/model/index.ts create mode 100644 src/api/shop/shopStoreFence/index.ts create mode 100644 src/api/shop/shopStoreFence/model/index.ts create mode 100644 src/api/shop/shopStoreRider/index.ts create mode 100644 src/api/shop/shopStoreRider/model/index.ts create mode 100644 src/api/shop/shopStoreUser/index.ts create mode 100644 src/api/shop/shopStoreUser/model/index.ts create mode 100644 src/api/shop/shopStoreWarehouse/index.ts create mode 100644 src/api/shop/shopStoreWarehouse/model/index.ts create mode 100644 src/api/shop/shopUserAddress.ts create mode 100644 src/api/shop/shopUserAddress/index.ts create mode 100644 src/api/shop/shopUserAddress/model.ts create mode 100644 src/api/shop/shopUserAddress/model/index.ts create mode 100644 src/api/shop/shopUserCard/index.ts create mode 100644 src/api/shop/shopUserCard/model/index.ts create mode 100644 src/api/shop/shopUserCoupon/index.ts create mode 100644 src/api/shop/shopUserCoupon/model/index.ts create mode 100644 src/api/shop/shopUserReferee/index.ts create mode 100644 src/api/shop/shopUserReferee/model/index.ts create mode 100644 src/api/shop/shopWithdrawRecord.ts create mode 100644 src/api/system/access-key/index.ts create mode 100644 src/api/system/access-key/model/index.ts create mode 100644 src/api/system/appstore/index.ts create mode 100644 src/api/system/appstore/model/index.ts create mode 100644 src/api/system/cache/index.ts create mode 100644 src/api/system/cache/model/index.ts create mode 100644 src/api/system/chat/index.ts create mode 100644 src/api/system/chat/model/index.ts create mode 100644 src/api/system/chatConversation/index.ts create mode 100644 src/api/system/chatConversation/model/index.ts create mode 100644 src/api/system/chatMessage/index.ts create mode 100644 src/api/system/chatMessage/model/index.ts create mode 100644 src/api/system/company/index.ts create mode 100644 src/api/system/company/model/index.ts create mode 100644 src/api/system/companyComment/index.ts create mode 100644 src/api/system/companyComment/model/index.ts create mode 100644 src/api/system/companyContent/index.ts create mode 100644 src/api/system/companyContent/model/index.ts create mode 100644 src/api/system/companyGit/index.ts create mode 100644 src/api/system/companyGit/model/index.ts create mode 100644 src/api/system/companyParameter/index.ts create mode 100644 src/api/system/companyParameter/model/index.ts create mode 100644 src/api/system/companyUrl/index.ts create mode 100644 src/api/system/companyUrl/model/index.ts create mode 100644 src/api/system/dict-data/index.ts create mode 100644 src/api/system/dict-data/model/index.ts create mode 100644 src/api/system/dict/index.ts create mode 100644 src/api/system/dict/model/index.ts create mode 100644 src/api/system/dictionary-data/index.ts create mode 100644 src/api/system/dictionary-data/model/index.ts create mode 100644 src/api/system/dictionary/index.ts create mode 100644 src/api/system/dictionary/model/index.ts create mode 100644 src/api/system/environment/index.ts create mode 100644 src/api/system/environment/model/index.ts create mode 100644 src/api/system/file/index.ts create mode 100644 src/api/system/file/model/index.ts create mode 100644 src/api/system/login-record/index.ts create mode 100644 src/api/system/login-record/model/index.ts create mode 100644 src/api/system/menu/index.ts create mode 100644 src/api/system/menu/model/index.ts create mode 100644 src/api/system/modules/index.ts create mode 100644 src/api/system/modules/model/index.ts create mode 100644 src/api/system/operation-record/index.ts create mode 100644 src/api/system/operation-record/model/index.ts create mode 100644 src/api/system/order/index.ts create mode 100644 src/api/system/order/model/index.ts create mode 100644 src/api/system/orderGoods/index.ts create mode 100644 src/api/system/orderGoods/model/index.ts create mode 100644 src/api/system/organization/index.ts create mode 100644 src/api/system/organization/model/index.ts create mode 100644 src/api/system/parameter/index.ts create mode 100644 src/api/system/parameter/model/index.ts create mode 100644 src/api/system/payment/index.ts create mode 100644 src/api/system/payment/model/index.ts create mode 100644 src/api/system/plug/index.ts create mode 100644 src/api/system/plug/model/index.ts create mode 100644 src/api/system/role/index.ts create mode 100644 src/api/system/role/model/index.ts create mode 100644 src/api/system/setting/index.ts create mode 100644 src/api/system/setting/model/index.ts create mode 100644 src/api/system/tenant/index.ts create mode 100644 src/api/system/tenant/model/index.ts create mode 100644 src/api/system/url/index.ts create mode 100644 src/api/system/url/model/index.ts create mode 100644 src/api/system/user-collection/index.ts create mode 100644 src/api/system/user-collection/model/index.ts create mode 100644 src/api/system/user-file/index.ts create mode 100644 src/api/system/user-file/model/index.ts create mode 100644 src/api/system/user-group/index.ts create mode 100644 src/api/system/user-group/model/index.ts create mode 100644 src/api/system/user/balance-log/index.ts create mode 100644 src/api/system/user/balance-log/model/index.ts create mode 100644 src/api/system/user/balance.ts create mode 100644 src/api/system/user/index.ts create mode 100644 src/api/system/user/model/count.ts create mode 100644 src/api/system/user/model/index.ts create mode 100644 src/api/system/user/points/index.ts create mode 100644 src/api/system/user/points/model/index.ts create mode 100644 src/api/system/user/withdraw/index.ts create mode 100644 src/api/system/user/withdraw/model/index.ts create mode 100644 src/api/system/userRole/index.ts create mode 100644 src/api/system/userRole/model/index.ts create mode 100644 src/api/system/userVerify/index.ts create mode 100644 src/api/system/userVerify/model/index.ts create mode 100644 src/api/system/version/index.ts create mode 100644 src/api/system/version/model/index.ts create mode 100644 src/api/system/white-domain/index.ts create mode 100644 src/api/system/white-domain/model/index.ts create mode 100644 src/app.config.ts create mode 100644 src/app.scss create mode 100644 src/app.tsx create mode 100644 src/assets/icons/cart.svg create mode 100644 src/assets/icons/index.ts create mode 100644 src/assets/logo.png create mode 100644 src/assets/tabbar/README.md create mode 100644 src/assets/tabbar/cart-active.png create mode 100644 src/assets/tabbar/cart.png create mode 100644 src/assets/tabbar/category-active.png create mode 100644 src/assets/tabbar/category.png create mode 100644 src/assets/tabbar/home-active.png create mode 100644 src/assets/tabbar/home.png create mode 100644 src/assets/tabbar/order-active.png create mode 100644 src/assets/tabbar/order.png create mode 100644 src/assets/tabbar/points-active.png create mode 100644 src/assets/tabbar/points.png create mode 100644 src/assets/tabbar/user-active.png create mode 100644 src/assets/tabbar/user.png create mode 100644 src/components/ErrorBoundary.scss create mode 100644 src/components/ErrorBoundary.tsx create mode 100644 src/components/NavBar/index.tsx create mode 100644 src/components/QRLoginScanner.tsx create mode 100644 src/components/SharePoster/index.tsx create mode 100644 src/components/business/AddressCard/index.tsx create mode 100644 src/components/business/CouponCard/index.tsx create mode 100644 src/components/business/CouponSelect/index.tsx create mode 100644 src/components/business/MemberBadge/index.tsx create mode 100644 src/components/business/PayModal/index.tsx create mode 100644 src/components/business/SkuSelector/index.tsx create mode 100644 src/components/common/ArrowRight/index.tsx create mode 100644 src/components/common/Badge/index.tsx create mode 100644 src/components/common/BottomButton/index.scss create mode 100644 src/components/common/BottomButton/index.tsx create mode 100644 src/components/common/EmptyState/index.tsx create mode 100644 src/components/common/FixedButton/index.tsx create mode 100644 src/components/common/LazyImage/index.tsx create mode 100644 src/components/common/LoadMore/index.tsx create mode 100644 src/components/common/Loading/index.tsx create mode 100644 src/components/common/OrderCard/index.tsx create mode 100644 src/components/common/Price/index.tsx create mode 100644 src/components/common/ProductCard/index.tsx create mode 100644 src/components/common/VirtualList/index.tsx create mode 100644 src/config/app.ts create mode 100644 src/contexts/AppContext.tsx create mode 100644 src/contexts/CartContext.tsx create mode 100644 src/contexts/UserContext.tsx create mode 100644 src/hooks/index.ts create mode 100644 src/hooks/useAddress.ts create mode 100644 src/hooks/useAppContext.ts create mode 100644 src/hooks/useCountDown.ts create mode 100644 src/hooks/useCountUp.ts create mode 100644 src/hooks/useCoupon.ts create mode 100644 src/hooks/useNewOrderDetector.ts create mode 100644 src/hooks/usePagination.ts create mode 100644 src/hooks/usePayment.ts create mode 100644 src/hooks/useRequest.ts create mode 100644 src/hooks/useScrollHeight.ts create mode 100644 src/hooks/useShare.ts create mode 100644 src/hooks/useTheme.ts create mode 100644 src/hooks/useUser.ts create mode 100644 src/hooks/useVipStatus.ts create mode 100644 src/index.html create mode 100644 src/pages/activity/detail/index.config.ts create mode 100644 src/pages/activity/detail/index.tsx create mode 100644 src/pages/activity/list/index.config.ts create mode 100644 src/pages/activity/list/index.tsx create mode 100644 src/pages/after-sale/apply/index.config.ts create mode 100644 src/pages/after-sale/apply/index.tsx create mode 100644 src/pages/after-sale/list/index.config.ts create mode 100644 src/pages/after-sale/list/index.tsx create mode 100644 src/pages/after-sale/progress/index.config.ts create mode 100644 src/pages/after-sale/progress/index.tsx create mode 100644 src/pages/apply.config.ts create mode 100644 src/pages/apply.tsx create mode 100644 src/pages/balance-log.tsx create mode 100644 src/pages/balance.config.ts create mode 100644 src/pages/balance.tsx create mode 100644 src/pages/booking.config.ts create mode 100644 src/pages/booking.tsx create mode 100644 src/pages/booking/detail/index.config.ts create mode 100644 src/pages/booking/detail/index.tsx create mode 100644 src/pages/booking/list/index.config.ts create mode 100644 src/pages/booking/list/index.tsx create mode 100644 src/pages/booking/reschedule/index.config.ts create mode 100644 src/pages/booking/reschedule/index.tsx create mode 100644 src/pages/commission.config.ts create mode 100644 src/pages/commission.tsx create mode 100644 src/pages/dashboard.tsx create mode 100644 src/pages/detail.config.ts create mode 100644 src/pages/detail.tsx create mode 100644 src/pages/event/detail/index.config.ts create mode 100644 src/pages/event/detail/index.tsx create mode 100644 src/pages/event/list/index.config.ts create mode 100644 src/pages/event/list/index.tsx create mode 100644 src/pages/event/my/index.config.ts create mode 100644 src/pages/event/my/index.tsx create mode 100644 src/pages/event/register/index.config.ts create mode 100644 src/pages/event/register/index.tsx create mode 100644 src/pages/exchange.config.ts create mode 100644 src/pages/exchange.tsx create mode 100644 src/pages/favorite-list.tsx create mode 100644 src/pages/gift-card/balance/index.config.ts create mode 100644 src/pages/gift-card/balance/index.tsx create mode 100644 src/pages/gift-card/exchange/index.config.ts create mode 100644 src/pages/gift-card/exchange/index.tsx create mode 100644 src/pages/gift-card/purchase/index.config.ts create mode 100644 src/pages/gift-card/purchase/index.tsx create mode 100644 src/pages/group-buy-detail.config.ts create mode 100644 src/pages/group-buy-detail.tsx create mode 100644 src/pages/group-buy-list.tsx create mode 100644 src/pages/help-center.tsx create mode 100644 src/pages/help-detail.tsx create mode 100644 src/pages/history-list.tsx create mode 100644 src/pages/index/article-detail.tsx create mode 100644 src/pages/index/article-list.config.ts create mode 100644 src/pages/index/article-list.tsx create mode 100644 src/pages/index/coupon-center.config.ts create mode 100644 src/pages/index/coupon-center.tsx create mode 100644 src/pages/index/coupon-center/index.config.ts create mode 100644 src/pages/index/coupon-center/index.tsx create mode 100644 src/pages/index/index.config.ts create mode 100644 src/pages/index/index.scss create mode 100644 src/pages/index/index.tsx create mode 100644 src/pages/index/notification.tsx create mode 100644 src/pages/index/search.tsx create mode 100644 src/pages/invite-record.config.ts create mode 100644 src/pages/invite-record.tsx create mode 100644 src/pages/invoice/apply/index.tsx create mode 100644 src/pages/invoice/records/index.tsx create mode 100644 src/pages/invoice/title/index.tsx create mode 100644 src/pages/list.config.ts create mode 100644 src/pages/list.tsx create mode 100644 src/pages/member.config.ts create mode 100644 src/pages/member.tsx create mode 100644 src/pages/message/detail/index.config.ts create mode 100644 src/pages/message/detail/index.tsx create mode 100644 src/pages/message/list/index.config.ts create mode 100644 src/pages/message/list/index.tsx create mode 100644 src/pages/order-list.tsx create mode 100644 src/pages/order/after-sale-apply.tsx create mode 100644 src/pages/order/after-sale-detail.tsx create mode 100644 src/pages/order/after-sale-list.tsx create mode 100644 src/pages/order/detail.tsx create mode 100644 src/pages/order/evaluate-detail.config.ts create mode 100644 src/pages/order/evaluate-detail.tsx create mode 100644 src/pages/order/evaluate-detail/index.config.ts create mode 100644 src/pages/order/evaluate-detail/index.tsx create mode 100644 src/pages/order/evaluate-list.config.ts create mode 100644 src/pages/order/evaluate-list.tsx create mode 100644 src/pages/order/evaluate-list/index.config.ts create mode 100644 src/pages/order/evaluate-list/index.tsx create mode 100644 src/pages/order/evaluate.config.ts create mode 100644 src/pages/order/evaluate.tsx create mode 100644 src/pages/order/evaluate/index.config.ts create mode 100644 src/pages/order/evaluate/index.tsx create mode 100644 src/pages/order/list.tsx create mode 100644 src/pages/order/logistics.tsx create mode 100644 src/pages/order/order.config.ts create mode 100644 src/pages/order/order.scss create mode 100644 src/pages/order/order.tsx create mode 100644 src/pages/order/refund-detail.tsx create mode 100644 src/pages/order/refund.tsx create mode 100644 src/pages/points-rules.tsx create mode 100644 src/pages/points/exchange.tsx create mode 100644 src/pages/points/exchange/index.config.ts create mode 100644 src/pages/points/exchange/index.tsx create mode 100644 src/pages/points/index.config.ts create mode 100644 src/pages/points/index.tsx create mode 100644 src/pages/points/order-list/index.tsx create mode 100644 src/pages/points/points-rules/index.tsx create mode 100644 src/pages/points/product-detail.config.ts create mode 100644 src/pages/points/product-detail.tsx create mode 100644 src/pages/points/product-list/index.config.ts create mode 100644 src/pages/points/product-list/index.tsx create mode 100644 src/pages/points/signin.tsx create mode 100644 src/pages/progress.config.ts create mode 100644 src/pages/progress.tsx create mode 100644 src/pages/promotion.config.ts create mode 100644 src/pages/promotion.tsx create mode 100644 src/pages/purchase.config.ts create mode 100644 src/pages/purchase.tsx create mode 100644 src/pages/rebate/records/index.tsx create mode 100644 src/pages/rebate/withdraw/index.tsx create mode 100644 src/pages/records.tsx create mode 100644 src/pages/redeem.config.ts create mode 100644 src/pages/redeem.tsx create mode 100644 src/pages/reschedule.config.ts create mode 100644 src/pages/reschedule.tsx create mode 100644 src/pages/sales.tsx create mode 100644 src/pages/seckill-detail.config.ts create mode 100644 src/pages/seckill-detail.tsx create mode 100644 src/pages/seckill-list.config.ts create mode 100644 src/pages/seckill-list.tsx create mode 100644 src/pages/share/index.config.ts create mode 100644 src/pages/share/index.tsx create mode 100644 src/pages/shop/cart.tsx create mode 100644 src/pages/shop/category.tsx create mode 100644 src/pages/shop/checkout.tsx create mode 100644 src/pages/shop/group-buy-detail/index.config.ts create mode 100644 src/pages/shop/group-buy-detail/index.tsx create mode 100644 src/pages/shop/group-buy-list/index.tsx create mode 100644 src/pages/shop/index.config.ts create mode 100644 src/pages/shop/index.tsx create mode 100644 src/pages/shop/product-detail.config.ts create mode 100644 src/pages/shop/product-detail.tsx create mode 100644 src/pages/shop/seckill-detail/index.config.ts create mode 100644 src/pages/shop/seckill-detail/index.tsx create mode 100644 src/pages/shop/seckill-list/index.config.ts create mode 100644 src/pages/shop/seckill-list/index.tsx create mode 100644 src/pages/statistics/dashboard/index.tsx create mode 100644 src/pages/statistics/sales/index.tsx create mode 100644 src/pages/statistics/users/index.tsx create mode 100644 src/pages/store/booking/index.config.ts create mode 100644 src/pages/store/booking/index.scss create mode 100644 src/pages/store/booking/index.tsx create mode 100644 src/pages/store/center/index.config.ts create mode 100644 src/pages/store/center/index.tsx create mode 100644 src/pages/store/goods/index.tsx create mode 100644 src/pages/store/list/index.config.ts create mode 100644 src/pages/store/list/index.tsx create mode 100644 src/pages/store/login/index.config.ts create mode 100644 src/pages/store/login/index.scss create mode 100644 src/pages/store/login/index.tsx create mode 100644 src/pages/store/orders/index.tsx create mode 100644 src/pages/store/users/index.tsx create mode 100644 src/pages/team.config.ts create mode 100644 src/pages/team.tsx create mode 100644 src/pages/title.tsx create mode 100644 src/pages/user/about/index.config.ts create mode 100644 src/pages/user/about/index.tsx create mode 100644 src/pages/user/address-edit.tsx create mode 100644 src/pages/user/address-list.tsx create mode 100644 src/pages/user/balance-log/index.tsx create mode 100644 src/pages/user/benefit-exchange-confirm/index.scss create mode 100644 src/pages/user/benefit-exchange-confirm/index.tsx create mode 100644 src/pages/user/benefit-exchange-list/index.scss create mode 100644 src/pages/user/benefit-exchange-list/index.tsx create mode 100644 src/pages/user/benefit-packages/index.scss create mode 100644 src/pages/user/benefit-packages/index.tsx create mode 100644 src/pages/user/commission/index.config.ts create mode 100644 src/pages/user/commission/index.scss create mode 100644 src/pages/user/commission/index.tsx create mode 100644 src/pages/user/coupon-list.tsx create mode 100644 src/pages/user/customer-service/index.config.ts create mode 100644 src/pages/user/customer-service/index.tsx create mode 100644 src/pages/user/favorite-list/index.tsx create mode 100644 src/pages/user/help-center/index.tsx create mode 100644 src/pages/user/help-detail/index.tsx create mode 100644 src/pages/user/history-list/index.tsx create mode 100644 src/pages/user/index.tsx create mode 100644 src/pages/user/invite-record/index.config.ts create mode 100644 src/pages/user/invite-record/index.tsx create mode 100644 src/pages/user/invite-subordinate/index.config.ts create mode 100644 src/pages/user/invite-subordinate/index.tsx create mode 100644 src/pages/user/member-upgrade/index.config.ts create mode 100644 src/pages/user/member-upgrade/index.tsx create mode 100644 src/pages/user/member/index.config.ts create mode 100644 src/pages/user/member/index.tsx create mode 100644 src/pages/user/points-record.tsx create mode 100644 src/pages/user/profile.tsx create mode 100644 src/pages/user/promotion/index.config.ts create mode 100644 src/pages/user/promotion/index.tsx create mode 100644 src/pages/user/recharge-record/index.tsx create mode 100644 src/pages/user/recharge.tsx create mode 100644 src/pages/user/redeem/index.config.ts create mode 100644 src/pages/user/redeem/index.tsx create mode 100644 src/pages/user/register-pay/index.config.ts create mode 100644 src/pages/user/register-pay/index.tsx create mode 100644 src/pages/user/setting.tsx create mode 100644 src/pages/user/shop-setting/index.tsx create mode 100644 src/pages/user/team/index.config.ts create mode 100644 src/pages/user/team/index.tsx create mode 100644 src/pages/user/user.config.ts create mode 100644 src/pages/user/user.scss create mode 100644 src/pages/user/user.tsx create mode 100644 src/pages/user/vip-review/index.tsx create mode 100644 src/pages/user/vip-upgrade/index.config.ts create mode 100644 src/pages/user/vip-upgrade/index.tsx create mode 100644 src/pages/user/wallet.tsx create mode 100644 src/pages/user/withdraw-list/index.scss create mode 100644 src/pages/user/withdraw-list/index.tsx create mode 100644 src/pages/user/withdraw/index.scss create mode 100644 src/pages/user/withdraw/index.tsx create mode 100644 src/pages/users.tsx create mode 100644 src/pages/withdraw.tsx create mode 100644 src/passport/agreement.config.ts create mode 100644 src/passport/agreement.scss create mode 100644 src/passport/agreement.tsx create mode 100644 src/passport/auth-flow.ts create mode 100644 src/passport/forget.config.ts create mode 100644 src/passport/forget.tsx create mode 100644 src/passport/invite/index.config.ts create mode 100644 src/passport/invite/index.tsx create mode 100644 src/passport/login.config.ts create mode 100644 src/passport/login.scss create mode 100644 src/passport/login.tsx create mode 100644 src/passport/pay/index.config.ts create mode 100644 src/passport/pay/index.tsx create mode 100644 src/passport/phone-auth/index.tsx create mode 100644 src/passport/qr-confirm/index.config.ts create mode 100644 src/passport/qr-confirm/index.tsx create mode 100644 src/passport/qr-login/index.config.ts create mode 100644 src/passport/qr-login/index.tsx create mode 100644 src/passport/register.config.ts create mode 100644 src/passport/register.tsx create mode 100644 src/passport/setting.config.ts create mode 100644 src/passport/setting.tsx create mode 100644 src/passport/sms-login.config.ts create mode 100644 src/passport/sms-login.scss create mode 100644 src/passport/sms-login.tsx create mode 100644 src/passport/unified-qr/index.config.ts create mode 100644 src/passport/unified-qr/index.tsx create mode 100644 src/passport/webview/index.config.ts create mode 100644 src/passport/webview/index.tsx create mode 100644 src/styles/global.scss create mode 100644 src/types/address.ts create mode 100644 src/types/coupon.ts create mode 100644 src/types/global.d.ts create mode 100644 src/types/index.ts create mode 100644 src/types/member.ts create mode 100644 src/types/order.ts create mode 100644 src/types/product.ts create mode 100644 src/utils/auth.ts create mode 100644 src/utils/common.ts create mode 100644 src/utils/geofence.ts create mode 100644 src/utils/image.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/invite.ts create mode 100644 src/utils/login-guard.ts create mode 100644 src/utils/privacy.ts create mode 100644 src/utils/request.ts create mode 100644 src/utils/server.ts create mode 100644 src/utils/vip.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..b56158b --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,556 @@ + + + + + + + + + + { + "associatedIndex": 7 +} + + + + + + + + + + + + + + + + + + + + + <% } %> + + +
+ + diff --git a/src/pages/activity/detail/index.config.ts b/src/pages/activity/detail/index.config.ts new file mode 100644 index 0000000..c739d6b --- /dev/null +++ b/src/pages/activity/detail/index.config.ts @@ -0,0 +1,5 @@ +export default { + navigationBarTitleText: '活动详情', + enableShareAppMessage: true, + enableShareTimeline: true, +} diff --git a/src/pages/activity/detail/index.tsx b/src/pages/activity/detail/index.tsx new file mode 100644 index 0000000..e567775 --- /dev/null +++ b/src/pages/activity/detail/index.tsx @@ -0,0 +1,276 @@ +import React, { useState, useEffect, useRef } from 'react' +import { View, Text, ScrollView, Image } from '@tarojs/components' +import Taro from '@tarojs/taro' +import { getShopActivity, signUpActivity, cancelSignUpActivity, getSignUpStatus } from '@/api/shop/shopActivity' +import type { ShopActivity, ActivityStatus } from '@/api/shop/shopActivity/model' +import { getCompressedImageUrl } from '@/utils/image' +import { useShare } from '@/hooks/useShare' +import SharePoster, { SharePosterHandle } from '@/components/SharePoster' + +definePageConfig({ + navigationBarTitleText: '活动详情', + enableShareAppMessage: true, + enableShareTimeline: true, +}) + +const ActivityDetailPage: React.FC = () => { + const { id } = Taro.getCurrentInstance().router?.params || {} + const [activity, setActivity] = useState(null) + const [loading, setLoading] = useState(true) + const [signedUp, setSignedUp] = useState(false) + const [submitting, setSubmitting] = useState(false) + + // 分享 / 朋友圈 + const posterRef = useRef(null) + const [posterPath, setPosterPath] = useState('') + useShare({ + title: activity?.name || '精彩活动推荐', + path: `/pages/activity/detail?id=${id}`, + query: `id=${id}`, + imageUrl: posterPath || activity?.image || undefined, + }) + + // 数据加载完成后异步生成分享海报(带小程序码) + useEffect(() => { + if (activity) { + posterRef.current + ?.generate({ + cover: activity.image, + title: activity.name || '精彩活动', + page: 'pages/activity/detail', + }) + .then(setPosterPath) + .catch(() => {}) + } + }, [activity]) + + useEffect(() => { + if (id) { + fetchDetail(Number(id)) + fetchSignUpStatus(Number(id)) + } + }, [id]) + + const fetchDetail = async (activityId: number) => { + try { + const data = await getShopActivity(activityId) + setActivity(data) + } catch (err: any) { + Taro.showToast({ title: err.message || '加载失败', icon: 'none' }) + } finally { + setLoading(false) + } + } + + const fetchSignUpStatus = async (activityId: number) => { + try { + const res = await getSignUpStatus(activityId) + setSignedUp(res.signedUp) + } catch { + // 未登录或接口不可用时忽略 + } + } + + // 报名活动 + const handleSignUp = () => { + if (!activity) return + Taro.showModal({ + title: '确认报名', + content: '确定报名参加该活动吗?', + confirmColor: '#0e932e', + success: async (res) => { + if (res.confirm) { + setSubmitting(true) + try { + await signUpActivity({ activityId: activity.id, userId: 0 }) + setSignedUp(true) + setActivity(prev => prev ? { ...prev, participants: prev.participants + 1 } : prev) + Taro.showToast({ title: '报名成功', icon: 'success' }) + } catch (err: any) { + Taro.showToast({ title: err.message || '报名失败', icon: 'none' }) + } finally { + setSubmitting(false) + } + } + } + }) + } + + // 取消报名 + const handleCancelSignUp = () => { + if (!activity) return + Taro.showModal({ + title: '取消报名', + content: '确定取消报名吗?', + confirmColor: '#ef4444', + success: async (res) => { + if (res.confirm) { + setSubmitting(true) + try { + await cancelSignUpActivity(activity.id) + setSignedUp(false) + setActivity(prev => prev ? { ...prev, participants: Math.max(0, prev.participants - 1) } : prev) + Taro.showToast({ title: '已取消报名', icon: 'success' }) + } catch (err: any) { + Taro.showToast({ title: err.message || '取消失败', icon: 'none' }) + } finally { + setSubmitting(false) + } + } + } + }) + } + + // 分享活动 + const handleShare = () => { + Taro.showToast({ title: '分享功能开发中', icon: 'none' }) + } + + // 获取状态标签 + const getStatusLabel = (status: ActivityStatus) => { + const map: Record = { + upcoming: { label: '未开始', color: 'text-blue-500' }, + ongoing: { label: '进行中', color: 'text-green-500' }, + ended: { label: '已结束', color: 'text-gray-400' }, + cancelled: { label: '已取消', color: 'text-gray-400' }, + } + return map[status] || { label: '未知', color: 'text-gray-400' } + } + + // 格式化时间 + const formatTime = (timeStr: string) => { + const date = new Date(timeStr) + return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}` + } + + if (loading) { + return ( + + 加载中... + + ) + } + + if (!activity) { + return ( + + 活动不存在 + + ) + } + + const statusInfo = getStatusLabel(activity.status) + + return ( + + + {/* 活动头图 */} + {activity.image ? ( + + ) : ( + + 🎉 + + )} + + {/* 活动信息 */} + + + {activity.name} + + {statusInfo.label} + + + + + + 📅 + {formatTime(activity.startTime)} + + + 👥 + {activity.participants}人参与 + + {activity.maxParticipants && ( + + 🔢 + 限{activity.maxParticipants}人 + + )} + + + + {activity.typeName || activity.type} + {activity.description.split('\n')[0]} + + + + {/* 活动详情 */} + + 活动详情 + + {activity.description} + + + + {/* 活动规则 */} + {activity.rules && ( + + 活动规则 + + {activity.rules} + + + )} + + + + + {/* 底部操作栏 */} + + + 分享 + + + {activity.status === 'ongoing' && !signedUp && ( + + {submitting ? '处理中...' : '立即报名'} + + )} + + {activity.status === 'ongoing' && signedUp && ( + + {submitting ? '处理中...' : '取消报名'} + + )} + + {activity.status === 'upcoming' && ( + + 即将开始 + + )} + + {(activity.status === 'ended' || activity.status === 'cancelled') && ( + + 已结束 + + )} + + {/* 分享海报画布(离屏,用于生成带小程序码的海报图) */} + + + ) +} + +export default ActivityDetailPage diff --git a/src/pages/activity/list/index.config.ts b/src/pages/activity/list/index.config.ts new file mode 100644 index 0000000..6b10e16 --- /dev/null +++ b/src/pages/activity/list/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: '活动列表', +} diff --git a/src/pages/activity/list/index.tsx b/src/pages/activity/list/index.tsx new file mode 100644 index 0000000..c6e4efe --- /dev/null +++ b/src/pages/activity/list/index.tsx @@ -0,0 +1,220 @@ +import React, { useState, useEffect } from 'react' +import { View, Text, ScrollView } from '@tarojs/components' +import Taro from '@tarojs/taro' +import { pageShopActivity, signUpActivity } from '@/api/shop/shopActivity' +import type { ShopActivity, ActivityStatus, ActivityType } from '@/api/shop/shopActivity' +import EmptyState from '@/components/common/EmptyState' +import LoadMore from '@/components/common/LoadMore' + +definePageConfig({ + navigationBarTitleText: '活动列表', +}) + +const ActivityListPage: React.FC = () => { + const [activeTab, setActiveTab] = useState(0) + const [activities, setActivities] = useState([]) + const [loading, setLoading] = useState(false) + const [finished, setFinished] = useState(false) + const [page, setPage] = useState(1) + + useEffect(() => { + setActivities([]) + setPage(1) + setFinished(false) + loadList(1) + }, [activeTab]) + + const loadList = async (p: number) => { + if (loading) return + setLoading(true) + + try { + // 根据 tab 筛选状态 + let status: ActivityStatus | undefined + if (activeTab === 1) status = 'ongoing' + else if (activeTab === 2) status = 'upcoming' + else if (activeTab === 3) status = 'ended' + + const res = await pageShopActivity({ + page: p, + limit: 10, + status, + }) + + if (res?.list) { + if (p === 1) { + setActivities(res.list) + } else { + setActivities(prev => [...prev, ...res.list]) + } + setFinished(res.list.length < 10) + setPage(p) + } + } catch (err) { + console.error('加载活动列表失败', err) + Taro.showToast({ title: '加载失败', icon: 'none' }) + } finally { + setLoading(false) + } + } + + // 加载更多 + const handleLoadMore = () => { + if (!finished && !loading) { + loadList(page + 1) + } + } + + // 报名活动 + const handleSignUp = async (id: number) => { + Taro.showModal({ + title: '确认报名', + content: '确定报名参加该活动吗?', + confirmColor: '#0e932e', + success: async (res) => { + if (res.confirm) { + try { + await signUpActivity({ activityId: id, userId: 0 }) + Taro.showToast({ title: '报名成功', icon: 'success' }) + } catch (err) { + console.error('报名失败', err) + Taro.showToast({ title: '报名失败', icon: 'none' }) + } + } + } + }) + } + + // 获取状态标签 + const getStatusLabel = (status: ActivityStatus) => { + const map: Record = { + 'upcoming': { label: '未开始', color: 'text-blue-500' }, + 'ongoing': { label: '进行中', color: 'text-green-500' }, + 'ended': { label: '已结束', color: 'text-gray-400' }, + 'cancelled': { label: '已取消', color: 'text-gray-400' }, + } + return map[status] || { label: '未知', color: 'text-gray-400' } + } + + // 获取活动类型名称 + const getTypeLabel = (type: ActivityType) => { + const map: Record = { + 'discount': '限时折扣', + 'full_reduction': '满减活动', + 'seckill': '秒杀活动', + 'group_buy': '团购活动', + 'flash_sale': '闪购活动', + } + return map[type] || '其他' + } + + // 格式化时间 + const formatTime = (timeStr: string) => { + const date = new Date(timeStr) + const month = (date.getMonth() + 1).toString().padStart(2, '0') + const day = date.getDate().toString().padStart(2, '0') + const hour = date.getHours().toString().padStart(2, '0') + const minute = date.getMinutes().toString().padStart(2, '0') + return `${month}-${day} ${hour}:${minute}` + } + + return ( + + {/* Tab 栏 */} + + {['全部', '进行中', '未开始', '已结束'].map((tab, index) => ( + setActiveTab(index)} + > + {tab} + {activeTab === index && ( + + )} + + ))} + + + {/* 活动列表 */} + + + {activities.length === 0 && !loading ? ( + + ) : ( + activities.map(activity => ( + (() => { + const statusInfo = getStatusLabel(activity.status) + return ( + Taro.navigateTo({ url: `/pages/activity/detail/index?id=${activity.id}` })}> + {/* 活动图片 */} + + 🎉 + + + {/* 活动信息 */} + + + {activity.name} + + {statusInfo.label} + + + {activity.description} + + + + 📅 + {formatTime(activity.startTime)} + + + 👥 + {activity.participants}人参与 + + + + + {/* 活动类型标签 */} + + + {getTypeLabel(activity.type)} + + + {activity.status === 'ongoing' && ( + handleSignUp(activity.id)} + > + 立即报名 + + )} + {activity.status === 'upcoming' && ( + Taro.navigateTo({ url: `/pages/activity/detail/index?id=${activity.id}` })} + > + 查看详情 + + )} + + + ) + })() + )) + )} + + + + + + ) +} + +export default ActivityListPage diff --git a/src/pages/after-sale/apply/index.config.ts b/src/pages/after-sale/apply/index.config.ts new file mode 100644 index 0000000..716b532 --- /dev/null +++ b/src/pages/after-sale/apply/index.config.ts @@ -0,0 +1,3 @@ +export default { + navigationBarTitleText: '申请售后', +} diff --git a/src/pages/after-sale/apply/index.tsx b/src/pages/after-sale/apply/index.tsx new file mode 100644 index 0000000..593e9f4 --- /dev/null +++ b/src/pages/after-sale/apply/index.tsx @@ -0,0 +1,251 @@ +import React, { useState } from 'react' +import { View, Text, Textarea, ScrollView, Radio, RadioGroup, Checkbox, Input } from '@tarojs/components' +import Taro from '@tarojs/taro' +import { applyAfterSale } from '@/api/shop/shopAfterSale' +import type { AfterSaleType } from '@/api/shop/shopAfterSale' + +definePageConfig({ + navigationBarTitleText: '申请售后', +}) + +const AfterSaleApplyPage: React.FC = () => { + const params = Taro.getCurrentInstance().router?.params || {} + const orderId = params.orderId || '' + const [orderGoods, setOrderGoods] = useState>([]) + const [saleType, setSaleType] = useState(1) // 1:退款, 2:退货退款, 3:换货 + const [submitting, setSubmitting] = useState(false) + const [reason, setReason] = useState('') + const [amount, setAmount] = useState('') + const [description, setDescription] = useState('') + const [images, setImages] = useState([]) + + // 退款原因选项 + const refundReasons = ['商品质量问题', '商品与描述不符', '商品破损/缺陷', '物流问题', '其他'] + const returnReasons = ['商品质量问题', '商品与描述不符', '商品破损/缺陷', '尺码/颜色不合适', '不喜欢/不想要', '其他'] + const exchangeReasons = ['商品质量问题', '商品与描述不符', '商品破损/缺陷', '尺码/颜色不合适', '其他'] + + // 获取当前原因列表 + const getCurrentReasons = () => { + if (saleType === 1) return refundReasons + if (saleType === 2) return returnReasons + return exchangeReasons + } + + // 处理商品选择 + const handleGoodsCheck = (id: number) => { + setOrderGoods(prev => + prev.map(g => g.id === id ? { ...g, checked: !g.checked } : g) + ) + } + + // 选择图片 + const handleChooseImage = () => { + if (images.length >= 6) { + Taro.showToast({ title: '最多上传6张图片', icon: 'none' }) + return + } + Taro.chooseImage({ + count: 6 - images.length, + success: (res) => { + setImages(prev => [...prev, ...res.tempFilePaths]) + } + }) + } + + // 删除图片 + const handleDeleteImage = (index: number) => { + setImages(prev => prev.filter((_, i) => i !== index)) + } + + // 提交申请 + const handleSubmit = () => { + const checkedGoods = orderGoods.filter(g => g.checked) + if (!reason) { + Taro.showToast({ title: '请选择原因', icon: 'none' }) + return + } + if (saleType === 1 && !amount) { + Taro.showToast({ title: '请输入退款金额', icon: 'none' }) + return + } + + const typeMap: Record = { + 1: 'refund', + 2: 'return', + 3: 'exchange', + } + + Taro.showModal({ + title: '确认提交', + content: '确定提交售后申请吗?', + confirmColor: '#0e932e', + success: async (res) => { + if (res.confirm) { + setSubmitting(true) + Taro.showLoading({ title: '提交中...' }) + try { + await applyAfterSale({ + orderId, + type: typeMap[saleType], + reason, + description, + amount: saleType === 1 ? Number(amount) : undefined, + evidenceImages: images, + goodsItems: checkedGoods.map(g => ({ goodsId: String(g.id), quantity: g.num })), + }) + Taro.hideLoading() + Taro.showToast({ title: '提交成功', icon: 'success' }) + setTimeout(() => Taro.navigateBack(), 1500) + } catch (err: any) { + Taro.hideLoading() + Taro.showToast({ title: err.message || '提交失败', icon: 'none' }) + } finally { + setSubmitting(false) + } + } + } + }) + } + + return ( + + + {/* 订单商品 */} + + 选择商品 + {orderGoods.map(goods => ( + handleGoodsCheck(goods.id)} + > + + + 🛍️ + + + {goods.name} + ¥{goods.price} × {goods.num} + + + ))} + + + {/* 售后类型 */} + + 售后类型 + setSaleType(parseInt(e.detail.value))}> + + + + 仅退款 + + + + 退货退款 + + + + 换货 + + + + + + {/* 退款金额 */} + {saleType === 1 && ( + + 退款金额 + + ¥ + setAmount(e.detail.value)} + placeholder='请输入退款金额' + className='flex-1' + /> + + 最多可退 ¥134.00 + + )} + + {/* 售后原因 */} + + 售后原因 + + {getCurrentReasons().map((r, index) => ( + setReason(r)} + > + + {r} + + + ))} + + + + {/* 问题描述 */} + + 问题描述 +