From c80bc467a41daa6cbae4e5515a300a8ca98cfeaa Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期二, 21 七月 2026 15:44:01 +0800
Subject: [PATCH] 维护
---
pagesSub/case/transfer.vue | 454 +++++++++++++++++++++++++++++++++++---------------------
1 files changed, 283 insertions(+), 171 deletions(-)
diff --git a/pagesSub/case/transfer.vue b/pagesSub/case/transfer.vue
index 6e13f37..22b7268 100644
--- a/pagesSub/case/transfer.vue
+++ b/pagesSub/case/transfer.vue
@@ -72,7 +72,7 @@
<view class="info">
<text class="case-no">{{ item.caseNo || item.reportId }}</text>
<text class="patient"
- >{{ item.patName }} | {{ getGenderText(item.sex) }} |
+ >{{ item.patName }} | {{ item.sex == 1 ? "鐢�" : "濂�" }} |
{{ item.age }}宀�</text
>
</view>
@@ -115,27 +115,41 @@
}}</text>
</view>
<view class="actions">
+ <!-- 寰呰浆杩�(1)锛氬彲浠ュ紑濮嬭浆杩� -->
<button
- class="action-btn"
- v-if="item.transitStatus === 1"
- @tap.stop="startTransport(item)"
+ class="action-btn primary"
+ v-if="item.transitStatus == 1"
+ @tap.stop="handleStartTransport(item)"
>
寮�濮嬭浆杩�
</button>
+
+ <!-- 杞繍涓�(2)锛氬彲浠ュ畬鎴愭垨鍙栨秷 -->
<button
- class="action-btn"
- v-if="item.transitStatus === 2"
- @tap.stop="completeTransport(item)"
+ class="action-btn success"
+ v-if="item.transitStatus == 2"
+ @tap.stop="handleCompleteTransport(item)"
>
瀹屾垚杞繍
</button>
<button
- class="action-btn secondary"
- v-if="item.transitStatus != 3"
- @tap.stop="editTransport(item)"
+ class="action-btn danger"
+ v-if="item.transitStatus == 2"
+ @tap.stop="handleCancelTransport(item)"
>
- 缂栬緫
+ 鍙栨秷杞繍
</button>
+
+ <!-- 宸插彇娑�(4)锛氬彲浠ユ仮澶� -->
+ <button
+ class="action-btn warning"
+ v-if="item.transitStatus == 4"
+ @tap.stop="handleRecoverTransport(item)"
+ >
+ 鎭㈠杞繍
+ </button>
+
+ <!-- 閫氱敤鎸夐挳 -->
<button class="action-btn secondary" @tap.stop="viewDetails(item)">
鏌ョ湅璇︽儏
</button>
@@ -156,7 +170,7 @@
<!-- 绌虹姸鎬� -->
<view
class="empty-state"
- v-if="!loading && filteredTransports.length === 0"
+ v-if="!loading && filteredTransports.length == 0"
>
<image src="/static/empty/no-transport.png" mode="aspectFit" />
<text>鏆傛棤杞繍鍗曡褰�</text>
@@ -164,31 +178,37 @@
</scroll-view>
<!-- 鎿嶄綔纭寮圭獥 -->
- <view class="modal-mask" v-if="showActionModal">
- <view class="modal-content">
+ <view class="modal-mask" v-if="showActionModal" @tap="cancelAction">
+ <view class="modal-content" @tap.stop>
<view class="modal-header">
<text class="modal-title">{{ modalTitle }}</text>
</view>
<view class="modal-body">
- <text
- >纭畾瑕亄{ modalAction }}杞繍鍗� "{{ currentTransport.caseNo }}"
- 鍚楋紵</text
- >
+ <text class="modal-desc">
+ 纭畾瑕亄{ modalAction }}杞繍鍗� "{{ currentTransport.caseNo }}" 鍚楋紵
+ </text>
+ <view class="modal-summary" v-if="currentTransport.patName">
+ <text class="summary-item"
+ >鎮h�咃細{{ currentTransport.patName }}</text
+ >
+ <text class="summary-item"
+ >褰撳墠鐘舵�侊細{{
+ getStatusText(currentTransport.transitStatus)
+ }}</text
+ >
+ </view>
</view>
<view class="modal-footer">
<button class="modal-btn cancel" @tap="cancelAction">鍙栨秷</button>
- <button class="modal-btn confirm" @tap="confirmAction">纭</button>
+ <button class="modal-btn confirm" @tap="confirmAction">
+ 纭{{ modalAction }}
+ </button>
</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>
@@ -222,6 +242,7 @@
const currentTransport = ref({});
const modalTitle = ref("");
const modalAction = ref("");
+const modalTargetStatus = ref(null);
// 绛涢�夌浉鍏�
const transportTypes = [
@@ -280,18 +301,19 @@
// 鍏朵粬瀛楁
transportStartPlace: apiData.transportStartPlace,
remark: apiData.remark,
+ annexfilesList: apiData.annexfilesList || [],
};
};
// 璁$畻灞炴�э細绛涢�夎褰�
const filteredTransports = computed(() => {
let result = transports.value;
-
+
// 鍓嶇鐘舵�佺瓫閫�
if (currentType.value !== "") {
- result = result.filter((item) => item.transitStatus === currentType.value);
+ result = result.filter((item) => item.transitStatus == currentType.value);
}
-
+
return result;
});
@@ -324,7 +346,7 @@
if (!gender) return "寰呰浆杩�";
if (!dict.value.sys_user_sex) return gender;
const genderItem = dict.value.sys_user_sex.find(
- (item) => item.dictValue === gender,
+ (item) => item.dictValue == gender,
);
return genderItem ? genderItem.dictLabel : gender;
};
@@ -362,6 +384,134 @@
}
};
+// ============== 杞繍鐘舵�佸彉鏇存搷浣� ==============
+
+/** 寮�濮嬭浆杩� */
+const handleStartTransport = (item) => {
+ currentTransport.value = { ...item };
+ modalTitle.value = "寮�濮嬭浆杩�";
+ modalAction.value = "寮�濮�";
+ modalTargetStatus.value = 2; // 璁剧疆涓鸿浆杩愪腑
+ showActionModal.value = true;
+};
+
+/** 瀹屾垚杞繍 */
+const handleCompleteTransport = (item) => {
+ currentTransport.value = { ...item };
+ modalTitle.value = "瀹屾垚杞繍";
+ modalAction.value = "瀹屾垚";
+ modalTargetStatus.value = 3; // 璁剧疆涓鸿浆杩愬畬鎴�
+ showActionModal.value = true;
+};
+
+/** 鍙栨秷杞繍 */
+const handleCancelTransport = (item) => {
+ currentTransport.value = { ...item };
+ modalTitle.value = "鍙栨秷杞繍";
+ modalAction.value = "鍙栨秷";
+ modalTargetStatus.value = 4; // 璁剧疆涓鸿浆杩愬彇娑�
+ showActionModal.value = true;
+};
+
+/** 鎭㈠杞繍 */
+const handleRecoverTransport = (item) => {
+ currentTransport.value = { ...item };
+ modalTitle.value = "鎭㈠杞繍";
+ modalAction.value = "鎭㈠";
+ modalTargetStatus.value = 2; // 璁剧疆涓鸿浆杩愪腑
+ showActionModal.value = true;
+};
+
+// 鍙栨秷鎿嶄綔
+const cancelAction = () => {
+ showActionModal.value = false;
+};
+
+// 纭鎿嶄綔
+const confirmAction = async () => {
+ try {
+ const requestData = {
+ ...currentTransport.value,
+ transitStatus: modalTargetStatus.value,
+ };
+
+ // 娓呯┖闄勪欢ID锛堝弬鐓C绔�昏緫锛�
+ if (requestData.annexfilesList && requestData.annexfilesList.length > 0) {
+ requestData.annexfilesList.forEach((item) => {
+ item.id = null;
+ });
+ }
+
+ const res = await uni.$uapi.post("/project/transport/edit", requestData);
+
+ if (res && res.code == 200) {
+ uni.showToast({
+ title: `${modalAction.value}杞繍鎴愬姛`,
+ icon: "success",
+ });
+
+ // 濡傛灉鏄畬鎴愯浆杩愶紙鐘舵�佸彉涓�3锛夛紝鍚屾鏇存柊妗堜緥鐘舵��
+ if (modalTargetStatus.value == 3) {
+ try {
+ // 鑾峰彇妗堜緥璇︽儏
+ const caseRes = await uni.$uapi.get(
+ `/project/donatebaseinforeport/getInfo/${requestData.reportId}`,
+ );
+
+ if (caseRes && caseRes.data) {
+ const caseData = caseRes.data;
+ caseData.isDonate = 1; // 鏍囪涓哄凡鎹愮尞
+
+ const editRes = await uni.$uapi.post(
+ "/project/donatebaseinforeport/edit",
+ caseData,
+ );
+
+ if (editRes && editRes.code == 200) {
+ uni.showToast({
+ title: "瀵瑰簲涓婃姤妗堜緥宸茶繘鍏ユ寮忔渚嬫祦绋�",
+ icon: "success",
+ });
+ }
+ }
+ } catch (caseError) {
+ console.error("鏇存柊妗堜緥鐘舵�佸け璐�:", caseError);
+ // 涓嶉樆鏂富娴佺▼锛屽彧鎻愮ず
+ uni.showToast({
+ title: "妗堜緥鐘舵�佹洿鏂板け璐ワ紝璇疯仈绯荤鐞嗗憳",
+ icon: "none",
+ });
+ }
+ }
+
+ // 鏇存柊鏈湴鏁版嵁
+ const index = transports.value.findIndex(
+ (item) => item.id == currentTransport.value.id,
+ );
+ if (index !== -1) {
+ transports.value[index].transitStatus = modalTargetStatus.value;
+ }
+
+ // 鍒锋柊缁熻鏁版嵁
+ await loadStats();
+
+ // 鍏抽棴寮圭獥
+ showActionModal.value = false;
+ } else {
+ uni.showToast({
+ title: res?.msg || `${modalAction.value}杞繍澶辫触`,
+ icon: "none",
+ });
+ }
+ } catch (error) {
+ console.error(`${modalAction.value}杞繍澶辫触:`, error);
+ uni.showToast({
+ title: "鎿嶄綔澶辫触锛岃绋嶅悗閲嶈瘯",
+ icon: "none",
+ });
+ }
+};
+
// 鏌ョ湅璇︽儏
const viewDetail = (item) => {
viewDetails(item);
@@ -384,53 +534,8 @@
// 鍒涘缓杞繍鍗�
const createTransport = () => {
uni.navigateTo({
- url: '/pages/transport/create'
+ url: "/pages/transport/create",
});
-};
-
-// 寮�濮嬭浆杩�
-const startTransport = (item) => {
- currentTransport.value = item;
- modalTitle.value = "寮�濮嬭浆杩�";
- modalAction.value = "寮�濮�";
- showActionModal.value = true;
-};
-
-// 瀹屾垚杞繍
-const completeTransport = (item) => {
- currentTransport.value = item;
- modalTitle.value = "瀹屾垚杞繍";
- modalAction.value = "瀹屾垚";
- showActionModal.value = true;
-};
-
-// 纭鎿嶄綔
-const confirmAction = async () => {
- try {
- if (modalAction.value === "寮�濮�") {
- await updateTransportStatus(2, "寮�濮嬭浆杩�");
- } else if (modalAction.value === "瀹屾垚") {
- await updateTransportStatus(3, "瀹屾垚杞繍");
- }
-
- uni.showToast({
- title: `${modalAction.value}鎴愬姛`,
- icon: "success",
- });
- } catch (error) {
- console.error(`${modalAction.value}澶辫触:`, error);
- uni.showToast({
- title: `${modalAction.value}澶辫触锛岃閲嶈瘯`,
- icon: "none",
- });
- } finally {
- showActionModal.value = false;
- }
-};
-
-// 鍙栨秷鎿嶄綔
-const cancelAction = () => {
- showActionModal.value = false;
};
// 鏁版嵁鍔犺浇鍑芥暟
@@ -468,42 +573,42 @@
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 !== "") {
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);
-
+
console.log("鎺ュ彛杩斿洖鏁版嵁:", res);
-
- if (res && res.code === 200) {
+
+ 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)) {
@@ -514,18 +619,18 @@
console.error("鎺ュ彛杩斿洖鏍煎紡涓嶆纭�:", res);
throw new Error("鎺ュ彛杩斿洖鏍煎紡涓嶆纭�");
}
-
+
const mappedData = data.map((item) => mapApiDataToTransportItem(item));
-
- if (reset || pageNum.value === 1) {
+
+ if (reset || pageNum.value == 1) {
transports.value = mappedData;
} else {
transports.value = [...transports.value, ...mappedData];
}
-
+
// 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁
hasMore.value = data.length >= pageSize.value;
-
+
// 濡傛灉鏈夋暟鎹姞杞芥垚鍔燂紝澧炲姞椤电爜
if (data.length > 0) {
pageNum.value++;
@@ -548,62 +653,50 @@
// 鍔犺浇缁熻鏁版嵁
const loadStats = async () => {
try {
- const res = await uni.$uapi.post("/api/totalServiceTransportState");
- if (res.data) {
+ const res = await uni.$uapi.post(
+ "/project/transport/totalServiceTransportState",
+ );
+ console.log(222);
+ console.log(res,'11');
+
+ if (res.data && Array.isArray(res.data)) {
+ // 浣跨敤 find 鏌ユ壘鍚勭姸鎬佺殑鏁伴噺锛岄伩鍏嶇‖缂栫爜绱㈠紩
+ const totalTransports =
+ res.data.reduce((sum, item) => sum + item.count, 0) || 0;
+ const pendingTransports =
+ res.data.find((item) => item.transit_status == 1)?.count || 0;
+ const completedTransports =
+ res.data.find((item) => item.transit_status == 3)?.count || 0;
+
stats.value = {
- totalTransports:
- res.data.reduce((sum, item) => sum + item.count, 0) || 0,
- pendingTransports: res.data[0].count || 0,
- completedTransports: res.data[3].count || 0,
+ totalTransports,
+ pendingTransports,
+ completedTransports,
};
+ } else {
+ // 鏁版嵁鏍煎紡寮傚父鏃惰缃粯璁ゅ��
+ stats.value = {
+ totalTransports: 0,
+ pendingTransports: 0,
+ completedTransports: 0,
+ };
+ console.error("缁熻鏁版嵁鏍煎紡寮傚父:", res.data);
}
} catch (error) {
console.error("鍔犺浇缁熻澶辫触:", error);
- }
-};
-
-// 鏇存柊杞繍鐘舵��
-const updateTransportStatus = async (newStatus, actionName) => {
- try {
- const updateData = {
- id: currentTransport.value.id,
- transitStatus: newStatus,
+ // 鍑洪敊鏃朵篃璁剧疆榛樿鍊硷紝閬垮厤椤甸潰鏄剧ず寮傚父
+ stats.value = {
+ totalTransports: 0,
+ pendingTransports: 0,
+ completedTransports: 0,
};
-
- const res = await uni.$uapi.post("/project/transport/edit", updateData);
-
- if (res && res.code === 200) {
- // 鏇存柊鏈湴鏁版嵁
- const index = transports.value.findIndex(
- (item) => item.id === currentTransport.value.id,
- );
- 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}澶辫触`);
- }
- } catch (error) {
- console.error(`${actionName}澶辫触:`, error);
- throw error;
}
};
// 澶勭悊鐘舵�佹洿鏂�
const handleStatusUpdate = (update) => {
const index = transports.value.findIndex(
- (item) => item.id === update.orderId,
+ (item) => item.id == update.orderId,
);
if (index !== -1) {
transports.value[index].transitStatus = update.status;
@@ -736,8 +829,7 @@
}
.transport-list {
- height: calc(100vh - 400rpx);
- // padding: 0 20rpx;
+ height: calc(100vh - 420rpx);
.transport-item {
margin: 20rpx;
@@ -860,18 +952,39 @@
.actions {
display: flex;
- gap: 16rpx;
+ flex-wrap: wrap;
+ gap: 12rpx;
+ justify-content: flex-end;
.action-btn {
- height: 60rpx;
- line-height: 60rpx;
- padding: 0 24rpx;
- font-size: 24rpx;
- color: #0071e3;
- background: rgba(0, 113, 227, 0.1);
- border-radius: 30rpx;
+ height: 58rpx;
+ line-height: 58rpx;
+ padding: 0 20rpx;
+ font-size: 22rpx;
+ border-radius: 29rpx;
font-weight: 500;
transition: all 0.3s ease;
+ border: none;
+
+ &.primary {
+ color: #0071e3;
+ background: rgba(0, 113, 227, 0.1);
+ }
+
+ &.success {
+ color: #34c759;
+ background: rgba(52, 199, 89, 0.1);
+ }
+
+ &.danger {
+ color: #ff3b30;
+ background: rgba(255, 59, 48, 0.1);
+ }
+
+ &.warning {
+ color: #ff9500;
+ background: rgba(255, 149, 0, 0.1);
+ }
&.secondary {
color: #515154;
@@ -880,13 +993,15 @@
&:active {
transform: scale(0.95);
+ opacity: 0.8;
}
}
}
}
}
- .load-more, .no-more {
+ .load-more,
+ .no-more {
text-align: center;
padding: 40rpx 0;
color: #86868b;
@@ -928,7 +1043,7 @@
.modal-content {
background: #fff;
border-radius: 32rpx;
- width: 600rpx;
+ width: 620rpx;
overflow: hidden;
box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.2);
}
@@ -939,17 +1054,36 @@
}
.modal-title {
- font-size: 32rpx;
- font-weight: 600;
+ font-size: 34rpx;
+ font-weight: 700;
color: #1d1d1f;
}
.modal-body {
padding: 20rpx 40rpx 40rpx;
text-align: center;
+ }
+
+ .modal-desc {
font-size: 28rpx;
color: #515154;
line-height: 1.6;
+ display: block;
+ }
+
+ .modal-summary {
+ margin-top: 24rpx;
+ background: #f8f9fc;
+ border-radius: 16rpx;
+ padding: 20rpx;
+ text-align: left;
+
+ .summary-item {
+ display: block;
+ font-size: 24rpx;
+ color: #86868b;
+ line-height: 1.8;
+ }
}
.modal-footer {
@@ -985,27 +1119,5 @@
}
}
}
-
- /* 娴姩鎸夐挳 */
- .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>
\ No newline at end of file
+</style>
--
Gitblit v1.9.3