litian
2024-06-28 75a9abca4f4cf0ebe579705abc369489cfe20e7c
pages/digitalCourses/digitalCoursesDetails/index.js
@@ -1,5 +1,6 @@
// pages/digitalCourses/digitalCoursesDetails/index.js
const app = getApp()
import moment from 'moment'
import Toast from "tdesign-miniprogram/toast";
Page({
@@ -8,7 +9,9 @@
   */
  data: {
    loading: true,
    digitalsData: [],
    digitalsData: {},
    expire: false, //商品或子商品销售方式是否过期
    isBuy: false,
    tabValue: 0,
    learnResourceIcon: {
      name: "/static/images/digitalTextbooks/shengshu-t@2x.png",
@@ -43,20 +46,22 @@
    },
    dialogBox: false,
    lecturerList: [{
        icon: '',
        name: '林崇德',
        title: '讲师',
        introduce: '中国学生发展核心素养研制首席专家,围绕大中小学教材建设开展了一系列开创性、奠基性工作。建立完善了我国发展心理学教材体系。'
      },
      {
        icon: '',
        name: '林崇德',
        title: '教授',
        introduce: '中国学生发展核心素养研制首席专家,围绕大中小学教材建设开展了一系列开创性、奠基性工作。建立完善了我国发展心理学教材体系。中国学生发展核心素养研制首席专家,围绕大中小学教材建设开展了一系列开创性、奠基性工作。建立完善了我国发展心理学教材体系'
      }
    ]
    lecturerList: [],
    selectActive: 'learn',
    learnList: [],
    testList: [],
    openTeachids: [],
    onlineQuestionsList: [],
    //分页
    page: 1,
    limit: 6,
    questionTotalCount: 0,
    bottomLoading: false,
    isMoreData: false,
    noteList: [],
    notePage: 1,
    noteLimit: 6,
    noteTotalCount: 0,
  },
  formatDate(dateString) {
    if (!dateString) {
@@ -162,7 +167,6 @@
  },
  digitalCoursesDetailsGet(digitalTextId) {
    let query = {
      path: '*',
      queryType: '*',
@@ -176,6 +180,7 @@
        author: [],
        isbn: [],
        publicationDate: [],
        speaker: [],
        bookClassification: [],
        paperPrice: [],
        JDLink: [],
@@ -194,20 +199,59 @@
        affiliatedUnit: [],
        publishingUnit: [],
        classHours: [],
        productLinkPath: []
        productLinkPath: [],
        //epub试读百分比
      }
    }
    app.MG.store.getProductDetail(query).then(res => {
      console.log(res);
      if (res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)) {
        this.setData({
          isBuy: true
        })
      } else {
        this.setData({
          isBuy: false
        })
      }
      let times = new Date(res.datas.defaultSaleMethod.endDate).getTime()
      let startTime = new Date(res.datas.defaultSaleMethod.beginDate).getTime()
      if (times < new Date().getTime() || new Date().getTime() < startTime) {
        this.setData({
          expire: true
        })
      } else {
        this.setData({
          expire: res.false
        })
      }
      res.datas.publicationDate = this.formatDate(res.datas.publicationDate)
      res.datas.price = res.datas.price.toFixed(2)
      wx.setNavigationBarTitle({
        title: res.datas.name,
      })
      let lecturer = []
      if (res.datas.datas.speaker && res.datas.datas.speaker.length > 0) {
        res.datas.datas.speaker.forEach(item => {
          if (res.datas.subItems && res.datas.subItems.QueryCms.length > 0) {
            res.datas.subItems.QueryCms.forEach(item1 => {
              if (JSON.parse(item.Data.Value).items[0] == item1.id) {
                lecturer.push({
                  name: item1.name,
                  icon: item1.icon ? item1.icon : '',
                  description: item1.description ? item1.description : '',
                })
              }
            })
          }
        })
      }
      this.setData({
        lecturerList: lecturer,
        digitalsData: res.datas,
        loading: false
      })
@@ -219,9 +263,211 @@
      tabValue: value
    })
    console.log(this.data.tabValue);
    if (this.data.tabValue == 2) {
      this.getResource()
    }
    if (this.data.tabValue == 3) {
      this.selectComponent("#note").getNoteList();
    }
    if (this.data.tabValue == 4) {
      this.selectComponent("#question").getDataList();
    }
  },
  selectChange(event) {
    console.log(event)
    const value = event.target.dataset.value
    this.setData({
      selectActive: value
    })
    this.getResource()
  },
  getResource() {
    let query = {
      storeInfo: app.config.digitalCourses,
      path: '*',
      queryType: '*',
      productId: this.data.digitalsData.id,
      cmsPath: this.data.digitalsData.rootCmsItemId + '',
      cmsType: '*',
      itemFields: {
        SysType: 'CmsFolder',
        selectType: [],
        freeFile: [],
        file: [],
        protectedFile: [],
        resourcesClassification: [],
        isDownload: [],
        jsek_resourceBrief: [],
        jsek_link: [],
        jsek_questionBank: [],
        learnSelectType: []
      },
      pading: {
        start: 99,
        size: 0
      }
    }
    app.MG.store.getProductDetail(query).then((res) => {
      console.log(res.datas, 1111)
      let test = []
      let learn = []
      if (res.datas.cmsDatas[0].datas.length > 0) {
        res.datas.cmsDatas[0].datas.forEach((item) => {
          if (item.type == 'questionBankFolder' || item.type == 'questionBankItem') {
            test.push(item)
          } else if (item.type != "resourceItem") {
            learn.push(item)
          }
        })
        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)
          } else {
            list = learn
          }
          let result = [];
          this.findChildIds(list, result)
          if (list.length > 0) {
            this.setData({
              learnList: list,
              openTeachids: result,
            });
          }
        } 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)
            list = this.ensureTreeConsistency(list)
            let result = [];
            this.findChildIds(list[0].children, result)
            this.setData({
              testList: list[0].children,
              openTeachids: result,
            });
          }
        }
      }
    })
  },
  // 扁平化数据转换tree
  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)) {
        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, addNum)
      }
    }
    //给数组里面再添加一个children的空数组
    for (const i of newArr) {
      i.children = []
      this.getTreeList(rootList, pathLength + addNum, i.children, i.productLinkPath, addNum)
      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, addNum) {
    // 查找新对象应该插入的位置
    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) {
      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
      return 0;
    });
    // 返回更新后的数组
    return array;
  },
  // 获取展开项
  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
              }
            } else {
              break
            }
          }
        } else if (item.childrenCount > 0) {
          result.push(item.id)
          index += 1
        }
      } else {
        break
      }
    }
  },
  //学习笔记
  //在线提问
  // 图书添加购物车
  async addBookShopcCar() {
    if (!this.data.expire) {
@@ -277,7 +523,6 @@
  },
  //购买按钮
  async buyBtn() {
    if (!this.data.expire) {
      let bookOrdersId = "";
@@ -301,7 +546,6 @@
              orderNum: bookOrdersId,
            })
            .then((res) => {
              this.digitalTextbooksDetailsGet(this.data.digitalTextId)
              if (res) {
                wx.showToast({
                  title: "领取成功",
@@ -328,15 +572,8 @@
      });
    }
  },
  showDialog(e) {
    const {
      key
    } = e.currentTarget.dataset;
    this.setData({
      [key]: true,
      dialogKey: key
    });
  },
  closeDialog() {
    const {
@@ -346,9 +583,8 @@
      [dialogKey]: false
    });
  },
  //申请证书
  onCertificate() {
    var page = getCurrentPages().pop(); // 获取当前页面实例
    page.setData({
      // 动态设置禁止滚动的样式
@@ -370,5 +606,64 @@
      dialogBox: false,
      scrollJudge: true
    })
  }
  },
  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 {
      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
          })
        })
      }
    }
  },
})