From 25629f2df16b5323ae1e1775d08f637a764d6105 Mon Sep 17 00:00:00 2001 From: geht <2947093423@qq.com> Date: Wed, 6 May 2026 18:27:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=A9=E6=96=99=E5=A4=A7?= =?UTF-8?q?=E7=B1=BB=E5=92=8C=E5=B0=8F=E7=B1=BB=E7=9A=84=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E8=A1=A8=E5=BC=95=E7=94=A8=EF=BC=8C=E4=BC=98=E5=8C=96=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=A1=A8=E5=8D=95=E7=BB=84=E4=BB=B6=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8API=E9=80=89=E6=8B=A9=E5=99=A8=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C=E3=80=82=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=89=A9=E6=96=99=E4=BF=A1=E6=81=AF=E6=A8=A1=E6=80=81=E6=A1=86?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=8A=A8=E6=80=81=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=A4=A7=E7=B1=BB=E5=92=8C=E5=B0=8F=E7=B1=BB=E9=80=89=E9=A1=B9?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/material/entity/MesMixerMaterial.java | 8 +- ....9.2_34__mes_xsl_material_sys_category.sql | 28 ++ ...9.2_35__mes_xsl_material_category_tree.sql | 169 +++++++ .../mes/material/MesMixerMaterial.data.ts | 40 +- .../mes/material/MesMixerMaterialList.vue | 429 +++++++++++++++++- .../MesMixerMaterialSysCategory.api.ts | 24 + .../modules/MesMixerMaterialModal.vue | 66 ++- .../MesMixerMaterialSysCategoryModal.vue | 126 +++++ 8 files changed, 860 insertions(+), 30 deletions(-) create mode 100644 jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_34__mes_xsl_material_sys_category.sql create mode 100644 jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_35__mes_xsl_material_category_tree.sql create mode 100644 jeecgboot-vue3/src/views/mes/material/MesMixerMaterialSysCategory.api.ts create mode 100644 jeecgboot-vue3/src/views/mes/material/modules/MesMixerMaterialSysCategoryModal.vue diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMixerMaterial.java b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMixerMaterial.java index 1156011..f5cabf7 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMixerMaterial.java +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mes/material/entity/MesMixerMaterial.java @@ -33,12 +33,12 @@ public class MesMixerMaterial implements Serializable { @Excel(name = "ERP编号", width = 15) private String erpCode; - @Excel(name = "物料大类", width = 15, dictTable = "mes_material_category", dicText = "category_name", dicCode = "id") - @Dict(dictTable = "mes_material_category", dicText = "category_name", dicCode = "id") + @Excel(name = "物料大类", width = 15, dictTable = "sys_category", dicText = "name", dicCode = "id") + @Dict(dictTable = "sys_category", dicText = "name", dicCode = "id") private String majorCategoryId; - @Excel(name = "物料小类", width = 15, dictTable = "mes_material_category", dicText = "category_name", dicCode = "id") - @Dict(dictTable = "mes_material_category", dicText = "category_name", dicCode = "id") + @Excel(name = "物料小类", width = 15, dictTable = "sys_category", dicText = "name", dicCode = "id") + @Dict(dictTable = "sys_category", dicText = "name", dicCode = "id") private String minorCategoryId; @Excel(name = "物料描述", width = 25) diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_34__mes_xsl_material_sys_category.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_34__mes_xsl_material_sys_category.sql new file mode 100644 index 0000000..81f6cab --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_34__mes_xsl_material_sys_category.sql @@ -0,0 +1,28 @@ +-- MES 物料分类:新增分类字典(sys_category)根节点与子节点 +-- 根编码:XSLMES_MATERIAL +-- 子类:物料大类、物料小类 + +-- 根节点:物料分类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000001', '0', '物料分类', 'XSLMES_MATERIAL', '1', 'admin', NOW() +FROM DUAL +WHERE NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL'); + +-- 子节点:物料大类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000002', p.`id`, '物料大类', 'XSLMES_MATERIAL_MAJOR', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_MAJOR'); + +-- 子节点:物料小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000003', p.`id`, '物料小类', 'XSLMES_MATERIAL_MINOR', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_MINOR'); + +-- 确保根节点有子节点标记 +UPDATE `sys_category` +SET `has_child` = '1' +WHERE `code` = 'XSLMES_MATERIAL'; diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_35__mes_xsl_material_category_tree.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_35__mes_xsl_material_category_tree.sql new file mode 100644 index 0000000..4fd07a9 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_35__mes_xsl_material_category_tree.sql @@ -0,0 +1,169 @@ +-- MES 物料分类树:根节点 -> 物料大类 -> 物料小类 +-- 兼容处理:清理上一版占位节点(物料大类/物料小类),避免出现在下拉中 + +-- 清理占位节点(若存在) +DELETE FROM `sys_category` WHERE `code` IN ('XSLMES_MATERIAL_MAJOR', 'XSLMES_MATERIAL_MINOR'); + +-- 确保根节点存在 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000001', '0', '物料分类', 'XSLMES_MATERIAL', '1', 'admin', NOW() +FROM DUAL +WHERE NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL'); + +-- 物料大类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000101', root.`id`, '原辅材料', 'XSLMES_MATERIAL_RAW_AUX', '1', 'admin', NOW() +FROM `sys_category` root +WHERE root.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000102', root.`id`, '小料', 'XSLMES_MATERIAL_SMALL', '1', 'admin', NOW() +FROM `sys_category` root +WHERE root.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_SMALL'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000103', root.`id`, '塑炼胶', 'XSLMES_MATERIAL_PLASTIC', '1', 'admin', NOW() +FROM `sys_category` root +WHERE root.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_PLASTIC'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000104', root.`id`, '母炼胶', 'XSLMES_MATERIAL_MASTER', '1', 'admin', NOW() +FROM `sys_category` root +WHERE root.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_MASTER'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000105', root.`id`, '终炼胶', 'XSLMES_MATERIAL_FINAL', '1', 'admin', NOW() +FROM `sys_category` root +WHERE root.`code` = 'XSLMES_MATERIAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_FINAL'); + +-- 原辅材料 -> 小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000201', p.`id`, '炭黑', 'XSLMES_MATERIAL_RAW_AUX_TH', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_TH'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000202', p.`id`, '油料', 'XSLMES_MATERIAL_RAW_AUX_YL', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_YL'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000203', p.`id`, '粉料', 'XSLMES_MATERIAL_RAW_AUX_FL', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_FL'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000204', p.`id`, '钢丝', 'XSLMES_MATERIAL_RAW_AUX_GS', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_GS'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000205', p.`id`, '帘线', 'XSLMES_MATERIAL_RAW_AUX_LX', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_LX'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000206', p.`id`, '天然胶', 'XSLMES_MATERIAL_RAW_AUX_TRJ', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_TRJ'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000207', p.`id`, '合成胶', 'XSLMES_MATERIAL_RAW_AUX_HCJ', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_HCJ'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000208', p.`id`, '再生胶', 'XSLMES_MATERIAL_RAW_AUX_ZSJ', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_ZSJ'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000209', p.`id`, '硅烷', 'XSLMES_MATERIAL_RAW_AUX_GW', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_GW'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000210', p.`id`, '大粉料', 'XSLMES_MATERIAL_RAW_AUX_DFL', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_DFL'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000211', p.`id`, '白炭黑', 'XSLMES_MATERIAL_RAW_AUX_BTH', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_RAW_AUX' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_RAW_AUX_BTH'); + +-- 小料 -> 小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000301', p.`id`, '人工', 'XSLMES_MATERIAL_SMALL_RG', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_SMALL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_SMALL_RG'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000302', p.`id`, '自动', 'XSLMES_MATERIAL_SMALL_ZD', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_SMALL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_SMALL_ZD'); + +-- 塑炼胶 -> 小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000401', p.`id`, 'J0段胶', 'XSLMES_MATERIAL_PLASTIC_J0', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_PLASTIC' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_PLASTIC_J0'); + +-- 母炼胶 -> 小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000501', p.`id`, 'A胶', 'XSLMES_MATERIAL_MASTER_A', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_MASTER' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_MASTER_A'); + +-- 终炼胶 -> 小类 +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000601', p.`id`, 'Q胶', 'XSLMES_MATERIAL_FINAL_Q', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_FINAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_FINAL_Q'); + +INSERT INTO `sys_category` (`id`, `pid`, `name`, `code`, `has_child`, `create_by`, `create_time`) +SELECT '1993000000000000602', p.`id`, '返回胶', 'XSLMES_MATERIAL_FINAL_FHJ', '0', 'admin', NOW() +FROM `sys_category` p +WHERE p.`code` = 'XSLMES_MATERIAL_FINAL' + AND NOT EXISTS (SELECT 1 FROM `sys_category` WHERE `code` = 'XSLMES_MATERIAL_FINAL_FHJ'); + +-- 统一修正 has_child 标记(仅针对物料分类树,避免 MySQL 1093) +-- 先将物料分类树节点全部置 0 +UPDATE `sys_category` +SET `has_child` = '0' +WHERE `code` = 'XSLMES_MATERIAL' + OR `code` LIKE 'XSLMES_MATERIAL_%'; + +-- 再把有子节点的节点置 1(通过派生表规避同表更新限制) +UPDATE `sys_category` p +JOIN ( + SELECT DISTINCT c.`pid` AS parent_id + FROM `sys_category` c + WHERE c.`code` LIKE 'XSLMES_MATERIAL_%' + AND c.`pid` IS NOT NULL + AND c.`pid` <> '0' +) t ON t.parent_id = p.`id` +SET p.`has_child` = '1' +WHERE p.`code` = 'XSLMES_MATERIAL' + OR p.`code` LIKE 'XSLMES_MATERIAL_%'; diff --git a/jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts b/jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts index aad419c..ef63a0b 100644 --- a/jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts +++ b/jeecgboot-vue3/src/views/mes/material/MesMixerMaterial.data.ts @@ -1,4 +1,5 @@ import { BasicColumn, FormSchema } from '/@/components/Table'; +import { loadTreeData } from '/@/api/common/api'; function feedManageStatusText(v: unknown) { if (v === 1) return '在投管'; @@ -49,8 +50,33 @@ export const searchFormSchema: FormSchema[] = [ { label: '物料大类', field: 'majorCategoryId', - component: 'JDictSelectTag', - componentProps: { dictCode: 'mes_material_category,category_name,id' }, + component: 'ApiSelect', + componentProps: { + api: loadTreeData, + params: { pcode: 'XSLMES_MATERIAL' }, + resultField: '', + labelField: 'title', + valueField: 'key', + placeholder: '请选择物料大类', + }, + colProps: { span: 6 }, + }, + { + label: '物料小类', + field: 'minorCategoryId', + component: 'ApiSelect', + componentProps: ({ formModel }) => { + const majorCategoryId = formModel?.majorCategoryId ? String(formModel.majorCategoryId) : ''; + return { + api: loadTreeData, + params: majorCategoryId ? { pid: majorCategoryId } : { pid: '-1' }, + resultField: '', + labelField: 'title', + valueField: 'key', + placeholder: majorCategoryId ? '请选择物料小类' : '请先选择物料大类', + disabled: !majorCategoryId, + }; + }, colProps: { span: 6 }, }, ]; @@ -73,14 +99,16 @@ export const formSchema: FormSchema[] = [ { label: '物料大类', field: 'majorCategoryId', - component: 'JDictSelectTag', - componentProps: { dictCode: 'mes_material_category,category_name,id' }, + required: true, + component: 'Input', + slot: 'majorCategoryIdField', }, { label: '物料小类', field: 'minorCategoryId', - component: 'JDictSelectTag', - componentProps: { dictCode: 'mes_material_category,category_name,id' }, + required: true, + component: 'Input', + slot: 'minorCategoryIdField', }, { label: '物料描述', field: 'materialDesc', component: 'InputTextArea' }, { label: '物料别名', field: 'aliasName', component: 'Input' }, diff --git a/jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue b/jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue index a6f69b1..26edd29 100644 --- a/jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue +++ b/jeecgboot-vue3/src/views/mes/material/MesMixerMaterialList.vue @@ -1,36 +1,114 @@