yiming
2024-04-29 4496721cd3af3c68ed4d55218d3e83ea0664c57e
packageBookService/pages/bookServices/detail/index.js
@@ -149,7 +149,9 @@
        width: '100%'
      },
    ],
    showIndex: ''
    showIndex: '',
    successOrderNumber: '',
    applicationState: '' // 电子样书申请状态
  },
  resetTree: function (e) {
@@ -378,6 +380,7 @@
      },
    };
    app.MG.store.getProductDetail(query).then(async (res) => {
      console.log(res.datas, 'res.datas');
      this.setData({
        bookDetail: res.datas,
        buyIdList: res.datas.purchasedSaleMethodIdList,
@@ -528,6 +531,7 @@
              "fileInfo.freePage": this.data.bookDetail.probationPage,
            });
          } else if (this.data.bookDetail.protectedEpub) {
            this.setData({
              "fileInfo.bookName": this.data.bookDetail.name,
              "fileInfo.fileType": "epub",
@@ -667,15 +671,23 @@
            "buyResourceData.refCode": checkData.refCode,
          });
        }
        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)
        ) {
        // 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)
        // ) {
        //   if (e.detail.value == "jsek_teachingResources") {
        //     wx.setStorageSync('teachResourcesPath', checkData.productLinkPath)
        //   }
        //   this.getResourceData(checkData);
        // }
        if ((e.detail.value == "jsek_teachingResources" && !this.data.teach.length) || (e.detail.value == "jsek_cloudLearning" && !this.data.learn.length)) {
          if (e.detail.value == "jsek_teachingResources") {
            wx.setStorageSync('teachResourcesPath', checkData.productLinkPath)
          }
          this.getResourceDataList(checkData)
        } else if (e.detail.value == "questionBank" && !this.data.test.length) {
          this.getResourceData(checkData);
        }
        if (e.detail.value == "questionBank" && token) this.getMockData();
@@ -714,7 +726,215 @@
      });
    });
  },
  //  获取教学资源  云学习  云测试
  // 获取所有子项数量
  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, pathLength, 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 (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.push(item)
        // 在插入过程中对数据进行排序
        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item)
      }
    }
    //给数组里面再添加一个children的空数组
    for (const i of newArr) {
      i.children = []
      this.getTreeList(rootList, pathLength + 6, 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 => Number(newObj.productLinkPath.substring(newObj.productLinkPath.length - 6, newObj.productLinkPath.length)) < Number(obj.productLinkPath.substring(obj.productLinkPath.length - 6, obj.productLinkPath.length)));
    // 如果没有找到合适的位置,则放在数组末尾
    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 - 5, a.productLinkPath.length)) < Number(b.productLinkPath.substring(b.productLinkPath.length - 5, b.productLinkPath.length))) {
        return -1;
      }
      if (Number(a.productLinkPath.substring(a.productLinkPath.length - 5, a.productLinkPath.length)) > Number(b.productLinkPath.substring(b.productLinkPath.length - 5, b.productLinkPath.length))) {
        return 1;
      }
      // a must be equal to b
      return 0;
    });
    // 返回更新后的数组
    return array;
  },
  // 教学资源 云学习 获取
  getResourceDataList(type) {
    this.setData({
      loading: true,
      noResources: false,
    });
    let query = {
      path: '*',
      queryType: '*',
      productId: this.data.bookDetail.id,
      cmsPath: type.productLinkPath,
      cmsType: '*',
      itemFields: {
        SysType: 'CmsFolder',
        // 资源类型,试读文件,是否允许下载等参数
        selectType: [],
        learnSelectType: [],
        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 = []
      // 测试 6位// 正式 5位//  测试调用传20,内部7  正式调用传17 内部传6
      //教学资源 云学习
      if (
        type.refCode == "jsek_teachingResources" ||
        type.refCode == "jsek_cloudLearning"
      ) {
        res.datas.cmsDatas[0].datas.forEach((item) => {
          item.checked = false;
          if (item.sysType == 'CmsItem') {
            // 教学资源 类型名称赋值
            this.data.resourceClassList.forEach((type) => {
              if (type.value == item.resourcesClassification)
                item.resourceClass = type.name;
            });
            if (this.data.tabValue == "jsek_teachingResources") {} else if (this.data.tabValue == "jsek_cloudLearning") {
              item.isbuy = this.isShowNeedBuy(item);
              item.isShopCar = this.isShoppingCart(item);
            }
          }
        });
        const num = query.cmsPath.length + 6
        this.getTreeList(res.datas.cmsDatas[0].datas, num, list, '\\')
        list = this.ensureTreeConsistency(list)
        list = this.changeResourceChildren(list)
        console.log('修改后云', list);
        let result = [];
        if (type.refCode == "jsek_teachingResources") {
          this.findChildIds(list, result);
          this.setData({
            teach: list,
            loading: false,
            openTeachids: result,
          });
        } else if (type.refCode == "jsek_cloudLearning") {
          let arr = this.handleTreeData(list).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,
          });
        }
      }
    })
  },
  //  获取 云测试
  getResourceData(type) {
    this.setData({
      loading: true,
@@ -793,7 +1013,6 @@
                loading: false,
                openLearnids: result,
              });
              console.log('云学习', list);
            }
            console.log(list, '云學習789');
          } else {
@@ -1108,12 +1327,12 @@
  },
  // 申请教学资源
  applyResource() {
    if (this.data.applyResourceState) {
      return wx.showToast({
        icon: "error",
        title: "请勿重复点击",
      });
    }
    // if (this.data.applyResourceState) {
    //   return wx.showToast({
    //     icon: "error",
    //     title: "请勿重复点击",
    //   });
    // }
    this.setData({
      applyResourceState: true,
    });
@@ -1393,7 +1612,6 @@
  },
  updateShoppingCartHidden() {
    const isSHow = this.data.shoppingCartGetId.some(
      (item) => item == data.saleMethod[0].Id
    );
@@ -1406,10 +1624,7 @@
    const checkData = this.data.cmsDatas.find(
      (item) => item.refCode == "jsek_cloudLearning"
    );
    this.getResourceData(checkData);
    this.getResourceDataList(checkData);
  },
  // 遍历树结构转换为数组方法
  handleTreeData(array) {
@@ -1471,12 +1686,19 @@
        };
        // 确认订单
        const confirmOrderRes = await app.MG.store.confirmOrder(parameter);
        console.log(confirmOrderRes.orderNumber, 'confirmOrderRes.orderNumber');
        if (confirmOrderRes.orderNumber) {
          child.changeReceive(false);
          wx.showToast({
            title: "领取成功",
          });
          this.getBookInfo(this.data.bookId);
          this.setData({
            successOrderNumber: confirmOrderRes.orderNumber
          })
        }
      } catch (error) {
        console.log(error);
@@ -1759,6 +1981,10 @@
    }
    wx.setStorageSync("bookPathList", JSON.stringify(bookPathList));
    this.setData({
      learn: [],
      teach: []
    })
    this.onLoad({
      id: e.detail.id,
      name: e.detail.name,
@@ -1798,7 +2024,9 @@
        this.data.bookBuy +
        "&bookId=" +
        this.data.bookDetail.id,
    });
    debugger
  },
  //样书申请
@@ -1862,6 +2090,20 @@
            list.push(item);
          }
        });
        const smBook = list.find(item => item.content[0].id == this.data.bookDetail.id)
        console.log('已申请', smBook);
        if (smBook && smBook.state == 'Normal') {
          const flag = new Date(JSON.parse(smBook.feedBack).endDate + '23:59:59').getTime() > new Date().getTime()
          if (flag) {
            this.setData({
              applicationState: 'Normal'
            })
          } else {
            this.setData({
              applicationState: 'overdue'
            })
          }
        }
        this.setData({
          alreadyElectronicBookList: list,
        });
@@ -1898,6 +2140,23 @@
  //申请电子样书
  appplyElectronicBook() {
    // 先判断下教师认证,未对原有逻辑修改
    let role = this.data.userInfo != null ? this.data.userInfo.role : null;
    if (role && role == "Teacher") {} else {
      return wx.showModal({
        title: "尊敬的用户,您好!", //提示的标题
        content: "请先进行教师认证?", //提示的内容
        confirmColor: "#ff6c00",
        cancelColor: "#949494",
        success: function (res) {
          if (res.confirm) {
            wx.navigateTo({
              url: "/packageDomain/pages/teacherCertification/index",
            });
          } else if (res.cancel) {}
        },
      });
    }
    if (
      this.data.bookDetail.isApplyBook == 2 ||
      this.data.bookDetail.isApplyBook == 4
@@ -1933,15 +2192,27 @@
          return false;
        }
        let isApply = this.data.alreadyElectronicBookList.find(
          (eitem) => eitem.id == this.data.bookDetail.id
          (eitem) => eitem.content[0].id == this.data.bookDetail.id
        );
        if (isApply) {
          wx.showToast({
            title: "该书已申请!",
            icon: "none",
            duration: 1000,
          });
          return false;
          if (isApply.state == 'WaitAudit') {
            wx.showToast({
              title: "该书已申请!",
              icon: "none",
              duration: 1000,
            });
            return false;
          } else if (isApply.state == 'Normal') {
            const flag = new Date(JSON.parse(isApply.feedBack).endDate + '23:59:59').getTime() > new Date().getTime()
            if (flag) {
              wx.showToast({
                title: "该书已申请!",
                icon: "none",
                duration: 1000,
              });
              return false;
            }
          }
        }
        if (this.data.electronicBookList.length >= 2) {
          wx.showToast({
@@ -1977,6 +2248,22 @@
  },
  //申请纸质样书
  appplyPaperBook() {
    let role = this.data.userInfo != null ? this.data.userInfo.role : null;
    if (role && role == "Teacher") {} else {
      return wx.showModal({
        title: "尊敬的用户,您好!", //提示的标题
        content: "请先进行教师认证?", //提示的内容
        confirmColor: "#ff6c00",
        cancelColor: "#949494",
        success: function (res) {
          if (res.confirm) {
            wx.navigateTo({
              url: "/packageDomain/pages/teacherCertification/index",
            });
          } else if (res.cancel) {}
        },
      });
    }
    if (
      this.data.bookDetail.isApplyBook == 3 ||
      this.data.bookDetail.isApplyBook == 4
@@ -1993,7 +2280,7 @@
          return false;
        }
        let isApply = this.data.alreadyPaperBookList.find(
          (pitem) => pitem.id == this.data.bookDetail.id
          (pitem) => pitem.content[0].id == this.data.bookDetail.id
        );
        if (isApply) {
          wx.showToast({
@@ -2069,13 +2356,13 @@
      this.setData({
        electronicBookList: eList,
      });
      wx.setStorageSync("electronicBookList", eList);
      wx.setStorageSync("electronicBookList", JSON.stringify(eList));
    } else {
      pList.push(itemAttr);
      this.setData({
        paperBookList: pList,
      });
      wx.setStorageSync("paperBookList", pList);
      wx.setStorageSync("paperBookList", JSON.stringify(pList));
    }
    this.setData({
      num: this.data.num + 1,