Browse Source

基础数据

xiongwanxiong 1 month ago
parent
commit
c3f21dfa44
33 changed files with 3872 additions and 1 deletions
  1. 114 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/ChemicalsCatalogController.java
  2. 114 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/GoodsCatalogController.java
  3. 114 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/PackCatalogController.java
  4. 72 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/ChemicalsCatalogMapper.java
  5. 72 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/GoodsCatalogMapper.java
  6. 72 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/PackCatalogMapper.java
  7. 74 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/ChemicalsCatalog.java
  8. 65 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/ChemicalsCatalogQuery.java
  9. 98 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/GoodsCatalog.java
  10. 83 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/GoodsCatalogQuery.java
  11. 51 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/PackCatalog.java
  12. 47 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/PackCatalogQuery.java
  13. 89 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IChemicalsCatalogService.java
  14. 89 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IGoodsCatalogService.java
  15. 89 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IPackCatalogService.java
  16. 172 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/ChemicalsCatalogServiceImpl.java
  17. 172 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/GoodsCatalogServiceImpl.java
  18. 172 0
      wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/PackCatalogServiceImpl.java
  19. 295 0
      wxjy-wxjy-service/src/main/resources/mapper/base/ChemicalsCatalogMapper.xml
  20. 350 0
      wxjy-wxjy-service/src/main/resources/mapper/base/GoodsCatalogMapper.xml
  21. 221 0
      wxjy-wxjy-service/src/main/resources/mapper/base/PackCatalogMapper.xml
  22. 3 1
      wxjy-wxjy-service/src/main/resources/vm/java/pojoQuery.java.vm
  23. 31 0
      wxjy-wxjy-web/src/App.vue
  24. 41 0
      wxjy-wxjy-web/src/apis/base/ChemicalsCatalog.ts
  25. 41 0
      wxjy-wxjy-web/src/apis/base/GoodsCatalog.ts
  26. 41 0
      wxjy-wxjy-web/src/apis/base/PackCatalog.ts
  27. 27 0
      wxjy-wxjy-web/src/router/app-router.ts
  28. 39 0
      wxjy-wxjy-web/src/types/base/ChemicalsCatalog.ts
  29. 50 0
      wxjy-wxjy-web/src/types/base/GoodsCatalog.ts
  30. 27 0
      wxjy-wxjy-web/src/types/base/PackCatalog.ts
  31. 311 0
      wxjy-wxjy-web/src/views/base/ChemicalsCatalog.vue
  32. 383 0
      wxjy-wxjy-web/src/views/base/GoodsCatalog.vue
  33. 253 0
      wxjy-wxjy-web/src/views/base/PackCatalog.vue

+ 114 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/ChemicalsCatalogController.java

@@ -0,0 +1,114 @@
+package cn.gov.customs.wxjy.base.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.gov.customs.cacp.sdks.core.result.Result;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.cacp.sdks.core.user.trans.UserContextHolder;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import cn.gov.customs.wxjy.common.core.controller.BaseController;
+import org.springframework.web.multipart.MultipartFile;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalog;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IChemicalsCatalogService;
+import cn.gov.customs.wxjy.common.utils.poi.ExcelUtil;
+import cn.gov.customs.wxjy.common.core.page.TableDataInfo;
+
+/**
+ * 基数数据-危化品目录Controller
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@RestController
+@RequestMapping("/base/ChemicalsCatalog")
+@RequiredArgsConstructor
+public class ChemicalsCatalogController extends BaseController {
+
+    private final IChemicalsCatalogService chemicalsCatalogService;
+
+    /**
+     * 查询基数数据-危化品目录列表
+     */
+    @PostMapping("/get-list")
+    public Result<PageInfo<ChemicalsCatalog>> list(@RequestBody ChemicalsCatalogQuery query) {
+        PageHelper.startPage(query.getPageIndex(), query.getPageSize());
+        PageInfo<ChemicalsCatalog> list = chemicalsCatalogService.selectPageList(query);
+        return Result.success(list);
+    }
+
+    /**
+     * 获取基数数据-危化品目录详细信息
+     */
+    @GetMapping(value = "/get-detail")
+    public Result<ChemicalsCatalog> getInfo(@RequestParam String ID) {
+        return Result.success(chemicalsCatalogService.selectByID(ID));
+    }
+
+    /**
+     * 新增基数数据-危化品目录
+     */
+    @PostMapping("/insert-chemicalsCatalog")
+    public Result<Integer> add(@RequestBody ChemicalsCatalog chemicalsCatalog) {
+        return Result.success(chemicalsCatalogService.insert(chemicalsCatalog));
+    }
+
+    /**
+     * 修改基数数据-危化品目录
+     */
+    @PostMapping("/update-chemicalsCatalog")
+    public Result<Integer> edit(@RequestBody ChemicalsCatalog chemicalsCatalog) {
+        return Result.success(chemicalsCatalogService.update(chemicalsCatalog));
+    }
+
+    /**
+     * 删除基数数据-危化品目录
+     */
+    @PostMapping("/delete-chemicalsCatalog")
+    public Result<Integer> remove(@RequestBody String[] ids) {
+        return Result.success(chemicalsCatalogService.deleteByIDs(ids));
+    }
+
+    /**
+    * 导入 基数数据-危化品目录
+    * @param file
+    * @param updateSupport
+    * @return
+    * @throws Exception
+    */
+    @PostMapping("/import-chemicalsCatalog")
+    public Result<String> importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        CacpTransUser user = UserContextHolder.currentUser();
+        ExcelUtil<ChemicalsCatalog> util = new ExcelUtil<ChemicalsCatalog>(ChemicalsCatalog.class);
+        List<ChemicalsCatalog> chemicalsCatalogList = util.importExcel(file.getInputStream());
+        String message = chemicalsCatalogService.importChemicalsCatalog(chemicalsCatalogList, updateSupport, user);
+        return Result.success(message);
+    }
+
+    /**
+     * 导出基数数据-危化品目录列表
+     */
+    @PostMapping("/get-chemicalsCatalog-export")
+    public void export(HttpServletResponse response, @RequestBody ChemicalsCatalogQuery query) {
+        List<ChemicalsCatalog> list = chemicalsCatalogService.selectList(query);
+        ExcelUtil<ChemicalsCatalog> util = new ExcelUtil<ChemicalsCatalog>(ChemicalsCatalog. class);
+        util.exportExcel(response, list, "基数数据-危化品目录数据");
+    }
+
+    /**
+    * 获取导入模板
+    * @param response
+    */
+    @PostMapping("/template-chemicalsCatalog")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<ChemicalsCatalog> util = new ExcelUtil<ChemicalsCatalog>(ChemicalsCatalog.class);
+        util.importTemplateExcel(response, "基数数据-危化品目录");
+    }
+}

+ 114 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/GoodsCatalogController.java

@@ -0,0 +1,114 @@
+package cn.gov.customs.wxjy.base.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.gov.customs.cacp.sdks.core.result.Result;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.cacp.sdks.core.user.trans.UserContextHolder;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import cn.gov.customs.wxjy.common.core.controller.BaseController;
+import org.springframework.web.multipart.MultipartFile;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalog;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IGoodsCatalogService;
+import cn.gov.customs.wxjy.common.utils.poi.ExcelUtil;
+import cn.gov.customs.wxjy.common.core.page.TableDataInfo;
+
+/**
+ * 基础数据-危险货物目录Controller
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@RestController
+@RequestMapping("/base/GoodsCatalog")
+@RequiredArgsConstructor
+public class GoodsCatalogController extends BaseController {
+
+    private final IGoodsCatalogService goodsCatalogService;
+
+    /**
+     * 查询基础数据-危险货物目录列表
+     */
+    @PostMapping("/get-list")
+    public Result<PageInfo<GoodsCatalog>> list(@RequestBody GoodsCatalogQuery query) {
+        PageHelper.startPage(query.getPageIndex(), query.getPageSize());
+        PageInfo<GoodsCatalog> list = goodsCatalogService.selectPageList(query);
+        return Result.success(list);
+    }
+
+    /**
+     * 获取基础数据-危险货物目录详细信息
+     */
+    @GetMapping(value = "/get-detail")
+    public Result<GoodsCatalog> getInfo(@RequestParam String ID) {
+        return Result.success(goodsCatalogService.selectByID(ID));
+    }
+
+    /**
+     * 新增基础数据-危险货物目录
+     */
+    @PostMapping("/insert-goodsCatalog")
+    public Result<Integer> add(@RequestBody GoodsCatalog goodsCatalog) {
+        return Result.success(goodsCatalogService.insert(goodsCatalog));
+    }
+
+    /**
+     * 修改基础数据-危险货物目录
+     */
+    @PostMapping("/update-goodsCatalog")
+    public Result<Integer> edit(@RequestBody GoodsCatalog goodsCatalog) {
+        return Result.success(goodsCatalogService.update(goodsCatalog));
+    }
+
+    /**
+     * 删除基础数据-危险货物目录
+     */
+    @PostMapping("/delete-goodsCatalog")
+    public Result<Integer> remove(@RequestBody String[] ids) {
+        return Result.success(goodsCatalogService.deleteByIDs(ids));
+    }
+
+    /**
+    * 导入 基础数据-危险货物目录
+    * @param file
+    * @param updateSupport
+    * @return
+    * @throws Exception
+    */
+    @PostMapping("/import-goodsCatalog")
+    public Result<String> importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        CacpTransUser user = UserContextHolder.currentUser();
+        ExcelUtil<GoodsCatalog> util = new ExcelUtil<GoodsCatalog>(GoodsCatalog.class);
+        List<GoodsCatalog> goodsCatalogList = util.importExcel(file.getInputStream());
+        String message = goodsCatalogService.importGoodsCatalog(goodsCatalogList, updateSupport, user);
+        return Result.success(message);
+    }
+
+    /**
+     * 导出基础数据-危险货物目录列表
+     */
+    @PostMapping("/get-goodsCatalog-export")
+    public void export(HttpServletResponse response, @RequestBody GoodsCatalogQuery query) {
+        List<GoodsCatalog> list = goodsCatalogService.selectList(query);
+        ExcelUtil<GoodsCatalog> util = new ExcelUtil<GoodsCatalog>(GoodsCatalog. class);
+        util.exportExcel(response, list, "基础数据-危险货物目录数据");
+    }
+
+    /**
+    * 获取导入模板
+    * @param response
+    */
+    @PostMapping("/template-goodsCatalog")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<GoodsCatalog> util = new ExcelUtil<GoodsCatalog>(GoodsCatalog.class);
+        util.importTemplateExcel(response, "基础数据-危险货物目录");
+    }
+}

+ 114 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/controller/PackCatalogController.java

@@ -0,0 +1,114 @@
+package cn.gov.customs.wxjy.base.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import cn.gov.customs.cacp.sdks.core.result.Result;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.cacp.sdks.core.user.trans.UserContextHolder;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import cn.gov.customs.wxjy.common.core.controller.BaseController;
+import org.springframework.web.multipart.MultipartFile;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.base.pojo.PackCatalog;
+import cn.gov.customs.wxjy.base.pojo.PackCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IPackCatalogService;
+import cn.gov.customs.wxjy.common.utils.poi.ExcelUtil;
+import cn.gov.customs.wxjy.common.core.page.TableDataInfo;
+
+/**
+ * 包装种类目录Controller
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@RestController
+@RequestMapping("/base/PackCatalog")
+@RequiredArgsConstructor
+public class PackCatalogController extends BaseController {
+
+    private final IPackCatalogService packCatalogService;
+
+    /**
+     * 查询包装种类目录列表
+     */
+    @PostMapping("/get-list")
+    public Result<PageInfo<PackCatalog>> list(@RequestBody PackCatalogQuery query) {
+        PageHelper.startPage(query.getPageIndex(), query.getPageSize());
+        PageInfo<PackCatalog> list = packCatalogService.selectPageList(query);
+        return Result.success(list);
+    }
+
+    /**
+     * 获取包装种类目录详细信息
+     */
+    @GetMapping(value = "/get-detail")
+    public Result<PackCatalog> getInfo(@RequestParam String ID) {
+        return Result.success(packCatalogService.selectByID(ID));
+    }
+
+    /**
+     * 新增包装种类目录
+     */
+    @PostMapping("/insert-packCatalog")
+    public Result<Integer> add(@RequestBody PackCatalog packCatalog) {
+        return Result.success(packCatalogService.insert(packCatalog));
+    }
+
+    /**
+     * 修改包装种类目录
+     */
+    @PostMapping("/update-packCatalog")
+    public Result<Integer> edit(@RequestBody PackCatalog packCatalog) {
+        return Result.success(packCatalogService.update(packCatalog));
+    }
+
+    /**
+     * 删除包装种类目录
+     */
+    @PostMapping("/delete-packCatalog")
+    public Result<Integer> remove(@RequestBody String[] ids) {
+        return Result.success(packCatalogService.deleteByIDs(ids));
+    }
+
+    /**
+    * 导入 包装种类目录
+    * @param file
+    * @param updateSupport
+    * @return
+    * @throws Exception
+    */
+    @PostMapping("/import-packCatalog")
+    public Result<String> importData(MultipartFile file, boolean updateSupport) throws Exception
+    {
+        CacpTransUser user = UserContextHolder.currentUser();
+        ExcelUtil<PackCatalog> util = new ExcelUtil<PackCatalog>(PackCatalog.class);
+        List<PackCatalog> packCatalogList = util.importExcel(file.getInputStream());
+        String message = packCatalogService.importPackCatalog(packCatalogList, updateSupport, user);
+        return Result.success(message);
+    }
+
+    /**
+     * 导出包装种类目录列表
+     */
+    @PostMapping("/get-packCatalog-export")
+    public void export(HttpServletResponse response, @RequestBody PackCatalogQuery query) {
+        List<PackCatalog> list = packCatalogService.selectList(query);
+        ExcelUtil<PackCatalog> util = new ExcelUtil<PackCatalog>(PackCatalog. class);
+        util.exportExcel(response, list, "包装种类目录数据");
+    }
+
+    /**
+    * 获取导入模板
+    * @param response
+    */
+    @PostMapping("/template-packCatalog")
+    public void importTemplate(HttpServletResponse response)
+    {
+        ExcelUtil<PackCatalog> util = new ExcelUtil<PackCatalog>(PackCatalog.class);
+        util.importTemplateExcel(response, "包装种类目录");
+    }
+}

+ 72 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/ChemicalsCatalogMapper.java

@@ -0,0 +1,72 @@
+package cn.gov.customs.wxjy.base.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalog;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalogQuery;
+
+/**
+ * 基数数据-危化品目录Mapper接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Mapper
+public interface ChemicalsCatalogMapper {
+    /**
+     * 查询基数数据-危化品目录
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 基数数据-危化品目录
+     */
+    public ChemicalsCatalog selectByID(String ID);
+
+    /**
+     * 查询基数数据-危化品目录列表
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 基数数据-危化品目录集合
+     */
+    public List<ChemicalsCatalog> selectList(ChemicalsCatalogQuery chemicalsCatalog);
+
+    /**
+     * 新增基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    public int insert(ChemicalsCatalog chemicalsCatalog);
+
+    /**
+     * 修改基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    public int update(ChemicalsCatalog chemicalsCatalog);
+
+    /**
+     * 删除基数数据-危化品目录
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 批量删除基数数据-危化品目录
+     *
+     * @param IDs 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] IDs);
+
+    /**
+     * 逻辑删除基数数据-危化品目录
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+}

+ 72 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/GoodsCatalogMapper.java

@@ -0,0 +1,72 @@
+package cn.gov.customs.wxjy.base.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalog;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalogQuery;
+
+/**
+ * 基础数据-危险货物目录Mapper接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Mapper
+public interface GoodsCatalogMapper {
+    /**
+     * 查询基础数据-危险货物目录
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 基础数据-危险货物目录
+     */
+    public GoodsCatalog selectByID(String ID);
+
+    /**
+     * 查询基础数据-危险货物目录列表
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 基础数据-危险货物目录集合
+     */
+    public List<GoodsCatalog> selectList(GoodsCatalogQuery goodsCatalog);
+
+    /**
+     * 新增基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    public int insert(GoodsCatalog goodsCatalog);
+
+    /**
+     * 修改基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    public int update(GoodsCatalog goodsCatalog);
+
+    /**
+     * 删除基础数据-危险货物目录
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 批量删除基础数据-危险货物目录
+     *
+     * @param IDs 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] IDs);
+
+    /**
+     * 逻辑删除基础数据-危险货物目录
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+}

+ 72 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/dao/PackCatalogMapper.java

@@ -0,0 +1,72 @@
+package cn.gov.customs.wxjy.base.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+import cn.gov.customs.wxjy.base.pojo.PackCatalog;
+import cn.gov.customs.wxjy.base.pojo.PackCatalogQuery;
+
+/**
+ * 包装种类目录Mapper接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Mapper
+public interface PackCatalogMapper {
+    /**
+     * 查询包装种类目录
+     *
+     * @param ID 包装种类目录主键
+     * @return 包装种类目录
+     */
+    public PackCatalog selectByID(String ID);
+
+    /**
+     * 查询包装种类目录列表
+     *
+     * @param packCatalog 包装种类目录
+     * @return 包装种类目录集合
+     */
+    public List<PackCatalog> selectList(PackCatalogQuery packCatalog);
+
+    /**
+     * 新增包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    public int insert(PackCatalog packCatalog);
+
+    /**
+     * 修改包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    public int update(PackCatalog packCatalog);
+
+    /**
+     * 删除包装种类目录
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 批量删除包装种类目录
+     *
+     * @param IDs 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] IDs);
+
+    /**
+     * 逻辑删除包装种类目录
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+}

+ 74 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/ChemicalsCatalog.java

@@ -0,0 +1,74 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import cn.gov.customs.wxjy.common.annotation.Excel;
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+
+/**
+ * 基数数据-危化品目录对象 WXJY_CHEMICALS_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class ChemicalsCatalog extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String id;
+
+    /** 危化品品名 */
+    @Excel(name = "危化品品名")
+    private String dangerName;
+
+    /** 英文名 */
+    @Excel(name = "英文名")
+    private String enName;
+
+    /** 危化品别名 */
+    @Excel(name = "危化品别名")
+    private String chAlias;
+
+    /** 英文别名 */
+    @Excel(name = "英文别名")
+    private String enAlias;
+
+    /** 化学方程式 */
+    @Excel(name = "化学方程式")
+    private String chemicalsEq;
+
+    /** 危化品目录的CAS号 */
+    @Excel(name = "危化品目录的CAS号")
+    private String cas;
+
+    /** UN编码 */
+    @Excel(name = "UN编码")
+    private String unCode;
+
+    /** 危险说明 */
+    @Excel(name = "危险说明")
+    private String dangerStatement;
+
+    /** 防范说明 */
+    @Excel(name = "防范说明")
+    private String preventStatement;
+
+    /** 中文信号词 */
+    @Excel(name = "中文信号词")
+    private String chSignalWord;
+
+    /** 英文信号词 */
+    @Excel(name = "英文信号词")
+    private String enSignalWord;
+
+    /** 标签 */
+    @Excel(name = "标签")
+    private String signs;
+
+    /** 序号 */
+    @Excel(name = "序号")
+    private String indexNum;
+
+}

+ 65 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/ChemicalsCatalogQuery.java

@@ -0,0 +1,65 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 基数数据-危化品目录对象 WXJY_CHEMICALS_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class ChemicalsCatalogQuery extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+    /** 主键 */
+    private String id;
+
+    /** 危化品品名 */
+    private String dangerName;
+
+    /** 英文名 */
+    private String enName;
+
+    /** 危化品别名 */
+    private String chAlias;
+
+    /** 英文别名 */
+    private String enAlias;
+
+    /** 化学方程式 */
+    private String chemicalsEq;
+
+    /** 危化品目录的CAS号 */
+    private String cas;
+
+    /** UN编码 */
+    private String unCode;
+
+    /** 危险说明 */
+    private String dangerStatement;
+
+    /** 防范说明 */
+    private String preventStatement;
+
+    /** 中文信号词 */
+    private String chSignalWord;
+
+    /** 英文信号词 */
+    private String enSignalWord;
+
+    /** 标签 */
+    private String signs;
+
+    /** 序号 */
+    private String indexNum;
+
+
+    private String beginDate;
+    private String endDate;
+    private int pageIndex;
+    private int pageSize;
+}

+ 98 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/GoodsCatalog.java

@@ -0,0 +1,98 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import cn.gov.customs.wxjy.common.annotation.Excel;
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+
+/**
+ * 基础数据-危险货物目录对象 WXJY_GOODS_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class GoodsCatalog extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private String id;
+
+    /** UN编码/联合国编号 */
+    @Excel(name = "UN编码/联合国编号")
+    private String unCode;
+
+    /** 正确运输中文名称 */
+    @Excel(name = "正确运输中文名称")
+    private String chName;
+
+    /** 危险类别 */
+    @Excel(name = "危险类别")
+    private String dangerSort;
+
+    /** 副危险 */
+    @Excel(name = "副危险")
+    private String viceDanger;
+
+    /** 包装类别(1、普包性能;2、危包性能;3、危包使用) */
+    @Excel(name = "包装类别(1、普包性能;2、危包性能;3、危包使用)")
+    private String packType;
+
+    /** 特殊规定 */
+    @Excel(name = "特殊规定")
+    private String specialProvision;
+
+    /** 限量 */
+    @Excel(name = "限量")
+    private String limited;
+
+    /** 可免除量 */
+    @Excel(name = "可免除量")
+    private String exemptAmount;
+
+    /** 包装导则 */
+    @Excel(name = "包装导则")
+    private String packGuideline;
+
+    /** 包装规定 */
+    @Excel(name = "包装规定")
+    private String packProvision;
+
+    /** 中型散装容器导则 */
+    @Excel(name = "中型散装容器导则")
+    private String containerGuideline;
+
+    /** 中型散装容器规定 */
+    @Excel(name = "中型散装容器规定")
+    private String containerProvision;
+
+    /** 罐柜导则 */
+    @Excel(name = "罐柜导则")
+    private String tankGuideline;
+
+    /** 罐柜特殊规定 */
+    @Excel(name = "罐柜特殊规定")
+    private String tankProvision;
+
+    /** EmS */
+    @Excel(name = "EmS")
+    private String ems;
+
+    /** 积载与操作 */
+    @Excel(name = "积载与操作")
+    private String stowageOperate;
+
+    /** 隔离 */
+    @Excel(name = "隔离")
+    private String isolation;
+
+    /** 特性与注意事项 */
+    @Excel(name = "特性与注意事项")
+    private String feature;
+
+    /** 标签 */
+    @Excel(name = "标签")
+    private String signs;
+
+}

+ 83 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/GoodsCatalogQuery.java

@@ -0,0 +1,83 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 基础数据-危险货物目录对象 WXJY_GOODS_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class GoodsCatalogQuery extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+    /** 主键 */
+    private String id;
+
+    /** UN编码/联合国编号 */
+    private String unCode;
+
+    /** 正确运输中文名称 */
+    private String chName;
+
+    /** 危险类别 */
+    private String dangerSort;
+
+    /** 副危险 */
+    private String viceDanger;
+
+    /** 包装类别(1、普包性能;2、危包性能;3、危包使用) */
+    private String packType;
+
+    /** 特殊规定 */
+    private String specialProvision;
+
+    /** 限量 */
+    private String limited;
+
+    /** 可免除量 */
+    private String exemptAmount;
+
+    /** 包装导则 */
+    private String packGuideline;
+
+    /** 包装规定 */
+    private String packProvision;
+
+    /** 中型散装容器导则 */
+    private String containerGuideline;
+
+    /** 中型散装容器规定 */
+    private String containerProvision;
+
+    /** 罐柜导则 */
+    private String tankGuideline;
+
+    /** 罐柜特殊规定 */
+    private String tankProvision;
+
+    /** EmS */
+    private String ems;
+
+    /** 积载与操作 */
+    private String stowageOperate;
+
+    /** 隔离 */
+    private String isolation;
+
+    /** 特性与注意事项 */
+    private String feature;
+
+    /** 标签 */
+    private String signs;
+
+
+    private String beginDate;
+    private String endDate;
+    private int pageIndex;
+    private int pageSize;
+}

+ 51 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/PackCatalog.java

@@ -0,0 +1,51 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import cn.gov.customs.wxjy.common.annotation.Excel;
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+
+/**
+ * 包装种类目录对象 WXJY_PACK_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class PackCatalog extends BaseEntity {
+private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    @Excel(name = "主键")
+    private String id;
+
+    /** 种类(大类) */
+    @Excel(name = "种类", readConverterExp = "大=类")
+    private String maxType;
+
+    /** 类别编码(小类) */
+    @Excel(name = "类别编码", readConverterExp = "小=类")
+    private String minTypeCode;
+
+    /** 类别名称(小类) */
+    @Excel(name = "类别名称", readConverterExp = "小=类")
+    private String minTypeName;
+
+    /** 要求 */
+    @Excel(name = "要求")
+    private String requireInfo;
+
+    /** 最大容量/L */
+    @Excel(name = "最大容量/L")
+    private String maxL;
+
+    /** 最大净重/kg */
+    @Excel(name = "最大净重/kg")
+    private String maxKg;
+
+    /** 危包状态(0、停产;1、正常) */
+    @Excel(name = "危包状态", readConverterExp = "0=、停产;1、正常")
+    private String packStatus;
+
+}

+ 47 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/pojo/PackCatalogQuery.java

@@ -0,0 +1,47 @@
+package cn.gov.customs.wxjy.base.pojo;
+
+import cn.gov.customs.wxjy.common.core.domain.BaseEntity;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 包装种类目录对象 WXJY_PACK_CATALOG
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Data
+public class PackCatalogQuery extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+    /** 主键 */
+    private String id;
+
+    /** 种类(大类) */
+    private String maxType;
+
+    /** 类别编码(小类) */
+    private String minTypeCode;
+
+    /** 类别名称(小类) */
+    private String minTypeName;
+
+    /** 要求 */
+    private String requireInfo;
+
+    /** 最大容量/L */
+    private String maxL;
+
+    /** 最大净重/kg */
+    private String maxKg;
+
+    /** 危包状态(0、停产;1、正常) */
+    private String packStatus;
+
+
+    private String beginDate;
+    private String endDate;
+    private int pageIndex;
+    private int pageSize;
+}

+ 89 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IChemicalsCatalogService.java

@@ -0,0 +1,89 @@
+package cn.gov.customs.wxjy.base.service;
+
+import java.util.List;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalog;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalogQuery;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 基数数据-危化品目录Service接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+public interface IChemicalsCatalogService {
+    /**
+     * 查询基数数据-危化品目录
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 基数数据-危化品目录
+     */
+    public ChemicalsCatalog selectByID(String ID);
+
+    /**
+     * 分页查询基数数据-危化品目录列表
+     *
+     * @param query
+     * @return 基数数据-危化品目录集合
+     */
+    public PageInfo<ChemicalsCatalog> selectPageList(ChemicalsCatalogQuery query);
+
+    /**
+     * 查询基数数据-危化品目录列表
+     *
+     * @param query
+     * @return 基数数据-危化品目录集合
+     */
+    public List<ChemicalsCatalog> selectList(ChemicalsCatalogQuery query);
+
+    /**
+     * 新增基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    public int insert(ChemicalsCatalog chemicalsCatalog);
+
+    /**
+     * 修改基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    public int update(ChemicalsCatalog chemicalsCatalog);
+
+    /**
+     * 批量删除基数数据-危化品目录
+     *
+     * @param ids 需要删除的ids主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] ids);
+
+    /**
+     * 删除基数数据-危化品目录信息
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 逻辑删除基数数据-危化品目录信息
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+
+    /**
+     * 导入基数数据-危化品目录数据
+     *
+     * @param chemicalsCatalogList 基数数据-危化品目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    public String importChemicalsCatalog(List<ChemicalsCatalog> chemicalsCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser);
+}

+ 89 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IGoodsCatalogService.java

@@ -0,0 +1,89 @@
+package cn.gov.customs.wxjy.base.service;
+
+import java.util.List;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalog;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalogQuery;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 基础数据-危险货物目录Service接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+public interface IGoodsCatalogService {
+    /**
+     * 查询基础数据-危险货物目录
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 基础数据-危险货物目录
+     */
+    public GoodsCatalog selectByID(String ID);
+
+    /**
+     * 分页查询基础数据-危险货物目录列表
+     *
+     * @param query
+     * @return 基础数据-危险货物目录集合
+     */
+    public PageInfo<GoodsCatalog> selectPageList(GoodsCatalogQuery query);
+
+    /**
+     * 查询基础数据-危险货物目录列表
+     *
+     * @param query
+     * @return 基础数据-危险货物目录集合
+     */
+    public List<GoodsCatalog> selectList(GoodsCatalogQuery query);
+
+    /**
+     * 新增基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    public int insert(GoodsCatalog goodsCatalog);
+
+    /**
+     * 修改基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    public int update(GoodsCatalog goodsCatalog);
+
+    /**
+     * 批量删除基础数据-危险货物目录
+     *
+     * @param ids 需要删除的ids主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] ids);
+
+    /**
+     * 删除基础数据-危险货物目录信息
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 逻辑删除基础数据-危险货物目录信息
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+
+    /**
+     * 导入基础数据-危险货物目录数据
+     *
+     * @param goodsCatalogList 基础数据-危险货物目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    public String importGoodsCatalog(List<GoodsCatalog> goodsCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser);
+}

+ 89 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/IPackCatalogService.java

@@ -0,0 +1,89 @@
+package cn.gov.customs.wxjy.base.service;
+
+import java.util.List;
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.base.pojo.PackCatalog;
+import cn.gov.customs.wxjy.base.pojo.PackCatalogQuery;
+import com.github.pagehelper.PageInfo;
+
+/**
+ * 包装种类目录Service接口
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+public interface IPackCatalogService {
+    /**
+     * 查询包装种类目录
+     *
+     * @param ID 包装种类目录主键
+     * @return 包装种类目录
+     */
+    public PackCatalog selectByID(String ID);
+
+    /**
+     * 分页查询包装种类目录列表
+     *
+     * @param query
+     * @return 包装种类目录集合
+     */
+    public PageInfo<PackCatalog> selectPageList(PackCatalogQuery query);
+
+    /**
+     * 查询包装种类目录列表
+     *
+     * @param query
+     * @return 包装种类目录集合
+     */
+    public List<PackCatalog> selectList(PackCatalogQuery query);
+
+    /**
+     * 新增包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    public int insert(PackCatalog packCatalog);
+
+    /**
+     * 修改包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    public int update(PackCatalog packCatalog);
+
+    /**
+     * 批量删除包装种类目录
+     *
+     * @param ids 需要删除的ids主键集合
+     * @return 结果
+     */
+    public int deleteByIDs(String[] ids);
+
+    /**
+     * 删除包装种类目录信息
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    public int deleteByID(String ID);
+
+    /**
+     * 逻辑删除包装种类目录信息
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    public int logicDelete(String ID);
+
+    /**
+     * 导入包装种类目录数据
+     *
+     * @param packCatalogList 包装种类目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    public String importPackCatalog(List<PackCatalog> packCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser);
+}

+ 172 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/ChemicalsCatalogServiceImpl.java

@@ -0,0 +1,172 @@
+package cn.gov.customs.wxjy.base.service.impl;
+
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.common.exception.ServiceException;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import cn.gov.customs.wxjy.common.utils.bean.BeanValidators;
+import cn.gov.customs.wxjy.common.utils.uuid.SnowflakeIdWorker;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.validation.Validator;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import cn.gov.customs.wxjy.base.dao.ChemicalsCatalogMapper;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalog;
+import cn.gov.customs.wxjy.base.pojo.ChemicalsCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IChemicalsCatalogService;
+
+/**
+ * 基数数据-危化品目录Service业务层处理
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class ChemicalsCatalogServiceImpl implements IChemicalsCatalogService {
+
+    private final ChemicalsCatalogMapper chemicalsCatalogMapper;
+
+    private final Validator validator;
+
+    /**
+     * 查询基数数据-危化品目录
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 基数数据-危化品目录
+     */
+    @Override
+    public ChemicalsCatalog selectByID(String ID) {
+        return chemicalsCatalogMapper.selectByID(ID);
+    }
+
+    /**
+     * 分页查询基数数据-危化品目录列表
+     *
+     * @param query
+     * @return 基数数据-危化品目录
+     */
+    @Override
+    public PageInfo<ChemicalsCatalog> selectPageList(ChemicalsCatalogQuery query) {
+        return PageInfo.of(chemicalsCatalogMapper.selectList(query));
+    }
+
+    /**
+     * 查询基数数据-危化品目录列表
+     *
+     * @param query
+     * @return 基数数据-危化品目录
+     */
+    @Override
+    public List<ChemicalsCatalog> selectList(ChemicalsCatalogQuery query) {
+        return chemicalsCatalogMapper.selectList(query);
+    }
+
+    /**
+     * 新增基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    @Override
+    public int insert(ChemicalsCatalog chemicalsCatalog) {
+            return chemicalsCatalogMapper.insert(chemicalsCatalog);
+    }
+
+    /**
+     * 修改基数数据-危化品目录
+     *
+     * @param chemicalsCatalog 基数数据-危化品目录
+     * @return 结果
+     */
+    @Override
+    public int update(ChemicalsCatalog chemicalsCatalog) {
+        return chemicalsCatalogMapper.update(chemicalsCatalog);
+    }
+
+    /**
+     * 批量删除基数数据-危化品目录
+     *
+     * @param ids 需要删除的基数数据-危化品目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByIDs(String[] ids) {
+        return chemicalsCatalogMapper.deleteByIDs(ids);
+    }
+
+    /**
+     * 删除基数数据-危化品目录信息
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByID(String ID) {
+        return chemicalsCatalogMapper.deleteByID(ID);
+    }
+
+    /**
+     * 逻辑删除基数数据-危化品目录信息
+     *
+     * @param ID 基数数据-危化品目录主键
+     * @return 结果
+     */
+    @Override
+    public int logicDelete(String ID) {
+
+        return chemicalsCatalogMapper.logicDelete(ID);
+    }
+
+    /**
+     * 导入基数数据-危化品目录数据
+     *
+     * @param chemicalsCatalogList 基数数据-危化品目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importChemicalsCatalog(List<ChemicalsCatalog> chemicalsCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser) {
+        if (CollectionUtils.isEmpty(chemicalsCatalogList)) {
+            throw new ServiceException("导入数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (ChemicalsCatalog chemicalsCatalog : chemicalsCatalogList) {
+            try {
+
+                BeanValidators.validateWithException(validator, chemicalsCatalog);
+                //id名称不统一,自行处理
+                chemicalsCatalog.setCreateTime(DateUtils.getNowDate());
+                chemicalsCatalog.setUpdateTime(DateUtils.getNowDate());
+                chemicalsCatalog.setCreateUser(cacpTransUser.getUserId());
+                chemicalsCatalog.setCreateDept(cacpTransUser.getParentGuid());
+
+                chemicalsCatalogMapper.insert(chemicalsCatalog);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、 " + cacpTransUser.getUserName() + " 导入成功");
+
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、" + cacpTransUser.getUserName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 172 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/GoodsCatalogServiceImpl.java

@@ -0,0 +1,172 @@
+package cn.gov.customs.wxjy.base.service.impl;
+
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.common.exception.ServiceException;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import cn.gov.customs.wxjy.common.utils.bean.BeanValidators;
+import cn.gov.customs.wxjy.common.utils.uuid.SnowflakeIdWorker;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.validation.Validator;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import cn.gov.customs.wxjy.base.dao.GoodsCatalogMapper;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalog;
+import cn.gov.customs.wxjy.base.pojo.GoodsCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IGoodsCatalogService;
+
+/**
+ * 基础数据-危险货物目录Service业务层处理
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class GoodsCatalogServiceImpl implements IGoodsCatalogService {
+
+    private final GoodsCatalogMapper goodsCatalogMapper;
+
+    private final Validator validator;
+
+    /**
+     * 查询基础数据-危险货物目录
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 基础数据-危险货物目录
+     */
+    @Override
+    public GoodsCatalog selectByID(String ID) {
+        return goodsCatalogMapper.selectByID(ID);
+    }
+
+    /**
+     * 分页查询基础数据-危险货物目录列表
+     *
+     * @param query
+     * @return 基础数据-危险货物目录
+     */
+    @Override
+    public PageInfo<GoodsCatalog> selectPageList(GoodsCatalogQuery query) {
+        return PageInfo.of(goodsCatalogMapper.selectList(query));
+    }
+
+    /**
+     * 查询基础数据-危险货物目录列表
+     *
+     * @param query
+     * @return 基础数据-危险货物目录
+     */
+    @Override
+    public List<GoodsCatalog> selectList(GoodsCatalogQuery query) {
+        return goodsCatalogMapper.selectList(query);
+    }
+
+    /**
+     * 新增基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    @Override
+    public int insert(GoodsCatalog goodsCatalog) {
+            return goodsCatalogMapper.insert(goodsCatalog);
+    }
+
+    /**
+     * 修改基础数据-危险货物目录
+     *
+     * @param goodsCatalog 基础数据-危险货物目录
+     * @return 结果
+     */
+    @Override
+    public int update(GoodsCatalog goodsCatalog) {
+        return goodsCatalogMapper.update(goodsCatalog);
+    }
+
+    /**
+     * 批量删除基础数据-危险货物目录
+     *
+     * @param ids 需要删除的基础数据-危险货物目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByIDs(String[] ids) {
+        return goodsCatalogMapper.deleteByIDs(ids);
+    }
+
+    /**
+     * 删除基础数据-危险货物目录信息
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByID(String ID) {
+        return goodsCatalogMapper.deleteByID(ID);
+    }
+
+    /**
+     * 逻辑删除基础数据-危险货物目录信息
+     *
+     * @param ID 基础数据-危险货物目录主键
+     * @return 结果
+     */
+    @Override
+    public int logicDelete(String ID) {
+
+        return goodsCatalogMapper.logicDelete(ID);
+    }
+
+    /**
+     * 导入基础数据-危险货物目录数据
+     *
+     * @param goodsCatalogList 基础数据-危险货物目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importGoodsCatalog(List<GoodsCatalog> goodsCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser) {
+        if (CollectionUtils.isEmpty(goodsCatalogList)) {
+            throw new ServiceException("导入数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (GoodsCatalog goodsCatalog : goodsCatalogList) {
+            try {
+
+                BeanValidators.validateWithException(validator, goodsCatalog);
+                //id名称不统一,自行处理
+                goodsCatalog.setCreateTime(DateUtils.getNowDate());
+                goodsCatalog.setUpdateTime(DateUtils.getNowDate());
+                goodsCatalog.setCreateUser(cacpTransUser.getUserId());
+                goodsCatalog.setCreateDept(cacpTransUser.getParentGuid());
+
+                goodsCatalogMapper.insert(goodsCatalog);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、 " + cacpTransUser.getUserName() + " 导入成功");
+
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、" + cacpTransUser.getUserName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 172 - 0
wxjy-wxjy-service/src/main/java/cn/gov/customs/wxjy/base/service/impl/PackCatalogServiceImpl.java

@@ -0,0 +1,172 @@
+package cn.gov.customs.wxjy.base.service.impl;
+
+import cn.gov.customs.cacp.sdks.core.user.trans.CacpTransUser;
+import cn.gov.customs.wxjy.common.exception.ServiceException;
+import cn.gov.customs.wxjy.common.utils.StringUtils;
+import cn.gov.customs.wxjy.common.utils.bean.BeanValidators;
+import cn.gov.customs.wxjy.common.utils.uuid.SnowflakeIdWorker;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import javax.validation.Validator;
+import java.util.List;
+import org.apache.commons.collections4.CollectionUtils;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import com.github.pagehelper.PageInfo;
+import cn.gov.customs.wxjy.common.utils.DateUtils;
+import cn.gov.customs.wxjy.base.dao.PackCatalogMapper;
+import cn.gov.customs.wxjy.base.pojo.PackCatalog;
+import cn.gov.customs.wxjy.base.pojo.PackCatalogQuery;
+import cn.gov.customs.wxjy.base.service.IPackCatalogService;
+
+/**
+ * 包装种类目录Service业务层处理
+ *
+ * @author xiong
+ * @date 2025-12-16
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class PackCatalogServiceImpl implements IPackCatalogService {
+
+    private final PackCatalogMapper packCatalogMapper;
+
+    private final Validator validator;
+
+    /**
+     * 查询包装种类目录
+     *
+     * @param ID 包装种类目录主键
+     * @return 包装种类目录
+     */
+    @Override
+    public PackCatalog selectByID(String ID) {
+        return packCatalogMapper.selectByID(ID);
+    }
+
+    /**
+     * 分页查询包装种类目录列表
+     *
+     * @param query
+     * @return 包装种类目录
+     */
+    @Override
+    public PageInfo<PackCatalog> selectPageList(PackCatalogQuery query) {
+        return PageInfo.of(packCatalogMapper.selectList(query));
+    }
+
+    /**
+     * 查询包装种类目录列表
+     *
+     * @param query
+     * @return 包装种类目录
+     */
+    @Override
+    public List<PackCatalog> selectList(PackCatalogQuery query) {
+        return packCatalogMapper.selectList(query);
+    }
+
+    /**
+     * 新增包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    @Override
+    public int insert(PackCatalog packCatalog) {
+            return packCatalogMapper.insert(packCatalog);
+    }
+
+    /**
+     * 修改包装种类目录
+     *
+     * @param packCatalog 包装种类目录
+     * @return 结果
+     */
+    @Override
+    public int update(PackCatalog packCatalog) {
+        return packCatalogMapper.update(packCatalog);
+    }
+
+    /**
+     * 批量删除包装种类目录
+     *
+     * @param ids 需要删除的包装种类目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByIDs(String[] ids) {
+        return packCatalogMapper.deleteByIDs(ids);
+    }
+
+    /**
+     * 删除包装种类目录信息
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteByID(String ID) {
+        return packCatalogMapper.deleteByID(ID);
+    }
+
+    /**
+     * 逻辑删除包装种类目录信息
+     *
+     * @param ID 包装种类目录主键
+     * @return 结果
+     */
+    @Override
+    public int logicDelete(String ID) {
+
+        return packCatalogMapper.logicDelete(ID);
+    }
+
+    /**
+     * 导入包装种类目录数据
+     *
+     * @param packCatalogList 包装种类目录数据列表
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
+     * @param cacpTransUser 操作用户
+     * @return 结果
+     */
+    @Override
+    public String importPackCatalog(List<PackCatalog> packCatalogList, Boolean isUpdateSupport, CacpTransUser cacpTransUser) {
+        if (CollectionUtils.isEmpty(packCatalogList)) {
+            throw new ServiceException("导入数据不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (PackCatalog packCatalog : packCatalogList) {
+            try {
+
+                BeanValidators.validateWithException(validator, packCatalog);
+                //id名称不统一,自行处理
+                packCatalog.setCreateTime(DateUtils.getNowDate());
+                packCatalog.setUpdateTime(DateUtils.getNowDate());
+                packCatalog.setCreateUser(cacpTransUser.getUserId());
+                packCatalog.setCreateDept(cacpTransUser.getParentGuid());
+
+                packCatalogMapper.insert(packCatalog);
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、 " + cacpTransUser.getUserName() + " 导入成功");
+
+            } catch (Exception e) {
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、" + cacpTransUser.getUserName() + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+                log.error(msg, e);
+            }
+        }
+        if (failureNum > 0) {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new ServiceException(failureMsg.toString());
+        } else {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+}

+ 295 - 0
wxjy-wxjy-service/src/main/resources/mapper/base/ChemicalsCatalogMapper.xml

@@ -0,0 +1,295 @@
+<?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="cn.gov.customs.wxjy.base.dao.ChemicalsCatalogMapper">
+
+    <resultMap type="ChemicalsCatalog" id="ChemicalsCatalogResult">
+        <result property="id" column="ID"/>
+        <result property="dangerName" column="DANGER_NAME"/>
+        <result property="enName" column="EN_NAME"/>
+        <result property="chAlias" column="CH_ALIAS"/>
+        <result property="enAlias" column="EN_ALIAS"/>
+        <result property="chemicalsEq" column="CHEMICALS_EQ"/>
+        <result property="cas" column="CAS"/>
+        <result property="unCode" column="UN_CODE"/>
+        <result property="dangerStatement" column="DANGER_STATEMENT"/>
+        <result property="preventStatement" column="PREVENT_STATEMENT"/>
+        <result property="chSignalWord" column="CH_SIGNAL_WORD"/>
+        <result property="enSignalWord" column="EN_SIGNAL_WORD"/>
+        <result property="signs" column="SIGNS"/>
+        <result property="remark" column="REMARK"/>
+        <result property="createUser" column="CREATE_USER"/>
+        <result property="createDept" column="CREATE_DEPT"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="updateUser" column="UPDATE_USER"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+        <result property="isDeleted" column="IS_DELETED"/>
+        <result property="status" column="STATUS"/>
+        <result property="indexNum" column="INDEX_NUM"/>
+    </resultMap>
+
+    <sql id="baseVo">
+        select ID, DANGER_NAME, EN_NAME, CH_ALIAS, EN_ALIAS, CHEMICALS_EQ, CAS, UN_CODE, DANGER_STATEMENT, PREVENT_STATEMENT, CH_SIGNAL_WORD, EN_SIGNAL_WORD, SIGNS, REMARK, CREATE_USER, CREATE_DEPT, CREATE_TIME, UPDATE_USER, UPDATE_TIME, IS_DELETED, STATUS, INDEX_NUM
+        from WXJY_CHEMICALS_CATALOG
+    </sql>
+
+    <select id="selectList" parameterType="ChemicalsCatalogQuery" resultMap="ChemicalsCatalogResult">
+        <include refid="baseVo"/>
+        <where>
+            and IS_DELETED = 0
+        <if test="dangerName != null  and dangerName != ''">
+            and DANGER_NAME like concat('%', #{dangerName}, '%')
+        </if>
+        <if test="enName != null  and enName != ''">
+            and EN_NAME like concat('%', #{enName}, '%')
+        </if>
+        <if test="chAlias != null  and chAlias != ''">
+            and CH_ALIAS = #{chAlias}
+        </if>
+        <if test="enAlias != null  and enAlias != ''">
+            and EN_ALIAS = #{enAlias}
+        </if>
+        <if test="chemicalsEq != null  and chemicalsEq != ''">
+            and CHEMICALS_EQ = #{chemicalsEq}
+        </if>
+        <if test="cas != null  and cas != ''">
+            and CAS like concat('%', #{cas}, '%')
+        </if>
+        <if test="unCode != null  and unCode != ''">
+            and UN_CODE = #{unCode}
+        </if>
+        <if test="dangerStatement != null  and dangerStatement != ''">
+            and DANGER_STATEMENT = #{dangerStatement}
+        </if>
+        <if test="preventStatement != null  and preventStatement != ''">
+            and PREVENT_STATEMENT = #{preventStatement}
+        </if>
+        <if test="chSignalWord != null  and chSignalWord != ''">
+            and CH_SIGNAL_WORD = #{chSignalWord}
+        </if>
+        <if test="enSignalWord != null  and enSignalWord != ''">
+            and EN_SIGNAL_WORD = #{enSignalWord}
+        </if>
+        <if test="signs != null  and signs != ''">
+            and SIGNS = #{signs}
+        </if>
+        <if test="remark != null  and remark != ''">
+            and REMARK = #{remark}
+        </if>
+        <if test="createUser != null  and createUser != ''">
+            and CREATE_USER = #{createUser}
+        </if>
+        <if test="createDept != null  and createDept != ''">
+            and CREATE_DEPT = #{createDept}
+        </if>
+        <if test="createTime != null  and createTime != ''">
+            and CREATE_TIME = #{createTime}
+        </if>
+        <if test="updateUser != null  and updateUser != ''">
+            and UPDATE_USER = #{updateUser}
+        </if>
+        <if test="updateTime != null  and updateTime != ''">
+            and UPDATE_TIME = #{updateTime}
+        </if>
+        <if test="isDeleted != null  and isDeleted != ''">
+            and IS_DELETED = #{isDeleted}
+        </if>
+        <if test="status != null  and status != ''">
+            and STATUS = #{status}
+        </if>
+        <if test="indexNum != null  and indexNum != ''">
+            and INDEX_NUM = #{indexNum}
+        </if>
+        </where>
+        order by update_time desc
+    </select>
+
+    <select id="selectByID" parameterType="String"
+        resultMap="ChemicalsCatalogResult">
+        <include refid="baseVo"/>
+        where ID = #{ID}
+    </select>
+
+    <insert id="insert" parameterType="ChemicalsCatalog">
+        insert into WXJY_CHEMICALS_CATALOG
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">id,
+            </if>
+            <if test="dangerName != null">DANGER_NAME,
+            </if>
+            <if test="enName != null">EN_NAME,
+            </if>
+            <if test="chAlias != null">CH_ALIAS,
+            </if>
+            <if test="enAlias != null">EN_ALIAS,
+            </if>
+            <if test="chemicalsEq != null">CHEMICALS_EQ,
+            </if>
+            <if test="cas != null">CAS,
+            </if>
+            <if test="unCode != null">UN_CODE,
+            </if>
+            <if test="dangerStatement != null">DANGER_STATEMENT,
+            </if>
+            <if test="preventStatement != null">PREVENT_STATEMENT,
+            </if>
+            <if test="chSignalWord != null">CH_SIGNAL_WORD,
+            </if>
+            <if test="enSignalWord != null">EN_SIGNAL_WORD,
+            </if>
+            <if test="signs != null">SIGNS,
+            </if>
+            <if test="remark != null">REMARK,
+            </if>
+            <if test="createUser != null">CREATE_USER,
+            </if>
+            <if test="createDept != null">CREATE_DEPT,
+            </if>
+            <if test="createTime != null">CREATE_TIME,
+            </if>
+            <if test="updateUser != null">UPDATE_USER,
+            </if>
+            <if test="updateTime != null">UPDATE_TIME,
+            </if>
+            <if test="isDeleted != null">IS_DELETED,
+            </if>
+            <if test="status != null">STATUS,
+            </if>
+            <if test="indexNum != null">INDEX_NUM,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},
+            </if>
+            <if test="dangerName != null">#{dangerName},
+            </if>
+            <if test="enName != null">#{enName},
+            </if>
+            <if test="chAlias != null">#{chAlias},
+            </if>
+            <if test="enAlias != null">#{enAlias},
+            </if>
+            <if test="chemicalsEq != null">#{chemicalsEq},
+            </if>
+            <if test="cas != null">#{cas},
+            </if>
+            <if test="unCode != null">#{unCode},
+            </if>
+            <if test="dangerStatement != null">#{dangerStatement},
+            </if>
+            <if test="preventStatement != null">#{preventStatement},
+            </if>
+            <if test="chSignalWord != null">#{chSignalWord},
+            </if>
+            <if test="enSignalWord != null">#{enSignalWord},
+            </if>
+            <if test="signs != null">#{signs},
+            </if>
+            <if test="remark != null">#{remark},
+            </if>
+            <if test="createUser != null">#{createUser},
+            </if>
+            <if test="createDept != null">#{createDept},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateUser != null">#{updateUser},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="isDeleted != null">#{isDeleted},
+            </if>
+            <if test="status != null">#{status},
+            </if>
+            <if test="indexNum != null">#{indexNum},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="ChemicalsCatalog">
+        update WXJY_CHEMICALS_CATALOG
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="dangerName != null">DANGER_NAME =
+                #{dangerName},
+            </if>
+            <if test="enName != null">EN_NAME =
+                #{enName},
+            </if>
+            <if test="chAlias != null">CH_ALIAS =
+                #{chAlias},
+            </if>
+            <if test="enAlias != null">EN_ALIAS =
+                #{enAlias},
+            </if>
+            <if test="chemicalsEq != null">CHEMICALS_EQ =
+                #{chemicalsEq},
+            </if>
+            <if test="cas != null">CAS =
+                #{cas},
+            </if>
+            <if test="unCode != null">UN_CODE =
+                #{unCode},
+            </if>
+            <if test="dangerStatement != null">DANGER_STATEMENT =
+                #{dangerStatement},
+            </if>
+            <if test="preventStatement != null">PREVENT_STATEMENT =
+                #{preventStatement},
+            </if>
+            <if test="chSignalWord != null">CH_SIGNAL_WORD =
+                #{chSignalWord},
+            </if>
+            <if test="enSignalWord != null">EN_SIGNAL_WORD =
+                #{enSignalWord},
+            </if>
+            <if test="signs != null">SIGNS =
+                #{signs},
+            </if>
+            <if test="remark != null">REMARK =
+                #{remark},
+            </if>
+            <if test="createUser != null">CREATE_USER =
+                #{createUser},
+            </if>
+            <if test="createDept != null">CREATE_DEPT =
+                #{createDept},
+            </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="isDeleted != null">IS_DELETED =
+                #{isDeleted},
+            </if>
+            <if test="status != null">STATUS =
+                #{status},
+            </if>
+            <if test="indexNum != null">INDEX_NUM =
+                #{indexNum},
+            </if>
+        </trim>
+        where ID = #{id}
+    </update>
+
+    <delete id="deleteByID" parameterType="String">
+        delete
+        from WXJY_CHEMICALS_CATALOG where ID = #{id}
+    </delete>
+
+    <delete id="deleteByIDs" parameterType="String">
+        delete from WXJY_CHEMICALS_CATALOG where ID in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="logicDelete" parameterType="String">
+        update  WXJY_CHEMICALS_CATALOG set is_del = 1  where ID = #{id}
+    </delete>
+</mapper>

+ 350 - 0
wxjy-wxjy-service/src/main/resources/mapper/base/GoodsCatalogMapper.xml

@@ -0,0 +1,350 @@
+<?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="cn.gov.customs.wxjy.base.dao.GoodsCatalogMapper">
+
+    <resultMap type="GoodsCatalog" id="GoodsCatalogResult">
+        <result property="id" column="ID"/>
+        <result property="unCode" column="UN_CODE"/>
+        <result property="chName" column="CH_NAME"/>
+        <result property="dangerSort" column="DANGER_SORT"/>
+        <result property="viceDanger" column="VICE_DANGER"/>
+        <result property="packType" column="PACK_TYPE"/>
+        <result property="specialProvision" column="SPECIAL_PROVISION"/>
+        <result property="limited" column="LIMITED"/>
+        <result property="exemptAmount" column="EXEMPT_AMOUNT"/>
+        <result property="packGuideline" column="PACK_GUIDELINE"/>
+        <result property="packProvision" column="PACK_PROVISION"/>
+        <result property="containerGuideline" column="CONTAINER_GUIDELINE"/>
+        <result property="containerProvision" column="CONTAINER_PROVISION"/>
+        <result property="tankGuideline" column="TANK_GUIDELINE"/>
+        <result property="tankProvision" column="TANK_PROVISION"/>
+        <result property="ems" column="EMS"/>
+        <result property="stowageOperate" column="STOWAGE_OPERATE"/>
+        <result property="isolation" column="ISOLATION"/>
+        <result property="feature" column="FEATURE"/>
+        <result property="createUser" column="CREATE_USER"/>
+        <result property="createDept" column="CREATE_DEPT"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="updateUser" column="UPDATE_USER"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+        <result property="isDeleted" column="IS_DELETED"/>
+        <result property="status" column="STATUS"/>
+        <result property="signs" column="SIGNS"/>
+    </resultMap>
+
+    <sql id="baseVo">
+        select ID, UN_CODE, CH_NAME, DANGER_SORT, VICE_DANGER, PACK_TYPE, SPECIAL_PROVISION, LIMITED, EXEMPT_AMOUNT, PACK_GUIDELINE, PACK_PROVISION, CONTAINER_GUIDELINE, CONTAINER_PROVISION, TANK_GUIDELINE, TANK_PROVISION, EMS, STOWAGE_OPERATE, ISOLATION, FEATURE, CREATE_USER, CREATE_DEPT, CREATE_TIME, UPDATE_USER, UPDATE_TIME, IS_DELETED, STATUS, SIGNS
+        from WXJY_GOODS_CATALOG
+    </sql>
+
+    <select id="selectList" parameterType="GoodsCatalogQuery" resultMap="GoodsCatalogResult">
+        <include refid="baseVo"/>
+        <where>
+        and IS_DELETED = 0
+        <if test="unCode != null  and unCode != ''">
+            and UN_CODE like concat('%', #{unCode}, '%')
+        </if>
+        <if test="chName != null  and chName != ''">
+            and CH_NAME like concat('%', #{chName}, '%')
+        </if>
+        <if test="dangerSort != null  and dangerSort != ''">
+            and DANGER_SORT like concat('%', #{dangerSort}, '%')
+        </if>
+        <if test="viceDanger != null  and viceDanger != ''">
+            and VICE_DANGER like concat('%', #{viceDanger}, '%')
+        </if>
+        <if test="packType != null  and packType != ''">
+            and PACK_TYPE = #{packType}
+        </if>
+        <if test="specialProvision != null  and specialProvision != ''">
+            and SPECIAL_PROVISION = #{specialProvision}
+        </if>
+        <if test="limited != null  and limited != ''">
+            and LIMITED = #{limited}
+        </if>
+        <if test="exemptAmount != null  and exemptAmount != ''">
+            and EXEMPT_AMOUNT = #{exemptAmount}
+        </if>
+        <if test="packGuideline != null  and packGuideline != ''">
+            and PACK_GUIDELINE = #{packGuideline}
+        </if>
+        <if test="packProvision != null  and packProvision != ''">
+            and PACK_PROVISION = #{packProvision}
+        </if>
+        <if test="containerGuideline != null  and containerGuideline != ''">
+            and CONTAINER_GUIDELINE = #{containerGuideline}
+        </if>
+        <if test="containerProvision != null  and containerProvision != ''">
+            and CONTAINER_PROVISION = #{containerProvision}
+        </if>
+        <if test="tankGuideline != null  and tankGuideline != ''">
+            and TANK_GUIDELINE = #{tankGuideline}
+        </if>
+        <if test="tankProvision != null  and tankProvision != ''">
+            and TANK_PROVISION = #{tankProvision}
+        </if>
+        <if test="ems != null  and ems != ''">
+            and EMS = #{ems}
+        </if>
+        <if test="stowageOperate != null  and stowageOperate != ''">
+            and STOWAGE_OPERATE = #{stowageOperate}
+        </if>
+        <if test="isolation != null  and isolation != ''">
+            and ISOLATION = #{isolation}
+        </if>
+        <if test="feature != null  and feature != ''">
+            and FEATURE = #{feature}
+        </if>
+        <if test="createUser != null  and createUser != ''">
+            and CREATE_USER = #{createUser}
+        </if>
+        <if test="createDept != null  and createDept != ''">
+            and CREATE_DEPT = #{createDept}
+        </if>
+        <if test="createTime != null  and createTime != ''">
+            and CREATE_TIME = #{createTime}
+        </if>
+        <if test="updateUser != null  and updateUser != ''">
+            and UPDATE_USER = #{updateUser}
+        </if>
+        <if test="updateTime != null  and updateTime != ''">
+            and UPDATE_TIME = #{updateTime}
+        </if>
+        <if test="isDeleted != null  and isDeleted != ''">
+            and IS_DELETED = #{isDeleted}
+        </if>
+        <if test="status != null  and status != ''">
+            and STATUS = #{status}
+        </if>
+        <if test="signs != null  and signs != ''">
+            and SIGNS = #{SIGNS}
+        </if>
+        </where>
+        order by update_time desc
+    </select>
+
+    <select id="selectByID" parameterType="String"
+        resultMap="GoodsCatalogResult">
+        <include refid="baseVo"/>
+        where ID = #{id}
+    </select>
+
+    <insert id="insert" parameterType="GoodsCatalog">
+        insert into WXJY_GOODS_CATALOG
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">ID,
+            </if>
+            <if test="unCode != null">UN_CODE,
+            </if>
+            <if test="chName != null">CH_NAME,
+            </if>
+            <if test="dangerSort != null">DANGER_SORT,
+            </if>
+            <if test="viceDanger != null">VICE_DANGER,
+            </if>
+            <if test="packType != null">PACK_TYPE,
+            </if>
+            <if test="specialProvision != null">SPECIAL_PROVISION,
+            </if>
+            <if test="limited != null">LIMITED,
+            </if>
+            <if test="exemptAmount != null">EXEMPT_AMOUNT,
+            </if>
+            <if test="packGuideline != null">PACK_GUIDELINE,
+            </if>
+            <if test="packProvision != null">PACK_PROVISION,
+            </if>
+            <if test="containerGuideline != null">CONTAINER_GUIDELINE,
+            </if>
+            <if test="containerProvision != null">CONTAINER_PROVISION,
+            </if>
+            <if test="tankGuideline != null">TANK_GUIDELINE,
+            </if>
+            <if test="tankProvision != null">TANK_PROVISION,
+            </if>
+            <if test="ems != null">EMS,
+            </if>
+            <if test="stowageOperate != null">STOWAGE_OPERATE,
+            </if>
+            <if test="isolation != null">`ISOLATION`,
+            </if>
+            <if test="feature != null">FEATURE,
+            </if>
+            <if test="createUser != null">CREATE_USER,
+            </if>
+            <if test="createDept != null">CREATE_DEPT,
+            </if>
+            <if test="createTime != null">CREATE_TIME,
+            </if>
+            <if test="updateUser != null">UPDATE_USER,
+            </if>
+            <if test="updateTime != null">UPDATE_TIME,
+            </if>
+            <if test="isDeleted != null">IS_DELETED,
+            </if>
+            <if test="status != null">STATUS,
+            </if>
+            <if test="signs != null">SIGNS,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{ID},
+            </if>
+            <if test="unCode != null">#{unCode},
+            </if>
+            <if test="chName != null">#{chName},
+            </if>
+            <if test="dangerSort != null">#{dangerSort},
+            </if>
+            <if test="viceDanger != null">#{viceDanger},
+            </if>
+            <if test="packType != null">#{packType},
+            </if>
+            <if test="specialProvision != null">#{specialProvision},
+            </if>
+            <if test="limited != null">#{limited},
+            </if>
+            <if test="exemptAmount != null">#{exemptAmount},
+            </if>
+            <if test="packGuideline != null">#{packGuideline},
+            </if>
+            <if test="packProvision != null">#{packProvision},
+            </if>
+            <if test="containerGuideline != null">#{containerGuideline},
+            </if>
+            <if test="containerProvision != null">#{containerProvision},
+            </if>
+            <if test="tankGuideline != null">#{tankGuideline},
+            </if>
+            <if test="tankProvision != null">#{tankProvision},
+            </if>
+            <if test="ems != null">#{ems},
+            </if>
+            <if test="stowageOperate != null">#{stowageOperate},
+            </if>
+            <if test="isolation != null">#{isolation},
+            </if>
+            <if test="feature != null">#{feature},
+            </if>
+            <if test="createUser != null">#{createUser},
+            </if>
+            <if test="createDept != null">#{createDept},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateUser != null">#{updateUser},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="isDeleted != null">#{isDeleted},
+            </if>
+            <if test="status != null">#{status},
+            </if>
+            <if test="signs != null">#{signs},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="GoodsCatalog">
+        update WXJY_GOODS_CATALOG
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="unCode != null">UN_CODE =
+                #{unCode},
+            </if>
+            <if test="chName != null">CH_NAME =
+                #{chName},
+            </if>
+            <if test="dangerSort != null">DANGER_SORT =
+                #{dangerSort},
+            </if>
+            <if test="viceDanger != null">VICE_DANGER =
+                #{viceDanger},
+            </if>
+            <if test="packType != null">PACK_TYPE =
+                #{packType},
+            </if>
+            <if test="specialProvision != null">SPECIAL_PROVISION =
+                #{specialProvision},
+            </if>
+            <if test="limited != null">LIMITED =
+                #{limited},
+            </if>
+            <if test="exemptAmount != null">EXEMPT_AMOUNT =
+                #{exemptAmount},
+            </if>
+            <if test="packGuideline != null">PACK_GUIDELINE =
+                #{packGuideline},
+            </if>
+            <if test="packProvision != null">PACK_PROVISION =
+                #{packProvision},
+            </if>
+            <if test="containerGuideline != null">CONTAINER_GUIDELINE =
+                #{containerGuideline},
+            </if>
+            <if test="containerProvision != null">CONTAINER_PROVISION =
+                #{containerProvision},
+            </if>
+            <if test="tankGuideline != null">TANK_GUIDELINE =
+                #{tankGuideline},
+            </if>
+            <if test="tankProvision != null">TANK_PROVISION =
+                #{tankProvision},
+            </if>
+            <if test="ems != null">EMS =
+                #{ems},
+            </if>
+            <if test="stowageOperate != null">STOWAGE_OPERATE =
+                #{stowageOperate},
+            </if>
+            <if test="isolation != null">`ISOLATION` =
+                #{isolation},
+            </if>
+            <if test="feature != null">FEATURE =
+                #{feature},
+            </if>
+            <if test="createUser != null">CREATE_USER =
+                #{createUser},
+            </if>
+            <if test="createDept != null">CREATE_DEPT =
+                #{createDept},
+            </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="isDeleted != null">IS_DELETED =
+                #{isDeleted},
+            </if>
+            <if test="status != null">STATUS =
+                #{status},
+            </if>
+            <if test="signs != null">SIGNS =
+                #{signs},
+            </if>
+        </trim>
+        where ID = #{ID}
+    </update>
+
+    <delete id="deleteByID" parameterType="String">
+        delete
+        from WXJY_GOODS_CATALOG where ID = #{ID}
+    </delete>
+
+    <delete id="deleteByIDs" parameterType="String">
+        delete from WXJY_GOODS_CATALOG where ID in
+        <foreach item="ID" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="logicDelete" parameterType="String">
+        update  WXJY_GOODS_CATALOG set is_del = 1  where ID = #{id}
+    </delete>
+</mapper>

+ 221 - 0
wxjy-wxjy-service/src/main/resources/mapper/base/PackCatalogMapper.xml

@@ -0,0 +1,221 @@
+<?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="cn.gov.customs.wxjy.base.dao.PackCatalogMapper">
+
+    <resultMap type="PackCatalog" id="PackCatalogResult">
+        <result property="id" column="ID"/>
+        <result property="createUser" column="CREATE_USER"/>
+        <result property="createDept" column="CREATE_DEPT"/>
+        <result property="createTime" column="CREATE_TIME"/>
+        <result property="updateUser" column="UPDATE_USER"/>
+        <result property="updateTime" column="UPDATE_TIME"/>
+        <result property="isDeleted" column="IS_DELETED"/>
+        <result property="status" column="STATUS"/>
+        <result property="maxType" column="MAX_TYPE"/>
+        <result property="minTypeCode" column="MIN_TYPE_CODE"/>
+        <result property="minTypeName" column="MIN_TYPE_NAME"/>
+        <result property="requireInfo" column="REQUIRE_INFO"/>
+        <result property="maxL" column="MAX_L"/>
+        <result property="maxKg" column="MAX_KG"/>
+        <result property="packStatus" column="PACK_STATUS"/>
+    </resultMap>
+
+    <sql id="baseVo">
+        select ID, CREATE_USER, CREATE_DEPT, CREATE_TIME, UPDATE_USER, UPDATE_TIME, IS_DELETED, STATUS, MAX_TYPE, MIN_TYPE_CODE, MIN_TYPE_NAME, REQUIRE_INFO, MAX_L, MAX_KG, PACK_STATUS
+        from WXJY_PACK_CATALOG
+    </sql>
+
+    <select id="selectList" parameterType="PackCatalogQuery" resultMap="PackCatalogResult">
+        <include refid="baseVo"/>
+        <where>
+            and IS_DELETED = 0
+        <if test="id != null  and id != ''">
+            and ID = #{id}
+        </if>
+        <if test="createUser != null  and createUser != ''">
+            and CREATE_USER = #{createUser}
+        </if>
+        <if test="createDept != null  and createDept != ''">
+            and CREATE_DEPT = #{createDept}
+        </if>
+        <if test="createTime != null  and createTime != ''">
+            and CREATE_TIME = #{createTime}
+        </if>
+        <if test="updateUser != null  and updateUser != ''">
+            and UPDATE_USER = #{updateUser}
+        </if>
+        <if test="updateTime != null  and updateTime != ''">
+            and UPDATE_TIME = #{updateTime}
+        </if>
+        <if test="isDeleted != null  and isDeleted != ''">
+            and IS_DELETED = #{isDeleted}
+        </if>
+        <if test="status != null  and status != ''">
+            and STATUS = #{status}
+        </if>
+        <if test="maxType != null  and maxType != ''">
+            and MAX_TYPE like concat('%', #{maxType}, '%')
+        </if>
+        <if test="minTypeCode != null  and minTypeCode != ''">
+            and MIN_TYPE_CODE like concat('%', #{minTypeCode}, '%')
+        </if>
+        <if test="minTypeName != null  and minTypeName != ''">
+            and MIN_TYPE_NAME like concat('%', #{minTypeName}, '%')
+        </if>
+        <if test="requireInfo != null  and requireInfo != ''">
+            and REQUIRE_INFO = #{requireInfo}
+        </if>
+        <if test="maxL != null  and maxL != ''">
+            and MAX_L = #{maxL}
+        </if>
+        <if test="maxKg != null  and maxKg != ''">
+            and MAX_KG = #{maxKg}
+        </if>
+        <if test="packStatus != null  and packStatus != ''">
+            and PACK_STATUS = #{packStatus}
+        </if>
+        </where>
+        order by update_time desc
+    </select>
+
+    <select id="selectByID" parameterType="String"
+        resultMap="PackCatalogResult">
+        <include refid="baseVo"/>
+        where ID = #{id}
+    </select>
+
+    <insert id="insert" parameterType="PackCatalog">
+        insert into WXJY_PACK_CATALOG
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">ID,
+            </if>
+            <if test="createUser != null">CREATE_USER,
+            </if>
+            <if test="createDept != null">CREATE_DEPT,
+            </if>
+            <if test="createTime != null">CREATE_TIME,
+            </if>
+            <if test="updateUser != null">UPDATE_USER,
+            </if>
+            <if test="updateTime != null">UPDATE_TIME,
+            </if>
+            <if test="isDeleted != null">IS_DELETED,
+            </if>
+            <if test="status != null">STATUS,
+            </if>
+            <if test="maxType != null">MAX_TYPE,
+            </if>
+            <if test="minTypeCode != null">MIN_TYPE_CODE,
+            </if>
+            <if test="minTypeName != null">MIN_TYPE_NAME,
+            </if>
+            <if test="requireInfo != null">REQUIRE_INFO,
+            </if>
+            <if test="maxL != null">MAX_L,
+            </if>
+            <if test="maxKg != null">MAX_KG,
+            </if>
+            <if test="packStatus != null">PACK_STATUS,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null and id != ''">#{id},
+            </if>
+            <if test="createUser != null">#{createUser},
+            </if>
+            <if test="createDept != null">#{createDept},
+            </if>
+            <if test="createTime != null">#{createTime},
+            </if>
+            <if test="updateUser != null">#{updateUser},
+            </if>
+            <if test="updateTime != null">#{updateTime},
+            </if>
+            <if test="isDeleted != null">#{isDeleted},
+            </if>
+            <if test="status != null">#{status},
+            </if>
+            <if test="maxType != null">#{maxType},
+            </if>
+            <if test="minTypeCode != null">#{minTypeCode},
+            </if>
+            <if test="minTypeName != null">#{minTypeName},
+            </if>
+            <if test="requireInfo != null">#{requireInfo},
+            </if>
+            <if test="maxL != null">#{maxL},
+            </if>
+            <if test="maxKg != null">#{maxKg},
+            </if>
+            <if test="packStatus != null">#{packStatus},
+            </if>
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="PackCatalog">
+        update WXJY_PACK_CATALOG
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="createUser != null">CREATE_USER =
+                #{createUser},
+            </if>
+            <if test="createDept != null">CREATE_DEPT =
+                #{createDept},
+            </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="isDeleted != null">IS_DELETED =
+                #{isDeleted},
+            </if>
+            <if test="status != null">STATUS =
+                #{status},
+            </if>
+            <if test="maxType != null">MAX_TYPE =
+                #{maxType},
+            </if>
+            <if test="minTypeCode != null">MIN_TYPE_CODE =
+                #{minTypeCode},
+            </if>
+            <if test="minTypeName != null">MIN_TYPE_NAME =
+                #{minTypeName},
+            </if>
+            <if test="requireInfo != null">REQUIRE_INFO =
+                #{requireInfo},
+            </if>
+            <if test="maxL != null">MAX_L =
+                #{maxL},
+            </if>
+            <if test="maxKg != null">MAX_KG =
+                #{maxKg},
+            </if>
+            <if test="packStatus != null">PACK_STATUS =
+                #{packStatus},
+            </if>
+        </trim>
+        where ID = #{id}
+    </update>
+
+    <delete id="deleteByID" parameterType="String">
+        delete
+        from WXJY_PACK_CATALOG where ID = #{id}
+    </delete>
+
+    <delete id="deleteByIDs" parameterType="String">
+        delete from WXJY_PACK_CATALOG where ID in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
+    <delete id="logicDelete" parameterType="String">
+        update  WXJY_PACK_CATALOG set is_del = 1  where ID = #{id}
+    </delete>
+</mapper>

+ 3 - 1
wxjy-wxjy-service/src/main/resources/vm/java/pojoQuery.java.vm

@@ -12,7 +12,9 @@ import java.util.Date;
  * @date ${datetime}
  */
 @Data
-public class ${ClassName}Query implements Serializable {
+public class ${ClassName}Query extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
 
     #foreach ($column in $columns)
         #if(!$table.isSuperColumn($column.javaField))

+ 31 - 0
wxjy-wxjy-web/src/App.vue

@@ -48,6 +48,37 @@
           </router-link>
         </el-sub-menu>
 
+        <el-sub-menu index="base">  <!-- index 为父菜单唯一标识(非路由路径) -->
+          <template #title>
+            <el-icon><Setting /></el-icon>  <!-- 父菜单图标 -->
+            <span>基础数据</span>  <!-- 父菜单名称 -->
+          </template>
+          <router-link to="/base-chemicalsCatalog">
+            <el-menu-item index="ChemicalsCatalog" class="menu-item">
+              <el-icon>
+                <ScaleToOriginal />
+              </el-icon>
+              <span>危化品目录</span>
+            </el-menu-item>
+          </router-link>
+          <router-link to="/base-packCatalog">
+            <el-menu-item index="PackCatalog" class="menu-item">
+              <el-icon>
+                <ScaleToOriginal />
+              </el-icon>
+              <span>包装种类目录</span>
+            </el-menu-item>
+          </router-link>
+          <router-link to="/base-goodsCatalog">
+            <el-menu-item index="GoodsCatalog" class="menu-item">
+              <el-icon>
+                <ScaleToOriginal />
+              </el-icon>
+              <span>危险货物目录</span>
+            </el-menu-item>
+          </router-link>
+        </el-sub-menu>
+
         <router-link to="/user-info">
           <el-menu-item index="UserInfo">
             <el-icon><User /></el-icon>

+ 41 - 0
wxjy-wxjy-web/src/apis/base/ChemicalsCatalog.ts

@@ -0,0 +1,41 @@
+import type { AxiosResponse } from 'axios'
+import type { PageInfo, Result } from '@cacp/ui'
+import request from '@/utils/request'
+
+import type {ChemicalsCatalog,ChemicalsCatalogQuery}  from '@/types/base/ChemicalsCatalog'
+
+const contextPath = '/base/ChemicalsCatalog'
+
+// 查询基数数据-危化品目录列表
+export async function getList(query: ChemicalsCatalogQuery): Promise<Result<PageInfo<ChemicalsCatalog>>> {
+  const res: AxiosResponse<Result<PageInfo<ChemicalsCatalog>>> = await request.post(`${contextPath}/get-list`, query)
+  return res.data
+}
+
+// 获取基数数据-危化品目录详情
+export async function getDetail(ID: string): Promise<Result<ChemicalsCatalog>> {
+  const res: AxiosResponse<Result<ChemicalsCatalog>> = await request.get(`${contextPath}/get-detail?ID=${ID}`)
+  return res.data
+}
+
+// 新增基数数据-危化品目录
+export async function insert(row: ChemicalsCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/insert-chemicalsCatalog`, row)
+  return res.data
+}
+
+// 更新基数数据-危化品目录
+export async function update(row: ChemicalsCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/update-chemicalsCatalog`, row)
+  return res.data
+}
+
+// 删除基数数据-危化品目录
+export async function remove(chemicalsCatalogs: string | string[]): Promise<Result<number>> {
+  // 统一转换为数组格式
+  const ids = Array.isArray(chemicalsCatalogs) ? chemicalsCatalogs : [chemicalsCatalogs];
+  const res: AxiosResponse<Result<number>> = await request.post(
+          `${contextPath}/delete-chemicalsCatalog?ids`,ids
+  )
+  return res.data
+}

+ 41 - 0
wxjy-wxjy-web/src/apis/base/GoodsCatalog.ts

@@ -0,0 +1,41 @@
+import type { AxiosResponse } from 'axios'
+import type { PageInfo, Result } from '@cacp/ui'
+import request from '@/utils/request'
+
+import type {GoodsCatalog,GoodsCatalogQuery}  from '@/types/base/GoodsCatalog'
+
+const contextPath = '/base/GoodsCatalog'
+
+// 查询基础数据-危险货物目录列表
+export async function getList(query: GoodsCatalogQuery): Promise<Result<PageInfo<GoodsCatalog>>> {
+  const res: AxiosResponse<Result<PageInfo<GoodsCatalog>>> = await request.post(`${contextPath}/get-list`, query)
+  return res.data
+}
+
+// 获取基础数据-危险货物目录详情
+export async function getDetail(ID: string): Promise<Result<GoodsCatalog>> {
+  const res: AxiosResponse<Result<GoodsCatalog>> = await request.get(`${contextPath}/get-detail?ID=${ID}`)
+  return res.data
+}
+
+// 新增基础数据-危险货物目录
+export async function insert(row: GoodsCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/insert-goodsCatalog`, row)
+  return res.data
+}
+
+// 更新基础数据-危险货物目录
+export async function update(row: GoodsCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/update-goodsCatalog`, row)
+  return res.data
+}
+
+// 删除基础数据-危险货物目录
+export async function remove(goodsCatalogs: string | string[]): Promise<Result<number>> {
+  // 统一转换为数组格式
+  const ids = Array.isArray(goodsCatalogs) ? goodsCatalogs : [goodsCatalogs];
+  const res: AxiosResponse<Result<number>> = await request.post(
+          `${contextPath}/delete-goodsCatalog?ids`,ids
+  )
+  return res.data
+}

+ 41 - 0
wxjy-wxjy-web/src/apis/base/PackCatalog.ts

@@ -0,0 +1,41 @@
+import type { AxiosResponse } from 'axios'
+import type { PageInfo, Result } from '@cacp/ui'
+import request from '@/utils/request'
+
+import type {PackCatalog,PackCatalogQuery}  from '@/types/base/PackCatalog'
+
+const contextPath = '/base/PackCatalog'
+
+// 查询包装种类目录列表
+export async function getList(query: PackCatalogQuery): Promise<Result<PageInfo<PackCatalog>>> {
+  const res: AxiosResponse<Result<PageInfo<PackCatalog>>> = await request.post(`${contextPath}/get-list`, query)
+  return res.data
+}
+
+// 获取包装种类目录详情
+export async function getDetail(ID: string): Promise<Result<PackCatalog>> {
+  const res: AxiosResponse<Result<PackCatalog>> = await request.get(`${contextPath}/get-detail?ID=${ID}`)
+  return res.data
+}
+
+// 新增包装种类目录
+export async function insert(row: PackCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/insert-packCatalog`, row)
+  return res.data
+}
+
+// 更新包装种类目录
+export async function update(row: PackCatalog): Promise<Result<number>> {
+  const res: AxiosResponse<Result<number>> = await request.post(`${contextPath}/update-packCatalog`, row)
+  return res.data
+}
+
+// 删除包装种类目录
+export async function remove(packCatalogs: string | string[]): Promise<Result<number>> {
+  // 统一转换为数组格式
+  const ids = Array.isArray(packCatalogs) ? packCatalogs : [packCatalogs];
+  const res: AxiosResponse<Result<number>> = await request.post(
+          `${contextPath}/delete-packCatalog?ids`,ids
+  )
+  return res.data
+}

+ 27 - 0
wxjy-wxjy-web/src/router/app-router.ts

@@ -79,6 +79,33 @@ const routers: Array<RouteRecordRaw> = [
       permissions:"CUSTOMS_STAT_F_VIEW_BT"
     }
   },
+  {
+    path: '/base-packCatalog',
+    name: 'PackCatalog',
+    component: () => import('@/views/base/PackCatalog.vue'),
+    meta: {
+      title: '包装种类目录',
+      permissions:"PACK_CATALOG_VIEW_BT"
+    }
+  },
+  {
+    path: '/base-goodsCatalog',
+    name: 'GoodsCatalog',
+    component: () => import('@/views/base/GoodsCatalog.vue'),
+    meta: {
+      title: '危险货物目录',
+      permissions:"GOODS_CATALOG_VIEW_BT"
+    }
+  },
+  {
+    path: '/base-chemicalsCatalog',
+    name: 'ChemicalsCatalog',
+    component: () => import('@/views/base/ChemicalsCatalog.vue'),
+    meta: {
+      title: '危化品目录',
+      permissions:"CHEMICALS_CATALOG_VIEW_BT"
+    }
+  },
 ]
 
 export default routers

+ 39 - 0
wxjy-wxjy-web/src/types/base/ChemicalsCatalog.ts

@@ -0,0 +1,39 @@
+// 基数数据-危化品目录
+export interface ChemicalsCatalog {
+  id?: string
+  dangerName?: string
+  enName?: string
+  chAlias?: string
+  enAlias?: string
+  chemicalsEq?: string
+  cas?: string
+  unCode?: string
+  dangerStatement?: string
+  preventStatement?: string
+  chSignalWord?: string
+  enSignalWord?: string
+  signs?: string
+  indexNum?: string
+  remark?: string
+}
+
+// 基数数据-危化品目录查询参数
+export interface ChemicalsCatalogQuery {
+  dangerName?: string
+  enName?: string
+  chAlias?: string
+  enAlias?: string
+  chemicalsEq?: string
+  cas?: string
+  unCode?: string
+  dangerStatement?: string
+  preventStatement?: string
+  chSignalWord?: string
+  enSignalWord?: string
+  signs?: string
+  indexNum?: string
+  beginDate?: string
+  endDate?: string
+  pageIndex?: number
+  pageSize?: number
+}

+ 50 - 0
wxjy-wxjy-web/src/types/base/GoodsCatalog.ts

@@ -0,0 +1,50 @@
+// 基础数据-危险货物目录
+export interface GoodsCatalog {
+  id?: string
+  unCode?: string
+  chName?: string
+  dangerSort?: string
+  viceDanger?: string
+  packType?: string
+  specialProvision?: string
+  limited?: string
+  exemptAmount?: string
+  packGuideline?: string
+  packProvision?: string
+  containerGuideline?: string
+  containerProvision?: string
+  tankGuideline?: string
+  tankProvision?: string
+  ems?: string
+  stowageOperate?: string
+  isolation?: string
+  feature?: string
+  signs?: string
+}
+
+// 基础数据-危险货物目录查询参数
+export interface GoodsCatalogQuery {
+  unCode?: string
+  chName?: string
+  dangerSort?: string
+  viceDanger?: string
+  packType?: string
+  specialProvision?: string
+  limited?: string
+  exemptAmount?: string
+  packGuideline?: string
+  packProvision?: string
+  containerGuideline?: string
+  containerProvision?: string
+  tankGuideline?: string
+  tankProvision?: string
+  ems?: string
+  stowageOperate?: string
+  isolation?: string
+  feature?: string
+  signs?: string
+  beginDate?: string
+  endDate?: string
+  pageIndex?: number
+  pageSize?: number
+}

+ 27 - 0
wxjy-wxjy-web/src/types/base/PackCatalog.ts

@@ -0,0 +1,27 @@
+// 包装种类目录
+export interface PackCatalog {
+                    ID?: string
+                    maxType?: string
+                    minTypeCode?: string
+                    minTypeName?: string
+                    requireInfo?: string
+                    maxL?: string
+                    maxKg?: string
+                    packStatus?: string
+}
+
+// 包装种类目录查询参数
+export interface PackCatalogQuery {
+                    ID?: string
+                    maxType?: string
+                    minTypeCode?: string
+                    minTypeName?: string
+                    requireInfo?: string
+                    maxL?: string
+                    maxKg?: string
+                    packStatus?: string
+    beginDate?: string
+    endDate?: string
+    pageIndex?: number
+    pageSize?: number
+}

+ 311 - 0
wxjy-wxjy-web/src/views/base/ChemicalsCatalog.vue

@@ -0,0 +1,311 @@
+<template>
+  <cacp-search-layout>
+    <template #search>
+      <cacp-search-panel-layout
+        :model="state.queryData"
+        ref="queryFormRef"
+        label-position="left"
+        label-width="auto"
+        :gutter="30"
+        :colSpan="6"
+      >
+        <el-form-item label="CAS号" prop="cas">
+          <el-input v-model="state.queryData.cas" clearable />
+        </el-form-item>
+        <el-form-item label="危化品品名" prop="dangerName">
+          <el-input v-model="state.queryData.dangerName" clearable />
+        </el-form-item>
+        <template #buttonGroup>
+          <el-button type="primary" @click="onSearch">查询</el-button>
+          <el-button type="info" @click="onReset">重置</el-button>
+        </template>
+      </cacp-search-panel-layout>
+    </template>
+
+    <cacp-complex-table
+      :actions="actions"
+      :data="tableData"
+      :pagination="tablePagination"
+      :actionsWidth="120"
+      @selection-change="handleSelectionChange"
+      @on-page-change="onPageChange"
+      @on-size-change="onSizeChange"
+      :loading="loading"
+    >
+      <el-table-column label="序号" property="index" width="60" align="center" >
+        <template #default="scope">
+          {{scope.$index + 1}}
+        </template>
+      </el-table-column>
+      <el-table-column property="cas" label="CAS号" width="120" :show-overflow-tooltip="true" />
+      <el-table-column property="dangerName" label="危化品品名"  :show-overflow-tooltip="true" />
+      <!--      <el-table-column property="enName" label="英文名" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="chAlias" label="危化品别名" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="enAlias" label="英文别名" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="chemicalsEq" label="化学方程式" width="120" :show-overflow-tooltip="true" />-->
+      <el-table-column property="unCode" label="UN编码" width="120" :show-overflow-tooltip="true" />
+      <!--      <el-table-column property="dangerStatement" label="危险说明" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="preventStatement" label="防范说明" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="chSignalWord" label="中文信号词" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="enSignalWord" label="英文信号词" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="SIGNS" label="标签" width="120" :show-overflow-tooltip="true" />-->
+      <el-table-column property="REMARK" label="备注"  :show-overflow-tooltip="true" />
+    </cacp-complex-table>
+  </cacp-search-layout>
+
+  <!--查看弹框-->
+  <cacp-dialog
+    v-model="state.viewDialogVisible"
+    :resizable="false"
+    :title="state.viewTitle"
+    width="50%"
+  >
+    <el-form
+      :model="state.viewForm"
+      label-width="auto"
+      label-position="left"
+      :disabled="true"
+    >
+      <el-row :gutter="20">
+        <el-col :span="12">
+          <el-form-item label="危化品品名:" prop="dangerName">
+            <span>{{ state.viewForm.dangerName || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="危化品别名:" prop="chAlias">
+            <span>{{ state.viewForm.chAlias || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="英文名:" prop="enName">
+            <span>{{ state.viewForm.enName || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="英文别名:" prop="enAlias">
+            <span>{{ state.viewForm.enAlias || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="CAS号:" prop="cas">
+            <span>{{ state.viewForm.cas || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="UN编码:" prop="unCode">
+            <span>{{ state.viewForm.unCode || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="标签:" prop="signs">
+            <span>{{ state.viewForm.signs || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="化学方程式:" prop="chemicalsEq">
+            <span>{{ state.viewForm.chemicalsEq || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="中文信号词:" prop="chSignalWord">
+            <span>{{ state.viewForm.chSignalWord || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="英文信号词:" prop="enSignalWord">
+            <span>{{ state.viewForm.enSignalWord || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="危险说明:" prop="dangerStatement">
+            <span>{{ state.viewForm.dangerStatement || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="防范说明:" prop="preventStatement">
+            <span>{{ state.viewForm.preventStatement || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="备注:" prop="remark">
+            <span>{{ state.viewForm.remark || '-' }}</span>
+          </el-form-item>
+        </el-col>
+    </el-row>
+    </el-form>
+  </cacp-dialog>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, reactive, ref } from 'vue'
+import { ElMessage } from 'element-plus'
+import config from '@/config'
+import {
+  SuccessResultCode,
+  useComplexTable,
+  type SearchPanelLayoutInstance,
+  type TableAction,
+  useLoading
+} from '@cacp/ui'
+import type { ChemicalsCatalog, ChemicalsCatalogQuery } from '@/types/base/ChemicalsCatalog'
+import {getList} from '@/apis/base/ChemicalsCatalog'
+import { permissionStatus } from '@/utils/globalPermission'
+
+// 表单引用
+const queryFormRef = ref<SearchPanelLayoutInstance>()
+
+// 加载状态
+const { loading, setLoading } = useLoading()
+
+// 表格 Hook
+const tableHooks = useComplexTable<ChemicalsCatalog>(config)
+const { tableData, tablePagination, setPagination, setPageIndex, setPageSizes } = tableHooks
+
+// 响应式数据
+interface State {
+  queryData: ChemicalsCatalogQuery
+  formData: ChemicalsCatalog
+  viewForm: ChemicalsCatalog
+  viewTitle: string
+  viewDialogVisible: boolean
+  title: string
+  isEdit: boolean
+  dialogVisible: boolean
+}
+
+const state = reactive<State>({
+  queryData: {
+    dangerName: '',
+    enName: '',
+    chAlias: '',
+    enAlias: '',
+    chemicalsEq: '',
+    cas: '',
+    unCode: '',
+    dangerStatement: '',
+    preventStatement: '',
+    chSignalWord: '',
+    enSignalWord: '',
+    signs: '',
+    indexNum: '',
+    pageIndex: tablePagination.currentPage,
+    pageSize: tablePagination.pageSize
+  },
+  formData: {
+    ID: '',
+    dangerName: '',
+    enName: '',
+    chAlias: '',
+    enAlias: '',
+    chemicalsEq: '',
+    cas: '',
+    unCode: '',
+    dangerStatement: '',
+    preventStatement: '',
+    chSignalWord: '',
+    enSignalWord: '',
+    signs: '',
+    remark: '',
+    createUser: '',
+    createDept: '',
+    createTime: '',
+    updateUser: '',
+    updateTime: '',
+    isDeleted: '',
+    status: '',
+    indexNum: '',
+  } as ChemicalsCatalog,
+  viewForm: {} as ChemicalsCatalog,
+  viewTitle: '',
+  viewDialogVisible: false,
+  title: '',
+  isEdit: false,
+  dialogVisible: false,
+})
+
+// 表格操作按钮配置
+const actions = <Array<TableAction>>[
+  {
+    key: 'view',
+    text: '查看',
+    onclick: onView,
+    limit: permissionStatus('one', 'CHEMICALS_CATALOG_VIEW_BT'),
+    type: 'primary'
+  },
+]
+
+// 选中项的 ID 数组
+const ids = ref<string[]>([])
+
+// 多选框选中数据
+function handleSelectionChange(selection: ChemicalsCatalog[]) {
+  ids.value = selection
+    .map(item => item.id)
+    .filter((id): id is string => id != null && id !== undefined)
+}
+
+// 搜索方法
+const onSearch = () => {
+  setPageIndex(1)
+  onLoadData()
+}
+
+// 重置方法
+const onReset = () => {
+  queryFormRef.value?.resetFields()
+  onPageChange(1)
+}
+
+// 每页显示条数变化
+const onSizeChange = (size: number) => {
+  setPageSizes(size)
+  onLoadData()
+}
+
+// 翻页查询
+const onPageChange = (currentPage: number) => {
+  setPageIndex(currentPage)
+  onLoadData()
+}
+
+// 查看
+function onView(row: ChemicalsCatalog) {
+  state.viewForm = { ...row }
+  state.viewDialogVisible = true
+  state.viewTitle = '危化品详情'
+}
+
+// 数据查询
+async function onLoadData() {
+  setLoading(true)
+  try {
+    const query = {
+      ...state.queryData,
+      pageIndex: tablePagination.currentPage,
+      pageSize: tablePagination.pageSize
+    }
+    const res = await getList(query)
+    if (res.code === SuccessResultCode) {
+      setPagination(res.data)
+    } else {
+      ElMessage.error(res.message || '查询失败')
+    }
+  } catch (error) {
+    console.error('查询失败:', error)
+    ElMessage.error('查询失败')
+  } finally {
+    setLoading(false)
+  }
+}
+
+
+// 组件挂载时加载数据
+onMounted(() => {
+  onLoadData()
+})
+</script>
+
+<style scoped>
+/* 自定义样式 */
+</style>

+ 383 - 0
wxjy-wxjy-web/src/views/base/GoodsCatalog.vue

@@ -0,0 +1,383 @@
+<template>
+  <cacp-search-layout>
+    <template #search>
+      <cacp-search-panel-layout
+        :model="state.queryData"
+        ref="queryFormRef"
+        label-position="left"
+        label-width="auto"
+        :gutter="30"
+        :colSpan="6"
+      >
+        <el-form-item label="运输中文名称" prop="chName">
+          <el-input v-model="state.queryData.chName" clearable />
+        </el-form-item>
+        <el-form-item label="UN编码" prop="unCode">
+          <el-input v-model="state.queryData.unCode" clearable />
+        </el-form-item>
+        <el-form-item label="危险类别" prop="dangerSort">
+          <el-input v-model="state.queryData.dangerSort" clearable />
+        </el-form-item>
+        <el-form-item label="包装类别" prop="packType">
+          <el-select v-model="state.queryData.packType" clearable>
+            <el-option v-for="item in dict.pack_type" :key="item.dictValue" :label="item.dictLabel"
+                       :value="item.dictValue" />
+          </el-select>
+        </el-form-item>
+        <template #buttonGroup>
+          <el-button type="primary" @click="onSearch">查询</el-button>
+          <el-button type="info" @click="onReset">重置</el-button>
+        </template>
+      </cacp-search-panel-layout>
+    </template>
+
+    <cacp-complex-table
+      :actions="actions"
+      :data="tableData"
+      :pagination="tablePagination"
+      :actionsWidth="120"
+      @selection-change="handleSelectionChange"
+      @on-page-change="onPageChange"
+      @on-size-change="onSizeChange"
+      :loading="loading"
+    >
+      <el-table-column label="序号" property="index" width="60" align="center" >
+        <template #default="scope">
+          {{scope.$index + 1}}
+        </template>
+      </el-table-column>
+
+      <el-table-column property="chName" label="运输中文名称"  :show-overflow-tooltip="true" />
+      <el-table-column property="unCode" label="UN编码"  :show-overflow-tooltip="true" />
+      <el-table-column property="dangerSort" label="危险类别" width="120" :show-overflow-tooltip="true" />
+      <el-table-column property="viceDanger" label="副危险" width="120" :show-overflow-tooltip="true" />
+      <el-table-column property="packType" label="包装类别" width="120" :show-overflow-tooltip="true">
+        <template #default="scope">
+          <dict-tag :options="dict.pack_type" :dict-value="scope.row.packType" />
+        </template>
+      </el-table-column>
+      <el-table-column property="specialProvision" label="特殊规定"  :show-overflow-tooltip="true" />
+      <!--      <el-table-column property="limited" label="限量" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="exemptAmount" label="可免除量" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="packGuideline" label="包装导则" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="packProvision" label="包装规定" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="containerGuideline" label="中型散装容器导则" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="containerProvision" label="中型散装容器规定" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="tankGuideline" label="罐柜导则" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="tankProvision" label="罐柜特殊规定" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="ems" label="ems" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="stowageOperate" label="积载与操作" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="isolation" label="隔离" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="feature" label="特性与注意事项" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="createUser" label="创建人" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="createDept" label="创建部门" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="createTime" label="创建时间" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="updateUser" label="更新人" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="updateTime" label="更新时间" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="isDeleted" label="是否已删除" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="STATUS" label="业务状态" width="120" :show-overflow-tooltip="true" />-->
+      <!--      <el-table-column property="signs" label="标签" width="120" :show-overflow-tooltip="true" />-->
+    </cacp-complex-table>
+  </cacp-search-layout>
+
+  <!--查看弹框-->
+  <cacp-dialog
+    v-model="state.viewDialogVisible"
+    :resizable="false"
+    :title="state.viewTitle"
+    width="50%"
+  >
+    <el-form
+      :model="state.viewForm"
+      label-width="auto"
+      label-position="left"
+      :disabled="true"
+    >
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="运输中文名称:" prop="chName">
+            <span>{{ state.viewForm.chName || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="UN编码:" prop="unCode">
+            <span>{{ state.viewForm.unCode || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="危险类别:" prop="dangerSort">
+            <span>{{ state.viewForm.dangerSort || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="副危险:" prop="viceDanger">
+            <span>{{ state.viewForm.viceDanger || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="包装类别:" prop="packType">
+            <dict-tag :options="dict.pack_type" :dict-value="state.viewForm.packType" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="特殊规定:" prop="specialProvision">
+            <span>{{ state.viewForm.specialProvision || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="限量:" prop="limited">
+            <span>{{ state.viewForm.limited || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="可免除量:" prop="exemptAmount">
+            <span>{{ state.viewForm.exemptAmount || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="包装导则:" prop="packGuideline">
+            <span>{{ state.viewForm.packGuideline || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="包装规定:" prop="packProvision">
+            <span>{{ state.viewForm.packProvision || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="中型散装容器导则:" prop="containerGuideline">
+            <span>{{ state.viewForm.containerGuideline || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="中型散装容器规定:" prop="containerProvision">
+            <span>{{ state.viewForm.containerProvision || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="罐柜导则:" prop="tankGuideline">
+            <span>{{ state.viewForm.tankGuideline || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="罐柜特殊规定:" prop="tankProvision">
+            <span>{{ state.viewForm.tankProvision || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="EmS:" prop="ems">
+            <span>{{ state.viewForm.ems || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="积载与操作:" prop="stowageOperate">
+            <span>{{ state.viewForm.stowageOperate || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="隔离:" prop="isolation">
+            <span>{{ state.viewForm.isolation || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="特性与注意事项:" prop="feature">
+            <span>{{ state.viewForm.feature || '-' }}</span>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="12">
+          <el-form-item label="标签:" prop="signs">
+            <span>{{ state.viewForm.signs || '-' }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </cacp-dialog>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, reactive, ref } from 'vue'
+import { ElMessage } from 'element-plus'
+import config from '@/config'
+import {
+  SuccessResultCode,
+  useComplexTable,
+  type SearchPanelLayoutInstance,
+  type TableAction,
+  useLoading
+} from '@cacp/ui'
+import type { GoodsCatalog, GoodsCatalogQuery } from '@/types/base/GoodsCatalog'
+import { getList } from '@/apis/base/GoodsCatalog'
+import { permissionStatus } from '@/utils/globalPermission'
+import { useDictType } from '@/components/useDict'
+import DictTag from '@/components/DictTag/dictTag.vue'
+const { dict } = useDictType('pack_type')
+
+// 表单引用
+const queryFormRef = ref<SearchPanelLayoutInstance>()
+
+// 加载状态
+const { loading, setLoading } = useLoading()
+
+// 表格 Hook
+const tableHooks = useComplexTable<GoodsCatalog>(config)
+const { tableData, tablePagination, setPagination, setPageIndex, setPageSizes } = tableHooks
+
+// 响应式数据
+interface State {
+  queryData: GoodsCatalogQuery
+  formData: GoodsCatalog
+  viewForm: GoodsCatalog
+  viewTitle: string
+  viewDialogVisible: boolean
+  title: string
+  isEdit: boolean
+  dialogVisible: boolean
+}
+
+const state = reactive<State>({
+  queryData: {
+    unCode: '',
+    chName: '',
+    dangerSort: '',
+    viceDanger: '',
+    packType: '',
+    specialProvision: '',
+    limited: '',
+    exemptAmount: '',
+    packGuideline: '',
+    packProvision: '',
+    containerGuideline: '',
+    containerProvision: '',
+    tankGuideline: '',
+    tankProvision: '',
+    ems: '',
+    stowageOperate: '',
+    isolation: '',
+    feature: '',
+    signs: '',
+    pageIndex: tablePagination.currentPage,
+    pageSize: tablePagination.pageSize
+  },
+  formData: {
+    ID: '',
+    unCode: '',
+    chName: '',
+    dangerSort: '',
+    viceDanger: '',
+    packType: '',
+    specialProvision: '',
+    limited: '',
+    exemptAmount: '',
+    packGuideline: '',
+    packProvision: '',
+    containerGuideline: '',
+    containerProvision: '',
+    tankGuideline: '',
+    tankProvision: '',
+    ems: '',
+    stowageOperate: '',
+    isolation: '',
+    feature: '',
+    createUser: '',
+    createDept: '',
+    createTime: '',
+    updateUser: '',
+    updateTime: '',
+    isDeleted: '',
+    STATUS: '',
+    signs: '',
+  } as GoodsCatalog,
+  viewForm: {} as GoodsCatalog,
+  viewTitle: '',
+  viewDialogVisible: false,
+  title: '',
+  isEdit: false,
+  dialogVisible: false,
+})
+
+// 表格操作按钮配置
+const actions = <Array<TableAction>>[
+  {
+    key: 'view',
+    text: '查看',
+    onclick: onView,
+    limit: permissionStatus('one', 'GOODS_CATALOG_VIEW_BT'),
+    type: 'primary'
+  },
+]
+
+// 选中项的 ID 数组
+const ids = ref<string[]>([])
+
+// 多选框选中数据
+function handleSelectionChange(selection: GoodsCatalog[]) {
+  ids.value = selection
+    .map(item => item.id)
+    .filter((id): id is string => id != null && id !== undefined)
+}
+
+// 搜索方法
+const onSearch = () => {
+  setPageIndex(1)
+  onLoadData()
+}
+
+// 重置方法
+const onReset = () => {
+  queryFormRef.value?.resetFields()
+  onPageChange(1)
+}
+
+// 每页显示条数变化
+const onSizeChange = (size: number) => {
+  setPageSizes(size)
+  onLoadData()
+}
+
+// 翻页查询
+const onPageChange = (currentPage: number) => {
+  setPageIndex(currentPage)
+  onLoadData()
+}
+
+// 查看
+function onView(row: GoodsCatalog) {
+  state.viewForm = { ...row }
+  state.viewDialogVisible = true
+  state.viewTitle = '危险货物详情'
+}
+
+// 数据查询
+async function onLoadData() {
+  setLoading(true)
+  try {
+    const query = {
+      ...state.queryData,
+      pageIndex: tablePagination.currentPage,
+      pageSize: tablePagination.pageSize
+    }
+    const res = await getList(query)
+    if (res.code === SuccessResultCode) {
+      setPagination(res.data)
+    } else {
+      ElMessage.error(res.message || '查询失败')
+    }
+  } catch (error) {
+    console.error('查询失败:', error)
+    ElMessage.error('查询失败')
+  } finally {
+    setLoading(false)
+  }
+}
+
+
+// 组件挂载时加载数据
+onMounted(() => {
+  onLoadData()
+})
+</script>
+
+<style scoped>
+/* 自定义样式 */
+</style>

+ 253 - 0
wxjy-wxjy-web/src/views/base/PackCatalog.vue

@@ -0,0 +1,253 @@
+<template>
+  <cacp-search-layout>
+    <template #search>
+      <cacp-search-panel-layout
+        :model="state.queryData"
+        ref="queryFormRef"
+        label-position="left"
+        label-width="auto"
+        :gutter="30"
+        :colSpan="6"
+      >
+        <el-form-item label="包装类型" prop="maxType">
+          <el-input v-model="state.queryData.maxType" clearable />
+        </el-form-item>
+        <el-form-item label="包装编码" prop="minTypeCode">
+          <el-input v-model="state.queryData.minTypeCode" clearable />
+        </el-form-item>
+        <el-form-item label="包装类别" prop="minTypeName">
+          <el-input v-model="state.queryData.minTypeName" clearable />
+        </el-form-item>
+        <template #buttonGroup>
+          <el-button type="primary" @click="onSearch">查询</el-button>
+          <el-button type="info" @click="onReset">重置</el-button>
+        </template>
+      </cacp-search-panel-layout>
+    </template>
+
+    <cacp-complex-table
+      :actions="actions"
+      :data="tableData"
+      :pagination="tablePagination"
+      :actionsWidth="120"
+      @selection-change="handleSelectionChange"
+      @on-page-change="onPageChange"
+      @on-size-change="onSizeChange"
+      :loading="loading"
+    >
+      <el-table-column label="序号" property="index" width="60" align="center" >
+        <template #default="scope">
+          {{scope.$index + 1}}
+        </template>
+      </el-table-column>
+      <el-table-column property="maxType" label="包装类型"  :show-overflow-tooltip="true" />
+      <el-table-column property="minTypeCode" label="包装编码" :show-overflow-tooltip="true" />
+      <el-table-column property="minTypeName" label="包装类别" :show-overflow-tooltip="true" />
+<!--      <el-table-column property="requireInfo" label="要求" width="120" :show-overflow-tooltip="true" />-->
+      <el-table-column property="maxL" label="最大容量/L"  :show-overflow-tooltip="true" />
+      <el-table-column property="maxKg" label="最大净重/kg"  :show-overflow-tooltip="true" />
+<!--      <el-table-column property="packStatus" label="危包状态" width="120" :show-overflow-tooltip="true" />-->
+    </cacp-complex-table>
+  </cacp-search-layout>
+
+  <!--查看弹框-->
+  <cacp-dialog
+    v-model="state.viewDialogVisible"
+    :resizable="false"
+    :title="state.viewTitle"
+    width="50%"
+  >
+    <el-form
+      :model="state.viewForm"
+      label-width="auto"
+      label-position="left"
+      :disabled="true"
+    >
+      <el-row :gutter="20">
+        <el-col :span="24">
+          <el-form-item label="包装类型:" prop="maxType">
+            <span>{{ state.viewForm.maxType || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="包装编码:" prop="minTypeCode">
+            <span>{{ state.viewForm.minTypeCode || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="包装类别:" prop="minTypeName">
+            <span>{{ state.viewForm.minTypeName || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="最大容量/L:" prop="maxL">
+            <span>{{ state.viewForm.maxL || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="最大净重/kg:" prop="maxKg">
+            <span>{{ state.viewForm.maxKg || '-' }}</span>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="要求:" prop="requireInfo">
+            <span>{{ state.viewForm.requireInfo || '-' }}</span>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+  </cacp-dialog>
+</template>
+
+<script lang="ts" setup>
+import { onMounted, reactive, ref } from 'vue'
+import { ElMessage} from 'element-plus'
+import config from '@/config'
+import {
+  SuccessResultCode,
+  useComplexTable,
+  type SearchPanelLayoutInstance,
+  type TableAction,
+  useLoading
+} from '@cacp/ui'
+import type { PackCatalog, PackCatalogQuery } from '@/types/base/PackCatalog'
+import { getList } from '@/apis/base/PackCatalog'
+import { permissionStatus } from '@/utils/globalPermission'
+
+// 表单引用
+const queryFormRef = ref<SearchPanelLayoutInstance>()
+
+// 加载状态
+const { loading, setLoading } = useLoading()
+
+// 表格 Hook
+const tableHooks = useComplexTable<PackCatalog>(config)
+const { tableData, tablePagination, setPagination, setPageIndex, setPageSizes } = tableHooks
+
+// 响应式数据
+interface State {
+  queryData: PackCatalogQuery
+  formData: PackCatalog
+  viewForm: PackCatalog
+  viewTitle: string
+  viewDialogVisible: boolean
+  title: string
+  isEdit: boolean
+  dialogVisible: boolean
+}
+
+const state = reactive<State>({
+  queryData: {
+    ID: '',
+    maxType: '',
+    minTypeCode: '',
+    minTypeName: '',
+    requireInfo: '',
+    maxL: '',
+    maxKg: '',
+    packStatus: '',
+    pageIndex: tablePagination.currentPage,
+    pageSize: tablePagination.pageSize
+  },
+  formData: {
+    maxType: '',
+    minTypeCode: '',
+    minTypeName: '',
+    requireInfo: '',
+    maxL: '',
+    maxKg: '',
+    packStatus: '',
+  } as PackCatalog,
+  viewForm: {} as PackCatalog,
+  viewTitle: '',
+  viewDialogVisible: false,
+  title: '',
+  isEdit: false,
+  dialogVisible: false,
+})
+
+// 表格操作按钮配置
+const actions = <Array<TableAction>>[
+  {
+    key: 'view',
+    text: '查看',
+    onclick: onView,
+    limit: permissionStatus('one', 'PACK_CATALOG_VIEW_BT'),
+    type: 'primary'
+  },
+]
+
+// 选中项的 ID 数组
+const ids = ref<string[]>([])
+
+// 多选框选中数据
+function handleSelectionChange(selection: PackCatalog[]) {
+  ids.value = selection
+    .map(item => item.ID)
+    .filter((id): id is string => id != null && id !== undefined)
+}
+
+// 搜索方法
+const onSearch = () => {
+  setPageIndex(1)
+  onLoadData()
+}
+
+// 重置方法
+const onReset = () => {
+  queryFormRef.value?.resetFields()
+  onPageChange(1)
+}
+
+// 每页显示条数变化
+const onSizeChange = (size: number) => {
+  setPageSizes(size)
+  onLoadData()
+}
+
+// 翻页查询
+const onPageChange = (currentPage: number) => {
+  setPageIndex(currentPage)
+  onLoadData()
+}
+
+// 查看
+function onView(row: PackCatalog) {
+  state.viewForm = { ...row }
+  state.viewDialogVisible = true
+  state.viewTitle = '包装类型详情'
+}
+
+// 数据查询
+async function onLoadData() {
+  setLoading(true)
+  try {
+    const query = {
+      ...state.queryData,
+      pageIndex: tablePagination.currentPage,
+      pageSize: tablePagination.pageSize
+    }
+    const res = await getList(query)
+    if (res.code === SuccessResultCode) {
+      setPagination(res.data)
+    } else {
+      ElMessage.error(res.message || '查询失败')
+    }
+  } catch (error) {
+    console.error('查询失败:', error)
+    ElMessage.error('查询失败')
+  } finally {
+    setLoading(false)
+  }
+}
+
+
+// 组件挂载时加载数据
+onMounted(() => {
+  onLoadData()
+})
+</script>
+
+<style scoped>
+/* 自定义样式 */
+</style>