refactor(wms): 优化库存详情页钢材品类匹配逻辑

- 调整镀锌管材匹配规则,支持更多镀锌相关品类
- 新增仓库特定品类匹配配置,不同仓库使用不同的品类优先级
- 扩展品质等级匹配逻辑,支持以字母开头和特定等级标识
- 修改数据获取方式,按仓库分别请求并去重合并数据
- 优化钢材品类匹配算法,按仓库限制的品类范围进行匹配
- 更新数据加载逻辑,使用Promise.all并行请求提升性能
This commit is contained in:
jhd
2026-07-07 09:42:15 +08:00
parent ab8dfb86b2
commit ad6eef9543

View File

@@ -46,13 +46,22 @@ const CATEGORIES = [
{ key: '冷硬钢卷', label: '冷硬钢卷', match: ['冷硬'] }, { key: '冷硬钢卷', label: '冷硬钢卷', match: ['冷硬'] },
{ key: '冷轧钢卷', label: '冷轧钢卷', match: ['冷轧'] }, { key: '冷轧钢卷', label: '冷轧钢卷', match: ['冷轧'] },
{ key: '镀锌钢卷', label: '镀锌钢卷', match: ['镀锌分剪卷', '镀锌卷', '镀锌'] }, { key: '镀锌钢卷', label: '镀锌钢卷', match: ['镀锌分剪卷', '镀锌卷', '镀锌'] },
{ key: '镀锌管材', label: '镀锌管材', match: ['镀锌管'] }, { key: '镀锌管材', label: '镀锌管材', match: ['镀锌卷', '镀锌分剪卷', '镀锌管'] },
{ key: '花纹板', label: '花纹板', match: ['花纹板'] }, { key: '花纹板', label: '花纹板', match: ['花纹板'] },
{ key: '镀铬', label: '镀铬', match: ['镀铬'] }, { key: '镀铬', label: '镀铬', match: ['镀铬'] },
] ]
// 匹配优先级:镀锌管材必须在镀锌钢卷之前检查 // 匹配优先级:镀锌管材必须在镀锌钢卷之前检查
const MATCH_PRIORITY = ['镀锌管材', '冷硬钢卷', '冷轧钢卷', '镀锌钢卷', '花纹板', '镀铬'] const MATCH_PRIORITY = ['镀锌管材', '冷硬钢卷', '冷轧钢卷', '镀锌钢卷', '花纹板', '镀铬']
// 仓库 → 允许匹配的品类(按优先级排序),未列出的仓库使用 MATCH_PRIORITY
const WAREHOUSE_CATS = {
'1988150099140866050': ['冷硬钢卷'],
'1988150915591499777': ['冷轧钢卷', '花纹板'],
'1988150323162836993': ['镀锌钢卷', '镀锌管材'],
'1988150487185289217': ['镀锌管材'],
'1988151132361519105': ['镀铬'],
}
/** /**
* 品质等级 → 分组映射 * 品质等级 → 分组映射
* A/B → 'AB', C/D/O → 'CDO', 其他 → null * A/B → 'AB', C/D/O → 'CDO', 其他 → null
@@ -60,8 +69,8 @@ const MATCH_PRIORITY = ['镀锌管材', '冷硬钢卷', '冷轧钢卷', '镀锌
function getQualityGroup(status) { function getQualityGroup(status) {
if (!status) return null if (!status) return null
const s = String(status).toUpperCase().trim() const s = String(status).toUpperCase().trim()
if (['A', 'B'].includes(s)) return 'AB' if (s.startsWith('A') || s === 'B' || s === 'B级') return 'AB'
if (['C', 'D', 'O'].includes(s)) return 'CDO' if (s.startsWith('C') || s.startsWith('D') || s.startsWith('O')) return 'CDO'
return null return null
} }
@@ -93,9 +102,10 @@ export default {
let unmatchedCount = 0 let unmatchedCount = 0
this.rawList.forEach(item => { this.rawList.forEach(item => {
// 匹配钢材品类 // 匹配钢材品类(按仓库限制品类范围)
const catMap = new Map(CATEGORIES.map(c => [c.key, c])) const catMap = new Map(CATEGORIES.map(c => [c.key, c]))
const cat = MATCH_PRIORITY.map(k => catMap.get(k)).find( const allowed = WAREHOUSE_CATS[item.warehouseId] || MATCH_PRIORITY
const cat = allowed.map(k => catMap.get(k)).find(
c => item.itemName && c.match.some(m => item.itemName.includes(m)) c => item.itemName && c.match.some(m => item.itemName.includes(m))
) )
if (!cat) { unmatchedCount++; return } if (!cat) { unmatchedCount++; return }
@@ -239,14 +249,23 @@ export default {
this.loading = true this.loading = true
this.rawList = [] this.rawList = []
listCoilWithIds({ Promise.all([
selectType: 'product', // 酸连轧成品库 → 冷硬钢卷
status: 0, listCoilWithIds({ warehouseIds: '1988150099140866050', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
dataType: 1, // 拉矫成品库 → 冷轧钢卷 / 花纹板(按 itemName 区分)
pageSize: 99999, listCoilWithIds({ warehouseIds: '1988150915591499777', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
pageNum: 1, // 镀锌成品库 → 镀锌钢卷 / 镀锌管材(按 itemName 区分)
}).then(res => { listCoilWithIds({ warehouseIds: '1988150323162836993', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
this.rawList = res.rows || [] // 镀锌纵剪分条原料库 → 镀锌管材raw_material 镀锌卷)
listCoilWithIds({ warehouseIds: '1988150487185289217', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
// 镀铬成品库 → 镀铬
listCoilWithIds({ warehouseIds: '1988151132361519105', status: 0, dataType: 1, pageSize: 99999, pageNum: 1 }),
]).then(results => {
const map = new Map()
results.forEach(res => {
;(res.rows || []).forEach(item => map.set(item.coilId, item))
})
this.rawList = Array.from(map.values())
this.loading = false this.loading = false
}).catch(() => { }).catch(() => {
this.loading = false this.loading = false