From f47bd7409609995c7eebb81a0b92b6e4aff0bdbf Mon Sep 17 00:00:00 2001
From: hdy <1105738590@qq.com>
Date: 星期二, 26 十一月 2024 16:16:48 +0800
Subject: [PATCH] BOM

---
 billion-ui/src/views/main/sc/opcConf/index.vue                                             |   68 +-
 billion-main/src/main/java/com/billion/main/bs/mapper/BsBomInfoMapper.java                 |   63 ++
 billion-ui/src/router/index.js                                                             |   14 
 billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java                       |   66 ++
 billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomInfoServiceImpl.java      |   98 +++
 billion-main/src/main/resources/mapper/bs/BsBomInfoMapper.xml                              |  114 +++
 billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java                  |   67 ++
 billion-main/src/main/resources/mapper/bs/BsBomChildInfoMapper.xml                         |  106 +++
 billion-main/src/main/java/com/billion/main/bs/service/IBsBomInfoService.java              |   63 ++
 billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java |   95 +++
 billion-ui/src/views/main/sc/collectionParamConf/index.vue                                 |    5 
 billion-main/src/main/java/com/billion/main/bs/mapper/BsBomChildInfoMapper.java            |   63 ++
 billion-ui/src/api/main/bs/bomChildInfo.js                                                 |   44 +
 billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java    |   98 +++
 billion-main/src/main/java/com/billion/main/bs/service/IBsBomChildInfoService.java         |   63 ++
 billion-ui/src/views/main/bs/bomInfo/index.vue                                             |  298 +++++++++
 billion-main/src/main/java/com/billion/main/bs/controller/BsBomInfoController.java         |   98 +++
 billion-ui/src/views/main/bs/bomChildInfo/index.vue                                        |  381 ++++++++++++
 billion-ui/src/api/main/bs/bomInfo.js                                                      |   44 +
 19 files changed, 1,812 insertions(+), 36 deletions(-)

diff --git a/billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java b/billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java
new file mode 100644
index 0000000..c7470bd
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/controller/BsBomChildInfoController.java
@@ -0,0 +1,98 @@
+package com.billion.main.bs.controller;
+
+import com.billion.common.annotation.Log;
+import com.billion.common.core.controller.BaseController;
+import com.billion.common.core.domain.AjaxResult;
+import com.billion.common.core.page.TableDataInfo;
+import com.billion.common.enums.BusinessType;
+import com.billion.common.utils.poi.ExcelUtil;
+import com.billion.main.bs.domain.BsBomChildInfo;
+import com.billion.main.bs.service.IBsBomChildInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鍩虹BOM瀛愪俊鎭疌ontroller
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@RestController
+@RequestMapping("/bs/bomChildInfo")
+public class BsBomChildInfoController extends BaseController
+{
+    @Autowired
+    private IBsBomChildInfoService bsBomChildInfoService;
+
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BsBomChildInfo bsBomChildInfo)
+    {
+        startPage();
+        List<BsBomChildInfo> list = bsBomChildInfoService.selectBsBomChildInfoList(bsBomChildInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鍩虹BOM瀛愪俊鎭垪琛�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:export')")
+    @Log(title = "鍩虹BOM瀛愪俊鎭�", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BsBomChildInfo bsBomChildInfo)
+    {
+        List<BsBomChildInfo> list = bsBomChildInfoService.selectBsBomChildInfoList(bsBomChildInfo);
+        ExcelUtil<BsBomChildInfo> util = new ExcelUtil<BsBomChildInfo>(BsBomChildInfo.class);
+        util.exportExcel(response, list, "鍩虹BOM瀛愪俊鎭暟鎹�");
+    }
+
+    /**
+     * 鑾峰彇鍩虹BOM瀛愪俊鎭缁嗕俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(bsBomChildInfoService.selectBsBomChildInfoById(id));
+    }
+
+    /**
+     * 鏂板鍩虹BOM瀛愪俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:add')")
+    @Log(title = "鍩虹BOM瀛愪俊鎭�", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BsBomChildInfo bsBomChildInfo)
+    {
+        return toAjax(bsBomChildInfoService.insertBsBomChildInfo(bsBomChildInfo));
+    }
+
+    /**
+     * 淇敼鍩虹BOM瀛愪俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:edit')")
+    @Log(title = "鍩虹BOM瀛愪俊鎭�", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BsBomChildInfo bsBomChildInfo)
+    {
+        return toAjax(bsBomChildInfoService.updateBsBomChildInfo(bsBomChildInfo));
+    }
+
+    /**
+     * 鍒犻櫎鍩虹BOM瀛愪俊鎭�
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomChildInfo:remove')")
+    @Log(title = "鍩虹BOM瀛愪俊鎭�", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(bsBomChildInfoService.deleteBsBomChildInfoByIds(ids));
+    }
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/controller/BsBomInfoController.java b/billion-main/src/main/java/com/billion/main/bs/controller/BsBomInfoController.java
new file mode 100644
index 0000000..2cd5e10
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/controller/BsBomInfoController.java
@@ -0,0 +1,98 @@
+package com.billion.main.bs.controller;
+
+import com.billion.common.annotation.Log;
+import com.billion.common.core.controller.BaseController;
+import com.billion.common.core.domain.AjaxResult;
+import com.billion.common.core.page.TableDataInfo;
+import com.billion.common.enums.BusinessType;
+import com.billion.common.utils.poi.ExcelUtil;
+import com.billion.main.bs.domain.BsBomInfo;
+import com.billion.main.bs.service.IBsBomInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 鍩虹BOMController
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@RestController
+@RequestMapping("/bs/bomInfo")
+public class BsBomInfoController extends BaseController
+{
+    @Autowired
+    private IBsBomInfoService bsBomInfoService;
+
+    /**
+     * 鏌ヨ鍩虹BOM鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(BsBomInfo bsBomInfo)
+    {
+        startPage();
+        List<BsBomInfo> list = bsBomInfoService.selectBsBomInfoList(bsBomInfo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭鍩虹BOM鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:export')")
+    @Log(title = "鍩虹BOM", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, BsBomInfo bsBomInfo)
+    {
+        List<BsBomInfo> list = bsBomInfoService.selectBsBomInfoList(bsBomInfo);
+        ExcelUtil<BsBomInfo> util = new ExcelUtil<BsBomInfo>(BsBomInfo.class);
+        util.exportExcel(response, list, "鍩虹BOM鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇鍩虹BOM璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(bsBomInfoService.selectBsBomInfoById(id));
+    }
+
+    /**
+     * 鏂板鍩虹BOM
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:add')")
+    @Log(title = "鍩虹BOM", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody BsBomInfo bsBomInfo)
+    {
+        return toAjax(bsBomInfoService.insertBsBomInfo(bsBomInfo));
+    }
+
+    /**
+     * 淇敼鍩虹BOM
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:edit')")
+    @Log(title = "鍩虹BOM", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody BsBomInfo bsBomInfo)
+    {
+        return toAjax(bsBomInfoService.updateBsBomInfo(bsBomInfo));
+    }
+
+    /**
+     * 鍒犻櫎鍩虹BOM
+     */
+    @PreAuthorize("@ss.hasPermi('bs:bomInfo:remove')")
+    @Log(title = "鍩虹BOM", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(bsBomInfoService.deleteBsBomInfoByIds(ids));
+    }
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java b/billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java
new file mode 100644
index 0000000..aec9639
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/domain/BsBomChildInfo.java
@@ -0,0 +1,67 @@
+package com.billion.main.bs.domain;
+
+import com.billion.common.annotation.Excel;
+import com.billion.main.common.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 鍩虹BOM瀛愪俊鎭璞� bs_bom_child_info
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@Data
+public class BsBomChildInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    private Long id;
+
+    /** 浜у搧缂栫爜 */
+    @Excel(name = "浜у搧缂栫爜")
+    private String productCode;
+
+    /** 浜у搧鍚嶇О */
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /** 宸ヤ綅缂栫爜 */
+    @Excel(name = "宸ヤ綅缂栫爜")
+    private String locationCode;
+
+    /** 宸ヤ綅鍚嶇О */
+    @Excel(name = "宸ヤ綅鍚嶇О")
+    private String locationName;
+
+    /** 鐗╂枡缂栫爜 */
+    @Excel(name = "鐗╂枡缂栫爜")
+    private String materialCode;
+
+    /** 鐗╂枡鍚嶇О */
+    @Excel(name = "鐗╂枡鍚嶇О")
+    private String materialName;
+
+    /** 鍗曡�� */
+    @Excel(name = "鍗曡��")
+    private BigDecimal costQty;
+
+    /** 鍗曚綅 */
+    @Excel(name = "鍗曚綅")
+    private String unit;
+
+    /** BOM缂栫爜 */
+    @Excel(name = "BOM缂栫爜")
+    private String bomCode;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    /** 閫昏緫鍒犻櫎 */
+    private String delFlag;
+
+
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java b/billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java
new file mode 100644
index 0000000..74bf867
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/domain/BsBomInfo.java
@@ -0,0 +1,66 @@
+package com.billion.main.bs.domain;
+
+import com.billion.common.annotation.Excel;
+import com.billion.main.common.BaseEntity;
+import lombok.Data;
+
+/**
+ * 鍩虹BOM瀵硅薄 bs_bom_info
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@Data
+public class BsBomInfo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭id */
+    private Long id;
+
+    /** BOM缂栫爜 */
+    @Excel(name = "BOM缂栫爜")
+    private String bomCode;
+
+    /** BOM鍚嶇О */
+    @Excel(name = "BOM鍚嶇О")
+    private String bomName;
+
+    /** 浜у搧缂栫爜 */
+    @Excel(name = "浜у搧缂栫爜")
+    private String productCode;
+
+    /** 浜у搧鍚嶇О */
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productName;
+
+    /** 鐗堟湰 */
+    @Excel(name = "鐗堟湰")
+    private String version;
+
+    /** 鐘舵��(瀛楀吀) */
+    @Excel(name = "鐘舵��(瀛楀吀)")
+    private String status;
+
+    /** 鍒涘缓鐢ㄦ埛 */
+    @Excel(name = "鍒涘缓鐢ㄦ埛")
+    private String createUser;
+
+    /** 鏇存敼鐢ㄦ埛 */
+    @Excel(name = "鏇存敼鐢ㄦ埛")
+    private String updateUser;
+
+    /** 鏁版嵁鏉ユ簮 */
+    @Excel(name = "鏁版嵁鏉ユ簮")
+    private String dataSource;
+
+    /** 澶囨敞 */
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    /** 閫昏緫鍒犻櫎 */
+    private String delFlag;
+
+
+
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomChildInfoMapper.java b/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomChildInfoMapper.java
new file mode 100644
index 0000000..b38f4fa
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomChildInfoMapper.java
@@ -0,0 +1,63 @@
+package com.billion.main.bs.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.billion.main.bs.domain.BsBomChildInfo;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOM瀛愪俊鎭疢apper鎺ュ彛
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+public interface BsBomChildInfoMapper extends BaseMapper<BsBomChildInfo>
+{
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 鍩虹BOM瀛愪俊鎭�
+     */
+    public BsBomChildInfo selectBsBomChildInfoById(Long id);
+
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 鍩虹BOM瀛愪俊鎭泦鍚�
+     */
+    public List<BsBomChildInfo> selectBsBomChildInfoList(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 鏂板鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    public int insertBsBomChildInfo(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 淇敼鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    public int updateBsBomChildInfo(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 鍒犻櫎鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 缁撴灉
+     */
+    public int deleteBsBomChildInfoById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteBsBomChildInfoByIds(Long[] ids);
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomInfoMapper.java b/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomInfoMapper.java
new file mode 100644
index 0000000..ae1f312
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/mapper/BsBomInfoMapper.java
@@ -0,0 +1,63 @@
+package com.billion.main.bs.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.billion.main.bs.domain.BsBomInfo;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOMMapper鎺ュ彛
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+public interface BsBomInfoMapper extends BaseMapper<BsBomInfo>
+{
+    /**
+     * 鏌ヨ鍩虹BOM
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 鍩虹BOM
+     */
+    public BsBomInfo selectBsBomInfoById(Long id);
+
+    /**
+     * 鏌ヨ鍩虹BOM鍒楄〃
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 鍩虹BOM闆嗗悎
+     */
+    public List<BsBomInfo> selectBsBomInfoList(BsBomInfo bsBomInfo);
+
+    /**
+     * 鏂板鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    public int insertBsBomInfo(BsBomInfo bsBomInfo);
+
+    /**
+     * 淇敼鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    public int updateBsBomInfo(BsBomInfo bsBomInfo);
+
+    /**
+     * 鍒犻櫎鍩虹BOM
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteBsBomInfoById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteBsBomInfoByIds(Long[] ids);
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/service/IBsBomChildInfoService.java b/billion-main/src/main/java/com/billion/main/bs/service/IBsBomChildInfoService.java
new file mode 100644
index 0000000..1c372c0
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/service/IBsBomChildInfoService.java
@@ -0,0 +1,63 @@
+package com.billion.main.bs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.billion.main.bs.domain.BsBomChildInfo;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOM瀛愪俊鎭疭ervice鎺ュ彛
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+public interface IBsBomChildInfoService extends IService<BsBomChildInfo>
+{
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 鍩虹BOM瀛愪俊鎭�
+     */
+    public BsBomChildInfo selectBsBomChildInfoById(Long id);
+
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 鍩虹BOM瀛愪俊鎭泦鍚�
+     */
+    public List<BsBomChildInfo> selectBsBomChildInfoList(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 鏂板鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    public int insertBsBomChildInfo(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 淇敼鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    public int updateBsBomChildInfo(BsBomChildInfo bsBomChildInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鍩虹BOM瀛愪俊鎭富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deleteBsBomChildInfoByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鍩虹BOM瀛愪俊鎭俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 缁撴灉
+     */
+    public int deleteBsBomChildInfoById(Long id);
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/service/IBsBomInfoService.java b/billion-main/src/main/java/com/billion/main/bs/service/IBsBomInfoService.java
new file mode 100644
index 0000000..3868075
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/service/IBsBomInfoService.java
@@ -0,0 +1,63 @@
+package com.billion.main.bs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.billion.main.bs.domain.BsBomInfo;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOMService鎺ュ彛
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+public interface IBsBomInfoService extends IService<BsBomInfo>
+{
+    /**
+     * 鏌ヨ鍩虹BOM
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 鍩虹BOM
+     */
+    public BsBomInfo selectBsBomInfoById(Long id);
+
+    /**
+     * 鏌ヨ鍩虹BOM鍒楄〃
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 鍩虹BOM闆嗗悎
+     */
+    public List<BsBomInfo> selectBsBomInfoList(BsBomInfo bsBomInfo);
+
+    /**
+     * 鏂板鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    public int insertBsBomInfo(BsBomInfo bsBomInfo);
+
+    /**
+     * 淇敼鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    public int updateBsBomInfo(BsBomInfo bsBomInfo);
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鍩虹BOM涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteBsBomInfoByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎鍩虹BOM淇℃伅
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteBsBomInfoById(Long id);
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java b/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java
new file mode 100644
index 0000000..0c66a17
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomChildInfoServiceImpl.java
@@ -0,0 +1,95 @@
+package com.billion.main.bs.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.billion.main.bs.domain.BsBomChildInfo;
+import com.billion.main.bs.mapper.BsBomChildInfoMapper;
+import com.billion.main.bs.service.IBsBomChildInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOM瀛愪俊鎭疭ervice涓氬姟灞傚鐞�
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@Service
+public class BsBomChildInfoServiceImpl extends ServiceImpl<BsBomChildInfoMapper, BsBomChildInfo> implements IBsBomChildInfoService
+{
+    @Autowired
+    private BsBomChildInfoMapper bsBomChildInfoMapper;
+
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 鍩虹BOM瀛愪俊鎭�
+     */
+    @Override
+    public BsBomChildInfo selectBsBomChildInfoById(Long id)
+    {
+        return bsBomChildInfoMapper.selectBsBomChildInfoById(id);
+    }
+
+    /**
+     * 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 鍩虹BOM瀛愪俊鎭�
+     */
+    @Override
+    public List<BsBomChildInfo> selectBsBomChildInfoList(BsBomChildInfo bsBomChildInfo)
+    {
+        return bsBomChildInfoMapper.selectBsBomChildInfoList(bsBomChildInfo);
+    }
+
+    /**
+     * 鏂板鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertBsBomChildInfo(BsBomChildInfo bsBomChildInfo)
+    {
+        return bsBomChildInfoMapper.insertBsBomChildInfo(bsBomChildInfo);
+    }
+
+    /**
+     * 淇敼鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param bsBomChildInfo 鍩虹BOM瀛愪俊鎭�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateBsBomChildInfo(BsBomChildInfo bsBomChildInfo)
+    {
+        return bsBomChildInfoMapper.updateBsBomChildInfo(bsBomChildInfo);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM瀛愪俊鎭�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鍩虹BOM瀛愪俊鎭富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteBsBomChildInfoByIds(Long[] ids)
+    {
+        return bsBomChildInfoMapper.deleteBsBomChildInfoByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鍩虹BOM瀛愪俊鎭俊鎭�
+     * 
+     * @param id 鍩虹BOM瀛愪俊鎭富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteBsBomChildInfoById(Long id)
+    {
+        return bsBomChildInfoMapper.deleteBsBomChildInfoById(id);
+    }
+}
diff --git a/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomInfoServiceImpl.java b/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomInfoServiceImpl.java
new file mode 100644
index 0000000..db1421c
--- /dev/null
+++ b/billion-main/src/main/java/com/billion/main/bs/service/impl/BsBomInfoServiceImpl.java
@@ -0,0 +1,98 @@
+package com.billion.main.bs.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.billion.common.utils.DateUtils;
+import com.billion.main.bs.domain.BsBomInfo;
+import com.billion.main.bs.mapper.BsBomInfoMapper;
+import com.billion.main.bs.service.IBsBomInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 鍩虹BOMService涓氬姟灞傚鐞�
+ * 
+ * @author HDY
+ * @date 2024-11-25
+ */
+@Service
+public class BsBomInfoServiceImpl extends ServiceImpl<BsBomInfoMapper, BsBomInfo> implements IBsBomInfoService
+{
+    @Autowired
+    private BsBomInfoMapper bsBomInfoMapper;
+
+    /**
+     * 鏌ヨ鍩虹BOM
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 鍩虹BOM
+     */
+    @Override
+    public BsBomInfo selectBsBomInfoById(Long id)
+    {
+        return bsBomInfoMapper.selectBsBomInfoById(id);
+    }
+
+    /**
+     * 鏌ヨ鍩虹BOM鍒楄〃
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 鍩虹BOM
+     */
+    @Override
+    public List<BsBomInfo> selectBsBomInfoList(BsBomInfo bsBomInfo)
+    {
+        return bsBomInfoMapper.selectBsBomInfoList(bsBomInfo);
+    }
+
+    /**
+     * 鏂板鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertBsBomInfo(BsBomInfo bsBomInfo)
+    {
+        bsBomInfo.setCreateTime(DateUtils.getNowDate());
+        return bsBomInfoMapper.insertBsBomInfo(bsBomInfo);
+    }
+
+    /**
+     * 淇敼鍩虹BOM
+     * 
+     * @param bsBomInfo 鍩虹BOM
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateBsBomInfo(BsBomInfo bsBomInfo)
+    {
+        bsBomInfo.setUpdateTime(DateUtils.getNowDate());
+        return bsBomInfoMapper.updateBsBomInfo(bsBomInfo);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鍩虹BOM
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鍩虹BOM涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteBsBomInfoByIds(Long[] ids)
+    {
+        return bsBomInfoMapper.deleteBsBomInfoByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎鍩虹BOM淇℃伅
+     * 
+     * @param id 鍩虹BOM涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteBsBomInfoById(Long id)
+    {
+        return bsBomInfoMapper.deleteBsBomInfoById(id);
+    }
+}
diff --git a/billion-main/src/main/resources/mapper/bs/BsBomChildInfoMapper.xml b/billion-main/src/main/resources/mapper/bs/BsBomChildInfoMapper.xml
new file mode 100644
index 0000000..57bd05d
--- /dev/null
+++ b/billion-main/src/main/resources/mapper/bs/BsBomChildInfoMapper.xml
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.billion.main.bs.mapper.BsBomChildInfoMapper">
+    
+    <resultMap type="BsBomChildInfo" id="BsBomChildInfoResult">
+        <result property="id"    column="id"    />
+        <result property="productCode"    column="product_code"    />
+        <result property="productName"    column="product_name"    />
+        <result property="locationCode"    column="location_code"    />
+        <result property="locationName"    column="location_name"    />
+        <result property="materialCode"    column="material_code"    />
+        <result property="materialName"    column="material_name"    />
+        <result property="costQty"    column="cost_qty"    />
+        <result property="unit"    column="unit"    />
+        <result property="remark"    column="remark"    />
+        <result property="bomCode"    column="bom_code"    />
+        <result property="delFlag"    column="del_flag"    />
+    </resultMap>
+
+    <sql id="selectBsBomChildInfoVo">
+        select id, product_code, product_name, location_code, location_name, material_code, material_name, cost_qty, unit, remark, bom_code, del_flag from bs_bom_child_info
+    </sql>
+
+    <select id="selectBsBomChildInfoList" parameterType="BsBomChildInfo" resultMap="BsBomChildInfoResult">
+        <include refid="selectBsBomChildInfoVo"/>
+        <where>  
+            <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
+            <if test="productName != null  and productName != ''"> and product_name like concat('%', #{productName}, '%')</if>
+            <if test="locationCode != null  and locationCode != ''"> and location_code = #{locationCode}</if>
+            <if test="locationName != null  and locationName != ''"> and location_name like concat('%', #{locationName}, '%')</if>
+            <if test="materialCode != null  and materialCode != ''"> and material_code = #{materialCode}</if>
+            <if test="materialName != null  and materialName != ''"> and material_name like concat('%', #{materialName}, '%')</if>
+            <if test="costQty != null "> and cost_qty = #{costQty}</if>
+            <if test="unit != null  and unit != ''"> and unit = #{unit}</if>
+            <if test="bomCode != null  and bomCode != ''"> and bom_code = #{bomCode}</if>
+        </where>
+    </select>
+    
+    <select id="selectBsBomChildInfoById" parameterType="Long" resultMap="BsBomChildInfoResult">
+        <include refid="selectBsBomChildInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBsBomChildInfo" parameterType="BsBomChildInfo">
+        insert into bs_bom_child_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="productCode != null">product_code,</if>
+            <if test="productName != null">product_name,</if>
+            <if test="locationCode != null">location_code,</if>
+            <if test="locationName != null">location_name,</if>
+            <if test="materialCode != null">material_code,</if>
+            <if test="materialName != null">material_name,</if>
+            <if test="costQty != null">cost_qty,</if>
+            <if test="unit != null">unit,</if>
+            <if test="remark != null">remark,</if>
+            <if test="bomCode != null">bom_code,</if>
+            <if test="delFlag != null">del_flag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="productCode != null">#{productCode},</if>
+            <if test="productName != null">#{productName},</if>
+            <if test="locationCode != null">#{locationCode},</if>
+            <if test="locationName != null">#{locationName},</if>
+            <if test="materialCode != null">#{materialCode},</if>
+            <if test="materialName != null">#{materialName},</if>
+            <if test="costQty != null">#{costQty},</if>
+            <if test="unit != null">#{unit},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="bomCode != null">#{bomCode},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBsBomChildInfo" parameterType="BsBomChildInfo">
+        update bs_bom_child_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="productCode != null">product_code = #{productCode},</if>
+            <if test="productName != null">product_name = #{productName},</if>
+            <if test="locationCode != null">location_code = #{locationCode},</if>
+            <if test="locationName != null">location_name = #{locationName},</if>
+            <if test="materialCode != null">material_code = #{materialCode},</if>
+            <if test="materialName != null">material_name = #{materialName},</if>
+            <if test="costQty != null">cost_qty = #{costQty},</if>
+            <if test="unit != null">unit = #{unit},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="bomCode != null">bom_code = #{bomCode},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBsBomChildInfoById" parameterType="Long">
+        delete from bs_bom_child_info where id = #{id}
+    </delete>
+
+    <delete id="deleteBsBomChildInfoByIds" parameterType="String">
+        delete from bs_bom_child_info where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/billion-main/src/main/resources/mapper/bs/BsBomInfoMapper.xml b/billion-main/src/main/resources/mapper/bs/BsBomInfoMapper.xml
new file mode 100644
index 0000000..9c97f83
--- /dev/null
+++ b/billion-main/src/main/resources/mapper/bs/BsBomInfoMapper.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.billion.main.bs.mapper.BsBomInfoMapper">
+    
+    <resultMap type="BsBomInfo" id="BsBomInfoResult">
+        <result property="id"    column="id"    />
+        <result property="bomCode"    column="bom_code"    />
+        <result property="bomName"    column="bom_name"    />
+        <result property="productCode"    column="product_code"    />
+        <result property="productName"    column="product_name"    />
+        <result property="version"    column="version"    />
+        <result property="status"    column="status"    />
+        <result property="remark"    column="remark"    />
+        <result property="createUser"    column="create_user"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateUser"    column="update_user"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="dataSource"    column="data_source"    />
+        <result property="delFlag"    column="del_flag"    />
+    </resultMap>
+
+    <sql id="selectBsBomInfoVo">
+        select id, bom_code, bom_name, product_code, product_name, version, status, remark, create_user, create_time, update_user, update_time, data_source, del_flag from bs_bom_info
+    </sql>
+
+    <select id="selectBsBomInfoList" parameterType="BsBomInfo" resultMap="BsBomInfoResult">
+        <include refid="selectBsBomInfoVo"/>
+        <where>  
+            <if test="bomCode != null  and bomCode != ''"> and bom_code = #{bomCode}</if>
+            <if test="bomName != null  and bomName != ''"> and bom_name like concat('%', #{bomName}, '%')</if>
+            <if test="productCode != null  and productCode != ''"> and product_code = #{productCode}</if>
+            <if test="productName != null  and productName != ''"> and product_name like concat('%', #{productName}, '%')</if>
+            <if test="version != null  and version != ''"> and version = #{version}</if>
+            <if test="status != null  and status != ''"> and status = #{status}</if>
+            <if test="createUser != null  and createUser != ''"> and create_user = #{createUser}</if>
+            <if test="updateUser != null  and updateUser != ''"> and update_user = #{updateUser}</if>
+            <if test="dataSource != null  and dataSource != ''"> and data_source = #{dataSource}</if>
+        </where>
+    </select>
+    
+    <select id="selectBsBomInfoById" parameterType="Long" resultMap="BsBomInfoResult">
+        <include refid="selectBsBomInfoVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertBsBomInfo" parameterType="BsBomInfo">
+        insert into bs_bom_info
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="bomCode != null">bom_code,</if>
+            <if test="bomName != null">bom_name,</if>
+            <if test="productCode != null">product_code,</if>
+            <if test="productName != null">product_name,</if>
+            <if test="version != null">version,</if>
+            <if test="status != null">status,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createUser != null">create_user,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateUser != null">update_user,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="dataSource != null">data_source,</if>
+            <if test="delFlag != null">del_flag,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="bomCode != null">#{bomCode},</if>
+            <if test="bomName != null">#{bomName},</if>
+            <if test="productCode != null">#{productCode},</if>
+            <if test="productName != null">#{productName},</if>
+            <if test="version != null">#{version},</if>
+            <if test="status != null">#{status},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createUser != null">#{createUser},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateUser != null">#{updateUser},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="dataSource != null">#{dataSource},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBsBomInfo" parameterType="BsBomInfo">
+        update bs_bom_info
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="bomCode != null">bom_code = #{bomCode},</if>
+            <if test="bomName != null">bom_name = #{bomName},</if>
+            <if test="productCode != null">product_code = #{productCode},</if>
+            <if test="productName != null">product_name = #{productName},</if>
+            <if test="version != null">version = #{version},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createUser != null">create_user = #{createUser},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateUser != null">update_user = #{updateUser},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="dataSource != null">data_source = #{dataSource},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBsBomInfoById" parameterType="Long">
+        delete from bs_bom_info where id = #{id}
+    </delete>
+
+    <delete id="deleteBsBomInfoByIds" parameterType="String">
+        delete from bs_bom_info where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/billion-ui/src/api/main/bs/bomChildInfo.js b/billion-ui/src/api/main/bs/bomChildInfo.js
new file mode 100644
index 0000000..08ea408
--- /dev/null
+++ b/billion-ui/src/api/main/bs/bomChildInfo.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛�
+export function listBomChildInfo(query) {
+  return request({
+    url: '/bs/bomChildInfo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鍩虹BOM瀛愪俊鎭缁�
+export function getBomChildInfo(id) {
+  return request({
+    url: '/bs/bomChildInfo/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板鍩虹BOM瀛愪俊鎭�
+export function addBomChildInfo(data) {
+  return request({
+    url: '/bs/bomChildInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鍩虹BOM瀛愪俊鎭�
+export function updateBomChildInfo(data) {
+  return request({
+    url: '/bs/bomChildInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鍩虹BOM瀛愪俊鎭�
+export function delBomChildInfo(id) {
+  return request({
+    url: '/bs/bomChildInfo/' + id,
+    method: 'delete'
+  })
+}
diff --git a/billion-ui/src/api/main/bs/bomInfo.js b/billion-ui/src/api/main/bs/bomInfo.js
new file mode 100644
index 0000000..493b6cc
--- /dev/null
+++ b/billion-ui/src/api/main/bs/bomInfo.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鍩虹BOM鍒楄〃
+export function listBomInfo(query) {
+  return request({
+    url: '/bs/bomInfo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鍩虹BOM璇︾粏
+export function getBomInfo(id) {
+  return request({
+    url: '/bs/bomInfo/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板鍩虹BOM
+export function addBomInfo(data) {
+  return request({
+    url: '/bs/bomInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鍩虹BOM
+export function updateBomInfo(data) {
+  return request({
+    url: '/bs/bomInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鍩虹BOM
+export function delBomInfo(id) {
+  return request({
+    url: '/bs/bomInfo/' + id,
+    method: 'delete'
+  })
+}
diff --git a/billion-ui/src/router/index.js b/billion-ui/src/router/index.js
index 93cde3f..1849928 100644
--- a/billion-ui/src/router/index.js
+++ b/billion-ui/src/router/index.js
@@ -149,6 +149,20 @@
     ]
   },
   {
+    path: '/main/bom-data',
+    component: Layout,
+    hidden: true,
+    permissions: ['bs:bomChildInfo:list'],
+    children: [
+      {
+        path: 'index',
+        component: () => import('@/views/main/bs/bomChildInfo/index'),
+        name: 'Data',
+        meta: { title: 'BOM瀛愪欢淇℃伅', activeMenu: '/main/bs/bomChildInfo' }
+      }
+    ]
+  },
+  {
     path: '/monitor/job-log',
     component: Layout,
     hidden: true,
diff --git a/billion-ui/src/views/main/bs/bomChildInfo/index.vue b/billion-ui/src/views/main/bs/bomChildInfo/index.vue
new file mode 100644
index 0000000..e4bc548
--- /dev/null
+++ b/billion-ui/src/views/main/bs/bomChildInfo/index.vue
@@ -0,0 +1,381 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="宸ヤ綅缂栫爜" prop="locationCode">
+        <el-input
+          v-model="queryParams.locationCode"
+          placeholder="璇疯緭鍏ュ伐浣嶇紪鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="宸ヤ綅鍚嶇О" prop="locationName">
+        <el-input
+          v-model="queryParams.locationName"
+          placeholder="璇疯緭鍏ュ伐浣嶅悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鐗╂枡缂栫爜" prop="materialCode">
+        <el-input
+          v-model="queryParams.materialCode"
+          placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鐗╂枡鍚嶇О" prop="materialName">
+        <el-input
+          v-model="queryParams.materialName"
+          placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鍗曚綅" prop="unit">
+        <el-input
+          v-model="queryParams.unit"
+          placeholder="璇疯緭鍏ュ崟浣�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item style="float: right">
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+    <el-card style="margin-top: 10px" class="box-card">
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['bs:bomChildInfo:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['bs:bomChildInfo:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['bs:bomChildInfo:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['bs:bomChildInfo:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-close"
+          size="mini"
+          @click="handleClose"
+        >鍏抽棴</el-button>
+      </el-col>
+    </el-row>
+
+    <el-descriptions class="margin-top" :size="'medium'" border>
+      <el-descriptions-item >
+        <template slot="label">
+          <i class="el-icon-user"></i>
+          BOM缂栫爜
+        </template>
+          {{headerInformationData.bomCode}}
+      </el-descriptions-item>
+      <el-descriptions-item >
+        <template slot="label">
+          <i class="el-icon-location-outline"></i>
+          浜у搧缂栫爜
+        </template>
+        {{headerInformationData.productCode}}
+      </el-descriptions-item>
+      <el-descriptions-item >
+        <template slot="label">
+          <i class="el-icon-tickets"></i>
+          浜у搧鍚嶇О
+        </template>
+        {{headerInformationData.productName}}
+      </el-descriptions-item>
+    </el-descriptions>
+
+    <el-table border v-loading="loading" :data="bomChildInfoList" @selection-change="handleSelectionChange" v-if="bomChildInfoList.length > 0">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column show-overflow-tooltip="true" label="宸ヤ綅缂栫爜" align="center" prop="locationCode" />
+      <el-table-column show-overflow-tooltip="true" label="宸ヤ綅鍚嶇О" align="center" prop="locationName" />
+      <el-table-column show-overflow-tooltip="true" label="鐗╂枡缂栫爜" align="center" prop="materialCode" />
+      <el-table-column show-overflow-tooltip="true" label="鐗╂枡鍚嶇О" align="center" prop="materialName" />
+      <el-table-column show-overflow-tooltip="true" label="鍗曡��" align="center" prop="costQty" />
+      <el-table-column show-overflow-tooltip="true" label="鍗曚綅" align="center" prop="unit" />
+      <el-table-column show-overflow-tooltip="true" label="澶囨敞" align="center" prop="remark" />
+    </el-table>
+    <el-empty v-else>
+      <span slot="description">鏆傛棤鏁版嵁</span>
+    </el-empty>
+    </el-card>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀瑰熀纭�BOM瀛愪俊鎭璇濇 -->
+    <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
+        <span slot="title">
+        <i class="el-icon-s-order"></i>
+        {{titleName}}
+      </span>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="BOM缂栫爜" prop="bomCode">
+          <el-input v-model="querybomCode" :disabled="true" />
+        </el-form-item>
+        <el-form-item label="宸ヤ綅缂栫爜" prop="locationCode">
+          <el-input v-model="form.locationCode" placeholder="璇疯緭鍏ュ伐浣嶇紪鐮�" />
+        </el-form-item>
+        <el-form-item label="宸ヤ綅鍚嶇О" prop="locationName">
+          <el-input v-model="form.locationName" placeholder="璇疯緭鍏ュ伐浣嶅悕绉�" />
+        </el-form-item>
+        <el-form-item label="鐗╂枡缂栫爜" prop="materialCode">
+          <el-input v-model="form.materialCode" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" />
+        </el-form-item>
+        <el-form-item label="鐗╂枡鍚嶇О" prop="materialName">
+          <el-input v-model="form.materialName" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" />
+        </el-form-item>
+        <el-form-item label="鍗曡��" prop="costQty">
+          <el-input v-model="form.costQty" placeholder="璇疯緭鍏ュ崟鑰�" />
+        </el-form-item>
+        <el-form-item label="鍗曚綅" prop="unit">
+          <el-input v-model="form.unit" placeholder="璇疯緭鍏ュ崟浣�" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listBomChildInfo, getBomChildInfo, delBomChildInfo, addBomChildInfo, updateBomChildInfo } from "@/api/main/bs/bomChildInfo";
+import { listBomInfo } from "@/api/main/bs/bomInfo";
+
+export default {
+  name: "BomChildInfo",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      titleName: '',
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鍩虹BOM瀛愪俊鎭〃鏍兼暟鎹�
+      bomChildInfoList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      querybomCode: "",
+      queryproductCode: "",
+      queryproductName: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        productCode: null,
+        productName: null,
+        locationCode: null,
+        locationName: null,
+        materialCode: null,
+        materialName: null,
+        costQty: null,
+        unit: null,
+        bomCode: null,
+      },
+      headerInformationData:{
+        bomCode: "",
+        productCode: "",
+        productName: ""
+      },
+
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        id: [
+          { required: true, message: "涓婚敭id涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    let bomCode = this.$route.query.bomCode;
+    this.queryParams.bomCode = bomCode
+    this.querybomCode = bomCode
+    this.getList();
+    this.headerInformation();
+    this.getProcesses();
+  },
+  methods: {
+    /** 杩斿洖鎸夐挳鎿嶄綔 */
+    handleClose() {
+      const obj = { path: "/main/bs/bomInfo" };
+      this.$tab.closeOpenPage(obj);
+    },
+    /** BOM琛ㄥご淇℃伅 */
+    headerInformation() {
+      listBomInfo(this.queryParams).then(response => {
+        this.headerInformationData = response.rows[0];
+      });
+    },
+
+    getProcesses() {
+      listBomChildInfo(null).then(response => {
+        this.options = response.rows;
+      });
+    },
+
+    /** 鏌ヨ鍩虹BOM瀛愪俊鎭垪琛� */
+    getList() {
+      this.loading = true;
+      listBomChildInfo(this.queryParams).then(response => {
+        this.bomChildInfoList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        productCode: null,
+        productName: null,
+        locationCode: null,
+        locationName: null,
+        materialCode: null,
+        materialName: null,
+        costQty: null,
+        unit: null,
+        remark: null,
+        bomCode: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鍩虹BOM瀛愪俊鎭�";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBomChildInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鍩虹BOM瀛愪俊鎭�";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.form.bomCode = this.querybomCode;
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateBomChildInfo(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBomChildInfo(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎').then(function() {
+        return delBomChildInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('bs/bomChildInfo/export', {
+        ...this.queryParams
+      }, `bomChildInfo_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/billion-ui/src/views/main/bs/bomInfo/index.vue b/billion-ui/src/views/main/bs/bomInfo/index.vue
new file mode 100644
index 0000000..0edc8f3
--- /dev/null
+++ b/billion-ui/src/views/main/bs/bomInfo/index.vue
@@ -0,0 +1,298 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label-width="100px" label="BOM缂栫爜" prop="bomCode">
+        <el-input
+          v-model="queryParams.bomCode"
+          placeholder="璇疯緭鍏OM缂栫爜"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label-width="100px" label="BOM鍚嶇О" prop="bomName">
+        <el-input
+          v-model="queryParams.bomName"
+          placeholder="璇疯緭鍏OM鍚嶇О"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="浜у搧缂栫爜" prop="productCode">
+        <el-input
+          v-model="queryParams.productCode"
+          placeholder="璇疯緭鍏ヤ骇鍝佺紪鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="浜у搧鍚嶇О" prop="productName">
+        <el-input
+          v-model="queryParams.productName"
+          placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item style="float: right">
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['bs:bomInfo:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['bs:bomInfo:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['bs:bomInfo:remove']"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['bs:bomInfo:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="bomInfoList" @selection-change="handleSelectionChange" v-if="bomInfoList.length > 0">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column  label="BOM缂栫爜" align="center" prop="bomCode" >
+      <template slot-scope="scope">
+        <router-link :to="{path: '/main/bom-data/index/', query: {bomCode: scope.row.bomCode} }" class="link-type">
+          <span>{{ scope.row.bomCode }}</span>
+        </router-link>
+      </template>
+      </el-table-column>
+      <el-table-column show-overflow-tooltip="true" label="BOM鍚嶇О" align="center" prop="bomName" />
+      <el-table-column show-overflow-tooltip="true" label="浜у搧缂栫爜" align="center" prop="productCode"/>
+      <el-table-column show-overflow-tooltip="true" label="浜у搧鍚嶇О" align="center" prop="productName" />
+      <el-table-column show-overflow-tooltip="true" label="鐗堟湰" align="center" prop="version" />
+      <el-table-column show-overflow-tooltip="true" label="鐘舵��" align="center" prop="status" />
+      <el-table-column show-overflow-tooltip="true" label="澶囨敞" align="center" prop="remark" />
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 娣诲姞鎴栦慨鏀瑰熀纭�BOM瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="BOM缂栫爜" prop="bomCode">
+          <el-input v-model="form.bomCode" placeholder="璇疯緭鍏OM缂栫爜" />
+        </el-form-item>
+        <el-form-item label="BOM鍚嶇О" prop="bomName">
+          <el-input v-model="form.bomName" placeholder="璇疯緭鍏OM鍚嶇О" />
+        </el-form-item>
+        <el-form-item label="浜у搧缂栫爜" prop="productCode">
+          <el-input v-model="form.productCode" placeholder="璇疯緭鍏ヤ骇鍝佺紪鐮�" />
+        </el-form-item>
+        <el-form-item label="浜у搧鍚嶇О" prop="productName">
+          <el-input v-model="form.productName" placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listBomInfo, getBomInfo, delBomInfo, addBomInfo, updateBomInfo } from "@/api/main/bs/bomInfo";
+
+export default {
+  name: "BomInfo",
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鍩虹BOM琛ㄦ牸鏁版嵁
+      bomInfoList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        bomCode: null,
+        bomName: null,
+        productCode: null,
+        productName: null,
+        version: null,
+        status: null,
+        createUser: null,
+        updateUser: null,
+        dataSource: null,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        id: [
+          { required: true, message: "涓婚敭id涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鍩虹BOM鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listBomInfo(this.queryParams).then(response => {
+        this.bomInfoList = response.rows;
+        console.log(this.bomInfoList)
+        this.total = response.total;
+        this.loading = false;
+
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        bomCode: null,
+        bomName: null,
+        productCode: null,
+        productName: null,
+        version: null,
+        status: null,
+        remark: null,
+        createUser: null,
+        createTime: null,
+        updateUser: null,
+        updateTime: null,
+        dataSource: null,
+        delFlag: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鍩虹BOM";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBomInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鍩虹BOM";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateBomInfo(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBomInfo(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎').then(function() {
+        return delBomInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('bs/bomInfo/export', {
+        ...this.queryParams
+      }, `bomInfo_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
diff --git a/billion-ui/src/views/main/sc/collectionParamConf/index.vue b/billion-ui/src/views/main/sc/collectionParamConf/index.vue
index 3907210..1bff8d2 100644
--- a/billion-ui/src/views/main/sc/collectionParamConf/index.vue
+++ b/billion-ui/src/views/main/sc/collectionParamConf/index.vue
@@ -17,7 +17,6 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-
       <el-form-item  label="閲囬泦鍦板潃" prop="node">
         <el-input
           v-model="queryParams.node"
@@ -122,8 +121,8 @@
       <el-table-column label="宸ヤ綅缂栫爜" align="center" prop="locationCode" />
       <el-table-column label="鍙傛暟缂栫爜" align="center" prop="paramCode" />
       <el-table-column label="鍙傛暟鍚嶇О" align="center" prop="paramName" />
-      <el-table-column label="鍙傛暟闆嗙紪鐮�" align="center" prop="paramSetCode" />
-      <el-table-column label="鍙傛暟闆嗗悕绉�" align="center" prop="paramSetName" />
+      <el-table-column width="90px" label="鍙傛暟闆嗙紪鐮�" align="center" prop="paramSetCode" />
+      <el-table-column width="90px" label="鍙傛暟闆嗗悕绉�" align="center" prop="paramSetName" />
       <el-table-column label="閲囬泦鍦板潃" align="center" prop="node" />
       <el-table-column label="閲囬泦绫诲瀷" align="center" prop="type" />
       <el-table-column label="鍗曚綅" align="center" prop="unit" />
diff --git a/billion-ui/src/views/main/sc/opcConf/index.vue b/billion-ui/src/views/main/sc/opcConf/index.vue
index 81bc419..24edab3 100644
--- a/billion-ui/src/views/main/sc/opcConf/index.vue
+++ b/billion-ui/src/views/main/sc/opcConf/index.vue
@@ -26,12 +26,24 @@
         />
       </el-form-item>
       <el-form-item label="閲囬泦绫诲瀷" prop="type">
-        <el-input
-          v-model="queryParams.node"
-          placeholder="璇疯緭鍏ラ噰闆嗙被鍨�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
+        <el-select v-model="queryParams.type" placeholder="璇烽�夋嫨璁㈤槄鐘舵��" clearable>
+          <el-option
+            v-for="dict in dict.type.collection_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璁㈤槄" prop="subscribe">
+        <el-select v-model="queryParams.subscribe" placeholder="璇烽�夋嫨璁㈤槄鐘舵��" clearable>
+          <el-option
+            v-for="dict in dict.type.sys_yes_no"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
       </el-form-item>
 
       <el-form-item style="float: right" >
@@ -85,7 +97,6 @@
           v-hasPermi="['sc:opcConf:export']"
         >瀵煎嚭</el-button>
       </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
     <el-table v-loading="loading" border :data="opcConfList" @selection-change="handleSelectionChange">
@@ -93,32 +104,14 @@
       <el-table-column label="宸ヤ綅缂栫爜" align="center" prop="locationCode" />
       <el-table-column label="宸ヤ綅鍚嶇О" align="center" prop="locationName" />
       <el-table-column label="鍦板潃" align="center" prop="node" />
-      <el-table-column label="閲囬泦绫诲瀷" align="center" prop="type" />
+      <el-table-column label="閲囬泦绫诲瀷" align="center" prop="type" >
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.collection_type" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
       <el-table-column label="鏄惁璁㈤槄" align="center" prop="subscribe" >
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.subscribe"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            style="width: 72px"
-            type="success"
-            plain
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['sc:opcConf:edit']"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            style="width: 72px"
-            type="danger"
-            plain
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['sc:opcConf:remove']"
-          >鍒犻櫎</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -144,7 +137,14 @@
           <el-input v-model="form.node" placeholder="璇疯緭鍏ュ湴鍧�" />
         </el-form-item>
         <el-form-item label="閲囬泦绫诲瀷" prop="type">
-          <el-input v-model="form.type" placeholder="璇疯緭鍏ラ噰闆嗙被鍨�" />
+          <el-select v-model="form.type" placeholder="璇烽�夋嫨閲囬泦绫诲瀷" >
+            <el-option
+              v-for="dict in dict.type.collection_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
+          </el-select>
         </el-form-item>
         <el-form-item label="鏄惁璁㈤槄" prop="subscribe">
           <el-radio-group v-model="form.subscribe">
@@ -169,7 +169,7 @@
 
 export default {
   name: "OpcConf",
-  dicts: ['sys_yes_no'],
+  dicts: ['sys_yes_no','collection_type'],
   data() {
     return {
       advancedSearchVisible: false,
@@ -212,9 +212,11 @@
         locationName: [
           { required: true, message: "宸ヤ綅鍚嶇О涓嶈兘涓虹┖", trigger: "blur" },
         ],
+        subscribe: [
+          { required: true, message: "璁㈤槄涓嶈兘涓虹┖", trigger: "blur" },
+        ],
         node: [
           { required: true, message: "鍦板潃涓嶈兘涓虹┖", trigger: "blur" },
-          { pattern: /^[a-zA-Z0-9]*$/, message: "鍦板潃涓嶈兘鍖呭惈涓枃瀛楃", trigger: "blur" }
         ],
       }
     };

--
Gitblit v1.9.3