From c37902e5b52076e56b5c4289684b44d65501bcfb Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 17 Dec 2025 14:12:49 +0800
Subject: [PATCH] feat:跳转页面中间件
---
src/pages/dispatcher/index.vue | 85 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 85 insertions(+), 0 deletions(-)
diff --git a/src/pages/dispatcher/index.vue b/src/pages/dispatcher/index.vue
new file mode 100644
index 0000000..4040a88
--- /dev/null
+++ b/src/pages/dispatcher/index.vue
@@ -0,0 +1,85 @@
+<template>
+ <view></view>
+</template>
+
+<script setup>
+import { onShow, onHide } from "@dcloudio/uni-app";
+import { ref } from "vue";
+
+// 标记是否已经跳转过,防止从子页面返回时再次触发跳转
+const isNavigating = ref(false);
+
+onShow(() => {
+ const lastTab = uni.getStorageSync("lastTab");
+
+ // 如果是跳转后返回的状态(isNavigating为true),则说明用户取消了操作或完成了操作返回
+ // 此时应该回到之前的Tab页
+ if (isNavigating.value) {
+ isNavigating.value = false; // 重置标志位
+ if (lastTab === "task") {
+ uni.switchTab({ url: "/pages/inspectionTask/index" });
+ } else if (lastTab === "work") {
+ uni.switchTab({ url: "/pages/work/index" });
+ } else if (lastTab === "user") {
+ uni.switchTab({ url: "/pages/user/index" });
+ } else {
+ uni.switchTab({ url: "/pages/map/index" });
+ }
+ return;
+ }
+
+ // 根据上一个页面决定跳转逻辑
+ if (lastTab === "task") {
+ // 任务页面 -> 跳转新建任务
+ isNavigating.value = true;
+ uni.navigateTo({
+ url: "/subPackages/taskDetail/addTask/index",
+ fail: (err) => {
+ console.error("Navigate to addTask failed:", err);
+ isNavigating.value = false;
+ // 如果跳转失败,返回上一页
+ uni.switchTab({ url: "/pages/inspectionTask/index" });
+ },
+ });
+ } else if (lastTab === "work") {
+ // 工单页面 -> 跳转新建工单
+ isNavigating.value = true;
+ uni.navigateTo({
+ url: "/subPackages/workDetail/addWork/index",
+ fail: (err) => {
+ console.error("Navigate to addWork failed:", err);
+ isNavigating.value = false;
+ uni.switchTab({ url: "/pages/work/index" });
+ },
+ });
+ } else {
+ // 地图或我的页面 -> 仅占位,不跳转,提示并返回
+ uni.showToast({
+ title: "此功能暂未开放",
+ icon: "none",
+ duration: 2000,
+ });
+
+ // 返回上一个Tab
+ if (lastTab === "user") {
+ uni.switchTab({ url: "/pages/user/index" });
+ } else {
+ // 默认为地图
+ uni.switchTab({ url: "/pages/map/index" });
+ }
+ }
+});
+
+onHide(() => {
+ // 页面隐藏时,如果是切换到了其他Tab(不是navigateTo),可能需要重置?
+ // 不,如果是navigateTo,页面隐藏是正常的,flag保持true。
+ // 如果是switchTab出去,flag应该是false(因为已经处理过了)。
+ // 唯一风险是:如果navigateTo之前就switchTab了?(不可能,逻辑是同步的)
+});
+</script>
+
+<style>
+page {
+ background-color: transparent;
+}
+</style>
--
Gitblit v1.9.3