| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <el-dialog v-model="dialogVisible" |
| | | title="ä¿å
»ä»»å¡è¯¦æ
" |
| | | width="600px" |
| | | :close-on-click-modal="false" |
| | | @close="handleClose"> |
| | | <el-form :model="formData" |
| | | label-width="120px" |
| | | class="detail-form"> |
| | | <el-form-item label="设å¤åç§°"> |
| | | <el-input v-model="formData.deviceName" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="è§æ ¼åå·"> |
| | | <el-input v-model="formData.deviceModel" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="计åä¿å
»æ¥æ"> |
| | | <el-input v-model="formData.maintenancePlanTime" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="å½å
¥äºº"> |
| | | <el-input v-model="formData.createUserName" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="å®é
ä¿å
»äºº"> |
| | | <el-input v-model="formData.maintenanceActuallyName" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="å®é
ä¿å
»æ¥æ"> |
| | | <el-input v-model="formData.maintenanceActuallyTime" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="ä¿å
ȍȾ"> |
| | | <el-input v-model="formData.maintenanceResult" |
| | | type="textarea" |
| | | :rows="3" |
| | | disabled /> |
| | | </el-form-item> |
| | | <el-form-item label="ç¶æ"> |
| | | <el-tag v-if="formData.status === 2" |
| | | type="danger">失败</el-tag> |
| | | <el-tag v-else-if="formData.status === 1" |
| | | type="success">å®ç»</el-tag> |
| | | <el-tag v-else-if="formData.status === 0" |
| | | type="warning">å¾
ä¿å
»</el-tag> |
| | | <span v-else>-</span> |
| | | </el-form-item> |
| | | <el-form-item label="å¾çå表"> |
| | | <div v-if="imageList.length > 0" |
| | | class="image-list"> |
| | | <el-image v-for="(image, index) in imagesFile" |
| | | :key="index" |
| | | :src="image.url" |
| | | fit="cover" |
| | | class="image-item" /> |
| | | </div> |
| | | <span v-else>-</span> |
| | | </el-form-item> |
| | | <el-form-item label="设å¤å¤ä»¶"> |
| | | <el-table v-if="sparePartsList.length > 0" |
| | | :data="sparePartsList" |
| | | border |
| | | style="width: 100%"> |
| | | <el-table-column prop="sparePartName" |
| | | label="å¤ä»¶åç§°" |
| | | width="120" /> |
| | | <el-table-column prop="quantity" |
| | | label="æ°é" |
| | | width="80" /> |
| | | <el-table-column prop="unit" |
| | | label="åä½" |
| | | width="80" /> |
| | | </el-table> |
| | | <span v-else>-</span> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="handleClose">å
³é</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, watch, computed } from "vue"; |
| | | import dayjs from "dayjs"; |
| | | |
| | | const props = defineProps({ |
| | | visible: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | default: () => ({}), |
| | | }, |
| | | }); |
| | | |
| | | const emit = defineEmits(["update:visible", "close"]); |
| | | |
| | | const dialogVisible = ref(false); |
| | | const formData = ref({ |
| | | deviceName: "", |
| | | deviceModel: "", |
| | | maintenancePlanTime: "", |
| | | createUserName: "", |
| | | maintenanceActuallyName: "", |
| | | maintenanceActuallyTime: "", |
| | | maintenanceResult: "", |
| | | status: "", |
| | | }); |
| | | const imageList = ref([]); |
| | | const sparePartsList = ref([]); |
| | | |
| | | // é¢è§å¾çå表 |
| | | const previewImageList = computed(() => { |
| | | return imageList.value.map(image => image.url || image.fileUrl); |
| | | }); |
| | | |
| | | watch( |
| | | () => props.visible, |
| | | newVal => { |
| | | dialogVisible.value = newVal; |
| | | } |
| | | ); |
| | | |
| | | // çå¬ dialogVisible ååï¼éç¥ç¶ç»ä»¶ |
| | | watch( |
| | | () => dialogVisible.value, |
| | | newVal => { |
| | | emit("update:visible", newVal); |
| | | } |
| | | ); |
| | | |
| | | watch( |
| | | () => props.row, |
| | | newRow => { |
| | | if (newRow) { |
| | | fillFormData(newRow); |
| | | } |
| | | }, |
| | | { deep: true } |
| | | ); |
| | | |
| | | const fillFormData = row => { |
| | | formData.value = { |
| | | deviceName: row.deviceName || "", |
| | | deviceModel: row.deviceModel || "", |
| | | maintenancePlanTime: row.maintenancePlanTime |
| | | ? dayjs(row.maintenancePlanTime).format("YYYY-MM-DD") |
| | | : "", |
| | | createUserName: row.createUserName || "", |
| | | maintenanceActuallyName: row.maintenanceActuallyName || "", |
| | | maintenanceActuallyTime: row.maintenanceActuallyTime |
| | | ? dayjs(row.maintenanceActuallyTime).format("YYYY-MM-DD HH:mm:ss") |
| | | : "", |
| | | maintenanceResult: row.maintenanceResult || "", |
| | | status: row.status || 0, |
| | | }; |
| | | |
| | | // å¤çå¾çå表 |
| | | if (row.imagesFile) { |
| | | if (Array.isArray(row.imagesFile)) { |
| | | imageList.value = row.imagesFile; |
| | | } else if (typeof row.imagesFile === "string") { |
| | | try { |
| | | imageList.value = JSON.parse(row.imagesFile); |
| | | } catch (error) { |
| | | imageList.value = []; |
| | | } |
| | | } else { |
| | | imageList.value = []; |
| | | } |
| | | } else { |
| | | imageList.value = []; |
| | | } |
| | | console.log(imageList.value, "imageList"); |
| | | |
| | | // å¤ç设å¤å¤ä»¶å表 |
| | | if (row.spareParts) { |
| | | if (Array.isArray(row.spareParts)) { |
| | | sparePartsList.value = row.spareParts; |
| | | } else if (typeof row.spareParts === "string") { |
| | | try { |
| | | sparePartsList.value = JSON.parse(row.spareParts); |
| | | } catch (error) { |
| | | sparePartsList.value = []; |
| | | } |
| | | } else { |
| | | sparePartsList.value = []; |
| | | } |
| | | } else { |
| | | sparePartsList.value = []; |
| | | } |
| | | }; |
| | | |
| | | const handleClose = () => { |
| | | dialogVisible.value = false; |
| | | emit("update:visible", false); |
| | | emit("close"); |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .detail-form { |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: center; |
| | | } |
| | | |
| | | .image-list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 10px; |
| | | margin-top: 5px; |
| | | } |
| | | |
| | | .image-item { |
| | | width: 100px; |
| | | height: 100px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | .el-table { |
| | | margin-top: 5px; |
| | | } |
| | | </style> |