import sysConfigApi from '@/apis/modules/sys-config.js' export const CONSUME_EDITABLE_POLICY_KEY = 'consumeEditablePolicy' const DEFAULT_POLICY = { editableDays: 3, allowCrossMonth: false } export function parseConsumeEditablePolicy(data = {}) { const days = parseInt(data.consumeEditableDays, 10) return { editableDays: isNaN(days) || days < 1 ? DEFAULT_POLICY.editableDays : days, allowCrossMonth: Number(data.consumeAllowCrossMonthEdit) === 1 } } /** * 与后端 ConsumeEditableDaysHelper 口径一致:先校验天数,再校验跨月 */ export function canConsumeMiniProgramEdit(row, policy = DEFAULT_POLICY) { if (!row) return false const baseTime = parseConsumeBaseTime(row) if (!baseTime) return false const now = Date.now() if (now > baseTime.getTime() + policy.editableDays * 86400000) { return false } if (!policy.allowCrossMonth) { const nowDate = new Date() if ( baseTime.getFullYear() !== nowDate.getFullYear() || baseTime.getMonth() !== nowDate.getMonth() ) { return false } } return true } export function parseConsumeBaseTime(row) { const raw = row.hksj || row.Hksj || row.createTime || row.CreateTime if (!raw) return null const date = new Date(raw) return isNaN(date.getTime()) ? null : date } export function loadConsumeEditablePolicy(force = false) { if (!force) { const cached = uni.getStorageSync(CONSUME_EDITABLE_POLICY_KEY) if (cached && typeof cached === 'object') { refreshConsumeEditablePolicy() return Promise.resolve(cached) } } return refreshConsumeEditablePolicy() } export function refreshConsumeEditablePolicy() { return sysConfigApi.getSysConfig() .then(res => { const policy = parseConsumeEditablePolicy((res && res.data) || {}) uni.setStorageSync(CONSUME_EDITABLE_POLICY_KEY, policy) uni.$emit && uni.$emit('consume-editable-policy-change', policy) return policy }) .catch(() => { const cached = uni.getStorageSync(CONSUME_EDITABLE_POLICY_KEY) return cached && typeof cached === 'object' ? cached : { ...DEFAULT_POLICY } }) } export function getConsumeEditablePolicy() { const cached = uni.getStorageSync(CONSUME_EDITABLE_POLICY_KEY) return cached && typeof cached === 'object' ? cached : { ...DEFAULT_POLICY } } export function clearConsumeEditablePolicy() { uni.removeStorageSync(CONSUME_EDITABLE_POLICY_KEY) } export default { CONSUME_EDITABLE_POLICY_KEY, parseConsumeEditablePolicy, canConsumeMiniProgramEdit, parseConsumeBaseTime, loadConsumeEditablePolicy, refreshConsumeEditablePolicy, getConsumeEditablePolicy, clearConsumeEditablePolicy }