支持在线时间跨天并优化发布与筛选体验
允许在线时段 end 早于 start 表示跨天,统一展示「次日」文案;修复移动端价格区间清空后被 sessionStorage 回写;优化 PC/移动端在线时间控件密度与通栏展示。
This commit is contained in:
@@ -354,39 +354,24 @@ export function usePublishForm(options: UsePublishFormOptions) {
|
||||
}
|
||||
|
||||
function handleOnlineStartChange(value: string | number | null | undefined) {
|
||||
const time = normalizeOnlineTimeValue(value)
|
||||
form.online_start = time
|
||||
const start = parseOnlineTime(time)
|
||||
if (start === null) return
|
||||
const lastTime = parseOnlineTime('23:59')
|
||||
if (lastTime !== null && start >= lastTime) {
|
||||
form.online_start = ''
|
||||
options.notifyWarning('开始时间必须早于结束时间')
|
||||
return
|
||||
}
|
||||
const end = parseOnlineTime(form.online_end)
|
||||
if (end !== null && start >= end) {
|
||||
form.online_end = ''
|
||||
options.notifyWarning('结束时间已清空,请选择晚于开始时间的结束时间')
|
||||
}
|
||||
form.online_start = normalizeOnlineTimeValue(value)
|
||||
}
|
||||
|
||||
function handleOnlineEndChange(value: string | number | null | undefined) {
|
||||
const time = normalizeOnlineTimeValue(value)
|
||||
form.online_end = time
|
||||
const end = parseOnlineTime(time)
|
||||
if (end === null) return
|
||||
const firstTime = parseOnlineTime('00:00')
|
||||
if (firstTime !== null && end <= firstTime) {
|
||||
form.online_end = ''
|
||||
options.notifyWarning('结束时间必须晚于开始时间')
|
||||
return
|
||||
}
|
||||
form.online_end = normalizeOnlineTimeValue(value)
|
||||
}
|
||||
|
||||
/** 结束时刻早于开始时刻时视为跨天(每日 start 至次日 end) */
|
||||
function isCrossDayOnline() {
|
||||
const start = parseOnlineTime(form.online_start)
|
||||
if (start !== null && end <= start) {
|
||||
form.online_end = ''
|
||||
options.notifyWarning('结束时间必须晚于开始时间')
|
||||
}
|
||||
const end = parseOnlineTime(form.online_end)
|
||||
return start !== null && end !== null && end < start
|
||||
}
|
||||
|
||||
function onlineTimeRangeHint() {
|
||||
if (isAllDayOnline()) return ''
|
||||
if (!isCrossDayOnline()) return ''
|
||||
return `每日 ${form.online_start} 至次日 ${form.online_end}`
|
||||
}
|
||||
|
||||
function validateOnlineTime() {
|
||||
@@ -394,8 +379,7 @@ export function usePublishForm(options: UsePublishFormOptions) {
|
||||
const end = parseOnlineTime(form.online_end)
|
||||
if (start === null) return '请选择在线开始时间'
|
||||
if (end === null) return '请选择在线结束时间'
|
||||
if (start === end) return '在线开始和结束时间不能相同'
|
||||
if (end < start) return '在线结束时间必须晚于开始时间'
|
||||
if (start === end) return '在线开始和结束时间不能相同(全天请点「全天」)'
|
||||
return ''
|
||||
}
|
||||
|
||||
@@ -920,6 +904,8 @@ export function usePublishForm(options: UsePublishFormOptions) {
|
||||
resetDraftState,
|
||||
handleResetDraft,
|
||||
isAllDayOnline,
|
||||
isCrossDayOnline,
|
||||
onlineTimeRangeHint,
|
||||
selectAllDayOnline,
|
||||
handleOnlineStartChange,
|
||||
handleOnlineEndChange,
|
||||
|
||||
Reference in New Issue
Block a user