diff --git a/pages.config.ts b/pages.config.ts index 913d4b4..dc26193 100644 --- a/pages.config.ts +++ b/pages.config.ts @@ -3,16 +3,7 @@ import { defineUniPages } from "@uni-helper/vite-plugin-uni-pages"; export default defineUniPages({ // 你也可以定义 pages 字段,它具有最高的优先级。 - pages: [ - { - path: "pages/index/index", - layout: "tabbar", - }, - { - path: "pages/mine/index", - layout: "tabbar", - }, - ], + pages: [], globalStyle: { navigationBarBackgroundColor: "@navBgColor", navigationBarTextStyle: "@navTxtStyle", diff --git a/src/layouts/tabbar.vue b/src/layouts/tabbar.vue index ff26e34..591840d 100644 --- a/src/layouts/tabbar.vue +++ b/src/layouts/tabbar.vue @@ -36,8 +36,6 @@ const { themeVars, theme } = useTheme(); const { activeTabbar, getTabbarItemValue, setTabbarItemActive, tabbarList } = useTabbar(); function handleTabbarChange({ value }: { value: string }) { - console.log("tabbarChange", value); - setTabbarItemActive(value); router.pushTab({ name: value }); } diff --git a/src/manifest.json b/src/manifest.json index 9fec0a2..492dfcf 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,11 +1,10 @@ { - "name": "", + "name": "vue-uniapp-template", "appid": "", - "description": "", + "description": "有来移动端跨端解决方案开发模板", "versionName": "1.0.0", "versionCode": "100", "transformPx": false, - /* 5+App特有相关 */ "app-plus": { "usingComponents": true, "nvueStyleCompiler": "uni-app", @@ -16,11 +15,8 @@ "autoclose": true, "delay": 0 }, - /* 模块配置 */ "modules": {}, - /* 应用发布信息 */ "distribute": { - /* android打包配置 */ "android": { "permissions": [ "", @@ -40,15 +36,11 @@ "" ] }, - /* ios打包配置 */ "ios": {}, - /* SDK配置 */ "sdkConfigs": {} } }, - /* 快应用特有相关 */ "quickapp": {}, - /* 小程序特有相关 */ "mp-weixin": { "appid": "wx99a151dc43d2637b", "setting": { diff --git a/src/pages.json b/src/pages.json index 73be4a0..c61a885 100644 --- a/src/pages.json +++ b/src/pages.json @@ -3,79 +3,75 @@ { "path": "pages/index/index", "type": "home", - "style": {}, + "name": "home", + "style": { + "navigationStyle": "custom" + }, "layout": "tabbar" }, { "path": "pages/login/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/index", "type": "page", - "style": {}, + "name": "mine", + "style": { + "navigationStyle": "custom" + }, "layout": "tabbar" }, { "path": "pages/work/index", "type": "page", "name": "work", - "meta": { - "requireAuth": true, - "title": "需要登录的页面" + "style": { + "navigationBarTitleText": "工作台" }, - "style": {} + "meta": { + "requireAuth": true + } }, { "path": "pages/mine/about/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/faq/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/feedback/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/profile/complete-profile", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/profile/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/settings/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/settings/account/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/settings/agreement/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/settings/network/index", - "type": "page", - "style": {} + "type": "page" }, { "path": "pages/mine/settings/theme/index", - "type": "page", - "style": {} + "type": "page" } ], "globalStyle": { diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 95acefd..84147c0 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -14,8 +14,7 @@ v-for="(item, index) in navList" :key="index" use-slot - link-type="navigateTo" - :url="item.url" + @click="handleNavClick(item)" > @@ -101,6 +100,7 @@ interface VisitStatsVO { totalPvCount: number; } +const router = useRouter(); const current = ref(0); const visitStatsData = ref({ @@ -170,6 +170,12 @@ const navList = reactive([ }, ]); +// 处理导航点击 +function handleNavClick(item: any) { + // 使用路由系统进行导航,这样会触发路由守卫 + router.push({ path: item.url }); +} + // 生成静态的访问趋势数据 const generateStaticTrendData = (days: number) => { const dates = []; @@ -265,4 +271,11 @@ onShow(() => { }); + +{ + "name": "home", + "style": { "navigationStyle": "custom" }, + "layout": "tabbar" +} + diff --git a/src/pages/mine/index.vue b/src/pages/mine/index.vue index 5438760..f6fe53b 100644 --- a/src/pages/mine/index.vue +++ b/src/pages/mine/index.vue @@ -249,6 +249,14 @@ onShow(() => { }); + +{ + "name": "mine", + "style": { "navigationStyle": "custom" }, + "layout": "tabbar" +} + + diff --git a/src/router/index.ts b/src/router/index.ts index fea8636..fda51fa 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,7 +1,7 @@ import { pages, subPackages } from "virtual:uni-pages"; import { isLoggedIn } from "@/utils/auth"; - import { createRouter } from "uni-mini-router"; + // 生成路由配置 function generateRoutes() { const routes = pages.map((page: { path: string; [key: string]: any }) => { @@ -19,7 +19,6 @@ function generateRoutes() { routes.push(...subRoutes); }); } - return routes; } @@ -30,39 +29,41 @@ const router = createRouter({ // 全局前置守卫 router.beforeEach((to, from, next) => { - console.log("路由跳转:", to.path); // 检查页面是否需要登录 - if (to.meta && to.meta.requireAuth) { - if (!isLoggedIn) { - // 显示登录提示 - uni.showModal({ - title: "提示", - content: "该功能需要登录后使用", - confirmText: "去登录", - cancelText: "返回", - success: (res) => { - if (res.confirm) { - // 记住原来要去的页面 - uni.setStorageSync("redirect", to.fullPath); - next("/pages/login/index"); - } else { - // 取消则返回首页 - next("/pages/index/index"); - } - }, - }); - return; - } + if (to.meta && to.meta.requireAuth && !isLoggedIn()) { + uni.showModal({ + title: "提示", + content: "该功能需要登录后使用", + confirmText: "去登录", + cancelText: "返回", + success: (res) => { + if (res.confirm) { + // 记住原来要去的页面 + uni.setStorageSync("redirect", to.fullPath); + // 使用 uni 原生导航而不是 router + uni.navigateTo({ + url: "/pages/login/index", + }); + } else { + // 取消则返回首页 + uni.switchTab({ + url: "/pages/index/index", + }); + } + }, + // 确保在取消弹窗时也能调用 next + fail: () => { + next(false); + }, + }); + } else { + // 继续导航 + next(); } - - // 继续导航 - next(); }); router.afterEach((to) => { console.log("路由跳转完成:", to.path); - - // 可以在这里做一些统计或记录 }); export default router; diff --git a/theme.json b/theme.json new file mode 100644 index 0000000..2c2ef36 --- /dev/null +++ b/theme.json @@ -0,0 +1,26 @@ +{ + "light": { + "bgColor": "#F8F8F8", + "bgColorBottom": "#F8F8F8", + "bgColorTop": "#F8F8F8", + "bgTxtStyle": "dark", + "navBgColor": "#FFF", + "navTxtStyle": "black", + "tabBgColor": "#ffffff", + "tabBorderStyle": "black", + "tabColor": "#bfbfbf", + "tabSelectedColor": "#0165FF" + }, + "dark": { + "bgColor": "#000", + "bgColorBottom": "#000", + "bgColorTop": "#000", + "bgTxtStyle": "light", + "navBgColor": "#000000", + "navTxtStyle": "white", + "tabBgColor": "#1a1a1a", + "tabBorderStyle": "white", + "tabColor": "#bfbfbf", + "tabSelectedColor": "#0165FF" + } +} diff --git a/tsconfig.json b/tsconfig.json index c6223b4..6bf4ab8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,7 @@ "@/*": ["./src/*"] }, "lib": ["esnext", "dom"], - "types": ["@dcloudio/types", "@uni-helper/uni-types", "wot-design-uni/global"] + "types": ["@dcloudio/types", "@uni-helper/uni-types", "wot-design-uni/global", "./src/types/vite-plugin-uni-pages"] }, "vueCompilerOptions": { // 调整 Volar(Vue 语言服务工具)解析行为,用于为 uni-app 组件提供 TypeScript 类型 diff --git a/vite.config.ts b/vite.config.ts index d7acb2c..4212750 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -57,7 +57,7 @@ export default defineConfig(async ({ mode }: ConfigEnv): Promise => }, ], dts: "src/types/auto-imports.d.ts", // 自动生成的类型声明文件 - dirs: ["./src/composables", "src/store", "src/utils", "src/api"], + dirs: ["src/composables", "src/store", "src/utils", "src/api"], vueTemplate: true, }),