应收账单模块,调整枚举代码优化2

This commit is contained in:
caojia
2026-09-17 11:07:23 +08:00
parent a17f09683b
commit e2a8731d39
+145
View File
@@ -0,0 +1,145 @@
/**
* 应收模块业务枚举。
*
* <p>value 必须与后端和数据库保存的英文编码保持一致,label 是面向用户的中文解释,
* type 用于统一 Element Plus 标签颜色。</p>
*/
/** 应收账单生命周期状态。 */
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'
})
/** 日志状态变化的兼容展示。日志是通用表,除账单状态外还可能保留历史收款状态。 */
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
}