/** * @fileoverview 订单管理相关常量定义和类型定义 * @description 定义订单类型、订单状态、订单明细状态等枚举值、常量和工具函数 */ /** * 订单类型枚举 * @readonly */ export const ORDER_TYPES = Object.freeze({ /** 未知类型 */ UNKNOWN: 0, /** 普通订单 */ NORMAL: 1 }) /** * 订单类型枚举(订单表单模块兼容性别名) * @readonly * @enum {number} */ export const OrderType = ORDER_TYPES /** * 订单状态枚举 * @readonly */ export const ORDER_STATUS = Object.freeze({ /** 草稿 */ DRAFT: 0, /** 已提交/待审核 */ SUBMITTED: 1, /** 已确认/已审核 */ CONFIRMED: 2, /** 部分发货/已发货 */ PARTIAL_SHIPPED: 3, /** 已完成 */ COMPLETED: 4, /** 已取消 */ CANCELLED: 5 }) /** * 订单状态枚举(订单表单模块兼容性别名) * @readonly * @enum {number} */ export const OrderStatus = { /** 草稿 */ DRAFT: ORDER_STATUS.DRAFT, /** 待审核 */ PENDING: ORDER_STATUS.SUBMITTED, /** 已审核 */ APPROVED: ORDER_STATUS.CONFIRMED, /** 已发货 */ SHIPPED: ORDER_STATUS.PARTIAL_SHIPPED, /** 已完成 */ COMPLETED: ORDER_STATUS.COMPLETED, /** 已取消 */ CANCELLED: ORDER_STATUS.CANCELLED } /** * 订单明细状态枚举 * @readonly */ export const ORDER_ITEM_STATUS = Object.freeze({ /** 未确认 */ UNCONFIRMED: 0, /** 已确认 */ CONFIRMED: 1, /** 部分发货 */ PARTIAL_SHIPPED: 2, /** 已完成 */ COMPLETED: 3 }) /** * 物料明细状态枚举(订单表单模块兼容性别名) * @description 对应数据库item_status字段:0未确认 1已确认 2部分发货 3已完成 * @readonly */ export const MaterialDetailStatus = ORDER_ITEM_STATUS /** * 物料明细数据来源枚举 * @readonly * @enum {string} */ export const MaterialDetailDataSource = { /** 远程加载的数据(从订单获取) */ REMOTE: 'REMOTE', /** 用户导入的数据 */ IMPORTED: 'IMPORTED' } /** * 订单类型配置映射 * @readonly * @type {Record} */ export const ORDER_TYPE_CONFIG = { [ORDER_TYPES.UNKNOWN]: { label: '未知类型', type: 'info', color: '#909399' }, [ORDER_TYPES.NORMAL]: { label: '普通订单', type: 'primary', color: '#409EFF' } } /** * 订单状态配置映射 * @readonly * @type {Record} */ export const ORDER_STATUS_CONFIG = { [ORDER_STATUS.DRAFT]: { label: '草稿', type: 'info', color: '#909399' }, [ORDER_STATUS.SUBMITTED]: { label: '待审核', type: 'warning', color: '#E6A23C' }, [ORDER_STATUS.CONFIRMED]: { label: '已审核', type: 'primary', color: '#409EFF' }, [ORDER_STATUS.PARTIAL_SHIPPED]: { label: '已发货', type: 'warning', color: '#E6A23C' }, [ORDER_STATUS.COMPLETED]: { label: '已完成', type: 'success', color: '#67C23A' }, [ORDER_STATUS.CANCELLED]: { label: '已取消', type: 'danger', color: '#F56C6C' } } /** * 订单明细状态配置映射 * @readonly * @type {Record} */ export const ORDER_ITEM_STATUS_CONFIG = { [ORDER_ITEM_STATUS.UNCONFIRMED]: { label: '未确认', type: 'warning', color: '#E6A23C' }, [ORDER_ITEM_STATUS.CONFIRMED]: { label: '已确认', type: 'primary', color: '#409EFF' }, [ORDER_ITEM_STATUS.PARTIAL_SHIPPED]: { label: '部分发货', type: 'warning', color: '#E6A23C' }, [ORDER_ITEM_STATUS.COMPLETED]: { label: '已完成', type: 'success', color: '#67C23A' } } /** * 订单类型选项数据 * @readonly * @type {Array<{readonly label: string, readonly value: typeof ORDER_TYPES[keyof typeof ORDER_TYPES]}>} */ export const ORDER_TYPE_OPTIONS = [ { label: '未知类型', value: ORDER_TYPES.UNKNOWN }, { label: '普通订单', value: ORDER_TYPES.NORMAL } ] /** * 订单状态选项数据 * @readonly * @type {Array<{readonly label: string, readonly value:typeof ORDER_STATUS[keyof typeof ORDER_STATUS]}>} */ export const ORDER_STATUS_OPTIONS = [ { label: '草稿', value: ORDER_STATUS.DRAFT }, { label: '已提交', value: ORDER_STATUS.SUBMITTED }, { label: '已确认', value: ORDER_STATUS.CONFIRMED }, { label: '部分发货', value: ORDER_STATUS.PARTIAL_SHIPPED }, { label: '已完成', value: ORDER_STATUS.COMPLETED }, { label: '已取消', value: ORDER_STATUS.CANCELLED } ] /** * 订单明细状态选项数据 * @readonly * @type {ReadonlyArray<{readonly label: string, readonly value: typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]}>} */ export const ORDER_ITEM_STATUS_OPTIONS = [ { label: '未确认', value: ORDER_ITEM_STATUS.UNCONFIRMED }, { label: '已确认', value: ORDER_ITEM_STATUS.CONFIRMED }, { label: '部分发货', value: ORDER_ITEM_STATUS.PARTIAL_SHIPPED }, { label: '已完成', value: ORDER_ITEM_STATUS.COMPLETED } ] /** * 物料明细状态选项列表(订单表单模块兼容性别名) * @readonly * @type {ReadonlyArray<{readonly label: string, readonly value: number}>} */ export const MATERIAL_DETAIL_STATUS_OPTIONS = ORDER_ITEM_STATUS_OPTIONS /** * 默认分页配置 * @readonly * @type {{readonly current: number, readonly pageSize: number, readonly total: number, readonly showSizeChanger: boolean, readonly showQuickJumper: boolean, readonly showTotal: (total: number, range: [number, number]) => string}} */ export const DEFAULT_PAGINATION_CONFIG = { current: 1, pageSize: 10, total: 0, showSizeChanger: true, showQuickJumper: true, showTotal: (total, range) => `第 ${range[0]}-${range[1]} 条/共 ${total} 条` } // ==================== 工具函数 ==================== /** * 获取订单类型标签 * @param {1} orderType - 订单类型值 * @returns {'普通订单' | '未知类型'} 订单类型标签 */ export function getOrderTypeLabel(orderType) { const config = ORDER_TYPE_CONFIG[orderType] return config ? config.label : '未知类型' } /** * 获取订单类型Element UI标签类型 * @param {typeof ORDER_TYPES[keyof typeof ORDER_TYPES]} orderType - 订单类型值 * @returns {string} Element UI标签类型 */ export function getOrderTypeTagType(orderType) { const config = ORDER_TYPE_CONFIG[orderType] return config ? config.type : 'info' } /** * 获取订单类型颜色 * @param {typeof ORDER_TYPES[keyof typeof ORDER_TYPES]} orderType - 订单类型值 * @returns {string} 十六进制颜色值 */ export function getOrderTypeColor(orderType) { const config = ORDER_TYPE_CONFIG[orderType] return config ? config.color : '#909399' } /** * 获取订单状态标签 * @param {typeof ORDER_STATUS[keyof typeof ORDER_STATUS]} status - 订单状态值 * @returns {string} 订单状态标签 */ export function getOrderStatusLabel(status) { const config = ORDER_STATUS_CONFIG[status] return config ? config.label : '未知状态' } /** * 获取订单状态Element UI标签类型 * @param {typeof ORDER_STATUS[keyof typeof ORDER_STATUS]} status - 订单状态值 * @returns {string} Element UI标签类型 */ export function getOrderStatusTagType(status) { const config = ORDER_STATUS_CONFIG[status] return config ? config.type : 'info' } /** * 获取订单状态颜色 * @param {typeof ORDER_STATUS[keyof typeof ORDER_STATUS]} status - 订单状态值 * @returns {string} 十六进制颜色值 */ export function getOrderStatusColor(status) { const config = ORDER_STATUS_CONFIG[status] return config ? config.color : '#909399' } /** * 获取订单明细状态标签 * @param {typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]} itemStatus - 订单明细状态值 * @returns {string} 订单明细状态标签 */ export function getOrderItemStatusLabel(itemStatus) { const config = ORDER_ITEM_STATUS_CONFIG[itemStatus] return config ? config.label : '未知状态' } /** * 获取订单明细状态Element UI标签类型 * @param {typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]} itemStatus - 订单明细状态值 * @returns {string} Element UI标签类型 */ export function getOrderItemStatusTagType(itemStatus) { const config = ORDER_ITEM_STATUS_CONFIG[itemStatus] return config ? config.type : 'info' } /** * 获取订单明细状态颜色 * @param {typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]} itemStatus - 订单明细状态值 * @returns {string} 十六进制颜色值 */ export function getOrderItemStatusColor(itemStatus) { const config = ORDER_ITEM_STATUS_CONFIG[itemStatus] return config ? config.color : '#909399' } /** * 检查订单是否可以编辑 * @param {typeof ORDER_STATUS[keyof typeof ORDER_STATUS]} status - 订单状态值 * @returns {boolean} 是否可以编辑 */ export function isOrderEditable(status) { return status === ORDER_STATUS.DRAFT || status === ORDER_STATUS.SUBMITTED } /** * 检查订单是否可以取消 * @param {typeof ORDER_STATUS[keyof typeof ORDER_STATUS]} status - 订单状态值 * @returns {boolean} 是否可以取消 */ export function isOrderCancellable(status) { return status !== ORDER_STATUS.COMPLETED && status !== ORDER_STATUS.CANCELLED } /** * 检查订单明细是否可以编辑 * @param {typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]} itemStatus - 订单明细状态值 * @returns {boolean} 是否可以编辑 */ export function isOrderItemEditable(itemStatus) { return itemStatus === ORDER_ITEM_STATUS.UNCONFIRMED || itemStatus === ORDER_ITEM_STATUS.CONFIRMED } /** * 检查订单明细是否可以取消 * @param {typeof ORDER_ITEM_STATUS[keyof typeof ORDER_ITEM_STATUS]} itemStatus - 订单明细状态值 * @returns {boolean} 是否可以取消 */ export function isOrderItemCancellable(itemStatus) { return itemStatus !== ORDER_ITEM_STATUS.COMPLETED } // ==================== 发票相关常量 ==================== /** * 发票类型枚举 * @readonly * @enum {string} */ export const INVOICE_TYPES = { /** 普通发票 */ NORMAL: 'NORMAL', /** 专用发票 */ SPECIAL: 'SPECIAL' } /** * 发票状态枚举 * @readonly * @enum {number} */ export const INVOICE_STATUS = { /** 待开票 */ PENDING: 0, /** 已开票 */ INVOICED: 1, /** 已红冲 */ RED_FLUSHED: 2, /** 已作废 */ VOIDED: 3 } /** * 发票类型标签映射 * @readonly * @type {Record} */ export const INVOICE_TYPE_LABELS = { [INVOICE_TYPES.NORMAL]: '普通发票', [INVOICE_TYPES.SPECIAL]: '专用发票' } /** * 发票状态标签映射 * @readonly * @type {Record} */ export const INVOICE_STATUS_LABELS = { [INVOICE_STATUS.PENDING]: '待开票', [INVOICE_STATUS.INVOICED]: '已开票', [INVOICE_STATUS.RED_FLUSHED]: '已红冲', [INVOICE_STATUS.VOIDED]: '已作废' } /** * 发票类型标签类型映射(用于Element UI标签样式) * @readonly * @type {Record} */ export const INVOICE_TYPE_TAG_TYPES = { [INVOICE_TYPES.NORMAL]: 'info', [INVOICE_TYPES.SPECIAL]: 'success' } /** * 发票状态标签类型映射(用于Element UI标签样式) * @readonly * @type {Record} */ export const INVOICE_STATUS_TAG_TYPES = { [INVOICE_STATUS.PENDING]: 'warning', [INVOICE_STATUS.INVOICED]: 'success', [INVOICE_STATUS.RED_FLUSHED]: 'danger', [INVOICE_STATUS.VOIDED]: 'info' } /** * 发票类型选项数组(用于下拉选择) * @readonly * @type {Array<{label: string, value: string}>} */ export const INVOICE_TYPE_OPTIONS = [ { label: INVOICE_TYPE_LABELS[INVOICE_TYPES.NORMAL], value: INVOICE_TYPES.NORMAL }, { label: INVOICE_TYPE_LABELS[INVOICE_TYPES.SPECIAL], value: INVOICE_TYPES.SPECIAL } ] /** * 发票状态选项数组(用于下拉选择) * @readonly * @type {Array<{label: string, value: number}>} */ export const INVOICE_STATUS_OPTIONS = [ { label: INVOICE_STATUS_LABELS[INVOICE_STATUS.PENDING], value: INVOICE_STATUS.PENDING }, { label: INVOICE_STATUS_LABELS[INVOICE_STATUS.INVOICED], value: INVOICE_STATUS.INVOICED }, { label: INVOICE_STATUS_LABELS[INVOICE_STATUS.RED_FLUSHED], value: INVOICE_STATUS.RED_FLUSHED }, { label: INVOICE_STATUS_LABELS[INVOICE_STATUS.VOIDED], value: INVOICE_STATUS.VOIDED } ] /** * 获取发票类型标签文本 * @param {string} type - 发票类型 * @returns {string} 标签文本 */ export const getInvoiceTypeLabel = (type) => { return INVOICE_TYPE_LABELS[type] || '未知类型' } /** * 获取发票类型标签样式 * @param {string} type - 发票类型 * @returns {string} 标签样式类型 */ export const getInvoiceTypeTagType = (type) => { return INVOICE_TYPE_TAG_TYPES[type] || 'info' } /** * 获取发票状态标签文本 * @param {number} status - 发票状态 * @returns {string} 标签文本 */ export const getInvoiceStatusLabel = (status) => { return INVOICE_STATUS_LABELS[status] || '未知状态' } /** * 获取发票状态标签样式 * @param {number} status - 发票状态 * @returns {string} 标签样式类型 */ export const getInvoiceStatusTagType = (status) => { return INVOICE_STATUS_TAG_TYPES[status] || 'info' } /** * 验证发票类型是否有效 * @param {string} type - 发票类型 * @returns {boolean} 是否有效 */ export const isValidInvoiceType = (type) => { return Object.values(INVOICE_TYPES).includes(type) } /** * 验证发票状态是否有效 * @param {number} status - 发票状态 * @returns {boolean} 是否有效 */ export const isValidInvoiceStatus = (status) => { return Object.values(INVOICE_STATUS).includes(status) }