This commit is contained in:
ray
2025-07-27 12:19:32 +08:00
11 changed files with 114 additions and 93 deletions

View File

@@ -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",

View File

@@ -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 });
}

View File

@@ -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": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
@@ -40,15 +36,11 @@
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios": {},
/* SDK */
"sdkConfigs": {}
}
},
/* */
"quickapp": {},
/* */
"mp-weixin": {
"appid": "wx99a151dc43d2637b",
"setting": {

View File

@@ -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": {

View File

@@ -14,8 +14,7 @@
v-for="(item, index) in navList"
:key="index"
use-slot
link-type="navigateTo"
:url="item.url"
@click="handleNavClick(item)"
>
<view class="p-2">
<image class="w-72rpx h-72rpx rounded-8rpx" :src="item.icon" />
@@ -101,6 +100,7 @@ interface VisitStatsVO {
totalPvCount: number;
}
const router = useRouter();
const current = ref<number>(0);
const visitStatsData = ref<VisitStatsVO>({
@@ -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(() => {
});
</script>
<route lang="json">
{
"name": "home",
"style": { "navigationStyle": "custom" },
"layout": "tabbar"
}
</route>
<style setup lang="scss"></style>

View File

@@ -249,6 +249,14 @@ onShow(() => {
});
</script>
<route lang="json">
{
"name": "mine",
"style": { "navigationStyle": "custom" },
"layout": "tabbar"
}
</route>
<style lang="scss" scoped>
// 用户信息卡片
.user-profile {

View File

@@ -1,25 +1,21 @@
<template>
<view class="app-container">
<wd-navbar title="设置" left-arrow @click-left="handleBack" />
<wd-status-tip type="search" tip="建设中..." />
</view>
</template>
<script setup lang="ts"></script>
<route lang="json">
{
"name": "work",
"style": {
"navigationBarTitleText": "工作台"
},
"meta": {
"requireAuth": true,
"title": "需要登录的页面"
"requireAuth": true
}
}
</route>
<script setup lang="ts">
const handleBack = () => {
uni.navigateBack();
};
</script>
<style lang="scss"></style>

View File

@@ -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;

26
theme.json Normal file
View File

@@ -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"
}
}

View File

@@ -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": {
// 调整 VolarVue 语言服务工具)解析行为,用于为 uni-app 组件提供 TypeScript 类型

View File

@@ -57,7 +57,7 @@ export default defineConfig(async ({ mode }: ConfigEnv): Promise<UserConfig> =>
},
],
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,
}),