闫增涛
2025-03-28 b97bfcb85b2ded3b1f380e9a98b54b836faabba5
pages/digitalCourses/digitalCoursesDetails/index.js
@@ -13,6 +13,7 @@
  loginInfo
} from '../../../assets/js/login';
import wxbarcode from 'wxbarcode'
Page({
  /**
@@ -166,21 +167,20 @@
      bookId: options.id,
      bookPath: parentPath.join('\\')
    })
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      loginInfo(app, (data) => {
        if (data) {
          this.digitalCoursesDetailsGet(options.id)
          this.getPlayerList()
          this.getType()
        } else {}
      })
    }
    this.digitalCoursesDetailsGet(options.id)
    this.getPlayerList()
    this.getType()
  },
  logInFun(callback) {
    loginInfo(app, (data) => {
      if (data) {
        this.digitalCoursesDetailsGet(options.id)
        this.getPlayerList()
        this.getType()
        callback()
      }
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
@@ -192,11 +192,11 @@
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (this.data.tabValue == 2) {
    if (this.data.tabValue == 2 && this.data.selectActive == 'learn') {
      this.getPlayerList()
      this.getResource()
      this.getRelationBook()
    }
  },
  /**
@@ -240,6 +240,7 @@
        keys: [this.data.bookId + '']
      })
      .then((res) => {
        console.log(1, res);
        if (res.length > 0) {
          this.setData({
            playerList: JSON.parse(res[0].value)
@@ -307,7 +308,7 @@
          expire: res.false
        })
      }
      res.datas.publicationDate = moment(res.datas.publicationDate).format('YYYY年MM月')
      res.datas.publicationDate = res.datas.publicationDate ? moment(res.datas.publicationDate).format('YYYY年MM月') : ''
      res.datas.price = res.datas.price.toFixed(2)
      res.datas.oldPrice = res.datas.oldPrice.toFixed(2)
      wx.setNavigationBarTitle({
@@ -530,12 +531,17 @@
        if (this.data.selectActive === 'learn') {
          let list = []
          // 测试 6位// 正式 5位//  测试调用传20,内部7  正式调用传17 内部传6
          let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
          const num = query.cmsPath.length + addNum
          if (learn.some((item) => item.sysType == 'CmsFolder')) {
            this.getTreeList(learn, num, list, '\\', addNum)
            list = this.ensureTreeConsistency(list)
            // 1.只有目录,没有资源
            if (!learn.some((item) => item.sysType == 'CmsItem')) {
              list = learn
            } else {
              // 2.目录和资源都有
              this.getTreeList(learn, list, query.cmsPath)
              list = this.ensureTreeConsistency(list)
            }
          } else {
            // 3.只有资源,没有目录
            list = learn
          }
          let result = [];
@@ -545,22 +551,18 @@
              learnList: list,
              openTeachids: result,
            });
            console.log(1, this.data.learnList, this.data.playerList)
          }
        } else {
          const data = test.filter(
            (item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0
          )
          if (data.length > 0) {
            let list = []
            let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
            const num = query.cmsPath.length + addNum
            this.getTreeList(data, num, list, '\\', addNum)
            this.getTreeList(data, list, query.cmsPath)
            list = this.ensureTreeConsistency(list)
            let result = [];
            this.findChildIds(list[0].children, result)
            this.countLeafNodes(list[0].children)
            this.findChildIds(list[0]?.children, result)
            this.countLeafNodes(list[0]?.children)
            this.setData({
              testList: list[0].children,
              openTeachids: result,
@@ -589,10 +591,9 @@
    })
  },
  // 扁平化数据转换tree
  getTreeList(rootList, pathLength, newArr, path, addNum) {
  getTreeList(rootList, 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 (path == item.productLinkPath.replace('\\' + item.id, '')) {
        if (item.sysType == 'CmsItem') {
          if (item.selectType == 'webpage') {
            item.disabled = true
@@ -607,15 +608,16 @@
        }
        // newArr.push(item)
        // 在插入过程中对数据进行排序
        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item, addNum)
        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item)
        // 插进数组后 从原数据中删除
        rootList = rootList.filter(nitem => nitem.id != item.id)
      }
    }
    //给数组里面再添加一个children的空数组
    for (const i of newArr) {
      i.children = []
      this.getTreeList(rootList, pathLength + addNum, i.children, i.productLinkPath, addNum)
      this.getTreeList(rootList, i.children, i.productLinkPath)
      if (i.children.length == 0) {
        newArr[0].istry = true
        delete i.children
      }
    }
@@ -639,29 +641,21 @@
  },
  // 排序数组 按照productLinkPath
  insertAndSortObjectsByProductLinkPath(array, newObj, addNum) {
  insertAndSortObjectsByProductLinkPath(array, newObj) {
    // 查找新对象应该插入的位置  
    let insertIndex = array.findIndex(obj => Number(newObj.productLinkPath.substring(newObj.productLinkPath.length - addNum, newObj.productLinkPath.length)) < Number(obj.productLinkPath.substring(obj.productLinkPath.length - addNum, obj.productLinkPath.length)));
    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 (Number(a.productLinkPath.substring(a.productLinkPath.length - addNum, a.productLinkPath.length)) < Number(b.productLinkPath.substring(b.productLinkPath.length - addNum, b.productLinkPath.length))) {
        return -1;
      }
      if (Number(a.productLinkPath.substring(a.productLinkPath.length - addNum, a.productLinkPath.length)) > Number(b.productLinkPath.substring(b.productLinkPath.length - addNum, b.productLinkPath.length))) {
        return 1;
      }
      // a must be equal to b
      if (a.id < b.id) return -1;
      if (a.id > b.id) return 1;
      return 0;
    });
    // 返回更新后的数组  
    return array;
  },
@@ -834,48 +828,57 @@
  //学习笔记
  //在线提问
  // 图书添加购物车
  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.digitalsData.defaultSaleMethodId
      );
      if (!determine) {
  addBookShopcCar() {
    const addFun = async () => {
      if (!this.data.expire) {
        const shoppingCartGetId = [];
        let query = {
          requests: [{
            saleMethodId: this.data.digitalsData.defaultSaleMethodId,
            storeEventId: null,
            agentCode: "电子书",
          }, ],
          start: 0,
          size: 9999,
          filterList: [],
          searchList: [],
        };
        const addRes = app.MG.store.addShoppingCart(query);
        this.showSuccessToast();
        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.digitalsData.defaultSaleMethodId
        );
        if (!determine) {
          let query = {
            requests: [{
              saleMethodId: this.data.digitalsData.defaultSaleMethodId,
              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 {
        Toast({
          context: this,
          selector: "#t-toast",
          message: "该课程已在购物车,请勿重复添加",
          theme: "warning",
          direction: "column",
        wx.showToast({
          title: "商品不在有效期",
          icon: "none",
          duration: 1000,
        });
      }
    } else {
      wx.showToast({
        title: "商品不在有效期",
        icon: "none",
        duration: 1000,
      });
    }
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      this.logInFun(() => {})
    } else {
      addFun()
    }
  },
  showSuccessToast() {
    Toast({
@@ -889,51 +892,60 @@
  //购买按钮
  async buyBtn() {
    if (!this.data.expire) {
      let bookOrdersId = "";
      let query = {
        remarks: "电子书",
        requests: [{
          saleMethodId: this.data.digitalsData.defaultSaleMethodId,
          count: 1,
        }, ],
      };
      // 发起订单初始化请求并等待结果
      const res = await app.MG.store.initOrder(query);
      // 获取订单号并赋值给 orderNumber.value
      bookOrdersId = res.orderNumber;
      // 检查订单号是否存在
      if (bookOrdersId) {
        if (this.data.digitalsData.price == "0.00") {
          app.MG.store
            .confirmOrder({
              orderNum: bookOrdersId,
            })
            .then((res) => {
              if (res) {
                this.digitalCoursesDetailsGet(this.data.digitalsData.id);
                wx.showToast({
                  title: "领取成功",
                  icon: "none",
                  duration: 1000,
                });
                this.digitalCoursesDetailsGet(this.data.bookId);
              }
    const buyFun = async () => {
      if (!this.data.expire) {
        let bookOrdersId = "";
        let query = {
          remarks: "电子书",
          requests: [{
            saleMethodId: this.data.digitalsData.defaultSaleMethodId,
            count: 1,
          }, ],
        };
        // 发起订单初始化请求并等待结果
        const res = await app.MG.store.initOrder(query);
        // 获取订单号并赋值给 orderNumber.value
        bookOrdersId = res.orderNumber;
        // 检查订单号是否存在
        if (bookOrdersId) {
          if (this.data.digitalsData.price == "0.00") {
            app.MG.store
              .confirmOrder({
                orderNum: bookOrdersId,
              })
              .then((res) => {
                if (res) {
                  this.digitalCoursesDetailsGet(this.data.digitalsData.id);
                  wx.showToast({
                    title: "领取成功",
                    icon: "none",
                    duration: 1000,
                  });
                  this.digitalCoursesDetailsGet(this.data.bookId);
                }
              });
          } else {
            const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId + '&onNorderSaleMethod=' + res.saleMethodLinks[0].orderSaleMethod.id;
            wx.navigateTo({
              url,
            });
        } 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,
      });
          }
        } else {}
      } else {
        wx.showToast({
          title: "商品不在有效期",
          icon: "none",
          duration: 1000,
        });
      }
    }
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      this.logInFun(() => {})
    } else {
      buyFun()
    }
  },
@@ -1100,40 +1112,48 @@
  },
  onCertificate() {
    if (!this.data.isBuy) {
      wx.showToast({
        title: "请先购买,体验完整服务",
        icon: "none",
        duration: 1000,
    const cateFun = () => {
      if (!this.data.isBuy) {
        wx.showToast({
          title: "请先购买,体验完整服务",
          icon: "none",
          duration: 1000,
        });
        return false
      }
      if (!this.data.isLearn) {
        wx.showToast({
          title: "您的学习任务还未完成,暂不能申请证书,加油哦!",
          icon: "none",
          duration: 1000,
        });
        return false
      }
      if (this.data.isCertificate && this.data.isCertificate.state == 'WaitAudit') {
        wx.showToast({
          title: "您申请的证书正在审核中",
          icon: "none",
          duration: 1000,
        });
        return false
      }
      var page = getCurrentPages().pop(); // 获取当前页面实例
      page.setData({
        // 动态设置禁止滚动的样式
        disableScrollStyle: 'overflow: hidden;'
      });
      return false
      this.setData({
        dialogBox: true,
        scrollJudge: ''
      })
    }
    if (!this.data.isLearn) {
      wx.showToast({
        title: "您的学习任务还未完成,暂不能申请证书,加油哦!",
        icon: "none",
        duration: 1000,
      });
      return false
    }
    if (this.data.isCertificate && this.data.isCertificate.state == 'WaitAudit') {
      wx.showToast({
        title: "您申请的证书正在审核中",
        icon: "none",
        duration: 1000,
      });
      return false
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      this.logInFun(() => {})
    } else {
      cateFun()
    }
    var page = getCurrentPages().pop(); // 获取当前页面实例
    page.setData({
      // 动态设置禁止滚动的样式
      disableScrollStyle: 'overflow: hidden;'
    });
    this.setData({
      dialogBox: true,
      scrollJudge: ''
    })
  },
  closeDialog() {
    this.setData({
@@ -1320,40 +1340,7 @@
    }
  },
  setCoolect() {
    // 首页测试登录功能,后续注释
    // 检查登录状态
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      loginInfo(app, (data) => {
        // 如果不是第一次登录,会执行回调
        if (data) {
          if (this.data.digitalsData.isFavourite) {
            app.MG.store
              .delProductLink({
                productIds: [this.data.digitalsData.id],
                linkType: 'Favoriteclass'
              })
              .then(() => {
                this.setData({
                  "digitalsData.isFavourite": false
                })
              })
          } else {
            let params = {
              productIds: [this.data.digitalsData.id],
              linkType: 'Favoriteclass'
            }
            app.MG.store.addProductLink(params).then((res) => {
              this.setData({
                "digitalsData.isFavourite": true
              })
            })
          }
        } else {
          // 出现错误,返回false
        }
      })
    } else {
    const collectFun = () => {
      if (this.data.digitalsData.isFavourite) {
        app.MG.store
          .delProductLink({
@@ -1377,6 +1364,12 @@
        })
      }
    }
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      this.logInFun(() => {})
    } else {
      collectFun()
    }
  },
  //证书查看