From 2cc85c64f1c64a2dbaeae276a3e2ca8420de76b7 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 22 四月 2026 18:09:58 +0800
Subject: [PATCH] 上报转运调试

---
 components/attachment/index.vue |    9 
 utils/dict.js                   |    2 
 pages/case/transfer.vue         |  226 +++++++++---
 utils/request.js                |  154 ++++----
 pages/case/transferinfo.vue     |  229 +++++++-----
 pages.json                      |    2 
 pages/case/CaseDetails.vue      |   68 +--
 pages/case/CaseInfo.vue         |    4 
 pages/case/index.vue            |  292 +++++++++++-----
 9 files changed, 604 insertions(+), 382 deletions(-)

diff --git a/components/attachment/index.vue b/components/attachment/index.vue
index 3a7309d..42276f6 100644
--- a/components/attachment/index.vue
+++ b/components/attachment/index.vue
@@ -451,6 +451,8 @@
       success: (res) => {
         if (res.statusCode === 200) {
           const data = JSON.parse(res.data);
+          console.log(data,'鏂囦欢');
+          
           if (data.code === 200) {
             resolve({
               ...data,
@@ -509,11 +511,12 @@
         file.status = 'uploading';
         const res = await uploadFile(file.file, 'base');
         Object.assign(file, {
-          url: res.fileName,
-          fileName: res.fileName,
+          url: res.url,
+          fileName: res.name,
           newFileName: res.newFileName,
           originalFilename: res.originalFilename,
-          status: 'success'
+          status: 'success',
+          size:res.size
         });
         emit("upload-base", file);
       } catch (error) {
diff --git a/pages.json b/pages.json
index 6454715..98a4b7e 100644
--- a/pages.json
+++ b/pages.json
@@ -181,6 +181,7 @@
       "path": "pages/case/index",
       "style": {
         "navigationBarTitleText": "鎴戠殑涓婃姤"
+       
       }
     },
     {
@@ -199,6 +200,7 @@
       "path": "pages/case/transfer",
       "style": {
         "navigationBarTitleText": "杞繍鐧昏"
+       
       }
     },
 	 {
diff --git a/pages/case/CaseDetails.vue b/pages/case/CaseDetails.vue
index acb1963..c925fb5 100644
--- a/pages/case/CaseDetails.vue
+++ b/pages/case/CaseDetails.vue
@@ -822,16 +822,19 @@
 // 澶勭悊鍩虹闄勪欢涓婁紶
 const handleBaseUpload = (file) => {
   console.log("鍩虹闄勪欢涓婁紶鎴愬姛:", file);
+  attachments.value.push(file);
 };
 
 // 澶勭悊鍏朵粬闄勪欢涓婁紶
 const handleFilesUpdate = (files) => {
+  console.log(files, "files");
+
   attachments.value = files.map((file) => ({
     ...file,
     // 纭繚鍙瓨鍌ㄥ崐璺緞
-    url: file.url.startsWith("http")
-      ? file.url.replace(baseUrlHt, "")
-      : file.url,
+    // url: file.url.startsWith("http")
+    //   ? file.url.replace(baseUrlHt, "")
+    //   : file.url,
   }));
 };
 
@@ -963,16 +966,14 @@
   }
 
   try {
-    console.log(attachments.value);
-
     uni.showLoading({ title: isEditMode.value ? "淇敼涓�..." : "鎻愪氦涓�..." });
     // 鍑嗗鎻愪氦鏁版嵁
     const submitData = {
       ...form.value,
       age: parseInt(form.value.age) || 0,
       annexfilesList: attachments.value.map((file) => ({
-        url: file.url,
-        name: file.name,
+        path: file.url,
+        fileName: file.name,
         type: file.type,
       })),
       phone: form.value.infophone,
@@ -1032,47 +1033,26 @@
 };
 
 const loadCaseData = async (id) => {
-  // 妯℃嫙鍔犺浇缂栬緫鏁版嵁
-  // form.value = {
-  //   caseNo: "DON20241216001",
-  //   treatmenthospitalname: "闈掑矝闀滄箹鍖婚櫌",
-  //   treatmentdeptname: "绁炵粡澶栫",
-  //   name: "寮犱笁",
-  //   nation: "姹夋棌",
-  //   nationality: "涓浗",
-  //   idcardtype: "灞呮皯韬唤璇�",
-  //   idcardno: "370203198510123456",
-  //   sex: "1",
-  //   birthday: "1985-10-12",
-  //   age: "38",
-  //   inpatientno: "ZY20241216001",
-  //   diagnosisname: "鑴戝浼ゅ鑷磋剳姝讳骸",
-  //   bloodType: "A",
-  //   rhYin: "positive",
-  //   infoname: "鏉庡尰鐢�",
-  //   infophone: "13800138000",
-  //   reporterno: "寮犲尰鐢�",
-  //   reporttime: currentTime.value,
-  // };
   try {
     loading.value = true;
     const res = await uni.$uapi.get(
       `/project/donatebaseinforeport/getInfo/${id}`,
     );
 
-    if (res) {
-      console.log(res, "res");
-
-      form.value = res;
-      console.log(1, "res");
+    if (res.code) {
+      form.value = res.data;
 
       // 澶勭悊閫夋嫨鍣ㄧ储寮�
       // updatePickerIndexes();
 
       console.log(2, "res");
       // 澶勭悊闄勪欢
-      if (res.annexfilesList) {
-        attachments.value = res.annexfilesList;
+      if (res.data.annexfilesList) {
+        attachments.value = res.data.annexfilesList;
+        attachments.value.forEach((item) => {
+          item.url = item.path;
+          item.name = item.fileName;
+        });
       }
       console.log(3, "res");
 
@@ -1253,6 +1233,16 @@
   display: flex;
   gap: 20rpx;
   margin-top: 40rpx;
+  // background: #fff;
+  // padding: 20rpx 0;
+  // position: fixed;
+  // bottom: 0;
+  // left: 0;
+  // right: 0;
+  // padding: 20rpx 30rpx;
+  // padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
+  // box-shadow: 0 -2rpx 20rpx rgba(0, 0, 0, 0.08);
+  // z-index: 9;
 }
 
 .btn {
@@ -1476,12 +1466,6 @@
   border-radius: 12rpx !important;
   padding: 20rpx 24rpx !important;
   background: #fff !important;
-}
-
-.action-buttons {
-  display: flex;
-  gap: 20rpx;
-  margin-top: 40rpx;
 }
 
 .btn {
diff --git a/pages/case/CaseInfo.vue b/pages/case/CaseInfo.vue
index 71f1daf..b9b1a3f 100644
--- a/pages/case/CaseInfo.vue
+++ b/pages/case/CaseInfo.vue
@@ -365,8 +365,8 @@
   try {
     const res = await uni.$uapi.get(`/project/donatebaseinforeport/getInfo/${id}`)
     
-    if (res) {
-      caseDetail.value = res
+    if (res.data) {
+      caseDetail.value = res.data
       
       // 濡傛灉鐘舵�佹槸"宸蹭笂鎶�"(1)锛岃嚜鍔ㄦ洿鏂颁负"宸查槄璇�"(2)
       if (caseDetail.value.reportStatus === '1') {
diff --git a/pages/case/index.vue b/pages/case/index.vue
index dea481c..79f8731 100644
--- a/pages/case/index.vue
+++ b/pages/case/index.vue
@@ -77,7 +77,7 @@
           </view>
           <text
             class="status"
-            :class="caseItem.reportStatus.replace('ed', '')"
+            :class="getStatusClass(caseItem.reportStatus)"
             >{{ caseItem.statusText }}</text
           >
         </view>
@@ -197,15 +197,6 @@
               鍒涘缓杞繍鍗�
             </button>
 
-            <!-- 闇�杞繍浣嗘湭鍚屾剰 -->
-            <!-- <button
-              v-if="caseItem.isTransport == '2' && !hasTransport(caseItem)"
-              class="transport-btn disabled"
-              disabled
-            >
-              闇�鍏堝悓鎰忔渚�
-            </button> -->
-
             <!-- 鏈夎浆杩愬崟鍙煡鐪� -->
             <button
               v-if="hasTransport(caseItem)"
@@ -233,7 +224,7 @@
           <view class="actions">
             <button
               class="action-btn"
-              v-if="caseItem.reportStatus != '1'"
+              v-if="caseItem.reportStatus == '1' || caseItem.reportStatus == '2'"
               @tap.stop="withdrawCase(caseItem)"
             >
               鎾ゅ洖
@@ -243,7 +234,7 @@
             </button>
             <button
               class="action-btn secondary"
-              v-if="caseItem.reportStatus != '1'"
+              v-if="caseItem.reportStatus == '1' || caseItem.reportStatus == '2'"
               @tap.stop="editCase(caseItem)"
             >
               缂栬緫
@@ -253,19 +244,19 @@
       </view>
 
       <!-- 鍔犺浇鏇村 -->
-      <view class="load-more" v-if="hasMore">
-        <text>鍔犺浇涓�...</text>
+      <view class="load-more" v-if="loadingMore">
+        <u-loading-icon text="鍔犺浇涓�..."></u-loading-icon>
+      </view>
+
+      <!-- 鏃犳洿澶氭暟鎹� -->
+      <view class="no-more" v-if="!hasMore && filteredCases.length > 0">
+        <text>宸插姞杞藉叏閮ㄦ暟鎹�</text>
       </view>
 
       <!-- 绌虹姸鎬� -->
       <view class="empty-state" v-if="!loading && filteredCases.length == 0">
         <image src="/static/empty/no-case.png" mode="aspectFit" />
         <text>鏆傛棤鍣ㄥ畼鎹愮尞妗堜緥璁板綍</text>
-      </view>
-
-      <!-- 鍔犺浇鐘舵�� -->
-      <view class="empty-state" v-if="loading">
-        <text>鏁版嵁鍔犺浇涓�...</text>
       </view>
     </scroll-view>
 
@@ -286,17 +277,25 @@
         </view>
       </view>
     </view>
+    
+    <!-- 鍔犺浇鐘舵�� -->
+    <u-loading-page v-if="initLoading" :loading="true" text="鏁版嵁鍔犺浇涓�..." />
+  </view>
+   <view class="float-button" @tap="createNewCase">
+    <u-icon name="plus" color="#fff" size="24"></u-icon>
   </view>
 </template>
 
 <script setup>
 import { ref, computed, onMounted } from "vue";
-import { onLoad, onShow } from "@dcloudio/uni-app";
+import { onLoad, onShow, onReachBottom } from "@dcloudio/uni-app";
 import { useDict } from "@/utils/dict";
 
 // 鍝嶅簲寮忔暟鎹�
 const dict = ref({});
 const loading = ref(false);
+const initLoading = ref(false);
+const loadingMore = ref(false);
 const cases = ref([]);
 const total = ref(0);
 const pageNum = ref(1);
@@ -324,22 +323,6 @@
   };
 
   const statusInfo = statusMap[apiData.reportStatus] || statusMap["1"];
-
-  // 杞繍鐘舵�佹槧灏�
-  const getTransportStatusClass = (caseData) => {
-    if (!hasTransport(caseData)) {
-      return "not-transported";
-    }
-    const status = getTransportStatus(caseData);
-    const map = {
-      1: "pending",
-      2: "transporting",
-      3: "completed",
-      4: "cancelled",
-      5: "draft",
-    };
-    return map[status] || "pending";
-  };
 
   return {
     id: apiData.id || apiData.donatebaseinfoReportId,
@@ -393,13 +376,16 @@
 };
 // 杞繍鍒ゆ柇鏂规硶 - 涓嶱C绔繚鎸佷竴鑷�
 const hasTransport = (caseData) => {
-  console.log(caseData.serviceTransport);
   return caseData.serviceTransport && caseData.serviceTransport.length > 0;
 };
-
+const createNewCase = () => {
+  uni.navigateTo({
+    url: '/pages/case/CaseDetails'
+  });
+};
 const canCreateTransport = (caseData) => {
   return (
-    (caseData.isTransport != "4" || caseData.isTransport == 2) && // 闇�瑕佽浆杩�
+    (caseData.isTransport == "2" || caseData.isTransport == 2) && // 闇�瑕佽浆杩�
     !hasTransport(caseData)
   ); // 鏃犺浆杩愬崟
 };
@@ -490,7 +476,15 @@
     url: `/pages/case/transferinfo?caseId=${caseItem.id}&caseNo=${caseItem.donorNo}`,
   });
 };
-
+const getStatusClass = (status) => {
+  const map = {
+    '1': 'reported',     // 宸蹭笂鎶�
+    '2': 'read',         // 宸查槄璇�
+    '3': 'agreed',       // 宸插悓鎰�
+    '4': 'rejected'      // 宸查┏鍥�
+  };
+  return map[status] || 'reported';
+}
 const viewTransportDetail = (caseItem) => {
   if (hasTransport(caseItem)) {
     const transport = caseItem.serviceTransport[0];
@@ -502,7 +496,7 @@
 
 // 绛涢�夌浉鍏�
 const caseTypes = [
-  { label: "鍏ㄩ儴", value: "" },
+  { label: "鍏ㄩ儴", value: "all" },
   { label: "宸蹭笂鎶�", value: "1" },
   { label: "宸查槄璇�", value: "2" },
   { label: "宸插悓鎰�", value: "3" },
@@ -511,17 +505,6 @@
 const currentType = ref("all");
 const startDate = ref("");
 const endDate = ref("");
-
-// 杞繍鐘舵�佹槧灏�
-const transportStatusMap = {
-  not_transported: {
-    text: "鏈浆杩�",
-    color: "warning",
-    class: "not-transported",
-  },
-  transporting: { text: "杞繍涓�", color: "primary", class: "transporting" },
-  completed: { text: "宸插畬鎴�", color: "success", class: "completed" },
-};
 
 // 鐢熷懡鍛ㄦ湡
 onLoad(async (options) => {
@@ -537,6 +520,12 @@
   await loadInitialData();
 });
 
+onReachBottom(() => {
+  if (hasMore.value && !loading.value && !loadingMore.value) {
+    onLoadMore();
+  }
+});
+
 onShow(() => {
   const transportUpdate = uni.getStorageSync("transportStatusUpdate");
   if (transportUpdate) {
@@ -547,46 +536,90 @@
 
 // 鏁版嵁鍔犺浇鍑芥暟
 const loadInitialData = async () => {
-  loading.value = true;
+  initLoading.value = true;
   try {
-    await Promise.all([donatebaseinforeportList(), donateTotal()]);
+    await Promise.all([donatebaseinforeportList(true), donateTotal()]);
   } catch (error) {
     console.error("鍒濆鍖栨暟鎹け璐�:", error);
   } finally {
-    loading.value = false;
+    initLoading.value = false;
   }
 };
 
 // 鑾峰彇妗堜緥鍒楄〃
-const donatebaseinforeportList = async () => {
+const donatebaseinforeportList = async (reset = false) => {
+  if (reset) {
+    pageNum.value = 1;
+    hasMore.value = true;
+  }
+  
+  if (loading.value || loadingMore.value || !hasMore.value) return;
+  
+  if (reset) {
+    loading.value = true;
+  } else {
+    loadingMore.value = true;
+  }
+  
   try {
     const params = {
       pageNum: pageNum.value,
       pageSize: pageSize.value,
     };
-
+    
+    // 绛涢�夋潯浠� - 濡傛灉閫夋嫨浜�"鍏ㄩ儴"锛屼笉浼爎eportStatus鍙傛暟
+    if (currentType.value !== "all") {
+      params.reportStatus = currentType.value;
+    }
+    
+    // 鏃堕棿绛涢�夋潯浠�
+    if (startDate.value && endDate.value) {
+      // 灏嗘椂闂存牸寮忚浆鎹负鎺ュ彛闇�瑕佺殑鏍煎紡
+      params.startDate = startDate.value;
+      params.endDate = endDate.value;
+    }
+    
+    console.log("璇锋眰鍙傛暟:", params);
+    
     const res = await uni.$uapi.post(
       "/project/donatebaseinforeport/list",
       params,
     );
-    console.log(res, "res");
-
-    const mappedData = res.map((item) => mapApiDataToCaseItem(item));
-
-    if (pageNum.value == 1) {
-      cases.value = mappedData;
+    
+    console.log("鎺ュ彛杩斿洖鏁版嵁:", res);
+    
+    if (res.code == 200) {
+      const data =res.data || [];
+      const mappedData = data.map((item) => mapApiDataToCaseItem(item));
+      
+      if (reset || pageNum.value == 1) {
+        console.log(mappedData,'mappedData');
+        
+        cases.value = mappedData;
+      } else {
+        cases.value = [...cases.value, ...mappedData];
+      }
+      
+      // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
+      hasMore.value = data.length >= pageSize.value;
+      total.value = res.total || 0;
+      
+      // 濡傛灉鏈夋暟鎹姞杞芥垚鍔燂紝澧炲姞椤电爜
+      if (data.length > 0) {
+        pageNum.value++;
+      }
     } else {
-      cases.value = [...cases.value, ...mappedData];
+      throw new Error(res.msg || "鍔犺浇澶辫触");
     }
-
-    hasMore.value = pageNum.value * pageSize.value < res.total;
-    total.value = res.total;
   } catch (error) {
     console.error("鑾峰彇妗堜緥鍒楄〃澶辫触:", error);
     uni.showToast({
       title: "缃戠粶璇锋眰澶辫触",
       icon: "none",
     });
+  } finally {
+    loading.value = false;
+    loadingMore.value = false;
   }
 };
 
@@ -594,62 +627,73 @@
 const donateTotal = async () => {
   try {
     const res = await uni.$uapi.post("/project/donatebaseinforeport/getTotal");
-    stats.value = {
-      totalCases: res["all"] || 0,
-      readCases: res["2"] || 0,
-      agreedCases: res["3"] || 0,
-    };
+    if (res.code === 200) {
+      stats.value = {
+        totalCases: res.data["all"] || 0,
+        readCases: res.data["2"] || 0,
+        agreedCases: res.data["3"] || 0,
+      };
+    } else {
+      throw new Error(res.msg || "鑾峰彇缁熻澶辫触");
+    }
   } catch (error) {
     console.error("鑾峰彇缁熻鏁版嵁澶辫触:", error);
   }
 };
 
-// 璁$畻灞炴�э細绛涢�夎褰�
+// 璁$畻灞炴�э細绛涢�夎褰� - 鐜板湪鍙仛鍓嶇鐘舵�佺瓫閫�
 const filteredCases = computed(() => {
   let result = cases.value;
-
-  if (currentType.value !== "all") {
-    result = result.filter(
-      (caseItem) => caseItem.reportStatus == currentType.value,
-    );
-  }
-
-  if (startDate.value && endDate.value) {
-    result = result.filter((caseItem) => {
-      const caseDate = caseItem.reportTime.split(" ")[0];
-      return caseDate >= startDate.value && caseDate <= endDate.value;
-    });
-  }
-
+  
+  // 鍙仛鍓嶇鐘舵�佺瓫閫夛紝鏃堕棿绛涢�夊凡缁忛�氳繃鎺ュ彛瀹炵幇
+  // if (currentType.value !== "all") {
+  //   result = result.filter(
+  //     (caseItem) => caseItem.reportStatus == currentType.value,
+  //   );
+  // }
+  
   return result;
 });
 
 // 浜嬩欢澶勭悊鍑芥暟
 const selectType = (type) => {
   currentType.value = type;
+  // 閲嶇疆鍒嗛〉锛岄噸鏂板姞杞芥暟鎹�
+  pageNum.value = 1;
+  donatebaseinforeportList(true);
 };
 
 const onStartDateChange = (e) => {
   startDate.value = e.detail.value;
+  // 濡傛灉缁撴潫鏃ユ湡宸查�夋嫨锛岀珛鍗宠Е鍙戠瓫閫�
+  if (endDate.value) {
+    pageNum.value = 1;
+    donatebaseinforeportList(true);
+  }
 };
 
 const onEndDateChange = (e) => {
   endDate.value = e.detail.value;
+  // 濡傛灉寮�濮嬫棩鏈熷凡閫夋嫨锛岀珛鍗宠Е鍙戠瓫閫�
+  if (startDate.value) {
+    pageNum.value = 1;
+    donatebaseinforeportList(true);
+  }
 };
 
 // 鍒锋柊鍜屽姞杞芥洿澶�
 const onRefresh = async () => {
   refreshing.value = true;
   pageNum.value = 1;
-  await donatebaseinforeportList();
+  await donatebaseinforeportList(true);
+  await donateTotal();
   setTimeout(() => {
     refreshing.value = false;
   }, 1000);
 };
 
 const onLoadMore = async () => {
-  if (!hasMore.value || loading.value) return;
-  pageNum.value += 1;
+  if (!hasMore.value || loading.value || loadingMore.value) return;
   await donatebaseinforeportList();
 };
 
@@ -677,19 +721,36 @@
   showWithdrawModal.value = true;
 };
 
-const confirmWithdraw = () => {
-  const index = cases.value.findIndex(
-    (item) => item.id == currentCase.value.id,
-  );
-  if (index !== -1) {
-    cases.value.splice(index, 1);
-    stats.value.totalCases -= 1;
+const confirmWithdraw = async () => {
+  try {
+    const res = await uni.$uapi.delete(`/project/donatebaseinforeport/${currentCase.value.id}`);
+    
+    if (res.code === 200) {
+      // 浠庡垪琛ㄤ腑绉婚櫎
+      const index = cases.value.findIndex(
+        (item) => item.id == currentCase.value.id
+      );
+      if (index !== -1) {
+        cases.value.splice(index, 1);
+        stats.value.totalCases -= 1;
+      }
+      
+      uni.showToast({
+        title: "鎾ゅ洖鎴愬姛",
+        icon: "success",
+      });
+    } else {
+      throw new Error(res.msg || "鎾ゅ洖澶辫触");
+    }
+  } catch (error) {
+    console.error("鎾ゅ洖澶辫触:", error);
     uni.showToast({
-      title: "鎾ゅ洖鎴愬姛",
-      icon: "success",
+      title: "鎾ゅ洖澶辫触锛岃閲嶈瘯",
+      icon: "none",
     });
+  } finally {
+    showWithdrawModal.value = false;
   }
-  showWithdrawModal.value = false;
 };
 
 const cancelWithdraw = () => {
@@ -1070,6 +1131,14 @@
       }
     }
   }
+  
+  .load-more, .no-more {
+    text-align: center;
+    padding: 40rpx 0;
+    color: $text-secondary;
+    font-size: 28rpx;
+  }
+  
   .empty-state {
     padding: 120rpx 0;
     text-align: center;
@@ -1154,4 +1223,25 @@
     }
   }
 }
-</style>
+/* 娴姩鎸夐挳鏍峰紡 */
+.float-button {
+  position: fixed;
+  bottom: 120rpx;
+  right: 40rpx;
+  width: 100rpx;
+  height: 100rpx;
+  background: $primary-color;
+  border-radius: 50%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 8rpx 20rpx rgba($primary-color, 0.3);
+  z-index: 100;
+  transition: all 0.3s ease;
+  
+  &:active {
+    opacity: 0.8;
+    transform: scale(0.95);
+  }
+}
+</style>
\ No newline at end of file
diff --git a/pages/case/transfer.vue b/pages/case/transfer.vue
index 3b931f7..b9e34fe 100644
--- a/pages/case/transfer.vue
+++ b/pages/case/transfer.vue
@@ -24,7 +24,7 @@
         <text
           v-for="(type, index) in transportTypes"
           :key="index"
-          :class="{ active: currentType === type.value }"
+          :class="{ active: currentType == type.value }"
           @tap="selectType(type.value)"
           >{{ type.label }}</text
         >
@@ -131,7 +131,7 @@
             </button>
             <button
               class="action-btn secondary"
-              v-if="item.transitStatus === 1 || item.transitStatus === 5"
+              v-if="item.transitStatus != 3"
               @tap.stop="editTransport(item)"
             >
               缂栬緫
@@ -144,8 +144,13 @@
       </view>
 
       <!-- 鍔犺浇鏇村 -->
-      <view class="load-more" v-if="loading">
+      <view class="load-more" v-if="loadingMore">
         <u-loading-icon text="鍔犺浇涓�..."></u-loading-icon>
+      </view>
+
+      <!-- 鏃犳洿澶氭暟鎹� -->
+      <view class="no-more" v-if="!hasMore && filteredTransports.length > 0">
+        <text>宸插姞杞藉叏閮ㄦ暟鎹�</text>
       </view>
 
       <!-- 绌虹姸鎬� -->
@@ -176,12 +181,20 @@
         </view>
       </view>
     </view>
+
+    <!-- 鍔犺浇鐘舵�� -->
+    <u-loading-page v-if="initLoading" :loading="true" text="鏁版嵁鍔犺浇涓�..." />
+    
+    <!-- 娴姩鎸夐挳 -->
+    <!-- <view class="float-button" @tap="createTransport">
+      <u-icon name="plus" color="#fff" size="24"></u-icon>
+    </view> -->
   </view>
 </template>
 
 <script setup>
 import { ref, computed, onMounted } from "vue";
-import { onLoad, onShow } from "@dcloudio/uni-app";
+import { onLoad, onShow, onReachBottom } from "@dcloudio/uni-app";
 import { useDict } from "@/utils/dict";
 
 // 瀛楀吀鏁版嵁
@@ -197,6 +210,8 @@
 // 杞繍鍗曟暟鎹�
 const transports = ref([]);
 const loading = ref(false);
+const initLoading = ref(false);
+const loadingMore = ref(false);
 const refreshing = ref(false);
 const hasMore = ref(true);
 const pageNum = ref(1);
@@ -225,9 +240,13 @@
   // 鑾峰彇瀛楀吀鏁版嵁
   dict.value = await useDict("sys_user_sex");
   // 鍒濆鍖栨暟鎹�
-  loadTransports();
-  // 鍔犺浇缁熻鏁版嵁
-  loadStats();
+  await loadInitialData();
+});
+
+onReachBottom(() => {
+  if (hasMore.value && !loading.value && !loadingMore.value) {
+    onLoadMore();
+  }
 });
 
 onShow(() => {
@@ -264,25 +283,15 @@
   };
 };
 
-// 绛涢�夎褰�
+// 璁$畻灞炴�э細绛涢�夎褰�
 const filteredTransports = computed(() => {
   let result = transports.value;
-
-  // 鐘舵�佺瓫閫�
+  
+  // 鍓嶇鐘舵�佺瓫閫�
   if (currentType.value !== "") {
     result = result.filter((item) => item.transitStatus === currentType.value);
   }
-
-  // 鏃ユ湡绛涢��
-  if (startDate.value && endDate.value) {
-    result = result.filter((item) => {
-      const transportDate = item.createTime
-        ? item.createTime.split(" ")[0]
-        : "";
-      return transportDate >= startDate.value && transportDate <= endDate.value;
-    });
-  }
-
+  
   return result;
 });
 
@@ -329,15 +338,28 @@
 // 閫夋嫨绫诲瀷
 const selectType = (type) => {
   currentType.value = type;
+  // 閲嶇疆鍒嗛〉锛岄噸鏂板姞杞芥暟鎹�
+  pageNum.value = 1;
+  loadTransports(true);
 };
 
 // 鏃ユ湡閫夋嫨
 const onStartDateChange = (e) => {
   startDate.value = e.detail.value;
+  // 濡傛灉缁撴潫鏃ユ湡宸查�夋嫨锛岀珛鍗宠Е鍙戠瓫閫�
+  if (endDate.value) {
+    pageNum.value = 1;
+    loadTransports(true);
+  }
 };
 
 const onEndDateChange = (e) => {
   endDate.value = e.detail.value;
+  // 濡傛灉寮�濮嬫棩鏈熷凡閫夋嫨锛岀珛鍗宠Е鍙戠瓫閫�
+  if (startDate.value) {
+    pageNum.value = 1;
+    loadTransports(true);
+  }
 };
 
 // 鏌ョ湅璇︽儏
@@ -348,14 +370,21 @@
 // 鏌ョ湅璇︽儏
 const viewDetails = (item) => {
   uni.navigateTo({
-    url: `/pages/transport/detail?id=${item.id}`,
+    url: `/pages/case/transferinfo?id=${item.id}`,
   });
 };
 
 // 缂栬緫杞繍鍗�
 const editTransport = (item) => {
   uni.navigateTo({
-    url: `/pages/transport/detail?id=${item.id}&edit=true`,
+    url: `/pages/case/transferinfo?id=${item.id}&edit=true`,
+  });
+};
+
+// 鍒涘缓杞繍鍗�
+const createTransport = () => {
+  uni.navigateTo({
+    url: '/pages/transport/create'
   });
 };
 
@@ -404,59 +433,105 @@
   showActionModal.value = false;
 };
 
+// 鏁版嵁鍔犺浇鍑芥暟
+const loadInitialData = async () => {
+  initLoading.value = true;
+  try {
+    await Promise.all([loadTransports(true), loadStats()]);
+  } catch (error) {
+    console.error("鍒濆鍖栨暟鎹け璐�:", error);
+  } finally {
+    initLoading.value = false;
+  }
+};
+
 // 涓嬫媺鍒锋柊
-const onRefresh = () => {
+const onRefresh = async () => {
   refreshing.value = true;
   pageNum.value = 1;
-  loadTransports();
-  loadStats();
+  await loadTransports(true);
+  await loadStats();
   setTimeout(() => {
     refreshing.value = false;
   }, 1000);
 };
 
 // 鍔犺浇鏇村
-const onLoadMore = () => {
-  if (!hasMore.value || loading.value) return;
-  pageNum.value++;
-  loadTransports();
+const onLoadMore = async () => {
+  if (!hasMore.value || loading.value || loadingMore.value) return;
+  await loadTransports();
 };
 
-// 鍔犺浇璁板綍
-const loadTransports = async () => {
-  if (loading.value) return;
-
-  loading.value = true;
+// 鍔犺浇杞繍鍗曞垪琛�
+const loadTransports = async (reset = false) => {
+  if (reset) {
+    pageNum.value = 1;
+    hasMore.value = true;
+  }
+  
+  if (loading.value || loadingMore.value || !hasMore.value) return;
+  
+  if (reset) {
+    loading.value = true;
+  } else {
+    loadingMore.value = true;
+  }
+  
   try {
     const params = {
       pageNum: pageNum.value,
       pageSize: pageSize.value,
     };
-
-    if (currentType.value) {
+    
+    // 绛涢�夋潯浠�
+    if (currentType.value !== "") {
       params.transitStatus = currentType.value;
     }
-
+    
+    // 鏃堕棿绛涢�夋潯浠�
     if (startDate.value && endDate.value) {
       params.startDate = startDate.value;
       params.endDate = endDate.value;
     }
-
+    
+    console.log("璇锋眰鍙傛暟:", params);
+    
     const res = await uni.$uapi.post("/project/transport/list", params);
-
-    if (res) {
-      const data = res || [];
+    
+    console.log("鎺ュ彛杩斿洖鏁版嵁:", res);
+  
+    if (res && res.code === 200) {
+      // 澶勭悊涓嶅悓鐨勬暟鎹粨鏋�
+      let data = [];
+      
+      if (res.rows && Array.isArray(res.rows)) {
+        data = res.rows;
+      } else if (res.data && Array.isArray(res.data)) {
+        data = res.data;
+      } else if (Array.isArray(res)) {
+        data = res;
+      } else {
+        console.error("鎺ュ彛杩斿洖鏍煎紡涓嶆纭�:", res);
+        throw new Error("鎺ュ彛杩斿洖鏍煎紡涓嶆纭�");
+      }
+      
       const mappedData = data.map((item) => mapApiDataToTransportItem(item));
-
-      if (pageNum.value === 1) {
+      
+      if (reset || pageNum.value === 1) {
         transports.value = mappedData;
       } else {
         transports.value = [...transports.value, ...mappedData];
       }
-
-      hasMore.value = (res.rows || []).length >= pageSize.value;
+      
+      // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
+      hasMore.value = data.length >= pageSize.value;
+      
+      // 濡傛灉鏈夋暟鎹姞杞芥垚鍔燂紝澧炲姞椤电爜
+      if (data.length > 0) {
+        pageNum.value++;
+      }
     } else {
-      throw new Error(res.msg || "鍔犺浇澶辫触");
+      throw new Error(res?.msg || "鍔犺浇澶辫触");
     }
   } catch (error) {
     console.error("鍔犺浇杞繍鍗曞垪琛ㄥけ璐�:", error);
@@ -466,6 +541,7 @@
     });
   } finally {
     loading.value = false;
+    loadingMore.value = false;
   }
 };
 
@@ -473,11 +549,12 @@
 const loadStats = async () => {
   try {
     const res = await uni.$uapi.post("/api/totalServiceTransportState");
-    if (res) {
+    if (res.data) {
       stats.value = {
-        totalTransports: res.reduce((sum, item) => sum + item.count, 0) || 0,
-        pendingTransports: res[0].count || 0,
-        completedTransports: res[3].count || 0,
+        totalTransports:
+          res.data.reduce((sum, item) => sum + item.count, 0) || 0,
+        pendingTransports: res.data[0].count || 0,
+        completedTransports: res.data[3].count || 0,
       };
     }
   } catch (error) {
@@ -492,10 +569,10 @@
       id: currentTransport.value.id,
       transitStatus: newStatus,
     };
-
+    
     const res = await uni.$uapi.post("/project/transport/edit", updateData);
-
-    if (res.code === 200) {
+    
+    if (res && res.code === 200) {
       // 鏇存柊鏈湴鏁版嵁
       const index = transports.value.findIndex(
         (item) => item.id === currentTransport.value.id,
@@ -503,19 +580,19 @@
       if (index !== -1) {
         transports.value[index].transitStatus = newStatus;
       }
-
+      
       // 鏇存柊缁熻鏁版嵁
       await loadStats();
-
+      
       // 瀛樺偍鐘舵�佹洿鏂�
       uni.setStorageSync("transportStatusUpdate", {
         orderId: currentTransport.value.id,
         status: newStatus,
       });
-
+      
       return true;
     } else {
-      throw new Error(res.msg || `${actionName}澶辫触`);
+      throw new Error(res?.msg || `${actionName}澶辫触`);
     }
   } catch (error) {
     console.error(`${actionName}澶辫触:`, error);
@@ -535,10 +612,10 @@
 </script>
 
 <style lang="scss" scoped>
-/* 淇濇寔鍘熸湁鏍峰紡瀹屽叏涓嶅彉 */
 .transport-record {
   min-height: 100vh;
   background: linear-gradient(135deg, #fafdff 0%, #e3f0ff 100%);
+  padding-bottom: 100rpx;
 
   .stats-card {
     margin: 20rpx;
@@ -809,6 +886,13 @@
       }
     }
 
+    .load-more, .no-more {
+      text-align: center;
+      padding: 40rpx 0;
+      color: #86868b;
+      font-size: 28rpx;
+    }
+
     .empty-state {
       padding: 120rpx 0;
       text-align: center;
@@ -901,5 +985,27 @@
       }
     }
   }
+  
+  /* 娴姩鎸夐挳 */
+  .float-button {
+    position: fixed;
+    bottom: 100rpx;
+    right: 40rpx;
+    width: 100rpx;
+    height: 100rpx;
+    background: #0071e3;
+    border-radius: 50%;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    box-shadow: 0 8rpx 20rpx rgba(0, 113, 227, 0.3);
+    z-index: 100;
+    transition: all 0.3s ease;
+    
+    &:active {
+      opacity: 0.8;
+      transform: scale(0.95);
+    }
+  }
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/pages/case/transferinfo.vue b/pages/case/transferinfo.vue
index 83713e6..1ada6e7 100644
--- a/pages/case/transferinfo.vue
+++ b/pages/case/transferinfo.vue
@@ -4,7 +4,7 @@
     <scroll-view scroll-y class="form-scroll" :show-scrollbar="false">
       <view class="form-content">
         <!-- 妗堜緥淇℃伅鍗$墖 -->
-        <view class="form-section" v-if="transportData.caseNo">
+        <view class="form-section" v-if="transportData.reportId">
           <view class="section-header">
             <view class="section-icon">馃搵</view>
             <text class="section-title">鍏宠仈妗堜緥淇℃伅</text>
@@ -54,7 +54,7 @@
           </view>
 
           <view class="form-grid">
-            <view class="form-item">
+            <!-- <view class="form-item">
               <text class="item-label">杞繍鍗曞彿</text>
               <u-input
                 v-model="transportData.reportId"
@@ -63,7 +63,7 @@
                 :disabledColor="disabledColor"
                 border="none"
               />
-            </view>
+            </view> -->
 
             <view class="form-item">
               <text class="item-label required">鍑哄彂鍦扮偣</text>
@@ -249,47 +249,6 @@
           </view>
         </view>
 
-        <!-- 闄勪欢淇℃伅 -->
-        <view
-          class="form-section"
-          v-if="
-            transportData.annexfilesList &&
-            transportData.annexfilesList.length > 0
-          "
-        >
-          <view class="section-header">
-            <view class="section-icon">馃搸</view>
-            <text class="section-title"
-              >闄勪欢淇℃伅 ({{ transportData.annexfilesList.length }})</text
-            >
-          </view>
-
-          <view class="attachment-list">
-            <view
-              v-for="(file, index) in transportData.annexfilesList"
-              :key="index"
-              class="attachment-item"
-              @click="previewFile(file)"
-            >
-              <view class="file-info">
-                <u-icon
-                  name="file-text"
-                  color="#409EFF"
-                  size="20"
-                  class="file-icon"
-                ></u-icon>
-                <view class="file-details">
-                  <text class="file-name">{{ file.fileName }}</text>
-                  <text class="file-time">{{
-                    formatTime(file.createTime)
-                  }}</text>
-                </view>
-              </view>
-              <u-icon name="arrow-right" color="#999" size="16"></u-icon>
-            </view>
-          </view>
-        </view>
-
         <!-- 澶囨敞淇℃伅 -->
         <view class="form-section">
           <view class="section-header">
@@ -334,9 +293,9 @@
             >
               瀹屾垚杞繍
             </u-button>
-            <u-button v-if="canDelete" class="btn error" @click="handleDelete">
+            <!-- <u-button v-if="canDelete" class="btn error" @click="handleDelete">
               鍒犻櫎
-            </u-button>
+            </u-button> -->
           </template>
 
           <!-- 缂栬緫妯″紡 -->
@@ -354,7 +313,15 @@
         </view>
       </view>
     </scroll-view>
-
+    <attachment-upload
+      ref="attachment"
+      :files="attachments"
+      :readonly="isReadonly"
+      :maxCount="5"
+      @update:files="handleFilesUpdate"
+      @upload-base="handleBaseUpload"
+      @preview="handlePreview"
+    />
     <!-- 鏃堕棿閫夋嫨鍣� -->
     <u-datetime-picker
       :show="showTimePicker"
@@ -372,13 +339,18 @@
 
 <script setup>
 import { ref, computed, onMounted } from "vue";
+import attachmentUpload from "@/components/attachment";
+import { useUserStore } from "@/stores/user";
+
 import { onLoad } from "@dcloudio/uni-app";
 
 // 瀛楀吀鏁版嵁
 const dict = ref({});
 
 // 鏁版嵁
-const transportData = ref({});
+const transportData = ref({
+  annexfilesList: [], // 闄勪欢鏂囦欢鍦板潃闆嗗悎
+});
 const loading = ref(false);
 const saving = ref(false);
 const isEdit = ref(false);
@@ -386,6 +358,9 @@
 const showTimePicker = ref(false);
 const departureTimeValue = ref(0);
 const statusSelectVisible = ref(false);
+const isReadonly = ref(false);
+const attachments = ref([]);
+
 
 // 瀛楀吀閫夐」
 const statusOptions = ref([
@@ -459,10 +434,18 @@
 const loadTransportData = async (id) => {
   loading.value = true;
   try {
-    const res = await uni.$uapi.post(`/project/transport/list`, { id: id });
+    const res = await uni.$uapi.get(`/project/transport/getInfo/${id}`);
 
-    if (res) {
-      transportData.value = res[0];
+    if (res.data) {
+      transportData.value = res.data;
+      
+        if (res.data.annexfilesList) {
+           attachments.value = res.data.annexfilesList;
+        attachments.value.forEach(item=>{
+          item.url=item.opath,
+          item.name=item.fileName
+        })
+        }
     } else {
       throw new Error(res.msg || "鏁版嵁鍔犺浇澶辫触");
     }
@@ -482,26 +465,28 @@
   try {
     // 濡傛灉鏈夋渚婭D锛屽姞杞芥渚嬩俊鎭�
     if (caseId) {
-      const res = await uni.$uapi.post(
-        `/project/transport/list`,
-        { id: caseId },
+      const res = await uni.$uapi.get(
+        `/project/donatebaseinforeport/getInfo/${caseId}`,
       );
-      if (res) {
-        const caseData = res[0];
+      if (res.data) {
+        const caseData = res.data;
+        console.log(caseData);
+
         transportData.value = {
           ...transportData.value,
-          caseNo: caseNo || caseData.caseNo,
-          patName: caseData.patName,
-          sex: caseData.sex,
-          age: caseData.age,
-          diagnosisname: caseData.diagnosisname,
-          treatmentHospitalName: caseData.treatmenthospitalname,
-          transitStatus: 1, // 寰呰浆杩�
-          createTime: new Date()
-            .toISOString()
-            .replace("T", " ")
-            .substring(0, 19),
+          caseNo: caseData.caseNo || "",
+          patName: caseData.name || "",
+          sex: caseData.sex || "",
+          age: caseData.age || "",
+          reportId: caseData.id || null,
+          diagnosisname: caseData.diagnosisname || "",
+          treatmentHospitalName: caseData.treatmenthospitalname || "",
+          treatmentDeptName: caseData.treatmentdeptname || "",
+          // 鍙互璁剧疆涓�浜涢粯璁ゅ��
+          transportStartPlace: caseData.treatmenthospitalname || "",
+          contactPerson: caseData.coordinatorName || "",
         };
+        console.log(transportData.value, "transportData.value");
       }
     } else {
       transportData.value = {
@@ -560,6 +545,7 @@
 // 鏃堕棿纭
 const onTimeConfirm = (e) => {
   const date = new Date(e.value);
+  // 娣诲姞绉掔殑閮ㄥ垎
   transportData.value.transportStartTime = `${date.getFullYear()}-${(
     date.getMonth() + 1
   )
@@ -567,7 +553,11 @@
     .padStart(2, "0")}-${date.getDate().toString().padStart(2, "0")} ${date
     .getHours()
     .toString()
-    .padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}`;
+    .padStart(2, "0")}:${date.getMinutes().toString().padStart(2, "0")}:${date
+    .getSeconds()
+    .toString()
+    .padStart(2, "0")}`; // 娣诲姞绉�
+
   showTimePicker.value = false;
 };
 
@@ -641,10 +631,18 @@
   saving.value = true;
 
   try {
+    // const submitData = {
+    //   ...transportData.value,
+
+    // };
     const submitData = {
       ...transportData.value,
+      annexfilesList: attachments.value.map((file) => ({
+        path: file.url,
+        fileName: file.name,
+        type: file.type,
+      })),
     };
-
     let res;
     if (transportId.value) {
       // 淇敼
@@ -737,9 +735,15 @@
     const updateData = {
       id: transportId.value,
       transitStatus: newStatus,
+      ...transportData.value,
+       annexfilesList: attachments.value.map((file) => ({
+        path: file.url,
+        fileName: file.name,
+        type: file.type,
+      })),
     };
 
-    const res = await uni.$uapi.post("/system/transport/edit", updateData);
+    const res = await uni.$uapi.post("/project/transport/edit", updateData);
 
     if (res.code === 200) {
       uni.showToast({ title: `${actionName}鎴愬姛`, icon: "success" });
@@ -753,32 +757,63 @@
   }
 };
 
-// 鍒犻櫎杞繍鍗�
-const handleDelete = () => {
-  uni.showModal({
-    title: "纭鍒犻櫎",
-    content: `纭畾瑕佸垹闄よ浆杩愬崟 ${transportData.value.reportId} 鍚楋紵`,
-    success: async (res) => {
-      if (res.confirm) {
-        try {
-          const result = await uni.$uapi.delete(
-            `/system/transport/${transportId.value}`,
-          );
-          if (result.code === 200) {
-            uni.showToast({ title: "鍒犻櫎鎴愬姛", icon: "success" });
-            setTimeout(() => {
-              uni.navigateBack();
-            }, 1500);
-          } else {
-            uni.showToast({ title: result.msg || "鍒犻櫎澶辫触", icon: "none" });
-          }
-        } catch (error) {
-          console.error("鍒犻櫎澶辫触:", error);
-          uni.showToast({ title: "鍒犻櫎澶辫触", icon: "none" });
-        }
-      }
-    },
-  });
+// 澶勭悊鍩虹闄勪欢涓婁紶
+const handleBaseUpload = (file) => {
+  console.log("鍩虹闄勪欢涓婁紶鎴愬姛:", file);
+  attachments.value.push(file);
+
+};
+
+// 澶勭悊鍏朵粬闄勪欢涓婁紶
+const handleFilesUpdate = (files) => {
+  console.log(files,'files');
+  
+  attachments.value = files.map((file) => ({
+    ...file,
+    // 纭繚鍙瓨鍌ㄥ崐璺緞
+    // url: file.url.startsWith("http")
+    //   ? file.url.replace(baseUrlHt, "")
+    //   : file.url,
+  }));
+  console.log(attachments.value);
+  
+};
+
+// 棰勮鏂囦欢 - 淇敼涓轰娇鐢ㄥ畬鏁碪RL
+const handlePreview = (file) => {
+  const fullUrl = file.url.startsWith("http")
+    ? file.url
+    : baseUrlHt + (file.url.startsWith("/") ? "" : "/") + file.url;
+
+  if (file.type.includes("image")) {
+    uni.previewImage({
+      urls: attachments.value
+        .filter((f) => f.type.includes("image"))
+        .map((f) =>
+          f.url.startsWith("http")
+            ? f.url
+            : baseUrlHt + (f.url.startsWith("/") ? "" : "/") + f.url,
+        ),
+      current: fullUrl,
+    });
+  } else if (file.type.includes("pdf")) {
+    uni.downloadFile({
+      url: fullUrl,
+      success: (res) => {
+        uni.openDocument({
+          filePath: res.tempFilePath,
+          fileType: "pdf",
+          showMenu: true,
+        });
+      },
+      fail: (err) => {
+        console.error("鎵撳紑鏂囨。澶辫触:", err);
+        uni.showToast({ title: "鎵撳紑鏂囦欢澶辫触", icon: "none" });
+      },
+    });
+  } else {
+    uni.showToast({ title: "鏆備笉鏀寔姝ゆ枃浠剁被鍨嬮瑙�", icon: "none" });
+  }
 };
 </script>
 
@@ -1006,7 +1041,7 @@
   padding: 20rpx 30rpx;
   padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
   box-shadow: 0 -2rpx 20rpx rgba(0, 0, 0, 0.08);
-  z-index: 100;
+  z-index: 9;
 }
 
 .btn {
diff --git a/utils/dict.js b/utils/dict.js
index d7a8e7e..dcd5382 100644
--- a/utils/dict.js
+++ b/utils/dict.js
@@ -16,7 +16,7 @@
     } else {
       try {
         const resp = await uni.$uapi.get("/system/dict/data/type/" + dictType);
-        res.value[dictType] = resp.map(p => ({
+        res.value[dictType] = resp.data.map(p => ({
           label: p.dictLabel,
           value: p.dictValue,
           elTagType: p.listClass,
diff --git a/utils/request.js b/utils/request.js
index 90a071b..8249b77 100644
--- a/utils/request.js
+++ b/utils/request.js
@@ -6,35 +6,34 @@
  */
 const showToast = (message) => {
   if (uni.$u?.toast) {
-    uni.$u.toast(message)
+    uni.$u.toast(message);
   } else {
     uni.showToast({
       title: message,
-      icon: 'none'
-    })
+      icon: "none",
+    });
   }
-}
+};
 
 // 鍩虹閰嶇疆 - 浠庣幆澧冨彉閲忎腑鑾峰彇baseURL
 const config = {
-  baseURL: '/api', // 浣跨敤鐜鍙橀噺涓殑閰嶇疆
+  baseURL: "/api", // 浣跨敤鐜鍙橀噺涓殑閰嶇疆
   timeout: 60000,
   header: {
-    'Content-Type': 'application/json',
-    'X-Business-System': 'medical-system',
-
+    "Content-Type": "application/json",
+    "X-Business-System": "medical-system",
   },
   // 鏂板閰嶇疆椤�
-  loginPage: '/pages/login/Login', // 鐧诲綍椤佃矾寰�
+  loginPage: "/pages/login/Login", // 鐧诲綍椤佃矾寰�
   tokenExpiredCode: 401, // 鍚庣杩斿洖鐨凾oken杩囨湡鐘舵�佺爜
   noPermissionCode: 403, // 鏃犳潈闄愮姸鎬佺爜
   // 娣诲姞鐧藉悕鍗曢厤缃紙涓嶉渶瑕佹牎楠宼oken鐨勬帴鍙o級
   whiteList: [
-    '/login', // 鐧诲綍鎺ュ彛
+    "/login", // 鐧诲綍鎺ュ彛
     // '/dingtalk/auth/login', // 閽夐拤鎺堟潈鐧诲綍鎺ュ彛
     // '/dingtalk/auth/bind' // 閽夐拤鎺堟潈鐧诲綍缁戝畾鎺ュ彛
-  ]
-}
+  ],
+};
 
 /**
  * 妫�鏌ヨ姹傛槸鍚﹀湪鐧藉悕鍗曚腑
@@ -42,33 +41,36 @@
  */
 const isInWhiteList = (url) => {
   // 鎻愬彇鐩稿璺緞锛堢Щ闄aseURL锛夊苟蹇界暐鏌ヨ鍙傛暟
-  const relativeUrl = url.replace(config.baseURL, '').split('?')[0];
-  return config.whiteList.some(path => {
+  const relativeUrl = url.replace(config.baseURL, "").split("?")[0];
+  return config.whiteList.some((path) => {
     // 澶勭悊閫氶厤绗︽儏鍐�
-    if (path.endsWith('/')) {
-      return relativeUrl.startsWith(path)
+    if (path.endsWith("/")) {
+      return relativeUrl.startsWith(path);
     }
     // 绮剧‘鍖归厤璺緞
-    return relativeUrl === path
-  })
-}
+    return relativeUrl === path;
+  });
+};
 
 /**
  * 璺宠浆鍒扮櫥褰曢〉
  */
 const navigateToLogin = () => {
   uni.redirectTo({
-    url: config.loginPage + '?redirect=' + encodeURIComponent(getCurrentPagePath())
-  })
-}
+    url:
+      config.loginPage +
+      "?redirect=" +
+      encodeURIComponent(getCurrentPagePath()),
+  });
+};
 
 /**
  * 鑾峰彇褰撳墠椤甸潰璺緞锛堢敤浜庣櫥褰曞悗璺冲洖锛�
  */
 const getCurrentPagePath = () => {
-  const pages = getCurrentPages()
-  return pages[pages.length - 1]?.route || ''
-}
+  const pages = getCurrentPages();
+  return pages[pages.length - 1]?.route || "";
+};
 
 /**
  * 妫�鏌oken鏄惁杩囨湡
@@ -76,72 +78,72 @@
  */
 const checkTokenExpired = (statusCode) => {
   if (statusCode === config.tokenExpiredCode) {
-    showToast('鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�')
-    navigateToLogin()
-    return true
+    showToast("鐧诲綍宸茶繃鏈燂紝璇烽噸鏂扮櫥褰�");
+    navigateToLogin();
+    return true;
   }
-  return false
-}
+  return false;
+};
 
 /**
  * 璇锋眰鎷︽埅鍣�
  */
 const requestInterceptor = (options) => {
-  const token = uni.getStorageSync('token')
-  
+  const token = uni.getStorageSync("token");
+
   // 濡傛灉璇锋眰鍦ㄧ櫧鍚嶅崟涓紝鐩存帴鏀捐
   if (isInWhiteList(options.url)) {
-    return options
+    return options;
   }
 
   // 濡傛灉鏈櫥褰曚笖涓嶆槸鐧藉悕鍗曟帴鍙o紝璺宠浆鐧诲綍
   // console.log(token,'token');
-  
+
   if (!token) {
-    navigateToLogin()
-    throw new Error('鏈櫥褰�')
+    navigateToLogin();
+    throw new Error("鏈櫥褰�");
   }
 
   // 娣诲姞Token鍒癏eader
   options.header = {
     ...options.header,
-    'Authorization': `Bearer ${token}`
-  }
-  
-  return options
-}
+    Authorization: `Bearer ${token}`,
+  };
+
+  return options;
+};
 
 /**
  * 鍝嶅簲鎷︽埅鍣�
  */
 const responseInterceptor = (response) => {
-  const { statusCode, data } = response
-  
+  const { statusCode, data } = response;
+
   // Token杩囨湡澶勭悊
   if (checkTokenExpired(statusCode)) {
-    return Promise.reject(data)
+    return Promise.reject(data);
   }
 
   // 鏃犳潈闄愬鐞�
   if (statusCode === config.noPermissionCode) {
-    showToast('鏃犳潈闄愯闂�')
-    return Promise.reject(data)
+    showToast("鏃犳潈闄愯闂�");
+    return Promise.reject(data);
   }
 
   // 鍏朵粬閿欒鐘舵�佺爜
   if (statusCode !== 200) {
-    showToast(`璇锋眰澶辫触: ${statusCode}`)
-    return Promise.reject(data)
+    showToast(`璇锋眰澶辫触: ${statusCode}`);
+    return Promise.reject(data);
   }
 
   // 鎺ュ彛鑷畾涔夐敊璇爜澶勭悊锛堝亣璁綿ata.code涓�0琛ㄧず鎴愬姛锛�
   if (data?.code !== 200) {
-    showToast(data?.msg || '鎿嶄綔澶辫触')
-    return Promise.reject(data)
+    showToast(data?.msg || "鎿嶄綔澶辫触");
+    return Promise.reject(data);
   }
 
-  return data.data || data // 杩斿洖瀹為檯涓氬姟鏁版嵁
-}
+  return data; // 杩斿洖瀹為檯涓氬姟鏁版嵁
+};
 
 /**
  * 鏍稿績璇锋眰鏂规硶
@@ -153,58 +155,58 @@
       ...config,
       ...options,
       url: config.baseURL + options.url,
-      header: { ...config.header, ...options.header }
-    }
+      header: { ...config.header, ...options.header },
+    };
 
     // 璇锋眰鎷︽埅
-    options = await requestInterceptor(options)
-    
+    options = await requestInterceptor(options);
+
     // 鍙戣捣璇锋眰
     return new Promise((resolve, reject) => {
       uni.request({
         ...options,
         success: (res) => {
-          resolve(responseInterceptor(res))
+          resolve(responseInterceptor(res));
         },
         fail: (err) => {
-          showToast('缃戠粶閿欒锛岃閲嶈瘯')
-          reject(err)
-        }
-      })
-    })
+          showToast("缃戠粶閿欒锛岃閲嶈瘯");
+          reject(err);
+        },
+      });
+    });
   } catch (err) {
-    return Promise.reject(err)
+    return Promise.reject(err);
   }
-}
+};
 
 // 蹇嵎鏂规硶灏佽
 const http = {
   get(url, data = {}, options = {}) {
-    return request({ url, data, method: 'GET', ...options })
+    return request({ url, data, method: "GET", ...options });
   },
   post(url, data = {}, options = {}) {
-    return request({ url, data, method: 'POST', ...options })
+    return request({ url, data, method: "POST", ...options });
   },
   put(url, data = {}, options = {}) {
-    return request({ url, data, method: 'PUT', ...options })
+    return request({ url, data, method: "PUT", ...options });
   },
   delete(url, data = {}, options = {}) {
-    return request({ url, data, method: 'DELETE', ...options })
+    return request({ url, data, method: "DELETE", ...options });
   },
   // 鏂板锛氫笂浼犳枃浠舵柟娉�
-  upload(url, filePath, name = 'file', formData = {}) {
+  upload(url, filePath, name = "file", formData = {}) {
     return request({
       url,
-      method: 'POST',
+      method: "POST",
       filePath,
       name,
       formData,
-      header: { 'Content-Type': 'multipart/form-data' }
-    })
-  }
-}
+      header: { "Content-Type": "multipart/form-data" },
+    });
+  },
+};
 
 // 鎸傝浇鍒板叏灞�
-uni.$uapi = http
+uni.$uapi = http;
 
-export default http
\ No newline at end of file
+export default http;

--
Gitblit v1.9.3