Browse Source

拒检登记设备上报

xy 5 days ago
parent
commit
d583773e5f

+ 7 - 2
yudao-ui-admin-vue3/src/api/pressure2/equippipe/index.ts

@@ -178,6 +178,11 @@ export const EquipPipeApi = {
   },
 
   getPipeEquipmentDetailListByPipeEquipmentId: async (params: any) => {
-    return await request.get({ url: `pressure2/equip-pipe-detail/page`, params })
-  }
+    return await request.get({ url: `/pressure2/equip-pipe-detail/page`, params })
+  },
+
+  getPipeEquipmentDetailJoin: async (params: any) => {
+    return await request.get({ url: `/pressure2/equip-pipe-detail/page-join`, params })
+  },
+
 }

+ 141 - 34
yudao-ui-admin-vue3/src/views/pressure2/appointmentconfirmorderrefuseitem/components/EquipmentReportModel.vue

@@ -17,6 +17,16 @@
           :rules="searchFormRules"
           label-width="120px"
         >
+          <el-form-item label="设备类型" prop="equipMainType" required>
+            <el-select v-model="searchForm.equipMainType" placeholder="请选择设备类型">
+              <el-option
+                v-for="dict in equipMainTypeOptions"
+                :key="dict.value"
+                :label="dict.label"
+                :value="Number(dict.value)"
+              />
+            </el-select>
+          </el-form-item>
           <el-form-item label="设备注册代码" prop="equipCode">
             <el-input v-model.trim="searchForm.equipCode" placeholder="请输入设备注册代码" />
           </el-form-item>
@@ -37,7 +47,7 @@
             <span>{{ formData.equipDistrictName || '--' }}</span>
           </el-form-item>
           <el-form-item label="运行状态:">
-            <span>{{ getDictLabel(statusMap, formData.status) }}</span>
+            <span>{{ getDictLabel(currentStatusMap, formData.status) }}</span>
           </el-form-item>
           <el-form-item
             label="上报项目:"
@@ -46,7 +56,7 @@
           >
             <el-radio-group v-model="formData.checkType">
               <el-radio :value="100">定期检验</el-radio>
-              <el-radio :value="200">年度检查</el-radio>
+              <el-radio v-if="formData.equipMainType === PressureEquipMainType.PIPE" :value="200">年度检查</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="拒绝原因" prop="reasonDict" :rules="[{ required: true, message: '请选择拒绝原因', trigger: 'change' }]">
@@ -83,15 +93,29 @@
   </Dialog>
 </template>
 <script setup lang="ts">
-import { AppointmentConfirmOrderRefuseItemApi } from '@/api/pressure2/appointmentconfirmorderrefuseitem'
-import { getStrDictOptions, StringDictDataType } from '@/utils/dict'
-import { FormInstance } from 'element-plus'
-import {EquipBoilerApi} from "@/api/pressure2/equipboiler";
+import { getStrDictOptions, StringDictDataType, DICT_TYPE } from '@/utils/dict'
+import { FormInstance, ElMessageBox } from 'element-plus'
+import { EquipBoilerApi } from '@/api/pressure2/equipboiler'
+import { PipeEquipmentApi } from '@/api/pressure2/pipeequipment'
+import { EquipBoilerSchedulingApi } from '@/api/pressure2/equipboilerscheduling'
+import { EquipPipeSchedulingApi } from '@/api/pressure2/pipescheduling'
+import { PressureEquipMainType } from '@/utils/constants'
+import { useDictStore } from '@/store/modules/dict'
+import {EquipPipeApi} from "@/api/pressure2/equippipe";
 
 /** 约检确认单拒绝设备项目 表单 */
 defineOptions({ name: 'AppointmentConfirmOrderRefuseItemForm' })
 
-const statusMap = getStrDictOptions(DICT_TYPE.SYSTEM_EQUIP_CONTAINER_STATUS)
+const dictStore = useDictStore()
+const equipMainTypeOptions = dictStore.getDictMap[DICT_TYPE.PRESSURE2_EQUIP_MAIN_TYPE]
+
+const boilerStatusMap = getStrDictOptions(DICT_TYPE.SYSTEM_EQUIP_BOILER_STATUS)
+const pipeStatusMap = getStrDictOptions(DICT_TYPE.PIPE_USE_STATUS)
+
+// 当前设备类型对应的状态字典
+const currentStatusMap = computed(() =>
+  formData.value.equipMainType === PressureEquipMainType.BOILER ? boilerStatusMap : pipeStatusMap
+)
 
 const getDictLabel = (dictMap: StringDictDataType[], value: string) => {
   return dictMap.find((item) => item.value === value)?.label || '--'
@@ -103,15 +127,14 @@ const step = ref<'search' | 'report'>('search') // 弹窗的当前步骤:searc
 
 const dialogVisible = ref(false) // 弹窗的是否展示
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改
 // 搜索表单
 const searchFormRef = ref<FormInstance>() // 表单 Ref
 const searchForm = ref<Record<string, any>>({
-  pageNo: 1,
-  pageSize: 10,
+  equipMainType: undefined,
   equipCode: undefined
 })
 const searchFormRules = reactive({
+  equipMainType: [{ required: true, message: '请选择设备类型', trigger: 'change' }],
   equipCode: [{ required: true, message: '请输入设备注册代码', trigger: 'blur' }]
 })
 // 提交表单
@@ -145,7 +168,6 @@ const handleCancel = () => {
   } else if (step.value === 'report') {
     step.value = 'search'
     formRef.value?.resetFields()
-    console.log('formData:log', formData.value)
   }
 }
 
@@ -153,13 +175,67 @@ const handleSearch = async () => {
   const valid = await searchFormRef.value?.validate().catch(() => false)
   if (!valid) return
   formLoading.value = true
-  const res = await EquipBoilerApi.getEquipBoilerPage({ ...searchForm.value }).catch(() => null)
+
+  let res: any = null
+  const equipMainType = searchForm.value.equipMainType
+
+  if (equipMainType === PressureEquipMainType.BOILER) {
+    res = await EquipBoilerApi.getEquipBoilerPage({
+      equipCode: searchForm.value.equipCode,
+      pageNo: 1,
+      pageSize: 10
+    }).catch(() => null)
+  } else if (equipMainType === PressureEquipMainType.PIPE) {
+    res = await EquipPipeApi.getPipeEquipmentDetailJoin({
+      pipeRegCode: searchForm.value.equipCode
+    }).catch(() => null)
+  }
+
   formLoading.value = false
-  if (!res || res.total !== 1 || !Array.isArray(res?.list) || res?.list.length !== 1) {
-    message.error('查询失败,请检查设备注册代码重试')
-    return
+
+
+
+  if (equipMainType === PressureEquipMainType.BOILER) {
+
+    if (!res || res.total !== 1 || !Array.isArray(res?.list) || res?.list.length !== 1) {
+      message.error('查询失败,请检查设备注册代码重试')
+      return
+    }
+
+    const equip = res.list[0]
+
+    formData.value = {
+      id: equip.id,
+      equipName: equip.equipName || equip.name || '',
+      equipCode: equip.equipCode || '',
+      unitName: equip.unitName || '',
+      equipDistrictName: equip.unitAddress || '',
+      status: equip.useStatus,
+      equipMainType,
+      checkType: undefined
+    }
+  } else if (equipMainType === PressureEquipMainType.PIPE) {
+
+    if (!res || !Array.isArray(res) || res.length !== 1) {
+      message.error('查询失败,请检查设备注册代码重试')
+      return
+    }
+
+    const equip = res[0]
+
+    // 管道明细字段映射
+    formData.value = {
+      id: equip.id,
+      equipName: equip.pipeName || equip.name || '',
+      equipCode: equip.pipeRegCode || equip.regCode || '',
+      unitName: equip.unitName || '',
+      equipDistrictName: equip.unitAddress || '',
+      status: equip.useStatus,
+      equipMainType,
+      checkType: undefined
+    }
   }
-  formData.value = res?.list?.[0] || {}
+
   step.value = 'report'
 }
 
@@ -167,28 +243,56 @@ const handleSubmitForm = async () => {
   // 校验表单
   const valid = await formRef.value?.validate().catch(() => null)
   if (!valid) return
-  // 提交请求
+
   formLoading.value = true
-  const params = {
-    taskList: [
-      {
-        equipIds: formData.value.id,
-        type: formData.value.checkType
-      }
-    ],
+
+  const params: any = {
+    checkType: formData.value.checkType,
     reasonDict: formData.value.reasonDict,
     reason: formData.value.reason
   }
-  AppointmentConfirmOrderRefuseItemApi.equipmentRefuseItem(params)
-    .then((res) => {
-      if (!res) {
-        message.error('提交失败,请重试')
-        return
+
+  let apiCall: Promise<any>
+
+  if (formData.value.equipMainType === PressureEquipMainType.BOILER) {
+    apiCall = EquipBoilerSchedulingApi.batchEquipmentReport({
+      ...params,
+      equipIds: [formData.value.id]
+    })
+  } else {
+    apiCall = EquipPipeSchedulingApi.batchEquipmentReport({
+      ...params,
+      equipDetailIds: [formData.value.id]
+    })
+  }
+
+  apiCall
+    .then((res: any) => {
+      if (Array.isArray(res) && res.length > 0) {
+        const successList = res.filter((item: any) => item.success)
+        const failList = res.filter((item: any) => !item.success)
+        const successNum = successList.length
+        const failNum = failList.length
+
+        let messageHtml = ''
+        if (successNum > 0) {
+          const successMsg = successList.map((item: any) => `<div style="margin-left: 24px;">设备代码「${item.equipCode || item.pipeRegCode}」${item.message || '上报成功'}</div>`).join('')
+          messageHtml += `<div style="margin-bottom: 12px;"><span style="color: #67c23a;">✓</span> <span style="color: #67c23a; font-weight: bold;">${successNum}台设备上报成功:</span>${successMsg}</div>`
+        }
+        if (failNum > 0) {
+          const failMsg = failList.map((item: any) => `<div style="margin-left: 24px;">设备代码「${item.equipCode || item.pipeRegCode}」${item.message || '上报失败'}</div>`).join('')
+          messageHtml += `<div><span style="color: #f56c6c;">✗</span> <span style="color: #f56c6c; font-weight: bold;">${failNum}台设备上报失败:</span>${failMsg}</div>`
+        }
+
+        ElMessageBox.alert(messageHtml, '设备上报结果', {
+          dangerouslyUseHTMLString: true,
+          confirmButtonText: '确定',
+          callback: () => {
+            dialogVisible.value = false
+            emit('success')
+          }
+        })
       }
-      message.success('提交成功')
-      // 发送操作成功的事件
-      dialogVisible.value = false
-      emit('success')
     })
     .finally(() => {
       formLoading.value = false
@@ -197,7 +301,10 @@ const handleSubmitForm = async () => {
 
 /** 重置表单 */
 const resetForm = () => {
-  searchForm.value = {}
+  searchForm.value = {
+    equipMainType: undefined,
+    equipCode: undefined
+  }
   formData.value = {}
   searchFormRef.value?.resetFields()
   formRef.value?.clearValidate()