Quellcode durchsuchen

refactor(订单表单): 统一物料分类字段名并更新API调用

yz vor 1 Monat
Ursprung
Commit
ba9c2b81d7

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

@@ -83,7 +83,7 @@ export function getMaterialDetailOption(isEditMode = false) {
       },
       {
         label: '主物料分类',
-        prop: 'mainItemCategoryName',
+        prop: 'category',
         width: 120
       },
       {
@@ -348,7 +348,7 @@ export const DEFAULT_FORM_DATA = {
   itemCode: '',
   itemName: '',
   specification: '',
-  mainCategoryName: '',
+  category: '',
   warehouseName: '',
   availableQuantity: 0,
   orderQuantity: 0,

+ 41 - 30
src/components/order-form/material-detail-table.vue

@@ -191,7 +191,7 @@ import {
   MaterialDetailDataSource
 } from '@/constants/order'
 import { MATERIAL_DETAIL_EVENTS, DIALOG_EVENTS } from './events'
-import { getItemList } from '@/api/common'
+import { getMaterialFullList } from '@/api/order/sales-order'
 import {
   formatAmount,
   formatFloatNumber,
@@ -525,13 +525,13 @@ export default {
       if (this.searchTimer) {
         clearTimeout(this.searchTimer)
       }
-      
+
       // 如果查询为空,清空选项
       if (!query) {
         this.materialOptions = []
         return
       }
-      
+
       // 设置防抖定时器
       this.searchTimer = setTimeout(async () => {
         await this.searchMaterials(query)
@@ -548,26 +548,31 @@ export default {
     async searchMaterials(keyword) {
       try {
         this.materialLoading = true
-        
-        const response = await getItemList(1, 20, {
+
+        const response = await getMaterialFullList({
           itemName: keyword
         })
-        
-        if (response?.data?.success && response.data.data?.records) {
+
+        if (response?.data?.success && response.data.data) {
           // 转换API返回的字段名称为组件所需的格式
-          this.materialOptions = response.data.data.records.map(item => ({
-            id: item.Item_ID || item.id,
+          // getMaterialFullList返回的是SalesOrderItemListRecord[]数组
+          this.materialOptions = response.data.data.map(item => ({
+            id: item.id,
             itemId: item.Item_ID,
-            itemCode: item.Item_Code || item.itemCode,
-            itemName: item.Item_Name || item.itemName,
-            specs: item.Item_PECS || item.specs,
-            unit: item.Item_Unit || item.unit,
-            category: item.Item_Category || item.category,
-            brand: item.Item_Brand || item.brand,
-            model: item.Item_Model || item.model,
-            description: item.Item_Description || item.description,
-            unitPrice: item.Item_UnitPrice || item.unitPrice || '0',
-            remark: item.Item_Remark || item.remark || '',
+            itemCode: item.Item_Code,
+            itemName: item.Item_Name,
+            specs: item.Item_PECS || '',
+            unit: item.InventoryInfo_Name,
+            category: item.MainItemCategory_Name,
+            categoryId: item.MainItemCategory_ID,
+            categoryCode: item.MainItemCategory_Code,
+            description: item.Item_Description || '',
+            warehouseId: item.Warehouse_ID,
+            warehouseCode: item.Warehouse_Code,
+            warehouseName: item.Warehouse_Name,
+            orgId: item.ORG_ID,
+            orgCode: item.ORG_CODE,
+            orgName: item.ORG_NAME,
             // 保留原始数据以备后用
             _raw: item
           }))
@@ -594,27 +599,27 @@ export default {
         this.$message.warning('请先选择要导入的物料')
         return
       }
-      
+
       // 查找选中的物料数据
       const selectedMaterial = this.materialOptions.find(item => item.id === this.selectedMaterialId)
       if (!selectedMaterial) {
         this.$message.warning('未找到选中的物料数据')
         return
       }
-      
+
       // 检查是否已存在相同物料
       const existingMaterial = this.materialDetails.find(item => item.itemCode === selectedMaterial.itemCode)
       if (existingMaterial) {
         this.$message.warning(`物料 ${selectedMaterial.itemName} 已存在,请勿重复导入`)
         return
       }
-      
+
       // 构造物料明细数据
       const materialDetail = this.prepareMaterialDetailData(selectedMaterial)
-      
+
       // 触发导入事件
       this.$emit(MATERIAL_DETAIL_EVENTS.MATERIAL_IMPORT, [materialDetail])
-      
+
       // 清空选择
       this.selectedMaterialId = null
       this.materialOptions = []
@@ -623,24 +628,30 @@ export default {
     /**
      * 准备物料明细数据
      * @description 将选中的物料数据转换为物料明细表所需的格式
-     * @param {ItemRecord} material - 物料数据
+     * @param {import('@/api/types/order').SalesOrderItemListRecord} material - 物料数据(来自getMaterialFullList API)
      * @returns {MaterialDetailRecord} 格式化后的物料明细数据
      * @private
      */
     prepareMaterialDetailData(material) {
       return {
         id: this.generateUniqueId(),
-        itemId: material.itemId || material.id,
+        itemId: material.itemId,
         itemCode: material.itemCode,
         itemName: material.itemName,
         specs: material.specs || '',
         specification: material.specs || '',
         unit: material.unit || '',
         category: material.category || '',
-        brand: material.brand || '',
-        model: material.model || '',
+        categoryId: material.categoryId,
+        categoryCode: material.categoryCode,
         description: material.description || '',
-        unitPrice: parseFloat(material.unitPrice) || 0,
+        warehouseId: material.warehouseId,
+        warehouseCode: material.warehouseCode,
+        warehouseName: material.warehouseName,
+        orgId: material.orgId,
+        orgCode: material.orgCode,
+        orgName: material.orgName,
+        unitPrice: 0, // 默认单价为0,需要用户手动输入
         orderQuantity: 1,
         confirmQuantity: 1,
         availableQuantity: 0,
@@ -650,7 +661,7 @@ export default {
         itemStatus: MaterialDetailStatus.UNCONFIRMED,
         dataSource: MaterialDetailDataSource.REMOTE,
         isDeletable: true,
-        remark: material.remark || ''
+        remark: ''
       }
     },
 

+ 30 - 28
src/components/order-form/material-import-dialog.vue

@@ -145,7 +145,7 @@
 <script>
 import { getMaterialImportOption, DEFAULT_QUERY_PARAMS } from './material-detail-option'
 import { MaterialDetailStatus } from '@/constants/order'
-import { getItemList } from '@/api/common'
+import { getSalesOrderItemList } from '@/api/order/sales-order'
 import { generateUniqueId } from './utils'
 import {
   formatFloatNumber,
@@ -359,42 +359,44 @@ export default {
           size: this.page.pageSize
         }
 
-        const response = await getItemList(params.current, params.size, {
+        const response = await getSalesOrderItemList({
+          current: params.current,
+          size: params.size,
           itemName: params.itemName,
           itemCode: params.itemCode,
-          specification: params.specification
+          specs: params.specification
         })
 
-        if (response && response.data && response.data.data) {
-          const rawRecords = response.data.data.records || []
+        if (response && response.data && response.data.records) {
+          const rawRecords = response.data.records || []
           // 转换API返回的字段名称为表格所需的格式
           this.materialList = rawRecords.map(item => ({
-            id: item.Item_ID || item.id,
-            itemId: item.Item_ID,
-            itemCode: item.Item_Code,
-            itemName: item.Item_Name,
-            specification: item.Item_PECS || item.specification,
-            itemDescription: item.Item_Description,
-            mainCategoryId: item.MainItemCategory_ID,
-            mainCategoryName: item.MainItemCategory_Name,
-            mainCategoryCode: item.MainItemCategory_Code,
-            inventoryInfoId: item.InventoryInfo_ID,
-            inventoryInfoName: item.InventoryInfo_Name,
-            warehouseId: item.Warehouse_ID,
-            warehouseName: item.Warehouse_Name,
-            warehouseCode: item.Warehouse_Code,
-            saleserId: item.Saleser_ID,
-            saleserName: item.Saleser_NAME,
-            shipmentWarehouseId: item.ShipmentWarehouse_ID,
-            shipmentWarehouseName: item.ShipmentWarehouse_Name,
-            orgId: item.ORG_ID,
-            orgName: item.ORG_NAME,
-            createTime: item.createTime,
-            availableQuantity: item.availableQuantity || 0,
+            id: item.id,
+            itemId: item.itemId,
+            itemCode: item.itemCode,
+            itemName: item.itemName,
+            specification: item.specs || '',
+            itemDescription: item.description || '',
+            mainCategoryId: item.categoryId,
+            mainCategoryName: item.category,
+            mainCategoryCode: item.categoryCode,
+            inventoryInfoId: null,
+            inventoryInfoName: item.unit || '',
+            warehouseId: item.warehouseId,
+            warehouseName: item.warehouseName,
+            warehouseCode: item.warehouseCode,
+            saleserId: null,
+            saleserName: '',
+            shipmentWarehouseId: item.warehouseId,
+            shipmentWarehouseName: item.warehouseName,
+            orgId: item.orgId,
+            orgName: item.orgName,
+            createTime: item.createTime || '',
+            availableQuantity: 0,
             // 保留原始数据以备后用
             _raw: item
           }))
-          this.page.total = response.data.data.total || 0
+          this.page.total = response.data.total || 0
         } else {
           this.materialList = []
           this.page.total = 0