From 7f67f2e6fbb7d47249fef0905a40a66f13ae2f2b Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 21 八月 2026 10:05:32 +0800
Subject: [PATCH] 青岛维护
---
src/views/business/ethicalReview/ethicalReviewInfo.vue | 426 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 283 insertions(+), 143 deletions(-)
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 8e56dfa..2e175aa 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -1,60 +1,24 @@
<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 style="float: right;">
- <el-button type="primary" @click="handleSave" :loading="saveLoading">
- 淇濆瓨
- </el-button>
-
- <el-button
- type="success"
- @click="handleCompleteReview"
- :disabled="form.status == '3' || form.status == '2'"
- :loading="completeLoading"
- >
- 瀹℃煡瀹屾垚
- </el-button>
-
- <el-button
- type="warning"
- @click="handleSuspendReview"
- :disabled="form.status == '2' || form.status == '3'"
- :loading="suspendLoading"
- >
- 瀹℃煡涓
- </el-button>
-
- <el-button
- type="danger"
- @click="handleEndReview"
- :disabled="form.status == '2'"
- :loading="endLoading"
- >
- 缁撴潫瀹℃煡
- </el-button>
- </div>
</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="璇疯緭鍏ュ彂璧蜂富棰�"
+ />
+ </el-form-item>
+ <el-form-item label="鍙戣捣浜�" prop="initiatePerson" class="col-1-3">
+ <el-input v-model="form.initiatePerson" />
+ </el-form-item>
<!-- <el-col :span="8">
<el-form-item label="瀹℃煡鐘舵��" prop="status">
<el-select v-model="form.status" style="width: 100%">
@@ -67,57 +31,49 @@
</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%">
+ <el-option label="鍚屾剰" value="1" />
+ <el-option label="瀹℃煡涓�" value="2" />
+ <el-option label="涓嶅悓鎰�" value="0" />
+ </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%"
+ />
+ </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="璇疯緭鍏ユ剰瑙�"
+ />
+ </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="璇疯緭鍏ュ娉ㄤ俊鎭�"
+ />
+ </el-form-item>
+ </div>
</el-form>
</el-card>
@@ -458,7 +414,38 @@
</el-table-column>
</el-table>
</el-card>
+ <div style="text-align: center; margin: 30px 0;">
+ <el-button type="primary" @click="handleSave" :loading="saveLoading">
+ 淇濆瓨
+ </el-button>
+ <el-button
+ v-if="form.status != '3'"
+ type="success"
+ @click="handleCompleteReview"
+ :loading="completeLoading"
+ >
+ 瀹℃煡瀹屾垚
+ </el-button>
+
+ <el-button
+ type="warning"
+ @click="handleSuspendReview"
+ :disabled="form.status == '2' || form.status == '3'"
+ :loading="suspendLoading"
+ >
+ 瀹℃煡涓
+ </el-button>
+
+ <el-button
+ type="danger"
+ @click="handleEndReview"
+ :disabled="form.status == '2'"
+ :loading="endLoading"
+ >
+ 缁撴潫瀹℃煡
+ </el-button>
+ </div>
<!-- 娣诲姞涓撳瀵硅瘽妗� -->
<el-dialog
title="娣诲姞涓撳"
@@ -620,7 +607,7 @@
</div>
</el-form-item>
- <el-form-item label="鍙戦�佹柟寮�" prop="sendType" required>
+ <!-- <el-form-item label="鍙戦�佹柟寮�" prop="sendType" required>
<el-select
v-model="sendForm.sendType"
placeholder="璇烽�夋嫨鍙戦�佹柟寮�"
@@ -631,27 +618,27 @@
<el-option label="鐭俊鍙戦��" value="2"></el-option>
<el-option label="鍏朵粬鏂瑰紡" value="3"></el-option>
</el-select>
- </el-form-item>
+ </el-form-item> -->
- <el-form-item label="鍙戦�佹爣棰�" prop="title" required>
+ <!-- <el-form-item label="鍙戦�佹爣棰�" prop="title" required>
<el-input v-model="sendForm.title" placeholder="璇疯緭鍏ュ彂閫佹爣棰�" />
- </el-form-item>
+ </el-form-item> -->
- <el-form-item label="鍙戦�佸唴瀹�" prop="content" required>
+ <!-- <el-form-item label="鍙戦�佸唴瀹�" prop="content" required>
<el-input
type="textarea"
:rows="4"
v-model="sendForm.content"
placeholder="璇疯緭鍏ュ彂閫佺粰涓撳鐨勫鏌ュ唴瀹硅鏄�"
/>
- </el-form-item>
+ </el-form-item> -->
- <el-form-item label="璺宠浆閾炬帴" prop="url">
+ <!-- <el-form-item label="璺宠浆閾炬帴" prop="url">
<el-input
v-model="sendForm.url"
placeholder="璇疯緭鍏ヨ烦杞摼鎺ワ紙鍙�夛級"
/>
- </el-form-item>
+ </el-form-item> -->
</el-form>
<div slot="footer">
<el-button @click="sendDialogVisible = false">鍙栨秷</el-button>
@@ -962,7 +949,6 @@
startTime: "",
endTime: "",
sendType: "0",
- title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
content: "",
url: ""
},
@@ -1165,7 +1151,7 @@
},
// 鑾峰彇璇︽儏
- async getDetail(infoid, id) {
+ async getDetail(infoid, id) {
try {
this.expertLoading = true;
let response = {};
@@ -1173,12 +1159,23 @@
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 ||
+ response.data.status == 1
+ ) {
+ response.data.status = "2";
+ }
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);
@@ -1187,7 +1184,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();
@@ -1504,9 +1501,9 @@
if (valid) {
this.saveLoading = true;
// 淇濆瓨娓呯┖id渚夸簬鍚庣鏁翠綋鍒犻櫎鏂板
- this.form.ethicalreviewopinionsList.forEach(item => {
- item.id = null;
- });
+ // this.form.ethicalreviewopinionsList.forEach(item => {
+ // item.id = null;
+ // });
try {
const submitData = {
...this.form,
@@ -1530,12 +1527,14 @@
// 淇濆瓨鎴愬姛鍚庢洿鏂板師濮嬫暟鎹�
this.saveOriginalData();
this.isEdit = false;
- if (!this.form.id && response.data && response.data.id) {
- this.form.id = response.data.id;
- this.$router.replace({
- query: { ...this.$route.query, id: this.form.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 }
+ // });
}
+ this.refreshPageData();
} else {
this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
}
@@ -2060,6 +2059,9 @@
// 鍙戦�佺粰鏅�氫笓瀹�
handleSendToNormalExperts() {
+ if (!this.validateAllIds(this.ethicalreviewopinionsList)) {
+ return;
+ }
this.currentSendExperts = this.availableNormalExperts;
this.sendForm.expertType = "normal";
this.sendForm.endTime = ""; // 閲嶇疆鎴鏃堕棿
@@ -2068,6 +2070,9 @@
// 鍙戦�佺粰涓诲涓撳
handleSendToChiefExpert() {
+ if (!this.validateAllIds(this.ethicalreviewopinionsList)) {
+ return;
+ }
this.currentSendExperts = this.availableChiefExperts;
this.sendForm.expertType = "chief";
this.sendForm.endTime = ""; // 涓诲涓撳鏃犻渶鎴鏃堕棿
@@ -2076,12 +2081,40 @@
// 鍙戦�佺粰鍗曚釜涓撳
handleSendToExpert(expert) {
+ if (!this.validateAllIds(this.ethicalreviewopinionsList)) {
+ return;
+ }
this.currentSendExperts = [expert];
this.sendForm.expertType = expert.expertType == "1" ? "chief" : "normal";
this.sendForm.endTime = expert.expertType == "1" ? "" : ""; // 涓诲涓撳鏃犻渶鎴鏃堕棿
this.sendDialogVisible = true;
},
+ validateAllIds(arr, idField = "id") {
+ if (!Array.isArray(arr) || arr.length === 0) {
+ this.$message.warning("璇峰厛閫夋嫨涓撳鍒楄〃");
+ return false;
+ }
+
+ const emptyIdItems = arr.filter(item => {
+ const id = item[idField];
+ return (
+ id === undefined ||
+ id === null ||
+ id === "" ||
+ id.toString().trim() === ""
+ );
+ });
+
+ if (emptyIdItems.length > 0) {
+ this.$message.warning(
+ "褰撳墠閫変腑涓撳鍒楄〃鏈夋湭淇濆瓨鏁版嵁锛岃淇濆瓨鍒锋柊鍚庡啀鍙戦��"
+ );
+ return false;
+ }
+
+ return true;
+ },
// 鍙戦�佸璇濇鍏抽棴
handleSendDialogClose() {
this.sendForm = {
@@ -2090,7 +2123,6 @@
startTime: "",
endTime: "",
sendType: "0",
- title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
content: "",
url: ""
};
@@ -2110,20 +2142,20 @@
return;
}
- if (!this.sendForm.sendType) {
- this.$message.warning("璇烽�夋嫨鍙戦�佹柟寮�");
- return;
- }
+ // if (!this.sendForm.sendType) {
+ // this.$message.warning("璇烽�夋嫨鍙戦�佹柟寮�");
+ // return;
+ // }
- if (!this.sendForm.title) {
- this.$message.warning("璇疯緭鍏ュ彂閫佹爣棰�");
- return;
- }
+ // if (!this.sendForm.title) {
+ // this.$message.warning("璇疯緭鍏ュ彂閫佹爣棰�");
+ // return;
+ // }
- if (!this.sendForm.content) {
- this.$message.warning("璇疯緭鍏ュ彂閫佸唴瀹�");
- return;
- }
+ // if (!this.sendForm.content) {
+ // this.$message.warning("璇疯緭鍏ュ彂閫佸唴瀹�");
+ // return;
+ // }
if (this.currentSendExperts.length == 0) {
this.$message.warning("娌℃湁鎵惧埌鍙彂閫佺殑涓撳");
@@ -2245,7 +2277,6 @@
startTime: "",
endTime: "",
sendType: "0",
- title: "浼︾悊瀹℃煡浠诲姟閫氱煡",
content: "",
url: ""
};
@@ -2262,27 +2293,35 @@
},
// 鍙戦�佸崟涓笓瀹剁殑鏂规硶
async sendSingleExpert(expert, index) {
+ console.log(expert, "expert", index);
+
try {
- // 鏋勫缓鍙戦�佹暟鎹�
- const sendData = {
- number: expert.deptname || "", // 鐢ㄦ埛鎵嬫満鍙�
- title: this.sendForm.title,
- url: this.sendForm.url || "",
- createTime: new Date()
- .toISOString()
- .replace("T", " ")
- .substring(0, 19)
+ // // 鏋勫缓鍙戦�佹暟鎹�
+ // const sendData = {
+ // number: expert.deptname || "", // 鐢ㄦ埛鎵嬫満鍙�
+ // title: this.sendForm.title,
+ // url: this.sendForm.url || "",
+ // createTime: new Date()
+ // .toISOString()
+ // .replace("T", " ")
+ // .substring(0, 19)
+ // };
+ const sendDatas = {
+ expertNo: expert.donorno || "",//7.14
+ id: expert.id || "",
+ infoId: this.infoid || ""
};
console.log(`姝e湪鍙戦�佺 ${index + 1} 涓笓瀹�: ${expert.expertname}`);
// 璋冪敤鍙戦�侀�氱煡鎺ュ彛
// const response = await sendNotification(sendData);
- const response = await sendcall({
- tel: expert.donorno ? expert.donorno : 13634195431, // 杩欓噷搴旇鏄� expert.deptname 鎴� expert.phone
- messageContent:
- "闈掑矝澶у闄勫睘鍖婚櫌涓婃姤娼滃湪鎹愮尞妗堜緥锛岃鐧诲綍OPO绯荤粺鏌ョ湅璇︾粏淇℃伅锛屽強鏃惰繘琛屽鎺ャ�傜櫥褰曢摼鎺�:https://brdeddd.qduhosos.cn/dklejdj/deljf/index"
- });
+ // const response = await sendcall({
+ // tel: expert.donorno ? expert.donorno : 13634195431, // 杩欓噷搴旇鏄� expert.deptname 鎴� expert.phone
+ // messageContent:
+ // "闈掑矝澶у闄勫睘鍖婚櫌涓婃姤娼滃湪鎹愮尞妗堜緥锛岃鐧诲綍OPO绯荤粺鏌ョ湅璇︾粏淇℃伅锛屽強鏃惰繘琛屽鎺ャ�傜櫥褰曢摼鎺�:https://brdeddd.qduhosos.cn/dklejdj/deljf/index"
+ // });
+ const response = await sendNotification(sendDatas);
if (response.code == 200) {
return {
@@ -2702,4 +2741,105 @@
margin-bottom: 10px;
}
}
+
+/* ===== 绾歌川琛ㄦ牸缃戞牸鏍峰紡 ===== */
+.paper-card >>> .el-card__body {
+ padding: 16px;
+}
+
+.paper-form {
+ border-left: 1px solid #d0d3db;
+ background: #fff;
+ /* 瓒呭灞忛檺鍒惰〃鍗曟渶澶у搴︼紝鍙充晶鐣欑櫧锛岄伩鍏嶅瓧娈靛垎甯冭繃寮� */
+ max-width: 1400px;
+}
+
+.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