From 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 27 二月 2026 15:48:37 +0800
Subject: [PATCH] 青岛维护提交

---
 src/views/business/assess/assessInfo.vue |  953 +++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 629 insertions(+), 324 deletions(-)

diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 330cff8..e1d7ddf 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -17,44 +17,38 @@
           assessmentData.caseNo
         }}</el-descriptions-item>
         <el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
-          assessmentData.donorName
+          assessmentData.name || assessmentData.donorName
         }}</el-descriptions-item>
         <el-descriptions-item label="鎬у埆">
-          <dict-tag :options="genderOptions" :value="assessmentData.gender" />
+          <dict-tag
+            :options="dict.type.sys_user_sex"
+            :value="assessmentData.sex"
+          />
         </el-descriptions-item>
         <el-descriptions-item label="骞撮緞"
           >{{ assessmentData.age }}宀�</el-descriptions-item
         >
         <el-descriptions-item label="琛�鍨�">
-          <dict-tag
-            :options="bloodTypeOptions"
-            :value="assessmentData.bloodType"
-          />
+          {{ assessmentData.bloodtype }}
         </el-descriptions-item>
         <el-descriptions-item label="璇佷欢鍙风爜">{{
-          assessmentData.idCardNo
+          assessmentData.idcardno
         }}</el-descriptions-item>
         <el-descriptions-item label="鐤剧梾璇婃柇">{{
-          assessmentData.diagnosis
+          assessmentData.diagnosisname
         }}</el-descriptions-item>
         <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
-          assessmentData.hospitalName
+          assessmentData.treatmenthospitalname
         }}</el-descriptions-item>
-        <el-descriptions-item label="涓绘不鍖荤敓">{{
-          assessmentData.doctorName
+        <el-descriptions-item label="鍗忚皟鍛�">{{
+          assessmentData.coordinatorName
         }}</el-descriptions-item>
-        <el-descriptions-item label="鐢宠璇勪及鏃堕棿">{{
-          assessmentData.applyTime
+        <el-descriptions-item label="璇勪及鏃堕棿">{{
+          assessmentData.assessTime
         }}</el-descriptions-item>
-        <el-descriptions-item label="璇勪及绫诲瀷">
-          <dict-tag
-            :options="assessmentTypeOptions"
-            :value="assessmentData.assessmentType"
-          />
-        </el-descriptions-item>
         <el-descriptions-item label="璇勪及鐘舵��">
-          <el-tag :type="statusFilter(assessmentData.assessmentStatus)">
-            {{ statusTextFilter(assessmentData.assessmentStatus) }}
+          <el-tag :type="statusFilter(assessmentData.assessState)">
+            {{ statusTextFilter(assessmentData.assessState) }}
           </el-tag>
         </el-descriptions-item>
       </el-descriptions>
@@ -69,6 +63,7 @@
           type="primary"
           size="mini"
           @click="handleCompleteAssessment"
+          :loading="saveLoading"
         >
           纭瀹屾垚璇勪及
         </el-button>
@@ -76,9 +71,15 @@
           褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
         </span>
       </div>
-      <el-row>
-        <el-form-item label-width="100px" label="璇勪及鍣ㄥ畼">
-          <el-checkbox-group v-model="organdecision">
+
+      <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
+      <el-form>
+        <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+          <el-checkbox-group
+            v-model="organdecision"
+            @change="handleOrganDecisionChange"
+            :disabled="!isEdit"
+          >
             <el-checkbox
               v-for="item in organselection"
               :key="item"
@@ -88,22 +89,27 @@
           </el-checkbox-group>
           <el-input
             v-if="organdecision.includes('鍏朵粬')"
-            v-model="assessmentData.organdecisionOther"
+            v-model="organdecisionOther"
             placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
             style="margin-top: 10px; width: 300px;"
+            :readonly="!isEdit"
+            @input="handleOtherDecisionInput"
           ></el-input>
         </el-form-item>
-      </el-row>
+      </el-form>
+
+      <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
       <el-table
-        :data="organAssessmentList"
+        :data="filteredOrganAssessmentList"
         v-loading="assessmentLoading"
         style="width: 100%"
         :row-class-name="getRowClassName"
         :expand-row-keys="expandedRowKeys"
         @expand-change="handleExpandChange"
-        row-key="organType"
+        row-key="organno"
+        empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
       >
-        <el-table-column type="expand" width="60">
+        <el-table-column type="expand">
           <template slot-scope="scope">
             <div class="organ-expand-content" v-if="scope.row.expanded">
               <el-tabs
@@ -123,13 +129,15 @@
                     :assessment-data="assessment"
                     :assessment-index="index"
                     :readonly="!canAssessOrgan(scope.row)"
-                    @save="handleSaveOrganAssessment"
                     @add-assessment="handleAddAssessment"
                   />
                 </el-tab-pane>
 
                 <!-- 娣诲姞璇勪及鎸夐挳 -->
-                <el-tab-pane name="add" v-if="canAssessOrgan(scope.row)">
+                <el-tab-pane
+                  name="add"
+                  v-if="canAssessOrgan(scope.row) && isEdit"
+                >
                   <template slot="label">
                     <el-button
                       type="text"
@@ -150,10 +158,10 @@
                   <div class="assessment-summary">
                     <el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
                       <el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
-                        scope.row.organName
+                        scope.row.organname
                       }}</el-descriptions-item>
-                      <el-descriptions-item label="璇勪及绉戝">{{
-                        scope.row.department
+                      <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
+                        scope.row.gainhospitalname
                       }}</el-descriptions-item>
                       <el-descriptions-item label="璇勪及娆℃暟" :span="2">
                         <el-tag type="info"
@@ -165,34 +173,58 @@
                       </el-descriptions-item>
                     </el-descriptions>
 
-                    <!-- 闄勪欢姹囨�� -->
-                    <el-card header="鎵�鏈夎瘎浼伴檮浠�" style="margin-top: 20px;">
-                      <el-table
-                        :data="getAllAttachments(scope.row)"
-                        size="small"
-                        empty-text="鏆傛棤闄勪欢"
-                      >
-                        <el-table-column label="闄勪欢鍚嶇О" prop="fileName" />
-                        <el-table-column label="璇勪及闃舵" width="120">
-                          <template slot-scope="{ row }">
-                            绗瑊{ row.assessmentIndex + 1 }}娆¤瘎浼�
-                          </template>
-                        </el-table-column>
-                        <el-table-column
-                          label="涓婁紶鏃堕棿"
-                          prop="uploadTime"
-                          width="180"
-                        />
-                        <el-table-column label="鎿嶄綔" width="120">
-                          <template slot-scope="{ row }">
-                            <el-button
-                              type="text"
-                              @click="handlePreviewAttachment(row)"
-                              >棰勮</el-button
-                            >
-                          </template>
-                        </el-table-column>
-                      </el-table>
+                    <!-- 璇勪及璇︽儏姹囨�� -->
+                    <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
+                      <el-descriptions :column="1" border>
+                        <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsybefore === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                          >
+                            {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+                          <el-tag
+                            :type="
+                              scope.row.isbiopsyafter === '1'
+                                ? 'success'
+                                : 'info'
+                            "
+                          >
+                            {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+                          <el-tag
+                            :type="
+                              scope.row.ismarginalorgan === '1'
+                                ? 'warning'
+                                : 'info'
+                            "
+                          >
+                            {{
+                              scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                        <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+                          <el-tag
+                            :type="
+                              scope.row.ispathogenpositive === '1'
+                                ? 'danger'
+                                : 'info'
+                            "
+                          >
+                            {{
+                              scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+                            }}
+                          </el-tag>
+                        </el-descriptions-item>
+                      </el-descriptions>
                     </el-card>
                   </div>
                 </el-tab-pane>
@@ -201,28 +233,16 @@
           </template>
         </el-table-column>
 
-        <el-table-column
-          label="鍣ㄥ畼绫诲瀷"
-          align="center"
-          prop="organType"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <dict-tag
-              :options="organTypeOptions"
-              :value="scope.row.organType"
-            />
-          </template>
-        </el-table-column>
+        <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname" />
+
+        <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
 
         <el-table-column
-          label="璇勪及绉戝"
+          label="鑾峰彇鏈烘瀯"
           align="center"
-          prop="department"
-          width="120"
+          prop="gainhospitalname"
+          show-overflow-tooltip
         />
-
-        <el-table-column label="璇勪及浜哄憳" align="center" prop="assessor" />
 
         <!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
         <el-table-column
@@ -247,10 +267,16 @@
         <el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
           <template slot-scope="scope">
             <el-tag
-              :type="scope.row.assessmentStatus === '1' ? 'success' : 'primary'"
+              :type="
+                getOrganOverallStatus(scope.row) === 'completed'
+                  ? 'success'
+                  : getOrganOverallStatus(scope.row) === 'assessing'
+                  ? 'primary'
+                  : 'warning'
+              "
               size="small"
             >
-              {{ scope.row.assessmentStatus === "1" ? "宸插畬鎴�" : "璇勪及涓�" }}
+              {{ getOrganOverallStatusText(scope.row) }}
             </el-tag>
           </template>
         </el-table-column>
@@ -263,13 +289,23 @@
         >
           <template slot-scope="scope">
             <el-button
-              v-if="canAssessOrgan(scope.row)"
+              v-if="canAssessOrgan(scope.row) && isEdit"
               size="mini"
               type="text"
               @click="handleToggleExpand(scope.row)"
             >
               {{
-                expandedRowKeys.includes(scope.row.organType) ? "鏀惰捣" : "璇︽儏"
+                expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
+              }}
+            </el-button>
+            <el-button
+              v-else-if="!isEdit"
+              size="mini"
+              type="text"
+              @click="handleToggleExpand(scope.row)"
+            >
+              {{
+                expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
               }}
             </el-button>
             <el-button v-else size="mini" type="text" disabled
@@ -279,6 +315,12 @@
         </el-table-column>
       </el-table>
     </el-card>
+
+    <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
+    <div class="footer-actions" v-if="isEdit">
+      <el-button type="primary" @click="handleSaveAll" :loading="saveLoading">淇濆瓨璇勪及琛�</el-button>
+      <el-button @click="handleCancel">鍙栨秷</el-button>
+    </div>
 
     <!-- 鏂囦欢棰勮寮圭獥 -->
     <FilePreviewDialog
@@ -291,61 +333,38 @@
 
 <script>
 import {
-  getAssessment,
-  updateOrganAssessment,
-  completeAssessment
-} from "./mockAssessmentApi";
+  evaluateBaseInfolist,
+  assessedit,
+  assessAdd
+} from "@/api/businessApi/index";
 import FilePreviewDialog from "@/components/FilePreviewDialog";
 import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
 
 export default {
   name: "AssessmentDetail",
   components: { OrganAssessmentForm, FilePreviewDialog },
+  dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
   data() {
     return {
-      assessmentId: undefined,
-      assessmentData: {},
-      organAssessmentList: [],
-      attachmentList: [],
+      // 鏄惁缂栬緫妯″紡
+      isEdit: false,
+      // 鍔犺浇鐘舵��
       assessmentLoading: false,
-      organdecision: [],
+      saveLoading: false,
+      // 鏁版嵁ID
+      infoid: undefined,
+      assessmentId: undefined,
+      // 涓昏鏁版嵁
+      assessmentData: {},
+      organAssessmentList: [], // 鎵�鏈夊櫒瀹樻暟鎹�
       // 灞曞紑琛岀浉鍏�
       expandedRowKeys: [],
+      // 闄勪欢鐩稿叧
       currentPreviewFile: null,
       attachmentVisible: false,
-
-      currentUser: {
-        id: "001",
-        name: "寮犲尰鐢�",
-        department: "鍗忚皟鍛�",
-        role: "coordinator"
-      },
-      //department锛氬績鑴忋�乧oordinator锛氬崗璋冨憳
-      // 瀛楀吀閫夐」
-      genderOptions: [
-        { value: "0", label: "鐢�" },
-        { value: "1", label: "濂�" }
-      ],
-      bloodTypeOptions: [
-        { value: "A", label: "A鍨�" },
-        { value: "B", label: "B鍨�" },
-        { value: "O", label: "O鍨�" },
-        { value: "AB", label: "AB鍨�" }
-      ],
-      assessmentTypeOptions: [
-        { value: "1", label: "鍒濇璇勪及" },
-        { value: "2", label: "鏈�缁堣瘎浼�" }
-      ],
-      organTypeOptions: [
-        { value: "heart", label: "蹇冭剰" },
-        { value: "liver", label: "鑲濊剰" },
-        { value: "kidney", label: "鑲捐剰" },
-        { value: "lung", label: "鑲鸿剰" },
-        { value: "pancreas", label: "鑳拌吅" },
-        { value: "intestine", label: "鑲犻亾" },
-        { value: "cornea", label: "瑙掕啘" },
-        { value: "skin", label: "鐨偆" }
-      ],
+      // 鎹愮尞鍐冲畾鐩稿叧
+      organdecision: [],
+      organdecisionOther: "",
       organselection: [
         "鑲濊剰",
         "鍙岃偩",
@@ -358,7 +377,28 @@
         "鍙岀溂缁勭粐",
         "閬椾綋",
         "鍏朵粬"
-      ]
+      ],
+      // 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
+      organDecisionMapping: {
+        鑲濊剰: ["鑲濊剰"],
+        鍙岃偩: ["宸﹁偩", "鍙宠偩"],
+        宸﹁偩: ["宸﹁偩"],
+        鍙宠偩: ["鍙宠偩"],
+        蹇冭剰: ["蹇冭剰"],
+        鑲鸿剰: ["鑲鸿剰"],
+        鑳拌吅: ["鑳拌吅"],
+        灏忚偁: ["灏忚偁"],
+        鍙岀溂缁勭粐: ["瑙掕啘"],
+        閬椾綋: ["鐨偆", "楠ㄩ", "鍏朵粬缁勭粐"],
+        鍏朵粬: [] // 鍏朵粬绫诲瀷涓嶆槧灏勫叿浣撳櫒瀹�
+      },
+      // 鐢ㄦ埛淇℃伅
+      currentUser: {
+        id: "001",
+        name: "寮犲尰鐢�",
+        department: "蹇冭剰绉�",
+        role: "doctor" // coordinator, doctor
+      }
     };
   },
   computed: {
@@ -368,8 +408,27 @@
     currentDepartment() {
       return this.currentUser.department;
     },
+    // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
+    filteredOrganAssessmentList() {
+      if (!this.organdecision || this.organdecision.length === 0) {
+        return [];
+      }
+
+      // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
+      const selectedOrgans = new Set();
+      this.organdecision.forEach(decision => {
+        const organs = this.organDecisionMapping[decision] || [];
+        organs.forEach(organ => selectedOrgans.add(organ));
+      });
+
+      // 杩囨护鍣ㄥ畼璇勪及鍒楄〃
+      return this.organAssessmentList.filter(organ =>
+        selectedOrgans.has(organ.organname)
+      );
+    },
+    // 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
     allOrgansAssessed() {
-      return this.organAssessmentList.every(
+      return this.filteredOrganAssessmentList.every(
         organ =>
           organ.assessments &&
           organ.assessments.length > 0 &&
@@ -379,86 +438,364 @@
       );
     }
   },
+  watch: {
+    // 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
+    organdecision: {
+      handler(newVal, oldVal) {
+        this.handleComplexDecisionChange(newVal, oldVal);
+      },
+      deep: true
+    }
+  },
   created() {
+    this.infoid = this.$route.query.infoid;
     this.assessmentId = this.$route.query.id;
+    this.isEdit = this.$route.query.assess === "true";
     this.getAssessmentDetail();
   },
   methods: {
+    // 鏁翠綋淇濆瓨鏂规硶
+    async handleSaveAll() {
+      this.saveLoading = true;
+      try {
+        // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
+        const saveData = {
+          // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
+          id: this.assessmentData.id || undefined,
+          infoid: this.infoid,
+          caseNo: this.assessmentData.caseNo,
+          donorno: this.assessmentData.donorno,
+          treatmenthospitalname: this.assessmentData.treatmenthospitalname,
+          treatmenthospitalno: this.assessmentData.treatmenthospitalno,
+          sex: this.assessmentData.sex,
+          age: this.assessmentData.age,
+          bloodtype: this.assessmentData.bloodtype,
+          idcardno: this.assessmentData.idcardno,
+          diagnosisname: this.assessmentData.diagnosisname,
+          coordinatorName: this.assessmentData.coordinatorName,
+          assessTime: this.assessmentData.assessTime || new Date().toISOString(),
+          assessState: this.assessmentData.assessState,
+          assessannex: this.assessmentData.assessannex,
+          // 鎹愮尞鍐冲畾淇℃伅
+          organdecision: this.organdecision.join(','),
+          organdecisionOther: this.organdecisionOther,
+          // 鍣ㄥ畼璇勪及鍒楄〃
+          serviceMedicalevaluationorgans: this.organAssessmentList.map(organ => ({
+            id: organ.id,
+            infoid: organ.infoid,
+            donorno: organ.donorno,
+            organno: organ.organno,
+            organname: organ.organname,
+            organnumber: organ.organnumber,
+            gainhospitalno: organ.gainhospitalno,
+            gainhospitalname: organ.gainhospitalname,
+            isbiopsybefore: organ.isbiopsybefore,
+            isbiopsyafter: organ.isbiopsyafter,
+            ismarginalorgan: organ.ismarginalorgan,
+            ispathogenpositive: organ.ispathogenpositive,
+            ispnf: organ.ispnf,
+            isdgf: organ.isdgf,
+            // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
+            assesscontent: JSON.stringify(organ.assessments)
+          }))
+        };
+
+        // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
+        const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
+        const response = await saveMethod(saveData);
+
+        if (response.code === 200) {
+          this.$message.success('璇勪及琛ㄤ繚瀛樻垚鍔燂紒');
+          // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+          if (!this.assessmentData.id && response.data && response.data.id) {
+            this.assessmentData.id = response.data.id;
+          }
+        } else {
+          this.$message.error('淇濆瓨澶辫触锛�' + (response.msg || '鏈煡閿欒'));
+        }
+      } catch (error) {
+        console.error('淇濆瓨璇勪及琛ㄥけ璐�:', error);
+        this.$message.error('淇濆瓨澶辫触锛岃閲嶈瘯');
+      } finally {
+        this.saveLoading = false;
+      }
+    },
+
+    // 鍙栨秷鎸夐挳浜嬩欢
+    handleCancel() {
+      this.$router.go(-1);
+    },
+
+    // 鎹愮尞鍐冲畾鍙樻洿澶勭悊
+    handleOrganDecisionChange(newDecision) {
+      // 鑷姩澶勭悊鐩稿叧閫昏緫
+      this.autoHandleDecisionChange(newDecision);
+      // 寮哄埗閲嶆柊娓叉煋
+      this.$forceUpdate();
+      // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+      if (newDecision.length === 0) {
+        this.expandedRowKeys = [];
+      }
+    },
+
+    // 鍏朵粬鎹愮尞鍐冲畾杈撳叆澶勭悊
+    handleOtherDecisionInput(value) {
+      // 杈撳叆鏃朵笉鍋氬崟鐙繚瀛橈紝绛夊緟鏁翠綋淇濆瓨
+    },
+
+    // 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
+    autoHandleDecisionChange(newDecision) {
+      // 濡傛灉閫夋嫨浜�"鍙岃偩"锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"鍜�"鍙宠偩"閫夋嫨
+      if (newDecision.includes("鍙岃偩")) {
+        this.organdecision = newDecision.filter(
+          item => item !== "宸﹁偩" && item !== "鍙宠偩"
+        );
+      }
+      // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
+      else if (newDecision.includes("宸﹁偩") || newDecision.includes("鍙宠偩")) {
+        this.organdecision = newDecision.filter(item => item !== "鍙岃偩");
+      }
+
+      // 澶勭悊浜掓枼閫昏緫
+      this.handleExclusiveDecisions();
+    },
+
+    // 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
+    handleExclusiveDecisions() {
+      // 閬椾綋鎹愮尞涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+      if (this.organdecision.includes("閬椾綋")) {
+        // 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
+      }
+    },
+
+    // 澶嶆潅鍐崇瓥鍙樺寲澶勭悊
+    handleComplexDecisionChange(newVal, oldVal) {
+      // 澶勭悊鏂板鐨勯�夋嫨
+      const addedDecisions = newVal.filter(item => !oldVal.includes(item));
+      const removedDecisions = oldVal.filter(item => !newVal.includes(item));
+
+      // 瀵规柊澧炲姞鐨勯�夋嫨杩涜鐗规畩澶勭悊
+      addedDecisions.forEach(decision => {
+        this.handleNewDecision(decision);
+      });
+
+      // 瀵圭Щ闄ょ殑閫夋嫨杩涜娓呯悊
+      removedDecisions.forEach(decision => {
+        this.handleRemovedDecision(decision);
+      });
+    },
+
+    // 澶勭悊鏂板鐨勬崘鐚喅瀹�
+    handleNewDecision(decision) {
+      // 鏍规嵁鏄犲皠鍏崇郴鑷姩鍒涘缓瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+      this.autoCreateOrganAssessments(decision);
+    },
+
+    // 鑷姩鍒涘缓鍣ㄥ畼璇勪及椤�
+    autoCreateOrganAssessments(decision) {
+      const organsToCreate = this.organDecisionMapping[decision];
+
+      if (organsToCreate && organsToCreate.length > 0) {
+        organsToCreate.forEach(organName => {
+          this.ensureOrganExists(organName);
+        });
+
+        // 鏄剧ず鍒涘缓鎻愮ず
+        if (organsToCreate.length > 0) {
+          this.$message.success(
+            `宸蹭负銆�${decision}銆戝垱寤�${organsToCreate.length}涓瘎浼伴」`
+          );
+        }
+      } else {
+        console.warn(`鎹愮尞鍐冲畾銆�${decision}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤);
+      }
+    },
+
+    // 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
+    handleRemovedDecision(decision) {
+      // 鏍规嵁涓氬姟闇�姹傛坊鍔犳竻鐞嗛�昏緫
+      const relatedOrgans = this.organDecisionMapping[decision] || [];
+      relatedOrgans.forEach(organ => {
+        // 鍙互鍦ㄨ繖閲屾坊鍔犳竻鐞嗙浉鍏冲櫒瀹樿瘎浼扮殑閫昏緫
+      });
+    },
+
+    // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
+    ensureOrganExists(organName) {
+      // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚屽悕鍣ㄥ畼璇勪及椤�
+      const exists = this.organAssessmentList.some(
+        organ => organ.organname === organName
+      );
+
+      if (!exists) {
+        // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
+        const newOrgan = {
+          id: `organ_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
+          organno: `ORG${Date.now()}`,
+          organname: organName,
+          gainhospitalname: "寰呭垎閰嶆満鏋�",
+          isbiopsybefore: "0",
+          isbiopsyafter: "0",
+          ismarginalorgan: "0",
+          ispathogenpositive: "0",
+          assessments: [this.getDefaultAssessment(0)],
+          activeAssessmentTab: "assessment_0",
+          expanded: false,
+          createTime: new Date().toISOString()
+        };
+
+        this.organAssessmentList = [...this.organAssessmentList, newOrgan];
+        return true;
+      }
+      return false;
+    },
+
+    // 鑾峰彇璇勪及璇︽儏
+    async getAssessmentDetail() {
+      this.assessmentLoading = true;
+      try {
+        const response = await evaluateBaseInfolist({ infoid: this.infoid });
+
+        if (response.code === 200) {
+          this.handleResponseData(response);
+        } else {
+          this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
+        this.$message.error("鑾峰彇璇︽儏澶辫触");
+      } finally {
+        this.assessmentLoading = false;
+      }
+    },
+
+    // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+    handleResponseData(response) {
+      let detailData = null;
+
+      // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+      if (response.data) {
+        if (Array.isArray(response.data)) {
+          detailData = response.data[0] || {};
+        } else if (response.data.rows && Array.isArray(response.data.rows)) {
+          detailData = response.data.rows[0] || {};
+        } else if (Array.isArray(response.data.list)) {
+          detailData = response.data.list[0] || {};
+        } else {
+          detailData = response.data;
+        }
+      } else {
+        detailData = response;
+      }
+
+      // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
+      this.assessmentData = {
+        id: detailData.id || this.assessmentId,
+        infoid: detailData.infoid || this.infoid,
+        caseNo: detailData.caseNo || "",
+        name: detailData.name || detailData.donorName || "",
+        sex: detailData.sex || "",
+        age: detailData.age || "",
+        bloodtype: detailData.bloodtype || "",
+        idcardno: detailData.idcardno || "",
+        diagnosisname: detailData.diagnosisname || "",
+        treatmenthospitalname: detailData.treatmenthospitalname || "",
+        coordinatorName: detailData.coordinatorName || "",
+        assessTime: detailData.assessTime || "",
+        assessState: detailData.assessState || "1",
+        assessannex: detailData.assessannex || ""
+      };
+
+      // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+      if (detailData.organdecision) {
+        this.organdecision = Array.isArray(detailData.organdecision)
+          ? detailData.organdecision
+          : (detailData.organdecision || "").split(",");
+        this.organdecisionOther = detailData.organdecisionOther || "";
+      }
+
+      // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+      this.processOrganAssessmentData(detailData);
+    },
+
+    // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+    processOrganAssessmentData(detailData) {
+      let organList = [];
+
+      // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
+      if (detailData.serviceMedicalevaluationorgans) {
+        if (Array.isArray(detailData.serviceMedicalevaluationorgans)) {
+          organList = detailData.serviceMedicalevaluationorgans;
+        }
+      }
+
+      // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
+      this.organAssessmentList = organList.map(organ => {
+        const assessments = [];
+
+        // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
+        if (organ.assesscontent) {
+          try {
+            const assessData = typeof organ.assesscontent === "string"
+              ? JSON.parse(organ.assesscontent)
+              : organ.assesscontent;
+
+            if (Array.isArray(assessData)) {
+              assessments.push(
+                ...assessData.map((item, index) => ({
+                  ...item,
+                  index: index,
+                  status: item.status || "assessed"
+                }))
+              );
+            }
+          } catch (error) {
+            console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+            assessments.push(this.getDefaultAssessment(0));
+          }
+        } else {
+          assessments.push(this.getDefaultAssessment(0));
+        }
+
+        return {
+          ...organ,
+          assessments: assessments,
+          activeAssessmentTab: assessments.length > 0 ? "assessment_0" : "summary",
+          expanded: false
+        };
+      });
+    },
+
     // 鑾峰彇榛樿璇勪及鏁版嵁缁撴瀯
-    getDefaultAssessment() {
+    getDefaultAssessment(index) {
       return {
+        index: index,
         status: "pending",
         assessmentTime: "",
         assessor: "",
         functionStatus: "",
         assessmentOpinion: "",
-        attachments: [],
         clinicalData: {},
-        labResults: {}
+        labResults: {},
+        createTime: new Date().toISOString()
       };
     },
 
-    // 鑾峰彇璇勪及璇︽儏
-    getAssessmentDetail() {
-      this.assessmentLoading = true;
-      getAssessment(this.assessmentId)
-        .then(response => {
-          if (response.code === 200) {
-            this.assessmentData = response.data.caseInfo;
-            this.organAssessmentList = this.transformOrganData(
-              response.data.organAssessments || []
-            );
-          }
-          this.assessmentLoading = false;
-        })
-        .catch(error => {
-          console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
-          this.assessmentLoading = false;
-        });
-    },
-
-    // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
-    transformOrganData(organList) {
-      return organList.map(organ => {
-        const organName = this.getOrganName(organ.organType);
-
-        // 杞崲涓哄娆¤瘎浼扮殑鏁版嵁缁撴瀯
-        const assessments = [];
-        if (organ.firstAssessment) {
-          assessments.push({ ...organ.firstAssessment, index: 0 });
-        }
-        if (organ.secondAssessment) {
-          assessments.push({ ...organ.secondAssessment, index: 1 });
-        }
-        // 鍙互缁х画娣诲姞鏇村璇勪及...
-
-        // 璁剧疆鍣ㄥ畼鍚嶇О鍜岃瘎浼版暟鎹�
-        organ.organName = organName;
-        organ.assessments = assessments;
-        organ.activeAssessmentTab =
-          assessments.length > 0 ? "assessment_0" : "summary";
-        organ.expanded = false;
-
-        // 璁$畻鏁翠綋璇勪及鐘舵��
-        organ.assessmentStatus = this.calculateOverallStatus(organ);
-
-        return organ;
-      });
-    },
-
-    // 璁$畻鏈�澶ц瘎浼版鏁帮紙鐢ㄤ簬琛ㄥご鏄剧ず锛�
+    // 璁$畻鏈�澶ц瘎浼版鏁�
     getMaxAssessmentCount() {
       const maxCount = Math.max(
         ...this.organAssessmentList.map(organ =>
           organ.assessments ? organ.assessments.length : 0
         )
       );
-      return Math.max(maxCount, 2); // 鑷冲皯鏄剧ず2鍒�
+      return Math.max(maxCount, 1);
     },
 
-    // 璁$畻鏁翠綋璇勪及鐘舵��
-    calculateOverallStatus(organ) {
-      if (!organ.assessments || organ.assessments.length === 0) return "0";
+    // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
+    getOrganOverallStatus(organ) {
+      if (!organ.assessments || organ.assessments.length === 0) {
+        return "pending";
+      }
 
       const allAssessed = organ.assessments.every(
         assessment => assessment.status === "assessed"
@@ -467,14 +804,24 @@
         assessment => assessment.status === "assessed"
       );
 
-      if (allAssessed) return "1";
-      if (someAssessed) return "2";
-      return "0";
+      if (allAssessed) return "completed";
+      if (someAssessed) return "assessing";
+      return "pending";
+    },
+
+    getOrganOverallStatusText(organ) {
+      const status = this.getOrganOverallStatus(organ);
+      const statusMap = {
+        pending: "寰呰瘎浼�",
+        assessing: "璇勪及涓�",
+        completed: "宸插畬鎴�"
+      };
+      return statusMap[status] || "鏈煡";
     },
 
     // 鍒囨崲灞曞紑琛�
     handleToggleExpand(row) {
-      const key = row.organType;
+      const key = row.organno;
       const index = this.expandedRowKeys.indexOf(key);
 
       if (index > -1) {
@@ -483,83 +830,36 @@
       } else {
         this.expandedRowKeys = [key];
         this.organAssessmentList.forEach(item => {
-          item.expanded = item.organType === key;
+          item.expanded = item.organno === key;
         });
       }
     },
 
     // 灞曞紑琛屽彉鍖�
     handleExpandChange(row, expandedRows) {
-      this.expandedRowKeys = expandedRows.map(item => item.organType);
+      this.expandedRowKeys = expandedRows.map(item => item.organno);
       this.organAssessmentList.forEach(item => {
-        item.expanded = this.expandedRowKeys.includes(item.organType);
+        item.expanded = this.expandedRowKeys.includes(item.organno);
       });
     },
 
     // 娣诲姞鏂拌瘎浼�
     handleAddNewAssessment(organ) {
       const newAssessment = {
-        ...this.getDefaultAssessment(),
-        index: organ.assessments.length
+        ...this.getDefaultAssessment(organ.assessments.length),
+        assessor: this.currentUser.name
       };
 
       organ.assessments.push(newAssessment);
       organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
-
-      // 鏇存柊鏁翠綋鐘舵��
-      organ.assessmentStatus = this.calculateOverallStatus(organ);
 
       this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
     },
 
     // 澶勭悊娣诲姞璇勪及浜嬩欢
     handleAddAssessment(data) {
-      const { organData, currentIndex } = data;
+      const { organData } = data;
       this.handleAddNewAssessment(organData);
-    },
-
-    // 淇濆瓨璇勪及
-    handleSaveOrganAssessment(saveData) {
-      const { organData, assessmentData, assessmentIndex } = saveData;
-
-      const organToUpdate = {
-        ...organData,
-        assessments: organData.assessments.map((assessment, index) =>
-          index === assessmentIndex
-            ? {
-                ...assessmentData,
-                status: "assessed",
-                assessmentTime: new Date().toISOString(),
-                assessor: this.currentUser.name
-              }
-            : assessment
-        )
-      };
-
-      // 鏇存柊鏁翠綋鐘舵��
-      organToUpdate.assessmentStatus = this.calculateOverallStatus(
-        organToUpdate
-      );
-
-      updateOrganAssessment(organToUpdate)
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success(`绗�${assessmentIndex + 1}娆¤瘎浼颁繚瀛樻垚鍔焋);
-            this.getAssessmentDetail();
-
-            // 鏇存柊褰撳墠灞曞紑琛岀殑鏁版嵁
-            const index = this.organAssessmentList.findIndex(
-              item => item.organType === organData.organType
-            );
-            if (index !== -1) {
-              this.organAssessmentList.splice(index, 1, organToUpdate);
-            }
-          }
-        })
-        .catch(error => {
-          console.error("淇濆瓨璇勪及澶辫触:", error);
-          this.$message.error("淇濆瓨澶辫触");
-        });
     },
 
     // 鑾峰彇鏈�鏂拌瘎浼版椂闂�
@@ -572,55 +872,6 @@
       return assessed.sort(
         (a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
       )[0].assessmentTime;
-    },
-
-    // 鑾峰彇鎵�鏈夐檮浠�
-    getAllAttachments(organ) {
-      const attachments = [];
-
-      if (organ.assessments) {
-        organ.assessments.forEach((assessment, index) => {
-          if (assessment.attachments) {
-            assessment.attachments.forEach(att => {
-              attachments.push({
-                ...att,
-                assessmentIndex: index,
-                assessmentNumber: index + 1
-              });
-            });
-          }
-        });
-      }
-
-      return attachments;
-    },
-
-    // 棰勮闄勪欢
-    handlePreviewAttachment(attachment) {
-      this.currentPreviewFile = {
-        fileName: attachment.fileName,
-        fileUrl: attachment.path || attachment.fileUrl,
-        fileType: this.getFileType(attachment.fileName)
-      };
-      this.attachmentVisible = true;
-    },
-
-    // 鑾峰彇鏂囦欢绫诲瀷
-    getFileType(fileName) {
-      if (!fileName) return "other";
-
-      const extension = fileName
-        .split(".")
-        .pop()
-        .toLowerCase();
-      const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
-      const pdfTypes = ["pdf"];
-      const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
-
-      if (imageTypes.includes(extension)) return "image";
-      if (pdfTypes.includes(extension)) return "pdf";
-      if (officeTypes.includes(extension)) return "office";
-      return "other";
     },
 
     // 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
@@ -643,16 +894,16 @@
       return textMap[status] || "鏈煡";
     },
 
-    // 鑾峰彇鍣ㄥ畼鍚嶇О
-    getOrganName(organType) {
-      const organ = this.organTypeOptions.find(opt => opt.value === organType);
-      return organ ? organ.label : organType;
-    },
-
     // 妫�鏌ヨ瘎浼版潈闄�
     canAssessOrgan(organ) {
+      console.log(organ,'organ');
+
       if (this.isCoordinator) return true;
-      return organ.department === this.currentDepartment;
+      if (!this.isEdit) return false;
+      return (
+        organ.gainhospitalname &&
+        organ.gainhospitalname.includes(this.currentDepartment)
+      );
     },
 
     // 鑾峰彇琛岀被鍚�
@@ -663,46 +914,79 @@
     // 鐘舵�佽繃婊ゅ櫒
     statusFilter(status) {
       const statusMap = {
-        "0": "warning",
-        "1": "primary",
-        "2": "success",
-        "3": "danger"
+        "1": "warning",
+        "2": "primary",
+        "3": "success"
       };
       return statusMap[status] || "info";
     },
 
     statusTextFilter(status) {
       const statusMap = {
-        "0": "寰呰瘎浼�",
-        "1": "璇勪及涓�",
-        "2": "宸插畬鎴�",
-        "3": "宸插叧闂�"
+        "1": "寰呰瘎浼�",
+        "2": "璇勪及涓�",
+        "3": "宸插畬鎴�"
       };
       return statusMap[status] || "鏈煡";
     },
 
+    // 鏌ョ湅闄勪欢
     handleAttachmentPreview() {
-      this.attachmentVisible = true;
+      if (this.assessmentData.assessannex) {
+        try {
+          const annexData = typeof this.assessmentData.assessannex === "string"
+            ? JSON.parse(this.assessmentData.assessannex)
+            : this.assessmentData.assessannex;
+
+          if (Array.isArray(annexData) && annexData.length > 0) {
+            this.currentPreviewFile = annexData[0];
+            this.attachmentVisible = true;
+          } else {
+            this.$message.info("鏆傛棤闄勪欢鍙瑙�");
+          }
+        } catch (error) {
+          this.$message.info("闄勪欢鏁版嵁鏍煎紡閿欒");
+        }
+      } else {
+        this.$message.info("鏆傛棤闄勪欢");
+      }
     },
 
-    handleCompleteAssessment() {
-      this.$confirm("纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�", "纭鎿嶄綔", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      }).then(() => {
-        completeAssessment(this.assessmentId)
-          .then(response => {
-            if (response.code === 200) {
-              this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
-              this.getAssessmentDetail();
-            }
-          })
-          .catch(error => {
-            console.error("瀹屾垚璇勪及澶辫触:", error);
-            this.$message.error("鎿嶄綔澶辫触");
-          });
-      });
+    // 瀹屾垚璇勪及
+    async handleCompleteAssessment() {
+      try {
+        await this.$confirm(
+          "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+          "纭鎿嶄綔",
+          {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+          }
+        );
+
+        // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
+        const updateData = {
+          ...this.assessmentData,
+          assessState: "3",
+          assessTime: new Date().toISOString()
+        };
+
+        const response = await assessedit(updateData);
+
+        if (response.code === 200) {
+          this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
+          this.assessmentData.assessState = "3";
+          this.isEdit = false;
+        } else {
+          this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+        }
+      } catch (error) {
+        if (error !== "cancel") {
+          console.error("瀹屾垚璇勪及澶辫触:", error);
+          this.$message.error("鎿嶄綔澶辫触");
+        }
+      }
     }
   }
 };
@@ -742,6 +1026,14 @@
 
 .assessment-summary {
   padding: 10px;
+}
+
+/* 搴曢儴淇濆瓨鎸夐挳鏍峰紡 */
+.footer-actions {
+  margin-top: 20px;
+  text-align: center;
+  padding: 20px;
+  border-top: 1px solid #eaeaea;
 }
 
 /* 鍝嶅簲寮忚璁� */
@@ -790,4 +1082,17 @@
 .fixed-width .el-button {
   margin: 0 2px;
 }
+
+/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
+.organ-decision-info {
+  margin: 10px 0;
+  padding: 10px;
+  background-color: #f8f9fa;
+  border-radius: 4px;
+  border-left: 4px solid #409eff;
+}
+
+.decision-tag {
+  margin: 2px 5px;
+}
 </style>

--
Gitblit v1.9.3