From c4599aa279fd2f90b741608392e056fbae2282d5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 20 八月 2026 17:16:54 +0800
Subject: [PATCH] 各表单布局调整
---
src/views/business/course/components/MedicalAssessmentStage.vue | 423 ++++++++++++++++------------------------------------
1 files changed, 130 insertions(+), 293 deletions(-)
diff --git a/src/views/business/course/components/MedicalAssessmentStage.vue b/src/views/business/course/components/MedicalAssessmentStage.vue
index c579876..1fe761d 100644
--- a/src/views/business/course/components/MedicalAssessmentStage.vue
+++ b/src/views/business/course/components/MedicalAssessmentStage.vue
@@ -5,110 +5,55 @@
<el-card class="organ-assessment-card">
<div slot="header" class="clearfix">
<span>鍣ㄥ畼璇勪及琛�</span>
-
- <span v-if="!isCoordinator" class="jstitle">
- 褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
- </span>
</div>
- <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
- <el-form>
- <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
- <el-checkbox-group
- v-model="organdecisionValues"
- @change="handleOrganDecisionChange"
- :disabled="!isEdit"
- >
- <el-checkbox
- v-for="dict in dict.type.sys_Organ"
- :key="dict.value"
- :label="dict.value"
- >{{ dict.label }}
- </el-checkbox>
- </el-checkbox-group>
- <el-input
- v-if="showOtherInput"
- v-model="organdecisionOther"
- placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
- style="margin-top: 10px; width: 300px;"
- :readonly="!isEdit"
- @input="handleOtherDecisionInput"
- ></el-input>
- </el-form-item>
- </el-form>
+ <!-- 鎹愮尞鍐冲畾锛堝彧璇诲睍绀猴級 -->
+ <el-descriptions title="鎹愮尞鍐冲畾" :column="descriptionColumn" border size="small">
+ <el-descriptions-item label="鎹愮尞鍐冲畾">
+ <template v-if="organdecisionValues && organdecisionValues.length">
+ <el-tag v-for="(v, i) in organdecisionValues" :key="i" size="small" style="margin-right: 8px;">
+ {{ getOrganLabel(v) }}
+ </el-tag>
+ </template>
+ <template v-else>-</template>
+ </el-descriptions-item>
+ <el-descriptions-item v-if="showOtherInput" label="鍏朵粬鎹愮尞鍐冲畾">
+ {{ organdecisionOther || '-' }}
+ </el-descriptions-item>
+ </el-descriptions>
<!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
- <el-table
- :data="filteredOrganAssessmentList"
- v-loading="assessmentLoading"
- style="width: 100%"
- :row-class-name="getRowClassName"
- :expand-row-keys="expandedRowKeys"
- @expand-change="handleExpandChange"
- row-key="organno"
- empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
- >
+ <el-table :data="filteredOrganAssessmentList" v-loading="assessmentLoading" style="width: 100%"
+ :row-class-name="getRowClassName" :expand-row-keys="expandedRowKeys" @expand-change="handleExpandChange"
+ row-key="organno" empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼">
<el-table-column type="expand">
<template slot-scope="scope">
<div class="organ-expand-content" v-if="scope.row.expanded">
- <el-tabs
- v-model="scope.row.activeTab"
- type="card"
- class="organ-detail-tabs"
- @tab-click="handleTabClick(scope.row, $event)"
- >
+ <el-tabs v-model="scope.row.activeTab" type="card" class="organ-detail-tabs"
+ @tab-click="handleTabClick(scope.row, $event)">
<!-- 鍔ㄦ�佺敓鎴愯瘎浼癟ab -->
- <el-tab-pane
- v-for="(assessment, index) in getOrganAssessments(scope.row)"
- :key="`${scope.row.organno}_${index}`"
- :label="`绗�${index + 1}娆¤瘎浼癭"
- :name="String(index)"
- >
- <organ-assessment-form
- :organ-data="scope.row"
- :assessment-index="index"
- :readonly="!canAssessOrgan(scope.row)"
- :current-user="currentUser"
- @update-assessment="handleUpdateAssessment"
- @delete-assessment="handleDeleteAssessment"
- @save-assessment="handleSaveAssessment"
- />
- </el-tab-pane>
-
- <!-- 娣诲姞璇勪及鎸夐挳 -->
- <el-tab-pane
- name="add"
- v-if="canAssessOrgan(scope.row) && isEdit"
- >
- <template slot="label">
- <el-button
- type="text"
- icon="el-icon-plus"
- @click.stop="handleAddNewAssessment(scope.row)"
- size="mini"
- >
- 鏂板璇勪及
- </el-button>
- </template>
- <div class="add-assessment-prompt">
- <el-empty description="鐐瑰嚮涓婃柟鎸夐挳娣诲姞鏂扮殑璇勪及"></el-empty>
- </div>
+ <el-tab-pane v-for="(assessment, index) in getOrganAssessments(scope.row)"
+ :key="`${scope.row.organno}_${index}`" :label="`绗�${index + 1}娆¤瘎浼癭" :name="String(index)">
+ <organ-assessment-form :organ-data="scope.row" :assessment-index="index"
+ :readonly="true" :current-user="currentUser"
+ @update-assessment="handleUpdateAssessment" @delete-assessment="handleDeleteAssessment"
+ @save-assessment="handleSaveAssessment" />
</el-tab-pane>
<!-- 璇勪及姹囨�籘ab -->
<el-tab-pane label="璇勪及姹囨��" name="summary">
<div class="assessment-summary">
<!-- 鍩烘湰淇℃伅姹囨�� -->
- <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="2" border>
+ <el-descriptions title="鍩烘湰淇℃伅姹囨��" :column="descriptionColumn" border>
<el-descriptions-item label="鍣ㄥ畼绫诲瀷">
<span class="summary-item">{{
getOrganLabel(scope.row.organno)
- }}</span>
+ }}</span>
</el-descriptions-item>
<el-descriptions-item label="鑾峰彇鏈烘瀯">
<span class="summary-item">{{
scope.row.gainhospitalname
- }}</span>
+ }}</span>
</el-descriptions-item>
<el-descriptions-item label="璇勪及娆℃暟" :span="2">
<el-tag type="info" size="medium">
@@ -118,57 +63,36 @@
<el-descriptions-item label="鏈�鏂拌瘎浼版椂闂�" :span="2">
<span class="highlight-text">{{
getLatestAssessmentTime(scope.row) || "-"
- }}</span>
+ }}</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-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"
- >
+ <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"
- >
+ <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 :column="descriptionColumn" border class="detail-descriptions">
<!-- 璇勪及鏃堕棿 -->
<el-descriptions-item label="璇勪及鏃堕棿" :span="2">
<span class="time-text">
{{
parseTime(assessment.assessmentTime) ||
- "鏈缃�"
+ "鏈缃�"
}}
</span>
</el-descriptions-item>
@@ -182,14 +106,10 @@
<!-- 鍔熻兘鐘舵�� -->
<el-descriptions-item label="鍔熻兘鐘舵��">
- <el-tag
- :type="
- getFunctionStatusTagType(
- assessment.functionStatus
- )
- "
- size="small"
- >
+ <el-tag :type="getFunctionStatusTagType(
+ assessment.functionStatus
+ )
+ " size="small">
{{
getFunctionStatusText(
assessment.functionStatus
@@ -203,34 +123,25 @@
<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-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 type="text" size="mini" @click="
+ showAttachmentList(
+ assessment.attachments,
+ index + 1
+ )
+ " style="margin-left: 10px;">
鏌ョ湅闄勪欢鍒楄〃
</el-button>
</el-descriptions-item>
@@ -241,57 +152,37 @@
</el-card>
<!-- 鍣ㄥ畼鍩烘湰淇℃伅鍗$墖 -->
- <el-card
- header="鍣ㄥ畼淇℃伅"
- style="margin-top: 20px;"
- class="organ-info-card"
- >
- <el-descriptions :column="2" border>
+ <el-card header="鍣ㄥ畼淇℃伅" style="margin-top: 20px;" class="organ-info-card">
+ <el-descriptions :column="descriptionColumn" border>
<el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
- <el-tag
- :type="
- scope.row.isbiopsybefore == '1'
- ? 'success'
- : 'info'
- "
- size="small"
- >
+ <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"
- >
+ <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"
- >
+ <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"
- >
+ <el-tag :type="scope.row.ispathogenpositive == '1'
+ ? 'danger'
+ : 'info'
+ " size="small">
{{
scope.row.ispathogenpositive == "1" ? "鏄�" : "鍚�"
}}
@@ -318,31 +209,16 @@
</template>
</el-table-column>
- <el-table-column
- label="鑾峰彇鏈烘瀯"
- align="center"
- prop="gainhospitalname"
- show-overflow-tooltip
- />
+ <el-table-column label="鑾峰彇鏈烘瀯" align="center" prop="gainhospitalname" show-overflow-tooltip />
<!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
- <el-table-column
- v-for="index in getMaxAssessmentCount()"
- :key="index"
- :label="`绗�${index}娆¤瘎浼癭"
- align="center"
- width="120"
- >
+ <el-table-column v-for="index in getMaxAssessmentCount()" :key="index" :label="`绗�${index}娆¤瘎浼癭" align="center"
+ width="120">
<template slot-scope="scope">
- <el-tag
- v-if="getOrganAssessments(scope.row)[index - 1]"
- :type="
- getAssessmentTagType(
- getOrganAssessments(scope.row)[index - 1].status
- )
- "
- size="small"
- >
+ <el-tag v-if="getOrganAssessments(scope.row)[index - 1]" :type="getAssessmentTagType(
+ getOrganAssessments(scope.row)[index - 1].status
+ )
+ " size="small">
{{
getAssessmentStatusText(
getOrganAssessments(scope.row)[index - 1].status
@@ -355,70 +231,22 @@
<el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
<template slot-scope="scope">
- <el-tag
- :type="
- getOrganOverallStatus(scope.row) == 'completed'
- ? 'success'
- : getOrganOverallStatus(scope.row) == 'assessing'
+ <el-tag :type="getOrganOverallStatus(scope.row) == 'completed'
+ ? 'success'
+ : getOrganOverallStatus(scope.row) == 'assessing'
? 'primary'
: 'warning'
- "
- size="small"
- >
+ " size="small">
{{ getOrganOverallStatusText(scope.row) }}
</el-tag>
</template>
</el-table-column>
- <el-table-column
- label="鎿嶄綔"
- align="center"
- width="150"
- class-name="small-padding fixed-width"
- >
- <template slot-scope="scope">
- <el-button
- v-if="canAssessOrgan(scope.row) && isEdit"
- size="mini"
- type="text"
- @click="handleToggleExpand(scope.row)"
- >
- {{
- expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "璇︽儏"
- }}
- </el-button>
- <el-button
- v-else-if="!isEdit"
- size="mini"
- type="text"
- @click="handleToggleExpand(scope.row)"
- >
- {{
- expandedRowKeys.includes(scope.row.organno) ? "鏀惰捣" : "鏌ョ湅"
- }}
- </el-button>
- <el-button v-else size="mini" type="text" disabled
- >鏃犳潈闄�</el-button
- >
- </template>
- </el-table-column>
</el-table>
</el-card>
- <!-- 鏁翠綋淇濆瓨鎸夐挳 -->
- <div class="footer-actions" v-if="isEdit">
- <el-button type="primary" @click="handleSaveAll" :loading="saveLoading"
- >淇濆瓨璇勪及琛�</el-button
- >
- <el-button @click="handleCancel">鍙栨秷</el-button>
- </div>
-
<!-- 鏂囦欢棰勮寮圭獥 -->
- <FilePreviewDialog
- :visible="attachmentVisible"
- :file="currentPreviewFile"
- @close="attachmentVisible = false"
- />
+ <FilePreviewDialog :visible="attachmentVisible" :file="currentPreviewFile" @close="attachmentVisible = false" />
</div>
</template>
@@ -431,12 +259,14 @@
import CaseBasicInfo from "@/components/CaseBasicInfo";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import OrganAssessmentForm from "@/components/assessInfoComponents/OrganAssessmentForm.vue";
+import readonlyDescriptionsMixin from "./readonlyDescriptionsMixin";
export default {
name: "AssessmentDetail",
components: { OrganAssessmentForm, FilePreviewDialog, CaseBasicInfo },
+ mixins: [readonlyDescriptionsMixin],
dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
- props: {
+ props: {
infoid: {
type: String,
default: true
@@ -557,9 +387,9 @@
}
},
created() {
+
this.caseId = this.infoid;
- this.assessmentId = this.$route.query.id;
- this.isEdit = this.$route.query.assess == "true";
+ this.isEdit = false;
this.getAssessmentDetail();
},
methods: {
@@ -614,8 +444,8 @@
<h4>绗�${assessmentNumber}娆¤瘎浼伴檮浠跺垪琛�</h4>
<ul style="list-style: none; padding-left: 0;">
${attachments
- .map(
- (item, index) => `
+ .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>
@@ -629,8 +459,8 @@
</el-button>
</li>
`
- )
- .join("")}
+ )
+ .join("")}
</ul>
</div>`,
"闄勪欢鍒楄〃",
@@ -684,7 +514,19 @@
this.$forceUpdate();
}
},
+ accomplish() {
+ this.$confirm("鏄惁瀹屾垚璇ユ渚嬪櫒瀹樿瘎浼版楠わ紵", "鎻愰啋", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ this.form.assessState = 3;
+ this.handleSaveAll();
+ })
+ .catch(() => { });
+ },
// 鏁翠綋淇濆瓨鏂规硶
async handleSaveAll() {
this.saveLoading = true;
@@ -729,7 +571,9 @@
})
)
};
-
+ if (saveData.assessState == 1 || !saveData.assessState) {
+ saveData.assessState = 2;
+ }
const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
const response = await saveMethod(saveData);
@@ -738,6 +582,7 @@
if (!this.assessmentData.id && response.data) {
this.assessmentData.id = response.data;
}
+ this.getAssessmentDetail()
this.refreshKey += 1; // 瑙﹀彂閲嶆柊娓叉煋
} else {
this.$message.error("淇濆瓨澶辫触锛�" + (response.msg || "鏈煡閿欒"));
@@ -853,8 +698,7 @@
// 鏄剧ず鍒涘缓鎻愮ず
if (organsToCreate.length > 0) {
this.$message.success(
- `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${
- organsToCreate.length
+ `宸蹭负銆�${this.getOrganLabel(decision)}銆戝垱寤�${organsToCreate.length
}涓瘎浼伴」`
);
}
@@ -976,7 +820,7 @@
detailData = response;
}
this.assessmentData = {
- id: detailData.id || this.assessmentId,
+ id: detailData.id ,
infoid: detailData.infoid || this.infoid,
caseNo: detailData.caseNo || "",
name: detailData.name || detailData.donorName || "",
@@ -1037,8 +881,8 @@
const activeTab = this.activeTabMap.has(organno)
? String(this.activeTabMap.get(organno))
: assessments.length > 0
- ? "0"
- : "summary";
+ ? "0"
+ : "summary";
return {
...organ,
@@ -1340,32 +1184,25 @@
}
},
- handleCompleteAssessment() {
- this.$confirm("鏄惁瀹屾垚璇ユ渚嬫墍鏈夊櫒瀹樼殑璇勪及锛�", "鎻愰啋", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- })
- .then(() => {
- this.assessmentData.assessState = 3;
- this.saveAssessment();
- })
-
- .catch(() => {});
- },
-
- // 淇濆瓨璇勪及
- async saveAssessment() {
+ // 瀹屾垚璇勪及
+ async handleCompleteAssessment() {
try {
+ await this.$confirm(
+ "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+ "纭鎿嶄綔",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
const updateData = {
- ...this.assessmentData
+ ...this.assessmentData,
+ assessState: "3",
+ assessTime: new Date().toISOString()
};
- if (
- this.assessmentData.assessState == 1 ||
- !this.assessmentData.assessState
- ) {
- this.assessmentData.assessState = 2;
- }
+
const response = await assessedit(updateData);
if (response.code == 200) {
@@ -1586,7 +1423,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;
}
@@ -1664,7 +1501,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;
}
--
Gitblit v1.9.3