feat(store): dual business hours, avg price, and status lock
CI / verify (pull_request) Has been cancelled
CI / verify (pull_request) Has been cancelled
Support 1-2 hour segments and optional avgPrice; show bank settlement on HQ store detail; enforce pickup min 2 bottles; Chinese order statuses; block shop reopen after permanent close. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -512,6 +512,12 @@ export default function StoreCreatePage() {
|
||||
|
||||
closeTime: form.closeTime.trim(),
|
||||
|
||||
...(form.dualHours
|
||||
? { openTime2: form.openTime2.trim(), closeTime2: form.closeTime2.trim() }
|
||||
: {}),
|
||||
|
||||
...(form.avgPrice.trim() ? { avgPrice: Number(form.avgPrice) } : {}),
|
||||
|
||||
categoryId: form.categoryId.trim(),
|
||||
|
||||
intro: form.intro.trim() || undefined,
|
||||
@@ -740,7 +746,7 @@ export default function StoreCreatePage() {
|
||||
|
||||
<label>营业时间 <span className="text-primary">*</span></label>
|
||||
|
||||
<div className="partner-input-row" style={{ alignItems: 'center', gap: 8 }}>
|
||||
<div className="partner-input-row" style={{ alignItems: 'center', gap: 8, marginBottom: 8 }}>
|
||||
|
||||
<input
|
||||
|
||||
@@ -774,14 +780,92 @@ export default function StoreCreatePage() {
|
||||
|
||||
</div>
|
||||
|
||||
<label className="partner-checkbox-row" style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8 }}>
|
||||
|
||||
<input
|
||||
|
||||
type="checkbox"
|
||||
|
||||
checked={form.dualHours}
|
||||
|
||||
onChange={(e) => patchForm({ dualHours: e.target.checked })}
|
||||
|
||||
/>
|
||||
|
||||
<span className="label-md">启用第二段营业时间(如午市/晚市)</span>
|
||||
|
||||
</label>
|
||||
|
||||
{form.dualHours ? (
|
||||
|
||||
<div className="partner-input-row" style={{ alignItems: 'center', gap: 8 }}>
|
||||
|
||||
<input
|
||||
|
||||
className="partner-field-input partner-field-input--block"
|
||||
|
||||
type="time"
|
||||
|
||||
value={form.openTime2}
|
||||
|
||||
onChange={(e) => patchForm({ openTime2: e.target.value })}
|
||||
|
||||
aria-label="第二段开始"
|
||||
|
||||
/>
|
||||
|
||||
<span className="label-md text-muted">至</span>
|
||||
|
||||
<input
|
||||
|
||||
className="partner-field-input partner-field-input--block"
|
||||
|
||||
type="time"
|
||||
|
||||
value={form.closeTime2}
|
||||
|
||||
onChange={(e) => patchForm({ closeTime2: e.target.value })}
|
||||
|
||||
aria-label="第二段结束"
|
||||
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
) : null}
|
||||
|
||||
<p className="label-md text-muted" style={{ marginTop: 8 }}>
|
||||
|
||||
将展示给用户端与门店端,默认 10:00–22:00,可按实际调整。
|
||||
支持 1 段(如 09:00-22:00)或 2 段(如 09:00-14:00,17:00-21:00)。
|
||||
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="partner-field">
|
||||
|
||||
<label>人均费用(选填)</label>
|
||||
|
||||
<input
|
||||
|
||||
className="partner-field-input partner-field-input--block"
|
||||
|
||||
type="number"
|
||||
|
||||
min={0}
|
||||
|
||||
step={1}
|
||||
|
||||
placeholder="如 88,用户端门店页展示"
|
||||
|
||||
value={form.avgPrice}
|
||||
|
||||
onChange={(e) => patchForm({ avgPrice: e.target.value })}
|
||||
|
||||
/>
|
||||
|
||||
</div>
|
||||
|
||||
<div className="partner-field">
|
||||
|
||||
<label>门店简介</label>
|
||||
|
||||
Reference in New Issue
Block a user