闫增涛
2024-04-01 aa2c08b3be23a01d44205b2c19d21a2bf53f944f
packageBookService/pages/bookServices/detail/components/tree/index.js
@@ -1,6 +1,7 @@
import Message from 'tdesign-miniprogram/message/message';
const util = require('./components/util') // 引入封装过的加载提示
import {
  loginInfo
} from '../../../../../../assets/js/login'
const app = getApp()
Component({
  // checked: false,
@@ -29,28 +30,55 @@
    openIds: {
      type: Array,
      value: [],
    }
    ,
    },
    isShowCheck: {
      type: Boolean,
      value: false,
    },
    paymentPage: {
      type: Boolean,
      value: false,
    },
    superior: {
      type: Boolean,
      value: false,
    }
  },
  data: {
    sonPurchaseSaleMethodId: '',
    superiorPurchaseSaleMethodId: [],
    activeValues: [1, 2],
    webpageSrc: '',
    cloudShoppingCart: []
    cloudShoppingCart: [],
    selectAll: []
  },
  onShow() {
  ready() {
    this.setData({
    })
    console.log('准备');
  },
  onLoad() {
    this.setData({
      sonPurchaseSaleMethodId: []
    })
    console.log(this.data.sonPurchaseSaleMethodId, 'sonPurchaseSaleMethodId789');
  },
  observers: {
    'treeList': function (newValue) {
    'openIds': function (newValue) {
      // var myEventDetail = {
      // }
      // var myEventOption = {
      //   bubbles: true,
      //   composed: true
      // }
      // this.triggerEvent('handleTree', myEventDetail, myEventOption)
    }
  },
  methods: {
    handleList(tree) {
      for (let index = 0; index < tree.length; index++) {
        const item = tree[index];
@@ -64,11 +92,9 @@
    },
    // 节点展开
    handleChange(e) {
      // console.log(this.properties.treeList, 'this.properties.treeList');
      this.setData({
        activeValues: e.detail.value,
        openIds: e.detail.value,
      });
      // console.log('传递', this.properties.buyIds);
    },
    handleCheck(data) {
      for (let index = 0; index < data.length; index++) {
@@ -103,75 +129,80 @@
    },
    // 跳转音视频播放器
    goPlayer(e) {
      if (this.properties.isShowCheck) return true
      const item = e.currentTarget.dataset.item
      const parent = e.currentTarget.dataset.parent
      let url
      if (item.selectType == 'video' || item.learnSelectType == 'video') {
        url = '/packageDomain/pages/resourceDetails/myVideo/index'
      } else if (item.selectType == 'audio' || item.learnSelectType == 'audio') {
        url = '/packageDomain/pages/resourceDetails/myAudio/index'
      } else if (item.selectType == 'picture' || item.selectType == 'zip') {
        url = '/packageDomain/pages/resourceDetails/document/index'
      }
      if (this.properties.tab == 'jsek_cloudLearning' && this.resourceIsBuy(item)) {
        return wx.showToast({
          icon: 'error',
          title: '请先购买该资源',
        })
      }
      wx.navigateTo({
        url: `${url}?productLinkPath=${item.productLinkPath}&parentProductLinkPath=${parent.productLinkPath}&parentName=${parent.name}&activeId=${item.id}&bookId=${this.properties.bookInfo.id}&bookName=${this.properties.bookInfo.name}&cmsId=${this.properties.bookInfo.rootCmsItemId}`,
      })
      if (item.selectType == 'document' || item.selectType == 'pdf') {
        const fileLink = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.file
        console.log(fileLink, 'fileLink');
        //提示加载中
        util.showLoading()
        // 单次下载允许的最大文件为 200MB
        wx.downloadFile({
          url: fileLink, // 地址已打码,自己换个其他的地址("https://www.xxxxx.com/file/测试通知.pdf")
          success: function (res) {
            console.log(res, "wx.downloadFile success res")
            if (res.statusCode != 200) {
              util.hideLoadingWithErrorTips()
              return false
            }
            var Path = res.tempFilePath //返回的文件临时地址,用于后面打开本地预览所用
            wx.openDocument({
              filePath: Path,
              showMenu: true,
              success: function (res) {
                console.log('打开成功');
                util.hideLoading()
              }
            })
          },
          fail: function (err) {
            console.log(err, "wx.downloadFile fail err");
            util.hideLoadingWithErrorTips()
      // 检查登录状态
      const token = wx.getStorageSync(app.config.tokenKey)
      if (!token) {
        loginInfo(app, (data) => {
          // 如果不是第一次登录,会执行回调
          if (data) {
            // 登录成功,自动记录token和用户信息,并返回true
          } else {
            // 出现错误,返回false
          }
        })
      }
      if (item.selectType == 'webpage') {
        console.log(11);
        this.setData({
          webpageSrc: item.jsek_link
      } else {
        if (this.properties.isShowCheck) return true
        const item = e.currentTarget.dataset.item
        const parent = e.currentTarget.dataset.parent
        let url
        if (item.selectType == 'video' || item.learnSelectType == 'video') {
          url = '/packageDomain/pages/resourceDetails/myVideo/index'
        } else if (item.selectType == 'audio' || item.learnSelectType == 'audio') {
          url = '/packageDomain/pages/resourceDetails/myAudio/index'
        } else if (item.selectType == 'picture' || item.selectType == 'zip') {
          url = '/packageDomain/pages/resourceDetails/document/index'
        }
        if (this.properties.tab == 'jsek_cloudLearning' && this.resourceIsBuy(item)) {
          return wx.showToast({
            icon: 'error',
            title: '请先购买该资源',
          })
        }
        wx.navigateTo({
          url: `${url}?productLinkPath=${item.productLinkPath}&parentProductLinkPath=${parent.productLinkPath}&parentName=${parent.name}&activeId=${item.id}&bookId=${this.properties.bookInfo.id}&bookName=${this.properties.bookInfo.name}&cmsId=${this.properties.bookInfo.rootCmsItemId}`,
        })
        console.log(this.data.webpageSrc, 'webpageSrc');
        if (item.selectType == 'document' || item.selectType == 'pdf') {
          const fileLink = app.config.requestCtx + '/file/api/ApiDownload?md5=' + item.file
          console.log(fileLink, 'fileLink');
          //提示加载中
          util.showLoading()
          // 单次下载允许的最大文件为 200MB
          wx.downloadFile({
            url: fileLink, // 地址已打码,自己换个其他的地址("https://www.xxxxx.com/file/测试通知.pdf")
            success: function (res) {
              console.log(res, "wx.downloadFile success res")
              if (res.statusCode != 200) {
                util.hideLoadingWithErrorTips()
                return false
              }
              var Path = res.tempFilePath //返回的文件临时地址,用于后面打开本地预览所用
              wx.openDocument({
                filePath: Path,
                showMenu: true,
                success: function (res) {
                  console.log('打开成功');
                  util.hideLoading()
                }
              })
            },
            fail: function (err) {
              console.log(err, "wx.downloadFile fail err");
              util.hideLoadingWithErrorTips()
            }
          })
        }
        if (item.selectType == 'webpage') {
          this.setData({
            webpageSrc: item.jsek_link
          })
          console.log(this.data.webpageSrc, 'webpageSrc');
        }
      }
    },
    // 拿到所有项
    getAllChildren(id) {
      let result = [];
      function findChildren(item) {
        if (item.id === id) {
          if (item.children && item.children.length > 0) {
@@ -199,6 +230,7 @@
    // 拿到当前项子项
    flattenTree(tree) {
      let result = [];
      function flatten(node) {
        result.push(node);
        if (node.children && node.children.length > 0) {
@@ -220,7 +252,7 @@
      function findAndUpdate(node) {
        if (ids.includes(node.id)) {
          // console.log(node, 'node');
          node.checked = !node.checked  // 将目标项的 check 属性设置为 true
          node.checked = !node.checked // 将目标项的 check 属性设置为 true
        }
        if (node.children && node.children.length > 0) {
          for (let child of node.children) {
@@ -244,9 +276,8 @@
            const element = node.children[index];
            findAndUpdate(element)
          }
        }
        else if (id == node.id && node.sysType == "CmsItem") {
          node.checked = !node.checked  // 将目标项的 check 属性设置为 true
        } else if (id == node.id && node.sysType == "CmsItem") {
          node.checked = !node.checked // 将目标项的 check 属性设置为 true
        }
      }
      for (let node of tree) {
@@ -258,6 +289,7 @@
    checkAll() {
      const ids = []
      const list = []
      let checked = ''
      this.properties.treeList.forEach(item => {
        if (item.children && item.children.length > 0) {
          list.push(...this.flattenTree([item]))
@@ -265,8 +297,21 @@
      })
      list.forEach(item => {
        ids.push(item.id)
        checked = item.checked
      })
      const updataList = this.findAndUpdateItemsByIds(this.properties.treeList, ids);
      console.log(checked, 'list');
      if (!checked) {
        this.setData({
          selectAll: list
        })
      }
      this.setData({
        treeList: updataList
      })
@@ -275,17 +320,30 @@
    // 章节勾选
    checkResourceTitle(e) {
      // 这个时候checked的值是fals
      let checkResourceTitleList = []
      const item = e.currentTarget.dataset.item
      //
      let list = this.flattenTree([item])
      let ids = []
      list.forEach(item => {
        ids.push(item.id)
      })
      // console.log(list, 'list789');
      const updatedTreeList = this.findAndUpdateItemsByIds(this.properties.treeList, ids);
      this.setData({
        treeList: updatedTreeList  // 更新 treeList 数据
        treeList: updatedTreeList // 更新 treeList 数据
      });
      console.log(list, 'list');
      console.log(list, 'list.checked');
      if (!list.checked) {
        this.setData({
          superiorPurchaseSaleMethodId: list
        })
      }
      // console.log(this.data.superiorPurchaseSaleMethodId, 'superiorPurchaseSaleMethodId');
      list.forEach(items => {
        console.log(items.checked, 'itesasd');
        if (!items.checked) {
@@ -294,54 +352,85 @@
          })
        }
      })
      this.onCloudShoppingCart()
    },
    // 子项勾选
    checkResource(e) {
      const citem = e.currentTarget.dataset.item
      console.log(e);
      console.log(citem, '5648');
      const updataList = this.checkResoucrceInfo(this.properties.treeList, citem.id)
      console.log(updataList);
      console.log(citem.checked, 'citem.checked');
      if (!citem.checked) {
        //选中的时候添加id
        let sonPurchaseSaleMethodId = this.data.sonPurchaseSaleMethodId || []
        console.log(this.properties.paymentPage, 'this.properties.paymentPage');
        if (this.properties.paymentPage) {
          console.log(789987);
          sonPurchaseSaleMethodId = []
          this.properties.paymentPage = false
        }
        if (!this.properties.paymentPage) {
          sonPurchaseSaleMethodId.push(citem.saleMethod[0].Id)
        }
        this.setData({
          sonPurchaseSaleMethodId: sonPurchaseSaleMethodId
        })
        console.log(this.data.sonPurchaseSaleMethodId);
      } else {
        // 取消选中的时候删除id
      }
      this.setData({
        treeList: updataList
        treeList: updataList,
      })
    },
    // 加入购物车
    async onCloudShoppingCart() {
      let requests = []
      const item = this.data.cloudShoppingCart
      console.log(item, 'item');
      item.forEach((items) => {
        if (items.saleMethod.length) {
          requests.push({
            saleMethodId: items.saleMethod[0].Id,
            count: 1
          })
        }
      })
    async onCloudShoppingCart(e) {
      let shoppingCartGetId = []
      const saleMethodId = e.currentTarget.dataset.item.saleMethod[0].Id
      console.log(saleMethodId);
      let query = {
        remarks: '云学习',
        requests
        start: 0,
        size: 999,
        filterList: [],
        searchList: []
      }
      // 查询订单
      let initOrderRes = await app.MG.store.initOrder(query)
      let parameter = {
        orderNum: initOrderRes.orderNumber
      const res = await app.MG.store.getShoppingCartProductList(query)
      res.datas.forEach(item => {
        shoppingCartGetId.push(item.saleMethod.id)
      })
      if (shoppingCartGetId.includes(saleMethodId)) {
        console.log(111);
        wx.showToast({
          icon: 'error',
          title: '已添加',
        })
      } else {
        let query = {
          requests: [{
            saleMethodId: saleMethodId,
            storeEventId: null,
            // agentCode: '电子书'
          }]
        }
        const addRes = await app.MG.store.addShoppingCart(query)
        console.log(addRes, 'addRes');
        wx.showToast({
          icon: 'success',
          title: '添加成功',
        })
      }
      const confirmOrderRes = await app.MG.store.confirmOrder(parameter)
      // if (confirmOrderRes.orderNumber) {
      //   wx.navigateTo({
      //     url: `/pages/cart/paymentPage/index?orderNumber=${confirmOrderRes.orderNumber}`,
      //   })
      //   requests = []
      // }
    },
  },
  onCheckAllChange(e) {
    debugger
    console.log('checkbox', e.detail.value);
    // debugger
    // console.log('checkbox', e.detail.value);
    // this.setData({
    //   checkAllValues: event.detail,
    // });
  }
  },
})