Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

zhangcl 4 месяцев назад
Родитель
Сommit
6dc8178355

+ 3 - 0
src/api/infra/file/index.ts

@@ -38,3 +38,6 @@ export const createFile = (data: any) => {
 export const updateFile = (data: any) => {
   return request.upload({ url: '/infra/file/upload', data })
 }
+export const updateFilePath = (data: any) => {
+  return request.upload({ url: '/infra/file/upload/path', data })
+}

+ 3 - 1
src/components/UploadFile/src/useUpload.ts

@@ -80,10 +80,12 @@ export const useUpload = () => {
           return { data: presignedInfo.url }
         })
     } else {
+      debugger
       // 模式二:后端上传
       // 重写 el-upload httpRequest 文件上传成功会走成功的钩子,失败走失败的钩子
       return new Promise((resolve, reject) => {
-        FileApi.updateFile({ file: options.file })
+        FileApi.updateFilePath({ file: options.file })
+        // FileApi.updateFile({ file: options.file })
           .then((res) => {
             if (res.code === 0) {
               resolve(res)

+ 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>

+ 13 - 5
src/views/pms/device/DeviceInfo.vue

@@ -150,12 +150,18 @@
           v-model:activeName="activeName"
         />
       </el-tab-pane>
-      <el-tab-pane label="维修记录" name="servicing">
-        <CoreList
-          ref="coreRef"
+      <el-tab-pane label="故障记录" name="failure">
+        <FailureList
+          ref="failureRef"
           v-model:activeName="activeName"
-          :propFormData="formData"
-          :ifAlone="false"
+          :deviceId = "id"
+        />
+      </el-tab-pane>
+      <el-tab-pane label="维修记录" name="maintain">
+        <MaintainList
+          ref="maintainRef"
+          v-model:activeName="activeName"
+          :deviceId = "id"
         />
       </el-tab-pane>
 <!--      <el-tab-pane label="保养记录" name="maintenance">-->
@@ -186,6 +192,8 @@ import { DICT_TYPE, getDictLabel } from '@/utils/dict'
 import { formatDate } from '../../../utils/formatTime'
 import DeviceUpload from "@/views/pms/device/DeviceUpload.vue";
 import BomInfo from "@/views/pms/device/BomInfo.vue";
+import FailureList from "@/views/pms/device/FailureList.vue";
+import MaintainList from "@/views/pms/device/MaintainList.vue";
 import {createImageViewer} from "@/components/ImageViewer";
 
 

+ 250 - 0
src/views/pms/device/FailureList.vue

@@ -0,0 +1,250 @@
+<template>
+      <ContentWrap>
+        <!-- 搜索工作栏 -->
+        <el-form
+          class="-mb-15px"
+          :model="queryParams"
+          ref="queryFormRef"
+          :inline="true"
+          label-width="68px"
+        >
+          <el-form-item label="故障编码" prop="failureCode">
+            <el-input
+              v-model="queryParams.failureCode"
+              placeholder="请输入故障编码"
+              clearable
+              @keyup.enter="handleQuery"
+              class="!w-200px"
+            />
+          </el-form-item>
+          <el-form-item label="故障名称" label-width="70px" prop="failureName">
+            <el-input
+              v-model="queryParams.failureName"
+              placeholder="请输入故障名称"
+              clearable
+              @keyup.enter="handleQuery"
+              class="!w-200px"
+            />
+          </el-form-item>
+          <el-form-item label="状态" label-width="40px" prop="status">
+            <el-select
+              v-model="queryParams.status"
+              placeholder="状态"
+              clearable
+              class="!w-200px"
+            >
+              <el-option
+                v-for="dict in getStrDictOptions(DICT_TYPE.PMS_FAILURE_STATUS)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="是否停机" v-show="ifShow" prop="ifStop">
+            <el-select
+              v-model="queryParams.ifStop"
+              placeholder="是否停机"
+              clearable
+              class="!w-200px"
+            >
+              <el-option
+                v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="故障时间" v-show="ifShow" prop="failureTime">
+            <el-date-picker
+              v-model="queryParams.failureTime"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              type="daterange"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+              class="!w-220px"
+            />
+          </el-form-item>
+          <el-form-item label="是否解决" v-show="ifShow" prop="ifDeal">
+            <el-select
+              v-model="queryParams.ifDeal"
+              placeholder="是否解决"
+              clearable
+              class="!w-200px"
+            >
+              <el-option
+                v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="是否协助" v-show="ifShow" prop="needHelp">
+            <el-select
+              v-model="queryParams.needHelp"
+              placeholder="是否协助"
+              clearable
+              class="!w-200px"
+            >
+              <el-option
+                v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="创建时间" v-show="ifShow" prop="createTime">
+            <el-date-picker
+              v-model="queryParams.createTime"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              type="daterange"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+              class="!w-220px"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button v-if="!ifShow" @click="moreQuery(true)" type="warning"><Icon icon="ep:search" class="mr-5px"/> 更多查询</el-button>
+            <el-button v-if="ifShow" @click="moreQuery(false)" type="danger"><Icon icon="ep:search" class="mr-5px"/> 收起查询</el-button>
+            <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+            <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+          </el-form-item>
+        </el-form>
+      </ContentWrap>
+
+      <!-- 列表 -->
+      <ContentWrap>
+        <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+          <el-table-column label="故障编码" align="center" prop="failureCode" />
+          <el-table-column label="故障名称" align="center" prop="failureName" />
+          <el-table-column label="设备" align="center" prop="deviceName" />
+          <el-table-column label="状态" align="center" prop="status" >
+            <template #default="scope">
+              <dict-tag :type="DICT_TYPE.PMS_FAILURE_STATUS" :value="scope.row.status" />
+            </template>
+          </el-table-column>
+          <el-table-column label="审批状态" align="center" prop="auditStatus" >
+            <template #default="scope">
+              <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" />
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="故障时间"
+            align="center"
+            prop="failureTime"
+            :formatter="dateFormatter"
+            width="180px"
+          />
+          <el-table-column label="故障系统" align="center" prop="failureSystem" />
+          <el-table-column label="图片" align="center" prop="pic" />
+          <el-table-column
+            label="创建时间"
+            align="center"
+            prop="createTime"
+            :formatter="dateFormatter"
+            width="180px"
+          />
+        </el-table>
+        <!-- 分页 -->
+        <Pagination
+          :total="total"
+          v-model:page="queryParams.pageNo"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+        />
+      </ContentWrap>
+  <!-- 表单弹窗:添加/修改 -->
+</template>
+
+<script setup lang="ts">
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { IotFailureReportApi, IotFailureReportVO } from '@/api/pms/failure'
+import IotFailureReportForm from './IotFailureReportForm.vue'
+import {DICT_TYPE, getBoolDictOptions, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
+import DeptTree from "@/views/system/user/DeptTree.vue";
+
+/** 故障上报 列表 */
+defineOptions({ name: 'IotFailureReport' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+const ifShow = ref(false)
+const loading = ref(true) // 列表的加载中
+const list = ref<IotFailureReportVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const props = defineProps<{ deviceId?: number }>()
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  failureCode: undefined,
+  failureName: undefined,
+  deviceId: undefined,
+  status: undefined,
+  ifStop: undefined,
+  failureTime: [],
+  failureInfluence: undefined,
+  failureSystem: undefined,
+  description: undefined,
+  pic: undefined,
+  ifDeal: undefined,
+  needHelp: undefined,
+  solution: undefined,
+  remark: undefined,
+  createTime: [],
+  deptId: undefined
+})
+const queryFormRef = ref() // 搜索的表单
+const moreQuery = (show) => {
+  ifShow.value = show
+}
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    queryParams.deviceId = props.deviceId
+    const data = await IotFailureReportApi.getIotFailureReportPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  handleQuery()
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 227 - 0
src/views/pms/device/MaintainList.vue

@@ -0,0 +1,227 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="故障编码" prop="failureCode">
+        <el-input
+          v-model="queryParams.failureCode"
+          placeholder="请输入故障编码"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-200px"
+        />
+      </el-form-item>
+      <el-form-item label="故障名称" label-width="70px" prop="failureName">
+        <el-input
+          v-model="queryParams.failureName"
+          placeholder="请输入故障名称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-200px"
+        />
+      </el-form-item>
+      <el-form-item label="状态" label-width="40px" prop="status">
+        <el-select v-model="queryParams.status" placeholder="状态" clearable class="!w-200px">
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.PMS_MAIN_STATUS)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否停机" v-show="ifShow" prop="ifStop">
+        <el-select v-model="queryParams.ifStop" placeholder="是否停机" clearable class="!w-200px">
+          <el-option
+            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="故障时间" v-show="ifShow" prop="failureTime">
+        <el-date-picker
+          v-model="queryParams.failureTime"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+          class="!w-220px"
+        />
+      </el-form-item>
+      <el-form-item label="是否解决" v-show="ifShow" prop="ifDeal">
+        <el-select v-model="queryParams.ifDeal" placeholder="是否解决" clearable class="!w-200px">
+          <el-option
+            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否协助" v-show="ifShow" prop="needHelp">
+        <el-select v-model="queryParams.needHelp" placeholder="是否协助" clearable class="!w-200px">
+          <el-option
+            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建时间" v-show="ifShow" prop="createTime">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+          class="!w-220px"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button v-if="!ifShow" @click="moreQuery(true)" type="warning"
+          ><Icon icon="ep:search" class="mr-5px" /> 更多查询</el-button
+        >
+        <el-button v-if="ifShow" @click="moreQuery(false)" type="danger"
+          ><Icon icon="ep:search" class="mr-5px" /> 收起查询</el-button
+        >
+        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column label="故障编码" align="center" prop="failureCode" />
+      <el-table-column label="故障名称" align="center" prop="failureName" />
+      <el-table-column label="设备" align="center" prop="deviceName" />
+      <el-table-column label="状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.PMS_MAIN_STATUS" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <el-table-column label="审核状态" align="center" prop="auditStatus">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
+        </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" />
+        </template>
+      </el-table-column>
+      <el-table-column
+        label="维修开始时间"
+        align="center"
+        prop="maintainStartTime"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column
+        label="故障时间"
+        align="center"
+        prop="failureTime"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+</template>
+
+<script setup lang="ts">
+import { dateFormatter } from '@/utils/formatTime'
+import { IotMaintainApi, IotMaintainVO } from '@/api/pms/maintain'
+import { DICT_TYPE, getBoolDictOptions, getStrDictOptions } from '@/utils/dict'
+
+/** 维修工单 列表 */
+defineOptions({ name: 'IotMaintainDevice' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+const { push } = useRouter() // 路由跳转
+const ifShow = ref(false)
+const loading = ref(true) // 列表的加载中
+const list = ref<IotMaintainVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const props = defineProps<{ deviceId?: number }>()
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  failureCode: undefined,
+  failureName: undefined,
+  deviceId: undefined,
+  status: undefined,
+  ifStop: undefined,
+  failureTime: [],
+  failureInfluence: undefined,
+  failureSystem: undefined,
+  description: undefined,
+  pic: undefined,
+  solution: undefined,
+  maintainStartTime: [],
+  maintainEndTime: [],
+  remark: undefined,
+  createTime: [],
+  deviceName: undefined,
+  processInstanceId: undefined,
+  auditStatus: undefined,
+  deptId: undefined
+})
+const queryFormRef = ref() // 搜索的表单
+const moreQuery = (show) => {
+  ifShow.value = show
+}
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    queryParams.deviceId = props.deviceId
+    const data = await IotMaintainApi.getIotMaintainPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  handleQuery()
+}
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 20 - 16
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"
@@ -69,22 +58,34 @@
         <el-input v-model="formData.failureSystem" placeholder="请输入故障系统" />
       </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="pic">
             <UploadImg v-model="formData.pic" height="60px" />
           </el-form-item>
         </el-col>
-        <el-col :span="12">
+        <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 - 35
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,31 +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
-                  command="handleUpdate"
-                >
-                  <Icon icon="ep:edit" />编辑
-                </el-dropdown-item>
-                <el-dropdown-item
-                  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>

+ 135 - 65
src/views/pms/maintain/IotMaintain.vue

@@ -10,9 +10,10 @@
     >
       <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,11 +33,11 @@
               </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
-                  v-for="dict in getStrDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+                  v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
                   :key="dict.value"
                   :label="dict.label"
                   :value="dict.value"
@@ -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" v-if="formData.type === 'out'">
+            <el-form-item label="供应商" prop="supplier" :rules="supplierRules">
+              <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" v-if="formData.type === 'out'">
+            <el-form-item label="维修费用" prop="maintainFee" :rules="strictRules">
+              <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" v-if="formData.type === 'out'" >
+            <el-form-item label="委外相关附件" 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, 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,20 +290,57 @@ const formData = ref({
   deptId: undefined,
   maintainPerson: undefined,
   maintainDescription: undefined,
+  supplier: undefined,
+  maintainFee: undefined,
+  outFile: undefined
 })
+const strictRules = {
+  required: true,
+  message: '请输入维修费用'
+};
+const supplierRules = {
+  required: true,
+  message: '请选择供应商'
+};
 const formRules = 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' }],
-  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 +361,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 +405,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 +474,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';
+    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) => {

+ 79 - 29
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>
@@ -192,7 +221,7 @@ const drawerVisible = ref<boolean>(false)
 const showDrawer = ref()
 const list = ref<IotMaintainMaterialVO[]>([]) // 列表的数据
 const { params, name } = useRoute() // 查询参数
-const id = params.id
+const id = params.id||props.id
 const formData = ref({
   id: undefined,
   failureCode: undefined,
@@ -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)
 }