| | |
| | | import { |
| | | loginInfo |
| | | } from '../../../../assets/js/login'; |
| | | import XLSX from '../../../../utils/xlsx.mini.min'; |
| | | Page({ |
| | | |
| | | /** |
| | |
| | | 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: '' |
| | | }, |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | |
| | | wx.setNavigationBarTitle({ |
| | | title: '资源详情' |
| | | }); |
| | | console.log(options); |
| | | const systInfo = wx.getSystemInfoSync(); |
| | | const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 |
| | | const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 |
| | |
| | | parentProductLinkPath: options.parentProductLinkPath, |
| | | productLinkPath: options.productLinkPath, |
| | | applyState: options.applyState, |
| | | deadline: options.deadline |
| | | deadline: options.deadline, |
| | | formPath: options.formPath, |
| | | }) |
| | | const token = wx.getStorageSync(app.config.tokenKey) |
| | | if (!token) { |
| | | loginInfo(app, (data) => { |
| | | if (data) { |
| | | this.resourceDetailsData() |
| | | } else { |
| | | this.resourceDetailsData() |
| | | if (options.formPath == 'jsek_cloudLearning') { |
| | | this.setData({ |
| | | learnStartTime: Date.now(), |
| | | }) |
| | | this.getLearnTime() |
| | | } |
| | | this.getBookInfo(this.data.bookId) |
| | | // if (data) { |
| | | // this.resourceDetailsData() |
| | | // } else { |
| | | // this.resourceDetailsData() |
| | | // } |
| | | }) |
| | | } else { |
| | | this.resourceDetailsData() |
| | | if (options.formPath == 'jsek_cloudLearning') { |
| | | this.setData({ |
| | | learnStartTime: Date.now(), |
| | | }) |
| | | this.getLearnTime() |
| | | } |
| | | this.getBookInfo(this.data.bookId) |
| | | // this.resourceDetailsData() |
| | | } |
| | | |
| | | }, |
| | | |
| | | /** |
| | |
| | | this.setData({ |
| | | pauseTime: Date.now() |
| | | }) |
| | | if (wx.getStorageSync(app.config.tokenKey) && epubObj && epubObj.bookBuy) { |
| | | 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.setData({ |
| | | pauseTime: Date.now() |
| | | }) |
| | | if (wx.getStorageSync(app.config.tokenKey) && epubObj && epubObj.bookBuy) { |
| | | 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) |
| | | } |
| | | } |
| | | }, |
| | | |
| | |
| | | } |
| | | 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, '学习时长') |
| | | }) |
| | | }, |
| | | /** |
| | | * 页面相关事件处理函数--监听用户下拉动作 |
| | | */ |
| | |
| | | /** |
| | | * 页面上拉触底事件的处理函数 |
| | | */ |
| | | onReachBottom() { |
| | | |
| | | }, |
| | | onReachBottom() {}, |
| | | |
| | | /** |
| | | * 用户点击右上角分享 |
| | |
| | | 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() { |
| | |
| | | query.storeInfo = this.data.storeInfo |
| | | } |
| | | app.MG.store.getProductDetail(query).then((res) => { |
| | | console.log(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 |
| | | }) |
| | | // if (this.data.productLinkPath == item.productLinkPath) { |
| | | // this.handleTeachData(item) |
| | | // this.setData({ |
| | | // titleName: item.name, |
| | | // selectType: item.selectType, |
| | | // learnSelectType: item.learnSelectType |
| | | // }) |
| | | // } else { |
| | | // return wx.showToast({ |
| | | // icon: 'none', |
| | | // title: '暂无资源', |
| | | // }) |
| | | // } |
| | | 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文件下载 |
| | |
| | | }) |
| | | } |
| | | } |
| | | if (!item || !item.file) { |
| | | if (!item || !item.file || !item.protectedFile) { |
| | | wx.showToast({ |
| | | title: '文件信息缺失', |
| | | icon: 'none' |
| | | }); |
| | | return; |
| | | } |
| | | const downloadUrl = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.file; |
| | | let file = item.file ? item.file : item.protectedFile |
| | | const downloadUrl = app.config.requestCtx + '/file/api/ApiDownload?md5=' + file; |
| | | wx.showLoading({ |
| | | title: '正在下载...', |
| | | }); |
| | |
| | | }, |
| | | //刚进来的时候调用 |
| | | handleTeachData(item) { |
| | | let that = this |
| | | //图片 |
| | | |
| | | if (item.selectType == 'picture') { |
| | | if (item.selectType == 'picture' || item.learnSelectType == 'picture') { |
| | | let file = item.file ? item.file : item.protectedFile ? item.protectedFile : item.freeFile |
| | | this.setData({ |
| | | showData: item.file ? app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.file : app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.freeFile, |
| | | showData: app.config.requestCtx + '/file/api/ApiDownload?md5=' + file, |
| | | }) |
| | | wx.hideLoading(); |
| | | } |
| | | // 下载文件zip |
| | | if (item.selectType == 'zip') { |
| | | if (item.selectType == 'zip' || item.learnSelectType == 'zip') { |
| | | this.setData({ |
| | | zipData: item |
| | | }) |
| | | wx.hideLoading(); |
| | | } |
| | | //网页 |
| | | if (item.selectType == 'webpage') { |
| | | 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 == 'pdf' || item.selectType == 'document') { |
| | | app.MG.file.getPdfInfo({ |
| | | md5: item.file |
| | | }).then((res) => { |
| | | let naturalResources = [] |
| | | if (res && res.totalPages) { |
| | | for (let i = 0; i < res.totalPages; i++) { |
| | | const src = app.config.requestCtx + '/file/GetPdfPageImage?md5=' + item.file + '&index=' + (i + 1) + '&dpi=300' |
| | | naturalResources.push(src) |
| | | } |
| | | } |
| | | 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({ |
| | | naturalResources |
| | | selectTypeData: 'excel' |
| | | }) |
| | | wx.hideLoading(); |
| | | }) |
| | | 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(); |
| | | }) |
| | | } |
| | | } |
| | | |
| | | }, |
| | | |
| | | handleTap: function () { |
| | | const naturalResources = this.data.naturalResources; |
| | | naturalResources.forEach(function (item) { |
| | | // console.log(item); |
| | | }); |
| | | }, |
| | | |
| | | onClick() { |
| | |
| | | const { |
| | | trigger |
| | | } = e.detail; |
| | | console.log(trigger); |
| | | this.setData({ |
| | | visible: false, |
| | | }); |