Răsfoiți Sursa

证书检测

yanghao 4 zile în urmă
părinte
comite
2637cbf601

+ 49 - 32
src/views/pms/qhse/emergencyDrill/bookCheck/EmergencyBookForm.vue

@@ -8,11 +8,11 @@
       v-loading="formLoading">
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="关联设备" prop="deviceId">
+          <el-form-item label="关联物资" prop="emergencyId">
             <el-input
-              v-model="formData.deviceName"
+              v-model="formData.emergencyName"
               disabled
-              placeholder="请选择关联设备"
+              placeholder="请选择关联物资"
               style="width: 100%">
               <template #append>
                 <el-link @click="selectDevice" :underline="false">选择</el-link>
@@ -67,7 +67,7 @@
               :props="defaultProps"
               node-key="id"
               filterable
-              :check-strictly="false"
+              :check-strictly="deptType !== '3'"
               clearable
               placeholder="请选择部门"
               style="width: 100%" />
@@ -110,18 +110,18 @@
   <Dialog title="选择设备" v-model="deviceDialogVisible" width="70%">
     <ContentWrap>
       <el-form class="-mb-15px" :model="deviceQueryParams" :inline="true">
-        <el-form-item label="设备名称" prop="deviceName">
+        <el-form-item label="物资名称" prop="emergencyName">
           <el-input
-            v-model="deviceQueryParams.deviceName"
+            v-model="deviceQueryParams.emergencyName"
             placeholder="请输入设备名称"
             clearable
             @keyup.enter="handleDeviceQuery"
             class="!w-200px" />
         </el-form-item>
-        <el-form-item label="设备编码" prop="deviceCode">
+        <el-form-item label="责任人" prop="dutyPerson">
           <el-input
-            v-model="deviceQueryParams.deviceCode"
-            placeholder="请输入设备编码"
+            v-model="deviceQueryParams.dutyPerson"
+            placeholder="请输入责任人"
             clearable
             @keyup.enter="handleDeviceQuery"
             class="!w-200px" />
@@ -158,12 +158,26 @@
             {{ scope.$index + 1 }}
           </template>
         </zm-table-column>
-        <zm-table-column label="设备编码" align="center" prop="deviceCode" min-width="140" />
-        <zm-table-column label="设备名称" align="center" prop="deviceName" min-width="160" />
-        <zm-table-column label="所在部门" align="center" prop="deptName" min-width="140" />
-        <zm-table-column label="设备状态" align="center" prop="deviceStatusName" min-width="120" />
-        <zm-table-column label="位置" align="center" prop="location" min-width="140" />
-        <zm-table-column label="备注" align="center" prop="remark" min-width="160" />
+        <zm-table-column label="应急物资名称" align="center" prop="emergencyName" min-width="140" />
+        <zm-table-column label="应急物资单位" align="center" prop="emergencyUnit" min-width="120" />
+        <zm-table-column label="数量" align="center" prop="emergencyNumber" width="90" />
+        <zm-table-column label="存放位置" align="center" prop="emergencyLocation" min-width="140" />
+        <zm-table-column label="责任人" align="center" prop="dutyPerson" width="100" />
+        <zm-table-column label="联系电话" align="center" prop="mobile" min-width="120" />
+        <!-- <zm-table-column label="部门名称" align="center" prop="deptName" min-width="140" /> -->
+        <zm-table-column
+          label="备注"
+          align="center"
+          prop="remark"
+          min-width="160"
+          show-overflow-tooltip />
+        <zm-table-column label="附件" align="center" prop="file" min-width="90">
+          <template #default="scope">
+            <el-button v-if="scope.row.file" link type="primary" @click="viewFile(scope.row.file)">
+              查看
+            </el-button>
+          </template>
+        </zm-table-column>
       </zm-table>
 
       <Pagination
@@ -181,12 +195,12 @@
 </template>
 
 <script setup lang="ts">
-import { EmergencyDrillCertApi } from '@/api/pms/qhse/index'
-import { IotDeviceApi } from '@/api/pms/device'
+import { EmergencyDrillCertApi, EmergencyDrillApi } from '@/api/pms/qhse/index'
 import { defaultProps, handleTree } from '@/utils/tree'
 import { onMounted, reactive, ref } from 'vue'
 import * as DeptApi from '@/api/system/dept'
 import { useUserStore } from '@/store/modules/user'
+import { getUserProfile } from '@/api/system/user/profile'
 defineOptions({ name: 'QHSEDeviceCertForm' })
 
 const { t } = useI18n()
@@ -201,8 +215,8 @@ const deptList = ref<Tree[]>([])
 
 const createDefaultFormData = () => ({
   id: undefined,
-  deviceId: undefined,
-  deviceName: '',
+  emergencyId: undefined,
+  emergencyName: '',
   deptId: undefined,
   certNo: '',
   certOrg: '',
@@ -215,7 +229,7 @@ const createDefaultFormData = () => ({
 const formData = ref(createDefaultFormData())
 
 const formRules = reactive({
-  deviceId: [{ required: true, message: '关联设备不能为空', trigger: 'blur' }],
+  emergencyId: [{ required: true, message: '关联设备不能为空', trigger: 'blur' }],
   certNo: [{ required: true, message: '证书编号不能为空', trigger: 'blur' }],
   certOrg: [{ required: true, message: '检测单位不能为空', trigger: 'blur' }],
   certTime: [{ required: true, message: '检测日期不能为空', trigger: 'blur' }],
@@ -289,14 +303,14 @@ const selectedDevice = ref<any>(null)
 const deviceQueryParams = reactive({
   pageNo: 1,
   pageSize: 10,
-  deviceName: undefined as string | undefined,
-  deviceCode: undefined as string | undefined
+  emergencyName: undefined as string | undefined,
+  dutyPerson: undefined as string | undefined
 })
 
 const getDeviceList = async () => {
   deviceLoading.value = true
   try {
-    const data = await IotDeviceApi.getIotDevicePage(deviceQueryParams)
+    const data = await EmergencyDrillApi.getEmergencyDrillList(deviceQueryParams)
     deviceList.value = data.list
     deviceTotal.value = data.total
 
@@ -315,8 +329,8 @@ const handleDeviceQuery = () => {
 }
 
 const resetDeviceQuery = () => {
-  deviceQueryParams.deviceName = undefined
-  deviceQueryParams.deviceCode = undefined
+  deviceQueryParams.emergencyName = undefined
+  deviceQueryParams.dutyPerson = undefined
   handleDeviceQuery()
 }
 
@@ -327,12 +341,12 @@ const handleDeviceRadioChange = (row: any) => {
 
 const selectDevice = () => {
   deviceDialogVisible.value = true
-  selectedDeviceId.value = formData.value.deviceId as number | undefined
+  selectedDeviceId.value = formData.value.emergencyId as number | undefined
   selectedDevice.value =
-    selectedDeviceId.value && formData.value.deviceName
+    selectedDeviceId.value && formData.value.emergencyName
       ? {
-          id: formData.value.deviceId,
-          deviceName: formData.value.deviceName,
+          id: formData.value.emergencyId,
+          emergencyName: formData.value.emergencyName,
           deptId: formData.value.deptId
         }
       : null
@@ -351,13 +365,16 @@ const confirmSelectDevice = () => {
     return
   }
 
-  formData.value.deviceId = selectedDevice.value.id
-  formData.value.deviceName = selectedDevice.value.deviceName
+  formData.value.emergencyId = selectedDevice.value.id
+  formData.value.emergencyName = selectedDevice.value.emergencyName
   formData.value.deptId = selectedDevice.value.deptId
   closeDeviceDialog()
 }
-
+let deptType = ref('')
 onMounted(async () => {
   deptList.value = handleTree(await DeptApi.getSimpleDeptList())
+
+  const users = await getUserProfile()
+  deptType.value = users.dept.type
 })
 </script>

+ 48 - 30
src/views/pms/qhse/emergencyDrill/bookCheck/index.vue

@@ -24,10 +24,10 @@
               clearable
               class="!w-150px" />
           </el-form-item>
-          <el-form-item label="责任人" prop="dutyPerson">
+          <el-form-item label="证书编号" prop="certNo">
             <el-input
-              v-model="queryParams.dutyPerson"
-              placeholder="请输入责任人"
+              v-model="queryParams.certNo"
+              placeholder="请输入证书编号"
               clearable
               @keyup.enter="handleQuery"
               class="!w-150px" />
@@ -74,31 +74,21 @@
                   {{ scope.$index + 1 }}
                 </template>
               </zm-table-column>
-              <zm-table-column
-                label="应急物资名称"
-                align="center"
-                prop="emergencyName"
-                min-width="140" />
-              <zm-table-column
-                label="应急物资单位"
-                align="center"
-                prop="emergencyUnit"
-                min-width="120" />
-              <zm-table-column label="数量" align="center" prop="emergencyNumber" width="90" />
-              <zm-table-column
-                label="存放位置"
-                align="center"
-                prop="emergencyLocation"
-                min-width="140" />
-              <zm-table-column label="责任人" align="center" prop="dutyPerson" width="100" />
-              <zm-table-column label="联系电话" align="center" prop="mobile" min-width="120" />
-              <!-- <zm-table-column label="部门名称" align="center" prop="deptName" min-width="140" /> -->
-              <zm-table-column
-                label="备注"
-                align="center"
-                prop="remark"
-                min-width="160"
-                show-overflow-tooltip />
+              <zm-table-column label="物资名称" align="center" prop="emergencyName" />
+              <zm-table-column label="证书编号" align="center" prop="certNo" />
+              <zm-table-column label="检测日期" align="center" prop="certTime" width="140">
+                <template #default="scope">
+                  <span class="iot-md-date">{{ formatDateCorrectly(scope.row.certTime) }}</span>
+                </template>
+              </zm-table-column>
+              <zm-table-column label="检测单位" align="center" prop="certOrg" />
+              <zm-table-column label="有效期" align="center" prop="certExpire" width="140">
+                <template #default="scope">
+                  <span class="iot-md-date">{{ formatDateCorrectly(scope.row.certExpire) }}</span>
+                </template>
+              </zm-table-column>
+
+              <zm-table-column label="备注" align="center" prop="remark" show-overflow-tooltip />
               <zm-table-column label="附件" align="center" prop="file" min-width="90">
                 <template #default="scope">
                   <el-button
@@ -113,9 +103,9 @@
               <zm-table-column label="操作" align="center" width="140" fixed="right" action>
                 <template #default="scope">
                   <el-button
-                    v-hasPermi="['rq:qhse-emergency-cert:update']"
                     link
                     type="primary"
+                    v-hasPermi="['rq:qhse-emergency-cert:update']"
                     @click="openForm('update', scope.row.id)">
                     编辑
                   </el-button>
@@ -175,6 +165,7 @@ import EmergencyBookForm from './EmergencyBookForm.vue'
 import DeptTreeSelect from '@/components/DeptTreeSelect/index.vue'
 import { useTableComponents } from '@/components/ZmTable/useTableComponents'
 import { useUserStore } from '@/store/modules/user'
+import { formatDate } from '@/utils/formatTime'
 
 const { ZmTable, ZmTableColumn } = useTableComponents()
 
@@ -193,7 +184,7 @@ const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
   emergencyName: undefined,
-  dutyPerson: undefined,
+  certNo: undefined,
   deptId: undefined
 })
 const queryFormRef = ref()
@@ -210,6 +201,33 @@ const getList = async () => {
   }
 }
 
+const formatDateCorrectly = (timestamp) => {
+  if (!timestamp) return ''
+
+  // 确保处理各种可能的时间戳格式
+  let time = Number(timestamp)
+
+  // 处理不同时间戳格式
+  if (time < 10000000000) {
+    time = time * 1000
+  }
+
+  // 检查是否为有效日期
+  const date = new Date(time)
+  if (isNaN(date.getTime())) {
+    return ''
+  }
+
+  // 验证日期合理性(例如:不能是过于久远的日期)
+  const minValidYear = 1900
+  if (date.getFullYear() < minValidYear) {
+    console.warn('Invalid date detected:', timestamp)
+    return ''
+  }
+
+  return formatDate(time).substring(0, 10)
+}
+
 const handleQuery = () => {
   queryParams.pageNo = 1
   getList()