@ -0,0 +1,160 @@ | |||||
<template> | |||||
<view class="chapter-container"> | |||||
<view class="header"> | |||||
<view class="nav-bar"> | |||||
<view class="back" @click="goBack"> | |||||
<text class="iconfont icon-back"></text> | |||||
</view> | |||||
<view class="tabs"> | |||||
<view class="tab active">草稿箱</view> | |||||
<view class="tab">已发布</view> | |||||
</view> | |||||
<view class="more"> | |||||
<text class="iconfont"></text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="chapter-list"> | |||||
<view class="chapter-item" v-for="(chapter, index) in chapters" :key="index"> | |||||
<view class="chapter-info"> | |||||
<text class="chapter-title">章节名</text> | |||||
<text class="chapter-number">第{{index + 1}}章</text> | |||||
</view> | |||||
<text class="iconfont icon-arrow"></text> | |||||
</view> | |||||
</view> | |||||
<view class="bottom-actions"> | |||||
<button class="btn-settings">设置作品</button> | |||||
<button class="btn-new" @click="addNewChapter">新建章节</button> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
chapters: Array(8).fill({}) // 模拟8个章节数据 | |||||
} | |||||
}, | |||||
methods: { | |||||
goBack() { | |||||
uni.navigateBack() | |||||
}, | |||||
addNewChapter() { | |||||
// 添加新章节的逻辑 | |||||
uni.showToast({ | |||||
title: '新建章节', | |||||
icon: 'none' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.chapter-container { | |||||
min-height: 100vh; | |||||
background-color: #fff; | |||||
.header { | |||||
background: #fff; | |||||
padding-top: var(--status-bar-height); | |||||
.nav-bar { | |||||
height: 44px; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: space-between; | |||||
padding: 0 15px; | |||||
.back { | |||||
padding: 5px; | |||||
.icon-back { | |||||
font-size: 20px; | |||||
} | |||||
} | |||||
.tabs { | |||||
display: flex; | |||||
.tab { | |||||
padding: 0 15px; | |||||
font-size: 16px; | |||||
color: #666; | |||||
&.active { | |||||
color: #000; | |||||
font-weight: bold; | |||||
} | |||||
} | |||||
} | |||||
.more { | |||||
padding: 5px; | |||||
} | |||||
} | |||||
} | |||||
.chapter-list { | |||||
padding: 0 15px; | |||||
.chapter-item { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 15px 0; | |||||
border-bottom: 1px solid #eee; | |||||
.chapter-info { | |||||
.chapter-title { | |||||
font-size: 14px; | |||||
color: #999; | |||||
margin-bottom: 5px; | |||||
} | |||||
.chapter-number { | |||||
font-size: 16px; | |||||
color: #333; | |||||
} | |||||
} | |||||
.icon-arrow { | |||||
color: #999; | |||||
font-size: 16px; | |||||
} | |||||
} | |||||
} | |||||
.bottom-actions { | |||||
position: fixed; | |||||
bottom: 0; | |||||
left: 0; | |||||
right: 0; | |||||
display: flex; | |||||
padding: 10px 15px; | |||||
background: #fff; | |||||
box-shadow: 0 -2px 6px rgba(0,0,0,0.05); | |||||
button { | |||||
flex: 1; | |||||
height: 40px; | |||||
border-radius: 20px; | |||||
font-size: 16px; | |||||
margin: 0 5px; | |||||
&.btn-settings { | |||||
background: #fff; | |||||
border: 1px solid #ddd; | |||||
color: #333; | |||||
} | |||||
&.btn-new { | |||||
background: #2b4acb; | |||||
color: #fff; | |||||
border: none; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,137 @@ | |||||
<template> | |||||
<view class="announcements-container"> | |||||
<uv-navbar | |||||
title="全部公告" | |||||
:autoBack="true" | |||||
fixed | |||||
placeholder | |||||
titleStyle="color: #333; font-weight: 500;" | |||||
:border="false" | |||||
></uv-navbar> | |||||
<view class="announcements-list"> | |||||
<view | |||||
class="announcement-item" | |||||
v-for="(item, index) in announcements" | |||||
:key="index" | |||||
@click="viewAnnouncement(item)" | |||||
> | |||||
<view class="item-left"> | |||||
<text class="tag">通讯</text> | |||||
<text class="title">{{ item.title }}</text> | |||||
</view> | |||||
<view class="item-right"> | |||||
<uv-icon name="arrow-right" color="#C8C8C8" size="28rpx"></uv-icon> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
components: { | |||||
'uv-navbar': () => import('@/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue') | |||||
}, | |||||
data() { | |||||
return { | |||||
announcements: [ | |||||
{ | |||||
id: 1, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 2, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 3, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 4, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 5, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 6, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
}, | |||||
{ | |||||
id: 7, | |||||
title: '2025年2月平台福利活动拟获奖作品公示', | |||||
type: '通讯' | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
methods: { | |||||
viewAnnouncement(item) { | |||||
uni.navigateTo({ | |||||
url: `/pages_order/novel/announcement?id=${item.id}` | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss"> | |||||
.announcements-container { | |||||
min-height: 100vh; | |||||
background-color: #F8F8F8; | |||||
.announcements-list { | |||||
padding: 20rpx; | |||||
.announcement-item { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
background-color: #FFFFFF; | |||||
padding: 30rpx; | |||||
margin-bottom: 20rpx; | |||||
border-radius: 12rpx; | |||||
.item-left { | |||||
flex: 1; | |||||
margin-right: 20rpx; | |||||
.tag { | |||||
display: inline-block; | |||||
font-size: 24rpx; | |||||
color: #666666; | |||||
background-color: #F5F5F5; | |||||
padding: 4rpx 12rpx; | |||||
border-radius: 6rpx; | |||||
margin-bottom: 16rpx; | |||||
} | |||||
.title { | |||||
display: block; | |||||
font-size: 28rpx; | |||||
color: #333333; | |||||
line-height: 1.4; | |||||
} | |||||
} | |||||
.item-right { | |||||
display: flex; | |||||
align-items: center; | |||||
} | |||||
&:active { | |||||
background-color: #F9F9F9; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,131 @@ | |||||
<template> | |||||
<view class="announcement-container"> | |||||
<uv-navbar | |||||
title="公告详情" | |||||
:autoBack="true" | |||||
fixed | |||||
placeholder | |||||
titleStyle="color: #333; font-weight: 500;" | |||||
:border="false" | |||||
></uv-navbar> | |||||
<view class="header"> | |||||
<text class="title">2025年2月平台福利活动拟获奖作品公示</text> | |||||
<text class="date">岁序更替,华章日新。2025年,平台福利内容建设的实施进展,载誉前行。我们秉持"精品为本,重磅发布"的理念,现面向全体作者,重磅发布2025年度长篇网文作家福利,上线主新潮当中文网作家专属福利:全年奖、半年奖、季度奖、月度奖,总计奖金超过百万元。现将2025年2月,平台各项福利活动拟获奖作品公示如下:</text> | |||||
</view> | |||||
<view class="award-section"> | |||||
<view class="award-item"> | |||||
<text class="award-title">长篇网文</text> | |||||
<view class="award-content"> | |||||
<view class="sub-award"> | |||||
<text class="sub-title">• 优质加更奖:</text> | |||||
<text class="detail">拟获奖作品156本,共发放奖金41.5万元,查看拟获奖名单请点击:</text> | |||||
<text class="link">优质加更奖拟获奖名单</text> | |||||
</view> | |||||
<view class="sub-award"> | |||||
<text class="sub-title">• 新书扶更奖:</text> | |||||
<text class="detail">拟获奖作品5574本,共发放奖金20万元,查看拟获奖名单请点击:</text> | |||||
<text class="link">新书扶更奖拟获奖名单</text> | |||||
</view> | |||||
<view class="sub-award"> | |||||
<text class="sub-title">• 拉新激励奖:</text> | |||||
<text class="detail">拟获奖作品50部,总计奖金65万,查看拟获奖名单请点击:</text> | |||||
<text class="link">2月拉新激励奖</text> | |||||
</view> | |||||
<view class="sub-award"> | |||||
<text class="sub-title">• 星火计划奖励:</text> | |||||
<text class="detail">拟获奖作品4178部,总计奖金55万,查看拟获奖名单请点击:</text> | |||||
<text class="link">2月星火计划奖励名单</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="award-item"> | |||||
<text class="award-title">完结专场</text> | |||||
<view class="award-content"> | |||||
<view class="sub-award"> | |||||
<text class="sub-title">• 脱洞盛宴征文活动:</text> | |||||
<text class="detail">月度脱洞专题:拟获奖作品1260部,总计奖金45万,查看拟获奖名单请点击:</text> | |||||
<text class="link">2月完结专题奖励名单</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
components: { | |||||
'uv-navbar': () => import('@/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue') | |||||
}, | |||||
data() { | |||||
return {} | |||||
}, | |||||
methods: { | |||||
// 可以添加点击链接跳转等方法 | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss"> | |||||
.announcement-container { | |||||
padding: 30rpx; | |||||
background: #fff; | |||||
.header { | |||||
margin-bottom: 40rpx; | |||||
.title { | |||||
font-size: 36rpx; | |||||
font-weight: bold; | |||||
color: #333; | |||||
margin-bottom: 20rpx; | |||||
display: block; | |||||
} | |||||
.date { | |||||
font-size: 28rpx; | |||||
color: #666; | |||||
line-height: 1.6; | |||||
} | |||||
} | |||||
.award-section { | |||||
.award-item { | |||||
margin-bottom: 40rpx; | |||||
.award-title { | |||||
font-size: 32rpx; | |||||
font-weight: bold; | |||||
color: #333; | |||||
margin-bottom: 20rpx; | |||||
display: block; | |||||
} | |||||
.award-content { | |||||
.sub-award { | |||||
margin-bottom: 20rpx; | |||||
.sub-title { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
font-weight: 500; | |||||
} | |||||
.detail { | |||||
font-size: 28rpx; | |||||
color: #666; | |||||
} | |||||
.link { | |||||
color: #007AFF; | |||||
text-decoration: underline; | |||||
font-size: 28rpx; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,190 @@ | |||||
<template> | |||||
<view class="chapter-container"> | |||||
<view class="header"> | |||||
<view class="nav-bar"> | |||||
<view class="back" @click="goBack"> | |||||
<text class="iconfont icon-back"></text> | |||||
</view> | |||||
<view class="tabs"> | |||||
<view class="tab" :class="{ active: activeTab === 'draft' }" @click="switchTab('draft')">草稿箱</view> | |||||
<view class="tab" :class="{ active: activeTab === 'published' }" @click="switchTab('published')">已发布</view> | |||||
</view> | |||||
<view class="more"> | |||||
<text class="iconfont"></text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="chapter-list"> | |||||
<view class="chapter-item" v-for="(chapter, index) in chapters" :key="index" @click="editChapter(chapter)"> | |||||
<view class="chapter-info"> | |||||
<text class="chapter-title">章节名</text> | |||||
<text class="chapter-number">第{{index + 1}}章</text> | |||||
</view> | |||||
<text class="iconfont icon-arrow"></text> | |||||
</view> | |||||
</view> | |||||
<view class="bottom-actions"> | |||||
<button class="btn-settings" @click="handleSettings">设置作品</button> | |||||
<button class="btn-new" @click="addNewChapter">新建章节</button> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
activeTab: 'draft', | |||||
chapters: Array(8).fill({}) // 模拟8个章节数据 | |||||
} | |||||
}, | |||||
methods: { | |||||
goBack() { | |||||
uni.navigateBack() | |||||
}, | |||||
switchTab(tab) { | |||||
this.activeTab = tab | |||||
// 根据tab加载不同的章节列表 | |||||
}, | |||||
addNewChapter() { | |||||
uni.navigateTo({ | |||||
url: '/pages_order/author/editor' | |||||
}) | |||||
}, | |||||
editChapter(chapter) { | |||||
uni.navigateTo({ | |||||
url: '/pages_order/author/editor?id=' + chapter.id | |||||
}) | |||||
}, | |||||
handleSettings() { | |||||
uni.navigateTo({ | |||||
url: '/pages_order/novel/createNovel?type=edit' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.chapter-container { | |||||
min-height: 100vh; | |||||
background-color: #fff; | |||||
padding-bottom: 70px; | |||||
.header { | |||||
background: #fff; | |||||
padding-top: var(--status-bar-height); | |||||
.nav-bar { | |||||
height: 44px; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: space-between; | |||||
padding: 0 15px; | |||||
.back { | |||||
padding: 5px; | |||||
.icon-back { | |||||
font-size: 20px; | |||||
} | |||||
} | |||||
.tabs { | |||||
display: flex; | |||||
.tab { | |||||
padding: 0 15px; | |||||
font-size: 16px; | |||||
color: #666; | |||||
position: relative; | |||||
&.active { | |||||
color: #000; | |||||
font-weight: bold; | |||||
&::after { | |||||
content: ''; | |||||
position: absolute; | |||||
bottom: -4px; | |||||
left: 50%; | |||||
transform: translateX(-50%); | |||||
width: 20px; | |||||
height: 2px; | |||||
background: #2b4acb; | |||||
border-radius: 1px; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.more { | |||||
padding: 5px; | |||||
} | |||||
} | |||||
} | |||||
.chapter-list { | |||||
padding: 0 15px; | |||||
.chapter-item { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
padding: 15px 0; | |||||
border-bottom: 1px solid #eee; | |||||
.chapter-info { | |||||
.chapter-title { | |||||
font-size: 14px; | |||||
color: #999; | |||||
margin-bottom: 5px; | |||||
display: block; | |||||
} | |||||
.chapter-number { | |||||
font-size: 16px; | |||||
color: #333; | |||||
display: block; | |||||
} | |||||
} | |||||
.icon-arrow { | |||||
color: #999; | |||||
font-size: 16px; | |||||
} | |||||
} | |||||
} | |||||
.bottom-actions { | |||||
position: fixed; | |||||
bottom: 0; | |||||
left: 0; | |||||
right: 0; | |||||
display: flex; | |||||
padding: 10px 15px; | |||||
background: #fff; | |||||
box-shadow: 0 -2px 6px rgba(0,0,0,0.05); | |||||
button { | |||||
flex: 1; | |||||
height: 40px; | |||||
border-radius: 20px; | |||||
font-size: 16px; | |||||
margin: 0 5px; | |||||
&.btn-settings { | |||||
background: #fff; | |||||
border: 1px solid #ddd; | |||||
color: #333; | |||||
} | |||||
&.btn-new { | |||||
background: #2b4acb; | |||||
color: #fff; | |||||
border: none; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,344 @@ | |||||
<template> | |||||
<!-- 新建作品页面 --> | |||||
<view class="create-novel"> | |||||
<uv-navbar | |||||
title="新建作品" | |||||
:autoBack="true" | |||||
fixed | |||||
placeholder | |||||
titleStyle="color: #333; font-weight: 500;" | |||||
:border="false" | |||||
></uv-navbar> | |||||
<view class="form-container"> | |||||
<!-- 封面信息 --> | |||||
<view class="section"> | |||||
<view class="section-title">封面信息</view> | |||||
<view class="upload-cover"> | |||||
<view class="sub-title">上传封面</view> | |||||
<view class="cover-box" @click="chooseCover"> | |||||
<image v-if="formData.cover" :src="formData.cover" mode="aspectFill" class="cover-image"></image> | |||||
<view v-else class="upload-placeholder"> | |||||
<text class="plus">+</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 作品信息 --> | |||||
<view class="section"> | |||||
<view class="section-title">作品信息</view> | |||||
<view class="form-item"> | |||||
<text class="required">*</text> | |||||
<text class="label">作品名称</text> | |||||
<input | |||||
type="text" | |||||
v-model="formData.title" | |||||
placeholder="请输入" | |||||
placeholder-class="input-placeholder" | |||||
/> | |||||
</view> | |||||
<view class="form-item"> | |||||
<text class="required">*</text> | |||||
<text class="label">作品类型</text> | |||||
<input | |||||
type="text" | |||||
v-model="formData.type" | |||||
placeholder="请输入" | |||||
placeholder-class="input-placeholder" | |||||
/> | |||||
</view> | |||||
<view class="form-item"> | |||||
<text class="required">*</text> | |||||
<text class="label">作品简介</text> | |||||
<textarea | |||||
v-model="formData.description" | |||||
placeholder="请输入" | |||||
placeholder-class="input-placeholder" | |||||
:maxlength="500" | |||||
></textarea> | |||||
</view> | |||||
<view class="form-item"> | |||||
<text class="required">*</text> | |||||
<text class="label">作品状态</text> | |||||
<view class="status-options"> | |||||
<view | |||||
class="status-item" | |||||
:class="{ active: formData.status === 'serial' }" | |||||
@click="formData.status = 'serial'" | |||||
> | |||||
<view class="radio-dot" :class="{ checked: formData.status === 'serial' }"></view> | |||||
<text>连载</text> | |||||
</view> | |||||
<view | |||||
class="status-item" | |||||
:class="{ active: formData.status === 'completed' }" | |||||
@click="formData.status = 'completed'" | |||||
> | |||||
<view class="radio-dot" :class="{ checked: formData.status === 'completed' }"></view> | |||||
<text>完结</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<!-- 书籍信息 --> | |||||
<view class="section"> | |||||
<view class="section-title">书籍信息</view> | |||||
<view class="form-item"> | |||||
<text class="label">书号</text> | |||||
<text class="value">9999993339393</text> | |||||
</view> | |||||
<view class="form-item"> | |||||
<text class="label">总字数</text> | |||||
<text class="value">99999999</text> | |||||
</view> | |||||
</view> | |||||
<!-- 提交按钮 --> | |||||
<view class="submit-btn" @click="submitForm">提交申请</view> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
components: { | |||||
'uv-navbar': () => import('@/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue') | |||||
}, | |||||
data() { | |||||
return { | |||||
formData: { | |||||
cover: '', | |||||
title: '', | |||||
type: '', | |||||
description: '', | |||||
status: 'serial' // 默认连载 | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
// 选择封面 | |||||
chooseCover() { | |||||
uni.chooseImage({ | |||||
count: 1, | |||||
success: (res) => { | |||||
this.formData.cover = res.tempFilePaths[0] | |||||
} | |||||
}) | |||||
}, | |||||
// 提交表单 | |||||
submitForm() { | |||||
if (!this.formData.title) { | |||||
uni.showToast({ | |||||
title: '请输入作品名称', | |||||
icon: 'none' | |||||
}) | |||||
return | |||||
} | |||||
if (!this.formData.type) { | |||||
uni.showToast({ | |||||
title: '请输入作品类型', | |||||
icon: 'none' | |||||
}) | |||||
return | |||||
} | |||||
if (!this.formData.description) { | |||||
uni.showToast({ | |||||
title: '请输入作品简介', | |||||
icon: 'none' | |||||
}) | |||||
return | |||||
} | |||||
// 构建作品数据 | |||||
const workData = { | |||||
id: Date.now().toString(), | |||||
title: this.formData.title, | |||||
cover: this.formData.cover || 'https://bookcover.yuewen.com/qdbimg/349573/1033014772/150.webp', | |||||
readers: '8721', | |||||
status: 'ongoing', | |||||
publishStatus: '发布审核中', | |||||
isOriginal: true | |||||
} | |||||
// 保存到全局状态 | |||||
getApp().globalData.submittedWork = workData | |||||
// 设置需要显示提交成功提示的标记 | |||||
getApp().globalData.showSubmitSuccess = true | |||||
// 延迟返回上一页 | |||||
setTimeout(() => { | |||||
// 先保存当前要显示的标签 | |||||
uni.setStorageSync('activeBookshelfTab', 'work') | |||||
// 返回上一页 | |||||
uni.navigateBack({ | |||||
delta: 1 | |||||
}) | |||||
}, 500) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss"> | |||||
.create-novel { | |||||
min-height: 100vh; | |||||
background-color: #F8F8F8; | |||||
.form-container { | |||||
padding: 20rpx; | |||||
.section { | |||||
background-color: #FFFFFF; | |||||
border-radius: 12rpx; | |||||
padding: 30rpx; | |||||
margin-bottom: 20rpx; | |||||
.section-title { | |||||
font-size: 32rpx; | |||||
font-weight: bold; | |||||
color: #333; | |||||
margin-bottom: 30rpx; | |||||
} | |||||
.upload-cover { | |||||
.sub-title { | |||||
font-size: 28rpx; | |||||
color: #666; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
.cover-box { | |||||
width: 200rpx; | |||||
height: 266rpx; | |||||
background-color: #F5F5F5; | |||||
border-radius: 8rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
overflow: hidden; | |||||
.cover-image { | |||||
width: 100%; | |||||
height: 100%; | |||||
} | |||||
.upload-placeholder { | |||||
.plus { | |||||
font-size: 60rpx; | |||||
color: #999; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
.form-item { | |||||
margin-bottom: 30rpx; | |||||
position: relative; | |||||
&:last-child { | |||||
margin-bottom: 0; | |||||
} | |||||
.required { | |||||
color: #FF0000; | |||||
margin-right: 4rpx; | |||||
} | |||||
.label { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
margin-bottom: 16rpx; | |||||
display: block; | |||||
} | |||||
input, textarea { | |||||
width: 100%; | |||||
height: 80rpx; | |||||
background-color: #F5F5F5; | |||||
border-radius: 8rpx; | |||||
padding: 20rpx; | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
box-sizing: border-box; | |||||
position: relative; | |||||
z-index: 1; | |||||
} | |||||
textarea { | |||||
height: 200rpx; | |||||
} | |||||
.input-placeholder { | |||||
color: #999; | |||||
} | |||||
.status-options { | |||||
display: flex; | |||||
gap: 40rpx; | |||||
.status-item { | |||||
display: flex; | |||||
align-items: center; | |||||
gap: 10rpx; | |||||
.radio-dot { | |||||
width: 32rpx; | |||||
height: 32rpx; | |||||
border: 2rpx solid #999; | |||||
border-radius: 50%; | |||||
position: relative; | |||||
&.checked { | |||||
border-color: #001351; | |||||
&::after { | |||||
content: ''; | |||||
position: absolute; | |||||
width: 20rpx; | |||||
height: 20rpx; | |||||
background-color: #001351; | |||||
border-radius: 50%; | |||||
left: 50%; | |||||
top: 50%; | |||||
transform: translate(-50%, -50%); | |||||
} | |||||
} | |||||
} | |||||
text { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
} | |||||
} | |||||
} | |||||
.value { | |||||
font-size: 28rpx; | |||||
color: #999; | |||||
} | |||||
} | |||||
} | |||||
.submit-btn { | |||||
background-color: #001351; | |||||
color: #FFFFFF; | |||||
font-size: 32rpx; | |||||
text-align: center; | |||||
padding: 24rpx 0; | |||||
border-radius: 12rpx; | |||||
margin-top: 40rpx; | |||||
&:active { | |||||
opacity: 0.9; | |||||
} | |||||
} | |||||
} | |||||
} | |||||
</style> |
@ -0,0 +1,748 @@ | |||||
<template> | |||||
<!-- 小说详情页面 --> | |||||
<view class="novel-detail"> | |||||
<!-- 顶部返回导航 --> | |||||
<navber></navber> | |||||
<!-- 小说基本信息 --> | |||||
<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="recommendNovel"> | |||||
<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> | |||||
<text>我的等级</text> | |||||
</view> | |||||
<view class="level-info"> | |||||
<image class="user-avatar" src="https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain" mode="aspectFill"></image> | |||||
<view class="user-details"> | |||||
<text class="username">周海</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="https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain" mode="aspectFit"></image> | |||||
<text>读者榜单</text> | |||||
<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"> | |||||
<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"> | |||||
<view class="comment-item"> | |||||
<view class="comment-header"> | |||||
<image class="avatar" src="https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain" mode="aspectFill"></image> | |||||
<text class="username">方香橙</text> | |||||
</view> | |||||
<view class="comment-body"> | |||||
<text class="content-text">我是本书的作者方香橙,这是一本甜文爽文哒!请放心入坑,五星好评!女主又美有个性可爱,绝对不圣母,不傻白!男主身心干净深情独宠媳妇儿一个人...</text> | |||||
<view class="comment-footer"> | |||||
<text class="comment-time">2024.07.09</text> | |||||
<view class="comment-likes"> | |||||
<text class="like-icon">💬</text> | |||||
<text class="like-count">17</text> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
<view class="comment-item"> | |||||
<view class="comment-header"> | |||||
<image class="avatar" src="https://tse4-mm.cn.bing.net/th/id/OIP-C.iUyxJ_fxLjjX3kEBjteXWwAAAA?rs=1&pid=ImgDetMain" mode="aspectFill"></image> | |||||
<text class="username">战斗世界</text> | |||||
</view> | |||||
<view class="comment-body"> | |||||
<text class="content-text">这本小说了创意了雄天霸业奇新颖深刻以白色能量为主...</text> | |||||
</view> | |||||
</view> | |||||
</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="toggleInteractive"> | |||||
<text class="btn-icon">🎯</text> | |||||
<text>互动打赏</text> | |||||
</view> | |||||
</view> | |||||
<view class="bottom-right"> | |||||
<button class="read-now-btn" @click="startReading">立即阅读</button> | |||||
</view> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
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?这是什么新型的套路啊!好了,不要慌了,作为的管理者人员都在忙碌着,都在工作人员中,只要我们努力就自己的事,下个月他又给一套全新的剧情开始,如何将模拟的开关全新的世界,去广阔的世界去探索吧!' | |||||
}, | |||||
userInfo: { | |||||
avatar: '/static/images/avatar.jpg', | |||||
level: '67级达人' | |||||
}, | |||||
isCollected: false, | |||||
chapterCount: 2814, | |||||
comments: [ | |||||
{ | |||||
username: '方寒锋', | |||||
avatar: '/static/images/user1.jpg', | |||||
content: '我是全书中年龄最大的人,这是一本很好的文章!满满心头热,只要对你"安全"文案有兴趣的,都可以不虚,不害怕,不要想太多就去尝试阅读吧!', | |||||
time: '2024-07-09' | |||||
} | |||||
] | |||||
} | |||||
}, | |||||
methods: { | |||||
goBack() { | |||||
uni.navigateBack() | |||||
}, | |||||
startReading() { | |||||
uni.navigateTo({ | |||||
url: '/pages/reader/reader' | |||||
}) | |||||
}, | |||||
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() { | |||||
// TODO: 实现写书评功能 | |||||
}, | |||||
addToBookshelf() { | |||||
// TODO: 实现加入书架功能 | |||||
uni.showToast({ | |||||
title: '已加入书架', | |||||
icon: 'success' | |||||
}) | |||||
}, | |||||
toggleInteractive() { | |||||
// TODO: 实现互动打赏功能 | |||||
uni.showToast({ | |||||
title: '打赏功能开发中', | |||||
icon: 'none' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss" scoped> | |||||
.novel-detail { | |||||
min-height: 100vh; | |||||
background-color: #f5f5f5; | |||||
padding-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; | |||||
} | |||||
.novel-cover 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 { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
font-weight: 500; | |||||
} | |||||
.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; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
margin-bottom: 24rpx; | |||||
border-bottom: 2rpx solid #f5f5f5; | |||||
padding-bottom: 24rpx; | |||||
} | |||||
.header-left { | |||||
display: flex; | |||||
align-items: center; | |||||
gap: 8rpx; | |||||
.title-icon { | |||||
font-size: 32rpx; | |||||
} | |||||
text { | |||||
font-size: 32rpx; | |||||
font-weight: 500; | |||||
color: #333; | |||||
} | |||||
} | |||||
.header-right { | |||||
text { | |||||
font-size: 28rpx; | |||||
color: #666; | |||||
} | |||||
} | |||||
.comment-list { | |||||
display: flex; | |||||
flex-direction: column; | |||||
gap: 32rpx; | |||||
} | |||||
.comment-item { | |||||
display: flex; | |||||
flex-direction: column; | |||||
gap: 16rpx; | |||||
} | |||||
.comment-header { | |||||
display: flex; | |||||
align-items: center; | |||||
gap: 12rpx; | |||||
} | |||||
.avatar { | |||||
width: 64rpx; | |||||
height: 64rpx; | |||||
border-radius: 50%; | |||||
} | |||||
.username { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
font-weight: 500; | |||||
} | |||||
.comment-body { | |||||
padding-left: 76rpx; | |||||
} | |||||
.content-text { | |||||
font-size: 28rpx; | |||||
color: #333; | |||||
line-height: 1.6; | |||||
} | |||||
.comment-footer { | |||||
display: flex; | |||||
justify-content: space-between; | |||||
align-items: center; | |||||
margin-top: 16rpx; | |||||
} | |||||
.comment-time { | |||||
font-size: 24rpx; | |||||
color: #999; | |||||
} | |||||
.comment-likes { | |||||
display: flex; | |||||
align-items: center; | |||||
gap: 4rpx; | |||||
} | |||||
.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; | |||||
padding-bottom: 24rpx; | |||||
} | |||||
.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; | |||||
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> |
@ -0,0 +1,162 @@ | |||||
<template> | |||||
<view class="vote-container"> | |||||
<!-- Empty space at the top --> | |||||
<view class="empty-space"></view> | |||||
<!-- Bottom sheet with voting interface --> | |||||
<view class="vote-sheet"> | |||||
<view class="sheet-header"> | |||||
<text class="sheet-title">投推荐票</text> | |||||
</view> | |||||
<view class="vote-options"> | |||||
<text class="option-label">推荐投票</text> | |||||
<view class="quick-options"> | |||||
<view class="option-btn" @click="setVotes(1)">1</view> | |||||
<view class="option-btn" @click="setVotes(5)">5</view> | |||||
<view class="option-btn" @click="setVotes(10)">10</view> | |||||
</view> | |||||
<text class="option-label">手动设置</text> | |||||
<view class="manual-input"> | |||||
<view class="minus-btn" @click="decreaseVotes">-</view> | |||||
<view class="vote-count"> | |||||
<text>x{{voteCount}}</text> | |||||
</view> | |||||
<view class="plus-btn" @click="increaseVotes">+</view> | |||||
</view> | |||||
</view> | |||||
<button class="submit-btn" @click="submitVote">投票</button> | |||||
</view> | |||||
</view> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
voteCount: 1 | |||||
} | |||||
}, | |||||
methods: { | |||||
setVotes(count) { | |||||
this.voteCount = count | |||||
}, | |||||
increaseVotes() { | |||||
this.voteCount++ | |||||
}, | |||||
decreaseVotes() { | |||||
if (this.voteCount > 1) { | |||||
this.voteCount-- | |||||
} | |||||
}, | |||||
submitVote() { | |||||
// TODO: Implement vote submission | |||||
uni.showToast({ | |||||
title: `已投${this.voteCount}票`, | |||||
icon: 'success' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style lang="scss"> | |||||
.vote-container { | |||||
display: flex; | |||||
flex-direction: column; | |||||
height: 100vh; | |||||
background-color: rgba(0, 0, 0, 0.4); | |||||
} | |||||
.empty-space { | |||||
flex: 1; | |||||
} | |||||
.vote-sheet { | |||||
background-color: #fff; | |||||
border-radius: 20rpx 20rpx 0 0; | |||||
padding: 30rpx; | |||||
} | |||||
.sheet-header { | |||||
text-align: center; | |||||
margin-bottom: 40rpx; | |||||
} | |||||
.sheet-title { | |||||
font-size: 32rpx; | |||||
font-weight: 500; | |||||
} | |||||
.vote-options { | |||||
margin-bottom: 40rpx; | |||||
} | |||||
.option-label { | |||||
font-size: 28rpx; | |||||
color: #666; | |||||
margin-bottom: 20rpx; | |||||
} | |||||
.quick-options { | |||||
display: flex; | |||||
gap: 20rpx; | |||||
margin-top: 30rpx; | |||||
margin-bottom: 40rpx; | |||||
} | |||||
.option-btn { | |||||
flex: 1; | |||||
height: 80rpx; | |||||
background-color: #f5f5f5; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
border-radius: 8rpx; | |||||
font-size: 28rpx; | |||||
} | |||||
.manual-input { | |||||
margin-top: 30rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
gap: 20rpx; | |||||
} | |||||
.minus-btn, .plus-btn { | |||||
width: 220rpx; | |||||
height: 80rpx; | |||||
background-color: #f5f5f5; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
border-radius: 8rpx; | |||||
font-size: 32rpx; | |||||
} | |||||
.vote-count { | |||||
width: 220rpx; | |||||
height: 82rpx; | |||||
background-color: #f5f5f5; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
border-radius: 8rpx; | |||||
font-size: 28rpx; | |||||
} | |||||
.submit-btn { | |||||
width: 100%; | |||||
height: 88rpx; | |||||
background-color: #000033; | |||||
color: #fff; | |||||
border-radius: 8rpx; | |||||
font-size: 32rpx; | |||||
display: flex; | |||||
align-items: center; | |||||
justify-content: center; | |||||
} | |||||
</style> |