lipenghui 4 kuukautta sitten
vanhempi
commit
cf7b92469a

+ 58 - 53
src/api/pms/failure/index.ts

@@ -1,53 +1,58 @@
-import request from '@/config/axios'
-
-// 故障上报 VO
-export interface IotFailureReportVO {
-  id: number // 主键id
-  failureCode: string // 故障编码
-  failureName: string // 故障名称
-  deviceId: number // 设备id
-  status: string // 状态
-  ifStop: boolean // 是否停机
-  failureTime: Date // 故障时间
-  failureInfluence: string // 故障影响
-  failureSystem: string // 故障系统
-  description: string // 故障描述
-  pic: string // 图片
-  ifDeal: boolean // 是否解决
-  needHelp: boolean // 是否需要协助
-  solution: string // 解决办法
-  remark: string // 备注
-}
-
-// 故障上报 API
-export const IotFailureReportApi = {
-  // 查询故障上报分页
-  getIotFailureReportPage: async (params: any) => {
-    return await request.get({ url: `/rq/iot-failure-report/page`, params })
-  },
-
-  // 查询故障上报详情
-  getIotFailureReport: async (id: number) => {
-    return await request.get({ url: `/rq/iot-failure-report/get?id=` + id })
-  },
-
-  // 新增故障上报
-  createIotFailureReport: async (data: IotFailureReportVO) => {
-    return await request.post({ url: `/rq/iot-failure-report/create`, data })
-  },
-
-  // 修改故障上报
-  updateIotFailureReport: async (data: IotFailureReportVO) => {
-    return await request.put({ url: `/rq/iot-failure-report/update`, data })
-  },
-
-  // 删除故障上报
-  deleteIotFailureReport: async (id: number) => {
-    return await request.delete({ url: `/rq/iot-failure-report/delete?id=` + id })
-  },
-
-  // 导出故障上报 Excel
-  exportIotFailureReport: async (params) => {
-    return await request.download({ url: `/rq/iot-failure-report/export-excel`, params })
-  },
-}
+import request from '@/config/axios'
+
+// 故障上报 VO
+export interface IotFailureReportVO {
+  id: number // 主键id
+  failureCode: string // 故障编码
+  failureName: string // 故障名称
+  deviceId: number // 设备id
+  status: string // 状态
+  ifStop: boolean // 是否停机
+  failureTime: Date // 故障时间
+  failureInfluence: string // 故障影响
+  failureSystem: string // 故障系统
+  description: string // 故障描述
+  pic: string // 图片
+  ifDeal: boolean // 是否解决
+  needHelp: boolean // 是否需要协助
+  solution: string // 解决办法
+  remark: string // 备注
+}
+
+// 故障上报 API
+export const IotFailureReportApi = {
+
+  // 提交审核
+  submitForApproval: async (id: number) => {
+    return await request.put({ url: `/rq/iot-failure-report/submitForApproval?id=${id}`})
+  },
+  // 查询故障上报分页
+  getIotFailureReportPage: async (params: any) => {
+    return await request.get({ url: `/rq/iot-failure-report/page`, params })
+  },
+
+  // 查询故障上报详情
+  getIotFailureReport: async (id: number) => {
+    return await request.get({ url: `/rq/iot-failure-report/get?id=` + id })
+  },
+
+  // 新增故障上报
+  createIotFailureReport: async (data: IotFailureReportVO) => {
+    return await request.post({ url: `/rq/iot-failure-report/create`, data })
+  },
+
+  // 修改故障上报
+  updateIotFailureReport: async (data: IotFailureReportVO) => {
+    return await request.put({ url: `/rq/iot-failure-report/update`, data })
+  },
+
+  // 删除故障上报
+  deleteIotFailureReport: async (id: number) => {
+    return await request.delete({ url: `/rq/iot-failure-report/delete?id=` + id })
+  },
+
+  // 导出故障上报 Excel
+  exportIotFailureReport: async (params) => {
+    return await request.download({ url: `/rq/iot-failure-report/export-excel`, params })
+  },
+}

+ 23 - 0
src/router/modules/remaining.ts

@@ -164,6 +164,29 @@ const remainingRouter: AppRouteRecordRaw[] = [
       },
     ]
   },
+  {
+    path: '/failure',
+    component: Layout,
+    name: 'failure',
+    meta: {
+      hidden: true
+    },
+    children: [
+      {
+        path: 'failure/detail',
+        component: () => import('@/views/pms/failure/FailureInfo.vue'),
+        name: 'OALeaveDetail',
+        meta: {
+          noCache: true,
+          hidden: true,
+          canTo: true,
+          title: '查看故障详情',
+          activeMenu: '/failure/detail'
+        }
+      }
+    ]
+  },
+
   {
     path: '/user',
     component: Layout,

+ 173 - 0
src/views/pms/failure/FailureInfo.vue

@@ -0,0 +1,173 @@
+<template>
+  <el-form
+    ref="formRef"
+    :model="formData"
+    label-width="100px"
+    v-loading="formLoading"
+  >
+    <el-row>
+      <el-col :span="12">
+        <el-form-item label="设备编码" prop="deviceName">
+          <el-input v-model="formData.failureCode" disabled />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="故障名称" prop="deviceName">
+          <el-input v-model="formData.deviceName" disabled />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="设备名称" prop="deviceName">
+          <el-input v-model="formData.deviceName" disabled />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="故障系统" prop="failureSystem">
+          <el-input v-model="formData.failureSystem" disabled />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="是否解决" prop="ifDeal">
+          <el-select v-model="formData.ifDeal" disabled>
+            <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="status">
+          <el-select v-model="formData.status" disabled>
+            <el-option
+              v-for="dict in getBoolDictOptions(DICT_TYPE.PMS_FAILURE_STATUS)"
+              :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="ifStop">
+          <el-select v-model="formData.ifStop" disabled>
+            <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
+            disabled
+            v-model="formData.failureTime"
+            type="date"
+            value-format="x"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="故障系统" prop="failureSystem">
+          <el-input v-model="formData.failureSystem"  disabled/>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="是否需要协助" prop="needHelp">
+          <el-select v-model="formData.needHelp" disabled>
+            <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-form-item label="故障影响" prop="failureInfluence">
+          <el-input
+            disabled
+            type="textarea"
+            v-model="formData.failureInfluence"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="解决办法" prop="solution">
+          <el-input v-model="formData.solution" type="textarea" disabled/>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="故障描述" prop="description">
+          <el-input type="textarea" v-model="formData.description" disabled/>
+        </el-form-item>
+      </el-col>
+      <el-col :span="24">
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="formData.remark" type="textarea" disabled/>
+        </el-form-item>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script setup lang="ts">
+import { DICT_TYPE, getBoolDictOptions } from '@/utils/dict'
+import {IotFailureReportApi} from "@/api/pms/failure";
+
+/** 故障上报 表单 */
+defineOptions({ name: 'IotFailureReportInfo' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const deviceLabel = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  failureCode: undefined,
+  failureName: undefined,
+  deviceId: undefined,
+  deviceName: undefined,
+  status: undefined,
+  ifStop: undefined,
+  failureTime: undefined,
+  failureInfluence: undefined,
+  failureSystem: undefined,
+  description: undefined,
+  pic: undefined,
+  ifDeal: undefined,
+  needHelp: undefined,
+  solution: undefined,
+  remark: undefined
+})
+onMounted(()=>{
+  const id = props.id || params.id
+  if (!id) {
+    message.warning('参数错误,故障上报不能为空!')
+    close()
+    return
+  }
+  await getFailureData(id)
+})
+const getFailureData = async (id) => {
+  formLoading.value = true
+  try {
+    formData.value = await IotFailureReportApi.getIotFailureReport(id)
+  } finally {
+    formLoading.value = false
+  }
+}
+</script>

+ 31 - 28
src/views/pms/failure/IotFailureReportForm.vue

@@ -18,23 +18,35 @@
         />
       </el-form-item>
         </el-col>
-      <el-col :span="12">
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="formData.status" placeholder="请选择">
-          <el-option
-            v-for="dict in getStrDictOptions(DICT_TYPE.PMS_FAILURE_STATUS)"
-            :key="dict.label"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
+        <el-col :span="12">
+          <el-form-item label="是否解决" prop="ifDeal">
+            <el-select v-model="formData.ifDeal" 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="status">-->
+<!--        <el-select v-model="formData.status" placeholder="请选择">-->
+<!--          <el-option-->
+<!--            v-for="dict in getBoolDictOptions(DICT_TYPE.PMS_FAILURE_STATUS)"-->
+<!--            :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="ifStop">
         <el-select v-model="formData.ifStop" placeholder="请选择">
           <el-option
-            v-for="dict in getStrDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
             :key="dict.label"
             :label="dict.label"
             :value="dict.value"
@@ -58,22 +70,10 @@
       </el-form-item>
         </el-col>
       <el-col :span="12">
-      <el-form-item label="是否解决" prop="ifDeal">
-        <el-select v-model="formData.ifDeal" placeholder="请选择">
-          <el-option
-            v-for="dict in getStrDictOptions(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="needHelp">
         <el-select v-model="formData.needHelp" placeholder="请选择">
           <el-option
-            v-for="dict in getStrDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
+            v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
             :key="dict.label"
             :label="dict.label"
             :value="dict.value"
@@ -101,7 +101,7 @@
             <el-input type="textarea" v-model="formData.description" />
           </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>
@@ -117,7 +117,7 @@
 </template>
 <script setup lang="ts">
 import { IotFailureReportApi, IotFailureReportVO } from '@/api/pms/failure'
-import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
+import {DICT_TYPE, getBoolDictOptions, getIntDictOptions, getStrDictOptions} from "@/utils/dict";
 import DeviceList from "@/views/pms/failure/DeviceList.vue";
 
 /** 故障上报 表单 */
@@ -136,6 +136,7 @@ const formData = ref({
   failureCode: undefined,
   failureName: undefined,
   deviceId: undefined,
+  deviceName: undefined,
   status: undefined,
   ifStop: undefined,
   failureTime: undefined,
@@ -162,8 +163,9 @@ const formRules = reactive({
   // failureCode: [{ required: true, message: '故障编码不能为空', trigger: 'blur' }],
   // failureName: [{ required: true, message: '故障名称不能为空', trigger: 'blur' }],
   deviceName: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
+  ifDeal: [{ required: true, message: '是否解决不能为空', trigger: 'blur' }],
   // deviceId: [{ required: true, message: '设备不能为空', trigger: 'blur' }],
-  status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
+  //status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
 })
 const formRef = ref() // 表单 Ref
 
@@ -174,6 +176,7 @@ const open = async (type: string, id?: number) => {
   formType.value = type
   resetForm()
   formData.value.deviceId = null;
+  formData.value.deviceName = null;
   // 修改时,设置数据
   if (id) {
     formLoading.value = true

+ 20 - 0
src/views/pms/failure/index.vue

@@ -176,6 +176,14 @@
           >
             删除
           </el-button>
+          <el-button
+            link
+            v-if="scope.row.needHelp"
+            type="warning"
+            @click="submitProcess(scope.row.id)"
+          >
+            提交审核
+          </el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -198,6 +206,7 @@ import download from '@/utils/download'
 import { IotFailureReportApi, IotFailureReportVO } from '@/api/pms/failure'
 import IotFailureReportForm from './IotFailureReportForm.vue'
 import {DICT_TYPE} from "@/utils/dict";
+import {Api, SupplierVO} from "@/api/supplier/base";
 
 /** 故障上报 列表 */
 defineOptions({ name: 'IotFailureReport' })
@@ -294,4 +303,15 @@ const handleExport = async () => {
 onMounted(() => {
   getList()
 })
+const submitProcess = async (row: IotFailureReportVO) => {
+  try {
+    // 提交审核的二次确认
+    await message.confirm(`您确定提交【${row.failureName}】审核吗?`)
+    // 提交审核
+    await IotFailureReportApi.submitForApproval(row.id)
+    message.success('提交审核成功!')
+    // 刷新列表
+    await getList()
+  } catch {}
+}
 </script>