From 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 27 二月 2026 15:48:37 +0800
Subject: [PATCH] 青岛维护提交
---
src/views/business/assess/assessInfo.vue | 953 +++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 629 insertions(+), 324 deletions(-)
diff --git a/src/views/business/assess/assessInfo.vue b/src/views/business/assess/assessInfo.vue
index 330cff8..e1d7ddf 100644
--- a/src/views/business/assess/assessInfo.vue
+++ b/src/views/business/assess/assessInfo.vue
@@ -17,44 +17,38 @@
assessmentData.caseNo
}}</el-descriptions-item>
<el-descriptions-item label="娼滃湪鎹愮尞鑰呭鍚�">{{
- assessmentData.donorName
+ assessmentData.name || assessmentData.donorName
}}</el-descriptions-item>
<el-descriptions-item label="鎬у埆">
- <dict-tag :options="genderOptions" :value="assessmentData.gender" />
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="assessmentData.sex"
+ />
</el-descriptions-item>
<el-descriptions-item label="骞撮緞"
>{{ assessmentData.age }}宀�</el-descriptions-item
>
<el-descriptions-item label="琛�鍨�">
- <dict-tag
- :options="bloodTypeOptions"
- :value="assessmentData.bloodType"
- />
+ {{ assessmentData.bloodtype }}
</el-descriptions-item>
<el-descriptions-item label="璇佷欢鍙风爜">{{
- assessmentData.idCardNo
+ assessmentData.idcardno
}}</el-descriptions-item>
<el-descriptions-item label="鐤剧梾璇婃柇">{{
- assessmentData.diagnosis
+ assessmentData.diagnosisname
}}</el-descriptions-item>
<el-descriptions-item label="鎵�鍦ㄥ尰鐤楁満鏋�">{{
- assessmentData.hospitalName
+ assessmentData.treatmenthospitalname
}}</el-descriptions-item>
- <el-descriptions-item label="涓绘不鍖荤敓">{{
- assessmentData.doctorName
+ <el-descriptions-item label="鍗忚皟鍛�">{{
+ assessmentData.coordinatorName
}}</el-descriptions-item>
- <el-descriptions-item label="鐢宠璇勪及鏃堕棿">{{
- assessmentData.applyTime
+ <el-descriptions-item label="璇勪及鏃堕棿">{{
+ assessmentData.assessTime
}}</el-descriptions-item>
- <el-descriptions-item label="璇勪及绫诲瀷">
- <dict-tag
- :options="assessmentTypeOptions"
- :value="assessmentData.assessmentType"
- />
- </el-descriptions-item>
<el-descriptions-item label="璇勪及鐘舵��">
- <el-tag :type="statusFilter(assessmentData.assessmentStatus)">
- {{ statusTextFilter(assessmentData.assessmentStatus) }}
+ <el-tag :type="statusFilter(assessmentData.assessState)">
+ {{ statusTextFilter(assessmentData.assessState) }}
</el-tag>
</el-descriptions-item>
</el-descriptions>
@@ -69,6 +63,7 @@
type="primary"
size="mini"
@click="handleCompleteAssessment"
+ :loading="saveLoading"
>
纭瀹屾垚璇勪及
</el-button>
@@ -76,9 +71,15 @@
褰撳墠瑙掕壊锛歿{ currentDepartment }}璇勪及浜哄憳
</span>
</div>
- <el-row>
- <el-form-item label-width="100px" label="璇勪及鍣ㄥ畼">
- <el-checkbox-group v-model="organdecision">
+
+ <!-- 鎹愮尞鍐冲畾琛ㄥ崟 -->
+ <el-form>
+ <el-form-item label-width="100px" label="鎹愮尞鍐冲畾">
+ <el-checkbox-group
+ v-model="organdecision"
+ @change="handleOrganDecisionChange"
+ :disabled="!isEdit"
+ >
<el-checkbox
v-for="item in organselection"
:key="item"
@@ -88,22 +89,27 @@
</el-checkbox-group>
<el-input
v-if="organdecision.includes('鍏朵粬')"
- v-model="assessmentData.organdecisionOther"
+ v-model="organdecisionOther"
placeholder="璇疯緭鍏ュ叾浠栨崘鐚喅瀹氱殑鍏蜂綋鍐呭"
style="margin-top: 10px; width: 300px;"
+ :readonly="!isEdit"
+ @input="handleOtherDecisionInput"
></el-input>
</el-form-item>
- </el-row>
+ </el-form>
+
+ <!-- 鍣ㄥ畼璇勪及琛ㄦ牸 -->
<el-table
- :data="organAssessmentList"
+ :data="filteredOrganAssessmentList"
v-loading="assessmentLoading"
style="width: 100%"
:row-class-name="getRowClassName"
:expand-row-keys="expandedRowKeys"
@expand-change="handleExpandChange"
- row-key="organType"
+ row-key="organno"
+ empty-text="褰撳墠鎹愮尞鍐冲畾涓嬫殏鏃犻渶瑕佽瘎浼扮殑鍣ㄥ畼"
>
- <el-table-column type="expand" width="60">
+ <el-table-column type="expand">
<template slot-scope="scope">
<div class="organ-expand-content" v-if="scope.row.expanded">
<el-tabs
@@ -123,13 +129,15 @@
:assessment-data="assessment"
:assessment-index="index"
:readonly="!canAssessOrgan(scope.row)"
- @save="handleSaveOrganAssessment"
@add-assessment="handleAddAssessment"
/>
</el-tab-pane>
<!-- 娣诲姞璇勪及鎸夐挳 -->
- <el-tab-pane name="add" v-if="canAssessOrgan(scope.row)">
+ <el-tab-pane
+ name="add"
+ v-if="canAssessOrgan(scope.row) && isEdit"
+ >
<template slot="label">
<el-button
type="text"
@@ -150,10 +158,10 @@
<div class="assessment-summary">
<el-descriptions title="璇勪及缁撴灉姹囨��" :column="2" border>
<el-descriptions-item label="鍣ㄥ畼绫诲瀷">{{
- scope.row.organName
+ scope.row.organname
}}</el-descriptions-item>
- <el-descriptions-item label="璇勪及绉戝">{{
- scope.row.department
+ <el-descriptions-item label="鑾峰彇鏈烘瀯">{{
+ scope.row.gainhospitalname
}}</el-descriptions-item>
<el-descriptions-item label="璇勪及娆℃暟" :span="2">
<el-tag type="info"
@@ -165,34 +173,58 @@
</el-descriptions-item>
</el-descriptions>
- <!-- 闄勪欢姹囨�� -->
- <el-card header="鎵�鏈夎瘎浼伴檮浠�" style="margin-top: 20px;">
- <el-table
- :data="getAllAttachments(scope.row)"
- size="small"
- empty-text="鏆傛棤闄勪欢"
- >
- <el-table-column label="闄勪欢鍚嶇О" prop="fileName" />
- <el-table-column label="璇勪及闃舵" width="120">
- <template slot-scope="{ row }">
- 绗瑊{ row.assessmentIndex + 1 }}娆¤瘎浼�
- </template>
- </el-table-column>
- <el-table-column
- label="涓婁紶鏃堕棿"
- prop="uploadTime"
- width="180"
- />
- <el-table-column label="鎿嶄綔" width="120">
- <template slot-scope="{ row }">
- <el-button
- type="text"
- @click="handlePreviewAttachment(row)"
- >棰勮</el-button
- >
- </template>
- </el-table-column>
- </el-table>
+ <!-- 璇勪及璇︽儏姹囨�� -->
+ <el-card header="璇勪及璇︽儏" style="margin-top: 20px;">
+ <el-descriptions :column="1" border>
+ <el-descriptions-item label="鑾峰彇鍓嶆椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsybefore === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsybefore === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鑾峰彇鍚庢椿妫�">
+ <el-tag
+ :type="
+ scope.row.isbiopsyafter === '1'
+ ? 'success'
+ : 'info'
+ "
+ >
+ {{ scope.row.isbiopsyafter === "1" ? "鏄�" : "鍚�" }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="杈圭紭鍣ㄥ畼">
+ <el-tag
+ :type="
+ scope.row.ismarginalorgan === '1'
+ ? 'warning'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ismarginalorgan === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鐥呭師鑿岄槼鎬�">
+ <el-tag
+ :type="
+ scope.row.ispathogenpositive === '1'
+ ? 'danger'
+ : 'info'
+ "
+ >
+ {{
+ scope.row.ispathogenpositive === "1" ? "鏄�" : "鍚�"
+ }}
+ </el-tag>
+ </el-descriptions-item>
+ </el-descriptions>
</el-card>
</div>
</el-tab-pane>
@@ -201,28 +233,16 @@
</template>
</el-table-column>
- <el-table-column
- label="鍣ㄥ畼绫诲瀷"
- align="center"
- prop="organType"
- width="120"
- >
- <template slot-scope="scope">
- <dict-tag
- :options="organTypeOptions"
- :value="scope.row.organType"
- />
- </template>
- </el-table-column>
+ <el-table-column label="鍣ㄥ畼绫诲瀷" align="center" prop="organname" />
+
+ <el-table-column label="鍣ㄥ畼缂栧彿" align="center" prop="organnumber" />
<el-table-column
- label="璇勪及绉戝"
+ label="鑾峰彇鏈烘瀯"
align="center"
- prop="department"
- width="120"
+ prop="gainhospitalname"
+ show-overflow-tooltip
/>
-
- <el-table-column label="璇勪及浜哄憳" align="center" prop="assessor" />
<!-- 鍔ㄦ�佹樉绀鸿瘎浼扮姸鎬佸垪 -->
<el-table-column
@@ -247,10 +267,16 @@
<el-table-column label="鏁翠綋鐘舵��" align="center" width="100">
<template slot-scope="scope">
<el-tag
- :type="scope.row.assessmentStatus === '1' ? 'success' : 'primary'"
+ :type="
+ getOrganOverallStatus(scope.row) === 'completed'
+ ? 'success'
+ : getOrganOverallStatus(scope.row) === 'assessing'
+ ? 'primary'
+ : 'warning'
+ "
size="small"
>
- {{ scope.row.assessmentStatus === "1" ? "宸插畬鎴�" : "璇勪及涓�" }}
+ {{ getOrganOverallStatusText(scope.row) }}
</el-tag>
</template>
</el-table-column>
@@ -263,13 +289,23 @@
>
<template slot-scope="scope">
<el-button
- v-if="canAssessOrgan(scope.row)"
+ v-if="canAssessOrgan(scope.row) && isEdit"
size="mini"
type="text"
@click="handleToggleExpand(scope.row)"
>
{{
- expandedRowKeys.includes(scope.row.organType) ? "鏀惰捣" : "璇︽儏"
+ 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
@@ -279,6 +315,12 @@
</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
@@ -291,61 +333,38 @@
<script>
import {
- getAssessment,
- updateOrganAssessment,
- completeAssessment
-} from "./mockAssessmentApi";
+ evaluateBaseInfolist,
+ assessedit,
+ assessAdd
+} from "@/api/businessApi/index";
import FilePreviewDialog from "@/components/FilePreviewDialog";
import OrganAssessmentForm from "./components/OrganAssessmentForm.vue";
export default {
name: "AssessmentDetail",
components: { OrganAssessmentForm, FilePreviewDialog },
+ dicts: ["sys_user_sex", "sys_Organ", "sys_0_1"],
data() {
return {
- assessmentId: undefined,
- assessmentData: {},
- organAssessmentList: [],
- attachmentList: [],
+ // 鏄惁缂栬緫妯″紡
+ isEdit: false,
+ // 鍔犺浇鐘舵��
assessmentLoading: false,
- organdecision: [],
+ saveLoading: false,
+ // 鏁版嵁ID
+ infoid: undefined,
+ assessmentId: undefined,
+ // 涓昏鏁版嵁
+ assessmentData: {},
+ organAssessmentList: [], // 鎵�鏈夊櫒瀹樻暟鎹�
// 灞曞紑琛岀浉鍏�
expandedRowKeys: [],
+ // 闄勪欢鐩稿叧
currentPreviewFile: null,
attachmentVisible: false,
-
- currentUser: {
- id: "001",
- name: "寮犲尰鐢�",
- department: "鍗忚皟鍛�",
- role: "coordinator"
- },
- //department锛氬績鑴忋�乧oordinator锛氬崗璋冨憳
- // 瀛楀吀閫夐」
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- bloodTypeOptions: [
- { value: "A", label: "A鍨�" },
- { value: "B", label: "B鍨�" },
- { value: "O", label: "O鍨�" },
- { value: "AB", label: "AB鍨�" }
- ],
- assessmentTypeOptions: [
- { value: "1", label: "鍒濇璇勪及" },
- { value: "2", label: "鏈�缁堣瘎浼�" }
- ],
- organTypeOptions: [
- { value: "heart", label: "蹇冭剰" },
- { value: "liver", label: "鑲濊剰" },
- { value: "kidney", label: "鑲捐剰" },
- { value: "lung", label: "鑲鸿剰" },
- { value: "pancreas", label: "鑳拌吅" },
- { value: "intestine", label: "鑲犻亾" },
- { value: "cornea", label: "瑙掕啘" },
- { value: "skin", label: "鐨偆" }
- ],
+ // 鎹愮尞鍐冲畾鐩稿叧
+ organdecision: [],
+ organdecisionOther: "",
organselection: [
"鑲濊剰",
"鍙岃偩",
@@ -358,7 +377,28 @@
"鍙岀溂缁勭粐",
"閬椾綋",
"鍏朵粬"
- ]
+ ],
+ // 鍣ㄥ畼绫诲瀷鏄犲皠鍏崇郴
+ organDecisionMapping: {
+ 鑲濊剰: ["鑲濊剰"],
+ 鍙岃偩: ["宸﹁偩", "鍙宠偩"],
+ 宸﹁偩: ["宸﹁偩"],
+ 鍙宠偩: ["鍙宠偩"],
+ 蹇冭剰: ["蹇冭剰"],
+ 鑲鸿剰: ["鑲鸿剰"],
+ 鑳拌吅: ["鑳拌吅"],
+ 灏忚偁: ["灏忚偁"],
+ 鍙岀溂缁勭粐: ["瑙掕啘"],
+ 閬椾綋: ["鐨偆", "楠ㄩ", "鍏朵粬缁勭粐"],
+ 鍏朵粬: [] // 鍏朵粬绫诲瀷涓嶆槧灏勫叿浣撳櫒瀹�
+ },
+ // 鐢ㄦ埛淇℃伅
+ currentUser: {
+ id: "001",
+ name: "寮犲尰鐢�",
+ department: "蹇冭剰绉�",
+ role: "doctor" // coordinator, doctor
+ }
};
},
computed: {
@@ -368,8 +408,27 @@
currentDepartment() {
return this.currentUser.department;
},
+ // 鏍规嵁鎹愮尞鍐冲畾杩囨护鍚庣殑鍣ㄥ畼鍒楄〃
+ filteredOrganAssessmentList() {
+ if (!this.organdecision || this.organdecision.length === 0) {
+ return [];
+ }
+
+ // 鑾峰彇鎵�鏈夐�変腑鐨勫櫒瀹樼被鍨�
+ const selectedOrgans = new Set();
+ this.organdecision.forEach(decision => {
+ const organs = this.organDecisionMapping[decision] || [];
+ organs.forEach(organ => selectedOrgans.add(organ));
+ });
+
+ // 杩囨护鍣ㄥ畼璇勪及鍒楄〃
+ return this.organAssessmentList.filter(organ =>
+ selectedOrgans.has(organ.organname)
+ );
+ },
+ // 妫�鏌ユ墍鏈夎繃婊ゅ悗鐨勫櫒瀹樻槸鍚﹂兘宸茶瘎浼�
allOrgansAssessed() {
- return this.organAssessmentList.every(
+ return this.filteredOrganAssessmentList.every(
organ =>
organ.assessments &&
organ.assessments.length > 0 &&
@@ -379,86 +438,364 @@
);
}
},
+ watch: {
+ // 鐩戝惉鎹愮尞鍐冲畾鍙樺寲锛岀敤浜庡鏉傞�昏緫澶勭悊
+ organdecision: {
+ handler(newVal, oldVal) {
+ this.handleComplexDecisionChange(newVal, oldVal);
+ },
+ deep: true
+ }
+ },
created() {
+ this.infoid = this.$route.query.infoid;
this.assessmentId = this.$route.query.id;
+ this.isEdit = this.$route.query.assess === "true";
this.getAssessmentDetail();
},
methods: {
+ // 鏁翠綋淇濆瓨鏂规硶
+ async handleSaveAll() {
+ this.saveLoading = true;
+ try {
+ // 1. 鍑嗗涓昏瘎浼拌〃鏁版嵁
+ const saveData = {
+ // 鏍规嵁 id 鏄惁瀛樺湪鍐冲畾鏄洿鏂拌繕鏄柊澧�
+ id: this.assessmentData.id || undefined,
+ infoid: this.infoid,
+ caseNo: this.assessmentData.caseNo,
+ donorno: this.assessmentData.donorno,
+ treatmenthospitalname: this.assessmentData.treatmenthospitalname,
+ treatmenthospitalno: this.assessmentData.treatmenthospitalno,
+ sex: this.assessmentData.sex,
+ age: this.assessmentData.age,
+ bloodtype: this.assessmentData.bloodtype,
+ idcardno: this.assessmentData.idcardno,
+ diagnosisname: this.assessmentData.diagnosisname,
+ coordinatorName: this.assessmentData.coordinatorName,
+ assessTime: this.assessmentData.assessTime || new Date().toISOString(),
+ assessState: this.assessmentData.assessState,
+ assessannex: this.assessmentData.assessannex,
+ // 鎹愮尞鍐冲畾淇℃伅
+ organdecision: this.organdecision.join(','),
+ organdecisionOther: this.organdecisionOther,
+ // 鍣ㄥ畼璇勪及鍒楄〃
+ serviceMedicalevaluationorgans: this.organAssessmentList.map(organ => ({
+ id: organ.id,
+ infoid: organ.infoid,
+ donorno: organ.donorno,
+ organno: organ.organno,
+ organname: organ.organname,
+ organnumber: organ.organnumber,
+ gainhospitalno: organ.gainhospitalno,
+ gainhospitalname: organ.gainhospitalname,
+ isbiopsybefore: organ.isbiopsybefore,
+ isbiopsyafter: organ.isbiopsyafter,
+ ismarginalorgan: organ.ismarginalorgan,
+ ispathogenpositive: organ.ispathogenpositive,
+ ispnf: organ.ispnf,
+ isdgf: organ.isdgf,
+ // 灏� assessments 鏁扮粍搴忓垪鍖栧埌 assesscontent 瀛楁
+ assesscontent: JSON.stringify(organ.assessments)
+ }))
+ };
+
+ // 2. 鏍规嵁 id 鍒ゆ柇璋冪敤鍝釜 API
+ const saveMethod = this.assessmentData.id ? assessedit : assessAdd;
+ const response = await saveMethod(saveData);
+
+ if (response.code === 200) {
+ this.$message.success('璇勪及琛ㄤ繚瀛樻垚鍔燂紒');
+ // 淇濆瓨鎴愬姛鍚庯紝鏇存柊鏈湴鐨� assessmentData.id锛堝浜庢柊澧炴儏鍐碉級
+ if (!this.assessmentData.id && response.data && response.data.id) {
+ this.assessmentData.id = response.data.id;
+ }
+ } else {
+ this.$message.error('淇濆瓨澶辫触锛�' + (response.msg || '鏈煡閿欒'));
+ }
+ } catch (error) {
+ console.error('淇濆瓨璇勪及琛ㄥけ璐�:', error);
+ this.$message.error('淇濆瓨澶辫触锛岃閲嶈瘯');
+ } finally {
+ this.saveLoading = false;
+ }
+ },
+
+ // 鍙栨秷鎸夐挳浜嬩欢
+ handleCancel() {
+ this.$router.go(-1);
+ },
+
+ // 鎹愮尞鍐冲畾鍙樻洿澶勭悊
+ handleOrganDecisionChange(newDecision) {
+ // 鑷姩澶勭悊鐩稿叧閫昏緫
+ this.autoHandleDecisionChange(newDecision);
+ // 寮哄埗閲嶆柊娓叉煋
+ this.$forceUpdate();
+ // 濡傛灉浠庢湁閫夋嫨鍙樹负鏃犻�夋嫨锛屾竻绌哄睍寮�鐘舵��
+ if (newDecision.length === 0) {
+ this.expandedRowKeys = [];
+ }
+ },
+
+ // 鍏朵粬鎹愮尞鍐冲畾杈撳叆澶勭悊
+ handleOtherDecisionInput(value) {
+ // 杈撳叆鏃朵笉鍋氬崟鐙繚瀛橈紝绛夊緟鏁翠綋淇濆瓨
+ },
+
+ // 鑷姩澶勭悊鍐冲畾鍙樻洿閫昏緫
+ autoHandleDecisionChange(newDecision) {
+ // 濡傛灉閫夋嫨浜�"鍙岃偩"锛岃嚜鍔ㄥ彇娑堝崟鐙殑"宸﹁偩"鍜�"鍙宠偩"閫夋嫨
+ if (newDecision.includes("鍙岃偩")) {
+ this.organdecision = newDecision.filter(
+ item => item !== "宸﹁偩" && item !== "鍙宠偩"
+ );
+ }
+ // 濡傛灉閫夋嫨浜�"宸﹁偩"鎴�"鍙宠偩"锛屽彇娑�"鍙岃偩"閫夋嫨
+ else if (newDecision.includes("宸﹁偩") || newDecision.includes("鍙宠偩")) {
+ this.organdecision = newDecision.filter(item => item !== "鍙岃偩");
+ }
+
+ // 澶勭悊浜掓枼閫昏緫
+ this.handleExclusiveDecisions();
+ },
+
+ // 澶勭悊浜掓枼鐨勬崘鐚喅瀹�
+ handleExclusiveDecisions() {
+ // 閬椾綋鎹愮尞涓庡叾浠栧櫒瀹樻崘鐚簰鏂ワ紙鏍规嵁涓氬姟闇�姹傝皟鏁达級
+ if (this.organdecision.includes("閬椾綋")) {
+ // 鍙互璁剧疆鍙繚鐣欓仐浣撴崘鐚紝鎴栬�呮牴鎹笟鍔¢渶姹傚鐞�
+ }
+ },
+
+ // 澶嶆潅鍐崇瓥鍙樺寲澶勭悊
+ handleComplexDecisionChange(newVal, oldVal) {
+ // 澶勭悊鏂板鐨勯�夋嫨
+ const addedDecisions = newVal.filter(item => !oldVal.includes(item));
+ const removedDecisions = oldVal.filter(item => !newVal.includes(item));
+
+ // 瀵规柊澧炲姞鐨勯�夋嫨杩涜鐗规畩澶勭悊
+ addedDecisions.forEach(decision => {
+ this.handleNewDecision(decision);
+ });
+
+ // 瀵圭Щ闄ょ殑閫夋嫨杩涜娓呯悊
+ removedDecisions.forEach(decision => {
+ this.handleRemovedDecision(decision);
+ });
+ },
+
+ // 澶勭悊鏂板鐨勬崘鐚喅瀹�
+ handleNewDecision(decision) {
+ // 鏍规嵁鏄犲皠鍏崇郴鑷姩鍒涘缓瀵瑰簲鐨勫櫒瀹樿瘎浼伴」
+ this.autoCreateOrganAssessments(decision);
+ },
+
+ // 鑷姩鍒涘缓鍣ㄥ畼璇勪及椤�
+ autoCreateOrganAssessments(decision) {
+ const organsToCreate = this.organDecisionMapping[decision];
+
+ if (organsToCreate && organsToCreate.length > 0) {
+ organsToCreate.forEach(organName => {
+ this.ensureOrganExists(organName);
+ });
+
+ // 鏄剧ず鍒涘缓鎻愮ず
+ if (organsToCreate.length > 0) {
+ this.$message.success(
+ `宸蹭负銆�${decision}銆戝垱寤�${organsToCreate.length}涓瘎浼伴」`
+ );
+ }
+ } else {
+ console.warn(`鎹愮尞鍐冲畾銆�${decision}銆戞病鏈夐厤缃櫒瀹樻槧灏勫叧绯籤);
+ }
+ },
+
+ // 澶勭悊绉婚櫎鐨勬崘鐚喅瀹�
+ handleRemovedDecision(decision) {
+ // 鏍规嵁涓氬姟闇�姹傛坊鍔犳竻鐞嗛�昏緫
+ const relatedOrgans = this.organDecisionMapping[decision] || [];
+ relatedOrgans.forEach(organ => {
+ // 鍙互鍦ㄨ繖閲屾坊鍔犳竻鐞嗙浉鍏冲櫒瀹樿瘎浼扮殑閫昏緫
+ });
+ },
+
+ // 纭繚鍣ㄥ畼瀛樺湪锛堝甫閲嶅妫�鏌ワ級
+ ensureOrganExists(organName) {
+ // 妫�鏌ユ槸鍚﹀凡瀛樺湪鍚屽悕鍣ㄥ畼璇勪及椤�
+ const exists = this.organAssessmentList.some(
+ organ => organ.organname === organName
+ );
+
+ if (!exists) {
+ // 鍒涘缓鏂扮殑鍣ㄥ畼璇勪及椤�
+ const newOrgan = {
+ id: `organ_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,
+ organno: `ORG${Date.now()}`,
+ organname: organName,
+ gainhospitalname: "寰呭垎閰嶆満鏋�",
+ isbiopsybefore: "0",
+ isbiopsyafter: "0",
+ ismarginalorgan: "0",
+ ispathogenpositive: "0",
+ assessments: [this.getDefaultAssessment(0)],
+ activeAssessmentTab: "assessment_0",
+ expanded: false,
+ createTime: new Date().toISOString()
+ };
+
+ this.organAssessmentList = [...this.organAssessmentList, newOrgan];
+ return true;
+ }
+ return false;
+ },
+
+ // 鑾峰彇璇勪及璇︽儏
+ async getAssessmentDetail() {
+ this.assessmentLoading = true;
+ try {
+ const response = await evaluateBaseInfolist({ infoid: this.infoid });
+
+ if (response.code === 200) {
+ this.handleResponseData(response);
+ } else {
+ this.$message.error("鑾峰彇璇︽儏澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
+ this.$message.error("鑾峰彇璇︽儏澶辫触");
+ } finally {
+ this.assessmentLoading = false;
+ }
+ },
+
+ // 澶勭悊鎺ュ彛鍝嶅簲鏁版嵁
+ handleResponseData(response) {
+ let detailData = null;
+
+ // 鏍规嵁鎺ュ彛瀹為檯杩斿洖鐨勬暟鎹粨鏋勮繘琛岃皟鏁�
+ if (response.data) {
+ if (Array.isArray(response.data)) {
+ detailData = response.data[0] || {};
+ } else if (response.data.rows && Array.isArray(response.data.rows)) {
+ detailData = response.data.rows[0] || {};
+ } else if (Array.isArray(response.data.list)) {
+ detailData = response.data.list[0] || {};
+ } else {
+ detailData = response.data;
+ }
+ } else {
+ detailData = response;
+ }
+
+ // 鏄犲皠瀛楁鍒拌瘎浼版暟鎹�
+ this.assessmentData = {
+ id: detailData.id || this.assessmentId,
+ infoid: detailData.infoid || this.infoid,
+ caseNo: detailData.caseNo || "",
+ name: detailData.name || detailData.donorName || "",
+ sex: detailData.sex || "",
+ age: detailData.age || "",
+ bloodtype: detailData.bloodtype || "",
+ idcardno: detailData.idcardno || "",
+ diagnosisname: detailData.diagnosisname || "",
+ treatmenthospitalname: detailData.treatmenthospitalname || "",
+ coordinatorName: detailData.coordinatorName || "",
+ assessTime: detailData.assessTime || "",
+ assessState: detailData.assessState || "1",
+ assessannex: detailData.assessannex || ""
+ };
+
+ // 澶勭悊鎹愮尞鍐冲畾鏁版嵁
+ if (detailData.organdecision) {
+ this.organdecision = Array.isArray(detailData.organdecision)
+ ? detailData.organdecision
+ : (detailData.organdecision || "").split(",");
+ this.organdecisionOther = detailData.organdecisionOther || "";
+ }
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ this.processOrganAssessmentData(detailData);
+ },
+
+ // 澶勭悊鍣ㄥ畼璇勪及鏁版嵁
+ processOrganAssessmentData(detailData) {
+ let organList = [];
+
+ // 浠庢帴鍙f暟鎹腑鑾峰彇鍣ㄥ畼璇勪及鍒楄〃
+ if (detailData.serviceMedicalevaluationorgans) {
+ if (Array.isArray(detailData.serviceMedicalevaluationorgans)) {
+ organList = detailData.serviceMedicalevaluationorgans;
+ }
+ }
+
+ // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
+ this.organAssessmentList = organList.map(organ => {
+ const assessments = [];
+
+ // 瑙f瀽assesscontent瀛楁涓殑澶氭璇勪及鏁版嵁
+ if (organ.assesscontent) {
+ try {
+ const assessData = typeof organ.assesscontent === "string"
+ ? JSON.parse(organ.assesscontent)
+ : organ.assesscontent;
+
+ if (Array.isArray(assessData)) {
+ assessments.push(
+ ...assessData.map((item, index) => ({
+ ...item,
+ index: index,
+ status: item.status || "assessed"
+ }))
+ );
+ }
+ } catch (error) {
+ console.warn("瑙f瀽璇勪及鍐呭澶辫触:", error);
+ assessments.push(this.getDefaultAssessment(0));
+ }
+ } else {
+ assessments.push(this.getDefaultAssessment(0));
+ }
+
+ return {
+ ...organ,
+ assessments: assessments,
+ activeAssessmentTab: assessments.length > 0 ? "assessment_0" : "summary",
+ expanded: false
+ };
+ });
+ },
+
// 鑾峰彇榛樿璇勪及鏁版嵁缁撴瀯
- getDefaultAssessment() {
+ getDefaultAssessment(index) {
return {
+ index: index,
status: "pending",
assessmentTime: "",
assessor: "",
functionStatus: "",
assessmentOpinion: "",
- attachments: [],
clinicalData: {},
- labResults: {}
+ labResults: {},
+ createTime: new Date().toISOString()
};
},
- // 鑾峰彇璇勪及璇︽儏
- getAssessmentDetail() {
- this.assessmentLoading = true;
- getAssessment(this.assessmentId)
- .then(response => {
- if (response.code === 200) {
- this.assessmentData = response.data.caseInfo;
- this.organAssessmentList = this.transformOrganData(
- response.data.organAssessments || []
- );
- }
- this.assessmentLoading = false;
- })
- .catch(error => {
- console.error("鑾峰彇璇勪及璇︽儏澶辫触:", error);
- this.assessmentLoading = false;
- });
- },
-
- // 杞崲鍣ㄥ畼鏁版嵁鏍煎紡锛屾敮鎸佸娆¤瘎浼�
- transformOrganData(organList) {
- return organList.map(organ => {
- const organName = this.getOrganName(organ.organType);
-
- // 杞崲涓哄娆¤瘎浼扮殑鏁版嵁缁撴瀯
- const assessments = [];
- if (organ.firstAssessment) {
- assessments.push({ ...organ.firstAssessment, index: 0 });
- }
- if (organ.secondAssessment) {
- assessments.push({ ...organ.secondAssessment, index: 1 });
- }
- // 鍙互缁х画娣诲姞鏇村璇勪及...
-
- // 璁剧疆鍣ㄥ畼鍚嶇О鍜岃瘎浼版暟鎹�
- organ.organName = organName;
- organ.assessments = assessments;
- organ.activeAssessmentTab =
- assessments.length > 0 ? "assessment_0" : "summary";
- organ.expanded = false;
-
- // 璁$畻鏁翠綋璇勪及鐘舵��
- organ.assessmentStatus = this.calculateOverallStatus(organ);
-
- return organ;
- });
- },
-
- // 璁$畻鏈�澶ц瘎浼版鏁帮紙鐢ㄤ簬琛ㄥご鏄剧ず锛�
+ // 璁$畻鏈�澶ц瘎浼版鏁�
getMaxAssessmentCount() {
const maxCount = Math.max(
...this.organAssessmentList.map(organ =>
organ.assessments ? organ.assessments.length : 0
)
);
- return Math.max(maxCount, 2); // 鑷冲皯鏄剧ず2鍒�
+ return Math.max(maxCount, 1);
},
- // 璁$畻鏁翠綋璇勪及鐘舵��
- calculateOverallStatus(organ) {
- if (!organ.assessments || organ.assessments.length === 0) return "0";
+ // 鑾峰彇鍣ㄥ畼鏁翠綋鐘舵��
+ getOrganOverallStatus(organ) {
+ if (!organ.assessments || organ.assessments.length === 0) {
+ return "pending";
+ }
const allAssessed = organ.assessments.every(
assessment => assessment.status === "assessed"
@@ -467,14 +804,24 @@
assessment => assessment.status === "assessed"
);
- if (allAssessed) return "1";
- if (someAssessed) return "2";
- return "0";
+ if (allAssessed) return "completed";
+ if (someAssessed) return "assessing";
+ return "pending";
+ },
+
+ getOrganOverallStatusText(organ) {
+ const status = this.getOrganOverallStatus(organ);
+ const statusMap = {
+ pending: "寰呰瘎浼�",
+ assessing: "璇勪及涓�",
+ completed: "宸插畬鎴�"
+ };
+ return statusMap[status] || "鏈煡";
},
// 鍒囨崲灞曞紑琛�
handleToggleExpand(row) {
- const key = row.organType;
+ const key = row.organno;
const index = this.expandedRowKeys.indexOf(key);
if (index > -1) {
@@ -483,83 +830,36 @@
} else {
this.expandedRowKeys = [key];
this.organAssessmentList.forEach(item => {
- item.expanded = item.organType === key;
+ item.expanded = item.organno === key;
});
}
},
// 灞曞紑琛屽彉鍖�
handleExpandChange(row, expandedRows) {
- this.expandedRowKeys = expandedRows.map(item => item.organType);
+ this.expandedRowKeys = expandedRows.map(item => item.organno);
this.organAssessmentList.forEach(item => {
- item.expanded = this.expandedRowKeys.includes(item.organType);
+ item.expanded = this.expandedRowKeys.includes(item.organno);
});
},
// 娣诲姞鏂拌瘎浼�
handleAddNewAssessment(organ) {
const newAssessment = {
- ...this.getDefaultAssessment(),
- index: organ.assessments.length
+ ...this.getDefaultAssessment(organ.assessments.length),
+ assessor: this.currentUser.name
};
organ.assessments.push(newAssessment);
organ.activeAssessmentTab = `assessment_${organ.assessments.length - 1}`;
-
- // 鏇存柊鏁翠綋鐘舵��
- organ.assessmentStatus = this.calculateOverallStatus(organ);
this.$message.success("宸叉坊鍔犳柊鐨勮瘎浼�");
},
// 澶勭悊娣诲姞璇勪及浜嬩欢
handleAddAssessment(data) {
- const { organData, currentIndex } = data;
+ const { organData } = data;
this.handleAddNewAssessment(organData);
- },
-
- // 淇濆瓨璇勪及
- handleSaveOrganAssessment(saveData) {
- const { organData, assessmentData, assessmentIndex } = saveData;
-
- const organToUpdate = {
- ...organData,
- assessments: organData.assessments.map((assessment, index) =>
- index === assessmentIndex
- ? {
- ...assessmentData,
- status: "assessed",
- assessmentTime: new Date().toISOString(),
- assessor: this.currentUser.name
- }
- : assessment
- )
- };
-
- // 鏇存柊鏁翠綋鐘舵��
- organToUpdate.assessmentStatus = this.calculateOverallStatus(
- organToUpdate
- );
-
- updateOrganAssessment(organToUpdate)
- .then(response => {
- if (response.code === 200) {
- this.$message.success(`绗�${assessmentIndex + 1}娆¤瘎浼颁繚瀛樻垚鍔焋);
- this.getAssessmentDetail();
-
- // 鏇存柊褰撳墠灞曞紑琛岀殑鏁版嵁
- const index = this.organAssessmentList.findIndex(
- item => item.organType === organData.organType
- );
- if (index !== -1) {
- this.organAssessmentList.splice(index, 1, organToUpdate);
- }
- }
- })
- .catch(error => {
- console.error("淇濆瓨璇勪及澶辫触:", error);
- this.$message.error("淇濆瓨澶辫触");
- });
},
// 鑾峰彇鏈�鏂拌瘎浼版椂闂�
@@ -572,55 +872,6 @@
return assessed.sort(
(a, b) => new Date(b.assessmentTime) - new Date(a.assessmentTime)
)[0].assessmentTime;
- },
-
- // 鑾峰彇鎵�鏈夐檮浠�
- getAllAttachments(organ) {
- const attachments = [];
-
- if (organ.assessments) {
- organ.assessments.forEach((assessment, index) => {
- if (assessment.attachments) {
- assessment.attachments.forEach(att => {
- attachments.push({
- ...att,
- assessmentIndex: index,
- assessmentNumber: index + 1
- });
- });
- }
- });
- }
-
- return attachments;
- },
-
- // 棰勮闄勪欢
- handlePreviewAttachment(attachment) {
- this.currentPreviewFile = {
- fileName: attachment.fileName,
- fileUrl: attachment.path || attachment.fileUrl,
- fileType: this.getFileType(attachment.fileName)
- };
- this.attachmentVisible = true;
- },
-
- // 鑾峰彇鏂囦欢绫诲瀷
- getFileType(fileName) {
- if (!fileName) return "other";
-
- 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"];
-
- if (imageTypes.includes(extension)) return "image";
- if (pdfTypes.includes(extension)) return "pdf";
- if (officeTypes.includes(extension)) return "office";
- return "other";
},
// 鑾峰彇璇勪及鐘舵�佹爣绛剧被鍨�
@@ -643,16 +894,16 @@
return textMap[status] || "鏈煡";
},
- // 鑾峰彇鍣ㄥ畼鍚嶇О
- getOrganName(organType) {
- const organ = this.organTypeOptions.find(opt => opt.value === organType);
- return organ ? organ.label : organType;
- },
-
// 妫�鏌ヨ瘎浼版潈闄�
canAssessOrgan(organ) {
+ console.log(organ,'organ');
+
if (this.isCoordinator) return true;
- return organ.department === this.currentDepartment;
+ if (!this.isEdit) return false;
+ return (
+ organ.gainhospitalname &&
+ organ.gainhospitalname.includes(this.currentDepartment)
+ );
},
// 鑾峰彇琛岀被鍚�
@@ -663,46 +914,79 @@
// 鐘舵�佽繃婊ゅ櫒
statusFilter(status) {
const statusMap = {
- "0": "warning",
- "1": "primary",
- "2": "success",
- "3": "danger"
+ "1": "warning",
+ "2": "primary",
+ "3": "success"
};
return statusMap[status] || "info";
},
statusTextFilter(status) {
const statusMap = {
- "0": "寰呰瘎浼�",
- "1": "璇勪及涓�",
- "2": "宸插畬鎴�",
- "3": "宸插叧闂�"
+ "1": "寰呰瘎浼�",
+ "2": "璇勪及涓�",
+ "3": "宸插畬鎴�"
};
return statusMap[status] || "鏈煡";
},
+ // 鏌ョ湅闄勪欢
handleAttachmentPreview() {
- this.attachmentVisible = true;
+ if (this.assessmentData.assessannex) {
+ try {
+ const annexData = typeof this.assessmentData.assessannex === "string"
+ ? JSON.parse(this.assessmentData.assessannex)
+ : this.assessmentData.assessannex;
+
+ if (Array.isArray(annexData) && annexData.length > 0) {
+ this.currentPreviewFile = annexData[0];
+ this.attachmentVisible = true;
+ } else {
+ this.$message.info("鏆傛棤闄勪欢鍙瑙�");
+ }
+ } catch (error) {
+ this.$message.info("闄勪欢鏁版嵁鏍煎紡閿欒");
+ }
+ } else {
+ this.$message.info("鏆傛棤闄勪欢");
+ }
},
- handleCompleteAssessment() {
- this.$confirm("纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�", "纭鎿嶄綔", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- completeAssessment(this.assessmentId)
- .then(response => {
- if (response.code === 200) {
- this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
- this.getAssessmentDetail();
- }
- })
- .catch(error => {
- console.error("瀹屾垚璇勪及澶辫触:", error);
- this.$message.error("鎿嶄綔澶辫触");
- });
- });
+ // 瀹屾垚璇勪及
+ async handleCompleteAssessment() {
+ try {
+ await this.$confirm(
+ "纭瀹屾垚鎵�鏈夊櫒瀹樿瘎浼板悧锛熷畬鎴愬悗灏嗘棤娉曚慨鏀�",
+ "纭鎿嶄綔",
+ {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ }
+ );
+
+ // 鏇存柊璇勪及鐘舵�佷负宸插畬鎴�
+ const updateData = {
+ ...this.assessmentData,
+ assessState: "3",
+ assessTime: new Date().toISOString()
+ };
+
+ const response = await assessedit(updateData);
+
+ if (response.code === 200) {
+ this.$message.success("璇勪及瀹屾垚纭鎴愬姛");
+ this.assessmentData.assessState = "3";
+ this.isEdit = false;
+ } else {
+ this.$message.error("鎿嶄綔澶辫触锛�" + (response.msg || "鏈煡閿欒"));
+ }
+ } catch (error) {
+ if (error !== "cancel") {
+ console.error("瀹屾垚璇勪及澶辫触:", error);
+ this.$message.error("鎿嶄綔澶辫触");
+ }
+ }
}
}
};
@@ -742,6 +1026,14 @@
.assessment-summary {
padding: 10px;
+}
+
+/* 搴曢儴淇濆瓨鎸夐挳鏍峰紡 */
+.footer-actions {
+ margin-top: 20px;
+ text-align: center;
+ padding: 20px;
+ border-top: 1px solid #eaeaea;
}
/* 鍝嶅簲寮忚璁� */
@@ -790,4 +1082,17 @@
.fixed-width .el-button {
margin: 0 2px;
}
+
+/* 鎹愮尞鍐冲畾鏍峰紡浼樺寲 */
+.organ-decision-info {
+ margin: 10px 0;
+ padding: 10px;
+ background-color: #f8f9fa;
+ border-radius: 4px;
+ border-left: 4px solid #409eff;
+}
+
+.decision-tag {
+ margin: 2px 5px;
+}
</style>
--
Gitblit v1.9.3