开门营业成功后提示「开店成功」

关闭门店改为自定义确认框,不再用 window.confirm,不会再带出页面域名
This commit is contained in:
2026-07-22 11:50:05 +08:00
parent 6c299f1a1d
commit 823e439101
2 changed files with 85 additions and 5 deletions
+43 -3
View File
@@ -47,6 +47,7 @@ export default function StoreDetailPage() {
const [saving, setSaving] = useState(false);
const [mediaSaving, setMediaSaving] = useState(false);
const [actionError, setActionError] = useState('');
const [closeConfirmOpen, setCloseConfirmOpen] = useState(false);
function applyStore(data: Record<string, unknown>) {
setStore(data);
@@ -92,8 +93,8 @@ export default function StoreDetailPage() {
return;
}
if (next === 'CLOSED') {
const ok = window.confirm('关闭后不可恢复营业,确认关闭该门店?');
if (!ok) return;
setCloseConfirmOpen(true);
return;
}
setStatusSaving(true);
setActionError('');
@@ -104,7 +105,27 @@ export default function StoreDetailPage() {
});
setStatus(next);
setStore((prev) => (prev ? { ...prev, ...updated, status: next } : prev));
toastSuccess('状态已更新');
toastSuccess(next === 'OPEN' ? '开店成功' : '状态已更新');
} catch (e) {
setActionError(e instanceof Error ? e.message : '状态更新失败');
} finally {
setStatusSaving(false);
}
}
async function confirmCloseStore() {
if (!id || statusSaving) return;
setCloseConfirmOpen(false);
setStatusSaving(true);
setActionError('');
try {
const updated = await request<Record<string, unknown>>('PARTNER_H5', `/partner/stores/${id}/status`, {
method: 'PUT',
body: JSON.stringify({ status: 'CLOSED' }),
});
setStatus('CLOSED');
setStore((prev) => (prev ? { ...prev, ...updated, status: 'CLOSED' } : prev));
toastSuccess('门店已关闭');
} catch (e) {
setActionError(e instanceof Error ? e.message : '状态更新失败');
} finally {
@@ -385,6 +406,25 @@ export default function StoreDetailPage() {
</button>
)}
</footer>
{closeConfirmOpen && (
<div className="partner-ship-modal-backdrop" role="presentation" onClick={() => setCloseConfirmOpen(false)}>
<div className="partner-ship-modal" role="dialog" aria-modal="true" onClick={(e) => e.stopPropagation()}>
<h3 className="headline-md" style={{ marginBottom: 8 }}></h3>
<p className="body-md text-muted" style={{ lineHeight: 1.5 }}>
</p>
<div className="partner-ship-actions">
<button type="button" className="partner-btn-secondary" onClick={() => setCloseConfirmOpen(false)}>
</button>
<button type="button" className="partner-btn-primary" onClick={() => void confirmCloseStore()}>
</button>
</div>
</div>
</div>
)}
</div>
);
}