From aaf2e90e8f2967dde6f3bd5351523234881e2c98 Mon Sep 17 00:00:00 2001
From: ZN <zhang_12370@163.com>
Date: 星期二, 03 三月 2026 14:57:36 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_KTHG' into dev_KTHG
---
src/views/equipmentManagement/upkeep/Form/DetailDialog.vue | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 219 insertions(+), 0 deletions(-)
diff --git a/src/views/equipmentManagement/upkeep/Form/DetailDialog.vue b/src/views/equipmentManagement/upkeep/Form/DetailDialog.vue
new file mode 100644
index 0000000..2c56dd4
--- /dev/null
+++ b/src/views/equipmentManagement/upkeep/Form/DetailDialog.vue
@@ -0,0 +1,219 @@
+<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="璁惧澶囦欢">
+ <span>{{formData.sparePartsNames}}</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>
+ <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: "",
+ sparePartsNames: "",
+ });
+ 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,
+ sparePartsNames: row.sparePartsNames || "",
+ };
+
+ // 澶勭悊鍥剧墖鍒楄〃
+ 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>
\ No newline at end of file
--
Gitblit v1.9.3