From c8e9849cb5f24848df0174c13bfbbff37bb08a5a Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 21 七月 2026 15:45:30 +0800
Subject: [PATCH] 维护

---
 src/views/project/donatebaseinfo/EditCaseModal.vue | 1557 ++++++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 1,050 insertions(+), 507 deletions(-)

diff --git a/src/views/project/donatebaseinfo/EditCaseModal.vue b/src/views/project/donatebaseinfo/EditCaseModal.vue
index e2876c6..e0cae19 100644
--- a/src/views/project/donatebaseinfo/EditCaseModal.vue
+++ b/src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -1,464 +1,777 @@
 <template>
-  <el-dialog
-    :title="title"
-    :visible.sync="localVisible"
-    width="1200px"
-    :close-on-click-modal="false"
-    @close="handleClose"
-  >
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="rules"
-      label-width="130px"
-      label-position="right"
+  <div>
+    <el-dialog
+      :title="title"
+      :visible.sync="dialogVisible"
+      width="1200px"
+      :close-on-click-modal="false"
+      @close="handleClose"
     >
-      <!-- 鍩虹淇℃伅閮ㄥ垎 -->
-      <el-card header="鍩虹淇℃伅" class="form-section">
-        <el-row :gutter="20">
-          <el-col :span="11">
-            <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
-              <el-input
-                v-model="formData.caseNo"
-                :disabled="isEdit"
-                placeholder="绯荤粺鑷姩鐢熸垚"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="11">
-            <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
-              <el-input
-                v-model="formData.donorno"
-                placeholder="璇疯緭鍏ユ崘鐚�呯紪鍙�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <el-form-item label="濮撳悕" prop="name">
-              <el-input v-model="formData.name" placeholder="蹇呭~椤�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鎬у埆" prop="sex">
-              <el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
-                <el-option label="鏈煡" value="0" />
-                <el-option label="鐢�" value="1" />
-                <el-option label="濂�" value="2" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
-              <el-select
-                v-model="formData.idcardtype"
-                placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
+      <el-form
+        ref="formRef"
+        :model="formData"
+        :rules="rules"
+        label-width="130px"
+        label-position="right"
+      >
+        <!-- 鍩虹淇℃伅閮ㄥ垎 -->
+        <el-card header="鍩虹淇℃伅" class="form-section">
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item
+                label="褰撳墠鍖荤枟鏈烘瀯"
+                prop="currentMedicalInstitution"
               >
-                <el-option label="韬唤璇�" value="1" />
-                <el-option label="鍐涗汉璇�" value="2" />
-                <el-option label="鎶ょ収" value="3" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
-              <el-input
-                v-model="formData.idcardno"
-                placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
-                @blur="handleIdCardBlur"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
-              <el-date-picker
-                v-model="formData.birthday"
-                type="date"
-                placeholder="閫夋嫨鍑虹敓鏃ユ湡"
-                value-format="yyyy-MM-dd"
-                style="width: 100%"
-                @change="calculateAge"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="骞撮緞" prop="andAge">
-              <el-input v-model="formData.andAge" disabled />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="姘戞棌" prop="nation">
-              <el-select v-model="formData.nation" placeholder="璇烽�夋嫨姘戞棌">
-                <el-option
-                  v-for="dict in dictOptions.sys_nation"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
+                <el-input
+                  v-model="formData.currentMedicalInstitution"
+                  placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋�"
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鍥界睄" prop="nationality">
-              <el-input
-                v-model="formData.nationality"
-                placeholder="璇疯緭鍏ュ浗绫�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="6">
-            <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
-              <el-input v-model="formData.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="瀛﹀巻" prop="education">
-              <el-select v-model="formData.education" placeholder="璇烽�夋嫨瀛﹀巻">
-                <el-option
-                  v-for="dict in dictOptions.sys_education"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="褰撳墠鍖荤枟鏈烘瀯绉戝" prop="currentDept">
+                <el-input
+                  v-model="formData.currentDept"
+                  placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋勭瀹�"
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="鑱屼笟" prop="occupation">
-              <el-select v-model="formData.occupation" placeholder="璇烽�夋嫨鑱屼笟">
-                <el-option
-                  v-for="dict in dictOptions.sys_occupation"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="棣栬瘖鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
+                <el-input
+                  v-model="formData.firstMedicalInstitution"
+                  placeholder="璇疯緭鍏ラ璇婂尰鐤楁満鏋�"
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="绫嶈疮" prop="nativeplace">
-              <el-input
-                v-model="formData.nativeplace"
-                placeholder="璇疯緭鍏ョ睄璐�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-card>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="棣栬瘖鍖荤枟鏈烘瀯绉戝" prop="firstDept">
+                <el-input
+                  v-model="formData.firstDept"
+                  placeholder="璇疯緭鍏ラ璇婂尰鐤楁満鏋勭瀹�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="鎹愮尞缂栧彿" prop="caseNo">
+                <el-input
+                  v-model="formData.caseNo"
+                  placeholder="璇疯緭鍏ユ崘鐚紪鍙�"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="涓婃姤鍖婚櫌" prop="treatmenthospitalname">
+                <el-input
+                  v-model="formData.treatmenthospitalname"
+                  placeholder="璇疯緭鍏ヤ笂鎶ュ尰闄�"
+                />
+              </el-form-item>
+            </el-col>
+            <!-- <el-col :span="11">
+              <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
+                <el-input
+                  v-model="formData.donorno"
+                  placeholder="璇疯緭鍏ユ崘鐚�呯紪鍙�"
+                />
+              </el-form-item>
+            </el-col> -->
+          </el-row>
 
-      <!-- 鍖荤枟淇℃伅閮ㄥ垎 -->
-      <el-card header="鍖荤枟淇℃伅" class="form-section">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalno">
-              <org-selecter
-                :org-type="'3'"
-                v-model="formData.treatmenthospitalno"
-                @change="handleHospitalChange"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="绉戝" prop="treatmentdeptname">
-              <el-input
-                v-model="formData.treatmentdeptname"
-                placeholder="璇疯緭鍏ョ瀹�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
-              <el-input
-                v-model="formData.inpatientno"
-                placeholder="璇疯緭鍏ヤ綇闄㈠彿"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
-              <el-input
-                v-model="formData.diagnosisname"
-                placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="琛�鍨�" prop="bloodtype">
-              <el-radio-group v-model="formData.bloodtype">
-                <el-radio label="1">A鍨�</el-radio>
-                <el-radio label="2">B鍨�</el-radio>
-                <el-radio label="3">O鍨�</el-radio>
-                <el-radio label="4">AB鍨�</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="Rh(D)" prop="rhyin">
-              <el-radio-group v-model="form.rhyin">
-                <el-radio
-                  v-for="dict in dict.type.sys_bloodtype_rhd || []"
-                  :key="dict.value"
-                  :label="dict.value"
-                  >{{ dict.label }}</el-radio
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="濮撳悕" prop="name">
+                <el-input v-model="formData.name" placeholder="蹇呭~椤�" />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鎬у埆" prop="sex">
+                <el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
+                  <el-option label="鐢�" value="1" />
+                  <el-option label="濂�" value="2" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鍥界睄" prop="nationality">
+                <el-input
+                  v-model="formData.nationality"
+                  placeholder="璇疯緭鍏ュ浗绫�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="鍑虹敓鏃ユ湡" prop="birthday">
+                <el-date-picker
+                  v-model="formData.birthday"
+                  type="date"
+                  placeholder="閫夋嫨鍑虹敓鏃ユ湡"
+                  value-format="yyyy-MM-dd"
+                  style="width: 100%"
+                  @change="calculateAge"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="骞撮緞" prop="andAge">
+                <el-input v-model="formData.andAge" disabled />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="姘戞棌" prop="nation">
+                <el-select v-model="formData.nation" placeholder="璇烽�夋嫨姘戞棌">
+                  <el-option
+                    v-for="dict in dict.type.sys_nation || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="璇佷欢绫诲瀷" prop="idcardtype">
+                <el-select
+                  v-model="formData.idcardtype"
+                  placeholder="璇烽�夋嫨璇佷欢绫诲瀷"
                 >
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="褰撳墠鍖荤枟鏈烘瀯" prop="currentMedicalInstitution">
-              <el-input
-                v-model="formData.currentMedicalInstitution"
-                placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="褰撳墠鍖荤枟鏈烘瀯绉戝" prop="currentDept">
-              <el-input
-                v-model="formData.currentDept"
-                placeholder="璇疯緭鍏ュ綋鍓嶅尰鐤楁満鏋勭瀹�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="棣栨鍖荤枟鏈烘瀯" prop="firstMedicalInstitution">
-              <el-input
-                v-model="formData.firstMedicalInstitution"
-                placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="棣栨鍖荤枟鏈烘瀯绉戝" prop="firstDept">
-              <el-input
-                v-model="formData.firstDept"
-                placeholder="璇疯緭鍏ラ娆″尰鐤楁満鏋勭瀹�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="GSC璇勫垎" prop="gcsScore">
-              <el-input
-                v-model="formData.gcsScore"
-                placeholder="璇疯緭鍏SC璇勫垎"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛樼紪鍙�" prop="coordinatorNo">
-              <el-input
-                v-model="formData.coordinatorNo"
-                placeholder="璇疯緭鍏ュ崗璋冨憳缂栧彿"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鍗忚皟鍛樺鍚�" prop="coordinatorName">
-              <el-input
-                v-model="formData.coordinatorName"
-                placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="鐥呮儏姒傚喌" prop="illnessoverview">
-              <el-input
-                v-model="formData.illnessoverview"
-                type="textarea"
-                :rows="3"
-                placeholder="璇疯緭鍏ョ梾鎯呮鍐�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-card>
-
-      <!-- 鍦板潃淇℃伅閮ㄥ垎 -->
-      <el-card header="鍦板潃淇℃伅" class="form-section">
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鐜颁綇鍦板潃" prop="residenceaddress">
-              <li-area-select
-                ref="residenceSelect"
-                v-model="residenceAddress"
-                @change="handleResidenceAddressChange"
-              />
-              <el-input
-                v-model="formData.residenceaddress"
-                placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
-                style="margin-top: 8px"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鎴风睄鍦板潃" prop="registeraddress">
-              <li-area-select
-                ref="registerSelect"
-                v-model="registerAddress"
-                @change="handleRegisterAddressChange"
-              />
-              <el-input
-                v-model="formData.registeraddress"
-                placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
-                style="margin-top: 8px"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-card>
-
-      <!-- 鎹愮尞淇℃伅閮ㄥ垎 -->
-      <el-card header="鎹愮尞淇℃伅" class="form-section">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="鎹愮尞绫诲埆" prop="donationcategory">
-              <el-select
-                v-model="formData.donationcategory"
-                placeholder="璇烽�夋嫨鎹愮尞绫诲埆"
-              >
-                <el-option
-                  v-for="dict in dictOptions.sys_DonationCategory"
-                  :key="dict.value"
-                  :label="dict.label"
-                  :value="dict.value"
+                  <el-option
+                    v-for="dict in dict.type.sys_IDType || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="parseInt(dict.value)"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+                <el-input
+                  v-model="formData.idcardno"
+                  placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+                  @blur="handleIdCardBlur"
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="妗堜緥鏃堕棿" prop="donatetime">
-              <el-date-picker
-                v-model="formData.donatetime"
-                type="datetime"
-                placeholder="閫夋嫨妗堜緥鏃堕棿"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="璁板綍鐘舵��" prop="recordstate">
-              <el-select v-model="formData.recordstate" :disabled="isEdit">
-                <el-option label="鏂板缓" value="0" />
-                <el-option label="宸蹭笂鎶�" value="1" />
-                <el-option label="瀹℃牳涓�" value="2" />
-                <el-option label="宸插畬鎴�" value="3" />
-                <el-option label="宸茬粓姝�" value="99" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鑾峰彇缁勭粐缂栧彿" prop="acquisitiontissueno">
-              <el-input
-                v-model="formData.acquisitiontissueno"
-                placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囩紪鍙�"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鑾峰彇缁勭粐鍚嶇О" prop="acquisitiontissuename">
-              <el-input
-                v-model="formData.acquisitiontissuename"
-                placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囧悕绉�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-card>
+          <!-- <el-row :gutter="20">
 
-      <!-- 鎶ュ憡淇℃伅閮ㄥ垎 -->
-      <el-card header="鎶ュ憡淇℃伅" class="form-section">
-        <el-row :gutter="20">
-          <el-col :span="8">
-            <el-form-item label="鎶ュ憡浜虹紪鍙�" prop="reporterno">
-              <el-select
-                v-model="formData.reporterno"
-                @change="handleReporterChange"
-              >
-                <el-option
-                  v-for="reporter in reporters"
-                  :key="reporter.reportNo"
-                  :label="reporter.reportName"
-                  :value="reporter.reportNo"
+            <el-col :span="6">
+              <el-form-item label="瀛﹀巻" prop="education">
+                <el-select
+                  v-model="formData.education"
+                  placeholder="璇烽�夋嫨瀛﹀巻"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_education || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="鑱屼笟" prop="occupation">
+                <el-select
+                  v-model="formData.occupation"
+                  placeholder="璇烽�夋嫨鑱屼笟"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_occupation || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="绫嶈疮" prop="nativeplace">
+                <el-input
+                  v-model="formData.nativeplace"
+                  placeholder="璇疯緭鍏ョ睄璐�"
                 />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎶ュ憡浜哄鍚�" prop="reportername">
-              <el-input
-                v-model="formData.reportername"
-                placeholder="鎶ュ憡浜哄鍚�"
-                :disabled="true"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="鎶ュ憡浜虹數璇�" prop="reporterphone">
-              <el-input
-                v-model="formData.reporterphone"
-                placeholder="鎶ュ憡浜鸿仈绯荤數璇�"
-              />
-            </el-form-item>
-          </el-col>
-        </el-row>
+              </el-form-item>
+            </el-col>
+          </el-row> -->
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="鐜板眳浣忓湴" prop="residenceaddress">
+                <li-area-select
+                  ref="residenceSelect"
+                  v-model="residenceAddress"
+                  @change="handleResidenceAddressChange"
+                />
+                <el-input
+                  v-model="formData.residenceaddress"
+                  placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+                  style="margin-top: 8px"
+                  @blur="handleResidenceDetailBlur"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="浣忓潃" prop="registeraddress">
+                <li-area-select
+                  ref="registerSelect"
+                  v-model="registerAddress"
+                  @change="handleRegisterAddressChange"
+                />
+                <el-input
+                  v-model="formData.registeraddress"
+                  placeholder="璇疯緭鍏ヨ缁嗗湴鍧�"
+                  style="margin-top: 8px"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-card>
 
-        <el-row :gutter="20">
-          <el-col :span="12">
-            <el-form-item label="鎶ュ憡鏃堕棿" prop="reporttime">
-              <el-date-picker
-                v-model="formData.reporttime"
-                type="datetime"
-                placeholder="閫夋嫨鎶ュ憡鏃堕棿"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                style="width: 100%"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="閮ㄩ棬ID" prop="deptid">
-              <el-input v-model="formData.deptid" placeholder="璇疯緭鍏ラ儴闂↖D" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-      </el-card>
-    </el-form>
+        <!-- 鍖荤枟淇℃伅閮ㄥ垎 -->
+        <el-card header="鍖荤枟淇℃伅" class="form-section">
+          <el-row :gutter="20">
+            <!-- <el-col :span="8">
+              <el-form-item label="鍏ラ櫌鏃堕棿" prop="Reporttothehospital">
+                <el-date-picker
+                  v-model="formData.entryTime"
+                  type="datetime"
+                  placeholder="閫夋嫨鍏ラ櫌鏃堕棿"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col> -->
+            <el-col :span="8">
+              <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
+                <el-input
+                  v-model="formData.inpatientno"
+                  placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
 
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handleClose">鍙栨秷</el-button>
-      <el-button type="primary" @click="handleSubmit" :loading="submitLoading">
-        {{ isEdit ? "鏇存柊" : "淇濆瓨" }}
-      </el-button>
-    </div>
-  </el-dialog>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="琛�鍨�" prop="bloodtype">
+                <el-radio-group v-model="formData.bloodtype">
+                  <el-radio
+                    v-for="dict in dict.type.sys_BloodType || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                    >{{ dict.label }}</el-radio
+                  >
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="Rh(D)" prop="rhyin">
+                <el-radio-group v-model="formData.rhyin">
+                  <el-radio
+                    v-for="dict in dict.type.sys_bloodtype_rhd || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                    >{{ dict.label }}</el-radio
+                  >
+                </el-radio-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
+                <el-input
+                  v-model="formData.diagnosisname"
+                  placeholder="璇疯緭鍏ョ柧鐥呰瘖鏂悕绉�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <!-- 鐤剧梾绫诲瀷 -->
+          <el-row>
+            <el-col :span="16">
+              <el-form-item label="鐤剧梾绫诲瀷" align="left">
+                <el-checkbox-group v-model="formData.diseasetype">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_DiseaseType || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鍏朵粬" prop="diseasetypeOther">
+                <el-input
+                  v-model="formData.diseasetypeOther"
+                  placeholder="璇疯緭鍏ュ叾浠�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 浼犳煋鐥� -->
+          <el-row>
+            <el-col :span="12">
+              <el-form-item align="left" label="浼犳煋鐥�">
+                <el-checkbox-group v-model="formData.infectious">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_Infectious || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item align="left" label="鍏朵粬" prop="infectiousOther">
+                <el-input
+                  v-model="formData.infectiousOther"
+                  placeholder="璇疯緭鍏ュ叾浠�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 鐥呬汉鐘跺喌鍜屽叾浠栨儏鍐� -->
+          <el-row>
+            <el-col :span="9">
+              <el-form-item align="left" label="鐥呬汉鐘跺喌">
+                <el-checkbox-group v-model="formData.patientstate">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_patientstate || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="15" align="left">
+              <el-form-item label="鍏朵粬鎯呭喌">
+                <el-checkbox-group v-model="formData.othercases">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_OtherCases || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- <el-row :gutter="20">
+            <el-col :span="8">
+              <el-form-item label="GCS璇勫垎" prop="gcsScore">
+                <el-input
+                  v-model="formData.gcsScore"
+                  placeholder="璇疯緭鍏CS璇勫垎"
+                />
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="8">
+              <el-form-item label="鍗忚皟鍛樺鍚�" prop="coordinatorName">
+                <el-input
+                  v-model="formData.coordinatorName"
+                  placeholder="璇疯緭鍏ュ崗璋冨憳濮撳悕"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row> -->
+
+          <!-- <el-row>
+            <el-col :span="24">
+              <el-form-item label="鐥呮儏姒傚喌" prop="illnessoverview">
+                <el-input
+                  v-model="formData.illnessoverview"
+                  type="textarea"
+                  :rows="3"
+                  placeholder="璇疯緭鍏ョ梾鎯呮鍐�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row> -->
+        </el-card>
+        <!-- 鎰忔効鍜屼翰灞炰俊鎭儴鍒� -->
+        <el-card header="鎰忔効鍜屼翰灞炰俊鎭�" class="form-section">
+          <!-- 鏈汉鎰忔効 -->
+          <el-row>
+            <el-col :span="24">
+              <el-form-item align="left" label="鏈汉鎰忔効 ">
+                <el-checkbox-group v-model="formData.selfwill">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_SelfWill || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 浜插睘鐘跺喌 -->
+          <el-row>
+            <el-col :span="12">
+              <el-form-item
+                label="浜插睘鐘跺喌"
+                prop="kinship"
+                class="relation"
+                align="left"
+              >
+                <el-checkbox-group v-model="formData.kinship">
+                  <el-checkbox
+                    v-for="dict in dict.type.sys_Kinship || []"
+                    :key="dict.value"
+                    :label="dict.value"
+                  >
+                    {{ dict.label }}
+                  </el-checkbox>
+                </el-checkbox-group>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="鍏朵粬" prop="kinshipOther">
+                <el-input
+                  v-model="formData.kinshipOther"
+                  placeholder="璇疯緭鍏ュ叾浠�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 涓昏浜插睘 -->
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="涓昏浜插睘" prop="majorrelatives">
+                <el-input
+                  v-model="formData.majorrelatives"
+                  placeholder="璇疯緭鍏ヤ富瑕佷翰灞�"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="涓庢綔鍦ㄦ崘鐚�呭叧绯�" prop="familyrelations">
+                <el-select
+                  v-model="formData.familyrelations"
+                  placeholder="璇烽�夋嫨涓庢崘鐚�呭叧绯�"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_FamilyRelation || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 淇℃伅鏉ユ簮 -->
+        </el-card>
+        <!-- 鍦板潃淇℃伅閮ㄥ垎 -->
+        <!-- <el-card header="鍦板潃淇℃伅" class="form-section">
+
+        </el-card> -->
+        <!-- 鎶ュ憡淇℃伅閮ㄥ垎 -->
+        <el-card header="鎶ュ憡淇℃伅" class="form-section">
+          <el-row :gutter="20">
+            <!-- <el-col :span="8">
+              <el-form-item label="鎶ュ憡浜虹紪鍙�" prop="reporterno">
+                <el-select
+                  v-model="formData.reporterno"
+                  @change="handleReporterChange"
+                >
+                  <el-option
+                    v-for="reporter in reporters"
+                    :key="reporter.reportNo"
+                    :label="reporter.reportName"
+                    :value="reporter.reportNo"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col> -->
+            <el-row>
+              <el-col :span="12">
+                <el-form-item align="left" label="淇℃伅鏉ユ簮">
+                  <el-checkbox-group v-model="formData.infosources">
+                    <el-checkbox
+                      v-for="dict in dict.type.sys_InfoSources || []"
+                      :key="dict.value"
+                      :label="dict.value"
+                    >
+                      {{ dict.label }}
+                    </el-checkbox>
+                  </el-checkbox-group>
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="鍏朵粬" prop="infosourcesOther">
+                  <el-input
+                    v-model="formData.infosourcesOther"
+                    placeholder="璇疯緭鍏ヤ俊鎭潵婧愬叾浠�"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+
+            <!-- 淇℃伅鍛� -->
+            <el-row>
+              <el-col :span="8">
+                <el-form-item label="淇℃伅鍛�" prop="infoName">
+                  <el-input
+                    v-model="formData.infoName"
+                    placeholder="璇疯緭鍏ヤ俊鎭憳"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="8">
+                <el-form-item label="鑱旂郴鐢佃瘽" prop="infophone">
+                  <el-input
+                    v-model="formData.infophone"
+                    placeholder="璇疯緭鍏ヤ俊鎭憳鑱旂郴鐢佃瘽"
+                  />
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-col :span="8">
+              <el-form-item label="鎶ュ憡浜虹瀛�" prop="reportername">
+                <el-input
+                  v-model="formData.reportername"
+                  placeholder="鎶ュ憡浜哄鍚�"
+                  :disabled="true"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鑱旂郴鐢佃瘽" prop="reporterphone">
+                <el-input
+                  v-model="formData.reporterphone"
+                  placeholder="鎶ュ憡浜鸿仈绯荤數璇�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <el-row :gutter="20">
+            <el-col :span="12">
+              <el-form-item label="鎶ュ憡鏃堕棿" prop="reporttime">
+                <el-date-picker
+                  v-model="formData.reporttime"
+                  type="date"
+                  placeholder="閫夋嫨鎶ュ憡鏃堕棿"
+                  value-format="yyyy-MM-dd "
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <!-- <el-col :span="12">
+              <el-form-item label="閮ㄩ棬ID" prop="deptid">
+                <el-input
+                  v-model="formData.deptid"
+                  placeholder="璇疯緭鍏ラ儴闂↖D"
+                />
+              </el-form-item>
+            </el-col> -->
+          </el-row>
+        </el-card>
+
+        <!-- 鎹愮尞淇℃伅閮ㄥ垎 -->
+        <el-card header="鎹愮尞淇℃伅" class="form-section">
+          <el-row :gutter="20">
+            <!-- <el-col :span="8">
+              <el-form-item label="鎹愮尞绫诲埆" prop="donationcategory">
+                <el-select
+                  v-model="formData.donationcategory"
+                  placeholder="璇烽�夋嫨鎹愮尞绫诲埆"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_DonationCategory || []"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col> -->
+            <el-col :span="8">
+              <el-form-item label="妗堜緥涓婃姤鏃堕棿" prop="donatetime">
+                <el-date-picker
+                  v-model="formData.donatetime"
+                  type="datetime"
+                  placeholder="閫夋嫨妗堜緥鏃堕棿"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+                <el-select v-model="formData.recordstate" :disabled="isEdit">
+                  <el-option label="鏂板缓" value="0" />
+                  <el-option label="宸蹭笂鎶�" value="1" />
+                  <el-option label="瀹℃牳涓�" value="2" />
+                  <el-option label="宸插畬鎴�" value="3" />
+                  <el-option label="宸茬粓姝�" value="99" />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+
+          <!-- 绾㈠崄瀛椾細鍜岃仈绯讳汉 -->
+          <el-row>
+            <el-col :span="8">
+              <el-form-item align="left" label="绾㈠崄瀛椾細" prop="redorganno">
+                <!-- <org-selecter
+                  ref="addCrossOrgSelect"
+                  :org-type="'2'"
+                  v-model="formData.redorganno"
+                /> -->
+                <el-select
+                  v-model="formData.redorganname"
+                  placeholder="璇烽�夋嫨绾㈠崄瀛椾細鏈烘瀯鍚嶇О"
+                >
+                  <el-option
+                    v-for="dict in dict.type.sys_redcrossagency"
+                    :key="dict.value"
+                    :label="dict.label"
+                    :value="dict.value"
+                  ></el-option>
+                </el-select>
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鑱旂郴浜�" prop="contactperson">
+                <el-input
+                  v-model="formData.contactperson"
+                  placeholder="璇疯緭鍏ヨ仈绯讳汉"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="8">
+              <el-form-item label="鑱旂郴鏃堕棿" prop="contacttime">
+                <el-date-picker
+                  v-model="formData.contacttime"
+                  type="datetime"
+                  value-format="yyyy-MM-dd HH:mm:ss"
+                  placeholder="閫夋嫨鎶ュ憡鏃堕棿"
+                  style="width: 100%"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row :gutter="20">
+            <!-- <el-col :span="12">
+              <el-form-item label="鑾峰彇缁勭粐缂栧彿" prop="acquisitiontissueno">
+                <el-input
+                  v-model="formData.acquisitiontissueno"
+                  placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囩紪鍙�"
+                />
+              </el-form-item>
+            </el-col> -->
+            <el-col :span="12">
+              <el-form-item label="鑾峰彇缁勭粐鍚嶇О" prop="acquisitiontissuename">
+                <el-input
+                  v-model="formData.acquisitiontissuename"
+                  placeholder="璇疯緭鍏ヨ幏鍙栫粍缁囧悕绉�"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-card>
+        <!-- 涓婃姤闃舵闄勪欢 -->
+<el-card v-if="reportAttachments && reportAttachments.length > 0" class="form-section" shadow="never">
+  <div slot="header" class="section-header">
+    <i class="el-icon-paperclip" style="color: #409EFF; margin-right: 8px;"></i>
+    <span>涓婃姤闃舵闄勪欢</span>
+  </div>
+  <div class="attachment-list">
+    <el-tabs v-model="reportActiveTab" type="border-card">
+      <el-tab-pane
+        v-for="category in reportCategories"
+        :key="category"
+        :label="category + '(' + getReportCategoryCount(category) + ')'"
+        :name="category"
+      >
+        <el-table :data="getReportCategoryFiles(category)" style="width: 100%" size="small" border>
+          <el-table-column label="鏂囦欢鍚�" min-width="200">
+            <template #default="scope">
+              <i class="el-icon-document" style="margin-right: 8px; color: #409EFF;"></i>
+              <span class="file-name">{{ scope.row.fileName }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="鏂囦欢绫诲瀷" width="100">
+            <template #default="scope">
+              <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
+            </template>
+          </el-table-column>
+          <el-table-column label="鍒涘缓鏃堕棿" width="160">
+            <template #default="scope">
+              <span>{{ formatDateTime(scope.row.createTime) }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="鎿嶄綔" width="120">
+            <template #default="scope">
+              <el-button size="mini" type="primary" @click="handleReportPreview(scope.row)">棰勮</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</el-card>
+
+<!-- 鍔犺浇涓崰浣� -->
+<el-card v-else-if="reportAttachmentLoading" class="form-section" shadow="never">
+  <div slot="header" class="section-header">
+    <i class="el-icon-paperclip" style="color: #409EFF; margin-right: 8px;"></i>
+    <span>涓婃姤闃舵闄勪欢</span>
+  </div>
+  <div style="text-align:center; padding:20px;">鍔犺浇闄勪欢涓�...</div>
+</el-card>
+
+<!-- 鏈� reportId 浣嗘棤闄勪欢 -->
+<el-card v-else-if="editData.reportId" class="form-section" shadow="never">
+  <div slot="header" class="section-header">
+    <i class="el-icon-paperclip" style="color: #409EFF; margin-right: 8px;"></i>
+    <span>涓婃姤闃舵闄勪欢</span>
+  </div>
+  <div style="text-align:center; padding:20px; color:#909399;">鏆傛棤涓婃姤闄勪欢</div>
+</el-card>
+      </el-form>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="handleClose">鍙栨秷</el-button>
+        <el-button
+          type="primary"
+          @click="handleSubmit"
+          :loading="submitLoading"
+        >
+          {{ isEdit ? "鏇存柊" : "淇濆瓨" }}
+        </el-button>
+      </div>
+    </el-dialog>
+  </div>
 </template>
 
 <script>
@@ -467,6 +780,7 @@
   updateDonatebaseinfo
 } from "@/api/project/donatebaseinfo";
 import OrgSelecter from "@/views/project/components/orgselect";
+import { donateInfo } from "@/api/businessApi/index";
 import LiAreaSelect from "@/components/Address";
 
 export default {
@@ -476,7 +790,26 @@
     LiAreaSelect
   },
 
-  dicts: ["sys_bloodtype_rhd", "sys_BloodType"],
+  // 娣诲姞鎵�鏈夐渶瑕佺殑瀛楀吀绫诲瀷
+  dicts: [
+    "sys_redcrossagency",
+    "sys_bloodtype_rhd",
+    "sys_BloodType",
+    "sys_user_sex",
+    "sys_IDType",
+    "sys_nation",
+    "sys_education",
+    "sys_occupation",
+    "sys_DiseaseType",
+    "sys_Infectious",
+    "sys_patientstate",
+    "sys_OtherCases",
+    "sys_SelfWill",
+    "sys_Kinship",
+    "sys_FamilyRelation",
+    "sys_InfoSources",
+    "sys_DonationCategory"
+  ],
 
   props: {
     visible: {
@@ -498,15 +831,21 @@
   },
   data() {
     return {
-      localVisible: this.visible,
       isEdit: false,
       submitLoading: false,
       residenceAddress: {},
       registerAddress: {},
       formData: this.getDefaultFormData(),
+      reportAttachments: [], // 涓婃姤闃舵鐨勯檮浠跺垪琛�
+      reportAttachmentLoading: false, // 鍔犺浇鐘舵��
+      reportActiveTab: "鐧昏琛ㄩ檮浠�", // 褰撳墠婵�娲荤殑闄勪欢鍒嗙被 Tab
+      presetCategories: ["鐧昏琛ㄩ檮浠�", "璇佷欢鐓�", "鐤剧梾璇婃柇娌荤枟"], // 棰勮鍒嗙被
       rules: {
         name: [
           { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+        ],
+        caseNo: [
+          { required: true, message: "璇疯緭鍏ユ崘鐚�呯紪鍙�", trigger: "blur" }
         ],
         sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
         idcardtype: [
@@ -532,6 +871,12 @@
         ],
         reporttime: [
           { required: true, message: "璇烽�夋嫨鎶ュ憡鏃堕棿", trigger: "change" }
+        ],
+        residenceaddress: [
+          { required: true, message: "璇疯緭鍏ョ幇灞呬綇鍦拌缁嗗湴鍧�", trigger: "blur" }
+        ],
+        registeraddress: [
+          { required: true, message: "璇疯緭鍏ヤ綇鍧�璇︾粏鍦板潃", trigger: "blur" }
         ]
       }
     };
@@ -539,31 +884,74 @@
   computed: {
     title() {
       return this.isEdit ? "缂栬緫妗堜緥淇℃伅" : "鏂板鎹愮尞妗堜緥";
+    },
+    dialogVisible: {
+      get() {
+        return this.visible;
+      },
+      set(value) {
+        this.$emit("update:visible", value);
+        if (!value) {
+          this.handleClose();
+        }
+      }
+    },
+    reportCategories() {
+      if (!this.reportAttachments || this.reportAttachments.length === 0)
+        return [];
+      const cats = new Set();
+      this.reportAttachments.forEach(item => {
+        const type = item.fileType || item.filetype || "";
+        if (this.presetCategories.includes(type)) {
+          cats.add(type);
+        } else {
+          cats.add("鏈垎绫�");
+        }
+      });
+      const order = ["鐧昏琛ㄩ檮浠�", "璇佷欢鐓�", "鐤剧梾璇婃柇娌荤枟", "鏈垎绫�"];
+      return order.filter(c => cats.has(c));
     }
   },
   watch: {
     visible(newVal) {
-      this.localVisible = newVal;
+      console.log("visible鍙樺寲:", newVal);
       if (newVal) {
-        this.initForm();
+        this.$nextTick(() => {
+          this.initForm();
+        });
+      } else {
+        this.handleClose();
       }
     },
-    localVisible(newVal) {
-      this.$emit("update:visible", newVal);
+    "editData.reportId": {
+      immediate: true,
+      handler(newVal) {
+        if (newVal) {
+          this.loadReportAttachments(newVal);
+        } else {
+          this.reportAttachments = [];
+        }
+      }
     },
     editData: {
-      handler(newVal) {
-        if (newVal && newVal.id) {
-          this.isEdit = true;
-          this.$nextTick(() => {
-            // 纭繚 DOM 宸茬粡鏇存柊鍚庡啀杩涜琛ㄥ崟鎿嶄綔
-            this.initForm(newVal);
-          });
-        }
-      },
+      immediate: true,
       deep: true,
-      immediate: true
+      handler(newVal) {
+        console.log("editData鍙樺寲:", newVal);
+        this.isEdit = !!(newVal && newVal.id);
+      }
     }
+  },
+  created() {
+    console.log("EditCaseModal created");
+    console.log("visible:", this.visible);
+    console.log("editData:", this.editData);
+  },
+  mounted() {
+    console.log("EditCaseModal mounted");
+    console.log("visible:", this.visible);
+    console.log("editData:", this.editData);
+    console.log("isEdit:", this.isEdit);
   },
   methods: {
     getDefaultFormData() {
@@ -605,21 +993,38 @@
         illnessoverview: null,
         coordinatorNo: null,
         coordinatorName: null,
+        diseasetype: [],
+        infectious: [],
+        patientstate: [],
+        othercases: [],
 
         // 鍦板潃淇℃伅
         residenceaddress: null,
         residenceprovince: null,
         residencecity: null,
+        residencetown: null,
         registeraddress: null,
         registerprovince: null,
         registercity: null,
+        registertown: null,
+
+        // 鎰忔効鍜屼翰灞炰俊鎭�
+        selfwill: [],
+        kinship: [],
+        majorrelatives: null,
+        familyrelations: null,
+        infosources: [],
+        infoName: null,
+        infophone: null,
+        redorganno: null,
+        contactperson: null,
+        contacttime: null,
 
         // 鎹愮尞淇℃伅
         donationcategory: null,
         donatetime: null,
         recordstate: "0",
-        acquisitiontissueno: "ZJOPO",
-        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�",
+        acquisitiontissuename: "闈掑矝澶у闄勫睘鍖婚櫌",
 
         // 鎶ュ憡淇℃伅
         reporterno: null,
@@ -628,41 +1033,52 @@
         reporttime: null,
         deptid: null,
 
-        // 鏁扮粍瀛楁
-        diseasetype: [],
-        infectious: [],
-        selfwill: [],
-        othercases: [],
-        infosources: [],
-        kinship: [],
-        patientstate: []
+        // 鍏朵粬瀛楁
+        diseasetypeOther: null,
+        infectiousOther: null,
+        kinshipOther: null,
+        infosourcesOther: null
       };
     },
 
     async initForm() {
-      console.log(this.isEdit);
+      console.log("鍒濆鍖栬〃鍗曪紝isEdit:", this.isEdit);
+      try {
+        if (this.isEdit && this.editData && this.editData.id) {
+          console.log("鍔犺浇缂栬緫鏁版嵁锛宨d:", this.editData.id);
+          await this.loadEditData();
+        } else {
+          console.log("鏂板妯″紡锛屽垵濮嬪寲琛ㄥ崟");
+          this.formData = this.getDefaultFormData();
+          this.formData.nationality = "涓浗";
+          this.formData.bloodtype = "0";
+          this.formData.rhyin = "0";
+          this.formData.recordstate = "0";
+          this.formData.acquisitiontissuename = "闈掑矝澶у闄勫睘鍖婚櫌";
 
-      if (this.isEdit) {
-        await this.loadEditData();
-      } else {
-        this.formData = this.getDefaultFormData();
-        // 璁剧疆榛樿鍊�
-        this.formData.nationality = "涓浗";
-        this.formData.bloodtype = "0";
-        this.formData.rhyin = "0";
-        this.formData.recordstate = "0";
-        this.formData.acquisitiontissueno = "ZJOPO";
-        this.formData.acquisitiontissuename = "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�";
+          // 璁剧疆淇℃伅鍛樺拰鐢佃瘽榛樿鍊�
+          this.formData.infoName = "瀛欐枃鏈�";
+          this.formData.infophone = "18661808259";
+        }
+      } catch (error) {
+        console.error("鍒濆鍖栬〃鍗曞け璐�:", error);
+        this.$message.error("鍒濆鍖栬〃鍗曞け璐�");
+      } finally {
+        this.$nextTick(() => {
+          if (this.$refs.formRef) {
+            this.$refs.formRef.clearValidate();
+          }
+        });
       }
-      this.$nextTick(() => {
-        this.$refs.formRef?.clearValidate();
-      });
     },
 
     async loadEditData() {
       try {
         const response = await getDonatebaseinfo(this.editData.id);
+        response.data.firstMedicalInstitution =
+          response.data.treatmenthospitalname;
         const data = response.data;
+        console.log("鍔犺浇鍒扮殑鏁版嵁:", data);
 
         // 澶勭悊鏁扮粍瀛楁
         const arrayFields = [
@@ -675,41 +1091,48 @@
           "patientstate"
         ];
         arrayFields.forEach(field => {
-          if (data[field]) {
+          if (data[field] && typeof data[field] === "string") {
             data[field] = data[field].split(",");
-          } else {
+          } else if (!data[field]) {
             data[field] = [];
           }
         });
 
         this.formData = { ...this.getDefaultFormData(), ...data };
+        console.log("鍚堝苟鍚庣殑formData:", this.formData);
+        this.formData.infoName = "瀛欐枃鏈�";
+        this.formData.infophone = "18661808259";
+        if (!this.formData.currentMedicalInstitution)
+          this.formData.currentMedicalInstitution = "闈掑矝澶у闄勫睘鍖婚櫌";
 
-        // 璁剧疆鍦板潃淇℃伅
-        if (data.residenceprovince) {
+        if (!this.formDatacurrentDept) this.formData.currentDept = "鍣ㄥ畼鎹愮尞绉�";
+        // 鏍规嵁杩斿洖鏁版嵁璁剧疆鍦板潃灞曠ず淇℃伅
+        if (data.residenceprovincename) {
           this.residenceAddress = {
             sheng: data.residenceprovincename,
-            shi: data.residencecityname,
-            qu: data.residencetownname
+            shi: data.residencecountyname,
+            qu: data.residencecommunityname
           };
         }
-
+        // 鎴风睄鍦板潃
         if (data.registerprovince) {
           this.registerAddress = {
-            sheng: data.registerprovincename,
+            sheng: data.registerprovince,
             shi: data.registercityname,
-            qu: data.registertownname
+            qu: data.registercommunityname
           };
         }
+        console.log(this.registerAddress, "registerAddress12");
 
         this.calculateAge(data.birthday);
       } catch (error) {
+        console.error("鑾峰彇妗堜緥鏁版嵁澶辫触:", error);
         this.$message.error("鑾峰彇妗堜緥鏁版嵁澶辫触");
         this.handleClose();
       }
     },
 
     handleIdCardBlur() {
-      // 韬唤璇佽嚜鍔ㄥ~鍏呴�昏緫
       this.updateMessage();
     },
 
@@ -805,19 +1228,42 @@
     },
 
     handleResidenceAddressChange(address) {
-      this.formData.residenceprovince = address.sheng;
-      this.formData.residencecity = address.shi;
-      this.formData.residencetown = address.qu;
-    },
+      this.formData.residenceprovincename = address.sheng;
+      this.formData.residencecountyname = address.shi;
+      this.formData.residencecommunityname = address.qu;
 
+      // 姣忔鐜颁綇鍧�鐪佸競鍖哄彉鍖栨椂锛屽鏋滄埛绫嶅湴鍧�鐨勭渷甯傚尯瀹屽叏涓虹┖锛屽垯鑷姩濉厖
+      const registerProvinceEmpty = !this.formData.registerprovince;
+      const registerCityEmpty = !this.formData.registercityname;
+      const registerTownEmpty = !this.formData.registercommunityname;
+
+      if (registerProvinceEmpty || registerCityEmpty || registerTownEmpty) {
+        this.formData.registerprovince = address.sheng;
+        this.formData.registercityname = address.shi;
+        this.formData.registercommunityname = address.qu;
+        this.registerAddress = {
+          sheng: address.sheng,
+          shi: address.shi,
+          qu: address.qu
+        };
+      }
+    },
+    // 鐜板眳浣忓湴璇︾粏鍦板潃澶辩劍鏃讹紝濡傛灉浣忓潃璇︾粏鍦板潃涓虹┖鍒欒嚜鍔ㄥ~鍏�
+    handleResidenceDetailBlur() {
+      if (this.formData.residenceaddress && !this.formData.registeraddress) {
+        this.formData.registeraddress = this.formData.residenceaddress;
+      }
+    },
     handleRegisterAddressChange(address) {
+      console.log(this.registerAddress, "registerAddress11");
+
       this.formData.registerprovince = address.sheng;
-      this.formData.registercity = address.shi;
-      this.formData.registertown = address.qu;
+      this.formData.registercityname = address.shi;
+      this.formData.registercommunityname = address.qu;
     },
 
     handleClose() {
-      this.localVisible = false;
+      console.log("鍏抽棴寮规");
       this.isEdit = false;
       this.submitLoading = false;
       this.formData = this.getDefaultFormData();
@@ -828,21 +1274,39 @@
 
     async handleSubmit() {
       const valid = await this.$refs.formRef.validate().catch(() => false);
-      if (!valid) return;
-
+      if (!valid) {
+        this.$message.error("璇风‘璁よ〃鍗曞繀濉俊鎭畬鏁村悗鎻愪氦");
+        return;
+      }
+      // 棰濆鏍¢獙鐜板眳浣忓湴鍜屼綇鍧�鐨勭渷甯傚尯鏄惁宸查�夋嫨
+      if (
+        !this.formData.residenceprovincename ||
+        !this.formData.residencecountyname
+      ) {
+        this.$message.error("璇峰畬鍠勭幇灞呬綇鍦扮殑鐪佸競鍖轰俊鎭�");
+        return;
+      }
+      if (!this.formData.registerprovince || !this.formData.registercityname) {
+        this.$message.error("璇峰畬鍠勪綇鍧�鐨勭渷甯傚尯淇℃伅");
+        return;
+      }
       this.submitLoading = true;
       try {
         const submitData = this.processSubmitData();
+        console.log("鎻愪氦鏁版嵁:", submitData);
 
         const result = await updateDonatebaseinfo(submitData);
         if (result.code === 200) {
           this.$message.success(this.isEdit ? "鏇存柊鎴愬姛" : "鏂板鎴愬姛");
           this.$emit("success", result.data);
+          console.log(1122);
+
           this.handleClose();
         } else {
           this.$message.error(result.msg || "鎿嶄綔澶辫触");
         }
       } catch (error) {
+        console.error("鎿嶄綔澶辫触:", error);
         this.$message.error("鎿嶄綔澶辫触");
       } finally {
         this.submitLoading = false;
@@ -886,6 +1350,11 @@
           "YYYY-MM-DD HH:mm:ss"
         );
       }
+      if (data.contacttime) {
+        data.contacttime = this.$moment(data.contacttime).format(
+          "YYYY-MM-DD HH:mm:ss"
+        );
+      }
 
       // 璁剧疆榛樿鍊�
       if (!data.recordstate) {
@@ -896,6 +1365,79 @@
       }
 
       return data;
+    },
+    /** 鍔犺浇涓婃姤妗堜緥闄勪欢 */
+    async loadReportAttachments(reportId) {
+      this.reportAttachmentLoading = true;
+      try {
+        const res = await donateInfo(reportId);
+        const data = res.data || res;
+        this.reportAttachments = (data.annexfilesList || []).map(item => ({
+          ...item,
+          fileType: item.fileType || item.filetype || "" // 鍏煎瀛楁澶у皬鍐�
+        }));
+      } catch (error) {
+        console.error("鍔犺浇涓婃姤闄勪欢澶辫触:", error);
+        this.$message.error("鍔犺浇涓婃姤闄勪欢澶辫触");
+      } finally {
+        this.reportAttachmentLoading = false;
+      }
+    },
+
+    /** 鑾峰彇鏌愬垎绫绘枃浠舵暟閲� */
+    getReportCategoryCount(category) {
+      return this.reportAttachments.filter(item => {
+        const type = item.fileType || "";
+        if (category === "鏈垎绫�") {
+          return !this.presetCategories.includes(type);
+        }
+        return type === category;
+      }).length;
+    },
+
+    /** 鑾峰彇鏌愬垎绫绘枃浠跺垪琛� */
+    getReportCategoryFiles(category) {
+      return this.reportAttachments.filter(item => {
+        const type = item.fileType || "";
+        if (category === "鏈垎绫�") {
+          return !this.presetCategories.includes(type);
+        }
+        return type === category;
+      });
+    },
+
+    /** 棰勮涓婃姤闄勪欢锛堢洿鎺ュ湪鏂扮獥鍙f墦寮�锛� */
+    handleReportPreview(file) {
+      const url = file.fileUrl || file.path;
+      if (url) {
+        window.open(url, "_blank");
+      } else {
+        this.$message.warning("鏂囦欢鍦板潃涓嶅瓨鍦�");
+      }
+    },
+
+    /** 鑾峰彇鏂囦欢绫诲瀷锛堢敤浜庢爣绛炬樉绀猴級 */
+    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"];
+      if (imageTypes.includes(extension)) return "image";
+      if (pdfTypes.includes(extension)) return "pdf";
+      if (officeTypes.includes(extension)) return "office";
+      return "other";
+    },
+
+    /** 鏃ユ湡鏃堕棿鏍煎紡鍖栵紙澶嶇敤锛� */
+    formatDateTime(dateTime) {
+      if (!dateTime) return "";
+      return this.$moment
+        ? this.$moment(dateTime).format("YYYY-MM-DD HH:mm:ss")
+        : dateTime;
     }
   }
 };
@@ -905,6 +1447,7 @@
 .form-section {
   margin-bottom: 20px;
 }
+
 .form-section:last-child {
   margin-bottom: 0;
 }

--
Gitblit v1.9.3