Bläddra i källkod

设备维修功能提交

luogang 6 månader sedan
förälder
incheckning
0da3301c4f

+ 77 - 0
src/api/deviceCheck/index.ts

@@ -231,3 +231,80 @@ export const delInspectionTask = (id: string | number | Array<string | number>)
       method: 'delete'
   });
 };
+/**
+* 查询巡检任务信息
+* @param id
+*/
+export const getInspectionTaskInfoById = (id) => {
+  return request({
+      url: '/jdyw/inspectionTask/getInspectionTaskInfoById',
+      method: 'get',
+      params: {id}
+  });
+};
+
+/**
+* 新增巡检记录信息
+* @param data
+*/
+export const addInspectionTaskRecord = (data) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecord',
+      method: 'post',
+      data
+  });
+};
+/**
+* 修改巡检记录信息
+* @param data
+*/
+export const updateInspectionTaskRecord = (data) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecord',
+      method: 'put',
+      data
+  });
+};
+/**
+* 新增巡检执行明细
+* @param data
+*/
+export const addInspectionTaskRecordDetails = (data) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecordDetails',
+      method: 'post',
+      data
+  });
+};
+
+/**
+* 查询巡检记录信息
+*/
+export const getInspectionTaskRecordList = (query) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecord/list',
+      method: 'get',
+      params: query
+  });
+};
+/**
+* 查询巡检记录明细列表根据记录id
+*/
+export const getListByRecordId = (query) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecordDetails/getListByRecordId',
+      method: 'get',
+      params: query
+  });
+};
+
+/**
+* 查询巡检列表根据设备id
+*/
+export const getInspectionListByDeviceId = (query) => {
+  return request({
+      url: '/jdyw/inspectionTaskRecordDetails/getInspectionListByDeviceId',
+      method: 'get',
+      params: query
+  });
+};

+ 115 - 0
src/api/deviceMaintain/index.ts

@@ -57,3 +57,118 @@ export const delFaultType = (id: string | number | Array<string | number>) => {
         method: 'delete'
     });
 };
+
+/**
+ * 查询故障信息列表
+ * @param query
+ * @returns {*}
+ */
+export const listFault = (query) => {
+  return request({
+      url: '/jdyw/fault/list',
+      method: 'get',
+      params: query
+  });
+};
+/**
+* 查询故障信息详细
+* @param id
+*/
+export const getFault = (id) => {
+  return request({
+      url: '/jdyw/fault/' + id,
+      method: 'get'
+  });
+};
+
+/**
+* 新增故障信息
+* @param data
+*/
+export const addFault = (data) => {
+  return request({
+      url: '/jdyw/fault',
+      method: 'post',
+      data: data
+  });
+};
+
+/**
+* 修改故障信息
+* @param data
+*/
+export const updateFault = (data) => {
+  return request({
+      url: '/jdyw/fault',
+      method: 'put',
+      data: data
+  });
+};
+
+/**
+* 删除故障信息
+* @param id
+*/
+export const delFault = (id: string | number | Array<string | number>) => {
+  return request({
+      url: '/jdyw/fault/' + id,
+      method: 'delete'
+  });
+};
+
+/**
+* 新增工单信息
+* @param data
+*/
+export const addWorkTask = (data) => {
+  return request({
+      url: '/jdyw/workTask',
+      method: 'post',
+      data: data
+  });
+};
+
+/**
+* 修改工单信息
+* @param data
+*/
+export const updateWorkTask = (data) => {
+  return request({
+      url: '/jdyw/workTask',
+      method: 'put',
+      data: data
+  });
+};
+
+/**
+* 工单列表
+* @param query
+*/
+export const getWorkTaskList = (query) => {
+  return request({
+      url: '/jdyw/workTask/list',
+      method: 'get',
+      params: query
+  });
+};
+/**
+* 工单信息
+* @param id
+*/
+export const getWorkTaskInfo = (id) => {
+  return request({
+      url: `/jdyw/workTask/${id}`,
+      method: 'get',
+  });
+};
+/**
+* 根据报修单号 查询工单处理进度
+* @param sn
+*/
+export const getOrderProgress = (sn) => {
+  return request({
+      url: `/jdyw/workTask/getOrderProgress`,
+    method: 'get',
+      params: {sn}
+  });
+};

+ 24 - 0
src/utils/index.ts

@@ -316,3 +316,27 @@ export const removeClass = (ele: HTMLElement, cls: string) => {
 export const isExternal = (path: string) => {
     return /^(https?:|http?:|mailto:|tel:)/.test(path);
 };
+
+export function dateFormat(date, format = 'yyyy-MM-dd HH:mm:ss') {
+  const o = {
+    'M+': date.getMonth() + 1, // 月份
+    'd+': date.getDate(), // 日
+    'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
+    'H+': date.getHours(), // 小时
+    'm+': date.getMinutes(), // 分
+    's+': date.getSeconds(), // 秒
+    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
+    S: date.getMilliseconds(), // 毫秒
+    a: date.getHours() < 12 ? '上午' : '下午', // 上午/下午
+    A: date.getHours() < 12 ? 'AM' : 'PM' // AM/PM
+  };
+  if (/(y+)/.test(format)) {
+    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
+  }
+  for (const k in o) {
+    if (new RegExp('(' + k + ')').test(format)) {
+      format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
+    }
+  }
+  return format;
+}

+ 2 - 2
src/utils/ruoyi.ts

@@ -211,8 +211,8 @@ export const tansParams = (params: any) => {
     let result = '';
     for (const propName of Object.keys(params)) {
         const value = params[propName];
-        const part = encodeURIComponent(propName) + '=';
-        if (value !== null && value !== '' && typeof value !== 'undefined') {
+      const part = encodeURIComponent(propName) + '=';
+        if (value !== null  && typeof value !== 'undefined') {
             if (typeof value === 'object') {
                 for (const key of Object.keys(value)) {
                     if (value[key] !== null && value[key] !== '' && typeof value[key] !== 'undefined') {

+ 18 - 22
src/views/deviceCheck/patrolItems/index.vue

@@ -8,8 +8,8 @@
             <el-form-item label="巡检项名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入巡检项名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="巡检设备类型" prop="deviceDetailId">
-              <el-select v-model="queryParams.deviceDetailId"  clearable placeholder="请选择巡检设备类型">
+            <el-form-item label="巡检设备类型" prop="deviceTypeId">
+              <el-select v-model="queryParams.deviceTypeId"  clearable placeholder="请选择巡检设备类型">
                 <el-option v-for="dict in dictGroup.deviceTypeDetailOptions" :key="dict.id"
                   :label="`${dict.ext1.brand}${dict.xh}`" :value="dict.id">
                   <span style="float: left">{{ dict.ext1.brand }}</span>
@@ -50,9 +50,9 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="巡检项编号" align="center" show-overflow-tooltip prop="id" width="150" />
         <el-table-column label="巡检项名称" align="center" show-overflow-tooltip prop="name" width="180" />
-        <el-table-column label="巡检设备类型" align="center" prop="deviceDetailId" width="180" >
+        <el-table-column label="巡检设备类型" align="center"  width="180" >
           <template #default="scope">
-            {{formatDevice(scope.row.deviceDetailId)}}
+            {{formatDevice(scope.row.deviceTypeId)}}
           </template>
         </el-table-column>
         <el-table-column label="检验方法" align="center" prop="detectionMethod" width="120" />
@@ -81,15 +81,11 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="设备类型" prop="deviceDetailId"
+            <el-form-item label="设备类型" prop="deviceTypeId"
               :rules="[{ required: true, message: '设备类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.deviceDetailId"  clearable placeholder="请选择设备类型">
-                <el-option v-for="dict in dictGroup.deviceTypeDetailOptions" :key="dict.id"
-                  :label="`${dict.ext1.brand}${dict.xh}`" :value="dict.id">
-                  <span style="float: left">{{ dict.ext1.brand }}</span>
-                  <span style="float: right;color: var(--el-text-color-secondary);font-size: 13px;">
-                    {{ dict.xh }}
-                  </span>
+              <el-select v-model="form.deviceTypeId"  clearable placeholder="请选择设备类型">
+                <el-option v-for="dict in dictGroup.deviceTypeOptions" :key="dict.id"
+                  :label="dict.name" :value="dict.id">
                 </el-option>
               </el-select>
             </el-form-item>
@@ -144,7 +140,7 @@
 <script setup name="PatrolItems" lang="ts">
 import { listInspectionItem, getInspectionItem, delInspectionItem, addInspectionItem, updateInspectionItem } from '@/api/deviceCheck/index';
 import {
-  getDeviceTypeDetailList
+  listDeviceType
 } from '@/api/deviceManage/deviceType';
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -165,7 +161,7 @@ const dialog = reactive<DialogOption>({
 const initFormData = {
   id: undefined,
   name: undefined,
-  deviceDetailId: undefined,
+  deviceTypeId: undefined,
   detectionMethod: undefined,
   detectionStandard: undefined,
   detectionTools: undefined,
@@ -182,14 +178,14 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    deviceDetailId:undefined,
+    deviceTypeId:undefined,
     params: {}
   }
 });
 
 const { queryParams, form } = toRefs(formData);
 const dictGroup = reactive({
-  deviceTypeDetailOptions: []
+    deviceTypeOptions: []
 })
 /** 查询列表 */
 const getList = async () => {
@@ -276,25 +272,25 @@ const handleDelete = async (row) => {
   proxy?.$modal.msgSuccess('删除成功');
   await getList();
 };
-const deviceTypeDetailList = async () => {
-  const res = await getDeviceTypeDetailList({  });
-  dictGroup.deviceTypeDetailOptions = res.rows.map((item) => ({
+const getDeviceTypeList = async () => {
+  const res = await listDeviceType({ });
+  dictGroup.deviceTypeOptions = res.rows.map((item) => ({
     ...item,
     ext1: item.ext1 ? JSON.parse(item.ext1) : null
   }));
 };
 const formatDevice = (val) => {
   let label = ''
-  dictGroup.deviceTypeDetailOptions.forEach((item) => {
+  dictGroup.deviceTypeOptions.forEach((item) => {
       if (val===item.id) {
-        label=`${item.ext1.brand}${item.xh}`
+        label=item.name
       }
   })
   return label
 }
 onMounted(() => {
   getList();
-  deviceTypeDetailList()
+  getDeviceTypeList()
 });
 </script>
 <style lang="scss" scoped>

+ 105 - 19
src/views/deviceCheck/patrolPlan/index.vue

@@ -118,11 +118,30 @@
           </el-col>
           <el-col :span="8">
             <el-form-item label="巡检范围" prop="inspectionRange"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
+              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]" @change="inspectionRangeChange">
               <el-select v-model="form.inspectionRange" clearable placeholder="请选择巡检范围">
-                <el-option label="按设备" :value="1"></el-option>
-                <el-option label="按道路点位" :value="2"></el-option>
-                <el-option label="按项目" :value="3"></el-option>
+                <el-option v-for="dict in inspection_range" :key="dict.value" :label="dict.label"
+                :value="dict.value"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col v-if="form.inspectionRange === 2" :span="8">
+            <el-form-item label="道路点位" prop="ext1.roadSiteId"
+              :rules="[{ required: true, message: '道路点位不能为空', trigger: 'change' }]">
+              <el-select v-model="form.ext1.roadSiteId" clearable placeholder="请选择道路点位"
+                @change="setInspectionItem($event, 'roadSite')">
+                <el-option v-for="item in roadSiteOptions" :key="item.id" :label="item.name"
+                  :value="item.id"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col v-if="form.inspectionRange === 3" :span="8">
+            <el-form-item label="所属项目" prop="ext1.projectId"
+              :rules="[{ required: true, message: '所属项目不能为空', trigger: 'change' }]">
+              <el-select v-model="form.ext1.projectId" clearable placeholder="请选择所属项目"
+                @change="setInspectionItem($event, 'project')">
+                <el-option v-for="item in projectOptions" :key="item.id" :label="item.name"
+                  :value="item.id"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
@@ -158,7 +177,7 @@
           </el-table-column>
           <el-table-column label="设备编号" align="center">
             <template #default="scope">
-              <el-select v-model="scope.row.deviceTypeDetailIds" multiple collapse-tags clearable placeholder="请选择设备编号">
+              <el-select v-model="scope.row.deviceIds" multiple collapse-tags clearable placeholder="请选择设备编号">
                 <el-option v-for="dict in scope.row.deviceOptions" :key="dict.id" :label="dict.sn" :value="dict.id">
                 </el-option>
               </el-select>
@@ -167,7 +186,7 @@
           <el-table-column label="巡检项目" align="center">
             <template #default="scope">
               <el-select v-model="scope.row.items" multiple collapse-tags clearable placeholder="请选择巡检项目">
-                <el-option v-for="dict in dictGroup.inspectionItemOptions" :key="dict.id" :label="dict.name"
+                <el-option v-for="dict in scope.row.inspectionItemOptions" :key="dict.id" :label="dict.name"
                   :value="dict.id">
                 </el-option>
               </el-select>
@@ -201,14 +220,16 @@
 </template>
 
 <script setup name="PatrolPlan" lang="ts">
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
+import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask, listRoadSiteInfo } from '@/api/deviceCheck/index';
 import {
   listDeviceType,
   getDeviceTypeDetailList
 } from '@/api/deviceManage/deviceType';
 import {
   listDevice,
+  getDevice
 } from '@/api/deviceManage/device';
+import { listProjectInfo } from '@/api/projectManage/index';
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -237,14 +258,17 @@ const initFormData = {
   inspectionPersonId: undefined,
   inspectionItem: [{
     deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
+    deviceIds: [],
     items: [],
     deviceOptions: [],
+    inspectionItemOptions:[]
   }],
   remark: undefined,
   ext1: <any>{
     phone: undefined,
     inspectionPersonName: undefined,
+    roadSiteId: undefined,
+    projectId: undefined,
   },
   ext2: undefined
 };
@@ -261,12 +285,15 @@ const formData = reactive({
 const cycleDisabled = ref(false)
 const { queryParams, form } = toRefs(formData);
 const { inspection_type } = toRefs<any>(proxy?.useDict('inspection_type'));
+const { inspection_range } = toRefs<any>(proxy?.useDict('inspection_range'));
 const { inspection_status } = toRefs<any>(proxy?.useDict('inspection_status'));
 const dictGroup = reactive({
   deviceTypeOptions: [],
-  inspectionItemOptions: []
 })
 const userOptions = ref([])
+const roadSiteOptions = ref([])
+const projectOptions = ref([])
+
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
@@ -327,9 +354,9 @@ const handleUpdate = (row) => {
   dialog.visible = true;
   dialog.title = '修改巡检计划';
 };
-const changeStatus = async(row, status) => {
+const changeStatus = async (row, status) => {
   await updateInspectionTask({ id: row.id, status: status })
-  const msg = status==='2'?'停止成功':'启动成功'
+  const msg = status === '2' ? '停止成功' : '启动成功'
   proxy?.$modal.msgSuccess(msg);
   await getList();
 }
@@ -342,7 +369,7 @@ const submitForm = () => {
       if (inspectionItem.length === 0) return proxy?.$modal.msgError('请添加巡检内容');
       let validFlag = false
       inspectionItem.forEach(item => {
-        if (item.deviceTypeId === '' || item.deviceTypeDetailIds.length == 0 || item.items.length == 0) {
+        if (item.deviceTypeId === '' || item.deviceIds.length == 0 || item.items.length == 0) {
           validFlag = true
         }
       })
@@ -369,8 +396,10 @@ const handleDelete = async (row) => {
   await getList();
 };
 const deviceTypeChange = (index, val) => {
-  form.value.inspectionItem[index].deviceTypeDetailIds = []
+  form.value.inspectionItem[index].deviceIds = []
+  form.value.inspectionItem[index].items = []
   getDeviceList(index, val)
+  getInspectionItem(index, val)
 }
 const getDeviceList = async (index, deviceTypeId) => {
   let deviceTypeDetailList = []
@@ -397,10 +426,10 @@ const deviceTypeList = async () => {
     ext1: item.ext1 ? JSON.parse(item.ext1) : null
   }));
 };
-const getInspectionItem = () => {
-  listInspectionItem({}).then(({ code, rows }) => {
+const getInspectionItem = (index,deviceTypeId) => {
+  listInspectionItem({deviceTypeId}).then(({ code, rows }) => {
     if (code === 200) {
-      dictGroup.inspectionItemOptions = rows
+      form.value.inspectionItem[index].inspectionItemOptions = rows
     }
   })
 }
@@ -449,19 +478,76 @@ const getInspectionTeamList = async () => {
 const addInspectionItem = () => {
   form.value.inspectionItem.push({
     deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
+    deviceIds: [],
     items: [],
-    deviceOptions: []
+    deviceOptions: [],
+    inspectionItemOptions:[]
   })
 }
 const delInspectionItem = (index) => {
   form.value.inspectionItem.splice(index, 1)
 }
+const getRoadSiteList = () => {
+  listRoadSiteInfo({}).then(({ code, rows }) => {
+    if (code === 200) {
+      roadSiteOptions.value = rows
+    }
+  })
+}
+const getProjectList = () => {
+  listProjectInfo({}).then(({ code, rows }) => {
+    if (code === 200) {
+      projectOptions.value = rows
+    }
+  })
+}
+const inspectionRangeChange = () => {
+  form.value.inspectionItem = [{
+    deviceTypeId: undefined,
+    deviceIds: [],
+    items: [],
+    deviceOptions: [],
+    inspectionItemOptions:[]
+  }]
+}
+const setInspectionItem = (val, type) => {
+  if (!val) return form.value.inspectionItem = []
+  const options = type === 'roadSite' ? roadSiteOptions.value : projectOptions.value
+  const [{ devices }] = options.filter(item => item.id === val)
+  if (devices) {
+    let deviceTypeObj = {}
+    const tmpArr = devices.split(',')
+    tmpArr.forEach(async (item, index) => {
+      const { data } = await getDevice(item)
+      const { deviceTypeId } = JSON.parse(data.ext1)
+      if (deviceTypeObj[deviceTypeId]) {
+        deviceTypeObj[deviceTypeId].push(item)
+      } else {
+        deviceTypeObj[deviceTypeId] = [item]
+      }
+      if (index == tmpArr.length - 1) {
+        form.value.inspectionItem = []
+        Object.keys(deviceTypeObj).forEach(async (key, ind) => {
+          form.value.inspectionItem.push({
+            deviceTypeId: key,
+            deviceIds: deviceTypeObj[key],
+            items: [],
+            deviceOptions: [],
+            inspectionItemOptions:[]
+          })
+          await getDeviceList(ind, key)
+          await getInspectionItem(ind, key)
+        })
+      }
+    })
+  }
+}
 onMounted(() => {
   getList();
   deviceTypeList()
-  getInspectionItem()
   getInspectionTeamList()
+  getProjectList()
+  getRoadSiteList()
 });
 </script>
 <style lang="scss" scoped>

+ 45 - 189
src/views/deviceCheck/patrolRecord/index.vue

@@ -5,8 +5,8 @@
       <div v-show="showSearch" class="mb-[10px]">
         <el-card shadow="hover">
           <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="100px">
-            <el-form-item label="计划名称" prop="name">
-              <el-input v-model="queryParams.name" placeholder="请输入计划名称" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="计划名称" prop="planName">
+              <el-input v-model="queryParams.planName" placeholder="请输入计划名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -35,20 +35,24 @@
         </el-row>
       </template>
 
-      <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
+      <el-table v-loading="loading" :data="tableList" >
         <el-table-column label="计划名称" align="center" show-overflow-tooltip prop="name" width="150" />
         <el-table-column label="计划编号" align="center" show-overflow-tooltip prop="id" width="150" />
-        <el-table-column label="巡检类型" align="center" show-overflow-tooltip prop="type" width="150" />
-        <el-table-column label="巡检范围" align="center" show-overflow-tooltip prop="checkRange" width="150" />
-        <el-table-column label="巡检周期(天)" align="center" show-overflow-tooltip prop="cycle" width="150" />
-        <el-table-column label="计划巡检日期" align="center" show-overflow-tooltip prop="checkDate" width="150" />
-        <el-table-column label="巡检完成日期" align="center" show-overflow-tooltip prop="completeDate" width="150" />
-        <el-table-column label="已巡检/待巡检项" align="center" show-overflow-tooltip prop="hasCheck" width="150" />
-        <el-table-column label="完成度" align="center" show-overflow-tooltip prop="completeRate" width="150" />
-        <el-table-column label="巡检员" align="center" show-overflow-tooltip prop="checkPerson" width="150" />
-        <el-table-column label="巡检结果" align="center" show-overflow-tooltip prop="checkResult" width="150" />
-        <el-table-column label="故障情况" align="center" show-overflow-tooltip prop="checkCondition" width="150" />
+        <el-table-column label="巡检类型" align="center"  width="120" >
+          <template #default="scope">
+            <dict-tag :options="inspection_type" :value="scope.row.inspection_type" />
+          </template>
+        </el-table-column>
+        <el-table-column label="巡检范围" align="center"  width="120" >
+          <template #default="scope">
+            <dict-tag :options="inspection_range" :value="scope.row.inspection_range" />
+          </template>
+        </el-table-column>
+        <el-table-column label="巡检周期(天)" align="center"  prop="inspection_cycle"  width="120"/>
+        <el-table-column label="巡检开始日期" align="center" show-overflow-tooltip prop="inspection_start_date" width="150" />
+        <el-table-column label="巡检完成日期" align="center" show-overflow-tooltip prop="inspection_end_date" width="150" />
+        <el-table-column label="巡检员" align="center"  prop="inspection_person_name" width="120" />
+        <el-table-column label="巡检结果" align="center" show-overflow-tooltip prop="final_result" width="150" />
         <el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button size="small" link type="primary" @click="showDetail(scope.row)">详情</el-button>
@@ -67,39 +71,37 @@
               <el-descriptions class="detail-descriptions" :column="2" border>
                 <el-descriptions-item label-align="right" label="计划名称">{{ curRow.name }}</el-descriptions-item>
                 <el-descriptions-item label-align="right" label="计划编号">{{ curRow.id }}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="巡检类型">{{ curRow.type}}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="巡检范围">{{ curRow.checkRange}}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="巡检周期(天)">{{ curRow.cycle }}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="计划巡检日期">{{ curRow.checkDate }}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="巡检完成时间">{{ curRow.completeDate}}</el-descriptions-item>
-                <el-descriptions-item label-align="right" label="执行人">{{ curRow.checkPerson}}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="巡检类型"><dict-tag :options="inspection_type" :value="curRow.inspection_type" /></el-descriptions-item>
+                <el-descriptions-item label-align="right" label="巡检范围"> <dict-tag :options="inspection_range" :value="curRow.inspection_range" /></el-descriptions-item>
+                <el-descriptions-item label-align="right" label="巡检周期(天)">{{ curRow.inspection_cycle }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="巡检开始日期">{{ curRow.inspection_start_date }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="巡检完成日期">{{ curRow.inspection_end_date}}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="执行人">{{ curRow.inspection_person_name}}</el-descriptions-item>
                 <el-descriptions-item label-align="right" label="备注">{{ curRow.remark }}</el-descriptions-item>
               </el-descriptions>
             </div>
           </el-tab-pane>
           <el-tab-pane label="巡检项目" name="2">
-            <el-table :data="curRow.inspectionItem" max-height="300">
-          <el-table-column label="设备名称" align="center" prop="deviceName">
-          </el-table-column>
-          <el-table-column label="设备编号" align="center" prop="deviceNo">
+            <el-table :data="curRow.inspectionItemInfo" max-height="300">
+          <el-table-column label="设备名称" align="center" prop="device_name">
           </el-table-column>
-          <el-table-column label="巡检项目名称" align="center" width="150" prop="projectName">
+          <el-table-column label="设备编号" align="center" prop="device_sn">
           </el-table-column>
-          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detectionMethod">
+          <el-table-column label="巡检项目名称" align="center" width="150" prop="name">
           </el-table-column>
-          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detectionStandard">
+          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detection_method">
           </el-table-column>
-          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judgeStandard">
+          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detection_standard">
           </el-table-column>
-          <el-table-column label="标准上限" align="center" prop="judgeMaxValue">
+          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judge_standard">
           </el-table-column>
-          <el-table-column label="标准下限" align="center" prop="judgeMinValue">
+          <el-table-column label="标准上限" align="center" prop="judge_max_value">
           </el-table-column>
-          <el-table-column label="巡检结果" width="100" align="center" prop="detectionResult">
+          <el-table-column label="标准下限" align="center" prop="judge_min_value">
           </el-table-column>
-          <el-table-column label="巡检备注说明" width="120" align="center" prop="detectionCondition">
+          <el-table-column label="巡检结果" width="100" align="center" prop="inspectionResult">
           </el-table-column>
-          <el-table-column label="巡检图片" align="center" prop="detectionImg">
+          <el-table-column label="巡检备注说明" width="120" align="center" prop="inspectionRemark">
           </el-table-column>
         </el-table>
           </el-tab-pane>
@@ -110,23 +112,14 @@
 </template>
 
 <script setup name="PatrolRecord" lang="ts">
-import {  getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
-import { deepClone } from '@/utils';
+import {  getInspectionTaskRecordList,getListByRecordId} from '@/api/deviceCheck/index';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
-const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
 const ids = ref<Array<string | number>>([]);
-const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
-const addFormRef = ref<ElFormInstance>();
-const dialog = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
 const initFormData = {
   id: undefined,
   name: undefined,
@@ -155,82 +148,25 @@ const formData = reactive({
   queryParams: {
     pageNum: 1,
     pageSize: 10,
-    name: undefined,
-    status: undefined,
+    planName: '',
     params: {}
   }
 });
 const detailTab = ref('1')
 const detailDrawer = ref(false)
 const curRow = ref({} as any)
+const { inspection_type } = toRefs<any>(proxy?.useDict('inspection_type'));
+const { inspection_range } = toRefs<any>(proxy?.useDict('inspection_range'));
 const { queryParams, form } = toRefs(formData);
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
-  // const res = await listInspectionTask(queryParams.value);
-  // tableList.value = res.rows.map((item) => ({
-  //   ...item,
-  //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
-  // }));
-  // total.value = res.total;
-  tableList.value = [{
-    name: '日常保养',
-    id: 1000240211,
-    type: '日常巡检',
-    checkRange: '按设备',
-    cycle: '10',
-    checkDate: '2024-12-19',
-    completeDate: '2024-12-24',
-    hasCheck: '10/50',
-    completeRate: '20%',
-    checkPerson: '王思',
-    checkResult: '合格',
-    checkCondition: '-',
-  },
-  {
-    name: '机器循环保养',
-    id: 1000240212,
-    type: '日常巡检',
-    checkRange: '按设备',
-    cycle: '5',
-    checkDate: '2024-12-20',
-    completeDate: '2024-12-24',
-    hasCheck: '0/50',
-    completeRate: '0%',
-    checkPerson: '王娟',
-    checkResult: '不合格',
-    checkCondition: '已恢复',
-  },
-  {
-    name: '周期保养',
-    id: 1000240213,
-    type: '周期巡检',
-    checkRange: '按项目',
-    cycle: '30',
-    checkDate: '2024-12-22',
-    completeDate: '2024-12-24',
-    hasCheck: '20/50',
-    completeRate: '40%',
-    checkPerson: '李达',
-    checkResult: '不合格',
-    checkCondition: '处理中',
-  }
-  ]
+  const res = await getInspectionTaskRecordList(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
-/** 取消按钮 */
-const cancel = () => {
-  reset();
-  dialog.visible = false;
-};
-
-/** 表单重置 */
-const reset = () => {
-  form.value = { ...deepClone(initFormData) };
-  addFormRef.value?.resetFields();
-};
-
 /** 搜索按钮操作 */
 const handleQuery = () => {
   queryParams.value.pageNum = 1;
@@ -243,97 +179,17 @@ const resetQuery = () => {
   handleQuery();
 };
 
-/** 多选框选中数据 */
-const handleSelectionChange = (selection) => {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-};
-/** 新增按钮操作 */
-const handleAdd = () => {
-  reset();
-  dialog.visible = true;
-  dialog.title = '新增巡检计划';
-};
-/** 修改按钮操作 */
-const handleUpdate = (row) => {
-  reset();
-  const _id = row?.id || ids.value[0];
-  getInspectionTask(_id).then(({ data }) => {
-    data.ext1 = data.ext1 && JSON.parse(data.ext1);
-    data.inspectionItem = data.inspectionItem && JSON.parse(data.inspectionItem);
-    Object.assign(form.value, data);
-  });
-  dialog.visible = true;
-  dialog.title = '修改巡检计划';
-};
 const showDetail = (row) => {
   detailDrawer.value = true
   detailTab.value = '1'
   curRow.value = row
-  curRow.value.inspectionItem = [
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室温度',
-        detectionMethod: '温度计测量',
-        detectionStandard: '20°C以内',
-        judgeStandard: '填写值',
-        judgeMaxValue: '0°C',
-        judgeMinValue: '20°C',
-        detectionResult: '合格',
-        detectionCondition: '',
-        detectionImg: '',
-      },
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室无漏水',
-        detectionMethod: '目视',
-        detectionStandard: '无漏水',
-        judgeStandard: '直接确认',
-        judgeMaxValue: '--',
-        judgeMinValue: '--',
-        detectionResult: '合格',
-        detectionCondition: '',
-        detectionImg: '',
-      },
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室无放电',
-        detectionMethod: '仪器检测',
-        detectionStandard: '无漏电',
-        judgeStandard: '直接确认',
-        judgeMaxValue: '--',
-        judgeMinValue: '--',
-        detectionResult: '合格',
-        detectionCondition: '',
-        detectionImg: '',
-      }
-    ]
+  getListByRecordId({ recordId: row.record_id }).then(({ data}) => {
+    curRow.value.inspectionItemInfo = data
+  })
 }
 
-/** 提交按钮 */
-const submitForm = () => {
-  addFormRef.value?.validate(async (valid: boolean) => {
-    if (valid) {
-    }
-  });
-};
-/** 删除按钮操作 */
-const handleDelete = async (row) => {
-  const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
-  await delInspectionTask(_ids);
-  proxy?.$modal.msgSuccess('删除成功');
-  await getList();
-};
 onMounted(() => {
   getList();
-  // deviceTypeList()
-  // getInspectionItem()
-  // getInspectionTeamList()
 });
 </script>
 <style lang="scss" scoped>

+ 139 - 135
src/views/deviceCheck/patrolTask/index.vue

@@ -20,17 +20,6 @@
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
-          <!-- <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"> 修改
-            </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"> 删除
-            </el-button>
-          </el-col> -->
           <right-toolbar v-model:showSearch="showSearch" @query-table="getList" />
         </el-row>
       </template>
@@ -39,18 +28,28 @@
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column label="计划名称" align="center" show-overflow-tooltip prop="name" width="150" />
         <el-table-column label="计划编号" align="center" show-overflow-tooltip prop="id" width="150" />
-        <el-table-column label="巡检类型" align="center" show-overflow-tooltip width="150">
+        <el-table-column label="巡检类型" align="center">
           <template #default="scope">
             <dict-tag :options="inspection_type" :value="scope.row.inspectionType" />
           </template>
         </el-table-column>
+        <el-table-column label="巡检范围" align="center" width="120">
+          <template #default="scope">
+            <dict-tag :options="inspection_range" :value="scope.row.inspectionType" />
+          </template>
+        </el-table-column>
         <el-table-column label="巡检周期(天)" align="center" show-overflow-tooltip prop="inspectionCycle" width="150" />
-        <el-table-column label="计划巡检日期" align="center" show-overflow-tooltip prop="startTime" />
+        <el-table-column label="已巡检/待巡检项" align="center" show-overflow-tooltip prop="inspectionCycle" width="150">
+          <template #default="{ row }">
+            {{ row.itemsDone }} / {{ row.itemsTotal }}
+          </template>
+        </el-table-column>
+        <el-table-column label="完成度" align="center" show-overflow-tooltip prop="completeRate" width="150" />
         <el-table-column label="巡检员" align="center" show-overflow-tooltip prop="ext1.inspectionPersonName" />
         <el-table-column label="操作" align="center" width="140" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
-            <el-button size="small" link type="primary" @click="handlerCheck(scope.row)">执行巡检</el-button>
-            <el-button size="small" link type="primary" @click="handleUpdate(scope.row)">故障报修</el-button>
+            <el-button size="small" link type="primary" @click="handleCheck(scope.row)">执行巡检</el-button>
+            <el-button size="small" link type="primary" @click="handleRepair(scope.row)">故障报修</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -73,35 +72,36 @@
         </div>
         <SubTitle title="基础信息" style="margin-top: 10px;" />
         <el-table :data="form.inspectionItem" max-height="300">
-          <el-table-column label="设备名称" align="center" prop="deviceName">
+          <el-table-column label="设备名称" align="center" show-overflow-tooltip width="120" prop="device_name">
           </el-table-column>
-          <el-table-column label="设备编号" align="center" prop="deviceNo">
+          <el-table-column label="设备编号" align="center" width="120" prop="device_sn">
           </el-table-column>
-          <el-table-column label="巡检项目名称" align="center" width="150" prop="projectName">
+          <el-table-column label="巡检项目名称" align="center" width="150" prop="name">
           </el-table-column>
-          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detectionMethod">
+          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detection_method">
           </el-table-column>
-          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detectionStandard">
+          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detection_standard">
           </el-table-column>
-          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judgeStandard">
+          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judge_standard">
           </el-table-column>
-          <el-table-column label="标准上限" align="center" prop="judgeMaxValue">
+          <el-table-column label="标准上限" align="center" prop="judge_max_value">
+            <template #default="{ row }">
+              {{ row.judge_max_value || '--' }}
+            </template>
           </el-table-column>
-          <el-table-column label="标准下限" align="center" prop="judgeMinValue">
+          <el-table-column label="标准下限" align="center" prop="judge_min_value">
+            <template #default="{ row }">
+              {{ row.judge_min_value || '--' }}
+            </template>
           </el-table-column>
           <el-table-column label="巡检结果" width="100" align="center">
             <template #default="scope">
-              <el-input v-model="scope.row.detectionResult" placeholder="请输入" />
+              <el-input v-model="scope.row.inspectionResult" placeholder="请输入" />
             </template>
           </el-table-column>
           <el-table-column label="巡检备注说明" width="120" align="center">
             <template #default="scope">
-              <el-input v-model="scope.row.detectionCondition" placeholder="请输入" />
-            </template>
-          </el-table-column>
-          <el-table-column label="巡检图片" align="center" prop="detectionImg">
-            <template #default="scope">
-              <el-button size="small" link type="primary">上传图片</el-button>
+              <el-input v-model="scope.row.inspectionRemark" placeholder="请输入" />
             </template>
           </el-table-column>
         </el-table>
@@ -122,48 +122,56 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="报修单号" prop="no" :rules="[{ required: true, message: '报修单号不能为空', trigger: 'blur' }]">
-              <el-input v-model="repairForm.no" placeholder="请输入报修单号" />
+            <el-form-item label="故障设备" prop="deviceId"
+              :rules="[{ required: true, message: '故障设备不能为空', trigger: 'change' }]">
+              <el-select v-model="repairForm.deviceId" clearable placeholder="请选择故障设备">
+                <el-option v-for="item in deviceOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障设备" prop="device" :rules="[{ required: true, message: '故障设备不能为空', trigger: 'blur' }]">
-              <el-input v-model="repairForm.device" placeholder="请输入故障设备" />
+            <el-form-item label="故障等级" prop="faultLevel"
+              :rules="[{ required: true, message: '故障等级不能为空', trigger: 'change' }]">
+              <el-select v-model="repairForm.faultLevel" clearable placeholder="请选择故障等级">
+                <el-option v-for="item in fault_level" :key="item.value" :label="item.label"
+                  :value="item.value"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障等级" prop="faultLevel" :rules="[{ required: true, message: '故障等级不能为空', trigger: 'blur' }]">
-              <el-input v-model="repairForm.faultLevel" placeholder="请输入故障等级" />
+            <el-form-item label="故障类型" prop="faultTypeId"
+              :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
+              <el-select v-model="repairForm.faultTypeId" clearable placeholder="请选择故障故障类型">
+                <el-option v-for="item in faultTypeOptions" :key="item.id" :label="item.name"
+                  :value="item.id"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障类型" prop="faultType" :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
-              <el-input v-model="repairForm.faultType" placeholder="请输入故障类型" />
+            <el-form-item label="故障发生时间" prop="faultTime"
+              :rules="[{ required: true, message: '故障发生时间不能为空', trigger: 'change' }]">
+              <el-date-picker v-model="repairForm.faultTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
+                type="datetime" placeholder="选择时间">
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="是否停机" prop="isStop">
-              <el-switch v-model="repairForm.isStop" active-color="#13ce66" inactive-color="#ff4949">
+            <el-form-item label="是否停机" prop="isstop">
+              <el-switch v-model="repairForm.isstop" active-value="1" inactive-value="0" active-color="#13ce66"
+                inactive-color="#ff4949">
               </el-switch>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="故障发现日期" prop="faultDate"
-              :rules="[{ required: true, message: '故障发现日期不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="repairForm.faultDate" type="date" placeholder="选择日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="故障描述" prop="remark">
-              <el-input v-model="repairForm.remark" placeholder="请输入故障描述" />
+              <el-input v-model="repairForm.remark" type="textarea" placeholder="请输入故障描述" />
             </el-form-item>
           </el-col>
         </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm"> 确 定 </el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="repairFormSubmit"> 确 定 </el-button>
           <el-button @click="repairCancel"> 取 消 </el-button>
         </div>
       </template>
@@ -172,15 +180,10 @@
 </template>
 
 <script setup name="PatrolTask" lang="ts">
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
-import {
-  listDeviceType,
-  getDeviceTypeDetailList
-} from '@/api/deviceManage/deviceType';
-import {
-  listDevice,
-} from '@/api/deviceManage/device';
-import { deepClone } from '@/utils';
+import { listInspectionTask, addInspectionTaskRecord, getInspectionTaskInfoById, updateInspectionTaskRecord } from '@/api/deviceCheck/index';
+import { listFaultType,addFault } from '@/api/deviceMaintain/index';
+import { listDevice } from '@/api/deviceManage/device'
+import { deepClone, dateFormat } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
 const buttonLoading = ref(false);
@@ -193,7 +196,6 @@ const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
 const repairFormRef = ref<ElFormInstance>();
-
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
@@ -202,9 +204,19 @@ const repairDialog = reactive<DialogOption>({
   visible: false,
   title: ''
 });
-const repairForm = ref({} as any)
+const repairForm = ref({
+  id: undefined,
+  name: undefined,
+  deviceId: undefined,
+  faultLevel: undefined,
+  faultTypeId: undefined,
+  isstop: undefined,
+  faultTime: undefined,
+  remark: undefined,
+} as any)
 const initFormData = {
   id: undefined,
+  recordId: undefined,
   name: undefined,
   startTime: undefined,
   endTime: undefined,
@@ -225,19 +237,16 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    status: undefined,
+    status: '1',
     params: {}
   }
 });
-const cycleDisabled = ref(false)
 const { queryParams, form } = toRefs(formData);
 const { inspection_type } = toRefs<any>(proxy?.useDict('inspection_type'));
-const { inspection_status } = toRefs<any>(proxy?.useDict('inspection_status'));
-const dictGroup = reactive({
-  deviceTypeOptions: [],
-  inspectionItemOptions: []
-})
-const userOptions = ref([])
+const { inspection_range } = toRefs<any>(proxy?.useDict('inspection_range'));
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
+const deviceOptions = ref([])
+const faultTypeOptions = ref([])
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
@@ -246,6 +255,12 @@ const getList = async () => {
     ...item,
     ext1: item.ext1 ? JSON.parse(item.ext1) : null,
   }));
+  tableList.value.forEach(async item => {
+    const { data } = await getInspectionTaskInfoById(item.id)
+    Object.assign(item, data, { itemsTotal: data.inspectionItem.length, itemsDone: data.inspectionItem.filter(item => item.inspectionResult.trim() !== '').length })
+    item.completeRate = (item.itemsDone / item.itemsTotal * 100).toFixed(2) + '%'
+  })
+
   total.value = res.total;
   loading.value = false;
 };
@@ -284,66 +299,15 @@ const handleSelectionChange = (selection) => {
   single.value = selection.length != 1;
   multiple.value = !selection.length;
 };
-/** 新增按钮操作 */
-const handleAdd = () => {
-  reset();
-  dialog.visible = true;
-  dialog.title = '新增巡检计划';
-};
-const handlerCheck = (row) => {
+const handleCheck = async (row) => {
   reset();
-  const _id = row?.id || ids.value[0];
-  getInspectionTask(_id).then(({ data }) => {
-    data.ext1 = data.ext1 && JSON.parse(data.ext1);
-    data.inspectionItem = [
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室温度',
-        detectionMethod: '温度计测量',
-        detectionStandard: '20°C以内',
-        judgeStandard: '填写值',
-        judgeMaxValue: '0°C',
-        judgeMinValue: '20°C',
-        detectionResult: '',
-        detectionCondition: '',
-        detectionImg: '',
-      },
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室无漏水',
-        detectionMethod: '目视',
-        detectionStandard: '无漏水',
-        judgeStandard: '直接确认',
-        judgeMaxValue: '--',
-        judgeMinValue: '--',
-        detectionResult: '',
-        detectionCondition: '',
-        detectionImg: '',
-      },
-      {
-        deviceName: '配电室',
-        deviceNo: 'PDS001',
-        projectName: '配电室无放电',
-        detectionMethod: '仪器检测',
-        detectionStandard: '无漏电',
-        judgeStandard: '直接确认',
-        judgeMaxValue: '--',
-        judgeMinValue: '--',
-        detectionResult: '',
-        detectionCondition: '',
-        detectionImg: '',
-      }
-    ]
-    Object.assign(form.value, data);
-  });
+  Object.assign(form.value, row);
   dialog.visible = true;
   dialog.title = '执行巡检任务';
 }
 /** 修改按钮操作 */
-const handleUpdate = (row) => {
-  reset();
+const handleRepair = () => {
+  repairFormRef.value?.resetFields();
   repairDialog.visible = true;
   repairDialog.title = '巡检故障报修';
 };
@@ -352,22 +316,61 @@ const handleUpdate = (row) => {
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      const { inspectionItem, id, recordId } = form.value
+      if (inspectionItem.every(item => item.inspectionResult.trim() === '')) return proxy.$modal.msgError('请填写巡检结果')
+      buttonLoading.value = true;
+      if (!recordId) {
+        await addInspectionTaskRecord({
+          taskId: id,
+          inspectionStatus: '0',
+          inspectionItem,
+        })
+      } else {
+        const params = {
+          id: recordId,
+          inspectionItem
+        } as any
+        if (inspectionItem.every(item => item.inspectionResult.trim() !== '')) {
+          params.inspectionStatus = '1'
+          params.inspectionEndDate = dateFormat(new Date(), 'yyyy-MM-dd')
+        }
+        await updateInspectionTaskRecord(params)
+      }
+      buttonLoading.value = false;
+      dialog.visible = false;
+      proxy.$modal.msgSuccess('提交成功');
+      getList();
     }
   });
 };
-/** 删除按钮操作 */
-const handleDelete = async (row) => {
-  const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
-  await delInspectionTask(_ids);
-  proxy?.$modal.msgSuccess('删除成功');
-  await getList();
+const repairFormSubmit = () => {
+  repairFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      await addFault(repairForm.value).finally(() => (buttonLoading.value = false));
+      repairDialog.visible = false;
+      proxy.$modal.msgSuccess('提交成功');
+    }
+  });
 };
+const getDeviceList = () => {
+  listDevice({}).then(({ code, rows }) => {
+    if (code === 200) {
+      deviceOptions.value = rows
+    }
+  })
+}
+const getFaultTypeList = () => {
+  listFaultType({}).then(({ code, rows }) => {
+    if (code === 200) {
+      faultTypeOptions.value = rows
+    }
+  })
+}
 onMounted(() => {
   getList();
-  // deviceTypeList()
-  // getInspectionItem()
-  // getInspectionTeamList()
+  getDeviceList();
+  getFaultTypeList();
 });
 </script>
 <style lang="scss" scoped>
@@ -383,12 +386,13 @@ onMounted(() => {
 }
 
 .drawer-title {
-  :deep(.el-descriptions__body)  {
+  :deep(.el-descriptions__body) {
     margin-top: 10px;
     background-color: #F4F5F7;
     border-radius: 2px;
     padding: 10px 10px 0 10px;
   }
+
   :deep(.el-descriptions__label) {
     padding-bottom: 5px;
   }

+ 170 - 124
src/views/deviceMaintain/faultRepair/index.vue

@@ -8,8 +8,8 @@
             <el-form-item label="报修名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入报修名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="报修单号" prop="sn">
-              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="id">
+              <el-input v-model="queryParams.id" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -40,25 +40,41 @@
 
       <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="sn" width="150" />
+        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="id" width="150" />
         <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="name" width="150" />
-        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="creator" width="150" />
-        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="creatorDept" width="150" />
-        <el-table-column label="故障发生日期" align="center" show-overflow-tooltip prop="faultDate" width="150" />
-        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel" />
-        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isStop" />
-        <el-table-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
-        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceNo" width="150" />
+        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="createName" width="150" />
+        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="createDeptName" width="150" />
+        <el-table-column label="故障发生时间" align="center" show-overflow-tooltip prop="faultTime" width="150" />
+        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel">
+          <template #default="{ row }">
+            <dict-tag :value="row.faultLevel" :options="fault_level" />
+          </template>
+        </el-table-column>
+        <el-table-column label="是否停机" align="center" >
+          <template #default="{ row }">
+            <el-tag v-if="row.isstop == 1" type="danger">是</el-tag>
+            <el-tag v-else type="primary">否</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150">
+          <template #default="{ row }">
+            {{ formatDevice(row.deviceId) }}
+          </template>
+        </el-table-column>
         <el-table-column label="报修时间" align="center" show-overflow-tooltip prop="createTime" width="150" />
-        <el-table-column label="状态" align="center" show-overflow-tooltip prop="status" width="150" />
+        <el-table-column label="状态" align="center" show-overflow-tooltip width="150">
+          <template #default="{ row }">
+            <dict-tag :value="row.status" :options="fault_status" />
+          </template>
+        </el-table-column>
         <el-table-column label="操作" align="center" width="250" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button size="small" link type="primary" @click="handleDetail(scope.row)">详情</el-button>
-            <template v-if="scope.row.status === '待派工'">
+            <template v-if="scope.row.status == 0">
               <el-button size="small" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
-              <el-button size="small" link type="primary" @click="handleAssign(scope.row, '内部派工')">内部派工</el-button>
-              <el-button size="small" link type="primary" @click="handleAssign(scope.row, '委外维修')">委外维修</el-button>
-              <el-button size="small" link type="danger" @click="handleDelete(scope.row)">作废</el-button>
+              <el-button size="small" link type="primary" @click="handleAssign(scope.row, '1')">内部派工</el-button>
+              <el-button size="small" link type="primary" @click="handleAssign(scope.row, '2')">委外维修</el-button>
+              <el-button size="small" link type="danger" @click="handleDelete(scope.row)">删除</el-button>
             </template>
           </template>
         </el-table-column>
@@ -76,45 +92,49 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="报修单号" prop="sn" :rules="[{ required: true, message: '报修单号不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.sn" placeholder="请输入报修单号" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="故障设备" prop="deviceName"
-              :rules="[{ required: true, message: '故障设备不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.deviceName" placeholder="请输入故障设备" />
+            <el-form-item label="故障设备" prop="deviceId"
+              :rules="[{ required: true, message: '故障设备不能为空', trigger: 'change' }]">
+              <el-select v-model="form.deviceId" clearable placeholder="请选择故障设备">
+                <el-option v-for="item in deviceOptions" :key="item.id" :label="item.name" :value="item.id"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="故障等级" prop="faultLevel"
-              :rules="[{ required: true, message: '故障等级不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.faultLevel" placeholder="请输入故障等级" />
+              :rules="[{ required: true, message: '故障等级不能为空', trigger: 'change' }]">
+              <el-select v-model="form.faultLevel" clearable placeholder="请选择故障等级">
+                <el-option v-for="item in fault_level" :key="item.value" :label="item.label"
+                  :value="item.value"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障类型" prop="faultType"
+            <el-form-item label="故障类型" prop="faultTypeId"
               :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.faultType" placeholder="请输入故障类型" />
+              <el-select v-model="form.faultTypeId" clearable placeholder="请选择故障故障类型">
+                <el-option v-for="item in faultTypeOptions" :key="item.id" :label="item.name"
+                  :value="item.id"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="是否停机" prop="isStop">
-              <el-switch v-model="form.isStop" active-color="#13ce66" inactive-color="#ff4949">
-              </el-switch>
+            <el-form-item label="故障发生时间" prop="faultTime"
+              :rules="[{ required: true, message: '故障发生时间不能为空', trigger: 'change' }]">
+              <el-date-picker v-model="form.faultTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
+                type="datetime" placeholder="选择时间">
+              </el-date-picker>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障发生日期" prop="faultDate"
-              :rules="[{ required: true, message: '故障发生日期不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.faultDate" style="width: 100%;" value-format="YYYY-MM-DD" type="date"
-                placeholder="选择日期">
-              </el-date-picker>
+            <el-form-item label="是否停机" prop="isstop">
+              <el-switch v-model="form.isstop" :active-value="1" :inactive-value="0" active-color="#13ce66"
+                inactive-color="#ff4949">
+              </el-switch>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="故障描述" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入故障描述" />
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入故障描述" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -131,47 +151,48 @@
         <div class="drawer-title">
           <el-descriptions title="" direction="vertical" :column="6">
             <el-descriptions-item align="center" label="报修名称">{{ assignForm.name }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="故障等级">{{ assignForm.faultLevel }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="故障发生日期">{{ assignForm.faultDate }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修部门">{{ assignForm.creatorDept }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修设备">{{ assignForm.deviceName}}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修人">{{ assignForm.creator}}</el-descriptions-item>
+            <el-descriptions-item align="center" label="故障等级"><dict-tag :value="assignForm.faultLevel"
+                :options="fault_level" /></el-descriptions-item>
+            <el-descriptions-item align="center" label="故障发生时间">{{ assignForm.faultTime }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修部门">{{ assignForm.createDeptName }}</el-descriptions-item>
+            <el-descriptions-item align="center"
+              label="报修设备">{{ formatDevice(assignForm.deviceId) }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修人">{{ assignForm.createName }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <SubTitle :title="assignDialog.title" style="margin: 10px 0; " />
         <el-row>
-          <el-col v-if="assignDialog.title=='内部派工'" :span="12">
-            <el-form-item label="维修人员" prop="headerId"
+          <el-col v-if="assignDialog.title == '内部派工'" :span="12">
+            <el-form-item label="维修人员" prop="repartId"
               :rules="[{ required: true, message: '维修人员不能为空', trigger: 'change' }]">
-              <el-select v-model="assignForm.headerId" clearable placeholder="请选择维修人员" >
+              <el-select v-model="assignForm.repartId" clearable placeholder="请选择维修人员">
                 <el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName"
                   :value="item.userId"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col v-else :span="12">
-            <el-form-item label="委外售后工程师" prop="headerId"
+            <el-form-item label="委外售后工程师" prop="repartId"
               :rules="[{ required: true, message: '委外售后工程师不能为空', trigger: 'change' }]">
-              <el-select v-model="assignForm.headerId" clearable placeholder="请选择委外售后工程师" >
-                <el-option v-for="item in userOptions" :key="item.userId" :label="item.nickName"
-                  :value="item.userId"></el-option>
+              <el-select v-model="assignForm.repartId" clearable placeholder="请选择委外售后工程师">
+                <el-option v-for="item in engineerOptions" :key="item.id" :label="item.name"
+                  :value="item.id"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="要求处理时间" prop="dealDate"
+            <el-form-item label="要求处理时间" prop="requireRepartTime"
               :rules="[{ required: true, message: '要求处理时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="assignForm.dealDate" style="width: 100%;" value-format="YYYY-MM-DD" type="date"
-                placeholder="选择日期">
+              <el-date-picker v-model="assignForm.requireRepartTime" style="width: 100%;"
+                value-format="YYYY-MM-DD hh:mm:ss" type="datetime" placeholder="选择时间">
               </el-date-picker>
             </el-form-item>
           </el-col>
-
         </el-row>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm"> 确 定 </el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="assignFormSubmit"> 确 定 </el-button>
           <el-button @click="assignCancel"> 取 消 </el-button>
         </div>
       </template>
@@ -180,8 +201,10 @@
 </template>
 
 <script setup name="FaultRepair" lang="ts">
-// import { getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
+import { listFaultType, addFault, updateFault,delFault, listFault, addWorkTask } from '@/api/deviceMaintain/index';
 import { listUser } from '@/api/system/user/index'
+import { listDevice } from '@/api/deviceManage/device'
+import { listProductorEngineers } from '@/api/supplierManage/index'
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -195,7 +218,11 @@ const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
 const assignFormRef = ref<ElFormInstance>();
-const assignForm = ref({} as any)
+const assignForm = ref({
+  repartId: undefined,
+  requireRepartTime: undefined,
+  type: undefined
+} as any)
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
@@ -205,16 +232,18 @@ const assignDialog = reactive<DialogOption>({
   title: ''
 });
 const detailDisabled = ref(false);
+const deviceOptions = ref([])
 const userOptions = ref([])
+const faultTypeOptions = ref([])
+const engineerOptions = ref([]);
 const initFormData = {
   id: undefined,
-  sn: undefined,
   name: undefined,
-  deviceName: undefined,
+  deviceId: undefined,
   faultLevel: undefined,
-  faultType: undefined,
-  isStop: undefined,
-  faultDate: undefined,
+  faultTypeId: undefined,
+  isstop: undefined,
+  faultTime: undefined,
   remark: undefined,
   ext1: undefined,
   ext2: undefined
@@ -225,65 +254,19 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    sn: undefined,
+    id: undefined,
     params: {}
   }
 });
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
+const { fault_status } = toRefs<any>(proxy?.useDict('fault_status'));
 const { queryParams, form } = toRefs(formData);
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
-  // const res = await listInspectionTask(queryParams.value);
-  // tableList.value = res.rows.map((item) => ({
-  //   ...item,
-  //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
-  // }));
-  // total.value = res.total;
-  tableList.value = [
-    {
-      name: '设备一报修',
-      sn: 1002301,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultDate: '2024-12-19',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      faultType: '电压故障',
-      isStop: '是',
-      deviceName: '设备一',
-      deviceNo: '21244',
-      status: '待派工'
-    },
-    {
-      name: '设备二报修',
-      sn: 1002302,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultDate: '2024-12-19',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      faultType: '故障类型一',
-      isStop: '是',
-      deviceName: '设备二',
-      deviceNo: '21242',
-      status: '已派工'
-    },
-    {
-      name: '设备三报修',
-      sn: 1002303,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultDate: '2024-12-19',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      faultType: '故障类型一',
-      isStop: '是',
-      deviceName: '设备三',
-      deviceNo: '21243',
-      status: '待派工'
-    },
-
-  ]
+  const res = await listFault(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
@@ -322,13 +305,14 @@ const handleSelectionChange = (selection) => {
 };
 /** 新增按钮操作 */
 const handleAdd = () => {
+  detailDisabled.value = false
   reset();
   dialog.visible = true;
   dialog.title = '新增故障报修';
 };
 /** 修改按钮操作 */
 const handleUpdate = (row) => {
-  detailDisabled.value=false
+  detailDisabled.value = false
   reset();
   Object.assign(form.value, row)
   dialog.visible = true
@@ -339,39 +323,101 @@ const handleDetail = (row) => {
   Object.assign(form.value, row)
   dialog.visible = true
   dialog.title = '故障报修详情';
-  detailDisabled.value=true;
+  detailDisabled.value = true;
 };
 
-const handleAssign = (row, name) => {
+const handleAssign = (row, type) => {
   assignDialog.visible = true;
-  assignDialog.title = name;
-  Object.assign(assignForm.value,row)
+  assignDialog.title = type === '1' ? '内部派工' : '委外维修';
+  assignForm.value.type = type
+  Object.assign(assignForm.value, row)
 }
 /** 提交按钮 */
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateFault(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addFault(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
+    }
+  });
+};
+const assignFormSubmit = () => {
+  assignFormRef.value?.validate(async (valid: boolean) => {
+    if (valid) {
+      buttonLoading.value = true;
+      const { repartId, requireRepartTime, type, id, name } = assignForm.value
+      updateFault({id,status:'1'})
+      await addWorkTask({
+        repartId,
+        requireRepartTime,
+        type,
+        name,
+        faultId:id,
+      }).finally(() => (buttonLoading.value = false));
+      proxy?.$modal.msgSuccess('操作成功');
+      assignDialog.visible = false;
+      await getList();
     }
   });
 };
 /** 删除按钮操作 */
 const handleDelete = async (row) => {
-  // const _ids = row?.id || ids.value;
-  await proxy?.$modal.confirm('是否确认作废?').finally(() => (loading.value = false));
-  // await delInspectionTask(_ids);
-  // proxy?.$modal.msgSuccess('删除成功');
-  // await getList();
+  const _ids = row?.id || ids.value;
+  await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
+  await delFault(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
 };
+const getDeviceList = () => {
+  listDevice({}).then(({ code, rows }) => {
+    if (code === 200) {
+      deviceOptions.value = rows
+    }
+  })
+}
+const formatDevice = (val) => {
+  let label = ''
+  deviceOptions.value.forEach(item => {
+    if (item.id === val) {
+      label = item.name
+    }
+  })
+  return label
+}
 const getUserList = () => {
-  listUser({ status: '0', pageSize: 10000, pageNum: 1 }).then(({ code, rows }) => {
+  listUser({ status: '0', pageNum: 1, pageSize: 10000 }).then(({ code, rows }) => {
     if (code === 200) {
       userOptions.value = rows
     }
   })
 }
+const getFaultTypeList = () => {
+  listFaultType({}).then(({ code, rows }) => {
+    if (code === 200) {
+      faultTypeOptions.value = rows
+    }
+  })
+}
+const getEngineerList = () => {
+  listProductorEngineers({}).then(({ code, rows }) => {
+    if (code === 200) {
+      engineerOptions.value = rows
+    }
+  })
+}
 onMounted(() => {
   getList();
   getUserList()
+  getDeviceList()
+  getFaultTypeList()
+  getEngineerList()
 });
 </script>
 <style lang="scss" scoped>

+ 67 - 121
src/views/deviceMaintain/innerWorkorder/index.vue

@@ -8,8 +8,8 @@
             <el-form-item label="报修名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入报修名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="报修单号" prop="sn">
-              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="faultId">
+              <el-input v-model="queryParams.faultId" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -23,37 +23,38 @@
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
-          <!-- <el-col :span="1.5">
-            <el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate"> 修改
-            </el-button>
-          </el-col>
-          <el-col :span="1.5">
-            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"> 删除
-            </el-button>
-          </el-col> -->
           <right-toolbar v-model:showSearch="showSearch" @query-table="getList" />
         </el-row>
       </template>
 
-      <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="sn" width="150" />
-        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="name" width="150" />
-        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="creator" width="150" />
-        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="creatorDept" width="150" />
-        <el-table-column label="报修时间" align="center" show-overflow-tooltip prop="faultCreateTime" width="150" />
-        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel" />
-        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isStop" />
+      <el-table v-loading="loading" :data="tableList">
+        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="faultSn" width="150" />
+        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="faultName" width="150" />
+        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="createFaultName" width="150" />
+        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="deptName" width="150" />
+        <el-table-column label="报修时间" align="center" show-overflow-tooltip prop="createTime" width="150" />
+        <el-table-column label="故障等级" align="center" >
+          <template #default="{ row }">
+            <dict-tag :value="row.faultLevel" :options="fault_level" />
+          </template>
+        </el-table-column>
+        <el-table-column label="是否停机" align="center" >
+          <template #default="{ row }">
+            <el-tag v-if="row.isstop == 1" type="danger">是</el-tag>
+            <el-tag v-else type="primary">否</el-tag>
+          </template>
+        </el-table-column>
         <el-table-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
-        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceNo" width="150" />
-        <el-table-column label="维修人员" align="center" show-overflow-tooltip prop="repairPerson" width="150" />
-        <el-table-column label="预计维修日期" align="center" show-overflow-tooltip prop="repairDate" width="150" />
-        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignPerson" width="150" />
-        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignDate" width="150" />
-        <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="status" width="150" />
+        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceSn" width="150" />
+        <el-table-column label="维修人员" align="center" show-overflow-tooltip width="150" prop="repartName"/>
+        <el-table-column label="预计维修时间" align="center" show-overflow-tooltip prop="requireRepartTime" width="150" />
+        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignName" width="150" />
+        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignTime" width="150" />
+        <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="repairStatus" width="150">
+          <template #default="{ row }">
+            <span :style="{ 'color': row.repairStatus == '正常' ? 'inherit' : 'red' }">{{ row.repairStatus }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button size="small" link type="primary" @click="handleDeal(scope.row)">处理</el-button>
@@ -68,29 +69,32 @@
       <el-form ref="addFormRef" :model="form" label-width="120px">
         <div class="drawer-title">
           <el-descriptions title="" direction="vertical" :column="5">
-            <el-descriptions-item align="center" label="报修单号">{{ form.sn }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修名称">{{ form.name }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修部门">{{ form.creatorDept }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修单号">{{ form.faultSn }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修名称">{{ form.faultName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修部门">{{ form.deptName }}</el-descriptions-item>
             <el-descriptions-item align="center" label="设备名称">{{ form.deviceName }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修时间">{{ form.faultCreateTime }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修时间">{{ form.createTime }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <el-row style="margin-top: 20px;">
           <el-col :span="12">
-            <el-form-item label="故障原因" prop="faultReason"
+            <el-form-item label="故障原因" prop="reason"
               :rules="[{ required: true, message: '故障原因不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.faultReason" placeholder="请输入" />
+              <el-input v-model="form.reason" placeholder="请输入" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="处理方式" prop="handlerMethod"
+            <el-form-item label="处理方式" prop="faultSolution"
               :rules="[{ required: true, message: '处理方式不能为空', trigger: 'change' }]">
-              <el-input v-model="form.handlerMethod" placeholder="请输入" />
+              <el-select v-model="form.faultSolution" clearable placeholder="请选择处理方式">
+                <el-option v-for="item in fault_solution" :key="item.value" :label="item.label"
+                  :value="item.value"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="维修说明" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入" />
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -106,16 +110,13 @@
 </template>
 
 <script setup name="InnerWorkorder" lang="ts">
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
-import { deepClone } from '@/utils';
+import { getWorkTaskList, updateWorkTask } from '@/api/deviceMaintain/index';
+import { deepClone, dateFormat } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const ids = ref<Array<string | number>>([]);
-const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
@@ -124,93 +125,31 @@ const dialog = reactive<DialogOption>({
   title: ''
 });
 const initFormData = {
-  id: undefined,
-  sn: undefined,
-  name: undefined,
-  creatorDept: undefined,
-  deviceName: undefined,
-  faultCreateTime: undefined,
-  faultReason: undefined,
-  handlerMethod: undefined,
+  reason: undefined,
+  faultSolution: undefined,
   remark: undefined,
-  ext1: undefined,
-  ext2: undefined
-};
+} as any;
 const formData = reactive({
   form: { ...initFormData },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    sn: undefined,
+    faultId: undefined,
+    dealStatus: '0',
+    type: '1',
     params: {}
   }
 });
 const { queryParams, form } = toRefs(formData);
-const userOptions = ref([])
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
+const { fault_solution } = toRefs<any>(proxy?.useDict('fault_solution'));
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
-  // const res = await listInspectionTask(queryParams.value);
-  // tableList.value = res.rows.map((item) => ({
-  //   ...item,
-  //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
-  // }));
-  // total.value = res.total;
-  tableList.value = [
-    {
-      name: '设备一报修',
-      sn: 1002301,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备一',
-      deviceNo: '21244',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-    {
-      name: '设备二报修',
-      sn: 1002302,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备二',
-      deviceNo: '21242',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '过期未执行'
-    },
-    {
-      name: '设备三报修',
-      sn: 1002303,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备三',
-      deviceNo: '21243',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-
-  ]
+  const res = await getWorkTaskList(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
@@ -238,17 +177,24 @@ const resetQuery = () => {
   handleQuery();
 };
 
-/** 多选框选中数据 */
-const handleSelectionChange = (selection) => {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-};
 
 /** 提交按钮 */
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      buttonLoading.value = true;
+      const { id, reason, faultSolution, remark } = form.value;
+      await updateWorkTask({
+        id,
+        reason,
+        faultSolution,
+        remark,
+        completeTime: dateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss')
+      })
+      buttonLoading.value = false;
+      proxy?.$modal.msgSuccess('处理成功')
+      dialog.visible = false;
+      getList();
     }
   });
 };

+ 69 - 128
src/views/deviceMaintain/outerWorkorder/index.vue

@@ -8,8 +8,8 @@
             <el-form-item label="报修名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入报修名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="报修单号" prop="sn">
-              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="faultId">
+              <el-input v-model="queryParams.faultId" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -27,22 +27,34 @@
         </el-row>
       </template>
 
-      <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="sn" width="150" />
-        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="name" width="150" />
-        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="creator" width="150" />
-        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="creatorDept" width="150" />
-        <el-table-column label="报修时间" align="center" show-overflow-tooltip prop="faultCreateTime" width="150" />
-        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel" />
-        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isStop" />
+      <el-table v-loading="loading" :data="tableList">
+        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="faultSn" width="150" />
+        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="faultName" width="150" />
+        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="createFaultName" width="150" />
+        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="deptName" width="150" />
+        <el-table-column label="报修时间" align="center" show-overflow-tooltip prop="createTime" width="150" />
+        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel">
+          <template #default="{ row }">
+            <dict-tag :value="row.faultLevel" :options="fault_level" />
+          </template>
+        </el-table-column>
+        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isstop">
+          <template #default="{ row }">
+            <el-tag v-if="row.isstop == 1" type="danger">是</el-tag>
+            <el-tag v-else type="primary">否</el-tag>
+          </template>
+        </el-table-column>
         <el-table-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
-        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceNo" width="150" />
-        <el-table-column label="维修人员" align="center" show-overflow-tooltip prop="repairPerson" width="150" />
-        <el-table-column label="预计维修日期" align="center" show-overflow-tooltip prop="repairDate" width="150" />
-        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignPerson" width="150" />
-        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignDate" width="150" />
-        <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="status" width="150" />
+        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceSn" width="150" />
+        <el-table-column label="维修人员" align="center" show-overflow-tooltip width="150" prop="repartName" />
+        <el-table-column label="预计维修时间" align="center" show-overflow-tooltip prop="requireRepartTime" width="150" />
+        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignName" width="150" />
+        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignTime" width="150" />
+        <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="repairStatus" width="150">
+          <template #default="{ row }">
+            <span :style="{ 'color': row.repairStatus == '正常' ? 'inherit' : 'red' }">{{ row.repairStatus }}</span>
+          </template>
+        </el-table-column>
         <el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button size="small" link type="primary" @click="handleDeal(scope.row)">处理</el-button>
@@ -57,32 +69,34 @@
       <el-form ref="addFormRef" :model="form" label-width="120px">
         <div class="drawer-title">
           <el-descriptions title="" direction="vertical" :column="5">
-            <el-descriptions-item align="center" label="报修单号">{{ form.sn }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修名称">{{ form.name }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修部门">{{ form.creatorDept }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修单号">{{ form.faultSn }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修名称">{{ form.faultName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修部门">{{ form.deptName }}</el-descriptions-item>
             <el-descriptions-item align="center" label="设备名称">{{ form.deviceName }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修时间">{{ form.faultCreateTime }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修时间">{{ form.createTime }}</el-descriptions-item>
           </el-descriptions>
         </div>
         <el-row style="margin-top: 20px;">
           <el-col :span="12">
-            <el-form-item label="故障原因" prop="faultReason"
+            <el-form-item label="故障原因" prop="reason"
               :rules="[{ required: true, message: '故障原因不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.faultReason" placeholder="请输入" />
+              <el-input v-model="form.reason" placeholder="请输入" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="处理方式" prop="handlerMethod"
+            <el-form-item label="处理方式" prop="faultSolution"
               :rules="[{ required: true, message: '处理方式不能为空', trigger: 'change' }]">
-              <el-input v-model="form.handlerMethod" placeholder="请输入" />
+              <el-select v-model="form.faultSolution" clearable placeholder="请选择处理方式">
+                <el-option v-for="item in fault_solution" :key="item.value" :label="item.label"
+                  :value="item.value"></el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="24">
             <el-form-item label="维修说明" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入" />
+              <el-input v-model="form.remark" type="textarea" placeholder="请输入" />
             </el-form-item>
           </el-col>
-
         </el-row>
       </el-form>
       <template #footer>
@@ -96,16 +110,13 @@
 </template>
 
 <script setup name="OuterWorkorder" lang="ts">
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
-import { deepClone } from '@/utils';
+import { getWorkTaskList, updateWorkTask } from '@/api/deviceMaintain/index';
+import { deepClone, dateFormat } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
 const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const ids = ref<Array<string | number>>([]);
-const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
@@ -114,91 +125,31 @@ const dialog = reactive<DialogOption>({
   title: ''
 });
 const initFormData = {
-  id: undefined,
-  sn: undefined,
-  name: undefined,
-  creatorDept: undefined,
-  deviceName: undefined,
-  faultCreateTime: undefined,
-  faultReason: undefined,
-  handlerMethod: undefined,
+  reason: undefined,
+  faultSolution: undefined,
   remark: undefined,
-  ext1: undefined,
-  ext2: undefined
-};
+} as any;
 const formData = reactive({
   form: { ...initFormData },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    sn: undefined,
+    faultId: undefined,
+    dealStatus: '0',
+    type: '2',
     params: {}
   }
 });
 const { queryParams, form } = toRefs(formData);
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
+const { fault_solution } = toRefs<any>(proxy?.useDict('fault_solution'));
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
-  // const res = await listInspectionTask(queryParams.value);
-  // tableList.value = res.rows.map((item) => ({
-  //   ...item,
-  //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
-  // }));
-  // total.value = res.total;
-  tableList.value = [
-    {
-      name: '设备四报修',
-      sn: 1002304,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备四',
-      deviceNo: '21244',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-    {
-      name: '设备五报修',
-      sn: 1002305,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备五',
-      deviceNo: '21242',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '过期未执行'
-    },
-    {
-      name: '设备六报修',
-      sn: 1002306,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备六',
-      deviceNo: '21243',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-  ]
+  const res = await getWorkTaskList(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
@@ -226,42 +177,31 @@ const resetQuery = () => {
   handleQuery();
 };
 
-/** 多选框选中数据 */
-const handleSelectionChange = (selection) => {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-};
-/** 新增按钮操作 */
-const handleAdd = () => {
-  reset();
-  // dialog.visible = true;
-  dialog.title = '新增故障类型';
-};
-/** 修改按钮操作 */
-const handleUpdate = (row) => {
-  reset();
-  const _id = row?.id || ids.value[0];
-  getInspectionTask(_id).then(({ data }) => {
-    data.ext1 = data.ext1 && JSON.parse(data.ext1);
-    data.inspectionItem = data.inspectionItem && JSON.parse(data.inspectionItem);
-    Object.assign(form.value, data);
-  });
-  // dialog.visible = true;
-  dialog.title = '修改故障类型';
-};
 
 /** 提交按钮 */
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      buttonLoading.value = true;
+      const { id, reason, faultSolution, remark } = form.value;
+      await updateWorkTask({
+        id,
+        reason,
+        faultSolution,
+        remark,
+        completeTime: dateFormat(new Date(), 'yyyy-MM-dd HH:mm:ss')
+      })
+      buttonLoading.value = false;
+      proxy?.$modal.msgSuccess('处理成功')
+      dialog.visible = false;
+      getList();
     }
   });
 };
 const handleDeal = async (row) => {
   Object.assign(form.value, row)
   dialog.visible = true;
-  dialog.title = '委外维修工单处理';
+  dialog.title = '内部维修工单处理';
 };
 onMounted(() => {
   getList();
@@ -278,6 +218,7 @@ onMounted(() => {
     cursor: pointer;
   }
 }
+
 .drawer-title {
   :deep(.el-descriptions__body) {
     margin-top: 10px;

+ 95 - 232
src/views/deviceMaintain/record/index.vue

@@ -8,8 +8,8 @@
             <el-form-item label="报修名称" prop="name">
               <el-input v-model="queryParams.name" placeholder="请输入报修名称" clearable @keyup.enter="handleQuery" />
             </el-form-item>
-            <el-form-item label="报修单号" prop="sn">
-              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="faultId">
+              <el-input v-model="queryParams.faultId" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -27,22 +27,33 @@
         </el-row>
       </template>
 
-      <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="sn" width="150" />
-        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="name" width="150" />
-        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="creator" width="150" />
-        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="creatorDept" width="150" />
-        <el-table-column label="故障发生时间" align="center" show-overflow-tooltip prop="faultCreateTime" width="150" />
-        <el-table-column label="故障等级" align="center" show-overflow-tooltip prop="faultLevel" />
-        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isStop" />
+      <el-table v-loading="loading" :data="tableList">
+        <el-table-column label="报修单号" align="center" show-overflow-tooltip prop="faultSn" width="150" />
+        <el-table-column label="工单类型" align="center" show-overflow-tooltip prop="type" width="150">
+          <template #default="{ row }">
+            {{ row.type == '1' ? '内部工单' : '外部工单' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="报修名称" align="center" show-overflow-tooltip prop="faultName" width="150" />
+        <el-table-column label="报修人" align="center" show-overflow-tooltip prop="createFaultName" width="150" />
+        <el-table-column label="报修部门" align="center" show-overflow-tooltip prop="deptName" width="150" />
+        <el-table-column label="故障发生时间" align="center" show-overflow-tooltip prop="faultTime" width="150" />
+        <el-table-column label="故障等级" align="center">
+          <template #default="{ row }">
+            <dict-tag :value="row.faultLevel" :options="fault_level" />
+          </template>
+        </el-table-column>
+        <el-table-column label="是否停机" align="center">
+          <template #default="{ row }">
+            {{ row.isstop == 1 ? '是' : '否' }}
+          </template>
+        </el-table-column>
         <el-table-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
-        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceNo" width="150" />
-        <el-table-column label="维修人员" align="center" show-overflow-tooltip prop="repairPerson" width="150" />
-        <el-table-column label="预计维修日期" align="center" show-overflow-tooltip prop="repairDate" width="150" />
-        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignPerson" width="150" />
-        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignDate" width="150" />
-        <el-table-column label="工单完工时间" align="center" show-overflow-tooltip prop="completeDate" width="150" />
+        <el-table-column label="设备编号" align="center" show-overflow-tooltip prop="deviceSn" width="150" />
+        <el-table-column label="维修人员" align="center" show-overflow-tooltip width="120" prop="repartName" />
+        <el-table-column label="分派人" align="center" show-overflow-tooltip prop="assignName" width="150" />
+        <el-table-column label="分派时间" align="center" show-overflow-tooltip prop="assignTime" width="150" />
+        <el-table-column label="工单完工时间" align="center" show-overflow-tooltip prop="completeTime" width="150" />
         <el-table-column label="操作" align="center" width="100" fixed="right" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button size="small" link type="primary" @click="handleDetail(scope.row)">详情</el-button>
@@ -57,12 +68,12 @@
         <div class="drawer-title">
           <div class="title-name">维修工单详情</div>
           <el-descriptions title="" direction="vertical" :column="6">
-            <el-descriptions-item align="center" label="报修单号">{{ curRow.sn }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修名称">{{ curRow.name }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修部门">{{ curRow.creatorDept }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="报修人">{{ curRow.creator }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修单号">{{ curRow.faultSn }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修名称">{{ curRow.faultName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修部门">{{ curRow.deptName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修人">{{ curRow.createFaultName }}</el-descriptions-item>
             <el-descriptions-item align="center" label="设备名称">{{ curRow.deviceName }}</el-descriptions-item>
-            <el-descriptions-item align="center" label="设备编号">{{ curRow.deviceNo }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="设备编号">{{ curRow.deviceSn }}</el-descriptions-item>
           </el-descriptions>
         </div>
       </template>
@@ -70,40 +81,44 @@
         <el-tabs v-model="detailTab">
           <el-tab-pane label="故障信息" name="1">
             <el-descriptions class="detail-descriptions" :column="2" border>
-              <el-descriptions-item label-align="center" label="故障发生时间">{{ curRow.faultCreateTime
+              <el-descriptions-item label-align="center" label="故障发生时间">{{ curRow.faultTime
                 }}</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="故障等级">{{ curRow.faultLevel }}</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="故障类型">故障类型一</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="是否停机">{{ curRow.isStop }}</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="故障描述">发生故障</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="故障等级"> <dict-tag :value="curRow.faultLevel"
+                  :options="fault_level" /></el-descriptions-item>
+              <el-descriptions-item label-align="center" label="故障类型">{{ curRow.faultTypeName }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="是否停机">{{ curRow.isstop == 1 ? '是' : '否'
+                }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="故障描述">{{ curRow.faultRemark }}</el-descriptions-item>
             </el-descriptions>
           </el-tab-pane>
           <el-tab-pane label="维修信息" name="2">
             <SubTitle title="维修工单" style="margin-bottom: 10px; " />
             <el-descriptions class="detail-descriptions" :column="2" border>
-              <el-descriptions-item label-align="center" label="工单名称">{{ curRow.name }}</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="工单编号">{{ curRow.sn }}</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="分派人员">故障类型一</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="维修班组">维修班组一</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="维修负责人">李斯</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="工单名称">{{ curRow.faultName }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="工单编号">{{ curRow.id }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="分派人员">{{ curRow.assignName }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="分派时间">{{ curRow.assignTime }}</el-descriptions-item>
             </el-descriptions>
             <SubTitle title="处理情况" style="margin: 10px 0; " />
             <el-descriptions class="detail-descriptions" :column="2" border>
-              <el-descriptions-item label-align="center" label="故障原因">电力故障</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="处理方式">现场维修</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="维修人员">刘晨</el-descriptions-item>
-              <el-descriptions-item label-align="center" label="维修时间">2024-12-21</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="故障原因">{{ curRow.repairInfo.reason
+                }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="处理方式">
+                <dict-tag :value="curRow.repairInfo.faultSolution" :options="fault_solution" />
+              </el-descriptions-item>
+              <el-descriptions-item label-align="center" label="维修人员">{{ curRow.repartName }}</el-descriptions-item>
+              <el-descriptions-item label-align="center" label="维修时间">{{curRow.completeTime}}</el-descriptions-item>
             </el-descriptions>
           </el-tab-pane>
           <el-tab-pane label="处理进度" name="3">
             <el-table :data="curRow.dealProgress" max-height="300">
-              <el-table-column label="节点名称" align="center" prop="name">
+              <el-table-column label="节点名称" align="center" prop="nodeName">
               </el-table-column>
-              <el-table-column label="耗时(分钟)" align="center" prop="time">
+              <el-table-column label="耗时(分钟)" align="center" prop="costTime">
               </el-table-column>
-              <el-table-column label="操作人" align="center"  prop="person">
+              <el-table-column label="操作人" align="center" prop="createName">
               </el-table-column>
-              <el-table-column label="操作时间" align="center" show-overflow-tooltip prop="date">
+              <el-table-column label="操作时间" align="center" show-overflow-tooltip prop="createTime">
               </el-table-column>
               <el-table-column label="状态" align="center" show-overflow-tooltip prop="status">
               </el-table-column>
@@ -116,187 +131,45 @@
 </template>
 
 <script setup name="Record" lang="ts">
-import { deepClone } from '@/utils';
+import { getWorkTaskList, getWorkTaskInfo ,getOrderProgress} from '@/api/deviceMaintain/index';
+import { listUser } from '@/api/system/user/index'
+import { listProductorEngineers } from '@/api/supplierManage/index'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
-const buttonLoading = ref(false);
 const loading = ref(true);
 const showSearch = ref(true);
-const ids = ref<Array<string | number>>([]);
-const single = ref(true);
-const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
-const addFormRef = ref<ElFormInstance>();
-const dialog = reactive<DialogOption>({
-  visible: false,
-  title: ''
-});
 const detailDrawer = ref(false);
 const detailTab = ref('1');
-const curRow = ref({} as any);
-const initFormData = {
-  id: undefined,
-  name: undefined,
-  startTime: undefined,
-  endTime: undefined,
-  inspectionType: undefined,
-  inspectionCycle: 1,
-  status: 0,
-  inspectionRange: undefined,
-  inspectionPersonId: undefined,
-  inspectionItem: [{
-    deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
-    items: [],
-    deviceOptions: [],
-  }],
-  remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
-  ext2: undefined
-};
+const curRow = ref({ repairInfo: {} } as any);
+const initFormData = {} as any;
 const formData = reactive({
   form: { ...initFormData },
   queryParams: {
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    sn: undefined,
+    faultId: undefined,
+    dealStatus: '1',
     params: {}
   }
 });
 const { queryParams, form } = toRefs(formData);
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
+const { fault_solution } = toRefs<any>(proxy?.useDict('fault_solution'));
+const userOptions = ref([])
+const engineersOptions = ref([])
 /** 查询列表 */
 const getList = async () => {
   loading.value = true;
-  // const res = await listInspectionTask(queryParams.value);
-  // tableList.value = res.rows.map((item) => ({
-  //   ...item,
-  //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
-  // }));
-  // total.value = res.total;
-  tableList.value = [
-    {
-      name: '设备一报修',
-      sn: 1002301,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备一',
-      deviceNo: '21244',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      completeDate: '2024-12-22'
-    },
-    {
-      name: '设备二报修',
-      sn: 1002302,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备二',
-      deviceNo: '21242',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      completeDate: '2024-12-22'
-    },
-    {
-      name: '设备三报修',
-      sn: 1002303,
-      creator: '王乐',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备三',
-      deviceNo: '21243',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      completeDate: '2024-12-22'
-    },
-    {
-      name: '设备四报修',
-      sn: 1002304,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备四',
-      deviceNo: '21244',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-    {
-      name: '设备五报修',
-      sn: 1002305,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备五',
-      deviceNo: '21242',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '过期未执行'
-    },
-    {
-      name: '设备六报修',
-      sn: 1002306,
-      creator: '王成',
-      creatorDept: '生产一部',
-      faultCreateTime: '2024-12-19 12:05:00',
-      createTime: '2024-12-19 12:13:02',
-      faultLevel: '紧急',
-      isStop: '是',
-      deviceName: '设备六',
-      deviceNo: '21243',
-      repairPerson: '刘晨',
-      repairDate: '2024-12-21',
-      assignPerson: '王武',
-      assignDate: '2024-12-19',
-      status: '正常'
-    },
-
-  ]
+  const res = await getWorkTaskList(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
-/** 取消按钮 */
-const cancel = () => {
-  reset();
-  dialog.visible = false;
-};
 
-/** 表单重置 */
-const reset = () => {
-  form.value = { ...deepClone(initFormData) };
-  addFormRef.value?.resetFields();
-};
 
 /** 搜索按钮操作 */
 const handleQuery = () => {
@@ -310,50 +183,40 @@ const resetQuery = () => {
   handleQuery();
 };
 
-/** 多选框选中数据 */
-const handleSelectionChange = (selection) => {
-  ids.value = selection.map((item) => item.id);
-  single.value = selection.length != 1;
-  multiple.value = !selection.length;
-};
 
 const handleDetail = async (row) => {
   detailDrawer.value = true;
   detailTab.value = '1';
   Object.assign(curRow.value, row)
-  curRow.value.dealProgress = [
-    {
-    name:'故障提报',
-    time:'20',
-    person:'王成',
-    date:'2024-12-19 13:30',
-    status:'已完成',
-    },
-    {
-    name:'维修派工',
-    time:'5',
-    person:'李斯',
-    date:'2024-12-19 13:40',
-    status:'已完成',
-    },
-    {
-    name:'维修接单',
-    time:'--',
-    person:'--',
-    date:'--',
-    status:'未完成',
-    },
-    {
-    name:'维修完成',
-    time:'--',
-    person:'--',
-    date:'--',
-    status:'未完成',
-    },
-  ]
+  getWorkTaskInfo(row.id).then(({ code, data }) => {
+    if (code === 200) {
+      curRow.value.repairInfo = data
+    }
+  })
+  getOrderProgress(curRow.value.faultSn).then(({ code, data }) => {
+    if (code === 200) {
+      curRow.value.dealProgress = data
+    }
+  })
 };
+const getUserList = () => {
+  listUser({ status: '0', pageNum: 1, pageSize: 10000 }).then(({ code, rows }) => {
+    if (code === 200) {
+      userOptions.value = rows
+    }
+  })
+}
+const getEngineersList = () => {
+  listProductorEngineers({}).then(({ code, rows }) => {
+    if (code === 200) {
+      engineersOptions.value = rows
+    }
+  })
+}
 onMounted(() => {
   getList();
+  getUserList();
+  getEngineersList();
 });
 </script>
 <style lang="scss" scoped>

+ 66 - 28
src/views/deviceManage/archives/index.vue

@@ -210,7 +210,7 @@
       </el-descriptions>
       <img class="qrImg" src="@/assets/images/qrcode.png" alt="" />
     </el-dialog>
-    <el-drawer v-model="detailDrawer" class="customDrawer" size="70%">
+    <el-drawer v-model="detailDrawer" class="customDrawer" size="80%">
       <template #header>
         <div class="drawer-title">
           <div class="title-name">设备详情</div>
@@ -273,7 +273,7 @@
               </el-collapse-item>
             </el-collapse>
           </el-tab-pane>
-          <el-tab-pane label="生命历程" name="2">
+          <!-- <el-tab-pane label="生命历程" name="2">
             <el-timeline style="max-width: 800px">
               <el-timeline-item center timestamp="" placement="top">
                 <el-card>
@@ -296,7 +296,7 @@
                 </el-card>
               </el-timeline-item>
             </el-timeline>
-          </el-tab-pane>
+          </el-tab-pane> -->
           <el-tab-pane label="物模型" name="3">
             <el-tabs v-model="detailModel" type="card">
               <el-tab-pane label="属性" name="1">
@@ -325,33 +325,59 @@
               </el-tab-pane>
             </el-tabs>
           </el-tab-pane>
-          <el-tab-pane label="运行状态" name="4"></el-tab-pane>
+          <!-- <el-tab-pane label="运行状态" name="4"></el-tab-pane> -->
           <el-tab-pane label="维修记录" name="5">
-            <el-table :data="repairData" >
-                  <el-table-column label="报修工单" align="center" prop="name" />
-                  <el-table-column label="报修人" align="center" prop="type" />
-                  <el-table-column label="报修部门" align="center" prop="code" />
-                  <el-table-column label="故障时间" align="center" prop="outerCode" />
-                  <el-table-column label="故障等级" align="center" prop="remark" />
-                  <el-table-column label="是否停机" align="center" prop="remark" />
-                  <el-table-column label="维修人员" align="center" prop="remark" />
-                  <el-table-column label="工单完工时间" align="center" prop="remark" />
-                  <el-table-column label="维修备注说明" align="center" prop="remark" />
+            <el-table :data="curRow.repairData" >
+                  <el-table-column label="报修工单" align="center" show-overflow-tooltip prop="faultName" />
+                  <el-table-column label="报修人" align="center" prop="createFaultName" />
+                  <el-table-column label="报修部门" align="center" prop="deptName" />
+                  <el-table-column label="故障时间" align="center" show-overflow-tooltip prop="faultTime" />
+                  <el-table-column label="故障等级" align="center" prop="faultLevel" >
+                    <template #default="{row}">
+                      <dict-tag :value="row.faultLevel" :options="fault_level" />
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="是否停机" align="center" prop="isstop" >
+                    <template #default="{row}">
+                      <el-tag v-if="row.isstop == 1" type="danger">是</el-tag>
+                      <el-tag v-else type="success">否</el-tag>
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="维修人员" align="center" prop="repartName" />
+                  <el-table-column label="工单完工时间" align="center"  show-overflow-tooltip prop="completeTime" >
+                    <template #default="{row}">
+                      {{row.completeTime||'--'}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="维修备注说明" align="center" show-overflow-tooltip prop="repartRemark" >
+                    <template #default="{row}">
+                      {{row.repartRemark||'--'}}
+                    </template>
+                  </el-table-column>
                 </el-table>
           </el-tab-pane>
           <el-tab-pane label="巡检记录" name="6">
-            <el-table :data="recordData" >
-                  <el-table-column label="工单号" align="center" prop="name" />
-                  <el-table-column label="计划名称" align="center" prop="type" />
-                  <el-table-column label="计划编号" align="center" prop="code" />
-                  <el-table-column label="巡检周期(天)" align="center" prop="outerCode" />
-                  <el-table-column label="巡检项" align="center" prop="remark" />
-                  <el-table-column label="计划巡检日期" align="center" prop="remark" />
-                  <el-table-column label="巡检完成日期" align="center" prop="remark" />
-                  <el-table-column label="执行人" align="center" prop="remark" />
+            <el-table :data="curRow.inspectionData" >
+                  <el-table-column label="工单号" align="center" show-overflow-tooltip prop="orderId" />
+                  <el-table-column label="计划名称" align="center" prop="planName" />
+                  <el-table-column label="计划编号" align="center" show-overflow-tooltip prop="planSn" />
+                  <el-table-column label="巡检周期(天)" align="center" prop="inspectionCycle" />
+                  <el-table-column label="巡检项" align="center" prop="inspectionName" />
+                  <el-table-column label="巡检开始日期" align="center" prop="inspectionStartDate" />
+                  <el-table-column label="巡检完成日期" align="center"  >
+                    <template #default="{row}">
+                      {{row.inspectionEndDate||'--'}}
+                    </template>
+                  </el-table-column>
+                  <el-table-column label="执行人" align="center" prop="inspectionPersonName" />
+                  <el-table-column label="巡检结果" align="center"  >
+                    <template #default="{row}">
+                      {{row.inspectionResult||'--'}}
+                    </template>
+                  </el-table-column>
                 </el-table>
           </el-tab-pane>
-          <el-tab-pane label="附件" name="7"></el-tab-pane>
+          <!-- <el-tab-pane label="附件" name="7"></el-tab-pane> -->
         </el-tabs>
       </div>
     </el-drawer>
@@ -362,6 +388,8 @@
 import { listDevice, getDevice, delDevice, addDevice, updateDevice } from '@/api/deviceManage/device';
 import { listDeviceType, getDeviceType, getDeviceTypeDetail, getDeviceTypeDetailList, getModels } from '@/api/deviceManage/deviceType';
 import { getProductor } from '@/api/supplierManage/index';
+import { getWorkTaskList} from '@/api/deviceMaintain/index';
+import { getInspectionListByDeviceId} from '@/api/deviceCheck/index';
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const deviceList = ref([]);
@@ -433,12 +461,11 @@ let ifEdit = computed(() => {
 });
 const drawer = ref(false);
 const detailDrawer = ref(false);
-const curRow = ref<any>({ ext1: {} })
+const curRow = ref<any>({ ext1: {},repairData:[],inspectionData:[] });
 const detailTab = ref('1')
 const detailCollapse = ref(['1', '2'])
 const detailModel = ref('1')
-const repairData = ref([]);
-const recordData = ref([]);
+const { fault_level } = toRefs<any>(proxy?.useDict('fault_level'));
 /** 查询设备类型信息列表 */
 const getList = async () => {
   loading.value = true;
@@ -698,7 +725,18 @@ const showDetail = async (row) => {
       }
     })
   })
-  initPositionMap()
+  initPositionMap();
+  getWorkTaskList({ deviceId: row.id }).then(({ code,rows}) => {
+    if (code===200) {
+      curRow.value.repairData = rows
+    }
+  })
+  getInspectionListByDeviceId({ deviceId: row.id }).then(({ code,data}) => {
+    if (code===200) {
+      curRow.value.inspectionData = data
+    }
+  })
+
 }
 onMounted(() => {
   getList();