WXL
2026-05-09 e15d032770157952bab8d9b15177ac03d736851c
src/views/business/appear/index.vue
@@ -16,10 +16,10 @@
            style="width: 200px"
          />
        </el-form-item>
        <el-form-item label="捐献者姓名" prop="name">
        <el-form-item label="患者姓名" prop="name">
          <el-input
            v-model="queryParams.name"
            placeholder="请输入捐献者姓名"
            placeholder="请输入患者姓名"
            clearable
            style="width: 200px"
          />
@@ -88,7 +88,26 @@
        width="160"
      />
      <el-table-column
        label="捐献者姓名"
        label="状态"
        align="center"
        prop="reportStatus"
        width="100"
      >
        <template #default="scope">
          <el-tag :type="scope.row.reportStatus | statusFilter">
            {{ scope.row.reportStatus | statusTextFilter }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="转运状态" align="center" width="100">
        <template #default="scope">
          <el-tag :type="getTransportStatusTag(scope.row)">
            {{ getTransportStatusText(scope.row) }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column
        label="患者姓名"
        align="center"
        prop="name"
        width="100"
@@ -127,32 +146,8 @@
        prop="treatmenthospitalname"
        width="150"
      />
      <el-table-column
        label="状态"
        align="center"
        prop="reportStatus"
        width="100"
      >
        <template #default="scope">
          <el-tag :type="scope.row.reportStatus | statusFilter">
            {{ scope.row.reportStatus | statusTextFilter }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column label="转运状态" align="center" width="100">
        <template #default="scope">
          <el-tag :type="getTransportStatusTag(scope.row)">
            {{ getTransportStatusText(scope.row) }}
          </el-tag>
        </template>
      </el-table-column>
      <el-table-column
        label="操作"
        align="center"
        fixed="right"
        class-name="small-padding fixed-width"
        width="350"
      >
      <el-table-column label="操作" align="center" fixed="right" width="350">
        <template #default="scope">
          <el-button
            size="mini"
@@ -179,13 +174,13 @@
            icon="el-icon-check"
            @click="handleApprove(scope.row)"
            v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0"
            >审批</el-button
            >确认</el-button
          >
          <el-button
            size="mini"
            type="text"
            icon="el-icon-truck"
            :type="shouldShowTransportButton(scope.row) ? 'primary' : 'text'"
            :type="getTransportStatustype(scope.row)"
            @click="handleTransport(scope.row)"
            v-if="shouldShowTransportButton(scope.row)"
            :disabled="!canGoToTransport(scope.row)"
@@ -216,9 +211,9 @@
      <case-detail :caseData="currentCase" @close="detailOpen = false" />
    </el-dialog>
    <!-- 审批弹框 -->
    <!-- 确认弹框 -->
    <el-dialog
      title="案例审批"
      title="案例确认"
      :visible.sync="approveOpen"
      width="80vw"
      append-to-body
@@ -236,7 +231,7 @@
          </div>
        </el-aside>
        <!-- 右侧:审批表单 -->
        <!-- 右侧:确认表单 -->
        <el-main style="padding: 20px;">
          <el-form
            ref="approveForm"
@@ -244,17 +239,17 @@
            :rules="approveRules"
            label-width="100px"
          >
            <el-form-item label="审批结果" prop="approveResult">
            <el-form-item label="确认结果" prop="approveResult">
              <el-radio-group v-model="approveForm.approveResult">
                <el-radio label="3">同意</el-radio>
                <el-radio label="4">驳回</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item label="审批意见" prop="approveOpinion">
            <el-form-item label="确认意见" prop="approveOpinion">
              <el-input
                type="textarea"
                v-model="approveForm.approveOpinion"
                placeholder="请输入详细的审批意见,包括通过或驳回的理由"
                placeholder="请输入详细的确认意见,包括通过或驳回的理由"
                :rows="6"
                maxlength="500"
                show-word-limit
@@ -305,10 +300,10 @@
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="捐献者姓名" prop="name">
              <el-form-item label="患者姓名" prop="name">
                <el-input
                  v-model="editForm.name"
                  placeholder="请输入捐献者姓名"
                  placeholder="请输入患者姓名"
                />
              </el-form-item>
            </el-col>
@@ -361,10 +356,10 @@
                  placeholder="请选择血型"
                  style="width: 100%"
                >
                  <el-option label="A型" value="A" />
                  <el-option label="B型" value="B" />
                  <el-option label="O型" value="O" />
                  <el-option label="AB型" value="AB" />
                  <el-option label="A型" :value="1" />
                  <el-option label="B型" :value="2" />
                  <el-option label="O型" :value="3" />
                  <el-option label="AB型" :value="4" />
                </el-select>
              </el-form-item>
            </el-col>
@@ -400,9 +395,11 @@
                  placeholder="请选择证件类型"
                  style="width: 100%"
                >
                  <el-option label="身份证" value="1" />
                  <el-option label="护照" value="2" />
                  <el-option label="军官证" value="3" />
                  <el-option
                    v-for="item in dict.type.sys_IDType"
                    :label="item.label"
                    :value="item.value"
                  />
                </el-select>
              </el-form-item>
            </el-col>
@@ -632,10 +629,18 @@
          <el-row :gutter="20">
            <el-col :span="12">
              <el-form-item label="传染病情况" prop="infectious">
                <el-input
                <el-checkbox-group v-model="editForm.infectious">
                  <el-checkbox
                    v-for="item in dict.type.sys_Infectious"
                    :label="item.value"
                    :value="item.value"
                    >{{ item.label }}</el-checkbox
                  >
                </el-checkbox-group>
                <!-- <el-input
                  v-model="editForm.infectious"
                  placeholder="请输入传染病情况"
                />
                /> -->
              </el-form-item>
            </el-col>
            <el-col :span="12">
@@ -744,24 +749,16 @@
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="报告者编号" prop="infoNo">
              <el-form-item label="报告者电话" prop="reporterphone">
                <el-input
                  v-model="editForm.infoNo"
                  placeholder="请输入报告者编号"
                  v-model="editForm.phone"
                  placeholder="请输入报告者联系电话"
                />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="20">
            <el-col :span="12">
              <el-form-item label="报告者电话" prop="reporterphone">
                <el-input
                  v-model="editForm.reporterphone"
                  placeholder="请输入报告者联系电话"
                />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="协调员姓名" prop="coordinatorName">
                <el-input
@@ -770,23 +767,12 @@
                />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row :gutter="20">
            <el-col :span="12">
              <el-form-item label="协调员编号" prop="coordinatorNo">
                <el-input
                  v-model="editForm.coordinatorNo"
                  placeholder="请输入协调员编号"
                />
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="是否终止案例" prop="terminationCase">
                <el-radio-group v-model="editForm.terminationCase">
                  <el-radio label="0">进行中</el-radio>
                  <el-radio label="1">已终止</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
@@ -966,7 +952,7 @@
    UploadAttachment,
    FilePreviewDialog
  },
  dicts: ["sys_user_sex", "sys_BloodType"],
  dicts: ["sys_user_sex", "sys_BloodType", "sys_Infectious", "sys_IDType"],
  data() {
    return {
      // 遮罩层
@@ -984,7 +970,7 @@
      caseList: [],
      // 详情弹框是否显示
      detailOpen: false,
      // 审批弹框是否显示
      // 确认弹框是否显示
      approveOpen: false,
      // 编辑弹框是否显示
      editOpen: false,
@@ -1002,19 +988,19 @@
        name: undefined,
        reportStatus: undefined
      },
      // 审批表单
      // 确认表单
      approveForm: {
        id: null,
        approveResult: "3",
        approveOpinion: ""
      },
      // 审批表单验证
      // 确认表单验证
      approveRules: {
        approveResult: [
          { required: true, message: "请选择审批结果", trigger: "change" }
          { required: true, message: "请选择确认结果", trigger: "change" }
        ],
        approveOpinion: [
          { required: true, message: "请输入审批意见", trigger: "blur" }
          { required: true, message: "请输入确认意见", trigger: "blur" }
        ]
      },
      // 编辑表单
@@ -1024,9 +1010,7 @@
        caseNo: [
          { required: true, message: "请输入案例编号", trigger: "blur" }
        ],
        name: [
          { required: true, message: "请输入捐献者姓名", trigger: "blur" }
        ],
        name: [{ required: true, message: "请输入患者姓名", trigger: "blur" }],
        sex: [{ required: true, message: "请选择性别", trigger: "change" }],
        age: [{ required: true, message: "请输入年龄", trigger: "blur" }],
        diagnosisname: [
@@ -1052,7 +1036,7 @@
    statusFilter(reportStatus) {
      const statusMap = {
        "1": "info", // 已上报
        "2": "warning", // 已阅读(待审批)
        "2": "warning", // 已阅读(待确认)
        "3": "success", // 已同意
        "4": "danger" // 已驳回
      };
@@ -1112,12 +1096,29 @@
        ) {
          return "查看转运单";
        } else {
          return "前往转运单";
          return "创建转运单";
        }
      }
      return "转运";
      return "无需转运";
    },
    getTransportStatustype(row) {
      if (row.isTransport == "1") {
        return "info"; // 不需要转运
      }
      if (
        row.serviceTransport &&
        Array.isArray(row.serviceTransport) &&
        row.serviceTransport.length > 0
      ) {
        // 根据转运单状态显示不同颜色
        const transport = row.serviceTransport[0];
        if (transport.transitStatus) {
          return "primary"; // 有转运信息但无状态
        }
        return "primary"; // 有转运信息但无状态
      }
      return "success"; // 需要转运但无转运信息
    },
    /** 获取转运状态标签样式 */
    getTransportStatusTag(row) {
      if (row.isTransport === "1") {
@@ -1148,7 +1149,7 @@
        }
        return "primary"; // 有转运信息但无状态
      }
      return "danger"; // 需要转运但无转运信息
      return "success"; // 需要转运但无转运信息
    },
    /** 获取转运状态文本 */
@@ -1197,7 +1198,7 @@
          ) {
            // 已有转运单,跳转到转运单详情页
            const transport = caseData.serviceTransport[0];
            this.goToTransportDetail(transport.id, row.caseNo);
            this.goToTransportDetail(transport.id, row.name);
          } else {
            // 没有转运单,跳转到创建转运单页面
            this.goToCreateTransport(row);
@@ -1213,12 +1214,11 @@
    /** 跳转到创建转运单页面 */
    goToCreateTransport(caseData) {
      // 这里可以跳转到创建转运单的页面
      // 方式1:在新页面打开
      this.$router.push({
        path: "/report/transfer",
        query: {
          autoCreate: "true",
          autoCreate: "true", //跳转转运标识
          caseId: caseData.id,
          caseNo: caseData.caseNo,
          patName: caseData.name,
@@ -1228,9 +1228,6 @@
          treatmentHospitalName: caseData.treatmenthospitalname
        }
      });
      // 方式2:在当前页面打开弹框(推荐)
      // this.openTransportDialog(caseData);
    },
    /** 打开转运单弹框 */
@@ -1265,12 +1262,12 @@
    },
    /** 跳转到转运单详情页 */
    goToTransportDetail(transportId, caseNo) {
    goToTransportDetail(transportId, name) {
      this.$router.push({
        path: "/report/transfer",
        query: {
          id: transportId,
          caseNo: caseNo
          autoCreate: "true",
          patName: name
        }
      });
    },
@@ -1356,6 +1353,12 @@
          this.currentCase = data;
          this.editForm = { ...data };
          this.editForm.idcardtype = this.editForm.idcardtype.toString();
          console.log(this.editForm.idcardtype);
          this.editForm.infectious = this.editForm.infectious
            .split(",")
            .filter(item => item.trim() !== "");
          this.editOpen = true;
          this.$nextTick(() => {
            this.$refs.editForm && this.$refs.editForm.clearValidate();
@@ -1380,7 +1383,7 @@
      });
    },
    /** 审批按钮操作 */
    /** 确认按钮操作 */
    async handleApprove(row) {
      try {
        const response = await donateInfo(row.id);
@@ -1404,11 +1407,11 @@
        this.approveForm.approveResult = "3";
        this.approveForm.approveOpinion = "";
        this.approveOpen = true;
        this.$modal.msgError("获取详情失败,但已打开审批窗口");
        this.$modal.msgError("获取详情失败,但已打开确认窗口");
      }
    },
    /** 提交审批 */
    /** 提交确认 */
    async submitApprove() {
      try {
        const valid = await this.$refs.approveForm.validate();
@@ -1424,14 +1427,14 @@
          };
          await donateEdit(approveData);
          this.$modal.msgSuccess("审批成功");
          this.$modal.msgSuccess("确认成功");
          this.approveOpen = false;
          this.getList();
        }
      } catch (error) {
        console.error("审批失败:", error);
        console.error("确认失败:", error);
        if (error !== "cancel") {
          this.$modal.msgError("审批失败");
          this.$modal.msgError("确认失败");
        }
      }
    },
@@ -1675,6 +1678,7 @@
        this.saveLoading = true;
        const requestData = { ...this.editForm };
        requestData.infectious = requestData.infectious.join(",");
        let response;
        if (this.isEditing) {
@@ -1774,7 +1778,7 @@
  white-space: nowrap;
}
/* 审批弹框样式 */
/* 确认弹框样式 */
.approve-dialog >>> .el-dialog__body {
  padding: 0;
}