From 9b2c74ee4f08fad01c2a16bc6e36df073bfa1dd5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 24 四月 2026 09:12:13 +0800
Subject: [PATCH] 推送
---
src/views/business/ethicalReview/ethicalReviewInfo.vue | 1017 +++++++++++++++++++++++++++++------------------------------
1 files changed, 497 insertions(+), 520 deletions(-)
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo.vue b/src/views/business/ethicalReview/ethicalReviewInfo.vue
index 4040953..ca2a9c2 100644
--- a/src/views/business/ethicalReview/ethicalReviewInfo.vue
+++ b/src/views/business/ethicalReview/ethicalReviewInfo.vue
@@ -1,7 +1,9 @@
<template>
<div class="ethics-review-detail">
+ <case-basic-info :case-id="caseId" :show-attachment="true" />
+
<el-card class="detail-card">
- <!-- 鍩虹淇℃伅 -->
+ <!-- 浼︾悊瀹℃煡鍩烘湰淇℃伅 -->
<div slot="header" class="clearfix">
<span class="detail-title">浼︾悊瀹℃煡鍩烘湰淇℃伅</span>
<div style="float: right;">
@@ -12,7 +14,7 @@
<el-button
type="warning"
@click="handleEndReview"
- :disabled="form.ethicsConclusion === 'terminated'"
+ :disabled="form.status === '2'"
>
缁撴潫瀹℃煡
</el-button>
@@ -22,94 +24,155 @@
<el-form :model="form" ref="form" :rules="rules" label-width="120px">
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
- <el-input v-model="form.hospitalNo" readonly />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
- <el-input v-model="form.donorName" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎬у埆" prop="gender">
- <el-select v-model="form.gender" style="width: 100%">
- <el-option label="鐢�" value="0" />
- <el-option label="濂�" value="1" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
+ <el-form-item label="鍙戣捣涓婚" prop="initiateTheme">
+ <el-input
+ v-model="form.initiateTheme"
+ placeholder="璇疯緭鍏ュ彂璧蜂富棰�"
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.age" />
- </el-form-item>
- </el-col>
- <el-col :span="16">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosis">
- <el-input v-model="form.diagnosis" />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="浼︾悊缁撹" prop="ethicsConclusion">
- <el-select v-model="form.ethicsConclusion" style="width: 100%">
- <el-option label="瀹℃煡涓�" value="reviewing" />
- <el-option label="鍚屾剰" value="approved" />
- <el-option
- label="淇敼鍚庡悓鎰�"
- value="approved_with_modifications"
- />
- <el-option label="淇敼鍚庨噸瀹�" value="re-review" />
- <el-option label="涓嶅悓鎰�" value="disapproved" />
- <el-option label="缁堟瀹℃煡" value="terminated" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="瀹℃煡鏃堕棿" prop="reviewTime">
- <el-date-picker
- v-model="form.reviewTime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鐧昏浜�" prop="registrant">
- <el-input v-model="form.registrant" />
+ <el-form-item label="鍙戣捣浜�" prop="initiatePerson">
+ <el-input v-model="form.initiatePerson" />
+ </el-form-item>
+ </el-col>
+
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="瀹℃煡鐘舵��" prop="status">
+ <el-select
+ v-model="form.status"
+ style="width: 100%"
+
+ >
+ <el-option label="鏂板缓" value="0" />
+ <el-option label="瀹℃煡涓�" value="1" />
+ <el-option label="缁撴潫" value="2" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鍙戣捣鏃堕棿" prop="startTime">
+ <el-date-picker
+ v-model="form.startTime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%"
+
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="鎴鏃堕棿" prop="cutOffTime">
+ <el-date-picker
+ v-model="form.cutOffTime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ style="width: 100%"
+
+ >
+ </el-date-picker>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 涓撳鐩稿叧淇℃伅 -->
+ <el-row :gutter="20">
+ <el-col :span="8">
+ <el-form-item label="涓撳濮撳悕" prop="expertName">
+ <el-input v-model="form.expertName" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="涓撳缂栧彿" prop="expertNo">
+ <el-input v-model="form.expertNo" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="8">
+ <el-form-item label="涓撳绫诲瀷" prop="expertType">
+ <el-select
+ v-model="form.expertType"
+ style="width: 100%"
+
+ >
+ <el-option label="鏅�氫笓瀹�" value="normal" />
+ <el-option label="涓诲涓撳" value="chief" />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <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="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-col :span="8">
+ <el-form-item label="涓撳鎺掗槦搴忓彿" prop="orderNo">
+ <el-input-number
+ v-model="form.orderNo"
+ :min="1"
+ :max="20"
+ style="width: 100%"
+
+ />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
- <el-form-item label="浼︾悊鎰忚" prop="ethicsOpinion">
+ <el-form-item label="涓撳鎰忚" prop="expertOpinion">
<el-input
type="textarea"
- :rows="3"
- v-model="form.ethicsOpinion"
- placeholder="璇疯緭鍏ヤ鸡鐞嗗鏌ユ剰瑙�"
+ :rows="2"
+ v-model="form.expertOpinion"
+ placeholder="璇疯緭鍏ヤ笓瀹舵剰瑙�"
+
/>
</el-form-item>
</el-col>
</el-row>
- <el-form-item label="鐧昏鏃堕棿" prop="registrationTime">
- <el-date-picker
- v-model="form.registrationTime"
- type="datetime"
- value-format="yyyy-MM-dd HH:mm:ss"
- style="width: 100%"
- />
- </el-form-item>
+ <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>
+
</el-form>
</el-card>
+
<!-- 闄勪欢涓婁紶 -->
<el-card class="attachment-card">
<div slot="header" class="clearfix">
@@ -176,12 +239,11 @@
</el-table-column>
</el-table>
</el-card>
+
<!-- 涓撳瀹℃煡鎯呭喌 -->
<el-card class="expert-card">
<div slot="header" class="clearfix">
- <span class="detail-title"
- >涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span
- >
+ <span class="detail-title">涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span>
<div style="float: right;">
<el-button
size="mini"
@@ -209,7 +271,8 @@
</el-button>
</div>
</div>
- <!-- 涓撳缁熻淇℃伅 -->
+
+ <!-- 涓撳缁熻淇℃伅 -->
<div
class="expert-stats"
style="margin-top: 20px; padding: 15px; background: #f5f7fa; border-radius: 4px;"
@@ -245,12 +308,13 @@
</el-col>
</el-row>
</div>
+
<!-- 涓撳瀹℃煡琛ㄦ牸 -->
<el-table
:data="expertReviews"
v-loading="expertLoading"
style="width: 100%"
- heiht="300"
+ height="800"
:row-class-name="getExpertRowClassName"
>
<el-table-column label="搴忓彿" width="60" align="center" type="index" />
@@ -320,7 +384,7 @@
<el-table-column label="鍙戦�佹椂闂�" width="160" align="center">
<template slot-scope="scope">
<span>{{
- scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈彂閫�"
+ scope.row.sendTime ? parseTime(scope.row.sendTime) : "鏈彂閫�"
}}</span>
</template>
</el-table-column>
@@ -357,8 +421,6 @@
</template>
</el-table-column>
</el-table>
-
-
</el-card>
<!-- 鍙戦�佷笓瀹跺璇濇 -->
@@ -409,58 +471,143 @@
>
</div>
</el-dialog>
+
+ <!-- 涓婁紶闄勪欢瀵硅瘽妗� -->
+ <el-dialog
+ title="涓婁紶闄勪欢"
+ :visible.sync="uploadDialogVisible"
+ width="500px"
+ :close-on-click-modal="false"
+ >
+ <el-upload
+ ref="uploadRef"
+ class="upload-demo"
+ drag
+ :action="uploadAction"
+ :headers="headers"
+ multiple
+ :file-list="tempFileList"
+ :before-upload="beforeUpload"
+ :on-change="handleFileChange"
+ :on-remove="handleTempRemove"
+ :on-success="handleUploadSuccess"
+ :auto-upload="false"
+ >
+ <i class="el-icon-upload"></i>
+ <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+ <div class="el-upload__tip" slot="tip">
+ 鏀寔涓婁紶pdf銆乯pg銆乸ng銆乨oc銆乨ocx銆亁ls銆亁lsx鏍煎紡鏂囦欢锛屽崟涓枃浠朵笉瓒呰繃10MB
+ </div>
+ </el-upload>
+ <div slot="footer" class="dialog-footer">
+ <el-button @click="uploadDialogVisible = false">鍙栨秷</el-button>
+ <el-button
+ type="primary"
+ @click="submitUpload"
+ :loading="uploadLoading"
+ :disabled="tempFileList.length === 0"
+ >
+ 纭涓婁紶
+ </el-button>
+ </div>
+ </el-dialog>
</div>
</template>
+
<script>
+import { getToken } from "@/utils/auth";
import {
- getEthicsReviewDetail,
- updateEthicsReview,
- sendExpertReview,
- endEthicsReview,
- uploadAttachment,
- deleteAttachment,
- getAttachments
-} from "./ethicsReview";
+ reviewinitiateBaseInfoList,
+ ethicalreviewedit,
+ ethicalreviewadd
+} from "@/api/businessApi";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
export default {
name: "EthicsReviewDetail",
+ components: { CaseBasicInfo },
+
data() {
return {
+ // 椤甸潰妯″紡
+ isEdit: false,
+ // 鍩烘湰淇℃伅
+ infoid: undefined,
+ caseId: null,
+ caseNo: "",
+
// 琛ㄥ崟鏁版嵁
form: {
+ // 鍩虹淇℃伅
id: undefined,
- hospitalNo: "",
- donorName: "",
- gender: "",
- age: "",
- diagnosis: "",
- ethicsConclusion: "reviewing",
- ethicsOpinion: "",
- reviewTime: "",
- registrant: "",
- registrationTime: new Date()
- .toISOString()
- .replace("T", " ")
- .substring(0, 19)
+ infoid: undefined,
+ caseNo: "",
+ initiateTheme: "",
+ initiatePerson: "",
+
+ // 鐘舵�佸拰鏃堕棿
+ status: "0", // 0:鏂板缓, 1:瀹℃煡涓�, 2:缁撴潫
+ startTime: "",
+ cutOffTime: "",
+ endTime: "",
+
+ // 涓撳淇℃伅
+ expertName: "",
+ expertNo: "",
+ expertType: "normal",
+ expertConclusion: "",
+ expertOpinion: "",
+ expertTime: "",
+ orderNo: 1,
+
+ // 澶囨敞
+ remark: "",
+
+ // 绯荤粺瀛楁
+ createBy: "",
+ createTime: "",
+ updateBy: "",
+ updateTime: "",
+ delFlag: "0"
},
// 琛ㄥ崟楠岃瘉瑙勫垯
- rules: {
- donorName: [
- { required: true, message: "鎹愮尞鑰呭鍚嶄笉鑳戒负绌�", trigger: "blur" }
- ],
- ethicsConclusion: [
- { required: true, message: "浼︾悊缁撹涓嶈兘涓虹┖", trigger: "change" }
- ],
- reviewTime: [
- { required: true, message: "瀹℃煡鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
- ]
- },
+ rules: {
+ initiateTheme: [
+ { required: true, message: "鍙戣捣涓婚涓嶈兘涓虹┖", trigger: "blur" },
+ { min: 2, max: 100, message: "闀垮害鍦� 2 鍒� 100 涓瓧绗�", trigger: "blur" }
+ ],
+ initiatePerson: [
+ { required: true, message: "鍙戣捣浜轰笉鑳戒负绌�", trigger: "blur" }
+ ],
+ status: [
+ { required: true, message: "瀹℃煡鐘舵�佷笉鑳戒负绌�", trigger: "change" }
+ ],
+ startTime: [
+ { required: true, message: "鍙戣捣鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+ ],
+ cutOffTime: [
+ { required: true, message: "鎴鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+ ],
+ expertName: [
+ { max: 50, message: "闀垮害涓嶈兘瓒呰繃 50 涓瓧绗�", trigger: "blur" }
+ ],
+ expertNo: [
+ { max: 50, message: "闀垮害涓嶈兘瓒呰繃 50 涓瓧绗�", trigger: "blur" }
+ ],
+ expertConclusion: [
+ { max: 2, message: "闀垮害涓嶈兘瓒呰繃 2 涓瓧绗�", trigger: "change" }
+ ],
+ remark: [
+ { max: 500, message: "闀垮害涓嶈兘瓒呰繃 500 涓瓧绗�", trigger: "blur" }
+ ]
+},
// 淇濆瓨鍔犺浇鐘舵��
saveLoading: false,
// 闄勪欢鏁版嵁
attachments: [],
- expertReviews: [
+ // 涓撳瀹℃煡鏁版嵁
+ expertReviews: [
// 涓撳锛�18浣嶏級- 鍒濆鐘舵�佷负鐢宠涓�
{
id: 1,
@@ -469,7 +616,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 2,
@@ -478,7 +626,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 3,
@@ -487,7 +636,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 4,
@@ -496,7 +646,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 5,
@@ -505,7 +656,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 6,
@@ -514,7 +666,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 7,
@@ -523,7 +676,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 8,
@@ -532,7 +686,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 9,
@@ -541,7 +696,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 10,
@@ -550,7 +706,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 11,
@@ -559,7 +716,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 12,
@@ -568,7 +726,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 13,
@@ -577,7 +736,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 14,
@@ -586,7 +746,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 15,
@@ -595,7 +756,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 16,
@@ -604,7 +766,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 17,
@@ -613,7 +776,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
{
id: 18,
@@ -622,7 +786,8 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
},
// 涓诲涓撳锛�1浣嶏級
{
@@ -632,11 +797,13 @@
reviewStatus: "applying",
expertConclusion: "",
expertOpinion: "",
- reviewTime: ""
+ reviewTime: "",
+ sendTime: ""
}
],
expertLoading: false,
attachmentLoading: false,
+
// 鍙戦�佸璇濇
sendDialogVisible: false,
sendForm: {
@@ -644,16 +811,37 @@
expertIds: [],
content: ""
},
+
// 涓婁紶鐩稿叧
uploadDialogVisible: false,
uploadLoading: false,
tempFileList: [],
+ uploadAction: process.env.VUE_APP_BASE_API + "/common/upload",
+ headers: {
+ Authorization: "Bearer " + getToken()
+ },
+
// 鍙敤涓撳鍒楄〃
availableExperts: [
- { id: 1, name: "寮犳暀鎺�", type: "normal" },
- { id: 2, name: "鏉庢暀鎺�", type: "normal" },
- { id: 3, name: "鐜嬫暀鎺�", type: "normal" },
- { id: 4, name: "璧典富濮�", type: "chief" }
+ { id: 1, name: "闄舵槉", type: "normal" },
+ { id: 2, name: "鍒樻枌", type: "normal" },
+ { id: 3, name: "浜庢捣鍒�", type: "normal" },
+ { id: 4, name: "鐜嬬孩姊�", type: "normal" },
+ { id: 5, name: "鐜嬫槬鍏�", type: "normal" },
+ { id: 6, name: "鐜嬮潤", type: "normal" },
+ { id: 7, name: "杈规枃瓒�", type: "normal" },
+ { id: 8, name: "闂織鍕�", type: "normal" },
+ { id: 9, name: "璁稿嚖", type: "normal" },
+ { id: 10, name: "璁镐紶灞�", type: "normal" },
+ { id: 11, name: "寮犵孩宀�", type: "normal" },
+ { id: 12, name: "鏉ㄨ嫃姘�", type: "normal" },
+ { id: 13, name: "瀹嬬帀寮�", type: "normal" },
+ { id: 14, name: "鍛ㄤ紶鍒�", type: "normal" },
+ { id: 15, name: "鑽嗗嚒娉�", type: "normal" },
+ { id: 16, name: "鐭枃鎹�", type: "normal" },
+ { id: 17, name: "钁i渿", type: "normal" },
+ { id: 18, name: "钄¢噾璐�", type: "normal" },
+ { id: 19, name: "瀛斿績娑�", type: "chief" }
]
};
},
@@ -724,47 +912,63 @@
.length > 0
);
},
- // 鏄惁鍙互鍙戦�佷笓瀹跺鏌�
- canSendToExperts() {
- return this.form.id && this.form.ethicsConclusion === "reviewing";
- },
// 褰撳墠鐢ㄦ埛淇℃伅
currentUser() {
return JSON.parse(sessionStorage.getItem("user") || "{}");
}
},
created() {
- const id = this.$route.query.id;
- if (id) {
- this.getDetail(id);
- this.getAttachments(id);
- // 涓嶅啀闇�瑕佷粠鎺ュ彛鑾峰彇涓撳鍒楄〃锛屼娇鐢ㄥ浐瀹氱殑expertReviews鏁版嵁
- } else if (this.$route.path.includes("/add")) {
- this.generateHospitalNo();
- this.form.registrant = this.currentUser.username || "褰撳墠鐢ㄦ埛";
- }
+ this.infoid = this.$route.query.infoid;
+ this.caseId = this.$route.query.infoid;
+ // const id = this.$route.query.id;
+ this.getDetail(this.infoid);
+
+ // if (id && !this.$route.path.includes("/add")) {
+ // this.getDetail(this.infoid);
+ // } else if (this.$route.path.includes("/add") && this.infoid) {
+ // this.initNewData();
+ // }
},
methods: {
- // 鐢熸垚浣忛櫌鍙�
- generateHospitalNo() {
- const timestamp = Date.now().toString();
- this.form.hospitalNo = "D" + timestamp.slice(-6);
+ // 鍒濆鍖栨柊澧炴暟鎹�
+ initNewData() {
+ this.form.infoid = this.infoid;
+ this.form.caseNo = this.$route.query.caseNo || "";
+ this.form.initiatePerson = this.currentUser.username || "褰撳墠鐢ㄦ埛";
+ this.form.startTime = new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19);
+ this.form.createBy = this.currentUser.username || "admin";
},
- getExpertRowClassName({ row }) {
- return row.isChief ? "chief-expert-row" : "normal-expert-row";
- },
+
// 鑾峰彇璇︽儏
- getDetail(id) {
- getEthicsReviewDetail(id)
- .then(response => {
- if (response.code === 200) {
- this.form = response.data;
+ async getDetail(infoid) {
+ try {
+ this.expertLoading = true;
+ const response = await reviewinitiateBaseInfoList({ infoid: infoid });
+
+ if (response.code === 200) {
+ let detailData = {};
+
+ if (response.data) {
+ this.form = response.data[0];
}
- })
- .catch(error => {
- console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
- this.$message.error("鑾峰彇璇︽儏澶辫触");
- });
+ console.log(this.form, "this.form ");
+
+ this.infoid = detailData.infoid || this.infoid;
+ this.caseNo = detailData.caseNo || "";
+
+ this.$message.success("鏁版嵁鍔犺浇鎴愬姛");
+ } else {
+ this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
+ this.$message.error("鏁版嵁鍔犺浇澶辫触");
+ } finally {
+ this.expertLoading = false;
+ }
},
// 鑾峰彇涓撳瀹℃煡鍒楄〃
@@ -772,46 +976,6 @@
this.expertLoading = true;
// 妯℃嫙鏁版嵁 - 瀹為檯椤圭洰涓粠鎺ュ彛鑾峰彇
setTimeout(() => {
- this.expertReviews = [
- // 涓撳锛�18浣嶏級
- {
- id: 1,
- expertName: "寮犳暀鎺�",
- isChief: false,
- reviewStatus: "submitted",
- expertConclusion: "approved",
- expertOpinion: "绗﹀悎浼︾悊瑕佹眰",
- reviewTime: "2025-12-01 10:30:00"
- },
- {
- id: 2,
- expertName: "鏉庢暀鎺�",
- isChief: false,
- reviewStatus: "submitted",
- expertConclusion: "approved",
- expertOpinion: "鏂规璁捐鍚堢悊",
- reviewTime: "2025-12-01 11:20:00"
- },
- {
- id: 3,
- expertName: "鐜嬫暀鎺�",
- isChief: false,
- reviewStatus: "applying",
- expertConclusion: "",
- expertOpinion: "",
- reviewTime: ""
- },
- // 涓诲涓撳锛�1浣嶏級
- {
- id: 19,
- expertName: "璧典富濮�",
- isChief: true,
- reviewStatus: "applying",
- expertConclusion: "",
- expertOpinion: "",
- reviewTime: ""
- }
- ];
this.expertLoading = false;
}, 500);
},
@@ -819,17 +983,15 @@
// 鑾峰彇闄勪欢鍒楄〃
getAttachments(ethicsReviewId) {
this.attachmentLoading = true;
- getAttachments(ethicsReviewId)
- .then(response => {
- if (response.code === 200) {
- this.attachments = response.data;
- }
- this.attachmentLoading = false;
- })
- .catch(error => {
- console.error("鑾峰彇闄勪欢鍒楄〃澶辫触:", error);
- this.attachmentLoading = false;
- });
+ // 妯℃嫙鑾峰彇闄勪欢
+ setTimeout(() => {
+ this.attachmentLoading = false;
+ }, 500);
+ },
+
+ // 涓撳琛屾牱寮�
+ getExpertRowClassName({ row }) {
+ return row.isChief ? "chief-expert-row" : "normal-expert-row";
},
// 鐘舵�佽繃婊ゅ櫒
@@ -869,38 +1031,85 @@
},
// 淇濆瓨淇℃伅
- handleSave() {
- this.$refs.form.validate(valid => {
+ async handleSave() {
+ this.$refs.form.validate(async valid => {
if (valid) {
this.saveLoading = true;
- const apiMethod = this.form.id ? updateEthicsReview : addEthicsReview;
+ try {
+ const submitData = {
+ ...this.form,
+ // 纭繚蹇呰瀛楁
+ infoid: this.infoid,
+ caseNo: this.caseNo
+ };
- apiMethod(this.form)
- .then(response => {
- if (response.code === 200) {
- this.$message.success("淇濆瓨鎴愬姛");
- if (!this.form.id) {
- this.form.id = response.data.id;
- this.$router.replace({
- query: { ...this.$route.query, id: this.form.id }
- });
- }
+ let response = null;
+
+ if (submitData.id) {
+ response = await ethicalreviewedit(submitData);
+ } else {
+ response = await ethicalreviewadd(submitData);
+ }
+
+ if (response.code === 200) {
+ this.$message.success("淇濆瓨鎴愬姛");
+ 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 }
+ });
}
- })
- .catch(error => {
- console.error("淇濆瓨澶辫触:", error);
- this.$message.error("淇濆瓨澶辫触");
- })
- .finally(() => {
- this.saveLoading = false;
- });
+ } else {
+ this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("淇濆瓨澶辫触锛岃閲嶈瘯");
+ } finally {
+ this.saveLoading = false;
+ }
}
});
},
- // 鍙戦�佷笓瀹跺鏌�
- handleSendToExperts() {
- this.sendDialogVisible = true;
+ // 缁撴潫瀹℃煡
+ async handleEndReview() {
+ this.$confirm(
+ "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
+ "鎻愮ず",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ )
+ .then(async () => {
+ try {
+ const updateData = {
+ ...this.form,
+ status: "2",
+ endTime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19)
+ };
+
+ const response = await ethicalreviewedit(updateData);
+
+ if (response.code === 200) {
+ this.$message.success("瀹℃煡宸茬粨鏉�");
+ this.form.status = "2";
+ this.form.endTime = updateData.endTime;
+ } else {
+ this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("缁撴潫瀹℃煡澶辫触:", error);
+ this.$message.error("缁撴潫瀹℃煡澶辫触");
+ }
+ })
+ .catch(() => {});
},
// 鍙戦�佺粰涓撳
@@ -949,54 +1158,29 @@
return;
}
- sendExpertReview({
- ethicsReviewId: this.form.id,
- expertIds: this.sendForm.expertIds,
- content: this.sendForm.content
- })
- .then(response => {
- if (response.code === 200) {
- this.$message.success("鍙戦�佹垚鍔�");
- this.sendDialogVisible = false;
- this.getExpertReviews(this.form.id);
- this.sendForm = {
- expertType: "normal",
- expertIds: [],
- content: ""
- };
- }
- })
- .catch(error => {
- console.error("鍙戦�佸け璐�:", error);
- this.$message.error("鍙戦�佸け璐�");
- });
- },
+ // 妯℃嫙鍙戦��
+ this.$message.success("鍙戦�佹垚鍔�");
+ this.sendDialogVisible = false;
- // 缁撴潫瀹℃煡
- handleEndReview() {
- this.$confirm(
- "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
- "鎻愮ず",
- {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
+ // 鏇存柊涓撳鐘舵��
+ this.sendForm.expertIds.forEach(expertId => {
+ const index = this.expertReviews.findIndex(
+ expert => expert.id === expertId
+ );
+ if (index !== -1) {
+ this.expertReviews[index].reviewStatus = "submitted";
+ this.expertReviews[index].sendTime = new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19);
}
- )
- .then(() => {
- endEthicsReview(this.form.id)
- .then(response => {
- if (response.code === 200) {
- this.$message.success("瀹℃煡宸茬粨鏉�");
- this.form.ethicsConclusion = "terminated";
- }
- })
- .catch(error => {
- console.error("缁撴潫瀹℃煡澶辫触:", error);
- this.$message.error("缁撴潫瀹℃煡澶辫触");
- });
- })
- .catch(() => {});
+ });
+
+ this.sendForm = {
+ expertType: "normal",
+ expertIds: [],
+ content: ""
+ };
},
// 缂栬緫涓撳瀹℃煡
@@ -1052,7 +1236,7 @@
);
},
- // 涓婁紶闄勪欢
+ // 涓婁紶闄勪欢鐩稿叧鏂规硶
handleUploadAttachment() {
this.uploadDialogVisible = true;
},
@@ -1100,37 +1284,30 @@
this.tempFileList = fileList;
},
+ // 绉婚櫎涓存椂鏂囦欢
+ handleTempRemove(file, fileList) {
+ this.tempFileList = fileList;
+ },
+
+ // 涓婁紶鎴愬姛澶勭悊
+ handleUploadSuccess(response, file, fileList) {
+ if (response.code === 200) {
+ this.$message.success("鏂囦欢涓婁紶鎴愬姛");
+ this.uploadDialogVisible = false;
+ this.tempFileList = [];
+ } else {
+ this.$message.error(response.msg || "鏂囦欢涓婁紶澶辫触");
+ }
+ },
+
// 鎻愪氦涓婁紶
- submitUpload() {
+ async submitUpload() {
if (this.tempFileList.length === 0) {
this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
return;
}
-
+ this.$refs.uploadRef.submit();
this.uploadLoading = true;
-
- const uploadPromises = this.tempFileList.map(file => {
- const formData = new FormData();
- formData.append("file", file.raw);
- formData.append("ethicsReviewId", this.form.id);
-
- return uploadAttachment(formData);
- });
-
- Promise.all(uploadPromises)
- .then(responses => {
- this.$message.success("鏂囦欢涓婁紶鎴愬姛");
- this.uploadDialogVisible = false;
- this.tempFileList = [];
- this.getAttachments(this.form.id);
- })
- .catch(error => {
- console.error("涓婁紶澶辫触:", error);
- this.$message.error("鏂囦欢涓婁紶澶辫触");
- })
- .finally(() => {
- this.uploadLoading = false;
- });
},
// 棰勮闄勪欢
@@ -1158,29 +1335,6 @@
link.download = attachment.fileName;
link.click();
this.$message.success(`寮�濮嬩笅杞�: ${attachment.fileName}`);
- },
-
- // 鍒犻櫎闄勪欢
- handleRemoveAttachment(attachment) {
- this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- deleteAttachment(attachment.id)
- .then(response => {
- if (response.code === 200) {
- this.$message.success("闄勪欢鍒犻櫎鎴愬姛");
- this.getAttachments(this.form.id);
- }
- })
- .catch(error => {
- console.error("鍒犻櫎闄勪欢澶辫触:", error);
- this.$message.error("鍒犻櫎闄勪欢澶辫触");
- });
- })
- .catch(() => {});
},
// 鑾峰彇鏂囦欢绫诲瀷
@@ -1231,6 +1385,7 @@
}
};
</script>
+
<style scoped>
.ethics-review-detail {
padding: 20px;
@@ -1286,22 +1441,6 @@
font-weight: bold;
}
-.upload-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 15px;
- padding: 10px;
- background-color: #f8f9fa;
- border-radius: 4px;
-}
-
-.upload-title {
- font-size: 14px;
- font-weight: 600;
- color: #303133;
-}
-
.file-info {
display: flex;
align-items: center;
@@ -1313,133 +1452,6 @@
color: #909399;
}
-/* 琛ㄥ崟鏍峰紡浼樺寲 */
-:deep(.el-form-item__label) {
- font-weight: 500;
-}
-
-:deep(.el-input__inner) {
- border-radius: 4px;
-}
-
-:deep(.el-textarea__inner) {
- border-radius: 4px;
- resize: vertical;
-}
-
-/* 琛ㄦ牸鏍峰紡浼樺寲 */
-:deep(.el-table) {
- border-radius: 8px;
- overflow: hidden;
-}
-
-:deep(.el-table th) {
- background-color: #f5f7fa;
- color: #606266;
- font-weight: 500;
-}
-
-:deep(.el-table .cell) {
- padding: 8px 12px;
-}
-
-/* 鎸夐挳鏍峰紡浼樺寲 */
-:deep(.el-button--primary) {
- background: linear-gradient(135deg, #409eff 0%, #3375e0 100%);
- border: none;
- border-radius: 4px;
-}
-
-:deep(.el-button--success) {
- background: linear-gradient(135deg, #67c23a 0%, #529b2f 100%);
- border: none;
- border-radius: 4px;
-}
-
-:deep(.el-button--warning) {
- background: linear-gradient(135deg, #e6a23c 0%, #d18c2a 100%);
- border: none;
- border-radius: 4px;
-}
-
-:deep(.el-button--danger) {
- background: linear-gradient(135deg, #f56c6c 0%, #e05b5b 100%);
- border: none;
- border-radius: 4px;
-}
-
-/* 鏍囩鏍峰紡 */
-:deep(.el-tag) {
- border-radius: 12px;
- border: none;
- font-weight: 500;
-}
-
-/* 瀵硅瘽妗嗘牱寮忎紭鍖� */
-:deep(.el-dialog) {
- border-radius: 8px;
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
-}
-
-:deep(.el-dialog__header) {
- background: linear-gradient(135deg, #f5f7fa 0%, #e4e7ed 100%);
- border-bottom: 1px solid #e4e7ed;
- padding: 15px 20px;
-}
-
-:deep(.el-dialog__title) {
- font-weight: 600;
- color: #303133;
-}
-
-/* 涓婁紶缁勪欢鏍峰紡 */
-:deep(.el-upload-dragger) {
- border: 2px dashed #dcdfe6;
- border-radius: 6px;
- background-color: #fafafa;
- transition: all 0.3s ease;
-}
-
-:deep(.el-upload-dragger:hover) {
- border-color: #409eff;
- background-color: #f0f7ff;
-}
-
-/* 鍝嶅簲寮忚璁� */
-@media (max-width: 768px) {
- .ethics-review-detail {
- padding: 10px;
- }
-
- .expert-stats .el-col {
- margin-bottom: 10px;
- }
-
- .upload-header {
- flex-direction: column;
- align-items: flex-start;
- gap: 10px;
- }
-}
-
-/* 鍔ㄧ敾鏁堟灉 */
-.fade-enter-active,
-.fade-leave-active {
- transition: opacity 0.3s ease;
-}
-
-.fade-enter,
-.fade-leave-to {
- opacity: 0;
-}
-
-/* 鍔犺浇鐘舵�� */
-.loading-container {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 200px;
-}
/* 涓撳绫诲瀷鏍峰紡 */
.normal-expert {
color: #409eff;
@@ -1485,49 +1497,14 @@
color: #67c23a !important;
}
-/* 琛ㄦ牸琛屾偓鍋滄晥鏋� */
-:deep(.el-table__row:hover) {
- transform: translateY(-1px);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
- transition: all 0.3s ease;
-}
-/* 鑷畾涔夋粴鍔ㄦ潯 */
-:deep(::-webkit-scrollbar) {
- width: 6px;
- height: 6px;
-}
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .ethics-review-detail {
+ padding: 10px;
+ }
-:deep(::-webkit-scrollbar-track) {
- background: #f1f1f1;
- border-radius: 3px;
-}
-
-:deep(::-webkit-scrollbar-thumb) {
- background: #c1c1c1;
- border-radius: 3px;
-}
-
-:deep(::-webkit-scrollbar-thumb:hover) {
- background: #a8a8a8;
-}
-
-/* 涓撳瀹℃煡琛ㄦ牸鐗规畩鏍峰紡 */
-.expert-table-special :deep(.el-table__row) {
- transition: all 0.3s ease;
-}
-
-.expert-table-special :deep(.el-table__row:hover) {
- background-color: #f0f7ff;
- transform: translateY(-1px);
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-}
-
-/* 涓诲涓撳琛岄珮浜� */
-:deep(.chief-expert-row) {
- background-color: #fff7e6 !important;
-}
-
-:deep(.chief-expert-row:hover) {
- background-color: #ffecc2 !important;
+ .expert-stats .el-col {
+ margin-bottom: 10px;
+ }
}
</style>
--
Gitblit v1.9.3