闫增涛
2024-07-12 4ff508548b71346c97ef563b3dd5ba9291afe342
packageBookService/pages/bookServices/detail/index.js
@@ -16,6 +16,7 @@
    options: {
      id: "",
      name: "",
      storeInfo: '',
    },
    bookDetail: {},
    bookClass: [],
@@ -37,6 +38,8 @@
    openTeachids: [],
    openLearnids: [],
    openTestids: [],
    isGoBuyResource: true,
    learnPath: '',
    applyResourceState: false, // 申请教学资源按钮防抖
    resourceClassList: [], // 资源所属分类
    applyState: "", // 教学资源申请状态
@@ -177,13 +180,14 @@
      options: {
        id: options.id,
        name: options.name,
        storeInfo: options.storeInfo,
      },
    });
    wx.setNavigationBarTitle({
      title: options.name,
    })
    this.getBookInfo(options.id);
    this.getResourceClass(); // 获取资源所属分类
    // this.getResourceClass(); // 获取资源所属分类
    const token = wx.getStorageSync(app.config.tokenKey);
    if (token) {
      this.getShoppingCartProductGet();
@@ -346,6 +350,7 @@
      "mockData.count": 0,
    });
    const query = {
      storeInfo: this.data.options.storeInfo,
      path: "*",
      queryType: "*",
      productId: id,
@@ -384,6 +389,7 @@
      this.setData({
        bookDetail: res.datas,
        buyIdList: res.datas.purchasedSaleMethodIdList,
        pageLoading: false
      });
      if (res.datas.cmsDatas && res.datas.cmsDatas.length) {
        this.setData({
@@ -399,14 +405,19 @@
      this.getSubTtem();
      // 获取图书分类
      if (res.datas.bookClassification) {
        let classData = []
        const bookClassification = JSON.parse(res.datas.bookClassification);
        if (Array.isArray(bookClassification) && bookClassification.length) {
          for (let index = 0; index < bookClassification.length; index++) {
            const element = bookClassification[index];
            const iconType = element[0];
            const classType = element[1];
            await this.getBookClass(iconType, classType);
            classData.push({
              iconType,
              classType
            })
          }
          await this.getBookClass(classData);
        }
      }
@@ -444,7 +455,7 @@
        "bookDetail.paperPrice": this.numFormat(
          this.data.bookDetail.paperPrice
        ),
        pageLoading: false,
      });
      console.log("图书信息", this.data.bookClass);
    });
@@ -507,14 +518,14 @@
              "fileInfo.bookName": this.data.bookDetail.name,
              "fileInfo.fileType": "pdf",
              "fileInfo.md5": res.datas[0].bookshelf_pdf,
              "fileInfo.freePage": res.datas[0].bookshelf_probationPage,
              "fileInfo.freePage": res.datas[0].bookshelf_probationPage ? res.datas[0].bookshelf_probationPage : 30,
            });
          } else if (res.datas[0].bookshelf_protectedEpub) {
            this.setData({
              "fileInfo.bookName": this.data.bookDetail.name,
              "fileInfo.fileType": "epub",
              "fileInfo.md5": res.datas[0].bookshelf_protectedEpub,
              "fileInfo.freePage": res.datas[0].bookshelf_freeEpub,
              "fileInfo.freePage": res.datas[0].bookshelf_freeEpub ? res.datas[0].bookshelf_freeEpub : 30,
            });
          }
        }
@@ -528,7 +539,7 @@
              "fileInfo.bookName": this.data.bookDetail.name,
              "fileInfo.fileType": "pdf",
              "fileInfo.md5": this.data.bookDetail.pdf,
              "fileInfo.freePage": this.data.bookDetail.probationPage,
              "fileInfo.freePage": this.data.bookDetail.probationPage ? this.data.bookDetail.probationPage : 30,
            });
          } else if (this.data.bookDetail.protectedEpub) {
@@ -536,7 +547,7 @@
              "fileInfo.bookName": this.data.bookDetail.name,
              "fileInfo.fileType": "epub",
              "fileInfo.md5": this.data.bookDetail.protectedEpub,
              "fileInfo.freePage": this.data.bookDetail.freeEpubPage,
              "fileInfo.freePage": this.data.bookDetail.freeEpubPage ? this.data.bookDetail.freeEpubPage : 30,
            });
          }
        }
@@ -565,28 +576,37 @@
    });
  },
  // 获取图书分类
  async getBookClass(iconType, classType) {
  async getBookClass(list) {
    let name = "";
    const query = {
      refCodes: ["bookClassification"],
    };
    await app.MG.store.getProductTypeField(query).then((res) => {
      JSON.parse(res[0].config).option.forEach((item) => {
        if (item.value == iconType) {
          item.child.forEach((citem) => {
            if (citem.value == classType) {
              const flag = this.data.bookClass.findIndex((ditem) => ditem == citem.name)
              if (flag == -1) {
                let list = this.data.bookClass
                list.push(citem.name)
                this.setData({
                  bookClass: list
                })
              }
      for (let aindex = 0; aindex < list.length; aindex++) {
        const aitem = list[aindex];
        const iconType = aitem.iconType
        const classType = aitem.classType
        JSON.parse(res[0].config).option.forEach((item) => {
          if (item.value == iconType) {
            if (item.child && item.child.length) {
              item.child.forEach((citem) => {
                if (citem.value == classType) {
                  const flag = this.data.bookClass.findIndex((ditem) => ditem == citem.name)
                  if (flag == -1) {
                    let list = this.data.bookClass
                    list.push(citem.name)
                    this.setData({
                      bookClass: list
                    })
                  }
                }
              });
            }
          });
        }
      });
          }
        });
      }
    });
  },
  // 收藏
@@ -638,6 +658,8 @@
      this.setData({
        showIndex: '1'
      })
    console.log(this.data.bookDetail.icon, '0111111');
    console.log(this.data.bookDetail.name, '45688');
  },
  // 跳转网店
  goShop(e) {
@@ -663,7 +685,7 @@
      const checkData = this.data.cmsDatas.find(
        (item) => item.refCode == e.detail.value
      );
      if (!this.data.resourceClassList.length) this.getResourceClass()
      if (checkData) {
        if (e.detail.value == "jsek_cloudLearning") {
          this.setData({
@@ -683,9 +705,7 @@
        //   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)
          }
          wx.setStorageSync('teachResourcesPath', checkData.productLinkPath)
          this.getResourceDataList(checkData)
        } else if (e.detail.value == "questionBank" && !this.data.test.length) {
          this.getResourceData(checkData);
@@ -746,7 +766,7 @@
    return num
  },
  // 给·目录添加子项数量
  // 给目录添加子项数量
  changeResourceChildren(list) {
    const changeList = (list) => {
      for (let index = 0; index < list.length; index++) {
@@ -766,7 +786,7 @@
  },
  // 扁平化数据转换tree
  getTreeList(rootList, pathLength, newArr, path) {
  getTreeList(rootList, pathLength, newArr, path, addNum) {
    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)) {
@@ -784,13 +804,13 @@
        }
        // newArr.push(item)
        // 在插入过程中对数据进行排序
        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item)
        newArr = this.insertAndSortObjectsByProductLinkPath(newArr, item, addNum)
      }
    }
    //给数组里面再添加一个children的空数组
    for (const i of newArr) {
      i.children = []
      this.getTreeList(rootList, pathLength + 6, i.children, i.productLinkPath)
      this.getTreeList(rootList, pathLength + addNum, i.children, i.productLinkPath, addNum)
      if (i.children.length == 0) {
        delete i.children
      }
@@ -815,9 +835,9 @@
  },
  // 排序数组 按照productLinkPath
  insertAndSortObjectsByProductLinkPath(array, newObj) {
  insertAndSortObjectsByProductLinkPath(array, newObj, addNum) {
    // 查找新对象应该插入的位置  
    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)));
    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)));
    // 如果没有找到合适的位置,则放在数组末尾  
    if (insertIndex === -1) {
@@ -828,10 +848,10 @@
    // 测试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))) {
      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 - 5, a.productLinkPath.length)) > Number(b.productLinkPath.substring(b.productLinkPath.length - 5, b.productLinkPath.length))) {
      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  
@@ -850,6 +870,7 @@
    let query = {
      path: '*',
      queryType: '*',
      storeInfo: this.data.options.storeInfo,
      productId: this.data.bookDetail.id,
      cmsPath: type.productLinkPath,
      cmsType: '*',
@@ -872,7 +893,7 @@
        size: 999
      },
    }
    app.MG.store.getProductDetail(query).then((res) => {
    app.MG.store.getProductDetailNoChildren(query).then((res) => {
      if (!res.datas.cmsDatas[0].datas.length) {
        return this.setData({
          noResources: true,
@@ -900,8 +921,25 @@
            }
          }
        });
        const num = query.cmsPath.length + 6
        this.getTreeList(res.datas.cmsDatas[0].datas, num, list, '\\')
        if (type.refCode == "jsek_cloudLearning") {
          this.setData({
            learnPath: type.productLinkPath
          })
          const dataList = res.datas.cmsDatas[0].datas
          if (dataList.length) {
            const tag = dataList.findIndex(item => item.saleMethod.length && item.saleMethod[0].Price > 0)
            this.setData({
              isGoBuyResource: tag > -1 ? true : false
            })
          } else {
            this.setData({
              isGoBuyResource: false
            })
          }
        }
        const addNum = query.cmsPath.length > 12 ? 7 : query.cmsPath.length > 14 ? 8 : 6
        const num = query.cmsPath.length + addNum
        this.getTreeList(res.datas.cmsDatas[0].datas, num, list, '\\', addNum)
        list = this.ensureTreeConsistency(list)
        list = this.changeResourceChildren(list)
        console.log('修改后云', list);
@@ -943,8 +981,10 @@
    let query = {
      path: "*",
      queryType: "*",
      storeInfo: this.data.options.storeInfo,
      productId: this.data.bookDetail.id,
      cmsPath: type.productLinkPath,
      cmsType: '*',
      itemFields: {
        SysType: "CmsFolder",
        // 资源类型,试读文件,是否允许下载等参数
@@ -965,67 +1005,46 @@
    app.MG.store
      .getProductDetail(query)
      .then(async (res) => {
        if (!res.datas.cmsDatas[0].datas.length) {
          return this.setData({
            noResources: true,
            loading: false,
          });
        }
        // 云测试,递归请求里层数据
        if (type.refCode == "questionBank") {
          const data = res.datas.cmsDatas[0].datas.filter(
            (item) => item.refCode == "jsek_questionBank"
          );
          if (data.length) return this.getResourceData(data[0]);
        }
        //教学资源 云学习
        if (
          type.refCode == "jsek_teachingResources" ||
          type.refCode == "jsek_cloudLearning"
        ) {
          if (res.datas.cmsDatas[0].datas.length > 0) {
            res.datas.cmsDatas[0].datas.forEach((item) => {
              item.checked = false;
            });
            const list = await this.getAllResource(res.datas.cmsDatas[0].datas);
            let result = [];
            if (type.refCode == "jsek_teachingResources") {
              this.findChildIds(list, result);
          let data = []
          let result = [];
          if (this.data.options.storeInfo == 'jsek_jslx') {
            data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder');
            if (data.length > 0) {
              this.setData({
                teach: list,
                test: data,
                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);
            } else {
              this.setData({
                learn: list,
                noResources: true,
                loading: false,
                openLearnids: result,
              });
            }
            console.log(list, '云學習789');
          } else {
            // 无数据
            data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0);
            if (data.length > 0) {
              let list = []
              // 测试 6位// 正式 5位//  测试调用传20,内部7  正式调用传17 内部传6
              const addNum = query.cmsPath.length > 12 ? 7 : query.cmsPath.length > 14 ? 8 : 6
              const num = query.cmsPath.length + addNum
              this.getTreeList(data, num, list, '\\', addNum)
              list = this.ensureTreeConsistency(list)
              this.findChildIds(list[0].children, result);
              this.setData({
                test: list[0].children,
                loading: false,
                openTeachids: result,
              });
            } else {
              this.setData({
                noResources: true,
                loading: false,
              });
            }
          }
        } else if (type.refCode == "jsek_questionBank") {
          // const list = await this.getAllResource(res.datas.cmsDatas[0].datas)
          this.setData({
            test: res.datas.cmsDatas[0].datas,
            loading: false,
          });
        } else {
          console.log("其他");
        }
      })
      .catch((e) => {
@@ -1050,6 +1069,7 @@
    let query = {
      path: "*",
      queryType: "*",
      storeInfo: this.data.options.storeInfo,
      productId: this.data.bookDetail.id,
      cmsPath: path,
      itemFields: {
@@ -1119,30 +1139,33 @@
  // 获取展开项
  findChildIds(data, result) {
    let index = 0
    for (let i = 0; i < data.length; i++) {
      if (index < 3) {
        const item = data[i]
        if (item.childrenFolderCount > 0) {
          result.push(item.id)
          for (let j = 0; j < item.children.length; j++) {
            if (index < 3) {
              const childrenItme = item.children[j]
              if (item.childrenCount > 0) {
                result.push(childrenItme.id)
                index += 1
    if (data)
      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)
            if (item.children) {
              for (let j = 0; j < item.children.length; j++) {
                if (index < 3) {
                  const childrenItme = item.children[j]
                  if (item.childrenCount > 0) {
                    result.push(childrenItme.id)
                    index += 1
                  }
                } else {
                  break
                }
              }
            } else {
              break
            }
          } else if (item.childrenCount > 0) {
            result.push(item.id)
            index += 1
          }
        } else if (item.childrenCount > 0) {
          result.push(item.id)
          index += 1
        } else {
          break
        }
      } else {
        break
      }
    }
  },
  // 图书添加购物车
@@ -1214,7 +1237,6 @@
      // 发起订单初始化请求并等待结果
      const res = await app.MG.store.initOrder(query);
      // 获取订单号并赋值给 orderNumber.value
      console.log(res, 'res456');
      bookOrdersId = res.orderNumber;
      // 检查订单号是否存在
      if (bookOrdersId) {
@@ -1562,7 +1584,7 @@
      if (isSHow) {
        return false;
      } else {
        return data.saleMethod[0].price > 0 ? true : false;
        return data.saleMethod[0].Price > 0 ? true : false;
      }
      return !isSHow;
    } else {
@@ -1686,19 +1708,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.getResourceDataList({
            refCode: 'jsek_cloudLearning',
            productLinkPath: this.data.learnPath
          })
          this.setData({
            successOrderNumber: confirmOrderRes.orderNumber
          })
        }
      } catch (error) {
        console.log(error);
@@ -2024,6 +2046,7 @@
        this.data.bookBuy +
        "&bookId=" +
        this.data.bookDetail.id,
    });
  },
@@ -2091,7 +2114,7 @@
        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()
          const flag = new Date(smBook.feedBack.endDate + ' 23:59:59').getTime() > new Date().getTime()
          if (flag) {
            this.setData({
              applicationState: 'Normal'
@@ -2201,7 +2224,8 @@
            });
            return false;
          } else if (isApply.state == 'Normal') {
            const flag = new Date(JSON.parse(isApply.feedBack).endDate + '23:59:59').getTime() > new Date().getTime()
            console.log(isApply.state, "isApply.state")
            const flag = new Date(isApply.feedBack.endDate + ' 23:59:59').getTime() > new Date().getTime()
            if (flag) {
              wx.showToast({
                title: "该书已申请!",