WXL
4 天以前 4c9fdc87987140e8b2c3f0dfc2f6608cdb6be774
src/views/business/decide/DecideInfo.vue
@@ -1,6 +1,6 @@
<template>
  <div class="death-judgment-detail">
    <case-basic-info :case-id="caseId" :show-attachment="true" />
    <case-basic-info :case-id="caseId" :show-attachment="true":column="3" />
    <!-- 公共信息模块(独立显示) -->
    <!-- 判定类型标签页 -->
@@ -35,7 +35,7 @@
            <el-form-item label="负责人" prop="responsibleusername">
              <el-input
                v-model="form.responsibleusername"
                :readonly="!isEdit"
                :disabled="isReadOnly || !isEdit"
              />
            </el-form-item>
          </el-col>
@@ -43,7 +43,7 @@
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="器官获取机构" prop="gainhospitalname">
              <el-input v-model="form.gainhospitalname" :readonly="!isEdit" />
              <el-input v-model="form.gainhospitalname" :disabled="isReadOnly || !isEdit" />
            </el-form-item>
          </el-col>
@@ -51,12 +51,12 @@
      </el-form>
    </el-card> -->
    <!-- 脑死亡判定模块 -->
    <el-card v-if="activeJudgmentType === 'brain'" class="detail-card">
    <el-card v-if="activeJudgmentType === 'brain'" class="detail-card paper-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">脑死亡判定信息</span>
        <el-button
          v-if="!isEdit"
          v-if="!isReadOnly && !isEdit"
          style="float: right; margin-left: 10px;"
          type="primary"
          @click="handleEdit"
@@ -65,73 +65,63 @@
        </el-button>
      </div>
      <el-form :model="form" ref="brainForm" :rules="rules" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="死亡原因" prop="deathreason">
              <el-input v-model="form.deathreason" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
        </el-row>
      <el-form :model="form" ref="brainForm" :rules="rules" label-width="120px" class="paper-form">
        <div class="form-row">
          <el-form-item label="死亡原因" prop="deathreason" class="col-1-3">
            <el-input v-model="form.deathreason" :disabled="isReadOnly || !isEdit" />
          </el-form-item>
          <el-form-item label="死亡时间" prop="deathtime" class="col-1-3">
            <el-date-picker
              v-model="form.deathtime"
              type="datetime"
              value-format="yyyy-MM-dd HH:mm:ss"
              style="width: 100%"
              :disabled="isReadOnly || !isEdit"
            />
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="死亡时间" prop="deathtime">
              <el-date-picker
                v-model="form.deathtime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
                :disabled="!isEdit"
        <div class="form-row">
          <el-form-item label="判定医生一" prop="deathjudgedocto" class="col-1-3">
            <el-input v-model="form.deathjudgedocto" :disabled="isReadOnly || !isEdit" />
          </el-form-item>
          <el-form-item label="判定医生二" prop="deathjudgedoctt" class="col-1-3">
            <el-input v-model="form.deathjudgedoctt" :disabled="isReadOnly || !isEdit" />
          </el-form-item>
        </div>
        <div class="form-row">
          <el-form-item label="其他判定医生" class="col-full">
            <div
              v-for="(doctor, index) in brainExtraDoctors"
              :key="index"
              style="display: flex; align-items: center; margin-bottom: 8px; width: 100%;"
            >
              <el-input
                v-model="brainExtraDoctors[index]"
                placeholder="请输入医生姓名"
                style="flex: 1; margin-right: 10px;"
                :disabled="isReadOnly || !isEdit"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生一" prop="deathjudgedocto">
              <el-input v-model="form.deathjudgedocto" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生二" prop="deathjudgedoctt">
              <el-input v-model="form.deathjudgedoctt" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="其他判定医生">
              <div
                v-for="(doctor, index) in brainExtraDoctors"
                :key="index"
                style="display: flex; align-items: center; margin-bottom: 8px;"
              >
                <el-input
                  v-model="brainExtraDoctors[index]"
                  placeholder="请输入医生姓名"
                  style="flex: 1; margin-right: 10px;"
                  :readonly="!isEdit"
                />
                <el-button
                  v-if="isEdit"
                  type="danger"
                  icon="el-icon-minus"
                  circle
                  size="mini"
                  @click="removeBrainDoctor(index)"
                />
              </div>
              <el-button
                v-if="isEdit"
                type="primary"
                icon="el-icon-plus"
                size="small"
                @click="addBrainDoctor"
              >
                添加医生
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
                v-if="!isReadOnly && isEdit"
                type="danger"
                icon="el-icon-minus"
                circle
                size="mini"
                @click="removeBrainDoctor(index)"
              />
            </div>
            <el-button
              v-if="!isReadOnly && isEdit"
              type="primary"
              icon="el-icon-plus"
              size="small"
              @click="addBrainDoctor"
            >
              添加医生
            </el-button>
          </el-form-item>
        </div>
      </el-form>
      <!-- 脑死亡评估表附件 -->
@@ -153,6 +143,7 @@
                <span class="upload-title">{{ type.label }}</span>
                <el-tooltip content="点击上传该类型评估表" placement="top">
                  <el-button
                    v-if="!isReadOnly"
                    size="mini"
                    type="primary"
                    icon="el-icon-plus"
@@ -225,7 +216,7 @@
                      >下载</el-button
                    >
                    <el-button
                      v-if="isEdit"
                      v-if="!isReadOnly && isEdit"
                      size="mini"
                      type="text"
                      icon="el-icon-delete"
@@ -253,11 +244,11 @@
    </el-card>
    <!-- 心死亡判定模块 -->
    <el-card v-else class="detail-card">
    <el-card v-else class="detail-card paper-card">
      <div slot="header" class="clearfix">
        <span class="detail-title">心死亡判定信息</span>
        <el-button
          v-if="isEdit"
          v-if="!isReadOnly && isEdit"
          style="float: right; margin-left: 10px;"
          type="success"
          @click="handleSave"
@@ -266,7 +257,7 @@
          保存信息
        </el-button>
        <el-button
          v-else
          v-else-if="!isReadOnly"
          style="float: right; margin-left: 10px;"
          type="primary"
          @click="handleEdit"
@@ -275,79 +266,69 @@
        </el-button>
      </div>
      <el-form :model="form" ref="heartForm" :rules="rules" label-width="120px">
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="心死亡原因" prop="heartdeathreason">
              <el-input v-model="form.heartdeathreason" :readonly="!isEdit" />
            </el-form-item>
          </el-col>
        </el-row>
      <el-form :model="form" ref="heartForm" :rules="rules" label-width="120px" class="paper-form">
        <div class="form-row">
          <el-form-item label="心死亡原因" prop="heartdeathreason" class="col-1-3">
            <el-input v-model="form.heartdeathreason" :disabled="isReadOnly || !isEdit" />
          </el-form-item>
          <el-form-item label="心死亡判定完成时间" prop="heartdeathtime" class="col-1-3">
            <el-date-picker
              v-model="form.heartdeathtime"
              type="datetime"
              value-format="yyyy-MM-dd HH:mm:ss"
              style="width: 100%"
              :disabled="isReadOnly || !isEdit"
            />
          </el-form-item>
        </div>
        <el-row :gutter="20">
          <el-col :span="8">
            <el-form-item label="心死亡判定完成时间" prop="heartdeathtime">
              <el-date-picker
                v-model="form.heartdeathtime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                style="width: 100%"
                :disabled="!isEdit"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生一" prop="heartdeathjudgedocto">
        <div class="form-row">
          <el-form-item label="判定医生一" prop="heartdeathjudgedocto" class="col-1-3">
            <el-input
              v-model="form.heartdeathjudgedocto"
              :disabled="isReadOnly || !isEdit"
            />
          </el-form-item>
          <el-form-item label="判定医生二" prop="heartdeathjudgedoctt" class="col-1-3">
            <el-input
              v-model="form.heartdeathjudgedoctt"
              :disabled="isReadOnly || !isEdit"
            />
          </el-form-item>
        </div>
        <div class="form-row">
          <el-form-item label="其他判定医生" class="col-full">
            <div
              v-for="(doctor, index) in heartExtraDoctors"
              :key="index"
              style="display: flex; align-items: center; margin-bottom: 8px; width: 100%;"
            >
              <el-input
                v-model="form.heartdeathjudgedocto"
                :readonly="!isEdit"
                v-model="heartExtraDoctors[index]"
                placeholder="请输入医生姓名"
                style="flex: 1; margin-right: 10px;"
                :disabled="isReadOnly || !isEdit"
              />
            </el-form-item>
          </el-col>
          <el-col :span="8">
            <el-form-item label="判定医生二" prop="heartdeathjudgedoctt">
              <el-input
                v-model="form.heartdeathjudgedoctt"
                :readonly="!isEdit"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="20">
          <el-col :span="24">
            <el-form-item label="其他判定医生">
              <div
                v-for="(doctor, index) in heartExtraDoctors"
                :key="index"
                style="display: flex; align-items: center; margin-bottom: 8px;"
              >
                <el-input
                  v-model="heartExtraDoctors[index]"
                  placeholder="请输入医生姓名"
                  style="flex: 1; margin-right: 10px;"
                  :readonly="!isEdit"
                />
                <el-button
                  v-if="isEdit"
                  type="danger"
                  icon="el-icon-minus"
                  circle
                  size="mini"
                  @click="removeHeartDoctor(index)"
                />
              </div>
              <el-button
                v-if="isEdit"
                type="primary"
                icon="el-icon-plus"
                size="small"
                @click="addHeartDoctor"
              >
                添加医生
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
                v-if="!isReadOnly && isEdit"
                type="danger"
                icon="el-icon-minus"
                circle
                size="mini"
                @click="removeHeartDoctor(index)"
              />
            </div>
            <el-button
              v-if="!isReadOnly && isEdit"
              type="primary"
              icon="el-icon-plus"
              size="small"
              @click="addHeartDoctor"
            >
              添加医生
            </el-button>
          </el-form-item>
        </div>
      </el-form>
      <!-- 心死亡评估表附件 -->
@@ -369,6 +350,7 @@
                <span class="upload-title">{{ type.label }}</span>
                <el-tooltip content="点击上传该类型评估表" placement="top">
                  <el-button
                    v-if="!isReadOnly"
                    size="mini"
                    type="primary"
                    icon="el-icon-plus"
@@ -441,7 +423,7 @@
                      >下载</el-button
                    >
                    <el-button
                      v-if="isEdit"
                      v-if="!isReadOnly && isEdit"
                      size="mini"
                      type="text"
                      icon="el-icon-delete"
@@ -470,7 +452,7 @@
    <!-- 底部操作按钮 -->
    <div style="text-align: center; margin: 30px 0;">
      <el-button
        v-if="isEdit"
        v-if="!isReadOnly && isEdit"
        type="primary"
        @click="handleSave"
        :loading="saveLoading"
@@ -478,7 +460,7 @@
        保存信息
      </el-button>
      <el-button
        v-if="isEdit"
        v-if="!isReadOnly && isEdit"
        type="success"
        @click="accomplish"
        :loading="saveLoading"
@@ -589,6 +571,7 @@
  deathinfoadd,
  queryDathInfoBaseInfo
} from "@/api/businessApi";
import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
import { getToken } from "@/utils/auth";
import CaseBasicInfo from "@/components/CaseBasicInfo";
import FilePreviewDialog from "@/components/FilePreviewDialog";
@@ -713,6 +696,10 @@
    };
  },
  computed: {
    // 查看模式:只读,禁用表单并隐藏保存按钮
    isReadOnly() {
      return this.$route.query.mode === "view";
    },
    getCurrentBrainDeathTypeLabel() {
      const type = this.brainDeathAttachmentTypes.find(
        t => t.value === this.currentUploadType
@@ -735,6 +722,9 @@
    if (this.$route.query.judgmentType) {
      this.activeJudgmentType = this.$route.query.judgmentType;
    }
    // 查看模式下默认只读
    this.isEdit = !this.isReadOnly;
    this.getDetail(this.infoid);
    this.getAttachmentList();
@@ -1197,6 +1187,7 @@
    },
    // 保存信息
    async handleSave() {
      if (this.saveLoading) return;
      // 根据当前标签选择验证规则
      let formRef =
        this.activeJudgmentType === "brain" ? "brainForm" : "heartForm";
@@ -1241,6 +1232,12 @@
            if (submitData.id) {
              response = await deathinfoedit(submitData);
            } else {
              // 新增时校验是否已有相同患者
              const exists = await this.checkPatientExists();
              if (exists) {
                this.$message.warning("该患者已存在,请勿重复添加");
                return;
              }
              response = await deathinfoadd(submitData);
            }
@@ -1264,6 +1261,31 @@
          }
        }
      });
    },
    // 新增时校验是否已有相同患者(按住院号)
    async checkPatientExists() {
      let inpatientno = this.form.inpatientno;
      if (!inpatientno && this.caseId) {
        try {
          const caseRes = await getDonatebaseinfo(this.caseId);
          inpatientno = (caseRes.data && caseRes.data.inpatientno) || "";
        } catch (e) {
          inpatientno = "";
        }
      }
      if (!inpatientno) return false;
      try {
        const res = await queryDathInfoBaseInfo({
          inpatientno,
          pageNum: 1,
          pageSize: 1
        });
        const list = res.rows || res.data || [];
        return list.some(item => item && item.id != null && item.id !== "");
      } catch (e) {
        return false;
      }
    },
    // 文件大小格式化
@@ -1398,4 +1420,103 @@
:deep(.image-preview-dialog .el-message-box__content) {
  text-align: center;
}
/* ===== 纸质表格网格样式 ===== */
.paper-card >>> .el-card__body {
  padding: 16px;
}
.paper-form {
  border-left: 1px solid #d0d3db;
  background: #fff;
}
.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%;
}
</style>