From 888f941ae16c850c0f1a844ec9436058840920bd Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 24 四月 2026 09:19:02 +0800
Subject: [PATCH] 推送

---
 pages/case/index.vue |  690 +++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 403 insertions(+), 287 deletions(-)

diff --git a/pages/case/index.vue b/pages/case/index.vue
index 3836b08..79f8731 100644
--- a/pages/case/index.vue
+++ b/pages/case/index.vue
@@ -24,7 +24,7 @@
         <text
           v-for="(type, index) in caseTypes"
           :key="index"
-          :class="{ active: currentType === type.value }"
+          :class="{ active: currentType == type.value }"
           @tap="selectType(type.value)"
           >{{ type.label }}</text
         >
@@ -75,12 +75,15 @@
               <text class="type">{{ caseItem.caseType }}</text>
             </view>
           </view>
-          <text class="status" :class="caseItem.status.replace('ed', '')">{{
-            caseItem.statusText
-          }}</text>
+          <text
+            class="status"
+            :class="getStatusClass(caseItem.reportStatus)"
+            >{{ caseItem.statusText }}</text
+          >
         </view>
 
         <view class="detail-info">
+          <!-- 鍩虹淇℃伅淇濇寔涓嶅彉 -->
           <view class="info-item">
             <text class="label">鎹愮尞缂栧彿</text>
             <text class="value">{{ caseItem.donorNo }}</text>
@@ -107,14 +110,18 @@
             <text class="label">鐤剧梾璇婃柇</text>
             <text class="value">{{ caseItem.diagnosis }}</text>
           </view>
+
+          <!-- 鑱旂郴鏂瑰紡 -->
+          <view class="info-item" v-if="caseItem.phone">
+            <text class="label">鑱旂郴鐢佃瘽</text>
+            <text class="value">{{ caseItem.phone }}</text>
+          </view>
+
           <view class="info-item">
             <text class="label">涓婃姤鏃堕棿</text>
             <text class="value">{{ caseItem.reportTime }}</text>
           </view>
-          <view class="info-item">
-            <text class="label">涓婃姤浜�</text>
-            <text class="value">{{ caseItem.reporterName }}</text>
-          </view>
+
           <view class="info-item" v-if="caseItem.reviewTime">
             <text class="label">瀹℃牳鏃堕棿</text>
             <text class="value">{{ caseItem.reviewTime }}</text>
@@ -125,141 +132,90 @@
           </view>
         </view>
 
-        <!-- 杞繍淇℃伅鍖哄煙 -->
-        <view class="transport-section">
+        <!-- 杞繍淇℃伅鍖哄煙 - 淇敼鍒ゆ柇閫昏緫 -->
+        <view
+          class="transport-section"
+          v-if="caseItem.isTransport == '2' || caseItem.isTransport == 2"
+        >
           <view class="transport-info">
             <text class="label">杞繍鐘舵��</text>
             <text
               class="transport-status"
-              :class="transportStatusMap[caseItem.transportStatus].class"
+              :class="getTransportStatusClass(caseItem)"
             >
-              {{ transportStatusMap[caseItem.transportStatus].text }}
+              {{ getTransportStatusText(caseItem) }}
             </text>
           </view>
 
-          <!-- 鏄剧ず杞繍璇︽儏锛氬彧瑕佹湁杞繍鍗曞彿灏辨樉绀� -->
-          <view
-            class="transport-details"
-            v-if="caseItem.transportOrderNo && caseItem.transportOrderNo !== ''"
-          >
+          <!-- 杞繍璇︽儏鍒ゆ柇閫昏緫淇敼 -->
+          <view class="transport-details" v-if="hasTransport(caseItem)">
             <view class="detail-item">
               <text class="detail-label">杞繍鍗曞彿</text>
-              <text class="detail-value">{{ caseItem.transportOrderNo }}</text>
+              <text class="detail-value">{{
+                getTransportOrderNo(caseItem)
+              }}</text>
             </view>
 
-            <view class="detail-item" v-if="caseItem.transportTime">
+            <view class="detail-item" v-if="getTransportStartTime(caseItem)">
               <text class="detail-label">璁″垝杞繍鏃堕棿</text>
-              <text class="detail-value">{{ caseItem.transportTime }}</text>
-            </view>
-
-            <view class="detail-item" v-if="caseItem.transportDetails?.vehicle">
-              <text class="detail-label">杞繍杞﹁締</text>
               <text class="detail-value">{{
-                caseItem.transportDetails.vehicle
+                getTransportStartTime(caseItem)
               }}</text>
             </view>
 
-            <view class="detail-item" v-if="caseItem.transportDetails?.driver">
-              <text class="detail-label">椹鹃┒鍛�</text>
+            <view class="detail-item" v-if="getTransportPlace(caseItem)">
+              <text class="detail-label">鍑哄彂鍦扮偣</text>
               <text class="detail-value">{{
-                caseItem.transportDetails.driver
+                getTransportPlace(caseItem)
               }}</text>
             </view>
 
-            <view class="detail-item" v-if="caseItem.transportDetails?.phone">
-              <text class="detail-label">鑱旂郴鐢佃瘽</text>
-              <text class="detail-value">{{
-                caseItem.transportDetails.phone
-              }}</text>
+            <view class="detail-item" v-if="getCoordinator(caseItem)">
+              <text class="detail-label">鍗忚皟鍛�</text>
+              <text class="detail-value">{{ getCoordinator(caseItem) }}</text>
             </view>
 
-            <!-- 杞繍涓墠鏄剧ず鐨勫姩鎬佷俊鎭� -->
-            <view
-              class="detail-item"
-              v-if="
-                caseItem.transportStatus === 'transporting' &&
-                caseItem.transportDetails?.currentLocation
-              "
-            >
-              <text class="detail-label">褰撳墠浣嶇疆</text>
-              <text class="detail-value">{{
-                caseItem.transportDetails.currentLocation
-              }}</text>
+            <!-- 杞繍鐘舵�佷俊鎭� -->
+            <view class="detail-item" v-if="getTransportStatus(caseItem) == 2">
+              <text class="detail-label">杞繍鐘舵��</text>
+              <text class="detail-value">杞繍涓�</text>
             </view>
-
-            <view
-              class="detail-item"
-              v-if="
-                caseItem.transportStatus === 'transporting' &&
-                caseItem.transportDetails?.estimatedTime
-              "
-            >
-              <text class="detail-label">棰勮鍒拌揪</text>
-              <text class="detail-value">{{
-                caseItem.transportDetails.estimatedTime
-              }}</text>
-            </view>
-
-            <!-- 瀹屾垚鍚庢樉绀虹殑淇℃伅 -->
-            <view
-              class="detail-item"
-              v-if="
-                caseItem.transportStatus === 'completed' &&
-                caseItem.transportDetails?.completedTime
-              "
-            >
-              <text class="detail-label">瀹屾垚鏃堕棿</text>
-              <text class="detail-value">{{
-                caseItem.transportDetails.completedTime
-              }}</text>
+            <view class="detail-item" v-if="getTransportStatus(caseItem) == 3">
+              <text class="detail-label">杞繍鐘舵��</text>
+              <text class="detail-value">宸插畬鎴�</text>
             </view>
           </view>
 
-          <!-- 鎿嶄綔鎸夐挳 -->
+          <!-- 鎿嶄綔鎸夐挳 - 淇敼鍒ゆ柇閫昏緫 -->
           <view class="transport-actions">
+            <!-- 鍙垱寤鸿浆杩愬崟鐨勬潯浠讹細宸插悓鎰� + 闇�杞繍 + 鏃犺浆杩愬崟 -->
             <button
-              v-if="
-                !caseItem.transportOrderNo &&
-                caseItem.status === 'agreed'
-              "
+              v-if="canCreateTransport(caseItem)"
               class="transport-btn primary"
               @tap.stop="createTransportOrder(caseItem)"
             >
               鍒涘缓杞繍鍗�
             </button>
 
+            <!-- 鏈夎浆杩愬崟鍙煡鐪� -->
             <button
-              v-if="
-                caseItem.transportStatus === 'not_transported' &&
-                caseItem.status !== 'agreed'
-              "
-              class="transport-btn disabled"
-              disabled
-            >
-              闇�鍏堝悓鎰忔渚�
-            </button>
-
-            <!-- 鍙鏈夎浆杩愬崟鍙峰氨鍙互鏌ョ湅璇︽儏 -->
-            <button
-              v-if="
-                caseItem.transportOrderNo && caseItem.transportOrderNo !== ''
-              "
+              v-if="hasTransport(caseItem)"
               class="transport-btn secondary"
               @tap.stop="viewTransportDetail(caseItem)"
             >
-              鏌ョ湅杞繍璇︽儏
-            </button>
-
-            <button
-              v-if="caseItem.transportStatus === 'transporting'"
-              class="transport-btn track"
-              @tap.stop="trackTransport(caseItem)"
-            >
-              瀹炴椂璺熻釜
+              鏌ョ湅杞繍鍗�
             </button>
           </view>
         </view>
-
+        <!-- 鏃犻渶杞繍鎻愮ず -->
+        <view
+          class="transport-section"
+          v-else-if="caseItem.reportStatus == '3'"
+        >
+          <view class="transport-info">
+            <text class="transport-note">璇ユ渚嬫棤闇�杞繍</text>
+          </view>
+        </view>
         <view class="footer">
           <view class="action-info">
             <text class="label">妗堜緥鐘舵��</text>
@@ -268,25 +224,17 @@
           <view class="actions">
             <button
               class="action-btn"
-              v-if="caseItem.status === 'reported'"
+              v-if="caseItem.reportStatus == '1' || caseItem.reportStatus == '2'"
               @tap.stop="withdrawCase(caseItem)"
             >
               鎾ゅ洖
             </button>
-            <button
-              class="action-btn"
-              v-if="
-                caseItem.status === 'read' ||
-                caseItem.status === 'agreed' ||
-                caseItem.status === 'rejected'
-              "
-              @tap.stop="viewDetails(caseItem)"
-            >
+            <button class="action-btn" @tap.stop="viewDetails(caseItem)">
               鏌ョ湅璇︽儏
             </button>
             <button
               class="action-btn secondary"
-              v-if="caseItem.status === 'reported'"
+              v-if="caseItem.reportStatus == '1' || caseItem.reportStatus == '2'"
               @tap.stop="editCase(caseItem)"
             >
               缂栬緫
@@ -296,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">
+      <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>
 
@@ -329,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);
@@ -357,88 +313,16 @@
 // 鎾ゅ洖纭寮圭獥鐩稿叧
 const showWithdrawModal = ref(false);
 const currentCase = ref({});
-
-// 绛涢�夌浉鍏�
-const caseTypes = [
-  { label: "鍏ㄩ儴", value: "all" },
-  { label: "宸蹭笂鎶�", value: "reported" },
-  { label: "宸查槄璇�", value: "read" },
-  { label: "宸插悓鎰�", value: "agreed" },
-  { label: "宸查┏鍥�", value: "rejected" },
-];
-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" },
-};
-
-// 鏁版嵁鏄犲皠鍑芥暟
-// 鏁版嵁鏄犲皠鍑芥暟
+// 鏁版嵁鏄犲皠鍑芥暟 - 淇敼浠ュ尮閰峆C绔瓧娈�
 const mapApiDataToCaseItem = (apiData) => {
   const statusMap = {
-    1: { status: "reported", statusText: "宸蹭笂鎶�" },
-    2: { status: "read", statusText: "宸查槄璇�" },
-    3: { status: "agreed", statusText: "宸插悓鎰�" },
-    4: { status: "rejected", statusText: "宸查┏鍥�" },
-  };
-
-  const transportStatusMap = {
-    1: "not_transported",
-    2: "transporting",
-    3: "completed",
-    4: "not_transported",
-    5: "not_transported",
+    1: { status: "1", statusText: "宸蹭笂鎶�" },
+    2: { status: "2", statusText: "宸查槄璇�" },
+    3: { status: "3", statusText: "宸插悓鎰�" },
+    4: { status: "4", statusText: "宸查┏鍥�" },
   };
 
   const statusInfo = statusMap[apiData.reportStatus] || statusMap["1"];
-
-  // 澶勭悊杞繍淇℃伅 - 鏇村姞鍋ュ.鐨勫鐞�
-  let transportDetails = null;
-  let transportStatus = "not_transported";
-  let transportOrderNo = "";
-  let transportTime = "";
-
-  // 浼樺厛浠� serviceTransport 鑾峰彇杞繍淇℃伅
-  if (
-    apiData.serviceTransport &&
-    Array.isArray(apiData.serviceTransport) &&
-    apiData.serviceTransport.length > 0
-  ) {
-    const transport = apiData.serviceTransport[0];
-    transportDetails = {
-      driver: transport.driver || "",
-      vehicle: transport.vehicle || "",
-      phone: transport.driverPhone || "",
-      currentLocation: transport.transportStartPlace || "",
-      estimatedTime: transport.estimatedTime || "",
-      completedTime: transport.completedTime || "",
-    };
-    transportStatus =
-      transportStatusMap[transport.transitStatus] || "not_transported";
-    transportOrderNo = transport.id || "";
-    transportTime = transport.transportStartTime || "";
-  }
-
-  // 濡傛灉鐩存帴鏈夎浆杩愪俊鎭紝涔熻繘琛屽鐞�
-  if (apiData.transportOrderNo) {
-    transportOrderNo = apiData.transportOrderNo;
-  }
-  if (apiData.transportStartTime) {
-    transportTime = apiData.transportStartTime;
-  }
-  if (apiData.transitStatus) {
-    transportStatus =
-      transportStatusMap[apiData.transitStatus] || "not_transported";
-  }
 
   return {
     id: apiData.id || apiData.donatebaseinfoReportId,
@@ -449,28 +333,178 @@
     donorName: apiData.name,
     idCardNo: apiData.idcardno,
     gender:
-      dict.value.sys_user_sex?.find((item) => item.dictValue === apiData.sex)
+      dict.value.sys_user_sex?.find((item) => item.dictValue == apiData.sex)
         ?.dictLabel || apiData.sex,
     age: apiData.age,
+    ageunit: apiData.ageunit,
     bloodType:
       dict.value.sys_BloodType?.find(
-        (item) => item.dictValue === apiData.bloodType
+        (item) => item.dictValue == apiData.bloodType,
       )?.dictLabel || apiData.bloodType,
     diagnosis: apiData.diagnosisname,
-    reportTime: apiData.reporttime,
-    reporterName: apiData.reportername,
-    reviewTime: apiData.reviewTime,
-    reviewerName: apiData.reviewerName,
+    illnessoverview: apiData.illnessoverview,
+    patientstate: apiData.patientstate,
+    gcsScore: apiData.gcsScore,
+    infectious: apiData.infectious,
+    infectiousOther: apiData.infectiousOther,
+    isTransport: apiData.isTransport,
+    // 鏂板PC绔瓧娈�
+    education: apiData.education,
+    occupation: apiData.occupation,
+    nativeplace: apiData.nativeplace,
+    nation: apiData.nation,
+    nationality: apiData.nationality,
+    birthday: apiData.birthday,
+    idcardtype: apiData.idcardtype,
+    phone: apiData.phone,
+    // 鍖婚櫌淇℃伅
     departmentName: apiData.treatmentdeptname,
-    contactPerson: apiData.userName || apiData.contactPerson,
-    contactPhone: apiData.phone,
+    contactPerson: apiData.coordinatorName || apiData.infoName,
+    contactPhone: apiData.coordinatorNo || apiData.phone,
+    // 涓婃姤淇℃伅
+    reportTime: apiData.reporttime,
+    reporterName: apiData.reportername || apiData.infoName,
+    reviewTime: apiData.approvetime,
+    reviewerName: apiData.approvername,
+    // 鐘舵�佸拰杞繍
     ...statusInfo,
-    transportStatus: transportStatus,
-    transportOrderNo: transportOrderNo,
-    transportTime: transportTime,
-    transportDetails: transportDetails,
+    // 杞繍淇℃伅
+    serviceTransport: apiData.serviceTransport || [],
+    // 鍏朵粬瀛楁
+    remark: apiData.remark,
   };
 };
+// 杞繍鍒ゆ柇鏂规硶 - 涓嶱C绔繚鎸佷竴鑷�
+const hasTransport = (caseData) => {
+  return caseData.serviceTransport && caseData.serviceTransport.length > 0;
+};
+const createNewCase = () => {
+  uni.navigateTo({
+    url: '/pages/case/CaseDetails'
+  });
+};
+const canCreateTransport = (caseData) => {
+  return (
+    (caseData.isTransport == "2" || caseData.isTransport == 2) && // 闇�瑕佽浆杩�
+    !hasTransport(caseData)
+  ); // 鏃犺浆杩愬崟
+};
+
+const getTransportOrderNo = (caseData) => {
+  if (hasTransport(caseData)) {
+    const transport = caseData.serviceTransport[0];
+    return transport.reportId || transport.id || "";
+  }
+  return "";
+};
+
+const getTransportStartTime = (caseData) => {
+  if (hasTransport(caseData)) {
+    return caseData.serviceTransport[0].transportStartTime;
+  }
+  return "";
+};
+
+const getTransportPlace = (caseData) => {
+  if (hasTransport(caseData)) {
+    return caseData.serviceTransport[0].transportStartPlace;
+  }
+  return "";
+};
+
+const getCoordinator = (caseData) => {
+  if (hasTransport(caseData)) {
+    return caseData.serviceTransport[0].contactPerson;
+  }
+  return "";
+};
+const getTransportStatus = (caseData) => {
+  if (hasTransport(caseData)) {
+    return caseData.serviceTransport[0].transitStatus;
+  }
+  return null;
+};
+
+const getTransportStatusText = (caseData) => {
+  if (!hasTransport(caseData)) {
+    return "闇�杞繍";
+  }
+  const status = getTransportStatus(caseData);
+  const map = {
+    1: "寰呰浆杩�",
+    2: "杞繍涓�",
+    3: "宸插畬鎴�",
+    4: "宸插彇娑�",
+    5: "鏆傚瓨",
+  };
+  return map[status] || "鏈煡";
+};
+
+// 杞繍鐘舵�佹牱寮�
+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";
+};
+
+// 淇缂栬緫鎸夐挳璺宠浆
+const editCase = (caseItem) => {
+  uni.navigateTo({
+    url: `/pages/case/CaseDetails?id=${caseItem.id}&edit=true`,
+  });
+};
+
+// 淇鏌ョ湅璇︽儏鎸夐挳璺宠浆
+const viewDetails = (caseItem) => {
+  uni.navigateTo({
+    url: `/pages/case/CaseInfo?id=${caseItem.id}`,
+  });
+};
+
+// 鍘熸湁鐨勮浆杩愭搷浣滄柟娉曚繚鎸佷笉鍙�
+const createTransportOrder = (caseItem) => {
+  uni.navigateTo({
+    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];
+    uni.navigateTo({
+      url: `/pages/case/transferinfo?id=${transport.id}`,
+    });
+  }
+};
+
+// 绛涢�夌浉鍏�
+const caseTypes = [
+  { label: "鍏ㄩ儴", value: "all" },
+  { label: "宸蹭笂鎶�", value: "1" },
+  { label: "宸查槄璇�", value: "2" },
+  { label: "宸插悓鎰�", value: "3" },
+  { label: "宸查┏鍥�", value: "4" },
+];
+const currentType = ref("all");
+const startDate = ref("");
+const endDate = ref("");
 
 // 鐢熷懡鍛ㄦ湡
 onLoad(async (options) => {
@@ -479,11 +513,17 @@
     "sys_IDType",
     "sys_user_sex",
     "sys_BloodType",
-    "sys_DiseaseType"
+    "sys_DiseaseType",
   );
 
   // 鍔犺浇鏁版嵁
   await loadInitialData();
+});
+
+onReachBottom(() => {
+  if (hasMore.value && !loading.value && !loadingMore.value) {
+    onLoadMore();
+  }
 });
 
 onShow(() => {
@@ -496,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
+      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;
   }
 };
 
@@ -543,74 +627,74 @@
 const donateTotal = async () => {
   try {
     const res = await uni.$uapi.post("/project/donatebaseinforeport/getTotal");
-    stats.value = {
-      totalCases: res["1"] || 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.status === 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();
-};
-
-// 鍏朵粬鍔熻兘鍑芥暟锛堜繚鎸佸師鏈夐�昏緫锛�
-const createTransportOrder = (caseItem) => {
-  uni.navigateTo({
-    url: `/pages/case/transferinfo?caseId=${caseItem.id}&donorNo=${caseItem.donorNo}`,
-  });
-};
-
-const viewTransportDetail = (caseItem) => {
-  uni.navigateTo({
-    url: `/pages/transport/detail?orderNo=${caseItem.transportOrderNo}`,
-  });
 };
 
 const trackTransport = (caseItem) => {
@@ -620,9 +704,7 @@
 };
 
 const updateTransportStatus = (orderNo, newStatus) => {
-  const caseItem = cases.value.find(
-    (item) => item.transportOrderNo === orderNo
-  );
+  const caseItem = cases.value.find((item) => item.transportOrderNo == orderNo);
   if (caseItem) {
     caseItem.transportStatus = newStatus;
   }
@@ -639,35 +721,40 @@
   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 = () => {
   showWithdrawModal.value = false;
-};
-
-const viewDetails = (caseItem) => {
-  uni.navigateTo({
-    url: `/pages/case/detail?id=${caseItem.id}`,
-  });
-};
-
-const editCase = (caseItem) => {
-  uni.navigateTo({
-    url: `/pages/case/edit?id=${caseItem.id}`,
-  });
 };
 </script>
 
@@ -1044,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;
@@ -1128,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

--
Gitblit v1.9.3