feat: 统一页面布局 + 问答页面未登录可预览

- 添加全局 .page-layout 工具类(统一padding/背景/min-height)
- 所有16个页面根元素加上 page-layout 类
- 问答页面移除登录拦截:未登录可看欢迎卡片和问题建议,使用时再跳登录
- 输入区未登录时显示品牌色登录引导按钮
- 补全 detail/search/progress/feedback 缺漏的 status-bar-placeholder
This commit is contained in:
Yuzhiran Dev
2026-07-11 13:09:43 +08:00
parent c1d6dd3b29
commit af57f1a395
18 changed files with 82 additions and 43 deletions
+15
View File
@@ -258,6 +258,21 @@ view {
height: 0;
}
/* 页面布局统一 */
.page-layout {
min-height: 100vh;
padding: 0 20px 30px;
background: var(--bg-primary);
}
/* 页面副标题(统一) */
.page-subtitle {
display: block;
font-size: 13px;
color: var(--text-tertiary);
margin-top: 4px;
}
/* 卡片通用 */
.card {
background: var(--glass-bg);
@@ -1,5 +1,5 @@
<template>
<view class="page-achievements">
<view class="page-achievements page-layout">
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
+39 -28
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-chat">
<view class="page-chat page-layout">
<view class="status-bar-placeholder"></view>
<!-- 聊天头部 -->
@@ -11,21 +11,15 @@
<text class="chat-name">AI 助手</text>
<text class="chat-status">随时为你解答</text>
</view>
<!-- 配额徽章 -->
<view class="quota-badge" @click="goShare">
<!-- 配额徽章登录后显示 -->
<view class="quota-badge" v-if="userStore.isLoggedIn" @click="goShare">
<text class="quota-text">{{ quotaDisplay }}</text>
<text class="quota-icon">🎁</text>
</view>
</view>
<!-- 未登录提示 -->
<view class="login-hint" v-if="!userStore.isLoggedIn">
<text class="hint-text">登录后即可向 AI 助手提问</text>
<button class="login-btn" @click="goLogin">微信登录</button>
</view>
<!-- 消息列表 -->
<scroll-view class="msg-list" scroll-y :scroll-into-view="scrollTo" v-else>
<!-- 消息列表始终可见 -->
<scroll-view class="msg-list" scroll-y :scroll-into-view="scrollTo">
<!-- 欢迎消息 -->
<view class="welcome-card">
<text class="welcome-icon">💡</text>
@@ -57,9 +51,9 @@
</view>
</scroll-view>
<!-- 输入区 -->
<view class="chat-input-area" v-if="userStore.isLoggedIn">
<view class="chat-input">
<!-- 输入区始终可见未登录时提示登录 -->
<view class="chat-input-area">
<view class="chat-input" v-if="userStore.isLoggedIn">
<input
v-model="question"
class="input-field"
@@ -72,6 +66,13 @@
<text></text>
</view>
</view>
<!-- 未登录显示登录引导 -->
<view class="login-input-placeholder" v-else @click="goLogin">
<text class="login-input-text">登录后即可体验 AI 问答</text>
<view class="login-input-btn">
<text>去登录 </text>
</view>
</view>
</view>
</view>
</template>
@@ -123,6 +124,12 @@ async function sendMessage() {
const q = question.value.trim()
if (!q || loading.value) return
// 未登录 → 跳登录
if (!userStore.isLoggedIn) {
uni.navigateTo({ url: '/pages/login/login' })
return
}
messages.value.push({ role: 'user', content: escapeHtml(q) })
question.value = ''
scrollToLast()
@@ -267,29 +274,33 @@ function goShare() {
.quota-icon { font-size: 14px; }
// 未登录提示
.login-hint {
flex: 1;
// 未登录输入区占位
.login-input-placeholder {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 16px;
padding: 0 40px;
justify-content: space-between;
padding: 14px 18px;
background: var(--glass-bg);
border: 1px dashed var(--glass-border);
border-radius: 14px;
margin-bottom: 30px;
cursor: pointer;
}
.hint-text {
.login-input-text {
font-size: 14px;
color: var(--text-tertiary);
}
.login-btn {
background: linear-gradient(135deg, #07c160, #06ad56);
.login-input-btn {
padding: 6px 16px;
background: var(--color-brand);
border-radius: 8px;
}
.login-input-btn text {
font-size: 13px;
color: white;
border: none;
border-radius: 10px;
padding: 10px 24px;
font-size: 14px;
font-weight: 600;
}
+3 -1
View File
@@ -1,5 +1,7 @@
<template>
<view class="detail-page">
<view class="detail-page page-layout">
<!-- 状态栏占位 -->
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
<view class="nav-bar">
<view class="nav-back" @click="goBack"></view>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-dim">
<view class="page-dim page-layout">
<view class="status-bar-placeholder"></view>
<view class="back-btn" @tap="goBack">
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-favorites">
<view class="page-favorites page-layout">
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
+3 -1
View File
@@ -1,5 +1,7 @@
<template>
<view class="feedback-page">
<view class="feedback-page page-layout">
<!-- 状态栏占位 -->
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
<view class="nav-bar">
<view class="nav-back" @click="goBack"></view>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-home">
<view class="page-home page-layout">
<!-- 状态栏占位 -->
<view class="status-bar-placeholder"></view>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-leaderboard">
<view class="page-leaderboard page-layout">
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="login-page">
<view class="login-page page-layout">
<!-- 背景装饰 -->
<view class="bg-orb orb-1"></view>
<view class="bg-orb orb-2"></view>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-news-detail">
<view class="page-news-detail page-layout">
<view class="status-bar-placeholder"></view>
<!-- 导航 -->
<view class="nav-bar">
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-payment">
<view class="page-payment page-layout">
<view class="status-bar-placeholder"></view>
<!-- 导航 -->
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-profile">
<view class="page-profile page-layout">
<view class="status-bar-placeholder"></view>
<!-- 用户信息 -->
+3 -1
View File
@@ -1,5 +1,7 @@
<template>
<view class="progress-page">
<view class="progress-page page-layout">
<!-- 状态栏占位 -->
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
<view class="nav-bar">
<view class="nav-back" @click="goBack"></view>
+3 -1
View File
@@ -1,5 +1,7 @@
<template>
<view class="search-page">
<view class="search-page page-layout">
<!-- 状态栏占位 -->
<view class="status-bar-placeholder"></view>
<!-- 顶部导航 -->
<view class="nav-bar">
<view class="nav-back" @click="goBack"></view>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-settings">
<view class="page-settings page-layout">
<view class="status-bar-placeholder"></view>
<text class="page-title">设置</text>
+1 -1
View File
@@ -1,5 +1,5 @@
<template>
<view class="page-trend">
<view class="page-trend page-layout">
<view class="status-bar-placeholder"></view>
<!-- 顶部 -->