|
@@ -3,7 +3,7 @@
|
|
|
<!-- 背景装饰 -->
|
|
<!-- 背景装饰 -->
|
|
|
<view class="splash-bg-1"></view>
|
|
<view class="splash-bg-1"></view>
|
|
|
<view class="splash-bg-2"></view>
|
|
<view class="splash-bg-2"></view>
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
<!-- Logo 区域 -->
|
|
<!-- Logo 区域 -->
|
|
|
<view class="logo-section">
|
|
<view class="logo-section">
|
|
|
<view class="logo-wrapper">
|
|
<view class="logo-wrapper">
|
|
@@ -42,14 +42,13 @@
|
|
|
onMounted
|
|
onMounted
|
|
|
} from 'vue'
|
|
} from 'vue'
|
|
|
import {
|
|
import {
|
|
|
- isLogin,
|
|
|
|
|
- getToken,
|
|
|
|
|
- saveUserInfo,
|
|
|
|
|
- clearUserInfo
|
|
|
|
|
|
|
+ isLogin
|
|
|
} from '@/utils/userCache.js'
|
|
} from '@/utils/userCache.js'
|
|
|
import {
|
|
import {
|
|
|
- getUserInfo as fetchUserInfo
|
|
|
|
|
- } from '@/api/login.js'
|
|
|
|
|
|
|
+ useUserStore
|
|
|
|
|
+ } from '@/store/modules/user.js'
|
|
|
|
|
+
|
|
|
|
|
+ const userStore = useUserStore() || null
|
|
|
import {
|
|
import {
|
|
|
getCurrentConfig
|
|
getCurrentConfig
|
|
|
} from '@/config/index.js'
|
|
} from '@/config/index.js'
|
|
@@ -59,7 +58,7 @@
|
|
|
// 页面加载
|
|
// 页面加载
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
const config = await getCurrentConfig()
|
|
const config = await getCurrentConfig()
|
|
|
- console.log(config,"configconfigconfigconfig");
|
|
|
|
|
|
|
+ console.log(config, "configconfigconfigconfig");
|
|
|
appName.value = config.appName
|
|
appName.value = config.appName
|
|
|
version.value = config.appVersion
|
|
version.value = config.appVersion
|
|
|
initApp()
|
|
initApp()
|
|
@@ -72,52 +71,33 @@
|
|
|
try {
|
|
try {
|
|
|
// 模拟加载延迟(提升用户体验)
|
|
// 模拟加载延迟(提升用户体验)
|
|
|
await sleep(500)
|
|
await sleep(500)
|
|
|
-
|
|
|
|
|
loadingText.value = '检查登录状态...'
|
|
loadingText.value = '检查登录状态...'
|
|
|
-
|
|
|
|
|
- // 获取本地 token
|
|
|
|
|
- const token = getToken()
|
|
|
|
|
-
|
|
|
|
|
// 如果没有 token,直接跳转登录页
|
|
// 如果没有 token,直接跳转登录页
|
|
|
- if (!token) {
|
|
|
|
|
|
|
+ const loginToggle = isLogin()
|
|
|
|
|
+ if (!loginToggle) {
|
|
|
console.log('未登录,token 不存在')
|
|
console.log('未登录,token 不存在')
|
|
|
await sleep(800)
|
|
await sleep(800)
|
|
|
uni.reLaunch({
|
|
uni.reLaunch({
|
|
|
- url: '/pages/index/index'
|
|
|
|
|
|
|
+ url: '/pages/login/login'
|
|
|
})
|
|
})
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // 调用 getUserInfo 接口验证 token
|
|
|
|
|
- const res = await fetchUserInfo({})
|
|
|
|
|
-
|
|
|
|
|
- if (res.code === 200) {
|
|
|
|
|
- // token 有效,更新用户信息
|
|
|
|
|
- const userInfo = res.data || res
|
|
|
|
|
- saveUserInfo(userInfo, token)
|
|
|
|
|
- console.log('登录态有效,用户信息已更新')
|
|
|
|
|
- // 延迟跳转,让动画更流畅
|
|
|
|
|
- await sleep(500)
|
|
|
|
|
- // 已登录,跳转首页
|
|
|
|
|
|
|
+ if (loginToggle) {
|
|
|
|
|
+ await userStore.queryCardInfo()
|
|
|
|
|
+ await userStore.queryCompanyInfo()
|
|
|
uni.reLaunch({
|
|
uni.reLaunch({
|
|
|
url: '/pages/index/index'
|
|
url: '/pages/index/index'
|
|
|
})
|
|
})
|
|
|
} else {
|
|
} else {
|
|
|
- // token 失效,清除本地存储
|
|
|
|
|
- console.log('登录凭证失效,需要重新登录')
|
|
|
|
|
clearUserInfo()
|
|
clearUserInfo()
|
|
|
await sleep(800)
|
|
await sleep(800)
|
|
|
- // 跳转登录页
|
|
|
|
|
uni.reLaunch({
|
|
uni.reLaunch({
|
|
|
url: '/pages/login/login'
|
|
url: '/pages/login/login'
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
console.error('验证登录态失败:', error)
|
|
console.error('验证登录态失败:', error)
|
|
|
- // 接口调用失败,也视为 token 失效
|
|
|
|
|
clearUserInfo()
|
|
clearUserInfo()
|
|
|
-
|
|
|
|
|
- // 出错时跳转到登录页
|
|
|
|
|
uni.reLaunch({
|
|
uni.reLaunch({
|
|
|
url: '/pages/login/login'
|
|
url: '/pages/login/login'
|
|
|
})
|
|
})
|
|
@@ -144,25 +124,25 @@
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
padding: 0 40rpx;
|
|
padding: 0 40rpx;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.splash-bg-1 {
|
|
.splash-bg-1 {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
top: -20%;
|
|
top: -20%;
|
|
|
left: -10%;
|
|
left: -10%;
|
|
|
width: 60%;
|
|
width: 60%;
|
|
|
height: 60%;
|
|
height: 60%;
|
|
|
- background: radial-gradient(circle, rgba(255,255,255,0.15) 0%, transparent 70%);
|
|
|
|
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.15) 0%, transparent 70%);
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
|
animation: floatBg1 8s ease-in-out infinite;
|
|
animation: floatBg1 8s ease-in-out infinite;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.splash-bg-2 {
|
|
.splash-bg-2 {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
bottom: -20%;
|
|
bottom: -20%;
|
|
|
right: -10%;
|
|
right: -10%;
|
|
|
width: 70%;
|
|
width: 70%;
|
|
|
height: 70%;
|
|
height: 70%;
|
|
|
- background: radial-gradient(circle, rgba(255,255,255,0.12) 0%, transparent 70%);
|
|
|
|
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.12) 0%, transparent 70%);
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
|
animation: floatBg2 10s ease-in-out infinite;
|
|
animation: floatBg2 10s ease-in-out infinite;
|
|
|
}
|
|
}
|
|
@@ -176,7 +156,7 @@
|
|
|
margin-bottom: 120rpx;
|
|
margin-bottom: 120rpx;
|
|
|
position: relative;
|
|
position: relative;
|
|
|
z-index: 10;
|
|
z-index: 10;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.logo-wrapper {
|
|
.logo-wrapper {
|
|
|
position: relative;
|
|
position: relative;
|
|
|
width: 240rpx;
|
|
width: 240rpx;
|
|
@@ -184,7 +164,7 @@
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.logo-glow {
|
|
.logo-glow {
|
|
|
position: absolute;
|
|
position: absolute;
|
|
|
top: 50%;
|
|
top: 50%;
|
|
@@ -192,18 +172,18 @@
|
|
|
transform: translate(-50%, -50%);
|
|
transform: translate(-50%, -50%);
|
|
|
width: 280rpx;
|
|
width: 280rpx;
|
|
|
height: 280rpx;
|
|
height: 280rpx;
|
|
|
- background: radial-gradient(circle, rgba(255,255,255,0.3) 0%, transparent 70%);
|
|
|
|
|
|
|
+ background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 0%, transparent 70%);
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
|
animation: logoGlow 3s ease-in-out infinite;
|
|
animation: logoGlow 3s ease-in-out infinite;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.logo-icon {
|
|
.logo-icon {
|
|
|
width: 200rpx;
|
|
width: 200rpx;
|
|
|
height: 200rpx;
|
|
height: 200rpx;
|
|
|
border-radius: 44rpx;
|
|
border-radius: 44rpx;
|
|
|
background: rgba(255, 255, 255, 0.95);
|
|
background: rgba(255, 255, 255, 0.95);
|
|
|
box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15),
|
|
box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.15),
|
|
|
- 0 0 40rpx rgba(255, 255, 255, 0.3);
|
|
|
|
|
|
|
+ 0 0 40rpx rgba(255, 255, 255, 0.3);
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
@@ -252,7 +232,7 @@
|
|
|
border-radius: 40rpx;
|
|
border-radius: 40rpx;
|
|
|
backdrop-filter: blur(10rpx);
|
|
backdrop-filter: blur(10rpx);
|
|
|
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
|
|
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
.loading-dots {
|
|
.loading-dots {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
justify-content: center;
|
|
justify-content: center;
|
|
@@ -312,19 +292,25 @@
|
|
|
|
|
|
|
|
// 动画
|
|
// 动画
|
|
|
@keyframes logoFloat {
|
|
@keyframes logoFloat {
|
|
|
- 0%, 100% {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
transform: translateY(0) scale(1);
|
|
transform: translateY(0) scale(1);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
50% {
|
|
50% {
|
|
|
transform: translateY(-15rpx) scale(1.02);
|
|
transform: translateY(-15rpx) scale(1.02);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
@keyframes logoGlow {
|
|
@keyframes logoGlow {
|
|
|
- 0%, 100% {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
opacity: 0.5;
|
|
opacity: 0.5;
|
|
|
transform: translate(-50%, -50%) scale(1);
|
|
transform: translate(-50%, -50%) scale(1);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
50% {
|
|
50% {
|
|
|
opacity: 0.8;
|
|
opacity: 0.8;
|
|
|
transform: translate(-50%, -50%) scale(1.1);
|
|
transform: translate(-50%, -50%) scale(1.1);
|
|
@@ -332,29 +318,39 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@keyframes loadingDot {
|
|
@keyframes loadingDot {
|
|
|
- 0%, 80%, 100% {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 80%,
|
|
|
|
|
+ 100% {
|
|
|
transform: scale(0.8);
|
|
transform: scale(0.8);
|
|
|
opacity: 0.4;
|
|
opacity: 0.4;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
40% {
|
|
40% {
|
|
|
transform: scale(1.2);
|
|
transform: scale(1.2);
|
|
|
opacity: 1;
|
|
opacity: 1;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
@keyframes floatBg1 {
|
|
@keyframes floatBg1 {
|
|
|
- 0%, 100% {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
transform: translate(0, 0) scale(1);
|
|
transform: translate(0, 0) scale(1);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
50% {
|
|
50% {
|
|
|
transform: translate(30rpx, -30rpx) scale(1.05);
|
|
transform: translate(30rpx, -30rpx) scale(1.05);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
@keyframes floatBg2 {
|
|
@keyframes floatBg2 {
|
|
|
- 0%, 100% {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ 0%,
|
|
|
|
|
+ 100% {
|
|
|
transform: translate(0, 0) scale(1);
|
|
transform: translate(0, 0) scale(1);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
50% {
|
|
50% {
|
|
|
transform: translate(-30rpx, 30rpx) scale(1.08);
|
|
transform: translate(-30rpx, 30rpx) scale(1.08);
|
|
|
}
|
|
}
|