wip: 临时提交

This commit is contained in:
Ray.Hao
2025-07-27 11:49:43 +08:00
parent 7fa0758b19
commit 043f5b0ec4
11 changed files with 173 additions and 116 deletions

View File

@@ -3,37 +3,45 @@ import { defineUniPages } from "@uni-helper/vite-plugin-uni-pages";
export default defineUniPages({ export default defineUniPages({
// 你也可以定义 pages 字段,它具有最高的优先级。 // 你也可以定义 pages 字段,它具有最高的优先级。
pages: [ pages: [],
{
path: "pages/index/index",
layout: "tabbar",
},
{
path: "pages/mine/index",
layout: "tabbar",
},
],
globalStyle: { globalStyle: {
navigationStyle: "custom", // 导航栏配置
navigationBarTextStyle: "black", navigationBarBackgroundColor: "@navBgColor",
navigationBarTitleText: "youlai-mall-app", navigationBarTextStyle: "@navTxtStyle",
navigationBarBackgroundColor: "#F8F8F8", navigationBarTitleText: "Wot-Demo",
backgroundColor: "#F8F8F8",
// 页面背景配置
backgroundColor: "@bgColor",
backgroundTextStyle: "@bgTxtStyle",
backgroundColorTop: "@bgColorTop",
backgroundColorBottom: "@bgColorBottom",
// 下拉刷新配置
enablePullDownRefresh: false,
onReachBottomDistance: 50,
// 动画配置
animationType: "pop-in",
animationDuration: 300,
}, },
tabBar: { tabBar: {
custom: true, custom: true,
height: "0px", // #ifdef MP-ALIPAY
color: "#00000000", customize: true,
selectedColor: "#00000000", // 暂时不生效。4.71.2025061206-alpha已修复:https://uniapp.dcloud.net.cn/release-note-alpha.html#_4-71-2025061206-alpha,我们等正式版发布后更新。
backgroundColor: "#00000000", overlay: true,
// #endif
height: "0",
color: "@tabColor",
selectedColor: "@tabSelectedColor",
backgroundColor: "@tabBgColor",
borderStyle: "@tabBorderStyle",
list: [ list: [
{ {
text: "首页",
pagePath: "pages/index/index", pagePath: "pages/index/index",
}, },
{ {
text: "我的",
pagePath: "pages/mine/index", pagePath: "pages/mine/index",
}, },
], ],

View File

@@ -25,14 +25,16 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useRouter, useRoute } from "uni-mini-router";
import { useTheme } from "@/composables/useTheme";
import { useTabbar } from "@/composables/useTabbar";
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const { themeVars, theme } = useTheme(); const { themeVars, theme } = useTheme();
const { activeTabbar, getTabbarItemValue, setTabbarItemActive, tabbarList } = useTabbar(); const { activeTabbar, getTabbarItemValue, setTabbarItemActive, tabbarList } = useTabbar();
function handleTabbarChange({ value }: { value: string }) { function handleTabbarChange({ value }: { value: string }) {
console.log("tabbarChange", value);
setTabbarItemActive(value); setTabbarItemActive(value);
router.pushTab({ name: value }); router.pushTab({ name: value });
} }

View File

@@ -1,11 +1,10 @@
{ {
"name": "", "name": "vue-uniapp-template",
"appid": "", "appid": "",
"description": "", "description": "有来移动端跨端解决方案开发模板",
"versionName": "1.0.0", "versionName": "1.0.0",
"versionCode": "100", "versionCode": "100",
"transformPx": false, "transformPx": false,
/* 5+App特有相关 */
"app-plus": { "app-plus": {
"usingComponents": true, "usingComponents": true,
"nvueStyleCompiler": "uni-app", "nvueStyleCompiler": "uni-app",
@@ -16,11 +15,8 @@
"autoclose": true, "autoclose": true,
"delay": 0 "delay": 0
}, },
/* 模块配置 */
"modules": {}, "modules": {},
/* 应用发布信息 */
"distribute": { "distribute": {
/* android打包配置 */
"android": { "android": {
"permissions": [ "permissions": [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
@@ -40,21 +36,19 @@
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
] ]
}, },
/* ios打包配置 */
"ios": {}, "ios": {},
/* SDK配置 */
"sdkConfigs": {} "sdkConfigs": {}
} }
}, },
/* 快应用特有相关 */
"quickapp": {}, "quickapp": {},
/* 小程序特有相关 */
"mp-weixin": { "mp-weixin": {
"appid": "wx99a151dc43d2637b", "appid": "wx99a151dc43d2637b",
"setting": { "setting": {
"urlCheck": false "urlCheck": false
}, },
"usingComponents": true "usingComponents": true,
"darkmode": true,
"themeLocation": "theme.json"
}, },
"mp-alipay": { "mp-alipay": {
"usingComponents": true "usingComponents": true
@@ -68,5 +62,9 @@
"uniStatistics": { "uniStatistics": {
"enable": false "enable": false
}, },
"vueVersion": "3" "vueVersion": "3",
"h5": {
"darkmode": true,
"themeLocation": "theme.json"
}
} }

View File

@@ -3,101 +3,104 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"type": "home", "type": "home",
"style": {}, "name": "home",
"style": {
"navigationStyle": "custom"
},
"layout": "tabbar" "layout": "tabbar"
}, },
{ {
"path": "pages/login/index", "path": "pages/login/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/index", "path": "pages/mine/index",
"type": "page", "type": "page",
"style": {}, "name": "mine",
"style": {
"navigationStyle": "custom"
},
"layout": "tabbar" "layout": "tabbar"
}, },
{ {
"path": "pages/work/index", "path": "pages/work/index",
"type": "page", "type": "page",
"name": "work", "name": "work",
"meta": { "style": {
"requireAuth": true, "navigationBarTitleText": "工作台"
"title": "需要登录的页面"
}, },
"style": {} "meta": {
"requireAuth": true
}
}, },
{ {
"path": "pages/mine/about/index", "path": "pages/mine/about/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/faq/index", "path": "pages/mine/faq/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/feedback/index", "path": "pages/mine/feedback/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/profile/complete-profile", "path": "pages/mine/profile/complete-profile",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/profile/index", "path": "pages/mine/profile/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/settings/index", "path": "pages/mine/settings/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/settings/account/index", "path": "pages/mine/settings/account/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/settings/agreement/index", "path": "pages/mine/settings/agreement/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/settings/network/index", "path": "pages/mine/settings/network/index",
"type": "page", "type": "page"
"style": {}
}, },
{ {
"path": "pages/mine/settings/theme/index", "path": "pages/mine/settings/theme/index",
"type": "page", "type": "page"
"style": {}
} }
], ],
"globalStyle": { "globalStyle": {
"navigationStyle": "custom", "navigationBarBackgroundColor": "@navBgColor",
"navigationBarTextStyle": "black", "navigationBarTextStyle": "@navTxtStyle",
"navigationBarTitleText": "youlai-mall-app", "navigationBarTitleText": "Wot-Demo",
"navigationBarBackgroundColor": "#F8F8F8", "backgroundColor": "@bgColor",
"backgroundColor": "#F8F8F8" "backgroundTextStyle": "@bgTxtStyle",
"backgroundColorTop": "@bgColorTop",
"backgroundColorBottom": "@bgColorBottom",
"enablePullDownRefresh": false,
"onReachBottomDistance": 50,
"animationType": "pop-in",
"animationDuration": 300
}, },
"tabBar": { "tabBar": {
"custom": true, "custom": true,
"height": "0px", "customize": true,
"color": "#00000000", "overlay": true,
"selectedColor": "#00000000", "height": "0",
"backgroundColor": "#00000000", "color": "@tabColor",
"selectedColor": "@tabSelectedColor",
"backgroundColor": "@tabBgColor",
"borderStyle": "@tabBorderStyle",
"list": [ "list": [
{ {
"text": "首页",
"pagePath": "pages/index/index" "pagePath": "pages/index/index"
}, },
{ {
"text": "我的",
"pagePath": "pages/mine/index" "pagePath": "pages/mine/index"
} }
] ]

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,7 @@
import { pages, subPackages } from "virtual:uni-pages"; import { pages, subPackages } from "virtual:uni-pages";
import { isLoggedIn } from "@/utils/auth"; import { isLoggedIn } from "@/utils/auth";
import { createRouter } from "uni-mini-router";
// 生成路由配置 // 生成路由配置
function generateRoutes() { function generateRoutes() {
const routes = pages.map((page: { path: string; [key: string]: any }) => { const routes = pages.map((page: { path: string; [key: string]: any }) => {
@@ -17,7 +19,6 @@ function generateRoutes() {
routes.push(...subRoutes); routes.push(...subRoutes);
}); });
} }
return routes; return routes;
} }
@@ -28,11 +29,8 @@ const router = createRouter({
// 全局前置守卫 // 全局前置守卫
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
console.log("路由跳转:", to.path);
// 检查页面是否需要登录 // 检查页面是否需要登录
if (to.meta && to.meta.requireAuth) { if (to.meta && to.meta.requireAuth && !isLoggedIn()) {
if (!isLoggedIn) {
// 显示登录提示
uni.showModal({ uni.showModal({
title: "提示", title: "提示",
content: "该功能需要登录后使用", content: "该功能需要登录后使用",
@@ -42,25 +40,30 @@ router.beforeEach((to, from, next) => {
if (res.confirm) { if (res.confirm) {
// 记住原来要去的页面 // 记住原来要去的页面
uni.setStorageSync("redirect", to.fullPath); uni.setStorageSync("redirect", to.fullPath);
next("/pages/login/index"); // 使用 uni 原生导航而不是 router
uni.navigateTo({
url: "/pages/login/index",
});
} else { } else {
// 取消则返回首页 // 取消则返回首页
next("/pages/index/index"); uni.switchTab({
url: "/pages/index/index",
});
} }
}, },
// 确保在取消弹窗时也能调用 next
fail: () => {
next(false);
},
}); });
return; } else {
}
}
// 继续导航 // 继续导航
next(); next();
}
}); });
router.afterEach((to) => { router.afterEach((to) => {
console.log("路由跳转完成:", to.path); console.log("路由跳转完成:", to.path);
// 可以在这里做一些统计或记录
}); });
export default router; 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/*"] "@/*": ["./src/*"]
}, },
"lib": ["esnext", "dom"], "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": { "vueCompilerOptions": {
// 调整 Volar(Vue 语言服务工具)解析行为,用于为 uni-app 组件提供 TypeScript 类型 // 调整 Volar(Vue 语言服务工具)解析行为,用于为 uni-app 组件提供 TypeScript 类型

View File

@@ -57,7 +57,7 @@ export default defineConfig(async ({ mode }: ConfigEnv): Promise<UserConfig> =>
}, },
], ],
dts: "src/types/auto-imports.d.ts", // 自动生成的类型声明文件 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, vueTemplate: true,
}), }),