('PARTNER_H5', '/common/client-config');
}
diff --git a/apps/h5-partner/src/pages/LoginPage.tsx b/apps/h5-partner/src/pages/LoginPage.tsx
index 3b49fa9..902404c 100644
--- a/apps/h5-partner/src/pages/LoginPage.tsx
+++ b/apps/h5-partner/src/pages/LoginPage.tsx
@@ -14,8 +14,10 @@ import { usePartnerSession } from '../contexts/PartnerSessionContext';
import { partnerHomePath } from '../lib/partnerAccess';
import {
bindPartnerWechatAfterSmsLogin,
+ canPartnerUseWechatLogin,
fetchClientConfig,
loginPartnerWithWechat,
+ PARTNER_WECHAT_LOGIN_HINT,
} from '../lib/wechat-auth';
import { isWechatEnv } from '../lib/weixin';
@@ -168,6 +170,14 @@ export default function LoginPage() {
setMsg(WECHAT_INAPP_REQUIRED_MSG);
return;
}
+ const canUseWechat = await canPartnerUseWechatLogin({
+ profile: savedProfile,
+ phone,
+ });
+ if (!canUseWechat) {
+ setMsg(PARTNER_WECHAT_LOGIN_HINT);
+ return;
+ }
setWxLoading(true);
try {
const session = await loginPartnerWithWechat();
@@ -183,7 +193,12 @@ export default function LoginPage() {
}
if (quick) {
- const canWechatQuick = wxAuthorize && isWechatEnv() && hasPartnerWxSession() && !!savedProfile;
+ const canWechatQuick =
+ wxAuthorize &&
+ isWechatEnv() &&
+ hasPartnerWxSession() &&
+ !!savedProfile &&
+ savedProfile.hasWechat === true;
return (
@@ -334,7 +349,7 @@ export default function LoginPage() {
- {hasPartnerWxSession() && savedProfile && (
+ {hasPartnerWxSession() && savedProfile?.hasWechat && (
微信快捷登录
)}
diff --git a/apps/h5-partner/src/pages/StoreCreatePage.tsx b/apps/h5-partner/src/pages/StoreCreatePage.tsx
index caa5eff..51d01cc 100644
--- a/apps/h5-partner/src/pages/StoreCreatePage.tsx
+++ b/apps/h5-partner/src/pages/StoreCreatePage.tsx
@@ -1,4 +1,4 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
+import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
import { useNavigate, useSearchParams } from 'react-router-dom';
@@ -24,7 +24,7 @@ import { isSubAccount } from '../lib/partnerAccess';
import {
- clearStoreDraft,
+ clearAllStoreDrafts,
defaultStoreForm,
@@ -114,6 +114,8 @@ export default function StoreCreatePage() {
const [smsHint, setSmsHint] = useState('');
+ const draftSaveDisabledRef = useRef(false);
+
function reportFormError(message: string) {
setSubmitError(message);
}
@@ -137,9 +139,8 @@ export default function StoreCreatePage() {
useEffect(() => {
-
+ if (draftSaveDisabledRef.current) return;
saveStoreDraft({ step, form }, accountId);
-
}, [step, form, accountId]);
@@ -569,7 +570,13 @@ export default function StoreCreatePage() {
});
- clearStoreDraft(accountId);
+ draftSaveDisabledRef.current = true;
+ clearAllStoreDrafts(accountId);
+ setForm(defaultStoreForm());
+ setFieldErrors({});
+ setSubmitError('');
+ setSmsHint('');
+ setParams({ step: '1' }, { replace: true });
toastSuccess('门店录入成功');
navigate(`/stores/${result.store.id}`);
} catch (e) {
diff --git a/packages/shared-types/src/partner.ts b/packages/shared-types/src/partner.ts
index 61ea3de..847e132 100644
--- a/packages/shared-types/src/partner.ts
+++ b/packages/shared-types/src/partner.ts
@@ -73,6 +73,15 @@ export interface PartnerStorePhoneAvailableResponse {
needConfirm?: boolean;
}
+/** 合伙人登录前手机号校验 */
+export interface PartnerPhoneCheckResponse {
+ ok: boolean;
+ maskedPhone: string;
+ name: string;
+ companyName?: string;
+ hasWechat?: boolean;
+}
+
export interface PartnerWeeklyReportPeriod {
startDate: string;
endDate: string;
diff --git a/server/dukang-api/src/modules/iam/auth.service.ts b/server/dukang-api/src/modules/iam/auth.service.ts
index 3cc250f..cb22ad4 100644
--- a/server/dukang-api/src/modules/iam/auth.service.ts
+++ b/server/dukang-api/src/modules/iam/auth.service.ts
@@ -264,6 +264,7 @@ export class AuthService {
maskedPhone: this.maskPhone(normalizedPhone),
name: account.name,
companyName: primary.companyName,
+ hasWechat: !!account.wxOpenId,
};
}