فهرست منبع

+ 巡检报告

chen.cheng 11 ماه پیش
والد
کامیت
87689182a0

+ 2 - 1
ems-ui/src/components/SwitchTag/index.vue

@@ -1,7 +1,8 @@
 <template>
 
   <div class="switch-tag">
-    <el-tag v-for="item in ds" @click="onSwitchTagClick(item)" :class="{active: item.val === selectTag.val}">
+    <el-tag v-for="(item,index) in ds" @click="onSwitchTagClick(item)" :class="{active: item.val === selectTag.val}"
+            :key="`switchtag_${index}`">
       {{ item.text }}
     </el-tag>
   </div>

+ 10 - 0
ems-ui/src/enums/TaskEnums.js

@@ -0,0 +1,10 @@
+export const TASK_TYPES = {
+  manual: {
+    label: '手动',
+    value: 1
+  },
+  auto: {
+    label: '自动',
+    value: 1
+  }
+}

+ 150 - 43
ems-ui/src/views/task/ManualInspection.vue

@@ -17,16 +17,6 @@
             @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="任务类型" prop="taskType">
-        <el-select v-model="queryParams.taskType" placeholder="请选择任务类型" clearable>
-          <el-option
-              v-for="dict in dict.type.task_type"
-              :key="dict.value"
-              :label="dict.label"
-              :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
       <el-form-item label="任务状态" prop="taskStatus">
         <el-select v-model="queryParams.taskStatus" placeholder="请选择任务状态" clearable>
           <el-option
@@ -124,11 +114,6 @@
       <el-table-column label="序号" align="center" prop="id" />
       <el-table-column label="任务代码" align="center" prop="taskCode" />
       <el-table-column label="任务名称" align="center" prop="taskName" />
-      <el-table-column label="任务类型" align="center" prop="taskType">
-        <template slot-scope="scope">
-          <dict-tag :options="dict.type.task_type" :value="scope.row.taskType" />
-        </template>
-      </el-table-column>
       <el-table-column label="任务状态" align="center" prop="taskStatus">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.task_status" :value="scope.row.taskStatus" />
@@ -164,7 +149,7 @@
           <el-button
               size="mini"
               type="text"
-              @click="handleUpdate(scope.row)"
+              @click="handleInspection(scope.row)"
               v-hasPermi="['ems:inspection-task:edit']"
           >巡检
           </el-button>
@@ -197,16 +182,6 @@
         <el-form-item label="任务名称" prop="taskName">
           <el-input v-model="form.taskName" placeholder="请输入任务名称" />
         </el-form-item>
-        <el-form-item label="任务类型" prop="taskType">
-          <el-select v-model="form.taskType" placeholder="请选择任务类型">
-            <el-option
-                v-for="dict in dict.type.task_type"
-                :key="dict.value"
-                :label="dict.label"
-                :value="parseInt(dict.value)"
-            ></el-option>
-          </el-select>
-        </el-form-item>
         <el-form-item label="任务状态" prop="taskStatus">
           <el-radio-group v-model="form.taskStatus">
             <el-radio
@@ -241,9 +216,9 @@
           <el-input v-model="form.executor" placeholder="请输入执行人" />
         </el-form-item>
         <el-form-item label="巡检对象" prop="objType">
-          <el-radio-group v-model="form.objType">
+          <el-radio-group v-model="form.objType" @input="onObjectCheck">
             <el-radio
-                v-for="dict in dict.type.obj_type"
+                v-for="dict in taskObjType"
                 :key="dict.value"
                 :label="parseInt(dict.value)"
             >{{ dict.label }}
@@ -251,13 +226,22 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="选择巡检对象" prop="objCode">
-          <el-select v-model="form.objCode" placeholder="请选择选择巡检对象">
+          <el-select
+              v-model="form.objCode"
+              filterable
+              remote
+              reserve-keyword
+              placeholder="请选择选择巡检对象"
+              :remote-method="remoteMethod"
+              :loading="loading"
+              @change="onObjChange"
+          >
             <el-option
-                v-for="dict in dict.type.sys_job_group"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-            ></el-option>
+                v-for="item in objOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+            </el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="对象名称" prop="objName">
@@ -269,17 +253,39 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+    <report-form
+        title="提交巡检报告"
+        :ok-callback="onReportSubmit"
+        :is-add="true"
+        ref="reportForm"
+        :task-info="form"
+    >
+    </report-form>
   </div>
 </template>
 
 <script>
+import { listArea } from '@/api/basecfg/area';
+import { listFacs } from '@/api/basecfg/emsfacs';
+import { listZoning } from '@/api/basecfg/zoning';
 import {
-  listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask,
+  addInspectionTask, delInspectionTask, getInspectionTask, listInspectionTask, updateInspectionTask,
 } from '@/api/task/inspectionTask';
+import { OBJ_TYPE } from '@/enums/DeviceFac';
+import { TASK_TYPES } from '@/enums/TaskEnums';
+import { copyObj } from '@/utils';
+import ReportForm from '@/views/task/report/ReportForm.vue';
 
 export default {
   name: 'InspectionTask',
+  components: { ReportForm },
   dicts: ['task_status', 'obj_type', 'task_type', 'sys_job_group'],
+  computed: {
+    taskObjType() {
+      const temp = copyObj(this.dict.type.obj_type);
+      return _.remove(temp, (obj) => obj.value != OBJ_TYPE.devc.value);
+    },
+  },
   data() {
     return {
       // 遮罩层
@@ -300,20 +306,24 @@ export default {
       title: '',
       // 是否显示弹出层
       open: false,
+      openInspection: false,
+      objOptions: [],
       // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize: 10,
         taskCode: null,
         taskName: null,
-        taskType: null,
+        taskType: TASK_TYPES.manual.value,
         taskStatus: null,
         executor: null,
         objType: null,
         objName: null,
       },
       // 表单参数
-      form: {},
+      form: {
+        taskType: TASK_TYPES.manual.value,
+      },
       // 表单校验
       rules: {
         taskCode: [
@@ -323,18 +333,18 @@ export default {
             trigger: 'blur',
           },
         ],
-        taskName: [
+        executor: [
           {
             required: true,
-            message: '任务名称不能为空',
+            message: '执行人不能为空',
             trigger: 'blur',
           },
         ],
-        taskType: [
+        taskName: [
           {
             required: true,
-            message: '任务类型不能为空',
-            trigger: 'change',
+            message: '任务名称不能为空',
+            trigger: 'blur',
           },
         ],
         taskStatus: [
@@ -379,6 +389,82 @@ export default {
     this.getList();
   },
   methods: {
+    objHandle() {
+      return {
+        [OBJ_TYPE.fac.value]: async ({
+          key = '',
+          objCode = '',
+        }) => {
+          const { rows } = await listFacs({
+            pageNum: 1,
+            pageSize: 99,
+            facsName: key,
+            facsCode: objCode,
+          });
+          let result = [];
+          if (rows.length > 0) {
+            result = rows.map((item) => {
+              return {
+                value: item.facsCode,
+                label: `${item.facsName}(${item.refAreaName})`,
+              };
+            });
+          }
+          this.objOptions = result;
+        },
+        [OBJ_TYPE.zone.value]: async ({
+          key = '',
+          objCode = '',
+        }) => {
+          const { rows } = await listZoning({
+            pageNum: 1,
+            pageSize: 99,
+            zoningName: key,
+            zoningCode: objCode,
+          });
+          let result = [];
+          if (rows.length > 0) {
+            result = rows.map((item) => {
+              return {
+                value: item.zoningCode,
+                label: `${item.zoningName}(${item.areaPath},${item.usageDetail})`,
+              };
+            });
+          }
+          this.objOptions = result;
+        },
+        [OBJ_TYPE.area.value]: async ({
+          key = '',
+          objCode = '',
+        }) => {
+          const { rows } = await listArea({
+            pageNum: 1,
+            pageSize: 99,
+            areaName: key,
+            areaCode: objCode,
+          });
+          let result = [];
+          if (rows.length > 0) {
+            result = rows.map((item) => {
+              return {
+                value: item.areaCode,
+                label: item.areaName,
+              };
+            });
+          }
+          this.objOptions = result;
+        },
+        [OBJ_TYPE.devc.value]: function () {},
+      };
+    },
+
+    remoteMethod(key) {
+      this.objHandle()[this.form.objType]({ key });
+    },
+    onObjChange(val) {
+      const selectedOption = this.objOptions.find(option => option.value === val);
+      this.form.objName = selectedOption ? selectedOption.label : '';
+    },
     /** 查询巡检任务列表 */
     getList() {
       this.loading = true;
@@ -399,9 +485,9 @@ export default {
         id: null,
         taskCode: null,
         taskName: null,
-        taskType: null,
         taskStatus: null,
         startTime: null,
+        taskType: TASK_TYPES.manual.value,
         endTime: null,
         executor: null,
         objType: null,
@@ -440,6 +526,9 @@ export default {
         this.form = response.data;
         this.open = true;
         this.title = '修改巡检任务';
+        this.$nextTick(() => {
+          this.objHandle()[this.form.objType]({ objCode: this.form.objCode });
+        });
       });
     },
     /** 提交按钮 */
@@ -478,6 +567,24 @@ export default {
         ...this.queryParams,
       }, `inspectionTask_${new Date().getTime()}.xlsx`);
     },
+    onReportSubmit() {
+      this.$modal.msgSuccess('提交成功');
+      this.openInspection = false;
+      this.getList();
+    },
+    handleInspection(row) {
+      const id = row.id;
+      getInspectionTask(id).then(response => {
+        this.form = response.data;
+        this.$nextTick(() => {
+          this.$refs.reportForm.show();
+        });
+
+      });
+    },
+    onObjectCheck(objType) {
+      this.objHandle()[objType]();
+    },
   },
 };
 </script>

+ 3 - 1
ems-ui/src/views/task/index.vue

@@ -28,7 +28,9 @@ export default {
   },
   created() {
   },
-  methods: {},
+  methods: {
+    handleClick() {},
+  },
 };
 </script>
 <style src="./index.scss" lang="scss"></style>

+ 160 - 0
ems-ui/src/views/task/report/ReportForm.vue

@@ -0,0 +1,160 @@
+<template>
+  <!-- 添加或修改巡检报告对话框 -->
+  <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+    <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+      <el-form-item label="任务代码" prop="taskCode">
+        <el-input v-model="form.taskCode" placeholder="请输入任务代码" />
+      </el-form-item>
+      <el-form-item label="结果状态" prop="resultStatus">
+        <el-radio-group v-model="form.resultStatus">
+          <el-radio
+              v-for="dict in dict.type.inspection_result"
+              :key="dict.value"
+              :label="parseInt(dict.value)"
+          >{{ dict.label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="结果描述">
+        <editor v-model="form.resultMsg" :min-height="192" />
+      </el-form-item>
+      <el-form-item label="完成时间" prop="finishTime">
+        <el-date-picker clearable
+                        v-model="form.finishTime"
+                        type="datetime"
+                        format="yyyy-MM-dd HH:mm"
+                        value-format="yyyy-MM-dd HH:mm:00"
+                        :style="{width: '100%'}"
+                        placeholder="请选择开始时间">
+        </el-date-picker>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="submitForm">确 定</el-button>
+      <el-button @click="cancel">取 消</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import { addInspectionReport, getInspectionReport, updateInspectionReport } from '@/api/task/inspectionReport';
+
+export default {
+  name: 'ReportForm',
+  dicts: ['inspection_result'],
+  props: {
+    taskInfo: {
+      type: Object,
+      default: null,
+    },
+    title: {
+      type: String,
+      default: '添加巡检报告',
+    },
+    reportId: {
+      type: Number,
+      default: null,
+    },
+    isAdd: {
+      type: Boolean,
+      default: true,
+    },
+    okCallback: {
+      type: Function,
+      default: () => {},
+    },
+  },
+  watch: {
+    taskInfo(val) {
+      this.form.taskCode = val?.taskCode;
+    },
+  },
+  data() {
+    return {
+      // 选中数组
+      ids: [],
+      // 是否显示弹出层
+      open: false,
+      // 表单参数
+      form: {
+        taskCode: this.taskInfo?.taskCode,
+
+      },
+      // 表单校验
+      rules: {
+        taskCode: [
+          {
+            required: true,
+            message: '任务代码不能为空',
+            trigger: 'blur',
+          },
+        ],
+        resultStatus: [
+          {
+            required: true,
+            message: '结果状态不能为空',
+            trigger: 'change',
+          },
+        ],
+      },
+    };
+  },
+  created() {
+
+  },
+  methods: {
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        taskCode: null,
+        resultStatus: null,
+        resultMsg: null,
+        finishTime: null,
+      };
+      this.resetForm('form');
+    },
+    /** 修改按钮操作 */
+    handleUpdate() {
+      this.reset();
+      const id = this.reportId;
+      getInspectionReport(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = '修改巡检报告';
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs['form'].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateInspectionReport(this.form).then(response => {
+              this.$modal.msgSuccess('修改成功');
+              this.open = false;
+              this.okCallback();
+            });
+          } else {
+            addInspectionReport(this.form).then(response => {
+              this.$modal.msgSuccess('新增成功');
+              this.open = false;
+              this.okCallback();
+            });
+          }
+        }
+      });
+    },
+    show() {
+      this.open = true;
+      if (!this.isAdd) {
+        this.handleUpdate();
+      }
+    },
+  },
+};
+</script>