| | |
| | | <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"> |
| | |
| | | |
| | | <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" /> |
| | |
| | | type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss" |
| | | style="width: 100%" |
| | | :disabled="isReadOnly" |
| | | /> |
| | | </el-form-item> |
| | | </div> |
| | |
| | | :rows="2" |
| | | v-model="form.expertOpinion" |
| | | placeholder="请输入意见" |
| | | :disabled="isReadOnly" |
| | | /> |
| | | </el-form-item> |
| | | </div> |
| | |
| | | :rows="3" |
| | | v-model="form.remark" |
| | | placeholder="请输入备注信息" |
| | | :disabled="isReadOnly" |
| | | /> |
| | | </el-form-item> |
| | | </div> |
| | |
| | | |
| | | <!-- 使用 UploadAttachment 组件 --> |
| | | <UploadAttachment |
| | | v-if="!isReadOnly" |
| | | ref="uploadAttachment" |
| | | :file-list="attachmentFileList" |
| | | :limit="10" |
| | |
| | | 下载 |
| | | </el-button> |
| | | <el-button |
| | | v-if="!isReadOnly" |
| | | size="mini" |
| | | type="danger" |
| | | @click="handleRemoveAttachment(scope.$index)" |
| | |
| | | > |
| | | 刷新 |
| | | </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" |
| | |
| | | 发送专家 |
| | | </el-button> |
| | | <el-button |
| | | v-if="!isReadOnly" |
| | | size="mini" |
| | | type="success" |
| | | @click="handleSendToChiefExpert" |
| | |
| | | </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" |
| | |
| | | </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" |
| | |
| | | </el-button> |
| | | |
| | | <el-button |
| | | v-if="!isReadOnly" |
| | | type="warning" |
| | | @click="handleSuspendReview" |
| | | :disabled="form.status == '2' || form.status == '3'" |
| | |
| | | </el-button> |
| | | |
| | | <el-button |
| | | v-if="!isReadOnly" |
| | | type="danger" |
| | | @click="handleEndReview" |
| | | :disabled="form.status == '2'" |
| | |
| | | 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"; |
| | |
| | | }; |
| | | }, |
| | | computed: { |
| | | // 查看模式:只读,禁用表单并隐藏保存按钮 |
| | | isReadOnly() { |
| | | return this.$route.query.mode === "view"; |
| | | }, |
| | | |
| | | // 计算属性:获取专家列表(确保响应式) |
| | | ethicalreviewopinionsList() { |
| | | return this.form.ethicalreviewopinionsList || []; |
| | |
| | | |
| | | // 保存信息 |
| | | async handleSave() { |
| | | if (this.saveLoading) return; |
| | | this.$refs.form.validate(async valid => { |
| | | if (valid) { |
| | | this.saveLoading = true; |
| | |
| | | if (submitData.id) { |
| | | response = await ethicalreviewedit(submitData); |
| | | } else { |
| | | // 新增时校验是否已有相同患者 |
| | | const exists = await this.checkPatientExists(); |
| | | if (exists) { |
| | | this.$message.warning("该患者已存在,请勿重复添加"); |
| | | return; |
| | | } |
| | | response = await ethicalreviewadd(submitData); |
| | | } |
| | | |
| | |
| | | }); |
| | | }, |
| | | |
| | | // 新增时校验是否已有相同患者(按住院号) |
| | | 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("确定要将本次伦理审查状态设为完成吗?", "提示", { |