function parseDays(data, key, legacyKey) { let value = parseInt(data[key], 10) if (isNaN(value) && legacyKey) { value = parseInt(data[legacyKey], 10) } if (isNaN(value)) return 0 return value } /** * 解析管理后台耗卡作废/删除允许天数(兼容旧版合并配置项) */ export function parseConsumeAdminPolicy(data = {}) { return { voidDays: parseDays(data, 'adminConsumeVoidEditableDays', 'adminConsumeCancelEditableDays'), deleteDays: parseDays(data, 'adminConsumeDeleteEditableDays', 'adminConsumeCancelEditableDays') } } export function canConsumeAdminOperationByDays(row, days) { if (!row) return false if (days === 0) return true const baseTime = row.hksj ? new Date(row.hksj) : null if (!baseTime || isNaN(baseTime.getTime())) return true const elapsedDays = (Date.now() - baseTime.getTime()) / 86400000 return elapsedDays <= days } /** * 规范化业务配置表单字段(保存前/加载后) */ export function normalizeBusinessConfigFields(form) { const next = { ...form } const intField = (key, defaultValue) => { if (next[key] === '' || next[key] == null) { next[key] = defaultValue return } const n = parseInt(next[key], 10) next[key] = isNaN(n) ? defaultValue : n } intField('consumeEditableDays', 3) intField('adminConsumeVoidEditableDays', 0) intField('adminConsumeDeleteEditableDays', 0) return next }