|
@@ -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: ''
|
|
|
}
|
|
|
},
|
|
|
|