import { historyCancel, historyDelete, historyDetail, historyDownload } from "../../../utils/request" type DetailStatus = 'done' | 'processing' | 'failed' const emptyDetail = { taskId: '', title: '', status: 'done', statusText: '', progress: 0, pageTitle: '作品详情', pageClass: 'success-page', videoUrl: '', coverUrl: '', duration: '', createTime: '', finishTime: '', failureTime: '', failureStage: '', failureReason: '', scriptText: '', avatar: { name: '默认数字人', imageUrl: '' }, voice: { name: '默认音色', audioUrl: '' }, background: { name: '默认背景', coverUrl: '', imageUrl: '' }, steps: [] as any[], avatarImage: '/static/images/my/image.png', backgroundImage: '/static/images/my/image.png', videoCover: '/static/images/my/image.png', failureMessage: '生成失败,请稍后重试', failureDisplayTime: '', successTime: '', taskDisplayId: '', scriptDisplayText: '暂无文案', } Page({ data: { status: 'done' as DetailStatus, isFailed: false, isProcessing: false, pageTitle: '作品详情', pageClass: 'success-page', taskId: '', detail: emptyDetail as any, progressStyle: 'width: 0%;', }, onLoad(query: Record) { const status: DetailStatus = query.status === 'failed' ? 'failed' : query.status === 'processing' ? 'processing' : 'done' this.setStatus(status, query.taskId || '') if (query.taskId) { this.loadDetail(query.taskId) } }, loadDetail(taskId: string) { wx.showLoading({ title: '加载中' }) historyDetail(taskId).then((res: any) => { wx.hideLoading() if (res.code) { wx.showModal({ title: '温馨提示', content: res.message || '获取详情失败', showCancel: false }) return } const data = res.data || {} const detail = { ...emptyDetail, ...data } detail.avatar = { ...emptyDetail.avatar, ...(data.avatar || {}) } detail.voice = { ...emptyDetail.voice, ...(data.voice || {}) } detail.background = { ...emptyDetail.background, ...(data.background || {}) } detail.avatarImage = detail.avatar.imageUrl || '/static/images/my/image.png' detail.backgroundImage = detail.background.coverUrl || detail.background.imageUrl || '/static/images/my/image.png' detail.videoCover = detail.coverUrl || detail.avatar.imageUrl || '/static/images/my/image.png' detail.failureMessage = detail.failureReason || '生成失败,请稍后重试' detail.failureDisplayTime = detail.failureTime || detail.finishTime || detail.createTime detail.successTime = detail.finishTime || detail.createTime detail.taskDisplayId = detail.taskId || taskId detail.scriptDisplayText = detail.scriptText || '暂无文案'; let status = ''; if (detail.status === 'failed') { status = 'failed'; } else { status = detail.status === 'processing' ? 'processing' : 'done'; } this.setData({ detail, progressStyle: 'width: ' + Math.max(0, Math.min(100, Number(+detail.progress))) + '%;', }) this.setStatus(status as DetailStatus, detail.taskId || taskId) }).catch(() => { wx.hideLoading() wx.showModal({ title: '温馨提示', content: '网络异常,请稍后再试', showCancel: false }) }) }, setStatus(status: DetailStatus, taskId: string) { this.setData({ status, isFailed: status === 'failed', isProcessing: status === 'processing', pageTitle: status === 'failed' ? '失败详情' : status === 'processing' ? '生成详情' : '作品详情', pageClass: status === 'failed' ? 'failed-page' : status === 'processing' ? 'processing-page' : 'success-page', taskId, }) }, handleBack() { wx.navigateBack({ fail: () => wx.switchTab({ url: '/pages/history/history' }), }) }, handleDownload() { if (!this.data.taskId) return wx.showLoading({ title: '获取下载地址' }) historyDownload(this.data.taskId).then((res: any) => { wx.hideLoading() if (res.code) { wx.showModal({ title: '温馨提示', content: res.message || '下载失败', showCancel: false }) return } const url = (res.data && res.data.url) || '' if (url) { wx.setClipboardData({ data: url }) } else { wx.showToast({ title: '暂无下载地址', icon: 'none' }) } }).catch(() => { wx.hideLoading() wx.showModal({ title: '温馨提示', content: '网络异常,请稍后再试', showCancel: false }) }) }, handleRetry() { wx.switchTab({ url: '/pages/index/index' }) }, handleEdit() { wx.switchTab({ url: '/pages/index/index' }) }, handleViewCopy() { this.handleCopyText() }, handleCopyText() { const detail = this.data.detail || {} const text = detail.scriptText || '' if (!text) { wx.showToast({ title: '暂无文案', icon: 'none' }) return } wx.setClipboardData({ data: text }) }, handleSame() { wx.switchTab({ url: '/pages/index/index' }) }, handleRecordVoice() { wx.switchTab({ url: '/pages/index/index' }) }, handleBackToHistory() { wx.switchTab({ url: '/pages/history/history' }) }, handleCancel() { if (!this.data.taskId) return wx.showModal({ title: '确认取消', content: '确定取消当前生成任务吗?', success: (modal) => { if (!modal.confirm) return historyCancel(this.data.taskId).then((res: any) => { if (res.code) { wx.showModal({ title: '温馨提示', content: res.message || '取消失败', showCancel: false }) return } wx.showToast({ title: '已取消', icon: 'success' }) this.loadDetail(this.data.taskId) }) }, }) }, handleDelete() { if (!this.data.taskId) return wx.showModal({ title: '确认删除', content: '删除后将不再展示该创作记录', success: (modal) => { if (!modal.confirm) return historyDelete(this.data.taskId).then((res: any) => { if (res.code) { wx.showModal({ title: '温馨提示', content: res.message || '删除失败', showCancel: false }) return } wx.showToast({ title: '已删除', icon: 'success' }) setTimeout(() => this.handleBackToHistory(), 400) }) }, }) }, })