litian
2024-03-12 b125d3ea74d61fb8e4d7238c83906aeea52c6b4c
pages/bookServices/detail/index.js
@@ -6,6 +6,7 @@
   * 页面的初始数据
   */
  data: {
    bookId: '',
    barHeight: '',
    navBarHeight: '',
    options: {
@@ -26,15 +27,20 @@
    teachResources: [],
    teach: [],
    learn: [],
    test: [],
    openTeachids: [],
    openLearnids: [],
    openTestids: [],
    resourceClassList: [], // 资源所属分类
    applyState: "",  // 教学资源申请状态
    deadline: "",  // 教学资源申请有效日期
    rejectCause: "",  // 下载拒绝原因
    buyIdList: [],
    shoppingCartGetId: [], // 已购买id列表
    shoppingList: []
    shoppingList: [],
    loading: false,
    isShowTeachDownload: false,  // 提示PC下载弹窗状态
    confirmBtn: { content: '我知道了', variant: 'base' },
  },
  resetTree: function (e) {
@@ -51,6 +57,7 @@
    const menu = wx.getMenuButtonBoundingClientRect(); // 胶囊信息
    const navBarHeight = (menu.top - systInfo.statusBarHeight) * 2 + menu.height; // 导航栏高度
    this.setData({
      bookId: options.id,
      barHeight: systInfo.statusBarHeight,
      navBarHeight: navBarHeight,
    });
@@ -63,7 +70,8 @@
    this.getBookInfo(options.id);
    this.getResourceClass() // 获取资源所属分类
    this.getApplyInfo(options.id)
    if (wx.getAccountInfoSync('jsek-token')) {
    const token = wx.getStorageSync('jsek-token')
    if (token) {
      this.getShoppingCartProductGet()
    }
  },
@@ -93,12 +101,20 @@
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() { },
  onPullDownRefresh() {
  },
  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() { },
  onReachBottom() {
    if (this.data.tabValue == 'jesk_note') {
      const child = this.selectComponent('#note')
      child.onReachBottom()
    }
  },
  /**
   * 用户点击右上角分享
@@ -195,7 +211,8 @@
        freeEpubPage: [], //epub试读百分比
      },
    };
    app.MG.store.getProductDetail(query).then((res) => {
    app.MG.store.getProductDetail(query).then(async (res) => {
      this.setData({
        bookDetail: res.datas,
        cmsDatas: res.datas.cmsDatas[0].datas,
@@ -204,9 +221,10 @@
      // 获取图书分类
      const iconType = JSON.parse(res.datas.bookClassification)[0][0];
      const classType = JSON.parse(res.datas.bookClassification)[0][1];
      const className = await this.getBookClass(iconType, classType)
      this.setData({
        'bookDetail.publicationDate': this.formatDate(this.data.bookDetail.publicationDate),
        'bookDetail.class': this.getBookClass(iconType, classType),
        'bookDetail.class': className,
        'bookDetail.price': this.numFormat(this.data.bookDetail.price),
        'bookDetail.oldPrice': this.numFormat(this.data.bookDetail.oldPrice),
        'bookDetail.paperPrice': this.numFormat(this.data.bookDetail.paperPrice),
@@ -214,17 +232,17 @@
    });
  },
  // 获取图书分类
  getBookClass(iconType, classType) {
  async getBookClass(iconType, classType) {
    let name = '';
    const query = {
      refCodes: ['bookClassification'],
    };
    app.MG.store.getProductTypeField(query).then((res) => {
    await app.MG.store.getProductTypeField(query).then((res) => {
      JSON.parse(res[0].config).option.forEach((item) => {
        if (item.value == iconType) {
          item.child.forEach((item) => {
            if (item.value == classType) {
              name = item.name;
          item.child.forEach((citem) => {
            if (citem.value == classType) {
              name = citem.name;
            }
          });
        }
@@ -293,9 +311,18 @@
          || (e.detail.value == 'questionBank' && !this.data.test.length)) {
          this.getResourceData(checkData)
        }
      }
    } else if (e.detail.label == '云笔记') {
      const token = wx.getStorageSync('jsek-token')
      const child = this.selectComponent('#note')
      child.handleSubmitTitle()
      if (token) {
        child.changeLoading()
        child.getNoteList()
      }
    }
    console.log('切换', this.data.tabValue);
  },
  // 获取资源所属分类
  getResourceClass() {
@@ -310,6 +337,9 @@
  },
  //  获取教学资源  云学习  云测试
  getResourceData(type) {
    this.setData({
      loading: true
    })
    let query = {
      path: '*',
      queryType: '*',
@@ -340,7 +370,7 @@
          const data = res.datas.cmsDatas[0].datas.filter(
            (item) => item.refCode == 'jsek_questionBank'
          )
          if (data.length) return getResourceData(data[0])
          if (data.length) return this.getResourceData(data[0])
        }
        //教学资源 云学习
        if (type.refCode == 'jsek_teachingResources' || type.refCode == 'jsek_cloudLearning') {
@@ -351,23 +381,27 @@
              })
              const list = await this.getAllResource(res.datas.cmsDatas[0].datas)
              this.setData({
                teachResources: list,
                teach: list
                teach: list,
                loading: false
              })
              this.findChildIds(this.data.teachResources, this.data.openTeachids = [])
              this.findChildIds(this.data.teach, this.data.openTeachids = [])
            } else if (type.refCode == 'jsek_cloudLearning') {
              const list = await this.getAllResource(res.datas.cmsDatas[0].datas)
              this.setData({
                learn: list
                learn: list,
                loading: false
              })
              console.log('云学习', this.data.learn);
              this.findChildIds(this.data.teachResources, this.data.openLearnids = [])
              this.findChildIds(this.data.learn, this.data.openLearnids = [])
            }
          } else {
            // 无数据
          }
        } else if (type.refCode == 'jsek_questionBank') {
          console.log('云测试');
          // const list = await this.getAllResource(res.datas.cmsDatas[0].datas)
          this.setData({
            test: res.datas.cmsDatas[0].datas,
            loading: false
          })
        } else {
          console.log('其他');
        }
@@ -375,7 +409,6 @@
      .catch((e) => {
        console.log(e)
      })
    console.log('信息', this.data);
  },
  // 获取tag下所有资源
  async getAllResource(data) {
@@ -522,14 +555,14 @@
          const endDate = JSON.parse(applyResource.feedBack).endDate
          // const endDate = new Date(JSON.parse(applyResource.feedBack).endDate + ' 23:59:59').getTime()
          if (endDate == '永久') {
            // deadline.value = '永久'
            this.setData({
              applyState: 'Normal',
              deadline: '永久',
            })
            console.log('有效日期', this.data.deadline);
          } else {
            let endTime = new Date(endDate + ' 23:59:59').getTime()
            // deadline.value = endDate + ' 23:59:59'
            this.setData({
              deadline: endDate + ' 23:59:59'
            })
@@ -554,9 +587,8 @@
          applyState: 'none'
        })
      }
      console.log('申请通过', this.data.applyState);
    })
    console.log('有效日期', this.data.deadline);
  },
  // 申请教学资源
  applyResource() {
@@ -601,92 +633,102 @@
    //   // logIn()
    // }
  },
  // 教学资源下载前往PC提示Diialog
  closeTeachDownload() {
    this.setData({
      isShowTeachDownload: false
    })
  },
  // 下载功能
  downloadTeach(e) {
    const data = e.detail.value
    // const data
    // let role = userStore.userInfo ? userStore.userInfo.role : null
    // if (role) {
    //   if (role == 'Teacher') {
    if (this.properties.applyState == 'Normal' || this.properties.applyState == 'none') {
      // 是否允许下载
      if (data.isDownload == 1) {
        // 申请通过
        let url = app.config.requestCtx + '/file/api/ApiDownloadForAuthorize?md5='
        if (data.file) {
          // 判断是否私有
          if (data.fileMap[data.file].protectType == 'Private')
            return Message.error({
              context: this,
              offset: ['20rpx', '32rpx'],
              duration: 5000,
              content: '该文件无法下载'
            })
          url = url + data.file + '&token=' + wx.getStorageSync('jsek-token')
        } else if (data.freeFile) {
          url = url + data.freeFile + '&token=' + wx.getStorageSync('jsek-token')
        } else {
          Message.error({
            context: this,
            offset: ['20rpx', '32rpx'],
            duration: 5000,
            content: '暂无资源',
          })
        }
        this.downloadFile(url)
      } else {
        Message.error({
          context: this,
          offset: ['20rpx', '32rpx'],
          duration: 5000,
          content: '该资源无法下载',
        })
      }
    } else if (this.properties.applyState == 'WaitAudit') {
      // ElMessageBox.confirm('请先申请下载!', '尊敬的用户,您好!', {
      //   confirmButtonText: '申请',
      //   cancelButtonText: '取消',
      //   type: 'warning'
      // })
      //   .then(() => applyBookInfo())
      //   .catch()
      Message.error({
        context: this,
        offset: ['20rpx', '32rpx'],
        duration: 5000,
        content: '该资源下载申请审核中',
      })
    } else if (this.properties.applyState == 'Reject') {
      Message.error({
        context: this,
        offset: ['20rpx', '32rpx'],
        duration: 5000,
        content: '资源下载申请未通过'
      })
    } else {
      // Message.error({
      //   context: this,
      //   offset: ['20rpx', '32rpx'],
      //   duration: 5000,
      //   content: '请先申请下载'
      // })
      console.log('请先申请下载');
    }
    //   } else {
    //     ElMessageBox.confirm('请先进行教师认证!', '尊敬的用户,您好!', {
    //       confirmButtonText: '去认证',
    //       cancelButtonText: '取消',
    //       type: 'warning'
    //     })
    //       .then(() => {
    //         isShow.value = true
    this.setData({
      isShowTeachDownload: true
    })
    console.log('zhuan', this.data.isShowTeachDownload);
    //   const data = e.detail.value
    //   // const data
    //   // let role = userStore.userInfo ? userStore.userInfo.role : null
    //   // if (role) {
    //   //   if (role == 'Teacher') {
    //   if (this.properties.applyState == 'Normal' || this.properties.applyState == 'none') {
    //     // 是否允许下载
    //     if (data.isDownload == 1) {
    //       // 申请通过
    //       let url = app.config.requestCtx + '/file/api/ApiDownloadForAuthorize?md5='
    //       if (data.file) {
    //         // 判断是否私有
    //         if (data.fileMap[data.file].protectType == 'Private')
    //           return Message.error({
    //             context: this,
    //             offset: ['20rpx', '32rpx'],
    //             duration: 5000,
    //             content: '该文件无法下载'
    //           })
    //         url = url + data.file + '&token=' + wx.getStorageSync('jsek-token')
    //       } else if (data.freeFile) {
    //         url = url + data.freeFile + '&token=' + wx.getStorageSync('jsek-token')
    //       } else {
    //         Message.error({
    //           context: this,
    //           offset: ['20rpx', '32rpx'],
    //           duration: 5000,
    //           content: '暂无资源',
    //         })
    //       }
    //       this.downloadFile(url)
    //     } else {
    //       Message.error({
    //         context: this,
    //         offset: ['20rpx', '32rpx'],
    //         duration: 5000,
    //         content: '该资源无法下载',
    //       })
    //       .catch(() => { })
    //     }
    //   } else if (this.properties.applyState == 'WaitAudit') {
    //     // ElMessageBox.confirm('请先申请下载!', '尊敬的用户,您好!', {
    //     //   confirmButtonText: '申请',
    //     //   cancelButtonText: '取消',
    //     //   type: 'warning'
    //     // })
    //     //   .then(() => applyBookInfo())
    //     //   .catch()
    //     Message.error({
    //       context: this,
    //       offset: ['20rpx', '32rpx'],
    //       duration: 5000,
    //       content: '该资源下载申请审核中',
    //     })
    //   } else if (this.properties.applyState == 'Reject') {
    //     Message.error({
    //       context: this,
    //       offset: ['20rpx', '32rpx'],
    //       duration: 5000,
    //       content: '资源下载申请未通过'
    //     })
    //   } else {
    //     // Message.error({
    //     //   context: this,
    //     //   offset: ['20rpx', '32rpx'],
    //     //   duration: 5000,
    //     //   content: '请先申请下载'
    //     // })
    //     console.log('请先申请下载');
    //   }
    // } else {
    //   logIn()
    // }
    //   //   } else {
    //   //     ElMessageBox.confirm('请先进行教师认证!', '尊敬的用户,您好!', {
    //   //       confirmButtonText: '去认证',
    //   //       cancelButtonText: '取消',
    //   //       type: 'warning'
    //   //     })
    //   //       .then(() => {
    //   //         isShow.value = true
    //   //       })
    //   //       .catch(() => { })
    //   //   }
    //   // } else {
    //   //   logIn()
    //   // }
  },
  downloadFile(url) {
    wx.downloadFile({
@@ -726,6 +768,7 @@
      return false
    }
  },
  // 获取已购买商品
  getShoppingCartProductGet() {
    let query = {
      start: 0,
@@ -742,7 +785,6 @@
        shoppingList: res.datas,
        shoppingCartGetId: list
      })
      console.log('购买', this.data);
    })
  },
  // 判断资源加入购物车按钮是否显示
@@ -762,5 +804,140 @@
    } else {
      return false
    }
  }
  },
  // 遍历树结构转换为数组方法
  handleTreeData(array) {
    const flattenedArray = []
    array.forEach((node) => {
      // 将当前节点添加到展开的数组中
      flattenedArray.push(node)
      // 递归处理子节点
      if (node.children && node.children.length > 0) {
        const childrenArray = this.handleTreeData(node.children)
        flattenedArray.push(...childrenArray)
      }
    })
    return flattenedArray.filter((item) => item.sysType == 'CmsItem')
  },
  // 云学习一键领取
  async getFreeResource() {
    const child = this.selectComponent('#learn-resource')
    const token = wx.getStorageSync('jsek-token')
    if (!token) {
      return wx.getUserProfile({
        desc: '用户登录',
        success: (res) => {
          console.log(res);
        }
      })
    }
    let arr = this.handleTreeData(this.data.learn).filter((item) => this.resourceIsBuy(item))
    let freeIds = arr.filter((item) => {
      return item.saleMethod[0].Price == 0
    })
    if (!freeIds.length) return wx.showToast({
      icon: "error",
      title: '暂无免费资源',
    })
    child.changeReceive(true)
    let requests = []
    freeIds.forEach((item, index) => {
      if (this.resourceIsBuy(item)) {
        requests.push({
          saleMethodId: item.saleMethod[0].Id,
          count: 1
        })
      }
    })
    let query = {
      remarks: '云学习',
      requests,
    }
    try {
      const initOrderRes = await app.MG.store.initOrder(query)
      let parameter = {
        orderNum: initOrderRes.orderNumber
      }
      // 确认订单
      const confirmOrderRes = await app.MG.store.confirmOrder(parameter)
      if (confirmOrderRes.orderNumber) {
        child.changeReceive(false)
        wx.showToast({
          title: '领取成功',
        })
        this.getBookInfo(this.data.bookId)
      }
    } catch (error) {
      console.log(error)
    }
  },
  // 云学习一键购买
  async allAddShoppiingCar() {
    const child = this.selectComponent('#learn-resource')
    const token = wx.getStorageSync('jsek-token')
    if (!token) {
      return wx.getUserProfile({
        desc: '用户登录',
        success: (res) => {
          console.log(res);
        }
      })
    }
    let shopList = this.handleTreeData(this.data.learn).filter((item) => this.resourceIsBuy(item))
    this.getShoppingCartProductGet()
    if (!shopList.length) return wx.showToast({
      icon: "error",
      title: '已全部购买',
    })
    child.changeBuy(true)
    let requests = []
    shopList.forEach((item) => {
      requests.push({
        saleMethodId: item.saleMethod[0].Id,
        count: 1,
      })
    })
    let query = {
      remarks: '云学习',
      requests,
    }
    const initOrderRes = await app.MG.store.initOrder(query)
    child.changeBuy(false)
    // 检查订单号是否存在
    if (initOrderRes.orderNumber) {
      // bookService: orderNumber.value,  少传这个 ,暂时不知道有什么用
      wx.navigateTo({
        url: `/pages/cart/paymentPage/index?&bookId=${this.data.bookDetail.id}&bookName=${this.data.bookDetail.name}&orderNum=${initOrderRes.orderNumber}`,
      })
    } else {
      // 订单号不存在,显示警告消息
      wx.showToast({
        icon: "error",
        title: '请重试',
      })
    }
  },
  // 变为所有check   true
  findAndUpdateItemsByIds(tree, ids) {
    function findAndUpdate(node) {
      if (ids.includes(node.id)) {
        node.checked = true; // 将目标项的 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; // 返回修改后的完整数组
  },
  handleTrue() {
    // findAndUpdateItemsByIds(this.date.)
  },
})