chore: 重写初始提交(清空历史,整理后全量提交)

This commit is contained in:
ywxapp
2026-08-16 16:54:14 +08:00
commit 6c1a106bc1
1808 changed files with 238144 additions and 0 deletions
@@ -0,0 +1,113 @@
<template>
<view class="guide-container">
<!-- 轮播图形式的引导页 -->
<swiper class="swiper" :indicator-dots="true" :autoplay="false" @change="onChange">
<swiper-item v-for="(item, index) in guideList" :key="index">
<image :src="item.image" mode="aspectFill" class="guide-image" />
<text class="guide-text">{{ item.text }}</text>
</swiper-item>
</swiper>
<!-- 最后一张显示进入按钮 -->
<button v-if="currentIndex === guideList.length - 1" class="enter-btn" @click="enterApp">
立即体验
</button>
<!-- 跳过按钮 -->
<text class="skip-btn" @click="enterApp">跳过</text>
</view>
</template>
<script setup lang="uts">
import userState, { isLoggedIn } from '@/stores/user.uts'
import { appState } from '@/stores/app.uts'
import messageService from '@/services/websocket/message-service.uts'
// 响应式数据
const currentIndex = ref<number>(0)
type IList = { image : string, text : string }
// 引导页数据
const guideList = ref<Array<IList>>([
{ image: '/static/guide1.png', text: '功能介绍一' },
{ image: '/static/guide2.png', text: '功能介绍二' },
{ image: '/static/guide3.png', text: '功能介绍三' }
])
const isLogin = computed(() : boolean => {
return isLoggedIn.value
})
// 轮播切换事件
const onChange = (e : UniSwiperChangeEvent) => {
currentIndex.value = e.detail.current
}
// 进入应用
const enterApp = () => {
uni.setStorageSync('hasGuide', true)
if (isLoggedIn.value) {
// 连接实时消息通道(使用后端 appConf.socketUrl 与真实 token
messageService.connectIfNeeded(appState.systemConf?.socketUrl ?? null)
uni.switchTab({
url: '/pages/index/index'
})
} else {
uni.redirectTo({
url: '/pages/login/index'
})
}
}
// 页面生命周期 - 检查是否首次启动
onLoad(() => {
const hasGuide = uni.getStorageSync('hasGuide') ?? null
if (hasGuide != null) {
// 非首次启动,直接跳转首页
enterApp()
}
})
</script>
<style>
.guide-container {
position: relative;
height: 100%;
}
.swiper {
height: 100%;
}
.guide-image {
width: 100%;
height: 80%;
}
.guide-text {
text-align: center;
padding: 30rpx;
font-size: 32rpx;
color: #333;
}
.enter-btn {
position: absolute;
bottom: 200rpx;
left: 50%;
transform: translateX(-50%);
width: 300rpx;
height: 80rpx;
line-height: 80rpx;
background: #007aff;
color: #fff;
border-radius: 40rpx;
}
.skip-btn {
position: absolute;
top: 80rpx;
right: 40rpx;
padding: 10rpx 30rpx;
background: rgba(0, 0, 0, 0.3);
color: #fff;
border-radius: 30rpx;
font-size: 28rpx;
}
</style>