WXL
3 天以前 4c9fdc87987140e8b2c3f0dfc2f6608cdb6be774
src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -14,10 +14,11 @@
            <el-input
              v-model="form.initiateTheme"
              placeholder="请输入发起主题"
              :disabled="isReadOnly"
            />
          </el-form-item>
          <el-form-item label="发起人" prop="initiatePerson" class="col-1-3">
            <el-input v-model="form.initiatePerson" />
            <el-input v-model="form.initiatePerson" :disabled="isReadOnly" />
          </el-form-item>
          <!-- <el-col :span="8">
            <el-form-item label="审查状态" prop="status">
@@ -37,10 +38,16 @@
        <div class="form-row">
          <el-form-item label="伦理审查结论" prop="expertConclusion" class="col-1-3">
            <el-select v-model="form.expertConclusion" style="width: 100%">
            <el-select
              v-model="form.expertConclusion"
              style="width: 100%"
              :disabled="isReadOnly"
            >
              <el-option label="同意" value="1" />
              <el-option label="审查中" value="2" />
              <el-option label="不同意" value="0" />
              <el-option label="弃权" value="3" />
              <el-option label="修改后同意" value="4" />
            </el-select>
          </el-form-item>
          <el-form-item label="伦理审查结论时间" prop="expertTime" class="col-1-3">
@@ -49,6 +56,7 @@
              type="datetime"
              value-format="yyyy-MM-dd HH:mm:ss"
              style="width: 100%"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -60,6 +68,7 @@
              :rows="2"
              v-model="form.expertOpinion"
              placeholder="请输入意见"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -71,6 +80,7 @@
              :rows="3"
              v-model="form.remark"
              placeholder="请输入备注信息"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -85,6 +95,7 @@
      <!-- 使用 UploadAttachment 组件 -->
      <UploadAttachment
        v-if="!isReadOnly"
        ref="uploadAttachment"
        :file-list="attachmentFileList"
        :limit="10"
@@ -142,6 +153,7 @@
                下载
              </el-button>
              <el-button
                v-if="!isReadOnly"
                size="mini"
                type="danger"
                @click="handleRemoveAttachment(scope.$index)"
@@ -179,10 +191,16 @@
          >
            刷新
          </el-button>
          <el-button size="mini" type="primary" @click="handleAddExpert">
          <el-button
            v-if="!isReadOnly"
            size="mini"
            type="primary"
            @click="handleAddExpert"
          >
            添加专家
          </el-button>
          <el-button
            v-if="!isReadOnly"
            size="mini"
            type="primary"
            @click="handleSendToNormalExperts"
@@ -191,6 +209,7 @@
            发送专家
          </el-button>
          <el-button
            v-if="!isReadOnly"
            size="mini"
            type="success"
            @click="handleSendToChiefExpert"
@@ -376,7 +395,13 @@
          </template>
        </el-table-column>
        <el-table-column label="操作" width="180" align="center" fixed="right">
        <el-table-column
          v-if="!isReadOnly"
          label="操作"
          width="180"
          align="center"
          fixed="right"
        >
          <template slot-scope="scope">
            <el-button
              size="mini"
@@ -415,12 +440,17 @@
      </el-table>
    </el-card>
    <div style="text-align: center; margin: 30px 0;">
      <el-button type="primary" @click="handleSave" :loading="saveLoading">
      <el-button
        v-if="!isReadOnly"
        type="primary"
        @click="handleSave"
        :loading="saveLoading"
      >
        保存
      </el-button>
      <el-button
        v-if="form.status != '3'"
        v-if="!isReadOnly && form.status != '3'"
        type="success"
        @click="handleCompleteReview"
        :loading="completeLoading"
@@ -429,6 +459,7 @@
      </el-button>
      <el-button
        v-if="!isReadOnly"
        type="warning"
        @click="handleSuspendReview"
        :disabled="form.status == '2' || form.status == '3'"
@@ -438,6 +469,7 @@
      </el-button>
      <el-button
        v-if="!isReadOnly"
        type="danger"
        @click="handleEndReview"
        :disabled="form.status == '2'"
@@ -725,7 +757,7 @@
          <el-row :gutter="20" style="margin-top: 20px;">
            <el-col :span="12">
              <div class="history-stat-item">
                <div class="history-stat-label">未接收数量</div>
                <div class="history-stat-label">已发送未接收数量</div>
                <div class="history-stat-value">
                  {{ expertHistoryData.notAcceptCount || 0 }}
                </div>
@@ -806,6 +838,7 @@
  sendcall
} from "@/api/businessApi";
import { listExternalperson } from "@/api/project/externalperson";
import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
import CaseBasicInfo from "@/components/CaseBasicInfo";
import UploadAttachment from "@/components/UploadAttachment";
import FilePreviewDialog from "@/components/FilePreviewDialog";
@@ -964,6 +997,11 @@
    };
  },
  computed: {
    // 查看模式:只读,禁用表单并隐藏保存按钮
    isReadOnly() {
      return this.$route.query.mode === "view";
    },
    // 计算属性:获取专家列表(确保响应式)
    ethicalreviewopinionsList() {
      return this.form.ethicalreviewopinionsList || [];
@@ -1333,7 +1371,9 @@
      console.log(file, "file");
      this.currentPreviewFile = {
        fileName: file,
        // 签名附件 URL 通常无扩展名(如 .../file-1787645145583),
        // 预览组件依赖文件名扩展名识别文件类型,这里补 .png 让其按图片预览
        fileName: "手写签名.png",
        fileUrl: file,
        fileType: "png"
      };
@@ -1423,8 +1463,8 @@
    // 审查状态过滤器
    getReviewStatusFilter(status) {
      const statusMap = {
        "0": "info", // 待接收
        "1": "warning", // 未接收
        "0": "info", // 待发送
        "1": "warning", // 已发送
        "2": "success", // 已接收
        "3": "danger", // 超时
        "4": "danger", // 中止
@@ -1435,8 +1475,8 @@
    getReviewStatusText(status) {
      const statusMap = {
        "0": "待接收",
        "1": "未接收",
        "0": "待发送",
        "1": "已发送",
        "2": "已接收",
        "3": "超时",
        "4": "中止",
@@ -1448,18 +1488,22 @@
    // 结论过滤器
    getConclusionFilter(conclusion) {
      const conclusionMap = {
        "0": "danger", // 不同意
        "1": "success", // 同意
        "2": "warning", // 审查中
        "0": "danger" // 不同意
        "3": "info", // 弃权
        "4": "success" // 修改后同意
      };
      return conclusionMap[conclusion] || "info";
    },
    getConclusionText(conclusion) {
      const conclusionMap = {
        "0": "不同意",
        "1": "同意",
        "2": "审查中",
        "0": "不同意"
        "3": "弃权",
        "4": "修改后同意"
      };
      return conclusionMap[conclusion] || "未知";
    },
@@ -1497,6 +1541,7 @@
    // 保存信息
    async handleSave() {
      if (this.saveLoading) return;
      this.$refs.form.validate(async valid => {
        if (valid) {
          this.saveLoading = true;
@@ -1519,6 +1564,12 @@
            if (submitData.id) {
              response = await ethicalreviewedit(submitData);
            } else {
              // 新增时校验是否已有相同患者
              const exists = await this.checkPatientExists();
              if (exists) {
                this.$message.warning("该患者已存在,请勿重复添加");
                return;
              }
              response = await ethicalreviewadd(submitData);
            }
@@ -1546,6 +1597,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 reviewinitiateBaseInfoList({
          inpatientno,
          pageNum: 1,
          pageSize: 1
        });
        const list = res.data || [];
        return list.some(item => item && item.id != null && item.id !== "");
      } catch (e) {
        return false;
      }
    },
    // 审查完成
@@ -2005,7 +2081,7 @@
          deptName: expert.unitname || "",
          title: expert.title || "",
          donorno: expert.telephone || "",
          receiveStatus: "0", // 待接收
          receiveStatus: "0", // 待发送
          expertconclusion: "",
          expertopinion: "",
          conclusionannex: "",
@@ -2204,6 +2280,7 @@
              if (index != -1) {
                this.form.ethicalreviewopinionsList[index].receiveStatus = "1"; // 已接收
                this.form.ethicalreviewopinionsList[index].expertconclusion = "2"; // 审查中
                this.form.ethicalreviewopinionsList[
                  index
                ].startTime = this.sendForm.startTime;
@@ -2750,8 +2827,6 @@
.paper-form {
  border-left: 1px solid #d0d3db;
  background: #fff;
  /* 超宽屏限制表单最大宽度,右侧留白,避免字段分布过开 */
  max-width: 1400px;
}
.paper-form >>> .form-row {