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,
|
canExecute: 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) {
|
console.log(e.detail.value);
|
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) return false
|
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 : "教学资源";
|
// 资源购买页面(只展示未购买资源) 点击不跳转
|
if (this.properties.isShowCheck) return false;
|
if (
|
this.properties.tab == "jsek_cloudLearning" &&
|
this.resourceIsBuy(item)
|
) {
|
return wx.showToast({
|
icon: "error",
|
title: item.saleMethod[0].Price > 0 ?
|
"请先购买该资源" : "请先点击领取查看按钮",
|
});
|
}
|
if (this.properties.tab == "jsek_teachingResources" && (item.file || item.freeFile)) {
|
let file = item.fileMap[item.file] ? item.fileMap[item.file] : item.fileMap[item.freeFile]
|
if (file && file.protectType !== "Public") {
|
return wx.showToast({
|
icon: "error",
|
title: "资源不可用,请联系管理员",
|
});
|
}
|
}
|
if (!item.file && !item.freeFile && !item.protectedFile) {
|
return wx.showToast({
|
icon: 'error',
|
title: '暂无资源',
|
})
|
}
|
if (item.selectType == 'zip') {
|
if (this.properties.applyState == 'Normal') {
|
return wx.showToast({
|
icon: 'error',
|
title: '请前往PC端下载',
|
})
|
} else {
|
return wx.showToast({
|
icon: 'error',
|
title: '请先申请下载',
|
})
|
}
|
}
|
let url;
|
if (item.selectType == "webpage") {
|
// 网页类型跳转到网址复制页,因为url传参不能传 带参数的网络地址,所以此处要把网络地址里的传参摘出来,放到url里
|
let urlData = ''
|
const flags = item.jsek_link.indexOf("?")
|
if (flags > -1) {
|
urlData = item.jsek_link.slice(flags + 1, item.jsek_link.length)
|
}
|
url = '/packageBookService/pages/bookServices/linkPage/index'
|
return wx.navigateTo({
|
url: urlData ? url + `?path=${item.jsek_link.slice(0,flags)}` + '&' + urlData : url + `?path=${item.jsek_link}`
|
})
|
}
|
|
if (item.selectType == "video" || item.learnSelectType == "video") {
|
url = "/packageDomain/pages/resourceDetails/myVideo/index";
|
}
|
if (
|
item.selectType == "audio" ||
|
item.learnSelectType == "audio"
|
) {
|
url = "/packageDomain/pages/resourceDetails/myAudio/index";
|
}
|
if (item.selectType == "picture") {
|
url = "/packageDomain/pages/resourceDetails/document/index";
|
}
|
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}`,
|
});
|
},
|
|
// 拿到所有项
|
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); // 对每个顶层节点执行查找和更新操作
|
}
|
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)) {
|
// 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;
|
},
|
},
|
});
|