// pages/bookServices/detail/index.js import Message from 'tdesign-miniprogram/message/index.js'; import Toast from 'tdesign-miniprogram/toast'; import tool from '../../../../assets/js/toolClass' const app = getApp(); Page({ /** * 页面的初始数据 */ data: { bookId: '', barHeight: '', navBarHeight: '', options: { id: '', name: '', }, bookDetail: {}, bookItemDetail: {}, link: { jd: '', tamll: '', dang: '', micro: '', }, tabValue: 'brief', cmsDatas: [], // 资源refCode列表 ids: [1], list: [], teachResources: [], teach: [], learn: [], test: [], openTeachids: [], openLearnids: [], openTestids: [], resourceClassList: [], // 资源所属分类 applyState: "", // 教学资源申请状态 deadline: "", // 教学资源申请有效日期 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: [] // 用户组卷提交信息 }, flag: true, applyResourceLoading: false, noResources: false, selectedIds: "",//商品或子商品销售方式 bookBuy: false, //商品或子商品是否购买 expire: false,//商品或子商品销售方式是否过期 noFile: false, //商品或子商有无电子书文件 num: 0, //样书申请单数量 alreadyPaperBookList: [], //已申请纸质样书 alreadyElectronicBookList: [], //已申请电子样书 paperBookList: [], //样书单纸质书 electronicBookList: [], //样书单电子书 paperBookCount: 0, //纸质书剩余次数 ebookCount: 0, //电子书剩余次数 userInfo: {}, }, 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, }, }); this.getBookInfo(options.id); this.getResourceClass() // 获取资源所属分类 const token = wx.getStorageSync('jsek-token') if (token) { this.getShoppingCartProductGet() this.getApplyInfo(options.id) this.getMockData() } if (wx.getStorageSync(app.config.userInfoKey)) { this.setData({ userInfo: JSON.parse(wx.getStorageSync(app.config.userInfoKey)) }) } if (wx.getStorageSync("paperBookList")) { this.setData({ paperBookList: wx.getStorageSync("paperBookList"), }) } if (wx.getStorageSync("electronicBookList")) { this.setData({ electronicBookList: wx.getStorageSync("electronicBookList"), }) } this.setData({ num: this.data.paperBookList.length + this.data.electronicBookList.length }) }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { if (this.data.tabValue == 'jesk_note') { const child = this.selectComponent('#note') child.onReachBottom() } }, /** * 用户点击右上角分享 */ onShareAppMessage() { }, // 格式化日期 formatDate(dateString) { if (!dateString) { return 'Invalid date'; } 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() { wx.navigateBack(); }, // 获取图书详情 getBookInfo(id) { this.setData({ "mockData'.id": 0, "mockData.price": 0, "mockData.count": 0 }) const query = { path: '*', queryType: '*', productId: id, favoriteTypes: 'FavoriteBookCity', itemFields: { 'SysType=': 'CmsFolder', }, coverSize: { height: 300, }, fields: { seriesName: [], author: [], isbn: [], publicationDate: [], bookClassification: [], paperPrice: [], JDLink: [], tmallLink: [], dangdangLink: [], weidianLink: [], content: [], authorIntroduction: [], // isApplyPaperBook: [], // isApplyEBook: [], isApplyBook: [], isSell: [], pdf: [], protectedEpub: [], probationPage: [], //pdf试读页数 freeEpubPage: [], //epub试读百分比 }, }; app.MG.store.getProductDetail(query).then(async (res) => { console.log(res.datas); this.setData({ bookDetail: res.datas, cmsDatas: res.datas.cmsDatas[0].datas, buyIdList: res.datas.purchasedSaleMethodIdList }); this.getSubTtem(); // 获取图书分类 const iconType = JSON.parse(res.datas.bookClassification)[0][0]; const classType = JSON.parse(res.datas.bookClassification)[0][1]; const className = await this.getBookClass(iconType, classType) // 获取组卷销售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.class': className, 'bookDetail.price': this.numFormat(this.data.bookDetail.price), 'bookDetail.oldPrice': this.numFormat(this.data.bookDetail.oldPrice), 'bookDetail.paperPrice': this.numFormat(this.data.bookDetail.paperPrice), }); console.log('图书信息', this.data.bookDetail); }); }, //请求子商品的文件 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 }); console.log(this.data.bookItemDetail, 'bookItemData.value'); 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 }); } } else { if (this.data.bookDetail.pdf || this.data.bookDetail.protectedEpub) { this.setData({ noFile: true }); } 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(iconType, classType) { let name = ''; const query = { refCodes: ['bookClassification'], }; await app.MG.store.getProductTypeField(query).then((res) => { JSON.parse(res[0].config).option.forEach((item) => { if (item.value == iconType) { item.child.forEach((citem) => { if (citem.value == classType) { name = citem.name; } }); } }); }); return name; }, // 收藏 setCollect() { if (this.data.bookDetail.isFavourite) { app.MG.store .delProductLink({ productIds: [this.data.bookDetail.id], linkType: 'FavoriteBookCity', }) .then(() => { this.setData({ 'bookDetail.isFavourite': false }) Message.success({ context: this, offset: [20, 32], duration: 5000, content: '这是一条成功的提示消息', }); }); } else { const params = { productIds: [this.data.bookDetail.id], linkType: 'FavoriteBookCity', }; app.MG.store.addProductLink(params).then((res) => { this.setData({ 'bookDetail.isFavourite': true }) Message.success({ context: this, offset: ['20rpx', '32rpx'], duration: 2000, content: '收藏成功', }); }); } }, // 我要建议 suggestBtn() { const child = this.selectComponent('#suggest-component') child.showDialog() }, // 跳转网店 goShop(e) { const { link } = e.currentTarget.dataset; wx.navigateTo({ url: `/packageBookService/pages/bookServices/webpage/index?url=${link}`, }) }, onTabsChange(e) { 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 == e.detail.value) if (checkData) { 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)) { this.getResourceData(checkData) } } else { this.setData({ noResources: true }) } } else if (e.detail.label == '云笔记') { const token = wx.getStorageSync('jsek-token') const child = this.selectComponent('#note') child.handleSubmitTitle() if (token) { child.changeLoading() child.getNoteList() } } }, // 获取资源所属分类 getResourceClass() { let query = { refCodes: ['resourcesClassification'] } app.MG.store.getProductTypeField(query).then((res) => { this.setData({ resourceClassList: JSON.parse(res[0].config).option }) }) }, // 获取教学资源 云学习 云测试 getResourceData(type) { this.setData({ loading: true, noResources: false }) let query = { path: '*', queryType: '*', productId: this.data.bookDetail.id, cmsPath: type.productLinkPath, 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 (!res.datas.cmsDatas[0].datas.length) { return this.setData({ noResources: true, loading: false }) } // 云测试,递归请求里层数据 if (type.refCode == 'questionBank') { const data = res.datas.cmsDatas[0].datas.filter( (item) => item.refCode == 'jsek_questionBank' ) if (data.length) return this.getResourceData(data[0]) } //教学资源 云学习 if (type.refCode == 'jsek_teachingResources' || type.refCode == 'jsek_cloudLearning') { if (res.datas.cmsDatas[0].datas.length > 0) { res.datas.cmsDatas[0].datas.forEach(item => { item.checked = false }) const list = await this.getAllResource(res.datas.cmsDatas[0].datas) if (type.refCode == 'jsek_teachingResources') { this.setData({ teach: list, loading: false }) this.findChildIds(this.data.teach, this.data.openTeachids = []) } else if (type.refCode == 'jsek_cloudLearning') { res.datas.cmsDatas[0].datas.forEach(item => { item.checked = false }) const list = await this.getAllResource(res.datas.cmsDatas[0].datas) this.setData({ learn: list, loading: false }) this.findChildIds(this.data.learn, this.data.openLearnids = []) } } else { // 无数据 } } else if (type.refCode == 'jsek_questionBank') { // const list = await this.getAllResource(res.datas.cmsDatas[0].datas) this.setData({ test: res.datas.cmsDatas[0].datas, loading: false }) } else { console.log('其他'); } }) .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: '*', productId: this.data.bookDetail.id, cmsPath: path, itemFields: { SysType: 'CmsFolder', // 资源类型,试读文件,是否允许下载等参数 selectType: [], freeFile: [], file: [], protectedFile: [], resourcesClassification: [], isDownload: [], jsek_resourceBrief: [], jsek_link: [], accessType: [] }, pading: { start: 0, size: 999 }, } const data = await app.MG.store.getProductDetail(query) data.datas.cmsDatas[0].datas.forEach((item) => { 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) { 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.resourceIsBuy(item) item.isShopCar = this.isShoppingCart(item) } }) return data.datas.cmsDatas[0].datas }, // 获取展开项 findChildIds(data, result) { let index = 0 for (let i = 0; i < data.length; i++) { if (index < 3) { const item = data[i] if (item.childrenFolderCount > 0) { result.push(item.id) 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() { const token = wx.getStorageSync('jsek-token') if (!token) { return wx.getUserProfile({ desc: '用户登录', success: (res) => { console.log(res); } }) } const shoppingCartGetId = [] let query = { start: 0, size: 999, filterList: [], searchList: [] } const res = await app.MG.store.getShoppingCartProductList(query) res.datas.forEach((item) => { shoppingCartGetId.push(item.saleMethod.id) }) console.log(shoppingCartGetId, 'shoppingCartGetId'); console.log(this.data.selectedIds, '销售方式id'); const determine = shoppingCartGetId.some((item) => item == this.data.selectedIds) console.log(determine); 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: 'success', direction: 'column', }); } }, 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 console.log(bookOrdersId); // 检查订单号是否存在 if (bookOrdersId) { const url = '/pages/cart/paymentPage/index?orderNumber=' + bookOrdersId wx.navigateTo({ url }) } else { console.log(222); } } else { wx.showToast({ title: "商品不在有效期", icon: 'none', duration: 1000, }) } }, // 获取教学资源下载是否申请通过 getApplyInfo(id) { // 获取当前时间 const currentDate = new Date() let query = { sort: { type: 'Desc', field: 'CreateDate' }, start: 0, size: 99999, appRefCode: app.config.appRefCode, topicIdOrRefCode: 'productDownLoad' } 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({ applyResourceLoading: false }) }, // 申请教学资源 applyResource() { this.setData({ applyResourceLoading: true }) // let role = userStore.userInfo ? userStore.userInfo.role : null // if (role) { // if (role == 'Teacher') { // 申请教学资源 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((res) => { if (res) { wx.showToast({ title: '申请已提交,请待审核通过后下载', }) } this.getApplyInfo(this.data.bookDetail.id) }) // } else { // ElMessageBox.confirm('请先进行教师认证!', '尊敬的用户,您好!', { // confirmButtonText: '去认证', // cancelButtonText: '取消', // type: 'warning' // }) // .then(() => { // isShow.value = true // }) // .catch(() => { }) // } // } else { // // logIn() // } }, // 教学资源下载前往PC提示Diialog closeTeachDownload() { this.setData({ isShowTeachDownload: false }) }, // 下载功能 downloadTeach(e) { this.setData({ isShowTeachDownload: true }) console.log('zhuan', this.data.isShowTeachDownload); // 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) { if (data.saleMethod && data.saleMethod.length) { const isSHow = this.data.buyIdList.some((item) => item == data.saleMethod[0].Id) 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) { 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 } }, // 遍历树结构转换为数组方法 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('jsek-token') if (!token) { return wx.getUserProfile({ desc: '用户登录', success: (res) => { console.log(res); } }) } 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) } } 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() { this.setData({ 'mockData.useCount': 0, 'mockData.mockList': [] }) app.MG.identity .getUserKey({ domain: 'mockData', keys: [this.data.bookId] }) .then((res) => { console.log(JSON.parse(res[0].value)); 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 = new Date().getTime() 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) } ] }) }, // 底部购买按钮 buyBtn() { if (this.data.tabValue == 'brief') { this.buyBook() } else if (this.data.tabValue == 'jsek_cloudLearning') { const tree = this.selectComponent('#tree') tree.onCloudShoppingCart() } else if (this.data.tabValue == 'questionBank') { this.buyMock() } else { console.log(this.data.tabValue); } }, //样书申请 //申请电子样书 appplyElectronicBook() { console.log(this.data.bookDetail) if (this.data.bookDetail.isApplyBook == 2 || this.data.bookDetail.isApplyBook == 4) { let role = this.data.userInfo != null ? this.data.userInfo.role : null if (role) { if (role == 'Teacher') { if (this.data.noFile) { this.getSelectBookCount() } else { wx.showToast({ title: "暂无电子书文件,请联系管理员!", icon: 'none', duration: 1000, }) } } else { wx.showModal({ title: '尊敬的用户,您好!', //提示的标题 content: '请先进行教师认证?', //提示的内容 success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) { } } }) } } } }, //申请纸质样书 appplyPaperBook() { if (this.data.bookDetail.isApplyBook == 3 || this.data.bookDetail.isApplyBook == 4) { let role = this.data.userInfo != null ? this.data.userInfo.role : null if (role) { if (role == 'Teacher') { this.getSelectPaperBookCount() } else { wx.showModal({ title: '尊敬的用户,您好!', //提示的标题 content: '请先进行教师认证?', //提示的内容 success: function (res) { if (res.confirm) { wx.navigateTo({ url: "/packageDomain/pages/teacherCertification/index", }); } else if (res.cancel) { } } }) } } } }, //获取当前已申请次数(纸质) getSelectPaperBookCount() { app.MG.app .getTicketResult({ ticketRefCodeOrGuid: 'paperSampleBookapplyNum', roleId: this.data.userInfo.roleId }) .then((res) => { this.setData({ paperBookCount: res.totalCount - res.usedCount }) this.getAlreadyBookList(this.data.bookDetail, 'pBook') }) }, //获取当前已申请次数(电子) getSelectBookCount() { app.MG.app .getTicketResult({ ticketRefCodeOrGuid: 'electronicSampleBookapplyNum', roleId: this.data.userInfo.roleId }) .then((res) => { this.setData({ ebookCount: res.totalCount - res.usedCount }) this.getAlreadyBookList(this.data.bookDetail, 'eBook') }) }, //获取已申请的样书列表 getAlreadyBookList(item, type) { let topicIdOrRefCode = null if (type == 'eBook') { topicIdOrRefCode = 'applyBook' } else { topicIdOrRefCode = 'applyEntityBook' } const data = { start: 0, size: 9999, topicIdOrRefCode, appRefCode: app.config.appRefCode, sort: { type: 'Desc', field: 'CreateDate' } } app.MG.ugc.getTopicMessageList(data).then((res) => { let itemAttr = null let isHas = false 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 } res.datas.map((item) => { if (item.feedBack) { item.feedBack = JSON.parse(item.feedBack) if (item.feedBack.endDate) { const currentDate = new Date() let times = new Date(item.feedBack.endDate + ' 23:59:59').getTime() if (times < currentDate.getTime()) { item.isExpiry = true } } } if (item.content) { item.content = JSON.parse(item.content) item.content.map((e) => (item.productId = e.id)) } }) let objVal = null if (type != 'eBook') { objVal = res.datas.find( (i) => i.productId == item.id && i.state != 'Reject' && i.state == 'WaitAudit' ) } else { objVal = res.datas.find((i) => i.productId == item.id && i.state != 'Reject') } if (objVal && !objVal.isExpiry && type == 'eBook') { wx.showToast({ title: "您已申请该样书", icon: 'none', duration: 1000, }) } else if (objVal && type != 'eBook') { wx.showToast({ title: "您已申请该样书", icon: 'none', duration: 1000, }) } else { if (type == 'eBook') { if (this.data.ebookCount > 0) { const eBookData = this.data.electronicBookList if (eBookData.length == 2) { wx.showToast({ title: "每次最多只可申请2本样书", icon: 'none', duration: 1000, }) return false } if (eBookData.length > 0) { for (let i = 0; i < eBookData.length; i++) { if (eBookData[i].id == item.id) { isHas = true } } if (!isHas) { wx.showToast({ title: "添加成功,在样书申请单等您哦~", icon: "none", duration: 1000, }) this.setData({ electronicBookList: [...this.data.electronicBookList, ...[itemAttr]], num: this.data.electronicBookList.length + this.data.paperBookList.length }) wx.setStorageSync("electronicBookList", this.data.electronicBookList); } else { wx.showToast({ title: "该书已在清单列表中", icon: "none", duration: 1000, }) } } else { wx.showToast({ title: "添加成功,在样书申请单等您哦~", icon: "none", duration: 1000, }) this.setData({ electronicBookList: [itemAttr], num: 1 + this.data.paperBookList.length }) wx.setStorageSync("electronicBookList", [itemAttr]); } } else { wx.showToast({ title: "您的电子样书申请次数已用尽,若要继续,请联系管理员!", icon: "none", duration: 1000, }) } } else { if (this.data.paperBookCount > 0) { const pBookData = this.data.paperBookList if (pBookData.length == 2) { wx.showToast({ title: "每次最多只可申请2本样书", icon: 'none', duration: 1000, }) return false } if (pBookData.length > 0) { for (let i = 0; i < pBookData.length; i++) { if (pBookData[i].id == item.id) { isHas = true } } if (!isHas) { wx.showToast({ title: "添加成功,在样书申请单等您哦~", icon: 'none', duration: 1000, }) this.setData({ paperBookList: [...this.data.paperBookList, ...[itemAttr]], num: this.data.paperBookList.lenght + this.data.electronicBookList.length }) wx.setStorageSync("paperBookList", this.data.paperBookList); } else { wx.showToast({ title: "该书已在清单列表中", icon: "none", duration: 1000, }) } } else { wx.showToast({ title: "添加成功,在样书申请单等您哦~", icon: 'none', duration: 1000, }) this.setData({ paperBookList: [itemAttr], num: 1 + this.data.electronicBookList.length }) wx.setStorageSync("paperBookList", [itemAttr]); } } else { wx.showToast({ title: "您的纸质样书申请次数已用尽,若要继续,请联系管理员!", icon: 'none', duration: 1000, }) } } } }) }, //去样书申请单 goApply() { wx.navigateTo({ url: "/packageDomain/pages/sampleBookList/applicationForm/index", }); }, })