From 4d9da000fbe74d344e0e4580b138e79d4ad98ede Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 01 六月 2026 11:07:14 +0800
Subject: [PATCH] 维护

---
 pages/case/CaseInfo.vue |  615 ++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 357 insertions(+), 258 deletions(-)

diff --git a/pages/case/CaseInfo.vue b/pages/case/CaseInfo.vue
index 71f1daf..27c0c31 100644
--- a/pages/case/CaseInfo.vue
+++ b/pages/case/CaseInfo.vue
@@ -4,26 +4,39 @@
     <view class="header-card">
       <view class="case-header">
         <view class="hospital-info">
-          <image :src="caseDetail.hospitalLogo" mode="aspectFit" class="hospital-logo" />
+          <image
+            :src="caseDetail.hospitalLogo"
+            mode="aspectFit"
+            class="hospital-logo"
+          />
           <view class="hospital-details">
-            <text class="hospital-name">{{ caseDetail.treatmenthospitalname || '鏈~鍐欐不鐤楀尰闄�' }}</text>
-            <text class="case-type">{{ caseDetail.donorNo ? '鍣ㄥ畼鎹愮尞妗堜緥' : '妗堜緥璇︽儏' }}</text>
+            <text class="hospital-name">{{
+              caseDetail.treatmenthospitalname || "鏈~鍐欐不鐤楀尰闄�"
+            }}</text>
+            <text class="case-type">{{
+              caseDetail.donorNo ? "鍣ㄥ畼鎹愮尞妗堜緥" : "妗堜緥璇︽儏"
+            }}</text>
           </view>
         </view>
-        <view class="case-status" :class="getStatusClass(caseDetail.reportStatus)">
+        <view
+          class="case-status"
+          :class="getStatusClass(caseDetail.reportStatus)"
+        >
           {{ getStatusText(caseDetail.reportStatus) }}
         </view>
       </view>
-      
+
       <view class="case-basic-info">
         <view class="info-row">
           <view class="info-item">
             <text class="label">妗堜緥缂栧彿</text>
-            <text class="value">{{ caseDetail.caseNo || '鏈敓鎴�' }}</text>
+            <text class="value">{{ caseDetail.caseNo || "鏈敓鎴�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">涓婃姤鏃堕棿</text>
-            <text class="value">{{ formatDateTime(caseDetail.reporttime) }}</text>
+            <text class="value">{{
+              formatDateTime(caseDetail.reporttime)
+            }}</text>
           </view>
         </view>
       </view>
@@ -31,8 +44,8 @@
 
     <!-- 閫夐」鍗″鑸� -->
     <view class="tab-navigation">
-      <text 
-        v-for="tab in tabs" 
+      <text
+        v-for="tab in tabs"
         :key="tab.id"
         :class="{ active: activeTab === tab.id }"
         @tap="switchTab(tab.id)"
@@ -51,7 +64,7 @@
         <view class="info-grid">
           <view class="info-item">
             <text class="label">濮撳悕</text>
-            <text class="value">{{ caseDetail.name || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.name || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">鎬у埆</text>
@@ -59,43 +72,52 @@
           </view>
           <view class="info-item">
             <text class="label">骞撮緞</text>
-            <text class="value">{{ caseDetail.age || '0' }} {{ getAgeUnitText(caseDetail.ageunit) }}</text>
+            <text class="value"
+              >{{ caseDetail.age || "0" }}
+              {{ getAgeUnitText(caseDetail.ageunit) }}</text
+            >
           </view>
           <view class="info-item">
             <text class="label">璇佷欢鍙风爜</text>
-            <text class="value">{{ caseDetail.idcardno || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.idcardno || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">琛�鍨�</text>
-            <text class="value">{{ getBloodTypeText(caseDetail.bloodType) }}</text>
+            <text class="value">{{
+              getBloodTypeText(caseDetail.bloodType)
+            }}</text>
           </view>
           <view class="info-item">
             <text class="label">姘戞棌</text>
-            <text class="value">{{ caseDetail.nation || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.nation || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">鍥界睄</text>
-            <text class="value">{{ caseDetail.nationality || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.nationality || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">绫嶈疮</text>
-            <text class="value">{{ caseDetail.nativeplace || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.nativeplace || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">瀛﹀巻</text>
-            <text class="value">{{ caseDetail.education || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.education || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">鑱屼笟</text>
-            <text class="value">{{ caseDetail.occupation || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.occupation || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item full-width">
             <text class="label">鎴风睄鍦板潃</text>
-            <text class="value">{{ getFullRegisterAddress() || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              getFullRegisterAddress() || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-item full-width">
             <text class="label">鐜颁綇鍦板潃</text>
-            <text class="value">{{ getFullResidenceAddress() || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              getFullResidenceAddress() || "鏈~鍐�"
+            }}</text>
           </view>
         </view>
       </view>
@@ -110,31 +132,50 @@
         <view class="info-content">
           <view class="info-group">
             <text class="group-title">鐤剧梾璇婃柇</text>
-            <text class="group-content">{{ caseDetail.diagnosisname || '鏈~鍐�' }}</text>
+            <text class="group-content">{{
+              caseDetail.diagnosisname || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-group">
             <text class="group-title">鐥呮儏姒傚喌</text>
-            <text class="group-content">{{ caseDetail.illnessoverview || '鏈~鍐�' }}</text>
+            <text class="group-content">{{
+              caseDetail.illnessoverview || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-group">
             <text class="group-title">鐥呬汉鐘跺喌</text>
-            <text class="group-content">{{ caseDetail.patientstate || '鏈~鍐�' }}</text>
+            <text class="group-content">{{
+              caseDetail.patientstate || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-group">
             <text class="group-title">浣忛櫌鍙�</text>
-            <text class="group-content">{{ caseDetail.inpatientno || '鏈~鍐�' }}</text>
+            <text class="group-content">{{
+              caseDetail.inpatientno || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-group">
             <text class="group-title">GCS璇勫垎</text>
-            <text class="group-content">{{ caseDetail.gcsScore || '鏈瘎浼�' }}</text>
+            <text class="group-content">{{
+              caseDetail.gcsScore || "鏈瘎浼�"
+            }}</text>
           </view>
           <view class="info-group">
             <text class="group-title">浼犳煋鐥呮儏鍐�</text>
-            <text class="group-content">{{ caseDetail.infectious || '鏃�' }}{{ caseDetail.infectiousOther ? `(${caseDetail.infectiousOther})` : '' }}</text>
+            <text class="group-content"
+              >{{ caseDetail.infectious || "鏃�"
+              }}{{
+                caseDetail.infectiousOther
+                  ? `(${caseDetail.infectiousOther})`
+                  : ""
+              }}</text
+            >
           </view>
           <view class="info-group">
             <text class="group-title">Rh闃存��</text>
-            <text class="group-content">{{ caseDetail.rhYin === '1' ? '鏄�' : '鍚�' }}</text>
+            <text class="group-content">{{
+              caseDetail.rhYin === "1" ? "鏄�" : "鍚�"
+            }}</text>
           </view>
         </view>
       </view>
@@ -149,43 +190,53 @@
         <view class="info-grid">
           <view class="info-item full-width">
             <text class="label">娌荤枟鍖婚櫌</text>
-            <text class="value">{{ caseDetail.treatmenthospitalname || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              caseDetail.treatmenthospitalname || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-item">
             <text class="label">娌荤枟绉戝</text>
-            <text class="value">{{ caseDetail.treatmentdeptname || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              caseDetail.treatmentdeptname || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-item">
             <text class="label">涓婃姤鍖婚櫌</text>
-            <text class="value">{{ caseDetail.toHospital || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.toHospital || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item full-width">
             <text class="label">鑱旂郴鐢佃瘽</text>
-            <text class="value">{{ caseDetail.phone || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.phone || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">淇℃伅鍛�</text>
-            <text class="value">{{ caseDetail.infoName || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.infoName || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
             <text class="label">淇℃伅鍛樼紪鍙�</text>
-            <text class="value">{{ caseDetail.infoNo || '鏈~鍐�' }}</text>
+            <text class="value">{{ caseDetail.infoNo || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
-            <text class="label">鎶ュ憡鑰�</text>
-            <text class="value">{{ caseDetail.reportername || '鏈~鍐�' }}</text>
+            <text class="label">ICU璇勪及鍖荤敓</text>
+            <text class="value">{{ caseDetail.icuDoctor || "鏈~鍐�" }}</text>
           </view>
           <view class="info-item">
-            <text class="label">鎶ュ憡鑰呯數璇�</text>
-            <text class="value">{{ caseDetail.reporterphone || '鏈~鍐�' }}</text>
+            <text class="label">ICU鍖荤敓鐢佃瘽</text>
+            <text class="value">{{
+              caseDetail.icuDoctorPhone || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-item">
             <text class="label">鍗忚皟鍛�</text>
-            <text class="value">{{ caseDetail.coordinatorName || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              caseDetail.coordinatorName || "鏈~鍐�"
+            }}</text>
           </view>
           <view class="info-item">
             <text class="label">鍗忚皟鍛樼紪鍙�</text>
-            <text class="value">{{ caseDetail.coordinatorNo || '鏈~鍐�' }}</text>
+            <text class="value">{{
+              caseDetail.coordinatorNo || "鏈~鍐�"
+            }}</text>
           </view>
         </view>
       </view>
@@ -195,20 +246,29 @@
     <view v-if="activeTab === 'transport'" class="info-section fade-in-up">
       <view class="section-card">
         <view class="section-header">
-          <view style="display: flex; justify-content: space-between; align-items: center;">
+          <view
+            style="
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+            "
+          >
             <text class="section-title">杞繍淇℃伅</text>
             <!-- 杞繍鎿嶄綔鎸夐挳 -->
-            <view v-if="caseDetail.reportStatus === '3'" style="display: flex; gap: 20rpx;">
-              <button 
-                v-if="caseDetail.isTransport === '2' && !hasTransport" 
-                class="small-btn primary" 
+            <view
+              v-if="caseDetail.reportStatus === '3'"
+              style="display: flex; gap: 20rpx"
+            >
+              <button
+                v-if="caseDetail.isTransport === '2' && !hasTransport"
+                class="small-btn primary"
                 @tap.stop="createTransport"
               >
                 鍒涘缓杞繍鍗�
               </button>
-              <button 
-                v-if="hasTransport" 
-                class="small-btn secondary" 
+              <button
+                v-if="hasTransport"
+                class="small-btn secondary"
                 @tap.stop="viewTransportDetail"
               >
                 鏌ョ湅杞繍鍗�
@@ -216,27 +276,42 @@
             </view>
           </view>
         </view>
-        
+
         <view class="info-content">
           <view class="info-group">
             <text class="group-title">鏄惁闇�瑕佽浆杩�</text>
-            <text class="group-content">{{ caseDetail.isTransport === '2' ? '闇�瑕�' : '涓嶉渶瑕�' }}</text>
+            <text class="group-content">{{
+              caseDetail.isTransport === "2" ? "闇�瑕�" : "涓嶉渶瑕�"
+            }}</text>
           </view>
-          
+
           <!-- 鏈夎浆杩愪俊鎭椂鏄剧ず -->
-          <view v-if="hasTransport && caseDetail.serviceTransport" class="transport-info">
-            <view class="info-group" v-for="transport in caseDetail.serviceTransport" :key="transport.id">
+          <view
+            v-if="hasTransport && caseDetail.serviceTransport"
+            class="transport-info"
+          >
+            <view
+              class="info-group"
+              v-for="transport in caseDetail.serviceTransport"
+              :key="transport.id"
+            >
               <view class="sub-group">
                 <text class="sub-label">杞繍鍗曞彿:</text>
-                <text class="sub-value">{{ transport.reportId || transport.id }}</text>
+                <text class="sub-value">{{
+                  transport.reportId || transport.id
+                }}</text>
               </view>
               <view class="sub-group">
                 <text class="sub-label">鍑哄彂鍦扮偣:</text>
-                <text class="sub-value">{{ transport.transportStartPlace }}</text>
+                <text class="sub-value">{{
+                  transport.transportStartPlace
+                }}</text>
               </view>
               <view class="sub-group">
                 <text class="sub-label">鍑哄彂鏃堕棿:</text>
-                <text class="sub-value">{{ formatDateTime(transport.transportStartTime) }}</text>
+                <text class="sub-value">{{
+                  formatDateTime(transport.transportStartTime)
+                }}</text>
               </view>
               <view class="sub-group">
                 <text class="sub-label">璐熻矗鍗忚皟鍛�:</text>
@@ -244,7 +319,10 @@
               </view>
               <view class="sub-group">
                 <text class="sub-label">杞繍鐘舵��:</text>
-                <text class="sub-value status" :class="getTransportStatusClass(transport.transitStatus)">
+                <text
+                  class="sub-value status"
+                  :class="getTransportStatusClass(transport.transitStatus)"
+                >
                   {{ getTransportStatusText(transport.transitStatus) }}
                 </text>
               </view>
@@ -266,17 +344,23 @@
               </view>
             </view>
           </view>
-          
+
           <!-- 鏃犺浆杩愪俊鎭絾闇�瑕佽浆杩� -->
-          <view v-else-if="caseDetail.isTransport === '2'" class="transport-info">
+          <view
+            v-else-if="caseDetail.isTransport === '2'"
+            class="transport-info"
+          >
             <view class="empty-transport">
               <text>璇ユ渚嬮渶瑕佽浆杩愶紝浣嗗皻鏈垱寤鸿浆杩愬崟</text>
-              <text v-if="caseDetail.reportStatus !== '3'" style="color: #f0ad4e; font-size: 24rpx; margin-top: 10rpx;">
+              <text
+                v-if="caseDetail.reportStatus !== '3'"
+                style="color: #f0ad4e; font-size: 24rpx; margin-top: 10rpx"
+              >
                 闇�鍏堝鎵瑰悓鎰忔墠鑳藉垱寤鸿浆杩愬崟
               </text>
             </view>
           </view>
-          
+
           <!-- 鏃犻渶杞繍 -->
           <view v-else class="transport-info">
             <view class="empty-transport">
@@ -290,14 +374,18 @@
     <!-- 鎿嶄綔鎸夐挳 -->
     <view class="action-bar">
       <button class="action-btn secondary" @tap="goBack">杩斿洖</button>
-      
+
       <!-- 鏍规嵁鐘舵�佹樉绀轰笉鍚屾搷浣� -->
-      <button v-if="caseDetail.reportStatus === '1' || caseDetail.reportStatus === '2'" 
-              class="action-btn primary" 
-              @tap="handleEdit">
+      <button
+        v-if="
+          caseDetail.reportStatus === '1' || caseDetail.reportStatus === '2'
+        "
+        class="action-btn primary"
+        @tap="handleEdit"
+      >
         缂栬緫妗堜緥
       </button>
-      
+
       <!-- <button v-if="canDelete" 
               class="action-btn error" 
               @tap="handleDelete">
@@ -311,80 +399,84 @@
 </template>
 
 <script setup>
-import { ref, computed, onMounted } from 'vue'
-import { onLoad } from '@dcloudio/uni-app'
-import { useDict } from "@/utils/dict"
+import { ref, computed, onMounted } from "vue";
+import { onLoad } from "@dcloudio/uni-app";
+import { useDict } from "@/utils/dict";
 
 // 瀛楀吀鏁版嵁
-const dict = ref({})
+const dict = ref({});
 
 // 鏁版嵁
-const caseDetail = ref({})
-const loading = ref(false)
-const activeTab = ref('basic')
-const caseId = ref(null)
+const caseDetail = ref({});
+const loading = ref(false);
+const activeTab = ref("basic");
+const caseId = ref(null);
 
 // 閫夐」鍗�
 const tabs = ref([
-  { id: 'basic', label: '鍩烘湰淇℃伅' },
-  { id: 'medical', label: '鍖荤枟淇℃伅' },
-  { id: 'contact', label: '鑱旂郴淇℃伅' },
-  { id: 'transport', label: '杞繍淇℃伅' }
-])
+  { id: "basic", label: "鍩烘湰淇℃伅" },
+  { id: "medical", label: "鍖荤枟淇℃伅" },
+  { id: "contact", label: "鑱旂郴淇℃伅" },
+  { id: "transport", label: "杞繍淇℃伅" },
+]);
 
 // 璁$畻灞炴��
 const hasTransport = computed(() => {
-  return caseDetail.value.serviceTransport
-})
+  return caseDetail.value.serviceTransport;
+});
 
 const canDelete = computed(() => {
   // 鍏佽鍒犻櫎鏈鎵规垨宸查┏鍥炵殑妗堜緥
-  return caseDetail.value.reportStatus === '1' || 
-         caseDetail.value.reportStatus === '2' || 
-         caseDetail.value.reportStatus === '4'
-})
+  return (
+    caseDetail.value.reportStatus === "1" ||
+    caseDetail.value.reportStatus === "2" ||
+    caseDetail.value.reportStatus === "4"
+  );
+});
 
 onLoad(async (options) => {
   if (options.id) {
-    caseId.value = options.id
+    caseId.value = options.id;
     // 鑾峰彇瀛楀吀鏁版嵁
     dict.value = await useDict(
       "sys_user_sex",
       "sys_BloodType",
       "sys_IDType",
-      "sys_AgeUnit"
-    )
+      "sys_AgeUnit",
+    );
     // 鍔犺浇妗堜緥璇︽儏
-    await loadCaseDetail(options.id)
+    await loadCaseDetail(options.id);
   }
-})
+});
 
 // 鍔犺浇妗堜緥璇︽儏
 const loadCaseDetail = async (id) => {
-  loading.value = true
+  loading.value = true;
   try {
-    const res = await uni.$uapi.get(`/project/donatebaseinforeport/getInfo/${id}`)
-    
-    if (res) {
-      caseDetail.value = res
-      
+    const res = await uni.$uapi.get(
+      `/project/donatebaseinforeport/getInfo/${id}`,
+    );
+
+    if (res.data) {
+      caseDetail.value = res.data;
+
       // 濡傛灉鐘舵�佹槸"宸蹭笂鎶�"(1)锛岃嚜鍔ㄦ洿鏂颁负"宸查槄璇�"(2)
-      if (caseDetail.value.reportStatus === '1') {
-        await updateCaseStatus('2')
-      }
+      // if (caseDetail.value.reportStatus === '1') {
+      //   await updateCaseStatus('2')
+      // }
     } else {
-      throw new Error(res.msg || '鏁版嵁鍔犺浇澶辫触')
+      throw new Error(res.msg || "鏁版嵁鍔犺浇澶辫触");
     }
   } catch (error) {
-    console.error('鍔犺浇妗堜緥璇︽儏澶辫触:', error)
+    console.error("鍔犺浇妗堜緥璇︽儏澶辫触:", error);
     uni.showToast({
-      title: '鏁版嵁鍔犺浇澶辫触锛岃閲嶈瘯',
-      icon: 'none'
-    })
+      title: "鏁版嵁鍔犺浇澶辫触锛岃閲嶈瘯",
+      icon: "none",
+    });
   } finally {
-    loading.value = false
+    loading.value = false;
   }
-}
+};
 
 // 鏇存柊妗堜緥鐘舵��
 const updateCaseStatus = async (newStatus) => {
@@ -392,203 +484,210 @@
     const updateData = {
       ...caseDetail.value,
       reportStatus: newStatus,
-      updateTime: new Date().toISOString().replace('T', ' ').substring(0, 19),
-      updateBy: '绉诲姩绔敤鎴�'
-    }
-    
-    const res = await uni.$uapi.post("/project/donatebaseinforeport/edit", updateData)
-    
+      updateTime: new Date().toISOString().replace("T", " ").substring(0, 19),
+      updateBy: "绉诲姩绔敤鎴�",
+    };
+
+    const res = await uni.$uapi.post(
+      "/project/donatebaseinforeport/edit",
+      updateData,
+    );
+
     if (res.code === 200) {
-      caseDetail.value.reportStatus = newStatus
+      caseDetail.value.reportStatus = newStatus;
     }
   } catch (error) {
-    console.error('鏇存柊鐘舵�佸け璐�:', error)
+    console.error("鏇存柊鐘舵�佸け璐�:", error);
   }
-}
+};
 
 // 鑾峰彇鐘舵�佹牱寮�
 const getStatusClass = (status) => {
   const map = {
-    '1': 'reported',
-    '2': 'read',
-    '3': 'agreed',
-    '4': 'rejected'
-  }
-  return map[status] || 'reported'
-}
+    1: "reported",
+    2: "read",
+    3: "agreed",
+    4: "rejected",
+  };
+  return map[status] || "reported";
+};
 
 // 鑾峰彇鐘舵�佹枃鏈�
 const getStatusText = (status) => {
   const map = {
-    '1': '宸蹭笂鎶�',
-    '2': '宸查槄璇�',
-    '3': '宸插悓鎰�',
-    '4': '宸查┏鍥�'
-  }
-  return map[status] || '宸蹭笂鎶�'
-}
+    1: "宸蹭笂鎶�",
+    2: "宸查槄璇�",
+    3: "宸插悓鎰�",
+    4: "宸查┏鍥�",
+  };
+  return map[status] || "宸蹭笂鎶�";
+};
 
 // 鑾峰彇鎬у埆鏂囨湰
 const getGenderText = (gender) => {
-  if (!dict.value.sys_user_sex) return gender
-  const genderItem = dict.value.sys_user_sex.find(item => item.dictValue === gender)
-  return genderItem ? genderItem.dictLabel : gender
-}
+  if (!dict.value.sys_user_sex) return gender;
+  const genderItem = dict.value.sys_user_sex.find(
+    (item) => item.dictValue === gender,
+  );
+  return genderItem ? genderItem.dictLabel : gender;
+};
 
 // 鑾峰彇琛�鍨嬫枃鏈�
 const getBloodTypeText = (bloodType) => {
-  if (!dict.value.sys_BloodType) return bloodType
-  const bloodTypeItem = dict.value.sys_BloodType.find(item => item.dictValue === bloodType)
-  return bloodTypeItem ? bloodTypeItem.dictLabel : bloodType
-}
+  if (!dict.value.sys_BloodType) return bloodType;
+  const bloodTypeItem = dict.value.sys_BloodType.find(
+    (item) => item.dictValue === bloodType,
+  );
+  return bloodTypeItem ? bloodTypeItem.dictLabel : bloodType;
+};
 
 // 鑾峰彇骞撮緞鍗曚綅鏂囨湰
 const getAgeUnitText = (ageunit) => {
-  if (!ageunit) return ''
+  if (!ageunit) return "";
   const unitMap = {
-    'year': '宀�',
-    'month': '涓湀',
-    'day': '澶�'
-  }
-  return unitMap[ageunit] || ageunit
-}
+    year: "宀�",
+    month: "涓湀",
+    day: "澶�",
+  };
+  return unitMap[ageunit] || ageunit;
+};
 
 // 鑾峰彇瀹屾暣鎴风睄鍦板潃
 const getFullRegisterAddress = () => {
-  const { 
-    registerprovincename, 
-    registercityname, 
-    registertownname, 
-    registercommunityname, 
-    registeraddress 
-  } = caseDetail.value
-  
+  const {
+    registerprovincename,
+    registercityname,
+    registertownname,
+    registercommunityname,
+    registeraddress,
+  } = caseDetail.value;
+
   const parts = [
     registerprovincename,
     registercityname,
     registertownname,
     registercommunityname,
-    registeraddress
-  ]
-  return parts.filter(part => part).join('')
-}
+    registeraddress,
+  ];
+  return parts.filter((part) => part).join("");
+};
 
 // 鑾峰彇瀹屾暣鐜颁綇鍦板潃
 const getFullResidenceAddress = () => {
-  const { 
-    residenceprovincename, 
-    residencecountyname, 
-    residencetownname, 
-    residencecommunityname, 
-    residenceaddress 
-  } = caseDetail.value
-  
+  const {
+    residenceprovincename,
+    residencecountyname,
+    residencetownname,
+    residencecommunityname,
+    residenceaddress,
+  } = caseDetail.value;
+
   const parts = [
     residenceprovincename,
     residencecountyname,
     residencetownname,
     residencecommunityname,
-    residenceaddress
-  ]
-  return parts.filter(part => part).join('')
-}
+    residenceaddress,
+  ];
+  return parts.filter((part) => part).join("");
+};
 
 // 鑾峰彇杞繍鐘舵�佹枃鏈�
 const getTransportStatusText = (status) => {
   const map = {
-    1: '寰呰浆杩�',
-    2: '杞繍涓�',
-    3: '杞繍瀹屾垚',
-    4: '杞繍鍙栨秷',
-    5: '鏆傚瓨'
-  }
-  return map[status] || '鏈煡'
-}
+    1: "寰呰浆杩�",
+    2: "杞繍涓�",
+    3: "杞繍瀹屾垚",
+    4: "杞繍鍙栨秷",
+    5: "鏆傚瓨",
+  };
+  return map[status] || "鏈煡";
+};
 
 // 鑾峰彇杞繍鐘舵�佹牱寮�
 const getTransportStatusClass = (status) => {
   const map = {
-    1: 'pending',
-    2: 'transporting',
-    3: 'completed',
-    4: 'cancelled',
-    5: 'draft'
-  }
-  return map[status] || 'pending'
-}
+    1: "pending",
+    2: "transporting",
+    3: "completed",
+    4: "cancelled",
+    5: "draft",
+  };
+  return map[status] || "pending";
+};
 
 // 鏍煎紡鍖栨棩鏈熸椂闂�
 const formatDateTime = (dateTime) => {
-  if (!dateTime) return ''
-  return dateTime.replace('T', ' ').substring(0, 16)
-}
+  if (!dateTime) return "";
+  return dateTime.replace("T", " ").substring(0, 16);
+};
 
 // 閫夐」鍗″垏鎹�
 const switchTab = (tabId) => {
-  activeTab.value = tabId
-}
+  activeTab.value = tabId;
+};
 
 // 杩斿洖
 const goBack = () => {
-  uni.navigateBack()
-}
+  uni.navigateBack();
+};
 
 // 缂栬緫妗堜緥
 const handleEdit = () => {
   uni.navigateTo({
-    url: `/pages/case/CaseDetails?id=${caseId.value}&edit=true`
-  })
-}
-
-
+    url: `/pages/case/CaseDetails?id=${caseId.value}&edit=true`,
+  });
+};
 
 // 鍒犻櫎妗堜緥
 const handleDelete = () => {
   uni.showModal({
-    title: '纭鍒犻櫎',
+    title: "纭鍒犻櫎",
     content: `纭畾瑕佸垹闄ゆ渚� ${caseDetail.value.caseNo} 鍚楋紵`,
     success: async (res) => {
       if (res.confirm) {
         try {
-          const result = await uni.$uapi.delete(`/project/donatebaseinforeport/${caseId.value}`)
+          const result = await uni.$uapi.delete(
+            `/project/donatebaseinforeport/${caseId.value}`,
+          );
           if (result.code === 200) {
-            uni.showToast({ title: '鍒犻櫎鎴愬姛', icon: 'success' })
+            uni.showToast({ title: "鍒犻櫎鎴愬姛", icon: "success" });
             setTimeout(() => {
-              uni.navigateBack()
-            }, 1500)
+              uni.navigateBack();
+            }, 1500);
           } else {
-            uni.showToast({ title: result.msg || '鍒犻櫎澶辫触', icon: 'none' })
+            uni.showToast({ title: result.msg || "鍒犻櫎澶辫触", icon: "none" });
           }
         } catch (error) {
-          console.error('鍒犻櫎澶辫触:', error)
-          uni.showToast({ title: '鍒犻櫎澶辫触', icon: 'none' })
+          console.error("鍒犻櫎澶辫触:", error);
+          uni.showToast({ title: "鍒犻櫎澶辫触", icon: "none" });
         }
       }
-    }
-  })
-}
+    },
+  });
+};
 
 // 鍒涘缓杞繍鍗�
 const createTransport = () => {
-  if (caseDetail.value.reportStatus !== '3') {
-    uni.showToast({ title: '妗堜緥闇�鍏堝鎵瑰悓鎰�', icon: 'none' })
-    return
+  if (caseDetail.value.reportStatus !== "3") {
+    uni.showToast({ title: "妗堜緥闇�鍏堝鎵瑰悓鎰�", icon: "none" });
+    return;
   }
-  
+
   uni.navigateTo({
-    url: `/pages/transport/create?caseId=${caseId.value}&caseNo=${caseDetail.value.caseNo}`
-  })
-}
+    url: `/pages/transport/create?caseId=${caseId.value}&caseNo=${caseDetail.value.caseNo}`,
+  });
+};
 
 // 鏌ョ湅杞繍鍗曡鎯�
 const viewTransportDetail = () => {
   if (hasTransport.value && caseDetail.value.serviceTransport[0]) {
-    const transport = caseDetail.value.serviceTransport[0]
+    const transport = caseDetail.value.serviceTransport[0];
     uni.navigateTo({
-      url: `/pages/transport/detail?id=${transport.id}`
-    })
+      url: `/pages/transport/detail?id=${transport.id}`,
+    });
   }
-}
+};
 </script>
 
 <style lang="scss" scoped>
@@ -604,7 +703,7 @@
   border-radius: 32rpx;
   padding: 40rpx 30rpx;
   margin-bottom: 30rpx;
-  box-shadow: 0 12px 48px 0 rgba(0, 113, 227, 0.10);
+  box-shadow: 0 12px 48px 0 rgba(0, 113, 227, 0.1);
   border: 1.5px solid #e5eaf0;
 }
 
@@ -654,22 +753,22 @@
   border-radius: 20rpx;
   font-size: 24rpx;
   font-weight: 500;
-  
+
   &.reported {
     background: rgba(255, 149, 0, 0.1);
     color: #ff9500;
   }
-  
+
   &.read {
     background: rgba(0, 122, 255, 0.1);
     color: #007aff;
   }
-  
+
   &.agreed {
     background: rgba(52, 199, 89, 0.1);
     color: #34c759;
   }
-  
+
   &.rejected {
     background: rgba(255, 59, 48, 0.1);
     color: #ff3b30;
@@ -681,18 +780,18 @@
     display: flex;
     justify-content: space-between;
   }
-  
+
   .info-item {
     display: flex;
     flex-direction: column;
   }
-  
+
   .label {
     font-size: 24rpx;
     color: #86868b;
     margin-bottom: 8rpx;
   }
-  
+
   .value {
     font-size: 28rpx;
     color: #1d1d1f;
@@ -709,7 +808,7 @@
   box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.05);
   overflow-x: auto;
   white-space: nowrap;
-  
+
   &::-webkit-scrollbar {
     display: none;
   }
@@ -723,7 +822,7 @@
   font-size: 28rpx;
   color: #86868b;
   transition: all 0.3s ease;
-  
+
   &.active {
     color: #007aff;
     background: #f0f7ff;
@@ -737,7 +836,7 @@
   border-radius: 32rpx;
   padding: 40rpx 30rpx;
   margin-bottom: 30rpx;
-  box-shadow: 0 12px 48px 0 rgba(0, 113, 227, 0.10);
+  box-shadow: 0 12px 48px 0 rgba(0, 113, 227, 0.1);
   border: 1.5px solid #e5eaf0;
 }
 
@@ -763,17 +862,17 @@
 .info-item {
   display: flex;
   flex-direction: column;
-  
+
   &.full-width {
     grid-column: 1 / -1;
   }
-  
+
   .label {
     font-size: 24rpx;
     color: #86868b;
     margin-bottom: 8rpx;
   }
-  
+
   .value {
     font-size: 28rpx;
     color: #1d1d1f;
@@ -787,14 +886,14 @@
     margin-bottom: 32rpx;
     padding-bottom: 20rpx;
     border-bottom: 1rpx solid #f0f0f0;
-    
+
     &:last-child {
       margin-bottom: 0;
       padding-bottom: 0;
       border-bottom: none;
     }
   }
-  
+
   .group-title {
     font-size: 26rpx;
     color: #86868b;
@@ -802,7 +901,7 @@
     display: block;
     font-weight: 500;
   }
-  
+
   .group-content {
     font-size: 28rpx;
     color: #1d1d1f;
@@ -818,66 +917,66 @@
     padding: 20rpx;
     margin-bottom: 20rpx;
     background: #fafafa;
-    
+
     &:last-child {
       margin-bottom: 0;
     }
   }
-  
+
   .sub-group {
     display: flex;
     margin-bottom: 12rpx;
     align-items: center;
-    
+
     &:last-child {
       margin-bottom: 0;
     }
   }
-  
+
   .sub-label {
     font-size: 26rpx;
     color: #606266;
     min-width: 160rpx;
     margin-right: 10rpx;
   }
-  
+
   .sub-value {
     font-size: 26rpx;
     color: #303133;
     flex: 1;
-    
+
     &.status {
       padding: 4rpx 12rpx;
       border-radius: 6rpx;
       font-size: 24rpx;
-      
+
       &.pending {
         background: rgba(240, 173, 78, 0.1);
         color: #f0ad4e;
       }
-      
+
       &.transporting {
         background: rgba(0, 122, 255, 0.1);
         color: #007aff;
       }
-      
+
       &.completed {
         background: rgba(76, 217, 100, 0.1);
         color: #4cd964;
       }
-      
+
       &.cancelled {
         background: rgba(220, 223, 230, 0.1);
         color: #dcdfe6;
       }
-      
+
       &.draft {
         background: rgba(144, 147, 153, 0.1);
         color: #909399;
       }
     }
   }
-  
+
   .empty-transport {
     text-align: center;
     padding: 40rpx 0;
@@ -892,18 +991,18 @@
   font-size: 24rpx;
   border-radius: 6rpx;
   border: none;
-  
+
   &.primary {
     background: #007aff;
     color: #fff;
   }
-  
+
   &.secondary {
     background: #ecf5ff;
     color: #007aff;
     border: 1rpx solid #007aff;
   }
-  
+
   &:active {
     opacity: 0.8;
   }
@@ -932,38 +1031,38 @@
   font-weight: 600;
   border: none;
   transition: all 0.3s ease;
-  
+
   &.secondary {
     background: #f5f5f7;
     color: #1d1d1f;
-    
+
     &:active {
       background: #e5e5e7;
     }
   }
-  
+
   &.primary {
     background: linear-gradient(90deg, #0071e3 0%, #2997ff 100%);
     color: #fff;
-    
+
     &:active {
       transform: scale(0.98);
     }
   }
-  
+
   &.success {
     background: linear-gradient(90deg, #34c759 0%, #4cd964 100%);
     color: #fff;
-    
+
     &:active {
       transform: scale(0.98);
     }
   }
-  
+
   &.error {
     background: linear-gradient(90deg, #ff3b30 0%, #ff5a5a 100%);
     color: #fff;
-    
+
     &:active {
       transform: scale(0.98);
     }
@@ -982,4 +1081,4 @@
     transform: translateY(0);
   }
 }
-</style>
\ No newline at end of file
+</style>

--
Gitblit v1.9.3