From 4c9fdc87987140e8b2c3f0dfc2f6608cdb6be774 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 21 十月 2026 17:39:24 +0800
Subject: [PATCH] 青岛维护
---
src/views/business/ethicalReview/ethicalReviewInfo.vue | 331 +++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 250 insertions(+), 81 deletions(-)
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 2da5b62..a68f190 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -1,28 +1,25 @@
<template>
<div class="ethics-review-detail">
- <case-basic-info :case-id="caseId" :show-attachment="true" />
+ <case-basic-info :case-id="caseId" :show-attachment="true":column="3" />
- <el-card class="detail-card">
+ <el-card class="detail-card paper-card">
<!-- 浼︾悊瀹℃煡鍩烘湰淇℃伅 -->
<div slot="header" class="clearfix">
<span class="detail-title">浼︾悊瀹℃煡鍩烘湰淇℃伅</span>
</div>
- <el-form :model="form" ref="form" :rules="rules" label-width="120px">
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="鍙戣捣涓婚" prop="initiateTheme">
- <el-input
- v-model="form.initiateTheme"
- placeholder="璇疯緭鍏ュ彂璧蜂富棰�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鍙戣捣浜�" prop="initiatePerson">
- <el-input v-model="form.initiatePerson" />
- </el-form-item>
- </el-col>
+ <el-form :model="form" ref="form" :rules="rules" label-width="120px" class="paper-form">
+ <div class="form-row">
+ <el-form-item label="鍙戣捣涓婚" prop="initiateTheme" class="col-1-3">
+ <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" :disabled="isReadOnly" />
+ </el-form-item>
<!-- <el-col :span="8">
<el-form-item label="瀹℃煡鐘舵��" prop="status">
<el-select v-model="form.status" style="width: 100%">
@@ -35,57 +32,58 @@
</el-select>
</el-form-item>
</el-col> -->
- </el-row>
+ </div>
<!-- 涓撳鐩稿叧淇℃伅 -->
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="浼︾悊瀹℃煡缁撹" prop="expertConclusion">
- <el-select v-model="form.expertConclusion" style="width: 100%">
- <el-option label="鍚屾剰" value="1" />
- <el-option label="瀹℃煡涓�" value="2" />
- <el-option label="涓嶅悓鎰�" value="0" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="浼︾悊瀹℃煡缁撹鏃堕棿" prop="expertTime">
- <el-date-picker
- v-model="form.expertTime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- </el-row>
+ <div class="form-row">
+ <el-form-item label="浼︾悊瀹℃煡缁撹" prop="expertConclusion" class="col-1-3">
+ <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">
+ <el-date-picker
+ v-model="form.expertTime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%"
+ :disabled="isReadOnly"
+ />
+ </el-form-item>
+ </div>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="瀹℃煡鎰忚" prop="expertOpinion">
- <el-input
- type="textarea"
- :rows="2"
- v-model="form.expertOpinion"
- placeholder="璇疯緭鍏ユ剰瑙�"
- />
- </el-form-item>
- </el-col>
- </el-row>
+ <div class="form-row">
+ <el-form-item label="瀹℃煡鎰忚" prop="expertOpinion" class="col-full">
+ <el-input
+ type="textarea"
+ :rows="2"
+ v-model="form.expertOpinion"
+ placeholder="璇疯緭鍏ユ剰瑙�"
+ :disabled="isReadOnly"
+ />
+ </el-form-item>
+ </div>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="澶囨敞" prop="remark">
- <el-input
- type="textarea"
- :rows="3"
- v-model="form.remark"
- placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
- />
- </el-form-item>
- </el-col>
- </el-row>
+ <div class="form-row">
+ <el-form-item label="澶囨敞" prop="remark" class="col-full">
+ <el-input
+ type="textarea"
+ :rows="3"
+ v-model="form.remark"
+ placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
+ :disabled="isReadOnly"
+ />
+ </el-form-item>
+ </div>
</el-form>
</el-card>
@@ -97,6 +95,7 @@
<!-- 浣跨敤 UploadAttachment 缁勪欢 -->
<UploadAttachment
+ v-if="!isReadOnly"
ref="uploadAttachment"
:file-list="attachmentFileList"
:limit="10"
@@ -154,6 +153,7 @@
涓嬭浇
</el-button>
<el-button
+ v-if="!isReadOnly"
size="mini"
type="danger"
@click="handleRemoveAttachment(scope.$index)"
@@ -191,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"
@@ -203,6 +209,7 @@
鍙戦�佷笓瀹�
</el-button>
<el-button
+ v-if="!isReadOnly"
size="mini"
type="success"
@click="handleSendToChiefExpert"
@@ -388,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"
@@ -427,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"
@@ -441,6 +459,7 @@
</el-button>
<el-button
+ v-if="!isReadOnly"
type="warning"
@click="handleSuspendReview"
:disabled="form.status == '2' || form.status == '3'"
@@ -450,6 +469,7 @@
</el-button>
<el-button
+ v-if="!isReadOnly"
type="danger"
@click="handleEndReview"
:disabled="form.status == '2'"
@@ -737,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>
@@ -818,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";
@@ -976,6 +997,11 @@
};
},
computed: {
+ // 鏌ョ湅妯″紡锛氬彧璇伙紝绂佺敤琛ㄥ崟骞堕殣钘忎繚瀛樻寜閽�
+ isReadOnly() {
+ return this.$route.query.mode === "view";
+ },
+
// 璁$畻灞炴�э細鑾峰彇涓撳鍒楄〃锛堢‘淇濆搷搴斿紡锛�
ethicalreviewopinionsList() {
return this.form.ethicalreviewopinionsList || [];
@@ -1163,7 +1189,7 @@
},
// 鑾峰彇璇︽儏
- async getDetail(infoid, id) {
+ async getDetail(infoid, id) {
try {
this.expertLoading = true;
let response = {};
@@ -1171,7 +1197,12 @@
response = await ethicalreviewInfo(id);
} else if (infoid) {
response = await reviewinitiateBaseInfoList({ infoid: infoid });
+ if (response.data[0].id) {
+ this.id = response.data[0].id;
+ response = await ethicalreviewInfo(this.id);
+ }
}
+
if (
!response.data.status ||
response.data.status == 0 ||
@@ -1182,7 +1213,7 @@
if (response.code == 200) {
let detailData = {};
- if (response.data && id) {
+ if (response.data && this.id) {
this.form = response.data;
// 瑙f瀽 filePatch 瀛楁
this.parseFilePatch(this.form.filePatch);
@@ -1191,7 +1222,7 @@
if (!this.form.ethicalreviewopinionsList) {
this.$set(this.form, "ethicalreviewopinionsList", []);
}
- } else if (response.data && infoid) {
+ } else if (response.data && this.infoid) {
this.form = response.data[0];
this.parseFilePatch(this.form.filePatch);
this.initAttachmentFileList();
@@ -1340,7 +1371,9 @@
console.log(file, "file");
this.currentPreviewFile = {
- fileName: file,
+ // 绛惧悕闄勪欢 URL 閫氬父鏃犳墿灞曞悕锛堝 .../file-1787645145583锛夛紝
+ // 棰勮缁勪欢渚濊禆鏂囦欢鍚嶆墿灞曞悕璇嗗埆鏂囦欢绫诲瀷锛岃繖閲岃ˉ .png 璁╁叾鎸夊浘鐗囬瑙�
+ fileName: "鎵嬪啓绛惧悕.png",
fileUrl: file,
fileType: "png"
};
@@ -1430,8 +1463,8 @@
// 瀹℃煡鐘舵�佽繃婊ゅ櫒
getReviewStatusFilter(status) {
const statusMap = {
- "0": "info", // 寰呮帴鏀�
- "1": "warning", // 鏈帴鏀�
+ "0": "info", // 寰呭彂閫�
+ "1": "warning", // 宸插彂閫�
"2": "success", // 宸叉帴鏀�
"3": "danger", // 瓒呮椂
"4": "danger", // 涓
@@ -1442,8 +1475,8 @@
getReviewStatusText(status) {
const statusMap = {
- "0": "寰呮帴鏀�",
- "1": "鏈帴鏀�",
+ "0": "寰呭彂閫�",
+ "1": "宸插彂閫�",
"2": "宸叉帴鏀�",
"3": "瓒呮椂",
"4": "涓",
@@ -1455,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] || "鏈煡";
},
@@ -1504,6 +1541,7 @@
// 淇濆瓨淇℃伅
async handleSave() {
+ if (this.saveLoading) return;
this.$refs.form.validate(async valid => {
if (valid) {
this.saveLoading = true;
@@ -1526,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);
}
@@ -1534,8 +1578,8 @@
// 淇濆瓨鎴愬姛鍚庢洿鏂板師濮嬫暟鎹�
this.saveOriginalData();
this.isEdit = false;
- if (!this.form.id && response.data && response.data.id) {
- this.form.id = response.data.id;
+ if (!this.form.id && response.data ) {
+ this.form.id = response.data;
this.id = this.form.id;
// this.$router.replace({
// query: { ...this.$route.query, id: this.form.id }
@@ -1553,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;
+ }
},
// 瀹℃煡瀹屾垚
@@ -2012,7 +2081,7 @@
deptName: expert.unitname || "",
title: expert.title || "",
donorno: expert.telephone || "",
- receiveStatus: "0", // 寰呮帴鏀�
+ receiveStatus: "0", // 寰呭彂閫�
expertconclusion: "",
expertopinion: "",
conclusionannex: "",
@@ -2211,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;
@@ -2748,4 +2818,103 @@
margin-bottom: 10px;
}
}
+
+/* ===== 绾歌川琛ㄦ牸缃戞牸鏍峰紡 ===== */
+.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>
--
Gitblit v1.9.3