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