const util = require("./components/util"); // 引入封装过的加载提示
|
import {
|
loginInfo
|
} from "../../../../../../assets/js/login";
|
const app = getApp();
|
Component({
|
properties: {
|
treeList: {
|
type: Array,
|
value: [],
|
},
|
learnList: {
|
type: Array,
|
value: []
|
},
|
bookInfo: {
|
type: Object,
|
value: {},
|
},
|
buyIds: {
|
type: Array,
|
value: [],
|
},
|
tab: {
|
type: String,
|
value: "",
|
},
|
applyState: {
|
type: String,
|
value: "",
|
},
|
openIds: {
|
type: Array,
|
value: [],
|
},
|
isShowCheck: {
|
type: Boolean,
|
value: false,
|
},
|
paymentPage: {
|
type: Boolean,
|
value: false,
|
},
|
superior: {
|
type: Boolean,
|
value: false,
|
},
|
checkAllState: {
|
type: Boolean,
|
},
|
deadline: {
|
type: String
|
}
|
},
|
data: {
|
sonPurchaseSaleMethodId: "",
|
superiorPurchaseSaleMethodId: [],
|
activeValues: [1, 2],
|
webpageSrc: "",
|
cloudShoppingCart: [],
|
selectAll: [],
|
shoppingCart: true,
|
stop: false,
|
cart: true
|
},
|
ready() {},
|
|
onLoad() {
|
this.setData({
|
sonPurchaseSaleMethodId: [],
|
});
|
},
|
observers: {
|
treeList: function (newValue) {
|
const list = [];
|
let checked = "";
|
this.properties.treeList.forEach((item) => {
|
if (item.children && item.children.length > 0) {
|
list.push(...this.flattenTree([item]));
|
}
|
});
|
const flag = list.findIndex((item) => item.checked == true);
|
},
|
},
|
|
methods: {
|
handleList(tree) {
|
for (let index = 0; index < tree.length; index++) {
|
const item = tree[index];
|
if (item.sysType == "CmsItem" && !item.checked) {}
|
if (item.children && item.children.length > 0) {
|
this.handleList(item.children);
|
}
|
}
|
},
|
// 节点展开
|
handleChange(e) {
|
this.setData({
|
openIds: e.detail.value,
|
});
|
},
|
handleCheck(data) {
|
for (let index = 0; index < data.length; index++) {
|
const element = data[index];
|
element.checked = true;
|
if (element.childrenCount && element.type == "productFolder") {
|
handleCheck(element.children);
|
}
|
}
|
},
|
downloadTeach(e) {
|
const value = e.currentTarget.dataset.value;
|
var myEventDetail = {
|
value,
|
}; // detail对象,提供给事件监听函数
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
}; // 触发事件的选项
|
this.triggerEvent("downloadTeach", myEventDetail, myEventOption);
|
},
|
// 判断资源是否购买
|
resourceIsBuy(data) {
|
if (data.saleMethod && data.saleMethod.length) {
|
if (data.saleMethod[0].State == "Disable") return false;
|
const isSHow = this.properties.buyIds.some(
|
(item) => item == data.saleMethod[0].Id
|
);
|
return !isSHow;
|
} else {
|
return false;
|
}
|
},
|
// 跳转音视频播放器
|
goPlayer(e) {
|
// 检查登录状态
|
const token = wx.getStorageSync(app.config.tokenKey);
|
if (token) {
|
const item = e.currentTarget.dataset.item;
|
const parent = e.currentTarget.dataset.parent;
|
const parentProductLinkPath = parent ? parent.productLinkPath : wx.getStorageSync('teachResourcesPath')
|
const parentName = parent ? parent.name : '教学资源'
|
let url;
|
if (this.properties.isShowCheck && this.resourceIsBuy(item)) {
|
return false;
|
}
|
if (item.selectType == "video" || item.learnSelectType == "video") {
|
url = "/packageDomain/pages/resourceDetails/myVideo/index";
|
} else if (
|
item.selectType == "audio" ||
|
item.learnSelectType == "audio"
|
) {
|
url = "/packageDomain/pages/resourceDetails/myAudio/index";
|
} else if (item.selectType == "picture" || item.selectType == "zip") {
|
url = "/packageDomain/pages/resourceDetails/document/index";
|
}
|
if (
|
this.properties.tab == "jsek_cloudLearning" &&
|
this.resourceIsBuy(item)
|
) {
|
return wx.showToast({
|
icon: "error",
|
title: item.saleMethod[0].Price > 0 ?
|
"请先购买该资源" : "请先点击领取查看按钮",
|
});
|
}
|
if (item.saleMethod.length == 0 && item.sysType == 'CmsItem' && this.properties.tab == "jsek_cloudLearning") {
|
return wx.showToast({
|
icon: 'error',
|
title: '暂未开始销售,请联系管理员',
|
})
|
}
|
if (this.properties.tab == "jsek_teachingResources" && item.fileMap) {
|
if (item.file && item.fileMap[item.file].protectType !== "Public") {
|
return wx.showToast({
|
icon: 'error',
|
title: '资源不可用,请联系管理员',
|
})
|
} else if (item.freeFile && item.fileMap[item.freeFile].protectType !== "Public") {
|
return wx.showToast({
|
icon: 'error',
|
title: '资源不可用,请联系管理员',
|
})
|
}
|
}
|
wx.navigateTo({
|
url: `${url}?productLinkPath=${item.productLinkPath}&parentProductLinkPath=${parentProductLinkPath}&parentName=${parentName}&activeId=${item.id}&bookId=${this.properties.bookInfo.id}&bookName=${this.properties.bookInfo.name}&cmsId=${this.properties.bookInfo.rootCmsItemId}&formPath=${this.properties.tab}&applyState=${this.properties.applyState}&deadline=${this.properties.deadline}`,
|
});
|
|
console.log(item, '7899');
|
if (item.selectType == "document" || item.selectType == "pdf") {
|
// freeFile
|
|
if (item.selectType == "document") {
|
item.selectType = "pptx"
|
|
}
|
console.log(item);
|
const fileLink = item.file ?
|
app.config.requestCtx + "/file/api/ApiDownload?md5=" + item.file : app.config.requestCtx + "/file/api/ApiDownload?md5=" + item.freeFile
|
console.log(fileLink, "fileLink");
|
//提示加载中
|
util.showLoading();
|
// 单次下载允许的最大文件为 200MB
|
wx.downloadFile({
|
url: fileLink,
|
// filePath: wx.env.USER_DATA_PATH + `/${item.name}.${item.selectType}`,
|
filePath: wx.env.USER_DATA_PATH + `/${item.name}.${item.selectType}`,
|
success: function (res) {
|
console.log(res, "wx.downloadFile success res");
|
if (res.statusCode != 200) {
|
util.hideLoadingWithErrorTips();
|
return false;
|
}
|
var Path = res.tempFilePath; //返回的文件临时地址,用于后面打开本地预览所用
|
let data = res.filePath;
|
wx.openDocument({
|
filePath: data,
|
showMenu: true,
|
success: function (res) {
|
console.log("打开成功");
|
util.hideLoading();
|
},
|
});
|
},
|
fail: function (err) {
|
console.log(err, "wx.downloadFile fail err");
|
util.hideLoadingWithErrorTips();
|
},
|
});
|
}
|
<<<<<<< Updated upstream
|
|
|
|
|
=======
|
// if (item.selectType == "document" || item.selectType == "pdf") {
|
// const fileLink = app.config.requestCtx + "/file/api/ApiDownload?md5=" + item.file;
|
// let filePath = wx.env.USER_DATA_PATH + '/' + item.name
|
// console.log(filePath, 'filePath');
|
// //提示加载中
|
// util.showLoading();
|
// // 单次下载允许的最大文件为 200MB
|
// wx.downloadFile({
|
// url: fileLink,
|
// success: function (res) {
|
// if (res.statusCode != 200) {
|
// util.hideLoadingWithErrorTips();
|
// return false;
|
// }
|
// var Path = res.tempFilePath; //返回的文件临时地址,用于后面打开本地预览所用
|
// wx.saveFile({
|
// tempFilePath: Path,
|
// success: function (res) {
|
// var savedFilePath = res.savedFilePath;
|
// // 将文件保存为 item.name
|
// wx.saveFile({
|
// tempFilePath: savedFilePath,
|
// filePath: wx.env.USER_DATA_PATH + '/' + item.name,
|
// success: function (res) {
|
// wx.openDocument({
|
// filePath: res.savedFilePath,
|
// showMenu: true,
|
// success: function (res) {
|
// util.hideLoading();
|
// },
|
// });
|
// },
|
// fail: function (err) {
|
// util.hideLoadingWithErrorTips();
|
// }
|
// });
|
// },
|
// fail: function (err) {
|
// util.hideLoadingWithErrorTips();
|
// }
|
// });
|
// },
|
// fail: function (err) {
|
// util.hideLoadingWithErrorTips();
|
// },
|
// });
|
// }
|
>>>>>>> Stashed changes
|
if (item.selectType == "webpage") {
|
this.setData({
|
webpageSrc: item.jsek_link,
|
});
|
console.log(this.data.webpageSrc, "webpageSrc");
|
}
|
}
|
},
|
|
// 拿到所有项
|
getAllChildren(id) {
|
let result = [];
|
|
function findChildren(item) {
|
if (item.id === id) {
|
if (item.children && item.children.length > 0) {
|
item.children.forEach((child) => {
|
findChildren(child);
|
});
|
}
|
} else {
|
if (item.children && item.children.length > 0) {
|
item.children.forEach((child) => {
|
findChildren(child);
|
});
|
}
|
}
|
if (item.children && item.children.length > 0) {
|
result.push(...item.children);
|
}
|
}
|
console.log(this.properties.treeList, "this.properties.treeList");
|
this.properties.treeList.forEach((item) => {
|
findChildren(item);
|
});
|
return result;
|
},
|
// 拿到当前项子项
|
flattenTree(tree) {
|
let result = [];
|
|
function flatten(node) {
|
result.push(node);
|
if (node.children && node.children.length > 0) {
|
node.children.forEach((child) => {
|
flatten(child);
|
});
|
}
|
}
|
tree.forEach((node) => {
|
flatten(node);
|
});
|
// console.log(result, 'result');
|
return result;
|
},
|
|
// 变为true
|
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; // 返回修改后的完整数组
|
},
|
// 全选
|
checkAll() {
|
const ids = [];
|
const list = [];
|
let checked = "";
|
this.properties.treeList.forEach((item) => {
|
if (item.children && item.children.length > 0) {
|
list.push(...this.flattenTree([item]));
|
}
|
});
|
list.forEach((item) => {
|
ids.push(item.id);
|
checked = item.checked;
|
});
|
// const flag =
|
// list.findIndex((item) => item.checked == false) > -1 ? true : false;
|
const flag = this.properties.checkAllState;
|
// const updataList = this.findAndUpdateItemsByIds(
|
// this.properties.treeList,
|
// ids,
|
// flag
|
// );
|
// this.setData({
|
// treeList: updataList,
|
// });
|
|
var myEventDetail = {
|
ids,
|
flag,
|
}; // detail对象,提供给事件监听函数
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
}; // 触发事件的选项
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
|
if (!checked) {
|
this.setData({
|
selectAll: list,
|
});
|
}
|
var myEventDetail = {
|
value: !flag,
|
}; // detail对象,提供给事件监听函数
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
}; // 触发事件的选项
|
this.triggerEvent("changeCheckAll", myEventDetail, myEventOption);
|
},
|
|
// 章节勾选
|
checkResourceTitle(e) {
|
const flag = e.detail.checked;
|
// 这个时候checked的值是fals
|
let checkResourceTitleList = [];
|
const item = e.currentTarget.dataset.item;
|
const parent = this.findParentById(this.properties.learnList, item.id)
|
let childrenList
|
let flagNum
|
if (parent) childrenList = parent.children.filter(citem => citem.id !== item.id)
|
if (childrenList) flagNum = childrenList.findIndex(item => item.checked == false)
|
let list = this.flattenTree([item]);
|
let ids = [];
|
list.forEach((item) => {
|
if (item.sysType == 'CmsFolder' || (item.sysType == 'CmsItem' && item.saleMethod.length))
|
ids.push(item.id);
|
});
|
var myEventDetail = {
|
ids,
|
flag,
|
}; // detail对象,提供给事件监听函数
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
}; // 触发事件的选项
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
if (flagNum == -1) {
|
let checkedState
|
var myEventDetail = {
|
ids: [parent.id],
|
flag,
|
}; // detail对象,提供给事件监听函数
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
}; // 触发事件的选项
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
}
|
if (!list.checked) {
|
this.setData({
|
superiorPurchaseSaleMethodId: list,
|
});
|
}
|
list.forEach((items) => {
|
console.log(items.checked, "itesasd");
|
if (!items.checked) {
|
this.setData({
|
cloudShoppingCart: items,
|
});
|
}
|
});
|
this.setData({
|
openIds: this.data.openIds,
|
});
|
},
|
// 子项勾选
|
checkResource(e) {
|
const citem = e.currentTarget.dataset.item;
|
const parent = e.currentTarget.dataset.parent
|
let outermost
|
if (parent) outermost = this.findParentById(this.properties.learnList, parent.id)
|
const childrenList = parent.children.filter(item => item.id !== citem.id && item.saleMethod.length)
|
const flag = childrenList.findIndex(item => item.checked == false)
|
// 改变该项checked
|
var myEventDetail = {
|
id: citem.id
|
};
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
};
|
this.triggerEvent("changeResourceChecked", myEventDetail, myEventOption);
|
// 通过判断,联通父级checked
|
if (flag == -1) {
|
let checkedState
|
citem.checked == false ? checkedState = true : checkedState = false
|
var myEventDetail = {
|
ids: [parent.id],
|
flag: checkedState,
|
};
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
};
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
}
|
// 联通最外层级checked ,如果有一个取消勾选,且当前最外层勾选,则取消最外层的勾选
|
if (citem.checked && outermost && outermost.checked) {
|
var myEventDetail = {
|
ids: [outermost.id],
|
flag: false,
|
};
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
};
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
}
|
// 联通最外层级checked, 如果所有子项勾选, 且当前最外层未勾选, 则加上最外层的勾选
|
if (!citem.checked && outermost) {
|
let allchildren = this.flattenTree([outermost])
|
allchildren = allchildren.filter(item => item.sysType == 'CmsItem' && item.id !== citem.id && item.saleMethod.length)
|
const satate = allchildren.findIndex(item => item.checked == false)
|
if (satate == -1) {
|
var myEventDetail = {
|
ids: [outermost.id],
|
flag: true,
|
};
|
var myEventOption = {
|
bubbles: true,
|
composed: true,
|
};
|
this.triggerEvent("changeListChecked", myEventDetail, myEventOption);
|
}
|
}
|
if (!citem.checked) {
|
//选中的时候添加id
|
let sonPurchaseSaleMethodId = this.data.sonPurchaseSaleMethodId || [];
|
if (this.properties.paymentPage) {
|
sonPurchaseSaleMethodId = [];
|
this.properties.paymentPage = false;
|
}
|
if (!this.properties.paymentPage) {
|
sonPurchaseSaleMethodId.push(citem.saleMethod[0].Id);
|
}
|
this.setData({
|
sonPurchaseSaleMethodId: sonPurchaseSaleMethodId,
|
});
|
} else {
|
// 取消选中的时候删除id
|
}
|
},
|
// 加入购物车
|
async onCloudShoppingCart(e) {
|
let shoppingCartGetId = [];
|
|
const item = e.currentTarget.dataset.item
|
console.log(item.isShopCar);
|
const saleMethodId = e.currentTarget.dataset.item.saleMethod[0].Id;
|
console.log(saleMethodId);
|
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);
|
});
|
if (shoppingCartGetId.includes(saleMethodId)) {
|
console.log(111);
|
// this.data.updateShoppingCartHidden();
|
// this.data.updateCloudLearning();
|
|
wx.showToast({
|
icon: "error",
|
title: "已添加",
|
});
|
this.setData({
|
shoppingCart: false,
|
});
|
} else {
|
let query = {
|
requests: [{
|
saleMethodId: saleMethodId,
|
storeEventId: null,
|
// agentCode: '电子书'
|
}, ],
|
};
|
const addRes = await app.MG.store.addShoppingCart(query);
|
console.log(addRes, "addRes");
|
if (addRes) {
|
wx.showToast({
|
icon: "success",
|
title: "添加成功",
|
});
|
item.isShopCar = false
|
this.triggerEvent("updateCloudLearning")
|
}
|
}
|
},
|
sadd() {
|
this.triggerEvent("updateShoppingCartHidden");
|
this.triggerEvent("updateCloudLearning");
|
},
|
findParentById(arr, id) {
|
for (let i = 0; i < arr.length; i++) {
|
const item = arr[i];
|
// 检查当前项是否匹配(即它是不是我们要找的项)
|
if (item.id === id) {
|
// 如果当前项就是我们要找的项,则它没有父级,返回 null
|
return null;
|
}
|
// 递归查找当前项的子项
|
const child = this.findChildById(item.children, id);
|
if (child) {
|
// 如果在子项中找到匹配的项,返回当前项作为父级
|
return item;
|
}
|
}
|
// 如果没有找到匹配的父项,返回 null
|
return null;
|
},
|
|
// 辅助函数,用于递归查找子项
|
findChildById(children, id) {
|
if (!children) {
|
return null;
|
}
|
for (let i = 0; i < children.length; i++) {
|
const child = children[i];
|
if (child.id === id) {
|
// 如果找到匹配的项,返回它
|
return child;
|
}
|
// 递归检查子项的子项
|
const subChild = this.findChildById(child.children, id);
|
if (subChild) {
|
return subChild;
|
}
|
}
|
// 如果没有找到匹配的项,返回 null
|
return null;
|
}
|
},
|
});
|