1
0
mirror of https://github.com/ialley-workshop-open/uni-halo.git synced 2026-07-27 12:30:41 +08:00

chore: 清理旧文件并重构项目基础结构

- 删除大量废弃的旧代码、依赖和配置文件
- 新增基础项目配置、工具函数、页面模板和请求库
- 重构目录结构,统一项目规范
- 添加commitlint、husky等代码规范工具
This commit is contained in:
小莫唐尼
2026-06-11 02:13:47 +08:00
parent de142c4729
commit 3945ee611d
587 changed files with 34429 additions and 120475 deletions
+20
View File
@@ -0,0 +1,20 @@
# 登录页
需要输入账号、密码/验证码的登录页。
## 适用性
本页面主要用于 `h5``APP`
小程序通常有平台的登录方式 `uni.login` 通常用不到登录页,所以不适用于 `小程序`。(即默认情况下,小程序环境是不会走登录拦截逻辑的。)
但是如果您的小程序也需要现实的 `登录页` 那也是可以使用的。
`src/router/config.ts` 中有一个变量 `LOGIN_PAGE_ENABLE_IN_MP` 来控制是否在小程序中使用 `H5的登录页`
更多信息请看 `src/router` 文件夹的内容。
## 登录跳转
目前登录的跳转逻辑主要在 `src/router/interceptor.ts``src/pages/login/login.vue` 里面,默认会在登录后自动重定向到来源/配置的页面。
如果与您的业务不符,您可以自行修改。
+44
View File
@@ -0,0 +1,44 @@
<script lang="ts" setup>
import { useTokenStore } from '@/store/token'
definePage({
style: {
navigationBarTitleText: '登录',
},
})
const tokenStore = useTokenStore()
async function doLogin() {
if (tokenStore.hasLogin) {
uni.navigateBack()
return
}
try {
// 调用登录接口
await tokenStore.login({
username: '菲鸽',
password: '123456',
})
uni.navigateBack()
}
catch (error) {
console.log('登录失败', error)
}
}
</script>
<template>
<view class="login">
<!-- 本页面是非MP的登录页主要用于 h5 APP -->
<view class="text-center">
登录页
</view>
<button class="mt-4 w-40 text-center" @click="doLogin">
点击模拟登录
</button>
</view>
</template>
<style lang="scss" scoped>
//
</style>
+34
View File
@@ -0,0 +1,34 @@
<script lang="ts" setup>
import { LOGIN_PAGE } from '@/router/config'
definePage({
style: {
navigationBarTitleText: '注册',
},
})
function doRegister() {
uni.showToast({
title: '注册成功',
})
// 注册成功后跳转到登录页
uni.navigateTo({
url: LOGIN_PAGE,
})
}
</script>
<template>
<view class="login">
<view class="text-center">
注册页
</view>
<button class="mt-4 w-40 text-center" @click="doRegister">
点击模拟注册
</button>
</view>
</template>
<style lang="scss" scoped>
//
</style>
+17
View File
@@ -0,0 +1,17 @@
<script lang="ts" setup>
defineOptions({
name: 'Gallery',
})
definePage({
style: {
navigationBarTitleText: '相册',
},
})
</script>
<template>
<view class="mt-10 text-center text-green-500">
相册页面
</view>
</template>
+37
View File
@@ -0,0 +1,37 @@
<script lang="ts" setup>
defineOptions({
name: 'Home',
})
definePage({
type: 'home',
style: {
navigationStyle: 'custom',
navigationBarTitleText: '首页',
},
})
function toRequestDemo() {
uni.navigateTo({
url: '/pages-demo/request-demo/request-demo',
})
}
onLoad(() => {
console.log('测试 uni API 自动引入: onLoad')
})
</script>
<template>
<view class="min-h-screen flex flex-col items-center justify-center gap-y-6 bg-page pt-safe">
<image class="h-24 w-24 rounded-lg object-cover" src="/static/logo.png" />
<view class="text-2xl text-blue-500 font-bold">
Uni Halo v3.0.0
</view>
<view class="mt-4 flex flex-col items-center gap-y-2">
<button @click="toRequestDemo">
请求演示
</button>
</view>
</view>
</template>
+79
View File
@@ -0,0 +1,79 @@
<script lang="ts" setup>
import { storeToRefs } from 'pinia'
import { LOGIN_PAGE } from '@/router/config'
import { useUserStore } from '@/store'
import { useTokenStore } from '@/store/token'
definePage({
style: {
navigationBarTitleText: '我的',
},
})
const userStore = useUserStore()
const tokenStore = useTokenStore()
// 使用storeToRefs解构userInfo
const { userInfo } = storeToRefs(userStore)
// 微信小程序下登录
async function handleLogin() {
// #ifdef MP-WEIXIN
// 微信登录
await tokenStore.wxLogin()
// #endif
// #ifndef MP-WEIXIN
uni.navigateTo({
url: `${LOGIN_PAGE}`,
})
// #endif
}
function handleLogout() {
uni.showModal({
title: '提示',
content: '确定要退出登录吗?',
success: (res) => {
if (res.confirm) {
// 清空用户信息
useTokenStore().logout()
// 执行退出登录逻辑
uni.showToast({
title: '退出登录成功',
icon: 'success',
})
// #ifdef MP-WEIXIN
// 微信小程序,去首页
// uni.reLaunch({ url: '/pages/index/index' })
// #endif
// #ifndef MP-WEIXIN
// 非微信小程序,去登录页
// uni.navigateTo({ url: LOGIN_PAGE })
// #endif
}
},
})
}
</script>
<template>
<view class="profile-container">
<view class="mt-3 break-all px-3 text-center text-green-500">
{{ userInfo.username ? '已登录' : '未登录' }}
</view>
<view class="mt-3 break-all px-3">
{{ JSON.stringify(userInfo, null, 2) }}
</view>
<view class="mt-[60vh] px-3">
<view class="m-auto w-160px text-center">
<button v-if="tokenStore.hasLogin" type="warn" class="w-full" @click="handleLogout">
退出登录
</button>
<button v-else type="primary" class="w-full" @click="handleLogin">
登录
</button>
</view>
</view>
</view>
</template>
+17
View File
@@ -0,0 +1,17 @@
<script lang="ts" setup>
defineOptions({
name: 'Moments',
})
definePage({
style: {
navigationBarTitleText: '瞬间',
},
})
</script>
<template>
<view class="mt-10 text-center text-green-500">
瞬间页面
</view>
</template>