diff --git a/app.js b/app.js
index 6b14f0f..c40f249 100644
--- a/app.js
+++ b/app.js
@@ -161,6 +161,14 @@ App({
success: (resp) => {
if (resp.data.code === 2000000) {
resolve(resp.data.data.url);
+ } else if (resp.data.code === 5000014) {
+ // 次数用完,显示广告弹窗
+ const pages = getCurrentPages();
+ const currentPage = pages[pages.length - 1];
+ if (currentPage && currentPage.showLimitDialog) {
+ currentPage.showLimitDialog();
+ }
+ reject(new Error(resp.data.msg || '次数已用完'));
} else {
wx.showToast({
title: resp.data.msg || '生成失败',
diff --git a/pages/index/index.js b/pages/index/index.js
index 2b34fd8..aa50d1a 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -5,6 +5,7 @@ const typeList = app.globalData.getTypeList();
const selectedIndex = typeList.length > 1 ? app.globalData.getSelectedTypeIndex() : 0;
let audio = null;
+let videoAd = null;
Page({
data: {
@@ -15,6 +16,118 @@ Page({
},
onLoad(){
wx.showShareMenu();
+ this.initVideoAd();
+ },
+
+ // 初始化激励视频广告
+ initVideoAd() {
+ // 若在开发者工具中无法预览广告,请切换开发者工具中的基础库版本
+ if (wx.createRewardedVideoAd) {
+ videoAd = wx.createRewardedVideoAd({
+ adUnitId: 'adunit-aedf0933f69de926'
+ });
+
+ videoAd.onLoad(() => {
+ console.log('激励视频广告加载成功');
+ });
+
+ videoAd.onError((err) => {
+ console.error('激励视频广告加载失败', err);
+ });
+
+ videoAd.onClose((res) => {
+ if (res && res.isEnded) {
+ // 用户看完广告,重置使用次数
+ this.resetTtsCount();
+ } else {
+ // 用户中途退出
+ wx.showToast({
+ title: '请看完广告获取次数',
+ icon: 'none'
+ });
+ }
+ });
+ }
+ },
+
+ // 显示激励视频广告
+ showVideoAd() {
+ if (videoAd) {
+ videoAd.show().catch(() => {
+ // 失败重试
+ videoAd.load()
+ .then(() => videoAd.show())
+ .catch(err => {
+ console.error('激励视频广告显示失败', err);
+ wx.showToast({
+ title: '广告加载失败,请稍后重试',
+ icon: 'none'
+ });
+ });
+ });
+ } else {
+ wx.showToast({
+ title: '广告功能暂不可用',
+ icon: 'none'
+ });
+ }
+ },
+
+ // 重置TTS使用次数
+ async resetTtsCount() {
+ wx.showLoading({
+ title: '正在重置次数...',
+ mask: true
+ });
+
+ try {
+ const result = await new Promise((resolve, reject) => {
+ app.request({
+ url: `${app.globalData.domain}/open-api/wx330e54aa6000516d/tts-count-reset`,
+ success(res) {
+ resolve(res.data);
+ },
+ fail(err) {
+ reject(err);
+ }
+ });
+ });
+
+ wx.hideLoading();
+
+ if (result.code === 2000000) {
+ wx.showToast({
+ title: '获得10次使用机会!',
+ icon: 'success'
+ });
+ } else {
+ wx.showToast({
+ title: result.msg || '重置失败',
+ icon: 'none'
+ });
+ }
+ } catch (error) {
+ wx.hideLoading();
+ wx.showToast({
+ title: '网络错误',
+ icon: 'none'
+ });
+ }
+ },
+
+ // 显示次数用完弹窗
+ showLimitDialog() {
+ wx.showModal({
+ title: '使用次数已用完',
+ content: '今日免费次数已用完,观看广告可获得额外10次使用机会',
+ confirmText: '观看广告',
+ cancelText: '明日再试',
+ success: (res) => {
+ if (res.confirm) {
+ this.showVideoAd();
+ }
+ }
+ });
},
inputText(e){
this.data.text = e.detail.value;
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
index e53d050..f005480 100644
--- a/pages/index/index.wxml
+++ b/pages/index/index.wxml
@@ -28,5 +28,5 @@
> {{item.desc}}
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
index b5772f6..8147d8d 100644
--- a/pages/index/index.wxss
+++ b/pages/index/index.wxss
@@ -1,47 +1,223 @@
/**index.wxss**/
+/* 防止横向滚动 */
+page {
+ width: 100%;
+ overflow-x: hidden;
+ box-sizing: border-box;
+}
+
+/* 全局移除按钮边框 */
+button {
+ border: none !important;
+ outline: none !important;
+}
+
+button::after {
+ border: none !important;
+}
+
+button::before {
+ border: none !important;
+}
+
+.container {
+ width: 100%;
+ max-width: 100vw;
+ overflow-x: hidden;
+ box-sizing: border-box;
+ padding: 20rpx;
+}
+
.text-view{
width: 100%;
margin-bottom: 20rpx;
text-align: center;
+ box-sizing: border-box;
}
.text-area{
- width: 95%;
- padding: 5rpx 10rpx;
+ width: 100%;
+ max-width: 100%;
+ padding: 20rpx;
text-align: left;
box-sizing: border-box;
- display: inline-block;
- border: 1px dashed #afafaf;
+ display: block;
+ border: none;
+ border-radius: 16rpx;
+ background-color: #fafafa;
+ font-size: 32rpx;
+ line-height: 1.5;
+ transition: all 0.3s ease;
+ box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
+}
+.text-area:focus {
+ background-color: #ffffff;
+ box-shadow: 0 4rpx 20rpx rgba(0, 122, 255, 0.15);
}
.button-view{
width: 100%;
margin-bottom: 40rpx;
text-align: center;
+ box-sizing: border-box;
}
+
+/* 主要按钮样式 */
.button-view button{
- width: 95%;
- display: inline-block;
- vertical-align: top;
+ width: 100%;
+ max-width: 100%;
+ display: block;
margin-bottom: 20rpx;
- height: 92rpx;
- line-height: 92rpx;
- font-size: 36rpx;
+ height: 88rpx;
+ line-height: 88rpx;
+ font-size: 32rpx;
text-align: center;
+ border-radius: 44rpx;
+ border: none !important;
+ font-weight: 600;
+ letter-spacing: 2rpx;
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: hidden;
+ box-sizing: border-box;
+}
+
+.button-view button::after {
+ border: none !important;
+}
+
+.button-view button::before {
+ border: none !important;
+}
+
+/* 播放按钮 - 主要操作 */
+.button-view button[bindtap="play"] {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.4), inset 0 2rpx 0 rgba(255, 255, 255, 0.2);
+}
+
+.button-view button[bindtap="play"]:active {
+ transform: translateY(2rpx);
+ box-shadow: 0 4rpx 12rpx rgba(102, 126, 234, 0.4);
+}
+
+/* 下载按钮 - 次要操作 */
+.goto-audio-list {
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
+ color: white;
+ box-shadow: 0 8rpx 24rpx rgba(240, 147, 251, 0.4), inset 0 2rpx 0 rgba(255, 255, 255, 0.2);
+}
+
+.goto-audio-list:active {
+ transform: translateY(2rpx);
+ box-shadow: 0 4rpx 12rpx rgba(240, 147, 251, 0.4);
}
+/* 清空按钮 - 辅助操作 */
+.button-view button[bindtap="clear"] {
+ background: linear-gradient(135deg, #ffecd2 0%, #fcb69f 100%);
+ color: #8b4513;
+ box-shadow: 0 8rpx 24rpx rgba(252, 182, 159, 0.4), inset 0 2rpx 0 rgba(255, 255, 255, 0.3);
+}
+
+.button-view button[bindtap="clear"]:active {
+ transform: translateY(2rpx);
+ box-shadow: 0 4rpx 12rpx rgba(252, 182, 159, 0.4);
+}
+
+/* 语音类型选择区域 */
.type-view{
- width: 95%;
- margin-bottom: 40rpx;
- display: flex;
- justify-content: space-between;
+ width: 100%;
+ max-width: 100%;
+ margin: 0 0 40rpx 0;
+ padding: 20rpx;
+ background: linear-gradient(135deg, rgba(255, 255, 255, 0.95) 0%, rgba(248, 250, 252, 0.95) 100%);
+ border-radius: 20rpx;
+ box-shadow: 0 6rpx 24rpx rgba(0, 0, 0, 0.08);
+ backdrop-filter: blur(10rpx);
+ box-sizing: border-box;
}
+
.type-view button{
- padding: 20rpx 10rpx;
- writing-mode: vertical-lr;
+ width: 100%;
+ max-width: 100%;
+ height: 60rpx;
+ margin-bottom: 16rpx;
+ padding: 0 20rpx;
+ writing-mode: horizontal-tb;
text-align: center;
- letter-spacing: 15rpx;
+ letter-spacing: 1rpx;
+ font-size: 28rpx;
+ font-weight: 500;
+ border-radius: 30rpx;
+ border: none !important;
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: hidden;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ white-space: nowrap;
+ box-sizing: border-box;
+}
+
+.type-view button::after {
+ border: none !important;
+}
+
+.type-view button::before {
+ border: none !important;
}
+
+.type-view button:last-child {
+ margin-bottom: 0;
+}
+
+/* 未选中的语音类型按钮 */
+.type-view button[type="default"] {
+ background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
+ color: #495057;
+ box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1), inset 0 1rpx 0 rgba(255, 255, 255, 0.8);
+}
+
+.type-view button[type="default"]:active {
+ background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
+ transform: translateY(2rpx);
+ box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.15), inset 0 1rpx 0 rgba(255, 255, 255, 0.6);
+}
+
+/* 选中的语音类型按钮 */
+.type-view button[type="primary"] {
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
+ color: white;
+ box-shadow: 0 6rpx 20rpx rgba(102, 126, 234, 0.4), inset 0 1rpx 0 rgba(255, 255, 255, 0.2);
+ transform: scale(1.02);
+}
+
+.type-view button[type="primary"]:active {
+ transform: scale(1.02) translateY(2rpx);
+ box-shadow: 0 4rpx 16rpx rgba(102, 126, 234, 0.5), inset 0 1rpx 0 rgba(255, 255, 255, 0.1);
+}
+
+/* 按钮悬浮效果动画 */
+.button-view button::before,
+.type-view button::before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: -100%;
+ width: 100%;
+ height: 100%;
+ background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);
+ transition: left 0.5s;
+}
+
+.button-view button:active::before,
+.type-view button:active::before {
+ left: 100%;
+}
+
.ad-1{
margin-bottom: 20rpx;
}
\ No newline at end of file
diff --git a/pages/result/result.wxml b/pages/result/result.wxml
index eda37c6..c8dd4d2 100644
--- a/pages/result/result.wxml
+++ b/pages/result/result.wxml
@@ -1,6 +1,6 @@
-
+