WXL
2 天以前 c8e9849cb5f24848df0174c13bfbbff37bb08a5a
src/views/business/appear/caseDetail.vue
@@ -29,11 +29,15 @@
        </el-descriptions-item>
        <el-descriptions-item label="Rh阴性">
          {{
            caseData.rhYin === "1" ? "是" : caseData.rhYin === "0" ? "否" : "-"
            caseData.rhYin == "1" ? "是" : caseData.rhYin == "0" ? "否" : "-"
          }}
        </el-descriptions-item>
        <el-descriptions-item label="证件类型">
          {{ getIdCardTypeText(caseData.idcardtype) }}
          <dict-tag
            :options="dict.type.sys_IDType"
            :value="caseData.idcardtype"
          />
        </el-descriptions-item>
        <el-descriptions-item label="证件号码">{{
          caseData.idcardno || "-"
@@ -47,12 +51,16 @@
        <el-descriptions-item label="籍贯">{{
          caseData.nativeplace || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="学历">{{
          caseData.education || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="职业">{{
          caseData.occupation || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="学历">
          <dict-tag
            :options="dict.type.sys_education"
            :value="String(caseData.education)"
        /></el-descriptions-item>
        <el-descriptions-item label="职业">
          <dict-tag
            :options="dict.type.sys_occupation"
            :value="caseData.occupation"
        /></el-descriptions-item>
        <el-descriptions-item label="出生日期">{{
          formatDate(caseData.birthday)
        }}</el-descriptions-item>
@@ -63,7 +71,7 @@
    </el-card>
    <!-- 地址信息模块 -->
    <!-- <el-card class="detail-section">
    <el-card class="detail-section">
      <div slot="header" class="section-header">
        <span class="section-title">地址信息</span>
      </div>
@@ -75,7 +83,7 @@
          {{ getFullResidenceAddress() }}
        </el-descriptions-item>
      </el-descriptions>
    </el-card> -->
    </el-card>
    <!-- 医疗信息模块 -->
    <el-card class="detail-section">
@@ -95,16 +103,24 @@
        <el-descriptions-item label="GCS评分">{{
          caseData.gcsScore || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="传染病情况">{{
          caseData.infectious || "无"
        }}</el-descriptions-item>
        <el-descriptions-item label="传染病情况"
          >{{
            getLabelsFromString(caseData.infectious, dict.type.sys_Infectious)
          }}
        </el-descriptions-item>
        <el-descriptions-item
          label="传染病其他说明"
          v-if="caseData.infectiousOther"
          >{{ caseData.infectiousOther }}</el-descriptions-item
        >
        <el-descriptions-item label="是否需要转运">
          {{ caseData.isTransport === "2" ? "需要" : "不需要" }}
          {{
            caseData.isTransport == "1"
              ? "不需要"
              : caseData.isTransport == "2"
              ? "需要"
              : "待定"
          }}
        </el-descriptions-item>
      </el-descriptions>
    </el-card>
@@ -115,7 +131,13 @@
        <span class="section-title">医院信息</span>
      </div>
      <el-descriptions :column="2" border>
        <el-descriptions-item label="治疗医院名称">{{
        <el-descriptions-item label="ICU评估医生">{{
          caseData.icuDoctor || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="ICU医生电话">{{
          caseData.icuDoctorPhone || "-"
        }}</el-descriptions-item
        ><el-descriptions-item label="治疗医院名称">{{
          caseData.treatmenthospitalname || "-"
        }}</el-descriptions-item>
        <!-- <el-descriptions-item label="治疗科室名称">{{
@@ -130,9 +152,6 @@
        <!-- <el-descriptions-item label="部门编号">{{
          caseData.deptNo || "-"
        }}</el-descriptions-item> -->
        <el-descriptions-item label="上报医院">{{
          caseData.toHospital || "-"
        }}</el-descriptions-item>
      </el-descriptions>
    </el-card>
@@ -142,14 +161,15 @@
        <span class="section-title">上报信息</span>
      </div>
      <el-descriptions :column="2" border>
        <el-descriptions-item label="上报医院">{{
          caseData.toHospital || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="报告者姓名">{{
          caseData.infoName || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="报告者编号">{{
          caseData.infoNo || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="报告者联系电话">{{
          caseData.reporterphone || "-"
          caseData.phone || "-"
        }}</el-descriptions-item>
        <el-descriptions-item label="协调员姓名">{{
          caseData.coordinatorName || "-"
@@ -166,7 +186,7 @@
          formatDateTime(caseData.createTime)
        }}</el-descriptions-item>
        <el-descriptions-item label="是否终止案例">
          {{ caseData.terminationCase === "1" ? "已终止" : "进行中" }}
          {{ caseData.terminationCase == "1" ? "已终止" : "进行中" }}
        </el-descriptions-item>
      </el-descriptions>
    </el-card>
@@ -283,16 +303,25 @@
    <!-- 审批信息模块(状态为已同意或已驳回时显示) -->
    <el-card
      class="detail-section"
      v-if="caseData.reportStatus === '3' || caseData.reportStatus === '4'"
      v-if="caseData.reportStatus == '3' || caseData.reportStatus == '4'"
    >
      <div slot="header" class="section-header">
        <span class="section-title">审批信息</span>
      </div>
      <el-descriptions :column="1" border>
        <el-descriptions-item label="审批结果">
          <el-tag :type="caseData.reportStatus === '3' ? 'success' : 'danger'">
            {{ caseData.reportStatus === "3" ? "已同意" : "已驳回" }}
          <el-tag :type="caseData.reportStatus == '3' ? 'success' : 'danger'">
            {{ caseData.reportStatus == "3" ? "已同意" : "已驳回" }}
          </el-tag>
        </el-descriptions-item>
        <el-descriptions-item
          label="驳回原因"
          v-if="caseData.reportStatus == 4"
        >
          <dict-tag
            :options="dict.type.reject_type"
            :value="caseData.rejectType"
          />
        </el-descriptions-item>
        <el-descriptions-item label="审批人">{{
          caseData.updateBy || "-"
@@ -301,7 +330,7 @@
          formatDateTime(caseData.updateTime)
        }}</el-descriptions-item>
        <el-descriptions-item label="审批意见">{{
          caseData.remark || "无"
          caseData.confirmResult || "无"
        }}</el-descriptions-item>
      </el-descriptions>
    </el-card>
@@ -316,7 +345,7 @@
      <div slot="header" class="section-header">
        <span class="section-title">转运信息</span>
        <el-button
          v-if="caseData.reportStatus === '3'"
          v-if="caseData.reportStatus == '3'"
          type="primary"
          size="small"
          icon="el-icon-truck"
@@ -367,7 +396,7 @@
    <!-- 无转运信息但需要转运的提示 -->
    <el-card
      class="detail-section"
      v-else-if="caseData.isTransport === '2' && caseData.reportStatus === '3'"
      v-else-if="caseData.isTransport == '2' && caseData.reportStatus == '3'"
    >
      <div slot="header" class="section-header">
        <span class="section-title">转运信息</span>
@@ -413,6 +442,15 @@
    pdf,
    FilePreviewDialog
  },
  dicts: [
    "sys_user_sex",
    "sys_BloodType",
    "sys_Infectious",
    "sys_IDType",
    "sys_education",
    "sys_occupation",
    "reject_type"
  ],
  props: {
    caseData: {
      type: Object,
@@ -423,15 +461,22 @@
      default: true
    }
  },
  dicts: ["sys_user_sex", "sys_BloodType"],
  data() {
    return {
      // 预览相关
      previewVisible: false,
      currentPreviewFile: null,
      // 动态计算的 baseUrlHt
      baseUrlHt: "",
      // 图片预览相关
      imagePreviewUrls: []
      imagePreviewUrls: [],
      rejectOptions: [
        { label: "好转", value: "1" },
        { label: "死亡", value: "2" },
        { label: "不符合捐献标准", value: "3" },
        { label: "家属放弃捐献", value: "4" },
        { label: "其他", value: "5" }
      ]
    };
  },
  computed: {
@@ -449,11 +494,31 @@
        .filter(url => url);
    }
  },
  created() {
    this.calculateBaseUrl();
  },
  methods: {
    handleClose() {
      this.$emit("close");
    },
    /** 计算 baseUrlHt */
    calculateBaseUrl() {
      const currentUrl = window.location.href;
      try {
        const urlObj = new URL(currentUrl);
        const hostname = urlObj.hostname;
        this.baseUrlHt = `http://${hostname}:9095`;
      } catch (error) {
        console.error("解析URL失败:", error);
        const match = currentUrl.match(/https?:\/\/([^:\/]+)/);
        if (match) {
          this.baseUrlHt = `http://${match[1]}:9095`;
        } else {
          this.baseUrlHt = "http://localhost:9095";
        }
      }
    },
    // 格式化日期时间
    formatDateTime(dateTime) {
      if (!dateTime) return "-";
@@ -522,8 +587,9 @@
    /** 创建转运单 */
    handleCreateTransport() {
      this.$router.push({
        path: "/business/transport/create",
        path: "/report/transfer",
        query: {
          autoCreate: "true",
          caseId: this.caseData.id,
          caseNo: this.caseData.caseNo,
          patName: this.caseData.name,
@@ -634,7 +700,30 @@
    },
    getFileUrl(file) {
      return file.path || file.fileUrl || "";
      if (!file) return "";
      const url = file.path || file.fileUrl || file.url || "";
      return this.processFileUrl(url);
    },
    // URL处理函数 - 将完整URL替换为baseUrlHt
    processFileUrl(url) {
      if (!url) return "";
      // 如果已经是完整的http或https链接
      if (url.startsWith("http://") || url.startsWith("https://")) {
        // 找到第三个斜杠后的位置,提取路径部分
        const thirdSlashIndex = url.indexOf("/", 8);
        if (thirdSlashIndex !== -1) {
          return `${this.baseUrlHt}${url.substring(thirdSlashIndex)}`;
        }
        return this.baseUrlHt;
      }
      // 相对路径处理
      if (url.startsWith("/")) {
        return `${this.baseUrlHt}${url}`;
      }
      return `${this.baseUrlHt}/${url}`;
    },
    getImagePreviewList(file) {
@@ -696,7 +785,7 @@
    handlePreview(file) {
      this.currentPreviewFile = {
        fileName: file.fileName,
        fileUrl: this.getFileUrl(file),
        fileUrl: this.getFileUrl(file), // 已经处理过URL
        fileType: this.getFileType(file.fileName)
      };
      this.previewVisible = true;
@@ -720,7 +809,7 @@
    // 文件下载
    handleDownload(file) {
      const fileUrl = this.getFileUrl(file);
      const fileUrl = this.getFileUrl(file); // 使用处理过的URL
      const fileName = file.fileName;
      if (fileUrl) {