ai-clone/frontend-ai/unpackage/dist/build/mp-weixin/pages/revival/revival-original.js
2026-03-06 18:05:51 +08:00

2 lines
25 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";const e=require("../../common/vendor.js"),o=require("../../config/api.js"),t=require("../../utils/payment.js"),i={components:{PaymentModal:()=>"../../components/PaymentModal.js"},data:()=>({API_BASE:o.API_BASE,photoFile:null,photoPreview:"",modelOptions:[{value:"veo",label:"Veo",hint:"需要音色,生成说话人视频",disabled:!1,maintenanceMsg:""},{value:"volcengine",label:"火山引擎",hint:"需要音色,生成说话人视频",disabled:!1,maintenanceMsg:""}],selectedModel:"veo",selectedModelName:"Veo",modelHint:"需要音色,生成说话人视频",voices:[],voiceTypeOptions:[{value:"CLONE",label:"克隆音色"},{value:"OFFICIAL",label:"官方音色Flash"}],selectedVoiceType:"CLONE",selectedVoiceTypeLabel:"克隆音色",selectedVoiceId:"",selectedVoiceName:"",selectedDialect:"",selectedLanguageHint:"",selectedLanguageHintLabel:"",selectedSupportsDialect:!1,selectedSupportsLanguageHints:!1,languageHintOptions:["中文(zh)","英文(en)","法语(fr)","德语(de)","日语(ja)","韩语(ko)","俄语(ru)"],dialectOptions:["广东话","东北话","甘肃话","贵州话","河南话","湖北话","江西话","闽南话","宁夏话","山西话","陕西话","山东话","上海话","四川话","天津话","云南话"],videoTitle:"",text:"",showHelpModal:!1,loading:!1,loadingText:"",progress:[],videoUrl:"",audioUrl:"",localVideoPath:"",localAudioPath:"",isPlaying:!1,videoRetried:!1,paymentModalData:{show:!1,serviceType:"",serviceName:"",serviceDesc:"",price:0,orderNo:"",paymentTips:"点击确认支付后将开始生成视频"},_paymentResolve:null,_paymentReject:null,_paymentOnSuccess:null,_paymentOnFailed:null}),computed:{displayVoices(){const e=(this.voices||[]).filter((e=>e&&(e.voice_type||"CLONE")===this.selectedVoiceType));if("OFFICIAL"!==(this.selectedVoiceType||"CLONE"))return e;const o={"湾区大叔":"台湾","台湾小何":"台湾","双节棍小哥":"台湾","广州德哥":"广州","浩宇小哥":"大陆"};return e.map((e=>{const t=e&&e.voice_name?String(e.voice_name):"",i=t&&o[t]?o[t]:"";return i?{...e,voice_name:`${i}-${t}`}:e}))},canGenerate(){const e=this.modelOptions.find((e=>e.value===this.selectedModel));return(!e||!e.disabled)&&(this.photoFile&&this.videoTitle&&this.text&&this.selectedVoiceId)}},onLoad(){this.loadVoices(),this.loadModelStatus()},methods:{onVoiceTypeChange(e){const o=this.voiceTypeOptions[e.detail.value];this.selectedVoiceType=o?o.value:"CLONE",this.selectedVoiceTypeLabel=o?o.label:"克隆音色",this.selectedVoiceId="",this.selectedVoiceName="",this.selectedDialect="",this.selectedLanguageHint="",this.selectedLanguageHintLabel="",this.selectedSupportsDialect=!1,this.selectedSupportsLanguageHints=!1},showVoiceHelp(){this.showHelpModal=!0},goToUpload(){this.showHelpModal=!1,e.index.navigateTo({url:"/pages/upload-audio/upload-audio"})},getCurrentModelMaintenanceMsg(){const e=this.modelOptions.find((e=>e.value===this.selectedModel));return e&&e.disabled?e.maintenanceMsg:""},onModelChange(e){const o=e.detail.value,t=this.modelOptions[o];this.selectedModel=t.value,this.selectedModelName=t.label,this.modelHint=t.hint,console.log("[Revival] 选择模型:",this.selectedModel)},choosePhoto(){e.index.chooseImage({count:1,sizeType:["compressed"],sourceType:["album","camera"],success:e=>{this.photoFile={path:e.tempFilePaths[0],name:"photo.jpg"},this.photoPreview=e.tempFilePaths[0]},fail:o=>{e.index.showToast({title:"选择照片失败",icon:"none"})}})},chooseAudio(){},chooseAudioFileFromSystem(){},copyContentUriToLocalForAudio(e,o){},async startRecordAudio(){},loadModelStatus(){console.log("[Revival] 开始加载模型状态..."),e.index.request({url:`${this.API_BASE}/api/system/model-status`,method:"GET",success:e=>{if(console.log("[Revival] 模型状态响应:",e),200===e.statusCode&&e.data&&e.data.success){const o=e.data.data;if("true"===o.veo_disabled){const e=this.modelOptions.find((e=>"veo"===e.value));e&&(e.disabled=!0,e.maintenanceMsg=o.veo_message||"官方接口参数更新,正在处理中,暂不可用")}if("true"===o.volcengine_disabled){const e=this.modelOptions.find((e=>"volcengine"===e.value));e&&(e.disabled=!0,e.maintenanceMsg=o.volcengine_message||"官方接口参数更新,正在处理中,暂不可用")}console.log("[Revival] 模型状态已更新:",this.modelOptions)}},fail:e=>{console.error("[Revival] 加载模型状态失败:",e)}})},loadVoices(){console.log("[Revival] 开始加载音色列表..."),console.log("[Revival] API地址:",`${this.API_BASE}/api/voice/list`);const o=e.index.getStorageSync("userId")||"",t=e.index.getStorageSync("token")||"";console.log("[Revival] 用户ID:",o),e.index.request({url:`${this.API_BASE}/api/voice/list`,method:"GET",header:{"X-User-Id":o,Authorization:t?`Bearer ${t}`:""},success:o=>{if(console.log("[Revival] API响应状态码:",o.statusCode),console.log("[Revival] API响应数据:",o.data),200===o.statusCode)if(o.data&&o.data.voices){const t=["Cherry","Kai","Mochi","Bunny"];this.voices=(o.data.voices||[]).filter((e=>!(e&&e.voice&&t.includes(e.voice)))),console.log("[Revival] 音色列表:",this.voices),console.log("[Revival] 音色数量:",this.voices.length),this.voices.length>0?(this.selectedVoiceId=this.voices[0].voice,this.selectedVoiceName=this.voices[0].voice_name||this.voices[0].voice,this.selectedDialect="",console.log("[Revival] 默认选中音色:",this.selectedVoiceId)):(console.log("[Revival] 音色列表为空"),e.index.showToast({title:"暂无可用音色,请先创建",icon:"none"}))}else console.error("[Revival] 响应数据格式错误:",o.data),this.voices=[];else console.error("[Revival] 请求失败,状态码:",o.statusCode)},fail:o=>{console.error("[Revival] 加载音色列表失败:",o),e.index.showToast({title:"加载音色列表失败",icon:"none"})}})},onVoiceChange(e){const o=this.displayVoices[e.detail.value];this.selectedVoiceId=o.voice,this.selectedVoiceName=o.voice_name||o.voice,this.selectedVoiceType=o.voice_type||this.selectedVoiceType||"CLONE",this.selectedVoiceTypeLabel="OFFICIAL"===this.selectedVoiceType?"官方音色Flash":"克隆音色",this.selectedDialect="",this.selectedLanguageHint="",this.selectedLanguageHintLabel="",this.selectedSupportsDialect=!!o.supportsDialect,this.selectedSupportsLanguageHints=!!o.supportsLanguageHints,"OFFICIAL"===(this.selectedVoiceType||"CLONE")&&(this.selectedDialect="",this.selectedLanguageHint="",this.selectedLanguageHintLabel="",this.selectedSupportsDialect=!1,this.selectedSupportsLanguageHints=!1)},onDialectChange(e){this.selectedDialect=this.dialectOptions[e.detail.value]||""},onLanguageHintChange(e){const o=this.languageHintOptions[e.detail.value]||"";this.selectedLanguageHintLabel=o;const t=o.match(/\(([^)]+)\)/);this.selectedLanguageHint=t&&t[1]?t[1]:""},async handleGenerate(){const i=e.index.getStorageSync("userId")||"",s=e.index.getStorageSync("token")||"";if(!i)return void e.index.showModal({title:"提示",content:"请先登录后再继续",confirmText:"去登录",cancelText:"取消",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/login/login"})}});const a="volcengine"===this.selectedModel?"VOLCENGINE_VIDEO":"PHOTO_REVIVAL",n="volcengine"===this.selectedModel?t.SERVICE_TYPES.VOLCENGINE_VIDEO.type:t.SERVICE_TYPES.PHOTO_REVIVAL.type;let l=null;try{l=await new Promise(((t,n)=>{e.index.request({url:`${o.API_BASE}/api/pay/usage-preview?serviceType=${a}`,method:"GET",header:{"X-User-Id":i,Authorization:s?`Bearer ${s}`:""},success:e=>{200===e.statusCode&&e.data&&e.data.success?t(e.data):n(new Error(e.data&&e.data.message?e.data.message:"预检失败: HTTP "+e.statusCode))},fail:e=>n(new Error(e&&e.errMsg?e.errMsg:"预检失败"))})}))}catch(d){return void e.index.showModal({title:"检查次数失败",content:d&&d.message?d.message:"检查剩余次数失败,请稍后重试",showCancel:!1,confirmText:"我知道了"})}(l&&"number"==typeof l.remainingTotalCount?l.remainingTotalCount:0)<=0?t.showPaymentModal(this,n,(()=>{this.executeGenerate()}),(e=>{console.error("[Payment] 支付失败:",e)})):this.executeGenerate()},async executeGenerate(){this.loading=!0,this.progress=[],this.videoUrl="",this.audioUrl="";try{"volcengine"===this.selectedModel?await this.generateWithVolcengine():await this.generateWithExistingVoice()}catch(o){o.message.includes("响应超时")||o.message.includes("历史记录")?(this.addProgress("⚠️ "+o.message,"warning"),e.index.showModal({title:"提示",content:o.message,showCancel:!0,cancelText:"知道了",confirmText:"查看历史",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/revival/revival-history"})}})):(this.addProgress("生成失败: "+o.message,"error"),e.index.showModal({title:"生成失败",content:(o.message||"生成失败")+"\n\n你可以点击“重试”再次生成。\n若已支付但多次生成失败请联系客服补发提供订单号/支付时间截图)。",confirmText:"重试",cancelText:"我知道了",success:e=>{e.confirm&&this.executeGenerate()}}))}finally{this.loading=!1}},async generateWithVolcengine(){return new Promise(((o,i)=>{this.addProgress("📤 正在上传照片...","loading"),e.index.showModal({title:"🎬 视频生成中",content:"火山引擎视频生成通常需要1-3分钟。\n\n您可以最小化APP做其他事情生成完成后会弹出提示。\n\n请保持网络连接稳定。",showCancel:!1,confirmText:"我知道了"}),setTimeout((()=>{this.addProgress("🎬 正在生成视频通常1-3分钟...","loading")}),2e3);const s=e.index.getStorageSync("userId")||"",a=e.index.getStorageSync("token")||"";console.log("[Revival-Volcengine] 准备上传照片:",this.photoFile),console.log("[Revival-Volcengine] 用户ID:",s),console.log("[Revival-Volcengine] API地址:",`${this.API_BASE}/api/photo-revival/volcengine-video`),e.index.uploadFile({url:`${this.API_BASE}/api/photo-revival/volcengine-video`,filePath:this.photoFile.path,name:"photo",timeout:36e5,header:{"X-User-Id":s,Authorization:a?`Bearer ${a}`:""},formData:(()=>{const e={voiceId:this.selectedVoiceId,voiceType:this.selectedVoiceType,text:this.text,duration:8,name:this.videoTitle};return this.selectedSupportsDialect&&this.selectedDialect&&(e.dialect=this.selectedDialect),this.selectedSupportsLanguageHints&&this.selectedLanguageHint&&(e.languageHints=this.selectedLanguageHint),e})(),success:s=>{console.log("[Revival-Volcengine] 上传响应:",s);let a=null;try{a=JSON.parse(s.data)}catch(l){a=null}if(402===s.statusCode)return console.warn("[Revival-Volcengine] HTTP 402次数不足需要付费"),this.addProgress("⚠️ 次数不足,请先付费","warning"),e.index.showModal({title:"需要付费",content:a&&a.message?a.message:"次数不足,请先完成支付后再生成",confirmText:"去支付",cancelText:"取消",success:o=>{o.confirm&&t.showPaymentModal(this,t.SERVICE_TYPES.PHOTO_REVIVAL.type,(()=>{e.index.showToast({title:"支付成功,请重新点击生成",icon:"none"})}),(()=>{}))}}),void i(new Error(a&&a.message?a.message:"次数不足,请先付费"));if(504===s.statusCode)return console.warn("[Revival-Volcengine] HTTP 504请求超时但后端可能仍在生成中"),setTimeout((()=>{e.index.showModal({title:"⏰ 响应超时",content:"网络响应超时HTTP 504但视频可能仍在后台生成中。\n\n是否立即查看历史记录",confirmText:"查看历史",cancelText:"稍后查看",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/revival/revival-history"})}})}),800),this.addProgress("⏳ 网络响应超时HTTP 504视频可能仍在后台生成中请稍后到历史记录查看","loading"),void o();if(200===s.statusCode){if(a&&"success"===a.status)return this.addProgress("✅ 视频生成完成","done"),this.videoRetried=!1,e.index.showToast({title:"生成成功!",icon:"success"}),void o();const t=a&&a.message?a.message:"生成失败";return console.error("[Revival-Volcengine] 后端返回错误:",t),void i(new Error(t))}const n=a&&a.message?a.message:"上传失败: HTTP "+s.statusCode;i(new Error(n))},fail:o=>{console.error("[Revival-Volcengine] 上传响应超时:",o),setTimeout((()=>{e.index.showModal({title:"⏰ 响应超时",content:"网络响应超时,但视频可能已经生成成功。\n\n是否立即查看历史记录",confirmText:"查看历史",cancelText:"稍后查看",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/revival/revival-history"})}})}),3e3),i(new Error("网络响应超时,视频可能正在生成中,请稍后在历史记录中查看"))}})}))},async generateWithNewVoice(){this.addProgress("正在创建音色...","loading")},generateWithExistingVoice(){return new Promise(((o,t)=>{this.addProgress("⏳ 正在上传照片...","loading"),e.index.showModal({title:"⏳ 视频生成中",content:"视频生成通常需要2-5分钟高峰期可能需要10-30分钟。\n\n您可以最小化APP做其他事情生成完成后会弹出提示。\n\n请保持网络连接稳定。",showCancel:!1,confirmText:"我知道了"}),setTimeout((()=>{this.addProgress("🎵 正在合成语音...","loading")}),2e3),setTimeout((()=>{this.addProgress("🎬 正在生成视频通常2-5分钟高峰期可能更久...","loading")}),5e3);const i=e.index.getStorageSync("userId")||"",s=e.index.getStorageSync("token")||"";console.log("[Revival] 准备上传照片:",this.photoFile),console.log("[Revival] 照片路径:",this.photoFile.path),console.log("[Revival] 用户ID:",i),console.log("[Revival] Token:",s?"已设置":"未设置"),console.log("[Revival] API地址:",`${this.API_BASE}/api/photo-revival/revive-quick`),i||(console.warn("[Revival] ⚠️ 警告用户ID为空视频可能无法正确保存到数据库"),e.index.showModal({title:"提示",content:"检测到您未登录,视频将无法保存到历史记录。是否继续?",success:e=>{e.confirm||t(new Error("用户取消操作"))}})),e.index.uploadFile({url:`${this.API_BASE}/api/photo-revival/revive-quick`,filePath:this.photoFile.path,name:"photo",timeout:36e5,header:{"X-User-Id":i,Authorization:s?`Bearer ${s}`:""},formData:(()=>{const e={voiceId:this.selectedVoiceId,voiceType:this.selectedVoiceType,text:this.text,name:this.videoTitle,serverUrl:this.API_BASE};return this.selectedSupportsDialect&&this.selectedDialect&&(e.dialect=this.selectedDialect),this.selectedSupportsLanguageHints&&this.selectedLanguageHint&&(e.languageHints=this.selectedLanguageHint),e})(),success:i=>{console.log("[Revival] 上传响应:",i);let s=null;try{s=JSON.parse(i.data)}catch(n){s=null}if(504===i.statusCode)return console.warn("[Revival] HTTP 504请求超时但后端可能仍在生成中"),setTimeout((()=>{e.index.showModal({title:"⏰ 响应超时",content:"网络响应超时HTTP 504但视频可能仍在后台生成中。\n\n是否立即查看历史记录",confirmText:"查看历史",cancelText:"稍后查看",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/revival/revival-history"})}})}),800),this.addProgress("⏳ 网络响应超时HTTP 504视频可能仍在后台生成中请稍后到历史记录查看","loading"),void o();if(200===i.statusCode){if(s&&"success"===s.status)return this.handleResult(s),void o();const e=s&&s.message?s.message:"生成失败";return console.error("[Revival] 后端返回错误:",e),void t(new Error(e))}const a=s&&s.message?s.message:"上传失败: HTTP "+i.statusCode;t(new Error(a))},fail:o=>{console.error("[Revival] 上传响应超时:",o),setTimeout((()=>{e.index.showModal({title:"⏰ 响应超时",content:"网络响应超时,但视频可能已经生成成功。\n\n是否立即查看历史记录",confirmText:"查看历史",cancelText:"稍后查看",success:o=>{o.confirm&&e.index.navigateTo({url:"/pages/revival/revival-history"})}})}),3e3),t(new Error("网络响应超时,视频可能正在生成中,请稍后在历史记录中查看"))}})}))},async handleResult(o){if("success"!==o.status)throw new Error(o.message||"生成失败");"new"===this.mode&&this.addProgress("✅ 音色创建完成","done"),this.addProgress("✅ 语音合成完成","done"),this.addProgress("✅ 视频生成完成","done"),this.videoUrl=o.videoUrl,this.audioUrl=o.audioUrl,this.videoRetried=!1,this.saveToHistory(o),e.index.showModal({title:"🎉 生成成功!",content:'视频已生成完成!\n\n点击"查看视频"可以立即查看和播放视频。',cancelText:"稍后查看",confirmText:"查看视频",success:e=>{e.confirm&&this.scrollToResult()}}),"new"===this.mode&&this.loadVoices()},togglePlay(){this.isPlaying?this.pausePlayback():this.startPlayback()},startPlayback(){const o=e.index.createVideoContext("resultVideo",this),t=e.index.createInnerAudioContext();t.src=this.audioUrl,o.play(),t.play(),this.isPlaying=!0,this.audioContext=t},pausePlayback(){e.index.createVideoContext("resultVideo",this).pause(),this.audioContext&&this.audioContext.pause(),this.isPlaying=!1},onVideoPlay(){this.isPlaying=!0},onVideoPause(){this.isPlaying=!1,this.audioContext&&this.audioContext.pause()},onVideoEnded(){this.isPlaying=!1,this.audioContext&&this.audioContext.stop()},onVideoLoaded(e){console.log("[Revival] 视频加载成功:",e)},onVideoError(o){if(console.error("[Revival] 视频加载失败:",o),console.error("[Revival] 视频URL:",this.videoUrl),console.error("[Revival] 错误详情:",o.detail),!this.videoRetried)return console.log("[Revival] 尝试重新加载视频..."),this.videoRetried=!0,void setTimeout((()=>{e.index.createVideoContext("resultVideo",this).stop();const o=this.videoUrl;this.videoUrl="",this.$nextTick((()=>{this.videoUrl=o+"?t="+Date.now()}))}),500);e.index.showModal({title:"视频加载失败",content:"无法播放视频,可能是网络或格式问题。\n\n您可以尝试\n1. 检查网络连接\n2. 返回后重新进入播放\n3. 重新生成视频或稍后再试",showCancel:!1})},onVideoWaiting(e){console.log("[Revival] 视频缓冲中...",e)},onVideoTimeUpdate(e){},scrollToResult(){this.$nextTick((()=>{e.index.createSelectorQuery().in(this).select(".result-section").boundingClientRect((o=>{o&&e.index.pageScrollTo({scrollTop:o.top-100,duration:300})})).exec()}))},addProgress(e,o){this.progress.push({text:e,status:o}),this.loadingText=e},goToHistory(){e.index.navigateTo({url:"/pages/revival/revival-history"})},viewVideo(){if(console.log("[Revival] 准备播放视频"),console.log("[Revival] videoUrl:",this.videoUrl),console.log("[Revival] audioUrl:",this.audioUrl),!this.videoUrl)return void e.index.showToast({title:"视频地址不存在",icon:"none"});let o=`/pages/video-player/video-player?url=${encodeURIComponent(this.videoUrl)}&title=${encodeURIComponent("复活视频")}`;o+="&audioInVideo=1",console.log("[Revival] 跳转播放页:",o),e.index.navigateTo({url:o,success:()=>{console.log("[Revival] 跳转播放页面成功")},fail:o=>{console.error("[Revival] 跳转播放页面失败:",o),e.index.showToast({title:"跳转失败",icon:"none"})}})},handlePaymentClose(){this.paymentModalData.show=!1,this._paymentReject&&this._paymentReject(new Error("用户取消支付"))},async handlePaymentConfirm(e){await t.handlePaymentConfirm(this,e)},manualSaveToHistory(){if(!this.videoUrl)return void e.index.showToast({title:"没有可保存的记录",icon:"none"});const o={photoUrl:this.photoPreview,videoUrl:this.videoUrl,audioUrl:this.audioUrl,voiceId:this.selectedVoiceId};this.saveToHistory(o),e.index.showToast({title:"已保存到历史",icon:"success"})},async downloadVideoToLocal(o){try{console.log("[Revival] 开始下载视频到本地:",o);const t=await new Promise(((t,i)=>{e.index.downloadFile({url:o,success:e=>{200===e.statusCode?(console.log("[Revival] 视频下载成功:",e.tempFilePath),t(e.tempFilePath)):i(new Error("下载失败,状态码: "+e.statusCode))},fail:e=>{console.error("[Revival] 视频下载失败:",e),i(e)}})})),i=await this.saveFilePermanently(t,"video");this.localVideoPath=i,console.log("[Revival] 视频已保存到:",i)}catch(t){console.error("[Revival] 下载视频失败:",t),e.index.showToast({title:"视频下载失败,将使用在线播放",icon:"none"})}},saveFilePermanently:async(o,t)=>new Promise(((i,s)=>{const a=e.index.getFileSystemManager(),n=`${e.index.env.USER_DATA_PATH}/revival_${t}s/`,l=n+`${t}_${Date.now()}.${"video"===t?"mp4":"mp3"}`;a.mkdir({dirPath:n,recursive:!0,success:()=>{a.copyFile({srcPath:o,destPath:l,success:()=>{console.log(`[Revival] ${t}已保存到永久存储:`,l),i(l)},fail:e=>{console.error(`[Revival] 保存${t}失败:`,e),i(o)}})},fail:e=>{console.error("[Revival] 创建目录失败:",e),i(o)}})})),saveToHistory(o){try{console.log("[Revival] 开始保存历史记录"),console.log("[Revival] 结果数据:",o);let t=[];const i=e.index.getStorageSync("generation_history");i&&(t=JSON.parse(i));const s={type:"revival",timestamp:Date.now(),text:this.text,voiceId:"existing"===this.mode?this.selectedVoiceId:o.voiceId||this.selectedVoiceId,photoUrl:this.photoPreview,videoUrl:o.videoUrl,audioUrl:o.audioUrl};console.log("[Revival] 保存记录:",s),t.unshift(s),t.length>100&&(t=t.slice(0,100)),e.index.setStorageSync("generation_history",JSON.stringify(t)),console.log("[Revival] 已保存到历史记录,当前共",t.length,"条")}catch(t){console.error("[Revival] 保存历史记录失败:",t)}},downloadVideo(){e.index.showLoading({title:"正在保存..."}),e.index.downloadFile({url:this.videoUrl,success:o=>{200===o.statusCode?e.index.saveVideoToPhotosAlbum({filePath:o.tempFilePath,success:()=>{e.index.hideLoading(),e.index.showToast({title:"保存成功",icon:"success"})},fail:o=>{e.index.hideLoading(),e.index.showToast({title:"保存失败: "+o.errMsg,icon:"none"})}}):(e.index.hideLoading(),e.index.showToast({title:"下载失败",icon:"none"}))},fail:o=>{e.index.hideLoading(),e.index.showToast({title:"下载失败: "+o.errMsg,icon:"none"})}})},startVideoCall(){if(!this.videoUrl||!this.selectedVoiceId)return void e.index.showToast({title:"缺少必要信息",icon:"none"});const o="new"===this.mode?this.voiceName:"对方";e.index.navigateTo({url:`/pages/video-call/video-call?idleVideo=${encodeURIComponent(this.videoUrl)}&talkingVideo=${encodeURIComponent(this.videoUrl)}&voiceId=${this.selectedVoiceId}&callerName=${encodeURIComponent(o)}`})}}};if(!Array){e.resolveComponent("PaymentModal")()}const s=e._export_sfc(i,[["render",function(o,t,i,s,a,n){return e.e({a:e.o(((...e)=>n.goToHistory&&n.goToHistory(...e))),b:a.showHelpModal},a.showHelpModal?{c:e.o((e=>a.showHelpModal=!1)),d:`${a.API_BASE}/static/1.jpg`,e:`${a.API_BASE}/static/2.jpg`,f:e.o((e=>a.showHelpModal=!1)),g:e.o(((...e)=>n.goToUpload&&n.goToUpload(...e))),h:e.o((()=>{})),i:e.o((e=>a.showHelpModal=!1))}:{},{j:a.photoPreview,k:a.photoPreview,l:!a.photoPreview,m:e.o(((...e)=>n.choosePhoto&&n.choosePhoto(...e))),n:a.videoTitle,o:e.o((e=>a.videoTitle=e.detail.value)),p:e.t(a.videoTitle.length),q:e.t(a.selectedModelName||"请选择模型"),r:a.modelOptions,s:e.o(((...e)=>n.onModelChange&&n.onModelChange(...e))),t:n.getCurrentModelMaintenanceMsg()},n.getCurrentModelMaintenanceMsg()?{v:e.t(n.getCurrentModelMaintenanceMsg())}:{w:e.t(a.modelHint)},{x:e.o(((...e)=>n.showVoiceHelp&&n.showVoiceHelp(...e))),y:e.t(a.selectedVoiceTypeLabel),z:a.voiceTypeOptions,A:e.o(((...e)=>n.onVoiceTypeChange&&n.onVoiceTypeChange(...e))),B:e.t(a.selectedVoiceName||"请选择音色"),C:n.displayVoices,D:e.o(((...e)=>n.onVoiceChange&&n.onVoiceChange(...e))),E:a.selectedSupportsDialect&&"OFFICIAL"!==(a.selectedVoiceType||"CLONE")},a.selectedSupportsDialect&&"OFFICIAL"!==(a.selectedVoiceType||"CLONE")?{F:e.t(a.selectedDialect||"请选择方言(可选)"),G:a.dialectOptions,H:e.o(((...e)=>n.onDialectChange&&n.onDialectChange(...e)))}:{},{I:a.selectedSupportsLanguageHints&&"OFFICIAL"!==(a.selectedVoiceType||"CLONE")},a.selectedSupportsLanguageHints&&"OFFICIAL"!==(a.selectedVoiceType||"CLONE")?{J:e.t(a.selectedLanguageHintLabel||"请选择语言(可选)"),K:a.languageHintOptions,L:e.o(((...e)=>n.onLanguageHintChange&&n.onLanguageHintChange(...e)))}:{},{M:a.text,N:e.o((e=>a.text=e.detail.value)),O:e.t(a.text.length),P:a.loading},a.loading?{Q:e.t(a.loadingText)}:{},{R:a.loading||!n.canGenerate,S:e.o(((...e)=>n.handleGenerate&&n.handleGenerate(...e))),T:a.progress.length>0},a.progress.length>0?{U:e.f(a.progress,((o,t,i)=>({a:e.t("done"===o.status?"✅":"error"===o.status?"❌":"⏳"),b:e.n(o.status),c:e.t(o.text),d:t})))}:{},{V:a.videoUrl},a.videoUrl?{W:a.videoUrl,X:a.photoPreview,Y:e.o(((...e)=>n.onVideoPlay&&n.onVideoPlay(...e))),Z:e.o(((...e)=>n.onVideoPause&&n.onVideoPause(...e))),aa:e.o(((...e)=>n.onVideoEnded&&n.onVideoEnded(...e))),ab:e.o(((...e)=>n.onVideoError&&n.onVideoError(...e))),ac:e.o(((...e)=>n.onVideoLoaded&&n.onVideoLoaded(...e))),ad:e.o(((...e)=>n.onVideoWaiting&&n.onVideoWaiting(...e))),ae:e.o(((...e)=>n.onVideoTimeUpdate&&n.onVideoTimeUpdate(...e))),af:a.audioUrl,ag:e.o(((...e)=>n.viewVideo&&n.viewVideo(...e))),ah:e.o(((...e)=>n.downloadVideo&&n.downloadVideo(...e)))}:{},{ai:e.sr("paymentModal","829992d9-0"),aj:e.o(n.handlePaymentClose),ak:e.o(n.handlePaymentConfirm),al:e.p({show:a.paymentModalData.show,serviceType:a.paymentModalData.serviceType,serviceName:a.paymentModalData.serviceName,serviceDesc:a.paymentModalData.serviceDesc,price:a.paymentModalData.price,orderNo:a.paymentModalData.orderNo,paymentTips:a.paymentModalData.paymentTips})})}],["__scopeId","data-v-829992d9"]]);wx.createPage(s);