From dc082351978a1e9f75d7a1471a0ca7ebeac552a5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 01 六月 2026 11:07:50 +0800
Subject: [PATCH] opo维护
---
src/views/business/maintain/maintainInfo.vue | 511 ++++++++++++++++++++++++++++---------------------------
1 files changed, 260 insertions(+), 251 deletions(-)
diff --git a/src/views/business/maintain/maintainInfo.vue b/src/views/business/maintain/maintainInfo.vue
index c530732..ec052b2 100644
--- a/src/views/business/maintain/maintainInfo.vue
+++ b/src/views/business/maintain/maintainInfo.vue
@@ -1,157 +1,25 @@
<template>
<div class="maintenance-detail">
- <!-- 鍩虹淇℃伅 -->
- <el-card class="detail-card">
- <div slot="header" class="clearfix">
- <span class="detail-title">渚涜�呭熀鏈俊鎭�</span>
- <el-button type="success" style="float: right;" @click="handleSave">
- 淇濆瓨淇℃伅
- </el-button>
- </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="gender">
- <el-select v-model="form.sex" 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="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="鎮h�呯姸鎬�" prop="recordstate">
- <el-select v-model="form.recordstate" style="width: 100%">
- <el-option
- v-for="dict in dict.type.sys_DonationCategory || []"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item
- label="鏈畬鎴愬師鍥�"
- prop="incompleteReason"
- v-if="form.recordstate === '5'"
- >
- <el-input
- v-model="form.incompleteReason"
- placeholder="璇疯緭鍏ユ湭瀹屾垚鎹愮尞鐨勫師鍥�"
- />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="涓婃姤鏃堕棿" prop="reporttime">
- <el-date-picker
- v-model="form.reporttime"
- 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="deathTime">
- <el-date-picker
- v-model="form.deathTime"
- 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="coordinatorName">
- <el-input v-model="form.coordinatorName" />
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="琛�鍨�" prop="bloodtype">
- <el-select v-model="form.bloodtype" style="width: 100%">
- <el-option
- v-for="dict in dict.type.sys_BloodType"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- ></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="Rh(D)" prop="rhYin">
- <el-radio-group v-model="form.rhYin">
- <el-radio
- v-for="dict in dict.type.sys_bloodtype_rhd || []"
- :key="dict.value"
- :label="dict.value"
- >{{ dict.label }}</el-radio
- >
- </el-radio-group>
- </el-form-item>
- </el-col>
- </el-row>
-
- <el-form-item label="鐗规畩鐥呭彶" prop="specialMedicalHistory">
- <el-input
- type="textarea"
- :rows="3"
- v-model="form.specialMedicalHistory"
- placeholder="璁板綍鐗规畩鐥呭彶淇℃伅"
- />
- </el-form-item>
- </el-form>
- </el-card>
+ <case-basic-info :case-id="caseId" :show-attachment="true" />
<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"
@click="toggleEditMode"
- style="float: right;"
+ style="float: right;margin-left: 20px;"
>
- {{ isEdit ? "瀹屾垚缂栬緫" : "寮�濮嬬紪杈�" }}
+ 淇濆瓨缂栬緫
+ </el-button>
+ <el-button
+ type="success"
+ size="mini"
+ @click="accomplish"
+ style="float: right;margin-left: 20px;"
+ >
+ 瀹屾垚缂栬緫
</el-button>
</div>
@@ -187,8 +55,17 @@
<el-tag
:type="scope.row.result === '闃存��' ? 'success' : 'danger'"
effect="plain"
+ @click="handleResultClick(scope.row)"
+ style="cursor: pointer;"
>
{{ scope.row.result }}
+ <i
+ v-if="
+ scope.row.result === '闃虫��' && scope.row.positiveDetails
+ "
+ class="el-icon-info"
+ style="margin-left: 4px;"
+ ></i>
</el-tag>
</template>
</el-table-column>
@@ -234,6 +111,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 +221,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
@@ -391,6 +272,7 @@
v-model="cultureForm.result"
placeholder="璇烽�夋嫨鍩瑰吇缁撴灉"
style="width: 100%"
+ @change="handleResultChange"
>
<el-option label="闃存��" value="闃存��" />
<el-option label="闃虫��" value="闃虫��" />
@@ -398,7 +280,19 @@
</el-form-item>
</el-col>
</el-row>
-
+ <el-form-item
+ v-if="cultureForm.result === '闃虫��'"
+ label="闃虫�ц鎯�"
+ prop="positiveDetails"
+ >
+ <el-input
+ type="textarea"
+ :rows="2"
+ v-model="cultureForm.positiveDetails"
+ placeholder="璇疯緭鍏ラ槼鎬х粨鏋滅殑璇︾粏淇℃伅"
+ clearable
+ />
+ </el-form-item>
<el-form-item label="闄勪欢">
<UploadAttachment
ref="cultureUploadAttachment"
@@ -569,6 +463,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 +475,8 @@
FilePreviewDialog,
LiverKidneyPanel,
BloodRoutinePanel,
- UrineRoutinePanel
+ UrineRoutinePanel,
+ CaseBasicInfo
},
dicts: [
"sys_donornode",
@@ -592,7 +489,8 @@
data() {
return {
- isEdit: false,
+ caseId: null,
+ isEdit: true,
currentMaintenanceId: null,
isEditMode: false,
form: {
@@ -626,6 +524,7 @@
cultureType: "",
sampleTime: "",
result: "闃存��",
+ positiveDetails: "", // 鏂板锛氶槼鎬ц鎯�
attachments: []
},
cultureFileList: [],
@@ -638,7 +537,8 @@
],
result: [
{ required: true, message: "璇烽�夋嫨鍩瑰吇缁撴灉", trigger: "change" }
- ]
+ ],
+ positiveDetails: [] // 鍔ㄦ�侀獙璇佽鍒�
},
cultureTypeOptions: [
{ value: "1", label: "琛�鍩瑰吇" },
@@ -686,7 +586,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 +600,8 @@
};
},
created() {
+ this.caseId = this.$route.query.infoid;
+
this.loadMaintenanceData();
},
watch: {
@@ -782,7 +685,46 @@
this.recordLoading = false;
}
},
+ // 澶勭悊鍩瑰吇缁撴灉閫夋嫨鍙樺寲
+ handleResultChange(value) {
+ this.$nextTick(() => {
+ if (value === "闃虫��") {
+ this.cultureRules.positiveDetails = [
+ { required: true, message: "璇疯緭鍏ラ槼鎬ц鎯�", trigger: "blur" }
+ ];
+ } else {
+ this.cultureRules.positiveDetails = [];
+ this.cultureForm.positiveDetails = "";
+ }
+ // 娓呴櫎楠岃瘉
+ if (this.$refs.cultureForm) {
+ this.$refs.cultureForm.clearValidate("positiveDetails");
+ }
+ });
+ },
+ // 澶勭悊鐐瑰嚮鍩瑰吇缁撴灉鏍囩
+ handleResultClick(row) {
+ if (row.result === "闃虫��" && row.positiveDetails) {
+ this.$alert(
+ `<div style="padding: 10px;">
+ <h4 style="margin-bottom: 10px; color: #f56c6c;">闃虫�ц鎯咃細</h4>
+ <div style="background: #fef0f0; padding: 15px; border-radius: 4px; border-left: 4px solid #f56c6c;">
+ <p style="margin: 0; white-space: pre-wrap; line-height: 1.5;">${row.positiveDetails}</p>
+ </div>
+ </div>`,
+ "闃虫�х粨鏋滆鎯�",
+ {
+ dangerouslyUseHTMLString: true,
+ confirmButtonText: "鍏抽棴",
+ customClass: "result-details-dialog",
+ showClose: false
+ }
+ );
+ } else if (row.result === "闃虫��") {
+ this.$message.warning("璇ラ槼鎬ц褰曟殏鏃犺鎯呬俊鎭�");
+ }
+ },
// 淇濆瓨鎵�鏈夋暟鎹�
async handleSave() {
try {
@@ -796,6 +738,9 @@
nursingRecords: this.recordList
}
};
+ if (saveData.state == 1 || !saveData.state) {
+ saveData.state = 2;
+ }
this.extracontentinfo.specialMedicalHistory = this.form.specialMedicalHistory;
let response;
if (this.isEditMode && this.currentMaintenanceId) {
@@ -808,10 +753,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;
@@ -832,7 +780,19 @@
this.handleSave();
}
},
+ accomplish() {
+ this.$confirm("鏄惁瀹屾垚璇ユ渚嬫崘鐚‘璁ゆ楠わ紵", "鎻愰啋", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning"
+ })
+ .then(() => {
+ this.form.state = 3;
+ this.handleSave();
+ })
+ .catch(() => {});
+ },
// 鍩瑰吇璁板綍鐩稿叧鏂规硶
handleAddCulture() {
this.cultureDialogTitle = "鏂板鍩瑰吇璁板綍";
@@ -850,41 +810,64 @@
});
},
+ // 5. 淇敼缂栬緫鍩瑰吇璁板綍鏂规硶
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.cultureForm = {
+ ...row,
+ positiveDetails: row.positiveDetails || "" // 纭繚鏈塸ositiveDetails瀛楁
+ };
+ 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();
+ // 濡傛灉缂栬緫鏃舵槸闃虫�х粨鏋滐紝璁剧疆楠岃瘉瑙勫垯
+ if (row.result === "闃虫��") {
+ this.cultureRules.positiveDetails = [
+ { required: true, message: "璇疯緭鍏ラ槼鎬ц鎯�", trigger: "blur" }
+ ];
+ }
});
},
+ // 6. 淇敼淇濆瓨鍩瑰吇璁板綍鏂规硶
handleSaveCulture() {
this.$refs.cultureForm.validate(valid => {
if (valid) {
this.cultureSaveLoading = true;
- if (this.cultureForm.id) {
+ // 鏋勫缓淇濆瓨鏁版嵁
+ const saveData = {
+ ...this.cultureForm,
+ // 濡傛灉鏄槾鎬э紝娓呯┖闃虫�ц鎯�
+ positiveDetails:
+ this.cultureForm.result === "闃虫��"
+ ? this.cultureForm.positiveDetails || ""
+ : ""
+ };
+
+ if (saveData.id) {
const index = this.cultureList.findIndex(
- item => item.id === this.cultureForm.id
+ item => item.id === saveData.id
);
if (index !== -1) {
- this.cultureList.splice(index, 1, { ...this.cultureForm });
+ this.cultureList.splice(index, 1, { ...saveData });
}
} else {
- this.cultureForm.id = Date.now();
- this.cultureList.push({ ...this.cultureForm });
+ saveData.id = Date.now();
+ this.cultureList.push({ ...saveData });
}
- this.$message.success(this.cultureForm.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
+ this.$message.success(saveData.id ? "淇敼鎴愬姛" : "鏂板鎴愬姛");
this.cultureDialogVisible = false;
this.cultureSaveLoading = false;
}
@@ -915,7 +898,7 @@
.toISOString()
.replace("T", " ")
.substring(0, 19),
- recorder: "褰撳墠鐢ㄦ埛",
+ recorder: store.getters.name,
checkRecord: "",
attachments: []
};
@@ -929,14 +912,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 +1098,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 +1155,10 @@
/** 鑾峰彇鏂囦欢鎵╁睍鍚� */
getFileExtension(filename) {
- return filename.split(".").pop().toLowerCase();
+ return filename
+ .split(".")
+ .pop()
+ .toLowerCase();
},
/** 鏍煎紡鍖栨枃浠跺ぇ灏� */
@@ -1264,4 +1255,22 @@
font-size: 13px;
margin-left: 8px;
}
+/* 7. 娣诲姞涓�浜涙牱寮� */
+.result-details-dialog {
+ width: 500px;
+}
+
+.result-details-dialog .el-message-box__content {
+ padding: 0;
+}
+
+.result-details-dialog .el-message-box__header {
+ background: #fef0f0;
+ border-bottom: 1px solid #fde2e2;
+}
+
+.result-details-dialog .el-message-box__title {
+ color: #f56c6c;
+ font-weight: bold;
+}
</style>
--
Gitblit v1.9.3