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