ly 1 месяц назад
Родитель
Сommit
bb95742a8d

+ 13 - 0
master/src/main/java/com/ruoyi/project/reliability/domain/TRelMaintRecord.java

@@ -137,6 +137,9 @@ public class TRelMaintRecord extends BaseEntity
     /** 部件信息(不存储到数据库) */
     private TRelCompo compo;
 
+    /** 维修备忘录信息(不存储到数据库) */
+    private TRelMaintMemo memo;
+
     /** 是否需要创建新的维修/更换记录(不存储到数据库) */
     private Boolean needMaintOrReplace;
 
@@ -175,6 +178,16 @@ public class TRelMaintRecord extends BaseEntity
         return compo;
     }
 
+    public void setMemo(TRelMaintMemo memo)
+    {
+        this.memo = memo;
+    }
+
+    public TRelMaintMemo getMemo()
+    {
+        return memo;
+    }
+
     public void setNeedMaintOrReplace(Boolean needMaintOrReplace)
     {
         this.needMaintOrReplace = needMaintOrReplace;

+ 27 - 0
master/src/main/java/com/ruoyi/project/reliability/service/impl/TRelMaintRecordServiceImpl.java

@@ -6,10 +6,12 @@ import org.springframework.stereotype.Service;
 import com.ruoyi.project.reliability.mapper.TRelMaintRecordMapper;
 import com.ruoyi.project.reliability.mapper.TRelMaintPlanMapper;
 import com.ruoyi.project.reliability.mapper.TRelCompoMapper;
+import com.ruoyi.project.reliability.mapper.TRelMaintMemoMapper;
 import com.ruoyi.project.reliability.domain.TRelMaintRecord;
 import com.ruoyi.project.reliability.service.ITRelMaintRecordService;
 import com.ruoyi.project.reliability.domain.TRelMaintPlan;
 import com.ruoyi.project.reliability.domain.TRelCompo;
+import com.ruoyi.project.reliability.domain.TRelMaintMemo;
 
 /**
  * 部件维修记录Service业务层处理
@@ -29,6 +31,9 @@ public class TRelMaintRecordServiceImpl implements ITRelMaintRecordService
     @Autowired
     private TRelCompoMapper tRelCompoMapper;
 
+    @Autowired
+    private TRelMaintMemoMapper tRelMaintMemoMapper;
+
     /**
      * 查询部件维修记录
      *
@@ -51,6 +56,8 @@ public class TRelMaintRecordServiceImpl implements ITRelMaintRecordService
             }
             // 填充部件信息
             fillCompoInfo(record);
+            // 填充备忘录信息
+            fillMemoInfo(record);
         }
         return record;
     }
@@ -78,6 +85,8 @@ public class TRelMaintRecordServiceImpl implements ITRelMaintRecordService
                 }
                 // 填充部件信息
                 fillCompoInfo(record);
+                // 填充备忘录信息
+                fillMemoInfo(record);
             }
         }
         return list;
@@ -169,8 +178,26 @@ public class TRelMaintRecordServiceImpl implements ITRelMaintRecordService
                 }
                 // 填充部件信息
                 fillCompoInfo(record);
+                // 填充备忘录信息
+                fillMemoInfo(record);
             }
         }
         return list;
     }
+
+    /**
+     * 填充备忘录信息
+     */
+    private void fillMemoInfo(TRelMaintRecord record) {
+        if (record.getRecordId() != null) {
+            // 根据 recordId 查询备忘录
+            TRelMaintMemo queryMemo = new TRelMaintMemo();
+            queryMemo.setRecordId(record.getRecordId());
+            List<TRelMaintMemo> memoList = tRelMaintMemoMapper.selectTRelMaintMemoList(queryMemo);
+            // 如果存在备忘录,取第一个(理论上一个记录应该只有一个备忘录)
+            if (memoList != null && !memoList.isEmpty()) {
+                record.setMemo(memoList.get(0));
+            }
+        }
+    }
 }

+ 70 - 4
ui/src/views/reliability/rel_maint_plan/MaintPlanDetailContent.vue

@@ -65,8 +65,8 @@
         style="margin-top: 10px"
         v-loading="recordsLoading">
         <el-table-column type="index" label="序号" width="60" align="center" />
-        <el-table-column label="部件名称" prop="compoName" width="150" :show-overflow-tooltip="true" />
-        <el-table-column label="维修类型" width="100" align="center">
+        <el-table-column label="部件名称" prop="compoName" width="150" />
+        <el-table-column label="维修类型" width="80" align="center">
           <template slot-scope="scope">
             <span v-if="scope.row.maintType === '1'">检查</span>
             <span v-else-if="scope.row.maintType === '2'">维修</span>
@@ -79,9 +79,19 @@
             <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
           </template>
         </el-table-column>
-        <el-table-column label="维修状态" width="120" align="center">
+        <el-table-column label="维修状态" width="80" align="center">
           <template slot-scope="scope">
-            <span>{{ getRecordStatusText(scope.row.recordStatus) }}</span>
+            <el-tag :type="getRecordStatusTagType(scope.row.recordStatus)" size="small">
+              {{ getRecordStatusText(scope.row.recordStatus) }}
+            </el-tag>
+            <el-tag
+              v-if="scope.row.memo"
+              type="warning"
+              size="small"
+              style="margin-left: 5px; cursor: pointer;"
+              @click.native.stop="handleViewMemo(scope.row.memo)">
+              备
+            </el-tag>
           </template>
         </el-table-column>
         <el-table-column label="检查内容" prop="inspectContent" :show-overflow-tooltip="true" />
@@ -112,11 +122,39 @@
         暂无维修记录
       </div>
     </div>
+
+    <!-- 查看备忘录详情对话框 -->
+    <el-dialog title="备忘录详情" :visible.sync="memoDialogVisible" width="700px" append-to-body>
+      <el-descriptions :column="2" border v-if="memoDetail">
+        <el-descriptions-item label="装置">{{ memoDetail.plant || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备名称">{{ memoDetail.devName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备位号">{{ memoDetail.devTag || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="部件名称">{{ memoDetail.compoName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修类型">
+          <span v-if="memoDetail.maintType === '1'">检查</span>
+          <span v-else-if="memoDetail.maintType === '2'">维修</span>
+          <span v-else-if="memoDetail.maintType === '3'">更换</span>
+          <span v-else>{{ memoDetail.maintType || '-' }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="维修责任人">{{ getStaffNameById(memoDetail.responsible) || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修内容" :span="2">{{ memoDetail.maintContent || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘原因" :span="2">{{ memoDetail.memoReason || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘时间">
+          <span v-if="memoDetail.memoTime">{{ parseTime(memoDetail.memoTime, '{y}-{m}-{d}') }}</span>
+          <span v-else>-</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2">{{ memoDetail.remarks || '-' }}</el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="memoDialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { parseTime as formatTime } from "@/utils/ruoyi";
+import { getRel_maint_memo } from "@/api/reliability/rel_maint_memo";
 
 export default {
   name: "MaintPlanDetailContent",
@@ -142,6 +180,13 @@ export default {
       default: () => []
     }
   },
+  data() {
+    return {
+      // 备忘录对话框
+      memoDialogVisible: false,
+      memoDetail: null
+    };
+  },
   methods: {
     /** 根据员工号获取员工姓名 */
     getStaffNameById(staffid) {
@@ -160,6 +205,27 @@ export default {
       if (status === 1 || status === '1') return '待完成';
       if (status === 2 || status === '2') return '已完成';
       return status != null ? status : '-';
+    },
+    /** 获取维修状态标签类型 */
+    getRecordStatusTagType(status) {
+      if (status === -1 || status === '-1') return 'danger';
+      if (status === 0 || status === '0') return 'warning';
+      if (status === 1 || status === '1') return 'info';
+      if (status === 2 || status === '2') return 'success';
+      return '';
+    },
+    /** 查看备忘录 */
+    handleViewMemo(memo) {
+      if (memo && memo.memoId) {
+        // 如果memo对象已经有完整信息,直接显示
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      } else if (memo && memo.recordId) {
+        // 如果只有recordId,需要通过recordId查询备忘录
+        // 这里可以根据需要调用API查询
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      }
     }
   }
 };

+ 68 - 5
ui/src/views/reliability/rel_maint_record/index.vue

@@ -96,7 +96,7 @@
           type="info"
           icon="el-icon-document"
           size="mini"
-          @click="handleViewMemo"
+          @click="handleViewMemoList"
         >查看维修备忘录</el-button>
       </el-col>
 	  <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@@ -121,9 +121,19 @@
           <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="维修状态" align="center" width="120">
+      <el-table-column label="维修状态" align="center" width="150">
         <template slot-scope="scope">
-          <span>{{ getRecordStatusText(scope.row.recordStatus) }}</span>
+          <el-tag :type="getRecordStatusTagType(scope.row.recordStatus)" size="small">
+            {{ getRecordStatusText(scope.row.recordStatus) }}
+          </el-tag>
+          <el-tag
+            v-if="scope.row.memo"
+            type="warning"
+            size="small"
+            style="margin-left: 5px; cursor: pointer;"
+            @click.native.stop="handleViewMemo(scope.row.memo)">
+            备忘录
+          </el-tag>
         </template>
       </el-table-column>
       <el-table-column label="检查内容" align="center" prop="inspectContent" :show-overflow-tooltip="true"/>
@@ -293,7 +303,35 @@
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
+      </el-dialog>
+
+    <!-- 查看备忘录详情对话框 -->
+    <el-dialog title="备忘录详情" :visible.sync="memoDialogVisible" width="700px" append-to-body>
+      <el-descriptions :column="2" border v-if="memoDetail">
+        <el-descriptions-item label="装置">{{ memoDetail.plant || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备名称">{{ memoDetail.devName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备位号">{{ memoDetail.devTag || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="部件名称">{{ memoDetail.compoName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修类型">
+          <span v-if="memoDetail.maintType === '1'">检查</span>
+          <span v-else-if="memoDetail.maintType === '2'">维修</span>
+          <span v-else-if="memoDetail.maintType === '3'">更换</span>
+          <span v-else>{{ memoDetail.maintType || '-' }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="维修责任人">{{ getStaffNameById(memoDetail.responsible) || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修内容" :span="2">{{ memoDetail.maintContent || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘原因" :span="2">{{ memoDetail.memoReason || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘时间">
+          <span v-if="memoDetail.memoTime">{{ parseTime(memoDetail.memoTime, '{y}-{m}-{d}') }}</span>
+          <span v-else>-</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2">{{ memoDetail.remarks || '-' }}</el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="memoDialogVisible = false">关 闭</el-button>
+      </div>
     </el-dialog>
+
       <!-- 用户导入对话框 -->
       <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
           <el-upload
@@ -329,6 +367,7 @@
 
 <script>
 import { listRel_maint_record, getRel_maint_record, delRel_maint_record, addRel_maint_record, updateRel_maint_record, exportRel_maint_record, importTemplate} from "@/api/reliability/rel_maint_record";
+import { getRel_maint_memo } from "@/api/reliability/rel_maint_memo";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import { listStaffmgrAll } from "@/api/plant/staffmgr";
@@ -413,6 +452,9 @@ export default {
       // 表单校验
       rules: {
       },
+      // 备忘录对话框
+      memoDialogVisible: false,
+      memoDetail: null,
       // 所有人员选项
       staffOptions: []
     };
@@ -470,6 +512,27 @@ export default {
       if (status === 2 || status === '2') return '已完成';
       return status != null ? status : '-';
     },
+    /** 获取维修状态标签类型 */
+    getRecordStatusTagType(status) {
+      if (status === -1 || status === '-1') return 'danger';
+      if (status === 0 || status === '0') return 'warning';
+      if (status === 1 || status === '1') return 'info';
+      if (status === 2 || status === '2') return 'success';
+      return '';
+    },
+    /** 查看备忘录 */
+    handleViewMemo(memo) {
+      if (memo && memo.memoId) {
+        // 如果memo对象已经有完整信息,直接显示
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      } else if (memo && memo.recordId) {
+        // 如果只有recordId,需要通过recordId查询备忘录
+        // 这里可以根据需要调用API查询
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      }
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -587,8 +650,8 @@ export default {
           this.download(response.msg);
         })
     },
-    /** 查看维修备忘录 */
-    handleViewMemo() {
+    /** 查看维修备忘录列表页面 */
+    handleViewMemoList() {
       this.$router.push({ path: '/reliability/rel_maint_memo' });
     },
       /** 导入按钮操作 */

+ 52 - 1
ui/src/views/reliability/rel_maint_record/myRecord.vue

@@ -85,13 +85,21 @@
           <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
         </template>
       </el-table-column>
-      <el-table-column label="维修状态" align="center" width="120">
+      <el-table-column label="维修状态" align="center" width="150">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.recordStatus === -1 || scope.row.recordStatus === '-1'" type="danger" size="small">删除申请中</el-tag>
           <el-tag v-else-if="scope.row.recordStatus === 0 || scope.row.recordStatus === '0'" type="warning" size="small">新增申请中</el-tag>
           <el-tag v-else-if="scope.row.recordStatus === 1 || scope.row.recordStatus === '1'" type="info" size="small">待完成</el-tag>
           <el-tag v-else-if="scope.row.recordStatus === 2 || scope.row.recordStatus === '2'" type="success" size="small">已完成</el-tag>
           <span v-else>{{ scope.row.recordStatus || '-' }}</span>
+          <el-tag
+            v-if="scope.row.memo"
+            type="warning"
+            size="small"
+            style="margin-left: 5px; cursor: pointer;"
+            @click.native.stop="handleViewMemo(scope.row.memo)">
+            备忘录
+          </el-tag>
         </template>
       </el-table-column>
       <el-table-column label="维修计划" align="center" width="120">
@@ -359,12 +367,39 @@
       @close="planDetailVisible = false"
     />
 
+    <!-- 查看备忘录详情对话框 -->
+    <el-dialog title="备忘录详情" :visible.sync="memoDialogVisible" width="700px" append-to-body>
+      <el-descriptions :column="2" border v-if="memoDetail">
+        <el-descriptions-item label="装置">{{ memoDetail.plant || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备名称">{{ memoDetail.devName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="设备位号">{{ memoDetail.devTag || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="部件名称">{{ memoDetail.compoName || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修类型">
+          <span v-if="memoDetail.maintType === '1'">检查</span>
+          <span v-else-if="memoDetail.maintType === '2'">维修</span>
+          <span v-else-if="memoDetail.maintType === '3'">更换</span>
+          <span v-else>{{ memoDetail.maintType || '-' }}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="维修责任人">{{ getStaffNameById(memoDetail.responsible) || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="维修内容" :span="2">{{ memoDetail.maintContent || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘原因" :span="2">{{ memoDetail.memoReason || '-' }}</el-descriptions-item>
+        <el-descriptions-item label="备忘时间">
+          <span v-if="memoDetail.memoTime">{{ parseTime(memoDetail.memoTime, '{y}-{m}-{d}') }}</span>
+          <span v-else>-</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="备注" :span="2">{{ memoDetail.remarks || '-' }}</el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="memoDialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
 
   </div>
 </template>
 
 <script>
 import { listMyRel_maint_record, getRel_maint_record, delRel_maint_record, updateRel_maint_record, exportRel_maint_record, importTemplate} from "@/api/reliability/rel_maint_record";
+import { getRel_maint_memo } from "@/api/reliability/rel_maint_memo";
 import { treeselect } from "@/api/system/dept";
 import { getToken } from "@/utils/auth";
 import { listStaffmgrAll } from "@/api/plant/staffmgr";
@@ -403,6 +438,9 @@ export default {
       processMaintOpen: false, // 维修/更换类型处理对话框
       processForm: {},
       processRules: {},
+      // 备忘录对话框
+      memoDialogVisible: false,
+      memoDetail: null,
       // 维修计划详情对话框
       planDetailVisible: false,
       planDetailId: null,
@@ -520,6 +558,19 @@ export default {
       if (status === 2 || status === '2') return '已完成';
       return status != null ? status : '-';
     },
+    /** 查看备忘录 */
+    handleViewMemo(memo) {
+      if (memo && memo.memoId) {
+        // 如果memo对象已经有完整信息,直接显示
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      } else if (memo && memo.recordId) {
+        // 如果只有recordId,需要通过recordId查询备忘录
+        // 这里可以根据需要调用API查询
+        this.memoDetail = memo;
+        this.memoDialogVisible = true;
+      }
+    },
     /** 获取维修类型文本 */
     getMaintTypeText(type) {
       if (type === '1') return '检查';