fix(claim): 优化H5领取与绑定界面商品图展示并集成发货存证凭据生成

- 修复后端 affiliate_dash 领取详情接口漏传 imageUrl 字段的问题
- 优化前端 ClaimProductImage 占位逻辑,消除无图或失败时的空灰色方块
- 移植并集成 affiliate_dash 前端 Canvas 高清发货到账存证凭据(Retina 640x960)
- 在兑换成功页面提供结果图预览、一键复制到剪贴板与下载凭据图片功能
This commit is contained in:
yml2213
2026-10-10 20:55:02 +08:00
parent c137741215
commit 215f3351ba
7 changed files with 514 additions and 15 deletions
@@ -271,6 +271,7 @@ function buildAffiliateDashClaimDetailPayload({
const product = {
title: productTitle,
skuCode: String(orderItem.sku_code || '').trim(),
imageUrl: resolveClaimProductImageUrl(orderItem),
quantity: Math.max(1, Number(orderItem.quantity || 1) || 1),
isBundle: false,
items: [
@@ -20,13 +20,21 @@ export const PRODUCT_IMAGE_PUBLIC_PREFIX = '/images/products'
/** 图片后缀:38 个 slug 全部有 webp,统一用它(体积小、移动端浏览器都支持)。 */
export const PRODUCT_IMAGE_EXTENSION = 'webp'
const KNOWN_SLUGS = new Set(Object.values(AFFILIATE_DASH_SKU_MAPPING))
/** 内部 SKU → 图片文件名(英文 sku);映射不到返回空串。 */
export function resolveProductImageSlug(internalSku: unknown): string {
const key = String(internalSku ?? '').trim()
if (!key) {
return ''
}
return String(AFFILIATE_DASH_SKU_MAPPING[key] || '').trim()
if (AFFILIATE_DASH_SKU_MAPPING[key]) {
return AFFILIATE_DASH_SKU_MAPPING[key]
}
if (KNOWN_SLUGS.has(key)) {
return key
}
return ''
}
/** 内部 SKU → 图片 URL;映射不到返回空串(前端展示占位)。 */