Pārlūkot izejas kodu

前端调整维修工单

lipenghui 4 mēneši atpakaļ
vecāks
revīzija
57a2f9e22f

+ 0 - 6
src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue

@@ -909,12 +909,6 @@ const handleTransferType = async () => {
     if (!transferFormRef.value) return
     await transferFormRef.value.validate()
     // 1.2 提交转交
-    const dataFailure = {
-      id: props.processInstance.businessKey,
-      type: transferForm.type,
-      assigneeUserId: transferForm.assigneeUserId
-    }
-    debugger
     await IotFailureReportApi.updateIotMaintainProcess(props.processInstance.businessKey, transferForm.type, transferForm.assigneeUserId);
     const data = {
       id: runningTask.value.id,

+ 2 - 2
src/views/bpm/task/todo/index.vue

@@ -109,7 +109,7 @@
   <ContentWrap>
     <el-table v-loading="loading" :data="list">
       <el-table-column align="center" label="流程" prop="processInstance.name" width="180" />
-      <el-table-column label="摘要" prop="processInstance.summary" width="180">
+      <el-table-column label="摘要" prop="processInstance.summary" width="200">
         <template #default="scope">
           <div
             class="flex flex-col"
@@ -148,7 +148,7 @@
         prop="processInstanceId"
         :show-overflow-tooltip="true"
       />
-      <el-table-column align="center" label="任务编号" prop="id" :show-overflow-tooltip="true" />
+<!--      <el-table-column align="center" label="任务编号" prop="id" :show-overflow-tooltip="true" />-->
       <el-table-column align="center" label="操作" fixed="right" width="80">
         <template #default="scope">
           <el-button link type="primary" @click="handleAudit(scope.row)">办理</el-button>

+ 21 - 17
src/views/pms/failure/IotFailureReportForm.vue

@@ -1,5 +1,5 @@
 <template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible">
+  <Dialog :title="dialogTitle" v-model="dialogVisible" style="width: 65em">
     <el-form
       ref="formRef"
       :model="formData"
@@ -43,20 +43,9 @@
           </el-form-item>
         </el-col>
       <el-col :span="12">
-      <el-form-item label="是否停机" prop="ifStop">
-        <el-select v-model="formData.ifStop" placeholder="请选择">
-          <el-option
-            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
-            :key="dict.label"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-        </el-col>
-      <el-col :span="12">
       <el-form-item label="故障时间" prop="failureTime">
         <el-date-picker
+          style="width: 150%"
           v-model="formData.failureTime"
           type="datetime"
           value-format="x"
@@ -70,21 +59,33 @@
       </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="图片" prop="pic">
-            <UploadImg v-model="formData.pic" height="60px" />
+          <el-form-item label="是否停机" prop="ifStop">
+            <el-select v-model="formData.ifStop" placeholder="请选择">
+              <el-option
+                v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+                :key="dict.label"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
+          <el-form-item label="图片" prop="pic">
+            <UploadImg v-model="formData.pic" height="60px" width="28em" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
           <el-form-item label="故障影响" prop="failureInfluence">
             <el-input type="textarea" v-model="formData.failureInfluence" placeholder="请输入故障影响" />
           </el-form-item>
         </el-col>
-      <el-col :span="12">
+      <el-col :span="24">
       <el-form-item label="解决办法" prop="solution">
         <el-input v-model="formData.solution" type="textarea" placeholder="请输入解决办法" />
       </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <el-col :span="24">
           <el-form-item label="故障描述" prop="description">
             <el-input type="textarea" v-model="formData.description" />
           </el-form-item>
@@ -161,6 +162,9 @@ const formRules = reactive({
   deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
   ifDeal: [{ required: true, message: '是否解决不能为空', trigger: 'blur' }],
   needHelp: [{ required: true, message: '是否协助不能为空', trigger: 'blur' }],
+  failureTime:[{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
+  failureSystem:[{ required: true, message: '故障系统不能为空', trigger: 'blur' }],
+  solution:[{ required: true, message: '解决办法不能为空', trigger: 'blur' }],
   // deviceId: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
   //status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
 })

+ 29 - 37
src/views/pms/failure/index.vue

@@ -157,6 +157,16 @@
             <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
           </template>
         </el-table-column>
+        <el-table-column label="是否解决" align="center" prop="ifDeal" >
+          <template #default="scope">
+            <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.ifDeal" />
+          </template>
+        </el-table-column>
+        <el-table-column label="需要协助" align="center" prop="needHelp" >
+          <template #default="scope">
+            <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.needHelp" />
+          </template>
+        </el-table-column>
         <el-table-column label="是否停机" align="center" prop="ifStop" >
           <template #default="scope">
             <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.ifStop" />
@@ -173,16 +183,6 @@
         <el-table-column label="故障系统" align="center" prop="failureSystem" />
   <!--      <el-table-column label="故障描述" align="center" prop="description" />-->
         <el-table-column label="图片" align="center" prop="pic" />
-        <el-table-column label="是否解决" align="center" prop="ifDeal" >
-          <template #default="scope">
-            <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.ifDeal" />
-          </template>
-        </el-table-column>
-        <el-table-column label="需要协助" align="center" prop="needHelp" >
-          <template #default="scope">
-            <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.needHelp" />
-          </template>
-        </el-table-column>
   <!--      <el-table-column label="解决办法" align="center" prop="solution" />-->
   <!--      <el-table-column label="备注" align="center" prop="remark" />-->
         <el-table-column
@@ -194,33 +194,25 @@
         />
         <el-table-column label="操作" align="center" min-width="120px">
           <template #default="scope">
-          <el-dropdown
-            @command="(command) => handleCommand(command, scope.row)"
-          >
-            <el-button type="primary" link><Icon icon="ep:d-arrow-right" /> 更多</el-button>
-            <template #dropdown>
-              <el-dropdown-menu>
-                <el-dropdown-item
-                  v-if="scope.row.auditStatus==='0'"
-                  command="handleUpdate"
-                >
-                  <Icon icon="ep:edit" />编辑
-                </el-dropdown-item>
-                <el-dropdown-item
-                  v-if="scope.row.auditStatus==='0'"
-                  command="handleDelete"
-                >
-                  <Icon icon="ep:delete" />删除
-                </el-dropdown-item>
-                <el-dropdown-item
-                  v-if="scope.row.auditStatus === '0'"
-                  command="handleSubmit"
-                >
-                  <Icon icon="ep:circle-check" />提交审核
-                </el-dropdown-item>
-              </el-dropdown-menu>
-            </template>
-          </el-dropdown>
+
+            <el-button
+              link
+              v-if="scope.row.auditStatus==='30'"
+              type="primary"
+              @click="openForm('update', scope.row.id)"
+              v-hasPermi="['rq:iot-device:update']"
+            >
+              编辑
+            </el-button>
+            <el-button
+              link
+              v-if="scope.row.auditStatus==='30'"
+              type="danger"
+              @click="handleDelete(scope.row.id)"
+              v-hasPermi="['rq:iot-device:delete']"
+            >
+              删除
+            </el-button>
           </template>
         </el-table-column>
       </el-table>

+ 128 - 66
src/views/pms/maintain/IotMaintain.vue

@@ -3,16 +3,17 @@
     <el-form
       ref="formRef"
       :model="formData"
-      :rules="formRules"
+      :rules="formData.type === 'in' ? formRules : outFormRules"
       v-loading="formLoading"
       style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
       label-width="130px"
     >
       <div class="base-expandable-content">
         <el-row>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="设备" prop="deviceName">
               <el-select
+                :disabled="formType==='update'"
                 v-model="formData.deviceName"
                 :model-value="deviceLabel"
                 placeholder="请选择设备"
@@ -20,21 +21,9 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="状态" prop="status">
-              <el-select v-model="formData.status" placeholder="请选择状态" clearable>
-                <el-option
-                  v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS_NO)"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="维修类型" prop="type">
-              <el-select disabled v-model="formData.type" placeholder="请选择维修类型" clearable>
+              <el-select v-model="formData.type" placeholder="请选择维修类型" clearable>
                 <el-option
                   v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_TYPE)"
                   :key="dict.value"
@@ -44,7 +33,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="是否停机" prop="ifStop">
               <el-select v-model="formData.ifStop" placeholder="请选择是否停机" clearable>
                 <el-option
@@ -56,29 +45,30 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="故障时间" prop="failureTime">
+          <el-col :span="8">
+            <el-form-item label="维修开始时间" prop="maintainStartTime">
               <el-date-picker
                 style="width: 150%"
-                v-model="formData.failureTime"
+                v-model="formData.maintainStartTime"
                 type="datetime"
                 value-format="x"
-                placeholder="选择故障时间"
+                placeholder="选择维修开始时间"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="维修开始时间" prop="maintainStartTime">
+          <el-col :span="8">
+            <el-form-item label="维修结束时间" prop="maintainEndTime">
               <el-date-picker
+                @change="endTimeBlur"
                 style="width: 150%"
-                v-model="formData.maintainStartTime"
+                v-model="formData.maintainEndTime"
                 type="datetime"
                 value-format="x"
-                placeholder="选择维修开始时间"
+                placeholder="选择维修结束时间"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="维修负责人" prop="maintainPerson">
               <el-select v-model="formData.maintainPerson" filterable clearable style="width: 100%">
                 <el-option
@@ -90,49 +80,75 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
+            <el-form-item label="故障时间" prop="failureTime">
+              <el-date-picker
+                style="width: 150%"
+                v-model="formData.failureTime"
+                type="datetime"
+                value-format="x"
+                placeholder="选择故障时间"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
             <el-form-item label="故障影响" prop="failureInfluence">
               <el-input v-model="formData.failureInfluence" placeholder="请输入故障影响" />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="故障系统" prop="failureSystem">
               <el-input v-model="formData.failureSystem" placeholder="请输入故障系统" />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="维修结束时间" prop="maintainEndTime">
-              <el-date-picker
-                style="width: 150%"
-                v-model="formData.maintainEndTime"
-                type="datetime"
-                value-format="x"
-                placeholder="选择维修结束时间"
+          <el-col :span="8">
+            <el-form-item label="图片" prop="pic">
+              <UploadImg v-model="formData.pic" height="55px" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="供应商" v-if="formData.type === 'out'" prop="supplier">
+              <el-select
+                v-model="formData.supplier"
+                placeholder="请输入供应商"
+                :model-value="supplierLabel"
+                @click="openCustomer('supplier')"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="图片" prop="pic">
-              <!--        <el-input v-model="formData.pic" placeholder="请输入图片" />-->
-              <UploadImg v-model="formData.pic" height="55px" />
+          <el-col :span="8">
+            <el-form-item label="维修费用" v-if="formData.type === 'out'" prop="maintainFee">
+              <el-input-number
+                v-model="formData.maintainFee"
+                :min="0"
+                :precision="2"
+                :step="0.1"
+                placeholder="请输入维修费用"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
+            <el-form-item label="委外相关附件" v-if="formData.type === 'out'" prop="outFile">
+              <UploadFile v-model="formData.outFile" class="min-w-80px" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
             <el-form-item label="故障描述" prop="description">
               <el-input type="textarea" v-model="formData.description" />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="维修描述" prop="maintainDescription">
               <el-input type="textarea" v-model="formData.maintainDescription" />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="12">
             <el-form-item label="解决办法" prop="solution">
               <el-input type="textarea" v-model="formData.solution" />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="24">
             <el-form-item label="备注" prop="remark">
               <el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
             </el-form-item>
@@ -144,12 +160,7 @@
   <ContentWrap>
     <ContentWrap>
       <!-- 搜索工作栏 -->
-      <el-form
-        class="-mb-15px"
-        ref="queryFormRef"
-        :inline="true"
-        label-width="68px"
-      >
+      <el-form class="-mb-15px" ref="queryFormRef" :inline="true" label-width="68px">
         <el-form-item>
           <el-button @click="openMaterialForm" type="primary"
             ><Icon icon="ep:plus" class="mr-5px" /> 选择物料</el-button
@@ -167,10 +178,14 @@
         <el-table-column label="物料编码" align="center" prop="code" />
         <el-table-column label="物料名称" align="center" prop="name" />
         <el-table-column label="单位" align="center" prop="unit" />
-        <el-table-column label="单价" align="center" prop="price" />
+        <el-table-column label="单价" align="center" prop="price">
+          <template #default="{ row }">
+            {{ row.price }}
+          </template>
+        </el-table-column>
         <el-table-column label="消耗数量" align="center" prop="depleteCount">
           <template #default="scope">
-            <el-input v-model="scope.row.depleteCount" />
+            <el-input-number :precision="2" :step="0.1" v-model="scope.row.depleteCount" />
           </template>
         </el-table-column>
         <el-table-column label="总库存数量" align="center" prop="totalCount" />
@@ -218,10 +233,11 @@
     </el-form>
   </ContentWrap>
   <DeviceList ref="deviceFormRef" @choose="deviceChoose" />
+  <CustomerList ref="customerFormRef" @choose="customerChoose" />
 </template>
 <script setup lang="ts">
-import { IotMaintainApi, IotMaintainVO } from '@/api/pms/maintain'
-import {DICT_TYPE, getBoolDictOptions, getStrDictOptions} from '@/utils/dict'
+import { IotMaintainApi } from '@/api/pms/maintain'
+import { DICT_TYPE, getBoolDictOptions, getStrDictOptions } from '@/utils/dict'
 import DeviceList from '@/views/pms/failure/DeviceList.vue'
 import * as UserApi from '@/api/system/user'
 import { useUserStore } from '@/store/modules/user'
@@ -230,11 +246,11 @@ import MaintainMaterialDrawer from '@/views/pms/maintain/material/MaintainMateri
 import { ref } from 'vue'
 import { IotMaintainMaterialVO } from '@/api/pms/maintain/material'
 import { useTagsViewStore } from '@/store/modules/tagsView'
-import {IotDeviceApi} from "@/api/pms/device";
-import {CACHE_KEY, useCache} from "@/hooks/web/useCache";
+import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
+import CustomerList from '@/views/pms/device/CustomerList.vue'
 
 /** 维修工单 表单 */
-defineOptions({ name: 'IotMaintain' })
+defineOptions({ name: 'IotMaintainAe' })
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
@@ -250,6 +266,7 @@ const showDrawer = ref()
 const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
 const { params, name } = useRoute() // 查询参数
 const id = params.id
+const supplierLabel = ref('') // 表单的类型:create - 新增;update - 修改
 const formData = ref({
   id: undefined,
   failureCode: undefined,
@@ -273,6 +290,9 @@ const formData = ref({
   deptId: undefined,
   maintainPerson: undefined,
   maintainDescription: undefined,
+  supplier: undefined,
+  maintainFee: undefined,
+  outFile: undefined
 })
 const formRules = reactive({
   deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
@@ -280,13 +300,39 @@ const formRules = reactive({
   type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
   ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
   failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
-  failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
+  // failureTime: [{ required: true, message: '故障时间不能为空', trigger: 'blur' }],
   maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
+  maintainEndTime: [{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }],
+  maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
+  maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
+  deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }]
+  // status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
+})
+
+const outFormRules = reactive({
+  deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
+  failureCode: [{ required: true, message: '故障编码不能为空', trigger: 'blur' }],
+  type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
+  ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
+  failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
+  maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
+  maintainEndTime: [{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }],
   maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
   maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
   deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
-  status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
+  maintainFee: [{ required: true, message: '维修费用不能为空', trigger: 'blur' }],
+  supplier: [{ required: true, message: '供应商不能为空', trigger: 'blur' }]
 })
+
+const customerChoose = (row) => {
+  formData.value.supplier = row.id
+  supplierLabel.value = row.name
+}
+
+const customerFormRef = ref()
+const openCustomer = (type) => {
+  customerFormRef.value.open(type)
+}
 const formRef = ref() // 表单 Ref
 const deviceChoose = (row) => {
   formData.value.deviceId = row.id
@@ -307,6 +353,12 @@ const openMaterialForm = (type: string, id?: number) => {
   }
   materialFormRef.value.open(type, id)
 }
+const endTimeBlur = () => {
+  if (formData.value.maintainEndTime <= formData.value.maintainStartTime) {
+    message.error('维修结束时间不得早于开始时间')
+    formData.value.maintainEndTime = undefined
+  }
+}
 const close = () => {
   delView(unref(currentRoute))
   push({
@@ -345,21 +397,31 @@ const submitForm = async () => {
   // 校验表单
   await formRef.value.validate()
   if (list.value.length > 0) {
-    const nullList = list.value.filter((item) => item.depleteCount===null)
+    const nullList = list.value.filter((item) => item.depleteCount === null)
     debugger
     if (nullList.length > 0) {
       message.error('请填写消耗数量')
       return
     }
   }
-
   // 提交请求
   formLoading.value = true
   try {
+    formData.value.status = 'finished'
+    let files: any[]
+    files = formData.value.outFile
+    if (files) {
+      formData.value.outFile = files
+        .map((element) => {
+          return element.path
+        })
+        .join(',')
+    }
     const data = {
       maintain: formData.value,
       maintainMaterials: list.value
     }
+    debugger
     if (formType.value === 'create') {
       await IotMaintainApi.createIotMaintain(data)
       message.success(t('common.createSuccess'))
@@ -404,18 +466,18 @@ const resetForm = () => {
 onMounted(async () => {
   const deptId = useUserStore().getUser.deptId
   deptUsers.value = await UserApi.getDeptUsersByDeptId(deptId)
-  if (id){
+  if (id) {
     formType.value = 'update'
-    const iotMaintain = await IotMaintainApi.getIotMaintain(id);
+    const iotMaintain = await IotMaintainApi.getIotMaintain(id)
     deviceLabel.value = iotMaintain.deviceName
     formData.value = iotMaintain
     formData.value.status = undefined
   } else {
-    formData.value.type = 'in'
-    formType.value = 'create';
+    //formData.value.type = 'in'
+    formType.value = 'create'
     const { wsCache } = useCache()
     const userInfo = wsCache.get(CACHE_KEY.USER)
-    formData.value.maintainPerson = userInfo.user.id;
+    formData.value.maintainPerson = userInfo.user.id
   }
 })
 const handleDelete = async (id: number) => {

+ 78 - 28
src/views/pms/maintain/IotMaintainDetail.vue

@@ -3,14 +3,14 @@
     <el-form
       ref="formRef"
       :model="formData"
-      :rules="formRules"
+      :rules="formData.type==='in'?formRules:outFormRules"
       v-loading="formLoading"
       style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
       label-width="130px"
     >
       <div class="base-expandable-content">
         <el-row>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="设备" prop="deviceName">
               <el-select
                 disabled
@@ -18,7 +18,7 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="状态" prop="status">
               <el-select v-model="formData.status" clearable disabled>
                 <el-option
@@ -30,7 +30,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="维修类型" prop="type">
               <el-select disabled v-model="formData.type" clearable>
                 <el-option
@@ -42,7 +42,7 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="是否停机" prop="ifStop">
               <el-select v-model="formData.ifStop" clearable disabled>
                 <el-option
@@ -54,29 +54,29 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="故障时间" prop="failureTime">
+          <el-col :span="8">
+            <el-form-item label="维修开始时间" prop="maintainStartTime">
               <el-date-picker
                 disabled
                 style="width: 150%"
-                v-model="formData.failureTime"
+                v-model="formData.maintainStartTime"
                 type="date"
                 value-format="x"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="维修开始时间" prop="maintainStartTime">
+          <el-col :span="8">
+            <el-form-item label="维修结束时间" prop="maintainEndTime">
               <el-date-picker
                 disabled
                 style="width: 150%"
-                v-model="formData.maintainStartTime"
+                v-model="formData.maintainEndTime"
                 type="date"
                 value-format="x"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="维修负责人" prop="maintainPerson">
               <el-select v-model="formData.maintainPerson" filterable clearable style="width: 100%" disabled>
                 <el-option
@@ -88,43 +88,72 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
+            <el-form-item label="故障时间" prop="failureTime">
+              <el-date-picker
+                disabled
+                style="width: 150%"
+                v-model="formData.failureTime"
+                type="date"
+                value-format="x"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
             <el-form-item label="故障影响" prop="failureInfluence">
               <el-input v-model="formData.failureInfluence"  disabled/>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="故障系统" prop="failureSystem">
               <el-input v-model="formData.failureSystem"  disabled/>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="维修结束时间" prop="maintainEndTime">
-              <el-date-picker
+          <el-col :span="8">
+            <el-form-item label="图片" prop="pic" >
+              <UploadImg v-model="formData.pic" :disabled="true" height="55px" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="供应商" v-if="formData.type === 'out'" prop="supplier">
+              <el-select
                 disabled
-                style="width: 150%"
-                v-model="formData.maintainEndTime"
-                type="date"
-                value-format="x"
+                v-model="formData.supplier"
+                placeholder="请输入供应商"
+                :model-value="supplierLabel"
               />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
-            <el-form-item label="图片" prop="pic" >
-              <UploadImg v-model="formData.pic" :disabled="true" height="55px" />
+          <el-col :span="8">
+            <el-form-item label="维修费用" v-if="formData.type === 'out'" prop="maintainFee">
+              <el-input-number
+                disabled
+                v-model="formData.maintainFee"
+                :min="0"
+                :precision="2"
+                :step="0.1"
+                placeholder="请输入维修费用"
+                style="width: 100%"
+              />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
+            <el-form-item label="委外相关附件" v-if="formData.type === 'out'" prop="outFile">
+              <UploadFile disabled="" v-model="formData.outFile" class="min-w-80px" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+
             <el-form-item label="故障描述" prop="description">
               <el-input type="textarea" v-model="formData.description" disabled />
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="维修描述" prop="maintainDescription">
               <el-input type="textarea" v-model="formData.maintainDescription"  disabled/>
             </el-form-item>
           </el-col>
-          <el-col :span="6">
+          <el-col :span="8">
             <el-form-item label="解决办法" prop="solution">
               <el-input type="textarea" v-model="formData.solution" disabled />
             </el-form-item>
@@ -215,7 +244,10 @@ const formData = ref({
   auditStatus: undefined,
   deptId: undefined,
   maintainPerson: undefined,
-  maintainDescription: undefined
+  maintainDescription: undefined,
+  supplier: undefined,
+  maintainFee: undefined,
+  outFile: undefined
 })
 const formRules = reactive({
   deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
@@ -230,6 +262,20 @@ const formRules = reactive({
   deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
   status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
 })
+const outFormRules = reactive({
+  deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
+  failureCode: [{ required: true, message: '故障编码不能为空', trigger: 'blur' }],
+  type: [{ required: true, message: '维修类型不能为空', trigger: 'blur' }],
+  ifStop: [{ required: true, message: '是否停机不能为空', trigger: 'blur' }],
+  failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
+  maintainStartTime: [{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }],
+  maintainEndTime: [{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }],
+  maintainDescription: [{ required: true, message: '维修描述不能为空', trigger: 'blur' }],
+  maintainPerson: [{ required: true, message: '维修负责人不能为空', trigger: 'blur' }],
+  deviceId: [{ required: true, message: '设备id不能为空', trigger: 'blur' }],
+  maintainFee: [{ required: true, message: '维修费用不能为空', trigger: 'blur' }],
+  supplier: [{ required: true, message: '供应商不能为空', trigger: 'blur' }],
+})
 const formRef = ref() // 表单 Ref
 
 const close = () => {
@@ -245,6 +291,10 @@ const close = () => {
 onMounted(async () => {
   await IotMaintainApi.getIotMaintain(id).then((res) => {
     formData.value = res
+    if (res.outFile){
+      formData.value.outFile = res.outFile.split(",")
+    }
+
     list.value = res.maintainMaterialDOS
     UserApi.getUser(formData.value.maintainPerson).then((res) => {
       formData.value.maintainPerson = res.nickname;

+ 4 - 4
src/views/pms/maintain/index.vue

@@ -162,16 +162,16 @@
             </template>
           </el-table-column>
           <el-table-column
-            label="故障时间"
+            label="维修开始时间"
             align="center"
-            prop="failureTime"
+            prop="maintainStartTime"
             :formatter="dateFormatter"
             width="180px"
           />
           <el-table-column
-            label="维修开始时间"
+            label="故障时间"
             align="center"
-            prop="maintainStartTime"
+            prop="failureTime"
             :formatter="dateFormatter"
             width="180px"
           />

+ 30 - 8
src/views/pms/maintain/material/MaintainMaterialDrawer.vue

@@ -24,14 +24,35 @@
           @click="openForm"
         />
       </el-form-item>
-      <el-form-item label="消耗数量" prop="depleteCount1" style="margin-bottom: 30px">
-        <el-input v-model="drawerFormData.depleteCount1" type="number" placeholder="请输入消耗数量" />
+      <el-form-item label="物料编码" prop="code1" style="margin-bottom: 30px">
+        <el-input v-model="drawerFormData.code1" disabled />
+      </el-form-item>
+      <el-form-item label="物料名称" prop="name1" style="margin-bottom: 30px">
+        <el-input v-model="drawerFormData.name1" disabled />
       </el-form-item>
       <el-form-item label="单位" prop="unit1" style="margin-bottom: 30px">
-        <el-input v-model="drawerFormData.unit1" placeholder="请输入单位" />
+        <el-input v-model="drawerFormData.unit1" disabled placeholder="请输入单位" />
+      </el-form-item>
+      <el-form-item label="消耗数量" prop="depleteCount1" style="margin-bottom: 30px">
+        <el-input-number
+          v-model="drawerFormData.depleteCount1"
+          :min="0"
+          :precision="2"
+          :step="0.1"
+          style="width: 50%"
+          class="w-100%"
+          controls-position="right"
+        />
       </el-form-item>
       <el-form-item label="单价" prop="price1" style="margin-bottom: 30px">
-        <el-input v-model="drawerFormData.price1" placeholder="请输入单价" />
+        <el-input-number
+          v-model="drawerFormData.price1"
+          :min="0"
+          :precision="2"
+          :step="0.1"
+          style="width: 50%"
+          controls-position="right"
+        />
       </el-form-item>
       <el-form-item label="备注" prop="remark1" style="margin-bottom: 30px">
         <el-input v-model="drawerFormData.remark1" type="textarea" placeholder="请输入备注" />
@@ -48,7 +69,7 @@
 import { defineEmits, defineOptions, ref, watch } from 'vue'
 import { ElMessage } from 'element-plus'
 import * as PmsMaterialApi from '@/api/pms/material'
-import {CommonStatusEnum} from "@/utils/constants";
+import { CommonStatusEnum } from '@/utils/constants'
 import MaterialSelect from './MaterialSelect.vue'
 
 const drawerVisible = ref<boolean>(false)
@@ -60,6 +81,8 @@ defineOptions({
 const materialChoose = (row) => {
   drawerFormData.value.code1 = row.code
   drawerFormData.value.name1 = row.name
+  debugger
+  drawerFormData.value.unit1 = row.unit
   materialLabel.value = row.name
 }
 const queryParams = reactive({
@@ -129,7 +152,6 @@ const openDrawer = () => {
   materialLabel.value = undefined
 }
 
-
 // 关闭抽屉
 const closeDrawer = () => {
   drawerVisible.value = false
@@ -140,10 +162,10 @@ const handleClose = () => {
   emit('update:modelValue', false)
 }
 const drawerRef = ref()
-const submitForm= async ()=> {
+const submitForm = async () => {
   await drawerRef.value.validate()
   drawerFormData.value.sourceType = '手动添加'
-  emit('add', drawerFormData.value);
+  emit('add', drawerFormData.value)
   emit('update:modelValue', false)
 }