From e2fd28a35bd0585bab3300a4557f26c20968e374 Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Tue, 28 Jul 2026 00:34:31 +0800 Subject: [PATCH] fix(partner): drop store-create SMS verify; keep qualification aspect ratio Partner H5 no longer requires store phone SMS on create; qualification overlay uses height auto with widthFix. Co-authored-by: Cursor --- apps/h5-partner/src/lib/storeDraft.ts | 6 +- apps/h5-partner/src/lib/storePhone.ts | 8 - apps/h5-partner/src/pages/StoreCreatePage.tsx | 170 +----------------- apps/mini-user/src/styles/mine.css | 2 +- .../src/modules/store/store.service.ts | 3 - 5 files changed, 8 insertions(+), 181 deletions(-) diff --git a/apps/h5-partner/src/lib/storeDraft.ts b/apps/h5-partner/src/lib/storeDraft.ts index f3d5f89..a674ed9 100644 --- a/apps/h5-partner/src/lib/storeDraft.ts +++ b/apps/h5-partner/src/lib/storeDraft.ts @@ -6,7 +6,6 @@ export type StoreDraftForm = { district: string; name: string; phone: string; - storeSmsCode: string; address: string; /** 门店坐标(定位或地理编码) */ latitude: string; @@ -50,7 +49,6 @@ export const defaultStoreForm = (): StoreDraftForm => ({ cityId: '', name: '', phone: '', - storeSmsCode: '', address: '', latitude: '', longitude: '', @@ -218,7 +216,7 @@ export function patchEnvPhotoAt(urls: string[], index: number, url: string): str export function validateStoreStep3( form: Pick< StoreDraftForm, - 'bankAccountName' | 'bankAccountNo' | 'bankBranch' | 'phone' | 'storeSmsCode' + 'bankAccountName' | 'bankAccountNo' | 'bankBranch' | 'phone' >, ): string | null { if (!form.bankAccountName.trim()) return '请填写户主姓名'; @@ -227,7 +225,5 @@ export function validateStoreStep3( if (!form.bankBranch.trim()) return '请填写开户支行'; if (!form.phone.trim()) return '请填写联系电话'; if (!PHONE_RE.test(form.phone.trim())) return '联系电话须为11位手机号'; - if (!form.storeSmsCode.trim()) return '请输入门店手机号验证码'; - if (!/^\d{4,6}$/.test(form.storeSmsCode.trim())) return '验证码格式不正确'; return null; } diff --git a/apps/h5-partner/src/lib/storePhone.ts b/apps/h5-partner/src/lib/storePhone.ts index bb5a55a..087fbcd 100644 --- a/apps/h5-partner/src/lib/storePhone.ts +++ b/apps/h5-partner/src/lib/storePhone.ts @@ -8,12 +8,4 @@ export function checkStorePhoneAvailable(phone: string) { ); } -export function sendStorePhoneSms(phone: string) { - return request<{ ok: boolean; maskedPhone: string }>('PARTNER_H5', '/partner/stores/send-phone-sms', { - method: 'POST', - body: JSON.stringify({ phone: phone.trim() }), - silent: true, - }); -} - export type { PartnerStorePhoneAvailableResponse }; diff --git a/apps/h5-partner/src/pages/StoreCreatePage.tsx b/apps/h5-partner/src/pages/StoreCreatePage.tsx index 64d4cdc..b37ccca 100644 --- a/apps/h5-partner/src/pages/StoreCreatePage.tsx +++ b/apps/h5-partner/src/pages/StoreCreatePage.tsx @@ -11,7 +11,7 @@ import { toastError, toastSuccess } from '../lib/toast'; import { resolveRegionBinding } from '../lib/china-region'; -import { checkStorePhoneAvailable, sendStorePhoneSms } from '../lib/storePhone'; +import { checkStorePhoneAvailable } from '../lib/storePhone'; import { formatStoreCoords, locateStorePosition } from '../lib/storeLocate'; @@ -55,7 +55,6 @@ type StoreCategoryNode = { type FieldErrors = { phone?: string; - storeSmsCode?: string; }; @@ -70,7 +69,7 @@ function isPhoneConflictMessage(message: string) { function isPhoneValidationMessage(message: string) { - return message.includes('联系电话') || message.includes('手机号') || message.includes('验证码'); + return message.includes('联系电话') || message.includes('手机号'); } @@ -100,10 +99,6 @@ export default function StoreCreatePage() { const [citiesError, setCitiesError] = useState(''); - const [smsCooldown, setSmsCooldown] = useState(0); - - const [smsHint, setSmsHint] = useState(''); - const [categoryTree, setCategoryTree] = useState([]); const [locating, setLocating] = useState(false); @@ -230,25 +225,13 @@ export default function StoreCreatePage() { setSubmitError(''); - let nextPatch = patch; - if ('phone' in patch) { - setFieldErrors((prev) => ({ ...prev, phone: undefined, storeSmsCode: undefined })); - - setSmsHint(''); - - nextPatch = { ...patch, storeSmsCode: '' }; + setFieldErrors((prev) => ({ ...prev, phone: undefined })); } - if ('storeSmsCode' in patch) { - - setFieldErrors((prev) => ({ ...prev, storeSmsCode: undefined })); - - } - - setForm((prev) => ({ ...prev, ...nextPatch })); + setForm((prev) => ({ ...prev, ...patch })); } @@ -308,72 +291,6 @@ export default function StoreCreatePage() { } - - - async function sendStorePhoneCode() { - - const phone = form.phone.trim(); - - if (!/^1\d{10}$/.test(phone)) { - - setFieldErrors({ phone: '请先填写正确的11位手机号' }); - - return; - - } - - setSmsHint(''); - - setFieldErrors((prev) => ({ ...prev, phone: undefined })); - - try { - - const phoneCheck = await checkStorePhoneAvailable(phone); - - if (!phoneCheck.available) { - - setFieldErrors({ phone: phoneCheck.message ?? '该手机号不可用于门店账号' }); - - return; - - } - - const res = await sendStorePhoneSms(phone); - - setSmsHint(`验证码已发送至 ${res.maskedPhone}`); - - setSmsCooldown(60); - - const timer = setInterval(() => { - - setSmsCooldown((s) => { - - if (s <= 1) { - - clearInterval(timer); - - return 0; - - } - - return s - 1; - - }); - - }, 1000); - - } catch (e) { - - const msg = e instanceof Error ? e.message : '验证码发送失败'; - - setFieldErrors({ phone: msg }); - - } - - } - - - async function handleNext() { if (step === 1) { @@ -410,11 +327,7 @@ export default function StoreCreatePage() { if (msg) { if (isPhoneValidationMessage(msg)) { - if (msg.includes('验证码')) { - setFieldErrors({ storeSmsCode: msg }); - } else { - setFieldErrors({ phone: msg }); - } + setFieldErrors({ phone: msg }); return; } reportFormError(msg); @@ -510,8 +423,6 @@ export default function StoreCreatePage() { phone: form.phone.trim(), - smsCode: form.storeSmsCode.trim(), - district: form.district.trim(), address: form.address.trim(), @@ -561,7 +472,6 @@ export default function StoreCreatePage() { setForm(defaultStoreForm()); setFieldErrors({}); setSubmitError(''); - setSmsHint(''); setParams({ step: '1' }, { replace: true }); toastSuccess('门店录入成功'); navigate(`/stores/${result.store.id}`); @@ -571,11 +481,6 @@ export default function StoreCreatePage() { setFieldErrors({ phone: message }); return; } - if (/验证码/.test(message)) { - setFieldErrors({ storeSmsCode: message }); - goStep(3); - return; - } setSubmitError(message); toastError(message); } finally { @@ -1201,74 +1106,11 @@ export default function StoreCreatePage() {

- 该手机号将作为门店端登录账号,验证码发送至该号确认后方可提交。 + 该手机号将作为门店端登录账号。

- -
- - - -
- -
- - shield - - patchForm({ storeSmsCode: e.target.value.replace(/\D/g, '') })} - - /> - -
- - - -
- - {smsHint && ( - -

{smsHint}

- - )} - - {fieldErrors.storeSmsCode && ( - -

{fieldErrors.storeSmsCode}

- - )} - -
- diff --git a/apps/mini-user/src/styles/mine.css b/apps/mini-user/src/styles/mine.css index 922cf38..5152eb4 100644 --- a/apps/mini-user/src/styles/mine.css +++ b/apps/mini-user/src/styles/mine.css @@ -527,7 +527,7 @@ .mine-qualification-img { display: block; width: 100%; - min-height: 100%; + height: auto; pointer-events: none; } diff --git a/server/dukang-api/src/modules/store/store.service.ts b/server/dukang-api/src/modules/store/store.service.ts index 8782968..e38aed8 100644 --- a/server/dukang-api/src/modules/store/store.service.ts +++ b/server/dukang-api/src/modules/store/store.service.ts @@ -260,9 +260,6 @@ export class StoreService { async createStore(partnerAccountId: bigint, body: Record) { const { primaryId } = await this.resolvePartnerScope(partnerAccountId); const normalizedPhone = String(body.phone).trim(); - const smsCode = body.smsCode ? String(body.smsCode).trim() : ''; - if (!smsCode) throw new BadRequestException('请输入门店手机号验证码'); - await this.authService.verifySmsCode(normalizedPhone, smsCode, SmsScene.PARTNER_STORE_OPEN); const confirmBindExisting = body.confirmBindExisting === true || body.confirmBindExisting === 'true'; await this.assertStorePhoneAvailable(normalizedPhone, confirmBindExisting);