From 3453ba7e5243022ad4388da1515dc75ad8d81f94 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期日, 17 五月 2026 15:00:23 +0800
Subject: [PATCH] 近期调试

---
 src/views/business/ethicalReview/ethicalReviewInfo.vue |  489 +++++++++++++++++++++++++----------------------------
 1 files changed, 230 insertions(+), 259 deletions(-)

diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 1c4b908..c783e46 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -234,14 +234,6 @@
           >
             鍙戦�佷富濮斾笓瀹�
           </el-button>
-          <el-button
-            size="mini"
-            type="warning"
-            @click="handleBatchSend"
-            :disabled="!canBatchSend"
-          >
-            鎵归噺鍙戦��
-          </el-button>
         </div>
       </div>
 
@@ -373,6 +365,14 @@
           </template>
         </el-table-column>
 
+        <el-table-column label="鎴鏃堕棿" width="160" align="center">
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.endTime ? formatDateTime(scope.row.endTime) : "鏈缃�"
+            }}</span>
+          </template>
+        </el-table-column>
+
         <el-table-column label="瀹℃煡鏃堕棿" width="160" align="center">
           <template slot-scope="scope">
             <span>{{
@@ -392,7 +392,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column label="鎿嶄綔" width="280" align="center" fixed="right">
+        <el-table-column label="鎿嶄綔" width="180" align="center" fixed="right">
           <template slot-scope="scope">
             <el-button
               size="mini"
@@ -417,27 +417,11 @@
               }}
             </el-button>
             <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-edit"
-              @click="handleEditExpertReview(scope.row)"
-              :disabled="!['2', '3'].includes(scope.row.receiveStatus)"
-            >
-              缂栬緫
-            </el-button>
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-view"
-              @click="handleViewExpertReview(scope.row)"
-            >
-              璇︽儏
-            </el-button>
-            <el-button
+              v-if="scope.row.receiveStatus == 0"
               size="mini"
               type="text"
               icon="el-icon-delete"
-              @click="handleDeleteExpertReview(scope.$index)"
+              @click="handleDeleteExpertReview(scope.row, scope.$index)"
               style="color: #f56c6c;"
             >
               鍒犻櫎
@@ -482,7 +466,7 @@
       </div>
 
       <el-table
-        :data="expertList"
+        :data="filteredExpertList"
         v-loading="expertListLoading"
         style="width: 100%"
         max-height="400"
@@ -534,7 +518,7 @@
           :page-sizes="[10, 20, 50, 100]"
           :page-size="expertPage.pageSize"
           layout="total, sizes, prev, pager, next, jumper"
-          :total="expertTotal"
+          :total="filteredExpertTotal"
         ></el-pagination>
       </div>
 
@@ -554,6 +538,7 @@
       :title="sendDialogTitle"
       :visible.sync="sendDialogVisible"
       width="500px"
+      @close="handleSendDialogClose"
     >
       <el-form :model="sendForm" ref="sendForm" label-width="100px">
         <el-form-item label="涓撳绫诲瀷" prop="expertType">
@@ -589,6 +574,16 @@
             style="width: 100%"
             :disabled="sendForm.expertType === 'chief'"
           />
+          <div v-if="sendForm.expertType !== 'chief'" style="margin-top: 5px;">
+            <el-button-group>
+              <el-button size="mini" @click="setEndTime(0.5)"
+                >鍗婂皬鏃跺悗</el-button
+              >
+              <el-button size="mini" @click="setEndTime(1)">涓�灏忔椂鍚�</el-button>
+              <el-button size="mini" @click="setEndTime(2)">涓ゅ皬鏃跺悗</el-button>
+              <el-button size="mini" @click="setEndTime(24)">涓�澶╁悗</el-button>
+            </el-button-group>
+          </div>
           <div
             v-if="sendForm.expertType === 'chief'"
             style="font-size: 12px; color: #999; margin-top: 5px;"
@@ -610,36 +605,23 @@
           </el-select>
         </el-form-item>
 
-        <el-form-item
-          label="閫夋嫨涓撳"
-          prop="expertIds"
-          v-if="sendForm.expertType == 'normal'"
-        >
-          <el-select
-            v-model="sendForm.expertIds"
-            multiple
-            placeholder="璇烽�夋嫨涓撳"
-            style="width: 100%"
-          >
-            <el-option
-              v-for="expert in availableNormalExperts"
-              :key="getExpertKey(expert)"
-              :label="
-                `${expert.expertname}${
-                  expert.expertNo ? '(' + expert.expertNo + ')' : ''
-                }`
-              "
-              :value="getExpertKey(expert)"
-            />
-          </el-select>
+        <el-form-item label="鍙戦�佹爣棰�" prop="title" required>
+          <el-input v-model="sendForm.title" placeholder="璇疯緭鍏ュ彂閫佹爣棰�" />
         </el-form-item>
 
-        <el-form-item label="鍙戦�佸唴瀹�" prop="content">
+        <el-form-item label="鍙戦�佸唴瀹�" prop="content" required>
           <el-input
             type="textarea"
             :rows="4"
             v-model="sendForm.content"
             placeholder="璇疯緭鍏ュ彂閫佺粰涓撳鐨勫鏌ュ唴瀹硅鏄�"
+          />
+        </el-form-item>
+
+        <el-form-item label="璺宠浆閾炬帴" prop="url">
+          <el-input
+            v-model="sendForm.url"
+            placeholder="璇疯緭鍏ヨ烦杞摼鎺ワ紙鍙�夛級"
           />
         </el-form-item>
       </el-form>
@@ -781,7 +763,8 @@
   ethicalreviewedit,
   ethicalreviewadd,
   ethicalreviewInfo,
-  ethicalreExpertTotal
+  ethicalreExpertTotal,
+  sendNotification
 } from "@/api/businessApi";
 import { listExternalperson } from "@/api/project/externalperson";
 import CaseBasicInfo from "@/components/CaseBasicInfo";
@@ -917,7 +900,9 @@
         startTime: "",
         endTime: "",
         sendType: "0",
-        content: ""
+        title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
+        content: "",
+        url: ""
       },
 
       // 涓撳鍘嗗彶瀹℃壒鎯呭喌
@@ -926,8 +911,8 @@
       expertHistoryData: null,
       currentExpertInfo: {},
 
-      // 鍐呴儴鐘舵�佽窡韪�
-      internalExpertList: []
+      // 褰撳墠鍙戦�佺殑涓撳
+      currentSendExperts: []
     };
   },
   computed: {
@@ -1028,12 +1013,43 @@
       return this.availableChiefExperts.length > 0 && normalApprovedCount >= 12;
     },
 
-    // 鏄惁鍙互鎵归噺鍙戦��
-    canBatchSend() {
-      return (
-        this.availableNormalExperts.length > 0 ||
-        this.availableChiefExperts.length > 0
-      );
+    // 宸插瓨鍦ㄧ殑涓撳缂栧彿鍒楄〃
+    existingExpertNos() {
+      return this.ethicalreviewopinionsList
+        .map(expert => expert.expertNo)
+        .filter(no => no);
+    },
+
+    // 宸插瓨鍦ㄧ殑涓撳濮撳悕鍒楄〃
+    existingExpertNames() {
+      return this.ethicalreviewopinionsList
+        .map(expert => expert.expertname)
+        .filter(name => name);
+    },
+
+    // 杩囨护鍚庣殑涓撳鍒楄〃锛堟帓闄ゅ凡瀛樺湪鐨勪笓瀹讹級
+    filteredExpertList() {
+      if (!this.expertList.length) return [];
+
+      return this.expertList.filter(expert => {
+        // 濡傛灉涓撳鏈夌紪鍙凤紝妫�鏌ョ紪鍙锋槸鍚﹀凡瀛樺湪
+        if (expert.userno && this.existingExpertNos.includes(expert.userno)) {
+          return false;
+        }
+        // 濡傛灉涓撳鏈夊鍚嶏紝妫�鏌ュ鍚嶆槸鍚﹀凡瀛樺湪
+        if (
+          expert.username &&
+          this.existingExpertNames.includes(expert.username)
+        ) {
+          return false;
+        }
+        return true;
+      });
+    },
+
+    // 杩囨护鍚庣殑涓撳鎬绘暟
+    filteredExpertTotal() {
+      return this.filteredExpertList.length;
     },
 
     // 褰撳墠鐢ㄦ埛淇℃伅
@@ -1057,8 +1073,6 @@
     "form.ethicalreviewopinionsList": {
       handler(newVal) {
         console.log("涓撳鍒楄〃鍙樺寲:", newVal);
-        // 寮哄埗瑙﹀彂璁$畻灞炴�ф洿鏂�
-        this.$forceUpdate();
       },
       deep: true
     }
@@ -1371,7 +1385,20 @@
       if (this.sendForm.expertType === "chief") {
         // 涓诲涓撳鏃犻渶璁剧疆鎴鏃堕棿
         this.sendForm.endTime = "";
+      } else {
+        // 鏅�氫笓瀹堕噸缃埅姝㈡椂闂翠负褰撳墠鏃堕棿
+        this.sendForm.endTime = "";
       }
+    },
+
+    // 璁剧疆鎴鏃堕棿蹇嵎閿�
+    setEndTime(hours) {
+      const now = new Date();
+      const endTime = new Date(now.getTime() + hours * 60 * 60 * 1000);
+      this.sendForm.endTime = endTime
+        .toISOString()
+        .replace("T", " ")
+        .substring(0, 19);
     },
 
     // 淇濆瓨淇℃伅
@@ -1379,6 +1406,10 @@
       this.$refs.form.validate(async valid => {
         if (valid) {
           this.saveLoading = true;
+          // 淇濆瓨娓呯┖id渚夸簬鍚庣鏁翠綋鍒犻櫎鏂板
+          this.form.ethicalreviewopinionsList.forEach(item=>{
+            item.id=null
+          })
           try {
             const submitData = {
               ...this.form,
@@ -1495,9 +1526,6 @@
             if (response.code === 200) {
               this.$message.success("瀹℃煡宸蹭腑姝紝鎵�鏈変笓瀹剁姸鎬佸凡鏇存柊");
               this.form.status = "2";
-
-              // 瑙﹀彂璁$畻灞炴�ф洿鏂�
-              this.$forceUpdate();
             } else {
               this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
             }
@@ -1575,8 +1603,8 @@
 
         const response = await listExternalperson(params);
         if (response.code === 200) {
-          this.expertList = response.rows;
-          this.expertTotal = response.total;
+          this.expertList = response.rows || [];
+          this.expertTotal = response.total || 0;
         } else {
           this.$message.error(
             "鍔犺浇涓撳鍒楄〃澶辫触锛�" + (response.msg || "鏈煡閿欒")
@@ -1621,21 +1649,8 @@
         this.$set(this.form, "ethicalreviewopinionsList", []);
       }
 
-      // 杩囨护宸插瓨鍦ㄧ殑涓撳
-      const existingExpertIds = this.form.ethicalreviewopinionsList.map(
-        expert => expert.expertNo || expert.expertname
-      );
-      const newExperts = this.selectedExperts.filter(expert => {
-        return !existingExpertIds.includes(expert.userno || expert.username);
-      });
-
-      if (newExperts.length === 0) {
-        this.$message.warning("閫夋嫨鐨勪笓瀹跺凡瀛樺湪");
-        return;
-      }
-
       // 娣诲姞涓撳鍒板垪琛�
-      newExperts.forEach(expert => {
+      this.selectedExperts.forEach(expert => {
         // 鍒ゆ柇鏄惁涓轰富浠诲鍛�
         const isChief = this.getIsChiefExpert(expert);
 
@@ -1649,7 +1664,7 @@
           expertType: isChief ? "1" : "0", // 涓讳换濮斿憳璁剧疆涓轰富濮斾笓瀹�
           deptName: expert.unitname || "",
           title: expert.title || "",
-          telephone: expert.telephone || "",
+          deptname: expert.telephone || "",
           receiveStatus: "0", // 寰呮帴鏀�
           expertconclusion: "",
           expertopinion: "",
@@ -1672,22 +1687,11 @@
           delFlag: "0"
         };
 
-        // 浣跨敤Vue.set纭繚鍝嶅簲寮�
+        // 浣跨敤push娣诲姞锛岀‘淇濆搷搴斿紡
         this.form.ethicalreviewopinionsList.push(expertReview);
       });
 
-      // 瑙﹀彂璁$畻灞炴�ф洿鏂�
-      this.$forceUpdate();
-
-      console.log(
-        "娣诲姞涓撳鍚庯紝褰撳墠涓撳鍒楄〃:",
-        this.form.ethicalreviewopinionsList
-      );
-      console.log("鏅�氫笓瀹舵暟閲�:", this.normalExpertsCount);
-      console.log("涓诲涓撳鏁伴噺:", this.chiefExpertsCount);
-      console.log("鍙彂閫佹櫘閫氫笓瀹�:", this.availableNormalExperts);
-
-      this.$message.success(`鎴愬姛娣诲姞 ${newExperts.length} 浣嶄笓瀹禶);
+      this.$message.success(`鎴愬姛娣诲姞 ${this.selectedExperts.length} 浣嶄笓瀹禶);
       this.expertDialogVisible = false;
       this.selectedExperts = [];
     },
@@ -1715,9 +1719,7 @@
 
     // 鍙戦�佺粰鏅�氫笓瀹�
     handleSendToNormalExperts() {
-      this.sendForm.expertIds = this.availableNormalExperts.map(expert =>
-        this.getExpertKey(expert)
-      );
+      this.currentSendExperts = this.availableNormalExperts;
       this.sendForm.expertType = "normal";
       this.sendForm.endTime = ""; // 閲嶇疆鎴鏃堕棿
       this.sendDialogVisible = true;
@@ -1725,34 +1727,33 @@
 
     // 鍙戦�佺粰涓诲涓撳
     handleSendToChiefExpert() {
-      this.sendForm.expertIds = this.availableChiefExperts.map(expert =>
-        this.getExpertKey(expert)
-      );
+      this.currentSendExperts = this.availableChiefExperts;
       this.sendForm.expertType = "chief";
       this.sendForm.endTime = ""; // 涓诲涓撳鏃犻渶鎴鏃堕棿
       this.sendDialogVisible = true;
     },
 
-    // 鎵归噺鍙戦��
-    handleBatchSend() {
-      const allAvailableExperts = [
-        ...this.availableNormalExperts,
-        ...this.availableChiefExperts
-      ];
-      this.sendForm.expertIds = allAvailableExperts.map(expert =>
-        this.getExpertKey(expert)
-      );
-      this.sendForm.expertType = "batch";
-      this.sendForm.endTime = ""; // 閲嶇疆鎴鏃堕棿
-      this.sendDialogVisible = true;
-    },
-
     // 鍙戦�佺粰鍗曚釜涓撳
     handleSendToExpert(expert) {
-      this.sendForm.expertIds = [this.getExpertKey(expert)];
+      this.currentSendExperts = [expert];
       this.sendForm.expertType = expert.expertType === "1" ? "chief" : "normal";
       this.sendForm.endTime = expert.expertType === "1" ? "" : ""; // 涓诲涓撳鏃犻渶鎴鏃堕棿
       this.sendDialogVisible = true;
+    },
+
+    // 鍙戦�佸璇濇鍏抽棴
+    handleSendDialogClose() {
+      this.sendForm = {
+        expertType: "normal",
+        expertIds: [],
+        startTime: "",
+        endTime: "",
+        sendType: "0",
+        title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
+        content: "",
+        url: ""
+      };
+      this.currentSendExperts = [];
     },
 
     // 纭鍙戦��
@@ -1773,47 +1774,110 @@
         return;
       }
 
-      if (this.sendForm.expertIds.length === 0) {
-        this.$message.warning("璇烽�夋嫨瑕佸彂閫佺殑涓撳");
+      if (!this.sendForm.title) {
+        this.$message.warning("璇疯緭鍏ュ彂閫佹爣棰�");
+        return;
+      }
+
+      if (!this.sendForm.content) {
+        this.$message.warning("璇疯緭鍏ュ彂閫佸唴瀹�");
+        return;
+      }
+
+      if (this.currentSendExperts.length === 0) {
+        this.$message.warning("娌℃湁鎵惧埌鍙彂閫佺殑涓撳");
         return;
       }
 
       this.sending = true;
       try {
-        // 妯℃嫙鍙戦�佽繃绋�
-        await new Promise(resolve => setTimeout(resolve, 1000));
+        // 鍙戦�佺粰姣忎釜涓撳
+        const sendPromises = this.currentSendExperts.map(async expert => {
+          try {
+            // 鏋勫缓鍙戦�佹暟鎹�
+            const sendData = {
+              number: expert.deptname || "", // 鐢ㄦ埛鎵嬫満鍙�
+              title: this.sendForm.title,
+              url: this.sendForm.url || "",
 
-        // 鏇存柊涓撳鐘舵��
-        this.sendForm.expertIds.forEach(expertKey => {
-          const index = this.form.ethicalreviewopinionsList.findIndex(
-            expert => this.getExpertKey(expert) === expertKey
-          );
-          if (index !== -1) {
-            this.form.ethicalreviewopinionsList[index].receiveStatus = "2"; // 宸叉帴鏀�
-            this.form.ethicalreviewopinionsList[
-              index
-            ].startTime = this.sendForm.startTime;
-            this.form.ethicalreviewopinionsList[
-              index
-            ].endTime = this.sendForm.endTime;
-            this.form.ethicalreviewopinionsList[
-              index
-            ].sendType = this.sendForm.sendType;
-            this.form.ethicalreviewopinionsList[index].updateTime = new Date()
-              .toISOString()
-              .replace("T", " ")
-              .substring(0, 19);
+              createTime: new Date()
+                .toISOString()
+                .replace("T", " ")
+                .substring(0, 19)
+            };
 
-            // 浣跨敤Vue.set纭繚鍝嶅簲寮�
-            this.$set(
-              this.form.ethicalreviewopinionsList,
-              index,
-              this.form.ethicalreviewopinionsList[index]
-            );
+            // 璋冪敤鍙戦�侀�氱煡鎺ュ彛
+            const response = await sendNotification(sendData);
+
+            if (response.code === 200) {
+              // 鏇存柊涓撳鐘舵��
+              const index = this.form.ethicalreviewopinionsList.findIndex(
+                e =>
+                  e.expertNo === expert.expertNo ||
+                  e.expertname === expert.expertname
+              );
+
+              if (index !== -1) {
+                this.form.ethicalreviewopinionsList[index].receiveStatus = "1"; // 宸叉帴鏀�
+                this.form.ethicalreviewopinionsList[
+                  index
+                ].startTime = this.sendForm.startTime;
+                this.form.ethicalreviewopinionsList[
+                  index
+                ].endTime = this.sendForm.endTime;
+                this.form.ethicalreviewopinionsList[
+                  index
+                ].sendType = this.sendForm.sendType;
+                this.form.ethicalreviewopinionsList[
+                  index
+                ].updateTime = new Date()
+                  .toISOString()
+                  .replace("T", " ")
+                  .substring(0, 19);
+
+                // 浣跨敤Vue.set纭繚鍝嶅簲寮忔洿鏂�
+                this.$set(
+                  this.form.ethicalreviewopinionsList,
+                  index,
+                  this.form.ethicalreviewopinionsList[index]
+                );
+              }
+
+              return { success: true, expert: expert.expertname };
+            } else {
+              return {
+                success: false,
+                expert: expert.expertname,
+                error: response.msg
+              };
+            }
+          } catch (error) {
+            console.error(`鍙戦�佺粰涓撳 ${expert.expertname} 澶辫触:`, error);
+            return {
+              success: false,
+              expert: expert.expertname,
+              error: error.message
+            };
           }
         });
 
-        this.$message.success("鍙戦�佹垚鍔�");
+        // 绛夊緟鎵�鏈夊彂閫佸畬鎴�
+        const results = await Promise.all(sendPromises);
+
+        // 缁熻鍙戦�佺粨鏋�
+        const successCount = results.filter(r => r.success).length;
+        const failCount = results.filter(r => !r.success).length;
+
+        if (failCount === 0) {
+          this.$message.success(`鎴愬姛鍙戦�佺粰 ${successCount} 浣嶄笓瀹禶);
+        } else if (successCount > 0) {
+          this.$message.warning(
+            `鎴愬姛鍙戦�佺粰 ${successCount} 浣嶄笓瀹讹紝澶辫触 ${failCount} 浣峘
+          );
+        } else {
+          this.$message.error("鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇�");
+        }
+
         this.sendDialogVisible = false;
         this.sendForm = {
           expertType: "normal",
@@ -1821,11 +1885,11 @@
           startTime: "",
           endTime: "",
           sendType: "0",
-          content: ""
+          title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
+          content: "",
+          url: ""
         };
-
-        // 瑙﹀彂璁$畻灞炴�ф洿鏂�
-        this.$forceUpdate();
+        this.currentSendExperts = [];
       } catch (error) {
         console.error("鍙戦�佸け璐�:", error);
         this.$message.error("鍙戦�佸け璐ワ紝璇烽噸璇�");
@@ -1834,48 +1898,23 @@
       }
     },
 
-    // 缂栬緫涓撳瀹℃煡
-    handleEditExpertReview(expert) {
-      this.$prompt("璇疯緭鍏ュ鏌ユ剰瑙�", "缂栬緫涓撳瀹℃煡", {
+    // 鍒犻櫎涓撳瀹℃煡
+    handleDeleteExpertReview(expert, index) {
+      this.$confirm("纭畾瑕佸垹闄よ涓撳鐨勫鏌ヨ褰曞悧锛�", "鎻愮ず", {
         confirmButtonText: "纭畾",
         cancelButtonText: "鍙栨秷",
-        inputValue: expert.expertopinion || "",
-        inputPlaceholder: "璇疯緭鍏ュ鏌ユ剰瑙�",
-        inputValidator: value => {
-          if (!value || value.trim() === "") {
-            return "瀹℃煡鎰忚涓嶈兘涓虹┖";
-          }
-          return true;
-        }
+        type: "warning"
       })
-        .then(({ value }) => {
-          const index = this.form.ethicalreviewopinionsList.findIndex(
-            e => e.id === expert.id || e.expertNo === expert.expertNo
-          );
-          if (index !== -1) {
-            this.form.ethicalreviewopinionsList[index].expertopinion = value;
-            this.form.ethicalreviewopinionsList[index].updateTime = new Date()
-              .toISOString()
-              .replace("T", " ")
-              .substring(0, 19);
-
-            // 浣跨敤Vue.set纭繚鍝嶅簲寮�
-            this.$set(
-              this.form.ethicalreviewopinionsList,
-              index,
-              this.form.ethicalreviewopinionsList[index]
-            );
-
-            this.$message.success("瀹℃煡鎰忚宸叉洿鏂�");
-          }
+        .then(() => {
+          // 浠庢暟缁勪腑鍒犻櫎涓撳
+          this.form.ethicalreviewopinionsList.splice(index, 1);
+          this.$message.success("涓撳瀹℃煡璁板綍宸插垹闄�");
         })
         .catch(() => {});
     },
 
     // 鏌ョ湅涓撳鍘嗗彶瀹℃壒鎯呭喌
     async handleViewExpertHistory(expert) {
-      console.log(12);
-
       if (!expert.expertNo) {
         this.$message.warning("璇ヤ笓瀹舵病鏈夌紪鍙凤紝鏃犳硶鏌ヨ鍘嗗彶瀹℃壒鎯呭喌");
         return;
@@ -1889,16 +1928,14 @@
         const params = {
           expertNo: expert.expertNo
         };
-        console.log(11);
 
         const response = await ethicalreExpertTotal(params);
-        console.log(response);
 
-        if (response) {
-          this.expertHistoryData = response[0];
+        if (response && response.code === 200) {
+          this.expertHistoryData = response.data || response[0] || null;
         } else {
           this.$message.error(
-            "鏌ヨ涓撳鍘嗗彶瀹℃壒鎯呭喌澶辫触锛�" + (response.msg || "鏈煡閿欒")
+            "鏌ヨ涓撳鍘嗗彶瀹℃壒鎯呭喌澶辫触锛�" + (response?.msg || "鏈煡閿欒")
           );
           this.expertHistoryData = null;
         }
@@ -1911,78 +1948,12 @@
       }
     },
 
-    // 鏌ョ湅涓撳瀹℃煡璇︽儏
-    handleViewExpertReview(expert) {
-      this.$alert(
-        `
-        <div style="line-height: 1.6;">
-          <p><strong>涓撳濮撳悕锛�</strong>${expert.expertname}</p>
-          <p><strong>涓撳缂栧彿锛�</strong>${expert.expertNo || "-"}</p>
-          <p><strong>涓撳绫诲瀷锛�</strong>${this.getExpertTypeText(
-            expert.expertType
-          )}</p>
-          <p><strong>绉戝鍚嶇О锛�</strong>${expert.deptName || "-"}</p>
-          <p><strong>鑱岀О锛�</strong>${expert.title || "-"}</p>
-          <p><strong>鑱旂郴鐢佃瘽锛�</strong>${expert.telephone || "-"}</p>
-          <p><strong>瀹℃煡鐘舵�侊細</strong>${this.getReviewStatusText(
-            expert.receiveStatus
-          )}</p>
-          <p><strong>涓撳缁撹锛�</strong>${
-            expert.expertconclusion
-              ? this.getConclusionText(expert.expertconclusion)
-              : "鏈彁浜�"
-          }</p>
-          <p><strong>瀹℃煡鎰忚锛�</strong>${expert.expertopinion || "鏃�"}</p>
-          <p><strong>缁撹椤哄簭锛�</strong>${expert.conclusionorder || "-"}</p>
-          <p><strong>瀹℃煡鏃堕棿锛�</strong>${expert.conclusiontime || "鏈鏌�"}</p>
-          <p><strong>鍙戦�佹椂闂达細</strong>${expert.startTime || "鏈彂閫�"}</p>
-          <p><strong>鎴鏃堕棿锛�</strong>${expert.endTime || "-"}</p>
-          <p><strong>鍙戦�佹柟寮忥細</strong>${
-            expert.sendType
-              ? expert.sendType === "0"
-                ? "绯荤粺鍙戦��"
-                : expert.sendType === "1"
-                ? "閭欢鍙戦��"
-                : expert.sendType === "2"
-                ? "鐭俊鍙戦��"
-                : "鍏朵粬鏂瑰紡"
-              : "-"
-          }</p>
-        </div>
-      `,
-        "涓撳瀹℃煡璇︽儏",
-        {
-          dangerouslyUseHTMLString: true,
-          customClass: "expert-review-detail-dialog",
-          showConfirmButton: false,
-          showCancelButton: true,
-          cancelButtonText: "鍏抽棴"
-        }
-      );
-    },
-
-    // 鍒犻櫎涓撳瀹℃煡
-    handleDeleteExpertReview(index) {
-      this.$confirm("纭畾瑕佸垹闄よ涓撳鐨勫鏌ヨ褰曞悧锛�", "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          this.form.ethicalreviewopinionsList.splice(index, 1);
-
-          // 瑙﹀彂璁$畻灞炴�ф洿鏂�
-          this.$forceUpdate();
-
-          this.$message.success("涓撳瀹℃煡璁板綍宸插垹闄�");
-        })
-        .catch(() => {});
-    },
-
     // 鏃堕棿鏍煎紡鍖�
     parseTime(time) {
       if (!time) return "";
       const date = new Date(time);
+      if (isNaN(date.getTime())) return time;
+
       return `${date.getFullYear()}-${(date.getMonth() + 1)
         .toString()
         .padStart(2, "0")}-${date

--
Gitblit v1.9.3