// packageBookService/pages/bookServices/detail/buyResource/index.js const app = getApp(); Page({ /** * 页面的初始数据 */ data: { barHeight: "", navBarHeight: "", learn: [], openLearnids: [], bookId: "", loading: true, shoppingList: [], shoppingCartGetId: [], methodId: [], paymentPage: false, superior: false, checkAllState: true, productLinkPath: '', refCode: '', naData: false, bookRefCode: [] }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { this.getBookInfo(options.bookId); const systInfo = wx.getSystemInfoSync(); const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息 const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度 this.setData({ barHeight: systInfo.statusBarHeight, navBarHeight: navBarHeight, bookId: options.bookId, productLinkPath: options.productLinkPath, refCode: options.refCode }); this.getShoppingCartProductGet(); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() {}, /** * 生命周期函数--监听页面显示 */ onShow() {}, /** * 生命周期函数--监听页面隐藏 */ onHide() {}, /** * 生命周期函数--监听页面卸载 */ onUnload() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() {}, /** * 页面上拉触底事件的处理函数 */ onReachBottom() {}, /** * 用户点击右上角分享 */ onShareAppMessage() {}, onShareTimeline() {}, changeCheckAll(e) { this.setData({ checkAllState: e.detail.value, }); }, goBack() { wx.navigateBack(); }, // 获取所有子项数量 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, newArr, path) { for (const item of rootList) { if (path == item.productLinkPath.replace('\\' + item.id, '')) { 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 = this.insertAndSortObjectsByProductLinkPath(newArr, item) // 插进数组后 从原数据中删除 rootList = rootList.filter(nitem => nitem.id != item.id) } } //给数组里面再添加一个children的空数组 for (const i of newArr) { i.children = [] this.getTreeList(rootList, 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 => newObj.id < obj.id); // 如果没有找到合适的位置,则放在数组末尾 if (insertIndex === -1) { insertIndex = array.length; } // 插入新对象到数组 array.splice(insertIndex, 0, newObj); // 测试6 正式5 // 对数组进行排序 array.sort((a, b) => { if (a.id < b.id) return -1; if (a.id > b.id) return 1; return 0; }); // 返回更新后的数组 return array; }, // 遍历树结构转换为数组方法 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; }, // 递归树结构,如果父级有销售方式(有效期),去掉所有子集的销售方式 clearTreeSealmethod(clearSaleMethod, tree) { for (let item of tree) { const saleData = item.saleMethod && item.saleMethod.length ? item.saleMethod.find((citem) => citem.SaleType == 'Normal') : null if ( ((saleData && new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime()) || clearSaleMethod) && item.children && item.children.length ) { item.children.forEach((ditem) => (ditem.saleMethod = [])) } if (item.children && item.children.length) this.clearTreeSealmethod( saleData && new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime(), item.children ) } return tree }, // 勾选禁用 handleTreeCheck(tree) { for (const item of tree) { const saleData = item.saleMethod && item.saleMethod.length ? item.saleMethod.find((citem) => citem.SaleType == 'Normal') : undefined if (saleData && new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime()) { item.disabled = false } else { item.disabled = true } if (item.children && item.children.length) this.handleTreeCheck(item.children) } return tree }, // 获取云学习 getResourceDataList(type) { this.setData({ loading: true, noResources: false, }); let query = { path: '*', queryType: '*', productId: this.data.bookDetail.id, cmsPath: type.productLinkPath, cmsType: '*', itemFields: { SysType: 'CmsFolder', // 资源类型,试读文件,是否允许下载等参数 learnSelectType: [], selectType: [], freeFile: [], file: [], protectedFile: [], resourcesClassification: [], isDownload: [], jsek_resourceBrief: [], jsek_link: [], jsek_questionBank: [] }, pading: { start: 0, size: 999 }, } app.MG.store.getProductDetail(query).then((res) => { if (!res.datas.cmsDatas[0].datas.length) { return this.setData({ noResources: true, loading: false, }); } let list = [] res.datas.cmsDatas[0].datas.forEach((item) => { item.checked = false; // if (item.sysType == 'CmsItem') { // item.isbuy = this.resourceIsBuy(item); // item.isShopCar = this.isShoppingCart(item); // } }); // 显示 需要购买的和需要免费领取的 this.getTreeList(res.datas.cmsDatas[0].datas, list, query.cmsPath) list = this.ensureTreeConsistency(list) list = this.changeResourceChildren(list) list = this.clearTreeSealmethod(false, list) list = this.handleTreeCheck(list) this.handleTreeData(list).forEach(item => { item.isbuy = this.resourceIsBuy(item); item.isShopCar = this.isShoppingCart(item); }) console.log('修改后云', list); let result = []; let arr = res.datas.cmsDatas[0].datas.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, }); }) }, async getBookInfo(id) { 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: [], isApplyBook: [], isSell: [], pdf: [], protectedEpub: [], probationPage: [], //pdf试读页数 freeEpubPage: [], //epub试读百分比 }, }; await app.MG.store.getProductDetail(query).then(async (res) => { this.setData({ bookDetail: res.datas, buyIdList: res.datas.purchasedSaleMethodIdList, }); this.getResourceDataList({ productLinkPath: this.data.productLinkPath, refCode: this.data.refCode, }) }); }, // 获取已购买商品 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, }); }); }, // 判断资源是否购买 resourceIsBuy(data) { if (data.saleMethod && data.saleMethod.length) { const saleData = data.saleMethod.find((item) => item.SaleType == 'Normal') if (saleData.State == 'Disable') return false const isShow = this.data.buyIdList.some( (item) => item == saleData.Id ); // 已经购买 if (isShow) return false // 未购买,查看销售方式是否过期 if (!isShow) { const flag = new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime() if (flag) { // 为过期 ,需要购买 return true } else { // 已过期 无需购买 return false } } } else { return false; } }, // 判断资源加入购物车按钮是否显示 isShoppingCart(data) { if (data.saleMethod && data.saleMethod.length) { const saleData = data.saleMethod.find((item) => item.SaleType == 'Normal') // 先判断是否免费 if (saleData.Price <= 0) return false // 再判断是否购买 const isBuy = this.data.buyIdList.some((item) => item == saleData.Id) if (isBuy) { // 购买了 return false } else { // 判断是否加入购物车 const isShow = this.data.shoppingCartGetId.some((item) => item == saleData.Id) if (isShow) return false // 未购买,查看销售方式是否过期 if (!isShow) { const flag = new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime() if (flag) { // 为过期 ,需要购买 return true } else { // 已过期 无需购买 return false } } } // 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; } }, // 获取展开项 findChildIds(data, result) { let index = 0; 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); for (let j = 0; j < item.children.length; j++) { if (index < 3) { const childrenItme = item.children[j]; if (item.children && item.children.length > 0) { result.push(childrenItme.id); index += 1; } } else { break; } } } else if (item.children && item.children.length > 0) { result.push(item.id); index += 1; } } else { break; } } }, checkAll() { const child = this.selectComponent("#tree"); child.checkAll(); }, //购买按钮 batchPurchase() { if (!this.data.learn.length) { return wx.showToast({ icon: "error", title: '暂无数据', }) } // 修改后方法 const checkData = this.handleTreeData(this.data.learn).filter(item => item.checked == true) console.log('选中', checkData); // let saleMethodIds = []; // let requests = []; // let item = []; // let selectAllId = []; // const child = this.selectComponent("#tree"); // item = child.data.superiorPurchaseSaleMethodId; // const sonItem = child.data.sonPurchaseSaleMethodId; // let selectAll = child.data.selectAll; // if (selectAll.length) { // selectAll.forEach((item) => { // if (item.saleMethod != 0) { // selectAllId.push(item.saleMethod[0].Id); // } // }); // app.MG.store // .initOrder({ // requests: selectAllId.map((id) => ({ // saleMethodId: id, // count: 1, // })), // }) // .then((res) => { // if (res) { // wx.navigateTo({ // url: "/pages/cart/paymentPage/index?orderNumber=" + res.orderNumber, // }); // selectAllId = []; // child.setData({ // selectAll: [], // }); // } // }); // } // if (item) { // // 拿到id // item.forEach((items) => { // if (items.saleMethod != 0) { // saleMethodIds.push(items.saleMethod[0].Id); // } // }); // app.MG.store // .initOrder({ // requests: saleMethodIds.map((id) => ({ // saleMethodId: id, // count: 1, // })), // }) // .then((res) => { // if (res) { // wx.navigateTo({ // url: "/pages/cart/paymentPage/index?orderNumber=" + res.orderNumber, // }); // child.setData({ // superiorPurchaseSaleMethodId: [], // 使用setData方法清空sonPurchaseSaleMethodId数据 // }); // } // }); // } // if (item.length == 0 && sonItem) { // app.MG.store // .initOrder({ // requests: sonItem.map((id) => ({ // saleMethodId: id, // count: 1, // })), // }) // .then((res) => { // if (res) { // wx.navigateTo({ // url: "/pages/cart/paymentPage/index?orderNumber=" + res.orderNumber, // }); // this.setData({ // paymentPage: true, // }); // child.setData({ // sonPurchaseSaleMethodId: [], // 使用setData方法清空sonPurchaseSaleMethodId数据 // }); // } // }); // } }, // 章节勾选方法 findAndUpdateItemsByIds(tree, ids, state) { function findAndUpdate(node) { if (ids.includes(node.id)) { // console.log(node, 'node'); node.checked = state; // 将目标项的 check 属性设置为 true } if (node.children && node.children.length > 0) { for (let child of node.children) { findAndUpdate(child); // 递归处理子节点 } } } for (let node of tree) { findAndUpdate(node); // 对每个顶层节点执行查找和更新操作 } // console.log(tree, 'tree345'); return tree; // 返回修改后的完整数组 }, // 单个勾选方法 checkResoucrceInfo(tree, id) { function findAndUpdate(node) { if (node.sysType == "CmsFolder" && node.children.length > 0) { for (let index = 0; index < node.children.length; index++) { const element = node.children[index]; findAndUpdate(element); } } else if (id == node.id && node.sysType == "CmsItem") { node.checked = !node.checked; // 将目标项的 check 属性设置为 true } } for (let node of tree) { findAndUpdate(node); // 对每个顶层节点执行查找和更新操作 } return tree; // 返回修改后的完整数组 }, // 章节勾选事件 changeListChecked(e) { const ids = e.detail.ids const state = e.detail.flag const updated = this.findAndUpdateItemsByIds(this.data.learn, ids, state) this.setData({ learn: updated }) }, // 单个勾选事件 changeResourceChecked(e) { const id = e.detail.id const updated = this.checkResoucrceInfo(this.data.learn, id) this.setData({ learn: updated }) }, upDateShopCar(id, tree) { for (let item of tree) { if (item.id == id) { item.isShopCar = false } else { if (item.children && item.children.length) this.upDateShopCar(id, item.children) } } return tree }, // 更新购物车图标 updateCloudLearning(e) { const { id } = e.detail console.log(id); const list = this.upDateShopCar(id, this.data.learn) this.setData({ learn: list }) } });