// pages/resourceDetails/index.js
|
const app = getApp()
|
import {
|
loginInfo
|
} from '../../../../assets/js/login';
|
import moment from 'moment'
|
Page({
|
|
/**
|
* 页面的初始数据
|
*/
|
data: {
|
noteList: [],
|
navBarHeight: '',
|
barHeight: '',
|
flag: true, // 输入框是否显示
|
tabPanelstyle: 'display:flex;justify-content:center;align-items:center;',
|
activeValues: [0],
|
dialogKey: false,
|
style: 'border: 2rpx solid rgba(220,220,220,1);border-radius: 12rpx;',
|
activeId: '',
|
storeInfo: '',
|
bookId: '',
|
bookName: '',
|
cmsId: '',
|
parentName: '',
|
parentProductLinkPath: '',
|
productLinkPath: '',
|
isBuy: false,
|
threeLeveData: [],
|
source: "",
|
showData: '',
|
showDataVod: '',
|
src: '',
|
selectedId: null,
|
topicId: '',
|
titleName: '',
|
submitTitle: "1",
|
inputStyle: 'border: 2rpx solid rgba(220,220,220,1);border-radius: 12rpx; padding:16rpx',
|
textvalue: '',
|
style: 'height: 248rpx',
|
submitType: "new", // 新建 or 编辑
|
noteId: '',
|
videoChange: true,
|
startTime: "", //进入页面当前时间
|
pauseTime: 0, //暂停时间
|
formPath: '',
|
loading: false,
|
hidden: true,
|
videoError: false,
|
videoLoading: false,
|
progress: 0,
|
playerList: [],
|
videoLoading: true,
|
buyIdList: [],
|
buyList: [],
|
learnClassData: null,
|
isLearnDataBuy: false,
|
bookDetail: null,
|
learnStartTime: 0,
|
learnTimeList: [],
|
learnTimeData: 0
|
},
|
// 格式化笔记时间
|
convertTimestamp(timestamp) {
|
const isoDate = new Date(timestamp)
|
const year = isoDate.getFullYear()
|
const month = String(isoDate.getMonth() + 1).padStart(2, '0')
|
const day = String(isoDate.getDate()).padStart(2, '0')
|
const hours = String(isoDate.getHours()).padStart(2, '0')
|
const minutes = String(isoDate.getMinutes()).padStart(2, '0')
|
const seconds = String(isoDate.getSeconds()).padStart(2, '0')
|
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
|
return formattedDate
|
},
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
onLoad(options) {
|
wx.setNavigationBarTitle({
|
title: '资源详情-视频'
|
});
|
const systInfo = wx.getSystemInfoSync();
|
const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息
|
const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度
|
this.setData({
|
navBarHeight: navBarHeight,
|
barHeight: systInfo.statusBarHeight,
|
activeId: options.activeId,
|
storeInfo: options.storeInfo,
|
bookId: options.bookId,
|
bookName: options.bookName,
|
cmsId: options.cmsId,
|
parentProductLinkPath: options.parentProductLinkPath,
|
productLinkPath: options.productLinkPath,
|
formPath: options.formPath,
|
flag: false,
|
source: options.source,
|
})
|
if (options.parentName !== "教学资源" && options.parentName !== "云学习") {
|
this.setData({
|
parentName: options.parentName,
|
})
|
}
|
const token = wx.getStorageSync(app.config.tokenKey)
|
if (!token) {
|
loginInfo(app, (data) => {
|
if (options.formPath == 'jsek_cloudLearning') {
|
this.setData({
|
learnStartTime: Date.now(),
|
})
|
this.getLearnTime()
|
}
|
this.getBookInfo(this.data.bookId)
|
})
|
} else {
|
if (options.formPath == 'jsek_cloudLearning') {
|
this.setData({
|
learnStartTime: Date.now(),
|
})
|
this.getLearnTime()
|
}
|
this.getBookInfo(this.data.bookId)
|
}
|
|
},
|
|
/**
|
* 生命周期函数--监听页面显示
|
*/
|
onShow() {
|
this.setData({
|
startTime: Date.now()
|
})
|
},
|
|
/**
|
* 生命周期函数--监听页面隐藏
|
*/
|
onHide() {
|
this.setData({
|
pauseTime: Date.now()
|
})
|
if (wx.getStorageSync(app.config.tokenKey)) {
|
let duration = this.data.pauseTime - this.data.startTime
|
this.count(duration)
|
if (this.data.formPath == 'jsek_cloudLearning') {
|
let cloudDuration = this.data.pauseTime - this.data.learnStartTime
|
this.cloudCount(cloudDuration)
|
}
|
}
|
this.setPlayerList()
|
},
|
|
/**
|
* 生命周期函数--监听页面卸载
|
*/
|
onUnload() {
|
this.setData({
|
pauseTime: Date.now()
|
})
|
if (wx.getStorageSync(app.config.tokenKey)) {
|
let duration = this.data.pauseTime - this.data.startTime
|
this.count(duration)
|
}
|
this.setPlayerList()
|
if (this.data.formPath == 'jsek_cloudLearning') {
|
let cloudDuration = this.data.pauseTime - this.data.learnStartTime
|
this.cloudCount(cloudDuration)
|
}
|
},
|
getLearnTime() {
|
app.MG.identity
|
.getUserKey({
|
domain: 'cloudLearningTime',
|
keys: [this.data.bookId]
|
})
|
.then((res) => {
|
if (res.length > 0) {
|
if (JSON.parse(res[0].value) && JSON.parse(res[0].value).length > 0) {
|
this.setData({
|
learnTimeList: JSON.parse(res[0].value),
|
learnTimeData: JSON.parse(res[0].value)[0].learnTime,
|
})
|
} else {
|
this.setData({
|
learnTimeList: [],
|
learnTimeData: 0
|
})
|
}
|
}
|
})
|
},
|
cloudCount(timeStr) {
|
let time = Number(this.data.learnTimeData) + Number(timeStr)
|
this.setData({
|
learnTimeList: [{
|
learnTime: time
|
}],
|
})
|
app.MG.identity
|
.setUserKey({
|
setKeyRequests: [{
|
domain: 'cloudLearningTime',
|
key: this.data.bookId,
|
value: JSON.stringify(this.data.learnTimeList)
|
}]
|
})
|
.then((res) => {
|
console.log(timeStr, '学习时长')
|
})
|
},
|
// 获取图书详情
|
getBookInfo(id) {
|
const query = {
|
path: "*",
|
queryType: "*",
|
productId: id,
|
favoriteTypes: "FavoriteBookCity",
|
itemFields: {
|
"SysType=": "CmsFolder",
|
},
|
coverSize: {
|
height: 1,
|
},
|
fields: {},
|
};
|
if (this.data.storeInfo) query['storeInfo'] = this.data.storeInfo
|
app.MG.store.getProductDetail(query).then(async (res) => {
|
try {
|
this.setData({
|
bookDetail: res.datas,
|
buyIdList: res.datas.purchasedSaleMethodIdList,
|
learnClassData: res.datas.cmsDatas[0].datas.length > 0 ? res.datas.cmsDatas[0].datas.find(item => item.refCode == "jsek_cloudLearning") : null
|
})
|
} catch (error) {}
|
if (this.data.learnClassData) {
|
this.getResourceDataList(this.data.learnClassData)
|
} else {
|
this.resourceDetailsData()
|
}
|
});
|
},
|
// 教学资源 云学习 获取
|
getResourceDataList(type) {
|
let query = {
|
path: '*',
|
queryType: '*',
|
productId: this.data.bookDetail.id,
|
cmsPath: type.productLinkPath,
|
cmsType: '*',
|
itemFields: {
|
SysType: 'CmsFolder',
|
},
|
pading: {
|
start: 0,
|
size: 999
|
},
|
}
|
app.MG.store.getProductDetailNoChildren(query).then((res) => {
|
const buyList = res.datas.cmsDatas[0].datas.filter(item => item.saleMethod.length && this.data.buyIdList.includes(item.saleMethod.find(citem => citem.SaleType == 'Normal').Id))
|
if (this.data.learnClassData && this.data.learnClassData.saleMethod.length) {
|
const learnSaleMethod = this.data.learnClassData.saleMethod.find(citem => citem.SaleType == 'Normal')
|
if (this.data.buyIdList.includes(learnSaleMethod.Id)) {
|
buyList.push(this.data.learnClassData)
|
} else {
|
if (new Date().getTime() > new Date(learnSaleMethod.EndDate).getTime() || learnSaleMethod.Price == 0) {
|
this.setData({
|
isLearnDataBuy: true
|
})
|
} else {
|
this.setData({
|
isLearnDataBuy: false
|
})
|
}
|
}
|
} else {
|
this.setData({
|
isLearnDataBuy: true
|
})
|
}
|
this.setData({
|
buyList: buyList
|
})
|
this.resourceDetailsData()
|
})
|
},
|
count(timeStr) {
|
const data = {
|
appRefCode: app.config.appRefCode,
|
type: 'LearningTime', //统计类型--阅读时长
|
data: timeStr + '', //统计内容--时长毫秒
|
event: 'LearningTime',
|
sysType: 'App'
|
}
|
//阅读商品的id
|
if (this.data.bookId) {
|
data.productId = this.data.bookId
|
}
|
//阅读资源的id
|
if (this.data.cmsId) {
|
data.cmsItemId = this.data.cmsId
|
}
|
app.MG.job.newJobWithApiNewEvent(data).then((res) => {})
|
},
|
onTabsChange(event) {
|
let tabValue = event.detail.value
|
if (tabValue == '1') {
|
this.getNoteList()
|
}
|
},
|
handleChange(e) {
|
this.setData({
|
activeValues: e.detail.value,
|
});
|
},
|
onTakeNotes() {
|
|
},
|
showDialog(e) {
|
this.setData({
|
dialogKey: true,
|
textvalue: '',
|
submitTitle: this.data.titleName
|
});
|
},
|
closeDialog() {
|
this.setData({
|
dialogKey: false,
|
textvalue: '',
|
flag: false
|
});
|
},
|
goBack() {
|
wx.navigateBack();
|
},
|
resourceDetailsData() {
|
this.setData({
|
videoLoading: true,
|
loading: true
|
})
|
let query = {
|
storeInfo: this.data.storeInfo,
|
path: '*',
|
queryType: '*',
|
productId: this.data.bookId,
|
cmsPath: this.data.parentProductLinkPath,
|
itemFields: {
|
SysType: 'CmsFolder',
|
// 资源类型,试读文件,是否允许下载等参数
|
selectType: [],
|
freeFile: [],
|
file: [],
|
protectedFile: [],
|
resourcesClassification: [],
|
isDownload: [],
|
jsek_resourceBrief: [],
|
jsek_link: [],
|
jsek_questionBank: [],
|
learnSelectType: []
|
},
|
pading: {
|
start: 0,
|
size: 999
|
}
|
}
|
app.MG.store.getProductDetail(query).then(res => {
|
this.setData({
|
isBuy: res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)
|
})
|
res.datas.cmsDatas[0].datas.forEach((item) => {
|
// if (this.data.source == 'qrcode') {
|
// if (item.id == this.data.activeId) {
|
// this.data.threeLeveData.push(item);
|
// }
|
// } else {
|
if (item.selectType === "video" || item.learnSelectType === "video") {
|
if (this.data.storeInfo == 'jsek_digitalCourses') {
|
// if (item.sysType == 'CmsItem') this.data.threeLeveData.push(item)
|
if (this.data.isBuy) {
|
if (item.sysType == 'CmsItem') {
|
this.data.threeLeveData.push(item)
|
}
|
} else {
|
if (item.sysType == 'CmsItem' && item.freeFile) {
|
this.data.threeLeveData.push(item)
|
}
|
}
|
} else {
|
// 买了
|
if (this.data.buyList.length) {
|
if (this.data.buyList.some(citem => item.productLinkPath.includes(citem.productLinkPath))) {
|
this.data.threeLeveData.push(item)
|
}
|
} else {
|
if (!item.saleMethod.length) {
|
// 没买且无销售方式
|
this.data.threeLeveData.push(item)
|
} else {
|
// 没买且销售方式过期//没买,销售方式价格为0
|
const itemSaleMethod = item.saleMethod.find(citem => citem.SaleType == 'Normal')
|
if (new Date().getTime() > new Date(itemSaleMethod.EndDate).getTime() || itemSaleMethod.Price == 0) {
|
this.data.threeLeveData.push(item)
|
}
|
// 没买且只有试读资源
|
if (!item.file && item.freeFile) this.data.threeLeveData.push(item)
|
}
|
}
|
}
|
|
}
|
// }
|
})
|
if (this.data.source == 'qrcode') {
|
let qrData = this.data.threeLeveData.find(ditem => ditem.id == this.data.activeId)
|
if (qrData && this.data.isLearnDataBuy) {
|
if (qrData) {
|
this.setData({
|
threeLeveData: [qrData]
|
})
|
}
|
} else {
|
this.setData({
|
threeLeveData: []
|
})
|
}
|
} else {
|
this.setData({
|
threeLeveData: this.data.threeLeveData
|
})
|
}
|
if (this.data.threeLeveData.length > 0) {
|
this.data.threeLeveData.forEach((items, index) => { // 修改此处添加index参数
|
if (this.data.productLinkPath == items.productLinkPath) {
|
if (this.data.formPath === "jsek_cloudLearning") {
|
let file
|
items.protectedFile || items.file ? file = items.protectedFile || items.file : file = items.freeFile
|
this.setData({
|
showData: app.config.requestCtx + '/file/api/ApiDownloadForAuthorize?md5=' + file + '&token=' + wx.getStorageSync(app.config.tokenKey),
|
titleName: items.name
|
})
|
this.aliVod(file, this.data.showData)
|
|
} else {
|
this.setData({
|
showData: items.file ? app.config.requestCtx + '/file/api/ApiDownload?md5=' + items.file : app.config.requestCtx + '/file/api/ApiDownload?md5=' + items.freeFile,
|
titleName: items.name
|
})
|
this.aliVod(items.file, this.data.showData)
|
}
|
let selectedIndex = index; // 存储选中项的索引
|
this.setData({
|
selectedId: selectedIndex // 设置选中项的索引
|
});
|
}
|
});
|
} else {
|
wx.showToast({
|
icon: 'none',
|
title: '请先返回资源所在图书详情购买视频资源',
|
})
|
wx.navigateTo({
|
url: `/packageBookService/pages/bookServices/detail/index?id=${this.data.bookDetail.id}&name=${this.data.bookDetail.name}&tabValue=jsek_cloudLearning`,
|
});
|
|
}
|
this.setData({
|
loading: false,
|
hidden: false,
|
})
|
})
|
},
|
onVideo(e) {
|
this.setPlayerList()
|
const item = e.currentTarget.dataset.item
|
this.setData({
|
videoLoading: true,
|
selectedId: e.currentTarget.dataset.index,
|
activeId: item.id,
|
// showData: '',
|
titleName: item.name
|
})
|
|
if (item.selectType == "video" || item.learnSelectType === "video") {
|
if (this.data.formPath === "jsek_cloudLearning") {
|
let file =
|
item.protectedFile || item.file ? file = item.protectedFile || item.file : file = item.freeFile
|
this.setData({
|
showData: app.config.requestCtx + '/file/api/ApiDownloadForAuthorize?md5=' + file + '&token=' + wx.getStorageSync(app.config.tokenKey)
|
})
|
this.aliVod(file, this.data.showData)
|
} else {
|
this.setData({
|
showData: item.file ? app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.file : app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.freeFile,
|
})
|
this.aliVod(item.file, this.data.showData)
|
}
|
}
|
},
|
|
aliVod(md5, currentVideo) {
|
if (md5) {
|
let query = {
|
md5: md5,
|
appRefCode: app.config.appRefCode
|
}
|
app.MG.file.getAliVod(query).then((res) => {
|
if (res) {
|
if (res && res.data == '') {
|
this.setData({
|
showDataVod: currentVideo,
|
videoLoading: false,
|
})
|
} else {
|
this.setData({
|
showDataVod: res,
|
videoLoading: false,
|
})
|
}
|
this.setData({})
|
} else if (currentVideo) {
|
this.setData({
|
showDataVod: currentVideo,
|
videoLoading: false,
|
})
|
} else {
|
return wx.showToast({
|
icon: 'error',
|
title: '无法获取视频资源',
|
})
|
}
|
})
|
} else {
|
return wx.showToast({
|
icon: 'error',
|
title: '暂无视频资源',
|
})
|
}
|
},
|
|
timeUpdate(e) {
|
let {
|
currentTime,
|
duration
|
} = e.detail
|
|
this.setData({
|
progress: ((currentTime / duration) * 100).toFixed(2)
|
})
|
},
|
//获取视频学习
|
getPlayerList() {
|
app.MG.identity
|
.getUserKey({
|
domain: 'videoPlayer',
|
keys: [this.data.bookId]
|
})
|
.then((res) => {
|
if (res.length > 0) {
|
this.setData({
|
playerList: JSON.parse(res[0].value)
|
})
|
}
|
})
|
},
|
setPlayerList() {
|
let that = this
|
if (that.data.progress > 0) {
|
let index = that.data.playerList.findIndex((itemData) => itemData.cmsItemId == that.data.activeId)
|
if (index > -1) {
|
that.data.playerList.splice(index, 1)
|
}
|
that.data.playerList.push({
|
cmsItemId: that.data.activeId,
|
progress: that.data.progress
|
})
|
app.MG.identity
|
.setUserKey({
|
setKeyRequests: [{
|
domain: 'videoPlayer',
|
key: that.data.bookId,
|
value: JSON.stringify(that.data.playerList)
|
}]
|
})
|
.then((res) => {})
|
}
|
},
|
|
getProductUserSubmitTopicGet() {
|
app.MG.ugc.getProductUserSubmitTopic({
|
productId: this.data.bookId,
|
appRefCode: app.config.appRefCode
|
}).then((res) => {
|
this.setData({
|
topicId: res.id
|
})
|
})
|
},
|
|
newTopicMessageGet() {
|
let query = {
|
topicIdOrRefCode: topicId + '',
|
name: titleText.value,
|
content: form.value.noteContent,
|
type: 'note',
|
cmsTypeRefCode: '',
|
newDataListRequest: []
|
}
|
app.MG.ugc.newTopicMessage(query).then(res => {
|
console.log(res);
|
})
|
},
|
|
// 标题改变
|
changeTitle(e) {
|
this.setData({
|
flag: e.currentTarget.dataset.value
|
})
|
},
|
// 标题输入框值
|
inputChange(e) {
|
this.setData({
|
submitTitle: e.detail.value
|
})
|
},
|
|
confirmSuggest() {
|
if (!this.data.textvalue.trim()) {
|
return wx.showToast({
|
icon: 'error',
|
title: '请填写笔记内容',
|
})
|
} else if (!this.data.submitTitle) {
|
return wx.showToast({
|
icon: 'error',
|
title: '请填写笔记标题',
|
})
|
}
|
if (this.data.submitType == 'new') {
|
this.makeNote()
|
} else if (this.data.submitType == 'edit') {
|
this.updateNote()
|
}
|
this.setData({
|
dialogKey: false
|
});
|
},
|
onTextarea() {
|
console.log(this.data.textvalue);
|
},
|
textareaChange(e) {
|
this.setData({
|
textvalue: e.detail.value
|
})
|
},
|
// 获取笔记列表
|
async getNoteList() {
|
this.setData({
|
loading: true
|
})
|
let topicId
|
await app.MG.ugc
|
.getProductUserSubmitTopic({
|
productId: this.data.bookId,
|
appRefCode: app.config.appRefCode
|
})
|
.then((res) => {
|
if (res) {
|
topicId = res.id
|
} else {
|
return wx.showToast({
|
icon: "error",
|
title: '查询失败',
|
})
|
}
|
})
|
// loadings.value.bookResource = true
|
let query = {
|
start: 0,
|
size: 999,
|
messageType: 'note',
|
sort: {
|
type: 'Desc',
|
field: 'CreateDate'
|
},
|
appRefCode: app.config.appRefCode,
|
topicIdOrRefCode: topicId + ''
|
}
|
await app.MG.ugc.getTopicMessageList(query).then((res) => {
|
// notePage.value.total = res.totalSize
|
res.datas.forEach((item) => {
|
// item.compliceHover = false
|
// item.deleteHover = false
|
item.createDate = moment(item.createDate).format('YYYY-MM-DD HH:mm:ss')
|
})
|
this.setData({
|
"pageCount.total": res.totalSize,
|
noteList: res.datas,
|
loading: false
|
})
|
})
|
},
|
// 编辑按钮
|
editNote(e) {
|
const note = e.currentTarget.dataset.note
|
this.setData({
|
submitType: "edit",
|
textvalue: note.content,
|
submitTitle: note.name,
|
noteId: note.id,
|
dialogKey: true,
|
})
|
},
|
|
// 删除笔记
|
deleteNote(e) {
|
const id = e.currentTarget.dataset.id
|
const messageIds = []
|
messageIds.push(id)
|
wx.showModal({
|
title: '提示',
|
content: '确认删除该笔记吗?', //editable如果为true,这就是输入框的内容
|
editable: false, //是否显示输入框
|
placeholderText: '请输入内容吧', //输入框的默认内容
|
success: (res) => {
|
if (res.confirm) {
|
app.MG.ugc
|
.delTopicMessage({
|
messageIds
|
})
|
.then((res) => {
|
wx.showToast({
|
title: '删除成功',
|
})
|
// if ((notePage.value.total % 3) - 1 == 0) {
|
// notePage.value.page -= 1
|
// }
|
this.getNoteList()
|
})
|
} else if (res.cancel) {
|
console.log('用户点击取消')
|
}
|
}
|
})
|
},
|
// 新建笔记接口
|
async makeNote() {
|
const token = wx.getStorageSync('jsek-token')
|
if (!token) {
|
return wx.getUserProfile({
|
desc: '用户登录',
|
success: (res) => {
|
console.log(res);
|
}
|
})
|
}
|
let topicId
|
await app.MG.ugc
|
.getProductUserSubmitTopic({
|
productId: this.data.bookId,
|
appRefCode: app.config.appRefCode
|
})
|
.then((res) => {
|
if (res) {
|
topicId = res.id
|
} else {
|
return wx.showToast({
|
icon: 'error',
|
title: '新建失败',
|
})
|
}
|
})
|
let query = {
|
topicIdOrRefCode: topicId + '',
|
name: this.data.submitTitle,
|
content: this.data.textvalue,
|
type: 'note',
|
cmsTypeRefCode: '',
|
newDataListRequest: []
|
}
|
await app.MG.ugc.newTopicMessage(query).then((res) => {
|
wx.showToast({
|
title: '新建成功',
|
})
|
this.closeDialog()
|
this.getNoteList()
|
})
|
},
|
// 编辑笔记接口
|
updateNote() {
|
const token = wx.getStorageSync('jsek-token')
|
if (!token) {
|
return wx.getUserProfile({
|
desc: '用户登录',
|
success: (res) => {
|
console.log(res);
|
}
|
})
|
}
|
if (!this.data.submitTitle) {
|
return wx.showToast({
|
icon: 'error',
|
title: '请填写笔记标题',
|
})
|
} else if (!this.data.textvalue) {
|
return wx.showToast({
|
icon: 'error',
|
title: '请填写笔记内容',
|
})
|
}
|
let query = {
|
id: this.data.noteId,
|
name: this.data.submitTitle,
|
description: 'string',
|
icon: 'string',
|
type: 'note',
|
content: this.data.textvalue,
|
newDataRequests: [],
|
updateDataRequests: []
|
}
|
app.MG.ugc.updateTopicMessage(query).then((res) => {
|
wx.showToast({
|
title: '编辑成功',
|
})
|
this.closeDialog()
|
this.getNoteList()
|
})
|
this.setData({
|
submitType: "new"
|
})
|
},
|
videoErrorCallback(e) {
|
console.log(e);
|
},
|
videoError: function (e) {
|
this.setData({
|
videoError: true
|
});
|
},
|
loadedmetadata(e) {
|
this.setData({
|
videoLoading: false
|
})
|
}
|
})
|