diff --git a/src/services/httpService.ts b/src/services/httpService.ts index d86885d..e8d4d1f 100644 --- a/src/services/httpService.ts +++ b/src/services/httpService.ts @@ -140,9 +140,13 @@ class HttpService { this.hideLoadingTimer = null } - // 延时300ms后隐藏loading,避免频繁切换 + // 延时 800ms 后隐藏 loading,避免频繁切换;捕获 hideLoading 失败(如 toast 已被关闭)避免报错打断流程 this.hideLoadingTimer = setTimeout(() => { - Taro.hideLoading() + try { + Taro.hideLoading() + } catch (e) { + // 忽略 "toast can't be found" 等,避免发布后分享等流程报错 + } this.currentLoadingText = '' this.hideLoadingTimer = null }, 800) diff --git a/src/utils/genPoster.ts b/src/utils/genPoster.ts index 8bde940..1f2339f 100644 --- a/src/utils/genPoster.ts +++ b/src/utils/genPoster.ts @@ -7,6 +7,12 @@ const dateIcon = `${OSS_BASE}/front/ball/images/1b49476e-0eda-42ff-b08c-002ce510 const mapIcon = `${OSS_BASE}/front/ball/images/06b994fa-9227-4708-8555-8a07af8d0c3b.jpg`; const logoText = `${OSS_BASE}/system/youchang_tip_text.png`; +/** 给图片 URL 加随机参数,避免同一链接二次加载不触发 onload */ +function with_cache_bust(url: string): string { + const sep = url.includes('?') ? '&' : '?'; + return `${url}${sep}_t=${Date.now()}_${Math.random().toString(36).slice(2)}`; +} + export function base64ToTempFilePath(base64Data: string): Promise { return new Promise((resolve, reject) => { const fsm = Taro.getFileSystemManager(); @@ -332,7 +338,7 @@ export async function generatePosterImage(data: any): Promise { roundRectGradient(ctx, 0, 0, width, height, 24, "#BFFFEF", "#F2FFFC"); console.log('bgUrl', bgUrl) - const bgImg = await loadImage(canvas, bgUrl, 'bgUrl'); + const bgImg = await loadImage(canvas, with_cache_bust(bgUrl), 'bgUrl'); ctx.drawImage(bgImg, 0, 0, width, height); console.log('bgUrlend',) @@ -341,7 +347,7 @@ export async function generatePosterImage(data: any): Promise { // 顶部图片 - const mainImg = await loadImage(canvas, data.mainCoursal, 'mainCoursal'); + const mainImg = await loadImage(canvas, with_cache_bust(data.mainCoursal), 'mainCoursal'); console.log('mainCoursal', data.mainCoursal) await drawRotateCoverImage( ctx, @@ -375,7 +381,7 @@ export async function generatePosterImage(data: any): Promise { left = 20; // 用户头像 - const avatarImg = await loadImage(canvas, data.avatarUrl, 'avatar'); + const avatarImg = await loadImage(canvas, with_cache_bust(data.avatarUrl), 'avatar'); ctx.save(); ctx.beginPath(); ctx.arc(left + 30, top + 30, 30, 0, Math.PI * 2); @@ -396,7 +402,7 @@ export async function generatePosterImage(data: any): Promise { ctx.fillStyle = "#00B578"; ctx.fillText("球局", left, top); - const ringImg = await loadImage(canvas, ringUrl, 'ring'); + const ringImg = await loadImage(canvas, with_cache_bust(ringUrl), 'ring'); ctx.drawImage(ringImg, left - 10, top - 30, 80, 36); left = 20; @@ -410,7 +416,7 @@ export async function generatePosterImage(data: any): Promise { top = r.top + 30; left = 20; - const dateImg = await loadImage(canvas, dateIcon, 'date'); + const dateImg = await loadImage(canvas, with_cache_bust(dateIcon), 'date'); console.log('dateIcon', dateIcon) await drawCoverImage( @@ -440,7 +446,7 @@ export async function generatePosterImage(data: any): Promise { top += 24; - const mapImg = await loadImage(canvas, mapIcon, 'map'); + const mapImg = await loadImage(canvas, with_cache_bust(mapIcon), 'map'); await drawCoverImage(ctx, canvas, mapIcon, mapImg, left, top, 40, 40, 12); left += 40 + 16; @@ -454,7 +460,7 @@ export async function generatePosterImage(data: any): Promise { top = r.top + 60; const logoWh = await getImageWh(logoText); - const logoTextImg = await loadImage(canvas, logoText, 'logo'); + const logoTextImg = await loadImage(canvas, with_cache_bust(logoText), 'logo'); ctx.drawImage( logoTextImg, left, @@ -464,7 +470,7 @@ export async function generatePosterImage(data: any): Promise { 400 / (logoWh.width / logoWh.height) ); - const qrImg = await loadImage(canvas, data.qrCodeUrl, 'qrcode'); + const qrImg = await loadImage(canvas, with_cache_bust(data.qrCodeUrl), 'qrcode'); // roundRectGradient(ctx, width - 12 - 150, height - 22 - 140, 140, 140, 20, "#fff", "#fff") ctx.drawImage(qrImg, width - 22 - 100, height - 22 - 100 - 2, 100, 100);