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,7 +38,11 @@
        <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" />
@@ -51,6 +56,7 @@
              type="datetime"
              value-format="yyyy-MM-dd HH:mm:ss"
              style="width: 100%"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -62,6 +68,7 @@
              :rows="2"
              v-model="form.expertOpinion"
              placeholder="请输入意见"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -73,6 +80,7 @@
              :rows="3"
              v-model="form.remark"
              placeholder="请输入备注信息"
              :disabled="isReadOnly"
            />
          </el-form-item>
        </div>
@@ -87,6 +95,7 @@
      <!-- 使用 UploadAttachment 组件 -->
      <UploadAttachment
        v-if="!isReadOnly"
        ref="uploadAttachment"
        :file-list="attachmentFileList"
        :limit="10"
@@ -144,6 +153,7 @@
                下载
              </el-button>
              <el-button
                v-if="!isReadOnly"
                size="mini"
                type="danger"
                @click="handleRemoveAttachment(scope.$index)"
@@ -181,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"
@@ -193,6 +209,7 @@
            发送专家
          </el-button>
          <el-button
            v-if="!isReadOnly"
            size="mini"
            type="success"
            @click="handleSendToChiefExpert"
@@ -378,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"
@@ -417,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"
@@ -431,6 +459,7 @@
      </el-button>
      <el-button
        v-if="!isReadOnly"
        type="warning"
        @click="handleSuspendReview"
        :disabled="form.status == '2' || form.status == '3'"
@@ -440,6 +469,7 @@
      </el-button>
      <el-button
        v-if="!isReadOnly"
        type="danger"
        @click="handleEndReview"
        :disabled="form.status == '2'"
@@ -808,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";
@@ -966,6 +997,11 @@
    };
  },
  computed: {
    // 查看模式:只读,禁用表单并隐藏保存按钮
    isReadOnly() {
      return this.$route.query.mode === "view";
    },
    // 计算属性:获取专家列表(确保响应式)
    ethicalreviewopinionsList() {
      return this.form.ethicalreviewopinionsList || [];
@@ -1505,6 +1541,7 @@
    // 保存信息
    async handleSave() {
      if (this.saveLoading) return;
      this.$refs.form.validate(async valid => {
        if (valid) {
          this.saveLoading = true;
@@ -1527,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);
            }
@@ -1556,6 +1599,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;
      }
    },
    // 审查完成
    async handleCompleteReview() {
      this.$confirm("确定要将本次伦理审查状态设为完成吗?", "提示", {