north-glass-erp/northglass-erp/src/views/sd/bom/ProductBOM.vue
@@ -401,7 +401,9 @@ :close-on-press-escape="false" > <product-bom-add :productName="addData.productName" :produceId="addData.productId"/> :produceId="addData.productId" @closeDialog="dialogTableVisible = false" /> </el-dialog> </div> north-glass-erp/northglass-erp/src/views/sd/bom/ProductBomAdd.vue
@@ -6,7 +6,7 @@ import deepClone from "@/utils/deepClone" import { ElMessage, ElMessageBox} from "element-plus" const { t } = useI18n() const emit = defineEmits(['closeDialog']) let produceList = ref([]) let props = defineProps({ productName:null, @@ -15,10 +15,18 @@ gridDataByProduct: { type: Object, default: () => ({}) } }) const xGrid = ref() const xGridByProduct = ref() const activeProduct = ref('') // 当前选中的产品名 let materialType = ref(1) //关闭弹窗 const closeDialog = () => { emit('closeDialog') } const value = ref('') const options = [ @@ -153,7 +161,7 @@ getWorks() getDetails(); editProductBOM(); }else{ ElMessage.warning(res.msg) } @@ -238,7 +246,6 @@ const getDetails = () => { console.log() } //拆分每个产品 @@ -297,6 +304,7 @@ } const saveProductBOM = () => { gridOptionsByProduct.loading=true productList.value.forEach((name, index) => { const rows = gridDataMapByProduct[index] || [] const seq = index + 1 @@ -310,12 +318,36 @@ request.post(`/BomData/saveProductBOM`,gridDataMapByProduct).then((res) => { if(res.code==200){ ElMessage.success(t('basicData.msg.saveSuccess')) router.push({ path: '/main/bom/productBOM', query: { random: Math.random()} }) gridOptionsByProduct.loading=false emit('closeDialog') }}) } const editProductBOM = () => { request.post(`/BomData/editProductBOM/${props.produceId}`).then((res) => { if (res.code == 200 ) { // 初始化清空 productList.value.forEach((_, index) => { gridDataMapByProduct[index + 1] = [] }) // 遍历后端返回的数据 res.data.data.forEach(item => { const layer = item.product_layer - 1 // 例如 1, 2, 3 if (!gridDataMapByProduct[layer]) { gridDataMapByProduct[layer] = [] } // 转成普通对象(防止 Proxy 问题) const plainItem = JSON.parse(JSON.stringify(item)) gridDataMapByProduct[layer].push(plainItem) }) // 如果你想默认选中第一层 activeProductIndex.value = 0 xGridByProduct.value.loadData(gridDataMapByProduct[0]) } }) } </script> <template> north-glass-erp/src/main/java/com/example/erp/controller/sd/BomDataController.java
@@ -45,4 +45,10 @@ return Result.seccess(bomDataService.getBomDataProductSv(object)); } @ApiOperation("产品bom明细查询") @PostMapping("/editProductBOM/{produceId}") public Result editProductBOM(@PathVariable String produceId){ return Result.seccess(bomDataService.editProductBOMSv(produceId)); } } north-glass-erp/src/main/java/com/example/erp/mapper/sd/BomDataMapper.java
@@ -26,4 +26,6 @@ List<Map<String, String>> getOrderBomSumDataMp(String orderId); List<Map<String, String>> getOrderBomsumDataDatilsMp(String orderId); List<Map<String, String>> getEditProductBOMSv(String produceId); } north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java
@@ -103,4 +103,10 @@ map.put("data", list); return map; } public Map<String, Object> editProductBOMSv(String produceId) { Map<String, Object> map = new HashMap<>(); map.put("data", bomDataMapper.getEditProductBOMSv(produceId)); return map; } } north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml
@@ -65,4 +65,27 @@ GROUP BY bb.material_id ORDER BY bp.product_layer </select> <select id="getEditProductBOMSv"> SELECT bp.product_layer, bb.material_id, bb.material, JSON_UNQUOTE( JSON_EXTRACT( ms.json, '$.thickness' )) AS thickness, JSON_UNQUOTE( JSON_EXTRACT( ms.json, '$.width' )) AS width, JSON_UNQUOTE( JSON_EXTRACT( ms.json, '$.height' )) AS height, JSON_UNQUOTE( JSON_EXTRACT( ms.json, '$.unit' )) AS unit, bb.consume, bb.price FROM bom_product AS bp LEFT JOIN bom_base AS bb ON bb.id = bp.base_id LEFT JOIN mm.material_store AS ms ON ms.id = bb.material_id WHERE bp.product_id = #{produceId} </select> </mapper>