feat: 统一页面布局 + 问答页面未登录可预览
- 添加全局 .page-layout 工具类(统一padding/背景/min-height) - 所有16个页面根元素加上 page-layout 类 - 问答页面移除登录拦截:未登录可看欢迎卡片和问题建议,使用时再跳登录 - 输入区未登录时显示品牌色登录引导按钮 - 补全 detail/search/progress/feedback 缺漏的 status-bar-placeholder
This commit is contained in:
@@ -0,0 +1,5 @@
|
|||||||
|
allowBuilds:
|
||||||
|
'@parcel/watcher': set this to true or false
|
||||||
|
core-js: set this to true or false
|
||||||
|
esbuild: set this to true or false
|
||||||
|
vue-demi: set this to true or false
|
||||||
@@ -258,6 +258,21 @@ view {
|
|||||||
height: 0;
|
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 {
|
.card {
|
||||||
background: var(--glass-bg);
|
background: var(--glass-bg);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-achievements">
|
<view class="page-achievements page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-chat">
|
<view class="page-chat page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 聊天头部 -->
|
<!-- 聊天头部 -->
|
||||||
@@ -11,21 +11,15 @@
|
|||||||
<text class="chat-name">AI 助手</text>
|
<text class="chat-name">AI 助手</text>
|
||||||
<text class="chat-status">随时为你解答</text>
|
<text class="chat-status">随时为你解答</text>
|
||||||
</view>
|
</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-text">{{ quotaDisplay }}</text>
|
||||||
<text class="quota-icon">🎁</text>
|
<text class="quota-icon">🎁</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 未登录提示 -->
|
<!-- 消息列表(始终可见) -->
|
||||||
<view class="login-hint" v-if="!userStore.isLoggedIn">
|
<scroll-view class="msg-list" scroll-y :scroll-into-view="scrollTo">
|
||||||
<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>
|
|
||||||
<!-- 欢迎消息 -->
|
<!-- 欢迎消息 -->
|
||||||
<view class="welcome-card">
|
<view class="welcome-card">
|
||||||
<text class="welcome-icon">💡</text>
|
<text class="welcome-icon">💡</text>
|
||||||
@@ -57,9 +51,9 @@
|
|||||||
</view>
|
</view>
|
||||||
</scroll-view>
|
</scroll-view>
|
||||||
|
|
||||||
<!-- 输入区 -->
|
<!-- 输入区(始终可见,未登录时提示登录) -->
|
||||||
<view class="chat-input-area" v-if="userStore.isLoggedIn">
|
<view class="chat-input-area">
|
||||||
<view class="chat-input">
|
<view class="chat-input" v-if="userStore.isLoggedIn">
|
||||||
<input
|
<input
|
||||||
v-model="question"
|
v-model="question"
|
||||||
class="input-field"
|
class="input-field"
|
||||||
@@ -72,6 +66,13 @@
|
|||||||
<text>➤</text>
|
<text>➤</text>
|
||||||
</view>
|
</view>
|
||||||
</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>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -123,6 +124,12 @@ async function sendMessage() {
|
|||||||
const q = question.value.trim()
|
const q = question.value.trim()
|
||||||
if (!q || loading.value) return
|
if (!q || loading.value) return
|
||||||
|
|
||||||
|
// 未登录 → 跳登录
|
||||||
|
if (!userStore.isLoggedIn) {
|
||||||
|
uni.navigateTo({ url: '/pages/login/login' })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
messages.value.push({ role: 'user', content: escapeHtml(q) })
|
messages.value.push({ role: 'user', content: escapeHtml(q) })
|
||||||
question.value = ''
|
question.value = ''
|
||||||
scrollToLast()
|
scrollToLast()
|
||||||
@@ -267,29 +274,33 @@ function goShare() {
|
|||||||
|
|
||||||
.quota-icon { font-size: 14px; }
|
.quota-icon { font-size: 14px; }
|
||||||
|
|
||||||
// 未登录提示
|
// 未登录输入区占位
|
||||||
.login-hint {
|
.login-input-placeholder {
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: space-between;
|
||||||
gap: 16px;
|
padding: 14px 18px;
|
||||||
padding: 0 40px;
|
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;
|
font-size: 14px;
|
||||||
color: var(--text-tertiary);
|
color: var(--text-tertiary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-btn {
|
.login-input-btn {
|
||||||
background: linear-gradient(135deg, #07c160, #06ad56);
|
padding: 6px 16px;
|
||||||
|
background: var(--color-brand);
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-input-btn text {
|
||||||
|
font-size: 13px;
|
||||||
color: white;
|
color: white;
|
||||||
border: none;
|
|
||||||
border-radius: 10px;
|
|
||||||
padding: 10px 24px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="detail-page">
|
<view class="detail-page page-layout">
|
||||||
|
<!-- 状态栏占位 -->
|
||||||
|
<view class="status-bar-placeholder"></view>
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
<view class="nav-bar">
|
<view class="nav-bar">
|
||||||
<view class="nav-back" @click="goBack">‹</view>
|
<view class="nav-back" @click="goBack">‹</view>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-dim">
|
<view class="page-dim page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<view class="back-btn" @tap="goBack">
|
<view class="back-btn" @tap="goBack">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-favorites">
|
<view class="page-favorites page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="feedback-page">
|
<view class="feedback-page page-layout">
|
||||||
|
<!-- 状态栏占位 -->
|
||||||
|
<view class="status-bar-placeholder"></view>
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
<view class="nav-bar">
|
<view class="nav-bar">
|
||||||
<view class="nav-back" @click="goBack">‹</view>
|
<view class="nav-back" @click="goBack">‹</view>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-home">
|
<view class="page-home page-layout">
|
||||||
<!-- 状态栏占位 -->
|
<!-- 状态栏占位 -->
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-leaderboard">
|
<view class="page-leaderboard page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="login-page">
|
<view class="login-page page-layout">
|
||||||
<!-- 背景装饰 -->
|
<!-- 背景装饰 -->
|
||||||
<view class="bg-orb orb-1"></view>
|
<view class="bg-orb orb-1"></view>
|
||||||
<view class="bg-orb orb-2"></view>
|
<view class="bg-orb orb-2"></view>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-news-detail">
|
<view class="page-news-detail page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
<!-- 导航 -->
|
<!-- 导航 -->
|
||||||
<view class="nav-bar">
|
<view class="nav-bar">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-payment">
|
<view class="page-payment page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 导航 -->
|
<!-- 导航 -->
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-profile">
|
<view class="page-profile page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 用户信息 -->
|
<!-- 用户信息 -->
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="progress-page">
|
<view class="progress-page page-layout">
|
||||||
|
<!-- 状态栏占位 -->
|
||||||
|
<view class="status-bar-placeholder"></view>
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
<view class="nav-bar">
|
<view class="nav-bar">
|
||||||
<view class="nav-back" @click="goBack">‹</view>
|
<view class="nav-back" @click="goBack">‹</view>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="search-page">
|
<view class="search-page page-layout">
|
||||||
|
<!-- 状态栏占位 -->
|
||||||
|
<view class="status-bar-placeholder"></view>
|
||||||
<!-- 顶部导航 -->
|
<!-- 顶部导航 -->
|
||||||
<view class="nav-bar">
|
<view class="nav-bar">
|
||||||
<view class="nav-back" @click="goBack">‹</view>
|
<view class="nav-back" @click="goBack">‹</view>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-settings">
|
<view class="page-settings page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
<text class="page-title">设置</text>
|
<text class="page-title">设置</text>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="page-trend">
|
<view class="page-trend page-layout">
|
||||||
<view class="status-bar-placeholder"></view>
|
<view class="status-bar-placeholder"></view>
|
||||||
|
|
||||||
<!-- 顶部 -->
|
<!-- 顶部 -->
|
||||||
|
|||||||
Reference in New Issue
Block a user