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 | 915 +++++++++++++++++++++++++++++++-------------------------
1 files changed, 509 insertions(+), 406 deletions(-)
diff --git a/pages/case/index.vue b/pages/case/index.vue
index 338f5ea..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>
@@ -124,87 +131,89 @@
<text class="value">{{ caseItem.reviewerName }}</text>
</view>
</view>
- <!-- 鏄剧ず杞繍璇︽儏 -->
- <!-- 鍦� .detail-info 閮ㄥ垎涔嬪悗锛�.footer 閮ㄥ垎涔嬪墠娣诲姞杞繍淇℃伅鍖哄煙 -->
- <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.transportStatus !== 'not_transported'"
- >
+ <!-- 杞繍璇︽儏鍒ゆ柇閫昏緫淇敼 -->
+ <view class="transport-details" v-if="hasTransport(caseItem)">
<view class="detail-item">
<text class="detail-label">杞繍鍗曞彿</text>
- <text class="detail-value">{{ caseItem.transportOrderNo }}</text>
- </view>
- <view class="detail-item" v-if="caseItem.transportDetails">
- <text class="detail-label">杞繍杞﹁締</text>
<text class="detail-value">{{
- caseItem.transportDetails.vehicle
+ getTransportOrderNo(caseItem)
}}</text>
</view>
- <view
- class="detail-item"
- v-if="
- caseItem.transportDetails &&
- caseItem.transportStatus === 'transporting'
- "
- >
- <text class="detail-label">褰撳墠浣嶇疆</text>
+
+ <view class="detail-item" v-if="getTransportStartTime(caseItem)">
+ <text class="detail-label">璁″垝杞繍鏃堕棿</text>
<text class="detail-value">{{
- caseItem.transportDetails.currentLocation
+ getTransportStartTime(caseItem)
}}</text>
+ </view>
+
+ <view class="detail-item" v-if="getTransportPlace(caseItem)">
+ <text class="detail-label">鍑哄彂鍦扮偣</text>
+ <text class="detail-value">{{
+ getTransportPlace(caseItem)
+ }}</text>
+ </view>
+
+ <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="getTransportStatus(caseItem) == 2">
+ <text class="detail-label">杞繍鐘舵��</text>
+ <text class="detail-value">杞繍涓�</text>
+ </view>
+ <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.transportStatus === 'not_transported' &&
- 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.transportStatus !== 'not_transported'"
+ 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">
@@ -215,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)"
>
缂栬緫
@@ -243,12 +244,17 @@
</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="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>
@@ -271,49 +277,256 @@
</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 } from "vue";
-import { onLoad, onShow } from "@dcloudio/uni-app";
+import { ref, computed, onMounted } from "vue";
+import { onLoad, onShow, onReachBottom } from "@dcloudio/uni-app";
import { useDict } from "@/utils/dict";
+// 鍝嶅簲寮忔暟鎹�
const dict = ref({});
-const genderOptions = ref([]);
-const educationOptions = ref([]);
+const loading = ref(false);
+const initLoading = ref(false);
+const loadingMore = ref(false);
+const cases = ref([]);
const total = ref(0);
const pageNum = ref(1);
const pageSize = ref(10);
+const hasMore = ref(true);
+const refreshing = ref(false);
// 缁熻鏁版嵁
const stats = ref({
- totalCases: 8,
- readCases: 4,
- agreedCases: 2,
+ totalCases: 0,
+ readCases: 0,
+ agreedCases: 0,
});
// 鎾ゅ洖纭寮圭獥鐩稿叧
const showWithdrawModal = ref(false);
const currentCase = ref({});
+// 鏁版嵁鏄犲皠鍑芥暟 - 淇敼浠ュ尮閰峆C绔瓧娈�
+const mapApiDataToCaseItem = (apiData) => {
+ const statusMap = {
+ 1: { status: "1", statusText: "宸蹭笂鎶�" },
+ 2: { status: "2", statusText: "宸查槄璇�" },
+ 3: { status: "3", statusText: "宸插悓鎰�" },
+ 4: { status: "4", statusText: "宸查┏鍥�" },
+ };
+ const statusInfo = statusMap[apiData.reportStatus] || statusMap["1"];
+
+ return {
+ id: apiData.id || apiData.donatebaseinfoReportId,
+ donorNo: apiData.caseNo,
+ hospitalName: apiData.treatmenthospitalname,
+ hospitalLogo: "/static/hospital/default.jpg",
+ caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
+ donorName: apiData.name,
+ idCardNo: apiData.idcardno,
+ gender:
+ 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,
+ )?.dictLabel || apiData.bloodType,
+ diagnosis: apiData.diagnosisname,
+ 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.coordinatorName || apiData.infoName,
+ contactPhone: apiData.coordinatorNo || apiData.phone,
+ // 涓婃姤淇℃伅
+ reportTime: apiData.reporttime,
+ reporterName: apiData.reportername || apiData.infoName,
+ reviewTime: apiData.approvetime,
+ reviewerName: apiData.approvername,
+ // 鐘舵�佸拰杞繍
+ ...statusInfo,
+ // 杞繍淇℃伅
+ 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) => {
// 鑾峰彇瀛楀吀鏁版嵁
dict.value = await useDict(
"sys_IDType",
"sys_user_sex",
"sys_BloodType",
- "sys_DiseaseType"
+ "sys_DiseaseType",
);
- // 鍒濆鍖栭�夐」鏁版嵁
- initOptions();
- donatebaseinforeportList();
- donateTotal();
+ // 鍔犺浇鏁版嵁
+ await loadInitialData();
});
+
+onReachBottom(() => {
+ if (hasMore.value && !loading.value && !loadingMore.value) {
+ onLoadMore();
+ }
+});
+
onShow(() => {
- // 杩欓噷鍙互娣诲姞浠庤浆杩愰〉闈㈣繑鍥炴椂鐨勬暟鎹埛鏂伴�昏緫
- // 渚嬪妫�鏌ユ湰鍦板瓨鍌ㄤ腑鏄惁鏈夐渶瑕佹洿鏂扮殑杞繍鐘舵��
const transportUpdate = uni.getStorageSync("transportStatusUpdate");
if (transportUpdate) {
updateTransportStatus(transportUpdate.orderNo, transportUpdate.status);
@@ -321,366 +534,227 @@
}
});
-// 鍒濆鍖栭�夐」鏁版嵁鐨勬柟娉�
-const initOptions = () => {
- genderOptions.value = dict.value.sys_IDType || [];
- educationOptions.value = dict.value.sys_user_sex || [];
-};
-const donatebaseinforeportList = async () => {
- const params = {
- pageNum: pageNum.value,
- pageSize: pageSize.value,
- };
- const res = await uni.$uapi.post("/system/donatebaseinforeport/list", params);
- total.value = res.total;
- console.log(res.records, "11");
-};
-const donateTotal = async () => {
- const res = await uni.$uapi.post("/system/donatebaseinforeport/getTotal");
- console.log(res);
-};
-// 绛涢�夌浉鍏�
-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("");
-// 妗堜緥璁板綍鏁版嵁 - 澧炲姞鏇村鏁版嵁[1,4](@ref)
-const cases = ref([
- {
- id: 1,
- donorNo: "DON20240325001",
- hospitalName: "闈掑矝闀滄箹鍖婚櫌",
- hospitalLogo: "/static/hospital/kiang-wu.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "寮犱笁",
- idCardNo: "370203198510123456",
- gender: "鐢�",
- age: 38,
- bloodType: "A鍨�",
- diagnosis: "鑴戝浼ゅ鑷磋剳姝讳骸",
- reportTime: "2024-03-25 09:30",
- reporterName: "鏉庡尰鐢�",
- status: "agreed",
- statusText: "宸插悓鎰�",
- departmentName: "绁炵粡澶栫",
- contactPerson: "鐜嬫姢澹�",
- contactPhone: "13800138000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 2,
- donorNo: "DON20240320002",
- hospitalName: "闈掑矝绉戝ぇ鍖婚櫌",
- hospitalLogo: "/static/hospital/must.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鏉庡洓",
- idCardNo: "370205197805207890",
- gender: "濂�",
- age: 45,
- bloodType: "O鍨�",
- diagnosis: "鎬ユ�у績鑲屾姝�",
- reportTime: "2024-03-20 15:00",
- reporterName: "寮犲尰鐢�",
- status: "read",
- statusText: "宸查槄璇�",
- reviewTime: "2024-03-21 10:15",
- reviewerName: "瀹℃牳涓撳憳A",
- departmentName: "蹇冨唴绉�",
- contactPerson: "璧垫姢澹�",
- contactPhone: "13900139000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "transporting", // 杞繍涓�
- transportOrderNo: "TR20240321001",
- transportTime: "2024-03-21 14:30",
- transportDetails: {
- driver: "寮犲笀鍌�",
- vehicle: "椴丅12345",
- phone: "13800138000",
- estimatedTime: "2灏忔椂",
- currentLocation: "闈掑矝甯傚崡鍖�",
- },
- },
- {
- id: 3,
- donorNo: "DON20240318003",
- hospitalName: "闈掑矝澶у闄勫睘鍖婚櫌",
- hospitalLogo: "/static/hospital/qingda.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鐜嬩簲",
- idCardNo: "370211197212153214",
- gender: "鐢�",
- age: 51,
- bloodType: "B鍨�",
- diagnosis: "棰呭唴鍑鸿",
- reportTime: "2024-03-18 14:20",
- reporterName: "鍒樺尰鐢�",
- status: "agreed",
- statusText: "宸插悓鎰�",
- reviewTime: "2024-03-19 09:45",
- reviewerName: "瀹℃牳涓撳憳B",
- departmentName: "绁炵粡鍐呯",
- contactPerson: "閽辨姢澹�",
- contactPhone: "13600136000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "completed", // 宸插畬鎴�
- transportOrderNo: "TR20240319001",
- transportTime: "2024-03-19 11:20",
- transportDetails: {
- driver: "鏉庡笀鍌�",
- vehicle: "椴丅67890",
- phone: "13900139000",
- completedTime: "2024-03-19 13:45",
- distance: "156鍏噷",
- },
- },
- {
- id: 4,
- donorNo: "DON20240315004",
- hospitalName: "闈掑矝甯傜珛鍖婚櫌",
- hospitalLogo: "/static/hospital/shili.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "璧靛叚",
- idCardNo: "370205198803274561",
- gender: "濂�",
- age: 36,
- bloodType: "AB鍨�",
- diagnosis: "澶氬櫒瀹樺姛鑳借“绔�",
- reportTime: "2024-03-15 16:40",
- reporterName: "闄堝尰鐢�",
- status: "rejected",
- statusText: "宸查┏鍥�",
- reviewTime: "2024-03-16 11:20",
- reviewerName: "瀹℃牳涓撳憳C",
- rejectReason: "璧勬枡涓嶅畬鏁达紝闇�琛ュ厖瀹跺睘鍚屾剰涔�",
- departmentName: "ICU",
- contactPerson: "瀛欐姢澹�",
- contactPhone: "13700137000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 5,
- donorNo: "DON20240310005",
- hospitalName: "闈掑矝鐪肩鍖婚櫌",
- hospitalLogo: "/static/hospital/yanke.jpg",
- caseType: "瑙掕啘鎹愮尞妗堜緥",
- donorName: "瀛欎竷",
- idCardNo: "370203199205187896",
- gender: "鐢�",
- age: 32,
- bloodType: "O鍨�",
- diagnosis: "瑙嗙綉鑶滄瘝缁嗚優鐦�",
- reportTime: "2024-03-10 08:15",
- reporterName: "鐪肩寮犲尰鐢�",
- status: "read",
- statusText: "宸查槄璇�",
- reviewTime: "2024-03-11 14:30",
- reviewerName: "瀹℃牳涓撳憳A",
- departmentName: "鐪肩",
- contactPerson: "鍛ㄦ姢澹�",
- contactPhone: "13500135000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傜溂搴�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
- {
- id: 6,
- donorNo: "DON20240305006",
- hospitalName: "闈掑矝鍎跨鍖婚櫌",
- hospitalLogo: "/static/hospital/children.jpg",
- caseType: "鍣ㄥ畼鎹愮尞妗堜緥",
- donorName: "鍛ㄥ叓",
- idCardNo: "370211201802153248",
- gender: "濂�",
- age: 6,
- bloodType: "A鍨�",
- diagnosis: "鍏堝ぉ鎬у績鑴忕梾",
- reportTime: "2024-03-05 11:25",
- reporterName: "鍎跨鏉庡尰鐢�",
- status: "reported",
- statusText: "宸蹭笂鎶�",
- departmentName: "鍎跨ICU",
- contactPerson: "鍚存姢澹�",
- contactPhone: "13400134000",
- redCrossOrg: "闈掑矝甯傜孩鍗佸瓧浼�",
- acquisitionOrg: "闈掑矝甯傚櫒瀹樿幏鍙栫粍缁�",
- transportStatus: "not_transported", // 杞繍鐘舵�侊細not_transported-鏈浆杩�, transporting-杞繍涓�, completed-宸插畬鎴�
- transportOrderNo: "", // 杞繍鍗曞彿
- transportTime: "", // 杞繍鏃堕棿
- transportDetails: null, // 杞繍璇︽儏
- },
-]);
-// 杞繍鐘舵�佹槧灏�
-const transportStatusMap = {
- not_transported: {
- text: "鏈浆杩�",
- color: "warning",
- class: "not-transported",
- },
- transporting: { text: "杞繍涓�", color: "primary", class: "transporting" },
- completed: { text: "宸插畬鎴�", color: "success", class: "completed" },
+// 鏁版嵁鍔犺浇鍑芥暟
+const loadInitialData = async () => {
+ initLoading.value = true;
+ try {
+ await Promise.all([donatebaseinforeportList(true), donateTotal()]);
+ } catch (error) {
+ console.error("鍒濆鍖栨暟鎹け璐�:", error);
+ } finally {
+ initLoading.value = false;
+ }
};
-// 绛涢�夎褰昜3](@ref)
+// 鑾峰彇妗堜緥鍒楄〃
+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);
+
+ 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 {
+ throw new Error(res.msg || "鍔犺浇澶辫触");
+ }
+ } catch (error) {
+ console.error("鑾峰彇妗堜緥鍒楄〃澶辫触:", error);
+ uni.showToast({
+ title: "缃戠粶璇锋眰澶辫触",
+ icon: "none",
+ });
+ } finally {
+ loading.value = false;
+ loadingMore.value = false;
+ }
+};
+
+// 鑾峰彇缁熻鏁版嵁
+const donateTotal = async () => {
+ try {
+ const res = await uni.$uapi.post("/project/donatebaseinforeport/getTotal");
+ 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 hasMore = ref(true);
-const refreshing = ref(false);
-// 鍒涘缓杞繍鍗�
-const createTransportOrder = (caseItem) => {
- console.log(caseItem);
-
- uni.navigateTo({
- url: `/pages/case/transferinfo?caseId=${caseItem.id}&donorNo=${caseItem.donorNo}`,
- });
+// 浜嬩欢澶勭悊鍑芥暟
+const selectType = (type) => {
+ currentType.value = type;
+ // 閲嶇疆鍒嗛〉锛岄噸鏂板姞杞芥暟鎹�
+ pageNum.value = 1;
+ donatebaseinforeportList(true);
};
-// 鏌ョ湅杞繍璇︽儏
-const viewTransportDetail = (caseItem) => {
- uni.navigateTo({
- url: `/pages/transport/detail?orderNo=${caseItem.transportOrderNo}`,
- });
+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(true);
+ await donateTotal();
+ setTimeout(() => {
+ refreshing.value = false;
+ }, 1000);
+};
+
+const onLoadMore = async () => {
+ if (!hasMore.value || loading.value || loadingMore.value) return;
+ await donatebaseinforeportList();
+};
+
const trackTransport = (caseItem) => {
uni.navigateTo({
url: `/pages/transport/track?orderNo=${caseItem.transportOrderNo}`,
});
};
-// 鏇存柊杞繍鐘舵�侊紙鐢ㄤ簬浠庤浆杩愰〉闈㈣繑鍥炴椂鍒锋柊鏁版嵁锛�
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;
}
};
-// 閫夋嫨绫诲瀷
-const selectType = (type) => {
- currentType.value = type;
-};
-// 鏃ユ湡閫夋嫨
-const onStartDateChange = (e) => {
- startDate.value = e.detail.value;
-};
-
-const onEndDateChange = (e) => {
- endDate.value = e.detail.value;
-};
-
-// 鏌ョ湅璇︽儏
const viewDetail = (caseItem) => {
uni.navigateTo({
url: `/pages/case/detail?id=${caseItem.id}`,
});
};
-// 鎾ゅ洖妗堜緥[7](@ref)
const withdrawCase = (caseItem) => {
currentCase.value = caseItem;
showWithdrawModal.value = true;
};
-// 纭鎾ゅ洖
-const confirmWithdraw = () => {
- const index = cases.value.findIndex(
- (item) => item.id === currentCase.value.id
- );
- if (index !== -1) {
- // 浠庡垪琛ㄤ腑绉婚櫎宸叉挙鍥炵殑妗堜緥[4](@ref)
- 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}`,
- });
-};
-
-// 涓嬫媺鍒锋柊
-const onRefresh = () => {
- refreshing.value = true;
- loadCases();
- setTimeout(() => {
- refreshing.value = false;
- }, 1000);
-};
-
-// 鍔犺浇鏇村
-const onLoadMore = () => {
- if (!hasMore.value) return;
- loadCases();
-};
-
-// 鍔犺浇璁板綍
-const loadCases = () => {
- // 杩欓噷璋冪敤API鍔犺浇鏁版嵁
- setTimeout(() => {
- hasMore.value = false;
- }, 1000);
};
</script>
@@ -1057,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;
@@ -1141,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