Parcourir la source

设备台账调整

lipenghui il y a 4 mois
Parent
commit
d94e7119c4

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

+ 16 - 8
src/views/pms/maintain/IotMaintain.vue

@@ -3,7 +3,7 @@
     <el-form
       ref="formRef"
       :model="formData"
-      :rules="formData.type === 'in' ? formRules : outFormRules"
+      :rules="formRules"
       v-loading="formLoading"
       style="margin-right: 4em; margin-left: 0.5em; margin-top: 1em"
       label-width="130px"
@@ -106,8 +106,8 @@
               <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-col :span="8" v-if="formData.type === 'out'">
+            <el-form-item label="供应商" prop="supplier" :rules="supplierRules">
               <el-select
                 v-model="formData.supplier"
                 placeholder="请输入供应商"
@@ -116,8 +116,8 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="维修费用" v-if="formData.type === 'out'" prop="maintainFee">
+          <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"
@@ -128,8 +128,8 @@
               />
             </el-form-item>
           </el-col>
-          <el-col :span="8">
-            <el-form-item label="委外相关附件" v-if="formData.type === 'out'" prop="outFile">
+          <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>
@@ -294,6 +294,14 @@ const formData = ref({
   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' }],
@@ -473,7 +481,7 @@ onMounted(async () => {
     formData.value = iotMaintain
     formData.value.status = undefined
   } else {
-    //formData.value.type = 'in'
+    formData.value.type = 'in'
     formType.value = 'create'
     const { wsCache } = useCache()
     const userInfo = wsCache.get(CACHE_KEY.USER)