158 lines
4.0 KiB
TypeScript
158 lines
4.0 KiB
TypeScript
import { historyDownload, historyList } from "../../utils/request"
|
|
|
|
type FilterKey = 'all' | 'done' | 'processing' | 'failed'
|
|
type RecordStatus = 'done' | 'processing' | 'failed'
|
|
|
|
interface HistoryRecord {
|
|
id: number
|
|
taskId: string
|
|
title: string
|
|
scene: string
|
|
avatar: string
|
|
time: string
|
|
duration: string
|
|
status: RecordStatus
|
|
statusText: string
|
|
secondaryText: string
|
|
sceneClass: string
|
|
isDone: boolean
|
|
isProcessing: boolean
|
|
isFailed: boolean
|
|
coverUrl: string
|
|
coverImage: string
|
|
videoUrl: string
|
|
progress: number
|
|
}
|
|
|
|
Page({
|
|
data: {
|
|
filters: [
|
|
{ key: 'all', label: '全部', active: true },
|
|
{ key: 'done', label: '已完成', active: false },
|
|
{ key: 'processing', label: '生成中', active: false },
|
|
],
|
|
activeFilter: 'all' as FilterKey,
|
|
records: [] as HistoryRecord[],
|
|
page: 1,
|
|
limit: 10,
|
|
hasMore: true,
|
|
loading: false,
|
|
},
|
|
|
|
onLoad() {
|
|
this.loadRecords(true)
|
|
},
|
|
|
|
onShow() {
|
|
this.loadRecords(true)
|
|
},
|
|
|
|
onPullDownRefresh() {
|
|
this.loadRecords(true).finally(() => wx.stopPullDownRefresh())
|
|
},
|
|
|
|
onReachBottom() {
|
|
if (this.data.hasMore && !this.data.loading) {
|
|
this.loadRecords(false)
|
|
}
|
|
},
|
|
|
|
loadRecords(reset = false) {
|
|
if (this.data.loading) return Promise.resolve()
|
|
|
|
const page = reset ? 1 : this.data.page + 1
|
|
this.setData({ loading: true })
|
|
|
|
return historyList(this.data.activeFilter, page, this.data.limit).then((res: any) => {
|
|
if (res.code) {
|
|
wx.showModal({ title: '温馨提示', content: res.message, showCancel: false })
|
|
return
|
|
}
|
|
|
|
const list = (res.data.list as HistoryRecord[]).map((item) => ({
|
|
...item,
|
|
coverImage: item.coverUrl
|
|
}))
|
|
this.setData({
|
|
records: reset ? list : this.data.records.concat(list),
|
|
page,
|
|
hasMore: res.data.hasMore,
|
|
})
|
|
}).catch(() => {
|
|
wx.showModal({ title: '温馨提示', content: '网络异常,请稍后再试', showCancel: false })
|
|
}).finally(() => {
|
|
this.setData({ loading: false })
|
|
})
|
|
},
|
|
|
|
handleBack() {
|
|
wx.navigateBack({
|
|
fail: () => wx.switchTab({ url: '/pages/index/index' }),
|
|
})
|
|
},
|
|
|
|
handleFilterTap(e: WechatMiniprogram.TouchEvent) {
|
|
const activeFilter = e.currentTarget.dataset.key as FilterKey
|
|
this.setData({
|
|
activeFilter,
|
|
filters: this.data.filters.map((item) => ({
|
|
...item,
|
|
active: item.key === activeFilter,
|
|
})),
|
|
})
|
|
this.loadRecords(true)
|
|
},
|
|
|
|
handleFailedTap() {
|
|
this.setData({
|
|
activeFilter: 'failed',
|
|
filters: this.data.filters.map((item) => ({ ...item, active: false })),
|
|
})
|
|
this.loadRecords(true)
|
|
},
|
|
|
|
handleDetail(e: WechatMiniprogram.TouchEvent) {
|
|
const rawStatus = String(e.currentTarget.dataset.status || '')
|
|
const taskId = String(e.currentTarget.dataset.taskId || '')
|
|
if (!taskId) return
|
|
|
|
const status = rawStatus === 'failed' ? 'failed' : rawStatus === 'processing' ? 'processing' : 'done'
|
|
wx.navigateTo({
|
|
url: '/pages/historyPackage/historyDetail/index?status=' + status + '&taskId=' + encodeURIComponent(taskId),
|
|
})
|
|
},
|
|
|
|
handleDownload(e: WechatMiniprogram.TouchEvent) {
|
|
const taskId = String(e.currentTarget.dataset.taskId || '')
|
|
if (!taskId) return
|
|
|
|
wx.showLoading({ title: '获取下载地址' })
|
|
historyDownload(taskId).then((res: any) => {
|
|
wx.hideLoading()
|
|
if (res.code) {
|
|
wx.showModal({ title: '温馨提示', content: res.message || '下载失败', showCancel: false })
|
|
return
|
|
}
|
|
|
|
const url = res.data.url
|
|
if (url) {
|
|
wx.setClipboardData({ data: url })
|
|
} else {
|
|
wx.showToast({ title: '暂无下载地址', icon: 'none' })
|
|
}
|
|
}).catch(() => {
|
|
wx.hideLoading()
|
|
wx.showModal({ title: '温馨提示', content: '网络异常,请稍后再试', showCancel: false })
|
|
})
|
|
},
|
|
|
|
handleMore(e: WechatMiniprogram.TouchEvent) {
|
|
this.handleDetail(e)
|
|
},
|
|
|
|
handleRetry() {
|
|
wx.switchTab({ url: '/pages/index/index' })
|
|
},
|
|
})
|
|
|