Explorar o código

feat: 更新物料明细状态枚举以匹配数据库字段

- 将MaterialDetailStatus枚举值从字符串改为数字类型
- 更新状态值:UNCONFIRMED(0), CONFIRMED(1), PARTIAL_SHIPPED(2), COMPLETED(3)
- 与数据库item_status字段完全对应:0未确认 1已确认 2部分发货 3已完成
- 确保导入物料默认状态为0(未确认)
- 完善TypeScript类型定义和JSDoc注释
- 提升代码类型安全性和可维护性
yz hai 1 mes
pai
achega
76ed906488

+ 14 - 10
src/components/order-form/constants.js

@@ -59,16 +59,19 @@ export const MaterialDetailDataSource = {
 
 /**
  * 物料明细状态枚举
+ * @description 对应数据库item_status字段:0未确认 1已确认 2部分发货 3已完成
  * @readonly
- * @enum {string}
+ * @enum {0|1|2|3}
  */
 export const MaterialDetailStatus = {
-  /** 待处理 */
-  PENDING: '0',
+  /** 未确认 */
+  UNCONFIRMED: 0,
   /** 已确认 */
-  CONFIRMED: '1',
-  /** 已取消 */
-  CANCELLED: '2'
+  CONFIRMED: 1,
+  /** 部分发货 */
+  PARTIAL_SHIPPED: 2,
+  /** 已完成 */
+  COMPLETED: 3
 }
 
 /**
@@ -107,12 +110,13 @@ export const DEFAULT_PAGINATION_CONFIG = {
 
 /**
  * 物料明细状态选项列表
- * @type {ReadonlyArray<{readonly label: string, readonly value: string}>}
+ * @type {ReadonlyArray<{readonly label: string, readonly value: 0|1|2|3}>}
  */
 export const MATERIAL_DETAIL_STATUS_OPTIONS = [
-  { label: '待处理', value: MaterialDetailStatus.PENDING },
+  { label: '未确认', value: MaterialDetailStatus.UNCONFIRMED },
   { label: '已确认', value: MaterialDetailStatus.CONFIRMED },
-  { label: '已取消', value: MaterialDetailStatus.CANCELLED }
+  { label: '部分发货', value: MaterialDetailStatus.PARTIAL_SHIPPED },
+  { label: '已完成', value: MaterialDetailStatus.COMPLETED }
 ]
 
 // 导出明细状态工具函数供其他组件使用
@@ -141,7 +145,7 @@ export {
  * @property {number} taxAmount - 税额(2位小数)
  * @property {number} totalAmount - 总金额(2位小数)
  * @property {string} remark - 备注
- * @property {keyof typeof MaterialDetailStatus} status - 状态
+ * @property {0|1|2|3} status - 明细状态(0未确认 1已确认 2部分发货 3已完成)
  * @property {keyof typeof MaterialDetailDataSource} dataSource - 数据来源 (REMOTE|IMPORTED)
  * @property {boolean} isDeletable - 是否可删除
  * @property {string} mainCategoryId - 主物料分类ID

+ 1 - 1
src/components/order-form/material-detail-option.js

@@ -404,7 +404,7 @@ export const DEFAULT_FORM_DATA = {
   taxRate: 0,
   taxAmount: 0,
   totalAmount: 0,
-  status: '0', // MaterialDetailStatus.PENDING
+  status: MaterialDetailStatus.UNCONFIRMED, // 默认状态:0未确认
   dataSource: MaterialDetailDataSource.IMPORTED,
   isDeletable: true
 }

+ 7 - 3
src/components/order-form/material-import-dialog.vue

@@ -484,6 +484,9 @@ export default {
 
     /**
      * 处理确认导入
+     * @description 将选中的物料转换为物料明细格式并触发导入事件
+     * @returns {Promise<void>} 无返回值的Promise
+     * @emits {import('./types').MaterialDetailRecord[]} confirm - 确认导入事件,传递转换后的物料明细数组
      */
     async handleConfirm() {
       if (this.selectedMaterials.length === 0) {
@@ -496,8 +499,9 @@ export default {
 
         // 转换为物料明细格式,格式化数字字段
         /** @type {TransformedMaterialItem[]} */
-        const materIalList = this.selectedMaterials
-        const importedMaterials = materIalList.map((material) => {
+        const materialList = this.selectedMaterials
+        /** @type {import('./types').MaterialDetailRecord[]} */
+        const importedMaterials = materialList.map((material) => {
           // 验证和格式化可用数量
           const availableQuantityValidation = validateNumber(material.availableQuantity)
 
@@ -518,7 +522,7 @@ export default {
             taxRate: 0, // 默认税率为0,2位浮点型
             taxAmount: 0, // 默认税额为0,2位小数
             totalAmount: 0, // 默认总金额为0,2位小数
-            status: MaterialDetailStatus.PENDING,
+            status: MaterialDetailStatus.UNCONFIRMED,
             createTime: new Date().toISOString(),
             updateTime: new Date().toISOString()
           }

+ 8 - 5
src/components/order-form/types.d.ts

@@ -389,14 +389,17 @@ export interface OrderFormComponent extends OrderFormProps, OrderFormData, Order
 
 /**
  * 物料明细状态枚举
+ * @description 对应数据库item_status字段:0未确认 1已确认 2部分发货 3已完成
  */
 export enum MaterialDetailStatus {
-  /** 确认 */
-  PENDING = '0',
+  /** 确认 */
+  UNCONFIRMED = 0,
   /** 已确认 */
-  CONFIRMED = '1',
-  /** 已取消 */
-  CANCELLED = '2'
+  CONFIRMED = 1,
+  /** 部分发货 */
+  PARTIAL_SHIPPED = 2,
+  /** 已完成 */
+  COMPLETED = 3
 }
 
 /**