Browse Source

机电运维页面提交

luogang 7 months ago
parent
commit
d27f7e6398

+ 118 - 14
src/views/deviceMaintain/faultRepair/index.vue

@@ -53,11 +53,11 @@
         <el-table-column label="状态" align="center" show-overflow-tooltip prop="status" width="150" />
         <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="handleUpdate(scope.row)">详情</el-button>
+            <el-button size="small" link type="primary" @click="handleDetail(scope.row)">详情</el-button>
             <template v-if="scope.row.status === '待派工'">
               <el-button size="small" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
-              <el-button size="small" link type="primary" @click="handleDelete(scope.row)">内部派工</el-button>
-              <el-button size="small" link type="primary" @click="handleDelete(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>
             </template>
           </template>
@@ -68,7 +68,7 @@
     </el-card>
     <!-- 添加或修改对话框 -->
     <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
-      <el-form ref="addFormRef" :model="form" label-width="110px">
+      <el-form ref="addFormRef" :model="form" label-width="110px" :disabled="detailDisabled">
         <el-row :gutter="20">
           <el-col :span="12">
             <el-form-item label="报修主题" prop="name" :rules="[{ required: true, message: '报修主题不能为空', trigger: 'blur' }]">
@@ -81,17 +81,20 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障设备" prop="deviceName" :rules="[{ required: true, message: '故障设备不能为空', trigger: 'blur' }]">
+            <el-form-item label="故障设备" prop="deviceName"
+              :rules="[{ required: true, message: '故障设备不能为空', trigger: 'blur' }]">
               <el-input v-model="form.deviceName" placeholder="请输入故障设备" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障等级" prop="faultLevel" :rules="[{ required: true, message: '故障等级不能为空', trigger: 'blur' }]">
+            <el-form-item label="故障等级" prop="faultLevel"
+              :rules="[{ required: true, message: '故障等级不能为空', trigger: 'blur' }]">
               <el-input v-model="form.faultLevel" placeholder="请输入故障等级" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="故障类型" prop="faultType" :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
+            <el-form-item label="故障类型" prop="faultType"
+              :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
               <el-input v-model="form.faultType" placeholder="请输入故障类型" />
             </el-form-item>
           </el-col>
@@ -102,9 +105,10 @@
             </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-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>
           </el-col>
@@ -122,11 +126,62 @@
         </div>
       </template>
     </el-dialog>
+    <el-dialog v-model="assignDialog.visible" :title="assignDialog.title" width="750px" append-to-body>
+      <el-form ref="assignFormRef" :model="assignForm" label-width="120px">
+        <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>
+        </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"
+              :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>
+            </el-form-item>
+          </el-col>
+          <el-col v-else :span="12">
+            <el-form-item label="委外售后工程师" prop="headerId"
+              :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>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="要求处理时间" prop="dealDate"
+              :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>
+            </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 @click="assignCancel"> 取 消 </el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup name="FaultRepair" lang="ts">
 // import { getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
+import { listUser } from '@/api/system/user/index'
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -139,10 +194,18 @@ const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
+const assignFormRef = ref<ElFormInstance>();
+const assignForm = ref({} as any)
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
 });
+const assignDialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+const detailDisabled = ref(false);
+const userOptions = ref([])
 const initFormData = {
   id: undefined,
   sn: undefined,
@@ -153,7 +216,7 @@ const initFormData = {
   isStop: undefined,
   faultDate: undefined,
   remark: undefined,
-  ext1:undefined,
+  ext1: undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -229,7 +292,10 @@ const cancel = () => {
   reset();
   dialog.visible = false;
 };
-
+const assignCancel = () => {
+  assignFormRef.value?.resetFields();
+  assignDialog.visible = false;
+};
 /** 表单重置 */
 const reset = () => {
   form.value = { ...deepClone(initFormData) };
@@ -262,12 +328,25 @@ const handleAdd = () => {
 };
 /** 修改按钮操作 */
 const handleUpdate = (row) => {
+  detailDisabled.value=false
   reset();
   Object.assign(form.value, row)
-  dialog.visible=true
+  dialog.visible = true
   dialog.title = '修改故障报修';
 };
+const handleDetail = (row) => {
+  reset();
+  Object.assign(form.value, row)
+  dialog.visible = true
+  dialog.title = '故障报修详情';
+  detailDisabled.value=true;
+};
 
+const handleAssign = (row, name) => {
+  assignDialog.visible = true;
+  assignDialog.title = name;
+  Object.assign(assignForm.value,row)
+}
 /** 提交按钮 */
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
@@ -278,13 +357,21 @@ const submitForm = () => {
 /** 删除按钮操作 */
 const handleDelete = async (row) => {
   // const _ids = row?.id || ids.value;
-  // await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
+  await proxy?.$modal.confirm('是否确认作废?').finally(() => (loading.value = false));
   // await delInspectionTask(_ids);
   // proxy?.$modal.msgSuccess('删除成功');
   // await getList();
 };
+const getUserList = () => {
+  listUser({ status: '0', pageSize: 10000, pageNum: 1 }).then(({ code, rows }) => {
+    if (code === 200) {
+      userOptions.value = rows
+    }
+  })
+}
 onMounted(() => {
   getList();
+  getUserList()
 });
 </script>
 <style lang="scss" scoped>
@@ -298,4 +385,21 @@ onMounted(() => {
     cursor: pointer;
   }
 }
+
+.drawer-title {
+  :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;
+  }
+
+  .title-name {
+    color: #000;
+  }
+}
 </style>

+ 64 - 126
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="name">
-              <el-input v-model="queryParams.id" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="sn">
+              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -23,7 +23,7 @@
     <el-card shadow="never">
       <template #header>
         <el-row :gutter="10" class="mb8">
-          <el-col :span="1.5">
+          <!-- <el-col :span="1.5">
             <el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
           </el-col>
           <el-col :span="1.5">
@@ -33,18 +33,18 @@
           <el-col :span="1.5">
             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete"> 删除
             </el-button>
-          </el-col>
+          </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="id" width="150" />
+        <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="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-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
@@ -56,7 +56,7 @@
         <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="status" 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="handleDelete(scope.row)">处理</el-button>
+            <el-button size="small" link type="primary" @click="handleDeal(scope.row)">处理</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -64,70 +64,36 @@
         :total="total" @pagination="getList" />
     </el-card>
     <!-- 添加或修改对话框 -->
-    <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
-      <el-form ref="addFormRef" :model="form" label-width="110px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.name" placeholder="请输入计划名称" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划开始时间" prop="startTime"
-              :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择开始时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划结束时间" prop="endTime"
-              :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择结束时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检类型" prop="inspectionType"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
-                <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检周期(天)" prop="inspectionCycle"
-              :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
-              <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检范围" prop="inspectionRange"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <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-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检员" prop="inspectionPersonId"
-              :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
-              <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
-                placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="750px" append-to-body>
+      <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.deviceName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修时间">{{ form.faultCreateTime }}</el-descriptions-item>
+          </el-descriptions>
+        </div>
+        <el-row style="margin-top: 20px;">
+          <el-col :span="12">
+            <el-form-item label="故障原因" prop="faultReason"
+              :rules="[{ required: true, message: '故障原因不能为空', trigger: 'blur' }]">
+              <el-input v-model="form.faultReason" placeholder="请输入" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="联系电话" prop="ext1.phone">
-              <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
+          <el-col :span="12">
+            <el-form-item label="处理方式" prop="handlerMethod"
+              :rules="[{ required: true, message: '处理方式不能为空', trigger: 'change' }]">
+              <el-input v-model="form.handlerMethod" placeholder="请输入" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="备注" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入备注" />
+          <el-col :span="24">
+            <el-form-item label="维修说明" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入" />
             </el-form-item>
           </el-col>
+
         </el-row>
       </el-form>
       <template #footer>
@@ -140,15 +106,8 @@
   </div>
 </template>
 
-<script setup name="PatrolPlan" lang="ts">
+<script setup name="InnerWorkorder" 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';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -167,25 +126,15 @@ const dialog = reactive<DialogOption>({
 });
 const initFormData = {
   id: undefined,
+  sn: undefined,
   name: undefined,
-  startTime: undefined,
-  endTime: undefined,
-  inspectionType: undefined,
-  inspectionCycle: 1,
-  status: 0,
-  inspectionRange: undefined,
-  inspectionPersonId: undefined,
-  inspectionItem: [{
-    deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
-    items: [],
-    deviceOptions: [],
-  }],
+  creatorDept: undefined,
+  deviceName: undefined,
+  faultCreateTime: undefined,
+  faultReason: undefined,
+  handlerMethod: undefined,
   remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
+  ext1: undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -194,18 +143,11 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    status: undefined,
+    sn: undefined,
     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 getList = async () => {
@@ -219,7 +161,7 @@ const getList = async () => {
   tableList.value = [
     {
       name: '设备一报修',
-      id: 1002301,
+      sn: 1002301,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -236,7 +178,7 @@ const getList = async () => {
     },
     {
       name: '设备二报修',
-      id: 1002302,
+      sn: 1002302,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -253,7 +195,7 @@ const getList = async () => {
     },
     {
       name: '设备三报修',
-      id: 1002303,
+      sn: 1002303,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -303,24 +245,6 @@ const handleSelectionChange = (selection) => {
   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 = () => {
@@ -329,13 +253,10 @@ const submitForm = () => {
     }
   });
 };
-/** 删除按钮操作 */
-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 handleDeal = async (row) => {
+  Object.assign(form.value, row)
+  dialog.visible = true;
+  dialog.title = '内部维修工单处理';
 };
 onMounted(() => {
   getList();
@@ -352,4 +273,21 @@ onMounted(() => {
     cursor: pointer;
   }
 }
+
+.drawer-title {
+  :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;
+  }
+
+  .title-name {
+    color: #000;
+  }
+}
 </style>

+ 70 - 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="name">
-              <el-input v-model="queryParams.id" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="sn">
+              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -23,28 +23,17 @@
     <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="id" width="150" />
+        <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="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-column label="设备名称" align="center" show-overflow-tooltip prop="deviceName" width="150" />
@@ -56,7 +45,7 @@
         <el-table-column label="工单状态" align="center" show-overflow-tooltip prop="status" 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="handleDelete(scope.row)">处理</el-button>
+            <el-button size="small" link type="primary" @click="handleDeal(scope.row)">处理</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -64,70 +53,36 @@
         :total="total" @pagination="getList" />
     </el-card>
     <!-- 添加或修改对话框 -->
-    <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
-      <el-form ref="addFormRef" :model="form" label-width="110px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.name" placeholder="请输入计划名称" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划开始时间" prop="startTime"
-              :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择开始时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划结束时间" prop="endTime"
-              :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择结束时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检类型" prop="inspectionType"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
-                <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检周期(天)" prop="inspectionCycle"
-              :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
-              <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检范围" prop="inspectionRange"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <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-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检员" prop="inspectionPersonId"
-              :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
-              <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
-                placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="750px" append-to-body>
+      <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.deviceName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="报修时间">{{ form.faultCreateTime }}</el-descriptions-item>
+          </el-descriptions>
+        </div>
+        <el-row style="margin-top: 20px;">
+          <el-col :span="12">
+            <el-form-item label="故障原因" prop="faultReason"
+              :rules="[{ required: true, message: '故障原因不能为空', trigger: 'blur' }]">
+              <el-input v-model="form.faultReason" placeholder="请输入" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="联系电话" prop="ext1.phone">
-              <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
+          <el-col :span="12">
+            <el-form-item label="处理方式" prop="handlerMethod"
+              :rules="[{ required: true, message: '处理方式不能为空', trigger: 'change' }]">
+              <el-input v-model="form.handlerMethod" placeholder="请输入" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="备注" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入备注" />
+          <el-col :span="24">
+            <el-form-item label="维修说明" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入" />
             </el-form-item>
           </el-col>
+
         </el-row>
       </el-form>
       <template #footer>
@@ -140,15 +95,8 @@
   </div>
 </template>
 
-<script setup name="PatrolPlan" lang="ts">
+<script setup name="OuterWorkorder" 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';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -167,25 +115,15 @@ const dialog = reactive<DialogOption>({
 });
 const initFormData = {
   id: undefined,
+  sn: undefined,
   name: undefined,
-  startTime: undefined,
-  endTime: undefined,
-  inspectionType: undefined,
-  inspectionCycle: 1,
-  status: 0,
-  inspectionRange: undefined,
-  inspectionPersonId: undefined,
-  inspectionItem: [{
-    deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
-    items: [],
-    deviceOptions: [],
-  }],
+  creatorDept: undefined,
+  deviceName: undefined,
+  faultCreateTime: undefined,
+  faultReason: undefined,
+  handlerMethod: undefined,
   remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
+  ext1: undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -194,19 +132,11 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    status: undefined,
+    sn: undefined,
     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 getList = async () => {
   loading.value = true;
@@ -218,15 +148,15 @@ const getList = async () => {
   // total.value = res.total;
   tableList.value = [
     {
-      name: '设备报修',
-      id: 1002301,
-      creator: '王',
+      name: '设备报修',
+      sn: 1002304,
+      creator: '王',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
       createTime: '2024-12-19 12:13:02',
       faultLevel: '紧急',
       isStop: '是',
-      deviceName: '设备',
+      deviceName: '设备',
       deviceNo: '21244',
       repairPerson: '刘晨',
       repairDate: '2024-12-21',
@@ -235,15 +165,15 @@ const getList = async () => {
       status: '正常'
     },
     {
-      name: '设备报修',
-      id: 1002302,
-      creator: '王',
+      name: '设备报修',
+      sn: 1002305,
+      creator: '王',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
       createTime: '2024-12-19 12:13:02',
       faultLevel: '紧急',
       isStop: '是',
-      deviceName: '设备',
+      deviceName: '设备',
       deviceNo: '21242',
       repairPerson: '刘晨',
       repairDate: '2024-12-21',
@@ -252,15 +182,15 @@ const getList = async () => {
       status: '过期未执行'
     },
     {
-      name: '设备报修',
-      id: 1002303,
-      creator: '王',
+      name: '设备报修',
+      sn: 1002306,
+      creator: '王',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
       createTime: '2024-12-19 12:13:02',
       faultLevel: '紧急',
       isStop: '是',
-      deviceName: '设备',
+      deviceName: '设备',
       deviceNo: '21243',
       repairPerson: '刘晨',
       repairDate: '2024-12-21',
@@ -268,7 +198,6 @@ const getList = async () => {
       assignDate: '2024-12-19',
       status: '正常'
     },
-
   ]
   loading.value = false;
 };
@@ -329,13 +258,10 @@ const submitForm = () => {
     }
   });
 };
-/** 删除按钮操作 */
-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 handleDeal = async (row) => {
+  Object.assign(form.value, row)
+  dialog.visible = true;
+  dialog.title = '委外维修工单处理';
 };
 onMounted(() => {
   getList();
@@ -352,4 +278,20 @@ onMounted(() => {
     cursor: pointer;
   }
 }
+.drawer-title {
+  :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;
+  }
+
+  .title-name {
+    color: #000;
+  }
+}
 </style>

+ 206 - 141
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="name">
-              <el-input v-model="queryParams.id" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="报修单号" prop="sn">
+              <el-input v-model="queryParams.sn" placeholder="请输入报修单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -23,24 +23,13 @@
     <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="id" width="150" />
+        <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" />
@@ -56,99 +45,77 @@
         <el-table-column label="工单完工时间" align="center" show-overflow-tooltip prop="completeDate" 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="handleDelete(scope.row)">详情</el-button>
+            <el-button size="small" link type="primary" @click="handleDetail(scope.row)">详情</el-button>
           </template>
         </el-table-column>
       </el-table>
       <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize"
         :total="total" @pagination="getList" />
     </el-card>
-    <!-- 添加或修改对话框 -->
-    <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
-      <el-form ref="addFormRef" :model="form" label-width="110px">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.name" placeholder="请输入计划名称" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划开始时间" prop="startTime"
-              :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择开始时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划结束时间" prop="endTime"
-              :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择结束时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检类型" prop="inspectionType"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
-                <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检周期(天)" prop="inspectionCycle"
-              :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
-              <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检范围" prop="inspectionRange"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <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-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检员" prop="inspectionPersonId"
-              :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
-              <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
-                placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="联系电话" prop="ext1.phone">
-              <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="备注" prop="remark">
-              <el-input v-model="form.remark" 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 @click="cancel"> 取 消 </el-button>
+    <el-drawer v-model="detailDrawer" class="customDrawer" size="60%">
+      <template #header>
+        <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.deviceName }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="设备编号">{{ curRow.deviceNo }}</el-descriptions-item>
+          </el-descriptions>
         </div>
       </template>
-    </el-dialog>
+      <div>
+        <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>
+              <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>
+          </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>
+            <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>
+          </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>
+              <el-table-column label="耗时(分钟)" align="center" prop="time">
+              </el-table-column>
+              <el-table-column label="操作人" align="center"  prop="person">
+              </el-table-column>
+              <el-table-column label="操作时间" align="center" show-overflow-tooltip prop="date">
+              </el-table-column>
+              <el-table-column label="状态" align="center" show-overflow-tooltip prop="status">
+              </el-table-column>
+            </el-table>
+          </el-tab-pane>
+        </el-tabs>
+      </div>
+    </el-drawer>
   </div>
 </template>
 
-<script setup name="PatrolPlan" 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';
+<script setup name="Record" lang="ts">
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -165,6 +132,9 @@ 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,
@@ -194,19 +164,11 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    status: undefined,
+    sn: undefined,
     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 getList = async () => {
   loading.value = true;
@@ -219,7 +181,7 @@ const getList = async () => {
   tableList.value = [
     {
       name: '设备一报修',
-      id: 1002301,
+      sn: 1002301,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -236,7 +198,7 @@ const getList = async () => {
     },
     {
       name: '设备二报修',
-      id: 1002302,
+      sn: 1002302,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -253,7 +215,7 @@ const getList = async () => {
     },
     {
       name: '设备三报修',
-      id: 1002303,
+      sn: 1002303,
       creator: '王乐',
       creatorDept: '生产一部',
       faultCreateTime: '2024-12-19 12:05:00',
@@ -266,7 +228,58 @@ const getList = async () => {
       repairDate: '2024-12-21',
       assignPerson: '王武',
       assignDate: '2024-12-19',
-       completeDate: '2024-12-22'
+      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: '正常'
     },
 
   ]
@@ -303,39 +316,41 @@ const handleSelectionChange = (selection) => {
   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) {
-    }
-  });
-};
-/** 删除按钮操作 */
-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 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:'未完成',
+    },
+  ]
 };
 onMounted(() => {
   getList();
@@ -352,4 +367,54 @@ onMounted(() => {
     cursor: pointer;
   }
 }
+
+.drawer-title {
+  :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;
+  }
+
+  .title-name {
+    color: #000;
+  }
+}
+</style>
+<style lang="scss">
+.customDrawer {
+  .el-drawer__header {
+    align-items: flex-start !important;
+    margin-bottom: 10px;
+
+    .drawer-title {
+      .el-descriptions__body {
+        margin-top: 10px;
+        background-color: #F4F5F7;
+        border-radius: 2px;
+        padding: 10px 10px 0 10px;
+      }
+
+      .el-descriptions__label {
+        padding-bottom: 5px;
+      }
+
+      .title-name {
+        color: #000;
+      }
+    }
+  }
+
+  .el-drawer__body {
+    padding-top: 0;
+
+    .el-collapse-item__content {
+      padding-bottom: 8px;
+    }
+  }
+}
 </style>

+ 135 - 98
src/views/sparesManage/inStore/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="id">
-              <el-input v-model="queryParams.id" placeholder="请输入入库单号" clearable @keyup.enter="handleQuery" />
+            <el-form-item label="入库单号" prop="sn">
+              <el-input v-model="queryParams.sn" placeholder="请输入入库单号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -40,7 +40,7 @@
 
       <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="id" width="150" />
+        <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="deviceCategory" width="150" />
         <el-table-column label="到货数量" align="center" show-overflow-tooltip prop="deviceNum" width="150" />
@@ -50,7 +50,7 @@
         <el-table-column label="入库说明" align="center" show-overflow-tooltip prop="remark" 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="handleDelete(scope.row)">修改</el-button>
+            <el-button size="small" link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
             <el-button size="small" link type="danger" @click="handleDelete(scope.row)">删除</el-button>
           </template>
         </el-table-column>
@@ -61,69 +61,103 @@
     <!-- 添加或修改对话框 -->
     <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
       <el-form ref="addFormRef" :model="form" label-width="110px">
+        <SubTitle title="基本信息" />
         <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="计划名称" prop="name" :rules="[{ required: true, message: '计划名称不能为空', trigger: 'blur' }]">
-              <el-input v-model="form.name" placeholder="请输入计划名称" />
+          <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="8">
-            <el-form-item label="计划开始时间" prop="startTime"
-              :rules="[{ required: true, message: '计划开始时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.startTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择开始时间" />
+          <el-col :span="12">
+            <el-form-item label="入库名称" prop="name" :rules="[{ required: true, message: '入库名称不能为空', trigger: 'blur' }]">
+              <el-input v-model="form.name" placeholder="请输入入库名称" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="计划结束时间" prop="endTime"
-              :rules="[{ required: true, message: '计划结束时间不能为空', trigger: 'change' }]">
-              <el-date-picker v-model="form.endTime" style="width: 100%;" value-format="YYYY-MM-DD hh:mm:ss"
-                type="datetime" placeholder="请选择结束时间" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检类型" prop="inspectionType"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
-                <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
-                  :value="dict.value"></el-option>
+
+          <el-col :span="12">
+            <el-form-item label="入库人" prop="storePerson"
+              :rules="[{ required: true, message: '入库人不能为空', trigger: 'change' }]">
+              <el-select v-model="form.storePerson" 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 :span="8">
-            <el-form-item label="巡检周期(天)" prop="inspectionCycle"
-              :rules="[{ required: true, message: '巡检周期不能为空', trigger: 'blur' }]">
-              <el-input-number v-model="form.inspectionCycle" :disabled="cycleDisabled" style="width:100%" :min="1" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检范围" prop="inspectionRange"
-              :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <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-col :span="12">
+            <el-form-item label="入库仓库" prop="storeName" :rules="[{ required: true, message: '入库仓库不能为空', trigger: 'change' }]">
+              <el-select v-model="form.storeName" clearable placeholder="请选择入库仓库" >
+                <el-option value="仓库一"></el-option>
+                <el-option value="仓库二"></el-option>
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="巡检员" prop="inspectionPersonId"
-              :rules="[{ required: true, message: '巡检员不能为空', trigger: 'change' }]">
-              <el-cascader v-model="form.inspectionPersonId" :props="{ emitPath: false }" :options="userOptions"
-                placeholder="请选择巡检员" clearable :show-all-levels="false" @change="setUserInfo" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="联系电话" prop="ext1.phone">
-              <el-input v-model="form.ext1.phone" disabled placeholder="选巡检员带出" />
+          <el-col :span="12">
+            <el-form-item label="入库时间" prop="storeDate"
+              :rules="[{ required: true, message: '入库时间不能为空', trigger: 'change' }]">
+              <el-date-picker v-model="form.storeDate" style="width: 100%;" value-format="YYYY-MM-DD" type="date"
+                placeholder="选择日期">
+              </el-date-picker>
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="备注" prop="remark">
-              <el-input v-model="form.remark" placeholder="请输入备注" />
+          <el-col :span="12">
+            <el-form-item label="到货入库说明" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入" />
             </el-form-item>
           </el-col>
         </el-row>
+        <SubTitle title="采购备品备件" style="margin-bottom: 10px;" />
+        <el-table :data="form.deviceInfo" max-height="300">
+          <el-table-column label="备品备件名称" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.deviceName" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="品牌" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.brand" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="型号" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.xh" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="供应商" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.productor" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="单位" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.unit" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="本次入库数量" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.deviceNum" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="入库库位" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.shelf" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="80">
+            <template #header>
+              <div class="operateBtn">
+                <span>操作</span>
+                <el-icon @click="addDeviceInfo">
+                  <CirclePlus />
+                </el-icon>
+              </div>
+            </template>
+            <template #default="scope">
+              <el-icon @click="delDeviceInfo(scope.$index)">
+                <Delete />
+              </el-icon>
+            </template>
+          </el-table-column>
+        </el-table>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -135,16 +169,9 @@
   </div>
 </template>
 
-<script setup name="PatrolPlan" 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';
+<script setup name="InStore" lang="ts">
 import { deepClone } from '@/utils';
+import { listUser } from '@/api/system/user/index'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
 const buttonLoading = ref(false);
@@ -162,25 +189,24 @@ const dialog = reactive<DialogOption>({
 });
 const initFormData = {
   id: undefined,
+  sn: undefined,
   name: undefined,
-  startTime: undefined,
-  endTime: undefined,
-  inspectionType: undefined,
-  inspectionCycle: 1,
-  status: 0,
-  inspectionRange: undefined,
-  inspectionPersonId: undefined,
-  inspectionItem: [{
-    deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
-    items: [],
-    deviceOptions: [],
-  }],
+  deviceCategory: undefined,
+  deviceNum: undefined,
+  storeName: undefined,
+  storePerson: undefined,
+  storeDate: undefined,
   remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
+  deviceInfo: [{
+    deviceName:'',
+    brand:'',
+    xh: '',
+    productor: '',
+    unit: '',
+    deviceNum: '',
+    shelf:''
+  }],
+  ext1: undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -193,14 +219,8 @@ const formData = reactive({
     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 getList = async () => {
@@ -214,7 +234,7 @@ const getList = async () => {
   tableList.value = [
     {
       name: '路由器备件补货一',
-      id: 2024121901,
+      sn: 2024121901,
       deviceCategory: '9',
       deviceNum: '120',
       storeName: '成品仓库一',
@@ -224,7 +244,7 @@ const getList = async () => {
     },
     {
       name: '路由器备件补货二',
-      id: 2024121902,
+      sn: 2024121902,
       deviceCategory: '6',
       deviceNum: '100',
       storeName: '半成品成品仓库一',
@@ -234,7 +254,7 @@ const getList = async () => {
     },
     {
       name: '路由器备件补货三',
-      id: 2024121903,
+      sn: 2024121903,
       deviceCategory: '10',
       deviceNum: '150',
       storeName: '成品仓库一',
@@ -279,20 +299,15 @@ const handleSelectionChange = (selection) => {
 /** 新增按钮操作 */
 const handleAdd = () => {
   reset();
-  // dialog.visible = true;
-  dialog.title = '新增故障类型';
+  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 = '修改故障类型';
+  Object.assign(form.value, row)
+  dialog.visible = true;
+  dialog.title = '修改到货入库';
 };
 
 /** 提交按钮 */
@@ -305,13 +320,35 @@ const submitForm = () => {
 /** 删除按钮操作 */
 const handleDelete = async (row) => {
   // const _ids = row?.id || ids.value;
-  // await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
+  await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
   // await delInspectionTask(_ids);
   // proxy?.$modal.msgSuccess('删除成功');
   // await getList();
 };
+const addDeviceInfo = () => {
+  form.value.deviceInfo.push({
+    deviceName:'',
+    brand:'',
+    xh: '',
+    productor: '',
+    unit: '',
+    deviceNum: '',
+    shelf:''
+  })
+}
+const delDeviceInfo = (index) => {
+  form.value.deviceInfo.splice(index,1)
+}
+const getUserList = () => {
+  listUser({ status: '0', pageSize: 10000, pageNum: 1 }).then(({ code, rows }) => {
+    if (code === 200) {
+      userOptions.value = rows
+    }
+  })
+}
 onMounted(() => {
   getList();
+  getUserList();
 });
 </script>
 <style lang="scss" scoped>

+ 1 - 1
src/views/sparesManage/realtimeStore/index.vue

@@ -83,7 +83,7 @@
           <el-col :span="8">
             <el-form-item label="巡检类型" prop="inspectionType"
               :rules="[{ required: true, message: '巡检类型不能为空', trigger: 'change' }]">
-              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" @change="inspectionTypeChange">
+              <el-select v-model="form.inspectionType" clearable placeholder="请选择巡检类型" >
                 <el-option v-for="dict in inspection_type" :key="dict.value" :label="dict.label"
                   :value="dict.value"></el-option>
               </el-select>