import { storeBindingsBehavior } from 'mobx-miniprogram-bindings' import { store } from '~/store/index' import { setVideoStatus, likeVideo, collectVideo, submitPlayLog } from '~/api/video' import { setFans } from '~/api/user' import { setDuration } from '~/utils/util' Component({ behaviors: [storeBindingsBehavior], storeBindings: { store, fields: { pkData: 'pkData', }, actions: { setPkData: 'setPkData' } }, /** * 组件的属性列表 */ properties: { videoInfo: { type: Object, value: {}, observer(newVal) { if (newVal.userReadExtend && newVal.userReadExtend.resourcesType == 1) { newVal.userRead.title = newVal.userRead.title.split('\n') } this.setData({ videoInfoCopy: newVal, videoPath: newVal.userRead.videoPath, selfWork: this.data.selfUid == newVal.user.uid, isOfficial: newVal.userRead.type != 'APP_EXAMPLE' }) } }, videoType: { type: String, // value 为public时是默认公共样式,为my时为“我的”样式,展示下载删除是否公开,pk为pk的样式文案, value: 'public', }, currentId: { type: Number }, sliderValue: { type: Number, value: 0, }, currentTime: { type: String, value: '00:00', } }, data: { selfUid: wx.getStorageSync('uid'), videoInfoCopy: {}, videoPath: '', //userRead.videoPath 和 example.videoPath, workType: 'videoPath', // 是否官方作品 isOfficial: false, // 是否作者本人 selfWork: false, }, lifetimes: { attached() { let { userReadExtend, userRead } = this.data.videoInfoCopy if (userReadExtend && userReadExtend.resourcesType == 1) { this.setData({ endTime: setDuration(userRead.duration) }) } } }, methods: { // 播放视频 playVideo() { this.triggerEvent('playVideo', this.data.videoInfoCopy.userRead.id) this.submitPlayLog(this.data.videoInfoCopy.userRead.id) }, // 设置进度条 slider({ detail }) { this.triggerEvent('setSeek', detail.value / 100 * this.data.videoInfoCopy.userRead.duration) }, // 设置视频公开还是隐私 async setVideoPublic() { let info = this.data.videoInfoCopy.userRead let data = { id: info.id, status: info.status === 'NORMAL' ? 'DISABLE' : 'NORMAL' } let res = await setVideoStatus(data) if (res.status == 'DISABLE') { wx.showToast({ title: '该作品仅自己可见', icon: 'none', duration: 2000 }) } this.setData({ ['videoInfoCopy.userRead.status']: info.status === 'NORMAL' ? 'DISABLE' : 'NORMAL' }) }, // 点赞 async likeVideo() { let { id } = this.data.videoInfoCopy.userRead if (this.data.videoInfoCopy.isLike) { return } await likeVideo(id) this.setData({ ['videoInfoCopy.isLike']: true, ['videoInfoCopy.userRead.likeAmount']: this.data.videoInfoCopy.userRead.likeAmount + 1 }) }, // 下载视频 download() { wx.showLoading({ title: '保存到本地', mask: true }) const url = this.data.videoInfoCopy.userRead.markPath || '' wx.downloadFile({ url, success(res) { if (res.statusCode === 200) { wx.saveVideoToPhotosAlbum({ filePath: res.tempFilePath, success(res) { wx.hideLoading() wx.showToast({ title: '成功保存到相册!', duration: 3000, icon: 'success', mask: true }) }, fail() { wx.hideLoading() wx.showToast({ title: '网络不给力', icon: 'error', duration: 3000, mask: true }) } }) } }, fail() { wx.hideLoading() wx.showToast({ title: '网络不给力', icon: 'error', duration: 3000, mask: true }) } }) }, //评论 openComment() { this.triggerEvent('openComment') this.setData({ ['videoInfoCopy.unReadPostsCount']: 0, }) }, // 删除 delete() { let { id } = this.data.videoInfoCopy.userRead wx.showModal({ title: '确认删除吗?', content: '作品将被永久删除,无法找回。', confirmText: '确认', cancelText: '取消', success: async (res) => { if (res.confirm) { let data = { id, status: 'DEL' } await setVideoStatus(data) wx.showToast({ title: '删除成功!', icon: "none" }) this.triggerEvent('deleteVideo', this.data.videoInfoCopy.userRead.id) } } }) }, // 收藏课程 async collect() { let { id, type, uid } = this.data.videoInfoCopy.userRead if (wx.getStorageSync('uid') == uid) { return wx.showToast({ title: '不能收藏自己作品哦!', icon: "none" }) } await collectVideo({ targetCode: id, favoritesType: type }) this.setData({ ['videoInfoCopy.isFavorites']: !this.data.videoInfoCopy.isFavorites }) }, // 关注 async setFans() { if (this.data.videoInfoCopy.isFans) { return } await setFans({ uid: this.data.videoInfoCopy.user.uid }) this.triggerEvent('setListFans', this.data.videoInfoCopy.user.uid) }, jumpUserInfo() { wx.navigateTo({ url: `/pages/personal/index?uid=${this.data.videoInfoCopy.user.uid}&type=user`, }) }, // 控制音频播放 audioPlay() { this.triggerEvent('playAudio') this.submitPlayLog(this.data.videoInfoCopy.userRead.id) }, toPkPage() { let videoInfo = this.data.videoInfoCopy if (this.properties.videoType == 'pk') { if (videoInfo.user.uid == wx.getStorageSync('uid')) { return wx.showToast({ title: '不能与自己PK哦~', icon: 'none' }) } this.setPkData({ nickName: videoInfo.user.nickName || videoInfo.user.eid, uid: videoInfo.user.uid, avatar: videoInfo.user.avatar, score: videoInfo.userRead.score, audioPath: videoInfo.userRead.audioPath, exampleId: videoInfo.userRead.exampleId, id: videoInfo.userRead.id }) } let readId = videoInfo.userRead.id let videoType = this.properties.videoType let url = '' if (!this.data.isOfficial || this.data.selfWork) { // autoPlay自动播放 url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}&autoPlay=true` } else if (videoType == 'public' || videoType == 'follow') { url = `/pages/pkPage/index?videoId=${readId}` } else if (videoType == 'pk') { // voluntarily自动录制 url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}&readingType=${videoType}&voluntarily=true` } else { url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}` } wx.navigateTo({ url }) }, // pkPage页面示范朗读 changeRead() { this.setData({ workType: this.data.workType == 'videoPath' ? 'example' : 'videoPath', }) if (this.data.videoInfo.userReadExtend.resourcesType == 1) { this.triggerEvent('pkPageAudio', { currentTarget: { dataset: { id: this.data.videoInfoCopy.userRead.id, audio: this.data.workType == 'videoPath' ? this.data.videoInfoCopy.userRead.audioPath : this.data.videoInfoCopy.example.audioPath, isPkPage: true } } }) } }, // 统计作品播放次数 async submitPlayLog(userReadId) { await submitPlayLog({ userReadId, playStopTime: 1000 }) }, } })