添加AI标识,方便微信审核通过

This commit is contained in:
hushengfeng 2026-03-06 18:05:51 +08:00
parent 613bc9d923
commit 24ba8ae3a3
45 changed files with 378 additions and 89 deletions

View File

@ -23,6 +23,10 @@
<swiper-item v-for="(item, idx) in banners" :key="idx">
<view class="banner-item" @click="handleBannerClick(item)">
<image class="banner-image" :src="resolveUrl(item.url)" mode="aspectFill" />
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
</swiper-item>
</swiper>
@ -54,6 +58,7 @@
<text class="btn-icon">📹</text>
<text class="btn-text">开始视频通话</text>
</button>
<text class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
</view>
<!-- 行动号召 -->
@ -304,6 +309,20 @@ export default {
display: block;
}
/* AI生成提示标签 */
::v-deep .ai-tag {
position: absolute;
top: 16upx;
left: 16upx;
padding: 6upx 16upx;
background: rgba(255, 165, 0, 0.85);
color: white;
font-size: 22upx;
border-radius: 20upx;
font-weight: 500;
z-index: 10;
}
/* 功能网格 */
.feature-grid {
display: grid;
@ -387,11 +406,20 @@ export default {
padding: 0 20upx;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22upx;
color: rgba(100, 100, 100, 0.7);
margin-top: 16upx;
letter-spacing: 0.5upx;
}
.video-call-btn {
width: 100%;
padding: 36upx;
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
color: white;
color: #ffffff !important;
border: none;
border-radius: 40upx;
font-size: 32upx;

View File

@ -55,6 +55,7 @@
<text v-if="selectedVideoId">📞 开始视频通话</text>
<text v-else>请先选择视频</text>
</button>
<text v-if="videos.length > 0" class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
</view>
</view>
@ -74,7 +75,12 @@
:show-center-play-btn="false"
object-fit="contain"
></video>
<view v-else class="video-placeholder">
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
<view v-if="!selectedVideoUrl" class="video-placeholder">
<text class="placeholder-icon">🎬</text>
<text class="placeholder-text">视频加载中...</text>
</view>
@ -1047,7 +1053,7 @@ export default {
width: 100%;
padding: 32upx;
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
color: white;
color: #ffffff !important;
border: none;
border-radius: 28upx;
font-size: 30upx;
@ -1068,7 +1074,16 @@ export default {
box-shadow: 0 2upx 8upx rgba(0, 0, 0, 0.08);
opacity: 0.65;
transform: none !important;
color: #999;
color: #ffffff !important;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22upx;
color: rgba(100, 100, 100, 0.6);
margin-top: 16upx;
letter-spacing: 0.5upx;
}
/* 通话中阶段 */
@ -1120,6 +1135,24 @@ export default {
background: linear-gradient(135deg, #2c3e50 0%, #34495e 100%);
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 20rpx;
right: 20rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
.placeholder-icon {
font-size: 100rpx;
margin-bottom: 20rpx;

View File

@ -36,6 +36,10 @@
<text class="placeholder-icon">🎬</text>
</view>
<view class="work-type">{{ work.workTypeLabel }}</view>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
<view class="work-info">
<text class="work-title">{{ work.title }}</text>
@ -495,6 +499,19 @@ export default {
font-size: 20upx;
border-radius: 20upx;
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 12upx;
left: 12upx;
padding: 6upx 16upx;
background: rgba(255, 165, 0, 0.85);
color: white;
font-size: 20upx;
border-radius: 20upx;
font-weight: 500;
}
}
.work-info {

View File

@ -43,6 +43,10 @@
<view v-if="video.isCached" class="cache-badge">
<text class="cache-text">已缓存</text>
</view>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
<!-- 信息 -->
@ -964,6 +968,25 @@ export default {
font-weight: 500;
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 12upx;
left: 12upx;
padding: 6upx 16upx;
background: rgba(255, 165, 0, 0.85);
color: white;
font-size: 20upx;
border-radius: 20upx;
font-weight: 500;
z-index: 10;
}
.ai-tag-text {
font-size: 20upx;
font-weight: 500;
}
.video-info {
padding: 20upx 16upx 16upx;
background: linear-gradient(180deg, #FFFFFF 0%, #FDFBF9 100%);

View File

@ -162,6 +162,7 @@
<text v-if="loading">{{ loadingText }}</text>
<text v-else>🎬 开始生成视频</text>
</button>
<text class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
<!-- 进度显示 -->
<view v-if="progress.length > 0" class="progress-section">
@ -174,33 +175,40 @@
</view>
</view>
<!-- 结果展示 -->
<!-- 结果展示 -->
<view v-if="videoUrl" class="result-section">
<view class="result-title">🎉 生成成功</view>
<!-- 视频播放器静音 -->
<video
id="resultVideo"
:src="videoUrl"
class="result-video"
:show-center-play-btn="false"
:controls="false"
:muted="true"
:autoplay="false"
:loop="false"
:enable-play-gesture="true"
:object-fit="'contain'"
:show-loading="true"
:enable-progress-gesture="false"
:poster="photoPreview"
@play="onVideoPlay"
@pause="onVideoPause"
@ended="onVideoEnded"
@error="onVideoError"
@loadedmetadata="onVideoLoaded"
@waiting="onVideoWaiting"
@timeupdate="onVideoTimeUpdate"
></video>
<view class="video-container">
<video
id="resultVideo"
:src="videoUrl"
class="result-video"
:show-center-play-btn="false"
:controls="false"
:muted="true"
:autoplay="false"
:loop="false"
:enable-play-gesture="true"
:object-fit="'contain'"
:show-loading="true"
:enable-progress-gesture="false"
:poster="photoPreview"
@play="onVideoPlay"
@pause="onVideoPause"
@ended="onVideoEnded"
@error="onVideoError"
@loadedmetadata="onVideoLoaded"
@waiting="onVideoWaiting"
@timeupdate="onVideoTimeUpdate"
></video>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
<!-- 音频播放器隐藏 -->
<audio
@ -2102,7 +2110,7 @@ export default {
max-width: 580upx;
padding: 28upx;
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
color: white;
color: #ffffff !important;
border: none;
border-radius: 20upx;
font-size: 30upx;
@ -2122,6 +2130,16 @@ export default {
opacity: 0.5;
box-shadow: 0 8upx 20upx rgba(0, 0, 0, 0.1);
transform: none !important;
color: #ffffff !important;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22upx;
color: rgba(100, 100, 100, 0.6);
margin-top: 16upx;
letter-spacing: 0.5upx;
}
.progress-section {
@ -2181,14 +2199,45 @@ export default {
margin-bottom: 24rpx;
}
.result-video {
.result-section {
position: relative;
}
.video-container {
position: relative;
width: 100%;
height: 400rpx;
border-radius: 16rpx;
overflow: hidden;
margin-bottom: 16rpx;
background: #000;
}
.result-video {
width: 100%;
height: 100%;
border-radius: 16rpx;
background: #000;
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 16rpx;
right: 16rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
.play-controls {
display: flex;
justify-content: center;

View File

@ -154,9 +154,10 @@
</view>
</view>
<button class="primary-btn" :disabled="ttsLoading || !ttsText.trim() || !selectedVoiceId" @click="handleSynthesize">
{{ ttsLoading ? '⏳ 合成中...' : '🔊 开始合成' }}
</button>
<button class="primary-btn" :disabled="ttsLoading || !ttsText.trim() || !selectedVoiceId" @click="handleSynthesize">
{{ ttsLoading ? '⏳ 合成中...' : '🔊 开始合成' }}
</button>
<text class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
<view v-if="audioUrl" class="audio-result">
<view class="result-title"> 合成成功</view>
@ -2252,7 +2253,7 @@ export default {
max-width: 100%;
padding: 26upx;
background: linear-gradient(135deg, #6D8B8B 0%, #8B7355 100%);
color: white;
color: #ffffff !important;
border: none;
border-radius: 24upx;
font-size: 30upx;
@ -2276,6 +2277,16 @@ export default {
opacity: 0.5;
transform: none !important;
box-shadow: 0 4upx 12upx rgba(139, 115, 85, 0.15) !important;
color: #ffffff !important;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22upx;
color: rgba(100, 100, 100, 0.6);
margin-top: 16upx;
letter-spacing: 0.5upx;
}
.small-btn {

View File

@ -75,17 +75,18 @@
</view>
</view>
<!-- 提交按钮 -->
<view class="submit-section">
<button
class="submit-btn"
:disabled="!canSubmit || uploading"
@click="handleSubmit"
>
<text v-if="uploading">上传中...</text>
<text v-else>创建音色</text>
</button>
</view>
<!-- 提交按钮 -->
<view class="submit-section">
<button
class="submit-btn"
:disabled="!canSubmit || uploading"
@click="handleSubmit"
>
<text v-if="uploading">上传中...</text>
<text v-else>创建音色</text>
</button>
<text class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
</view>
<!-- 说明 -->
<view class="tips-section">
@ -866,12 +867,21 @@ export default {
margin-bottom: 30upx;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22upx;
color: rgba(100, 100, 100, 0.6);
margin-top: 16upx;
letter-spacing: 0.5upx;
}
.submit-btn {
width: 100%;
height: 90upx;
background: linear-gradient(135deg, #8B7355 0%, #6D8B8B 100%);
border-radius: 45upx;
color: white;
color: #ffffff !important;
font-size: 32upx;
font-weight: 600;
border: none;
@ -880,6 +890,7 @@ export default {
&[disabled] {
opacity: 0.5;
box-shadow: none;
color: #ffffff !important;
}
}

View File

@ -156,6 +156,11 @@
<text class="placeholder-icon">📹</text>
<text class="placeholder-text">视频加载中...</text>
</view>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
<!-- 顶部状态栏 -->
@ -3762,6 +3767,24 @@ export default {
}
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 100rpx;
right: 24rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
/* 点跳动动画 */
@keyframes dotBounce {
0%, 80%, 100% {

View File

@ -34,6 +34,11 @@
@timeupdate="onVideoTimeUpdate"
></video>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
<!-- 视频加载提示 -->
<view v-if="isVideoLoading" class="video-loading">
<text>📹 视频加载中...</text>
@ -843,6 +848,24 @@ export default {
z-index: 1;
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 100rpx;
right: 24rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
.video-player {
width: 100%;
height: 100%;

View File

@ -67,6 +67,7 @@
<text v-if="generating"> 生成中...</text>
<text v-else>🎬 生成视频</text>
</button>
<text class="ai-disclaimer">本服务为AI生成内容结果仅供参考</text>
</view>
<!-- 进度提示 -->
@ -80,12 +81,19 @@
<!-- 生成结果 -->
<view v-if="generatedVideo" class="result-section">
<view class="section-title"> 生成成功</view>
<video
:src="generatedVideo"
class="result-video"
controls
autoplay
></video>
<view class="video-container">
<video
:src="generatedVideo"
class="result-video"
controls
autoplay
></video>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
<view class="result-actions">
<button class="action-btn" @click="saveToAlbum">💾 保存到相册</button>
<button class="action-btn secondary" @click="reset">🔄 重新生成</button>
@ -481,7 +489,7 @@ export default {
width: 100%;
padding: 30rpx;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
color: #ffffff !important;
border: none;
border-radius: 15rpx;
font-size: 32rpx;
@ -490,6 +498,16 @@ export default {
.generate-btn[disabled] {
opacity: 0.6;
color: #ffffff !important;
}
.ai-disclaimer {
display: block;
text-align: center;
font-size: 22rpx;
color: rgba(100, 100, 100, 0.6);
margin-top: 16rpx;
letter-spacing: 0.5rpx;
}
.progress-section {
@ -526,13 +544,43 @@ export default {
margin: 0 20rpx 20rpx;
}
.result-video {
.result-section {
position: relative;
}
.video-container {
position: relative;
width: 100%;
height: 500rpx;
border-radius: 15rpx;
overflow: hidden;
margin: 20rpx 0;
}
.result-video {
width: 100%;
height: 100%;
border-radius: 15rpx;
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 16rpx;
right: 16rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
.result-actions {
display: flex;
gap: 20rpx;

View File

@ -62,6 +62,11 @@
<view v-if="localVideoPath && !showLoadingOverlay" class="play-overlay" @click="handleTogglePlay">
<view v-if="shouldShowPlayButton" class="play-button"></view>
</view>
<!-- AI生成提示标签 -->
<view class="ai-tag">
<text class="ai-tag-text">AI生成</text>
</view>
</view>
</template>
@ -1700,4 +1705,22 @@ export default {
transform: scale(0.95);
background: rgba(255, 255, 255, 0.15);
}
/* AI生成提示标签 */
.ai-tag {
position: absolute;
top: 140rpx;
right: 24rpx;
z-index: 100;
background: rgba(0, 0, 0, 0.6);
padding: 8rpx 20rpx;
border-radius: 30rpx;
backdrop-filter: blur(10rpx);
}
.ai-tag-text {
font-size: 22rpx;
color: #fff;
font-weight: 500;
}
</style>

View File

@ -1 +1 @@
"use strict";const e=require("../../common/vendor.js"),a=require("../../config/api.js"),o={components:{VideoSelectModal:()=>"../../components/VideoSelectModal.js"},data:()=>({apiBase:a.API_BASE,title:"时光意境 · AI亲人重逢",showVideoSelect:!1,banners:[]}),onLoad(){this.loadHomeBanners()},methods:{resolveUrl(e){return e?e.startsWith("http://")||e.startsWith("https://")?e:`${this.apiBase}${e}`:""},async loadHomeBanners(){try{const e=await a.request({url:"/api/system/home-banners",method:"GET"}),o=e&&e.success?e.data:[];Array.isArray(o)?this.banners=o.filter((e=>e&&e.url&&!1!==e.enabled)).sort(((e,a)=>(Number(e.sort)||0)-(Number(a.sort)||0))):this.banners=[]}catch(e){this.banners=[]}},handleBannerClick(a){if(a&&a.link){if(String(a.link).startsWith("/pages/"))return void e.index.navigateTo({url:a.link});e.index.setClipboardData({data:String(a.link)}),e.index.showToast({title:"已复制链接",icon:"none"})}},checkLogin(){const a=e.index.getStorageSync("token"),o=e.index.getStorageSync("userId");return!(!a||!o)},goVoiceClone(){e.index.switchTab({url:"/pages/revival/revival",fail:()=>{e.index.navigateTo({url:"/pages/revival/revival"})}})},goPhotoRevival(){e.index.navigateTo({url:"/pages/revival/revival-original"})},goPlaza(){e.index.navigateTo({url:"/pages/plaza/plaza"})},startVideoCall(){this.checkLogin()?this.showVideoSelect=!0:e.index.showModal({title:"提示",content:"请先登录后再使用此功能",confirmText:"去登录",cancelText:"取消",success:a=>{a.confirm&&e.index.navigateTo({url:"/pages/login/login"})}})},goAICall(){e.index.switchTab({url:"/pages/phone-call/phone-call",fail:()=>{e.index.navigateTo({url:"/pages/phone-call/phone-call"})}})},handleVideoSelect(a){console.log("[Index] 选择视频:",a),e.index.navigateTo({url:`/pages/video-call-new/video-call-new?videoId=${a.id}&videoName=${encodeURIComponent(a.name||"复活视频")}&videoUrl=${encodeURIComponent(a.videoUrl||a.local_video_path||a.video_url)}&voiceId=${a.voice_id||a.voiceId}`})},goShortDrama(){e.index.navigateTo({url:"/pages/short-drama/short-drama"})}}};if(!Array){e.resolveComponent("VideoSelectModal")()}const i=e._export_sfc(o,[["render",function(a,o,i,n,t,l){return{a:`${t.apiBase}/static/bg.png`,b:e.f(t.banners,((a,o,i)=>({a:l.resolveUrl(a.url),b:e.o((e=>l.handleBannerClick(a)),o),c:o}))),c:e.o(((...e)=>l.goPlaza&&l.goPlaza(...e))),d:e.o(((...e)=>l.goPhotoRevival&&l.goPhotoRevival(...e))),e:e.o(((...e)=>l.goShortDrama&&l.goShortDrama(...e))),f:e.o(((...e)=>l.goAICall&&l.goAICall(...e))),g:e.o(((...e)=>l.startVideoCall&&l.startVideoCall(...e))),h:e.o((e=>t.showVideoSelect=!1)),i:e.o(l.handleVideoSelect),j:e.p({show:t.showVideoSelect})}}],["__scopeId","data-v-e85e9fe9"]]);wx.createPage(i);
"use strict";const e=require("../../common/vendor.js"),a=require("../../config/api.js"),o={components:{VideoSelectModal:()=>"../../components/VideoSelectModal.js"},data:()=>({apiBase:a.API_BASE,title:"时光意境 · AI亲人重逢",showVideoSelect:!1,banners:[]}),onLoad(){this.loadHomeBanners()},methods:{resolveUrl(e){return e?e.startsWith("http://")||e.startsWith("https://")?e:`${this.apiBase}${e}`:""},async loadHomeBanners(){try{const e=await a.request({url:"/api/system/home-banners",method:"GET"}),o=e&&e.success?e.data:[];Array.isArray(o)?this.banners=o.filter((e=>e&&e.url&&!1!==e.enabled)).sort(((e,a)=>(Number(e.sort)||0)-(Number(a.sort)||0))):this.banners=[]}catch(e){this.banners=[]}},handleBannerClick(a){if(a&&a.link){if(String(a.link).startsWith("/pages/"))return void e.index.navigateTo({url:a.link});e.index.setClipboardData({data:String(a.link)}),e.index.showToast({title:"已复制链接",icon:"none"})}},checkLogin(){const a=e.index.getStorageSync("token"),o=e.index.getStorageSync("userId");return!(!a||!o)},goVoiceClone(){e.index.switchTab({url:"/pages/revival/revival",fail:()=>{e.index.navigateTo({url:"/pages/revival/revival"})}})},goPhotoRevival(){e.index.navigateTo({url:"/pages/revival/revival-original"})},goPlaza(){e.index.navigateTo({url:"/pages/plaza/plaza"})},startVideoCall(){this.checkLogin()?this.showVideoSelect=!0:e.index.showModal({title:"提示",content:"请先登录后再使用此功能",confirmText:"去登录",cancelText:"取消",success:a=>{a.confirm&&e.index.navigateTo({url:"/pages/login/login"})}})},goAICall(){e.index.switchTab({url:"/pages/phone-call/phone-call",fail:()=>{e.index.navigateTo({url:"/pages/phone-call/phone-call"})}})},handleVideoSelect(a){console.log("[Index] 选择视频:",a),e.index.navigateTo({url:`/pages/video-call-new/video-call-new?videoId=${a.id}&videoName=${encodeURIComponent(a.name||"复活视频")}&videoUrl=${encodeURIComponent(a.videoUrl||a.local_video_path||a.video_url)}&voiceId=${a.voice_id||a.voiceId}`})},goShortDrama(){e.index.navigateTo({url:"/pages/short-drama/short-drama"})}}};if(!Array){e.resolveComponent("VideoSelectModal")()}const i=e._export_sfc(o,[["render",function(a,o,i,n,t,l){return{a:`${t.apiBase}/static/bg.png`,b:e.f(t.banners,((a,o,i)=>({a:l.resolveUrl(a.url),b:e.o((e=>l.handleBannerClick(a)),o),c:o}))),c:e.o(((...e)=>l.goPlaza&&l.goPlaza(...e))),d:e.o(((...e)=>l.goPhotoRevival&&l.goPhotoRevival(...e))),e:e.o(((...e)=>l.goShortDrama&&l.goShortDrama(...e))),f:e.o(((...e)=>l.goAICall&&l.goAICall(...e))),g:e.o(((...e)=>l.startVideoCall&&l.startVideoCall(...e))),h:e.o((e=>t.showVideoSelect=!1)),i:e.o(l.handleVideoSelect),j:e.p({show:t.showVideoSelect})}}],["__scopeId","data-v-d7e89d74"]]);wx.createPage(i);

View File

@ -1 +1 @@
<view class="memorial-bg data-v-e85e9fe9"><image class="bg-image data-v-e85e9fe9" src="{{a}}" mode="aspectFill"></image><view class="memorial-content data-v-e85e9fe9"><view class="header data-v-e85e9fe9"><text class="logo data-v-e85e9fe9">时光意境 · AI亲人重逢</text><text class="tagline data-v-e85e9fe9">用科技温暖记忆,让告别不留遗憾</text></view><view class="memorial-quote data-v-e85e9fe9"><swiper class="banner-swiper data-v-e85e9fe9" circular="{{true}}" autoplay="{{true}}" interval="{{3500}}" duration="{{500}}" indicator-dots="{{true}}" indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#8B7355"><swiper-item wx:for="{{b}}" wx:for-item="item" wx:key="c" class="data-v-e85e9fe9"><view class="banner-item data-v-e85e9fe9" bindtap="{{item.b}}"><image class="banner-image data-v-e85e9fe9" src="{{item.a}}" mode="aspectFill"/></view></swiper-item></swiper></view><view class="feature-grid data-v-e85e9fe9"><view class="feature-item data-v-e85e9fe9" bindtap="{{c}}"><view class="feature-icon data-v-e85e9fe9">🖼️</view><text class="feature-name data-v-e85e9fe9">作品广场</text></view><view class="feature-item data-v-e85e9fe9" bindtap="{{d}}"><view class="feature-icon data-v-e85e9fe9">📸</view><text class="feature-name data-v-e85e9fe9">照片复活</text></view><view class="feature-item data-v-e85e9fe9" bindtap="{{e}}"><view class="feature-icon data-v-e85e9fe9">🎬</view><text class="feature-name data-v-e85e9fe9">看短剧</text></view><view class="feature-item data-v-e85e9fe9" bindtap="{{f}}"><view class="feature-icon data-v-e85e9fe9">📹</view><text class="feature-name data-v-e85e9fe9">视频通话</text></view></view><view class="video-call-section data-v-e85e9fe9"><button class="video-call-btn data-v-e85e9fe9" bindtap="{{g}}"><text class="btn-icon data-v-e85e9fe9">📹</text><text class="btn-text data-v-e85e9fe9">开始视频通话</text></button></view><view class="cta-section data-v-e85e9fe9"><text class="cta-text data-v-e85e9fe9">只需简单三步,即可与记忆中的亲人温暖"重逢"</text></view></view><video-select-modal wx:if="{{j}}" class="data-v-e85e9fe9" bindclose="{{h}}" bindconfirm="{{i}}" u-i="e85e9fe9-0" bind:__l="__l" u-p="{{j}}"/></view>
<view class="memorial-bg data-v-d7e89d74"><image class="bg-image data-v-d7e89d74" src="{{a}}" mode="aspectFill"></image><view class="memorial-content data-v-d7e89d74"><view class="header data-v-d7e89d74"><text class="logo data-v-d7e89d74">时光意境 · AI亲人重逢</text><text class="tagline data-v-d7e89d74">用科技温暖记忆,让告别不留遗憾</text></view><view class="memorial-quote data-v-d7e89d74"><swiper class="banner-swiper data-v-d7e89d74" circular="{{true}}" autoplay="{{true}}" interval="{{3500}}" duration="{{500}}" indicator-dots="{{true}}" indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#8B7355"><swiper-item wx:for="{{b}}" wx:for-item="item" wx:key="c" class="data-v-d7e89d74"><view class="banner-item data-v-d7e89d74" bindtap="{{item.b}}"><image class="banner-image data-v-d7e89d74" src="{{item.a}}" mode="aspectFill"/><view class="ai-tag data-v-d7e89d74"><text class="ai-tag-text data-v-d7e89d74">AI生成</text></view></view></swiper-item></swiper></view><view class="feature-grid data-v-d7e89d74"><view class="feature-item data-v-d7e89d74" bindtap="{{c}}"><view class="feature-icon data-v-d7e89d74">🖼️</view><text class="feature-name data-v-d7e89d74">作品广场</text></view><view class="feature-item data-v-d7e89d74" bindtap="{{d}}"><view class="feature-icon data-v-d7e89d74">📸</view><text class="feature-name data-v-d7e89d74">照片复活</text></view><view class="feature-item data-v-d7e89d74" bindtap="{{e}}"><view class="feature-icon data-v-d7e89d74">🎬</view><text class="feature-name data-v-d7e89d74">看短剧</text></view><view class="feature-item data-v-d7e89d74" bindtap="{{f}}"><view class="feature-icon data-v-d7e89d74">📹</view><text class="feature-name data-v-d7e89d74">视频通话</text></view></view><view class="video-call-section data-v-d7e89d74"><button class="video-call-btn data-v-d7e89d74" bindtap="{{g}}"><text class="btn-icon data-v-d7e89d74">📹</text><text class="btn-text data-v-d7e89d74">开始视频通话</text></button><text class="ai-disclaimer data-v-d7e89d74">本服务为AI生成内容结果仅供参考</text></view><view class="cta-section data-v-d7e89d74"><text class="cta-text data-v-d7e89d74">只需简单三步,即可与记忆中的亲人温暖"重逢"</text></view></view><video-select-modal wx:if="{{j}}" class="data-v-d7e89d74" bindclose="{{h}}" bindconfirm="{{i}}" u-i="d7e89d74-0" bind:__l="__l" u-p="{{j}}"/></view>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<view class="plaza-container data-v-c0fcbd71"><view class="header data-v-c0fcbd71"><text class="title data-v-c0fcbd71">作品广场</text><text class="subtitle data-v-c0fcbd71">发现大家发布的作品</text></view><scroll-view scroll-y class="works-list data-v-c0fcbd71" bindscrolltolower="{{g}}"><view wx:if="{{a}}" class="works-grid skeleton-grid data-v-c0fcbd71"><view wx:for="{{b}}" wx:for-item="n" wx:key="a" class="work-card skeleton-card data-v-c0fcbd71"><view class="work-cover skeleton-cover data-v-c0fcbd71"></view><view class="work-info data-v-c0fcbd71"><view class="skeleton-line skeleton-title data-v-c0fcbd71"></view><view class="skeleton-line skeleton-sub data-v-c0fcbd71"></view><view class="skeleton-line skeleton-sub short data-v-c0fcbd71"></view></view></view></view><view wx:elif="{{c}}" class="empty-box data-v-c0fcbd71"><text class="empty-icon data-v-c0fcbd71">🖼️</text><text class="empty-text data-v-c0fcbd71">暂无作品</text><text class="empty-hint data-v-c0fcbd71">快去发布你的第一个作品吧</text></view><view wx:else class="works-grid data-v-c0fcbd71"><view wx:for="{{d}}" wx:for-item="work" wx:key="l" class="work-card data-v-c0fcbd71" bindtap="{{work.m}}"><view class="work-cover data-v-c0fcbd71"><image wx:if="{{work.a}}" src="{{work.b}}" mode="aspectFill" class="cover-img data-v-c0fcbd71"/><view wx:else class="cover-placeholder data-v-c0fcbd71"><text class="placeholder-icon data-v-c0fcbd71">🎬</text></view><view class="work-type data-v-c0fcbd71">{{work.c}}</view></view><view class="work-info data-v-c0fcbd71"><text class="work-title data-v-c0fcbd71">{{work.d}}</text><text class="work-author data-v-c0fcbd71">{{work.e}}</text><text class="work-time data-v-c0fcbd71">{{work.f}}</text><view class="work-actions data-v-c0fcbd71" catchtap="{{work.k}}"><view class="{{['like-btn', 'data-v-c0fcbd71', work.i && 'liked']}}" catchtap="{{work.j}}"><text class="like-icon data-v-c0fcbd71">{{work.g}}</text><text class="like-count data-v-c0fcbd71">{{work.h}}</text></view></view></view></view></view><view wx:if="{{e}}" class="loading-more data-v-c0fcbd71"><text class="loading-more-text data-v-c0fcbd71">⏳ 加载更多...</text></view><view wx:if="{{f}}" class="no-more data-v-c0fcbd71"><text class="no-more-text data-v-c0fcbd71">没有更多了</text></view></scroll-view></view>
<view class="plaza-container data-v-2b48ee52"><view class="header data-v-2b48ee52"><text class="title data-v-2b48ee52">作品广场</text><text class="subtitle data-v-2b48ee52">发现大家发布的作品</text></view><scroll-view scroll-y class="works-list data-v-2b48ee52" bindscrolltolower="{{g}}"><view wx:if="{{a}}" class="works-grid skeleton-grid data-v-2b48ee52"><view wx:for="{{b}}" wx:for-item="n" wx:key="a" class="work-card skeleton-card data-v-2b48ee52"><view class="work-cover skeleton-cover data-v-2b48ee52"></view><view class="work-info data-v-2b48ee52"><view class="skeleton-line skeleton-title data-v-2b48ee52"></view><view class="skeleton-line skeleton-sub data-v-2b48ee52"></view><view class="skeleton-line skeleton-sub short data-v-2b48ee52"></view></view></view></view><view wx:elif="{{c}}" class="empty-box data-v-2b48ee52"><text class="empty-icon data-v-2b48ee52">🖼️</text><text class="empty-text data-v-2b48ee52">暂无作品</text><text class="empty-hint data-v-2b48ee52">快去发布你的第一个作品吧</text></view><view wx:else class="works-grid data-v-2b48ee52"><view wx:for="{{d}}" wx:for-item="work" wx:key="l" class="work-card data-v-2b48ee52" bindtap="{{work.m}}"><view class="work-cover data-v-2b48ee52"><image wx:if="{{work.a}}" src="{{work.b}}" mode="aspectFill" class="cover-img data-v-2b48ee52"/><view wx:else class="cover-placeholder data-v-2b48ee52"><text class="placeholder-icon data-v-2b48ee52">🎬</text></view><view class="work-type data-v-2b48ee52">{{work.c}}</view><view class="ai-tag data-v-2b48ee52"><text class="ai-tag-text data-v-2b48ee52">AI生成</text></view></view><view class="work-info data-v-2b48ee52"><text class="work-title data-v-2b48ee52">{{work.d}}</text><text class="work-author data-v-2b48ee52">{{work.e}}</text><text class="work-time data-v-2b48ee52">{{work.f}}</text><view class="work-actions data-v-2b48ee52" catchtap="{{work.k}}"><view class="{{['like-btn', 'data-v-2b48ee52', work.i && 'liked']}}" catchtap="{{work.j}}"><text class="like-icon data-v-2b48ee52">{{work.g}}</text><text class="like-count data-v-2b48ee52">{{work.h}}</text></view></view></view></view></view><view wx:if="{{e}}" class="loading-more data-v-2b48ee52"><text class="loading-more-text data-v-2b48ee52">⏳ 加载更多...</text></view><view wx:if="{{f}}" class="no-more data-v-2b48ee52"><text class="no-more-text data-v-2b48ee52">没有更多了</text></view></scroll-view></view>

View File

@ -1 +1 @@
.plaza-container.data-v-c0fcbd71{min-height:100vh;background:#fdf8f2;display:flex;flex-direction:column}.header.data-v-c0fcbd71{padding:32rpx 32rpx 20rpx 40rpx}.header .title.data-v-c0fcbd71{font-size:44rpx;font-weight:700;color:#8b7355;display:block;margin-bottom:8rpx}.header .subtitle.data-v-c0fcbd71{font-size:24rpx;color:#999;display:block}.works-list.data-v-c0fcbd71{flex:1;padding:0 24rpx 40rpx;box-sizing:border-box}.loading-box.data-v-c0fcbd71,.empty-box.data-v-c0fcbd71{padding:200rpx 40rpx;text-align:center;display:flex;flex-direction:column;align-items:center}.loading-text.data-v-c0fcbd71{font-size:28rpx;color:#999}.empty-icon.data-v-c0fcbd71{font-size:120rpx;margin-bottom:30rpx;opacity:.5}.empty-text.data-v-c0fcbd71{font-size:32rpx;color:#666;margin-bottom:16rpx}.empty-hint.data-v-c0fcbd71{font-size:26rpx;color:#999}.works-grid.data-v-c0fcbd71{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16rpx}.skeleton-grid.data-v-c0fcbd71{padding-top:16rpx}.skeleton-card.data-v-c0fcbd71{background:#fff}.skeleton-cover.data-v-c0fcbd71{position:relative;width:100%;padding-top:150%;background:#f1f1f1}.skeleton-line.data-v-c0fcbd71{height:22rpx;background:#f1f1f1;border-radius:10rpx;margin-top:12rpx}.skeleton-title.data-v-c0fcbd71{height:26rpx;margin-top:0}.skeleton-sub.data-v-c0fcbd71{height:20rpx}.skeleton-sub.short.data-v-c0fcbd71{width:60%}.work-card.data-v-c0fcbd71{background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 4rpx 12rpx rgba(0,0,0,.06);transition:all .3s}.work-card.data-v-c0fcbd71:active{transform:translateY(-4rpx);box-shadow:0 8rpx 20rpx rgba(0,0,0,.12)}.work-cover.data-v-c0fcbd71{position:relative;width:100%;padding-top:150%;overflow:hidden;background:#f5f5f5}.work-cover .cover-img.data-v-c0fcbd71{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.work-cover .cover-placeholder.data-v-c0fcbd71{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.work-cover .placeholder-icon.data-v-c0fcbd71{font-size:60rpx;color:#ccc}.work-cover .work-type.data-v-c0fcbd71{position:absolute;top:12rpx;right:12rpx;padding:6rpx 16rpx;background:rgba(0,0,0,.6);color:#fff;font-size:20rpx;border-radius:20rpx}.work-info.data-v-c0fcbd71{padding:20rpx}.work-info .work-title.data-v-c0fcbd71{display:block;font-size:28rpx;font-weight:700;color:#333;margin-bottom:12rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-info .work-author.data-v-c0fcbd71{display:block;font-size:22rpx;color:#666;margin-bottom:10rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-info .work-time.data-v-c0fcbd71{display:block;font-size:22rpx;color:#999}.work-actions.data-v-c0fcbd71{margin-top:14rpx;display:flex;justify-content:flex-end}.like-btn.data-v-c0fcbd71{display:flex;align-items:center;gap:10rpx;padding:10rpx 16rpx;border-radius:999rpx;background:rgba(139,115,85,.08)}.like-btn.liked.data-v-c0fcbd71{background:rgba(220,60,90,.1)}.like-icon.data-v-c0fcbd71{font-size:26rpx}.like-count.data-v-c0fcbd71{font-size:22rpx;color:#666}.loading-more-text.data-v-c0fcbd71,.no-more-text.data-v-c0fcbd71{font-size:24rpx;color:#999}
.plaza-container.data-v-2b48ee52{min-height:100vh;background:#fdf8f2;display:flex;flex-direction:column}.header.data-v-2b48ee52{padding:32rpx 32rpx 20rpx 40rpx}.header .title.data-v-2b48ee52{font-size:44rpx;font-weight:700;color:#8b7355;display:block;margin-bottom:8rpx}.header .subtitle.data-v-2b48ee52{font-size:24rpx;color:#999;display:block}.works-list.data-v-2b48ee52{flex:1;padding:0 24rpx 40rpx;box-sizing:border-box}.loading-box.data-v-2b48ee52,.empty-box.data-v-2b48ee52{padding:200rpx 40rpx;text-align:center;display:flex;flex-direction:column;align-items:center}.loading-text.data-v-2b48ee52{font-size:28rpx;color:#999}.empty-icon.data-v-2b48ee52{font-size:120rpx;margin-bottom:30rpx;opacity:.5}.empty-text.data-v-2b48ee52{font-size:32rpx;color:#666;margin-bottom:16rpx}.empty-hint.data-v-2b48ee52{font-size:26rpx;color:#999}.works-grid.data-v-2b48ee52{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16rpx}.skeleton-grid.data-v-2b48ee52{padding-top:16rpx}.skeleton-card.data-v-2b48ee52{background:#fff}.skeleton-cover.data-v-2b48ee52{position:relative;width:100%;padding-top:150%;background:#f1f1f1}.skeleton-line.data-v-2b48ee52{height:22rpx;background:#f1f1f1;border-radius:10rpx;margin-top:12rpx}.skeleton-title.data-v-2b48ee52{height:26rpx;margin-top:0}.skeleton-sub.data-v-2b48ee52{height:20rpx}.skeleton-sub.short.data-v-2b48ee52{width:60%}.work-card.data-v-2b48ee52{background:#fff;border-radius:16rpx;overflow:hidden;box-shadow:0 4rpx 12rpx rgba(0,0,0,.06);transition:all .3s}.work-card.data-v-2b48ee52:active{transform:translateY(-4rpx);box-shadow:0 8rpx 20rpx rgba(0,0,0,.12)}.work-cover.data-v-2b48ee52{position:relative;width:100%;padding-top:150%;overflow:hidden;background:#f5f5f5}.work-cover .cover-img.data-v-2b48ee52{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover}.work-cover .cover-placeholder.data-v-2b48ee52{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center}.work-cover .placeholder-icon.data-v-2b48ee52{font-size:60rpx;color:#ccc}.work-cover .work-type.data-v-2b48ee52{position:absolute;top:12rpx;right:12rpx;padding:6rpx 16rpx;background:rgba(0,0,0,.6);color:#fff;font-size:20rpx;border-radius:20rpx}.work-cover .ai-tag.data-v-2b48ee52{position:absolute;top:12rpx;left:12rpx;padding:6rpx 16rpx;background:rgba(255,165,0,.85);color:#fff;font-size:20rpx;border-radius:20rpx;font-weight:500}.work-info.data-v-2b48ee52{padding:20rpx}.work-info .work-title.data-v-2b48ee52{display:block;font-size:28rpx;font-weight:700;color:#333;margin-bottom:12rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-info .work-author.data-v-2b48ee52{display:block;font-size:22rpx;color:#666;margin-bottom:10rpx;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.work-info .work-time.data-v-2b48ee52{display:block;font-size:22rpx;color:#999}.work-actions.data-v-2b48ee52{margin-top:14rpx;display:flex;justify-content:flex-end}.like-btn.data-v-2b48ee52{display:flex;align-items:center;gap:10rpx;padding:10rpx 16rpx;border-radius:999rpx;background:rgba(139,115,85,.08)}.like-btn.liked.data-v-2b48ee52{background:rgba(220,60,90,.1)}.like-icon.data-v-2b48ee52{font-size:26rpx}.like-count.data-v-2b48ee52{font-size:22rpx;color:#666}.loading-more-text.data-v-2b48ee52,.no-more-text.data-v-2b48ee52{font-size:24rpx;color:#999}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<view class="history-container data-v-a9bdd541"><view class="header data-v-a9bdd541"><text class="title data-v-a9bdd541">我的视频</text><text class="subtitle data-v-a9bdd541">{{a}} 个作品</text></view><scroll-view scroll-y class="video-list data-v-a9bdd541"><view wx:if="{{b}}" class="loading-box data-v-a9bdd541"><text class="loading-text data-v-a9bdd541">⏳ 加载中...</text></view><view wx:elif="{{c}}" class="empty-box data-v-a9bdd541"><text class="empty-icon data-v-a9bdd541">📹</text><text class="empty-text data-v-a9bdd541">暂无复活视频</text><text class="empty-hint data-v-a9bdd541">快去复活你的第一张照片吧</text></view><view wx:else class="video-grid data-v-a9bdd541"><view wx:for="{{d}}" wx:for-item="video" wx:key="p" class="video-card data-v-a9bdd541" bindtap="{{video.q}}"><view class="video-cover data-v-a9bdd541"><image wx:if="{{video.a}}" src="{{video.b}}" class="cover-image data-v-a9bdd541" mode="aspectFill"></image><view wx:else class="cover-placeholder data-v-a9bdd541"><text class="placeholder-icon data-v-a9bdd541">📹</text></view><view class="play-overlay data-v-a9bdd541"><text class="play-icon data-v-a9bdd541">▶</text></view><view wx:if="{{video.c}}" class="cache-badge data-v-a9bdd541"><text class="cache-text data-v-a9bdd541">已缓存</text></view></view><view class="video-info data-v-a9bdd541"><text class="video-title data-v-a9bdd541">{{video.d}}</text><text wx:if="{{video.e}}" class="video-text data-v-a9bdd541">{{video.f}}</text><view class="video-meta data-v-a9bdd541"><text class="video-time data-v-a9bdd541">{{video.g}}</text></view></view><view class="video-actions data-v-a9bdd541"><view class="action-btn data-v-a9bdd541" catchtap="{{video.h}}"><text class="action-icon data-v-a9bdd541">▶️</text><text class="action-text data-v-a9bdd541">播放</text></view><view class="action-btn data-v-a9bdd541" catchtap="{{video.i}}"><text class="action-icon data-v-a9bdd541">💾</text><text class="action-text data-v-a9bdd541">保存</text></view><button class="action-btn share data-v-a9bdd541" open-type="share" catchtap="{{video.j}}"><text class="action-icon data-v-a9bdd541">🔗</text><text class="action-text data-v-a9bdd541">分享</text></button><view wx:if="{{video.k}}" class="action-btn publish data-v-a9bdd541" catchtap="{{video.n}}"><text class="action-icon data-v-a9bdd541">{{video.l}}</text><text class="action-text data-v-a9bdd541">{{video.m}}</text></view><view class="action-btn delete data-v-a9bdd541" catchtap="{{video.o}}"><text class="action-icon data-v-a9bdd541">🗑️</text><text class="action-text data-v-a9bdd541">删除</text></view></view></view></view></scroll-view><view wx:if="{{e}}" class="publish-mask data-v-a9bdd541" bindtap="{{k}}"><view class="publish-dialog data-v-a9bdd541" catchtap="{{j}}"><view class="publish-title data-v-a9bdd541">发布作品</view><input class="publish-input data-v-a9bdd541" placeholder="请输入标题最多20字" maxlength="20" value="{{f}}" bindinput="{{g}}"/><view class="publish-actions data-v-a9bdd541"><view class="publish-btn cancel data-v-a9bdd541" bindtap="{{h}}">取消</view><view class="publish-btn confirm data-v-a9bdd541" bindtap="{{i}}">发布</view></view></view></view></view>
<view class="history-container data-v-29c0c228"><view class="header data-v-29c0c228"><text class="title data-v-29c0c228">我的视频</text><text class="subtitle data-v-29c0c228">{{a}} 个作品</text></view><scroll-view scroll-y class="video-list data-v-29c0c228"><view wx:if="{{b}}" class="loading-box data-v-29c0c228"><text class="loading-text data-v-29c0c228">⏳ 加载中...</text></view><view wx:elif="{{c}}" class="empty-box data-v-29c0c228"><text class="empty-icon data-v-29c0c228">📹</text><text class="empty-text data-v-29c0c228">暂无复活视频</text><text class="empty-hint data-v-29c0c228">快去复活你的第一张照片吧</text></view><view wx:else class="video-grid data-v-29c0c228"><view wx:for="{{d}}" wx:for-item="video" wx:key="p" class="video-card data-v-29c0c228" bindtap="{{video.q}}"><view class="video-cover data-v-29c0c228"><image wx:if="{{video.a}}" src="{{video.b}}" class="cover-image data-v-29c0c228" mode="aspectFill"></image><view wx:else class="cover-placeholder data-v-29c0c228"><text class="placeholder-icon data-v-29c0c228">📹</text></view><view class="play-overlay data-v-29c0c228"><text class="play-icon data-v-29c0c228">▶</text></view><view wx:if="{{video.c}}" class="cache-badge data-v-29c0c228"><text class="cache-text data-v-29c0c228">已缓存</text></view><view class="ai-tag data-v-29c0c228"><text class="ai-tag-text data-v-29c0c228">AI生成</text></view></view><view class="video-info data-v-29c0c228"><text class="video-title data-v-29c0c228">{{video.d}}</text><text wx:if="{{video.e}}" class="video-text data-v-29c0c228">{{video.f}}</text><view class="video-meta data-v-29c0c228"><text class="video-time data-v-29c0c228">{{video.g}}</text></view></view><view class="video-actions data-v-29c0c228"><view class="action-btn data-v-29c0c228" catchtap="{{video.h}}"><text class="action-icon data-v-29c0c228">▶️</text><text class="action-text data-v-29c0c228">播放</text></view><view class="action-btn data-v-29c0c228" catchtap="{{video.i}}"><text class="action-icon data-v-29c0c228">💾</text><text class="action-text data-v-29c0c228">保存</text></view><button class="action-btn share data-v-29c0c228" open-type="share" catchtap="{{video.j}}"><text class="action-icon data-v-29c0c228">🔗</text><text class="action-text data-v-29c0c228">分享</text></button><view wx:if="{{video.k}}" class="action-btn publish data-v-29c0c228" catchtap="{{video.n}}"><text class="action-icon data-v-29c0c228">{{video.l}}</text><text class="action-text data-v-29c0c228">{{video.m}}</text></view><view class="action-btn delete data-v-29c0c228" catchtap="{{video.o}}"><text class="action-icon data-v-29c0c228">🗑️</text><text class="action-text data-v-29c0c228">删除</text></view></view></view></view></scroll-view><view wx:if="{{e}}" class="publish-mask data-v-29c0c228" bindtap="{{k}}"><view class="publish-dialog data-v-29c0c228" catchtap="{{j}}"><view class="publish-title data-v-29c0c228">发布作品</view><input class="publish-input data-v-29c0c228" placeholder="请输入标题最多20字" maxlength="20" value="{{f}}" bindinput="{{g}}"/><view class="publish-actions data-v-29c0c228"><view class="publish-btn cancel data-v-29c0c228" bindtap="{{h}}">取消</view><view class="publish-btn confirm data-v-29c0c228" bindtap="{{i}}">发布</view></view></view></view></view>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<view class="upload-container data-v-84d46214"><view class="page-header data-v-84d46214"><text class="header-title data-v-84d46214">创建音色</text><text class="header-subtitle data-v-84d46214">上传音频样本,克隆专属音色</text></view><view class="form-section data-v-84d46214"><view class="form-item data-v-84d46214"><text class="form-label data-v-84d46214">音色名称</text><input class="form-input data-v-84d46214" placeholder="请输入音色名称(如:妈妈的声音)" maxlength="20" value="{{a}}" bindinput="{{b}}"/></view></view><view class="form-section data-v-84d46214"><view class="form-item data-v-84d46214"><text class="form-label data-v-84d46214">使用 CosyVoice v3 plus</text><view class="toggle-row data-v-84d46214"><switch class="data-v-84d46214" checked="{{c}}" bindchange="{{d}}"/><text class="toggle-hint data-v-84d46214">开启后将使用 cosyvoice-v3-plus 创建音色</text></view></view></view><view class="tips-section data-v-84d46214"><view class="tips-title-row data-v-84d46214"><text class="tips-title data-v-84d46214">📄 参考文案(可直接朗读)</text><button class="switch-btn data-v-84d46214" bindtap="{{e}}">换一换</button></view><view class="reference-box data-v-84d46214"><text class="reference-text data-v-84d46214">{{f}}</text></view><button class="copy-btn data-v-84d46214" bindtap="{{g}}">复制文案</button></view><view class="upload-section data-v-84d46214"><text class="section-title data-v-84d46214">上传音频样本</text><text class="section-tip data-v-84d46214">可录制建议10-20秒清晰人声</text><view wx:if="{{h}}" class="upload-mode data-v-84d46214"><button class="mode-btn data-v-84d46214" disabled="{{i}}" bindtap="{{j}}">🎤 录音</button></view><view wx:if="{{k}}" class="upload-box data-v-84d46214"><view wx:if="{{l}}" class="recording-box data-v-84d46214"><view class="recording-icon data-v-84d46214">🔴</view><text class="recording-text data-v-84d46214">录音中... {{m}}秒</text><button class="stop-btn data-v-84d46214" bindtap="{{n}}">停止录音</button></view><view wx:else class="data-v-84d46214"><view class="upload-icon data-v-84d46214">🎤</view><text class="upload-text data-v-84d46214">点击“录音”开始录制</text></view></view><view wx:else class="audio-preview data-v-84d46214"><view class="audio-info data-v-84d46214"><text class="audio-icon data-v-84d46214">🎵</text><text class="audio-name data-v-84d46214">{{o}}</text></view><view class="audio-actions data-v-84d46214"><button class="action-btn play-btn data-v-84d46214" bindtap="{{q}}">{{p}}</button><button class="action-btn delete-btn data-v-84d46214" bindtap="{{r}}">删除</button></view></view></view><view class="submit-section data-v-84d46214"><button class="submit-btn data-v-84d46214" disabled="{{t}}" bindtap="{{v}}"><text wx:if="{{s}}" class="data-v-84d46214">上传中...</text><text wx:else class="data-v-84d46214">创建音色</text></button></view><view class="tips-section data-v-84d46214"><text class="tips-title data-v-84d46214">📝 温馨提示</text><text class="tips-item data-v-84d46214">• 音频时长建议10-20秒最长60秒</text><text class="tips-item data-v-84d46214">• 必须包含至少3秒连续清晰朗读</text><text class="tips-item data-v-84d46214">• 避免背景音乐、噪音或其他人声</text><text class="tips-item data-v-84d46214">• 音频内容建议为普通话朗读</text><text class="tips-item data-v-84d46214">• 创建成功后可在"声音克隆"中使用</text></view></view>
<view class="upload-container data-v-fe732786"><view class="page-header data-v-fe732786"><text class="header-title data-v-fe732786">创建音色</text><text class="header-subtitle data-v-fe732786">上传音频样本,克隆专属音色</text></view><view class="form-section data-v-fe732786"><view class="form-item data-v-fe732786"><text class="form-label data-v-fe732786">音色名称</text><input class="form-input data-v-fe732786" placeholder="请输入音色名称(如:妈妈的声音)" maxlength="20" value="{{a}}" bindinput="{{b}}"/></view></view><view class="form-section data-v-fe732786"><view class="form-item data-v-fe732786"><text class="form-label data-v-fe732786">使用 CosyVoice v3 plus</text><view class="toggle-row data-v-fe732786"><switch class="data-v-fe732786" checked="{{c}}" bindchange="{{d}}"/><text class="toggle-hint data-v-fe732786">开启后将使用 cosyvoice-v3-plus 创建音色</text></view></view></view><view class="tips-section data-v-fe732786"><view class="tips-title-row data-v-fe732786"><text class="tips-title data-v-fe732786">📄 参考文案(可直接朗读)</text><button class="switch-btn data-v-fe732786" bindtap="{{e}}">换一换</button></view><view class="reference-box data-v-fe732786"><text class="reference-text data-v-fe732786">{{f}}</text></view><button class="copy-btn data-v-fe732786" bindtap="{{g}}">复制文案</button></view><view class="upload-section data-v-fe732786"><text class="section-title data-v-fe732786">上传音频样本</text><text class="section-tip data-v-fe732786">可录制建议10-20秒清晰人声</text><view wx:if="{{h}}" class="upload-mode data-v-fe732786"><button class="mode-btn data-v-fe732786" disabled="{{i}}" bindtap="{{j}}">🎤 录音</button></view><view wx:if="{{k}}" class="upload-box data-v-fe732786"><view wx:if="{{l}}" class="recording-box data-v-fe732786"><view class="recording-icon data-v-fe732786">🔴</view><text class="recording-text data-v-fe732786">录音中... {{m}}秒</text><button class="stop-btn data-v-fe732786" bindtap="{{n}}">停止录音</button></view><view wx:else class="data-v-fe732786"><view class="upload-icon data-v-fe732786">🎤</view><text class="upload-text data-v-fe732786">点击“录音”开始录制</text></view></view><view wx:else class="audio-preview data-v-fe732786"><view class="audio-info data-v-fe732786"><text class="audio-icon data-v-fe732786">🎵</text><text class="audio-name data-v-fe732786">{{o}}</text></view><view class="audio-actions data-v-fe732786"><button class="action-btn play-btn data-v-fe732786" bindtap="{{q}}">{{p}}</button><button class="action-btn delete-btn data-v-fe732786" bindtap="{{r}}">删除</button></view></view></view><view class="submit-section data-v-fe732786"><button class="submit-btn data-v-fe732786" disabled="{{t}}" bindtap="{{v}}"><text wx:if="{{s}}" class="data-v-fe732786">上传中...</text><text wx:else class="data-v-fe732786">创建音色</text></button><text class="ai-disclaimer data-v-fe732786">本服务为AI生成内容结果仅供参考</text></view><view class="tips-section data-v-fe732786"><text class="tips-title data-v-fe732786">📝 温馨提示</text><text class="tips-item data-v-fe732786">• 音频时长建议10-20秒最长60秒</text><text class="tips-item data-v-fe732786">• 必须包含至少3秒连续清晰朗读</text><text class="tips-item data-v-fe732786">• 避免背景音乐、噪音或其他人声</text><text class="tips-item data-v-fe732786">• 音频内容建议为普通话朗读</text><text class="tips-item data-v-fe732786">• 创建成功后可在"声音克隆"中使用</text></view></view>

View File

@ -1 +1 @@
.upload-container.data-v-84d46214{min-height:100vh;background:linear-gradient(135deg,#fdf8f2,#f5ede0);padding:30rpx}.page-header.data-v-84d46214{text-align:center;margin-bottom:40rpx}.page-header .header-title.data-v-84d46214{display:block;font-size:44rpx;font-weight:700;color:#333;margin-bottom:15rpx}.page-header .header-subtitle.data-v-84d46214{display:block;font-size:26rpx;color:#999}.upload-mode.data-v-84d46214{display:flex;gap:20rpx;margin:15rpx 0 25rpx}.mode-btn.data-v-84d46214{flex:1;height:80rpx;border-radius:15rpx;font-size:28rpx;background:#f5f5f5;color:#333}.toggle-row.data-v-84d46214{display:flex;align-items:center;gap:20rpx}.toggle-hint.data-v-84d46214{font-size:24rpx;color:#999}.reference-box.data-v-84d46214{background:#f5f5f5;border-radius:15rpx;padding:20rpx;margin-top:10rpx}.reference-text.data-v-84d46214{font-size:26rpx;color:#333;line-height:1.6}.copy-btn.data-v-84d46214{margin-top:20rpx;height:80rpx;border-radius:15rpx;font-size:28rpx;background:#6d8b8b;color:#fff}.tips-title-row.data-v-84d46214{display:flex;align-items:center;justify-content:space-between}.switch-btn.data-v-84d46214{height:60rpx;line-height:60rpx;padding:0 20rpx;border-radius:12rpx;font-size:24rpx;background:#f5f5f5;color:#666}.form-section.data-v-84d46214{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 20rpx rgba(0,0,0,.05)}.form-item .form-label.data-v-84d46214{display:block;font-size:28rpx;color:#666;margin-bottom:15rpx;font-weight:600}.form-item .form-input.data-v-84d46214{width:100%;height:80rpx;background:#f5f5f5;border-radius:15rpx;padding:0 20rpx;font-size:28rpx;color:#333}.upload-section.data-v-84d46214{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 20rpx rgba(0,0,0,.05)}.upload-section .section-title.data-v-84d46214{display:block;font-size:28rpx;color:#666;margin-bottom:10rpx;font-weight:600}.upload-section .section-tip.data-v-84d46214{display:block;font-size:24rpx;color:#999;margin-bottom:25rpx}.upload-box.data-v-84d46214{border:2rpx dashed #8B7355;border-radius:20rpx;padding:60rpx 30rpx;text-align:center;background:#fafafa}.upload-box .upload-icon.data-v-84d46214{font-size:80rpx;margin-bottom:20rpx}.upload-box .upload-text.data-v-84d46214{display:block;font-size:28rpx;color:#8b7355}.upload-box .recording-box.data-v-84d46214{display:flex;flex-direction:column;align-items:center}.upload-box .recording-box .recording-icon.data-v-84d46214{font-size:80rpx;margin-bottom:20rpx;animation:pulse-84d46214 1.5s ease-in-out infinite}.upload-box .recording-box .recording-text.data-v-84d46214{display:block;font-size:28rpx;color:#ff6b6b;margin-bottom:30rpx;font-weight:600}.upload-box .recording-box .stop-btn.data-v-84d46214{width:200rpx;height:70rpx;background:#ff6b6b;color:#fff;border-radius:35rpx;font-size:28rpx;border:none;box-shadow:0 4rpx 15rpx rgba(255,107,107,.3)}@keyframes pulse-84d46214{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}.audio-preview.data-v-84d46214{background:#f5f5f5;border-radius:20rpx;padding:25rpx}.audio-preview .audio-info.data-v-84d46214{display:flex;align-items:center;margin-bottom:20rpx}.audio-preview .audio-info .audio-icon.data-v-84d46214{font-size:40rpx;margin-right:15rpx}.audio-preview .audio-info .audio-name.data-v-84d46214{flex:1;font-size:26rpx;color:#333}.audio-preview .audio-actions.data-v-84d46214{display:flex;gap:15rpx}.audio-preview .audio-actions .action-btn.data-v-84d46214{flex:1;height:60rpx;line-height:60rpx;border-radius:10rpx;font-size:26rpx;border:none}.audio-preview .audio-actions .play-btn.data-v-84d46214{background:#8b7355;color:#fff}.audio-preview .audio-actions .delete-btn.data-v-84d46214{background:#ff6b6b;color:#fff}.submit-section.data-v-84d46214{margin-bottom:30rpx}.submit-btn.data-v-84d46214{width:100%;height:90rpx;background:linear-gradient(135deg,#8b7355,#6d8b8b);border-radius:45rpx;color:#fff;font-size:32rpx;font-weight:600;border:none;box-shadow:0 8rpx 20rpx rgba(139,115,85,.3)}.submit-btn[disabled].data-v-84d46214{opacity:.5;box-shadow:none}.tips-section.data-v-84d46214{background:rgba(255,255,255,.8);border-radius:20rpx;padding:25rpx}.tips-section .tips-title.data-v-84d46214{display:block;font-size:26rpx;color:#8b7355;font-weight:600;margin-bottom:15rpx}.tips-section .tips-item.data-v-84d46214{display:block;font-size:24rpx;color:#666;line-height:2;padding-left:10rpx}
.upload-container.data-v-fe732786{min-height:100vh;background:linear-gradient(135deg,#fdf8f2,#f5ede0);padding:30rpx}.page-header.data-v-fe732786{text-align:center;margin-bottom:40rpx}.page-header .header-title.data-v-fe732786{display:block;font-size:44rpx;font-weight:700;color:#333;margin-bottom:15rpx}.page-header .header-subtitle.data-v-fe732786{display:block;font-size:26rpx;color:#999}.upload-mode.data-v-fe732786{display:flex;gap:20rpx;margin:15rpx 0 25rpx}.mode-btn.data-v-fe732786{flex:1;height:80rpx;border-radius:15rpx;font-size:28rpx;background:#f5f5f5;color:#333}.toggle-row.data-v-fe732786{display:flex;align-items:center;gap:20rpx}.toggle-hint.data-v-fe732786{font-size:24rpx;color:#999}.reference-box.data-v-fe732786{background:#f5f5f5;border-radius:15rpx;padding:20rpx;margin-top:10rpx}.reference-text.data-v-fe732786{font-size:26rpx;color:#333;line-height:1.6}.copy-btn.data-v-fe732786{margin-top:20rpx;height:80rpx;border-radius:15rpx;font-size:28rpx;background:#6d8b8b;color:#fff}.tips-title-row.data-v-fe732786{display:flex;align-items:center;justify-content:space-between}.switch-btn.data-v-fe732786{height:60rpx;line-height:60rpx;padding:0 20rpx;border-radius:12rpx;font-size:24rpx;background:#f5f5f5;color:#666}.form-section.data-v-fe732786{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 20rpx rgba(0,0,0,.05)}.form-item .form-label.data-v-fe732786{display:block;font-size:28rpx;color:#666;margin-bottom:15rpx;font-weight:600}.form-item .form-input.data-v-fe732786{width:100%;height:80rpx;background:#f5f5f5;border-radius:15rpx;padding:0 20rpx;font-size:28rpx;color:#333}.upload-section.data-v-fe732786{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:30rpx;box-shadow:0 4rpx 20rpx rgba(0,0,0,.05)}.upload-section .section-title.data-v-fe732786{display:block;font-size:28rpx;color:#666;margin-bottom:10rpx;font-weight:600}.upload-section .section-tip.data-v-fe732786{display:block;font-size:24rpx;color:#999;margin-bottom:25rpx}.upload-box.data-v-fe732786{border:2rpx dashed #8B7355;border-radius:20rpx;padding:60rpx 30rpx;text-align:center;background:#fafafa}.upload-box .upload-icon.data-v-fe732786{font-size:80rpx;margin-bottom:20rpx}.upload-box .upload-text.data-v-fe732786{display:block;font-size:28rpx;color:#8b7355}.upload-box .recording-box.data-v-fe732786{display:flex;flex-direction:column;align-items:center}.upload-box .recording-box .recording-icon.data-v-fe732786{font-size:80rpx;margin-bottom:20rpx;animation:pulse-fe732786 1.5s ease-in-out infinite}.upload-box .recording-box .recording-text.data-v-fe732786{display:block;font-size:28rpx;color:#ff6b6b;margin-bottom:30rpx;font-weight:600}.upload-box .recording-box .stop-btn.data-v-fe732786{width:200rpx;height:70rpx;background:#ff6b6b;color:#fff;border-radius:35rpx;font-size:28rpx;border:none;box-shadow:0 4rpx 15rpx rgba(255,107,107,.3)}@keyframes pulse-fe732786{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}.audio-preview.data-v-fe732786{background:#f5f5f5;border-radius:20rpx;padding:25rpx}.audio-preview .audio-info.data-v-fe732786{display:flex;align-items:center;margin-bottom:20rpx}.audio-preview .audio-info .audio-icon.data-v-fe732786{font-size:40rpx;margin-right:15rpx}.audio-preview .audio-info .audio-name.data-v-fe732786{flex:1;font-size:26rpx;color:#333}.audio-preview .audio-actions.data-v-fe732786{display:flex;gap:15rpx}.audio-preview .audio-actions .action-btn.data-v-fe732786{flex:1;height:60rpx;line-height:60rpx;border-radius:10rpx;font-size:26rpx;border:none}.audio-preview .audio-actions .play-btn.data-v-fe732786{background:#8b7355;color:#fff}.audio-preview .audio-actions .delete-btn.data-v-fe732786{background:#ff6b6b;color:#fff}.submit-section.data-v-fe732786{margin-bottom:30rpx}.ai-disclaimer.data-v-fe732786{display:block;text-align:center;font-size:22rpx;color:rgba(100,100,100,.6);margin-top:16rpx;letter-spacing:.5rpx}.submit-btn.data-v-fe732786{width:100%;height:90rpx;background:linear-gradient(135deg,#8b7355,#6d8b8b);border-radius:45rpx;color:#fff!important;font-size:32rpx;font-weight:600;border:none;box-shadow:0 8rpx 20rpx rgba(139,115,85,.3)}.submit-btn[disabled].data-v-fe732786{opacity:.5;box-shadow:none;color:#fff!important}.tips-section.data-v-fe732786{background:rgba(255,255,255,.8);border-radius:20rpx;padding:25rpx}.tips-section .tips-title.data-v-fe732786{display:block;font-size:26rpx;color:#8b7355;font-weight:600;margin-bottom:15rpx}.tips-section .tips-item.data-v-fe732786{display:block;font-size:24rpx;color:#666;line-height:2;padding-left:10rpx}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<view class="video-call-container data-v-ced34889"><view class="header data-v-ced34889"><text class="caller-name data-v-ced34889">📹 与{{a}}视频通话</text><text class="call-duration data-v-ced34889">{{b}}</text></view><view class="video-section data-v-ced34889"><video wx:if="{{c}}" src="{{d}}" loop="{{false}}" autoplay="{{true}}" id="videoPlayer" show-center-play-btn="{{false}}" show-play-btn="{{false}}" controls="{{false}}" enable-progress-gesture="{{false}}" show-progress="{{false}}" show-fullscreen-btn="{{false}}" show-loading="{{true}}" object-fit="{{'contain'}}" poster="{{''}}" class="video-player data-v-ced34889" bindplay="{{e}}" bindpause="{{f}}" bindended="{{g}}" binderror="{{h}}" bindloadedmetadata="{{i}}" bindwaiting="{{j}}" bindcanplay="{{k}}" bindtimeupdate="{{l}}"></video><view wx:if="{{m}}" class="video-loading data-v-ced34889"><text class="data-v-ced34889">📹 视频加载中...</text></view><view wx:if="{{n}}" class="speaking-indicator data-v-ced34889"><text class="pulse data-v-ced34889">🔊 正在说话...</text></view></view><scroll-view scroll-y class="chat-history data-v-ced34889" scroll-top="{{q}}" scroll-with-animation><view wx:for="{{o}}" wx:for-item="msg" wx:key="d" class="{{['data-v-ced34889', 'message', msg.e]}}"><view class="message-avatar data-v-ced34889">{{msg.a}}</view><view class="message-content data-v-ced34889"><text class="message-text data-v-ced34889">{{msg.b}}</text><text class="message-time data-v-ced34889">{{msg.c}}</text></view></view><view wx:if="{{p}}" class="empty-hint data-v-ced34889"><text class="data-v-ced34889">👋 开始对话吧</text></view></scroll-view><view class="controls data-v-ced34889"><view wx:if="{{r}}" class="form-section data-v-ced34889"><view class="form-label data-v-ced34889">方言</view><picker class="data-v-ced34889" mode="selector" range="{{t}}" bindchange="{{v}}"><view class="picker-large data-v-ced34889">{{s}}</view></picker></view><view wx:if="{{w}}" class="form-section data-v-ced34889"><view class="form-label data-v-ced34889">语言提示(可选)</view><picker class="data-v-ced34889" mode="selector" range="{{y}}" bindchange="{{z}}"><view class="picker-large data-v-ced34889">{{x}}</view></picker><view class="hint-text data-v-ced34889">💡 仅处理第一个值;不设置不生效</view></view><view class="control-row data-v-ced34889"><button wx:if="{{A}}" class="talk-btn data-v-ced34889" bindtap="{{B}}"> 🎤 开始说话 </button><button wx:if="{{C}}" class="talk-btn recording data-v-ced34889" bindtap="{{D}}"> ⏹️ 停止录音 </button><button wx:if="{{E}}" class="talk-btn processing data-v-ced34889" disabled> ⏳ {{F}}</button></view><view class="control-row data-v-ced34889"><button class="hangup-btn data-v-ced34889" bindtap="{{G}}"> 📞 挂断 </button></view></view></view>
<view class="video-call-container data-v-0f1482ae"><view class="header data-v-0f1482ae"><text class="caller-name data-v-0f1482ae">📹 与{{a}}视频通话</text><text class="call-duration data-v-0f1482ae">{{b}}</text></view><view class="video-section data-v-0f1482ae"><video wx:if="{{c}}" src="{{d}}" loop="{{false}}" autoplay="{{true}}" id="videoPlayer" show-center-play-btn="{{false}}" show-play-btn="{{false}}" controls="{{false}}" enable-progress-gesture="{{false}}" show-progress="{{false}}" show-fullscreen-btn="{{false}}" show-loading="{{true}}" object-fit="{{'contain'}}" poster="{{''}}" class="video-player data-v-0f1482ae" bindplay="{{e}}" bindpause="{{f}}" bindended="{{g}}" binderror="{{h}}" bindloadedmetadata="{{i}}" bindwaiting="{{j}}" bindcanplay="{{k}}" bindtimeupdate="{{l}}"></video><view class="ai-tag data-v-0f1482ae"><text class="ai-tag-text data-v-0f1482ae">AI生成</text></view><view wx:if="{{m}}" class="video-loading data-v-0f1482ae"><text class="data-v-0f1482ae">📹 视频加载中...</text></view><view wx:if="{{n}}" class="speaking-indicator data-v-0f1482ae"><text class="pulse data-v-0f1482ae">🔊 正在说话...</text></view></view><scroll-view scroll-y class="chat-history data-v-0f1482ae" scroll-top="{{q}}" scroll-with-animation><view wx:for="{{o}}" wx:for-item="msg" wx:key="d" class="{{['data-v-0f1482ae', 'message', msg.e]}}"><view class="message-avatar data-v-0f1482ae">{{msg.a}}</view><view class="message-content data-v-0f1482ae"><text class="message-text data-v-0f1482ae">{{msg.b}}</text><text class="message-time data-v-0f1482ae">{{msg.c}}</text></view></view><view wx:if="{{p}}" class="empty-hint data-v-0f1482ae"><text class="data-v-0f1482ae">👋 开始对话吧</text></view></scroll-view><view class="controls data-v-0f1482ae"><view wx:if="{{r}}" class="form-section data-v-0f1482ae"><view class="form-label data-v-0f1482ae">方言</view><picker class="data-v-0f1482ae" mode="selector" range="{{t}}" bindchange="{{v}}"><view class="picker-large data-v-0f1482ae">{{s}}</view></picker></view><view wx:if="{{w}}" class="form-section data-v-0f1482ae"><view class="form-label data-v-0f1482ae">语言提示(可选)</view><picker class="data-v-0f1482ae" mode="selector" range="{{y}}" bindchange="{{z}}"><view class="picker-large data-v-0f1482ae">{{x}}</view></picker><view class="hint-text data-v-0f1482ae">💡 仅处理第一个值;不设置不生效</view></view><view class="control-row data-v-0f1482ae"><button wx:if="{{A}}" class="talk-btn data-v-0f1482ae" bindtap="{{B}}"> 🎤 开始说话 </button><button wx:if="{{C}}" class="talk-btn recording data-v-0f1482ae" bindtap="{{D}}"> ⏹️ 停止录音 </button><button wx:if="{{E}}" class="talk-btn processing data-v-0f1482ae" disabled> ⏳ {{F}}</button></view><view class="control-row data-v-0f1482ae"><button class="hangup-btn data-v-0f1482ae" bindtap="{{G}}"> 📞 挂断 </button></view></view></view>

View File

@ -1 +1 @@
.video-call-container.data-v-ced34889{height:100vh;display:flex;flex-direction:column;background:#000}.header.data-v-ced34889{padding:40rpx 40rpx 40rpx 24rpx;padding-top:calc(40rpx + constant(safe-area-inset-top));padding-top:calc(40rpx + env(safe-area-inset-top));background:rgba(0,0,0,.8);display:flex;justify-content:space-between;align-items:center;position:relative;z-index:10}.caller-name.data-v-ced34889{font-size:32rpx;font-weight:700;color:#fff}.call-duration.data-v-ced34889{font-size:28rpx;color:#4caf50;font-family:monospace}.video-section.data-v-ced34889{flex:1;position:relative;background:#000;overflow:hidden;z-index:1}.video-player.data-v-ced34889{width:100%;height:100%;position:relative;z-index:1;pointer-events:none}.video-loading.data-v-ced34889{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.7);padding:30rpx 50rpx;border-radius:20rpx;color:#fff;font-size:28rpx;z-index:20;pointer-events:auto}.speaking-indicator.data-v-ced34889{position:absolute;top:20rpx;right:20rpx;background:rgba(76,175,80,.9);padding:16rpx 32rpx;border-radius:40rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.3);z-index:20;pointer-events:auto}.pulse.data-v-ced34889{color:#fff;font-size:24rpx;font-weight:700;animation:pulse-ced34889 1s infinite}@keyframes pulse-ced34889{0%,to{opacity:1}50%{opacity:.5}}.chat-history.data-v-ced34889{height:300rpx;background:rgba(255,255,255,.95);padding:20rpx 20rpx 20rpx 10rpx;position:relative;z-index:10}.empty-hint.data-v-ced34889{text-align:center;padding:60rpx 0;color:#999;font-size:28rpx}.message.data-v-ced34889{display:flex;margin-bottom:20rpx;animation:slideIn-ced34889 .3s ease}@keyframes slideIn-ced34889{0%{opacity:0;transform:translateY(20rpx)}to{opacity:1;transform:translateY(0)}}.user-message.data-v-ced34889{flex-direction:row-reverse}.message-avatar.data-v-ced34889{font-size:40rpx;margin:0 16rpx}.message-content.data-v-ced34889{max-width:70%;padding:20rpx;border-radius:16rpx;background:#e3f2fd}.user-message .message-content.data-v-ced34889{background:#c8e6c9}.message-text.data-v-ced34889{font-size:28rpx;color:#333;display:block;margin-bottom:8rpx;line-height:1.5}.message-time.data-v-ced34889{font-size:22rpx;color:#999}.controls.data-v-ced34889{padding:30rpx 30rpx 30rpx 14rpx;background:rgba(0,0,0,.8);position:relative;z-index:10}.control-row.data-v-ced34889{margin-bottom:20rpx}.control-row.data-v-ced34889:last-child{margin-bottom:0}.talk-btn.data-v-ced34889{width:100%;padding:32rpx;background:#4caf50;color:#fff;border:none;border-radius:50rpx;font-size:32rpx;font-weight:700;box-shadow:0 8rpx 16rpx rgba(76,175,80,.3)}.talk-btn.recording.data-v-ced34889{background:#f44336;animation:pulse-ced34889 1s infinite}.talk-btn.processing.data-v-ced34889{background:#999}.talk-btn[disabled].data-v-ced34889{opacity:.6}.hangup-btn.data-v-ced34889{width:100%;padding:32rpx;background:#f44336;color:#fff;border:none;border-radius:50rpx;font-size:32rpx;font-weight:700;box-shadow:0 8rpx 16rpx rgba(244,67,54,.3)}
.video-call-container.data-v-0f1482ae{height:100vh;display:flex;flex-direction:column;background:#000}.header.data-v-0f1482ae{padding:40rpx 40rpx 40rpx 24rpx;padding-top:calc(40rpx + constant(safe-area-inset-top));padding-top:calc(40rpx + env(safe-area-inset-top));background:rgba(0,0,0,.8);display:flex;justify-content:space-between;align-items:center;position:relative;z-index:10}.caller-name.data-v-0f1482ae{font-size:32rpx;font-weight:700;color:#fff}.call-duration.data-v-0f1482ae{font-size:28rpx;color:#4caf50;font-family:monospace}.video-section.data-v-0f1482ae{flex:1;position:relative;background:#000;overflow:hidden;z-index:1}.ai-tag.data-v-0f1482ae{position:absolute;top:100rpx;right:24rpx;z-index:100;background:rgba(0,0,0,.6);padding:8rpx 20rpx;border-radius:30rpx;-webkit-backdrop-filter:blur(10rpx);backdrop-filter:blur(10rpx)}.ai-tag-text.data-v-0f1482ae{font-size:22rpx;color:#fff;font-weight:500}.video-player.data-v-0f1482ae{width:100%;height:100%;position:relative;z-index:1;pointer-events:none}.video-loading.data-v-0f1482ae{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.7);padding:30rpx 50rpx;border-radius:20rpx;color:#fff;font-size:28rpx;z-index:20;pointer-events:auto}.speaking-indicator.data-v-0f1482ae{position:absolute;top:20rpx;right:20rpx;background:rgba(76,175,80,.9);padding:16rpx 32rpx;border-radius:40rpx;box-shadow:0 4rpx 12rpx rgba(0,0,0,.3);z-index:20;pointer-events:auto}.pulse.data-v-0f1482ae{color:#fff;font-size:24rpx;font-weight:700;animation:pulse-0f1482ae 1s infinite}@keyframes pulse-0f1482ae{0%,to{opacity:1}50%{opacity:.5}}.chat-history.data-v-0f1482ae{height:300rpx;background:rgba(255,255,255,.95);padding:20rpx 20rpx 20rpx 10rpx;position:relative;z-index:10}.empty-hint.data-v-0f1482ae{text-align:center;padding:60rpx 0;color:#999;font-size:28rpx}.message.data-v-0f1482ae{display:flex;margin-bottom:20rpx;animation:slideIn-0f1482ae .3s ease}@keyframes slideIn-0f1482ae{0%{opacity:0;transform:translateY(20rpx)}to{opacity:1;transform:translateY(0)}}.user-message.data-v-0f1482ae{flex-direction:row-reverse}.message-avatar.data-v-0f1482ae{font-size:40rpx;margin:0 16rpx}.message-content.data-v-0f1482ae{max-width:70%;padding:20rpx;border-radius:16rpx;background:#e3f2fd}.user-message .message-content.data-v-0f1482ae{background:#c8e6c9}.message-text.data-v-0f1482ae{font-size:28rpx;color:#333;display:block;margin-bottom:8rpx;line-height:1.5}.message-time.data-v-0f1482ae{font-size:22rpx;color:#999}.controls.data-v-0f1482ae{padding:30rpx 30rpx 30rpx 14rpx;background:rgba(0,0,0,.8);position:relative;z-index:10}.control-row.data-v-0f1482ae{margin-bottom:20rpx}.control-row.data-v-0f1482ae:last-child{margin-bottom:0}.talk-btn.data-v-0f1482ae{width:100%;padding:32rpx;background:#4caf50;color:#fff;border:none;border-radius:50rpx;font-size:32rpx;font-weight:700;box-shadow:0 8rpx 16rpx rgba(76,175,80,.3)}.talk-btn.recording.data-v-0f1482ae{background:#f44336;animation:pulse-0f1482ae 1s infinite}.talk-btn.processing.data-v-0f1482ae{background:#999}.talk-btn[disabled].data-v-0f1482ae{opacity:.6}.hangup-btn.data-v-0f1482ae{width:100%;padding:32rpx;background:#f44336;color:#fff;border:none;border-radius:50rpx;font-size:32rpx;font-weight:700;box-shadow:0 8rpx 16rpx rgba(244,67,54,.3)}

View File

@ -1 +1 @@
"use strict";const e=require("../../common/vendor.js"),s=require("../../config/api.js"),t={data:()=>({imageUrl:"",imageFile:null,prompt:"",promptPlaceholder:"描述你想要的视频效果,支持中文,例如:一个人在微笑着说话,背景是温馨的客厅",duration:10,durations:[2,3,4,5,6,8,10,12],videoName:"",generating:!1,progress:0,progressText:"准备中...",generatedVideo:"",message:{text:"",type:"info"}}),methods:{chooseImage(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:s=>{const t=s.tempFilePaths[0],r=s.tempFiles&&s.tempFiles[0]?s.tempFiles[0]:null,o=e=>{this.imageUrl=e,this.imageFile=r,this.showMessage("照片已选择","success")};e.index.getFileInfo({filePath:t,success:s=>{const r=2097152;if(s.size&&s.size>r){this.showMessage("图片超过2MB正在自动压缩...","info");const s=[60,40,20],i=(t,a)=>{t>=s.length?this.showMessage("图片压缩后仍超过2MB请换一张更小的图片建议拍照/截图后再上传)","error"):e.index.compressImage({src:a,quality:s[t],success:s=>{e.index.getFileInfo({filePath:s.tempFilePath,success:e=>{e.size&&e.size<=r?o(s.tempFilePath):i(t+1,s.tempFilePath)},fail:e=>{console.error("获取压缩后文件信息失败:",e),i(t+1,s.tempFilePath)}})},fail:e=>{console.error("压缩图片失败:",e),this.showMessage("图片过大且压缩失败,请换一张更小的图片","error")}})};i(0,t)}else o(t)},fail:e=>{console.error("获取文件信息失败:",e),o(t)}})},fail:e=>{console.error("选择图片失败:",e),this.showMessage("选择图片失败","error")}})},async generateVideo(){if(this.imageUrl){this.generating=!0,this.progress=0,this.progressText="正在上传照片...";try{this.progress=10,this.progressText="照片上传中...";const e=await s.uploadFile({url:"/api/photo-revival/volcengine-video",filePath:this.imageUrl,name:"photo",formData:{text:"",prompt:this.prompt||"",duration:this.duration,name:this.videoName||"火山引擎视频"}});this.progress=30,this.progressText="视频生成中,请稍候...";const t=setInterval((()=>{this.progress<90&&(this.progress+=2)}),2e3);setTimeout((()=>{if(clearInterval(t),this.progress=100,this.progressText="视频生成完成!","success"!==e.status)throw new Error(e.message||"视频生成失败");this.generatedVideo=s.API_BASE+e.videoUrl,this.showMessage("视频生成成功!","success"),this.generating=!1}),3e3)}catch(e){console.error("生成视频失败:",e),this.showMessage("生成失败: "+(e.message||"未知错误"),"error"),this.generating=!1,this.progress=0}}else this.showMessage("请先上传照片","error")},saveToAlbum(){this.generatedVideo?e.index.downloadFile({url:this.generatedVideo,success:s=>{200===s.statusCode&&e.index.saveVideoToPhotosAlbum({filePath:s.tempFilePath,success:()=>{this.showMessage("已保存到相册","success")},fail:e=>{console.error("保存失败:",e),this.showMessage("保存失败,请检查相册权限","error")}})},fail:e=>{console.error("下载失败:",e),this.showMessage("下载失败","error")}}):this.showMessage("没有可保存的视频","error")},reset(){this.imageUrl="",this.imageFile=null,this.prompt="",this.duration=10,this.videoName="",this.generatedVideo="",this.progress=0,this.progressText="准备中...",this.message.text=""},showMessage(e,s="info"){this.message={text:e,type:s},setTimeout((()=>{this.message.text=""}),3e3)}}};const r=e._export_sfc(t,[["render",function(s,t,r,o,i,a){return e.e({a:i.message.text},i.message.text?{b:e.t(i.message.text),c:e.n(i.message.type)}:{},{d:i.imageUrl},i.imageUrl?{e:i.imageUrl}:{},{f:e.o(((...e)=>a.chooseImage&&a.chooseImage(...e))),g:i.promptPlaceholder,h:i.prompt,i:e.o((e=>i.prompt=e.detail.value)),j:e.t(i.prompt.length),k:e.f(i.durations,((s,t,r)=>({a:e.t(s),b:s,c:e.n(i.duration===s?"active":""),d:e.o((e=>i.duration=s),s)}))),l:i.videoName,m:e.o((e=>i.videoName=e.detail.value)),n:i.generating},(i.generating,{}),{o:!i.imageUrl||i.generating,p:e.o(((...e)=>a.generateVideo&&a.generateVideo(...e))),q:i.generating},i.generating?{r:e.t(i.progressText),s:i.progress+"%"}:{},{t:i.generatedVideo},i.generatedVideo?{v:i.generatedVideo,w:e.o(((...e)=>a.saveToAlbum&&a.saveToAlbum(...e))),x:e.o(((...e)=>a.reset&&a.reset(...e)))}:{})}],["__scopeId","data-v-2ed74c00"]]);wx.createPage(r);
"use strict";const e=require("../../common/vendor.js"),s=require("../../config/api.js"),t={data:()=>({imageUrl:"",imageFile:null,prompt:"",promptPlaceholder:"描述你想要的视频效果,支持中文,例如:一个人在微笑着说话,背景是温馨的客厅",duration:10,durations:[2,3,4,5,6,8,10,12],videoName:"",generating:!1,progress:0,progressText:"准备中...",generatedVideo:"",message:{text:"",type:"info"}}),methods:{chooseImage(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:s=>{const t=s.tempFilePaths[0],r=s.tempFiles&&s.tempFiles[0]?s.tempFiles[0]:null,o=e=>{this.imageUrl=e,this.imageFile=r,this.showMessage("照片已选择","success")};e.index.getFileInfo({filePath:t,success:s=>{const r=2097152;if(s.size&&s.size>r){this.showMessage("图片超过2MB正在自动压缩...","info");const s=[60,40,20],i=(t,a)=>{t>=s.length?this.showMessage("图片压缩后仍超过2MB请换一张更小的图片建议拍照/截图后再上传)","error"):e.index.compressImage({src:a,quality:s[t],success:s=>{e.index.getFileInfo({filePath:s.tempFilePath,success:e=>{e.size&&e.size<=r?o(s.tempFilePath):i(t+1,s.tempFilePath)},fail:e=>{console.error("获取压缩后文件信息失败:",e),i(t+1,s.tempFilePath)}})},fail:e=>{console.error("压缩图片失败:",e),this.showMessage("图片过大且压缩失败,请换一张更小的图片","error")}})};i(0,t)}else o(t)},fail:e=>{console.error("获取文件信息失败:",e),o(t)}})},fail:e=>{console.error("选择图片失败:",e),this.showMessage("选择图片失败","error")}})},async generateVideo(){if(this.imageUrl){this.generating=!0,this.progress=0,this.progressText="正在上传照片...";try{this.progress=10,this.progressText="照片上传中...";const e=await s.uploadFile({url:"/api/photo-revival/volcengine-video",filePath:this.imageUrl,name:"photo",formData:{text:"",prompt:this.prompt||"",duration:this.duration,name:this.videoName||"火山引擎视频"}});this.progress=30,this.progressText="视频生成中,请稍候...";const t=setInterval((()=>{this.progress<90&&(this.progress+=2)}),2e3);setTimeout((()=>{if(clearInterval(t),this.progress=100,this.progressText="视频生成完成!","success"!==e.status)throw new Error(e.message||"视频生成失败");this.generatedVideo=s.API_BASE+e.videoUrl,this.showMessage("视频生成成功!","success"),this.generating=!1}),3e3)}catch(e){console.error("生成视频失败:",e),this.showMessage("生成失败: "+(e.message||"未知错误"),"error"),this.generating=!1,this.progress=0}}else this.showMessage("请先上传照片","error")},saveToAlbum(){this.generatedVideo?e.index.downloadFile({url:this.generatedVideo,success:s=>{200===s.statusCode&&e.index.saveVideoToPhotosAlbum({filePath:s.tempFilePath,success:()=>{this.showMessage("已保存到相册","success")},fail:e=>{console.error("保存失败:",e),this.showMessage("保存失败,请检查相册权限","error")}})},fail:e=>{console.error("下载失败:",e),this.showMessage("下载失败","error")}}):this.showMessage("没有可保存的视频","error")},reset(){this.imageUrl="",this.imageFile=null,this.prompt="",this.duration=10,this.videoName="",this.generatedVideo="",this.progress=0,this.progressText="准备中...",this.message.text=""},showMessage(e,s="info"){this.message={text:e,type:s},setTimeout((()=>{this.message.text=""}),3e3)}}};const r=e._export_sfc(t,[["render",function(s,t,r,o,i,a){return e.e({a:i.message.text},i.message.text?{b:e.t(i.message.text),c:e.n(i.message.type)}:{},{d:i.imageUrl},i.imageUrl?{e:i.imageUrl}:{},{f:e.o(((...e)=>a.chooseImage&&a.chooseImage(...e))),g:i.promptPlaceholder,h:i.prompt,i:e.o((e=>i.prompt=e.detail.value)),j:e.t(i.prompt.length),k:e.f(i.durations,((s,t,r)=>({a:e.t(s),b:s,c:e.n(i.duration===s?"active":""),d:e.o((e=>i.duration=s),s)}))),l:i.videoName,m:e.o((e=>i.videoName=e.detail.value)),n:i.generating},(i.generating,{}),{o:!i.imageUrl||i.generating,p:e.o(((...e)=>a.generateVideo&&a.generateVideo(...e))),q:i.generating},i.generating?{r:e.t(i.progressText),s:i.progress+"%"}:{},{t:i.generatedVideo},i.generatedVideo?{v:i.generatedVideo,w:e.o(((...e)=>a.saveToAlbum&&a.saveToAlbum(...e))),x:e.o(((...e)=>a.reset&&a.reset(...e)))}:{})}],["__scopeId","data-v-041223dc"]]);wx.createPage(r);

View File

@ -1 +1 @@
<view class="video-gen-page data-v-2ed74c00"><view class="header data-v-2ed74c00"><text class="title data-v-2ed74c00">🎬 AI图生视频</text><text class="subtitle data-v-2ed74c00">火山引擎 · doubao-seedance-1.0-pro</text></view><view wx:if="{{a}}" class="{{['data-v-2ed74c00', 'message', c]}}">{{b}}</view><scroll-view scroll-y class="content data-v-2ed74c00"><view class="section data-v-2ed74c00"><view class="section-title data-v-2ed74c00">📸 上传照片</view><view class="upload-area data-v-2ed74c00" bindtap="{{f}}"><image wx:if="{{d}}" src="{{e}}" class="preview-image data-v-2ed74c00" mode="aspectFit"></image><view wx:else class="upload-placeholder data-v-2ed74c00"><text class="upload-icon data-v-2ed74c00">📷</text><text class="upload-text data-v-2ed74c00">点击上传照片</text><text class="upload-hint data-v-2ed74c00">支持 JPG、PNG 格式</text></view></view></view><view class="section data-v-2ed74c00"><view class="section-title data-v-2ed74c00">✍️ 提示词(可选)</view><block wx:if="{{r0}}"><textarea class="prompt-input data-v-2ed74c00" placeholder="{{g}}" maxlength="{{500}}" value="{{h}}" bindinput="{{i}}"></textarea></block><view class="char-count data-v-2ed74c00">{{j}}/500</view></view><view class="section data-v-2ed74c00"><view class="section-title data-v-2ed74c00">⏱️ 视频时长</view><view class="duration-selector data-v-2ed74c00"><view wx:for="{{k}}" wx:for-item="d" wx:key="b" class="{{['data-v-2ed74c00', 'duration-item', d.c]}}" bindtap="{{d.d}}">{{d.a}}秒 </view></view></view><view class="section data-v-2ed74c00"><view class="section-title data-v-2ed74c00">📝 视频名称(可选)</view><input class="name-input data-v-2ed74c00" placeholder="给视频起个名字" maxlength="{{50}}" value="{{l}}" bindinput="{{m}}"/></view><view class="action-section data-v-2ed74c00"><button class="generate-btn data-v-2ed74c00" disabled="{{o}}" bindtap="{{p}}"><text wx:if="{{n}}" class="data-v-2ed74c00">⏳ 生成中...</text><text wx:else class="data-v-2ed74c00">🎬 生成视频</text></button></view><view wx:if="{{q}}" class="progress-section data-v-2ed74c00"><view class="progress-text data-v-2ed74c00">{{r}}</view><view class="progress-bar data-v-2ed74c00"><view class="progress-fill data-v-2ed74c00" style="{{'width:' + s}}"></view></view></view><view wx:if="{{t}}" class="result-section data-v-2ed74c00"><view class="section-title data-v-2ed74c00">✅ 生成成功</view><video src="{{v}}" class="result-video data-v-2ed74c00" controls autoplay></video><view class="result-actions data-v-2ed74c00"><button class="action-btn data-v-2ed74c00" bindtap="{{w}}">💾 保存到相册</button><button class="action-btn secondary data-v-2ed74c00" bindtap="{{x}}">🔄 重新生成</button></view></view><view class="tips-section data-v-2ed74c00"><view class="tips-title data-v-2ed74c00">💡 使用提示</view><view class="tip-item data-v-2ed74c00">• 支持 JPG、PNG 格式的照片</view><view class="tip-item data-v-2ed74c00">• 提示词支持中文,可描述动作、表情、场景等</view><view class="tip-item data-v-2ed74c00">• 视频时长支持 2-12 秒</view><view class="tip-item data-v-2ed74c00">• 生成时间约 1-3 分钟,请耐心等待</view><view class="tip-item data-v-2ed74c00">• 使用火山引擎 doubao-seedance-1.0-pro 模型</view></view></scroll-view></view>
<view class="video-gen-page data-v-041223dc"><view class="header data-v-041223dc"><text class="title data-v-041223dc">🎬 AI图生视频</text><text class="subtitle data-v-041223dc">火山引擎 · doubao-seedance-1.0-pro</text></view><view wx:if="{{a}}" class="{{['data-v-041223dc', 'message', c]}}">{{b}}</view><scroll-view scroll-y class="content data-v-041223dc"><view class="section data-v-041223dc"><view class="section-title data-v-041223dc">📸 上传照片</view><view class="upload-area data-v-041223dc" bindtap="{{f}}"><image wx:if="{{d}}" src="{{e}}" class="preview-image data-v-041223dc" mode="aspectFit"></image><view wx:else class="upload-placeholder data-v-041223dc"><text class="upload-icon data-v-041223dc">📷</text><text class="upload-text data-v-041223dc">点击上传照片</text><text class="upload-hint data-v-041223dc">支持 JPG、PNG 格式</text></view></view></view><view class="section data-v-041223dc"><view class="section-title data-v-041223dc">✍️ 提示词(可选)</view><block wx:if="{{r0}}"><textarea class="prompt-input data-v-041223dc" placeholder="{{g}}" maxlength="{{500}}" value="{{h}}" bindinput="{{i}}"></textarea></block><view class="char-count data-v-041223dc">{{j}}/500</view></view><view class="section data-v-041223dc"><view class="section-title data-v-041223dc">⏱️ 视频时长</view><view class="duration-selector data-v-041223dc"><view wx:for="{{k}}" wx:for-item="d" wx:key="b" class="{{['data-v-041223dc', 'duration-item', d.c]}}" bindtap="{{d.d}}">{{d.a}}秒 </view></view></view><view class="section data-v-041223dc"><view class="section-title data-v-041223dc">📝 视频名称(可选)</view><input class="name-input data-v-041223dc" placeholder="给视频起个名字" maxlength="{{50}}" value="{{l}}" bindinput="{{m}}"/></view><view class="action-section data-v-041223dc"><button class="generate-btn data-v-041223dc" disabled="{{o}}" bindtap="{{p}}"><text wx:if="{{n}}" class="data-v-041223dc">⏳ 生成中...</text><text wx:else class="data-v-041223dc">🎬 生成视频</text></button><text class="ai-disclaimer data-v-041223dc">本服务为AI生成内容结果仅供参考</text></view><view wx:if="{{q}}" class="progress-section data-v-041223dc"><view class="progress-text data-v-041223dc">{{r}}</view><view class="progress-bar data-v-041223dc"><view class="progress-fill data-v-041223dc" style="{{'width:' + s}}"></view></view></view><view wx:if="{{t}}" class="result-section data-v-041223dc"><view class="section-title data-v-041223dc">✅ 生成成功</view><view class="video-container data-v-041223dc"><video src="{{v}}" class="result-video data-v-041223dc" controls autoplay></video><view class="ai-tag data-v-041223dc"><text class="ai-tag-text data-v-041223dc">AI生成</text></view></view><view class="result-actions data-v-041223dc"><button class="action-btn data-v-041223dc" bindtap="{{w}}">💾 保存到相册</button><button class="action-btn secondary data-v-041223dc" bindtap="{{x}}">🔄 重新生成</button></view></view><view class="tips-section data-v-041223dc"><view class="tips-title data-v-041223dc">💡 使用提示</view><view class="tip-item data-v-041223dc">• 支持 JPG、PNG 格式的照片</view><view class="tip-item data-v-041223dc">• 提示词支持中文,可描述动作、表情、场景等</view><view class="tip-item data-v-041223dc">• 视频时长支持 2-12 秒</view><view class="tip-item data-v-041223dc">• 生成时间约 1-3 分钟,请耐心等待</view><view class="tip-item data-v-041223dc">• 使用火山引擎 doubao-seedance-1.0-pro 模型</view></view></scroll-view></view>

View File

@ -1 +1 @@
.video-gen-page.data-v-2ed74c00{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:20rpx}.header.data-v-2ed74c00{text-align:center;padding:40rpx 20rpx;color:#fff}.title.data-v-2ed74c00{font-size:48rpx;font-weight:700;display:block;margin-bottom:10rpx}.subtitle.data-v-2ed74c00{font-size:28rpx;opacity:.9}.message.data-v-2ed74c00{margin:20rpx;padding:20rpx;border-radius:10rpx;text-align:center;font-size:28rpx}.message.success.data-v-2ed74c00{background:#d4edda;color:#155724}.message.error.data-v-2ed74c00{background:#f8d7da;color:#721c24}.message.info.data-v-2ed74c00{background:#d1ecf1;color:#0c5460}.content.data-v-2ed74c00{height:calc(100vh - 200rpx);padding:20rpx}.section.data-v-2ed74c00{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:20rpx}.section-title.data-v-2ed74c00{font-size:32rpx;font-weight:700;margin-bottom:20rpx;color:#333}.upload-area.data-v-2ed74c00{border:2rpx dashed #ddd;border-radius:15rpx;min-height:400rpx;display:flex;align-items:center;justify-content:center;background:#f8f9fa}.upload-placeholder.data-v-2ed74c00{text-align:center}.upload-icon.data-v-2ed74c00{font-size:80rpx;display:block;margin-bottom:20rpx}.upload-text.data-v-2ed74c00{font-size:32rpx;color:#666;display:block;margin-bottom:10rpx}.upload-hint.data-v-2ed74c00{font-size:24rpx;color:#999}.preview-image.data-v-2ed74c00{width:100%;max-height:400rpx;border-radius:15rpx}.prompt-input.data-v-2ed74c00{width:100%;min-height:200rpx;padding:20rpx;border:1rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.char-count.data-v-2ed74c00{text-align:right;font-size:24rpx;color:#999;margin-top:10rpx}.duration-selector.data-v-2ed74c00{display:flex;flex-wrap:wrap;gap:15rpx}.duration-item.data-v-2ed74c00{flex:0 0 calc(25% - 12rpx);padding:20rpx;text-align:center;border:2rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.duration-item.active.data-v-2ed74c00{background:#667eea;color:#fff;border-color:#667eea}.name-input.data-v-2ed74c00{width:100%;padding:20rpx;border:1rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.action-section.data-v-2ed74c00{padding:0 20rpx;margin-bottom:20rpx}.generate-btn.data-v-2ed74c00{width:100%;padding:30rpx;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff;border:none;border-radius:15rpx;font-size:32rpx;font-weight:700}.generate-btn[disabled].data-v-2ed74c00{opacity:.6}.progress-section.data-v-2ed74c00{background:#fff;border-radius:20rpx;padding:30rpx;margin:0 20rpx 20rpx}.progress-text.data-v-2ed74c00{text-align:center;font-size:28rpx;color:#666;margin-bottom:20rpx}.progress-bar.data-v-2ed74c00{height:20rpx;background:#e0e0e0;border-radius:10rpx;overflow:hidden}.progress-fill.data-v-2ed74c00{height:100%;background:linear-gradient(90deg,#667eea,#764ba2);transition:width .3s}.result-section.data-v-2ed74c00{background:#fff;border-radius:20rpx;padding:30rpx;margin:0 20rpx 20rpx}.result-video.data-v-2ed74c00{width:100%;height:500rpx;border-radius:15rpx;margin:20rpx 0}.result-actions.data-v-2ed74c00{display:flex;gap:20rpx}.action-btn.data-v-2ed74c00{flex:1;padding:25rpx;background:#667eea;color:#fff;border:none;border-radius:10rpx;font-size:28rpx}.action-btn.secondary.data-v-2ed74c00{background:#6c757d}.tips-section.data-v-2ed74c00{background:rgba(255,255,255,.95);border-radius:20rpx;padding:30rpx;margin:0 20rpx 40rpx}.tips-title.data-v-2ed74c00{font-size:32rpx;font-weight:700;margin-bottom:20rpx;color:#333}.tip-item.data-v-2ed74c00{font-size:26rpx;color:#666;line-height:1.8;margin-bottom:10rpx}
.video-gen-page.data-v-041223dc{min-height:100vh;background:linear-gradient(135deg,#667eea,#764ba2);padding:20rpx}.header.data-v-041223dc{text-align:center;padding:40rpx 20rpx;color:#fff}.title.data-v-041223dc{font-size:48rpx;font-weight:700;display:block;margin-bottom:10rpx}.subtitle.data-v-041223dc{font-size:28rpx;opacity:.9}.message.data-v-041223dc{margin:20rpx;padding:20rpx;border-radius:10rpx;text-align:center;font-size:28rpx}.message.success.data-v-041223dc{background:#d4edda;color:#155724}.message.error.data-v-041223dc{background:#f8d7da;color:#721c24}.message.info.data-v-041223dc{background:#d1ecf1;color:#0c5460}.content.data-v-041223dc{height:calc(100vh - 200rpx);padding:20rpx}.section.data-v-041223dc{background:#fff;border-radius:20rpx;padding:30rpx;margin-bottom:20rpx}.section-title.data-v-041223dc{font-size:32rpx;font-weight:700;margin-bottom:20rpx;color:#333}.upload-area.data-v-041223dc{border:2rpx dashed #ddd;border-radius:15rpx;min-height:400rpx;display:flex;align-items:center;justify-content:center;background:#f8f9fa}.upload-placeholder.data-v-041223dc{text-align:center}.upload-icon.data-v-041223dc{font-size:80rpx;display:block;margin-bottom:20rpx}.upload-text.data-v-041223dc{font-size:32rpx;color:#666;display:block;margin-bottom:10rpx}.upload-hint.data-v-041223dc{font-size:24rpx;color:#999}.preview-image.data-v-041223dc{width:100%;max-height:400rpx;border-radius:15rpx}.prompt-input.data-v-041223dc{width:100%;min-height:200rpx;padding:20rpx;border:1rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.char-count.data-v-041223dc{text-align:right;font-size:24rpx;color:#999;margin-top:10rpx}.duration-selector.data-v-041223dc{display:flex;flex-wrap:wrap;gap:15rpx}.duration-item.data-v-041223dc{flex:0 0 calc(25% - 12rpx);padding:20rpx;text-align:center;border:2rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.duration-item.active.data-v-041223dc{background:#667eea;color:#fff;border-color:#667eea}.name-input.data-v-041223dc{width:100%;padding:20rpx;border:1rpx solid #e0e0e0;border-radius:10rpx;font-size:28rpx;background:#f8f9fa}.action-section.data-v-041223dc{padding:0 20rpx;margin-bottom:20rpx}.generate-btn.data-v-041223dc{width:100%;padding:30rpx;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff!important;border:none;border-radius:15rpx;font-size:32rpx;font-weight:700}.generate-btn[disabled].data-v-041223dc{opacity:.6;color:#fff!important}.ai-disclaimer.data-v-041223dc{display:block;text-align:center;font-size:22rpx;color:rgba(100,100,100,.6);margin-top:16rpx;letter-spacing:.5rpx}.progress-section.data-v-041223dc{background:#fff;border-radius:20rpx;padding:30rpx;margin:0 20rpx 20rpx}.progress-text.data-v-041223dc{text-align:center;font-size:28rpx;color:#666;margin-bottom:20rpx}.progress-bar.data-v-041223dc{height:20rpx;background:#e0e0e0;border-radius:10rpx;overflow:hidden}.progress-fill.data-v-041223dc{height:100%;background:linear-gradient(90deg,#667eea,#764ba2);transition:width .3s}.result-section.data-v-041223dc{background:#fff;border-radius:20rpx;padding:30rpx;margin:0 20rpx 20rpx}.result-section.data-v-041223dc{position:relative}.video-container.data-v-041223dc{position:relative;width:100%;height:500rpx;border-radius:15rpx;overflow:hidden;margin:20rpx 0}.result-video.data-v-041223dc{width:100%;height:100%;border-radius:15rpx}.ai-tag.data-v-041223dc{position:absolute;top:16rpx;right:16rpx;z-index:100;background:rgba(0,0,0,.6);padding:8rpx 20rpx;border-radius:30rpx;-webkit-backdrop-filter:blur(10rpx);backdrop-filter:blur(10rpx)}.ai-tag-text.data-v-041223dc{font-size:22rpx;color:#fff;font-weight:500}.result-actions.data-v-041223dc{display:flex;gap:20rpx}.action-btn.data-v-041223dc{flex:1;padding:25rpx;background:#667eea;color:#fff;border:none;border-radius:10rpx;font-size:28rpx}.action-btn.secondary.data-v-041223dc{background:#6c757d}.tips-section.data-v-041223dc{background:rgba(255,255,255,.95);border-radius:20rpx;padding:30rpx;margin:0 20rpx 40rpx}.tips-title.data-v-041223dc{font-size:32rpx;font-weight:700;margin-bottom:20rpx;color:#333}.tip-item.data-v-041223dc{font-size:26rpx;color:#666;line-height:1.8;margin-bottom:10rpx}

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<view class="player-container data-v-d19743cf"><view class="header data-v-d19743cf"><view class="back-btn data-v-d19743cf" bindtap="{{a}}">← 返回</view><text class="title data-v-d19743cf">{{b}}</text><view class="placeholder data-v-d19743cf"></view></view><view wx:if="{{c}}" class="error-overlay data-v-d19743cf"><view class="error-content data-v-d19743cf"><view class="error-icon data-v-d19743cf">⚠️</view><text class="error-title data-v-d19743cf">视频加载失败</text><text class="error-message data-v-d19743cf">{{d}}</text><view class="error-actions data-v-d19743cf"><view class="error-btn retry-btn data-v-d19743cf" bindtap="{{e}}">重新加载</view><view class="error-btn back-btn-error data-v-d19743cf" bindtap="{{f}}">返回</view></view></view></view><view wx:if="{{g}}" class="loading-overlay data-v-d19743cf" bindtap="{{m}}"><view class="loading-content data-v-d19743cf"><view class="loading-spinner data-v-d19743cf"></view><text class="loading-text data-v-d19743cf">{{h}}</text><text wx:if="{{i}}" class="loading-hint data-v-d19743cf">{{j}}</text><view wx:if="{{k}}" class="progress-bar data-v-d19743cf"><view class="progress-fill data-v-d19743cf" style="{{'width:' + l}}"></view></view></view></view><video wx:if="{{n}}" id="videoPlayer" src="{{o}}" class="video-player data-v-d19743cf" controls="{{false}}" muted="{{p}}" show-center-play-btn="{{false}}" enable-play-gesture="{{true}}" object-fit="{{'contain'}}" show-fullscreen-btn="{{false}}" show-play-btn="{{false}}" show-progress="{{false}}" enable-progress-gesture="{{false}}" enable-auto-rotation="{{false}}" show-mute-btn="{{false}}" show-loading="{{false}}" binderror="{{q}}" bindplay="{{r}}" bindpause="{{s}}" bindwaiting="{{t}}" bindended="{{v}}" bindtimeupdate="{{w}}" bindloadedmetadata="{{x}}"></video><view wx:if="{{y}}" class="play-overlay data-v-d19743cf" bindtap="{{A}}"><view wx:if="{{z}}" class="play-button data-v-d19743cf"></view></view></view>
<view class="player-container data-v-60f68b50"><view class="header data-v-60f68b50"><view class="back-btn data-v-60f68b50" bindtap="{{a}}">← 返回</view><text class="title data-v-60f68b50">{{b}}</text><view class="placeholder data-v-60f68b50"></view></view><view wx:if="{{c}}" class="error-overlay data-v-60f68b50"><view class="error-content data-v-60f68b50"><view class="error-icon data-v-60f68b50">⚠️</view><text class="error-title data-v-60f68b50">视频加载失败</text><text class="error-message data-v-60f68b50">{{d}}</text><view class="error-actions data-v-60f68b50"><view class="error-btn retry-btn data-v-60f68b50" bindtap="{{e}}">重新加载</view><view class="error-btn back-btn-error data-v-60f68b50" bindtap="{{f}}">返回</view></view></view></view><view wx:if="{{g}}" class="loading-overlay data-v-60f68b50" bindtap="{{m}}"><view class="loading-content data-v-60f68b50"><view class="loading-spinner data-v-60f68b50"></view><text class="loading-text data-v-60f68b50">{{h}}</text><text wx:if="{{i}}" class="loading-hint data-v-60f68b50">{{j}}</text><view wx:if="{{k}}" class="progress-bar data-v-60f68b50"><view class="progress-fill data-v-60f68b50" style="{{'width:' + l}}"></view></view></view></view><video wx:if="{{n}}" id="videoPlayer" src="{{o}}" class="video-player data-v-60f68b50" controls="{{false}}" muted="{{p}}" show-center-play-btn="{{false}}" enable-play-gesture="{{true}}" object-fit="{{'contain'}}" show-fullscreen-btn="{{false}}" show-play-btn="{{false}}" show-progress="{{false}}" enable-progress-gesture="{{false}}" enable-auto-rotation="{{false}}" show-mute-btn="{{false}}" show-loading="{{false}}" binderror="{{q}}" bindplay="{{r}}" bindpause="{{s}}" bindwaiting="{{t}}" bindended="{{v}}" bindtimeupdate="{{w}}" bindloadedmetadata="{{x}}"></video><view wx:if="{{y}}" class="play-overlay data-v-60f68b50" bindtap="{{A}}"><view wx:if="{{z}}" class="play-button data-v-60f68b50"></view></view><view class="ai-tag data-v-60f68b50"><text class="ai-tag-text data-v-60f68b50">AI生成</text></view></view>

View File

@ -1 +1 @@
.player-container.data-v-d19743cf{width:100%;height:100vh;background:#000;display:flex;flex-direction:column;position:relative}.loading-overlay.data-v-d19743cf{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:999}.loading-content.data-v-d19743cf{text-align:center;display:flex;flex-direction:column;align-items:center;gap:20rpx}.loading-spinner.data-v-d19743cf{width:80rpx;height:80rpx;border:6rpx solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-d19743cf 1s linear infinite}@keyframes spin-d19743cf{to{transform:rotate(360deg)}}.loading-text.data-v-d19743cf{color:#fff;font-size:32rpx;font-weight:700}.loading-hint.data-v-d19743cf{color:rgba(255,255,255,.7);font-size:24rpx;margin-top:10rpx}.progress-bar.data-v-d19743cf{width:400rpx;height:8rpx;background:rgba(255,255,255,.2);border-radius:4rpx;overflow:hidden;margin-top:20rpx}.progress-fill.data-v-d19743cf{height:100%;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:4rpx;transition:width .3s ease}.header.data-v-d19743cf{background:rgba(0,0,0,.8);padding:60rpx 40rpx 20rpx;padding-top:calc(60rpx + constant(safe-area-inset-top));padding-top:calc(60rpx + env(safe-area-inset-top));display:flex;justify-content:space-between;align-items:center;color:#fff;position:absolute;top:0;left:0;right:0;z-index:100}.back-btn.data-v-d19743cf{font-size:32rpx;padding:16rpx;cursor:pointer}.title.data-v-d19743cf{font-size:32rpx;font-weight:700;flex:1;text-align:center}.placeholder.data-v-d19743cf{width:80rpx}.video-player.data-v-d19743cf{width:100%;height:100vh;background:#000}.play-overlay.data-v-d19743cf{position:absolute;top:0;left:0;right:0;bottom:0;z-index:50;display:flex;align-items:center;justify-content:center}.play-button.data-v-d19743cf{width:140rpx;height:140rpx;border-radius:999rpx;background:rgba(0,0,0,.45);position:relative}.play-button.data-v-d19743cf:after{content:"";position:absolute;top:50%;left:54%;transform:translate(-50%,-50%);width:0;height:0;border-top:22rpx solid transparent;border-bottom:22rpx solid transparent;border-left:34rpx solid #fff}.error-overlay.data-v-d19743cf{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.95);display:flex;align-items:center;justify-content:center;z-index:1000}.error-content.data-v-d19743cf{text-align:center;padding:60rpx;display:flex;flex-direction:column;align-items:center;gap:24rpx}.error-icon.data-v-d19743cf{font-size:120rpx;margin-bottom:20rpx}.error-title.data-v-d19743cf{color:#fff;font-size:36rpx;font-weight:700}.error-message.data-v-d19743cf{color:rgba(255,255,255,.7);font-size:28rpx;line-height:1.6}.error-actions.data-v-d19743cf{display:flex;gap:24rpx;margin-top:40rpx}.error-btn.data-v-d19743cf{padding:24rpx 48rpx;border-radius:12rpx;font-size:28rpx;cursor:pointer;transition:all .3s ease}.retry-btn.data-v-d19743cf{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.retry-btn.data-v-d19743cf:active{transform:scale(.95);opacity:.8}.back-btn-error.data-v-d19743cf{background:rgba(255,255,255,.1);color:#fff;border:2rpx solid rgba(255,255,255,.3)}.back-btn-error.data-v-d19743cf:active{transform:scale(.95);background:rgba(255,255,255,.15)}
.player-container.data-v-60f68b50{width:100%;height:100vh;background:#000;display:flex;flex-direction:column;position:relative}.loading-overlay.data-v-60f68b50{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:999}.loading-content.data-v-60f68b50{text-align:center;display:flex;flex-direction:column;align-items:center;gap:20rpx}.loading-spinner.data-v-60f68b50{width:80rpx;height:80rpx;border:6rpx solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin-60f68b50 1s linear infinite}@keyframes spin-60f68b50{to{transform:rotate(360deg)}}.loading-text.data-v-60f68b50{color:#fff;font-size:32rpx;font-weight:700}.loading-hint.data-v-60f68b50{color:rgba(255,255,255,.7);font-size:24rpx;margin-top:10rpx}.progress-bar.data-v-60f68b50{width:400rpx;height:8rpx;background:rgba(255,255,255,.2);border-radius:4rpx;overflow:hidden;margin-top:20rpx}.progress-fill.data-v-60f68b50{height:100%;background:linear-gradient(90deg,#667eea,#764ba2);border-radius:4rpx;transition:width .3s ease}.header.data-v-60f68b50{background:rgba(0,0,0,.8);padding:60rpx 40rpx 20rpx;padding-top:calc(60rpx + constant(safe-area-inset-top));padding-top:calc(60rpx + env(safe-area-inset-top));display:flex;justify-content:space-between;align-items:center;color:#fff;position:absolute;top:0;left:0;right:0;z-index:100}.back-btn.data-v-60f68b50{font-size:32rpx;padding:16rpx;cursor:pointer}.title.data-v-60f68b50{font-size:32rpx;font-weight:700;flex:1;text-align:center}.placeholder.data-v-60f68b50{width:80rpx}.video-player.data-v-60f68b50{width:100%;height:100vh;background:#000}.play-overlay.data-v-60f68b50{position:absolute;top:0;left:0;right:0;bottom:0;z-index:50;display:flex;align-items:center;justify-content:center}.play-button.data-v-60f68b50{width:140rpx;height:140rpx;border-radius:999rpx;background:rgba(0,0,0,.45);position:relative}.play-button.data-v-60f68b50:after{content:"";position:absolute;top:50%;left:54%;transform:translate(-50%,-50%);width:0;height:0;border-top:22rpx solid transparent;border-bottom:22rpx solid transparent;border-left:34rpx solid #fff}.error-overlay.data-v-60f68b50{position:absolute;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.95);display:flex;align-items:center;justify-content:center;z-index:1000}.error-content.data-v-60f68b50{text-align:center;padding:60rpx;display:flex;flex-direction:column;align-items:center;gap:24rpx}.error-icon.data-v-60f68b50{font-size:120rpx;margin-bottom:20rpx}.error-title.data-v-60f68b50{color:#fff;font-size:36rpx;font-weight:700}.error-message.data-v-60f68b50{color:rgba(255,255,255,.7);font-size:28rpx;line-height:1.6}.error-actions.data-v-60f68b50{display:flex;gap:24rpx;margin-top:40rpx}.error-btn.data-v-60f68b50{padding:24rpx 48rpx;border-radius:12rpx;font-size:28rpx;cursor:pointer;transition:all .3s ease}.retry-btn.data-v-60f68b50{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.retry-btn.data-v-60f68b50:active{transform:scale(.95);opacity:.8}.back-btn-error.data-v-60f68b50{background:rgba(255,255,255,.1);color:#fff;border:2rpx solid rgba(255,255,255,.3)}.back-btn-error.data-v-60f68b50:active{transform:scale(.95);background:rgba(255,255,255,.15)}.ai-tag.data-v-60f68b50{position:absolute;top:140rpx;right:24rpx;z-index:100;background:rgba(0,0,0,.6);padding:8rpx 20rpx;border-radius:30rpx;-webkit-backdrop-filter:blur(10rpx);backdrop-filter:blur(10rpx)}.ai-tag-text.data-v-60f68b50{font-size:22rpx;color:#fff;font-weight:500}

View File

@ -1,6 +1,6 @@
{
"libVersion": "3.12.1",
"projectname": "mp-weixin",
"projectname": "frontend-ai",
"setting": {
"urlCheck": true,
"coverView": true,