fix(partner): resolve WeChat image picker auth denied on store create
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { useId, useRef, useState } from 'react';
|
||||
import { useEffect, useId, useRef, useState } from 'react';
|
||||
import { uploadFileToOss, type OssMediaType } from '../lib/upload';
|
||||
import { isWechatEnv, weixinSdk } from '../lib/weixin';
|
||||
|
||||
@@ -34,6 +34,13 @@ export default function OssUploadField({
|
||||
accept ?? (mediaType === 'VIDEO' ? 'video/*' : mediaType === 'FILE' ? 'image/*,.pdf' : 'image/*');
|
||||
const useWechatPicker = isWechatEnv() && mediaType !== 'VIDEO';
|
||||
|
||||
useEffect(() => {
|
||||
if (!useWechatPicker) return;
|
||||
void weixinSdk.init().catch(() => {
|
||||
/* 点击上传时会再次初始化并提示 */
|
||||
});
|
||||
}, [useWechatPicker]);
|
||||
|
||||
async function uploadSelectedFile(file: File) {
|
||||
if (file.size > DEFAULT_MAX_MB * 1024 * 1024) {
|
||||
setError(`文件不能超过 ${DEFAULT_MAX_MB}MB`);
|
||||
@@ -66,11 +73,16 @@ export default function OssUploadField({
|
||||
await uploadSelectedFile(files[0]);
|
||||
return;
|
||||
}
|
||||
setError('未能获取图片,请重试');
|
||||
} catch (e) {
|
||||
const msg = e instanceof Error ? e.message : '无法打开相册';
|
||||
if (!/cancel/i.test(msg)) setError(msg);
|
||||
return;
|
||||
if (!/cancel/i.test(msg)) {
|
||||
setError(/permission|auth|denied|授权|拒绝/i.test(msg)
|
||||
? '微信选图授权失败,请刷新页面后重试'
|
||||
: msg);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
inputRef.current?.click();
|
||||
|
||||
@@ -6,6 +6,7 @@ import OssUploadField from '../components/OssUploadField';
|
||||
import { request } from '../lib/api';
|
||||
import { resolveRegionBinding } from '../lib/china-region';
|
||||
import { fetchPartnerCities, type OpenCityOption } from '../lib/upload';
|
||||
import { isWechatEnv, weixinSdk } from '../lib/weixin';
|
||||
import {
|
||||
clearStoreDraft,
|
||||
defaultStoreForm,
|
||||
@@ -41,6 +42,13 @@ export default function StoreCreatePage() {
|
||||
saveStoreDraft({ step, form });
|
||||
}, [step, form]);
|
||||
|
||||
useEffect(() => {
|
||||
if (step !== 2 || !isWechatEnv()) return;
|
||||
void weixinSdk.init().catch(() => {
|
||||
/* OssUploadField 点击时会再次初始化 */
|
||||
});
|
||||
}, [step]);
|
||||
|
||||
useEffect(() => {
|
||||
void fetchPartnerCities()
|
||||
.then((items) => {
|
||||
|
||||
Reference in New Issue
Block a user