rating detail
This commit is contained in:
24
pages.json
24
pages.json
@@ -9,14 +9,6 @@
|
|||||||
"backgroundColor": "#FFFFFF"
|
"backgroundColor": "#FFFFFF"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"path": "pages/rating/index",
|
|
||||||
"style": {
|
|
||||||
"navigationBarTitleText": "全民评分",
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
"enablePullDownRefresh": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"path": "pages/mine/help",
|
"path": "pages/mine/help",
|
||||||
"style": {
|
"style": {
|
||||||
@@ -71,6 +63,22 @@
|
|||||||
"enablePullDownRefresh": false,
|
"enablePullDownRefresh": false,
|
||||||
"navigationStyle": "custom"
|
"navigationStyle": "custom"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/rating/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "全民评分",
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"enablePullDownRefresh": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "pages/rating/detail",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "人物详情",
|
||||||
|
"navigationStyle": "custom",
|
||||||
|
"enablePullDownRefresh": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"globalStyle": {
|
"globalStyle": {
|
||||||
|
|||||||
858
pages/rating/detail.vue
Normal file
858
pages/rating/detail.vue
Normal file
@@ -0,0 +1,858 @@
|
|||||||
|
<template>
|
||||||
|
<view class="page-container">
|
||||||
|
<!-- 顶部导航栏 -->
|
||||||
|
<view class="nav-bar" :style="{ paddingTop: statusBarHeight + 'px' }">
|
||||||
|
<view class="nav-content">
|
||||||
|
<view class="nav-left" @tap="goBack">
|
||||||
|
<text class="back-icon"></text>
|
||||||
|
<text class="nav-title">全民评分</text>
|
||||||
|
</view>
|
||||||
|
<view class="nav-right">
|
||||||
|
<text class="search-icon"></text>
|
||||||
|
<image class="nav-avatar" src="/static/images/default-avatar.png" mode="aspectFill" />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 顶部背景与基础信息 -->
|
||||||
|
<view class="header-bg">
|
||||||
|
<image class="bg-image" src="https://images.unsplash.com/photo-1548013146-72479768bada?q=80&w=2076&auto=format&fit=crop" mode="aspectFill" />
|
||||||
|
<view class="bg-mask"></view>
|
||||||
|
|
||||||
|
<view class="header-info" :style="{ paddingTop: statusBarHeight + 60 + 'px' }">
|
||||||
|
<view class="tags-wrap">
|
||||||
|
<text class="tag">#千古一帝</text>
|
||||||
|
<text class="tag">#文治武功</text>
|
||||||
|
<text class="tag">#历史</text>
|
||||||
|
</view>
|
||||||
|
<text class="hero-title">{{ detailData.name }}</text>
|
||||||
|
<view class="hero-stats">
|
||||||
|
<text class="rank-badge">🏆 No.1</text>
|
||||||
|
<text class="stat-text">热度 98.2w</text>
|
||||||
|
<text class="stat-text">23万人参与</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="content-body">
|
||||||
|
<!-- 核心数据面板 -->
|
||||||
|
<view class="core-panel">
|
||||||
|
<view class="score-wrap">
|
||||||
|
<text class="main-score">{{ detailData.score }}</text>
|
||||||
|
<view class="trend-wrap">
|
||||||
|
<text class="trend-icon">📈</text>
|
||||||
|
<text class="trend-text">本周上涨 1 名</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="rate-stats">
|
||||||
|
<view class="rate-item">
|
||||||
|
<text class="rate-label">封神率</text>
|
||||||
|
<text class="rate-value">78%</text>
|
||||||
|
</view>
|
||||||
|
<view class="rate-item dispute">
|
||||||
|
<text class="rate-label">争议度</text>
|
||||||
|
<text class="rate-value">21%</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="feature-tags">
|
||||||
|
<view class="f-tag"><text>👑 千古一帝</text></view>
|
||||||
|
<view class="f-tag"><text>⚔️ 战力爆炸</text></view>
|
||||||
|
<view class="f-tag"><text>📚 文治巅峰</text></view>
|
||||||
|
<view class="f-tag"><text>🔥 影响力拉满</text></view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 你的态度评分散面板 -->
|
||||||
|
<view class="attitude-panel">
|
||||||
|
<text class="panel-title">你的态度</text>
|
||||||
|
<view class="action-group">
|
||||||
|
<view
|
||||||
|
class="action-item"
|
||||||
|
v-for="(action, index) in actions"
|
||||||
|
:key="index"
|
||||||
|
:class="{ active: currentAction === action.value }"
|
||||||
|
@tap="handleAction(action.value)"
|
||||||
|
>
|
||||||
|
<text class="emoji">{{ action.emoji }}</text>
|
||||||
|
<text class="action-name">{{ action.label }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="quick-comment">
|
||||||
|
<input class="comment-input" type="text" placeholder="说点什么吧..." />
|
||||||
|
<button class="send-btn">发送</button>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- AI 观察员 -->
|
||||||
|
<view class="ai-observer">
|
||||||
|
<view class="ai-header">
|
||||||
|
<text class="ai-icon"></text>
|
||||||
|
<text class="ai-title">AI观察员</text>
|
||||||
|
</view>
|
||||||
|
<text class="ai-content">{{ detailData.aiSummary }}</text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 大家都在 PK -->
|
||||||
|
<view class="pk-panel">
|
||||||
|
<view class="pk-header">
|
||||||
|
<text class="panel-title">大家都在 PK</text>
|
||||||
|
<view class="go-compare">去对比<text class="arrow-right"></text></view>
|
||||||
|
</view>
|
||||||
|
<view class="pk-content">
|
||||||
|
<view class="pk-person">
|
||||||
|
<image class="pk-avatar blue-border" :src="detailData.avatar" mode="aspectFill" />
|
||||||
|
<text class="pk-name">{{ detailData.name }}</text>
|
||||||
|
</view>
|
||||||
|
<text class="vs-text">VS</text>
|
||||||
|
<view class="pk-person">
|
||||||
|
<image class="pk-avatar yellow-border" src="https://api.dicebear.com/7.x/avataaars/svg?seed=13" mode="aspectFill" />
|
||||||
|
<text class="pk-name">康熙</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="pk-bar-wrap">
|
||||||
|
<view class="pk-bar blue-bar" style="width: 63%;"></view>
|
||||||
|
<view class="pk-bar yellow-bar" style="width: 37%;"></view>
|
||||||
|
</view>
|
||||||
|
<view class="pk-data-text">
|
||||||
|
<text class="blue-text">63% 支持</text>
|
||||||
|
<text class="yellow-text">37% 支持</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 评论区 -->
|
||||||
|
<view class="comments-section">
|
||||||
|
<view class="tabs-header">
|
||||||
|
<view class="tabs">
|
||||||
|
<text class="tab active">最热</text>
|
||||||
|
<text class="tab">最新</text>
|
||||||
|
</view>
|
||||||
|
<text class="filter-icon"></text>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view class="comment-list">
|
||||||
|
<view class="comment-item" v-for="comment in comments" :key="comment.id">
|
||||||
|
<image class="c-avatar" :src="comment.avatar" mode="aspectFill" />
|
||||||
|
<view class="c-content-wrap">
|
||||||
|
<view class="c-header">
|
||||||
|
<view class="c-user-info">
|
||||||
|
<text class="c-name">{{ comment.name }}</text>
|
||||||
|
<view class="c-badge" v-if="comment.badge">
|
||||||
|
<text class="b-icon">{{ comment.badgeIcon }}</text>
|
||||||
|
<text class="b-text">{{ comment.badge }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="c-like">
|
||||||
|
<text class="like-icon"></text>
|
||||||
|
<text class="like-count">{{ comment.likes }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<text class="c-time">{{ comment.time }}</text>
|
||||||
|
<text class="c-text">{{ comment.content }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<!-- 加载更多 -->
|
||||||
|
<view class="load-more">
|
||||||
|
<text>{{ loading ? '加载中...' : (hasMore ? '上拉加载更多' : '没有更多了') }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { getStatusBarHeight } from "@/utils/system";
|
||||||
|
import { onLoad, onPullDownRefresh, onReachBottom } from "@dcloudio/uni-app";
|
||||||
|
|
||||||
|
const statusBarHeight = ref(getStatusBarHeight() || 44);
|
||||||
|
const loading = ref(false);
|
||||||
|
const hasMore = ref(true);
|
||||||
|
const currentAction = ref('god');
|
||||||
|
|
||||||
|
const goBack = () => {
|
||||||
|
uni.navigateBack();
|
||||||
|
};
|
||||||
|
|
||||||
|
const detailData = ref({
|
||||||
|
id: 1,
|
||||||
|
name: '李世民',
|
||||||
|
score: '9.8',
|
||||||
|
avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=11',
|
||||||
|
aiSummary: '多数用户认为李世民综合能力最强,尤其在文治武功方面优势明显。关于玄武门事件的争议依然存在。'
|
||||||
|
});
|
||||||
|
|
||||||
|
const actions = [
|
||||||
|
{ label: '离谱', value: 'terrible', emoji: '👎' },
|
||||||
|
{ label: '一般', value: 'bad', emoji: '😐' },
|
||||||
|
{ label: '不错', value: 'ok', emoji: '🙂' },
|
||||||
|
{ label: '很强', value: 'good', emoji: '🔥' },
|
||||||
|
{ label: '封神', value: 'god', emoji: '👑' }
|
||||||
|
];
|
||||||
|
|
||||||
|
const mockComments = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: '历史课代表',
|
||||||
|
avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=u1',
|
||||||
|
time: '2小时前',
|
||||||
|
content: '李世民唯一缺点是儿子太抽象。',
|
||||||
|
likes: '2.3k',
|
||||||
|
badge: '封神',
|
||||||
|
badgeIcon: '👑'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
name: '贞观长歌',
|
||||||
|
avatar: 'https://api.dicebear.com/7.x/avataaars/svg?seed=u2',
|
||||||
|
time: '5小时前',
|
||||||
|
content: '不管怎么说,六边形战士在历史上是真罕见。',
|
||||||
|
likes: '856',
|
||||||
|
badge: '很强',
|
||||||
|
badgeIcon: '🔥'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
const comments = ref([...mockComments]);
|
||||||
|
|
||||||
|
const handleAction = (val) => {
|
||||||
|
currentAction.value = val;
|
||||||
|
};
|
||||||
|
|
||||||
|
onLoad((options) => {
|
||||||
|
// 可以通过 options.itemId 获取传递过来的参数进行数据请求
|
||||||
|
console.log('Received itemId:', options.itemId);
|
||||||
|
});
|
||||||
|
|
||||||
|
onPullDownRefresh(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
comments.value = [...mockComments];
|
||||||
|
hasMore.value = true;
|
||||||
|
uni.stopPullDownRefresh();
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
|
||||||
|
onReachBottom(() => {
|
||||||
|
if (!hasMore.value || loading.value) return;
|
||||||
|
loading.value = true;
|
||||||
|
setTimeout(() => {
|
||||||
|
const more = mockComments.map(c => ({...c, id: c.id + comments.value.length}));
|
||||||
|
comments.value.push(...more);
|
||||||
|
loading.value = false;
|
||||||
|
if (comments.value.length >= 10) hasMore.value = false;
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.page-container {
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f5f6fa;
|
||||||
|
padding-bottom: 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 导航栏 */
|
||||||
|
.nav-bar {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 100;
|
||||||
|
background-color: transparent;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 模拟滚动变色可以后续加,这里先用半透明黑色背景保证字看得清 */
|
||||||
|
.nav-bar {
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-content {
|
||||||
|
height: 44px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-left {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='19' y1='12' x2='5' y2='12'%3E%3C/line%3E%3Cpolyline points='12 19 5 12 12 5'%3E%3C/polyline%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-title {
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-icon {
|
||||||
|
width: 40rpx;
|
||||||
|
height: 40rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232953ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
margin-right: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-avatar {
|
||||||
|
width: 52rpx;
|
||||||
|
height: 52rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 顶部背景与信息 */
|
||||||
|
.header-bg {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
height: 560rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-mask {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: linear-gradient(to bottom, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0) 50%, rgba(245,246,250,1) 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-info {
|
||||||
|
position: relative;
|
||||||
|
z-index: 10;
|
||||||
|
padding: 0 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags-wrap {
|
||||||
|
display: flex;
|
||||||
|
gap: 16rpx;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
background-color: rgba(255,255,255,0.3);
|
||||||
|
color: #fff;
|
||||||
|
font-size: 22rpx;
|
||||||
|
padding: 6rpx 20rpx;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-title {
|
||||||
|
font-size: 64rpx;
|
||||||
|
font-weight: 900;
|
||||||
|
color: #fff;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
text-shadow: 0 4rpx 8rpx rgba(0,0,0,0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero-stats {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rank-badge {
|
||||||
|
color: #ffd700;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 26rpx;
|
||||||
|
text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.stat-text {
|
||||||
|
color: rgba(255,255,255,0.9);
|
||||||
|
font-size: 24rpx;
|
||||||
|
text-shadow: 0 2rpx 4rpx rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 内容区 */
|
||||||
|
.content-body {
|
||||||
|
position: relative;
|
||||||
|
z-index: 20;
|
||||||
|
margin-top: -60rpx;
|
||||||
|
padding: 0 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 核心面板 */
|
||||||
|
.core-panel {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 32rpx;
|
||||||
|
padding: 40rpx 32rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
box-shadow: 0 8rpx 32rpx rgba(0,0,0,0.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.score-wrap {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-score {
|
||||||
|
font-size: 88rpx;
|
||||||
|
font-weight: 900;
|
||||||
|
color: #2953ff;
|
||||||
|
font-family: 'DIN Alternate', sans-serif;
|
||||||
|
line-height: 1;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trend-wrap {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #2953ff;
|
||||||
|
font-size: 24rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.trend-icon {
|
||||||
|
margin-right: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rate-stats {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
gap: 24rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rate-item {
|
||||||
|
flex: 1;
|
||||||
|
background-color: #f5f7ff;
|
||||||
|
border-radius: 20rpx;
|
||||||
|
padding: 24rpx;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rate-item.dispute {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rate-label {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #666;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rate-value {
|
||||||
|
font-size: 40rpx;
|
||||||
|
font-weight: 800;
|
||||||
|
color: #111;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature-tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.f-tag {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 2rpx solid #eef1ff;
|
||||||
|
padding: 10rpx 24rpx;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #444;
|
||||||
|
font-weight: bold;
|
||||||
|
box-shadow: 0 4rpx 12rpx rgba(41,83,255,0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 你的态度面板 */
|
||||||
|
.attitude-panel {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 32rpx;
|
||||||
|
padding: 32rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel-title {
|
||||||
|
font-size: 34rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #111;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-group {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.emoji {
|
||||||
|
font-size: 56rpx;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
filter: grayscale(100%);
|
||||||
|
opacity: 0.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-name {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-item.active .emoji {
|
||||||
|
filter: grayscale(0%);
|
||||||
|
opacity: 1;
|
||||||
|
transform: scale(1.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
.action-item.active .action-name {
|
||||||
|
color: #2953ff;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.quick-comment {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #f0f2f7;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
padding: 8rpx 8rpx 8rpx 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-input {
|
||||||
|
flex: 1;
|
||||||
|
height: 72rpx;
|
||||||
|
font-size: 28rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.send-btn {
|
||||||
|
background-color: #4d44f1;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 26rpx;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
padding: 0 40rpx;
|
||||||
|
height: 64rpx;
|
||||||
|
line-height: 64rpx;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.send-btn::after {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AI 观察员 */
|
||||||
|
.ai-observer {
|
||||||
|
background: #ffffff;
|
||||||
|
border: 2rpx solid #e0d6ff;
|
||||||
|
border-radius: 32rpx;
|
||||||
|
padding: 32rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ai-observer::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0; left: 0; right: 0; bottom: 0;
|
||||||
|
background: linear-gradient(135deg, rgba(77,68,241,0.05) 0%, rgba(255,255,255,0) 100%);
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ai-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ai-icon {
|
||||||
|
width: 36rpx;
|
||||||
|
height: 36rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%237B46F1'%3E%3Cpath d='M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h5a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h5V5.73A2 2 0 0 1 10 4a2 2 0 0 1 2-2zm-3 8a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm6 0a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z'/%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
margin-right: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ai-title {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: 800;
|
||||||
|
color: #7b46f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ai-content {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
line-height: 1.6;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 大家都在 PK */
|
||||||
|
.pk-panel {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 32rpx;
|
||||||
|
padding: 32rpx;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-header .panel-title {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.go-compare {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #2953ff;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.arrow-right {
|
||||||
|
width: 24rpx;
|
||||||
|
height: 24rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232953ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='9 18 15 12 9 6'%3E%3C/polyline%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-content {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 24rpx;
|
||||||
|
padding: 0 40rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-person {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-avatar {
|
||||||
|
width: 110rpx;
|
||||||
|
height: 110rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
border: 4rpx solid transparent;
|
||||||
|
margin-bottom: 12rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blue-border { border-color: #2953ff; }
|
||||||
|
.yellow-border { border-color: #ffc107; }
|
||||||
|
|
||||||
|
.pk-name {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-text {
|
||||||
|
font-size: 40rpx;
|
||||||
|
font-weight: 900;
|
||||||
|
color: #d1d5db;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-bar-wrap {
|
||||||
|
height: 16rpx;
|
||||||
|
border-radius: 100rpx;
|
||||||
|
display: flex;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pk-bar { height: 100%; }
|
||||||
|
.blue-bar { background-color: #2953ff; }
|
||||||
|
.yellow-bar { background-color: #ffc107; }
|
||||||
|
|
||||||
|
.pk-data-text {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 24rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blue-text { color: #2953ff; }
|
||||||
|
.yellow-text { color: #d9a000; }
|
||||||
|
|
||||||
|
/* 评论区 */
|
||||||
|
.comments-section {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 32rpx;
|
||||||
|
padding: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 32rpx;
|
||||||
|
border-bottom: 2rpx solid #f0f0f0;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabs {
|
||||||
|
display: flex;
|
||||||
|
gap: 32rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab {
|
||||||
|
font-size: 32rpx;
|
||||||
|
color: #666;
|
||||||
|
font-weight: bold;
|
||||||
|
position: relative;
|
||||||
|
padding-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab.active {
|
||||||
|
color: #111;
|
||||||
|
font-size: 36rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab.active::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 40rpx;
|
||||||
|
height: 6rpx;
|
||||||
|
background-color: #111;
|
||||||
|
border-radius: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.filter-icon {
|
||||||
|
width: 36rpx;
|
||||||
|
height: 36rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23333' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='21' x2='4' y2='14'%3E%3C/line%3E%3Cline x1='4' y1='10' x2='4' y2='3'%3E%3C/line%3E%3Cline x1='12' y1='21' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='3'%3E%3C/line%3E%3Cline x1='20' y1='21' x2='20' y2='16'%3E%3C/line%3E%3Cline x1='20' y1='12' x2='20' y2='3'%3E%3C/line%3E%3Cline x1='1' y1='14' x2='7' y2='14'%3E%3C/line%3E%3Cline x1='9' y1='8' x2='15' y2='8'%3E%3C/line%3E%3Cline x1='17' y1='16' x2='23' y2='16'%3E%3C/line%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-list {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-item {
|
||||||
|
display: flex;
|
||||||
|
padding: 32rpx 0;
|
||||||
|
border-bottom: 2rpx solid #f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-avatar {
|
||||||
|
width: 72rpx;
|
||||||
|
height: 72rpx;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-right: 24rpx;
|
||||||
|
background-color: #eee;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-content-wrap {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-user-info {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-name {
|
||||||
|
font-size: 28rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin-right: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-badge {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #f5f6fa;
|
||||||
|
padding: 2rpx 12rpx;
|
||||||
|
border-radius: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.b-icon { font-size: 20rpx; margin-right: 4rpx; }
|
||||||
|
.b-text { font-size: 20rpx; color: #666; font-weight: bold; }
|
||||||
|
|
||||||
|
.c-like {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: #666;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.like-icon {
|
||||||
|
width: 28rpx;
|
||||||
|
height: 28rpx;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3'%3E%3C/path%3E%3C/svg%3E");
|
||||||
|
background-size: cover;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-time {
|
||||||
|
font-size: 24rpx;
|
||||||
|
color: #999;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 16rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-text {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #222;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.load-more {
|
||||||
|
text-align: center;
|
||||||
|
padding: 40rpx 0 20rpx;
|
||||||
|
color: #999;
|
||||||
|
font-size: 24rpx;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -75,7 +75,12 @@
|
|||||||
|
|
||||||
<!-- 评分项列表 -->
|
<!-- 评分项列表 -->
|
||||||
<view class="rating-list">
|
<view class="rating-list">
|
||||||
<view class="rating-card" v-for="(item, index) in ratingItems" :key="item.id">
|
<view
|
||||||
|
class="rating-card"
|
||||||
|
v-for="(item, index) in ratingItems"
|
||||||
|
:key="item.id"
|
||||||
|
@tap="goToDetail(item.id)"
|
||||||
|
>
|
||||||
<view class="card-header">
|
<view class="card-header">
|
||||||
<image class="item-avatar" :src="item.avatar" mode="aspectFill" />
|
<image class="item-avatar" :src="item.avatar" mode="aspectFill" />
|
||||||
<text class="item-name">{{ item.name }}</text>
|
<text class="item-name">{{ item.name }}</text>
|
||||||
@@ -92,7 +97,7 @@
|
|||||||
v-for="(action, aIndex) in actions"
|
v-for="(action, aIndex) in actions"
|
||||||
:key="aIndex"
|
:key="aIndex"
|
||||||
:class="{ active: item.userAction === action.value }"
|
:class="{ active: item.userAction === action.value }"
|
||||||
@tap="handleAction(item, action.value)"
|
@tap.stop="handleAction(item, action.value)"
|
||||||
>
|
>
|
||||||
<view class="action-icon-wrap" :class="'icon-' + action.value">
|
<view class="action-icon-wrap" :class="'icon-' + action.value">
|
||||||
<text class="emoji">{{ action.emoji }}</text>
|
<text class="emoji">{{ action.emoji }}</text>
|
||||||
@@ -222,6 +227,12 @@ const handleAction = (item, actionValue) => {
|
|||||||
item.userAction = item.userAction === actionValue ? '' : actionValue;
|
item.userAction = item.userAction === actionValue ? '' : actionValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const goToDetail = (itemId) => {
|
||||||
|
uni.navigateTo({
|
||||||
|
url: `/pages/rating/detail?itemId=${itemId}`
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
// 下拉刷新
|
// 下拉刷新
|
||||||
onPullDownRefresh(() => {
|
onPullDownRefresh(() => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user