- <template>
- <!-- 小说详情页面 -->
- <view class="novel-detail">
- <navbar title="小说详情" leftClick @leftClick="$utils.navigateBack" />
-
- <!-- 小说基本信息 -->
- <view class="novel-info">
- <view class="novel-cover">
- <image :src="novelData.coverUrl" mode="aspectFill"></image>
- </view>
- <view class="novel-basic">
- <text class="title">{{ novelData.title }}</text>
- <view class="author-line">
- <text class="label">作者:</text>
- <text class="author">{{ novelData.author }}</text>
- </view>
- <view class="status-line">
- <text class="label">完结:</text>
- <text class="status">{{ novelData.status }}</text>
- </view>
- <view class="score-line">
- <text class="score">{{ novelData.score || 2814}}</text>
- <text class="score-label">作者累计亲密度值</text>
- </view>
- </view>
- </view>
-
- <!-- 推荐票数显示 -->
- <view class="recommendation-section">
- <view class="rec-left">
- <text class="rec-count">2814</text>
- <text class="rec-label">推荐票数</text>
- </view>
- <view class="rec-divider"></view>
- <view class="rec-right">
- <button class="recommend-btn" @click="$refs.novelVotePopup.open()">
- <text class="btn-icon">📑</text>
- 投推荐票
- </button>
- </view>
- </view>
-
- <!-- 阅读和收藏按钮 -->
-
-
- <!-- 我的等级 -->
- <view class="user-level">
- <view class="level-left">
- <view class="level-title">
- <!-- <text class="title-icon">👑</text> -->
-
- <image style="width: 30rpx;height: 30rpx;" src="/pages_order/static/book/level.png"
- mode="aspectFill"></image>
-
- <text>我的等级</text>
- </view>
- <view class="level-info">
- <image class="user-avatar"
- src="/pages_order/static/book/dj.png"
- mode="aspectFill"></image>
-
- <view class="user-details">
- <text class="username">
- <image
- src="https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain"
- mode="aspectFill"></image>
-
- <view class="name">
- 周海
- </view>
-
- </text>
- <view class="user-score">
- <text class="score-value">6785452</text>
- <text class="score-label">亲密值</text>
- </view>
- <text class="user-role">护书使者 五级</text>
- </view>
- </view>
- </view>
- <view class="level-right">
- <view class="rank-btn">
- <image class="rank-icon" src="/pages_order/static/book/bd.png" mode="aspectFit"></image>
- <text class="check-text">点击查看</text>
- </view>
- </view>
- </view>
-
- <!-- 小说简介 -->
- <view class="novel-intro">
- <view class="intro-title">
- <text>简介:</text>
- </view>
- <view class="intro-content">
- <text>这游戏也太真实了吧!</text>
- <text>搬砖、跑腿、捡垃圾、送快递。......公司最多能让你体会到996的艰辛,在这里你能体会到超级加倍的007。</text>
- <text>好了,不废话了,伟大的管理者大人嘛就去搬砖了。那位大人说了,只要我们努力献上自己的肝,下个月他又能换一套全新的动力甲,到时候候带我们开全新的地图,去广阔的废土捡更多的垃圾!</text>
- <text>穿越到废土世界的基光发现,自己解锁了游戏所系统,能够从平行世界召唤名为"玩家"的生物。</text>
- </view>
- </view>
-
- <!-- 目录 -->
- <view class="novel-catalog" @click="$refs.chapterPopup.open()">
- <view class="catalog-header">
- <view class="catalog-title">
- <text class="title-icon">📖</text>
- <text>目录</text>
- </view>
- <view class="chapter-nav">
- <text class="current-chapter">第九集 - 高去与归来</text>
- <text class="nav-arrow">></text>
- </view>
- </view>
- </view>
-
-
- <!-- 目录弹窗完整内容内联 -->
-
-
-
- <!-- 书评区域 -->
- <view class="comments-section">
- <view class="comments-header">
- <view class="header-left">
- <text class="title-icon">📝</text>
- <text>书评</text>
- </view>
- <view class="header-right">
- <text @click="goToWriteReview">写书评</text>
- </view>
- </view>
- <view class="comment-list">
- <commentItem v-for="(item, index) in 10" :key="index" />
- </view>
- </view>
-
- <!-- 底部操作栏 -->
- <view class="novel-bottom">
- <view class="bottom-left">
- <view class="action-btn" @click="addToBookshelf">
- <text class="btn-icon">📚</text>
- <text>加入书架</text>
- </view>
- <view class="action-btn" @click="goToGiftbox">
- <text class="btn-icon">🎁</text>
- <text>礼物盒</text>
- </view>
- <view class="action-btn" @click="toggleInteractive">
- <text class="btn-icon">🎯</text>
- <text>互动打赏</text>
- </view>
- </view>
- <view class="bottom-right">
- <button class="read-now-btn" @click="startReading">立即阅读</button>
- </view>
- </view>
-
- <novelVotePopup ref="novelVotePopup"/>
-
- <chapterPopup ref="chapterPopup" />
- </view>
- </template>
-
- <script>
- import catalogpopup from '@/components/novel/CatalogPopup.vue'
- import chapterPopup from '../components/novel/chapterPopup.vue'
- import commentItem from '../components/comment/commentItem.vue'
- import novelVotePopup from '../components/novel/novelVotePopup.vue'
- export default {
- components: {
- catalogpopup,
- chapterPopup,
- commentItem,
- novelVotePopup,
- },
- data() {
- return {
- novelData: {
- id: '1',
- title: '这游戏也太真实了',
- author: '大宝鉴在在',
- category: '玄幻',
- wordCount: '2814',
- coverUrl: 'https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain',
- introduction: '这游戏也太真实了!\n模拟,模拟,模拟,这游戏……公空居然把自己做成了游戏的NPC?这是什么新型的套路啊!好了,不要慌了,作为的管理者人员都在忙碌着,都在工作人员中,只要我们努力就自己的事,下个月他又给一套全新的剧情开始,如何将模拟的开关全新的世界,去广阔的世界去探索吧!'
- },
- isCollected: false,
- comments: [{
- username: '方寒锋',
- avatar: '/static/images/user1.jpg',
- content: '我是全书中年龄最大的人,这是一本很好的文章!满满心头热,只要对你"安全"文案有兴趣的,都可以不虚,不害怕,不要想太多就去尝试阅读吧!',
- time: '2024-07-09'
- }],
- currentIndex: 0,
- }
- },
- computed: {
- userInfo() {
- return {
- avatar: '/static/images/avatar.jpg',
- level: '67级达人'
- }
- }
- },
- methods: {
- goBack() {
- uni.navigateBack()
- },
- startReading() {
- uni.navigateTo({
- url: `/pages_order/novel/readnovels?id=${this.novelData.id}`
- })
- },
- toggleCollect() {
- this.isCollected = !this.isCollected
- // TODO: 实现收藏功能
- },
- recommendNovel() {
- if (!this.novelData.id) {
- uni.showToast({
- title: '无效的小说ID',
- icon: 'none'
- })
- return
- }
- uni.navigateTo({
- url: `/pages_order/novel/vote?id=${this.novelData.id}`
- })
- },
- goToWriteReview() {
- // 跳转到写书评页面,传递书名参数
- uni.navigateTo({
- url: `/pages_order/novel/Review?title=${encodeURIComponent(this.novelData.title)}`
- })
- },
- addToBookshelf() {
- // TODO: 实现加入书架功能
- uni.showToast({
- title: '已加入书架',
- icon: 'success'
- })
- },
- toggleInteractive() {
- // 跳转到互动打赏页面
- uni.navigateTo({
- url: `/pages_order/novel/Tipping?id=${this.novelData.id}`
- })
- },
- goToGiftbox() {
- uni.navigateTo({
- url: '/pages_order/novel/Giftbox'
- })
- },
- handleShowCatalog() {
- console.log('点击目录区域');
- this.showCatalog = true;
- },
- selectChapter(idx) {
- this.currentIndex = idx
- this.showCatalog = false
- // TODO: 跳转到对应章节内容
- },
- goToCommentReply() {
- uni.navigateTo({
- url: '/pages_order/novel/comments'
- })
- }
- }
- }
- </script>
-
- <style lang="scss" scoped>
- .novel-detail {
- min-height: 100vh;
- background-color: #f5f5f5;
- padding-bottom: calc(env(safe-area-inset-bottom) + 30rpx);
-
- .nav-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 20rpx 30rpx;
- background-color: transparent;
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- z-index: 100;
- }
-
- .novel-info {
- padding: 20rpx;
- display: flex;
- background: #fff;
-
- .novel-cover {
- width: 200rpx;
- height: 280rpx;
- margin-right: 20rpx;
-
- image {
- width: 100%;
- height: 100%;
- border-radius: 8rpx;
- }
- }
-
- .novel-basic {
- flex: 1;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
-
- .title {
- font-size: 36rpx;
- font-weight: bold;
- margin-bottom: 16rpx;
- }
-
- .author-line,
- .status-line {
- display: flex;
- align-items: center;
- margin-bottom: 12rpx;
- font-size: 28rpx;
- color: #666;
- }
-
- .label {
- color: #999;
- margin-right: 8rpx;
- }
-
- .score-line {
- margin-top: 16rpx;
-
- .score {
- font-size: 32rpx;
- color: #333;
- font-weight: bold;
- }
-
- .score-label {
- font-size: 24rpx;
- color: #999;
- margin-left: 8rpx;
- }
- }
- }
- }
-
- .recommendation-section {
- padding: 24rpx 32rpx;
- background: #fff;
- display: flex;
- justify-content: space-between;
- align-items: center;
- position: relative;
-
- .rec-left {
- display: flex;
- flex-direction: column;
- align-items: flex-start;
- margin-left: 70rpx;
-
- .rec-count {
- font-size: 44rpx;
- font-weight: 500;
- color: #333;
- line-height: 1.2;
- }
-
- .rec-label {
- font-size: 26rpx;
- color: #999;
- margin-top: 4rpx;
- }
- }
-
- .rec-divider {
- position: absolute;
- right: 160rpx;
- top: 20rpx;
- bottom: 20rpx;
- width: 2rpx;
- background: #eee;
- }
-
- .rec-right {
- flex-shrink: 0;
-
- .recommend-btn {
- background: #fff;
- color: #4a90e2;
- border: 2rpx solid #4a90e2;
- border-radius: 40rpx;
- padding: 12rpx 32rpx;
- font-size: 28rpx;
- display: flex;
- align-items: center;
- line-height: 1;
- height: 64rpx;
-
- .btn-icon {
- margin-right: 8rpx;
- font-size: 32rpx;
- }
- }
- }
- }
-
- .action-buttons {
- display: flex;
- padding: 30rpx;
- gap: 20rpx;
-
- button {
- flex: 1;
- height: 80rpx;
- border-radius: 40rpx;
- font-size: 32rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
-
- .read-btn {
- background-color: #4a90e2;
- color: #fff;
- }
-
- .collect-btn {
- background-color: #f0f0f0;
- color: #666;
- }
- }
-
- .user-level {
- margin: 20rpx 30rpx;
- background-color: #fff;
- border-radius: 12rpx;
- padding: 24rpx 32rpx;
- display: flex;
- justify-content: space-between;
- align-items: stretch;
-
- .level-left {
- flex: 1;
-
- .level-title {
- display: flex;
- align-items: center;
- gap: 8rpx;
- margin-bottom: 20rpx;
- margin-left: 20rpx;
-
- .title-icon {
- font-size: 36rpx;
- color: #FFB800;
- }
-
- text {
- font-size: 32rpx;
- font-weight: 500;
- color: #333;
- }
- }
-
- .level-info {
- display: flex;
- align-items: flex-start;
- gap: 20rpx;
-
- .user-avatar {
- width: 80rpx;
- height: 80rpx;
- border-radius: 50%;
- border: 2rpx solid #f0f0f0;
- }
-
- .user-details {
- display: flex;
- flex-direction: column;
- gap: 8rpx;
-
- .username {
- display: flex;
- font-size: 28rpx;
- color: #333;
- font-weight: 500;
-
- image {
- width: 60rpx;
- height: 60rpx;
- }
- }
-
- .user-score {
- display: flex;
- align-items: center;
- gap: 8rpx;
-
- .score-value {
- font-size: 28rpx;
- color: #333;
- }
-
- .score-label {
- font-size: 24rpx;
- color: #999;
- }
- }
-
- .user-role {
- font-size: 24rpx;
- color: #666;
- background: #f5f5f5;
- padding: 4rpx 12rpx;
- border-radius: 4rpx;
- display: inline-block;
- }
- }
- }
- }
-
- .level-right {
- display: flex;
- align-items: center;
-
- .rank-btn {
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- padding: 0 20rpx;
-
- .rank-icon {
- width: 200rpx;
- height: 60rpx;
- margin-bottom: 8rpx;
- }
-
- text {
- font-size: 26rpx;
- color: #333;
- line-height: 1.4;
- }
-
- .check-text {
- font-size: 22rpx;
- color: #999;
- }
- }
- }
- }
-
- .novel-intro {
- margin: 20rpx 30rpx;
- background-color: #fff;
- border-radius: 12rpx;
- padding: 24rpx;
-
- .intro-title {
- font-size: 32rpx;
- font-weight: 500;
- color: #333;
- margin-bottom: 16rpx;
- }
-
- .intro-content {
- font-size: 28rpx;
- color: #666;
- line-height: 1.6;
- display: flex;
- flex-direction: column;
- gap: 16rpx;
-
- text {
- display: block;
- }
- }
- }
-
- .comments-section {
- margin: 20rpx 30rpx;
- background-color: #fff;
- border-radius: 12rpx;
- padding: 24rpx;
-
- .comments-header {
- display: flex;
- align-items: center;
- margin-bottom: 24rpx;
- border-bottom: 2rpx solid #f5f5f5;
- padding-bottom: 24rpx;
- justify-content: flex-start;
-
- .header-left {
- display: flex;
- align-items: center;
- gap: 8rpx;
-
- .title-icon {
- font-size: 32rpx;
- }
-
- text {
- display: flex;
- align-items: center;
- font-size: 32rpx;
- font-weight: 500;
- color: #333;
- white-space: nowrap;
- }
- }
-
- .header-right {
- margin-left: auto;
- }
- }
-
- .comment-list {
- display: flex;
- flex-direction: column;
- gap: 32rpx;
- }
-
- .like-icon {
- font-size: 24rpx;
- color: #999;
- }
-
- .like-count {
- font-size: 24rpx;
- color: #999;
- }
- }
-
- .novel-catalog {
- margin: 20rpx 30rpx;
- background-color: #fff;
- border-radius: 12rpx;
- padding: 24rpx;
-
- .catalog-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 2rpx solid #f5f5f5;
-
- .catalog-title {
- display: flex;
- align-items: center;
- gap: 8rpx;
-
- .title-icon {
- font-size: 32rpx;
- }
-
- text {
- font-size: 32rpx;
- font-weight: 500;
- color: #333;
- }
- }
-
- .chapter-nav {
- display: flex;
- align-items: center;
- gap: 8rpx;
-
- .current-chapter {
- font-size: 28rpx;
- color: #666;
- }
-
- .nav-arrow {
- font-size: 28rpx;
- color: #999;
- }
- }
- }
- }
-
- .novel-bottom {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- height: 100rpx;
- background: #fff;
- display: flex;
- align-items: center;
- padding: 0 30rpx;
- padding-bottom: env(safe-area-inset-bottom);
- box-shadow: 0 -2rpx 10rpx rgba(0, 0, 0, 0.05);
-
- .bottom-left {
- flex: 1;
- display: flex;
- gap: 40rpx;
-
- .action-btn {
- display: flex;
- flex-direction: column;
- align-items: center;
- gap: 4rpx;
-
- .btn-icon {
- font-size: 40rpx;
- line-height: 1;
- }
-
- text {
- font-size: 24rpx;
- color: #666;
- }
- }
- }
-
- .bottom-right {
- flex-shrink: 0;
-
- .read-now-btn {
- background: #1a237e;
- color: #fff;
- font-size: 32rpx;
- height: 80rpx;
- line-height: 80rpx;
- padding: 0 60rpx;
- border-radius: 40rpx;
- border: none;
- }
- }
- }
- }
- </style>
|