2026-03-06 18:05:51 +08:00
|
|
|
"use strict";const e=require("../../common/vendor.js"),t=require("../../config/api.js"),o={data:()=>({API_BASE:t.API_BASE,works:[],page:0,size:10,loading:!1,hasMore:!0,loadedOnce:!1,hasCachedWorks:!1,enableVideoPreload:!1,preloadQueue:[],activePreloads:0,maxConcurrentPreloads:2,preloadingKeys:{}}),onLoad(){try{const t=e.index.getStorageSync("plaza_works_cache_v1");Array.isArray(t)&&t.length>0&&(this.works=t,this.hasCachedWorks=!0,this.loadedOnce=!0)}catch(t){this.hasCachedWorks=!1}this.loadWorks(!0)},onShow(){this.loadedOnce&&0!==this.works.length||this.loadWorks(!0)},methods:{normalizeMediaUrl(e){return e?e.startsWith("/")?`${this.API_BASE}${e}`:e.startsWith("http://115.190.167.176:20002")?e.replace("http://115.190.167.176:20002",this.API_BASE):e:e},generateCacheKey(e){let t=0;for(let o=0;o<e.length;o++){t=(t<<5)-t+e.charCodeAt(o),t&=t}return"video_"+Math.abs(t)},enqueuePreload(t){if(!this.enableVideoPreload)return;if(!t)return;const o=this.generateCacheKey(t);if(this.preloadingKeys[o])return;e.index.getStorageSync(o)||(this.preloadingKeys[o]=!0,this.preloadQueue.push({url:t,cacheKey:o}),this.processPreloadQueue())},processPreloadQueue(){for(;this.activePreloads<this.maxConcurrentPreloads&&this.preloadQueue.length>0;){const e=this.preloadQueue.shift();this.activePreloads+=1,this.preloadVideoToCache(e.url,e.cacheKey).finally((()=>{this.activePreloads=Math.max(0,this.activePreloads-1),this.processPreloadQueue()}))}},preloadVideoToCache(t,o){return new Promise((i=>{e.index.downloadFile({url:t,timeout:6e4,success:a=>{200===a.statusCode?e.index.saveFile({tempFilePath:a.tempFilePath,success:a=>{const r=a.savedFilePath;e.index.setStorageSync(o,r);const s=e.index.getStorageSync("video_cache_info")||{};s[o]={path:r,url:t,time:Date.now()},e.index.setStorageSync("video_cache_info",s),i()},fail:()=>{i()}}):i()},fail:()=>{i()},complete:()=>{this.preloadingKeys&&o&&(this.preloadingKeys[o]=!1)}})}))},preloadWorks(t){Array.isArray(t)&&0!==t.length&&e.index.getNetworkType({success:e=>{e&&"wifi"===e.networkType&&t.forEach((e=>{e&&e.contentUrl&&this.enqueuePreload(e.contentUrl)}))},fail:()=>{}})},getWorkTypeLabel:e=>({VOICE_CLONE:"声音克隆",PHOTO_REVIVAL:"照片复活",VIDEO_CALL:"视频对话"}[e]||"作品"),toggleLike(t){const o=e.index.getStorageSync("token")||"",i=e.index.getStorageSync("userId")||"";i?e.index.request({url:`${this.API_BASE}/api/works/${t.id}/like`,method:"POST",header:{"X-User-Id":i,Authorization:o?`Bearer ${o}`:""},success:o=>{var i;if(200===o.statusCode&&o.data&&o.data.success&&o.data.data)return t.liked=!!o.data.data.liked,void(t.likeCount=o.data.data.likeCount||0);e.index.showToast({title:(null==(i=o.data)?void 0:i.message)||"操作失败",icon:"none"})},fail:()=>{e.index.showToast({title:"操作失败",icon:"none"})}}):e.index.showToast({title:"请先登录",icon:"none"})},formatTime(e){if(!e)return"";const t=new Date(e);if(Number.isNaN(t.getTime()))return String(e);const o=e=>e<10?`0${e}`:`${e}`;return`${t.getFullYear()}-${o(t.getMonth()+1)}-${o(t.getDate())} ${o(t.getHours())}:${o(t.getMinutes())}:${o(t.getSeconds())}`},loadMore(){!this.loading&&this.hasMore&&this.loadWorks(!1)},loadWorks(o){if(this.loading)return;this.loading=!0;const i=e.index.getStorageSync("token")||"",a=e.index.getStorageSync("userId")||"";o&&(this.page=0,this.hasMore=!0,this.hasCachedWorks||(this.works=[])),e.index.request({url:`${this.API_BASE}${t.API_ENDPOINTS.works.plaza}?page=${this.page}&size=${this.size}`,method:"GET",header:{"X-User-Id":a,Authorization:i?`Bearer ${i}`:""},success:t=>{if(200===t.statusCode&&t.data){const a=(t.data.content||[]).map((e=>({...e,coverUrl:this.normalizeMediaUrl(e.coverUrl),contentUrl:this.normalizeMediaUrl(e.contentUrl),audioUrl:this.normalizeMediaUrl(e.audioUrl),workTypeLabel:this.getWorkTypeLabel(e.workType),likeCount:e.likeCount||0,liked:!!e.liked})));if(o){this.works=a,this.hasCachedWorks=!1;try{e.index.setStorageSync("plaza_works_cache_v1",a)}catch(i){}}else this.works=this.works.concat(a);return this.page+=1,this.hasMore=!t.data.last,void(this.loadedOnce=!0)}e.index.showToast({title:`加载失
|