小说小程序前端代码仓库(小程序)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

159 lines
3.2 KiB

<template>
<view class="subscription-popup" :class="{'dark-mode': isDarkMode}">
<uv-popup ref="popup" mode="center" :closeOnClickOverlay="true" :customStyle="popupStyle">
<view class="content theme-transition">
<view class="popup-title theme-transition">{{ title }}</view>
<view class="popup-desc theme-transition">{{ description }}</view>
<view class="popup-btns">
<button class="popup-btn theme-transition" @click="handleSubscribe">订阅本章</button>
<button class="popup-btn popup-btn-video theme-transition">观看视频解锁</button>
<button class="popup-btn popup-btn-batch theme-transition">批量订阅</button>
</view>
</view>
</uv-popup>
</view>
</template>
<script>
import themeMixin from '@/mixins/themeMode.js'
export default {
name: 'subscriptionPopup',
mixins: [themeMixin],
props: {
title: {
type: String,
default: '这是付费章节 需要订阅后才能阅读'
},
description: {
type: String,
default: '订阅后可继续阅读本章内容'
}
},
data() {
return {
popupShown: false, // 是否已显示过
}
},
computed: {
popupStyle() {
return {
'background': this.isDarkMode ? '#232323' : '#fff',
'padding': '48rpx 32rpx',
'text-align': 'center',
'border-radius': '24rpx',
'min-width': '500rpx'
}
}
},
methods: {
// 打开弹窗
open() {
if (!this.popupShown) {
this.$refs.popup.open();
this.popupShown = true;
}
},
// 关闭弹窗
close() {
this.$refs.popup.close();
},
// 重置状态,允许再次显示
reset() {
this.popupShown = false;
},
// 处理订阅按钮点击
handleSubscribe() {
this.$emit('subscribe');
this.close();
}
}
}
</script>
<style lang="scss" scoped>
.subscription-popup {
.content {
.popup-title {
font-size: 32rpx;
font-weight: bold;
color: #222;
margin-bottom: 24rpx;
word-wrap: break-word;
white-space: normal;
}
.popup-desc {
font-size: 26rpx;
color: #999;
margin-bottom: 40rpx;
word-wrap: break-word;
white-space: normal;
}
.popup-btns {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 24rpx;
.popup-btn {
background: #ff9800;
color: #fff;
border-radius: 32rpx;
font-size: 28rpx;
padding: 0 32rpx;
border: none;
margin-bottom: 16rpx;
word-break: keep-all;
&.popup-btn-video {
background: #fff3e0;
color: #ff9800;
border: 1px solid #ff9800;
}
&.popup-btn-batch {
background: #fff;
color: #ff9800;
border: 1px solid #ff9800;
}
}
}
}
&.dark-mode {
.content {
.popup-title {
color: $dark-text-color-primary;
}
.popup-desc {
color: $dark-text-color-tertiary;
}
.popup-btns {
.popup-btn {
background: #ff9800;
color: #fff;
&.popup-btn-video {
background: rgba(255, 152, 0, 0.1);
color: #ff9800;
border: 1px solid #ff9800;
}
&.popup-btn-batch {
background: $dark-bg-color-secondary;
color: #ff9800;
border: 1px solid #ff9800;
}
}
}
}
}
}
</style>