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/api/businessApi/decide.js | 7
src/views/project/donatebaseinfo/EditCaseModal.vue | 17
src/views/business/decide/DecideInfo.vue | 141 -
src/views/project/donatebaseinfo/index.vue | 6
src/views/business/affirm/index.vue | 4
src/views/business/ethicalReview/ethicalReviewInfo.vue | 1017 +++++++-------
src/views/business/decide/index.vue | 8
src/views/business/maintain/index.vue | 20
src/views/business/appear/index.vue | 148 +-
src/views/business/assess/index.vue | 2
src/views/business/transfer/index.vue | 71
src/views/business/ethicalReview/ethicalReviewInfo copy.vue | 1536 ++++++++++++++++++++++
src/views/project/DonationProcess/index.vue | 2
src/components/CaseBasicInfo/index.vue | 400 +++++
src/views/business/affirm/affirmInfo.vue | 60
src/views/business/maintain/maintainInfo.vue | 227 +-
src/views/business/appear/caseDetail.vue | 16
src/views/business/ethicalReview/index.vue | 14
src/views/business/assess/assessInfo.vue | 443 +++--
19 files changed, 3,059 insertions(+), 1,080 deletions(-)
diff --git a/src/api/businessApi/decide.js b/src/api/businessApi/decide.js
index 9a34d31..5e2e70b 100644
--- a/src/api/businessApi/decide.js
+++ b/src/api/businessApi/decide.js
@@ -16,6 +16,13 @@
data: data
})
}
+export function deathinfoadd(data) {
+ return request({
+ url: '/project/deathinfo/add',
+ method: 'post',
+ data: data
+ })
+}
// 姝讳骸淇℃伅璇︽儏
export function deathinfoInfo(id) {
return request({
diff --git a/src/components/CaseBasicInfo/index.vue b/src/components/CaseBasicInfo/index.vue
new file mode 100644
index 0000000..c7a9c90
--- /dev/null
+++ b/src/components/CaseBasicInfo/index.vue
@@ -0,0 +1,400 @@
+<template>
+ <el-card class="basic-info-card" v-loading="loading">
+ <div slot="header" class="clearfix">
+ <span>妗堜緥鍩烘湰淇℃伅</span>
+ <el-button
+ v-if="showAttachment && hasAttachments"
+ style="float: right; padding: 3px 0"
+ type="text"
+ @click="handleAttachmentPreview"
+ >
+ <i class="el-icon-folder-opened"></i> 鏌ョ湅闄勪欢
+ </el-button>
+ </div>
+
+ <el-descriptions v-if="basicData" :column="column" border>
+ <!-- 1. 妗堜緥缂栧彿 -->
+ <el-descriptions-item label="妗堜緥缂栧彿">
+ {{ basicData.caseNo || "--" }}
+ </el-descriptions-item>
+
+ <!-- 2. 娼滃湪鎹愮尞鑰呭鍚� -->
+ <el-descriptions-item label="鎹愮尞鑰呭鍚�">
+ {{ basicData.name || basicData.donorName || "--" }}
+ </el-descriptions-item>
+
+ <!-- 3. 鎬у埆/骞撮緞 -->
+ <el-descriptions-item label="鎬у埆/骞撮緞">
+ <span v-if="basicData.sex">
+ <dict-tag
+ v-if="useDict"
+ :options="sexOptions"
+ :value="basicData.sex"
+ />
+ <template v-else>{{ basicData.sex == "1" ? "鐢�" : "濂�" }}</template>
+ </span>
+ <span v-if="basicData.age">
+ / {{ basicData.age }}{{ basicData.ageunit || "宀�" }}</span
+ >
+ <span v-if="!basicData.sex && !basicData.age">--</span>
+ </el-descriptions-item>
+
+ <!-- 4. 璇佷欢鍙风爜 -->
+ <el-descriptions-item label="璇佷欢鍙风爜">
+ {{ basicData.idcardno || basicData.idCardNo || "--" }}
+ </el-descriptions-item>
+
+ <!-- 5. 琛�鍨� -->
+ <el-descriptions-item label="琛�鍨�">
+ <template v-if="basicData.bloodType || basicData.bloodtype">
+ {{ basicData.bloodType || basicData.bloodtype }}
+ </template>
+ <template v-else>--</template>
+ </el-descriptions-item>
+
+ <!-- 6. 鐤剧梾璇婃柇 -->
+ <el-descriptions-item label="鐤剧梾璇婃柇">
+ {{ basicData.diagnosisname || basicData.diagnosis || "--" }}
+ </el-descriptions-item>
+
+ <!-- 7. 鎵�鍦ㄥ尰鐤楁満鏋� -->
+ <el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">
+ {{ basicData.treatmenthospitalname || basicData.hospitalName || "--" }}
+ </el-descriptions-item>
+
+ <!-- 8. 鍗忚皟鍛� -->
+ <el-descriptions-item label="鍗忚皟鍛�">
+ {{ basicData.coordinatorName || basicData.contactPerson || "--" }}
+ </el-descriptions-item>
+
+ <!-- 9. 涓婃姤鏃堕棿 -->
+ <el-descriptions-item label="涓婃姤鏃堕棿">
+ {{ formatDateTime(basicData.reportTime) || "--" }}
+ </el-descriptions-item>
+
+ <!-- 10. 妗堜緥鐘舵�� -->
+ <el-descriptions-item label="妗堜緥杩涘害">
+ <!-- <el-tag :type="getReportStatusType(basicData.workflow)" size="small">
+ {{ getReportStatusText(basicData.workflow) }}
+ </el-tag> -->
+ <div>
+ <dict-tag
+ :options="dict.type.sys_donornode"
+ :value="basicData.workflow"
+ />
+ </div>
+ </el-descriptions-item>
+
+ <!-- 11. 杞繍鐘舵�侊紙鏍规嵁闇�姹傚彲閫夛級 -->
+ <el-descriptions-item v-if="showTransport" label="杞繍鐘舵��">
+ <el-tag
+ :type="getTransportStatusType(basicData.isTransport)"
+ size="small"
+ >
+ {{ getTransportStatusText(basicData.isTransport) }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
+
+ <!-- 绌虹姸鎬� -->
+ <div v-else class="empty-state">
+ <el-empty description="鏆傛棤妗堜緥淇℃伅" :image-size="100"></el-empty>
+ </div>
+ </el-card>
+</template>
+
+<script>
+import { getDonatebaseinfo } from "@/api/project/donatebaseinfo";
+
+export default {
+ name: "CaseBasicInfoSimple",
+ props: {
+ // 妗堜緥ID
+ caseId: {
+ type: [String, Number],
+ required: true
+ },
+ // 鍒楁暟
+ column: {
+ type: Number,
+ default: 2
+ },
+ // 鏄惁鏄剧ず闄勪欢鎸夐挳
+ showAttachment: {
+ type: Boolean,
+ default: false
+ },
+ // 鏄惁浣跨敤瀛楀吀
+ useDict: {
+ type: Boolean,
+ default: false
+ },
+ // 鏄惁鏄剧ず杞繍鐘舵��
+ showTransport: {
+ type: Boolean,
+ default: false
+ },
+ // 鏄惁鑷姩鍔犺浇
+ autoLoad: {
+ type: Boolean,
+ default: true
+ },
+ // 澶栭儴浼犲叆鐨勬暟鎹紙涓嶈皟鐢ㄦ帴鍙o級
+ externalData: {
+ type: Object,
+ default: null
+ },
+ // 鑷畾涔夊瓧娈靛垪琛�
+ fields: {
+ type: Array,
+ default: () => [
+ "caseNo", // 妗堜緥缂栧彿
+ "name", // 濮撳悕
+ "sexAge", // 鎬у埆/骞撮緞
+ "idcardno", // 璇佷欢鍙风爜
+ "bloodType", // 琛�鍨�
+ "diagnosis", // 鐤剧梾璇婃柇
+ "hospital", // 鍖荤枟鏈烘瀯
+ "coordinator", // 鍗忚皟鍛�
+ "reportTime", // 涓婃姤鏃堕棿
+ "status" // 妗堜緥鐘舵��
+ ]
+ }
+ },
+ dicts: [
+ "sys_user_sex",
+ "sys_BloodType",
+ "sys_DonationCategory",
+ "sys_donornode"
+ ],
+ data() {
+ return {
+ loading: false,
+ basicData: null,
+ // 瀛楀吀閫夐」
+ sexOptions: [],
+ bloodTypeOptions: []
+ };
+ },
+ computed: {
+ hasAttachments() {
+ return (
+ this.basicData &&
+ (this.basicData.assessannex || this.basicData.attachments)
+ );
+ }
+ },
+ watch: {
+ caseId: {
+ handler(newVal) {
+ if (newVal && this.autoLoad && !this.externalData) {
+ this.loadBasicInfo();
+ }
+ },
+ immediate: true
+ },
+ externalData: {
+ handler(newVal) {
+ if (newVal) {
+ this.basicData = this.mapExternalData(newVal);
+ }
+ },
+ immediate: true
+ }
+ },
+ created() {
+ if (this.useDict) {
+ this.loadDicts();
+ }
+
+ if (this.caseId && this.autoLoad && !this.externalData) {
+ this.loadBasicInfo();
+ } else if (this.externalData) {
+ this.basicData = this.mapExternalData(this.externalData);
+ }
+ },
+ methods: {
+ // 鍔犺浇瀛楀吀
+ async loadDicts() {
+ try {
+ // 鍔犺浇鎬у埆瀛楀吀
+ this.sexOptions = [
+ { dictLabel: "鐢�", dictValue: "1" },
+ { dictLabel: "濂�", dictValue: "2" }
+ ];
+
+ // 鍔犺浇琛�鍨嬪瓧鍏�
+ this.bloodTypeOptions = [
+ { dictLabel: "A鍨�", dictValue: "A" },
+ { dictLabel: "B鍨�", dictValue: "B" },
+ { dictLabel: "O鍨�", dictValue: "O" },
+ { dictLabel: "AB鍨�", dictValue: "AB" }
+ ];
+ } catch (error) {
+ console.warn("鍔犺浇瀛楀吀澶辫触:", error);
+ }
+ },
+
+ // 鍔犺浇鍩烘湰淇℃伅
+ async loadBasicInfo() {
+ if (!this.caseId) return;
+
+ this.loading = true;
+ try {
+ const response = await getDonatebaseinfo(this.caseId);
+
+ if (response.code === 200) {
+ this.basicData = this.mapApiData(response.data);
+ console.log(this.basicData );
+
+ this.loading = false;
+ } else {
+ this.$message.error(
+ "鑾峰彇妗堜緥淇℃伅澶辫触锛�" + (response.msg || "鏈煡閿欒")
+ );
+ }
+ } catch (error) {
+ console.error("鍔犺浇妗堜緥鍩烘湰淇℃伅澶辫触:", error);
+ this.$message.error("鍔犺浇澶辫触锛岃閲嶈瘯");
+ } finally {
+ this.loading = false;
+ }
+ },
+
+ // 鏄犲皠API鏁版嵁
+ mapApiData(apiData) {
+ if (!apiData) return null;
+
+ return {
+ // 鏍稿績瀛楁
+ caseNo: apiData.caseNo,
+ name: apiData.name || apiData.donorName,
+ donorName: apiData.donorName,
+ sex: apiData.sex,
+ age: apiData.age,
+ ageunit: apiData.ageunit,
+ workflow: apiData.workflow,
+ bloodType: apiData.bloodType || apiData.bloodtype,
+ idcardno: apiData.idcardno || apiData.idCardNo,
+ diagnosisname: apiData.diagnosisname || apiData.diagnosis,
+ treatmenthospitalname:
+ apiData.treatmenthospitalname || apiData.hospitalName,
+ coordinatorName: apiData.coordinatorName || apiData.contactPerson,
+ reportTime: apiData.reporttime,
+ reportStatus: apiData.reportStatus,
+ isTransport: apiData.isTransport,
+
+ // 闄勪欢瀛楁
+ assessannex: apiData.assessannex,
+ attachments: apiData.attachments
+ };
+ },
+
+ // 鏄犲皠澶栭儴鏁版嵁
+ mapExternalData(externalData) {
+ return this.mapApiData(externalData);
+ },
+
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ formatDateTime(dateTimeStr) {
+ if (!dateTimeStr) return "";
+ try {
+ const date = new Date(dateTimeStr);
+ return date
+ .toLocaleString("zh-CN", {
+ year: "numeric",
+ month: "2-digit",
+ day: "2-digit",
+ hour: "2-digit",
+ minute: "2-digit",
+ second: "2-digit"
+ })
+ .replace(/\//g, "-");
+ } catch (e) {
+ return dateTimeStr;
+ }
+ },
+
+ // 涓婃姤鐘舵�佺浉鍏�
+ getReportStatusType(status) {
+ const statusMap = {
+ "1": "warning", // 宸蹭笂鎶�
+ "2": "primary", // 宸查槄璇�
+ "3": "success", // 宸插悓鎰�
+ "4": "danger" // 宸查┏鍥�
+ };
+ return statusMap[status] || "info";
+ },
+
+ getReportStatusText(status) {
+ const statusMap = {
+ "0": "娼滃湪鎹愮尞",
+ "2": "宸查槄璇�",
+ "3": "宸插悓鎰�",
+ "4": "宸查┏鍥�"
+ };
+ return statusMap[status] || "鏈煡";
+ },
+
+ // 杞繍鐘舵�佺浉鍏�
+ getTransportStatusType(status) {
+ const statusMap = {
+ "1": "warning", // 鏃犻渶杞繍
+ "2": "primary", // 闇�杞繍
+ "3": "success", // 杞繍涓�
+ "4": "danger" // 杞繍瀹屾垚
+ };
+ return statusMap[status] || "info";
+ },
+
+ getTransportStatusText(status) {
+ const statusMap = {
+ "1": "鏃犻渶杞繍",
+ "2": "闇�杞繍",
+ "3": "杞繍涓�",
+ "4": "杞繍瀹屾垚"
+ };
+ return statusMap[status] || "鏈煡";
+ },
+
+ // 鏌ョ湅闄勪欢
+ handleAttachmentPreview() {
+ this.$emit("attachment-preview", this.basicData);
+ },
+
+ // 鍒锋柊鏁版嵁
+ async refresh() {
+ await this.loadBasicInfo();
+ },
+
+ // 鑾峰彇鏁版嵁
+ getData() {
+ return this.basicData;
+ }
+ }
+};
+</script>
+
+<style scoped>
+.basic-info-card {
+ margin-bottom: 20px;
+}
+
+.clearfix::after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+.empty-state {
+ padding: 40px 0;
+ text-align: center;
+}
+
+/* 鍝嶅簲寮忚璁� */
+@media (max-width: 768px) {
+ .basic-info-card {
+ margin: 10px;
+ }
+}
+</style>
diff --git a/src/views/business/affirm/affirmInfo.vue b/src/views/business/affirm/affirmInfo.vue
index f7db6d5..bc14269 100644
--- a/src/views/business/affirm/affirmInfo.vue
+++ b/src/views/business/affirm/affirmInfo.vue
@@ -1,9 +1,11 @@
<template>
<div class="confirmation-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>
+ <span class="detail-title">鎹愮尞纭淇℃伅</span>
<el-button
type="success"
style="float: right;"
@@ -15,45 +17,6 @@
</div>
<el-form :model="form" ref="form" label-width="120px">
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="浣忛櫌鍙�" prop="caseNo">
- <el-input v-model="form.caseNo" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
- <el-input v-model="form.name" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎬у埆" prop="sex">
- <el-select v-model="form.sex" style="width: 100%">
- <el-option label="鐢�" value="1" />
- <el-option label="濂�" value="2" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
-
- <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="8">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
- <el-input v-model="form.diagnosisname" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎵�鍦ㄥ尰鐤楁満鏋�" prop="treatmenthospitalname">
- <el-input v-model="form.treatmenthospitalname" />
- </el-form-item>
- </el-col>
- </el-row>
-
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="鍗忚皟鍛�1" prop="coordinatedusernameo">
@@ -91,7 +54,6 @@
<el-date-picker
v-model="form.signdate"
type="datetime"
- value-format="yyyy-MM-dd"
style="width: 100%"
/>
</el-form-item>
@@ -343,15 +305,18 @@
<script>
import { relativesList, relativesEdit, relativesAdd } from "@/api/businessApi";
import FilePreviewDialog from "@/components/FilePreviewDialog";
-
+import CaseBasicInfo from "@/components/CaseBasicInfo";
export default {
name: "ConfirmationDetail",
components: {
- FilePreviewDialog
+ FilePreviewDialog,
+ CaseBasicInfo
},
dicts: ["sys_FamilyRelation"],
data() {
return {
+ caseId: null,
+
// 鏄惁缂栬緫妯″紡
isEdit: false,
// 琛ㄥ崟鏁版嵁
@@ -394,6 +359,7 @@
// 鍔犺浇鐘舵��
loading: false,
saveLoading: false,
+ infoid:null,
// 闄勪欢鐩稿叧鏁版嵁
activeAttachmentType: "1",
attachmentLoading: false,
@@ -435,10 +401,11 @@
}
},
created() {
- const infoid = this.$route.query.infoid;
+ this.infoid = this.$route.query.infoid;
+ this.caseId = this.$route.query.infoid;
this.isEdit = this.$route.query.confirm === "true";
- if (infoid) {
- this.getDetail(infoid);
+ if (this.infoid) {
+ this.getDetail(this.infoid);
}
},
methods: {
@@ -801,6 +768,7 @@
const saveData = {
...this.form,
+ infoid: this.infoid,
organdecision: this.organdecision.join(","),
organdecisionOther: this.organdecisionOther
// assessannex瀛楁宸插湪updateAssessannexField涓洿鏂�
diff --git a/src/views/business/affirm/index.vue b/src/views/business/affirm/index.vue
index 4ab4aed..879a728 100644
--- a/src/views/business/affirm/index.vue
+++ b/src/views/business/affirm/index.vue
@@ -71,7 +71,7 @@
<el-card class="tool-card">
<el-row :gutter="10">
<el-col :span="16">
- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
+ <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>鏂板纭</el-button
>
<el-button
@@ -87,7 +87,7 @@
:disabled="multiple"
@click="handleDelete"
>鍒犻櫎</el-button
- >
+ > -->
<el-button
type="warning"
icon="el-icon-download"
diff --git a/src/views/business/appear/caseDetail.vue b/src/views/business/appear/caseDetail.vue
index 362085c..b4c0a47 100644
--- a/src/views/business/appear/caseDetail.vue
+++ b/src/views/business/appear/caseDetail.vue
@@ -63,7 +63,7 @@
</el-card>
<!-- 鍦板潃淇℃伅妯″潡 -->
- <el-card class="detail-section">
+ <!-- <el-card class="detail-section">
<div slot="header" class="section-header">
<span class="section-title">鍦板潃淇℃伅</span>
</div>
@@ -75,7 +75,7 @@
{{ getFullResidenceAddress() }}
</el-descriptions-item>
</el-descriptions>
- </el-card>
+ </el-card> -->
<!-- 鍖荤枟淇℃伅妯″潡 -->
<el-card class="detail-section">
@@ -86,12 +86,12 @@
<el-descriptions-item label="鐤剧梾璇婃柇鍚嶇О">{{
caseData.diagnosisname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鐥呮儏姒傚喌">{{
+ <!-- <el-descriptions-item label="鐥呮儏姒傚喌">{{
caseData.illnessoverview || "-"
}}</el-descriptions-item>
<el-descriptions-item label="鐥呬汉鐘跺喌">{{
caseData.patientstate || "-"
- }}</el-descriptions-item>
+ }}</el-descriptions-item> -->
<el-descriptions-item label="GCS璇勫垎">{{
caseData.gcsScore || "-"
}}</el-descriptions-item>
@@ -118,18 +118,18 @@
<el-descriptions-item label="娌荤枟鍖婚櫌鍚嶇О">{{
caseData.treatmenthospitalname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
+ <!-- <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
caseData.treatmentdeptname || "-"
- }}</el-descriptions-item>
+ }}</el-descriptions-item> -->
<el-descriptions-item label="浣忛櫌鍙�">{{
caseData.inpatientno || "-"
}}</el-descriptions-item>
<el-descriptions-item label="閮ㄩ棬鍚嶇О">{{
caseData.deptName || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="閮ㄩ棬缂栧彿">{{
+ <!-- <el-descriptions-item label="閮ㄩ棬缂栧彿">{{
caseData.deptNo || "-"
- }}</el-descriptions-item>
+ }}</el-descriptions-item> -->
<el-descriptions-item label="涓婃姤鍖婚櫌">{{
caseData.toHospital || "-"
}}</el-descriptions-item>
diff --git a/src/views/business/appear/index.vue b/src/views/business/appear/index.vue
index 4c578c3..18fc743 100644
--- a/src/views/business/appear/index.vue
+++ b/src/views/business/appear/index.vue
@@ -16,10 +16,10 @@
style="width: 200px"
/>
</el-form-item>
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+ <el-form-item label="鎮h�呭鍚�" prop="name">
<el-input
v-model="queryParams.name"
- placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
clearable
style="width: 200px"
/>
@@ -88,7 +88,26 @@
width="160"
/>
<el-table-column
- label="鎹愮尞鑰呭鍚�"
+ label="鐘舵��"
+ align="center"
+ prop="reportStatus"
+ width="100"
+ >
+ <template #default="scope">
+ <el-tag :type="scope.row.reportStatus | statusFilter">
+ {{ scope.row.reportStatus | statusTextFilter }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column label="杞繍鐘舵��" align="center" width="100">
+ <template #default="scope">
+ <el-tag :type="getTransportStatusTag(scope.row)">
+ {{ getTransportStatusText(scope.row) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎮h�呭鍚�"
align="center"
prop="name"
width="100"
@@ -127,32 +146,8 @@
prop="treatmenthospitalname"
width="150"
/>
- <el-table-column
- label="鐘舵��"
- align="center"
- prop="reportStatus"
- width="100"
- >
- <template #default="scope">
- <el-tag :type="scope.row.reportStatus | statusFilter">
- {{ scope.row.reportStatus | statusTextFilter }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column label="杞繍鐘舵��" align="center" width="100">
- <template #default="scope">
- <el-tag :type="getTransportStatusTag(scope.row)">
- {{ getTransportStatusText(scope.row) }}
- </el-tag>
- </template>
- </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- align="center"
- fixed="right"
- class-name="small-padding fixed-width"
- width="350"
- >
+
+ <el-table-column label="鎿嶄綔" align="center" fixed="right" width="350">
<template #default="scope">
<el-button
size="mini"
@@ -179,13 +174,13 @@
icon="el-icon-check"
@click="handleApprove(scope.row)"
v-if="scope.row.reportStatus === '2' && scope.row.delFlag === 0"
- >瀹℃壒</el-button
+ >纭</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-truck"
- :type="shouldShowTransportButton(scope.row) ? 'primary' : 'text'"
+ :type="getTransportStatustype(scope.row)"
@click="handleTransport(scope.row)"
v-if="shouldShowTransportButton(scope.row)"
:disabled="!canGoToTransport(scope.row)"
@@ -216,9 +211,9 @@
<case-detail :caseData="currentCase" @close="detailOpen = false" />
</el-dialog>
- <!-- 瀹℃壒寮规 -->
+ <!-- 纭寮规 -->
<el-dialog
- title="妗堜緥瀹℃壒"
+ title="妗堜緥纭"
:visible.sync="approveOpen"
width="80vw"
append-to-body
@@ -236,7 +231,7 @@
</div>
</el-aside>
- <!-- 鍙充晶锛氬鎵硅〃鍗� -->
+ <!-- 鍙充晶锛氱‘璁よ〃鍗� -->
<el-main style="padding: 20px;">
<el-form
ref="approveForm"
@@ -244,17 +239,17 @@
:rules="approveRules"
label-width="100px"
>
- <el-form-item label="瀹℃壒缁撴灉" prop="approveResult">
+ <el-form-item label="纭缁撴灉" prop="approveResult">
<el-radio-group v-model="approveForm.approveResult">
<el-radio label="3">鍚屾剰</el-radio>
<el-radio label="4">椹冲洖</el-radio>
</el-radio-group>
</el-form-item>
- <el-form-item label="瀹℃壒鎰忚" prop="approveOpinion">
+ <el-form-item label="纭鎰忚" prop="approveOpinion">
<el-input
type="textarea"
v-model="approveForm.approveOpinion"
- placeholder="璇疯緭鍏ヨ缁嗙殑瀹℃壒鎰忚锛屽寘鎷�氳繃鎴栭┏鍥炵殑鐞嗙敱"
+ placeholder="璇疯緭鍏ヨ缁嗙殑纭鎰忚锛屽寘鎷�氳繃鎴栭┏鍥炵殑鐞嗙敱"
:rows="6"
maxlength="500"
show-word-limit
@@ -305,10 +300,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
+ <el-form-item label="鎮h�呭鍚�" prop="name">
<el-input
v-model="editForm.name"
- placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
+ placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
/>
</el-form-item>
</el-col>
@@ -361,10 +356,10 @@
placeholder="璇烽�夋嫨琛�鍨�"
style="width: 100%"
>
- <el-option label="A鍨�" value="A" />
- <el-option label="B鍨�" value="B" />
- <el-option label="O鍨�" value="O" />
- <el-option label="AB鍨�" value="AB" />
+ <el-option label="A鍨�" :value="1" />
+ <el-option label="B鍨�" :value="2" />
+ <el-option label="O鍨�" :value="3" />
+ <el-option label="AB鍨�" :value="4" />
</el-select>
</el-form-item>
</el-col>
@@ -984,7 +979,7 @@
caseList: [],
// 璇︽儏寮规鏄惁鏄剧ず
detailOpen: false,
- // 瀹℃壒寮规鏄惁鏄剧ず
+ // 纭寮规鏄惁鏄剧ず
approveOpen: false,
// 缂栬緫寮规鏄惁鏄剧ず
editOpen: false,
@@ -1002,19 +997,19 @@
name: undefined,
reportStatus: undefined
},
- // 瀹℃壒琛ㄥ崟
+ // 纭琛ㄥ崟
approveForm: {
id: null,
approveResult: "3",
approveOpinion: ""
},
- // 瀹℃壒琛ㄥ崟楠岃瘉
+ // 纭琛ㄥ崟楠岃瘉
approveRules: {
approveResult: [
- { required: true, message: "璇烽�夋嫨瀹℃壒缁撴灉", trigger: "change" }
+ { required: true, message: "璇烽�夋嫨纭缁撴灉", trigger: "change" }
],
approveOpinion: [
- { required: true, message: "璇疯緭鍏ュ鎵规剰瑙�", trigger: "blur" }
+ { required: true, message: "璇疯緭鍏ョ‘璁ゆ剰瑙�", trigger: "blur" }
]
},
// 缂栬緫琛ㄥ崟
@@ -1025,7 +1020,7 @@
{ required: true, message: "璇疯緭鍏ユ渚嬬紪鍙�", trigger: "blur" }
],
name: [
- { required: true, message: "璇疯緭鍏ユ崘鐚�呭鍚�", trigger: "blur" }
+ { required: true, message: "璇疯緭鍏ユ偅鑰呭鍚�", trigger: "blur" }
],
sex: [{ required: true, message: "璇烽�夋嫨鎬у埆", trigger: "change" }],
age: [{ required: true, message: "璇疯緭鍏ュ勾榫�", trigger: "blur" }],
@@ -1052,7 +1047,7 @@
statusFilter(reportStatus) {
const statusMap = {
"1": "info", // 宸蹭笂鎶�
- "2": "warning", // 宸查槄璇伙紙寰呭鎵癸級
+ "2": "warning", // 宸查槄璇伙紙寰呯‘璁わ級
"3": "success", // 宸插悓鎰�
"4": "danger" // 宸查┏鍥�
};
@@ -1112,12 +1107,29 @@
) {
return "鏌ョ湅杞繍鍗�";
} else {
- return "鍓嶅線杞繍鍗�";
+ return "鍒涘缓杞繍鍗�";
}
}
- return "杞繍";
+ return "鏃犻渶杞繍";
},
-
+ getTransportStatustype(row) {
+ if (row.isTransport == "1") {
+ return "info"; // 涓嶉渶瑕佽浆杩�
+ }
+ if (
+ row.serviceTransport &&
+ Array.isArray(row.serviceTransport) &&
+ row.serviceTransport.length > 0
+ ) {
+ // 鏍规嵁杞繍鍗曠姸鎬佹樉绀轰笉鍚岄鑹�
+ const transport = row.serviceTransport[0];
+ if (transport.transitStatus) {
+ return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
+ }
+ return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
+ }
+ return "success"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
+ },
/** 鑾峰彇杞繍鐘舵�佹爣绛炬牱寮� */
getTransportStatusTag(row) {
if (row.isTransport === "1") {
@@ -1148,7 +1160,7 @@
}
return "primary"; // 鏈夎浆杩愪俊鎭絾鏃犵姸鎬�
}
- return "danger"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
+ return "success"; // 闇�瑕佽浆杩愪絾鏃犺浆杩愪俊鎭�
},
/** 鑾峰彇杞繍鐘舵�佹枃鏈� */
@@ -1197,7 +1209,7 @@
) {
// 宸叉湁杞繍鍗曪紝璺宠浆鍒拌浆杩愬崟璇︽儏椤�
const transport = caseData.serviceTransport[0];
- this.goToTransportDetail(transport.id, row.caseNo);
+ this.goToTransportDetail(transport.id, row.name);
} else {
// 娌℃湁杞繍鍗曪紝璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰
this.goToCreateTransport(row);
@@ -1213,12 +1225,11 @@
/** 璺宠浆鍒板垱寤鸿浆杩愬崟椤甸潰 */
goToCreateTransport(caseData) {
- // 杩欓噷鍙互璺宠浆鍒板垱寤鸿浆杩愬崟鐨勯〉闈�
// 鏂瑰紡1锛氬湪鏂伴〉闈㈡墦寮�
this.$router.push({
path: "/report/transfer",
query: {
- autoCreate: "true",
+ autoCreate: "true", //璺宠浆杞繍鏍囪瘑
caseId: caseData.id,
caseNo: caseData.caseNo,
patName: caseData.name,
@@ -1228,9 +1239,6 @@
treatmentHospitalName: caseData.treatmenthospitalname
}
});
-
- // 鏂瑰紡2锛氬湪褰撳墠椤甸潰鎵撳紑寮规锛堟帹鑽愶級
- // this.openTransportDialog(caseData);
},
/** 鎵撳紑杞繍鍗曞脊妗� */
@@ -1265,12 +1273,12 @@
},
/** 璺宠浆鍒拌浆杩愬崟璇︽儏椤� */
- goToTransportDetail(transportId, caseNo) {
+ goToTransportDetail(transportId, name) {
this.$router.push({
path: "/report/transfer",
query: {
- id: transportId,
- caseNo: caseNo
+ autoCreate: "true",
+ patName: name
}
});
},
@@ -1380,7 +1388,7 @@
});
},
- /** 瀹℃壒鎸夐挳鎿嶄綔 */
+ /** 纭鎸夐挳鎿嶄綔 */
async handleApprove(row) {
try {
const response = await donateInfo(row.id);
@@ -1404,11 +1412,11 @@
this.approveForm.approveResult = "3";
this.approveForm.approveOpinion = "";
this.approveOpen = true;
- this.$modal.msgError("鑾峰彇璇︽儏澶辫触锛屼絾宸叉墦寮�瀹℃壒绐楀彛");
+ this.$modal.msgError("鑾峰彇璇︽儏澶辫触锛屼絾宸叉墦寮�纭绐楀彛");
}
},
- /** 鎻愪氦瀹℃壒 */
+ /** 鎻愪氦纭 */
async submitApprove() {
try {
const valid = await this.$refs.approveForm.validate();
@@ -1424,14 +1432,14 @@
};
await donateEdit(approveData);
- this.$modal.msgSuccess("瀹℃壒鎴愬姛");
+ this.$modal.msgSuccess("纭鎴愬姛");
this.approveOpen = false;
this.getList();
}
} catch (error) {
- console.error("瀹℃壒澶辫触:", error);
+ console.error("纭澶辫触:", error);
if (error !== "cancel") {
- this.$modal.msgError("瀹℃壒澶辫触");
+ this.$modal.msgError("纭澶辫触");
}
}
},
@@ -1774,7 +1782,7 @@
white-space: nowrap;
}
-/* 瀹℃壒寮规鏍峰紡 */
+/* 纭寮规鏍峰紡 */
.approve-dialog >>> .el-dialog__body {
padding: 0;
}
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 36453c1..346cff1 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -1,6 +1,11 @@
<template>
<div class="assessment-detail">
- <el-card class="basic-info-card">
+ <!-- 鍩虹妗堜緥淇℃伅 -->
+ <case-basic-info
+ :case-id="caseId"
+ :show-attachment="true"
+ />
+ <!-- <el-card class="basic-info-card">
<div slot="header" class="clearfix">
<span>妗堜緥鍩烘湰淇℃伅</span>
<el-button
@@ -52,7 +57,7 @@
</el-tag>
</el-descriptions-item>
</el-descriptions>
- </el-card>
+ </el-card> -->
<el-card class="organ-assessment-card">
<div slot="header" class="clearfix">
@@ -157,153 +162,205 @@
</el-tab-pane>
<!-- 璇勪及姹囨�籘ab -->
- <el-tab-pane label="璇勪及姹囨��" name="summary">
- <div class="assessment-summary">
- <!-- 鍩烘湰淇℃伅姹囨�� -->
- <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
- <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
- <span class="summary-item">{{ getOrganLabel(scope.row.organno) }}</span>
- </el-descriptions-item>
- <el-descriptions-item label="鑾峰彇鏈烘瀯">
- <span class="summary-item">{{ scope.row.gainhospitalname }}</span>
- </el-descriptions-item>
- <el-descriptions-item label="璇勪及娆℃暟" :span="2">
- <el-tag type="info" size="medium">
- {{ getAssessmentCount(scope.row) }}娆�
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
- <span class="highlight-text">{{ getLatestAssessmentTime(scope.row) || "-" }}</span>
- </el-descriptions-item>
- </el-descriptions>
+ <el-tab-pane label="璇勪及姹囨��" name="summary">
+ <div class="assessment-summary">
+ <!-- 鍩烘湰淇℃伅姹囨�� -->
+ <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
+ <el-descriptions-item label="鍣ㄥ畼绫诲瀷">
+ <span class="summary-item">{{
+ getOrganLabel(scope.row.organno)
+ }}</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鏈烘瀯">
+ <span class="summary-item">{{
+ scope.row.gainhospitalname
+ }}</span>
+ </el-descriptions-item>
+ <el-descriptions-item label="璇勪及娆℃暟" :span="2">
+ <el-tag type="info" size="medium">
+ {{ getAssessmentCount(scope.row) }}娆�
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
+ <span class="highlight-text">{{
+ getLatestAssessmentTime(scope.row) || "-"
+ }}</span>
+ </el-descriptions-item>
+ </el-descriptions>
- <!-- 璇勪及璇︽儏姹囨�� -->
- <el-card header="璇勪及璇︽儏鍒楄〃" style="margin-top: 20px;" class="assessment-detail-card">
- <div v-if="getOrganAssessments(scope.row).length === 0" class="no-assessment">
- <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
- </div>
+ <!-- 璇勪及璇︽儏姹囨�� -->
+ <el-card
+ header="璇勪及璇︽儏鍒楄〃"
+ style="margin-top: 20px;"
+ class="assessment-detail-card"
+ >
+ <div
+ v-if="getOrganAssessments(scope.row).length === 0"
+ class="no-assessment"
+ >
+ <el-empty description="鏆傛棤璇勪及璁板綍"></el-empty>
+ </div>
- <div v-else>
- <!-- 姣忔璇勪及璇︽儏 -->
- <div v-for="(assessment, index) in getOrganAssessments(scope.row)"
- :key="index"
- class="assessment-item">
- <el-card shadow="hover" class="assessment-card">
- <div slot="header" class="clearfix">
- <span class="assessment-title">绗瑊{ index + 1 }}娆¤瘎浼�</span>
- <el-tag
- :type="getAssessmentTagType(assessment.status)"
- size="small"
- class="status-tag"
- >
- {{ getAssessmentStatusText(assessment.status) }}
- </el-tag>
- </div>
+ <div v-else>
+ <!-- 姣忔璇勪及璇︽儏 -->
+ <div
+ v-for="(assessment, index) in getOrganAssessments(
+ scope.row
+ )"
+ :key="index"
+ class="assessment-item"
+ >
+ <el-card shadow="hover" class="assessment-card">
+ <div slot="header" class="clearfix">
+ <span class="assessment-title"
+ >绗瑊{ index + 1 }}娆¤瘎浼�</span
+ >
+ <el-tag
+ :type="getAssessmentTagType(assessment.status)"
+ size="small"
+ class="status-tag"
+ >
+ {{ getAssessmentStatusText(assessment.status) }}
+ </el-tag>
+ </div>
- <el-descriptions :column="2" border class="detail-descriptions">
- <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
- <span class="time-text">{{ assessment.assessmentTime || "-" }}</span>
- </el-descriptions-item>
+ <el-descriptions
+ :column="2"
+ border
+ class="detail-descriptions"
+ >
+ <el-descriptions-item label="璇勪及鏃堕棿" :span="2">
+ <span class="time-text">{{
+ assessment.assessmentTime || "-"
+ }}</span>
+ </el-descriptions-item>
- <el-descriptions-item label="璇勪及浜�">
- <el-tag type="info" size="small">
- {{ assessment.assessor || "鏈~鍐�" }}
- </el-tag>
- </el-descriptions-item>
+ <el-descriptions-item label="璇勪及浜�">
+ <el-tag type="info" size="small">
+ {{ assessment.assessor || "鏈~鍐�" }}
+ </el-tag>
+ </el-descriptions-item>
- <el-descriptions-item label="鍔熻兘鐘舵��">
- <el-tag
- :type="getFunctionStatusTagType(assessment.functionStatus)"
- size="small"
- >
- {{ getFunctionStatusText(assessment.functionStatus) }}
- </el-tag>
- </el-descriptions-item>
+ <el-descriptions-item label="鍔熻兘鐘舵��">
+ <el-tag
+ :type="
+ getFunctionStatusTagType(
+ assessment.functionStatus
+ )
+ "
+ size="small"
+ >
+ {{
+ getFunctionStatusText(
+ assessment.functionStatus
+ )
+ }}
+ </el-tag>
+ </el-descriptions-item>
- <el-descriptions-item label="璇勪及鎰忚" :span="2">
- <div class="opinion-content">
- {{ assessment.assessmentOpinion || "鏆傛棤璇勪及鎰忚" }}
- </div>
- </el-descriptions-item>
+ <el-descriptions-item label="璇勪及鎰忚" :span="2">
+ <div class="opinion-content">
+ {{
+ assessment.assessmentOpinion ||
+ "鏆傛棤璇勪及鎰忚"
+ }}
+ </div>
+ </el-descriptions-item>
- <el-descriptions-item label="闄勪欢鏁伴噺" :span="2" v-if="assessment.attachments && assessment.attachments.length > 0">
- <el-tag type="success" size="small">
- {{ assessment.attachments.length }}涓�
- </el-tag>
- <el-button
- type="text"
- size="mini"
- @click="showAttachmentList(assessment.attachments, index + 1)"
- style="margin-left: 10px;"
- >
- 鏌ョ湅闄勪欢鍒楄〃
- </el-button>
- </el-descriptions-item>
- </el-descriptions>
- </el-card>
- </div>
- </div>
- </el-card>
+ <el-descriptions-item
+ label="闄勪欢鏁伴噺"
+ :span="2"
+ v-if="
+ assessment.attachments &&
+ assessment.attachments.length > 0
+ "
+ >
+ <el-tag type="success" size="small">
+ {{ assessment.attachments.length }}涓�
+ </el-tag>
+ <el-button
+ type="text"
+ size="mini"
+ @click="
+ showAttachmentList(
+ assessment.attachments,
+ index + 1
+ )
+ "
+ style="margin-left: 10px;"
+ >
+ 鏌ョ湅闄勪欢鍒楄〃
+ </el-button>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+ </div>
+ </div>
+ </el-card>
- <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
- <el-card header="鍣ㄥ畼淇℃伅" style="margin-top: 20px;" class="organ-info-card">
- <el-descriptions :column="2" border>
- <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
- <el-tag
- :type="
- scope.row.isbiopsybefore === '1'
- ? 'success'
- : 'info'
- "
- size="small"
- >
- {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
- <el-tag
- :type="
- scope.row.isbiopsyafter === '1'
- ? 'success'
- : 'info'
- "
- size="small"
- >
- {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="杈圭紭鍣ㄥ畼">
- <el-tag
- :type="
- scope.row.ismarginalorgan === '1'
- ? 'warning'
- : 'info'
- "
- size="small"
- >
- {{
- scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
- }}
- </el-tag>
- </el-descriptions-item>
- <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
- <el-tag
- :type="
- scope.row.ispathogenpositive === '1'
- ? 'danger'
- : 'info'
- "
- size="small"
- >
- {{
- scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
- }}
- </el-tag>
- </el-descriptions-item>
- </el-descriptions>
- </el-card>
- </div>
-</el-tab-pane>
+ <!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
+ <el-card
+ header="鍣ㄥ畼淇℃伅"
+ style="margin-top: 20px;"
+ class="organ-info-card"
+ >
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsybefore === '1'
+ ? 'success'
+ : 'info'
+ "
+ size="small"
+ >
+ {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsyafter === '1'
+ ? 'success'
+ : 'info'
+ "
+ size="small"
+ >
+ {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+ <el-tag
+ :type="
+ scope.row.ismarginalorgan === '1'
+ ? 'warning'
+ : 'info'
+ "
+ size="small"
+ >
+ {{
+ scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+ <el-tag
+ :type="
+ scope.row.ispathogenpositive === '1'
+ ? 'danger'
+ : 'info'
+ "
+ size="small"
+ >
+ {{
+ scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+ </div>
+ </el-tab-pane>
</el-tabs>
</div>
</template>
@@ -427,15 +484,17 @@
assessedit,
assessAdd
} from "@/api/businessApi/index";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import OrganAssessmentForm from "@/components/assessInfoComponents/OrganAssessmentForm.vue";
export default {
name: "AssessmentDetail",
- components: { OrganAssessmentForm, FilePreviewDialog },
+ components: { OrganAssessmentForm, FilePreviewDialog, CaseBasicInfo },
dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
data() {
return {
+ caseId: null,
// 鏄惁缂栬緫妯″紡
isEdit: false,
// 鍔犺浇鐘舵��
@@ -550,6 +609,7 @@
},
created() {
this.infoid = this.$route.query.infoid;
+ this.caseId = this.infoid;
this.assessmentId = this.$route.query.id;
this.isEdit = this.$route.query.assess === "true";
this.getAssessmentDetail();
@@ -567,40 +627,42 @@
this.activeTabMap.set(organ.organno, tab.name);
}
},
-// 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
- getFunctionStatusTagType(status) {
- const typeMap = {
- "1": "success", // 姝e父
- "2": "warning", // 杞诲害寮傚父
- "3": "danger", // 閲嶅害寮傚父
- "4": "info" // 鏃犳硶璇勪及
- };
- return typeMap[status] || "info";
- },
+ // 鑾峰彇鍔熻兘鐘舵�佹爣绛剧被鍨�
+ getFunctionStatusTagType(status) {
+ const typeMap = {
+ "1": "success", // 姝e父
+ "2": "warning", // 杞诲害寮傚父
+ "3": "danger", // 閲嶅害寮傚父
+ "4": "info" // 鏃犳硶璇勪及
+ };
+ return typeMap[status] || "info";
+ },
- // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
- getFunctionStatusText(status) {
- const textMap = {
- "1": "姝e父",
- "2": "杞诲害寮傚父",
- "3": "閲嶅害寮傚父",
- "4": "鏃犳硶璇勪及"
- };
- return textMap[status] || "鏈瘎浼�";
- },
+ // 鑾峰彇鍔熻兘鐘舵�佹枃鏈�
+ getFunctionStatusText(status) {
+ const textMap = {
+ "1": "姝e父",
+ "2": "杞诲害寮傚父",
+ "3": "閲嶅害寮傚父",
+ "4": "鏃犳硶璇勪及"
+ };
+ return textMap[status] || "鏈瘎浼�";
+ },
- // 鏄剧ず闄勪欢鍒楄〃
- showAttachmentList(attachments, assessmentNumber) {
- if (!attachments || attachments.length === 0) {
- this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
- return;
- }
+ // 鏄剧ず闄勪欢鍒楄〃
+ showAttachmentList(attachments, assessmentNumber) {
+ if (!attachments || attachments.length === 0) {
+ this.$message.info(`绗�${assessmentNumber}娆¤瘎浼版殏鏃犻檮浠禶);
+ return;
+ }
- this.$alert(
- `<div>
+ this.$alert(
+ `<div>
<h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
<ul style="list-style: none; padding-left: 0;">
- ${attachments.map((item, index) => `
+ ${attachments
+ .map(
+ (item, index) => `
<li style="margin: 5px 0; padding: 5px; background: #f5f7fa; border-radius: 4px;">
<i class="el-icon-document"></i>
<span style="margin-left: 8px;">${item.fileName}</span>
@@ -613,18 +675,20 @@
涓嬭浇
</el-button>
</li>
- `).join('')}
+ `
+ )
+ .join("")}
</ul>
</div>`,
- '闄勪欢鍒楄〃',
- {
- dangerouslyUseHTMLString: true,
- showConfirmButton: false,
- showCancelButton: true,
- cancelButtonText: '鍏抽棴'
- }
- );
- },
+ "闄勪欢鍒楄〃",
+ {
+ dangerouslyUseHTMLString: true,
+ showConfirmButton: false,
+ showCancelButton: true,
+ cancelButtonText: "鍏抽棴"
+ }
+ );
+ },
// 鑾峰彇鍣ㄥ畼鐨勮瘎浼板垪琛�
getOrganAssessments(organ) {
if (!organ.assesscontent) return [];
@@ -718,8 +782,8 @@
if (response.code === 200) {
this.$message.success("璇勪及琛ㄤ繚瀛樻垚鍔燂紒");
- if (!this.assessmentData.id && response.data && response.data.id) {
- this.assessmentData.id = response.data.id;
+ if (!this.assessmentData.id && response.data) {
+ this.assessmentData.id = response.data;
}
this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
} else {
@@ -957,7 +1021,6 @@
} else {
detailData = response;
}
-
this.assessmentData = {
id: detailData.id || this.assessmentId,
infoid: detailData.infoid || this.infoid,
@@ -1467,7 +1530,7 @@
}
.highlight-text {
- color: #409EFF;
+ color: #409eff;
font-weight: 500;
}
@@ -1502,7 +1565,7 @@
.assessment-card:hover {
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
- border-color: #409EFF;
+ border-color: #409eff;
}
.assessment-title {
@@ -1517,7 +1580,7 @@
}
.time-text {
- color: #67C23A;
+ color: #67c23a;
font-weight: 500;
}
@@ -1565,7 +1628,7 @@
background-color: #fafafa;
}
-::v-deep .el-table--enable-row-hover .el-table__body tr:hover>td {
+::v-deep .el-table--enable-row-hover .el-table__body tr:hover > td {
background-color: #ecf5ff;
}
@@ -1635,7 +1698,7 @@
}
::v-deep .el-tabs__item.is-active {
- color: #409EFF;
+ color: #409eff;
font-weight: 600;
}
@@ -1643,7 +1706,7 @@
background-color: #e4e7ed;
}
-::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
+::v-deep .el-tabs--card > .el-tabs__header .el-tabs__item.is-active {
background-color: #fff;
border-bottom-color: #fff;
}
diff --git a/src/views/business/assess/index.vue b/src/views/business/assess/index.vue
index f2e246d..9450f95 100644
--- a/src/views/business/assess/index.vue
+++ b/src/views/business/assess/index.vue
@@ -131,7 +131,7 @@
width="120"
/>
<el-table-column
- label="娼滃湪鎹愮尞鑰呭鍚�"
+ label="鎹愮尞鑰呭鍚�"
align="center"
prop="name"
width="120"
diff --git a/src/views/business/decide/DecideInfo.vue b/src/views/business/decide/DecideInfo.vue
index 32252de..239e5f9 100644
--- a/src/views/business/decide/DecideInfo.vue
+++ b/src/views/business/decide/DecideInfo.vue
@@ -1,5 +1,6 @@
<template>
<div class="death-judgment-detail">
+ <case-basic-info :case-id="caseId" :show-attachment="true" />
<el-card class="detail-card">
<!-- 鍩虹淇℃伅 -->
<div slot="header" class="clearfix">
@@ -26,47 +27,9 @@
<el-form :model="form" ref="form" :rules="rules" label-width="120px">
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="鎹愮尞鑰呯紪鍙�" prop="donorno">
- <el-input
- v-model="form.donorno"
- :readonly="!isEdit"
- placeholder="鑷姩鐢熸垚鎹愮尞鑰呯紪鍙�"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
- <el-input v-model="form.name" :readonly="!isEdit" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鎬у埆" prop="sex">
- <el-select
- v-model="form.sex"
- :disabled="!isEdit"
- style="width: 100%"
- >
- <el-option label="鐢�" value="1" />
- <el-option label="濂�" value="2" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="骞撮緞" prop="age">
- <el-input v-model="form.age" :readonly="!isEdit" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="鐤剧梾璇婃柇" prop="diagnosisname">
- <el-input v-model="form.diagnosisname" :readonly="!isEdit" />
- </el-form-item>
- </el-col>
- <el-col :span="8">
<el-form-item label="姝讳骸鍘熷洜" prop="deathreason">
- <el-select
+ <el-input v-model="form.deathreason" :readonly="!isEdit" />
+ <!-- <el-select
v-model="form.deathreason"
:disabled="!isEdit"
style="width: 100%"
@@ -74,9 +37,24 @@
<el-option label="鑴戞浜�" value="brain_death" />
<el-option label="蹇冩浜�" value="heart_death" />
<el-option label="鍏朵粬" value="other" />
- </el-select>
+ </el-select> -->
</el-form-item>
</el-col>
+ <el-col :span="8">
+ <el-form-item label="璐熻矗浜�" prop="responsibleusername">
+ <el-input
+ v-model="form.responsibleusername"
+ :readonly="!isEdit"
+ />
+ </el-form-item>
+ </el-col>
+ <!-- <el-col :span="8">
+ <el-form-item label="璁板綍鐘舵��" prop="recordstate">
+ <el-tag :type="getStatusTag(form.recordstate)">
+ {{ getStatusText(form.recordstate) }}
+ </el-tag>
+ </el-form-item>
+ </el-col> -->
</el-row>
<el-row :gutter="20">
@@ -122,7 +100,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
- <el-form-item label="鏄惁鎭㈠閬椾綋浠" prop="isrestoreremains">
+ <el-form-item label="鎭㈠閬椾綋浠" prop="isrestoreremains">
<el-select
v-model="form.isrestoreremains"
:disabled="!isEdit"
@@ -135,29 +113,11 @@
</el-col>
</el-row>
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="璐熻矗浜�" prop="responsibleusername">
- <el-input
- v-model="form.responsibleusername"
- :readonly="!isEdit"
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="璁板綍鐘舵��" prop="recordstate">
- <el-tag :type="getStatusTag(form.recordstate)">
- {{ getStatusText(form.recordstate) }}
- </el-tag>
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-form-item label="姝讳骸鍒ゅ畾璇存槑" prop="judgmentDescription">
+ <el-form-item label="姝讳骸鍒ゅ畾璇存槑" prop="remark">
<el-input
type="textarea"
:rows="3"
- v-model="form.judgmentDescription"
+ v-model="form.remark"
:readonly="!isEdit"
placeholder="璇︾粏璁板綍姝讳骸鍒ゅ畾杩囩▼鍜屼緷鎹�"
/>
@@ -337,17 +297,27 @@
</template>
<script>
-import { deathinfoedit, deathinfoInfo } from "@/api/businessApi";
+import {
+ deathinfoedit,
+ deathinfoadd,
+ queryDathInfoBaseInfo
+} from "@/api/businessApi";
import { getToken } from "@/utils/auth";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
export default {
name: "DeathJudgmentDetail",
+ components: { CaseBasicInfo },
+
data() {
return {
+ caseId: null,
// 鏄惁缂栬緫妯″紡
isEdit: false,
// 淇濆瓨鍔犺浇鐘舵��
saveLoading: false,
+ infoid: undefined,
+
// 琛ㄥ崟鏁版嵁
form: {
id: undefined,
@@ -365,7 +335,7 @@
gainhospitalname: "",
isspendremember: 0,
isrestoreremains: 0,
- rememberannex: "",
+ rememberAnnex: "",
responsibleuserid: "",
responsibleusername: "",
recordstate: "0",
@@ -421,13 +391,17 @@
}
},
created() {
+ this.infoid = this.$route.query.infoid;
+ this.caseId = this.infoid;
const id = this.$route.query.id;
this.isEdit = this.$route.query.isEdit;
- if (id && !this.$route.path.includes("/add")) {
- this.getDetail(id);
- } else if (this.$route.path.includes("/add")) {
- this.generateDonorNo();
- }
+ this.getDetail(this.infoid);
+
+ // if (id && !this.$route.path.includes("/add")) {
+ // this.getDetail(id);
+ // } else if (this.$route.path.includes("/add")) {
+ // this.generateDonorNo();
+ // }
this.getAttachmentList();
},
methods: {
@@ -437,13 +411,13 @@
this.form.donorno = "DONOR" + timestamp.slice(-8);
},
// 鑾峰彇璇︽儏
- async getDetail(id) {
+ async getDetail(infoid) {
try {
- const response = await deathinfoInfo(id);
+ const response = await queryDathInfoBaseInfo({ infoid });
let realData = {};
if (response && response.data) {
- realData = response.data;
+ realData = response.data[0];
} else if (response) {
realData = response;
}
@@ -462,8 +436,8 @@
};
// 瑙f瀽闄勪欢淇℃伅
- if (realData.rememberannex) {
- this.parseAttachmentData(realData.rememberannex);
+ if (realData.rememberAnnex) {
+ this.parseAttachmentData(realData.rememberAnnex);
}
} catch (error) {
console.error("鑾峰彇姝讳骸鍒ゅ畾璇︽儏澶辫触:", error);
@@ -614,7 +588,7 @@
}
// 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
- this.form.rememberannex = this.buildAttachmentJson();
+ this.form.rememberAnnex = this.buildAttachmentJson();
this.$message.success("鏂囦欢涓婁紶鎴愬姛");
this.uploadDialogVisible = false;
@@ -650,7 +624,7 @@
// }
// // 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
- // this.form.rememberannex = this.buildAttachmentJson();
+ // this.form.rememberAnnex = this.buildAttachmentJson();
// this.$message.success("鏂囦欢涓婁紶鎴愬姛");
// this.uploadDialogVisible = false;
@@ -676,7 +650,7 @@
if (index !== -1) {
this.attachmentList.splice(index, 1);
// 鏇存柊闄勪欢JSON鏁版嵁鍒拌〃鍗�
- this.form.rememberannex = this.buildAttachmentJson();
+ this.form.rememberAnnex = this.buildAttachmentJson();
this.$message.success("璇勪及琛ㄥ垹闄ゆ垚鍔�");
}
})
@@ -721,16 +695,25 @@
// 鏋勫缓鎻愪氦鏁版嵁
const submitData = {
...this.form,
+ infoid: this.infoid,
// 纭繚闄勪欢鏁版嵁鏈�鏂�
rememberannex: this.buildAttachmentJson()
};
+ let response = null;
- const response = await deathinfoedit(submitData);
+ if (submitData.id) {
+ response = await deathinfoedit(submitData);
+ } else {
+ response = await deathinfoadd(submitData);
+ }
+ // const response = await deathinfoedit(submitData);
if (response.code === 200) {
this.$message.success("淇濆瓨鎴愬姛");
this.isEdit = false;
-
+ if (!this.form.id) {
+ this.form.id = response.data;
+ }
if (this.$route.path.includes("/add")) {
this.$router.push("/case/deathJudgment");
}
diff --git a/src/views/business/decide/index.vue b/src/views/business/decide/index.vue
index 02e8add..1430372 100644
--- a/src/views/business/decide/index.vue
+++ b/src/views/business/decide/index.vue
@@ -62,7 +62,7 @@
<el-card class="tool-card">
<el-row :gutter="10">
<el-col :span="16">
- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
+ <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>鏂板缓姝讳骸鍒ゅ畾</el-button
>
<el-button
@@ -71,7 +71,7 @@
:disabled="single"
@click="handleUpdate"
>淇敼</el-button
- >
+ > -->
<el-button
type="warning"
icon="el-icon-download"
@@ -439,7 +439,7 @@
handleView(row) {
this.$router.push({
path: "/case/DecideInfo",
- query: { id: row.id }
+ query: { id: row.id,infoid:row.infoid }
});
},
@@ -453,7 +453,7 @@
const id = row.id || this.ids[0];
this.$router.push({
path: "/case/DecideInfo",
- query: { id: id, isEdit: true }
+ query: { id: id,infoid:row.infoid, isEdit: true }
});
},
diff --git a/src/views/business/ethicalReview/ethicalReviewInfo copy.vue b/src/views/business/ethicalReview/ethicalReviewInfo copy.vue
new file mode 100644
index 0000000..d5828de
--- /dev/null
+++ b/src/views/business/ethicalReview/ethicalReviewInfo copy.vue
@@ -0,0 +1,1536 @@
+<template>
+ <div class="ethics-review-detail">
+ <el-card class="detail-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="warning"
+ @click="handleEndReview"
+ :disabled="form.ethicsConclusion === 'terminated'"
+ >
+ 缁撴潫瀹℃煡
+ </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="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-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>
+ </el-col>
+ </el-row>
+
+ <el-row :gutter="20">
+ <el-col :span="24">
+ <el-form-item label="浼︾悊鎰忚" prop="ethicsOpinion">
+ <el-input
+ type="textarea"
+ :rows="3"
+ v-model="form.ethicsOpinion"
+ 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-form>
+ </el-card>
+ <!-- 闄勪欢涓婁紶 -->
+ <el-card class="attachment-card">
+ <div slot="header" class="clearfix">
+ <span class="detail-title">鐩稿叧闄勪欢</span>
+ <el-button type="primary" size="mini" @click="handleUploadAttachment">
+ 涓婁紶闄勪欢
+ </el-button>
+ </div>
+
+ <el-table :data="attachments" style="width: 100%">
+ <el-table-column label="鏂囦欢鍚嶇О" min-width="200">
+ <template slot-scope="scope">
+ <div class="file-info">
+ <i
+ class="el-icon-document"
+ style="margin-right: 8px; color: #409EFF;"
+ ></i>
+ <span>{{ scope.row.fileName }}</span>
+ </div>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鏂囦欢绫诲瀷" width="100" align="center">
+ <template slot-scope="scope">
+ <el-tag size="small">{{ getFileType(scope.row.fileName) }}</el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鏂囦欢澶у皬" width="100" align="center">
+ <template slot-scope="scope">
+ <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="涓婁紶鏃堕棿" width="160" align="center">
+ <template slot-scope="scope">
+ <span>{{ parseTime(scope.row.uploadTime) }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="涓婁紶浜�" width="100" align="center">
+ <template slot-scope="scope">
+ <span>{{ scope.row.uploader }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鎿嶄綔" width="120" align="center">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-view"
+ @click="handlePreviewAttachment(scope.row)"
+ >棰勮</el-button
+ >
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-download"
+ @click="handleDownloadAttachment(scope.row)"
+ >涓嬭浇</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+ <!-- 涓撳瀹℃煡鎯呭喌 -->
+ <el-card class="expert-card">
+ <div slot="header" class="clearfix">
+ <span class="detail-title">涓撳瀹℃煡鎯呭喌 (18浣嶄笓瀹� + 1浣嶄富濮斾笓瀹�)</span>
+ <div style="float: right;">
+ <el-button
+ size="mini"
+ type="primary"
+ @click="handleSendToNormalExperts"
+ :disabled="!canSendToNormalExperts"
+ >
+ 鍙戦�佷笓瀹�
+ </el-button>
+ <el-button
+ size="mini"
+ type="success"
+ @click="handleSendToChiefExpert"
+ :disabled="!canSendToChiefExpert"
+ >
+ 鍙戦�佷富濮斾笓瀹�
+ </el-button>
+ <el-button
+ size="mini"
+ type="warning"
+ @click="handleBatchSend"
+ :disabled="!canBatchSend"
+ >
+ 鎵归噺鍙戦��
+ </el-button>
+ </div>
+ </div>
+ <!-- 涓撳缁熻淇℃伅 -->
+ <div
+ class="expert-stats"
+ style="margin-top: 20px; padding: 15px; background: #f5f7fa; border-radius: 4px;"
+ >
+ <el-row :gutter="20">
+ <el-col :span="6">
+ <div class="stat-item">
+ <span class="stat-label">涓撳宸插悓鎰�:</span>
+ <span class="stat-value">{{ approvedNormalExperts }}/18</span>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <span class="stat-label">涓诲涓撳鐘舵��:</span>
+ <span class="stat-value">{{ chiefExpertStatus }}</span>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <span class="stat-label">鎬诲畬鎴愯繘搴�:</span>
+ <span class="stat-value">{{ completionRate }}%</span>
+ </div>
+ </el-col>
+ <el-col :span="6">
+ <div class="stat-item">
+ <span class="stat-label">瀹℃煡缁撴灉:</span>
+ <span class="stat-value">
+ <el-tag :type="overallConclusionFilter">
+ {{ overallConclusionText }}
+ </el-tag>
+ </span>
+ </div>
+ </el-col>
+ </el-row>
+ </div>
+ <!-- 涓撳瀹℃煡琛ㄦ牸 -->
+ <el-table
+ :data="expertReviews"
+ v-loading="expertLoading"
+ style="width: 100%"
+ heiht="800"
+ :row-class-name="getExpertRowClassName"
+ >
+ <el-table-column label="搴忓彿" width="60" align="center" type="index" />
+
+ <el-table-column
+ label="涓撳濮撳悕"
+ width="120"
+ align="center"
+ fixed="left"
+ >
+ <template slot-scope="scope">
+ <span>{{ scope.row.expertName }}</span>
+ <el-tag
+ v-if="scope.row.isChief"
+ size="mini"
+ type="danger"
+ style="margin-left: 5px;"
+ >涓诲</el-tag
+ >
+ </template>
+ </el-table-column>
+
+ <el-table-column label="涓撳绫诲瀷" width="100" align="center">
+ <template slot-scope="scope">
+ <span :class="scope.row.isChief ? 'chief-expert' : 'normal-expert'">
+ {{ scope.row.isChief ? "涓诲涓撳" : "涓撳" }}
+ </span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="瀹℃煡鐘舵��" width="100" align="center">
+ <template slot-scope="scope">
+ <el-tag :type="statusFilter(scope.row.reviewStatus)" size="small">
+ {{ statusTextFilter(scope.row.reviewStatus) }}
+ </el-tag>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="涓撳缁撹" width="120" align="center">
+ <template slot-scope="scope">
+ <el-tag
+ v-if="scope.row.expertConclusion"
+ :type="conclusionFilter(scope.row.expertConclusion)"
+ size="small"
+ >
+ {{ conclusionTextFilter(scope.row.expertConclusion) }}
+ </el-tag>
+ <span v-else class="no-data">-</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="瀹℃煡鎰忚" min-width="200" show-overflow-tooltip>
+ <template slot-scope="scope">
+ <span :class="{ 'expert-opinion': scope.row.expertOpinion }">
+ {{ scope.row.expertOpinion || "鏆傛棤鎰忚" }}
+ </span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="瀹℃煡鏃堕棿" width="160" align="center">
+ <template slot-scope="scope">
+ <span>{{
+ scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈鏌�"
+ }}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍙戦�佹椂闂�" width="160" align="center">
+ <template slot-scope="scope">
+ <span>{{
+ scope.row.reviewTime ? parseTime(scope.row.reviewTime) : "鏈彂閫�"
+ }}</span>
+ </template>
+ </el-table-column>
+
+ <el-table-column label="鎿嶄綔" width="280" align="center" fixed="right">
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-s-promotion"
+ @click="handleSendToExpert(scope.row)"
+ :disabled="scope.row.reviewStatus === 'submitted'"
+ :class="{ 'sent-button': scope.row.reviewStatus === 'submitted' }"
+ >
+ {{ scope.row.reviewStatus === "submitted" ? "宸插彂閫�" : "鍙戦��" }}
+ </el-button>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleEditExpertReview(scope.row)"
+ :disabled="scope.row.reviewStatus !== 'submitted'"
+ >
+ 缂栬緫
+ </el-button>
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-view"
+ @click="handleViewExpertReview(scope.row)"
+ >
+ 璇︽儏
+ </el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+
+ <!-- 鍙戦�佷笓瀹跺璇濇 -->
+ <el-dialog
+ title="鍙戦�佷笓瀹跺鏌�"
+ :visible.sync="sendDialogVisible"
+ width="500px"
+ >
+ <el-form :model="sendForm" ref="sendForm" label-width="100px">
+ <el-form-item label="涓撳绫诲瀷" prop="expertType">
+ <el-radio-group v-model="sendForm.expertType">
+ <el-radio label="normal">涓撳</el-radio>
+ <el-radio label="chief">涓诲涓撳</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item
+ label="閫夋嫨涓撳"
+ prop="expertIds"
+ v-if="sendForm.expertType === 'normal'"
+ >
+ <el-select
+ v-model="sendForm.expertIds"
+ multiple
+ placeholder="璇烽�夋嫨涓撳"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="expert in availableExperts"
+ :key="expert.id"
+ :label="expert.name"
+ :value="expert.id"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍙戦�佸唴瀹�" prop="content">
+ <el-input
+ type="textarea"
+ :rows="4"
+ v-model="sendForm.content"
+ placeholder="璇疯緭鍏ュ彂閫佺粰涓撳鐨勫鏌ュ唴瀹硅鏄�"
+ />
+ </el-form-item>
+ </el-form>
+ <div slot="footer">
+ <el-button @click="sendDialogVisible = false">鍙栨秷</el-button>
+ <el-button type="primary" @click="handleSendConfirm"
+ >纭鍙戦��</el-button
+ >
+ </div>
+ </el-dialog>
+ </div>
+</template>
+<script>
+import {
+ getEthicsReviewDetail,
+ updateEthicsReview,
+ sendExpertReview,
+ endEthicsReview,
+ uploadAttachment,
+ deleteAttachment,
+ getAttachments
+} from "./ethicsReview";
+import {
+ reviewinitiateBaseInfoList,
+ ethicalreviewedit,
+ ethicalreviewadd
+} from "@/api/businessApi";
+
+export default {
+ name: "EthicsReviewDetail",
+ data() {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: undefined,
+ hospitalNo: "",
+ donorName: "",
+ gender: "",
+ age: "",
+ diagnosis: "",
+ ethicsConclusion: "reviewing",
+ ethicsOpinion: "",
+ reviewTime: "",
+ registrant: "",
+ registrationTime: new Date()
+ .toISOString()
+ .replace("T", " ")
+ .substring(0, 19)
+ },
+ // 琛ㄥ崟楠岃瘉瑙勫垯
+ rules: {
+ donorName: [
+ { required: true, message: "鎹愮尞鑰呭鍚嶄笉鑳戒负绌�", trigger: "blur" }
+ ],
+ ethicsConclusion: [
+ { required: true, message: "浼︾悊缁撹涓嶈兘涓虹┖", trigger: "change" }
+ ],
+ reviewTime: [
+ { required: true, message: "瀹℃煡鏃堕棿涓嶈兘涓虹┖", trigger: "change" }
+ ]
+ },
+ // 淇濆瓨鍔犺浇鐘舵��
+ saveLoading: false,
+
+ // 闄勪欢鏁版嵁
+ attachments: [],
+ expertReviews: [
+ // 涓撳锛�18浣嶏級- 鍒濆鐘舵�佷负鐢宠涓�
+ {
+ id: 1,
+ expertName: "闄舵槉",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 2,
+ expertName: "鍒樻枌",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 3,
+ expertName: "浜庢捣鍒� ",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 4,
+ expertName: "鐜嬬孩姊�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 5,
+ expertName: "鐜嬫槬鍏�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 6,
+ expertName: "鐜嬮潤",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 7,
+ expertName: "杈规枃瓒�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 8,
+ expertName: "闂織鍕�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 9,
+ expertName: "璁稿嚖",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 10,
+ expertName: "璁镐紶灞�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 11,
+ expertName: "寮犵孩宀�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 12,
+ expertName: "鏉ㄨ嫃姘�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 13,
+ expertName: "瀹嬬帀寮�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 14,
+ expertName: "鍛ㄤ紶鍒�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 15,
+ expertName: "鑽嗗嚒娉�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 16,
+ expertName: "鐭枃鎹�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 17,
+ expertName: "钁i渿",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ {
+ id: 18,
+ expertName: "钄¢噾璐�",
+ isChief: false,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ },
+ // 涓诲涓撳锛�1浣嶏級
+ {
+ id: 19,
+ expertName: "瀛斿績娑�",
+ isChief: true,
+ reviewStatus: "applying",
+ expertConclusion: "",
+ expertOpinion: "",
+ reviewTime: ""
+ }
+ ],
+ expertLoading: false,
+ attachmentLoading: false,
+ // 鍙戦�佸璇濇
+ sendDialogVisible: false,
+ sendForm: {
+ expertType: "normal",
+ expertIds: [],
+ content: ""
+ },
+ // 涓婁紶鐩稿叧
+ uploadDialogVisible: false,
+ uploadLoading: false,
+ tempFileList: [],
+ // 鍙敤涓撳鍒楄〃
+ availableExperts: [
+ { id: 1, name: "寮犳暀鎺�", type: "normal" },
+ { id: 2, name: "鏉庢暀鎺�", type: "normal" },
+ { id: 3, name: "鐜嬫暀鎺�", type: "normal" },
+ { id: 4, name: "璧典富濮�", type: "chief" }
+ ]
+ };
+ },
+ computed: {
+ // 璁$畻灞炴�э細涓撳鍚屾剰鏁伴噺
+ approvedNormalExperts() {
+ return this.expertReviews.filter(
+ expert => !expert.isChief && expert.expertConclusion === "approved"
+ ).length;
+ },
+ // 璁$畻灞炴�э細涓诲涓撳鐘舵��
+ chiefExpertStatus() {
+ const chiefExpert = this.expertReviews.find(expert => expert.isChief);
+ return chiefExpert
+ ? this.statusTextFilter(chiefExpert.reviewStatus)
+ : "鏈垎閰�";
+ },
+ // 璁$畻灞炴�э細瀹屾垚杩涘害
+ completionRate() {
+ const totalExperts = this.expertReviews.length;
+ const completedExperts = this.expertReviews.filter(
+ expert => expert.reviewStatus === "submitted"
+ ).length;
+ return totalExperts > 0
+ ? Math.round((completedExperts / totalExperts) * 100)
+ : 0;
+ },
+ // 璁$畻灞炴�э細鎬讳綋缁撹
+ overallConclusionText() {
+ if (this.approvedNormalExperts >= 12) {
+ return "閫氳繃";
+ } else if (this.approvedNormalExperts >= 9) {
+ return "淇敼鍚庨�氳繃";
+ } else {
+ return "涓嶉�氳繃";
+ }
+ },
+ overallConclusionFilter() {
+ if (this.approvedNormalExperts >= 12) {
+ return "success";
+ } else if (this.approvedNormalExperts >= 9) {
+ return "warning";
+ } else {
+ return "danger";
+ }
+ },
+ // 鏄惁鍙互鍙戦�佺粰涓撳
+ canSendToNormalExperts() {
+ return (
+ this.expertReviews.filter(
+ expert => !expert.isChief && expert.reviewStatus === "applying"
+ ).length > 0
+ );
+ },
+ // 鏄惁鍙互鍙戦�佺粰涓诲涓撳锛堥渶瑕佽嚦灏�12涓笓瀹跺悓鎰忥級
+ canSendToChiefExpert() {
+ return (
+ this.approvedNormalExperts >= 12 &&
+ this.expertReviews.filter(
+ expert => expert.isChief && expert.reviewStatus === "applying"
+ ).length > 0
+ );
+ },
+ // 鏄惁鍙互鎵归噺鍙戦��
+ canBatchSend() {
+ return (
+ this.expertReviews.filter(expert => expert.reviewStatus === "applying")
+ .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 || "褰撳墠鐢ㄦ埛";
+ }
+ },
+ methods: {
+ // 鐢熸垚浣忛櫌鍙�
+ generateHospitalNo() {
+ const timestamp = Date.now().toString();
+ this.form.hospitalNo = "D" + timestamp.slice(-6);
+ },
+ 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;
+ }
+ })
+ .catch(error => {
+ console.error("鑾峰彇浼︾悊瀹℃煡璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ });
+ },
+
+ // 鑾峰彇涓撳瀹℃煡鍒楄〃
+ getExpertReviews(ethicsReviewId) {
+ 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);
+ },
+
+ // 鑾峰彇闄勪欢鍒楄〃
+ 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;
+ });
+ },
+
+ // 鐘舵�佽繃婊ゅ櫒
+ statusFilter(status) {
+ const statusMap = {
+ applying: "info",
+ submitted: "success"
+ };
+ return statusMap[status] || "info";
+ },
+
+ statusTextFilter(status) {
+ const statusMap = {
+ applying: "鐢宠涓�",
+ submitted: "宸叉彁浜�"
+ };
+ return statusMap[status] || "鏈煡";
+ },
+
+ // 缁撹杩囨护鍣�
+ conclusionFilter(conclusion) {
+ const conclusionMap = {
+ approved: "success",
+ approved_with_modifications: "warning",
+ disapproved: "danger"
+ };
+ return conclusionMap[conclusion] || "info";
+ },
+
+ conclusionTextFilter(conclusion) {
+ const conclusionMap = {
+ approved: "鍚屾剰",
+ approved_with_modifications: "淇敼鍚庡悓鎰�",
+ disapproved: "涓嶅悓鎰�"
+ };
+ return conclusionMap[conclusion] || "鏈煡";
+ },
+
+ // 淇濆瓨淇℃伅
+ handleSave() {
+ this.$refs.form.validate(valid => {
+ if (valid) {
+ this.saveLoading = true;
+ const apiMethod = this.form.id ? updateEthicsReview : addEthicsReview;
+
+ 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 }
+ });
+ }
+ }
+ })
+ .catch(error => {
+ console.error("淇濆瓨澶辫触:", error);
+ this.$message.error("淇濆瓨澶辫触");
+ })
+ .finally(() => {
+ this.saveLoading = false;
+ });
+ }
+ });
+ },
+
+ // 鍙戦�佷笓瀹跺鏌�
+ handleSendToExperts() {
+ this.sendDialogVisible = true;
+ },
+
+ // 鍙戦�佺粰涓撳
+ handleSendToNormalExperts() {
+ const normalExperts = this.expertReviews.filter(
+ expert => !expert.isChief && expert.reviewStatus === "applying"
+ );
+ this.sendForm.expertIds = normalExperts.map(expert => expert.id);
+ this.sendForm.expertType = "normal";
+ this.sendDialogVisible = true;
+ },
+
+ // 鍙戦�佺粰涓诲涓撳
+ handleSendToChiefExpert() {
+ const chiefExpert = this.expertReviews.find(
+ expert => expert.isChief && expert.reviewStatus === "applying"
+ );
+ if (chiefExpert) {
+ this.sendForm.expertIds = [chiefExpert.id];
+ this.sendForm.expertType = "chief";
+ this.sendDialogVisible = true;
+ }
+ },
+
+ // 鎵归噺鍙戦��
+ handleBatchSend() {
+ const applyingExperts = this.expertReviews.filter(
+ expert => expert.reviewStatus === "applying"
+ );
+ this.sendForm.expertIds = applyingExperts.map(expert => expert.id);
+ this.sendForm.expertType = "batch";
+ this.sendDialogVisible = true;
+ },
+
+ // 鍙戦�佺粰鍗曚釜涓撳
+ handleSendToExpert(expert) {
+ this.sendForm.expertIds = [expert.id];
+ this.sendForm.expertType = expert.isChief ? "chief" : "normal";
+ this.sendDialogVisible = true;
+ },
+
+ // 纭鍙戦��
+ handleSendConfirm() {
+ if (this.sendForm.expertIds.length === 0) {
+ this.$message.warning("璇烽�夋嫨瑕佸彂閫佺殑涓撳");
+ 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("鍙戦�佸け璐�");
+ });
+ },
+
+ // 缁撴潫瀹℃煡
+ handleEndReview() {
+ this.$confirm(
+ "纭畾瑕佺粨鏉熸湰娆′鸡鐞嗗鏌ュ悧锛熺粨鏉熷悗灏嗘棤娉曚慨鏀逛笓瀹跺鏌ョ粨鏋溿��",
+ "鎻愮ず",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ )
+ .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(() => {});
+ },
+
+ // 缂栬緫涓撳瀹℃煡
+ handleEditExpertReview(expert) {
+ this.$prompt("璇疯緭鍏ュ鏌ユ剰瑙�", "缂栬緫涓撳瀹℃煡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ inputValue: expert.expertOpinion || "",
+ inputValidator: value => {
+ if (!value || value.trim() === "") {
+ return "瀹℃煡鎰忚涓嶈兘涓虹┖";
+ }
+ return true;
+ }
+ })
+ .then(({ value }) => {
+ // 妯℃嫙鏇存柊涓撳瀹℃煡
+ const index = this.expertReviews.findIndex(e => e.id === expert.id);
+ if (index !== -1) {
+ this.expertReviews[index].expertOpinion = value;
+ this.$message.success("瀹℃煡鎰忚宸叉洿鏂�");
+ }
+ })
+ .catch(() => {});
+ },
+
+ // 鏌ョ湅涓撳瀹℃煡璇︽儏
+ handleViewExpertReview(expert) {
+ this.$alert(
+ `
+ <div>
+ <p><strong>涓撳濮撳悕锛�</strong>${expert.expertName}</p>
+ <p><strong>涓撳绫诲瀷锛�</strong>${
+ expert.isChief ? "涓诲涓撳" : "涓撳"
+ }</p>
+ <p><strong>瀹℃煡鐘舵�侊細</strong>${this.statusTextFilter(
+ expert.reviewStatus
+ )}</p>
+ <p><strong>涓撳缁撹锛�</strong>${
+ expert.expertConclusion
+ ? this.conclusionTextFilter(expert.expertConclusion)
+ : "鏈彁浜�"
+ }</p>
+ <p><strong>瀹℃煡鎰忚锛�</strong>${expert.expertOpinion || "鏃�"}</p>
+ <p><strong>瀹℃煡鏃堕棿锛�</strong>${expert.reviewTime || "鏈鏌�"}</p>
+ </div>
+ `,
+ "涓撳瀹℃煡璇︽儏",
+ {
+ dangerouslyUseHTMLString: true,
+ customClass: "expert-review-detail-dialog"
+ }
+ );
+ },
+
+ // 涓婁紶闄勪欢
+ handleUploadAttachment() {
+ this.uploadDialogVisible = true;
+ },
+
+ // 涓婁紶鍓嶆牎楠�
+ beforeUpload(file) {
+ const allowedTypes = [
+ "application/pdf",
+ "image/jpeg",
+ "image/png",
+ "application/msword",
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ "application/vnd.ms-excel",
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
+ ];
+
+ const maxSize = 10 * 1024 * 1024;
+
+ const isTypeOk =
+ allowedTypes.includes(file.type) ||
+ file.name.endsWith(".pdf") ||
+ file.name.endsWith(".jpg") ||
+ file.name.endsWith(".jpeg") ||
+ file.name.endsWith(".png") ||
+ file.name.endsWith(".doc") ||
+ file.name.endsWith(".docx") ||
+ file.name.endsWith(".xls") ||
+ file.name.endsWith(".xlsx");
+
+ if (!isTypeOk) {
+ this.$message.error("鏂囦欢鏍煎紡涓嶆敮鎸�");
+ return false;
+ }
+
+ if (file.size > maxSize) {
+ this.$message.error("鏂囦欢澶у皬涓嶈兘瓒呰繃10MB");
+ return false;
+ }
+
+ return true;
+ },
+
+ // 鏂囦欢閫夋嫨鍙樺寲
+ handleFileChange(file, fileList) {
+ this.tempFileList = fileList;
+ },
+
+ // 鎻愪氦涓婁紶
+ submitUpload() {
+ if (this.tempFileList.length === 0) {
+ this.$message.warning("璇峰厛閫夋嫨瑕佷笂浼犵殑鏂囦欢");
+ return;
+ }
+
+ 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;
+ });
+ },
+
+ // 棰勮闄勪欢
+ handlePreviewAttachment(attachment) {
+ if (attachment.fileName.endsWith(".pdf")) {
+ window.open(attachment.fileUrl, "_blank");
+ } else if (attachment.fileName.match(/\.(jpg|jpeg|png)$/i)) {
+ this.$alert(
+ `<img src="${attachment.fileUrl}" style="max-width: 100%;" alt="${attachment.fileName}">`,
+ "鍥剧墖棰勮",
+ {
+ dangerouslyUseHTMLString: true,
+ customClass: "image-preview-dialog"
+ }
+ );
+ } else {
+ this.$message.info("璇ユ枃浠剁被鍨嬫殏涓嶆敮鎸佸湪绾块瑙堬紝璇蜂笅杞藉悗鏌ョ湅");
+ }
+ },
+
+ // 涓嬭浇闄勪欢
+ handleDownloadAttachment(attachment) {
+ const link = document.createElement("a");
+ link.href = attachment.fileUrl;
+ 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(() => {});
+ },
+
+ // 鑾峰彇鏂囦欢绫诲瀷
+ getFileType(fileName) {
+ const ext = fileName
+ .split(".")
+ .pop()
+ .toLowerCase();
+ const typeMap = {
+ pdf: "PDF",
+ doc: "DOC",
+ docx: "DOCX",
+ xls: "XLS",
+ xlsx: "XLSX",
+ jpg: "JPG",
+ jpeg: "JPEG",
+ png: "PNG"
+ };
+ return typeMap[ext] || ext.toUpperCase();
+ },
+
+ // 鏂囦欢澶у皬鏍煎紡鍖�
+ formatFileSize(size) {
+ if (size === 0) return "0 B";
+ const k = 1024;
+ const sizes = ["B", "KB", "MB", "GB"];
+ const i = Math.floor(Math.log(size) / Math.log(k));
+ return parseFloat((size / Math.pow(k, i)).toFixed(2)) + " " + sizes[i];
+ },
+
+ // 鏃堕棿鏍煎紡鍖�
+ parseTime(time) {
+ if (!time) return "";
+ const date = new Date(time);
+ return `${date.getFullYear()}-${(date.getMonth() + 1)
+ .toString()
+ .padStart(2, "0")}-${date
+ .getDate()
+ .toString()
+ .padStart(2, "0")} ${date
+ .getHours()
+ .toString()
+ .padStart(2, "0")}:${date
+ .getMinutes()
+ .toString()
+ .padStart(2, "0")}`;
+ }
+ }
+};
+</script>
+<style scoped>
+.ethics-review-detail {
+ padding: 20px;
+ background-color: #f5f7fa;
+}
+
+.detail-card {
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.expert-card {
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.attachment-card {
+ margin-bottom: 20px;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+}
+
+.detail-title {
+ font-size: 18px;
+ font-weight: 600;
+ color: #303133;
+}
+
+.expert-stats {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: rgb(43, 181, 245);
+ border-radius: 8px;
+ margin-bottom: 20px;
+}
+
+.stat-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 10px;
+}
+
+.stat-label {
+ font-size: 12px;
+ opacity: 0.9;
+ margin-bottom: 5px;
+}
+
+.stat-value {
+ font-size: 18px;
+ 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;
+}
+
+.empty-attachment {
+ text-align: center;
+ padding: 40px 0;
+ 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;
+ font-weight: 500;
+}
+
+.chief-expert {
+ color: #f56c6c;
+ font-weight: 600;
+}
+
+/* 涓撳琛屾牱寮� */
+:deep(.normal-expert-row) {
+ background-color: #fafafa;
+}
+
+:deep(.chief-expert-row) {
+ background-color: #fff7e6;
+}
+
+:deep(.normal-expert-row:hover) {
+ background-color: #f0f7ff;
+}
+
+:deep(.chief-expert-row:hover) {
+ background-color: #ffecc2;
+}
+
+/* 鏃犳暟鎹牱寮� */
+.no-data {
+ color: #909399;
+ font-style: italic;
+}
+
+/* 涓撳鎰忚鏍峰紡 */
+.expert-opinion {
+ color: #303133;
+ line-height: 1.5;
+}
+
+/* 宸插彂閫佹寜閽牱寮� */
+.sent-button {
+ 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;
+}
+
+: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;
+}
+</style>
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>
diff --git a/src/views/business/ethicalReview/index.vue b/src/views/business/ethicalReview/index.vue
index e0cb1be..73029df 100644
--- a/src/views/business/ethicalReview/index.vue
+++ b/src/views/business/ethicalReview/index.vue
@@ -75,16 +75,16 @@
<el-card class="tool-card">
<el-row :gutter="10">
<el-col :span="16">
- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
+ <!-- <el-button type="primary" icon="el-icon-plus" @click="handleCreate"
>鏂板缓瀹℃煡</el-button
- >
- <el-button
+ > -->
+ <!-- <el-button
type="success"
icon="el-icon-edit"
:disabled="single"
@click="handleUpdate"
>淇敼</el-button
- >
+ > -->
<el-button
type="warning"
icon="el-icon-download"
@@ -361,7 +361,7 @@
handleView(row) {
this.$router.push({
path: "/case/ethicalReviewInfo",
- query: { id: row.infoid }
+ query: { infoid: row.infoid }
});
},
// 鏂板鎸夐挳鎿嶄綔
@@ -370,10 +370,10 @@
},
// 淇敼鎸夐挳鎿嶄綔
handleUpdate(row) {
- const id = row.infoid || this.ids[0];
+ const infoid = row.infoid;
this.$router.push({
path: "/case/ethicalReviewInfo",
- query: { id: id }
+ query: { infoid: infoid }
});
},
// 缁撴潫瀹℃煡鎿嶄綔
diff --git a/src/views/business/maintain/index.vue b/src/views/business/maintain/index.vue
index 9ecc0eb..f433c90 100644
--- a/src/views/business/maintain/index.vue
+++ b/src/views/business/maintain/index.vue
@@ -115,7 +115,7 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
- label="浣忛櫌鍙�"
+ label="妗堜緥缂栧彿"
align="center"
prop="caseNo"
width="120"
@@ -191,28 +191,34 @@
prop="coordinatorName"
width="100"
/>
- <el-table-column
+ <!-- <el-table-column
label="缁存姢椤圭洰"
align="center"
prop="itemName"
width="120"
show-overflow-tooltip
- />
+ /> -->
<el-table-column
- label="缁存姢鏃堕棿"
+ label="鏈�鏂扮淮鎶ゆ椂闂�"
align="center"
- prop="itemTime"
+ prop="updateTime"
width="140"
>
<template slot-scope="scope">
<span>{{
- scope.row.itemTime
- ? parseTime(scope.row.itemTime, "{y}-{m}-{d} {h}:{i}")
+ scope.row.updateTime
+ ? parseTime(scope.row.updateTime)
: "-"
}}</span>
</template>
</el-table-column>
<el-table-column
+ label="缁存姢浜哄憳"
+ align="center"
+ prop="updateBy"
+ width="120"
+ />
+ <el-table-column
label="鎿嶄綔"
align="center"
width="120"
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index c530732..4e03dca 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -1,7 +1,8 @@
<template>
<div class="maintenance-detail">
+ <case-basic-info :case-id="caseId" :show-attachment="true" />
<!-- 鍩虹淇℃伅 -->
- <el-card class="detail-card">
+ <!-- <el-card class="detail-card">
<div slot="header" class="clearfix">
<span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
<el-button type="success" style="float: right;" @click="handleSave">
@@ -140,11 +141,11 @@
/>
</el-form-item>
</el-form>
- </el-card>
+ </el-card> -->
<el-card class="assessment-card">
<div slot="header" class="clearfix">
- <span class="detail-title">渚涜�呰瘎浼板悇椤硅褰�</span>
+ <span class="detail-title">璇勪及鍚勯」璁板綍</span>
<el-button
type="primary"
size="mini"
@@ -234,6 +235,82 @@
</el-table>
</el-card>
</el-tab-pane>
+ <el-tab-pane label="鎶ょ悊鏍告煡璁板綍" name="hlihc">
+ <el-card class="record-card">
+ <div slot="header" class="clearfix">
+ <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
+ <el-button
+ type="primary"
+ size="mini"
+ icon="el-icon-plus"
+ @click="handleAddRecord"
+ >
+ 鏂板鏍告煡璁板綍
+ </el-button>
+ </div>
+
+ <el-table :data="recordList" v-loading="recordLoading">
+ <el-table-column
+ label="鏍告煡鏃堕棿"
+ align="center"
+ prop="recordTime"
+ width="160"
+ />
+ <el-table-column
+ label="鏍告煡浜�"
+ align="center"
+ prop="recorder"
+ width="100"
+ />
+ <el-table-column
+ label="鏍告煡璁板綍"
+ align="center"
+ prop="checkRecord"
+ min-width="200"
+ show-overflow-tooltip
+ />
+ <el-table-column label="闄勪欢" align="center" width="120">
+ <template slot-scope="scope">
+ <el-button
+ v-if="
+ scope.row.attachments && scope.row.attachments.length > 0
+ "
+ size="mini"
+ type="text"
+ @click="handleViewRecordAttachments(scope.row)"
+ >
+ 鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
+ </el-button>
+ <span v-else>鏃犻檮浠�</span>
+ </template>
+ </el-table-column>
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ width="180"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-edit"
+ @click="handleEditRecord(scope.row)"
+ >缂栬緫</el-button
+ >
+ <el-button
+ size="mini"
+ type="text"
+ icon="el-icon-delete"
+ style="color: #F56C6C;"
+ @click="handleDeleteRecord(scope.row)"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-card>
+ </el-tab-pane>
<!-- 鑲濆姛鑳借偩鍔熻兘 -->
<el-tab-pane label="鑲濆姛鑳借偩鍔熻兘" name="liverKidney">
@@ -268,78 +345,6 @@
</el-card>
<!-- 鎶ょ悊鏍告煡璁板綍 -->
- <el-card class="record-card">
- <div slot="header" class="clearfix">
- <span class="detail-title">鎶ょ悊鏍告煡璁板綍</span>
- <el-button
- type="primary"
- size="mini"
- icon="el-icon-plus"
- @click="handleAddRecord"
- >
- 鏂板鏍告煡璁板綍
- </el-button>
- </div>
-
- <el-table :data="recordList" v-loading="recordLoading">
- <el-table-column
- label="鏍告煡鏃堕棿"
- align="center"
- prop="recordTime"
- width="160"
- />
- <el-table-column
- label="鏍告煡浜�"
- align="center"
- prop="recorder"
- width="100"
- />
- <el-table-column
- label="鏍告煡璁板綍"
- align="center"
- prop="checkRecord"
- min-width="200"
- show-overflow-tooltip
- />
- <el-table-column label="闄勪欢" align="center" width="120">
- <template slot-scope="scope">
- <el-button
- v-if="scope.row.attachments && scope.row.attachments.length > 0"
- size="mini"
- type="text"
- @click="handleViewRecordAttachments(scope.row)"
- >
- 鏌ョ湅闄勪欢({{ scope.row.attachments.length }})
- </el-button>
- <span v-else>鏃犻檮浠�</span>
- </template>
- </el-table-column>
- <el-table-column
- label="鎿嶄綔"
- align="center"
- width="180"
- class-name="small-padding fixed-width"
- >
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleEditRecord(scope.row)"
- >缂栬緫</el-button
- >
- <el-button
- size="mini"
- type="text"
- icon="el-icon-delete"
- style="color: #F56C6C;"
- @click="handleDeleteRecord(scope.row)"
- >鍒犻櫎</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-card>
<!-- 鍩瑰吇璁板綍缂栬緫瀵硅瘽妗� -->
<el-dialog
@@ -569,6 +574,8 @@
import LiverKidneyPanel from "@/components/MaintainComponents/LiverKidneyPanel.vue";
import BloodRoutinePanel from "@/components/MaintainComponents/BloodRoutinePanel.vue";
import UrineRoutinePanel from "@/components/MaintainComponents/UrineRoutinePanel.vue";
+import CaseBasicInfo from "@/components/CaseBasicInfo";
+import store from "@/store";
import dayjs from "dayjs";
export default {
@@ -579,7 +586,8 @@
FilePreviewDialog,
LiverKidneyPanel,
BloodRoutinePanel,
- UrineRoutinePanel
+ UrineRoutinePanel,
+ CaseBasicInfo
},
dicts: [
"sys_donornode",
@@ -592,7 +600,8 @@
data() {
return {
- isEdit: false,
+ caseId: null,
+ isEdit: true,
currentMaintenanceId: null,
isEditMode: false,
form: {
@@ -686,7 +695,8 @@
// 闄勪欢鐩稿叧閰嶇疆
attachmentLimit: 10,
- attachmentAccept: ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
+ attachmentAccept:
+ ".pdf,.jpg,.jpeg,.png,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt",
// 璇勪及鏁版嵁瀛樺偍
assessmentData: {
@@ -699,6 +709,8 @@
};
},
created() {
+ this.caseId = this.$route.query.infoid;
+
this.loadMaintenanceData();
},
watch: {
@@ -808,10 +820,13 @@
if (response.code === 200) {
this.$message.success("淇濆瓨鎴愬姛");
this.isEdit = false;
- this.donatebaseinfoEdit({
- id: this.$route.query.infoid,
- extracontent: JSON.stringify(this.extracontentinfo)
- });
+ if (!this.currentMaintenanceId) {
+ this.currentMaintenanceId = response.data;
+ }
+ // this.donatebaseinfoEdit({
+ // id: this.$route.query.infoid,
+ // extracontent: JSON.stringify(this.extracontentinfo)
+ // });
if (!this.isEditMode && response.data && response.data.id) {
this.currentMaintenanceId = response.data.id;
this.isEditMode = true;
@@ -853,14 +868,16 @@
handleEditCulture(row) {
this.cultureDialogTitle = "缂栬緫鍩瑰吇璁板綍";
this.cultureForm = { ...row };
- this.cultureFileList = row.attachments ? row.attachments.map(item => ({
- uid: item.id || Math.random(),
- name: item.fileName,
- fileSize: item.fileSize,
- url: item.path || item.fileUrl,
- uploadTime: item.uploadTime,
- status: "success"
- })) : [];
+ this.cultureFileList = row.attachments
+ ? row.attachments.map(item => ({
+ uid: item.id || Math.random(),
+ name: item.fileName,
+ fileSize: item.fileSize,
+ url: item.path || item.fileUrl,
+ uploadTime: item.uploadTime,
+ status: "success"
+ }))
+ : [];
this.cultureDialogVisible = true;
this.$nextTick(() => {
this.$refs.cultureForm && this.$refs.cultureForm.clearValidate();
@@ -915,7 +932,7 @@
.toISOString()
.replace("T", " ")
.substring(0, 19),
- recorder: "褰撳墠鐢ㄦ埛",
+ recorder: store.getters.name,
checkRecord: "",
attachments: []
};
@@ -929,14 +946,16 @@
handleEditRecord(row) {
this.recordDialogTitle = "缂栬緫鎶ょ悊鏍告煡璁板綍";
this.recordForm = { ...row };
- this.recordFileList = row.attachments ? row.attachments.map(item => ({
- uid: item.id || Math.random(),
- name: item.fileName,
- fileSize: item.fileSize,
- url: item.path || item.fileUrl,
- uploadTime: item.uploadTime,
- status: "success"
- })) : [];
+ this.recordFileList = row.attachments
+ ? row.attachments.map(item => ({
+ uid: item.id || Math.random(),
+ name: item.fileName,
+ fileSize: item.fileSize,
+ url: item.path || item.fileUrl,
+ uploadTime: item.uploadTime,
+ status: "success"
+ }))
+ : [];
this.recordDialogVisible = true;
this.$nextTick(() => {
this.$refs.recordForm && this.$refs.recordForm.clearValidate();
@@ -1113,7 +1132,10 @@
/** 鑾峰彇鏂囦欢绫诲瀷 */
getFileType(fileName) {
if (!fileName) return "other";
- const extension = fileName.split(".").pop().toLowerCase();
+ const extension = fileName
+ .split(".")
+ .pop()
+ .toLowerCase();
const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
const pdfTypes = ["pdf"];
const officeTypes = ["doc", "docx", "xls", "xlsx", "ppt", "pptx"];
@@ -1167,7 +1189,10 @@
/** 鑾峰彇鏂囦欢鎵╁睍鍚� */
getFileExtension(filename) {
- return filename.split(".").pop().toLowerCase();
+ return filename
+ .split(".")
+ .pop()
+ .toLowerCase();
},
/** 鏍煎紡鍖栨枃浠跺ぇ灏� */
diff --git a/src/views/business/transfer/index.vue b/src/views/business/transfer/index.vue
index 2a3dffe..f36d0c5 100644
--- a/src/views/business/transfer/index.vue
+++ b/src/views/business/transfer/index.vue
@@ -155,6 +155,18 @@
prop="caseNo"
width="140"
/>
+ <el-table-column
+ label="杞繍鐘舵��"
+ align="center"
+ prop="transitStatus"
+ width="100"
+ >
+ <template slot-scope="scope">
+ <el-tag :type="getStatusTagType(scope.row.transitStatus)">
+ {{ getStatusText(scope.row.transitStatus) }}
+ </el-tag>
+ </template>
+ </el-table-column>
<el-table-column label="鎮h�呬俊鎭�" align="center" width="260">
<template slot-scope="scope">
<div class="donor-info">
@@ -194,18 +206,7 @@
prop="contactPerson"
width="100"
/>
- <el-table-column
- label="杞繍鐘舵��"
- align="center"
- prop="transitStatus"
- width="100"
- >
- <template slot-scope="scope">
- <el-tag :type="getStatusTagType(scope.row.transitStatus)">
- {{ getStatusText(scope.row.transitStatus) }}
- </el-tag>
- </template>
- </el-table-column>
+
<el-table-column
label="鍒涘缓鏃堕棿"
align="center"
@@ -429,11 +430,7 @@
append-to-body
>
<div class="action-confirm">
- <p>
- 纭畾瑕亄{ actionText }}杞繍鍗� "{{
- currentTransport.id
- }}" 鍚楋紵
- </p>
+ <p>纭畾瑕亄{ actionText }}杞繍鍗� "{{ currentTransport.id }}" 鍚楋紵</p>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="actionOpen = false">鍙� 娑�</el-button>
@@ -519,15 +516,15 @@
pageNum: 1,
pageSize: 10,
caseNo: undefined,
- patName: undefined,
+ patName: undefined
// 鍙煡璇㈠凡鍚屾剰涓旈渶瑕佽浆杩愮殑妗堜緥
// reportStatus: "3", // 宸插悓鎰�
- isTransport: "2" // 闇�瑕佽浆杩�
+ // isTransport: "2" // 闇�瑕佽浆杩�
}
};
},
created() {
- this.getList();
+ // this.getList();
this.checkAutoCreate();
},
methods: {
@@ -567,26 +564,31 @@
},
checkAutoCreate() {
const query = this.$route.query;
+ // 涓婃姤璺宠浆杩囨潵杩涜澶勭悊
if (query.autoCreate === "true") {
- // 鑷姩鎵撳紑妗堜緥閫夋嫨寮规
- this.selectCaseOpen = true;
- this.resetCaseSearch();
-
// 濡傛灉鏈夌壒瀹氱殑妗堜緥缂栧彿锛屽彲浠ラ鍏堟悳绱�
if (query.caseNo) {
+ // this.selectCaseOpen = true;
+ this.resetCaseSearch(1);
this.caseQueryParams.caseNo = query.caseNo;
- this.searchCaseList();
+ this.searchCaseList(1);
+ } else {
+ this.queryParams.patName = query.patName;
}
}
+ this.getList();
},
/** 鎼滅储鍙敤妗堜緥 */
- async searchCaseList() {
+ async searchCaseList(type) {
this.caseLoading = true;
try {
const response = await donateList(this.caseQueryParams);
if (response.code === 200) {
this.availableCaseList = response.rows || response.data || [];
this.caseTotal = response.total || 0;
+ if (type == 1 && response.data[0]) {
+ this.selectCase(response.data[0]);
+ }
} else {
this.$modal.msgError(response.msg || "鑾峰彇妗堜緥鍒楄〃澶辫触");
}
@@ -599,7 +601,7 @@
},
/** 閲嶇疆妗堜緥鎼滅储 */
- resetCaseSearch() {
+ resetCaseSearch(type) {
this.caseQueryParams = {
pageNum: 1,
pageSize: 10,
@@ -608,7 +610,12 @@
// reportStatus: "3",
isTransport: "2"
};
- this.searchCaseList();
+ if (!type) {
+ this.searchCaseList();
+ } else {
+ // 璺ㄩ〉闈㈡柊澧炲彇娑堥檺鍒�
+ this.caseQueryParams.isTransport = null;
+ }
},
/** 鍒ゆ柇妗堜緥鏄惁宸叉湁杞繍鍗� */
@@ -636,7 +643,7 @@
// 鎵撳紑杞繍鍗曠紪杈戦〉闈紝骞朵紶鍏ラ�変腑鐨勬渚�
this.currentTransport = this.convertCaseToTransport(caseData);
- console.log(this.currentTransport,'currentTransport');
+ console.log(this.currentTransport, "currentTransport");
this.isEditing = false;
this.editOpen = true;
@@ -644,7 +651,7 @@
/** 灏嗘渚嬩俊鎭浆鎹负杞繍鍗曟牸寮� */
convertCaseToTransport(caseData) {
- console.log(caseData,'2');
+ console.log(caseData, "2");
return {
caseNo: caseData.caseNo,
@@ -712,7 +719,7 @@
// 澶氶�夋閫変腑鏁版嵁
handleSelectionChange(selection) {
- this.ids = selection.map(item => item.id);
+ this.ids = selection.map(item => item.id);
this.single = selection.length !== 1;
this.multiple = !selection.length;
},
@@ -740,7 +747,7 @@
/** 璇︽儏鎸夐挳鎿嶄綔 */
handleDetail(row) {
this.currentTransport = row;
- this.detailTitle = `杞繍鍗曡鎯� - ${ row.id}`;
+ this.detailTitle = `杞繍鍗曡鎯� - ${row.id}`;
this.detailOpen = true;
},
diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 16c62a1..392e2ce 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -172,7 +172,7 @@
</template>
</el-table-column>
- <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+ <el-table-column label="鎹愮尞鑰呭鍚�" align="center" prop="name" width="100" />
<el-table-column label="鎬у埆" align="center" prop="sex" width="80">
<template slot-scope="scope">
diff --git a/src/views/project/donatebaseinfo/EditCaseModal.vue b/src/views/project/donatebaseinfo/EditCaseModal.vue
index 8ccfa01..8669cb9 100644
--- a/src/views/project/donatebaseinfo/EditCaseModal.vue
+++ b/src/views/project/donatebaseinfo/EditCaseModal.vue
@@ -45,12 +45,8 @@
<el-col :span="6">
<el-form-item label="鎬у埆" prop="sex">
<el-select v-model="formData.sex" placeholder="璇烽�夋嫨鎬у埆">
- <el-option
- v-for="dict in dict.type.sys_user_sex || []"
- :key="dict.value"
- :label="dict.label"
- :value="parseInt(dict.value)"
- />
+ <el-option label="鐢�" value="1" />
+ <el-option label="濂�" value="2" />
</el-select>
</el-form-item>
</el-col>
@@ -357,10 +353,10 @@
<el-row :gutter="20">
<el-col :span="8">
- <el-form-item label="GSC璇勫垎" prop="gcsScore">
+ <el-form-item label="GCS璇勫垎" prop="gcsScore">
<el-input
v-model="formData.gcsScore"
- placeholder="璇疯緭鍏SC璇勫垎"
+ placeholder="璇疯緭鍏CS璇勫垎"
/>
</el-form-item>
</el-col>
@@ -1148,7 +1144,10 @@
async handleSubmit() {
const valid = await this.$refs.formRef.validate().catch(() => false);
- if (!valid) return;
+ if (!valid) {
+ this.$message.error("璇风‘璁よ〃鍗曞繀濉俊鎭畬鏁村悗鎻愪氦");
+ return;
+ }
this.submitLoading = true;
try {
diff --git a/src/views/project/donatebaseinfo/index.vue b/src/views/project/donatebaseinfo/index.vue
index 10928eb..96ceb21 100644
--- a/src/views/project/donatebaseinfo/index.vue
+++ b/src/views/project/donatebaseinfo/index.vue
@@ -10,7 +10,7 @@
>
<el-row :gutter="8">
<el-col :span="5">
- <el-form-item label="鎮h�呭鍚�" prop="name">
+ <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
<el-input
v-model="queryParams.name"
placeholder="璇疯緭鍏ュ鍚�"
@@ -105,7 +105,7 @@
prop="caseNo"
width="200"
/>
- <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+ <el-table-column label="鎹愮尞鑰呭鍚�" align="center" prop="name" width="100" />
<el-table-column label="鎬у埆" align="center" prop="sex" width="100">
<template slot-scope="scope">
<dict-tag
@@ -134,7 +134,7 @@
align="center"
prop="treatmenthospitalname"
/>
- <el-table-column label="GSC璇勫垎" align="center" prop="gcsScore" />
+ <el-table-column label="GCS璇勫垎" align="center" prop="gcsScore" />
<el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="100">
<template slot-scope="scope">
<dict-tag
--
Gitblit v1.9.3