From 45680b99ccdfb0d323088c57c237e0bc714a8e0b Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 13 三月 2026 09:21:32 +0800
Subject: [PATCH] 青岛opo维护

---
 src/views/business/assess/components/OrganAssessmentForm.vue |  255 ++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 182 insertions(+), 73 deletions(-)

diff --git a/src/views/business/assess/components/OrganAssessmentForm.vue b/src/views/business/assess/components/OrganAssessmentForm.vue
index 49ce6cd..a3be60e 100644
--- a/src/views/business/assess/components/OrganAssessmentForm.vue
+++ b/src/views/business/assess/components/OrganAssessmentForm.vue
@@ -1,8 +1,8 @@
 <template>
   <div class="organ-assessment-form">
-    <el-form :model="assessmentData" label-width="120px">
+    <el-form :model="formData" label-width="120px">
       <el-form-item label="鍔熻兘鐘舵��">
-        <el-select v-model="assessmentData.functionStatus" :disabled="readonly">
+        <el-select v-model="formData.functionStatus">
           <el-option label="姝e父" value="1" />
           <el-option label="杞诲害寮傚父" value="2" />
           <el-option label="閲嶅害寮傚父" value="3" />
@@ -13,9 +13,8 @@
       <el-form-item label="璇勪及鎰忚">
         <el-input
           type="textarea"
-          v-model="assessmentData.assessmentOpinion"
+          v-model="formData.assessmentOpinion"
           :rows="4"
-          :disabled="readonly"
           placeholder="璇疯緭鍏ヨ瘎浼版剰瑙�"
         />
       </el-form-item>
@@ -47,16 +46,13 @@
           <!-- 闄勪欢鍒楄〃 -->
           <div
             class="attachment-list"
-            v-if="
-              assessmentData.attachments &&
-                assessmentData.attachments.length > 0
-            "
+            v-if="formData.attachments && formData.attachments.length > 0"
           >
             <div class="list-title">
-              宸蹭笂浼犻檮浠� ({{ assessmentData.attachments.length }})
+              宸蹭笂浼犻檮浠� ({{ formData.attachments.length }})
             </div>
             <el-table
-              :data="assessmentData.attachments"
+              :data="formData.attachments"
               style="width: 100%"
               size="small"
             >
@@ -122,14 +118,15 @@
       </el-form-item>
 
       <el-form-item v-if="!readonly">
-        <el-button type="primary" @click="handleSave">淇濆瓨璇勪及</el-button>
+        <el-button type="primary" @click="handleSave">璇勪及瀹屾垚</el-button>
         <el-button @click="handleCancel">鍙栨秷</el-button>
         <el-button
-          type="success"
-          @click="handleAddAssessment"
-          icon="el-icon-plus"
+          type="danger"
+          size="small"
+          @click="handleDelete"
+          icon="el-icon-delete"
         >
-          鏂板璇勪及璁板綍
+          鍒犻櫎姝よ瘎浼�
         </el-button>
       </el-form-item>
     </el-form>
@@ -160,14 +157,6 @@
       type: Object,
       default: () => ({})
     },
-    assessmentData: {
-      type: Object,
-      default: () => ({
-        functionStatus: "",
-        assessmentOpinion: "",
-        attachments: []
-      })
-    },
     assessmentIndex: {
       type: Number,
       default: 0
@@ -175,73 +164,184 @@
     readonly: {
       type: Boolean,
       default: false
+    },
+    // 娣诲姞鐢ㄦ埛淇℃伅props
+    currentUser: {
+      type: Object,
+      default: () => ({
+        name: "璇勪及鍛�"
+      })
     }
   },
   data() {
     return {
+      // 琛ㄥ崟鏁版嵁
+      formData: {
+        functionStatus: "",
+        assessmentOpinion: "",
+        attachments: []
+      },
       // 棰勮鐩稿叧
       previewVisible: false,
       currentPreviewFile: null,
-
       // 闄勪欢鐩稿叧閰嶇疆
       attachmentLimit: 10,
       attachmentAccept:
         ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
-      attachmentFileList: []
+      attachmentFileList: [],
+      // 鍘熷璇勪及鏁版嵁
+      currentAssessment: null
     };
   },
   watch: {
     organData: {
-      handler(newVal, oldVal) {
-        // 鍙湁褰撻檮浠舵暟鎹湡姝e彂鐢熷彉鍖栨椂鎵嶅垵濮嬪寲
-        if (
-          !oldVal ||
-          !oldVal.attachments ||
-          JSON.stringify(newVal.attachments) !==
-            JSON.stringify(oldVal.attachments)
-        ) {
-          this.initAttachmentList();
-        }
+      handler() {
+        this.initData();
       },
-      immediate: true,
+      deep: true,
+      immediate: true
+    },
+    // 娣卞害鐩戝惉琛ㄥ崟鏁版嵁鍙樺寲
+    formData: {
+      handler(newVal) {
+        this.$emit("update-assessment", {
+          organData: this.organData,
+          assessmentData: newVal,
+          assessmentIndex: this.assessmentIndex
+        });
+      },
       deep: true
     }
   },
+  created() {
+    this.initData();
+  },
   methods: {
-    /** 鍒濆鍖栭檮浠跺垪琛� */
-    initAttachmentList() {
-      if (this.organData.attachments && this.organData.attachments.length > 0) {
-        this.assessmentData.attachments = [...this.organData.attachments];
-        this.attachmentFileList = this.organData.attachments.map(item => ({
-          uid: item.id || Math.random(),
-          name: item.fileName,
-          url: item.path || item.fileUrl,
-          status: "success"
-        }));
-      } else {
-        this.assessmentData.attachments = [];
+    // 鍒濆鍖栨暟鎹�
+    initData() {
+      if (!this.organData || !this.organData.assesscontent) {
+        this.formData = {
+          functionStatus: "",
+          assessmentOpinion: "",
+          attachments: []
+        };
         this.attachmentFileList = [];
+        return;
+      }
+
+      try {
+        const assessData =
+          typeof this.organData.assesscontent === "string"
+            ? JSON.parse(this.organData.assesscontent)
+            : this.organData.assesscontent;
+
+        if (
+          Array.isArray(assessData) &&
+          assessData.length > this.assessmentIndex
+        ) {
+          this.currentAssessment = assessData[this.assessmentIndex];
+
+          // 娣辨嫹璐濇暟鎹紝閬垮厤淇敼鍘熷鏁版嵁
+          const assessmentCopy = JSON.parse(
+            JSON.stringify(this.currentAssessment)
+          );
+
+          this.formData = {
+            functionStatus: assessmentCopy.functionStatus || "",
+            assessmentOpinion: assessmentCopy.assessmentOpinion || "",
+            attachments: Array.isArray(assessmentCopy.attachments)
+              ? [...assessmentCopy.attachments]
+              : []
+          };
+
+          // 鍒濆鍖栭檮浠舵枃浠跺垪琛�
+          this.attachmentFileList = this.formData.attachments.map(item => ({
+            uid: item.id || Math.random(),
+            name: item.fileName,
+            fileSize: item.fileSize,
+            url: item.path || item.fileUrl,
+            uploadTime: item.uploadTime,
+            status: "success"
+          }));
+        } else {
+          console.log("璇勪及绱㈠紩瓒呭嚭鑼冨洿鎴栨暟鎹负绌�");
+          this.resetForm();
+        }
+      } catch (error) {
+        console.error("鍒濆鍖栨暟鎹け璐�:", error);
+        this.resetForm();
       }
     },
-    handleSave() {
-      const saveData = {
-        organData: this.organData,
-        assessmentData: this.assessmentData,
-        assessmentIndex: this.assessmentIndex
+
+    // 閲嶇疆琛ㄥ崟
+    resetForm() {
+      this.formData = {
+        functionStatus: "",
+        assessmentOpinion: "",
+        attachments: []
       };
-      this.$emit("save", saveData);
+      this.attachmentFileList = [];
+    },
+
+    // 淇濆瓨璇勪及
+    handleSave() {
+      // 楠岃瘉蹇呰瀛楁
+      if (!this.formData.functionStatus) {
+        this.$message.warning("璇烽�夋嫨鍔熻兘鐘舵��");
+        return;
+      }
+
+      if (!this.formData.assessmentOpinion) {
+        this.$message.warning("璇疯緭鍏ヨ瘎浼版剰瑙�");
+        return;
+      }
+
+      // 鍑嗗淇濆瓨鐨勬暟鎹�
+      const saveData = {
+        functionStatus: this.formData.functionStatus,
+        assessmentOpinion: this.formData.assessmentOpinion,
+        attachments: Array.isArray(this.formData.attachments)
+          ? [...this.formData.attachments]
+          : []
+      };
+
+      // 娣诲姞璇勪及鑰呭拰璇勪及鏃堕棿
+      const assessmentData = {
+        ...saveData,
+        assessor: this.currentUser.name,
+        assessmentTime: new Date().toISOString()
+      };
+
+      console.log("鍙戦�佷繚瀛樿姹�:", assessmentData);
+
+      this.$emit("save-assessment", {
+        organData: this.organData,
+        assessmentData: assessmentData,
+        assessmentIndex: this.assessmentIndex
+      });
     },
 
     handleCancel() {
       this.$emit("cancel");
     },
 
-    handleAddAssessment() {
-      this.$emit("add-assessment", {
-        organData: this.organData,
-        currentIndex: this.assessmentIndex
-      });
+    handleDelete() {
+      this.$confirm("纭鍒犻櫎姝よ瘎浼拌褰曞悧锛�", "纭鍒犻櫎", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning"
+      })
+        .then(() => {
+          this.$emit("delete-assessment", {
+            organData: this.organData,
+            assessmentIndex: this.assessmentIndex
+          });
+        })
+        .catch(() => {
+          this.$message.info("宸插彇娑堝垹闄�");
+        });
     },
+
     /** 闄勪欢鍙樺寲澶勭悊 */
     handleAttachmentChange(fileList) {
       this.attachmentFileList = fileList;
@@ -250,42 +350,51 @@
     /** 闄勪欢绉婚櫎澶勭悊 */
     handleAttachmentRemove(file) {
       if (file.url) {
-        const index = this.assessmentData.attachments.findIndex(
+        const index = this.formData.attachments.findIndex(
           item => item.path === file.url || item.fileUrl === file.url
         );
         if (index > -1) {
-          this.assessmentData.attachments.splice(index, 1);
+          this.formData.attachments.splice(index, 1);
+          this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
         }
       }
     },
 
     /** 鎵嬪姩鍒犻櫎闄勪欢 */
     handleRemoveAttachment(index) {
-      this.assessmentData.attachments.splice(index, 1);
+      this.formData.attachments.splice(index, 1);
       this.attachmentFileList.splice(index, 1);
       this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
     },
 
     /** 涓婁紶鎴愬姛澶勭悊 */
     handleUploadSuccess({ file, fileList, response }) {
+      console.log(response,'response');
+
       if (response.code === 200) {
+        console.log(response, "涓婁紶鏁版嵁");
+
         const attachmentObj = {
-          id:
-            response.data.fileId ||
-            Math.random()
-              .toString(36)
-              .substr(2),
           fileName: file.name,
-          path: response.data.fileUrl || file.url,
-          fileUrl: response.data.fileUrl || file.url,
+          path: response.fileUrl || file.url,
+          fileUrl: response.fileUrl || file.url,
           fileType: this.getFileExtension(file.name),
           fileSize: file.size,
-          uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
-          assessmentType: this.assessmentType,
-          organType: this.organData.organType
+          uploadTime: dayjs().format("YYYY-MM-DD HH:mm:ss")
         };
 
-        this.assessmentData.attachments.push(attachmentObj);
+        console.log("娣诲姞涓婁紶鐨勯檮浠�:", attachmentObj);
+
+        // 纭繚 attachments 鏄暟缁�
+        if (!Array.isArray(this.formData.attachments)) {
+          this.formData.attachments = [];
+        }
+
+        this.formData.attachments.push(attachmentObj);
+
+        // 鏇存柊鏂囦欢鍒楄〃
+        this.attachmentFileList = fileList;
+
         this.$message.success("鏂囦欢涓婁紶鎴愬姛");
       }
     },

--
Gitblit v1.9.3