From 631c8f37b449b09d19345b76400a39abdb7800f6 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期四, 15 一月 2026 15:48:42 +0800
Subject: [PATCH] api封装档案、上报、转运接入
---
src/views/business/appear/caseDetail.vue | 415 ++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 269 insertions(+), 146 deletions(-)
diff --git a/src/views/business/appear/caseDetail.vue b/src/views/business/appear/caseDetail.vue
index db0dc01..2c9d4b5 100644
--- a/src/views/business/appear/caseDetail.vue
+++ b/src/views/business/appear/caseDetail.vue
@@ -6,33 +6,77 @@
<span class="section-title">鍩烘湰淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鎹愮尞缂栧彿">{{
- caseData.donorNo
+ <el-descriptions-item label="妗堜緥缂栧彿">{{
+ caseData.caseNo || "-"
}}</el-descriptions-item>
<el-descriptions-item label="鎹愮尞鑰呭鍚�">{{
- caseData.donorName
+ caseData.name || "-"
}}</el-descriptions-item>
<el-descriptions-item label="鎬у埆">
- <dict-tag :options="genderOptions" :value="caseData.gender" />
+ <dict-tag
+ :options="dict.type.sys_user_sex"
+ :value="caseData.sex ? parseInt(caseData.sex) : ''"
+ />
</el-descriptions-item>
- <el-descriptions-item label="骞撮緞"
- >{{ caseData.age }}宀�</el-descriptions-item
- >
+ <el-descriptions-item label="骞撮緞">
+ {{ caseData.age || "-"
+ }}{{
+ caseData.ageunit ? `(${getAgeUnitText(caseData.ageunit)})` : ""
+ }}
+ </el-descriptions-item>
<el-descriptions-item label="琛�鍨�">
- <dict-tag :options="bloodTypeOptions" :value="caseData.bloodType" />
+ <dict-tag
+ :options="dict.type.sys_BloodType"
+ :value="caseData.bloodType"
+ />
+ </el-descriptions-item>
+ <el-descriptions-item label="Rh闃存��">
+ {{
+ caseData.rhYin === "1" ? "鏄�" : caseData.rhYin === "0" ? "鍚�" : "-"
+ }}
+ </el-descriptions-item>
+ <el-descriptions-item label="璇佷欢绫诲瀷">
+ {{ getIdCardTypeText(caseData.idcardtype) }}
</el-descriptions-item>
<el-descriptions-item label="璇佷欢鍙风爜">{{
- caseData.idCardNo
+ caseData.idcardno || "-"
}}</el-descriptions-item>
<el-descriptions-item label="姘戞棌">{{
- caseData.nation
+ caseData.nation || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍥界睄">{{
+ caseData.nationality || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="绫嶈疮">{{
+ caseData.nativeplace || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="瀛﹀巻">{{
+ caseData.education || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鑱屼笟">{{
+ caseData.occupation || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍑虹敓鏃ユ湡">{{
+ formatDate(caseData.birthday)
}}</el-descriptions-item>
<el-descriptions-item label="鑱旂郴鐢佃瘽">{{
- caseData.phone
+ caseData.phone || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="浣忓潃" :span="2">{{
- caseData.address
- }}</el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <!-- 鍦板潃淇℃伅妯″潡 -->
+ <el-card class="detail-section">
+ <div slot="header" class="section-header">
+ <span class="section-title">鍦板潃淇℃伅</span>
+ </div>
+ <el-descriptions :column="1" border>
+ <el-descriptions-item label="鎴风睄鍦板潃">
+ {{ getFullRegisterAddress() }}
+ </el-descriptions-item>
+ <el-descriptions-item label="鐜颁綇鍦板潃">
+ {{ getFullResidenceAddress() }}
+ </el-descriptions-item>
</el-descriptions>
</el-card>
@@ -42,24 +86,29 @@
<span class="section-title">鍖荤枟淇℃伅</span>
</div>
<el-descriptions :column="1" border>
- <el-descriptions-item label="鐤剧梾璇婃柇">{{
- caseData.diagnosis
+ <el-descriptions-item label="鐤剧梾璇婃柇鍚嶇О">{{
+ caseData.diagnosisname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="浣忛櫌鍙�">{{
- caseData.inpatientNo
+ <el-descriptions-item label="鐥呮儏姒傚喌">{{
+ caseData.illnessoverview || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鎵�鍦ㄧ瀹�">{{
- caseData.departmentName
+ <el-descriptions-item label="鐥呬汉鐘跺喌">{{
+ caseData.patientstate || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="涓绘不鍖荤敓">{{
- caseData.doctorName
+ <el-descriptions-item label="GCS璇勫垎">{{
+ caseData.gcsScore || "-"
}}</el-descriptions-item>
<el-descriptions-item label="浼犳煋鐥呮儏鍐�">{{
- caseData.infectiousDisease || "鏃�"
+ caseData.infectious || "鏃�"
}}</el-descriptions-item>
- <el-descriptions-item label="鍖荤枟璁板綍">{{
- caseData.medicalRecord
- }}</el-descriptions-item>
+ <el-descriptions-item
+ label="浼犳煋鐥呭叾浠栬鏄�"
+ v-if="caseData.infectiousOther"
+ >{{ caseData.infectiousOther }}</el-descriptions-item
+ >
+ <el-descriptions-item label="鏄惁闇�瑕佽浆杩�">
+ {{ caseData.isTransport === "2" ? "闇�瑕�" : "涓嶉渶瑕�" }}
+ </el-descriptions-item>
</el-descriptions>
</el-card>
@@ -69,31 +118,60 @@
<span class="section-title">鍖婚櫌淇℃伅</span>
</div>
<el-descriptions :column="2" border>
- <el-descriptions-item label="鍖婚櫌鍚嶇О">{{
- caseData.hospitalName
+ <el-descriptions-item label="娌荤枟鍖婚櫌鍚嶇О">{{
+ caseData.treatmenthospitalname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鍖婚櫌绾у埆">{{
- caseData.hospitalLevel
+ <el-descriptions-item label="娌荤枟绉戝鍚嶇О">{{
+ caseData.treatmentdeptname || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鑱旂郴浜�">{{
- caseData.contactPerson
+ <el-descriptions-item label="浣忛櫌鍙�">{{
+ caseData.inpatientno || "-"
}}</el-descriptions-item>
- <el-descriptions-item label="鑱旂郴鐢佃瘽">{{
- caseData.contactPhone
- }}</el-descriptions-item>
- <el-descriptions-item label="鍖婚櫌鍦板潃" :span="2">{{
- caseData.hospitalAddress
+ <el-descriptions-item label="閮ㄩ棬鍚嶇О">{{
+ caseData.deptName || "-"
}}</el-descriptions-item>
</el-descriptions>
</el-card>
- <!-- 闄勪欢淇℃伅妯″潡 -->
+ <!-- 涓婃姤淇℃伅妯″潡 -->
<el-card class="detail-section">
<div slot="header" class="section-header">
+ <span class="section-title">涓婃姤淇℃伅</span>
+ </div>
+ <el-descriptions :column="2" border>
+ <el-descriptions-item label="鎶ュ憡鑰呭鍚�">{{
+ caseData.infoName || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鑰呯紪鍙�">{{
+ caseData.infoNo || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鑰呰仈绯荤數璇�">{{
+ caseData.reporterphone || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樺鍚�">{{
+ caseData.coordinatorName || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鍗忚皟鍛樼紪鍙�">{{
+ caseData.coordinatorNo || "-"
+ }}</el-descriptions-item>
+ <el-descriptions-item label="涓婃姤鐘舵��">
+ <el-tag :type="getStatusType(caseData.reportStatus)">
+ {{ getStatusText(caseData.reportStatus) }}
+ </el-tag>
+ </el-descriptions-item>
+ <el-descriptions-item label="鎶ュ憡鏃堕棿">{{
+ formatDateTime(caseData.reporttime)
+ }}</el-descriptions-item>
+ <el-descriptions-item label="鏄惁缁堟妗堜緥">
+ {{ caseData.terminationCase === "1" ? "宸茬粓姝�" : "杩涜涓�" }}
+ </el-descriptions-item>
+ </el-descriptions>
+ </el-card>
+
+ <!-- 闄勪欢淇℃伅妯″潡 -->
+ <el-card class="detail-section" v-if="attachmentList.length > 0">
+ <div slot="header" class="section-header">
<span class="section-title">闄勪欢淇℃伅</span>
- <el-button type="text" icon="el-icon-upload" @click="handleUpload"
- >涓婁紶闄勪欢</el-button
- >
</div>
<el-table :data="attachmentList" style="width: 100%">
<el-table-column label="鏂囦欢鍚�" width="300">
@@ -128,36 +206,33 @@
@click="handleDownload(scope.row)"
>涓嬭浇</el-button
>
- <el-button
- size="mini"
- type="danger"
- @click="handleDelete(scope.row)"
- >鍒犻櫎</el-button
- >
</template>
</el-table-column>
</el-table>
</el-card>
- <!-- 瀹℃壒淇℃伅妯″潡锛堝鏈夛級 -->
- <el-card class="detail-section" v-if="caseData.status !== '0'">
+ <!-- 瀹℃壒淇℃伅妯″潡锛堢姸鎬佷负宸插悓鎰忔垨宸查┏鍥炴椂鏄剧ず锛� -->
+ <el-card
+ class="detail-section"
+ v-if="caseData.reportStatus === '3' || caseData.reportStatus === '4'"
+ >
<div slot="header" class="section-header">
<span class="section-title">瀹℃壒淇℃伅</span>
</div>
<el-descriptions :column="1" border>
<el-descriptions-item label="瀹℃壒缁撴灉">
- <el-tag :type="caseData.status | statusFilter">
- {{ caseData.status | statusTextFilter }}
+ <el-tag :type="caseData.reportStatus === '3' ? 'success' : 'danger'">
+ {{ caseData.reportStatus === "3" ? "宸插悓鎰�" : "宸查┏鍥�" }}
</el-tag>
</el-descriptions-item>
<el-descriptions-item label="瀹℃壒鏃堕棿">{{
- caseData.approveTime
+ formatDateTime(caseData.updateTime)
}}</el-descriptions-item>
<el-descriptions-item label="瀹℃壒浜�">{{
- caseData.approverName
+ caseData.updateBy || "-"
}}</el-descriptions-item>
<el-descriptions-item label="瀹℃壒鎰忚">{{
- caseData.approveOpinion
+ caseData.remark || "鏃�"
}}</el-descriptions-item>
</el-descriptions>
</el-card>
@@ -302,6 +377,7 @@
default: true
}
},
+ dicts: ["sys_user_sex", "sys_BloodType"],
filters: {
statusFilter(status) {
const statusMap = {
@@ -322,74 +398,159 @@
},
data() {
return {
- activeTab: "basic",
- genderOptions: [
- { value: "0", label: "鐢�" },
- { value: "1", label: "濂�" }
- ],
- bloodTypeOptions: [
- { value: "A", label: "A鍨�" },
- { value: "B", label: "B鍨�" },
- { value: "O", label: "O鍨�" },
- { value: "AB", label: "AB鍨�" }
- ],
-
- // 闄勪欢鐩稿叧鏁版嵁
- attachmentList: [
- {
- id: 1,
- fileName: "鎹愮尞鑰呰韩浠借瘉.jpg",
- fileType: "jpg",
- fileSize: 1024000,
- uploadTime: "2024-12-19 10:30:00",
- fileUrl: "https://img95.699pic.com/photo/40142/8262.jpg_wh860.jpg"
- },
- {
- id: 2,
- fileName: "鍖荤枟璇婃柇璇佹槑.pdf",
- fileType: "pdf",
- fileSize: 2048000,
- uploadTime: "2024-12-19 11:20:00",
- fileUrl:
- "http://192.168.100.10:8080/profile/upload/2025/12/19/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨1766131266142.pdf"
- },
- {
- id: 3,
- fileName: "妫�楠屾姤鍛婂崟.jpg",
- fileType: "docx",
- fileSize: 512000,
- uploadTime: "2024-12-19 14:15:00",
- fileUrl: "https://img95.699pic.com/photo/40019/3490.jpg_wh860.jpg"
- }
- ],
-
- // PDF棰勮鐩稿叧鏁版嵁
+ // 棰勮鐩稿叧鏁版嵁锛堜繚鎸佸師鏈変唬鐮侊級
pdfPreviewVisible: false,
+ imagePreviewVisible: false,
+ unsupportedPreviewVisible: false,
pdfLoading: false,
pdfUrl: "",
currentPage: 1,
pageCount: 0,
scale: 100,
pageRotate: 0,
-
- // 鍥剧墖棰勮鐩稿叧
- imagePreviewVisible: false,
-
- // 涓嶆敮鎸侀瑙堢浉鍏�
- unsupportedPreviewVisible: false,
-
- // 閫氱敤棰勮鏁版嵁
previewTitle: "",
previewUrl: "",
- currentFile: null
+ currentFile: null,
+
+ // 闄勪欢鍒楄〃
+ attachmentList: []
};
+ },
+ watch: {
+ caseData: {
+ immediate: true,
+ handler(newVal) {
+ if (newVal && newVal.annexfilesList) {
+ this.loadAttachments(newVal.annexfilesList);
+ }
+ }
+ }
},
methods: {
handleClose() {
this.$emit("close");
},
- // 鑾峰彇鏂囦欢绫诲瀷
+ // 鍔犺浇闄勪欢
+ loadAttachments(annexfilesList) {
+ if (!annexfilesList || !Array.isArray(annexfilesList)) {
+ this.attachmentList = [];
+ return;
+ }
+
+ this.attachmentList = annexfilesList.map((file, index) => ({
+ id: index + 1,
+ fileName: file.fileName || `闄勪欢${index + 1}`,
+ fileType: this.getFileExtension(file.fileUrl || ""),
+ fileSize: file.fileSize || 0,
+ uploadTime: file.uploadTime || this.formatDateTime(new Date()),
+ fileUrl: file.fileUrl || ""
+ }));
+ },
+
+ // 鑾峰彇鏂囦欢鎵╁睍鍚�
+ getFileExtension(filename) {
+ return (
+ filename
+ .split(".")
+ .pop()
+ ?.toLowerCase() || "unknown"
+ );
+ },
+
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ formatDateTime(dateString) {
+ if (!dateString) return "-";
+ return dateString.replace("T", " ").substring(0, 19);
+ },
+
+ // 鏍煎紡鍖栨棩鏈�
+ formatDate(dateString) {
+ if (!dateString) return "-";
+ return dateString.split("T")[0];
+ },
+
+ // 鑾峰彇瀹屾暣鎴风睄鍦板潃
+ getFullRegisterAddress() {
+ const {
+ registerprovincename,
+ registercityname,
+ registertownname,
+ registercommunityname,
+ registeraddress
+ } = this.caseData;
+ const addressParts = [
+ registerprovincename,
+ registercityname,
+ registertownname,
+ registercommunityname,
+ registeraddress
+ ];
+ return addressParts.filter(part => part).join("") || "-";
+ },
+
+ // 鑾峰彇瀹屾暣鐜颁綇鍦板潃
+ getFullResidenceAddress() {
+ const {
+ residenceprovincename,
+ residencecountyname,
+ residencetownname,
+ residencecommunityname,
+ residenceaddress
+ } = this.caseData;
+ const addressParts = [
+ residenceprovincename,
+ residencecountyname,
+ residencetownname,
+ residencecommunityname,
+ residenceaddress
+ ];
+ return addressParts.filter(part => part).join("") || "-";
+ },
+
+ // 鑾峰彇鐘舵�佹枃鏈�
+ getStatusText(status) {
+ const statusMap = {
+ "1": "宸蹭笂鎶�",
+ "2": "宸查槄璇�",
+ "3": "宸插悓鎰�",
+ "4": "宸查┏鍥�"
+ };
+ return statusMap[status] || "鏈煡鐘舵��";
+ },
+
+ // 鑾峰彇鐘舵�佺被鍨�
+ getStatusType(status) {
+ const statusMap = {
+ "1": "info",
+ "2": "warning",
+ "3": "success",
+ "4": "danger"
+ };
+ return statusMap[status] || "info";
+ },
+
+ // 鑾峰彇骞撮緞鍗曚綅鏂囨湰
+ getAgeUnitText(unit) {
+ const unitMap = {
+ year: "宀�",
+ month: "鏈�",
+ day: "澶�"
+ };
+ return unitMap[unit] || unit;
+ },
+
+ // 鑾峰彇璇佷欢绫诲瀷鏂囨湰
+ getIdCardTypeText(type) {
+ const typeMap = {
+ "1": "韬唤璇�",
+ "2": "鎶ょ収",
+ "3": "鍐涘畼璇�"
+ };
+ return typeMap[type] || type || "-";
+ },
+
+ // 鏂囦欢棰勮鐩稿叧鏂规硶锛堜繚鎸佸師鏈変唬鐮侊級
getFileType(fileName) {
const extension = fileName
.split(".")
@@ -397,13 +558,11 @@
.toLowerCase();
const imageTypes = ["jpg", "jpeg", "png", "gif", "bmp", "webp"];
const pdfTypes = ["pdf"];
-
if (imageTypes.includes(extension)) return "image";
if (pdfTypes.includes(extension)) return "pdf";
return "other";
},
- // 鏂囦欢棰勮涓诲叆鍙�
handlePreview(file) {
this.currentFile = file;
this.previewTitle = `棰勮 - ${file.fileName}`;
@@ -423,7 +582,6 @@
}
},
- // PDF棰勮鏂规硶
previewPdf(file) {
this.pdfPreviewVisible = true;
this.pdfLoading = true;
@@ -433,13 +591,11 @@
this.pdfUrl = file.fileUrl;
},
- // PDF鍔犺浇瀹屾垚鍥炶皟
loadPdfHandler() {
this.pdfLoading = false;
this.currentPage = 1;
},
- // PDF鍔犺浇閿欒澶勭悊
pdfErrorHandler(error) {
console.error("PDF鍔犺浇澶辫触:", error);
this.pdfLoading = false;
@@ -447,26 +603,18 @@
this.pdfPreviewVisible = false;
},
- // 缈婚〉鍔熻兘
changePage(newPage) {
if (newPage < 1 || newPage > this.pageCount) return;
this.currentPage = newPage;
},
- // 缂╂斁鍔熻兘
zoomIn() {
- if (this.scale >= 200) {
- this.$message.info("宸叉斁澶у埌鏈�澶ф瘮渚�");
- return;
- }
+ if (this.scale >= 200) return;
this.scale += 10;
},
zoomOut() {
- if (this.scale <= 50) {
- this.$message.info("宸茬缉灏忓埌鏈�灏忔瘮渚�");
- return;
- }
+ if (this.scale <= 50) return;
this.scale -= 10;
},
@@ -474,24 +622,20 @@
this.scale = 100;
},
- // 鍥剧墖棰勮鏂规硶
previewImage(file) {
this.imagePreviewVisible = true;
},
- // 涓嶆敮鎸侀瑙堢殑鏂囦欢绫诲瀷
previewUnsupported(file) {
this.unsupportedPreviewVisible = true;
},
- // PDF瀵硅瘽妗嗗叧闂鐞�
handlePdfDialogClose() {
this.pdfUrl = "";
this.currentPage = 1;
this.pageCount = 0;
},
- // 鏂囦欢涓嬭浇
handleDownload(file) {
const link = document.createElement("a");
link.href = file.fileUrl;
@@ -503,31 +647,10 @@
this.$message.success("寮�濮嬩笅杞芥枃浠�");
},
- // 涓撶敤PDF涓嬭浇鏂规硶
downloadPdf(file) {
this.handleDownload(file);
},
- // 鏂囦欢鍒犻櫎
- handleDelete(file) {
- this.$confirm("纭畾瑕佸垹闄よ繖涓檮浠跺悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- this.attachmentList = this.attachmentList.filter(
- item => item.id !== file.id
- );
- this.$message.success("鍒犻櫎鎴愬姛");
- });
- },
-
- // 涓婁紶闄勪欢
- handleUpload() {
- this.$message.info("涓婁紶鍔熻兘寰呭疄鐜�");
- },
-
- // 鏍煎紡鍖栨枃浠跺ぇ灏�
formatFileSize(bytes) {
if (bytes === 0) return "0 B";
const k = 1024;
--
Gitblit v1.9.3