|
|
@@ -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()
|