import { listCategory } from '@/api/wms/category'; import { listProductWithBom } from '@/api/wms/product'; import { listRawMaterialWithBom } from '@/api/wms/rawMaterial'; import { listBomItem } from '@/api/wms/bomItem'; // 目前存在一个问题,当新增或删除,修改分类、产品、物料时,需要刷新整个页面,才能看到最新的数据 // 需要优化,当新增或删除,修改分类、产品、物料时,只刷新相关的数据,而不是整个页面,修改和删除可以解决,新增由于没有返回id,所以需要重新获取整个列表 const state = { categoryList: [], productMap: {}, rawMaterialMap: {}, productList: [], rawMaterialList: [], bomMap: {} }; const mutations = { SET_CATEGORY_LIST(state, list) { state.categoryList = list; }, SET_PRODUCT_MAP(state, map) { state.productMap = map; }, SET_RAW_MATERIAL_MAP(state, map) { state.rawMaterialMap = map; }, SET_PRODUCT_LIST(state, list) { state.productList = list; }, SET_RAW_MATERIAL_LIST(state, list) { state.rawMaterialList = list; }, SET_BOM_MAP(state, map) { state.bomMap = map; } }; const actions = { getCategoryList({ state, commit }) { if (state.categoryList.length > 0) { return Promise.resolve(state.categoryList); } return listCategory({ pageNum: 1, pageSize: 10000 }).then(res => { commit('SET_CATEGORY_LIST', res.rows || []); return res.rows || []; }); }, getProductMap({ state, commit }) { if (Object.keys(state.productMap).length > 0) { return Promise.resolve(state.productMap); } return listProductWithBom({ pageNum: 1, pageSize: 10000 }).then(res => { const map = {}; res.rows.forEach(item => { map[item.productId] = item; }); commit('SET_PRODUCT_MAP', map); commit('SET_PRODUCT_LIST', res.rows || []); return map; }); }, getRawMaterialMap({ state, commit }) { if (Object.keys(state.rawMaterialMap).length > 0) { return Promise.resolve(state.rawMaterialMap); } return listRawMaterialWithBom({ pageNum: 1, pageSize: 10000 }).then(res => { const map = {}; res.rows.forEach(item => { map[item.rawMaterialId] = item; }); commit('SET_RAW_MATERIAL_MAP', map); commit('SET_RAW_MATERIAL_LIST', res.rows || []); return map; }); }, getBomMap({ state, commit }) { if (Object.keys(state.bomMap).length > 0) { return Promise.resolve(state.bomMap); } return listBomItem({ pageNum: 1, pageSize: 10000 }).then(res => { console.log('bomItem', res) const map = {}; res.rows.forEach(item => { if (!map[item.bomId]) { map[item.bomId] = []; } map[item.bomId].push(item); }); commit('SET_BOM_MAP', map); return map; }) } }; export function findItemWithBom(itemType, itemId) { if (!itemType || !itemId) { return null; } let map = {} if (itemType === 'product') { map = state.productMap; } else if (itemType === 'raw_material') { map = state.rawMaterialMap; } else { return null; } const item = map[itemId]; if (!item) { return null; } const bomId = item.bomId if (!bomId) { return null; } const bomItems = state.bomMap[bomId]; return { ...item, boms: bomItems || [], itemName: itemType === 'product' ? item.productName : item.rawMaterialName, itemType, }; } export default { namespaced: true, state, mutations, actions, };