// pages/resourceDetails/document/index.js
|
import Toast from 'tdesign-miniprogram/toast/index';
|
const app = getApp()
|
import {
|
loginInfo
|
} from '../../../../assets/js/login';
|
import XLSX from '../../../../utils/xlsx.mini.min';
|
Page({
|
|
/**
|
* 页面的初始数据
|
*/
|
data: {
|
visible: false,
|
showIndex: false,
|
closeBtn: false,
|
deleteBtn: false,
|
images: [],
|
webpageSrc: '',
|
navBarHeight: '',
|
barHeight: '',
|
activeId: '',
|
storeInfo: '',
|
bookId: '',
|
bookName: '',
|
cmsId: '',
|
parentName: '',
|
parentProductLinkPath: '',
|
productLinkPath: '',
|
isBuy: false,
|
showData: '',
|
titleName: '',
|
selectType: '',
|
learnSelectType: '',
|
zipData: '',
|
naturalResources: [],
|
titleName: '',
|
pdfDatA: [],
|
startTime: "", //进入页面当前时间
|
pauseTime: 0, //暂停时间
|
formPath: '',
|
applyState: '',
|
deadline: '',
|
lzoomFlag: false, //定义 缩放事件 节流阀,防止一次缩放触发两次缩放事件
|
distance: 0, //记录手指移动距离
|
scale: 1, //定义初始化的页面缩放大小
|
newScale: 1, //记录新的页面缩放大小
|
pdfSrc: '',
|
buyIdList: [],
|
buyList: [],
|
learnClassData: null,
|
isLearnDataBuy: false,
|
bookDetail: null,
|
learnStartTime: 0,
|
learnTimeList: [],
|
learnTimeData: 0,
|
threeLeveData: [],
|
selectTypeData: '',
|
promptVisable: false,
|
showMd5: '',
|
confirmBtn: {
|
content: '确定',
|
variant: 'base',
|
},
|
},
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
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,
|
bookId: options.bookId,
|
bookName: options.bookName,
|
storeInfo: options.storeInfo,
|
cmsId: options.cmsId,
|
parentName: options.parentName,
|
parentProductLinkPath: options.parentProductLinkPath,
|
productLinkPath: options.productLinkPath,
|
applyState: options.applyState,
|
deadline: options.deadline,
|
formPath: options.formPath,
|
})
|
if (options.formPath == 'jsek_cloudLearning') {
|
this.setData({
|
learnStartTime: Date.now(),
|
})
|
this.getLearnTime()
|
}
|
this.getBookInfo(this.data.bookId)
|
},
|
|
/**
|
* 生命周期函数--监听页面初次渲染完成
|
*/
|
onReady() {
|
|
},
|
|
/**
|
* 生命周期函数--监听页面显示
|
*/
|
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)
|
}
|
}
|
},
|
|
/**
|
* 生命周期函数--监听页面卸载
|
*/
|
onUnload() {
|
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)
|
}
|
}
|
},
|
|
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) => {})
|
},
|
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, '学习时长')
|
})
|
},
|
/**
|
* 页面相关事件处理函数--监听用户下拉动作
|
*/
|
onPullDownRefresh() {
|
|
},
|
|
/**
|
* 页面上拉触底事件的处理函数
|
*/
|
onReachBottom() {},
|
|
/**
|
* 用户点击右上角分享
|
*/
|
onShareAppMessage() {},
|
onShareTimeline() {},
|
goBack() {
|
wx.navigateBack()
|
},
|
|
// 获取图书详情
|
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()
|
})
|
},
|
|
resourceDetailsData() {
|
wx.showLoading({
|
title: '正在加载...',
|
});
|
let query = {
|
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
|
}
|
}
|
if (this.data.storeInfo) {
|
query.storeInfo = this.data.storeInfo
|
}
|
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.productLinkPath == item.productLinkPath) {
|
this.handleTeachData(item)
|
this.setData({
|
titleName: item.name,
|
selectType: item.selectType,
|
learnSelectType: item.learnSelectType
|
})
|
}
|
if (this.data.storeInfo == 'jsek_digitalCourses') {
|
if (this.data.isBuy) {
|
if (this.data.productLinkPath == item.productLinkPath) {
|
this.data.threeLeveData.push(item)
|
}
|
} else {
|
if (this.data.productLinkPath == item.productLinkPath && item.freeFile) {
|
this.data.threeLeveData.push(item)
|
}
|
}
|
} else {
|
// 买了
|
if (this.data.buyList.length) {
|
if (this.data.buyList.some(citem => item.productLinkPath.includes(citem.productLinkPath))) {
|
if (this.data.productLinkPath == item.productLinkPath) {
|
this.data.threeLeveData.push(item)
|
}
|
}
|
} else {
|
if (!item.saleMethod.length) {
|
// 没买且无销售方式
|
if (this.data.productLinkPath == item.productLinkPath) {
|
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) {
|
if (this.data.productLinkPath == item.productLinkPath) {
|
this.data.threeLeveData.push(item)
|
}
|
}
|
// 没买且只有试读资源
|
if (!item.file && item.freeFile) {
|
if (this.data.productLinkPath == item.productLinkPath) {
|
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.cmsItemIsBuy(qrData)) {
|
this.setData({
|
threeLeveData: [qrData]
|
})
|
} else {
|
this.setData({
|
threeLeveData: []
|
})
|
}
|
} else {
|
this.setData({
|
threeLeveData: this.data.threeLeveData
|
})
|
}
|
if (this.data.threeLeveData.length > 0) {
|
let item = this.data.threeLeveData[0]
|
this.handleTeachData(item)
|
this.setData({
|
titleName: item.name,
|
selectType: item.selectType,
|
learnSelectType: item.learnSelectType,
|
})
|
} 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`,
|
// });
|
}
|
})
|
},
|
//zpi文件下载
|
onDownloadButton() {
|
const item = this.data.zipData;
|
if (this.data.applyState !== 'Normal') {
|
if (!this.data.deadline == '永久') {
|
const flag = new Date(this.data.deadline) > new Date()
|
return wx.showToast({
|
icon: 'none',
|
title: '请先申请下载',
|
})
|
}
|
}
|
if (!item || !item.file || !item.protectedFile) {
|
wx.showToast({
|
title: '文件信息缺失',
|
icon: 'none'
|
});
|
return;
|
}
|
let file = item.file ? item.file : item.protectedFile
|
const downloadUrl = app.config.requestCtx + '/file/api/ApiDownload?md5=' + file;
|
wx.showLoading({
|
title: '正在下载...',
|
});
|
wx.downloadFile({
|
url: downloadUrl,
|
success(res) {
|
if (res.statusCode === 200) {
|
// 下载成功,可以在这里进行一些操作,例如预览、保存等
|
// 这里以保存文件到系统为例
|
wx.saveFile({
|
tempFilePath: res.tempFilePath,
|
success(saveRes) {
|
wx.hideLoading();
|
wx.showToast({
|
title: '保存成功',
|
});
|
// 获取保存后的文件路径
|
const savedFilePath = saveRes.savedFilePath;
|
// 可以在这里进行后续操作,例如打开文件
|
wx.openDocument({
|
filePath: savedFilePath,
|
success: function () {
|
console.log('打开文档成功')
|
},
|
fail: function (error) {
|
console.error('打开文档失败', error);
|
}
|
});
|
},
|
fail() {
|
wx.hideLoading();
|
wx.showToast({
|
title: '保存失败',
|
icon: 'none'
|
});
|
}
|
});
|
} else {
|
wx.hideLoading();
|
wx.showToast({
|
title: '下载失败',
|
icon: 'none'
|
});
|
}
|
},
|
fail() {
|
wx.hideLoading();
|
wx.showToast({
|
title: '下载失败',
|
icon: 'none'
|
});
|
}
|
});
|
},
|
//刚进来的时候调用
|
handleTeachData(item) {
|
let that = this
|
//图片
|
if (item.selectType == 'picture' || item.learnSelectType == 'picture') {
|
const isBuy = this.cmsItemIsBuy(item)
|
let file = isBuy ? item.protectedFile || item.file : item.freeFile
|
this.setData({
|
showData: app.config.requestCtx + '/file/api/ApiDownload?md5=' + file,
|
})
|
wx.hideLoading();
|
}
|
// 下载文件zip
|
if (item.selectType == 'zip' || item.learnSelectType == 'zip') {
|
this.setData({
|
zipData: item
|
})
|
wx.hideLoading();
|
}
|
//网页
|
if (item.selectType == 'webpage' || item.learnSelectType == 'webpage') {
|
this.setData({
|
webpageSrc: item.jsek_link
|
})
|
wx.hideLoading();
|
}
|
//文档等
|
if (item.selectType == 'document' || item.selectType == 'pdf' || item.learnSelectType == 'document' || item.learnSelectType == 'pdf') {
|
const isBuy = this.cmsItemIsBuy(item)
|
let md5 = isBuy ? item.protectedFile || item.file || item.freeFile : item.freeFile
|
if (item.fileMap[md5]?.extension == 'xlsx' || item.fileMap[md5]?.extension == 'xls') {
|
this.setData({
|
selectTypeData: 'excel',
|
showMd5: md5,
|
})
|
wx.request({
|
url: app.config.requestCtx + '/file/api/ApiDownload?md5=' + md5,
|
method: 'GET', // 请求方式
|
responseType: 'arraybuffer', // 指定返回类型为 arraybuffer
|
success: (res) => {
|
if (res.statusCode === 200) {
|
let data = new Uint8Array(res.data)
|
let workbook = XLSX.read(data, {
|
type: 'array'
|
})
|
let worksheet = workbook.Sheets[workbook.SheetNames[0]]
|
let innerHTML = XLSX.utils.sheet_to_json(worksheet)
|
console.log(innerHTML)
|
that.setData({
|
naturalResources: innerHTML
|
})
|
wx.hideLoading();
|
} else {
|
console.error('请求失败', res.statusCode);
|
}
|
},
|
fail: function (err) {
|
console.error('请求失败', err);
|
}
|
});
|
} else {
|
app.MG.file.getPdfInfo({
|
md5: md5
|
}).then((res) => {
|
let naturalResources = []
|
if (res && res.totalPages) {
|
for (let i = 0; i < res.totalPages; i++) {
|
const src = app.config.requestCtx + '/file/GetPdfPageImage?md5=' + md5 + '&index=' + (i + 1) + '&dpi=300'
|
naturalResources.push(src)
|
}
|
}
|
this.setData({
|
naturalResources
|
})
|
wx.hideLoading();
|
})
|
}
|
}
|
},
|
|
onClick() {
|
this.setData({
|
images: [
|
this.data.showData,
|
// 'https://tdesign.gtimg.com/mobile/demos/swiper2.png',
|
],
|
showIndex: true,
|
visible: true,
|
});
|
},
|
onChange(e) {
|
const {
|
index
|
} = e.detail;
|
console.log('change', index);
|
},
|
|
onDelete(e) {
|
const {
|
index
|
} = e.detail;
|
|
Toast({
|
context: this,
|
selector: '#t-toast',
|
message: `删除第${index + 1}个`,
|
});
|
},
|
|
onClose(e) {
|
const {
|
trigger
|
} = e.detail;
|
this.setData({
|
visible: false,
|
});
|
},
|
//预览图片,放大预览
|
preview(event) {
|
let urls = [event.currentTarget.dataset.src]
|
wx.previewImage({
|
urls: urls // 需要预览的图片http链接列表
|
})
|
},
|
// 判断当前点击的数据是否购买
|
cmsItemIsBuy(item) {
|
let flag = false
|
// 买了
|
if (this.data.buyList.length) {
|
if (this.data.buyList.some(citem => item.productLinkPath.includes(citem.productLinkPath)))
|
flag = true
|
} else {
|
// 没买且无销售方式
|
if (!item.saleMethod.length) {
|
flag = true
|
} else {
|
// 没买且销售方式过期//没买,销售方式价格为0
|
const itemSaleMethod = item.saleMethod.find(citem => citem.SaleType == 'Normal')
|
if (new Date().getTime() > new Date(itemSaleMethod.EndDate).getTime() || itemSaleMethod.Price == 0) flag = true
|
}
|
}
|
return flag
|
},
|
//
|
scrolltolower(e) {
|
const activeData = this.data.threeLeveData.find(item => item.id == this.data.activeId)
|
const flag = this.data.naturalResources.some(item => item.includes(activeData.freeFile))
|
if ((this.data.showMd5 == activeData.freeFile || flag) && activeData.protectedFile)
|
this.setData({
|
promptVisable: true
|
})
|
},
|
// 提示弹窗关闭
|
closePromapDialog() {
|
this.setData({
|
promptVisable: false
|
})
|
if (this.data.source == 'qrcode') {
|
wx.navigateTo({
|
url: `/packageBookService/pages/bookServices/detail/index?id=${this.data.bookDetail.id}&name=${this.data.bookDetail.name}&tabValue=${this.data.formPath}`,
|
});
|
} else {
|
wx.navigateBack()
|
}
|
}
|
})
|