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