fix: 修复分享长图页面微信分享和复制链接在 web-view 中失效

- bridge.share(): postMessage 后调用 navigateBack() 触发消息投递
- SharePage: 复制链接增加客户端三层降级 (clipboard → execCommand → bridge)
- .env: 更新已下架的 AI 模型 (VL→Qwen3-VL-32B, Text→Qwen2.5-72B)
This commit is contained in:
2026-07-02 19:54:38 +08:00
parent bba368b98c
commit 85d238fb35
2 changed files with 37 additions and 2 deletions

View File

@@ -31,8 +31,36 @@ export function SharePage() {
const [shareData, setShareData] = useState<any>(null);
const [saveStatus, setSaveStatus] = useState<SaveStatus>("idle");
const [imageUrl, setImageUrl] = useState<string | null>(null);
const [linkCopied, setLinkCopied] = useState(false);
const cardRef = useRef<HTMLDivElement>(null);
// 复制链接(客户端优先,bridge 降级)
const handleCopyLink = useCallback(async () => {
const shareUrl = `${window.location.origin}/app_03/share/${reportId}`;
let copied = false;
// 尝试 navigator.clipboard
try {
await navigator.clipboard.writeText(shareUrl);
copied = true;
} catch {}
// 降级:execCommand
if (!copied) {
const ta = document.createElement('textarea');
ta.value = shareUrl;
ta.style.cssText = 'position:fixed;left:-9999px;top:-9999px;opacity:0';
document.body.appendChild(ta);
ta.select();
try { copied = document.execCommand('copy'); } catch {}
document.body.removeChild(ta);
}
// 再降级:bridge.copyLink(依赖 postMessage,web-view 中可能不即时)
if (!copied) {
bridge.copyLink(shareUrl);
}
setLinkCopied(true);
setTimeout(() => setLinkCopied(false), 2000);
}, [reportId]);
useEffect(() => {
if (!reportId) return;
generateShareData(reportId)
@@ -321,10 +349,11 @@ export function SharePage() {
<span>分享给微信好友</span>
</Button>
<Button
onClick={() => bridge.copyLink(window.location.href)}
onClick={handleCopyLink}
className="w-full h-12 rounded-2xl text-sm font-medium flex items-center justify-center gap-2 border-2 border-gray-200 bg-white hover:bg-gray-50 text-gray-600"
>
<span>复制链接分享</span>
{linkCopied ? <Check className="w-4 h-4 text-green-500" /> : null}
<span>{linkCopied ? "已复制链接" : "复制链接分享"}</span>
</Button>
<Button
onClick={handleSaveImage}

View File

@@ -55,6 +55,12 @@ const bridge = {
imageUrl: opts.imageUrl || '',
scene: opts.scene || 'WXSceneSession',
})
// 微信 web-view 中 postMessage 不会即时投递,只在页面离开时批量发送。
// 调用 navigateBack 回到小程序页面触发投递,小程序 onMessage 收到后执行分享。
const mp = getMiniProgram()
if (mp) {
mp.navigateBack({ delta: 1 })
}
},
/**