// pages/bookServices/detail/index.js import Toast from "tdesign-miniprogram/toast"; import tool from "../../../../assets/js/toolClass"; import { loginInfo } from "../../../../assets/js/login"; import FormData from '../../../../utils/formdata/index.js'; const app = getApp(); Page({ /** * 页面的初始数据 */ data: { // 进页面默认切换 展开的id // defaultactiveTeachid 教学资源 // defaultactiveLearnid 云学习 bookId: "", barHeight: "", navBarHeight: "", options: { id: "", name: "", storeInfo: '', }, bookDetail: {}, bookClass: [], bookItemDetail: {}, link: { jd: "", tamll: "", dang: "", micro: "", }, tabValue: "brief", cmsDatas: [], // 资源refCode列表 ids: [1], list: [], teachResources: [], teach: [], learn: [], test: [], jslx: true, openTeachids: [], openLearnids: [], openTestids: [], isGoBuyResource: true, learnPath: '', applyResourceState: false, // 申请教学资源按钮防抖 resourceClassList: [], // 资源所属分类 applyState: "", // 教学资源申请状态 deadline: "", // 教学资源申请有效日期, isshowDrawBtn: true, // 云学习领取查看按钮是否显示 rejectCause: "", // 下载拒绝原因 buyIdList: [], shoppingCartGetId: [], // 已购买id列表 shoppingList: [], loading: false, isShowTeachDownload: false, // 提示PC下载弹窗状态 confirmBtn: { content: "我知道了", variant: "base", }, mockData: { id: 0, // 销售id price: 0, // 售价 count: 0, // 组卷已购买次数 useCount: 0, // 组件已使用次数 residue: 0, // 组卷剩余次数 mockList: [], // 用户组卷提交信息 }, relatedBookLoading: false, noRelatedBookData: false, relatedBookPath: "", // 相关图书path relatedBookData: [], // 相关图书列表 flag: true, noResources: false, selectedIds: "", //商品或子商品销售方式 bookBuy: false, //商品或子商品是否购买 expire: false, //商品或子商品销售方式是否过期 noFile: false, //商品或子商有无电子书文件 num: 0, //样书申请单数量 alreadyPaperBookList: [], //已申请纸质样书 alreadyElectronicBookList: [], //已申请电子样书 paperBookList: [], //样书单纸质书 electronicBookList: [], //样书单电子书 paperBookCount: 0, //纸质书剩余次数 ebookCount: 0, //电子书剩余次数 resourceCodeList: [], // 资源refcode列表 userInfo: {}, pageLoading: true, fileInfo: { bookName: "", fileType: "", md5: "", freePage: "", }, //阅读器数据 buyResourceData: { productLinkPath: "", refCode: "", }, briefIcon: { name: "/static/images/bookService/detail/tushujianjie-g.png", }, briefIconClick: { name: "/static/images/bookService/detail/tushujianjie-click.png", }, eBookIcon: { name: "/static/images/bookService/detail/ebook-g.png", }, eBookClickIcon: { name: "/static/images/bookService/detail/ebook-click.png", }, teachResourcesIcon: { name: "/static/images/bookService/detail/jiaoxueziyuan.png", }, teachResourcesClickIcon: { name: "/static/images/bookService/detail/jiaoxueziyuan-click.png", }, learnResourceIcon: { name: "/static/images/bookService/detail/yunxuexi.png", }, learnResourceClickIcon: { name: "/static/images/bookService/detail/yunxuexi-click.png", }, testResourceIocn: { name: "/static/images/bookService/detail/test-icon-g.png", }, testResourceClickIocn: { name: "/static/images/bookService/detail/test-click-icon.png", }, noteIcon: { name: "/static/images/bookService/detail/biji-icon-g.png", }, noteClickIcon: { name: "/static/images/bookService/detail/biji-click-icon.png", }, linkIcon: { name: "/static/images/bookService/detail/link.png", }, linkClickIcon: { name: "/static/images/bookService/detail/link-click.png", }, icon1: { name: "/static/images/bookService/detail/dangdang.png", }, rowCol: [{ width: '50%', }, { width: '100%' }, { width: '80%' }, { width: '100%' }, { width: '100%' }, ], showIndex: '', successOrderNumber: '', applicationState: '', // 电子样书申请状态 dialogBox: false, resourceInfo: { resourceName: '', fileType: '', description: '', agree: false }, fileList: [], isShowUp: true, protocolShow: false, protocolTxt: '' }, resetTree: function (e) { this.setData({ currentCheck: e.detail.checkedItem, list: e.detail.changeList, }); }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { const systInfo = wx.getSystemInfoSync(); const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 this.setData({ bookId: options.id + "", barHeight: systInfo.statusBarHeight, navBarHeight: navBarHeight, }); this.setData({ options: { id: options.id, name: options.name, storeInfo: options.storeInfo, }, }); wx.setNavigationBarTitle({ title: options.name, }) const token = wx.getStorageSync(app.config.tokenKey) if (!token) { loginInfo(app, (data) => { if (data) {} else {} }) } this.getBookInfo(options.id); // this.getResourceClass(); // 获取资源所属分类 if (token) { this.getShoppingCartProductGet(); this.getApplyInfo(options.id); this.getAlreadyPBookList(); this.getAlreadyEBookList(); } if (wx.getStorageSync(app.config.userInfoKey)) { this.setData({ userInfo: JSON.parse(wx.getStorageSync(app.config.userInfoKey)), }); // 获取申请次数 this.getSelectPaperBookCount(); this.getSelectBookCount(); } if (options.tabValue) { this.setData({ tabValue: options.tabValue, }); const checkData = this.data.cmsDatas.find( (item) => item.refCode == options.tabValue ); this.getResourceDataList(checkData) } }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() {}, /** * 生命周期函数--监听页面显示 */ onShow() { if (wx.getStorageSync("paperBookList")) { this.setData({ paperBookList: JSON.parse(wx.getStorageSync("paperBookList")), }); } if (wx.getStorageSync("electronicBookList")) { this.setData({ electronicBookList: JSON.parse(wx.getStorageSync("electronicBookList")), }); } this.setData({ num: Number(this.data.paperBookList.length) + Number(this.data.electronicBookList.length), }); }, /** * 生命周期函数--监听页面隐藏 */ onHide() {}, /** * 生命周期函数--监听页面卸载 */ onUnload() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { if (this.data.tabValue == "jsek_note") { const child = this.selectComponent("#note"); if (!child.data.noList) child.onReachBottom(); } }, /** * 用户点击右上角分享 */ onShareAppMessage() {}, // 格式化日期 formatDate(dateString) { if (!dateString) { return ""; } const match = dateString.match( /^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/ ); if (!match) { throw new Error("Invalid date format"); } const [, year, month, day, hours, minutes, seconds] = match; const date = new Date( parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10), parseInt(hours, 10), parseInt(minutes, 10), parseInt(seconds, 10) ); if (isNaN(date.getTime())) { throw new Error("Invalid date"); } // 由于小程序环境可能不支持 Intl.DateTimeFormat,我们使用简化的格式化方法 const formatted = `${year}年${this.formatMonth(month)}`; return formatted; }, // 简化的月份格式化函数,返回月份的中文表达 formatMonth(month) { const months = [ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月", ]; return months[parseInt(month, 10) - 1]; }, // 金额显示.00格式 numFormat(value) { if (!value) return "0.00"; value = Number(value).toFixed(2); var intPart = Math.trunc(value); // 获取整数部分 var intPartFormat = intPart .toString() .replace(/(\d)(?=(?:\d{3})+$)/g, "$1,"); // 将整数部分逢三一断 var floatPart = ".00"; // 预定义小数部分 var value2Array = value.split("."); // =2表示数据有小数位 if (value2Array.length === 2) { floatPart = value2Array[1].toString(); // 拿到小数部分 if (floatPart.length === 1) { return `${intPartFormat}.${floatPart}0`; } return `${intPartFormat}.${floatPart}`; } return intPartFormat + floatPart; }, // 返回 goBack() { let bookPathList = wx.getStorageSync("bookPathList"); if (bookPathList && JSON.parse(bookPathList).length) { bookPathList = JSON.parse(bookPathList); this.setData({ pageLoading: true, tabValue: "brief", }); this.onLoad(bookPathList[bookPathList.length - 1]); bookPathList.pop(); wx.setStorageSync("bookPathList", JSON.stringify(bookPathList)); } else { wx.navigateBack(); } }, // 获取图书详情 getBookInfo(id) { this.setData({ "mockData'.id": 0, "mockData.price": 0, "mockData.count": 0, }); const query = { storeInfo: this.data.options.storeInfo, path: "*", queryType: "*", productId: id, favoriteTypes: "FavoriteBookCity", itemFields: { "SysType=": "CmsFolder", }, coverSize: { height: 300, }, fields: { seriesName: [], author: [], isbn: [], publicationDate: [], bookClassification: [], paperPrice: [], JDLink: [], tmallLink: [], dangdangLink: [], weidianLink: [], content: [], catalogue: [], authorIntroduction: [], // isApplyPaperBook: [], // isApplyEBook: [], isApplyBook: [], isSell: [], pdf: [], protectedEpub: [], probationPage: [], //pdf试读页数 freeEpubPage: [], //epub试读百分比 }, }; app.MG.store.getProductDetail(query).then(async (res) => { this.getResourceCode(id, res.datas.rootCmsItemId) this.setData({ bookDetail: res.datas, buyIdList: res.datas.purchasedSaleMethodIdList, pageLoading: false }); if (res.datas.cmsDatas && res.datas.cmsDatas.length) { this.setData({ cmsDatas: res.datas.cmsDatas[0].datas, }) } if (res.datas.datas.ProductLinkInfo) { if (JSON.parse(res.datas.datas.ProductLinkInfo).length) this.setData({ relatedBookPath: JSON.parse(res.datas.datas.ProductLinkInfo)[0] .LinkPath, }) } this.getSubTtem(); // 获取图书分类 if (res.datas.bookClassification) { let classData = [] const bookClassification = JSON.parse(res.datas.bookClassification); if (Array.isArray(bookClassification) && bookClassification.length) { for (let index = 0; index < bookClassification.length; index++) { const element = bookClassification[index]; const iconType = element[0]; const classType = element[1]; classData.push({ iconType, classType }) } await this.getBookClass(classData); } } // 获取组卷销售id if (res.datas.saleMethod && res.datas.saleMethod.length) { res.datas.saleMethod.forEach((item) => { if (item.SaleType == "combinationTestPaper") { this.setData({ "mockData.id": item.Id, "mockData.price": item.Price, }); } }); } // 获取组卷已购买次数 if ( res.datas.purchasedSaleMethodIdList && res.datas.purchasedSaleMethodIdList.length ) { if (this.data.mockData.id) { let count = res.datas.purchasedSaleMethodIdList.filter( (item) => item == this.data.mockData.id ).length; this.setData({ "mockData.count": count, }); } } this.setData({ "bookDetail.publicationDate": this.formatDate( this.data.bookDetail.publicationDate ), "bookDetail.price": this.numFormat(this.data.bookDetail.price), "bookDetail.oldPrice": this.numFormat(this.data.bookDetail.oldPrice), "bookDetail.paperPrice": this.numFormat( this.data.bookDetail.paperPrice ), }); }); }, getResourceCode(bookId, cmsId) { let query = { path: '*', queryType: '*', productId: bookId, cmsPath: cmsId, itemFields: { SysType: 'Cms' }, pading: { start: 99, size: 0 } } app.MG.store.getProductDetail(query).then((res) => { this.setData({ resourceCodeList: res.datas.cmsDatas[0].datas }) // console.log('图书资源', res.datas.cmsDatas[0].datas) }) }, //请求子商品的文件 getSubTtem() { const obj = { path: "*", queryType: "SubProduct", sort: { type: "Desc", field: "CreateDate", }, paging: { start: 0, size: 6, }, mainProductId: this.data.bookDetail.id, fields: { author: [], bookshelf_pdf: [], bookshelf_protectedEpub: [], bookshelf_freeEpub: [], //epub试读百分比 bookshelf_probationPage: [], //pdf试读页数 }, }; app.MG.store.getProductList(obj).then((res) => { if (res.datas && res.datas.length > 0) { this.setData({ bookItemDetail: res.datas[0], selectedIds: res.datas[0].defaultSaleMethod.id, bookBuy: res.datas[0].purchasedSaleMethodIdList.indexOf( res.datas[0].defaultSaleMethodId ) > -1, "bookDetail.price": this.numFormat(res.datas[0].price), }); let times = new Date(res.datas[0].defaultSaleMethod.endDate).getTime(); let startTime = new Date( res.datas[0].defaultSaleMethod.beginDate ).getTime(); if (times < new Date().getTime() || new Date().getTime() < startTime) { this.setData({ expire: true, }); } else { this.setData({ expire: false, }); } if ( res.datas[0].bookshelf_pdf || res.datas[0].bookshelf_protectedEpub ) { this.setData({ noFile: true, }); if (res.datas[0].bookshelf_pdf) { this.setData({ "fileInfo.bookName": this.data.bookDetail.name, "fileInfo.fileType": "pdf", "fileInfo.md5": res.datas[0].bookshelf_pdf, "fileInfo.freePage": res.datas[0].bookshelf_probationPage ? res.datas[0].bookshelf_probationPage : 30, }); } else if (res.datas[0].bookshelf_protectedEpub) { this.setData({ "fileInfo.bookName": this.data.bookDetail.name, "fileInfo.fileType": "epub", "fileInfo.md5": res.datas[0].bookshelf_protectedEpub, "fileInfo.freePage": res.datas[0].bookshelf_freeEpub ? res.datas[0].bookshelf_freeEpub : 30, }); } } } else { if (this.data.bookDetail.pdf || this.data.bookDetail.protectedEpub) { this.setData({ noFile: true, }); if (this.data.bookDetail.pdf) { this.setData({ "fileInfo.bookName": this.data.bookDetail.name, "fileInfo.fileType": "pdf", "fileInfo.md5": this.data.bookDetail.pdf, "fileInfo.freePage": this.data.bookDetail.probationPage ? this.data.bookDetail.probationPage : 30, }); } else if (this.data.bookDetail.protectedEpub) { this.setData({ "fileInfo.bookName": this.data.bookDetail.name, "fileInfo.fileType": "epub", "fileInfo.md5": this.data.bookDetail.protectedEpub, "fileInfo.freePage": this.data.bookDetail.freeEpubPage ? this.data.bookDetail.freeEpubPage : 30, }); } } this.setData({ selectedIds: this.data.bookDetail.defaultSaleMethodId, bookBuy: this.data.bookDetail.purchasedSaleMethodIdList.indexOf( this.data.bookDetail.defaultSaleMethodId ) > -1, }); let times = new Date( this.data.bookDetail.defaultSaleMethod.endDate ).getTime(); let startTime = new Date( this.data.bookDetail.defaultSaleMethod.beginDate ).getTime(); if (times < new Date().getTime() || new Date().getTime() < startTime) { this.setData({ expire: true, }); } else { this.setData({ expire: false, }); } } }); }, // 获取图书分类 async getBookClass(list) { let name = ""; const query = { refCodes: ["bookClassification"], }; await app.MG.store.getProductTypeField(query).then((res) => { for (let aindex = 0; aindex < list.length; aindex++) { const aitem = list[aindex]; const iconType = aitem.iconType const classType = aitem.classType JSON.parse(res[0].config).option.forEach((item) => { if (item.value == iconType) { if (item.child && item.child.length) { item.child.forEach((citem) => { if (citem.value == classType) { const flag = this.data.bookClass.findIndex((ditem) => ditem == citem.name) if (flag == -1) { let list = this.data.bookClass list.push(citem.name) this.setData({ bookClass: list }) } } }); } } }); } }); }, // 收藏 setCollect() { const token = wx.getStorageSync(app.config.tokenKey); if (!token) { // 检查登录状态 loginInfo(app, (data) => { // 如果不是第一次登录,会执行回调 if (data) { // 登录成功,自动记录token和用户信息,并返回true this.getBookInfo(this.data.bookId); } else { // 出现错误,返回false } }); } else { if (this.data.bookDetail.isFavourite) { app.MG.store .delProductLink({ productIds: [this.data.bookDetail.id], linkType: "FavoriteBookCity", }) .then(() => { this.setData({ "bookDetail.isFavourite": false, }); }); } else { const params = { productIds: [this.data.bookDetail.id], linkType: "FavoriteBookCity", }; app.MG.store.addProductLink(params).then((res) => { this.setData({ "bookDetail.isFavourite": true, }); }); } } }, // 我要建议 suggestBtn() { // 检查登录状态 const token = wx.getStorageSync(app.config.tokenKey); const child = this.selectComponent("#suggest-component"); if (token) // child.showDialog(); this.setData({ showIndex: '1' }) }, // 跳转网店 goShop(e) { const { link } = e.currentTarget.dataset; wx.navigateTo({ url: `/packageBookService/pages/bookServices/webpage/index?url=${link}`, }); }, // tag切换 onTabsChange(e) { const token = wx.getStorageSync(app.config.tokenKey); this.setData({ tabValue: e.detail.value, noResources: false, }); if ( e.detail.label == "教学资源" || e.detail.label == "云学习" || e.detail.label == "云测试" ) { const checkData = this.data.cmsDatas.find( (item) => item.refCode == this.data.tabValue ); if (!this.data.resourceClassList.length) this.getResourceClass() if (checkData) { if (e.detail.value == "jsek_cloudLearning") { this.setData({ "buyResourceData.productLinkPath": checkData.productLinkPath, "buyResourceData.refCode": checkData.refCode, }); } // if ( // (e.detail.value == "jsek_teachingResources" && // !this.data.teach.length) || // (e.detail.value == "jsek_cloudLearning" && !this.data.learn.length) || // (e.detail.value == "questionBank" && !this.data.test.length) // ) { // if (e.detail.value == "jsek_teachingResources") { // wx.setStorageSync('teachResourcesPath', checkData.productLinkPath) // } // this.getResourceData(checkData); // } if ((e.detail.value == "jsek_teachingResources" && !this.data.teach.length) || (e.detail.value == "jsek_cloudLearning" && !this.data.learn.length)) { wx.setStorageSync('teachResourcesPath', checkData.productLinkPath) this.getResourceDataList(checkData) } else if (e.detail.value == "questionBank" && !this.data.test.length) { this.getResourceData(checkData); } if (e.detail.value == "questionBank" && token) this.getMockData(); } else { this.setData({ noResources: true, }); } } else if (e.detail.label == "云笔记") { const token = wx.getStorageSync(app.config.tokenKey); const child = this.selectComponent("#note"); child.handleSubmitTitle(); if (token) { child.changeLoading(); child.getNoteList(); } else { child.changeNoList(); } } else if (e.detail.label == "电子书") { const child = this.selectComponent("#eBook"); if (child) { child.getProgress(); } } else if (e.detail.label == "相关图书") { this.getAboutBook(this.data.relatedBookPath); } }, // 获取资源所属分类 getResourceClass() { let query = { refCodes: ["resourcesClassification"], }; app.MG.store.getProductTypeField(query).then((res) => { this.setData({ resourceClassList: JSON.parse(res[0].config).option, }); }); }, // 获取所有子项数量 getChildrenItem(data) { let num = 0 function getNum(data) { for (let index = 0; index < data.length; index++) { const item = data[index]; if (item.sysType == 'CmsItem') { num += 1 } else if (item.sysType == 'CmsFolder') { if (item.children && item.children.length) getNum(item.children) } } } getNum(data) return num }, // 给目录添加子项数量 changeResourceChildren(list) { const changeList = (list) => { for (let index = 0; index < list.length; index++) { const item = list[index]; if (item.sysType == 'CmsFolder' && item.children && item.children.length) { item.childrenItem = this.getChildrenItem([item]) changeList(item.children) } else if (item.sysType == 'CmsFolder' && item.children && !item.children.length) { item.childrenItem = 0 } else if (item.sysType == 'CmsFolder' && !item.children) { item.childrenItem = 0 } } } changeList(list) return list }, // 扁平化数据转换tree getTreeList(rootList, pathLength, newArr, path) { for (const item of rootList) { // 此处原本 item.productLinkPath.length == pathLength 但 productLinkPath 长度个别书存在4、5位交错 if ((pathLength - item.productLinkPath.length >= 0 && pathLength - item.productLinkPath.length <= 3) && item.productLinkPath.includes(path)) { if (item.sysType == 'CmsItem') { if (item.selectType == 'webpage') { item.disabled = true } else { if (item.isDownload != 1) { item.disabled = true } } if (item.file && item.fileMap && item.fileMap[item.file]) { if (item.fileMap[item.file].protectType == 'Private') item.disabled = true } } // newArr.push(item) // 在插入过程中对数据进行排序 newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item) // 插进数组后 从原数据中删除 rootList = rootList.filter(nitem => nitem.id != item.id) } } //给数组里面再添加一个children的空数组 // let addnum1 = pathLength - path.length == 6 ? 6 : 7 for (const i of newArr) { i.children = [] let addnum1 = i.productLinkPath.length - path.length == 6 ? 6 : 7 this.getTreeList(rootList, pathLength + addnum1, i.children, i.productLinkPath) if (i.children.length == 0) { delete i.children } } return newArr }, // 去除树结构多余项 ensureTreeConsistency(tree) { for (let index = 0; index < tree.length; index++) { const item = tree[index]; if (item.children && item.children.length) { const isFloder = item.children.findIndex(citem => citem.sysType == 'CmsFolder') const isItem = item.children.findIndex(citem => citem.sysType == 'CmsItem') if (isFloder > -1 && isItem > -1) { item.children = item.children.filter(ditem => ditem.sysType == 'CmsItem') } this.ensureTreeConsistency(item.children) } } return tree }, // 排序数组 按照productLinkPath insertAndSortObjectsByProductLinkPath(array, newObj) { // 查找新对象应该插入的位置 let insertIndex = array.findIndex(obj => Number(newObj.productLinkPath.substring(newObj.productLinkPath.lastIndexOf('\\') + 1, newObj.productLinkPath.length)) < Number(obj.productLinkPath.substring(obj.productLinkPath.lastIndexOf('\\') + 1, obj.productLinkPath.length))); // 如果没有找到合适的位置,则放在数组末尾 if (insertIndex === -1) { insertIndex = array.length; } // 插入新对象到数组 array.splice(insertIndex, 0, newObj); // 测试6 正式5 // 对数组进行排序 array.sort((a, b) => { if (Number(a.productLinkPath.substring(a.productLinkPath.lastIndexOf('\\') + 1, a.productLinkPath.length)) < Number(b.productLinkPath.substring(b.productLinkPath.lastIndexOf('\\') + 1, b.productLinkPath.length))) { return -1; } if (Number(a.productLinkPath.substring(a.productLinkPath.lastIndexOf('\\') + 1, a.productLinkPath.length)) > Number(b.productLinkPath.substring(b.productLinkPath.lastIndexOf('\\') + 1, b.productLinkPath.length))) { return 1; } // a must be equal to b return 0; }); // 返回更新后的数组 return array; }, // 教学资源 云学习 获取 getResourceDataList(type) { this.setData({ loading: true, noResources: false, }); let query = { path: '*', queryType: '*', storeInfo: this.data.options.storeInfo, productId: this.data.bookDetail.id, cmsPath: type.productLinkPath, cmsType: '*', itemFields: { SysType: 'CmsFolder', // 资源类型,试读文件,是否允许下载等参数 selectType: [], learnSelectType: [], freeFile: [], file: [], protectedFile: [], resourcesClassification: [], isDownload: [], jsek_resourceBrief: [], jsek_link: [], jsek_questionBank: [] }, pading: { start: 0, size: 999 }, } app.MG.store.getProductDetailNoChildren(query).then((res) => { if (!res.datas.cmsDatas[0].datas.length) { return this.setData({ noResources: true, loading: false, }); } let list = [] // 测试 6位// 正式 5位// 测试调用传20,内部7 正式调用传17 内部传6 //教学资源 云学习 if ( type.refCode == "jsek_teachingResources" || type.refCode == "jsek_cloudLearning" ) { res.datas.cmsDatas[0].datas.forEach((item) => { item.checked = false; if (item.sysType == 'CmsItem') { // 教学资源 类型名称赋值 this.data.resourceClassList.forEach((type) => { if (type.value == item.resourcesClassification) item.resourceClass = type.name; }); if (this.data.tabValue == "jsek_teachingResources") {} else if (this.data.tabValue == "jsek_cloudLearning") { item.isbuy = this.isShowNeedBuy(item); item.isShopCar = this.isShoppingCart(item); } } }); if (type.refCode == "jsek_cloudLearning") { this.setData({ learnPath: type.productLinkPath }) const dataList = res.datas.cmsDatas[0].datas // 先判断是否否买云学习整个目录 let couldId = null let codeData = null if (this.data.resourceCodeList.length) { codeData = this.data.resourceCodeList.find(item => item.refCode == 'jsek_cloudLearning') if (codeData && codeData.saleMethod && codeData.saleMethod.length) couldId = codeData.saleMethod[0].Id } if (couldId) { this.setData({ isGoBuyResource: this.data.buyIdList.indexOf(couldId) > -1 ? false : true }) } else if (dataList.length) { const tag = dataList.findIndex(item => item.saleMethod.length && item.saleMethod[0].Price > 0) this.setData({ isGoBuyResource: tag > -1 ? true : false }) } else { this.setData({ isGoBuyResource: false }) } } const addNum = query.cmsPath.length > 10 ? 7 : query.cmsPath.length > 13 ? 8 : 6 const num = query.cmsPath.length + addNum this.getTreeList(res.datas.cmsDatas[0].datas, num, list, '\\') list = this.ensureTreeConsistency(list) list = this.changeResourceChildren(list) let result = []; if (type.refCode == "jsek_teachingResources") { this.findChildIds(list, result); // const newUSeList = this.deleteTreeData(list, result) // console.log('树剔除', result, newUSeList); // console.log('树加一', this.increaseTreeData(list, newUSeList, 16094)); this.setData({ openTeachids: result, loading: false, teach: list, }); } else if (type.refCode == "jsek_cloudLearning") { let arr = this.handleTreeData(list).filter( (item) => item.saleMethod[0] ); let freeIds = arr.filter((item) => { return item.saleMethod[0].Price == 0; }); if (!freeIds.length) this.setData({ isshowDrawBtn: false, }); this.findChildIds(list, result); this.setData({ learn: list, loading: false, openLearnids: result, }); } } }) }, // 获取 云测试 getResourceData(type) { var that = this that.setData({ loading: true, noResources: false, }); let query = { path: "*", queryType: "*", storeInfo: that.data.options.storeInfo, productId: that.data.bookDetail.id, cmsPath: type.productLinkPath, cmsType: '*', itemFields: { SysType: "CmsFolder", // 资源类型,试读文件,是否允许下载等参数 selectType: [], freeFile: [], file: [], resourcesClassification: [], isDownload: [], jsek_resourceBrief: [], jsek_link: [], jsek_questionBank: [], }, pading: { start: 0, size: 999, }, }; app.MG.store .getProductDetail(query) .then(async (res) => { // 云测试,递归请求里层数据 if (type.refCode == "questionBank") { let data = [] let result = []; const isTSFW = res.datas.cmsDatas[0].datas.filter( (item) => item.type == 'questionBankFolder' && (item.name == '填空题' || item.name == '判断题' || item.name == '单选题' || item.name == '多选题' || item.name == '简答题') ) if (that.data.options.storeInfo == 'jsek_jslx') { data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder'); if (data.length > 0) { that.setData({ test: data, loading: false, openTeachids: result, }); } else { that.setData({ noResources: true, loading: false, }); } } else { if (isTSFW.length > 0) { data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0) that.setData({ jslx: false, }); } else { data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder') that.setData({ jslx: true, }); } if (data.length > 0) { let list = [] // 测试 6位// 正式 5位// 测试调用传20,内部7 正式调用传17 内部传6 const addNum = query.cmsPath.length > 10 ? 7 : query.cmsPath.length > 13 ? 8 : 6 const num = query.cmsPath.length + addNum that.getTreeList(data, num, list, '\\') list = that.ensureTreeConsistency(list) that.findChildIds(list[0].children, result); that.setData({ test: list.length == 1 && list[0].name == '题库' ? list[0].children : list, loading: false, openTeachids: result, }); } else { that.setData({ noResources: true, loading: false, }); } } } }) .catch((e) => { console.log(e); }); }, // 获取tag下所有资源 async getAllResource(data) { if (!data.length) return false; for (let i = 0; i < data.length; i++) { let item = data[i]; if (item.sysType == "CmsFolder" && item.childrenCount > 0) { item.children = []; item.children = await this.getFolderItem(item.productLinkPath); await this.getAllResource(item.children); } } return data; }, // 获取资源接口 async getFolderItem(path) { let query = { path: "*", queryType: "*", storeInfo: this.data.options.storeInfo, productId: this.data.bookDetail.id, cmsPath: path, itemFields: { SysType: "CmsFolder", // 资源类型,试读文件,是否允许下载等参数 selectType: [], freeFile: [], file: [], protectedFile: [], resourcesClassification: [], isDownload: [], jsek_resourceBrief: [], jsek_link: [], accessType: [], learnSelectType: [], }, pading: { start: 0, size: 999, }, }; let data = await app.MG.store.getProductDetail(query); // 如果item层级里有floder,删除floder const flag = data.datas.cmsDatas[0].datas.findIndex( (item) => item.sysType == "CmsItem" ); if (flag > -1) data.datas.cmsDatas[0].datas = data.datas.cmsDatas[0].datas.filter( (item) => item.sysType == "CmsItem" ); data.datas.cmsDatas[0].datas.forEach((item) => { // if (item.sysType == "CmsFolder" && flag > -1) { // item.isShow = false; // } else { // item.isShow = true; // } this.data.resourceClassList.forEach((type) => { if (type.value == item.resourcesClassification) item.resourceClass = type.name; }); // 网页 不能下载 私有文件 if (item.sysType == "CmsItem") { if (item.selectType == "webpage") { item.disabled = true; } else { if (item.isDownload != 1) { item.disabled = true; } } if (item.file && item.fileMap && item.fileMap[item.file]) { if (item.fileMap[item.file].protectType == "Private") item.disabled = true; } } }); data.datas.cmsDatas[0].datas.forEach((item) => { if (this.data.tabValue == "jsek_teachingResources") { item.checked = false; } else if (this.data.tabValue == "jsek_cloudLearning") { item.checked = false; item.isbuy = this.isShowNeedBuy(item); item.isShopCar = this.isShoppingCart(item); } }); return data.datas.cmsDatas[0].datas; }, // 获取展开项 findChildIds(data, result) { let index = 0 if (data) for (let i = 0; i < data.length; i++) { if (index < 3) { const item = data[i] if (item.children && item.children.length > 0) { result.push(item.id) if (item.children) { for (let j = 0; j < item.children.length; j++) { if (index < 3) { const childrenItme = item.children[j] if (item.childrenCount > 0) { result.push(childrenItme.id) index += 1 } } else { break } } } } else if (item.childrenCount > 0) { result.push(item.id) index += 1 } } else { break } } }, // 图书添加购物车 async addBookShopcCar() { if (!this.data.expire) { const shoppingCartGetId = []; let query = { start: 0, size: 9999, filterList: [], searchList: [], }; const res = await app.MG.store.getShoppingCartProductList(query); res.datas.forEach((item) => { shoppingCartGetId.push(item.saleMethod.id); }); const determine = shoppingCartGetId.some( (item) => item == this.data.selectedIds ); if (!determine) { let query = { requests: [{ saleMethodId: this.data.selectedIds, storeEventId: null, agentCode: "电子书", }, ], }; const addRes = app.MG.store.addShoppingCart(query); this.showSuccessToast(); } else { Toast({ context: this, selector: "#t-toast", message: "该书已在购物车,请勿重复添加", theme: "warning", direction: "column", }); } } else { wx.showToast({ title: "商品不在有效期", icon: "none", duration: 1000, }); } }, showSuccessToast() { Toast({ context: this, selector: "#t-toast", message: "添加成功", theme: "success", direction: "column", }); }, async buyBook() { if (!this.data.expire) { let bookOrdersId = ""; let query = { remarks: "电子书", requests: [{ saleMethodId: this.data.bookItemDetail.defaultSaleMethodId ? this.data.bookItemDetail.defaultSaleMethodId : this.data.bookDetail.defaultSaleMethodId, count: 1, }, ], }; // 发起订单初始化请求并等待结果 const res = await app.MG.store.initOrder(query); // 获取订单号并赋值给 orderNumber.value bookOrdersId = res.orderNumber; // 检查订单号是否存在 if (bookOrdersId) { if (this.data.bookDetail.price == "0.00") { app.MG.store .confirmOrder({ orderNum: bookOrdersId, }) .then((res) => { if (res) { wx.showToast({ title: "领取成功", icon: "none", duration: 1000, }); this.getBookInfo(this.data.bookDetail.id); } }); } else { const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId + '&onNorderSaleMethod=' + res.saleMethodLinks[0].orderSaleMethod.id; wx.navigateTo({ url, }); } } else {} } else { wx.showToast({ title: "商品不在有效期", icon: "none", duration: 1000, }); } }, // 获取教学资源下载是否申请通过 async getApplyInfo(id) { // 获取当前时间 const currentDate = new Date(); let query = { sort: { type: "Desc", field: "CreateDate", }, start: 0, size: 99999, appRefCode: app.config.appRefCode, topicIdOrRefCode: "productDownLoad", }; await app.MG.ugc.getTopicMessageList(query).then((res) => { const applyResource = res.datas.find((item) => { let content = []; try { content = JSON.parse(item.content); } catch (error) { content = []; } if (Array.isArray(content)) return content.find((citem) => citem.id == id); return false; }); // 有申请记录 if (applyResource) { if (applyResource.state == "Reject") { this.setData({ rejectCause: JSON.parse(applyResource.feedBack).reason, applyState: "Reject", }); } else if (applyResource.state == "Normal") { const endDate = JSON.parse(applyResource.feedBack).endDate; // const endDate = new Date(JSON.parse(applyResource.feedBack).endDate + ' 23:59:59').getTime() if (endDate == "永久") { this.setData({ applyState: "Normal", deadline: "永久", }); console.log("有效日期", this.data.deadline); } else { let endTime = new Date(endDate + " 23:59:59").getTime(); this.setData({ deadline: endDate + " 23:59:59", }); if (currentDate.getTime() < endTime) { // 未超时 this.setData({ applyState: "Normal", }); } else { this.setData({ applyState: "none", }); } } } else { this.setData({ applyState: applyResource.state, }); } } else { this.setData({ applyState: "none", }); } }); this.setData({ applyResourceState: false, }); wx.hideLoading(); }, // 申请教学资源 applyResource() { // if (this.data.applyResourceState) { // return wx.showToast({ // icon: "error", // title: "请勿重复点击", // }); // } this.setData({ applyResourceState: true, }); let role = JSON.parse(wx.getStorageSync(app.config.userInfoKey)).role; if (role) { if (role == "Teacher") { wx.showLoading({ title: "加载中", }); // 申请教学资源 let query = { topicIdOrRefCode: "productDownLoad", type: "applyForDownload", state: "WaitAudit", cmsTypeRefCode: "", newDataListRequest: [], name: this.data.bookDetail.name, // name为申请的书本名称 content: JSON.stringify([{ name: this.data.bookDetail.name, id: this.data.bookDetail.id, // defaultSaleMethodId: bookData.value.defaultSaleMethodId, icon: this.data.bookDetail.icon, }, ]), }; app.MG.ugc.newTopicMessage(query).then(async (res) => { if (res) { wx.showToast({ title: "申请已提交", duration: 2000, }); } await this.getApplyInfo(this.data.bookDetail.id); }); } else { wx.showModal({ title: "尊敬的用户,您好!", content: "请先进行教师认证!", confirmColor: "#ff6c00", cancelColor: "#949494", complete: (res) => { if (res.cancel) {} if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } }, }); } } else { wx.showModal({ title: "尊敬的用户,您好!", content: "请先进行教师认证!", confirmColor: "#ff6c00", cancelColor: "#949494", complete: (res) => { if (res.cancel) {} if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } }, }); } }, // 教学资源下载前往PC提示Diialog closeTeachDownload() { this.setData({ isShowTeachDownload: false, }); }, // 下载功能 downloadTeach(e) { let role = JSON.parse(wx.getStorageSync(app.config.userInfoKey)).role; if (role && role == "Teacher") { this.setData({ isShowTeachDownload: true, }); } else { wx.showModal({ title: "尊敬的用户,您好!", content: "请先进行教师认证!", confirmColor: "#ff6c00", cancelColor: "#949494", complete: (res) => { if (res.cancel) {} if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } }, }); } // const data = e.detail.value // // const data // // let role = userStore.userInfo ? userStore.userInfo.role : null // // if (role) { // // if (role == 'Teacher') { // if (this.properties.applyState == 'Normal' || this.properties.applyState == 'none') { // // 是否允许下载 // if (data.isDownload == 1) { // // 申请通过 // let url = app.config.requestCtx + '/file/api/ApiDownloadForAuthorize?md5=' // if (data.file) { // // 判断是否私有 // if (data.fileMap[data.file].protectType == 'Private') // return Message.error({ // context: this, // offset: ['20rpx', '32rpx'], // duration: 5000, // content: '该文件无法下载' // }) // url = url + data.file + '&token=' + wx.getStorageSync('jsek-token') // } else if (data.freeFile) { // url = url + data.freeFile + '&token=' + wx.getStorageSync('jsek-token') // } else { // Message.error({ // context: this, // offset: ['20rpx', '32rpx'], // duration: 5000, // content: '暂无资源', // }) // } // this.downloadFile(url) // } else { // Message.error({ // context: this, // offset: ['20rpx', '32rpx'], // duration: 5000, // content: '该资源无法下载', // }) // } // } else if (this.properties.applyState == 'WaitAudit') { // // ElMessageBox.confirm('请先申请下载!', '尊敬的用户,您好!', { // // confirmButtonText: '申请', // // cancelButtonText: '取消', // // type: 'warning' // // }) // // .then(() => applyBookInfo()) // // .catch() // Message.error({ // context: this, // offset: ['20rpx', '32rpx'], // duration: 5000, // content: '该资源下载申请审核中', // }) // } else if (this.properties.applyState == 'Reject') { // Message.error({ // context: this, // offset: ['20rpx', '32rpx'], // duration: 5000, // content: '资源下载申请未通过' // }) // } else { // // Message.error({ // // context: this, // // offset: ['20rpx', '32rpx'], // // duration: 5000, // // content: '请先申请下载' // // }) // console.log('请先申请下载'); // } // // } else { // // ElMessageBox.confirm('请先进行教师认证!', '尊敬的用户,您好!', { // // confirmButtonText: '去认证', // // cancelButtonText: '取消', // // type: 'warning' // // }) // // .then(() => { // // isShow.value = true // // }) // // .catch(() => { }) // // } // // } else { // // logIn() // // } }, downloadFile(url) { wx.downloadFile({ url: url, success: function (res) { // 下载成功后,调用saveImageToPhotosAlbum函数保存图片到本地 wx.saveFile({ tempFilePath: res.tempFilePath, success: function (res) { wx.showToast({ title: "下载成功", icon: "success", }); }, fail: function (res) { wx.showToast({ title: "下载失败", icon: "none", }); }, }); }, fail: function (res) { wx.showToast({ title: "下载失败", icon: "none", }); }, }); }, // 判断资源是否购买 resourceIsBuy(data) { let couldId = null let codeData = null if (this.data.resourceCodeList.length) { codeData = this.data.resourceCodeList.find(item => item.refCode == 'jsek_cloudLearning') if (codeData && codeData.saleMethod && codeData.saleMethod.length) couldId = codeData.saleMethod[0].Id } if (couldId) { return this.data.buyIdList.indexOf(couldId) > -1 ? false : true } else if (data.saleMethod && data.saleMethod.length) { const isSHow = this.data.buyIdList.some( (item) => item == data.saleMethod[0].Id ); return !isSHow; } else { return false; } }, // 云学习资源是否显示锁图标(未购买,且资源售价大于零) isShowNeedBuy(data) { if (data.saleMethod && data.saleMethod.length) { const isSHow = this.data.buyIdList.some( (item) => item == data.saleMethod[0].Id ); if (isSHow) { return false; } else { return data.saleMethod[0].Price > 0 ? true : false; } return !isSHow; } else { return false; } }, // 获取已购买商品 getShoppingCartProductGet() { let query = { start: 0, size: 999, filterList: [], searchList: [], }; app.MG.store.getShoppingCartProductList(query).then((res) => { const list = []; res.datas.forEach((item) => { list.push(item.saleMethod.id); }); this.setData({ shoppingList: res.datas, shoppingCartGetId: list, }); }); }, // 判断资源加入购物车按钮是否显示 isShoppingCart(data) { let couldId = null let codeData = null if (this.data.resourceCodeList.length) { codeData = this.data.resourceCodeList.find(item => item.refCode == 'jsek_cloudLearning') if (codeData && codeData.saleMethod && codeData.saleMethod.length) couldId = codeData.saleMethod[0].Id } if (couldId) { return this.data.buyIdList.indexOf(couldId) > -1 ? false : true } else if (data.saleMethod && data.saleMethod.length) { if (data.saleMethod[0].Price <= 0) return false; // 再判断是否购买 const isBuy = this.data.buyIdList.some( (item) => item == data.saleMethod[0].Id ); if (isBuy) { // 购买了 return false; } else { // 判断是否加入购物车 const isSHow = this.data.shoppingCartGetId.some( (item) => item == data.saleMethod[0].Id ); return !isSHow; } } else { return false; } }, updateShoppingCartHidden() { const isSHow = this.data.shoppingCartGetId.some( (item) => item == data.saleMethod[0].Id ); return !isSHow; }, //刷新购物车图标 updateCloudLearning() { this.getBookInfo() this.getShoppingCartProductGet() const checkData = this.data.cmsDatas.find( (item) => item.refCode == "jsek_cloudLearning" ); this.getResourceDataList(checkData); }, // 遍历树结构转换为数组方法 handleTreeData(array) { const flattenedArray = []; array.forEach((node) => { // 将当前节点添加到展开的数组中 flattenedArray.push(node); // 递归处理子节点 if (node.children && node.children.length > 0) { const childrenArray = this.handleTreeData(node.children); flattenedArray.push(...childrenArray); } }); return flattenedArray.filter((item) => item.sysType == "CmsItem"); }, // 云学习一键领取 async getFreeResource() { const child = this.selectComponent("#learn-resource"); const token = wx.getStorageSync(app.config.tokenKey); if (!token) { loginInfo(app, (data) => { // 如果不是第一次登录,会执行回调 if (data) { // 登录成功,自动记录token和用户信息,并返回true } else { // 出现错误,返回false } }); } else { let arr = this.handleTreeData(this.data.learn).filter((item) => this.resourceIsBuy(item) ); let freeIds = arr.filter((item) => { return item.saleMethod[0].Price == 0; }); if (!freeIds.length) return wx.showToast({ icon: "error", title: "暂无免费资源", }); child.changeReceive(true); let requests = []; freeIds.forEach((item, index) => { if (this.resourceIsBuy(item)) { requests.push({ saleMethodId: item.saleMethod[0].Id, count: 1, }); } }); let query = { remarks: "云学习", requests, }; try { const initOrderRes = await app.MG.store.initOrder(query); let parameter = { orderNum: initOrderRes.orderNumber, }; // 确认订单 const confirmOrderRes = await app.MG.store.confirmOrder(parameter); if (confirmOrderRes.orderNumber) { child.changeReceive(false); wx.showToast({ title: "领取成功", }); this.getBookInfo(this.data.bookId); this.getResourceDataList({ refCode: 'jsek_cloudLearning', productLinkPath: this.data.learnPath }) this.setData({ successOrderNumber: confirmOrderRes.orderNumber }) } } catch (error) { console.log(error); } } }, // 云学习一键购买 async allAddShoppiingCar() { const child = this.selectComponent("#learn-resource"); const token = wx.getStorageSync("jsek-token"); if (!token) { return wx.getUserProfile({ desc: "用户登录", success: (res) => { console.log(res); }, }); } let shopList = this.handleTreeData(this.data.learn).filter((item) => this.resourceIsBuy(item) ); this.getShoppingCartProductGet(); if (!shopList.length) return wx.showToast({ icon: "error", title: "已全部购买", }); child.changeBuy(true); let requests = []; shopList.forEach((item) => { requests.push({ saleMethodId: item.saleMethod[0].Id, count: 1, }); }); let query = { remarks: "云学习", requests, }; const initOrderRes = await app.MG.store.initOrder(query); child.changeBuy(false); // 检查订单号是否存在 if (initOrderRes.orderNumber) { // bookService: orderNumber.value, 少传这个 ,暂时不知道有什么用 wx.navigateTo({ url: `/pages/cart/paymentPage/index?&bookId=${this.data.bookDetail.id}&bookName=${this.data.bookDetail.name}&orderNumber=${initOrderRes.orderNumber}`, }); } else { // 订单号不存在,显示警告消息 wx.showToast({ icon: "error", title: "请重试", }); } }, // 变为所有check true findAndUpdateItemsByIds(tree, ids) { function findAndUpdate(node) { if (ids.includes(node.id)) { node.checked = true; // 将目标项的 check 属性设置为 true } if (node.children && node.children.length > 0) { for (let child of node.children) { findAndUpdate(child); // 递归处理子节点 } } } for (let node of tree) { findAndUpdate(node); // 对每个顶层节点执行查找和更新操作 } return tree; // 返回修改后的完整数组 }, handleTrue() { // findAndUpdateItemsByIds(this.date.) }, // 组卷格式化日期显示 DateFormat(date, fmt) { if (date && fmt) { let _date = new Date(date); var o = { "M+": _date.getMonth() + 1, //月份 "d+": _date.getDate(), //日 "h+": _date.getHours(), //小时 "m+": _date.getMinutes(), //分 "s+": _date.getSeconds(), //秒 "q+": Math.floor((_date.getMonth() + 3) / 3), //季度 S: _date.getMilliseconds(), //毫秒 }; if (/(y+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (_date.getFullYear() + "").substr(4 - RegExp.$1.length) ); } for (var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace( RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) ); } } return fmt; } else { return ""; } }, // 获取组卷答题数据 getMockData() { // const child = this.selectComponent("#test-resource"); // if (child) child.changeTestLoaidng(true); this.setData({ "mockData.useCount": 0, "mockData.mockList": [], }); app.MG.identity .getUserKey({ domain: "mockData", keys: [this.data.bookId], }) .then((res) => { if (res && res.length) { const mock = JSON.parse(res[0].value); mock.forEach((item) => { item.createDate = this.DateFormat(item.createDate, "yyyy-MM-dd"); }); this.setData({ "mockData.mockList": mock, }); // 组卷已使用次数 res.forEach((item) => { // 已经有答题分数等数据,证明组卷已经使用完毕 if (item.resultData) { this.setData({ "mockData.useCount": this.data.mockData.useCount + 1, }); } }); } }); }, // 购买组卷 async buyMock() { let res; if (!this.data.mockData.id) return wx.showToast({ icon: "error", title: "暂无组卷", mask: true, }); // 构建订单查询对象 try { let query = { remarks: "组卷", requests: [{ saleMethodId: this.data.mockData.id, count: 1, }, ], }; if (this.data.flag) { this.setData({ flag: false, }); res = await app.MG.store.initOrder(query); } if (res.orderNumber && this.data.mockData.price) { wx.navigateTo({ url: `/pages/cart/paymentPage/index?orderNumber=${res.orderNumber}`, }); } else { // 0元直接领取 // 确认订单 const confirmOrderRes = await app.MG.store.confirmOrder({ orderNum: res.orderNumber, }); if (confirmOrderRes) { wx.showToast({ icon: "success", title: "领取成功", }); this.setData({ flag: true, }); await this.recordBuyMock(); // 记录购买时间 } } } catch (error) { console.log(error); } }, // 记录购买组卷时间 recordBuyMock() { const num = this.data.mockData.mockList.length; const id = tool.uuid(8); const createDate = this.DateFormat(new Date().getTime(), "yyyy-MM-dd"); const mockList = this.data.mockData.mockList; mockList.push({ id, createDate, name: `第${num + 1}套试卷`, state: "0", }); this.setData({ "mockData.mockList": mockList, }); // 记录购买时间,并设状态state为1,表示刚购买完成组卷 app.MG.identity.setUserKey({ setKeyRequests: [{ domain: "mockData", key: this.data.bookDetail.id + "", value: JSON.stringify(this.data.mockData.mockList), }, ], }); }, // 获取相关图书 getAboutBook(path) { this.setData({ relatedBookLoading: true, noRelatedBookData: false, }); let query = { path, queryType: "*", coverSize: { height: 243, }, paging: { start: 0, size: 99, }, fields: { author: [], publicationDate: [], }, }; app.MG.store.getProductList(query).then((res) => { const Arr = res.datas.filter( (item) => item.id != this.data.bookDetail.id ); let bookArr = []; if (Arr.length > 9) { for (var i = 0; i < 9; i++) { var _num = Math.floor(Math.random() * Arr.length); var mm = Arr[_num]; Arr.splice(_num, 1); bookArr.push(mm); } } else { bookArr = Arr; } this.setData({ relatedBookData: bookArr, relatedBookLoading: false, }); if (!this.data.relatedBookData.length) this.setData({ noRelatedBookData: true, }); }); }, goBookDetails(e) { this.setData({ tabValue: "brief", pageLoading: true, }); let bookPathList = wx.getStorageSync("bookPathList"); const bookPath = { id: this.data.bookDetail.id, name: this.data.bookDetail.name, }; if (bookPathList) { bookPathList = JSON.parse(bookPathList); if (bookPathList.length > 8) bookPathList.shift(); bookPathList.push(bookPath); } else { bookPathList = [bookPath]; } wx.setStorageSync("bookPathList", JSON.stringify(bookPathList)); this.setData({ learn: [], teach: [] }) this.onLoad({ id: e.detail.id, name: e.detail.name, }); }, // 底部购买按钮 buyBtn() { if (this.data.tabValue == "brief" && !this.data.bookBuy) { this.buyBook(); } else if (this.data.tabValue == "jsek_cloudLearning") { const tree = this.selectComponent("#tree"); tree.onCloudShoppingCart(); } else { console.log(this.data.tabValue); } }, goRead() { if (!this.data.noFile) { wx.showToast({ title: "暂无阅读文件", icon: "none", duration: 2000, }); return false; } wx.navigateTo({ url: "/packageBookService/pages/components/webView/index?md5=" + this.data.fileInfo.md5 + "&fileName=" + this.data.fileInfo.bookName + "&fileType=" + this.data.fileInfo.fileType + "&freePage=" + this.data.fileInfo.freePage + "&bookBuy=" + this.data.bookBuy + "&bookId=" + this.data.bookDetail.id, }); }, //样书申请 //获取已申请纸质样书 getAlreadyPBookList() { const data = { start: 0, size: 9999, topicIdOrRefCode: "applyEntityBook", appRefCode: app.config.appRefCode, sort: { type: "Desc", field: "CreateDate", }, }; app.MG.ugc.getTopicMessageList(data).then((res) => { let list = []; res.datas.map((item) => { if (item.content) { item.content = JSON.parse(item.content); } list.push(item); }); this.setData({ alreadyPaperBookList: list, }); }); }, //获取已申请电子样书 getAlreadyEBookList() { const data = { start: 0, size: 9999, topicIdOrRefCode: "applyBook", appRefCode: app.config.appRefCode, sort: { type: "Desc", field: "CreateDate", }, }; app.MG.ugc.getTopicMessageList(data).then((res) => { let list = []; if (res.datas.length > 0) { res.datas.map((item) => { if (item.feedBack) { item.feedBack = JSON.parse(item.feedBack); if (item.feedBack.endDate) { let times = new Date( item.feedBack.endDate + " 23:59:59" ).getTime(); let currentDate = new Date().getTime(); if (times < currentDate) { item.isExpiry = true; } } } if (item.content) { item.content = JSON.parse(item.content); } if (item.state != "Reject") { list.push(item); } }); const smBook = list.find(item => item.content[0].id == this.data.bookDetail.id) console.log('已申请', smBook); if (smBook && smBook.state == 'Normal') { const flag = new Date(smBook.feedBack.endDate + ' 23:59:59').getTime() > new Date().getTime() if (flag) { this.setData({ applicationState: 'Normal' }) } else { this.setData({ applicationState: 'overdue' }) } } this.setData({ alreadyElectronicBookList: list, }); } }); }, //获取当前已申请次数(纸质) getSelectPaperBookCount() { app.MG.app .getTicketResult({ ticketRefCodeOrGuid: "paperSampleBookapplyNum", roleId: this.data.userInfo.roleId, }) .then((res) => { this.setData({ paperBookCount: res.totalCount - res.usedCount, }); }); }, //获取当前已申请次数(电子) getSelectBookCount() { app.MG.app .getTicketResult({ ticketRefCodeOrGuid: "electronicSampleBookapplyNum", roleId: this.data.userInfo.roleId, }) .then((res) => { this.setData({ ebookCount: res.totalCount - res.usedCount, }); }); }, //申请电子样书 appplyElectronicBook() { // 先判断下教师认证,未对原有逻辑修改 let role = this.data.userInfo != null ? this.data.userInfo.role : null; if (role && role == "Teacher") {} else { return wx.showModal({ title: "尊敬的用户,您好!", //提示的标题 content: "请先进行教师认证?", //提示的内容 confirmColor: "#ff6c00", cancelColor: "#949494", success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) {} }, }); } if ( this.data.bookDetail.isApplyBook == 2 || this.data.bookDetail.isApplyBook == 4 ) { let role = this.data.userInfo != null ? this.data.userInfo.role : null; if (role && role == "Teacher") { if (!this.data.noFile) { wx.showToast({ title: "暂无电子书文件,请联系管理员!", icon: "none", duration: 1000, }); return; } if (this.data.ebookCount == 0) { wx.showToast({ title: "您的电子样书申请次数已用尽,若要继续,请联系管理员!", icon: "none", duration: 1000, }); return false; } let isHas = this.data.electronicBookList.find( (eitem) => eitem.id == this.data.bookDetail.id ); if (isHas) { wx.showToast({ title: "该书已在清单列表中", icon: "none", duration: 1000, }); return false; } let isApply = this.data.alreadyElectronicBookList.find( (eitem) => eitem.content[0].id == this.data.bookDetail.id ); if (isApply) { if (isApply.state == 'WaitAudit') { wx.showToast({ title: "该书已申请!", icon: "none", duration: 1000, }); return false; } else if (isApply.state == 'Normal') { const flag = new Date(isApply.feedBack.endDate + ' 23:59:59').getTime() > new Date().getTime() if (flag) { wx.showToast({ title: "该书已申请!", icon: "none", duration: 1000, }); return false; } } } if (this.data.electronicBookList.length >= 2) { wx.showToast({ title: "每次最多只可申请2本样书", icon: "none", duration: 1000, }); return false; } this.addBookFun(this.data.bookDetail, "eBook"); } else { wx.showModal({ title: "尊敬的用户,您好!", //提示的标题 content: "请先进行教师认证?", //提示的内容 confirmColor: "#ff6c00", cancelColor: "#949494", success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) {} }, }); } } else { wx.showToast({ title: "该书不能申请电子样书", icon: "none", duration: 1000, }); } }, //申请纸质样书 appplyPaperBook() { let role = this.data.userInfo != null ? this.data.userInfo.role : null; if (role && role == "Teacher") {} else { return wx.showModal({ title: "尊敬的用户,您好!", //提示的标题 content: "请先进行教师认证?", //提示的内容 confirmColor: "#ff6c00", cancelColor: "#949494", success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) {} }, }); } if ( this.data.bookDetail.isApplyBook == 3 || this.data.bookDetail.isApplyBook == 4 ) { let role = this.data.userInfo != null ? this.data.userInfo.role : null; if (role && role == "Teacher") { // 点击选中 if (this.data.paperBookCount == 0) { wx.showToast({ title: "您的纸质样书申请次数已用尽,若要继续,请联系管理员!", icon: "none", duration: 1000, }); return false; } let isApply = this.data.alreadyPaperBookList.find( (pitem) => pitem.content[0].id == this.data.bookDetail.id ); if (isApply) { wx.showToast({ title: "该书已申请!", icon: "none", duration: 1000, }); return false; } let isHas = this.data.paperBookList.find( (pitem) => pitem.id == this.data.bookDetail.id ); if (isHas) { wx.showToast({ title: "该书已在清单列表中", icon: "none", duration: 1000, }); return false; } if (this.data.paperBookList.length >= 2) { wx.showToast({ title: "每次最多只可申请2本样书", icon: "none", duration: 1000, }); return false; } this.addBookFun(this.data.bookDetail, "pBook"); } else { wx.showModal({ title: "尊敬的用户,您好!", //提示的标题 content: "请先进行教师认证?", //提示的内容 confirmColor: "#ff6c00", cancelColor: "#949494", success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) {} }, }); } } else { wx.showToast({ title: "该书不能申请纸质样书", icon: "none", duration: 1000, }); } }, // 添加样书 addBookFun(item, type) { let itemAttr = null; const eList = this.data.electronicBookList; const pList = this.data.paperBookList; itemAttr = { id: item.id, title: item.name || "-", icon: item.icon, checked: false, defaultSaleMethodId: item.defaultSaleMethodId, md5: item.datas.Icon, author: item.author || "-", price: item.price || "-", isbn: item.isbn || "-", publicationDate: item.publicationDate, }; if (type == "eBook") { eList.push(itemAttr); this.setData({ electronicBookList: eList, }); wx.setStorageSync("electronicBookList", JSON.stringify(eList)); } else { pList.push(itemAttr); this.setData({ paperBookList: pList, }); wx.setStorageSync("paperBookList", JSON.stringify(pList)); } this.setData({ num: this.data.num + 1, }); wx.showToast({ title: "添加成功,在样书申请单等您哦~", icon: "none", duration: 1000, }); }, //去样书申请单 goApply() { wx.navigateTo({ url: "/packageDomain/pages/sampleBookList/applicationForm/index", }); }, handleTree() { // const child = this.selectComponent('#teach-tree') let tree; // let openIds = child.data.openIds if (this.data.tabValue == "jsek_teachingResources") { tree = this.data.teach; } else { tree = this.data.learn; } for (let index = 0; index < tree.length; index++) { const item = tree[index]; if (item.children && item.children.length > 0) { const num = this.data.openTeachids.findIndex( (citem) => item.id == citem ); if (num >= 0) { item.open = true; } else { item.open = false; } this.handleTree(item.children); } } this.setData({ teach: tree, }); }, // 剔除树结构多余,只保留初始需要展开的 // 第一步:保留树结构前两层,并将展开项加入数组 deleteTreeData(list, openids) { let resultList = [] for (let index = 0; index < list.length; index++) { const item = list[index]; if (item.children.length > 0) { for (let cindex = 0; cindex < item.children.length; cindex++) { const citem = item.children[cindex]; citem.children = [] } } resultList.push(item) } for (let index = 0; index < openids.length; index++) { const id = openids[index]; // 展开项加入数组 this.increaseTreeData(list, resultList, id) } return resultList }, // 传递ids,将需要展开的id的children 赋值 increaseTreeData(treeList, list, openid) { let num = 0; // let useData = treeList.find(item => item.id == openid) for (let index = 0; index < treeList.length; index++) { const item = treeList[index]; if (item.id == openid && num >= 3) { let useArr = item.children ? item.children : [] this.changeList(list, openid, useArr) } else { num += 1 this.increaseTreeData(item.children, list, openid) } } }, // 递归前两层,找出需要展开的 changeList(isList, id, childrenList) { for (let dindex = 0; dindex < isList.length; dindex++) { const ditem = isList[dindex]; if (ditem.id == id) { ditem.children = childrenList return true } else { this.changeList(ditem.children, id, childrenList) } } return childrenList }, uploadFile(e) { console.log(123) this.setData({ dialogBox: true, isShowUp: true }); }, closeDialog() { this.setData({ dialogBox: false, }); }, onCloseProtocol() { this.setData({ protocolShow: false, }); }, onVisibleChange(e) { this.setData({ protocolShow: e.detail.visible, }); }, //查看协议 getAgreement() { let query = { path: 'jsek_protocol', fields: { content: [], } } app.MG.resource.getItem(query).then((res) => { try { const data = res.datas.find((e) => e.refCode == 'jsek_authorizationAndConsentLetter') this.setData({ protocolTxt: data && data.content ? data.content : '暂无协议', protocolShow: true }); } catch (error) { this.setData({ protocolTxt: '暂无协议', protocolShow: true, }); } }) }, onNameInput(e) { console.log(e.detail.value) this.setData({ 'resourceInfo.resourceName': e.detail.value, }); }, onFileTypeInput(e) { this.setData({ 'resourceInfo.fileType': e.detail.value, }); }, textareaChange(e) { this.setData({ 'resourceInfo.description': e.detail.value, }); }, onChange() { if (this.data.resourceInfo.agree) { this.setData({ 'resourceInfo.agree': false, }); } else { this.setData({ 'resourceInfo.agree': true, }); } }, uploadPicture() { var that = this; wx.chooseMessageFile({ count: 1, type: 'file', success(res) { const isLt2M = res.tempFiles[0].size / 1024 / 1024 < 50 if (!isLt2M) { return wx.showToast({ title: "上传文件大小不能超过 50MB!", icon: "none", duration: 1000, }); } const FileName = res.tempFiles[0].name.split('.')[0] const Extension = res.tempFiles[0].name.split('.')[1] var medioType = '' const audioData = ['mp3', 'mp3'] const videoData = ['mp4', 'avi'] const pdfData = ['pdf'] const Compression = ['rar', 'zip'] const pictureData = ['jpg', 'png'] if (audioData.indexOf(Extension) > -1) { medioType = '音频' } else if (videoData.indexOf(Extension) > -1) { medioType = '视频' } else if (pdfData.indexOf(Extension) > -1) { medioType = 'PDF' } else if (Compression.indexOf(Extension) > -1) { medioType = '资源包' } else if (pictureData.indexOf(Extension) > -1) { medioType = '图片' } else { medioType = '其他' } wx.getFileSystemManager().getFileInfo({ filePath: res.tempFiles[0].path, //选择图片返回的相对路径 // encoding: 'binary', //编码格式 success: ress => { //成功的回调 let md5 = ress.digest; let formData = new FormData(); formData.append('Md5', md5); formData.append('FileName', FileName); formData.append('FileType', res.tempFiles[0].type); formData.appendFile("file", res.tempFiles[0].path); const data = formData.getData(); let _token = wx.getStorageSync(app.config.tokenKey); let header = {}; if (_token == null) { header["Authorization"] = `Basic ${Base64.encode(website.clientId + ":" + website.clientSecret)}`; } else { header["Authorization"] = `Bearer ` + _token; } new Promise((resolve, reject) => { wx.request({ url: app.config.requestCtx + '/file/api/ApiUpload', method: 'POST', header: { 'content-type': data.contentType, ...header }, data: data.buffer, success(res1) { resolve(res1.data); if (res1.data) { let file = [{ name: res.tempFiles[0].name, md5: md5, type: medioType, FileType: Extension }] that.setData({ "resourceInfo.resourceName": FileName, "resourceInfo.fileType": medioType, fileList: file, isShowUp: false }) } } }) }) } }) } }) }, handleRemove(e) { console.log(e) let md5 = e.currentTarget.dataset.md5 for (let i = 0; i < this.data.fileList.length; i++) { if (this.data.fileList.md5 == md5) { this.data.fileList.splice(i, 1) } } this.setData({ isShowUp: true, }); }, confirmM() { if (this.data.resourceInfo.resourceName == '') { return wx.showToast({ icon: "error", title: "请填写资源名称", }); } if (this.data.resourceInfo.fileType == '') { return wx.showToast({ icon: "error", title: "请填写资源类型", }); } if (!this.data.fileList.length) { return wx.showToast({ icon: "error", title: "请上传资源文件", }); } if (!this.data.resourceInfo.agree) { return wx.showToast({ icon: "none", title: "请同意《授权同意书》!", }); } let query = { topicIdOrRefCode: "uploadFiles", name: this.data.bookDetail.name, content: JSON.stringify(JSON.parse(JSON.stringify(this.data.fileList))), type: 'UserSubmit', description: this.data.resourceInfo.description, cmsTypeRefCode: '', newDataListRequest: [] } app.MG.ugc.newTopicMessage(query).then((res) => { wx.showToast({ icon: "success", title: "请上传资源文件", }); this.setData({ dialogBox: false, }); }) } })