// 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: ''
|
},
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
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.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) {
|
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') {
|
let file = item.file ? item.file : item.protectedFile ? item.protectedFile : 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 == 'pdf') {
|
// console.log('pdf', item);
|
// wx.hideLoading()
|
// let md5 = item.file ? item.file : item.freeFile
|
// let pdfSrc = app.config.pdfUrl + "?MD5=" + md5 + "&url=" + app.config.requestCtx + '¤tPage=' + "1" + "&isPreview=" + false + "&warterMark=" + "北京师范大学出版社" + "&previewPages=" + 30 + "&token=" + wx.getStorageSync(app.config.tokenKey)
|
// this.setData({
|
// pdfSrc: pdfSrc
|
// })
|
// }
|
//文档等
|
if (item.selectType == 'document' || item.selectType == 'pdf' || item.learnSelectType == 'document' || item.learnSelectType == 'pdf') {
|
let md5 = item.file ? item.file : item.protectedFile ? item.protectedFile : item.freeFile
|
if (item.fileMap[md5]?.extension == 'xlsx' || item.fileMap[md5]?.extension == 'xls') {
|
this.setData({
|
selectTypeData: 'excel'
|
})
|
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链接列表
|
})
|
},
|
|
// myTouchStart(e) {
|
// //---------------------记录缩放事件信息---------------------
|
// // 当两根手指放上去的时候,将距离(distance)初始化。
|
// let xMove = e.touches[1].clientX - e.touches[0].clientX;
|
// let yMove = e.touches[1].clientY - e.touches[0].clientY;
|
// //计算开始触发两个手指坐标的距离
|
// const distance = Math.sqrt(xMove * xMove + yMove * yMove);
|
// this.setData({
|
// distance: distance
|
// })
|
// //---------------------记录缩放事件信息end---------------------
|
// },
|
// myTouchMove(e) {
|
// // ----------------监听手势缩小放大事件----------------
|
// // 单手指缩放不做任何操作
|
// if (e.touches.length != 1) {
|
// //双手指运动 x移动后的坐标和y移动后的坐标
|
// let xMove = e.touches[1].clientX - e.touches[0].clientX;
|
// let yMove = e.touches[1].clientY - e.touches[0].clientY;
|
// //双手指运动新的 ditance
|
// let newDistance = Math.sqrt(xMove * xMove + yMove * yMove);
|
// //计算移动的过程中实际移动了多少的距离
|
// let distanceDiff = newDistance - this.data.distance;
|
// // newScale = scale + 0.005 * distanceDiff
|
// console.log('移动距离', distanceDiff);
|
// this.setData({
|
// newScale: this.data.newScale + 0.005 * distanceDiff
|
// })
|
// // 打开缩放监听
|
// // zoomFlag = true
|
// this.setData({
|
// lzoomFlag: true
|
// })
|
// return
|
// }
|
// // ----------------监听手势缩小放大事件end----------------
|
// },
|
// myTouchEnd() {
|
// if (this.data.lzoomFlag) {
|
// if (this.data.newScale > 1.3) {
|
// console.log("放大了", this.data.newScale);
|
// } else if (this.data.newScale < 0.7, this.data.newScale) {
|
// console.log("缩小了");
|
// }
|
// // 关闭缩放监听
|
// // zoomFlag = false
|
// this.setData({
|
// lzoomFlag: false
|
// })
|
// }
|
// },
|
})
|