From e2eb5acfb3961315df21abfe6f33a959699b562b Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 30 十二月 2025 09:49:07 +0800
Subject: [PATCH] 页面维护

---
 src/views/business/transfer/transportDetail.vue |  413 ++++++++++++++++++++++++----------------------------------
 1 files changed, 172 insertions(+), 241 deletions(-)

diff --git a/src/views/business/transfer/transportDetail.vue b/src/views/business/transfer/transportDetail.vue
index 1f66b4b..1bd298a 100644
--- a/src/views/business/transfer/transportDetail.vue
+++ b/src/views/business/transfer/transportDetail.vue
@@ -1,193 +1,132 @@
 <template>
-  <div class="transport-detail">
-    <el-tabs v-model="activeTab">
-      <!-- 鍩虹淇℃伅 -->
-      <el-tab-pane label="鍩虹淇℃伅" name="basic">
-        <el-descriptions :column="2" border>
-          <el-descriptions-item label="杞繍鍗曞彿">{{
-            transportData.id
-          }}</el-descriptions-item>
-          <el-descriptions-item label="妗堜緥缂栧彿">{{
-            transportData.caseNo
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鎹愮尞鑰呭鍚�">{{
-            transportData.donorName
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鎬у埆">{{
-            transportData.gender
-          }}</el-descriptions-item>
-          <el-descriptions-item label="骞撮緞"
-            >{{ transportData.age }}宀�</el-descriptions-item
-          >
-          <el-descriptions-item label="鐤剧梾璇婃柇">{{
-            transportData.diagnosis
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鍑哄彂鍖婚櫌">{{
-            transportData.hospitalName
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鐩殑鍖婚櫌">{{
-            transportData.destinationHospital
-          }}</el-descriptions-item>
-          <el-descriptions-item label="璁″垝杞繍鏃堕棿">{{
-            transportData.transportTime
-          }}</el-descriptions-item>
-          <el-descriptions-item label="璐熻矗鍗忚皟鍛�">{{
-            transportData.coordinator
-          }}</el-descriptions-item>
-          <el-descriptions-item label="杞繍鐘舵��">
-            <el-tag :type="transportData.status | statusFilter">
-              {{ transportData.statusText }}
-            </el-tag>
-          </el-descriptions-item>
-          <el-descriptions-item label="鍒涘缓鏃堕棿">{{
-            transportData.createTime
-          }}</el-descriptions-item>
-          <el-descriptions-item
-            label="瀹屾垚鏃堕棿"
-            v-if="transportData.completedTime"
-          >
-            {{ transportData.completedTime }}
-          </el-descriptions-item>
-        </el-descriptions>
-      </el-tab-pane>
+  <div class="transport-detail-container">
+    <!-- 鍩虹淇℃伅妯″潡 -->
+    <el-card class="detail-section">
+      <div slot="header" class="section-header">
+        <i class="el-icon-document" style="color: #409EFF; margin-right: 8px;"></i>
+        <span class="section-title">鍩虹淇℃伅</span>
+      </div>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="杞繍鍗曞彿">{{ transportData.id }}</el-descriptions-item>
+        <el-descriptions-item label="浣忛櫌鍙�">{{ transportData.caseNo }}</el-descriptions-item>
+        <el-descriptions-item label="鎹愮尞鑰呭鍚�">{{ transportData.donorName }}</el-descriptions-item>
+        <el-descriptions-item label="鎬у埆">{{ transportData.gender }}</el-descriptions-item>
+        <el-descriptions-item label="骞撮緞">{{ transportData.age }}宀�</el-descriptions-item>
+        <el-descriptions-item label="鐤剧梾璇婃柇">{{ transportData.diagnosis }}</el-descriptions-item>
+        <el-descriptions-item label="鍑哄彂鍖婚櫌">{{ transportData.hospitalName }}</el-descriptions-item>
+        <el-descriptions-item label="鐩殑鍖婚櫌">{{ transportData.destinationHospital }}</el-descriptions-item>
+        <el-descriptions-item label="璁″垝杞繍鏃堕棿">{{ transportData.transportTime }}</el-descriptions-item>
+        <el-descriptions-item label="璐熻矗鍗忚皟鍛�">{{ transportData.coordinator }}</el-descriptions-item>
+        <el-descriptions-item label="杞繍鐘舵��">
+          <el-tag :type="transportData.status | statusFilter">
+            {{ transportData.statusText }}
+          </el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item label="鍒涘缓鏃堕棿">{{ transportData.createTime }}</el-descriptions-item>
+        <el-descriptions-item label="瀹屾垚鏃堕棿" v-if="transportData.completedTime">
+          {{ transportData.completedTime }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-card>
 
-      <!-- 杞繍璇︽儏 -->
-      <el-tab-pane label="杞繍璇︽儏" name="transport">
-        <el-descriptions :column="1" border>
-          <el-descriptions-item label="鍑哄彂鍦扮偣">{{
-            transportData.departureLocation
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鐩殑鍦�">{{
-            transportData.destinationHospital
-          }}</el-descriptions-item>
-          <el-descriptions-item
-            label="褰撳墠浣嶇疆"
-            v-if="transportData.currentLocation"
-          >
-            {{ transportData.currentLocation }}
-          </el-descriptions-item>
-          <el-descriptions-item
-            label="棰勮鍒拌揪鏃堕棿"
-            v-if="transportData.estimatedTime"
-          >
-            {{ transportData.estimatedTime }}
-          </el-descriptions-item>
-          <el-descriptions-item label="杞繍璺濈" v-if="transportData.distance">
-            {{ transportData.distance }}
-          </el-descriptions-item>
-          <el-descriptions-item label="杞繍鏃堕暱" v-if="transportData.duration">
-            {{ transportData.duration }}
-          </el-descriptions-item>
-        </el-descriptions>
-      </el-tab-pane>
+    <!-- 杞繍璇︽儏妯″潡 -->
+    <el-card class="detail-section">
+      <div slot="header" class="section-header">
+        <i class="el-icon-location-information" style="color: #67C23A; margin-right: 8px;"></i>
+        <span class="section-title">杞繍璇︽儏</span>
+      </div>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="鍑哄彂鍦扮偣">{{ transportData.departureLocation }}</el-descriptions-item>
+        <el-descriptions-item label="鐩殑鍦�">{{ transportData.destinationHospital }}</el-descriptions-item>
+        <el-descriptions-item label="褰撳墠浣嶇疆" v-if="transportData.currentLocation">
+          {{ transportData.currentLocation }}
+        </el-descriptions-item>
+        <el-descriptions-item label="棰勮鍒拌揪鏃堕棿" v-if="transportData.estimatedTime">
+          {{ transportData.estimatedTime }}
+        </el-descriptions-item>
+        <el-descriptions-item label="杞繍璺濈" v-if="transportData.distance">
+          {{ transportData.distance }}
+        </el-descriptions-item>
+        <el-descriptions-item label="杞繍鏃堕暱" v-if="transportData.duration">
+          {{ transportData.duration }}
+        </el-descriptions-item>
+      </el-descriptions>
+    </el-card>
 
-      <!-- 鍥㈤槦鎴愬憳 -->
-      <el-tab-pane label="鍥㈤槦鎴愬憳" name="team">
-        <el-descriptions :column="2" border>
-          <el-descriptions-item label="鍗忚皟鍛�">{{
-            transportData.coordinator
-          }}</el-descriptions-item>
-          <el-descriptions-item label="鍗忚皟鍛樼數璇�">
-            {{ getContactPhone("鍗忚皟鍛樼數璇�") }}
-          </el-descriptions-item>
-          <el-descriptions-item
-            label="鎬ヨ瘖绉戝尰鐢�"
-            v-if="transportData.emergencyDoctor"
-          >
-            {{ transportData.emergencyDoctor }}
-          </el-descriptions-item>
-          <el-descriptions-item label="鎬ヨ瘖鍖荤敓鐢佃瘽">
-            {{ getContactPhone("鎬ヨ瘖鍖荤敓鐢佃瘽") }}
-          </el-descriptions-item>
-          <el-descriptions-item label="鎶ゅ+" v-if="transportData.nurse">
-            {{ transportData.nurse }}
-          </el-descriptions-item>
-          <el-descriptions-item label="鎶ゅ+鐢佃瘽">
-            {{ getContactPhone("鎶ゅ+鐢佃瘽") }}
-          </el-descriptions-item>
-          <el-descriptions-item label="鍙告満" v-if="transportData.driver">
-            {{ transportData.driver }}
-          </el-descriptions-item>
-          <el-descriptions-item label="鍙告満鐢佃瘽">
-            {{ getContactPhone("鍙告満鐢佃瘽") }}
-          </el-descriptions-item>
-          <el-descriptions-item
-            label="ICU璇勪及鍖荤敓"
-            v-if="transportData.icuDoctor"
-          >
-            {{ transportData.icuDoctor }}
-          </el-descriptions-item>
-          <el-descriptions-item label="ICU鍖荤敓鐢佃瘽">
-            {{ getContactPhone("ICU鍖荤敓鐢佃瘽") }}
-          </el-descriptions-item>
-        </el-descriptions>
-      </el-tab-pane>
-      <el-tab-pane label="闄勪欢淇℃伅" name="attachments">
-        <el-card class="attachment-card">
-          <div slot="header" class="clearfix">
-            <span>闄勪欢鍒楄〃</span>
-            <!-- <el-button
-              style="float: right; padding: 3px 0"
-              type="text"
-              @click="handleUpload"
-            >
-              涓婁紶闄勪欢
-            </el-button> -->
-          </div>
+    <!-- 鍥㈤槦鎴愬憳妯″潡 -->
+    <el-card class="detail-section">
+      <div slot="header" class="section-header">
+        <i class="el-icon-user" style="color: #E6A23C; margin-right: 8px;"></i>
+        <span class="section-title">鍥㈤槦鎴愬憳</span>
+      </div>
+      <el-descriptions :column="2" border>
+        <el-descriptions-item label="鍗忚皟鍛�">{{ transportData.coordinator }}</el-descriptions-item>
+        <el-descriptions-item label="鍗忚皟鍛樼數璇�">{{ getContactPhone("鍗忚皟鍛樼數璇�") }}</el-descriptions-item>
+        <el-descriptions-item label="鎬ヨ瘖绉戝尰鐢�" v-if="transportData.emergencyDoctor">
+          {{ transportData.emergencyDoctor }}
+        </el-descriptions-item>
+        <el-descriptions-item label="鎬ヨ瘖鍖荤敓鐢佃瘽">{{ getContactPhone("鎬ヨ瘖鍖荤敓鐢佃瘽") }}</el-descriptions-item>
+        <el-descriptions-item label="鎶ゅ+" v-if="transportData.nurse">{{ transportData.nurse }}</el-descriptions-item>
+        <el-descriptions-item label="鎶ゅ+鐢佃瘽">{{ getContactPhone("鎶ゅ+鐢佃瘽") }}</el-descriptions-item>
+        <el-descriptions-item label="鍙告満" v-if="transportData.driver">{{ transportData.driver }}</el-descriptions-item>
+        <el-descriptions-item label="鍙告満鐢佃瘽">{{ getContactPhone("鍙告満鐢佃瘽") }}</el-descriptions-item>
+        <el-descriptions-item label="ICU璇勪及鍖荤敓" v-if="transportData.icuDoctor">
+          {{ transportData.icuDoctor }}
+        </el-descriptions-item>
+        <el-descriptions-item label="ICU鍖荤敓鐢佃瘽">{{ getContactPhone("ICU鍖荤敓鐢佃瘽") }}</el-descriptions-item>
+      </el-descriptions>
+    </el-card>
 
-          <el-table :data="attachmentList" style="width: 100%">
-            <el-table-column label="鏂囦欢鍚�" width="300">
-              <template slot-scope="scope">
-                <i class="el-icon-document" style="margin-right: 8px;"></i>
-                <span>{{ scope.row.fileName }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="鏂囦欢绫诲瀷" width="120">
-              <template slot-scope="scope">
-                <el-tag size="small">{{ scope.row.fileType }}</el-tag>
-              </template>
-            </el-table-column>
-            <el-table-column label="澶у皬" width="100">
-              <template slot-scope="scope">
-                <span>{{ formatFileSize(scope.row.fileSize) }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="涓婁紶鏃堕棿" width="180">
-              <template slot-scope="scope">
-                <span>{{ scope.row.uploadTime }}</span>
-              </template>
-            </el-table-column>
-            <el-table-column label="鎿嶄綔">
-              <template slot-scope="scope">
-                <el-button size="mini" @click="handlePreview(scope.row)"
-                  >棰勮</el-button
-                >
-                <el-button
-                  size="mini"
-                  type="success"
-                  @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-tab-pane>
-      <!-- 澶囨敞淇℃伅 -->
-      <el-tab-pane label="澶囨敞淇℃伅" name="remarks" v-if="transportData.remarks">
-        <el-card>
-          <div class="remarks-content">
-            {{ transportData.remarks }}
-          </div>
-        </el-card>
-      </el-tab-pane>
-    </el-tabs>
+    <!-- 闄勪欢淇℃伅妯″潡 -->
+    <el-card class="detail-section" v-if="attachmentList.length > 0">
+      <div slot="header" class="section-header">
+        <i class="el-icon-folder" style="color: #F56C6C; margin-right: 8px;"></i>
+        <span class="section-title">闄勪欢淇℃伅</span>
+      </div>
+      <el-table :data="attachmentList" style="width: 100%">
+        <el-table-column label="鏂囦欢鍚�" width="300">
+          <template slot-scope="scope">
+            <i class="el-icon-document" style="margin-right: 8px;"></i>
+            <span>{{ scope.row.fileName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鏂囦欢绫诲瀷" width="120">
+          <template slot-scope="scope">
+            <el-tag size="small">{{ scope.row.fileType }}</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column label="澶у皬" width="100">
+          <template slot-scope="scope">
+            <span>{{ formatFileSize(scope.row.fileSize) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="涓婁紶鏃堕棿" width="180">
+          <template slot-scope="scope">
+            <span>{{ scope.row.uploadTime }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔">
+          <template slot-scope="scope">
+            <el-button size="mini" @click="handlePreview(scope.row)">棰勮</el-button>
+            <el-button size="mini" type="success" @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="transportData.remarks">
+      <div slot="header" class="section-header">
+        <i class="el-icon-edit" style="color: #909399; margin-right: 8px;"></i>
+        <span class="section-title">澶囨敞淇℃伅</span>
+      </div>
+      <div class="remarks-content">
+        {{ transportData.remarks }}
+      </div>
+    </el-card>
+
+    <!-- 棰勮寮圭獥锛堜繚鎸佷笉鍙橈級 -->
     <!-- PDF棰勮寮圭獥 -->
     <el-dialog
       :title="previewTitle"
@@ -268,9 +207,9 @@
       </div>
     </el-dialog>
 
-    <!-- 鍥剧墖棰勮寮圭獥锛堜娇鐢‥lement UI鑷甫棰勮锛� -->
+    <!-- 鍥剧墖棰勮寮圭獥 -->
     <el-dialog
-    :append-to-body="true"
+      :append-to-body="true"
       :title="previewTitle"
       :visible.sync="imagePreviewVisible"
       width="60%"
@@ -303,6 +242,7 @@
         </div>
       </div>
     </el-dialog>
+
     <div class="detail-footer">
       <el-button @click="handleClose">鍏抽棴</el-button>
     </div>
@@ -336,7 +276,6 @@
   },
   data() {
     return {
-      activeTab: "basic",
       // 闄勪欢鐩稿叧鏁版嵁
       attachmentList: [
         {
@@ -353,8 +292,7 @@
           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"
+          fileUrl: "http://192.168.100.10:8080/profile/upload/2025/12/19/(鍚撮緳8.7)姣忔棩宸ヤ綔鎬荤粨1766131266142.pdf"
         },
         {
           id: 3,
@@ -435,24 +373,23 @@
       }
     },
 
-    // PDF棰勮鏂规硶 [1,2](@ref)
+    // PDF棰勮鏂规硶
     previewPdf(file) {
       this.pdfPreviewVisible = true;
       this.pdfLoading = true;
       this.currentPage = 1;
       this.scale = 100;
       this.pageRotate = 0;
-      // 璁剧疆PDF婧� [4](@ref)
       this.pdfUrl = file.fileUrl;
     },
 
-    // PDF鍔犺浇瀹屾垚鍥炶皟 [1,2](@ref)
+    // PDF鍔犺浇瀹屾垚鍥炶皟
     loadPdfHandler() {
       this.pdfLoading = false;
       this.currentPage = 1;
     },
 
-    // PDF鍔犺浇閿欒澶勭悊 [4](@ref)
+    // PDF鍔犺浇閿欒澶勭悊
     pdfErrorHandler(error) {
       console.error("PDF鍔犺浇澶辫触:", error);
       this.pdfLoading = false;
@@ -460,14 +397,13 @@
       this.pdfPreviewVisible = false;
     },
 
-    // 缈婚〉鍔熻兘 [2](@ref)
+    // 缈婚〉鍔熻兘
     changePage(newPage) {
       if (newPage < 1 || newPage > this.pageCount) return;
-
       this.currentPage = newPage;
     },
 
-    // 缂╂斁鍔熻兘 [2,3](@ref)
+    // 缂╂斁鍔熻兘
     zoomIn() {
       if (this.scale >= 200) {
         this.$message.info("宸叉斁澶у埌鏈�澶ф瘮渚�");
@@ -514,7 +450,6 @@
       document.body.appendChild(link);
       link.click();
       document.body.removeChild(link);
-
       this.$message.success("寮�濮嬩笅杞芥枃浠�");
     },
 
@@ -536,25 +471,6 @@
         this.$message.success("鍒犻櫎鎴愬姛");
       });
     },
-    // 涓婁紶闄勪欢
-    handleUpload() {
-      this.$message.info("涓婁紶鍔熻兘寰呭疄鐜�");
-    },
-
-    // 鍘熸湁鏂规硶淇濇寔涓嶅彉
-    getContactPhone(role) {
-      if (this.transportData.contacts) {
-        const contact = this.transportData.contacts.find(
-          item => item.role === role
-        );
-        return contact ? contact.phone : "鏈~鍐�";
-      }
-      return "鏈~鍐�";
-    },
-
-    handleClose() {
-      this.$emit("close");
-    },
 
     formatFileSize(bytes) {
       if (bytes === 0) return "0 B";
@@ -568,11 +484,35 @@
 </script>
 
 <style scoped>
-.transport-detail {
-  padding: 0 20px;
+.transport-detail-container {
+  max-height: 70vh;
+  overflow-y: auto;
+  padding: 0 10px;
 }
 
-/* PDF棰勮瀵硅瘽妗嗘牱寮� */
+.detail-section {
+  margin-bottom: 16px;
+}
+
+.section-header {
+  display: flex;
+  align-items: center;
+}
+
+.section-title {
+  font-size: 16px;
+  font-weight: bold;
+  color: #303133;
+}
+
+.remarks-content {
+  padding: 15px;
+  line-height: 1.6;
+  color: #606266;
+  white-space: pre-line;
+}
+
+/* PDF棰勮鐩稿叧鏍峰紡淇濇寔涓嶅彉 */
 .pdf-preview-dialog {
   margin-top: 5vh !important;
 }
@@ -596,7 +536,6 @@
   height: 100%;
 }
 
-/* PDF宸ュ叿鏍忔牱寮� */
 .pdf-toolbar {
   padding: 15px 20px;
   background: #f5f7fa;
@@ -612,7 +551,6 @@
   margin: 0 15px;
 }
 
-/* PDF瑙嗗浘鍖哄煙鏍峰紡 */
 .pdf-viewport {
   flex: 1;
   overflow: auto;
@@ -623,7 +561,6 @@
   align-items: flex-start;
 }
 
-/* 鍥剧墖棰勮鏍峰紡 */
 .image-preview-container {
   text-align: center;
   padding: 20px;
@@ -635,8 +572,19 @@
   box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
 }
 
+.detail-footer {
+  text-align: center;
+  margin-top: 20px;
+  padding-top: 20px;
+  border-top: 1px solid #ebeef5;
+}
+
 /* 鍝嶅簲寮忚璁� */
 @media (max-width: 768px) {
+  .transport-detail-container {
+    padding: 0 5px;
+  }
+
   .pdf-toolbar {
     flex-direction: column;
     gap: 10px;
@@ -645,23 +593,6 @@
   .zoom-controls {
     margin: 10px 0;
   }
-
-  .pdf-preview-dialog {
-    width: 95% !important;
-  }
-}
-
-.detail-footer {
-  text-align: center;
-  margin-top: 20px;
-  padding-top: 20px;
-  border-top: 1px solid #ebeef5;
-}
-
-.remarks-content {
-  padding: 15px;
-  line-height: 1.6;
-  color: #606266;
 }
 
 ::v-deep .el-descriptions__label {

--
Gitblit v1.9.3