/** * 应收模块业务枚举。 * *
value 必须与后端和数据库保存的英文编码保持一致,label 是面向用户的中文解释, * type 用于统一 Element Plus 标签颜色。
*/ /** 应收账单生命周期状态。 */ export const AR_BILL_STATUS = Object.freeze({ DRAFT: 'DRAFT', // 草稿:已生成,待确认 CONFIRMED: 'CONFIRMED', // 已确认:正式应收,待核销 PARTIAL_WRITTEN_OFF: 'PARTIAL_WRITTEN_OFF', // 部分核销:已核销部分金额 WRITTEN_OFF: 'WRITTEN_OFF', // 已核销:账单金额全部核销 VOID: 'VOID' // 已作废:账单失效,来源订单可重新出账 }) export const AR_BILL_STATUS_OPTIONS = Object.freeze([ { label: '草稿', value: AR_BILL_STATUS.DRAFT }, { label: '已确认', value: AR_BILL_STATUS.CONFIRMED }, { label: '部分核销', value: AR_BILL_STATUS.PARTIAL_WRITTEN_OFF }, { label: '已核销', value: AR_BILL_STATUS.WRITTEN_OFF }, { label: '已作废', value: AR_BILL_STATUS.VOID } ]) export const AR_BILL_STATUS_TYPES = Object.freeze({ [AR_BILL_STATUS.DRAFT]: 'info', [AR_BILL_STATUS.CONFIRMED]: 'primary', [AR_BILL_STATUS.PARTIAL_WRITTEN_OFF]: 'warning', [AR_BILL_STATUS.WRITTEN_OFF]: 'success', [AR_BILL_STATUS.VOID]: 'danger' }) /** 账单生成时的订单选择模式,value 与后端枚举和数据库 code 保持一致。 */ export const AR_BILL_SELECTION_MODE = Object.freeze({ EXPLICIT: 'EXPLICIT', // 手动选择当前预览结果 ALL_MATCHED: 'ALL_MATCHED' // 全选查询结果,再排除指定订单 }) /** 日志状态变化的兼容展示。日志是通用表,除账单状态外还可能保留历史收款状态。 */ export const AR_LOG_STATUS_OPTIONS = Object.freeze([ ...AR_BILL_STATUS_OPTIONS, { label: '已登记(历史收款)', value: 'REGISTERED' }, { label: '有效(余额核销)', value: 'EFFECTIVE' }, { label: '已取消/已反核销', value: 'CANCELLED' } ]) /** 客户余额核销单状态。 */ export const AR_BALANCE_WRITEOFF_STATUS = Object.freeze({ EFFECTIVE: 'EFFECTIVE', // 有效:已扣减客户余额并完成核销 CANCELLED: 'CANCELLED' // 已反核销:已回补客户余额 }) export const AR_BALANCE_WRITEOFF_STATUS_OPTIONS = Object.freeze([ { label: '有效', value: AR_BALANCE_WRITEOFF_STATUS.EFFECTIVE }, { label: '已反核销', value: AR_BALANCE_WRITEOFF_STATUS.CANCELLED } ]) export const AR_BALANCE_WRITEOFF_STATUS_TYPES = Object.freeze({ [AR_BALANCE_WRITEOFF_STATUS.EFFECTIVE]: 'success', [AR_BALANCE_WRITEOFF_STATUS.CANCELLED]: 'info' }) /** 账单导出文件状态。 */ export const AR_EXPORT_STATUS = Object.freeze({ PROCESSING: 'PROCESSING', // 生成中:文件尚未生成完成 SUCCESS: 'SUCCESS', // 成功:文件可以下载 FAILED: 'FAILED' // 失败:文件生成失败 }) export const AR_EXPORT_STATUS_OPTIONS = Object.freeze([ { label: '生成中', value: AR_EXPORT_STATUS.PROCESSING }, { label: '成功', value: AR_EXPORT_STATUS.SUCCESS }, { label: '失败', value: AR_EXPORT_STATUS.FAILED } ]) export const AR_EXPORT_STATUS_TYPES = Object.freeze({ [AR_EXPORT_STATUS.PROCESSING]: 'warning', [AR_EXPORT_STATUS.SUCCESS]: 'success', [AR_EXPORT_STATUS.FAILED]: 'danger' }) /** 应收日志关联的业务对象类型。 */ export const AR_LOG_OBJECT_TYPE = Object.freeze({ BILL: 'BILL', // 应收账单 EXPORT: 'EXPORT', // 账单导出文件 BALANCE_WRITEOFF: 'BALANCE_WRITEOFF' // 客户余额核销单 }) export const AR_LOG_OBJECT_TYPE_OPTIONS = Object.freeze([ { label: '应收账单', value: AR_LOG_OBJECT_TYPE.BILL }, { label: '账单导出', value: AR_LOG_OBJECT_TYPE.EXPORT }, { label: '余额核销', value: AR_LOG_OBJECT_TYPE.BALANCE_WRITEOFF } ]) /** 应收日志记录的业务操作类型。 */ export const AR_LOG_OPERATION_TYPE = Object.freeze({ CREATE: 'CREATE', // 生成正式账单成功 GENERATE: 'GENERATE', // 生成账单前校验或生成失败 CONFIRM: 'CONFIRM', // 确认草稿账单 VOID: 'VOID', // 作废账单 EXPORT: 'EXPORT', // 生成账单导出文件 BALANCE_WRITEOFF: 'BALANCE_WRITEOFF', // 使用客户余额核销账单 CANCEL_BALANCE_WRITEOFF: 'CANCEL_BALANCE_WRITEOFF' // 取消余额核销并回补余额 }) export const AR_LOG_OPERATION_TYPE_OPTIONS = Object.freeze([ { label: '生成账单', value: AR_LOG_OPERATION_TYPE.CREATE }, { label: '生成账单校验', value: AR_LOG_OPERATION_TYPE.GENERATE }, { label: '确认账单', value: AR_LOG_OPERATION_TYPE.CONFIRM }, { label: '作废账单', value: AR_LOG_OPERATION_TYPE.VOID }, { label: '导出账单', value: AR_LOG_OPERATION_TYPE.EXPORT }, { label: '余额核销', value: AR_LOG_OPERATION_TYPE.BALANCE_WRITEOFF }, { label: '取消余额核销', value: AR_LOG_OPERATION_TYPE.CANCEL_BALANCE_WRITEOFF } ]) /** 应收日志产生来源。 */ export const AR_LOG_OPERATION_SOURCE = Object.freeze({ WEB: 'WEB', // 网页端操作 API: 'API', // 系统接口调用 JOB: 'JOB', // 定时任务或后台作业 IMPORT: 'IMPORT' // 数据导入 }) export const AR_LOG_OPERATION_SOURCE_OPTIONS = Object.freeze([ { label: '网页端', value: AR_LOG_OPERATION_SOURCE.WEB }, { label: '接口', value: AR_LOG_OPERATION_SOURCE.API }, { label: '定时任务', value: AR_LOG_OPERATION_SOURCE.JOB }, { label: '数据导入', value: AR_LOG_OPERATION_SOURCE.IMPORT } ]) /** 应收日志执行结果。 */ export const AR_LOG_RESULT = Object.freeze({ SUCCESS: 'SUCCESS', // 操作成功 FAILED: 'FAILED' // 操作失败 }) export const AR_LOG_RESULT_OPTIONS = Object.freeze([ { label: '成功', value: AR_LOG_RESULT.SUCCESS }, { label: '失败', value: AR_LOG_RESULT.FAILED } ]) export const AR_LOG_RESULT_TYPES = Object.freeze({ [AR_LOG_RESULT.SUCCESS]: 'success', [AR_LOG_RESULT.FAILED]: 'danger' }) /** 从枚举选项中取得中文名称,未知值保留原编码便于排查数据。 */ export function arEnumLabel(options, value) { if (value === null || value === undefined || value === '') return '-' return options.find(item => item.value === value)?.label || value }