From 3f2c486f0439292d45ee3fa270264ab4c07be208 Mon Sep 17 00:00:00 2001 From: jiangxh <1217934998@qq.com> Date: Tue, 2 Jun 2026 14:11:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=81=9C=E6=9C=BA=E8=AE=B0=E5=BD=95=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=EF=BC=8C=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...es-xsl-downtime-record-menu-permission.sql | 82 +++ .../jeecg-module-xslmes/doc/代码修改日志 | 60 ++ .../MesXslDowntimeRecordController.java | 220 ++++++++ .../xslmes/entity/MesXslDowntimeRecord.java | 106 ++++ .../mapper/MesXslDowntimeRecordMapper.java | 9 + .../service/IMesXslDowntimeRecordService.java | 16 + .../impl/MesXslDowntimeRecordServiceImpl.java | 92 ++++ .../MesXslDowntimeRecordMaintenanceDTO.java | 33 ++ .../jeecg-system-biz/docs/代码修改日志 | 18 + .../V3.9.2_117__mes_xsl_downtime_record.sql | 91 +++ .../components/MesSearchPickerInput.vue | 18 + .../MesXslDowntimeMainType.data.ts | 9 +- .../MesXslDowntimeMainTypeList.vue | 32 +- .../MesXslDowntimeRecord.api.ts | 51 ++ .../MesXslDowntimeRecord.data.ts | 177 ++++++ .../MesXslDowntimeRecordList.vue | 198 +++++++ .../MesXslDowntimeRecordMaintenanceModal.vue | 160 ++++++ .../components/MesXslDowntimeRecordModal.vue | 108 ++++ .../MesXslDowntimeTypeSelectModal.vue | 96 ++++ .../MesXslInspectMaintainItemSelectModal.vue | 117 ++++ .../MesXslDowntimeType.data.ts | 18 +- .../MesXslDowntimeTypeList.vue | 90 ++- .../MesXslEquipInspectConfig.data.ts | 9 +- .../MesXslEquipInspectConfigList.vue | 32 +- .../MesXslEquipInspectRecord.data.ts | 9 +- .../MesXslEquipInspectRecordList.vue | 32 +- .../MesXslEquipmentCategory.data.ts | 9 +- .../MesXslEquipmentCategoryList.vue | 32 +- .../MesXslEquipmentLedger.data.ts | 41 +- .../MesXslEquipmentLedgerList.vue | 520 +++++++++++------- .../MesXslEquipmentPart.data.ts | 9 +- .../MesXslEquipmentPartList.vue | 32 +- .../MesXslEquipmentSubPart.data.ts | 18 +- .../MesXslEquipmentSubPartList.vue | 76 ++- .../MesXslEquipmentType.data.ts | 18 +- .../MesXslEquipmentTypeList.vue | 60 +- .../MesXslInspectMaintainItem.data.ts | 33 +- .../MesXslInspectMaintainItemList.vue | 166 +++++- .../mesXslSparePart/MesXslSparePart.data.ts | 17 +- .../mesXslSparePart/MesXslSparePartList.vue | 60 +- .../views/xslmes/utils/mesSearchPickerUtil.ts | 21 + 41 files changed, 2782 insertions(+), 213 deletions(-) create mode 100644 jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java create mode 100644 jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql create mode 100644 jeecgboot-vue3/src/views/xslmes/components/MesSearchPickerInput.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue create mode 100644 jeecgboot-vue3/src/views/xslmes/utils/mesSearchPickerUtil.ts diff --git a/jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql b/jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql new file mode 100644 index 0000000..1720549 --- /dev/null +++ b/jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql @@ -0,0 +1,82 @@ +-- MES 停机记录:建表 + 菜单 + 按钮 + 租户 admin 授权(可整文件一次执行) +-- 权限前缀:mes:mes_xsl_downtime_record:* +-- 依赖:mes_xsl_equipment_ledger、mes_xsl_downtime_type;父菜单 设备管理 +-- Flyway:V3.9.2_117__mes_xsl_downtime_record.sql +SET NAMES utf8mb4; + +CREATE TABLE IF NOT EXISTS `mes_xsl_downtime_record` ( + `id` varchar(32) NOT NULL COMMENT '主键', + `equipment_ledger_id` varchar(32) NOT NULL COMMENT '设备台账主键 mes_xsl_equipment_ledger.id', + `equipment_code` varchar(500) DEFAULT NULL COMMENT '设备编号冗余', + `equipment_name` varchar(500) DEFAULT NULL COMMENT '设备名称冗余', + `downtime_type_id` varchar(32) NOT NULL COMMENT '停机类型主键 mes_xsl_downtime_type.id', + `downtime_type_name` varchar(500) DEFAULT NULL COMMENT '停机类型名称冗余', + `start_time` datetime NOT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT NULL COMMENT '结束时间', + `equipment_part_id` varchar(32) DEFAULT NULL COMMENT '设备部位主键 mes_xsl_equipment_part.id', + `equipment_part_name` varchar(500) DEFAULT NULL COMMENT '设备部位名称冗余', + `inspect_maintain_item_id` varchar(32) DEFAULT NULL COMMENT '点检及保养项目主键 mes_xsl_inspect_maintain_item.id', + `inspect_maintain_item_name` varchar(500) DEFAULT NULL COMMENT '点检项目名称冗余', + `maintenance_result` varchar(500) DEFAULT NULL COMMENT '维修结果', + `maintainer_user_id` varchar(32) DEFAULT NULL COMMENT '维修人用户ID', + `maintainer_username` varchar(500) DEFAULT NULL COMMENT '维修人账号', + `maintainer_realname` varchar(500) DEFAULT NULL COMMENT '维修人姓名', + `maintenance_filled_flag` varchar(1) DEFAULT '0' COMMENT '是否已录入维修结果(字典yn:1是0否)', + `tenant_id` int DEFAULT NULL COMMENT '租户', + `sys_org_code` varchar(500) DEFAULT NULL COMMENT '部门', + `create_by` varchar(500) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(500) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `del_flag` int DEFAULT '0' COMMENT '删除标记(0正常1删除)', + PRIMARY KEY (`id`), + KEY `idx_mdr_equipment` (`equipment_ledger_id`), + KEY `idx_mdr_downtime_type` (`downtime_type_id`), + KEY `idx_mdr_start_time` (`start_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MES停机记录'; + +SET @mes_tenant_id = 1002; + +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +VALUES ('1860000000000000201', @mes_equip_pid, '停机记录', '/xslmes/mesXslDowntimeRecord', 'xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList', 'MesXslDowntimeRecordList', 1, NULL, '1', 12, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `url` = VALUES(`url`), `component` = VALUES(`component`), `component_name` = VALUES(`component_name`), +`menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), `sort_no` = VALUES(`sort_no`), +`is_route` = VALUES(`is_route`), `is_leaf` = VALUES(`is_leaf`), `hidden` = VALUES(`hidden`), `status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`), +`keep_alive` = VALUES(`keep_alive`), `internal_or_external` = VALUES(`internal_or_external`), `icon` = 'ant-design:history-outlined'; + +UPDATE `sys_permission` SET `icon` = 'ant-design:history-outlined' WHERE `id` = '1860000000000000201' AND `del_flag` = 0; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) VALUES +('1860000000000000202', '1860000000000000201', '新增', 2, 'mes:mes_xsl_downtime_record:add', '1', '1', 0, 'admin', NOW()), +('1860000000000000203', '1860000000000000201', '编辑', 2, 'mes:mes_xsl_downtime_record:edit', '1', '1', 0, 'admin', NOW()), +('1860000000000000204', '1860000000000000201', '删除', 2, 'mes:mes_xsl_downtime_record:delete', '1', '1', 0, 'admin', NOW()), +('1860000000000000205', '1860000000000000201', '批量删除', 2, 'mes:mes_xsl_downtime_record:deleteBatch', '1', '1', 0, 'admin', NOW()), +('1860000000000000206', '1860000000000000201', '导出', 2, 'mes:mes_xsl_downtime_record:exportXls', '1', '1', 0, 'admin', NOW()), +('1860000000000000207', '1860000000000000201', '导入', 2, 'mes:mes_xsl_downtime_record:importExcel', '1', '1', 0, 'admin', NOW()) +ON DUPLICATE KEY UPDATE +`parent_id` = VALUES(`parent_id`), `name` = VALUES(`name`), `menu_type` = VALUES(`menu_type`), `perms` = VALUES(`perms`), `perms_type` = VALUES(`perms_type`), +`status` = VALUES(`status`), `del_flag` = VALUES(`del_flag`); + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + '1860000000000000201', + '1860000000000000202', '1860000000000000203', '1860000000000000204', '1860000000000000205', + '1860000000000000206', '1860000000000000207' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 index bd75771..79390d1 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/doc/代码修改日志 @@ -521,3 +521,63 @@ jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules -- author:GHT---date:20260529--for: 【QH-MES审批流设计】审批IM消息升级为可跳转业务卡片(biz_record):点击可定位到对应单据,无法定位功能页时退回纯文本 --- jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/approval/controller/MesXslApprovalLaunchController.java + +-- author:jiangxh---date:20250602--for: 【MES】停机记录:建表+菜单+CRUD+列表录入维修结果弹窗 --- +jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslInspectMaintainItemController.java +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue + +-- author:jiangxh---date:20250602--for: 【MES】停机记录弹窗日期时间选择器下拉被裁剪导致点击无反应 --- +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts + +-- author:jiangxh---date:20250602--for: 【MES】停机记录维修项目按设备部位筛选(点检保养项目均含小部位) --- +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslInspectMaintainItemController.java + +-- author:jiangxh---date:20250602--for: 【MES】设备台账列表所属工序查询改为工序选择器 --- +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue + +-- author:jiangxh---date:20250602--for: 【MES】设备管理各功能列表查询与表单一致改为选择器 --- +jeecgboot-vue3/src/views/xslmes/components/MesSearchPickerInput.vue +jeecgboot-vue3/src/views/xslmes/utils/mesSearchPickerUtil.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentCategory/MesXslEquipmentCategory.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentCategory/MesXslEquipmentCategoryList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentType/MesXslEquipmentType.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentType/MesXslEquipmentTypeList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentPart/MesXslEquipmentPart.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentPart/MesXslEquipmentPartList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentSubPart/MesXslEquipmentSubPart.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentSubPart/MesXslEquipmentSubPartList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedger.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipmentLedger/MesXslEquipmentLedgerList.vue +jeecgboot-vue3/src/views/xslmes/mesXslSparePart/MesXslSparePart.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslSparePart/MesXslSparePartList.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainType.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeType.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeTypeList.vue +jeecgboot-vue3/src/views/xslmes/mesXslInspectMaintainItem/MesXslInspectMaintainItem.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslInspectMaintainItem/MesXslInspectMaintainItemList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfig.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfigList.vue +jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectRecord/MesXslEquipInspectRecord.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectRecord/MesXslEquipInspectRecordList.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java new file mode 100644 index 0000000..2264053 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java @@ -0,0 +1,220 @@ +package org.jeecg.modules.xslmes.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Date; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.xslmes.entity.MesXslDowntimeRecord; +import org.jeecg.modules.xslmes.entity.MesXslDowntimeType; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentLedger; +import org.jeecg.modules.xslmes.service.IMesXslDowntimeRecordService; +import org.jeecg.modules.xslmes.service.IMesXslDowntimeTypeService; +import org.jeecg.modules.xslmes.service.IMesXslEquipmentLedgerService; +import org.jeecg.modules.xslmes.vo.MesXslDowntimeRecordMaintenanceDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +/** + * MES 停机记录 + */ +@Tag(name = "MES停机记录") +@RestController +@RequestMapping("/xslmes/mesXslDowntimeRecord") +@Slf4j +public class MesXslDowntimeRecordController extends JeecgController { + + @Autowired + private IMesXslDowntimeRecordService mesXslDowntimeRecordService; + + @Autowired + private IMesXslEquipmentLedgerService mesXslEquipmentLedgerService; + + @Autowired + private IMesXslDowntimeTypeService mesXslDowntimeTypeService; + + @Operation(summary = "MES停机记录-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList( + MesXslDowntimeRecord model, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(model, req.getParameterMap()); + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录列表默认按开始时间倒序----------- + queryWrapper.orderByDesc("start_time").orderByDesc("create_time"); + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录列表默认按开始时间倒序----------- + Page page = new Page<>(pageNo, pageSize); + IPage pageList = mesXslDowntimeRecordService.page(page, queryWrapper); + return Result.OK(pageList); + } + + @AutoLog(value = "MES停机记录-添加") + @Operation(summary = "MES停机记录-添加") + @RequiresPermissions("mes:mes_xsl_downtime_record:add") + @PostMapping(value = "/add") + public Result add(@RequestBody MesXslDowntimeRecord model) { + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验----------- + String err = validateForSave(model); + if (err != null) { + return Result.error(err); + } + clearMaintenanceFieldsForFormSave(model); + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验----------- + mesXslDowntimeRecordService.save(model); + return Result.OK("添加成功!"); + } + + @AutoLog(value = "MES停机记录-编辑") + @Operation(summary = "MES停机记录-编辑") + @RequiresPermissions("mes:mes_xsl_downtime_record:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result edit(@RequestBody MesXslDowntimeRecord model) { + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验----------- + String err = validateForSave(model); + if (err != null) { + return Result.error(err); + } + MesXslDowntimeRecord old = mesXslDowntimeRecordService.getById(model.getId()); + if (old == null) { + return Result.error("未找到对应数据"); + } + preserveMaintenanceFields(model, old); + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验----------- + mesXslDowntimeRecordService.updateById(model); + return Result.OK("编辑成功!"); + } + + @AutoLog(value = "MES停机记录-录入维修结果") + @Operation(summary = "MES停机记录-录入维修结果") + @RequiresPermissions("mes:mes_xsl_downtime_record:edit") + @PostMapping(value = "/saveMaintenanceResult") + public Result saveMaintenanceResult(@RequestBody MesXslDowntimeRecordMaintenanceDTO dto) { + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录录入维修结果----------- + mesXslDowntimeRecordService.saveMaintenanceResult(dto); + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录录入维修结果----------- + return Result.OK("录入成功!"); + } + + @AutoLog(value = "MES停机记录-删除") + @Operation(summary = "MES停机记录-通过id删除") + @RequiresPermissions("mes:mes_xsl_downtime_record:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + mesXslDowntimeRecordService.removeById(id); + return Result.OK("删除成功!"); + } + + @AutoLog(value = "MES停机记录-批量删除") + @Operation(summary = "MES停机记录-批量删除") + @RequiresPermissions("mes:mes_xsl_downtime_record:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + mesXslDowntimeRecordService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + @Operation(summary = "MES停机记录-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + MesXslDowntimeRecord entity = mesXslDowntimeRecordService.getById(id); + if (entity == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(entity); + } + + @RequiresPermissions("mes:mes_xsl_downtime_record:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, MesXslDowntimeRecord model) { + return super.exportXls(request, model, MesXslDowntimeRecord.class, "MES停机记录"); + } + + @RequiresPermissions("mes:mes_xsl_downtime_record:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, MesXslDowntimeRecord.class); + } + + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验、关联设备与停机类型回填----------- + private String validateForSave(MesXslDowntimeRecord model) { + if (model == null) { + return "参数无效"; + } + if (oConvertUtils.isEmpty(model.getEquipmentLedgerId())) { + return "请选择机台"; + } + MesXslEquipmentLedger ledger = mesXslEquipmentLedgerService.getById(model.getEquipmentLedgerId()); + if (ledger == null + || (ledger.getDelFlag() != null && CommonConstant.DEL_FLAG_1.equals(ledger.getDelFlag()))) { + return "所选设备不存在"; + } + model.setEquipmentCode(ledger.getEquipmentCode()); + model.setEquipmentName(ledger.getEquipmentName()); + + if (oConvertUtils.isEmpty(model.getDowntimeTypeId())) { + return "请选择停机原因"; + } + MesXslDowntimeType downtimeType = mesXslDowntimeTypeService.getById(model.getDowntimeTypeId()); + if (downtimeType == null + || (downtimeType.getDelFlag() != null && CommonConstant.DEL_FLAG_1.equals(downtimeType.getDelFlag()))) { + return "所选停机类型不存在"; + } + if (!"0".equals(downtimeType.getStatus())) { + return "所选停机类型未启用"; + } + model.setDowntimeTypeName(downtimeType.getDowntimeType()); + + if (model.getStartTime() == null) { + return "开始时间不能为空"; + } + Date endTime = model.getEndTime(); + if (endTime != null && endTime.before(model.getStartTime())) { + return "结束时间不能早于开始时间"; + } + + if (oConvertUtils.isEmpty(model.getMaintenanceFilledFlag())) { + model.setMaintenanceFilledFlag("0"); + } + return null; + } + + private void clearMaintenanceFieldsForFormSave(MesXslDowntimeRecord model) { + model.setEquipmentPartId(null); + model.setEquipmentPartName(null); + model.setInspectMaintainItemId(null); + model.setInspectMaintainItemName(null); + model.setMaintenanceResult(null); + model.setMaintainerUserId(null); + model.setMaintainerUsername(null); + model.setMaintainerRealname(null); + model.setMaintenanceFilledFlag("0"); + } + + private void preserveMaintenanceFields(MesXslDowntimeRecord model, MesXslDowntimeRecord old) { + model.setEquipmentPartId(old.getEquipmentPartId()); + model.setEquipmentPartName(old.getEquipmentPartName()); + model.setInspectMaintainItemId(old.getInspectMaintainItemId()); + model.setInspectMaintainItemName(old.getInspectMaintainItemName()); + model.setMaintenanceResult(old.getMaintenanceResult()); + model.setMaintainerUserId(old.getMaintainerUserId()); + model.setMaintainerUsername(old.getMaintainerUsername()); + model.setMaintainerRealname(old.getMaintainerRealname()); + model.setMaintenanceFilledFlag( + oConvertUtils.isEmpty(old.getMaintenanceFilledFlag()) ? "0" : old.getMaintenanceFilledFlag()); + } + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录保存前校验、关联设备与停机类型回填----------- +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java new file mode 100644 index 0000000..1db9088 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java @@ -0,0 +1,106 @@ +package org.jeecg.modules.xslmes.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import java.io.Serializable; +import java.util.Date; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecg.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * MES 停机记录(表 mes_xsl_downtime_record) + */ +@Data +@TableName("mes_xsl_downtime_record") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description = "MES停机记录") +public class MesXslDowntimeRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) + private String id; + + @Schema(description = "设备台账主键 mes_xsl_equipment_ledger.id") + private String equipmentLedgerId; + + @Excel(name = "设备编号", width = 18) + @Schema(description = "设备编号冗余") + private String equipmentCode; + + @Excel(name = "机台", width = 22) + @Schema(description = "设备名称冗余") + private String equipmentName; + + @Schema(description = "停机类型主键 mes_xsl_downtime_type.id") + private String downtimeTypeId; + + @Excel(name = "停机原因", width = 24) + @Schema(description = "停机类型名称冗余") + private String downtimeTypeName; + + @Excel(name = "开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "开始时间") + private Date startTime; + + @Excel(name = "结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Schema(description = "结束时间") + private Date endTime; + + @Schema(description = "设备部位主键 mes_xsl_equipment_part.id") + private String equipmentPartId; + + @Excel(name = "设备部位", width = 18) + @Schema(description = "设备部位名称冗余") + private String equipmentPartName; + + @Schema(description = "点检及保养项目主键 mes_xsl_inspect_maintain_item.id") + private String inspectMaintainItemId; + + @Excel(name = "维修项目", width = 22) + @Schema(description = "点检项目名称冗余") + private String inspectMaintainItemName; + + @Excel(name = "维修结果", width = 28) + @Schema(description = "维修结果") + private String maintenanceResult; + + @Schema(description = "维修人用户ID") + private String maintainerUserId; + + @Schema(description = "维修人账号") + private String maintainerUsername; + + @Excel(name = "维修人", width = 12) + @Schema(description = "维修人姓名") + private String maintainerRealname; + + @Excel(name = "是否已录入维修", width = 14, dicCode = "yn") + @Dict(dicCode = "yn") + @Schema(description = "是否已录入维修结果(字典yn:1是0否)") + private String maintenanceFilledFlag; + + private Integer tenantId; + private String sysOrgCode; + private String createBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + private String updateBy; + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + private Integer delFlag; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java new file mode 100644 index 0000000..23b55c5 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java @@ -0,0 +1,9 @@ +package org.jeecg.modules.xslmes.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.jeecg.modules.xslmes.entity.MesXslDowntimeRecord; + +/** + * MES 停机记录 + */ +public interface MesXslDowntimeRecordMapper extends BaseMapper {} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java new file mode 100644 index 0000000..6d1f6aa --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java @@ -0,0 +1,16 @@ +package org.jeecg.modules.xslmes.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.xslmes.entity.MesXslDowntimeRecord; +import org.jeecg.modules.xslmes.vo.MesXslDowntimeRecordMaintenanceDTO; + +/** + * MES 停机记录 + */ +public interface IMesXslDowntimeRecordService extends IService { + + /** + * 录入维修结果 + */ + void saveMaintenanceResult(MesXslDowntimeRecordMaintenanceDTO dto); +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java new file mode 100644 index 0000000..4177d69 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java @@ -0,0 +1,92 @@ +package org.jeecg.modules.xslmes.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.exception.JeecgBootException; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.xslmes.entity.MesXslDowntimeRecord; +import org.jeecg.modules.xslmes.entity.MesXslEquipmentPart; +import org.jeecg.modules.xslmes.entity.MesXslInspectMaintainItem; +import org.jeecg.modules.xslmes.mapper.MesXslDowntimeRecordMapper; +import org.jeecg.modules.xslmes.service.IMesXslDowntimeRecordService; +import org.jeecg.modules.xslmes.service.IMesXslEquipmentPartService; +import org.jeecg.modules.xslmes.service.IMesXslInspectMaintainItemService; +import org.jeecg.modules.xslmes.vo.MesXslDowntimeRecordMaintenanceDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +/** + * MES 停机记录 + */ +@Service +public class MesXslDowntimeRecordServiceImpl extends ServiceImpl + implements IMesXslDowntimeRecordService { + + @Autowired + private IMesXslEquipmentPartService mesXslEquipmentPartService; + + @Autowired + private IMesXslInspectMaintainItemService mesXslInspectMaintainItemService; + + //update-begin---author:jiangxh ---date:20250602 for:【MES】停机记录录入维修结果----------- + @Override + @Transactional(rollbackFor = Exception.class) + public void saveMaintenanceResult(MesXslDowntimeRecordMaintenanceDTO dto) { + if (dto == null || oConvertUtils.isEmpty(dto.getId())) { + throw new JeecgBootException("停机记录不存在"); + } + MesXslDowntimeRecord record = this.getById(dto.getId()); + if (record == null + || (record.getDelFlag() != null && CommonConstant.DEL_FLAG_1.equals(record.getDelFlag()))) { + throw new JeecgBootException("停机记录不存在"); + } + if (oConvertUtils.isEmpty(dto.getEquipmentPartId())) { + throw new JeecgBootException("请选择设备部位"); + } + if (oConvertUtils.isEmpty(dto.getInspectMaintainItemId())) { + throw new JeecgBootException("请选择维修项目"); + } + if (oConvertUtils.isEmpty(dto.getMaintenanceResult()) || dto.getMaintenanceResult().trim().isEmpty()) { + throw new JeecgBootException("维修结果不能为空"); + } + if (oConvertUtils.isEmpty(dto.getMaintainerUserId())) { + throw new JeecgBootException("请选择维修人"); + } + + MesXslEquipmentPart part = mesXslEquipmentPartService.getById(dto.getEquipmentPartId()); + if (part == null + || (part.getDelFlag() != null && CommonConstant.DEL_FLAG_1.equals(part.getDelFlag()))) { + throw new JeecgBootException("设备部位不存在"); + } + + MesXslInspectMaintainItem item = mesXslInspectMaintainItemService.getById(dto.getInspectMaintainItemId()); + if (item == null + || (item.getDelFlag() != null && CommonConstant.DEL_FLAG_1.equals(item.getDelFlag()))) { + throw new JeecgBootException("维修项目不存在"); + } + if (!dto.getEquipmentPartId().equals(item.getEquipmentPartId())) { + throw new JeecgBootException("维修项目与所选设备部位不匹配"); + } + + record.setEquipmentPartId(part.getId()); + record.setEquipmentPartName(part.getPartName()); + record.setInspectMaintainItemId(item.getId()); + record.setInspectMaintainItemName(item.getItemName()); + record.setMaintenanceResult(dto.getMaintenanceResult().trim()); + record.setMaintainerUserId(dto.getMaintainerUserId()); + record.setMaintainerUsername(trimToNull(dto.getMaintainerUsername())); + record.setMaintainerRealname(trimToNull(dto.getMaintainerRealname())); + record.setMaintenanceFilledFlag("1"); + this.updateById(record); + } + + private static String trimToNull(String value) { + if (value == null) { + return null; + } + String v = value.trim(); + return v.isEmpty() ? null : v; + } + //update-end---author:jiangxh ---date:20250602 for:【MES】停机记录录入维修结果----------- +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java new file mode 100644 index 0000000..462be57 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java @@ -0,0 +1,33 @@ +package org.jeecg.modules.xslmes.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 停机记录-录入维修结果入参 + */ +@Data +@Schema(description = "停机记录-录入维修结果") +public class MesXslDowntimeRecordMaintenanceDTO { + + @Schema(description = "停机记录主键", requiredMode = Schema.RequiredMode.REQUIRED) + private String id; + + @Schema(description = "设备部位主键") + private String equipmentPartId; + + @Schema(description = "点检及保养项目主键") + private String inspectMaintainItemId; + + @Schema(description = "维修结果") + private String maintenanceResult; + + @Schema(description = "维修人用户ID") + private String maintainerUserId; + + @Schema(description = "维修人账号") + private String maintainerUsername; + + @Schema(description = "维修人姓名") + private String maintainerRealname; +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 b/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 index 01b0b7c..67f1c74 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 +++ b/jeecg-boot/jeecg-module-system/jeecg-system-biz/docs/代码修改日志 @@ -540,3 +540,21 @@ jeecgboot-vue3/src/views/xslmes/mesXslRubberQuickTestRecord/MesXslRubberQuickTes jeecgboot-vue3/src/views/xslmes/mesXslRubberQuickTestRecord/MesXslRubberQuickTestRecord.data.ts jeecgboot-vue3/src/views/xslmes/mesXslRubberQuickTestRecord/components/MesXslRubberQuickTestRecordModal.vue jeecgboot-vue3/src/views/mes/material/MesMaterialList.vue + +-- author:jiangxh---date:20250602--for: 【MES】停机记录:建表+菜单+CRUD+列表录入维修结果弹窗 --- +jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql +jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslDowntimeRecord.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/vo/MesXslDowntimeRecordMaintenanceDTO.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mapper/MesXslDowntimeRecordMapper.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/IMesXslDowntimeRecordService.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslDowntimeRecordServiceImpl.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslDowntimeRecordController.java +jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/controller/MesXslInspectMaintainItemController.java +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue +jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql new file mode 100644 index 0000000..a495a89 --- /dev/null +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_117__mes_xsl_downtime_record.sql @@ -0,0 +1,91 @@ +-- MES 停机记录:建表 + 菜单 + 按钮 + 租户 admin 授权 +-- 权限前缀:mes:mes_xsl_downtime_record:* +-- 父菜单:设备管理;依赖设备台账、停机类型 +-- 独立脚本:jeecg-boot/db/mes-xsl-downtime-record-menu-permission.sql +SET NAMES utf8mb4; + +CREATE TABLE IF NOT EXISTS `mes_xsl_downtime_record` ( + `id` varchar(32) NOT NULL COMMENT '主键', + `equipment_ledger_id` varchar(32) NOT NULL COMMENT '设备台账主键 mes_xsl_equipment_ledger.id', + `equipment_code` varchar(500) DEFAULT NULL COMMENT '设备编号冗余', + `equipment_name` varchar(500) DEFAULT NULL COMMENT '设备名称冗余', + `downtime_type_id` varchar(32) NOT NULL COMMENT '停机类型主键 mes_xsl_downtime_type.id', + `downtime_type_name` varchar(500) DEFAULT NULL COMMENT '停机类型名称冗余', + `start_time` datetime NOT NULL COMMENT '开始时间', + `end_time` datetime DEFAULT NULL COMMENT '结束时间', + `equipment_part_id` varchar(32) DEFAULT NULL COMMENT '设备部位主键 mes_xsl_equipment_part.id', + `equipment_part_name` varchar(500) DEFAULT NULL COMMENT '设备部位名称冗余', + `inspect_maintain_item_id` varchar(32) DEFAULT NULL COMMENT '点检及保养项目主键 mes_xsl_inspect_maintain_item.id', + `inspect_maintain_item_name` varchar(500) DEFAULT NULL COMMENT '点检项目名称冗余', + `maintenance_result` varchar(500) DEFAULT NULL COMMENT '维修结果', + `maintainer_user_id` varchar(32) DEFAULT NULL COMMENT '维修人用户ID', + `maintainer_username` varchar(500) DEFAULT NULL COMMENT '维修人账号', + `maintainer_realname` varchar(500) DEFAULT NULL COMMENT '维修人姓名', + `maintenance_filled_flag` varchar(1) DEFAULT '0' COMMENT '是否已录入维修结果(字典yn:1是0否)', + `tenant_id` int DEFAULT NULL COMMENT '租户', + `sys_org_code` varchar(500) DEFAULT NULL COMMENT '部门', + `create_by` varchar(500) DEFAULT NULL COMMENT '创建人', + `create_time` datetime DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(500) DEFAULT NULL COMMENT '更新人', + `update_time` datetime DEFAULT NULL COMMENT '更新时间', + `del_flag` int DEFAULT '0' COMMENT '删除标记(0正常1删除)', + PRIMARY KEY (`id`), + KEY `idx_mdr_equipment` (`equipment_ledger_id`), + KEY `idx_mdr_downtime_type` (`downtime_type_id`), + KEY `idx_mdr_start_time` (`start_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='MES停机记录'; + +SET @mes_tenant_id = 1002; + +SET @mes_equip_pid = ( + SELECT `id` FROM `sys_permission` + WHERE `del_flag` = 0 AND `menu_type` = 0 AND `name` = '设备管理' + LIMIT 1 +); +SET @mes_equip_pid = IFNULL(@mes_equip_pid, '1860000000000000133'); + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `menu_type`, `perms`, `perms_type`, `sort_no`, `is_route`, `is_leaf`, `hidden`, `status`, `del_flag`, `keep_alive`, `internal_or_external`, `create_by`, `create_time`) +SELECT '1860000000000000201', @mes_equip_pid, '停机记录', '/xslmes/mesXslDowntimeRecord', 'xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList', 'MesXslDowntimeRecordList', 1, NULL, '1', 12, 1, 0, 0, '1', 0, 1, 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000201'); + +UPDATE `sys_permission` SET + `parent_id` = @mes_equip_pid, `name` = '停机记录', `url` = '/xslmes/mesXslDowntimeRecord', + `component` = 'xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList', `component_name` = 'MesXslDowntimeRecordList', + `menu_type` = 1, `sort_no` = 12, `is_route` = 1, `is_leaf` = 0, `hidden` = 0, `status` = '1', `del_flag` = 0, + `keep_alive` = 1, `internal_or_external` = 0, `icon` = 'ant-design:history-outlined' +WHERE `id` = '1860000000000000201'; + +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000202', '1860000000000000201', '新增', 2, 'mes:mes_xsl_downtime_record:add', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000202'); +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000203', '1860000000000000201', '编辑', 2, 'mes:mes_xsl_downtime_record:edit', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000203'); +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000204', '1860000000000000201', '删除', 2, 'mes:mes_xsl_downtime_record:delete', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000204'); +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000205', '1860000000000000201', '批量删除', 2, 'mes:mes_xsl_downtime_record:deleteBatch', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000205'); +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000206', '1860000000000000201', '导出', 2, 'mes:mes_xsl_downtime_record:exportXls', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000206'); +INSERT INTO `sys_permission`(`id`, `parent_id`, `name`, `menu_type`, `perms`, `perms_type`, `status`, `del_flag`, `create_by`, `create_time`) +SELECT '1860000000000000207', '1860000000000000201', '导入', 2, 'mes:mes_xsl_downtime_record:importExcel', '1', '1', 0, 'admin', NOW() +WHERE NOT EXISTS (SELECT 1 FROM `sys_permission` WHERE `id` = '1860000000000000207'); + +INSERT INTO `sys_role_permission`(`id`, `role_id`, `permission_id`, `operate_date`, `operate_ip`) +SELECT REPLACE(UUID(), '-', ''), r.`id`, p.`id`, NOW(), '127.0.0.1' +FROM `sys_role` r +CROSS JOIN `sys_permission` p +WHERE r.`tenant_id` = @mes_tenant_id + AND r.`role_code` = 'admin' + AND p.`id` IN ( + '1860000000000000201', + '1860000000000000202', '1860000000000000203', '1860000000000000204', '1860000000000000205', + '1860000000000000206', '1860000000000000207' + ) + AND NOT EXISTS ( + SELECT 1 FROM `sys_role_permission` rp + WHERE rp.`role_id` = r.`id` AND rp.`permission_id` = p.`id` + ); diff --git a/jeecgboot-vue3/src/views/xslmes/components/MesSearchPickerInput.vue b/jeecgboot-vue3/src/views/xslmes/components/MesSearchPickerInput.vue new file mode 100644 index 0000000..7bf8a3c --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/components/MesSearchPickerInput.vue @@ -0,0 +1,18 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainType.data.ts b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainType.data.ts index 84ee5ef..3bf29a0 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainType.data.ts +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainType.data.ts @@ -44,7 +44,14 @@ export const columns: BasicColumn[] = [ ]; export const searchFormSchema: FormSchema[] = [ - { label: '工序名称', field: 'processOperationName', component: 'Input', colProps: { span: 6 } }, + { label: '', field: 'processOperationId', component: 'Input', show: false }, + { + label: '所属工序', + field: 'processOperationName', + component: 'Input', + slot: 'processOperationPicker', + colProps: { span: 6 }, + }, { label: '停机类型', field: 'downtimeType', component: 'Input', colProps: { span: 6 } }, { label: '是否启用', diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList.vue index 22adcb2..b784df8 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList.vue +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeMainType/MesXslDowntimeMainTypeList.vue @@ -1,6 +1,16 @@ @@ -54,11 +65,17 @@ import { useModal } from '/@/components/Modal'; import { useListPage } from '/@/hooks/system/useListPage'; import Icon from '/@/components/Icon'; + import MesSearchPickerInput from '../components/MesSearchPickerInput.vue'; import MesXslDowntimeMainTypeModal from './components/MesXslDowntimeMainTypeModal.vue'; + import MesXslProcessOperationSelectModal from '/@/views/xslmes/mesXslEquipmentCategory/components/MesXslProcessOperationSelectModal.vue'; + import { clearModelFields, createStripIdNameBeforeFetch } from '../utils/mesSearchPickerUtil'; import { columns, searchFormSchema } from './MesXslDowntimeMainType.data'; import { list, deleteOne, batchDelete, getExportUrl, getImportUrl } from './MesXslDowntimeMainType.api'; + const SEARCH_ID_NAME_PAIRS = [{ idField: 'processOperationId', nameField: 'processOperationName' }]; + const [registerModal, { openModal }] = useModal(); + const [registerProcessModal, { openModal: openProcessModal }] = useModal(); const { tableContext, onExportXls, onImportXls } = useListPage({ tableProps: { @@ -66,6 +83,7 @@ api: list, columns, canResize: true, + beforeFetch: createStripIdNameBeforeFetch(SEARCH_ID_NAME_PAIRS), formConfig: { schemas: searchFormSchema, labelWidth: 100, @@ -87,7 +105,19 @@ }, }); - const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext; + const [registerTable, { reload, getForm }, { rowSelection, selectedRowKeys }] = tableContext; + + function openProcessSelect() { + const v = getForm()?.getFieldsValue?.() || {}; + openProcessModal(true, { processOperationId: v.processOperationId }); + } + + function onProcessSelect(payload: Recordable) { + getForm()?.setFieldsValue?.({ + processOperationId: payload.processOperationId || '', + processOperationName: payload.processOperationName || '', + }); + } function handleAdd() { openModal(true, { isUpdate: false, showFooter: true }); diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts new file mode 100644 index 0000000..734534e --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.api.ts @@ -0,0 +1,51 @@ +import { defHttp } from '/@/utils/http/axios'; +import { useMessage } from '/@/hooks/web/useMessage'; + +const { createConfirm } = useMessage(); + +enum Api { + list = '/xslmes/mesXslDowntimeRecord/list', + save = '/xslmes/mesXslDowntimeRecord/add', + edit = '/xslmes/mesXslDowntimeRecord/edit', + deleteOne = '/xslmes/mesXslDowntimeRecord/delete', + deleteBatch = '/xslmes/mesXslDowntimeRecord/deleteBatch', + importExcel = '/xslmes/mesXslDowntimeRecord/importExcel', + exportXls = '/xslmes/mesXslDowntimeRecord/exportXls', + queryById = '/xslmes/mesXslDowntimeRecord/queryById', + saveMaintenanceResult = '/xslmes/mesXslDowntimeRecord/saveMaintenanceResult', +} + +export const getExportUrl = Api.exportXls; +export const getImportUrl = Api.importExcel; + +export const list = (params) => defHttp.get({ url: Api.list, params }); + +export const queryById = (params: { id: string }) => defHttp.get({ url: Api.queryById, params }); + +export const saveMaintenanceResult = (params) => defHttp.post({ url: Api.saveMaintenanceResult, params }); + +export const deleteOne = (params, handleSuccess) => { + return defHttp.delete({ url: Api.deleteOne, params }, { joinParamsToUrl: true }).then(() => { + handleSuccess(); + }); +}; + +export const batchDelete = (params, handleSuccess) => { + createConfirm({ + iconType: 'warning', + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => { + handleSuccess(); + }); + }, + }); +}; + +export const saveOrUpdate = (params, isUpdate) => { + const url = isUpdate ? Api.edit : Api.save; + return defHttp.post({ url, params }); +}; diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts new file mode 100644 index 0000000..1e5a1ad --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecord.data.ts @@ -0,0 +1,177 @@ +import { BasicColumn, FormSchema } from '/@/components/Table'; + +/** 弹窗内日期时间选择:下拉挂到 body,避免被 Modal 滚动区裁剪 */ +const dateTimePickerProps = { + showTime: true, + format: 'YYYY-MM-DD HH:mm:ss', + valueFormat: 'YYYY-MM-DD HH:mm:ss', + style: { width: '100%' }, + getPopupContainer: () => document.body, +}; + +export const columns: BasicColumn[] = [ + { title: '机台', align: 'center', dataIndex: 'equipmentName', width: 150 }, + { title: '设备编号', align: 'center', dataIndex: 'equipmentCode', width: 130 }, + { title: '停机原因', align: 'center', dataIndex: 'downtimeTypeName', width: 150 }, + { + title: '开始时间', + align: 'center', + dataIndex: 'startTime', + width: 165, + customRender: ({ text }) => (!text ? '' : String(text).length > 19 ? String(text).substring(0, 19) : text), + }, + { + title: '结束时间', + align: 'center', + dataIndex: 'endTime', + width: 165, + customRender: ({ text }) => (!text ? '' : String(text).length > 19 ? String(text).substring(0, 19) : text), + }, + { title: '设备部位', align: 'center', dataIndex: 'equipmentPartName', width: 120 }, + { title: '维修项目', align: 'center', dataIndex: 'inspectMaintainItemName', width: 140 }, + { title: '维修结果', align: 'center', dataIndex: 'maintenanceResult', width: 160, ellipsis: true }, + { title: '维修人', align: 'center', dataIndex: 'maintainerRealname', width: 100 }, + { title: '是否已录入维修', align: 'center', dataIndex: 'maintenanceFilledFlag_dictText', width: 120 }, + { title: '创建人', align: 'center', dataIndex: 'createBy', width: 100 }, + { + title: '创建时间', + align: 'center', + dataIndex: 'createTime', + width: 165, + customRender: ({ text }) => (!text ? '' : String(text).length > 19 ? String(text).substring(0, 19) : text), + }, +]; + +export const searchFormSchema: FormSchema[] = [ + { label: '', field: 'equipmentLedgerId', component: 'Input', show: false }, + { + label: '机台', + field: 'equipmentName', + component: 'Input', + slot: 'equipmentPicker', + colProps: { span: 6 }, + }, + { label: '设备编号', field: 'equipmentCode', component: 'Input', colProps: { span: 6 } }, + { label: '', field: 'downtimeTypeId', component: 'Input', show: false }, + { + label: '停机原因', + field: 'downtimeTypeName', + component: 'Input', + slot: 'downtimeTypePicker', + colProps: { span: 6 }, + }, + { + label: '是否已录入维修', + field: 'maintenanceFilledFlag', + component: 'JDictSelectTag', + componentProps: { dictCode: 'yn' }, + colProps: { span: 6 }, + }, +]; + +export const formSchema: FormSchema[] = [ + { label: '', field: 'id', component: 'Input', show: false }, + { + label: '', + field: 'equipmentLedgerId', + component: 'Input', + show: false, + dynamicRules: () => [{ required: true, message: '请选择机台' }], + }, + { + label: '机台', + field: 'equipmentName', + component: 'Input', + slot: 'equipmentPicker', + }, + { + label: '', + field: 'downtimeTypeId', + component: 'Input', + show: false, + dynamicRules: () => [{ required: true, message: '请选择停机原因' }], + }, + { + label: '停机原因', + field: 'downtimeTypeName', + component: 'Input', + slot: 'downtimeTypePicker', + }, + { + label: '开始时间', + field: 'startTime', + component: 'DatePicker', + required: true, + componentProps: { ...dateTimePickerProps, placeholder: '请选择开始时间' }, + }, + { + label: '结束时间', + field: 'endTime', + component: 'DatePicker', + componentProps: { ...dateTimePickerProps, placeholder: '请选择结束时间' }, + }, +]; + +/** 录入维修结果弹窗 */ +export const maintenanceFormSchema: FormSchema[] = [ + { label: '', field: 'id', component: 'Input', show: false }, + { label: '', field: 'equipmentLedgerId', component: 'Input', show: false }, + { label: '', field: 'equipmentCategoryId', component: 'Input', show: false }, + { label: '', field: 'equipmentTypeId', component: 'Input', show: false }, + { label: '', field: 'maintainerUsername', component: 'Input', show: false }, + { label: '', field: 'maintainerRealname', component: 'Input', show: false }, + { + label: '', + field: 'equipmentPartId', + component: 'Input', + show: false, + dynamicRules: () => [{ required: true, message: '请选择设备部位' }], + }, + { + label: '设备部位', + field: 'equipmentPartName', + component: 'Input', + slot: 'equipmentPartPicker', + }, + { + label: '', + field: 'inspectMaintainItemId', + component: 'Input', + show: false, + dynamicRules: () => [{ required: true, message: '请选择维修项目' }], + }, + { + label: '维修项目', + field: 'inspectMaintainItemName', + component: 'Input', + slot: 'inspectItemPicker', + }, + { + label: '维修结果', + field: 'maintenanceResult', + component: 'InputTextArea', + required: true, + componentProps: { rows: 3, placeholder: '手输维修结果' }, + }, + { + label: '维修人', + field: 'maintainerUserId', + component: 'JSelectUser', + required: true, + componentProps: ({ formActionType }) => ({ + rowKey: 'id', + labelKey: 'realname', + isRadioSelection: true, + maxSelectCount: 1, + onOptionsChange: (options) => { + const row = options?.[0]; + if (row && formActionType) { + formActionType.setFieldsValue({ + maintainerUsername: row.username, + maintainerRealname: row.realname, + }); + } + }, + }), + }, +]; diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue new file mode 100644 index 0000000..0e29ac2 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/MesXslDowntimeRecordList.vue @@ -0,0 +1,198 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue new file mode 100644 index 0000000..6340dca --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordMaintenanceModal.vue @@ -0,0 +1,160 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue new file mode 100644 index 0000000..ca7aa40 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeRecordModal.vue @@ -0,0 +1,108 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue new file mode 100644 index 0000000..f92241f --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslDowntimeTypeSelectModal.vue @@ -0,0 +1,96 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue new file mode 100644 index 0000000..9e96320 --- /dev/null +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeRecord/components/MesXslInspectMaintainItemSelectModal.vue @@ -0,0 +1,117 @@ + + + diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeType.data.ts b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeType.data.ts index 8c657de..95dff4b 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeType.data.ts +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeType.data.ts @@ -47,8 +47,22 @@ export const columns: BasicColumn[] = [ ]; export const searchFormSchema: FormSchema[] = [ - { label: '工序名称', field: 'processOperationName', component: 'Input', colProps: { span: 6 } }, - { label: '主类型', field: 'downtimeMainTypeName', component: 'Input', colProps: { span: 6 } }, + { label: '', field: 'processOperationId', component: 'Input', show: false }, + { + label: '所属工序', + field: 'processOperationName', + component: 'Input', + slot: 'processOperationPicker', + colProps: { span: 6 }, + }, + { label: '', field: 'downtimeMainTypeId', component: 'Input', show: false }, + { + label: '所属主类型', + field: 'downtimeMainTypeName', + component: 'Input', + slot: 'downtimeMainTypePicker', + colProps: { span: 6 }, + }, { label: '停机类型', field: 'downtimeType', component: 'Input', colProps: { span: 6 } }, { label: '是否启用', diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeTypeList.vue b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeTypeList.vue index 92f079f..91b4e77 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeTypeList.vue +++ b/jeecgboot-vue3/src/views/xslmes/mesXslDowntimeType/MesXslDowntimeTypeList.vue @@ -1,6 +1,26 @@ @@ -53,12 +75,26 @@ import { BasicTable, TableAction } from '/@/components/Table'; import { useModal } from '/@/components/Modal'; import { useListPage } from '/@/hooks/system/useListPage'; + import { useMessage } from '/@/hooks/web/useMessage'; import Icon from '/@/components/Icon'; + import MesSearchPickerInput from '../components/MesSearchPickerInput.vue'; import MesXslDowntimeTypeModal from './components/MesXslDowntimeTypeModal.vue'; + import MesXslProcessOperationSelectModal from '/@/views/xslmes/mesXslEquipmentCategory/components/MesXslProcessOperationSelectModal.vue'; + import MesXslDowntimeMainTypeSelectModal from './components/MesXslDowntimeMainTypeSelectModal.vue'; + import { clearModelFields, createStripIdNameBeforeFetch } from '../utils/mesSearchPickerUtil'; import { columns, searchFormSchema } from './MesXslDowntimeType.data'; import { list, deleteOne, batchDelete, getExportUrl, getImportUrl } from './MesXslDowntimeType.api'; + const { createMessage } = useMessage(); + + const SEARCH_ID_NAME_PAIRS = [ + { idField: 'processOperationId', nameField: 'processOperationName' }, + { idField: 'downtimeMainTypeId', nameField: 'downtimeMainTypeName' }, + ]; + const [registerModal, { openModal }] = useModal(); + const [registerProcessModal, { openModal: openProcessModal }] = useModal(); + const [registerMainTypeModal, { openModal: openMainTypeModal }] = useModal(); const { tableContext, onExportXls, onImportXls } = useListPage({ tableProps: { @@ -66,6 +102,7 @@ api: list, columns, canResize: true, + beforeFetch: createStripIdNameBeforeFetch(SEARCH_ID_NAME_PAIRS), formConfig: { schemas: searchFormSchema, labelWidth: 100, @@ -87,7 +124,58 @@ }, }); - const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext; + const [registerTable, { reload, getForm }, { rowSelection, selectedRowKeys }] = tableContext; + + function openProcessSelect() { + const v = getForm()?.getFieldsValue?.() || {}; + openProcessModal(true, { processOperationId: v.processOperationId }); + } + + function clearProcess(model: Recordable) { + clearModelFields(model, [ + 'processOperationId', + 'processOperationName', + 'downtimeMainTypeId', + 'downtimeMainTypeName', + ]); + } + + function onProcessSelect(payload: Recordable) { + const v = getForm()?.getFieldsValue?.() || {}; + const pid = payload.processOperationId || ''; + if (v.downtimeMainTypeId && v.processOperationId && v.processOperationId !== pid) { + getForm()?.setFieldsValue?.({ + processOperationId: pid, + processOperationName: payload.processOperationName || '', + downtimeMainTypeId: '', + downtimeMainTypeName: '', + }); + } else { + getForm()?.setFieldsValue?.({ + processOperationId: pid, + processOperationName: payload.processOperationName || '', + }); + } + } + + function openMainTypeSelect() { + const v = getForm()?.getFieldsValue?.() || {}; + if (!v.processOperationId) { + createMessage.warning('请先选择所属工序'); + return; + } + openMainTypeModal(true, { + processOperationId: v.processOperationId, + downtimeMainTypeId: v.downtimeMainTypeId, + }); + } + + function onMainTypeSelect(payload: Recordable) { + getForm()?.setFieldsValue?.({ + downtimeMainTypeId: payload.downtimeMainTypeId || '', + downtimeMainTypeName: payload.downtimeMainTypeName || '', + }); + } function handleAdd() { openModal(true, { isUpdate: false, showFooter: true }); diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfig.data.ts b/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfig.data.ts index d9c97f1..c2ebfbd 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfig.data.ts +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfig.data.ts @@ -16,7 +16,14 @@ export const columns: BasicColumn[] = [ ]; export const searchFormSchema: FormSchema[] = [ - { label: '设备名称', field: 'equipmentName', component: 'Input', colProps: { span: 6 } }, + { label: '', field: 'equipmentLedgerId', component: 'Input', show: false }, + { + label: '设备名称', + field: 'equipmentName', + component: 'Input', + slot: 'equipmentLedgerPicker', + colProps: { span: 6 }, + }, { label: '设备编号', field: 'equipmentCode', component: 'Input', colProps: { span: 6 } }, { label: '类型', diff --git a/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfigList.vue b/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfigList.vue index 8a7a751..2e37b56 100644 --- a/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfigList.vue +++ b/jeecgboot-vue3/src/views/xslmes/mesXslEquipInspectConfig/MesXslEquipInspectConfigList.vue @@ -1,6 +1,16 @@