WXL
3 天以前 7f67f2e6fbb7d47249fef0905a40a66f13ae2f2b
src/views/business/transfer/TransportEdit.vue
@@ -7,143 +7,181 @@
    :close-on-click-modal="false"
    @close="handleClose"
  >
    <!-- 案例信息展示区域 -->
    <div v-if="selectedCase && !isEdit" class="selected-case-info">
      <el-alert
        title="关联案例信息"
        type="success"
        :closable="false"
        style="margin-bottom: 16px;"
      />
      <el-card shadow="never" class="case-info-card">
        <el-descriptions :column="2" border>
          <el-descriptions-item label="案例编号">{{
            selectedCase.caseNo
          }}</el-descriptions-item>
          <el-descriptions-item label="患者姓名">{{
            selectedCase.name
          }}</el-descriptions-item>
          <el-descriptions-item label="性别">
            <dict-tag
              :options="dict.type.sys_user_sex"
              :value="selectedCase.sex"
            />
          </el-descriptions-item>
          <el-descriptions-item label="年龄">{{
            selectedCase.age
          }}</el-descriptions-item>
          <el-descriptions-item label="疾病诊断">{{
            selectedCase.diagnosisname
          }}</el-descriptions-item>
          <el-descriptions-item label="治疗医院">{{
            selectedCase.treatmenthospitalname
          }}</el-descriptions-item>
        </el-descriptions>
      </el-card>
    </div>
    <el-form
      ref="editForm"
      :model="formData"
      :rules="formRules"
      label-width="120px"
      class="paper-form"
    >
      <!-- 基础信息 -->
      <el-card class="form-section" shadow="never">
      <el-card class="form-section paper-card" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-document" style="color: #409EFF; margin-right: 8px;"></i>
          <i
            class="el-icon-document"
            style="color: #409EFF; margin-right: 8px;"
          ></i>
          <span>基础信息</span>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="转运单号" prop="reportId">
              <el-input
                v-model="formData.reportId"
                :disabled="isEdit"
                placeholder="系统自动生成"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="案例编号" prop="caseNo">
              <el-input
                v-model="formData.caseNo"
                placeholder="请输入案例编号"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <div class="form-row">
          <el-form-item label="案例编号" prop="caseNo" class="col-half">
            <el-input
              v-model="formData.caseNo"
              :disabled="true"
              placeholder="自动从案例获取"
            />
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="患者姓名" prop="patName">
              <el-input
                v-model="formData.patName"
                placeholder="请输入患者姓名"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="性别" prop="sex">
              <el-select
                v-model="formData.sex"
                placeholder="请选择性别"
                style="width: 100%"
              >
                <el-option label="男" value="1" />
                <el-option label="女" value="2" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <div class="form-row">
          <el-form-item label="患者姓名" prop="patName" class="col-half">
            <el-input
              v-model="formData.patName"
              :disabled="true"
              placeholder="自动从案例获取"
            />
          </el-form-item>
          <el-form-item label="性别" prop="sex" class="col-half">
            <el-select
              v-model="formData.sex"
              :disabled="true"
              placeholder="请选择性别"
              style="width: 100%"
            >
              <el-option label="男" value="1" />
              <el-option label="女" value="2" />
            </el-select>
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="年龄" prop="age">
              <el-input-number
                v-model="formData.age"
                :min="0"
                :max="120"
                placeholder="请输入年龄"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="疾病诊断" prop="diagnosisname">
              <el-input
                v-model="formData.diagnosisname"
                placeholder="请输入疾病诊断名称"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <div class="form-row">
          <el-form-item label="年龄" prop="age" class="col-half">
            <el-input-number
              v-model="formData.age"
              :min="0"
              :max="120"
              :disabled="true"
              placeholder="自动从案例获取"
              style="width: 100%"
            />
          </el-form-item>
          <el-form-item label="疾病诊断" prop="diagnosisname" class="col-half">
            <el-input
              v-model="formData.diagnosisname"
              :disabled="true"
              placeholder="自动从案例获取"
            />
          </el-form-item>
        </div>
      </el-card>
      <!-- 医院信息 -->
      <el-card class="form-section" shadow="never">
      <el-card class="form-section paper-card" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-office-building" style="color: #67C23A; margin-right: 8px;"></i>
          <i
            class="el-icon-office-building"
            style="color: #67C23A; margin-right: 8px;"
          ></i>
          <span>医院信息</span>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="治疗医院" prop="treatmentHospitalName">
              <el-input
                v-model="formData.treatmentHospitalName"
                placeholder="请输入治疗医院名称"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="治疗科室" prop="treatmentDeptName">
              <el-input
                v-model="formData.treatmentDeptName"
                placeholder="请输入治疗科室名称"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <div class="form-row">
          <el-form-item label="治疗医院" prop="treatmentHospitalName" class="col-half">
            <el-input
              v-model="formData.treatmentHospitalName"
              :disabled="true"
              placeholder="自动从案例获取"
            />
          </el-form-item>
          <el-form-item label="治疗科室" prop="treatmentDeptName" class="col-half">
            <el-input
              v-model="formData.treatmentDeptName"
              placeholder="请输入治疗科室名称"
            />
          </el-form-item>
        </div>
        <div class="form-row">
          <el-form-item label="ICU评估医生" prop="icuDoctor" class="col-half">
            <el-input
              v-model="formData.icuDoctor"
              placeholder="请输入ICU评估医生"
            />
          </el-form-item>
          <el-form-item label="ICU医生电话" prop="icuDoctorPhone" class="col-half">
            <el-input
              v-model="formData.icuDoctorPhone"
              placeholder="请输入ICU医生手机号"
            />
          </el-form-item>
        </div>
      </el-card>
      <!-- 转运信息 -->
      <el-card class="form-section" shadow="never">
      <el-card class="form-section paper-card" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-location-information" style="color: #E6A23C; margin-right: 8px;"></i>
          <i
            class="el-icon-location-information"
            style="color: #E6A23C; margin-right: 8px;"
          ></i>
          <span>转运信息</span>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="出发地点" prop="transportStartPlace">
              <el-input
                v-model="formData.transportStartPlace"
                placeholder="请输入出发地点"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="出发时间" prop="transportStartTime">
              <el-date-picker
                v-model="formData.transportStartTime"
                type="datetime"
                placeholder="选择出发时间"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <div class="form-row">
          <el-form-item label="出发地点" prop="transportStartPlace" class="col-half">
            <el-input
              v-model="formData.transportStartPlace"
              placeholder="请输入出发地点"
            />
          </el-form-item>
          <el-form-item label="出发时间" prop="transportStartTime" class="col-half">
            <el-date-picker
              v-model="formData.transportStartTime"
              type="datetime"
              placeholder="选择出发时间"
              value-format="yyyy-MM-dd HH:mm:ss"
              style="width: 100%"
            />
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
        <div class="form-row">
          <!-- <el-col :span="12">
            <el-form-item label="转运状态" prop="transitStatus">
              <el-select
                v-model="formData.transitStatus"
@@ -157,50 +195,48 @@
                <el-option label="暂存" :value="5" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="负责协调员" prop="contactPerson">
              <el-input
                v-model="formData.contactPerson"
                placeholder="请输入协调员姓名"
              />
            </el-form-item>
          </el-col>
        </el-row>
          </el-col> -->
          <el-form-item label="负责协调员" prop="contactPerson" class="col-half">
            <el-input
              v-model="formData.contactPerson"
              placeholder="请输入协调员姓名"
            />
          </el-form-item>
        </div>
      </el-card>
      <!-- 医护人员信息 -->
      <el-card class="form-section" shadow="never">
      <el-card class="form-section paper-card" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-user" style="color: #F56C6C; margin-right: 8px;"></i>
          <i
            class="el-icon-user"
            style="color: #F56C6C; margin-right: 8px;"
          ></i>
          <span>医护人员信息</span>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="急诊科医生" prop="doctor">
              <el-input
                v-model="formData.doctor"
                placeholder="请输入急诊科医生"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
        <div class="form-row">
          <el-form-item label="转运医生" prop="doctor" class="col-half">
            <el-input
              v-model="formData.doctor"
              placeholder="请输入转运医生"
            />
          </el-form-item>
          <!-- <el-col :span="12">
            <el-form-item label="医生电话" prop="doctorPhone">
              <el-input
                v-model="formData.doctorPhone"
                placeholder="请输入医生手机号"
              />
            </el-form-item>
          </el-col>
        </el-row>
          </el-col> -->
          <el-form-item label="转运护士" prop="nurse" class="col-half">
            <el-input v-model="formData.nurse" placeholder="请输入护士姓名" />
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="护士" prop="nurse">
              <el-input v-model="formData.nurse" placeholder="请输入护士姓名" />
            </el-form-item>
          </el-col>
        <!-- <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="护士电话" prop="nursePhone">
              <el-input
@@ -209,51 +245,33 @@
              />
            </el-form-item>
          </el-col>
        </el-row>
        </el-row> -->
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="驾驶员" prop="driver">
              <el-input
                v-model="formData.driver"
                placeholder="请输入驾驶员姓名"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
        <div class="form-row">
          <el-form-item label="转运驾驶员" prop="driver" class="col-half">
            <el-input
              v-model="formData.driver"
              placeholder="请输入驾驶员姓名"
            />
          </el-form-item>
          <!-- <el-col :span="12">
            <el-form-item label="驾驶员电话" prop="driverPhone">
              <el-input
                v-model="formData.driverPhone"
                placeholder="请输入驾驶员手机号"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="12">
            <el-form-item label="ICU评估医生" prop="icuDoctor">
              <el-input
                v-model="formData.icuDoctor"
                placeholder="请输入ICU评估医生"
              />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="ICU医生电话" prop="icuDoctorPhone">
              <el-input
                v-model="formData.icuDoctorPhone"
                placeholder="请输入ICU医生手机号"
              />
            </el-form-item>
          </el-col>
        </el-row>
          </el-col> -->
        </div>
      </el-card>
      <!-- 附件信息 -->
      <el-card class="form-section" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-folder" style="color: #909399; margin-right: 8px;"></i>
          <i
            class="el-icon-folder"
            style="color: #909399; margin-right: 8px;"
          ></i>
          <span>附件信息</span>
        </div>
@@ -261,7 +279,9 @@
          <div class="attachment-header">
            <i class="el-icon-paperclip"></i>
            <span class="attachment-title">附件上传</span>
            <span class="attachment-tip">支持上传检验报告单等文件 (最多{{ attachmentLimit }}个)</span>
            <span class="attachment-tip"
              >支持上传检验报告单等文件 (最多{{ attachmentLimit }}个)</span
            >
          </div>
          <!-- 使用 UploadAttachment 组件 -->
@@ -278,18 +298,32 @@
        </div>
        <!-- 附件列表 -->
        <div class="attachment-list" v-if="formData.annexfilesList && formData.annexfilesList.length > 0">
          <div class="list-title">已上传附件 ({{ formData.annexfilesList.length }})</div>
          <el-table :data="formData.annexfilesList" style="width: 100%" size="small">
        <div
          class="attachment-list"
          v-if="formData.annexfilesList && formData.annexfilesList.length > 0"
        >
          <div class="list-title">
            已上传附件 ({{ formData.annexfilesList.length }})
          </div>
          <el-table
            :data="formData.annexfilesList"
            style="width: 100%"
            size="small"
          >
            <el-table-column label="文件名" min-width="200">
              <template slot-scope="scope">
                <i class="el-icon-document" style="margin-right: 8px; color: #409EFF;"></i>
                <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 slot-scope="scope">
                <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
                <el-tag size="small">{{
                  getFileType(scope.row.fileName)
                }}</el-tag>
              </template>
            </el-table-column>
            <el-table-column label="创建时间" width="160">
@@ -297,7 +331,7 @@
                <span>{{ formatDateTime(scope.row.createTime) }}</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" width="180">
            <el-table-column label="操作" width="266">
              <template slot-scope="scope">
                <el-button
                  size="mini"
@@ -327,27 +361,34 @@
      </el-card>
      <!-- 备注信息 -->
      <el-card class="form-section" shadow="never">
      <el-card class="form-section paper-card" shadow="never">
        <div slot="header" class="section-header">
          <i class="el-icon-edit" style="color: #409EFF; margin-right: 8px;"></i>
          <i
            class="el-icon-edit"
            style="color: #409EFF; margin-right: 8px;"
          ></i>
          <span>备注信息</span>
        </div>
        <el-form-item prop="remark">
          <el-input
            v-model="formData.remark"
            type="textarea"
            :rows="4"
            placeholder="请输入备注信息"
            maxlength="500"
            show-word-limit
          />
        </el-form-item>
        <div class="form-row">
          <el-form-item prop="remark" class="col-full">
            <el-input
              v-model="formData.remark"
              type="textarea"
              :rows="4"
              placeholder="请输入备注信息"
              maxlength="500"
              show-word-limit
            />
          </el-form-item>
        </div>
      </el-card>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button @click="handleClose">取消</el-button>
      <el-button type="primary" :loading="saveLoading" @click="handleSave">保存</el-button>
      <el-button type="primary" :loading="saveLoading" @click="handleSave"
        >保存</el-button
      >
    </div>
    <!-- 文件预览弹窗 -->
@@ -361,7 +402,13 @@
</template>
<script>
import { transportAdd, transportEdit } from "@/api/businessApi/index";
import {
  transportAdd,
  transportEdit,
  donateInfo,
  donateList,
  donateEdit
} from "@/api/businessApi/index";
import UploadAttachment from "@/components/UploadAttachment";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import dayjs from "dayjs";
@@ -372,6 +419,7 @@
    UploadAttachment,
    FilePreviewDialog
  },
  dicts: ["sys_user_sex", "sys_BloodType"],
  props: {
    editOpen: {
      type: Boolean,
@@ -384,6 +432,10 @@
    isEdit: {
      type: Boolean,
      default: false
    },
    selectedCase: {
      type: Object,
      default: null
    }
  },
  data() {
@@ -428,9 +480,22 @@
  watch: {
    editOpen(val) {
      if (val) {
        this.formData = this.isEdit
          ? { ...this.getDefaultFormData(), ...this.transportData }
          : this.getDefaultFormData();
        if (this.isEdit) {
          // 编辑模式,使用传入的转运单数据
          this.formData = {
            ...this.getDefaultFormData(),
            ...this.transportData
          };
        } else {
          // 新增模式
          this.formData = this.getDefaultFormData();
          // 如果有选中的案例,用案例信息填充表单
          if (this.selectedCase) {
            this.fillFormWithCaseData(this.selectedCase);
          }
        }
        this.initAttachmentList();
@@ -438,6 +503,15 @@
          this.$refs.editForm && this.$refs.editForm.clearValidate();
        });
      }
    },
    selectedCase: {
      handler(newVal) {
        if (newVal && !this.isEdit) {
          this.fillFormWithCaseData(newVal);
        }
      },
      deep: true
    }
  },
  methods: {
@@ -445,7 +519,6 @@
    getDefaultFormData() {
      return {
        id: undefined,
        reportId: undefined,
        caseNo: undefined,
        patName: undefined,
        sex: undefined,
@@ -456,7 +529,7 @@
        transportStartPlace: undefined,
        transportStartTime: undefined,
        contactPerson: undefined,
        transitStatus: 1,
        transitStatus: 2,
        doctor: undefined,
        doctorPhone: undefined,
        nurse: undefined,
@@ -475,16 +548,36 @@
      };
    },
    /** 用案例数据填充表单 */
    fillFormWithCaseData(caseData) {
      this.formData = {
        ...this.formData,
        caseNo: caseData.caseNo || "",
        patName: caseData.name || "",
        sex: caseData.sex || "",
        age: caseData.age || "",
        reportId: caseData.id || null,
        diagnosisname: caseData.diagnosisname || "",
        treatmentHospitalName: caseData.treatmenthospitalname || "",
        treatmentDeptName: caseData.treatmentdeptname || "",
        // 可以设置一些默认值
        transportStartPlace: caseData.treatmenthospitalname || "",
        contactPerson: caseData.coordinatorName || ""
      };
    },
    /** 初始化附件列表 */
    initAttachmentList() {
      if (this.isEdit && this.transportData.annexfilesList) {
        this.formData.annexfilesList = [...this.transportData.annexfilesList];
        this.attachmentFileList = this.transportData.annexfilesList.map(item => ({
          uid: item.id || Math.random(),
          name: item.fileName,
          url: item.path || item.fileUrl,
          status: 'success'
        }));
        this.attachmentFileList = this.transportData.annexfilesList.map(
          item => ({
            uid: item.id || Math.random(),
            name: item.fileName,
            url: item.path || item.fileUrl,
            status: "success"
          })
        );
      } else {
        this.formData.annexfilesList = [];
        this.attachmentFileList = [];
@@ -499,8 +592,8 @@
    /** 附件移除处理 */
    handleAttachmentRemove(file) {
      if (file.url) {
        const index = this.formData.annexfilesList.findIndex(item =>
          item.path === file.url || item.fileUrl === file.url
        const index = this.formData.annexfilesList.findIndex(
          item => item.path === file.url || item.fileUrl === file.url
        );
        if (index > -1) {
          this.formData.annexfilesList.splice(index, 1);
@@ -512,7 +605,7 @@
    handleRemoveAttachment(index) {
      this.formData.annexfilesList.splice(index, 1);
      this.attachmentFileList.splice(index, 1);
      this.$message.success('附件删除成功');
      this.$message.success("附件删除成功");
    },
    /** 上传成功处理 */
@@ -523,21 +616,21 @@
          path: response.data || file.url,
          fileUrl: response.data || file.url,
          type: this.getFileExtension(file.name),
          createTime: dayjs().format('YYYY-MM-DD HH:mm:ss'),
          createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
          transportId: this.formData.id,
          delFlag: 0,
          caseNo:this.formData.caseNo
          caseNo: this.formData.caseNo
        };
        this.formData.annexfilesList.push(attachmentObj);
        this.$message.success('文件上传成功');
        this.$message.success("文件上传成功");
      }
    },
    /** 上传错误处理 */
    handleUploadError({ file, fileList, error }) {
      console.error('附件上传失败:', error);
      this.$message.error('文件上传失败,请重试');
      console.error("附件上传失败:", error);
      this.$message.error("文件上传失败,请重试");
    },
    /** 文件预览 */
@@ -556,53 +649,59 @@
      const fileName = file.fileName;
      if (fileUrl) {
        const link = document.createElement('a');
        const link = document.createElement("a");
        link.href = fileUrl;
        link.download = fileName;
        link.style.display = 'none';
        link.style.display = "none";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
        this.$message.success('开始下载文件');
        this.$message.success("开始下载文件");
      } else {
        this.$message.warning('文件路径不存在,无法下载');
        this.$message.warning("文件路径不存在,无法下载");
      }
    },
    /** 获取文件类型 */
    getFileType(fileName) {
      if (!fileName) return 'other';
      if (!fileName) return "other";
      const extension = fileName.split('.').pop().toLowerCase();
      const imageTypes = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'];
      const pdfTypes = ['pdf'];
      const officeTypes = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'];
      const extension = fileName
        .split(".")
        .pop()
        .toLowerCase();
      const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
      const pdfTypes = ["pdf"];
      const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
      if (imageTypes.includes(extension)) return 'image';
      if (pdfTypes.includes(extension)) return 'pdf';
      if (officeTypes.includes(extension)) return 'office';
      return 'other';
      if (imageTypes.includes(extension)) return "image";
      if (pdfTypes.includes(extension)) return "pdf";
      if (officeTypes.includes(extension)) return "office";
      return "other";
    },
    /** 获取文件扩展名 */
    getFileExtension(filename) {
      return filename.split('.').pop().toLowerCase();
      return filename
        .split(".")
        .pop()
        .toLowerCase();
    },
    /** 日期时间格式化 */
    formatDateTime(dateTime) {
      if (!dateTime) return '';
      if (!dateTime) return "";
      try {
        const date = new Date(dateTime);
        if (isNaN(date.getTime())) return dateTime;
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        const month = String(date.getMonth() + 1).padStart(2, "0");
        const day = String(date.getDate()).padStart(2, "0");
        const hours = String(date.getHours()).padStart(2, "0");
        const minutes = String(date.getMinutes()).padStart(2, "0");
        const seconds = String(date.getSeconds()).padStart(2, "0");
        return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
      } catch (error) {
@@ -621,17 +720,21 @@
        const valid = await this.$refs.editForm.validate();
        if (!valid) return;
        const pendingFiles = this.attachmentFileList.filter(item => item.status !== 'success');
        const pendingFiles = this.attachmentFileList.filter(
          item => item.status !== "success"
        );
        if (pendingFiles.length > 0) {
          this.$message.warning('还有文件未上传完成,请先上传所有文件或移除未上传的文件');
          this.$message.warning(
            "还有文件未上传完成,请先上传所有文件或移除未上传的文件"
          );
          return;
        }
        this.saveLoading = true;
        const requestData = { ...this.formData };
        let response;
        let response;
        if (this.isEdit) {
          response = await transportEdit(requestData);
        } else {
@@ -642,6 +745,16 @@
          this.$message.success(this.isEdit ? "修改成功" : "新建成功");
          this.handleClose();
          this.$emit("save-success");
          if (requestData.transitStatus == 3) {
            const resappear = await donateInfo(requestData.reportId);
            if (resappear.code) {
              let obj = resappear.data;
              obj.isDonate = 1;
              await donateEdit(obj);
              this.$modal.msgSuccess(`对应上报案例已进入正式案例流程`);
            }
          }
        } else {
          this.$message.error(response.msg || "操作失败");
        }
@@ -709,13 +822,128 @@
  font-size: 13px;
}
.file-path {
  font-size: 12px;
  color: #909399;
/* 案例信息展示样式 */
.selected-case-info {
  margin-bottom: 20px;
}
::v-deep .el-card__header {
  background: #f5f7fa;
  border-bottom: 1px solid #ebeef5;
.case-info-card {
  border-left: 4px solid #67c23a;
}
/* ===== 纸质表格网格样式 ===== */
.paper-card >>> .el-card__body {
  padding: 16px;
}
.paper-form {
  border-left: 1px solid #d0d3db;
  background: #fff;
  /* 超宽屏限制表单最大宽度,右侧留白,避免字段分布过开 */
  max-width: 1400px;
}
.paper-form >>> .form-row {
  display: flex;
  width: 100%;
  border-top: 1px solid #d0d3db;
  /* 上移1px与上一行的border-bottom重叠,两行之间只显示一条1px细线 */
  margin-top: -1px;
}
.paper-form >>> .form-row:first-child {
  margin-top: 0;
}
/* 行尾空白填充:不满整行的右侧自动补一个空白格子,网格保持闭合(右侧适当留白) */
.paper-form >>> .form-row::after {
  content: "";
  flex: 1 1 0;
  min-height: 42px;
  background: linear-gradient(to left, #d0d3db 1px, transparent 1px),
    linear-gradient(to top, #d0d3db 1px, transparent 1px);
  background-color: #fff;
}
.paper-form >>> .el-form-item {
  flex: 0 0 33.3333%;
  display: flex;
  margin: 0;
  background: #fff;
  border-right: 1px solid #d0d3db;
  border-bottom: 1px solid #d0d3db;
}
.paper-form >>> .el-form-item::after,
.paper-form >>> .el-form-item::before {
  display: none;
}
.paper-form >>> .col-1-3 { flex: 0 0 33.3333%; }
.paper-form >>> .col-half { flex: 0 0 50%; }
.paper-form >>> .col-2-3 { flex: 0 0 66.6666%; }
.paper-form >>> .col-full { flex: 0 0 100%; }
.paper-form >>> .el-form-item__label {
  flex: 0 0 150px;
  width: 150px !important;
  float: none;
  padding: 0 8px !important;
  background: #ecf5ff;
  border-right: 1px solid #d0d3db;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font-size: 13px;
  font-weight: 600;
  color: #2c3038;
  line-height: 1.3;
  white-space: nowrap;
}
.paper-form >>> .el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before {
  color: #f56c6c;
  margin-right: 2px;
}
.paper-form >>> .el-form-item__content {
  flex: 1;
  margin-left: 0 !important;
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  padding: 6px 10px;
  background: #fff;
  min-height: 42px;
  line-height: 1.4;
}
/* 控件宽度适中,不铺满整格(内容短时输入框不再拉得很长) */
.paper-form >>> .el-form-item__content .el-input,
.paper-form >>> .el-form-item__content .el-select,
.paper-form >>> .el-form-item__content .el-cascader {
  width: 220px;
  max-width: 100%;
}
.paper-form >>> .el-form-item__content .el-date-editor {
  width: 240px;
  max-width: 100%;
}
.paper-form >>> .el-form-item__content .el-range-editor {
  width: 360px;
  max-width: 100%;
}
/* ===== TransportEdit 特殊适配:表单内有多个分区 el-card,每个分区各自独立成完整网格 ===== */
.paper-form {
  border: none;
  background: transparent;
}
.paper-form >>> .paper-card {
  border: none;
  box-shadow: none;
}
.paper-form >>> .paper-card >>> .el-card__body {
  border-top: 1px solid #d0d3db;
  border-left: 1px solid #d0d3db;
  background: #fff;
}
</style>