WXL
昨天 c8e9849cb5f24848df0174c13bfbbff37bb08a5a
src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -17,12 +17,59 @@
        <!-- 基础信息部分 -->
        <el-card header="基础信息" class="form-section">
          <el-row :gutter="20">
            <el-col :span="11">
              <el-form-item label="案例编号" prop="caseNo">
            <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="12">
              <el-form-item label="捐献编号" prop="caseNo">
                <el-input
                  v-model="formData.caseNo"
                  :disabled="isEdit"
                  placeholder="系统自动生成"
                  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>
@@ -37,12 +84,12 @@
          </el-row>
          <el-row :gutter="20">
            <el-col :span="6">
            <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="6">
            <el-col :span="8">
              <el-form-item label="性别" prop="sex">
                <el-select v-model="formData.sex" placeholder="请选择性别">
                  <el-option label="男" value="1" />
@@ -50,7 +97,48 @@
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
            <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"
@@ -65,7 +153,7 @@
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="6">
            <el-col :span="12">
              <el-form-item label="证件号码" prop="idcardno">
                <el-input
                  v-model="formData.idcardno"
@@ -76,55 +164,8 @@
            </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 dict.type.sys_nation || []"
                    :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="nationality">
                <el-input
                  v-model="formData.nationality"
                  placeholder="请输入国籍"
                />
              </el-form-item>
            </el-col>
          </el-row>
          <!-- <el-row :gutter="20">
          <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
@@ -163,13 +204,34 @@
                />
              </el-form-item>
            </el-col>
          </el-row>
          </el-row> -->
          <el-row :gutter="20">
            <el-col :span="8">
              <el-form-item label="上报医院" prop="treatmenthospitalname">
            <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.treatmenthospitalname"
                  placeholder="请输入上报医院"
                  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>
@@ -179,7 +241,7 @@
        <!-- 医疗信息部分 -->
        <el-card header="医疗信息" class="form-section">
          <el-row :gutter="20">
            <el-col :span="8">
            <!-- <el-col :span="8">
              <el-form-item label="入院时间" prop="Reporttothehospital">
                <el-date-picker
                  v-model="formData.entryTime"
@@ -189,23 +251,12 @@
                  style="width: 100%"
                />
              </el-form-item>
            </el-col>
            </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>
@@ -237,26 +288,39 @@
              </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-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-form-item label="其他" prop="diseasetypeOther">
              <el-input
                v-model="formData.diseasetypeOther"
                placeholder="请输入其他"
              />
            </el-form-item>
            <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>
          <!-- 传染病 -->
@@ -314,48 +378,7 @@
            </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-row :gutter="20">
            <el-col :span="8">
              <el-form-item label="GCS评分" prop="gcsScore">
                <el-input
@@ -373,9 +396,9 @@
                />
              </el-form-item>
            </el-col>
          </el-row>
          </el-row> -->
          <el-row>
          <!-- <el-row>
            <el-col :span="24">
              <el-form-item label="病情概况" prop="illnessoverview">
                <el-input
@@ -386,43 +409,8 @@
                />
              </el-form-item>
            </el-col>
          </el-row>
          </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">
          <!-- 本人意愿 -->
@@ -483,7 +471,7 @@
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="与捐献者关系" prop="familyrelations">
              <el-form-item label="与潜在捐献者关系" prop="familyrelations">
                <el-select
                  v-model="formData.familyrelations"
                  placeholder="请选择与捐献者关系"
@@ -500,55 +488,118 @@
          </el-row>
          <!-- 信息来源 -->
          <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-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="infosourcesOther">
              <el-form-item label="联系电话" prop="reporterphone">
                <el-input
                  v-model="formData.infosourcesOther"
                  placeholder="请输入信息来源其他"
                  v-model="formData.reporterphone"
                  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-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="8">
              <el-form-item label="联系电话" prop="infophone">
            <!-- <el-col :span="12">
              <el-form-item label="部门ID" prop="deptid">
                <el-input
                  v-model="formData.infophone"
                  placeholder="请输入信息员联系电话"
                  v-model="formData.deptid"
                  placeholder="请输入部门ID"
                />
              </el-form-item>
            </el-col>
            </el-col> -->
          </el-row>
        </el-card>
        <!-- 捐献信息部分 -->
        <el-card header="捐献信息" class="form-section">
          <el-row :gutter="20">
            <el-col :span="8">
            <!-- <el-col :span="8">
              <el-form-item label="捐献类别" prop="donationcategory">
                <el-select
                  v-model="formData.donationcategory"
@@ -562,9 +613,9 @@
                  />
                </el-select>
              </el-form-item>
            </el-col>
            </el-col> -->
            <el-col :span="8">
              <el-form-item label="案例时间" prop="donatetime">
              <el-form-item label="案例上报时间" prop="donatetime">
                <el-date-picker
                  v-model="formData.donatetime"
                  type="datetime"
@@ -587,34 +638,26 @@
            </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-row>
            <el-col :span="8">
              <el-form-item align="left" label="红十字会" prop="redorganno">
                <org-selecter
                <!-- <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">
@@ -637,67 +680,84 @@
              </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="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-col :span="8">
              <el-form-item label="报告人姓名" prop="reportername">
            <!-- <el-col :span="12">
              <el-form-item label="获取组织编号" prop="acquisitiontissueno">
                <el-input
                  v-model="formData.reportername"
                  placeholder="报告人姓名"
                  :disabled="true"
                  v-model="formData.acquisitiontissueno"
                  placeholder="请输入获取组织编号"
                />
              </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> -->
            <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-form-item label="获取组织名称" prop="acquisitiontissuename">
                <el-input
                  v-model="formData.deptid"
                  placeholder="请输入部门ID"
                  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">
@@ -720,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 {
@@ -731,6 +792,7 @@
  // 添加所有需要的字典类型
  dicts: [
    "sys_redcrossagency",
    "sys_bloodtype_rhd",
    "sys_BloodType",
    "sys_user_sex",
@@ -774,9 +836,16 @@
      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: [
@@ -802,6 +871,12 @@
        ],
        reporttime: [
          { required: true, message: "请选择报告时间", trigger: "change" }
        ],
        residenceaddress: [
          { required: true, message: "请输入现居住地详细地址", trigger: "blur" }
        ],
        registeraddress: [
          { required: true, message: "请输入住址详细地址", trigger: "blur" }
        ]
      }
    };
@@ -820,6 +895,21 @@
          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: {
@@ -831,6 +921,16 @@
        });
      } else {
        this.handleClose();
      }
    },
    "editData.reportId": {
      immediate: true,
      handler(newVal) {
        if (newVal) {
          this.loadReportAttachments(newVal);
        } else {
          this.reportAttachments = [];
        }
      }
    },
    editData: {
@@ -914,7 +1014,7 @@
        majorrelatives: null,
        familyrelations: null,
        infosources: [],
        infoname: null,
        infoName: null,
        infophone: null,
        redorganno: null,
        contactperson: null,
@@ -924,8 +1024,7 @@
        donationcategory: null,
        donatetime: null,
        recordstate: "0",
        acquisitiontissueno: "ZJOPO",
        acquisitiontissuename: "浙江省人体器官获取组织",
        acquisitiontissuename: "青岛大学附属医院",
        // 报告信息
        reporterno: null,
@@ -955,8 +1054,11 @@
          this.formData.bloodtype = "0";
          this.formData.rhyin = "0";
          this.formData.recordstate = "0";
          this.formData.acquisitiontissueno = "ZJOPO";
          this.formData.acquisitiontissuename = "浙江省人体器官获取组织";
          this.formData.acquisitiontissuename = "青岛大学附属医院";
          // 设置信息员和电话默认值
          this.formData.infoName = "孙文月";
          this.formData.infophone = "18661808259";
        }
      } catch (error) {
        console.error("初始化表单失败:", error);
@@ -973,6 +1075,8 @@
    async loadEditData() {
      try {
        const response = await getDonatebaseinfo(this.editData.id);
        response.data.firstMedicalInstitution =
          response.data.treatmenthospitalname;
        const data = response.data;
        console.log("加载到的数据:", data);
@@ -996,25 +1100,29 @@
        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.residenceprovince,
            shi: data.residencecity,
            qu: data.residencetown
            sheng: data.residenceprovincename,
            shi: data.residencecountyname,
            qu: data.residencecommunityname
          };
        }
        // 户籍地址
        if (data.registerprovince) {
          this.registerAddress = {
            sheng: data.registerprovince,
            shi: data.registercity,
            qu: data.registertown
            shi: data.registercityname,
            qu: data.registercommunityname
          };
        }
      console.log(this.registerAddress,'registerAddress12');
        console.log(this.registerAddress, "registerAddress12");
        this.calculateAge(data.birthday);
      } catch (error) {
@@ -1120,17 +1228,38 @@
    },
    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');
      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() {
@@ -1149,7 +1278,18 @@
        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();
@@ -1225,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;
      });
    },
    /** 预览上报附件(直接在新窗口打开) */
    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;
    }
  }
};
@@ -1234,6 +1447,7 @@
.form-section {
  margin-bottom: 20px;
}
.form-section:last-child {
  margin-bottom: 0;
}