From 5a968a719fca4f0a98c7c9083e8b44cc40f1b2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=94=E6=96=B9=E7=86=8A=E6=88=90=E7=A5=A5?= <3615096616@qq.com> Date: Thu, 7 May 2026 22:54:21 +0800 Subject: [PATCH] 1 --- dist.zip | Bin 0 -> 115566 bytes src/apis/mall-app/address.ts | 64 + src/apis/mall-app/afterSale.ts | 19 +- src/apis/mall-app/cart.ts | 18 +- src/apis/mall-app/index.ts | 1 + src/apis/mall-app/normalize.ts | 290 ++- src/apis/mall-app/order.ts | 11 +- src/apis/mall-app/shared.ts | 4 + src/apis/mall-app/trade.ts | 11 +- src/index.css | 1591 ++++++++++++++++- src/mocks/mall.ts | 16 +- src/pages/goods/GoodsDetailPage.tsx | 105 +- src/pages/home/HomePage.tsx | 15 +- src/pages/member/MemberCenterPage.tsx | 2365 +++++++++++++++++++++++-- src/pages/shop/ShopPage.tsx | 13 +- src/types/mall.ts | 309 ++-- 16 files changed, 4549 insertions(+), 283 deletions(-) create mode 100644 dist.zip create mode 100644 src/apis/mall-app/address.ts diff --git a/dist.zip b/dist.zip new file mode 100644 index 0000000000000000000000000000000000000000..ad3e81194af73afab3a827aea087ee59f4d7cffa GIT binary patch literal 115566 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 literal 0 HcmV?d00001 diff --git a/src/apis/mall-app/address.ts b/src/apis/mall-app/address.ts new file mode 100644 index 0000000..1e0e322 --- /dev/null +++ b/src/apis/mall-app/address.ts @@ -0,0 +1,64 @@ +import { + APP_API_PATHS, + normalizeAppAddressDefaultSetResponse, + normalizeAppAddressListResponse, + normalizeAppAddressSaveResponse, + normalizeMallAppPayload, + postMallApp, +} from './shared' +import type { + AppAddressDefaultSetRequest, + AppAddressDefaultSetResponse, + AppAddressDeleteRequest, + AppAddressDeleteResponse, + AppAddressListRequest, + AppAddressListResponse, + AppAddressSaveRequest, + AppAddressSaveResponse, +} from '@/types/mall' + +export const apiAppAddressList = async (payload: AppAddressListRequest, signal?: AbortSignal) => { + const response = await postMallApp( + APP_API_PATHS.addressList, + normalizeMallAppPayload(payload), + signal + ) + + return { + ...response, + data: normalizeAppAddressListResponse(response.data), + } +} + +export const apiAppAddressSave = async (payload: AppAddressSaveRequest, signal?: AbortSignal) => { + const response = await postMallApp( + APP_API_PATHS.addressSave, + normalizeMallAppPayload(payload), + signal + ) + + return { + ...response, + data: normalizeAppAddressSaveResponse(response.data), + } +} + +export const apiAppAddressDelete = (payload: AppAddressDeleteRequest, signal?: AbortSignal) => + postMallApp( + APP_API_PATHS.addressDelete, + normalizeMallAppPayload(payload), + signal + ) + +export const apiAppAddressDefaultSet = async (payload: AppAddressDefaultSetRequest, signal?: AbortSignal) => { + const response = await postMallApp( + APP_API_PATHS.addressDefaultSet, + normalizeMallAppPayload(payload), + signal + ) + + return { + ...response, + data: normalizeAppAddressDefaultSetResponse(response.data), + } +} diff --git a/src/apis/mall-app/afterSale.ts b/src/apis/mall-app/afterSale.ts index 34c1608..db78320 100644 --- a/src/apis/mall-app/afterSale.ts +++ b/src/apis/mall-app/afterSale.ts @@ -1,15 +1,26 @@ -import { APP_API_PATHS, normalizeMallAppPayload, postMallApp } from './shared' +import { + APP_API_PATHS, + normalizeAppAfterSaleApplyResponse, + normalizeMallAppPayload, + postMallApp, +} from './shared' import type { AppAfterSaleApplyRequest, AppAfterSaleApplyResponse, } from '@/types/mall' -export const apiAppAfterSaleApply = ( +export const apiAppAfterSaleApply = async ( payload: AppAfterSaleApplyRequest, signal?: AbortSignal -) => - postMallApp( +) => { + const response = await postMallApp( APP_API_PATHS.afterSaleApply, normalizeMallAppPayload(payload), signal ) + + return { + ...response, + data: normalizeAppAfterSaleApplyResponse(response.data), + } +} diff --git a/src/apis/mall-app/cart.ts b/src/apis/mall-app/cart.ts index 6f401b4..9afcf25 100644 --- a/src/apis/mall-app/cart.ts +++ b/src/apis/mall-app/cart.ts @@ -1,4 +1,10 @@ -import { APP_API_PATHS, normalizeAppCartListResponse, normalizeMallAppPayload, postMallApp } from './shared' +import { + APP_API_PATHS, + normalizeAppCartListResponse, + normalizeAppCartSaveResponse, + normalizeMallAppPayload, + postMallApp, +} from './shared' import type { AppCartListRequest, AppCartListResponse, @@ -21,13 +27,19 @@ export const apiAppCartList = async (payload: AppCartListRequest, signal?: Abort } } -export const apiAppCartSave = (payload: AppCartSaveRequest, signal?: AbortSignal) => - postMallApp( +export const apiAppCartSave = async (payload: AppCartSaveRequest, signal?: AbortSignal) => { + const response = await postMallApp( APP_API_PATHS.cartSave, normalizeMallAppPayload(payload), signal ) + return { + ...response, + data: normalizeAppCartSaveResponse(response.data), + } +} + export const apiAppCartRemove = (payload: AppCartRemoveRequest, signal?: AbortSignal) => postMallApp( APP_API_PATHS.cartRemove, diff --git a/src/apis/mall-app/index.ts b/src/apis/mall-app/index.ts index a1dd192..ccd9db2 100644 --- a/src/apis/mall-app/index.ts +++ b/src/apis/mall-app/index.ts @@ -2,6 +2,7 @@ export * from './shared' export * from './home' export * from './goods' export * from './cart' +export * from './address' export * from './trade' export * from './order' export * from './afterSale' diff --git a/src/apis/mall-app/normalize.ts b/src/apis/mall-app/normalize.ts index c40a925..6b40b97 100644 --- a/src/apis/mall-app/normalize.ts +++ b/src/apis/mall-app/normalize.ts @@ -1,31 +1,43 @@ import type { + AppAddressDefaultSetResponse, + AppAddressListResponse, + AppAddressSaveResponse, + AppAfterSaleApplyResponse, AppCartListResponse, + AppCartSaveResponse, AppGoodsDetailResponse, AppGoodsPageResponse, AppHomeMerchantGoodsResponse, AppHomeResponse, AppRecentNewGoodsResponse, AppOrderDetailResponse, + AppOrderConfirmResponse, AppOrderPageResponse, + AppTradeCreateResponse, CartItemInfo, + CartGoodsGroupInfo, + CartMerchantGroupInfo, GoodsDetailInfo, GoodsSkuInfo, GoodsSummary, AppTradePreviewResponse, HomeMerchantGoodsBlock, + MerchantDeliveryOptionInfo, MerchantId, MerchantInfo, + MerchantPackageOptionInfo, OrderDetailInfo, OrderSummary, RecommendMerchantInfo, RecentNewGoodsItem, TradePreviewInfo, + TradePreviewItemInfo, TradePreviewStoreInfo, } from '@/types/mall' -type MaybeMallUidPayload = { +type MaybeMallIdentityPayload = { uid?: number - memberId?: number + memberId?: MerchantId | number } type MaybeMallMerchantPayload = { @@ -33,6 +45,22 @@ type MaybeMallMerchantPayload = { storeId?: number | string } +type MaybeMallIdPayload = { + id?: string | number + skuId?: string | number + skuIds?: Array + addressId?: string | number + orderId?: string | number + orderItemId?: string | number + categoryId?: string | number + buyItems?: Array<{ skuId?: string | number; buyNum?: number }> + merchantOptions?: Array<{ + merchantId?: MerchantId | number + deliveryOptionId?: string | number + packageOptionId?: string | number + }> +} + type RawRecommendMerchantPayload = Partial & { id?: RecommendMerchantInfo['id'] merchantId?: MerchantId | number | string @@ -56,6 +84,8 @@ type RawMerchantEntityPayload = Partial & { } type RawGoodsSummaryPayload = Partial & { + id?: GoodsSummary['id'] | number + spuId?: GoodsSummary['id'] | number merchantId?: MerchantId | number | string createdAt?: GoodsSummary['createdAt'] | string | null updatedAt?: GoodsSummary['updatedAt'] | string | null @@ -69,14 +99,29 @@ type RawGoodsSummaryPayload = Partial & { update_time?: number | string | null } -const toMerchantId = (value: MerchantId | number | string | null | undefined): MerchantId => - value == null ? '' : String(value) +const toId = (value: string | number | null | undefined): string => (value == null ? '' : String(value)) + +const toMerchantId = (value: MerchantId | number | string | null | undefined): MerchantId => toId(value) const toNumber = (value: number | string | null | undefined): number => { const parsed = Number(value) return Number.isFinite(parsed) ? parsed : 0 } +const toBoolean = (value: boolean | number | string | null | undefined): boolean => { + if (typeof value === 'boolean') { + return value + } + if (typeof value === 'number') { + return value !== 0 + } + if (typeof value === 'string') { + return ['1', 'true', 'yes'].includes(value.trim().toLowerCase()) + } + + return false +} + const pickText = (...values: Array): string => { for (const value of values) { if (typeof value === 'string' && value.trim()) { @@ -111,12 +156,52 @@ const toUnixTime = (value: number | string | null | undefined): number => { } export const normalizeMallAppPayload = (payload: TPayload): TPayload => { - const normalized = { ...payload } as TPayload & MaybeMallUidPayload & MaybeMallMerchantPayload + const normalized = { ...payload } as TPayload & + MaybeMallIdentityPayload & + MaybeMallMerchantPayload & + MaybeMallIdPayload - if (normalized.uid == null && normalized.memberId != null) { - normalized.uid = normalized.memberId + delete normalized.uid + if (normalized.memberId != null) { + normalized.memberId = toMerchantId(normalized.memberId) + } + + if (normalized.id != null) { + normalized.id = toId(normalized.id) + } + if (normalized.skuId != null) { + normalized.skuId = toId(normalized.skuId) + } + if (normalized.skuIds != null) { + normalized.skuIds = normalized.skuIds.map(toId) + } + if (normalized.addressId != null) { + normalized.addressId = toId(normalized.addressId) + } + if (normalized.orderId != null) { + normalized.orderId = toId(normalized.orderId) + } + if (normalized.orderItemId != null) { + normalized.orderItemId = toId(normalized.orderItemId) + } + if (normalized.categoryId != null) { + normalized.categoryId = toId(normalized.categoryId) + } + if (normalized.buyItems != null) { + normalized.buyItems = normalized.buyItems.map(item => ({ + ...item, + skuId: item.skuId == null ? item.skuId : toId(item.skuId), + })) + } + if (normalized.merchantOptions != null) { + normalized.merchantOptions = normalized.merchantOptions.map(option => ({ + ...option, + merchantId: option.merchantId == null ? option.merchantId : toMerchantId(option.merchantId), + deliveryOptionId: + option.deliveryOptionId == null ? option.deliveryOptionId : toId(option.deliveryOptionId), + packageOptionId: option.packageOptionId == null ? option.packageOptionId : toId(option.packageOptionId), + })) } - delete normalized.memberId if (normalized.merchantId != null) { normalized.merchantId = toMerchantId(normalized.merchantId) @@ -131,7 +216,10 @@ export const normalizeMallAppPayload = (payload: TPaylo const normalizeGoodsSku = (sku: GoodsSkuInfo): GoodsSkuInfo => ({ ...sku, + id: toId(sku.id), + spuId: String(sku.spuId), merchantId: toMerchantId(sku.merchantId), + storeId: toId(sku.storeId), }) const normalizeGoodsSummary = (goods: RawGoodsSummaryPayload): GoodsSummary => { @@ -139,9 +227,12 @@ const normalizeGoodsSummary = (goods: RawGoodsSummaryPayload): GoodsSummary => { return { ...normalized, + id: String(goods.spuId ?? goods.id ?? ''), merchantId: toMerchantId(goods.merchantId), merchantName: pickText(goods.merchantName), merchantLogo: pickText(goods.merchantLogo), + storeId: toId(goods.storeId), + categoryId: toId(goods.categoryId), createdAt: toUnixTime(goods.createdAt ?? goods.createAt ?? goods.created_at ?? goods.createTime ?? goods.create_time), updatedAt: toUnixTime(goods.updatedAt ?? goods.updateAt ?? goods.updated_at ?? goods.updateTime ?? goods.update_time), } @@ -159,7 +250,10 @@ const normalizeRecentNewGoodsItem = (goods: RecentNewGoodsItem): RecentNewGoodsI const normalizeGoodsDetailInfo = (detail: GoodsDetailInfo): GoodsDetailInfo => ({ ...detail, + id: toId(detail.id), merchantId: toMerchantId(detail.merchantId), + storeId: toId(detail.storeId), + categoryId: toId(detail.categoryId), createdAt: toUnixTime(detail.createdAt), updatedAt: toUnixTime(detail.updatedAt), skus: (detail.skus ?? []).map(normalizeGoodsSku), @@ -167,22 +261,104 @@ const normalizeGoodsDetailInfo = (detail: GoodsDetailInfo): GoodsDetailInfo => ( const normalizeCartItem = (item: CartItemInfo): CartItemInfo => ({ ...item, + id: toId(item.id), + memberId: item.memberId == null ? undefined : toMerchantId(item.memberId), merchantId: toMerchantId(item.merchantId), + merchantName: pickText(item.merchantName), + merchantLogo: pickText(item.merchantLogo), + storeId: toId(item.storeId), + spuId: String(item.spuId), + skuId: toId(item.skuId), + itemAmount: + item.itemAmount ?? + (Number.isFinite(Number(item.salePrice)) && Number.isFinite(Number(item.buyNum)) + ? (Number(item.salePrice) * Number(item.buyNum)).toFixed(2) + : '0'), +}) + +const normalizeCartGoodsGroup = (goods: CartGoodsGroupInfo): CartGoodsGroupInfo => ({ + ...goods, + spuId: String(goods.spuId), + spuName: pickText(goods.spuName), + coverUrl: pickText(goods.coverUrl), + checked: Boolean(goods.checked), + goodsAmount: goods.goodsAmount ?? '0', + checkedAmount: goods.checkedAmount ?? '0', + items: (goods.items ?? []).map(normalizeCartItem), +}) + +const normalizeCartMerchantGroup = (group: CartMerchantGroupInfo): CartMerchantGroupInfo => ({ + ...group, + merchantId: toMerchantId(group.merchantId), + merchantName: pickText(group.merchantName) || '未命名商家', + merchantLogo: pickText(group.merchantLogo), + checked: Boolean(group.checked), + itemCount: toNumber(group.itemCount), + goodsCount: toNumber(group.goodsCount), + goodsAmount: group.goodsAmount ?? '0', + checkedAmount: group.checkedAmount ?? '0', + goods: (group.goods ?? []).map(normalizeCartGoodsGroup), +}) + +const normalizeTradePreviewItem = (item: TradePreviewItemInfo): TradePreviewItemInfo => ({ + ...item, + spuId: String(item.spuId), + skuId: toId(item.skuId), +}) + +const normalizeDeliveryOption = (option: MerchantDeliveryOptionInfo): MerchantDeliveryOptionInfo => ({ + ...option, + id: toId(option.id), + merchantId: toMerchantId(option.merchantId), +}) + +const normalizePackageOption = (option: MerchantPackageOptionInfo): MerchantPackageOptionInfo => ({ + ...option, + id: toId(option.id), + merchantId: toMerchantId(option.merchantId), }) const normalizeTradePreviewGroup = (group: TradePreviewStoreInfo): TradePreviewStoreInfo => ({ ...group, merchantId: toMerchantId(group.merchantId), + storeId: group.storeId == null ? undefined : toId(group.storeId), + deliveryOptions: (group.deliveryOptions ?? []).map(normalizeDeliveryOption), + packageOptions: (group.packageOptions ?? []).map(normalizePackageOption), + selectedDeliveryOption: group.selectedDeliveryOption + ? normalizeDeliveryOption(group.selectedDeliveryOption) + : undefined, + selectedPackageOption: group.selectedPackageOption ? normalizePackageOption(group.selectedPackageOption) : undefined, + items: (group.items ?? []).map(normalizeTradePreviewItem), }) const normalizeOrderSummary = (order: OrderSummary): OrderSummary => ({ ...order, + id: toId(order.id), + tradeId: toId(order.tradeId), + memberId: order.memberId == null ? undefined : toMerchantId(order.memberId), merchantId: toMerchantId(order.merchantId), + storeId: toId(order.storeId), }) const normalizeOrderDetailInfo = (order: OrderDetailInfo): OrderDetailInfo => ({ ...order, + id: toId(order.id), + tradeId: toId(order.tradeId), + memberId: order.memberId == null ? undefined : toMerchantId(order.memberId), merchantId: toMerchantId(order.merchantId), + storeId: toId(order.storeId), + selectedDeliveryOption: order.selectedDeliveryOption + ? normalizeDeliveryOption(order.selectedDeliveryOption) + : undefined, + selectedPackageOption: order.selectedPackageOption ? normalizePackageOption(order.selectedPackageOption) : undefined, + items: (order.items ?? []).map(item => ({ + ...item, + id: toId(item.id), + orderId: toId(item.orderId), + tradeId: toId(item.tradeId), + spuId: String(item.spuId), + skuId: toId(item.skuId), + })), }) const normalizeRecommendMerchant = ( @@ -194,6 +370,7 @@ const normalizeRecommendMerchant = ( return { ...(merchant as RecommendMerchantInfo), + id: toId(merchant.id ?? merchant.merchantId), merchantId: toMerchantId(merchant.merchantId ?? merchant.id), storeName: pickText(merchant.storeName, merchant.merchantName), storeLogo: pickText(merchant.storeLogo, merchant.logo), @@ -215,6 +392,7 @@ const normalizeMerchantEntity = ( return { ...(merchant as MerchantInfo), + id: toId(merchant.id ?? merchant.merchantId), merchantId: toMerchantId(merchant.merchantId ?? merchant.id), storeName: pickText(merchant.storeName, merchant.merchantName), storeLogo: pickText(merchant.storeLogo, merchant.logo), @@ -223,6 +401,26 @@ const normalizeMerchantEntity = ( } } +const normalizeAddressInfo = (address: AppAddressListResponse['list'][number]) => ({ + ...address, + id: toId(address.id), +}) + +const normalizeBanner = (banner: AppHomeResponse['banners'][number]) => ({ + ...banner, + id: toId(banner.id), +}) + +const normalizeCategoryNav = (category: AppHomeResponse['categoryNavs'][number]) => ({ + ...category, + categoryId: toId(category.categoryId), +}) + +const normalizeChannel = (channel: AppHomeResponse['channels'][number]) => ({ + ...channel, + id: toId(channel.id), +}) + const normalizeHomeMerchantGoodsBlock = ( block: HomeMerchantGoodsBlock | undefined ): HomeMerchantGoodsBlock | undefined => { @@ -262,7 +460,40 @@ export const normalizeAppCartListResponse = ( payload: AppCartListResponse ): AppCartListResponse => ({ ...payload, - list: payload.list.map(normalizeCartItem), + merchantGroups: (payload.merchantGroups ?? []).map(normalizeCartMerchantGroup), + itemCount: toNumber(payload.itemCount), + goodsCount: toNumber(payload.goodsCount), + goodsAmount: payload.goodsAmount ?? '0', + checkedCount: toNumber(payload.checkedCount), + checkedAmount: payload.checkedAmount ?? '0', +}) + +export const normalizeAppCartSaveResponse = ( + payload: AppCartSaveResponse +): AppCartSaveResponse => ({ + ...payload, + cartId: toId(payload.cartId), +}) + +export const normalizeAppAddressListResponse = ( + payload: AppAddressListResponse +): AppAddressListResponse => ({ + ...payload, + list: (payload.list ?? []).map(normalizeAddressInfo), +}) + +export const normalizeAppAddressSaveResponse = ( + payload: AppAddressSaveResponse +): AppAddressSaveResponse => ({ + ...payload, + addressId: toId(payload.addressId), +}) + +export const normalizeAppAddressDefaultSetResponse = ( + payload: AppAddressDefaultSetResponse +): AppAddressDefaultSetResponse => ({ + ...payload, + addressId: toId(payload.addressId), }) export const normalizeAppOrderPageResponse = ( @@ -279,6 +510,20 @@ export const normalizeAppOrderDetailResponse = ( data: normalizeOrderDetailInfo(payload.data), }) +export const normalizeAppOrderConfirmResponse = ( + payload: AppOrderConfirmResponse +): AppOrderConfirmResponse => ({ + ...payload, + orderId: toId(payload.orderId), +}) + +export const normalizeAppAfterSaleApplyResponse = ( + payload: AppAfterSaleApplyResponse +): AppAfterSaleApplyResponse => ({ + ...payload, + afterSaleId: toId(payload.afterSaleId), +}) + export const normalizeAppHomeResponse = (payload: AppHomeResponse): AppHomeResponse => { const recommendMerchants = (payload.recommendMerchants ?? payload.recommendStores ?? []) .map(normalizeRecommendMerchant) @@ -289,6 +534,9 @@ export const normalizeAppHomeResponse = (payload: AppHomeResponse): AppHomeRespo return { ...payload, + banners: (payload.banners ?? []).map(normalizeBanner), + categoryNavs: (payload.categoryNavs ?? []).map(normalizeCategoryNav), + channels: (payload.channels ?? []).map(normalizeChannel), recommendGoods: payload.recommendGoods.map(normalizeGoodsSummary), recommendMerchants, featuredMerchants, @@ -305,7 +553,7 @@ export const normalizeAppHomeMerchantGoodsResponse = ( normalizeHomeMerchantGoodsBlock(payload.data) ?? ({ merchant: { - id: 0, + id: '0', merchantId: '0', storeName: '', storeLogo: '', @@ -319,7 +567,7 @@ export const normalizeAppHomeMerchantGoodsResponse = ( orderCount: 0, }, store: { - id: 0, + id: '0', merchantId: '0', storeName: '', storeLogo: '', @@ -354,7 +602,7 @@ export const normalizeAppTradePreviewResponse = ( ): AppTradePreviewResponse => { const data = payload.data as TradePreviewInfo & { uid?: number - memberId?: number + memberId?: MerchantId | number merchantGroups?: TradePreviewInfo['merchantGroups'] storeGroups?: TradePreviewInfo['merchantGroups'] } @@ -364,10 +612,24 @@ export const normalizeAppTradePreviewResponse = ( ...payload, data: { ...data, - uid: data.uid ?? data.memberId ?? 0, - memberId: data.memberId ?? data.uid, + addressId: toId(data.addressId), + uid: data.uid ?? 0, + memberId: data.memberId == null ? undefined : toMerchantId(data.memberId), merchantGroups: merchantGroups.map(normalizeTradePreviewGroup), storeGroups: merchantGroups.map(normalizeTradePreviewGroup), }, } } + +export const normalizeAppTradeCreateResponse = ( + payload: AppTradeCreateResponse +): AppTradeCreateResponse => ({ + ...payload, + tradeId: toId(payload.tradeId), + payUrl: pickText(payload.payUrl), + payExternal: toBoolean(payload.payExternal), + payExpiredAt: toUnixTime(payload.payExpiredAt), + payChannel: pickText(payload.payChannel), + paySubject: pickText(payload.paySubject), + orderIds: (payload.orderIds ?? []).map(toId), +}) diff --git a/src/apis/mall-app/order.ts b/src/apis/mall-app/order.ts index e6f5313..66b0d79 100644 --- a/src/apis/mall-app/order.ts +++ b/src/apis/mall-app/order.ts @@ -1,6 +1,7 @@ import { APP_API_PATHS, normalizeAppOrderDetailResponse, + normalizeAppOrderConfirmResponse, normalizeAppOrderPageResponse, normalizeMallAppPayload, postMallApp, @@ -40,9 +41,15 @@ export const apiAppOrderDetail = async (payload: AppOrderDetailRequest, signal?: } } -export const apiAppOrderConfirm = (payload: AppOrderConfirmRequest, signal?: AbortSignal) => - postMallApp( +export const apiAppOrderConfirm = async (payload: AppOrderConfirmRequest, signal?: AbortSignal) => { + const response = await postMallApp( APP_API_PATHS.orderConfirm, normalizeMallAppPayload(payload), signal ) + + return { + ...response, + data: normalizeAppOrderConfirmResponse(response.data), + } +} diff --git a/src/apis/mall-app/shared.ts b/src/apis/mall-app/shared.ts index 3467ce6..5a008db 100644 --- a/src/apis/mall-app/shared.ts +++ b/src/apis/mall-app/shared.ts @@ -11,6 +11,10 @@ export const APP_API_PATHS = { cartList: '/api/v1/mall/app/cart_list', cartSave: '/api/v1/mall/app/cart_save', cartRemove: '/api/v1/mall/app/cart_remove', + addressList: '/api/v1/mall/app/address_list', + addressSave: '/api/v1/mall/app/address_save', + addressDelete: '/api/v1/mall/app/address_delete', + addressDefaultSet: '/api/v1/mall/app/address_default_set', tradePreview: '/api/v1/mall/app/trade_preview', tradeCreate: '/api/v1/mall/app/trade_create', orderPage: '/api/v1/mall/app/order_page', diff --git a/src/apis/mall-app/trade.ts b/src/apis/mall-app/trade.ts index 22e861d..e2082f5 100644 --- a/src/apis/mall-app/trade.ts +++ b/src/apis/mall-app/trade.ts @@ -1,5 +1,6 @@ import { APP_API_PATHS, + normalizeAppTradeCreateResponse, normalizeAppTradePreviewResponse, normalizeMallAppPayload, postMallApp, @@ -24,9 +25,15 @@ export const apiAppTradePreview = async (payload: AppTradePreviewRequest, signal } } -export const apiAppTradeCreate = (payload: AppTradeCreateRequest, signal?: AbortSignal) => - postMallApp( +export const apiAppTradeCreate = async (payload: AppTradeCreateRequest, signal?: AbortSignal) => { + const response = await postMallApp( APP_API_PATHS.tradeCreate, normalizeMallAppPayload(payload), signal ) + + return { + ...response, + data: normalizeAppTradeCreateResponse(response.data), + } +} diff --git a/src/index.css b/src/index.css index 0326ad9..9d651c7 100644 --- a/src/index.css +++ b/src/index.css @@ -1976,6 +1976,21 @@ input::placeholder { font-size: 1.2rem; } +.market-member-panel__actions { + display: flex; + gap: 12px; + align-items: center; +} + +.market-member-panel__actions button { + min-height: 36px; + padding: 0 14px; + border-radius: var(--market-radius); + background: var(--market-brand); + color: #fff; + font-weight: 800; +} + .market-member-login-link { display: inline-flex; justify-content: center; @@ -1988,6 +2003,191 @@ input::placeholder { font-weight: 700; } +.market-address-editor { + display: grid; + gap: 16px; + margin-bottom: 18px; + padding: 18px; + border: 1px solid rgba(16, 128, 90, 0.18); + border-radius: var(--market-radius-lg); + background: linear-gradient(135deg, rgba(16, 128, 90, 0.08), #fff 46%); +} + +.market-address-editor__head { + display: flex; + justify-content: space-between; + gap: 16px; + align-items: flex-start; +} + +.market-address-editor__head h2 { + margin: 2px 0 0; + color: #111827; + font-size: 1.02rem; +} + +.market-address-editor__head > button { + color: #9ca3af; + font-size: 1.5rem; + line-height: 1; +} + +.market-address-editor__grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; +} + +.market-address-editor__grid label { + display: grid; + gap: 6px; + color: #111827; + font-weight: 700; +} + +.market-address-editor__grid label span { + color: #4b5563; + font-size: 0.84rem; +} + +.market-address-editor__grid input { + min-height: 38px; + padding: 0 12px; + border: 1px solid rgba(15, 23, 42, 0.12); + border-radius: var(--market-radius); + background: #fff; + color: #111827; + font: inherit; +} + +.market-address-editor__full { + grid-column: 1 / -1; +} + +.market-address-editor__actions { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +.market-address-editor__actions button { + min-height: 36px; + padding: 0 16px; + border: 1px solid rgba(15, 23, 42, 0.12); + border-radius: var(--market-radius); + color: #111827; + font-weight: 800; +} + +.market-address-editor__actions button:disabled { + cursor: not-allowed; + opacity: 0.62; +} + +.market-address-editor__actions .market-address-editor__primary { + border-color: transparent; + background: var(--market-brand); + color: #fff; +} + +.market-address-list { + display: grid; + gap: 12px; +} + +.market-address-card { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 18px; + align-items: center; + padding: 18px; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: var(--market-radius-lg); + background: #fff; +} + +.market-address-card.is-default { + border-color: rgba(16, 128, 90, 0.26); + background: linear-gradient(135deg, rgba(16, 128, 90, 0.08), #fff 44%); +} + +.market-address-card__main { + display: grid; + gap: 10px; + min-width: 0; +} + +.market-address-card__head { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: center; +} + +.market-address-card__head strong { + color: #111827; + font-size: 1rem; +} + +.market-address-card__head span { + color: #4b5563; +} + +.market-address-card__head em { + border-radius: 999px; + padding: 2px 8px; + background: var(--market-brand-bg); + color: var(--market-brand); + font-style: normal; + font-size: 0.78rem; + font-weight: 800; +} + +.market-address-card p { + margin: 0; + color: #111827; + line-height: 1.55; +} + +.market-address-card__meta { + display: flex; + flex-wrap: wrap; + gap: 8px; +} + +.market-address-card__meta span { + border-radius: 999px; + padding: 3px 8px; + background: #f5f6f8; + color: var(--market-muted); + font-size: 0.78rem; +} + +.market-address-card__actions { + display: flex; + gap: 10px; + align-items: center; +} + +.market-address-card__actions button { + min-height: 34px; + padding: 0 12px; + border: 1px solid rgba(16, 128, 90, 0.26); + border-radius: var(--market-radius); + color: var(--market-brand); + font-weight: 800; +} + +.market-address-card__actions button:disabled { + cursor: not-allowed; + opacity: 0.58; +} + +.market-address-card__actions button.is-danger { + border-color: transparent; + color: #ef4444; +} + .market-cart-list, .market-order-list { display: grid; @@ -2070,6 +2270,982 @@ input::placeholder { font-weight: 700; } +.market-cart-groups { + display: grid; + gap: 0; + overflow: hidden; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: var(--market-radius-lg); + background: #fff; +} + +.market-cart-merchant { + display: grid; + gap: 0; +} + +.market-cart-merchant + .market-cart-merchant { + border-top: 18px solid #f5f6f8; +} + +.market-cart-merchant__head { + display: flex; + align-items: center; + justify-content: space-between; + min-height: 56px; + padding: 0 22px; + background: #f5f6f8; +} + +.market-cart-merchant__head label, +.market-cart-footer label { + display: inline-flex; + align-items: center; + gap: 10px; + min-width: 0; +} + +.market-cart-merchant__head strong { + color: #111827; + font-size: 0.98rem; +} + +.market-cart-merchant__head button, +.market-cart-sku-row__remove { + color: #ef4444; + font-weight: 700; +} + +.market-cart-merchant input, +.market-cart-goods input, +.market-cart-sku-row input, +.market-cart-footer input { + width: 16px; + height: 16px; + accent-color: #ef4444; +} + +.market-cart-goods-list { + display: grid; + gap: 0; +} + +.market-cart-goods { + display: grid; + grid-template-columns: minmax(280px, 0.34fr) minmax(0, 1fr); + gap: 18px; + align-items: start; + padding: 26px 22px; +} + +.market-cart-goods + .market-cart-goods { + border-top: 1px solid rgba(15, 23, 42, 0.08); +} + +.market-cart-goods__summary { + display: grid; + grid-template-columns: auto 88px minmax(0, 1fr); + gap: 14px; + align-items: start; + min-width: 0; +} + +.market-cart-goods__media img, +.market-cart-goods__media .market-media-placeholder { + width: 88px; + height: 88px; + border-radius: 0; + object-fit: cover; +} + +.market-cart-goods__body { + display: grid; + gap: 8px; + min-width: 0; +} + +.market-cart-goods__body a { + overflow: hidden; + color: #111827; + font-size: 1rem; + font-weight: 700; + line-height: 1.45; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-cart-goods__body span { + width: max-content; + border-radius: 6px; + padding: 2px 6px; + background: #ef4444; + color: #fff; + font-size: 0.78rem; + font-weight: 700; +} + +.market-cart-sku-table { + display: grid; + gap: 0; + min-width: 0; +} + +.market-cart-sku-table__head, +.market-cart-sku-row { + display: grid; + grid-template-columns: minmax(300px, 2.4fr) 92px 132px 112px; + gap: 18px; + align-items: center; +} + +.market-cart-sku-table__head { + min-height: 34px; + border-bottom: 1px solid rgba(15, 23, 42, 0.12); + color: #111827; + font-weight: 700; +} + +.market-cart-sku-table__head button { + justify-self: center; + color: #ef4444; + font: inherit; + font-weight: 800; +} + +.market-cart-sku-row { + min-height: 64px; + color: #111827; +} + +.market-cart-sku-row__spec { + display: inline-grid; + grid-template-columns: auto minmax(0, 1fr); + gap: 10px; + align-items: center; + min-width: 0; +} + +.market-cart-sku-row__spec span { + min-width: 0; + overflow: hidden; + display: -webkit-box; + font-size: 0.86rem; + line-height: 1.45; + text-overflow: ellipsis; + word-break: break-word; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.market-cart-sku-row strong { + color: #ef4444; +} + +.market-cart-sku-row__remove { + justify-self: center; +} + +.market-cart-sku-row__quantity { + display: grid; + grid-template-columns: 28px 44px 28px; + overflow: hidden; + width: 100px; + border: 1px solid rgba(15, 23, 42, 0.12); + border-radius: 7px; +} + +.market-cart-sku-row__quantity button, +.market-cart-sku-row__quantity span { + display: grid; + place-items: center; + min-height: 30px; +} + +.market-cart-sku-row__quantity span { + border-inline: 1px solid rgba(15, 23, 42, 0.08); +} + +.market-cart-footer { + position: sticky; + bottom: 0; + z-index: 2; + display: grid; + grid-template-columns: minmax(140px, 1fr) auto auto auto; + gap: 24px; + align-items: center; + min-height: 68px; + padding: 0 20px; + border-top: 1px solid rgba(15, 23, 42, 0.08); + background: rgba(255, 255, 255, 0.96); + backdrop-filter: blur(10px); +} + +.market-cart-footer > span { + color: #111827; +} + +.market-cart-footer > strong { + color: #ef4444; + font-size: 1.05rem; +} + +.market-cart-footer > button { + min-height: 42px; + padding: 0 24px; + border-radius: var(--market-radius); + background: #ef4444; + color: #fff; + font-weight: 800; +} + +.market-checkout-modal { + position: fixed; + inset: 0; + z-index: 55; + display: grid; + place-items: start center; + overflow: auto; + padding: 42px 20px; + background: rgba(17, 24, 39, 0.56); +} + +.market-checkout-dialog { + position: relative; + display: grid; + width: min(100%, 1480px); + max-height: calc(100vh - 84px); + overflow: auto; + border-radius: 18px; + background: #fff; + box-shadow: 0 28px 90px rgba(15, 23, 42, 0.28); +} + +.market-checkout-dialog__head { + position: sticky; + top: 0; + z-index: 3; + display: flex; + align-items: center; + justify-content: space-between; + min-height: 58px; + padding: 0 24px; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); + background: rgba(255, 255, 255, 0.96); + backdrop-filter: blur(12px); +} + +.market-checkout-dialog__head h2 { + margin: 0; + color: #111827; + font-size: 1.08rem; +} + +.market-checkout-dialog__head button { + color: #8b9099; + font-size: 1.75rem; + line-height: 1; +} + +.market-checkout-products { + display: grid; + padding: 18px 24px 0; +} + +.market-checkout-products__head, +.market-checkout-product { + display: grid; + grid-template-columns: minmax(330px, 0.9fr) minmax(560px, 1.45fr) 120px 140px; + gap: 28px; + align-items: start; +} + +.market-checkout-products__head { + min-height: 48px; + align-items: center; + border: 1px solid rgba(15, 23, 42, 0.06); + background: #fafafa; + color: #4b5563; + font-weight: 800; + text-align: center; +} + +.market-checkout-product { + padding: 22px 0; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); +} + +.market-checkout-merchant { + display: grid; +} + +.market-checkout-merchant + .market-checkout-merchant { + border-top: 16px solid #f5f6f8; +} + +.market-checkout-merchant__options { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px 18px; + min-height: 56px; + padding: 10px 18px; + background: #f8fafc; +} + +.market-checkout-merchant__options strong { + color: #111827; + font-size: 0.98rem; +} + +.market-checkout-merchant__options label { + display: inline-flex; + align-items: center; + gap: 8px; +} + +.market-checkout-merchant__options label span, +.market-checkout-merchant__options > span { + color: var(--market-muted); + font-size: 0.86rem; +} + +.market-checkout-merchant__options select { + height: 34px; + min-width: 150px; + border: 1px solid rgba(15, 23, 42, 0.14); + border-radius: 7px; + padding: 0 10px; + color: #111827; + font-size: 0.88rem; +} + +.market-checkout-product__attr { + display: grid; + grid-template-columns: 102px minmax(0, 1fr); + gap: 16px; + align-items: start; + padding-left: 18px; +} + +.market-checkout-product__media img, +.market-checkout-product__media .market-media-placeholder { + width: 102px; + height: 102px; + border-radius: 0; + object-fit: cover; +} + +.market-checkout-product__attr div { + display: grid; + gap: 8px; + min-width: 0; + color: #111827; +} + +.market-checkout-product__attr span, +.market-checkout-product__attr strong { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-checkout-product__attr strong { + font-size: 0.98rem; +} + +.market-checkout-product__attr em { + width: max-content; + border-radius: 5px; + padding: 2px 6px; + background: #ef4444; + color: #fff; + font-size: 0.76rem; + font-style: normal; + font-weight: 800; +} + +.market-checkout-sku-table { + display: grid; + min-width: 0; +} + +.market-checkout-sku-table__head, +.market-checkout-sku-row { + display: grid; + grid-template-columns: minmax(250px, 1fr) 110px 110px 76px; + gap: 18px; + align-items: center; +} + +.market-checkout-sku-table__head { + min-height: 42px; + border-bottom: 1px solid rgba(15, 23, 42, 0.1); + color: #4b5563; + font-weight: 800; +} + +.market-checkout-sku-row { + min-height: 54px; + color: #111827; +} + +.market-checkout-sku-row > span { + min-width: 0; + overflow: hidden; + display: -webkit-box; + line-height: 1.35; + text-overflow: ellipsis; + word-break: break-word; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.market-checkout-sku-row strong, +.market-checkout-sku-row button, +.market-checkout-product__amount { + color: #ef4444; + font-weight: 800; +} + +.market-checkout-sku-row input { + width: 72px; + height: 32px; + border: 1px solid rgba(15, 23, 42, 0.16); + border-radius: 6px; + padding: 0 10px; + color: #111827; + font-size: 0.92rem; +} + +.market-checkout-product__count { + align-self: center; + color: #111827; + font-weight: 700; + text-align: center; +} + +.market-checkout-product__amount { + align-self: center; + font-size: 1.24rem; + text-align: center; +} + +.market-checkout-address { + display: grid; + gap: 24px; + padding: 0 24px 24px; +} + +.market-checkout-address h3 { + margin: 0 -24px; + padding: 18px 24px; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); + background: #fafafa; + color: #374151; + font-size: 1rem; +} + +.market-checkout-address__form { + display: grid; + grid-template-columns: minmax(0, 0.95fr) minmax(0, 1.05fr); + gap: 18px 36px; +} + +.market-checkout-hint { + margin: 0 24px 18px; + border-radius: 10px; + padding: 10px 14px; + background: #f8fafc; + color: var(--market-muted); + font-size: 0.9rem; +} + +.market-checkout-hint.is-error { + background: #fff1f2; + color: #ef4444; +} + +.market-checkout-address__form label { + display: grid; + grid-template-columns: 100px minmax(0, 1fr); + gap: 12px; + align-items: center; +} + +.market-checkout-address__saved, +.market-checkout-address__detail { + grid-column: 1; +} + +.market-checkout-address__form label span { + color: #111827; + font-weight: 700; + text-align: right; +} + +.market-checkout-address__form label span::first-letter { + color: #ef4444; +} + +.market-checkout-address__form input, +.market-checkout-address__form select, +.market-checkout-address__form textarea { + width: 100%; + border: 1px solid rgba(15, 23, 42, 0.16); + border-radius: 8px; + color: #111827; + font-size: 0.94rem; +} + +.market-checkout-address__form input, +.market-checkout-address__form select { + height: 40px; + padding: 0 14px; +} + +.market-checkout-address__recognize { + grid-column: 2; + grid-row: 1 / span 4; + display: grid; + gap: 12px; + align-content: start; +} + +.market-checkout-address__recognize > div:first-child { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 12px; +} + +.market-checkout-address__recognize strong { + color: #111827; +} + +.market-checkout-address__recognize span { + color: var(--market-muted); + font-size: 0.88rem; +} + +.market-checkout-address__recognize textarea { + min-height: 70px; + resize: vertical; + padding: 12px 14px; +} + +.market-checkout-address__recognize > div:last-child { + display: flex; + gap: 12px; +} + +.market-checkout-address__recognize button { + min-height: 40px; + padding: 0 18px; + border: 1px solid rgba(15, 23, 42, 0.14); + border-radius: 8px; + color: #111827; + font-weight: 700; +} + +.market-checkout-address__recognize button:disabled, +.market-checkout-footer button:disabled { + cursor: not-allowed; + opacity: 0.62; +} + +.market-checkout-address__recognize .market-checkout-address__primary { + border-color: transparent; + background: #ef4444; + color: #fff; +} + +.market-checkout-footer { + position: sticky; + bottom: 0; + z-index: 3; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + gap: 18px; + min-height: 72px; + padding: 12px 24px; + border-top: 1px solid rgba(15, 23, 42, 0.08); + background: rgba(255, 255, 255, 0.96); + backdrop-filter: blur(12px); +} + +.market-checkout-payments { + display: flex; + flex-wrap: wrap; + gap: 12px 18px; + margin-right: auto; +} + +.market-checkout-payments label, +.market-checkout-agreement { + display: inline-flex; + align-items: center; + gap: 8px; + color: #111827; +} + +.market-checkout-payments input, +.market-checkout-agreement input { + width: 16px; + height: 16px; + accent-color: #ef4444; +} + +.market-checkout-payments small { + color: #111827; +} + +.market-checkout-agreement a { + color: #1677ff; +} + +.market-checkout-footer strong { + color: #ef4444; + font-size: 1.08rem; +} + +.market-checkout-footer small { + color: var(--market-muted); + font-size: 0.84rem; +} + +.market-checkout-footer button { + min-height: 42px; + padding: 0 22px; + border: 1px solid rgba(15, 23, 42, 0.14); + border-radius: 8px; + color: #111827; + font-weight: 800; +} + +.market-checkout-footer__primary { + border-color: transparent !important; + background: #ef4444; + color: #fff !important; +} + +.market-pay-modal { + position: fixed; + inset: 0; + z-index: 70; + display: grid; + place-items: center; + padding: 24px; + background: rgba(15, 23, 42, 0.48); + backdrop-filter: blur(8px); +} + +.market-pay-dialog { + display: grid; + gap: 18px; + width: min(620px, 100%); + padding: 24px; + border-radius: var(--market-radius-xl); + background: #fff; + box-shadow: 0 28px 80px rgba(15, 23, 42, 0.28); +} + +.market-pay-dialog__head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.market-pay-dialog__head h2 { + margin: 2px 0 0; + color: #111827; + font-size: 1.18rem; +} + +.market-pay-dialog__head button { + color: #9ca3af; + font-size: 1.5rem; + line-height: 1; +} + +.market-pay-dialog__summary { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; +} + +.market-pay-dialog__summary article { + display: grid; + gap: 4px; + padding: 12px; + border-radius: var(--market-radius); + background: #f8fafc; +} + +.market-pay-dialog__summary span, +.market-pay-dialog__body span, +.market-pay-dialog__body small { + color: var(--market-muted); + font-size: 0.82rem; +} + +.market-pay-dialog__summary strong { + overflow: hidden; + color: #111827; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-pay-dialog__body { + display: grid; + gap: 8px; + padding: 14px; + border: 1px dashed rgba(16, 128, 90, 0.24); + border-radius: var(--market-radius-lg); + background: rgba(16, 128, 90, 0.05); +} + +.market-pay-dialog__body a { + overflow-wrap: anywhere; + color: var(--market-brand); + font-weight: 800; +} + +.market-pay-dialog__actions { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +.market-pay-dialog__actions button { + min-height: 38px; + padding: 0 16px; + border: 1px solid rgba(15, 23, 42, 0.12); + border-radius: var(--market-radius); + color: #111827; + font-weight: 800; +} + +.market-pay-dialog__actions .market-pay-dialog__primary { + border-color: transparent; + background: var(--market-brand); + color: #fff; +} + +.market-cart-add-modal { + position: fixed; + inset: 0; + z-index: 50; + display: grid; + place-items: start center; + overflow: auto; + padding: 64px 24px; + background: rgba(17, 24, 39, 0.52); +} + +.market-cart-add-dialog { + display: grid; + gap: 22px; + width: min(100%, 900px); + min-height: 560px; + padding: 26px 28px; + border-radius: 8px; + background: #fff; + box-shadow: 0 28px 80px rgba(15, 23, 42, 0.26); +} + +.market-cart-add-dialog__head, +.market-cart-add-dialog__foot { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; +} + +.market-cart-add-dialog__head h2 { + margin: 0; + color: #111827; + font-size: 1.15rem; +} + +.market-cart-add-dialog__head button { + color: #8b9099; + font-size: 1.8rem; + line-height: 1; +} + +.market-cart-add-dialog__product { + display: grid; + grid-template-columns: 92px minmax(0, 1fr); + gap: 16px; + align-items: start; +} + +.market-cart-add-dialog__product img, +.market-cart-add-dialog__product .market-media-placeholder { + width: 92px; + height: 92px; + border-radius: 0; + object-fit: cover; +} + +.market-cart-add-dialog__product div { + display: grid; + gap: 8px; + min-width: 0; + color: #111827; +} + +.market-cart-add-dialog__product strong, +.market-cart-add-dialog__product span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-cart-add-dialog__product small { + color: #ef4444; + font-weight: 700; +} + +.market-cart-add-dialog__section-title { + display: inline-flex; + align-items: center; + gap: 10px; + color: #111827; +} + +.market-cart-add-dialog__section-title span { + width: 4px; + height: 24px; + border-radius: 999px; + background: #ef4444; +} + +.market-cart-add-color-tabs { + display: flex; + gap: 12px; + overflow-x: auto; + padding-bottom: 4px; +} + +.market-cart-add-color-tabs button { + display: grid; + gap: 4px; + min-width: 132px; + min-height: 54px; + padding: 8px 14px; + border: 1px solid rgba(15, 23, 42, 0.16); + border-radius: 7px; + color: #111827; + font-size: 0.92rem; + font-weight: 700; + text-align: left; + white-space: nowrap; +} + +.market-cart-add-color-tabs button.is-active { + border-color: #ef4444; + color: #ef4444; + box-shadow: inset 0 0 0 1px #ef4444; +} + +.market-cart-add-color-tabs small { + color: var(--market-muted); + font-size: 0.76rem; + font-weight: 500; +} + +.market-cart-add-color-tabs button.is-active small { + color: #ef4444; +} + +.market-cart-add-sku-list { + display: grid; + gap: 0; +} + +.market-cart-add-sku-row { + display: grid; + grid-template-columns: minmax(0, 1fr) 120px 120px; + gap: 20px; + align-items: center; + min-height: 64px; +} + +.market-cart-add-sku-row + .market-cart-add-sku-row { + border-top: 1px solid rgba(15, 23, 42, 0.08); +} + +.market-cart-add-sku-row div { + display: grid; + gap: 4px; + min-width: 0; +} + +.market-cart-add-sku-row strong { + overflow: hidden; + color: #111827; + font-size: 0.96rem; + font-weight: 500; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-cart-add-sku-row span { + color: var(--market-muted); + font-size: 0.82rem; +} + +.market-cart-add-sku-row b { + color: #ef4444; + font-size: 1rem; +} + +.market-cart-add-sku-row input { + width: 100%; + height: 38px; + padding: 0 12px; + border: 1px solid rgba(15, 23, 42, 0.16); + border-radius: 7px; + color: #111827; + font-size: 0.95rem; +} + +.market-cart-add-dialog__foot { + align-self: end; + justify-content: flex-end; + margin-top: auto; + padding-top: 18px; +} + +.market-cart-add-dialog__foot span { + margin-right: auto; + color: #111827; +} + +.market-cart-add-dialog__foot button { + min-width: 82px; + min-height: 38px; + border: 1px solid rgba(15, 23, 42, 0.14); + border-radius: 7px; + color: #111827; + font-weight: 700; +} + +.market-cart-add-dialog__confirm { + border-color: transparent !important; + background: #ef4444; + color: #fff !important; +} + +.market-cart-add-dialog__confirm:disabled { + cursor: not-allowed; + background: #fca5a5; +} + .market-order-card { display: grid; gap: 14px; @@ -2134,6 +3310,272 @@ input::placeholder { color: #111827; } +.market-order-card__actions { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +.market-order-card__actions button, +.market-order-detail-dialog__foot button, +.market-after-sale-dialog__foot button { + min-height: 36px; + padding: 0 14px; + border: 1px solid rgba(15, 23, 42, 0.12); + border-radius: 8px; + background: #fff; + color: #111827; + font-weight: 700; +} + +.market-order-card__actions button:disabled, +.market-order-detail-dialog__foot button:disabled, +.market-after-sale-dialog__foot button:disabled { + cursor: not-allowed; + opacity: 0.58; +} + +.market-order-card__primary, +.market-order-detail-dialog__primary, +.market-after-sale-dialog__primary { + border-color: transparent !important; + background: #ef4444 !important; + color: #fff !important; +} + +.market-order-detail-modal, +.market-after-sale-modal { + position: fixed; + inset: 0; + z-index: 58; + display: grid; + place-items: start center; + overflow: auto; + padding: 48px 20px; + background: rgba(17, 24, 39, 0.54); +} + +.market-order-detail-dialog, +.market-after-sale-dialog { + display: grid; + gap: 18px; + width: min(100%, 980px); + max-height: calc(100vh - 96px); + overflow: auto; + border-radius: 16px; + background: #fff; + box-shadow: 0 28px 88px rgba(15, 23, 42, 0.28); +} + +.market-order-detail-dialog__head, +.market-after-sale-dialog__head { + position: sticky; + top: 0; + z-index: 2; + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + padding: 20px 24px 16px; + border-bottom: 1px solid rgba(15, 23, 42, 0.08); + background: rgba(255, 255, 255, 0.96); + backdrop-filter: blur(12px); +} + +.market-order-detail-dialog__head h2, +.market-after-sale-dialog__head h2 { + margin: 0; + color: #111827; + font-size: 1.16rem; +} + +.market-order-detail-dialog__head span { + display: block; + margin-top: 4px; + color: var(--market-muted); + font-size: 0.86rem; +} + +.market-order-detail-dialog__head button, +.market-after-sale-dialog__head button { + color: #8b9099; + font-size: 1.8rem; + line-height: 1; +} + +.market-order-detail-summary { + display: grid; + grid-template-columns: repeat(6, minmax(0, 1fr)); + gap: 10px; + padding: 0 24px; +} + +.market-order-detail-summary article { + display: grid; + gap: 6px; + padding: 14px 12px; + border-radius: 12px; + background: #f8fafc; +} + +.market-order-detail-summary span, +.market-order-detail-section p, +.market-order-detail-item small, +.market-after-sale-product small { + color: var(--market-muted); +} + +.market-order-detail-summary strong { + color: #111827; +} + +.market-order-detail-summary article:last-child strong { + color: #ef4444; +} + +.market-order-detail-section { + display: grid; + gap: 10px; + margin: 0 24px; + padding: 18px; + border: 1px solid rgba(15, 23, 42, 0.08); + border-radius: 14px; +} + +.market-order-detail-section h3 { + margin: 0; + color: #111827; + font-size: 1rem; +} + +.market-order-detail-section p { + margin: 0; + line-height: 1.7; +} + +.market-order-detail-items { + display: grid; + gap: 12px; +} + +.market-order-detail-item { + display: grid; + grid-template-columns: 72px minmax(0, 1fr) 72px 100px auto; + gap: 14px; + align-items: center; + padding: 12px; + border-radius: 12px; + background: #f8fafc; +} + +.market-order-detail-item img, +.market-after-sale-product img { + width: 72px; + height: 72px; + object-fit: cover; +} + +.market-order-detail-item div, +.market-after-sale-product div { + display: grid; + gap: 6px; + min-width: 0; +} + +.market-order-detail-item strong, +.market-order-detail-item span, +.market-after-sale-product strong, +.market-after-sale-product span { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.market-order-detail-item > strong { + color: #ef4444; +} + +.market-order-detail-item button { + min-height: 34px; + padding: 0 12px; + border: 1px solid rgba(239, 68, 68, 0.28); + border-radius: 8px; + color: #ef4444; + font-weight: 700; +} + +.market-order-detail-item button:disabled { + cursor: not-allowed; + border-color: rgba(15, 23, 42, 0.1); + color: var(--market-muted); +} + +.market-order-detail-dialog__foot, +.market-after-sale-dialog__foot { + position: sticky; + bottom: 0; + display: flex; + justify-content: flex-end; + gap: 12px; + padding: 16px 24px 20px; + border-top: 1px solid rgba(15, 23, 42, 0.08); + background: rgba(255, 255, 255, 0.96); + backdrop-filter: blur(12px); +} + +.market-after-sale-dialog { + width: min(100%, 760px); +} + +.market-after-sale-product { + display: grid; + grid-template-columns: 72px minmax(0, 1fr); + gap: 16px; + align-items: center; + padding: 0 24px; +} + +.market-after-sale-form { + display: grid; + gap: 14px; + padding: 0 24px; +} + +.market-after-sale-form label { + display: grid; + grid-template-columns: 88px minmax(0, 1fr); + gap: 12px; + align-items: center; +} + +.market-after-sale-form label span { + color: #111827; + font-weight: 700; +} + +.market-after-sale-form input, +.market-after-sale-form select, +.market-after-sale-form textarea { + width: 100%; + border: 1px solid rgba(15, 23, 42, 0.14); + border-radius: 8px; + color: #111827; + font-size: 0.94rem; +} + +.market-after-sale-form input, +.market-after-sale-form select { + height: 38px; + padding: 0 12px; +} + +.market-after-sale-form textarea { + min-height: 86px; + resize: vertical; + padding: 10px 12px; +} + .market-media-placeholder { min-height: 100%; border-radius: 14px; @@ -2610,6 +4052,11 @@ input::placeholder { background: #ef4444; } +.market-detail-sku button:disabled { + cursor: not-allowed; + background: #d1d5db; +} + .market-detail-sku b { display: grid; place-items: center; @@ -2620,6 +4067,45 @@ input::placeholder { font-weight: 500; } +.market-detail-cart-actions { + display: flex; + align-items: center; + gap: 12px; + padding-top: 6px; + flex-wrap: wrap; +} + +.market-detail-cart-actions button { + min-height: 42px; + padding: 0 22px; + border-radius: var(--market-radius); + font-size: 0.95rem; + font-weight: 800; +} + +.market-detail-cart-actions__primary { + background: #ef4444; + color: #fff; + box-shadow: 0 12px 22px rgba(239, 68, 68, 0.18); +} + +.market-detail-cart-actions__primary:disabled { + cursor: not-allowed; + background: #fca5a5; + box-shadow: none; +} + +.market-detail-cart-actions__ghost { + border: 1px solid rgba(239, 68, 68, 0.3); + background: #fff; + color: #ef4444; +} + +.market-detail-cart-actions span { + color: var(--market-muted); + font-size: 0.88rem; +} + .market-detail-merchant { display: grid; gap: 14px; @@ -3215,7 +4701,7 @@ input::placeholder { } .market-member-tabs { - grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-columns: repeat(4, minmax(0, 1fr)); } .market-member-tabs button { @@ -3233,10 +4719,48 @@ input::placeholder { justify-self: start; } + .market-cart-goods { + grid-template-columns: 1fr; + } + + .market-cart-sku-table__head, + .market-cart-sku-row { + grid-template-columns: minmax(220px, 2.2fr) 76px 112px 72px; + } + + .market-cart-footer { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .market-cart-footer > button { + justify-self: start; + } + .market-order-card__body { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .market-order-detail-summary { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .market-address-card { + grid-template-columns: 1fr; + } + + .market-address-card__actions { + justify-content: flex-start; + } + + .market-order-detail-item { + grid-template-columns: 64px minmax(0, 1fr) 56px 88px; + } + + .market-order-detail-item button { + grid-column: 2 / -1; + justify-self: start; + } + .market-product-grid { grid-template-columns: repeat(auto-fill, minmax(204px, 204px)); } @@ -3299,6 +4823,15 @@ input::placeholder { flex-direction: column; } + .market-member-panel__actions { + width: 100%; + justify-content: space-between; + } + + .market-address-editor__grid { + grid-template-columns: 1fr; + } + .market-search__field, .login-inline-field { grid-template-columns: 1fr; @@ -3309,6 +4842,23 @@ input::placeholder { grid-template-columns: 1fr; } + .market-order-detail-modal, + .market-after-sale-modal { + padding: 24px 10px; + } + + .market-order-detail-summary, + .market-order-detail-item, + .market-after-sale-form label { + grid-template-columns: 1fr; + } + + .market-order-detail-item img, + .market-after-sale-product img { + width: 64px; + height: 64px; + } + .market-member-panel { padding: 16px; } @@ -3325,6 +4875,45 @@ input::placeholder { height: 64px; } + .market-cart-merchant__head { + padding: 0 14px; + } + + .market-cart-goods { + padding: 18px 14px; + } + + .market-cart-goods__summary { + grid-template-columns: auto 72px minmax(0, 1fr); + } + + .market-cart-goods__media img, + .market-cart-goods__media .market-media-placeholder { + width: 72px; + height: 72px; + } + + .market-cart-sku-table__head { + display: none; + } + + .market-cart-sku-row { + grid-template-columns: 1fr; + gap: 8px; + padding: 12px 0; + border-top: 1px solid rgba(15, 23, 42, 0.08); + } + + .market-cart-sku-row__quantity { + width: 112px; + } + + .market-cart-footer { + grid-template-columns: 1fr; + gap: 10px; + padding: 14px; + } + .market-search__core { grid-template-columns: 1fr; } diff --git a/src/mocks/mall.ts b/src/mocks/mall.ts index 23cafef..b2f0001 100644 --- a/src/mocks/mall.ts +++ b/src/mocks/mall.ts @@ -152,10 +152,10 @@ const buildGoods = (seed: string[], index: number): GoodsSummary => { const price = 29 + index * 7 return { - id: 10001 + index, + id: String(10001 + index), merchantId: String(5001 + (index % 4)), - storeId: 6001 + (index % 5), - categoryId: index + 1, + storeId: String(6001 + (index % 5)), + categoryId: String(index + 1), categoryName: category.label, spuNo: `YTSPU${String(index + 1).padStart(4, '0')}`, spuName: seed[0], @@ -181,7 +181,7 @@ const buildStore = (seed: string[], index: number): RecommendMerchantInfo => { const category = MARKET_CATEGORIES[(index % (MARKET_CATEGORIES.length - 1)) + 1] return { - id: 9001 + index, + id: String(9001 + index), merchantId: String(5001 + index), storeName: seed[0], storeLogo: createArtwork(seed[0], seed[1], category.accent, category.accentSoft), @@ -206,14 +206,14 @@ export const FALLBACK_GOODS_PAGE: AppGoodsPageResponse = { export const FALLBACK_HOME: AppHomeResponse = { categoryNavs: MARKET_CATEGORIES.map((item, index) => ({ - categoryId: index + 1, + categoryId: String(index + 1), categoryName: item.label, goodsCount: Math.max(0, goodsList.length - index), sort: index, })), banners: [ { - id: 1, + id: '1', title: '精准搜款 · 一件代发', subTitle: '多平台供给与商家资源聚合', description: '首页主视觉广告栏', @@ -228,7 +228,7 @@ export const FALLBACK_HOME: AppHomeResponse = { endTime: 1730000000, }, { - id: 2, + id: '2', title: '热卖数码专场', subTitle: '快充、支架、耳机同步起量', description: '首页活动广告栏', @@ -245,7 +245,7 @@ export const FALLBACK_HOME: AppHomeResponse = { ], searchKeywords: HOT_KEYWORDS, channels: PLATFORM_CHANNELS.map((item, index) => ({ - id: index + 1, + id: String(index + 1), title: item.label, subTitle: item.subtitle, iconUrl: '', diff --git a/src/pages/goods/GoodsDetailPage.tsx b/src/pages/goods/GoodsDetailPage.tsx index 7c990c8..930dab0 100644 --- a/src/pages/goods/GoodsDetailPage.tsx +++ b/src/pages/goods/GoodsDetailPage.tsx @@ -1,6 +1,7 @@ import { useEffect, useMemo, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' -import { apiAppGoodsDetail } from '@/apis' +import { toast } from 'sonner' +import { apiAppCartSave, apiAppGoodsDetail } from '@/apis' import MarketPageHeader from '@/components/MarketPageHeader' import { useUserStore } from '@/store/user' import type { @@ -58,12 +59,12 @@ const WHITE_IMAGE_KEYWORDS = ['white', 'wash', 'clean', 'plain', 'background', ' const getSpecValue = (sku: ResolvedGoodsSkuInfo, patterns: string[]) => { const matched = sku.specs.find(spec => { - const name = typeof spec.name === 'string' ? spec.name : '' + const name = typeof spec.attributeName === 'string' ? spec.attributeName : '' return patterns.some(pattern => name.toLowerCase().includes(pattern.toLowerCase())) }) - return typeof matched?.value === 'string' ? matched.value.trim() : '' + return typeof matched?.attributeValue === 'string' ? matched.attributeValue.trim() : '' } const splitSkuName = (skuName: string) => @@ -175,14 +176,18 @@ const getProductParams = (detail: ResolvedGoodsDetailInfo): ParamItem[] => { ].filter(item => item.value) } +const getSelectedCartItems = (skus: ResolvedGoodsSkuInfo[], quantities: Record) => + skus + .map(sku => ({ + sku, + buyNum: Math.min(Math.max(0, quantities[sku.id] ?? 0), sku.stock), + })) + .filter(item => item.buyNum > 0) + function GoodsDetailPage() { const { spuId = '' } = useParams() const navigate = useNavigate() const token = useUserStore(state => state.token) - const userInfo = useUserStore(state => state.userInfo) - const storedMemberId = useUserStore(state => state.memberId) - - const currentUid = userInfo?.uid ?? storedMemberId ?? token?.memberId ?? token?.uid ?? 0 const [payload, setPayload] = useState(null) const [loading, setLoading] = useState(true) @@ -191,7 +196,8 @@ function GoodsDetailPage() { const [keyword, setKeyword] = useState('') const [selectedColor, setSelectedColor] = useState('') const [activeDetailTab, setActiveDetailTab] = useState('detail') - const [quantities, setQuantities] = useState>({}) + const [quantities, setQuantities] = useState>({}) + const [cartSaving, setCartSaving] = useState(false) useEffect(() => { if (!spuId) { @@ -204,7 +210,7 @@ function GoodsDetailPage() { setLoading(true) setError(null) - apiAppGoodsDetail({ uid: currentUid, spuId }, controller.signal) + apiAppGoodsDetail({ spuId }, controller.signal) .then(response => { setPayload(response.data) }) @@ -220,7 +226,7 @@ function GoodsDetailPage() { }) return () => controller.abort() - }, [currentUid, spuId]) + }, [spuId]) const detail = useMemo(() => (payload?.data ? resolveGoodsDetailInfo(payload.data) : null), [payload]) const merchant = payload?.merchant ?? payload?.store ?? null @@ -273,6 +279,14 @@ function GoodsDetailPage() { return galleryImages }, [detailImages, galleryImages]) const whiteImages = useMemo(() => (detail ? getWhiteImageList(detail) : []), [detail]) + const selectedCartItems = useMemo( + () => getSelectedCartItems(detail?.skus ?? [], quantities), + [detail, quantities] + ) + const selectedCartTotal = useMemo( + () => selectedCartItems.reduce((total, item) => total + item.buyNum, 0), + [selectedCartItems] + ) useEffect(() => { setActiveImage(galleryImages[0] ?? '') @@ -282,9 +296,9 @@ function GoodsDetailPage() { setSelectedColor(colorOptions[0]?.color ?? '') }, [colorOptions]) - const updateQuantity = (skuId: number, delta: number) => { + const updateQuantity = (skuId: string, delta: number, stock: number) => { setQuantities(current => { - const nextValue = Math.max(0, (current[skuId] ?? 0) + delta) + const nextValue = Math.min(stock, Math.max(0, (current[skuId] ?? 0) + delta)) return { ...current, [skuId]: nextValue, @@ -292,6 +306,36 @@ function GoodsDetailPage() { }) } + const handleAddCart = async () => { + if (!token?.accessToken) { + navigate('/login') + return + } + + if (selectedCartItems.length === 0) { + toast.warning('请先选择要加入购物车的商品数量') + return + } + + try { + setCartSaving(true) + await Promise.all( + selectedCartItems.map(item => + apiAppCartSave({ + skuId: item.sku.id, + buyNum: item.buyNum, + checked: true, + }) + ) + ) + toast.success(`已加入购物车 ${selectedCartTotal} 件商品`) + } catch (nextError) { + toast.error(nextError instanceof Error ? nextError.message : '加入购物车失败') + } finally { + setCartSaving(false) + } + } + const handleHeaderSearch = (nextKeyword: string) => { const trimmedKeyword = nextKeyword.trim() navigate(trimmedKeyword ? `/list/new?key=${encodeURIComponent(trimmedKeyword)}` : '/list/new') @@ -425,11 +469,15 @@ function GoodsDetailPage() { {formatMoney(option.sku.salePrice || detail.minPrice)} 库存 {option.sku.stock}
- {quantities[option.sku.id] ?? 0} -
@@ -437,10 +485,31 @@ function GoodsDetailPage() { ))} - ) : ( -
暂无 SKU 信息
- )} - + ) : ( +
暂无 SKU 信息
+ )} + + {detail.skus.length > 0 ? ( +
+ + + {selectedCartTotal > 0 ? 已选 {selectedCartTotal} 件 : null} +
+ ) : null} +