feat(self-operated): unify completed-day ranges and analytics sorting
This commit is contained in:
@@ -26,10 +26,10 @@ export function yesterdayBeijing(now = new Date()) {
|
||||
export function validateTurnover(q: TurnoverQuery, latestDate = yesterdayBeijing()) {
|
||||
if (!q.warehouseCode.trim()) throw new Error('请选择可用仓库')
|
||||
if (!/^\d{4}-\d{2}-\d{2}$/.test(q.endDate) || !Number.isFinite(Date.parse(q.endDate)) || new Date(q.endDate).toISOString().slice(0, 10) !== q.endDate || q.endDate > latestDate) throw new Error('截止日必须是已结束的北京时间日期')
|
||||
if (![7, 15, 30].includes(q.baseWindowDays)) throw new Error('计算基准仅支持7、15、30天')
|
||||
if (!Number.isInteger(q.baseWindowDays) || q.baseWindowDays < 1 || q.baseWindowDays > 366) throw new Error('统计区间须为1至366个完整自然日')
|
||||
if (!['SKU', 'OWNER'].includes(q.groupBy)) throw new Error('分组无效')
|
||||
if (q.groupBy === 'OWNER' && q.sku) throw new Error('货主汇总不能携带SKU搜索')
|
||||
if (!['ALL', 'NO_OUTBOUND_30D', 'COVERAGE_GT', 'COVERAGE_LE', 'FROZEN', 'DEFECTIVE', 'UNASSESSABLE'].includes(q.focus)) throw new Error('关注条件无效')
|
||||
if (!['ALL', 'NO_OUTBOUND_IN_WINDOW', 'COVERAGE_GT', 'COVERAGE_LE', 'FROZEN', 'DEFECTIVE', 'UNASSESSABLE'].includes(q.focus)) throw new Error('关注条件无效')
|
||||
if (q.coverageDaysThreshold != null && (!Number.isSafeInteger(q.coverageDaysThreshold) || q.coverageDaysThreshold <= 0)) throw new Error('阈值必须为正整数天数')
|
||||
if (['COVERAGE_GT', 'COVERAGE_LE'].includes(q.focus) && q.coverageDaysThreshold == null) throw new Error('请填写快慢判断的天数阈值')
|
||||
if (q.turnoverStatus && q.turnoverStatus !== 'INSUFFICIENT') throw new Error('周转样本条件无效')
|
||||
|
||||
Reference in New Issue
Block a user