chenlu
2025-10-22 a042f1dd2b28e358a60e3cda6966e08d4682c637
产品bom添加点击编辑显示已保存的内容、点击保存关闭弹窗
6个文件已修改
87 ■■■■■ 已修改文件
north-glass-erp/northglass-erp/src/views/sd/bom/ProductBOM.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/northglass-erp/src/views/sd/bom/ProductBomAdd.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/controller/sd/BomDataController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/mapper/sd/BomDataMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/java/com/example/erp/service/sd/BomDataService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
north-glass-erp/src/main/resources/mapper/sd/BomDataMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>