浏览代码

增加页面功能

luogang 7 月之前
父节点
当前提交
e1c6606d83

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

@@ -0,0 +1,59 @@
+import request from '@/utils/request';
+
+/**
+ * 查询故障类型列表
+ * @param query
+ * @returns {*}
+ */
+export const listFaultType = (query) => {
+    return request({
+        url: '/jdyw/faultType/list',
+        method: 'get',
+        params: query
+    });
+};
+/**
+ * 查询故障类型信息详细
+ * @param id
+ */
+export const getFaultType = (id) => {
+    return request({
+        url: '/jdyw/faultType/' + id,
+        method: 'get'
+    });
+};
+
+/**
+ * 新增故障类型信息
+ * @param data
+ */
+export const addFaultType = (data) => {
+    return request({
+        url: '/jdyw/faultType',
+        method: 'post',
+        data: data
+    });
+};
+
+/**
+ * 修改故障类型信息
+ * @param data
+ */
+export const updateFaultType = (data) => {
+    return request({
+        url: '/jdyw/faultType',
+        method: 'put',
+        data: data
+    });
+};
+
+/**
+ * 删除故障类型信息
+ * @param id
+ */
+export const delFaultType = (id: string | number | Array<string | number>) => {
+    return request({
+        url: '/jdyw/faultType/' + id,
+        method: 'delete'
+    });
+};

+ 58 - 0
src/api/sparesManage/index.ts

@@ -0,0 +1,58 @@
+import request from '@/utils/request';
+/**
+ * 查询仓库列表
+ * @param query
+ * @returns {*}
+ */
+export const listWarehouse = (query) => {
+    return request({
+        url: '/jdyw/warehouse/list',
+        method: 'get',
+        params: query
+    });
+};
+/**
+ * 查询仓库信息详细
+ * @param id
+ */
+export const getWarehouse = (id) => {
+    return request({
+        url: '/jdyw/warehouse/' + id,
+        method: 'get'
+    });
+};
+
+/**
+ * 新增仓库信息
+ * @param data
+ */
+export const addWarehouse = (data) => {
+    return request({
+        url: '/jdyw/warehouse',
+        method: 'post',
+        data: data
+    });
+};
+
+/**
+ * 修改仓库信息
+ * @param data
+ */
+export const updateWarehouse = (data) => {
+    return request({
+        url: '/jdyw/warehouse',
+        method: 'put',
+        data: data
+    });
+};
+
+/**
+ * 删除仓库信息
+ * @param id
+ */
+export const delWarehouse = (id: string | number | Array<string | number>) => {
+    return request({
+        url: '/jdyw/warehouse/' + id,
+        method: 'delete'
+    });
+};

+ 114 - 151
src/views/deviceCheck/patrolRecord/index.vue

@@ -49,146 +49,68 @@
         <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="140" fixed="right" class-name="small-padding fixed-width">
+        <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" >详情</el-button>
+            <el-button size="small" link type="primary" @click="showDetail(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>
-        <SubTitle title="巡检内容" />
-        <el-table :data="form.inspectionItem" max-height="300">
-          <el-table-column label="设备类型名称" align="center">
-            <template #default="scope">
-              <el-select v-model="scope.row.deviceTypeId" clearable placeholder="请选择设备类型名称"
-                @change="deviceTypeChange(scope.$index, $event)">
-                <el-option v-for="dict in dictGroup.deviceTypeOptions" :key="dict.id" :label="dict.name"
-                  :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
+
+    <el-drawer v-model="detailDrawer" title="巡检记录详情" class="customDrawer" size="80%">
+      <div>
+        <el-tabs v-model="detailTab">
+          <el-tab-pane label="基础信息" name="1">
+            <div>
+              <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="备注">{{ 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-column>
+          <el-table-column label="巡检项目名称" align="center" width="150" prop="projectName">
+          </el-table-column>
+          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detectionMethod">
           </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-option v-for="dict in scope.row.deviceOptions" :key="dict.id" :label="dict.sn" :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
+          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detectionStandard">
           </el-table-column>
-          <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"
-                  :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
+          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judgeStandard">
           </el-table-column>
-          <el-table-column label="操作" align="center" width="80">
-            <template #header>
-              <div class="operateBtn">
-                <span>操作</span>
-                <el-icon @click="addInspectionItem">
-                  <CirclePlus />
-                </el-icon>
-              </div>
-            </template>
-            <template #default="scope">
-              <el-icon @click="delInspectionItem(scope.$index)">
-                <Delete />
-              </el-icon>
-            </template>
+          <el-table-column label="标准上限" align="center" prop="judgeMaxValue">
+          </el-table-column>
+          <el-table-column label="标准下限" align="center" prop="judgeMinValue">
+          </el-table-column>
+          <el-table-column label="巡检结果" width="100" align="center" prop="detectionResult">
+          </el-table-column>
+          <el-table-column label="巡检备注说明" width="120" align="center" prop="detectionCondition">
+          </el-table-column>
+          <el-table-column label="巡检图片" align="center" prop="detectionImg">
           </el-table-column>
         </el-table>
-      </el-form>
-      <template #footer>
-        <div class="dialog-footer">
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm"> 确 定 </el-button>
-          <el-button @click="cancel"> 取 消 </el-button>
-        </div>
-      </template>
-    </el-dialog>
+          </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="PatrolRecord" lang="ts">
+import {  getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -238,15 +160,10 @@ const formData = reactive({
     params: {}
   }
 });
-const cycleDisabled = ref(false)
+const detailTab = ref('1')
+const detailDrawer = ref(false)
+const curRow = ref({} as any)
 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;
@@ -259,44 +176,44 @@ const getList = async () => {
   tableList.value = [{
     name: '日常保养',
     id: 1000240211,
-    type:'日常巡检',
-    checkRange:'按设备',
+    type: '日常巡检',
+    checkRange: '按设备',
     cycle: '10',
     checkDate: '2024-12-19',
-    completeDate:'2024-12-24',
+    completeDate: '2024-12-24',
     hasCheck: '10/50',
-    completeRate:'20%',
+    completeRate: '20%',
     checkPerson: '王思',
-    checkResult:'合格',
-    checkCondition:'-',
+    checkResult: '合格',
+    checkCondition: '-',
   },
   {
     name: '机器循环保养',
     id: 1000240212,
-    type:'日常巡检',
-    checkRange:'按设备',
+    type: '日常巡检',
+    checkRange: '按设备',
     cycle: '5',
     checkDate: '2024-12-20',
-    completeDate:'2024-12-24',
+    completeDate: '2024-12-24',
     hasCheck: '0/50',
-    completeRate:'0%',
+    completeRate: '0%',
     checkPerson: '王娟',
-    checkResult:'不合格',
-    checkCondition:'已恢复',
+    checkResult: '不合格',
+    checkCondition: '已恢复',
   },
   {
     name: '周期保养',
     id: 1000240213,
-    type:'周期巡检',
-    checkRange:'按项目',
+    type: '周期巡检',
+    checkRange: '按项目',
     cycle: '30',
     checkDate: '2024-12-22',
-    completeDate:'2024-12-24',
+    completeDate: '2024-12-24',
     hasCheck: '20/50',
-    completeRate:'40%',
+    completeRate: '40%',
     checkPerson: '李达',
-    checkResult:'不合格',
-    checkCondition:'处理中',
+    checkResult: '不合格',
+    checkCondition: '处理中',
   }
   ]
   loading.value = false;
@@ -350,6 +267,52 @@ const handleUpdate = (row) => {
   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: '',
+      }
+    ]
+}
 
 /** 提交按钮 */
 const submitForm = () => {

+ 178 - 156
src/views/deviceCheck/patrolTask/index.vue

@@ -39,19 +39,18 @@
         <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 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="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 width="150">
+          <template #default="scope">
+            <dict-tag :options="inspection_type" :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="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" >执行巡检</el-button>
-              <el-button size="small" link type="primary">故障报修</el-button>
+            <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>
           </template>
         </el-table-column>
       </el-table>
@@ -59,128 +58,120 @@
         :total="total" @pagination="getList" />
     </el-card>
     <!-- 添加或修改对话框 -->
-    <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="1100px" append-to-body>
       <el-form ref="addFormRef" :model="form" label-width="110px">
+        <div class="drawer-title">
+          <el-descriptions title="" direction="vertical" :column="5">
+            <el-descriptions-item align="center" label="计划名称">{{ form.name }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="计划编号">{{ form.id }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="巡检类型">
+              <dict-tag :options="inspection_type" :value="form.inspectionType" />
+            </el-descriptions-item>
+            <el-descriptions-item align="center" label="巡检周期(天)">{{ form.inspectionCycle }}</el-descriptions-item>
+            <el-descriptions-item align="center" label="巡检员">{{ form.ext1.inspectionPersonName }}</el-descriptions-item>
+          </el-descriptions>
+        </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>
+          <el-table-column label="设备编号" align="center" prop="deviceNo">
+          </el-table-column>
+          <el-table-column label="巡检项目名称" align="center" width="150" prop="projectName">
+          </el-table-column>
+          <el-table-column label="检验方法" align="center" show-overflow-tooltip prop="detectionMethod">
+          </el-table-column>
+          <el-table-column label="检验标准" align="center" show-overflow-tooltip prop="detectionStandard">
+          </el-table-column>
+          <el-table-column label="判断标准" align="center" show-overflow-tooltip prop="judgeStandard">
+          </el-table-column>
+          <el-table-column label="标准上限" align="center" prop="judgeMaxValue">
+          </el-table-column>
+          <el-table-column label="标准下限" align="center" prop="judgeMinValue">
+          </el-table-column>
+          <el-table-column label="巡检结果" width="100" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.detectionResult" 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>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm"> 确 定 </el-button>
+          <el-button @click="cancel"> 取 消 </el-button>
+        </div>
+      </template>
+    </el-dialog>
+    <el-dialog v-model="repairDialog.visible" :title="repairDialog.title" width="800px" append-to-body>
+      <el-form ref="repairFormRef" :model="repairForm" 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-col :span="12">
+            <el-form-item label="报修主题" prop="name" :rules="[{ required: true, message: '报修主题不能为空', trigger: 'blur' }]">
+              <el-input v-model="repairForm.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-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>
           </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-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>
           </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-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>
           </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-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>
           </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-col :span="12">
+            <el-form-item label="是否停机" prop="isStop">
+              <el-switch v-model="repairForm.isStop" active-color="#13ce66" inactive-color="#ff4949">
+              </el-switch>
             </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="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="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="repairForm.remark" placeholder="请输入故障描述" />
             </el-form-item>
           </el-col>
         </el-row>
-        <SubTitle title="巡检内容" />
-        <el-table :data="form.inspectionItem" max-height="300">
-          <el-table-column label="设备类型名称" align="center">
-            <template #default="scope">
-              <el-select v-model="scope.row.deviceTypeId" clearable placeholder="请选择设备类型名称"
-                @change="deviceTypeChange(scope.$index, $event)">
-                <el-option v-for="dict in dictGroup.deviceTypeOptions" :key="dict.id" :label="dict.name"
-                  :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
-          </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-option v-for="dict in scope.row.deviceOptions" :key="dict.id" :label="dict.sn" :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
-          </el-table-column>
-          <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"
-                  :value="dict.id">
-                </el-option>
-              </el-select>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" align="center" width="80">
-            <template #header>
-              <div class="operateBtn">
-                <span>操作</span>
-                <el-icon @click="addInspectionItem">
-                  <CirclePlus />
-                </el-icon>
-              </div>
-            </template>
-            <template #default="scope">
-              <el-icon @click="delInspectionItem(scope.$index)">
-                <Delete />
-              </el-icon>
-            </template>
-          </el-table-column>
-        </el-table>
       </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-button @click="repairCancel"> 取 消 </el-button>
         </div>
       </template>
     </el-dialog>
   </div>
 </template>
 
-<script setup name="PatrolPlan" lang="ts">
+<script setup name="PatrolTask" lang="ts">
 import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
 import {
   listDeviceType,
@@ -201,10 +192,17 @@ const multiple = ref(true);
 const total = ref(0);
 const queryFormRef = ref<ElFormInstance>();
 const addFormRef = ref<ElFormInstance>();
+const repairFormRef = ref<ElFormInstance>();
+
 const dialog = reactive<DialogOption>({
   visible: false,
   title: ''
 });
+const repairDialog = reactive<DialogOption>({
+  visible: false,
+  title: ''
+});
+const repairForm = ref({} as any)
 const initFormData = {
   id: undefined,
   name: undefined,
@@ -215,16 +213,9 @@ const initFormData = {
   status: 0,
   inspectionRange: undefined,
   inspectionPersonId: undefined,
-  inspectionItem: [{
-    deviceTypeId: undefined,
-    deviceTypeDetailIds: [],
-    items: [],
-    deviceOptions: [],
-  }],
+  inspectionItem: [],
   remark: undefined,
   ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
   },
   ext2: undefined
 };
@@ -250,46 +241,12 @@ const userOptions = 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: '日常保养',
-    id: 1000240111,
-    type:'日常巡检',
-    checkRange:'按设备',
-    cycle: '10',
-    checkDate: '2024-12-19',
-    hasCheck: '10/50',
-    completeRate:'20%',
-    checkPerson:'王思'
-  },
-  {
-    name: '机器循环保养',
-    id: 1000240112,
-    type:'日常巡检',
-    checkRange:'按设备',
-    cycle: '5',
-    checkDate: '2024-12-20',
-    hasCheck: '0/50',
-    completeRate:'0%',
-    checkPerson:'王娟'
-  },
-  {
-    name: '周期保养',
-    id: 1000240113,
-    type:'周期巡检',
-    checkRange:'按项目',
-    cycle: '30',
-    checkDate: '2024-12-22',
-    hasCheck: '20/50',
-    completeRate:'40%',
-    checkPerson:'李达'
-  }
-  ]
+  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;
   loading.value = false;
 };
 
@@ -298,6 +255,10 @@ const cancel = () => {
   reset();
   dialog.visible = false;
 };
+const repairCancel = () => {
+  repairFormRef.value?.resetFields();
+  repairDialog.visible = false;
+};
 
 /** 表单重置 */
 const reset = () => {
@@ -329,17 +290,62 @@ const handleAdd = () => {
   dialog.visible = true;
   dialog.title = '新增巡检计划';
 };
-/** 修改按钮操作 */
-const handleUpdate = (row) => {
+const handlerCheck = (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);
+    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);
   });
   dialog.visible = true;
-  dialog.title = '修改巡检计划';
+  dialog.title = '执行巡检任务';
+}
+/** 修改按钮操作 */
+const handleUpdate = (row) => {
+  reset();
+  repairDialog.visible = true;
+  repairDialog.title = '巡检故障报修';
 };
 
 /** 提交按钮 */
@@ -375,4 +381,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>

+ 93 - 136
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="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>
@@ -40,13 +40,13 @@
 
       <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="faultLevel"  />
-        <el-table-column label="是否停机" align="center" show-overflow-tooltip prop="isStop"  />
+        <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="createTime" width="150" />
@@ -54,10 +54,12 @@
         <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="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="handleDelete(scope.row)">委外维修</el-button>
-            <el-button size="small" link type="danger" @click="handleDelete(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="danger" @click="handleDelete(scope.row)">作废</el-button>
+            </template>
           </template>
         </el-table-column>
       </el-table>
@@ -68,65 +70,47 @@
     <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-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="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="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="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-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>
           </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-col :span="12">
+            <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="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-col :span="12">
+            <el-form-item label="故障类型" prop="faultType" :rules="[{ required: true, message: '故障类型不能为空', trigger: 'blur' }]">
+              <el-input v-model="form.faultType" placeholder="请输入故障类型" />
             </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-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>
           </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-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>
           </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-col :span="12">
+            <el-form-item label="故障描述" prop="remark">
+              <el-input v-model="form.remark" placeholder="请输入故障描述" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -141,15 +125,8 @@
   </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="FaultRepair" lang="ts">
+// import { getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
 import { deepClone } from '@/utils';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
@@ -168,25 +145,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: [],
-  }],
+  deviceName: undefined,
+  faultLevel: undefined,
+  faultType: undefined,
+  isStop: undefined,
+  faultDate: undefined,
   remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
+  ext1:undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -195,19 +162,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,44 +178,47 @@ const getList = async () => {
   // total.value = res.total;
   tableList.value = [
     {
-    name: '设备一报修',
-    id: 1002301,
-    creator: '王乐',
-    creatorDept: '生产一部',
-    faultCreateTime:'2024-12-19 12:05:00',
-    createTime: '2024-12-19 12:13:02',
-    faultLevel: '紧急',
-    isStop: '是',
-    deviceName: '设备一',
-    deviceNo: '21244',
-    status:'待派工'
-  },
+      name: '设备一报修',
+      sn: 1002301,
+      creator: '王乐',
+      creatorDept: '生产一部',
+      faultDate: '2024-12-19',
+      createTime: '2024-12-19 12:13:02',
+      faultLevel: '紧急',
+      faultType: '电压故障',
+      isStop: '是',
+      deviceName: '设备一',
+      deviceNo: '21244',
+      status: '待派工'
+    },
     {
-    name: '设备二报修',
-    id: 1002302,
-    creator: '王乐',
-    creatorDept: '生产一部',
-    faultCreateTime:'2024-12-19 12:05:00',
-    createTime: '2024-12-19 12:13:02',
-    faultLevel: '紧急',
-    isStop: '是',
-    deviceName: '设备二',
-    deviceNo: '21242',
-    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: '设备三报修',
-    id: 1002303,
-    creator: '王乐',
-    creatorDept: '生产一部',
-    faultCreateTime:'2024-12-19 12:05:00',
-    createTime: '2024-12-19 12:13:02',
-    faultLevel: '紧急',
-    isStop: '是',
-    deviceName: '设备三',
-    deviceNo: '21243',
-    status:'待派工'
-  },
+      name: '设备三报修',
+      sn: 1002303,
+      creator: '王乐',
+      creatorDept: '生产一部',
+      faultDate: '2024-12-19',
+      createTime: '2024-12-19 12:13:02',
+      faultLevel: '紧急',
+      faultType: '故障类型一',
+      isStop: '是',
+      deviceName: '设备三',
+      deviceNo: '21243',
+      status: '待派工'
+    },
 
   ]
   loading.value = false;
@@ -295,20 +257,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 = '修改故障报修';
 };
 
 /** 提交按钮 */

+ 41 - 138
src/views/deviceMaintain/faultType/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="faultSn">
+              <el-input v-model="queryParams.faultSn" placeholder="请输入类型编号" clearable @keyup.enter="handleQuery" />
             </el-form-item>
             <el-form-item>
               <el-button type="primary" icon="Search" @click="handleQuery"> 搜索 </el-button>
@@ -41,11 +41,11 @@
       <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="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="status" width="150" />
-        <el-table-column label="备注" align="center" show-overflow-tooltip prop="remark" 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="createTime" width="150" />
+        <el-table-column label="类型编号" align="center" show-overflow-tooltip prop="faultSn" width="150" />
+        <el-table-column label="状态" align="center" show-overflow-tooltip prop="faultStatus" width="150" />
+        <el-table-column label="备注" align="center" show-overflow-tooltip prop="remark"  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="createTime"  />
         <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="handleUpdate(scope.row)">修改</el-button>
@@ -57,66 +57,29 @@
         :total="total" @pagination="getList" />
     </el-card>
     <!-- 添加或修改对话框 -->
-    <el-dialog v-model="dialog.visible" :title="dialog.title" width="950px" append-to-body>
+    <el-dialog v-model="dialog.visible" :title="dialog.title" width="650px" 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-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="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="faultSn" :rules="[{ required: true, message: '类型编号不能为空', trigger: 'blur' }]">
+              <el-input v-model="form.faultSn" 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-col :span="12">
+            <el-form-item label="状态" prop="faultStatus"
+              :rules="[{ required: true, message: '状态不能为空', trigger: 'change' }]">
+              <el-select v-model="form.faultStatus">
+                <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-form-item>
-          </el-col>
-          <el-col :span="8">
+          <el-col :span="12">
             <el-form-item label="备注" prop="remark">
               <el-input v-model="form.remark" placeholder="请输入备注" />
             </el-form-item>
@@ -133,8 +96,8 @@
   </div>
 </template>
 
-<script setup name="PatrolPlan" lang="ts">
-import { listInspectionTeam, listInspectionItem, listInspectionTask, getInspectionTask, delInspectionTask, addInspectionTask, updateInspectionTask } from '@/api/deviceCheck/index';
+<script setup name="FaultType" lang="ts">
+import { listFaultType, getFaultType, delFaultType, addFaultType, updateFaultType } from '@/api/deviceMaintain/index';
 import {
   listDeviceType,
   getDeviceTypeDetailList
@@ -161,24 +124,10 @@ const dialog = reactive<DialogOption>({
 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: [],
-  }],
+  faultSn: undefined,
+  faultStatus: undefined,
   remark: undefined,
-  ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
-  },
+  ext1: undefined,
   ext2: undefined
 };
 const formData = reactive({
@@ -187,70 +136,17 @@ const formData = reactive({
     pageNum: 1,
     pageSize: 10,
     name: undefined,
-    status: undefined,
+    faultSn: 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;
-  // 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: 1002301,
-    status:'启用',
-    remark:'--',
-    creator: '王乐',
-    createTime: '2024-12-19 12:13:02',
-  },
-  {
-    name: '故障类型二',
-    id: 1002302,
-    status:'停用',
-    remark:'--',
-    creator: '王乐',
-    createTime: '2024-12-18 12:13:02',
-    },
-    {
-    name: '故障类型三',
-    id: 1002303,
-    status:'启用',
-    remark:'--',
-    creator: '王维',
-    createTime: '2024-12-19 12:13:02',
-    },
-    {
-    name: '故障类型四',
-    id: 1002304,
-    status:'启用',
-    remark:'--',
-    creator: '李达',
-    createTime: '2024-12-19 12:13:02',
-    },
-    {
-    name: '故障类型五',
-    id: 1002305,
-    status:'启用',
-    remark:'--',
-    creator: '李达',
-    createTime: '2024-12-20 10:10:01',
-  },
-
-  ]
+  const res = await listFaultType(queryParams.value);
+  tableList.value = res.rows
+  total.value = res.total;
   loading.value = false;
 };
 
@@ -294,9 +190,7 @@ const handleAdd = () => {
 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);
+  getFaultType(_id).then(({ data }) => {
     Object.assign(form.value, data);
   });
   dialog.visible = true;
@@ -307,6 +201,15 @@ const handleUpdate = (row) => {
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      buttonLoading.value = true;
+      if (form.value.id) {
+        await updateFaultType(form.value).finally(() => (buttonLoading.value = false));
+      } else {
+        await addFaultType(form.value).finally(() => (buttonLoading.value = false));
+      }
+      proxy?.$modal.msgSuccess('操作成功');
+      dialog.visible = false;
+      await getList();
     }
   });
 };
@@ -314,7 +217,7 @@ const submitForm = () => {
 const handleDelete = async (row) => {
   const _ids = row?.id || ids.value;
   await proxy?.$modal.confirm('是否确认删除?').finally(() => (loading.value = false));
-  await delInspectionTask(_ids);
+  await delFaultType(_ids);
   proxy?.$modal.msgSuccess('删除成功');
   await getList();
 };

+ 208 - 96
src/views/sparesManage/warehouseManage/index.vue

@@ -23,14 +23,14 @@
           <el-col :span="1.5">
             <el-button type="primary" plain icon="Plus" @click="handleAdd"> 新增 </el-button>
           </el-col>
-          <el-col :span="1.5">
+          <!-- <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>
+          </el-col> -->
           <right-toolbar v-model:showSearch="showSearch" @query-table="getList" />
         </el-row>
       </template>
@@ -39,18 +39,16 @@
         <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 prop="storeType" width="150" />
         <el-table-column label="管理人员" align="center" show-overflow-tooltip prop="managePerson" width="150" />
         <el-table-column label="联系电话" align="center" show-overflow-tooltip prop="linkPhone" width="150" />
-        <el-table-column label="库房地址" align="center" show-overflow-tooltip prop="storeAddress" width="150"/>
+        <el-table-column label="库房地址" align="center" show-overflow-tooltip prop="storeAddress" width="150" />
         <el-table-column label="库位总数" align="center" show-overflow-tooltip prop="storeNum" />
         <el-table-column label="备注" align="center" show-overflow-tooltip prop="remark" 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="createTime" 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="danger" @click="handleDelete(scope.row)">删除</el-button>
+            <el-button size="small" link type="primary" @click="showDetail(scope.row)">详情</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -60,69 +58,85 @@
     <!-- 添加或修改对话框 -->
     <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-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-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="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="managerId"
+              :rules="[{ required: true, message: '管理人员不能为空', trigger: 'change' }]">
+              <el-select v-model="form.managerId" clearable placeholder="请选择管理人员" @change="setUserInfo('manager')">
+                <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="headerId"
+              :rules="[{ required: true, message: '仓库负责人不能为空', trigger: 'change' }]">
+              <el-select v-model="form.headerId" clearable placeholder="请选择仓库负责人" @change="setUserInfo('header')">
+                <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="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="address">
+              <el-input v-model="form.address" placeholder="请输入仓库地址" />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
+          <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="库位管理" />
+        <el-table :data="form.shelfs" max-height="300">
+          <el-table-column label="库位前缀" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.suffix" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="货架号" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.shelfNum" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="层数" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.layerNum" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="货位数" align="center">
+            <template #default="scope">
+              <el-input v-model="scope.row.placeNum" placeholder="请输入" />
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" width="80">
+            <template #header>
+              <div class="operateBtn">
+                <span>操作</span>
+                <el-icon @click="addShelfs">
+                  <CirclePlus />
+                </el-icon>
+              </div>
+            </template>
+            <template #default="scope">
+              <el-icon @click="delShelfs(scope.$index)">
+                <Delete />
+              </el-icon>
+            </template>
+          </el-table-column>
+        </el-table>
       </el-form>
       <template #footer>
         <div class="dialog-footer">
@@ -131,19 +145,47 @@
         </div>
       </template>
     </el-dialog>
+    <el-drawer v-model="detailDrawer" title="库房详情" class="customDrawer" size="80%">
+      <div>
+        <el-tabs v-model="detailTab">
+          <el-tab-pane label="基础信息" name="1">
+            <div>
+              <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.managePerson }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="联系电话">{{ curRow.linkPhone }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="库房地址">{{ curRow.storeAddress }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="库位总数">{{ curRow.storeNum }}</el-descriptions-item>
+                <el-descriptions-item label-align="right" label="创建人">{{ curRow.creator }}</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.shelfs" >
+              <el-table-column label="库位名称" align="center" prop="name">
+              </el-table-column>
+              <el-table-column label="前缀" align="center" prop="suffix">
+              </el-table-column>
+              <el-table-column label="货架号" align="center" prop="shelfNum">
+              </el-table-column>
+              <el-table-column label="层号" align="center"  prop="layerNum">
+              </el-table-column>
+              <el-table-column label="货位号" align="center"  prop="placeNum">
+              </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="WarehouseManage" lang="ts">
+import { listWarehouse, getWarehouse, delWarehouse, addWarehouse, updateWarehouse } from '@/api/sparesManage/index';
 import { deepClone } from '@/utils';
+import { listUser } from '@/api/system/user/index'
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const tableList = ref([]);
 const buttonLoading = ref(false);
@@ -162,23 +204,20 @@ const dialog = reactive<DialogOption>({
 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: [],
+  sn: undefined,
+  managerId: undefined,
+  address: undefined,
+  headerId: undefined,
+  shelfs: [{
+    suffix: '',
+    shelfNum: '',
+    layerNum: '',
+    placeNum: ''
   }],
   remark: undefined,
   ext1: <any>{
-    phone: undefined,
-    inspectionPersonName: undefined,
+    headerName: undefined,
+    managerName: undefined,
   },
   ext2: undefined
 };
@@ -192,19 +231,15 @@ const formData = reactive({
     params: {}
   }
 });
-const cycleDisabled = ref(false)
+const detailTab = ref('1')
+const detailDrawer = ref(false)
+const curRow = ref({} as any)
 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;
-  // const res = await listInspectionTask(queryParams.value);
+  // const res = await listWarehouse(queryParams.value);
   // tableList.value = res.rows.map((item) => ({
   //   ...item,
   //   ext1: item.ext1 ? JSON.parse(item.ext1) : null,
@@ -218,7 +253,7 @@ const getList = async () => {
       managePerson: '王乐',
       linkPhone: '13218816060',
       storeAddress: '112号',
-      storeNum:'300',
+      storeNum: '300',
       remark: '--',
       creator: '王乐',
       createTime: '2024-12-19 12:13:02',
@@ -229,8 +264,8 @@ const getList = async () => {
       storeType: '半成品库房',
       managePerson: '王乐',
       linkPhone: '13218816060',
-      storeAddress: '112号',
-      storeNum:'300',
+      storeAddress: '102号',
+      storeNum: '250',
       remark: '--',
       creator: '王乐',
       createTime: '2024-12-19 12:13:02',
@@ -242,7 +277,7 @@ const getList = async () => {
       managePerson: '王乐',
       linkPhone: '13218816060',
       storeAddress: '112号',
-      storeNum:'300',
+      storeNum: '500',
       remark: '--',
       creator: '王乐',
       createTime: '2024-12-19 12:13:02',
@@ -284,19 +319,18 @@ 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 }) => {
+  getWarehouse(_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.visible = true;
   dialog.title = '修改故障类型';
 };
 
@@ -304,19 +338,97 @@ const handleUpdate = (row) => {
 const submitForm = () => {
   addFormRef.value?.validate(async (valid: boolean) => {
     if (valid) {
+      // buttonLoading.value = true;
+      // if (form.value.id) {
+      //   await updateWarehouse(form.value).finally(() => (buttonLoading.value = false));
+      // } else {
+      //   await addWarehouse(form.value).finally(() => (buttonLoading.value = false));
+      // }
+      // proxy?.$modal.msgSuccess('操作成功');
+      // dialog.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 delWarehouse(_ids);
+  proxy?.$modal.msgSuccess('删除成功');
+  await getList();
 };
+const showDetail = (row) => {
+  detailDrawer.value = true
+  curRow.value = row
+  detailTab.value = '1'
+  curRow.value.shelfs = [
+    {
+      name:'A-1-1-1',
+      suffix: '1',
+      shelfNum: '1',
+      layerNum: '1',
+      placeNum: '1'
+    },
+    {
+      name:'A-1-1-2',
+      suffix: '1',
+      shelfNum: '1',
+      layerNum: '1',
+      placeNum: '2'
+    },
+    {
+      name:'A-1-1-3',
+      suffix: '1',
+      shelfNum: '1',
+      layerNum: '1',
+      placeNum: '3'
+    },
+    {
+      name:'A-1-1-4',
+      suffix: '1',
+      shelfNum: '1',
+      layerNum: '1',
+      placeNum: '4'
+    },
+    {
+      name:'A-1-1-5',
+      suffix: '1',
+      shelfNum: '1',
+      layerNum: '1',
+      placeNum: '5'
+    }
+  ]
+}
+const getUserList = () => {
+  listUser({ status: '0', pageSize: 10000, pageNum: 1 }).then(({ code, rows }) => {
+    if (code === 200) {
+      userOptions.value = rows
+    }
+  })
+}
+const setUserInfo = (key) => {
+  form.value.ext1[`${key}Name`] = ''
+  userOptions.value.forEach(item => {
+    if (form.value[`${key}Id`] === item.userId) {
+      form.value.ext1[`${key}Name`] = item.nickName
+    }
+  })
+}
+const addShelfs = () => {
+  form.value.shelfs.push({
+    suffix: '',
+    shelfNum: '',
+    layerNum: '',
+    placeNum: ''
+  })
+}
+const delShelfs = (index) => {
+  form.value.shelfs.splice(index, 1)
+}
 onMounted(() => {
   getList();
+  getUserList()
 });
 </script>
 <style lang="scss" scoped>