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

View File

@@ -25,14 +25,16 @@
</template>
<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 route = useRoute();
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,21 +36,19 @@
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
]
},
/* ios */
"ios": {},
/* SDK */
"sdkConfigs": {}
}
},
/* */
"quickapp": {},
/* */
"mp-weixin": {
"appid": "wx99a151dc43d2637b",
"setting": {
"urlCheck": false
},
"usingComponents": true
"usingComponents": true,
"darkmode": true,
"themeLocation": "theme.json"
},
"mp-alipay": {
"usingComponents": true
@@ -68,5 +62,9 @@
"uniStatistics": {
"enable": false
},
"vueVersion": "3"
"vueVersion": "3",
"h5": {
"darkmode": true,
"themeLocation": "theme.json"
}
}

View File

@@ -3,101 +3,104 @@
{
"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": {
"navigationStyle": "custom",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "youlai-mall-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
"navigationBarBackgroundColor": "@navBgColor",
"navigationBarTextStyle": "@navTxtStyle",
"navigationBarTitleText": "Wot-Demo",
"backgroundColor": "@bgColor",
"backgroundTextStyle": "@bgTxtStyle",
"backgroundColorTop": "@bgColorTop",
"backgroundColorBottom": "@bgColorBottom",
"enablePullDownRefresh": false,
"onReachBottomDistance": 50,
"animationType": "pop-in",
"animationDuration": 300
},
"tabBar": {
"custom": true,
"height": "0px",
"color": "#00000000",
"selectedColor": "#00000000",
"backgroundColor": "#00000000",
"customize": true,
"overlay": true,
"height": "0",
"color": "@tabColor",
"selectedColor": "@tabSelectedColor",
"backgroundColor": "@tabBgColor",
"borderStyle": "@tabBorderStyle",
"list": [
{
"text": "首页",
"pagePath": "pages/index/index"
},
{
"text": "我的",
"pagePath": "pages/mine/index"
}
]

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,5 +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 }) => {
@@ -17,7 +19,6 @@ function generateRoutes() {
routes.push(...subRoutes);
});
}
return routes;
}
@@ -28,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,
}),