feat(mini): v4.0.8 客服卡片主包落地、定位误报修复,合伙人微信内预览保存海报
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
saveActivityPosterSelection,
|
||||
} from '../lib/activity-posters';
|
||||
import { toastError, toastSuccess } from '../lib/toast';
|
||||
import { blobToDataUrl, isHttpImageUrl, previewSaveableImage } from '../lib/wechat-save-image';
|
||||
import { isWechatEnv } from '../lib/weixin';
|
||||
|
||||
const NONE_ID = 'none';
|
||||
@@ -98,11 +99,13 @@ export default function ActivityPosterPicker({ initialId }: Props) {
|
||||
setDownloading(true);
|
||||
try {
|
||||
if (selectedId === NONE_ID) {
|
||||
if (isWechatEnv() && isHttpImageUrl(qrcodeUrl)) {
|
||||
await previewSaveableImage(qrcodeUrl);
|
||||
return;
|
||||
}
|
||||
const blob = await fetchAssocQrcodeImage();
|
||||
if (isWechatEnv()) {
|
||||
const url = URL.createObjectURL(blob);
|
||||
urlsRef.current.push(url);
|
||||
setQrcodeUrl(url);
|
||||
setQrcodeUrl(await blobToDataUrl(blob));
|
||||
toastSuccess('请长按上方图片保存到相册');
|
||||
return;
|
||||
}
|
||||
@@ -118,9 +121,8 @@ export default function ActivityPosterPicker({ initialId }: Props) {
|
||||
}
|
||||
if (isWechatEnv()) {
|
||||
let url = previewUrls[selected.id];
|
||||
if (!url) {
|
||||
url = URL.createObjectURL(blob);
|
||||
urlsRef.current.push(url);
|
||||
if (!url || url.startsWith('blob:')) {
|
||||
url = await blobToDataUrl(blob);
|
||||
setPreviewUrls((prev) => ({ ...prev, [selected.id]: url }));
|
||||
}
|
||||
toastSuccess('请长按上方图片保存到相册');
|
||||
@@ -172,7 +174,7 @@ export default function ActivityPosterPicker({ initialId }: Props) {
|
||||
<div className="partner-activity-panel">
|
||||
{qrcodeUrl ? (
|
||||
<div className="partner-activity-preview partner-activity-preview--qr">
|
||||
<img src={qrcodeUrl} alt="关联码" />
|
||||
<img className="partner-longpress-img" src={qrcodeUrl} alt="关联码" />
|
||||
</div>
|
||||
) : (
|
||||
<p className="body-md text-muted" style={{ marginBottom: 12 }}>关联码尚未生成</p>
|
||||
@@ -200,7 +202,7 @@ export default function ActivityPosterPicker({ initialId }: Props) {
|
||||
{selectedId === item.id && (
|
||||
<div className="partner-activity-panel">
|
||||
<div className="partner-activity-preview">
|
||||
<img src={previewUrl || item.imageUrl} alt={item.title} />
|
||||
<img className="partner-longpress-img" src={previewUrl || item.imageUrl} alt={item.title} />
|
||||
{previewLoading && !previewUrl && (
|
||||
<div className="partner-activity-preview-mask">正在贴入二维码…</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user