From 6bb27899c1f1ae0454bbf41c5ebbf6c1f34d1a5d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 15 Feb 2026 14:03:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(mes):=20=E6=96=B0=E5=A2=9E=E7=89=A9?= =?UTF-8?q?=E6=96=99=E4=BA=A7=E5=93=81=E5=88=86=E7=B1=BB=E4=B8=8E=E7=89=A9?= =?UTF-8?q?=E6=96=99=E4=BA=A7=E5=93=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 迁移 ktg-mes 的 md_item_type 和 md_item 两张表到 yudao-module-mes, 包含完整的 CRUD、树形分类、物料分页查询、enrichment 等功能。 后端新增 17 个文件(1337 行): - DO: MesMdItemTypeDO(树形分类)、MesMdItemDO(物料产品) - VO: 分类 3 个(List/Save/Resp)、物料 3 个(Page/Save/Resp) - Mapper: 2 个(BaseMapperX,纯 Java,无 XML) - Service: 4 个(接口 + 实现) - Controller: 2 个(/mes/md/item-type、/mes/md/item) - ErrorCodeConstants 追加 9 个错误码 关键业务逻辑: - 分类:父分类递归环路检测、同级名称/编码唯一性、删除保护(子分类+物料) - 物料:编码/名称全局唯一、分类存在校验、安全库存联动清零 - enrichment:物料 RespVO 通过 Service 关联填充 itemTypeName、itemOrProduct - 循环依赖:MesMdItemTypeServiceImpl 用 @Lazy 注入 MesMdItemService plan: plans/swirling-stirring-metcalfe.md --- src/api/mes/md/item/index.ts | 58 +++++ src/api/mes/md/item/type/index.ts | 51 ++++ src/views/mes/md/item/MdItemForm.vue | 219 +++++++++++++++++ src/views/mes/md/item/index.vue | 231 ++++++++++++++++++ src/views/mes/md/item/type/MdItemTypeForm.vue | 167 +++++++++++++ src/views/mes/md/item/type/index.vue | 214 ++++++++++++++++ 6 files changed, 940 insertions(+) create mode 100644 src/api/mes/md/item/index.ts create mode 100644 src/api/mes/md/item/type/index.ts create mode 100644 src/views/mes/md/item/MdItemForm.vue create mode 100644 src/views/mes/md/item/index.vue create mode 100644 src/views/mes/md/item/type/MdItemTypeForm.vue create mode 100644 src/views/mes/md/item/type/index.vue diff --git a/src/api/mes/md/item/index.ts b/src/api/mes/md/item/index.ts new file mode 100644 index 000000000..b64bd75b3 --- /dev/null +++ b/src/api/mes/md/item/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +// MES 物料产品 VO +export interface MdItemVO { + id: number // 物料编号 + code: string // 物料编码 + name: string // 物料名称 + specification: string // 规格型号 + unitOfMeasure: string // 单位编码 + itemTypeId: number // 物料分类编号 + itemTypeName?: string // 物料分类名称 + itemOrProduct?: string // 物料/产品标识 + status: number // 状态 + safeStockFlag: boolean // 是否启用安全库存 + minStock: number // 最低库存量 + maxStock: number // 最高库存量 + highValue: boolean // 是否高值物料 + batchFlag: boolean // 是否启用批次管理 + remark: string // 备注 +} + +// MES 物料产品 API +export const MdItemApi = { + // 查询物料产品分页 + getItemPage: async (params: any) => { + return await request.get({ url: `/mes/md/item/page`, params }) + }, + + // 查询物料产品精简列表 + getItemSimpleList: async () => { + return await request.get({ url: `/mes/md/item/simple-list` }) + }, + + // 查询物料产品详情 + getItem: async (id: number) => { + return await request.get({ url: `/mes/md/item/get?id=` + id }) + }, + + // 新增物料产品 + createItem: async (data: MdItemVO) => { + return await request.post({ url: `/mes/md/item/create`, data }) + }, + + // 修改物料产品 + updateItem: async (data: MdItemVO) => { + return await request.put({ url: `/mes/md/item/update`, data }) + }, + + // 删除物料产品 + deleteItem: async (id: number) => { + return await request.delete({ url: `/mes/md/item/delete?id=` + id }) + }, + + // 导出物料产品 Excel + exportItem: async (params: any) => { + return await request.download({ url: `/mes/md/item/export-excel`, params }) + } +} diff --git a/src/api/mes/md/item/type/index.ts b/src/api/mes/md/item/type/index.ts new file mode 100644 index 000000000..3833b9995 --- /dev/null +++ b/src/api/mes/md/item/type/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +// MES 物料产品分类 VO +export interface MdItemTypeVO { + id: number // 分类编号 + parentId: number // 父分类编号 + code: string // 分类编码 + name: string // 分类名称 + itemOrProduct: string // 物料/产品标识 + sort: number // 显示排序 + status: number // 状态 + remark: string // 备注 +} + +// MES 物料产品分类 API +export const MdItemTypeApi = { + // 查询物料产品分类列表 + getItemTypeList: async (params?: any) => { + return await request.get({ url: `/mes/md/item-type/list`, params }) + }, + + // 查询物料产品分类精简列表 + getItemTypeSimpleList: async () => { + return await request.get({ url: `/mes/md/item-type/simple-list` }) + }, + + // 查询物料产品分类详情 + getItemType: async (id: number) => { + return await request.get({ url: `/mes/md/item-type/get?id=` + id }) + }, + + // 新增物料产品分类 + createItemType: async (data: MdItemTypeVO) => { + return await request.post({ url: `/mes/md/item-type/create`, data }) + }, + + // 修改物料产品分类 + updateItemType: async (data: MdItemTypeVO) => { + return await request.put({ url: `/mes/md/item-type/update`, data }) + }, + + // 删除物料产品分类 + deleteItemType: async (id: number) => { + return await request.delete({ url: `/mes/md/item-type/delete?id=` + id }) + }, + + // 导出物料产品分类 Excel + exportItemType: async (params: any) => { + return await request.download({ url: `/mes/md/item-type/export-excel`, params }) + } +} diff --git a/src/views/mes/md/item/MdItemForm.vue b/src/views/mes/md/item/MdItemForm.vue new file mode 100644 index 000000000..6dded1f0d --- /dev/null +++ b/src/views/mes/md/item/MdItemForm.vue @@ -0,0 +1,219 @@ + + + diff --git a/src/views/mes/md/item/index.vue b/src/views/mes/md/item/index.vue new file mode 100644 index 000000000..75a4026eb --- /dev/null +++ b/src/views/mes/md/item/index.vue @@ -0,0 +1,231 @@ + + + diff --git a/src/views/mes/md/item/type/MdItemTypeForm.vue b/src/views/mes/md/item/type/MdItemTypeForm.vue new file mode 100644 index 000000000..0b84ed6f5 --- /dev/null +++ b/src/views/mes/md/item/type/MdItemTypeForm.vue @@ -0,0 +1,167 @@ + + + diff --git a/src/views/mes/md/item/type/index.vue b/src/views/mes/md/item/type/index.vue new file mode 100644 index 000000000..cd686161a --- /dev/null +++ b/src/views/mes/md/item/type/index.vue @@ -0,0 +1,214 @@ + + + +