闫增涛
2024-09-18 c96612e8a63ecef9590be0f8b5199277ec94e5b9
packageBookService/pages/bookServices/detail/index.js
@@ -1,21 +1,30 @@
// pages/bookServices/detail/index.js
import Toast from "tdesign-miniprogram/toast";
import tool from "../../../../assets/js/toolClass";
import { loginInfo } from "../../../../assets/js/login";
import moment from 'moment'
import {
  loginInfo
} from "../../../../assets/js/login";
import FormData from '../../../../utils/formdata/index.js';
const app = getApp();
Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 进页面默认切换  展开的id
    // defaultactiveTeachid  教学资源
    // defaultactiveLearnid  云学习
    bookId: "",
    barHeight: "",
    navBarHeight: "",
    options: {
      id: "",
      name: "",
      storeInfo: '',
    },
    bookDetail: {},
    bookClass: [],
    bookItemDetail: {},
    link: {
      jd: "",
@@ -31,14 +40,20 @@
    teach: [],
    learn: [],
    test: [],
    jslx: true,
    openTeachids: [],
    openLearnids: [],
    openTestids: [],
    isGoBuyResource: true,
    learnPath: '',
    applyResourceState: false, // 申请教学资源按钮防抖
    resourceClassList: [], // 资源所属分类
    applyState: "", // 教学资源申请状态
    deadline: "", // 教学资源申请有效日期,
    isshowDrawBtn: true, // 云学习领取查看按钮是否显示
    isShowBuyCloundMenu: false, //   云学习全部购买按钮是否显示
    isCloundHaveSaleMethod: false, // 云学习是否有销售方式
    cloundMenuIsBuy: false,
    rejectCause: "", // 下载拒绝原因
    buyIdList: [],
    shoppingCartGetId: [], // 已购买id列表
@@ -74,6 +89,7 @@
    electronicBookList: [], //样书单电子书
    paperBookCount: 0, //纸质书剩余次数
    ebookCount: 0, //电子书剩余次数
    resourceCodeList: [], // 资源refcode列表
    userInfo: {},
    pageLoading: true,
    fileInfo: {
@@ -131,6 +147,66 @@
    icon1: {
      name: "/static/images/bookService/detail/dangdang.png",
    },
    rowCol: [{
        width: '50%',
      },
      {
        width: '100%'
      },
      {
        width: '80%'
      },
      {
        width: '100%'
      }, {
        width: '100%'
      },
    ],
    showIndex: '',
    successOrderNumber: '',
    applicationState: '', // 电子样书申请状态
    dialogBox: false,
    resourceInfo: {
      resourceName: '',
      fileType: '',
      description: '',
      agree: false
    },
    resourceVisible: false,
    resourceValue: [],
    fileTypeList: [{
        label: '音频',
        value: '音频'
      },
      {
        label: '视频',
        value: '视频'
      },
      {
        label: '图片',
        value: '图片'
      },
      {
        label: 'PDF',
        value: 'PDF'
      },
      {
        label: '资源包',
        value: '资源包'
      },
      {
        label: '文档',
        value: '文档'
      },
      {
        label: '其他',
        value: '其他'
      }
    ],
    fileList: [],
    isShowUp: true,
    protocolShow: false,
    protocolTxt: ''
  },
  resetTree: function (e) {
@@ -151,20 +227,27 @@
      bookId: options.id + "",
      barHeight: systInfo.statusBarHeight,
      navBarHeight: navBarHeight,
    });
    this.setData({
      options: {
        id: options.id,
        name: options.name,
        name: decodeURI(options.name),
        storeInfo: options.storeInfo,
      },
    });
    wx.setNavigationBarTitle({
      title: decodeURI(options.name),
    })
    let token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      loginInfo(app, (data) => {
        if (data) {} else {}
      })
    }
    this.getBookInfo(options.id);
    this.getResourceClass(); // 获取资源所属分类
    const token = wx.getStorageSync(app.config.tokenKey);
    // this.getResourceClass(); // 获取资源所属分类
    token = wx.getStorageSync(app.config.tokenKey)
    if (token) {
      this.getShoppingCartProductGet();
      this.getApplyInfo(options.id);
      this.getMockData();
      this.getAlreadyPBookList();
      this.getAlreadyEBookList();
    }
@@ -176,12 +259,14 @@
      this.getSelectPaperBookCount();
      this.getSelectBookCount();
    }
  },
    if (options.tabValue) {
      this.setData({
        tabValue: options.tabValue,
      });
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},
    }
  },
  /**
   * 生命周期函数--监听页面显示
@@ -189,33 +274,18 @@
  onShow() {
    if (wx.getStorageSync("paperBookList")) {
      this.setData({
        paperBookList: wx.getStorageSync("paperBookList"),
        paperBookList: JSON.parse(wx.getStorageSync("paperBookList")),
      });
    }
    if (wx.getStorageSync("electronicBookList")) {
      this.setData({
        electronicBookList: wx.getStorageSync("electronicBookList"),
        electronicBookList: JSON.parse(wx.getStorageSync("electronicBookList")),
      });
    }
    this.setData({
      num: this.data.paperBookList.length + this.data.electronicBookList.length,
      num: Number(this.data.paperBookList.length) + Number(this.data.electronicBookList.length),
    });
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},
  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},
  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},
  /**
   * 页面上拉触底事件的处理函数
@@ -223,14 +293,10 @@
  onReachBottom() {
    if (this.data.tabValue == "jsek_note") {
      const child = this.selectComponent("#note");
      child.onReachBottom();
      if (!child.data.noList) child.onReachBottom();
    }
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {},
  // 格式化日期
  formatDate(dateString) {
    if (!dateString) {
@@ -301,7 +367,19 @@
  },
  // 返回
  goBack() {
    wx.navigateBack();
    let bookPathList = wx.getStorageSync("bookPathList");
    if (bookPathList && JSON.parse(bookPathList).length) {
      bookPathList = JSON.parse(bookPathList);
      this.setData({
        pageLoading: true,
        tabValue: "brief",
      });
      this.onLoad(bookPathList[bookPathList.length - 1]);
      bookPathList.pop();
      wx.setStorageSync("bookPathList", JSON.stringify(bookPathList));
    } else {
      wx.navigateBack();
    }
  },
  // 获取图书详情
  getBookInfo(id) {
@@ -311,6 +389,7 @@
      "mockData.count": 0,
    });
    const query = {
      storeInfo: this.data.options.storeInfo,
      path: "*",
      queryType: "*",
      productId: id,
@@ -333,6 +412,7 @@
        dangdangLink: [],
        weidianLink: [],
        content: [],
        catalogue: [],
        authorIntroduction: [],
        // isApplyPaperBook: [],
        // isApplyEBook: [],
@@ -345,24 +425,52 @@
      },
    };
    app.MG.store.getProductDetail(query).then(async (res) => {
      this.getResourceCode(id, res.datas.rootCmsItemId)
      this.setData({
        bookDetail: res.datas,
        cmsDatas: res.datas.cmsDatas[0].datas,
        buyIdList: res.datas.purchasedSaleMethodIdList,
        relatedBookPath: JSON.parse(res.datas.datas.ProductLinkInfo)[0]
          .LinkPath,
        pageLoading: false
      });
      if (res.datas.cmsDatas && res.datas.cmsDatas.length) {
        this.setData({
          cmsDatas: res.datas.cmsDatas[0].datas,
        })
      }
      if (res.datas.datas.ProductLinkInfo) {
        if (JSON.parse(res.datas.datas.ProductLinkInfo).length) this.setData({
          relatedBookPath: JSON.parse(res.datas.datas.ProductLinkInfo)[0]
            .LinkPath,
        })
      }
      this.getSubTtem();
      // 获取图书分类
      let className = "";
      if (
        Array.isArray(res.datas.bookClassification) &&
        res.datas.bookClassification.length
      ) {
        const iconType = JSON.parse(res.datas.bookClassification)[0][0];
        const classType = JSON.parse(res.datas.bookClassification)[0][1];
        className = await this.getBookClass(iconType, classType);
      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];
            classData.push({
              iconType,
              classType
            })
          }
          await this.getBookClass(classData);
        }
      }
      if (this.data.tabValue == 'questionBank' || this.data.tabValue == 'jsek_cloudLearning' || this.data.tabValue == 'jsek_teachingResources') {
        const checkData = this.data.cmsDatas.find(
          (item) => item.refCode == this.data.tabValue
        );
        if (this.data.tabValue == "questionBank") {
          this.getResourceData(checkData)
        } else {
          this.getResourceDataList(checkData)
        }
      }
      // 获取组卷销售id
      if (res.datas.saleMethod && res.datas.saleMethod.length) {
        res.datas.saleMethod.forEach((item) => {
@@ -389,19 +497,36 @@
        }
      }
      this.setData({
        "bookDetail.publicationDate": this.formatDate(
          this.data.bookDetail.publicationDate
        ),
        "bookDetail.class": className,
        "bookDetail.publicationDate": moment(this.data.bookDetail.publicationDate).format("YYYY年MM月"),
        "bookDetail.price": this.numFormat(this.data.bookDetail.price),
        "bookDetail.oldPrice": this.numFormat(this.data.bookDetail.oldPrice),
        "bookDetail.paperPrice": this.numFormat(
          this.data.bookDetail.paperPrice
        ),
        pageLoading: false,
      });
      console.log("图书信息", this.data.bookDetail);
    });
  },
  getResourceCode(bookId, cmsId) {
    let query = {
      path: '*',
      queryType: '*',
      productId: bookId,
      cmsPath: cmsId,
      itemFields: {
        SysType: 'Cms'
      },
      pading: {
        start: 99,
        size: 0
      }
    }
    app.MG.store.getProductDetail(query).then((res) => {
      this.setData({
        resourceCodeList: res.datas.cmsDatas[0].datas,
      })
      console.log('refcode', this.data.resourceCodeList);
    })
  },
  //请求子商品的文件
  getSubTtem() {
@@ -430,10 +555,10 @@
        this.setData({
          bookItemDetail: res.datas[0],
          selectedIds: res.datas[0].defaultSaleMethod.id,
          bookBuy:
            res.datas[0].purchasedSaleMethodIdList.indexOf(
              res.datas[0].defaultSaleMethodId
            ) > -1,
          bookBuy: res.datas[0].purchasedSaleMethodIdList.indexOf(
            res.datas[0].defaultSaleMethodId
          ) > -1,
          "bookDetail.price": this.numFormat(res.datas[0].price),
        });
        let times = new Date(res.datas[0].defaultSaleMethod.endDate).getTime();
        let startTime = new Date(
@@ -461,14 +586,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,
            });
          }
        }
@@ -482,23 +607,23 @@
              "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) {
            this.setData({
              "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,
            });
          }
        }
        this.setData({
          selectedIds: this.data.bookDetail.defaultSaleMethodId,
          bookBuy:
            this.data.bookDetail.purchasedSaleMethodIdList.indexOf(
              this.data.bookDetail.defaultSaleMethodId
            ) > -1,
          bookBuy: this.data.bookDetail.purchasedSaleMethodIdList.indexOf(
            this.data.bookDetail.defaultSaleMethodId
          ) > -1,
        });
        let times = new Date(
          this.data.bookDetail.defaultSaleMethod.endDate
@@ -519,23 +644,38 @@
    });
  },
  // 获取图书分类
  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) {
              name = citem.name;
      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
                    })
                  }
                }
              });
            }
          });
        }
      });
          }
        });
      }
    });
    return name;
  },
  // 收藏
  setCollect() {
@@ -581,34 +721,24 @@
    // 检查登录状态
    const token = wx.getStorageSync(app.config.tokenKey);
    const child = this.selectComponent("#suggest-component");
    if (!token) {
      wx.showLoading({
        title: "加载中",
      });
      loginInfo(app, (data) => {
        // 如果不是第一次登录,会执行回调
        if (data) {
          // 登录成功,自动记录token和用户信息,并返回true
          child.showDialog();
          wx.hideLoading();
        } else {
          // 出现错误,返回false
        }
      });
    } else {
      // 如果是第一次登录,会跳转至绑定用户信息页面,填写完用户信息后进行登录并储存token和用户信息,结束后跳转回当前页面(携带页面参数)
      child.showDialog();
    }
    if (token)
      // child.showDialog();
      this.setData({
        showIndex: '1'
      })
  },
  // 跳转网店
  goShop(e) {
    const { link } = e.currentTarget.dataset;
    const {
      link
    } = e.currentTarget.dataset;
    wx.navigateTo({
      url: `/packageBookService/pages/bookServices/webpage/index?url=${link}`,
      url: `/packageBookService/pages/bookServices/linkPage/index?path=${link}`,
    });
  },
  // tag切换
  onTabsChange(e) {
    const token = wx.getStorageSync(app.config.tokenKey);
    this.setData({
      tabValue: e.detail.value,
      noResources: false,
@@ -619,9 +749,9 @@
      e.detail.label == "云测试"
    ) {
      const checkData = this.data.cmsDatas.find(
        (item) => item.refCode == e.detail.value
        (item) => item.refCode == this.data.tabValue
      );
      if (!this.data.resourceClassList.length) this.getResourceClass()
      if (checkData) {
        if (e.detail.value == "jsek_cloudLearning") {
          this.setData({
@@ -629,14 +759,24 @@
            "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)) {
          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();
      } else {
        this.setData({
          noResources: true,
@@ -649,6 +789,8 @@
      if (token) {
        child.changeLoading();
        child.getNoteList();
      } else {
        child.changeNoList();
      }
    } else if (e.detail.label == "电子书") {
      const child = this.selectComponent("#eBook");
@@ -670,17 +812,268 @@
      });
    });
  },
  //  获取教学资源  云学习  云测试
  getResourceData(type) {
  // 获取所有子项数量
  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, newArr, path) {
    for (const item of rootList) {
      if (path == item.productLinkPath.replace('\\' + item.id, '')) {
        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)
        // 插进数组后 从原数据中删除
        rootList = rootList.filter(nitem => nitem.id != item.id)
      }
    }
    //给数组里面再添加一个children的空数组
    for (const i of newArr) {
      i.children = []
      this.getTreeList(rootList, 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 => newObj.id < obj.id);
    // 如果没有找到合适的位置,则放在数组末尾
    if (insertIndex === -1) {
      insertIndex = array.length;
    }
    // 插入新对象到数组
    array.splice(insertIndex, 0, newObj);
    // 对数组进行排序
    array.sort((a, b) => {
      if (a.id < b.id) return -1;
      if (a.id > b.id) return 1;
      return 0;
    });
    // 返回更新后的数组
    return array;
  },
  // 递归树结构,如果父级有销售方式(有效期),去掉所有子集的销售方式
  clearTreeSealmethod(clearSaleMethod, tree) {
    for (let item of tree) {
      const saleData = item.saleMethod &&
        item.saleMethod.length ?
        item.saleMethod.find((citem) => citem.SaleType == 'Normal') : null
      if (
        ((saleData && new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime()) ||
          clearSaleMethod) && item.children && item.children.length
      ) {
        item.children.forEach((ditem) => (ditem.saleMethod = []))
      }
      if (item.children && item.children.length)
        this.clearTreeSealmethod(
          saleData && new Date(saleData.EndDate).getTime() >= new Date().getTime() && new Date(saleData.BeginDate).getTime() <= new Date().getTime(),
          item.children
        )
    }
    return tree
  },
  // 教学资源 云学习 获取
  getResourceDataList(type) {
    this.setData({
      loading: true,
      noResources: false,
    });
    let query = {
      path: '*',
      queryType: '*',
      // storeInfo: this.data.options.storeInfo,
      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.getProductDetailNoChildren(query).then((res) => {
      console.log('未处理资源', res.datas.cmsDatas[0].datas);
      if (!res.datas.cmsDatas[0].datas.length) {
        return this.setData({
          noResources: true,
          loading: false,
        });
      }
      let list = []
      // 判断云学习有无销售方式和有效期
      const cloundSaleMethod =
        type.saleMethod && type.saleMethod.length ?
        type.saleMethod.find((citem) => citem.SaleType == 'Normal') :
        null
      let flags =
        type.refCode == 'jsek_cloudLearning' &&
        cloundSaleMethod &&
        new Date().getTime() <= new Date(cloundSaleMethod.EndDate).getTime() &&
        new Date().getTime() >= new Date(cloundSaleMethod.BeginDate).getTime()
      res.datas.cmsDatas[0].datas.forEach((item) => {
        // 云学习上有销售方式,去掉云学习下所有销售方式
        if (flags) item.saleMethod = []
        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);
          // }
        }
      });
      // 判断处理资源
      if (res.datas.cmsDatas[0].datas.some((item) => item.sysType == 'CmsFolder')) {
        if (!res.datas.cmsDatas[0].datas.some((item) => item.sysType == 'CmsItem')) {
          // 1.只有目录,没有资源
          list = res.datas.cmsDatas[0].datas
        } else {
          this.getTreeList(res.datas.cmsDatas[0].datas, list, query.cmsPath)
          list = this.ensureTreeConsistency(list)
          list = this.changeResourceChildren(list)
        }
      } else {
        // 3.只有资源,没有目录
        list = res.datas.cmsDatas[0].datas
      }
      let result = [];
      if (type.refCode == "jsek_teachingResources") {
        this.findChildIds(list, result);
        this.setData({
          openTeachids: result,
          loading: false,
          teach: list,
        });
      } else if (type.refCode == "jsek_cloudLearning") {
        // 云学习上无销售方式,走目录 资源 销售方式去除方法
        if (!flags) list = this.clearTreeSealmethod(false, list)
        // 判断领取查看是否显示(云学习,或资源目录,有售价为0)
        let isshowDrawBtn = res.datas.cmsDatas[0].datas.some(
          (item) =>
          item.saleMethod.length &&
          item.saleMethod.find((citem) => citem.SaleType == 'Normal').Price == 0 &&
          new Date(item.saleMethod.find((citem) => citem.SaleType == 'Normal').EndDate).getTime() >= new Date().getTime() &&
          new Date(item.saleMethod.find((citem) => citem.SaleType == 'Normal').BeginDate).getTime() <= new Date().getTime()
        ) || (flags && cloundSaleMethod.Price == 0)
        // 判断云学习全部购买按钮是否显示
        let isShowBuyCloundMenu = flags && cloundSaleMethod.Price >= 0
        // 判断购物车按钮和锁按钮是否显示
        this.handleTreeData(list).forEach(item => {
          item.isbuy = this.resourceIsBuy(item);
          item.isShopCar = this.isShoppingCart(item);
        })
        this.findChildIds(list, result);
        this.setData({
          isshowDrawBtn,
          isShowBuyCloundMenu,
          isCloundHaveSaleMethod: flags,
          learn: list,
          loading: false,
          openLearnids: result,
          learnPath: type.productLinkPath
        });
      }
    })
  },
  //  获取 云测试
  getResourceData(type) {
    var that = this
    that.setData({
      loading: true,
      noResources: false,
    });
    let query = {
      path: "*",
      queryType: "*",
      productId: this.data.bookDetail.id,
      storeInfo: that.data.options.storeInfo,
      productId: that.data.bookDetail.id,
      cmsPath: type.productLinkPath,
      cmsType: '*',
      itemFields: {
        SysType: "CmsFolder",
        // 资源类型,试读文件,是否允许下载等参数
@@ -701,183 +1094,99 @@
    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") {
              console.log("教学资源", list);
              this.findChildIds(list, result);
              this.setData({
                teach: list,
          let data = []
          let result = [];
          const isTSFW = res.datas.cmsDatas[0].datas.filter(
            (item) =>
            item.type == 'questionBankFolder' &&
            (item.name == '填空题' ||
              item.name == '判断题' ||
              item.name == '单选题' ||
              item.name == '多选题' ||
              item.name == '简答题')
          )
          if (that.data.options.storeInfo == 'jsek_jslx') {
            data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder');
            if (data.length > 0) {
              that.setData({
                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);
              this.setData({
                learn: list,
            } else {
              that.setData({
                noResources: true,
                loading: false,
                openLearnids: result,
              });
            }
          } else {
            // 无数据
            if (isTSFW.length > 0) {
              data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0)
              that.setData({
                jslx: false,
              });
            } else {
              data = res.datas.cmsDatas[0].datas.filter((item) => item.type == 'questionBankFolder')
              that.setData({
                jslx: true,
              });
            }
            if (data.length > 0) {
              let list = []
              that.getTreeList(data, list, query.cmsPath)
              list = that.ensureTreeConsistency(list)
              that.findChildIds(list[0].children, result);
              that.setData({
                test: list.length == 1 && list[0].name == '题库' ? list[0].children : list,
                loading: false,
                openTeachids: result,
              });
            } else {
              that.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) => {
        console.log(e);
      });
  },
  // 获取tag下所有资源
  async getAllResource(data) {
    if (!data.length) return false;
    for (let i = 0; i < data.length; i++) {
      let item = data[i];
      if (item.sysType == "CmsFolder" && item.childrenCount > 0) {
        item.children = [];
        item.children = await this.getFolderItem(item.productLinkPath);
        await this.getAllResource(item.children);
      }
    }
    return data;
  },
  // 获取资源接口
  async getFolderItem(path) {
    let query = {
      path: "*",
      queryType: "*",
      productId: this.data.bookDetail.id,
      cmsPath: path,
      itemFields: {
        SysType: "CmsFolder",
        // 资源类型,试读文件,是否允许下载等参数
        selectType: [],
        freeFile: [],
        file: [],
        protectedFile: [],
        resourcesClassification: [],
        isDownload: [],
        jsek_resourceBrief: [],
        jsek_link: [],
        accessType: [],
        learnSelectType: [],
      },
      pading: {
        start: 0,
        size: 999,
      },
    };
    let data = await app.MG.store.getProductDetail(query);
    const flag = data.datas.cmsDatas[0].datas.findIndex(
      (item) => item.sysType == "CmsItem"
    );
    if (flag > -1)
      data.datas.cmsDatas[0].datas = data.datas.cmsDatas[0].datas.filter(
        (item) => item.sysType == "CmsItem"
      );
    data.datas.cmsDatas[0].datas.forEach((item) => {
      //   if (item.sysType == "CmsFolder" && flag > -1) {
      //     item.isShow = false;
      //   } else {
      //     item.isShow = true;
      //   }
      this.data.resourceClassList.forEach((type) => {
        if (type.value == item.resourcesClassification)
          item.resourceClass = type.name;
      });
      // 网页 不能下载 私有文件
      if (item.sysType == "CmsItem") {
        if (item.selectType == "webpage") {
          item.disabled = true;
        } else {
          if (item.isDownload != 1) {
            item.disabled = true;
          }
        }
        if (item.file) {
          if (item.fileMap[item.file].protectType == "Private")
            item.disabled = true;
        }
      }
    });
    data.datas.cmsDatas[0].datas.forEach((item) => {
      if (this.data.tabValue == "jsek_teachingResources") {
        item.checked = false;
      } else if (this.data.tabValue == "jsek_cloudLearning") {
        item.checked = false;
        item.isbuy = this.resourceIsBuy(item);
        item.isShopCar = this.isShoppingCart(item);
      }
    });
    return data.datas.cmsDatas[0].datas;
  },
  // 获取展开项
  findChildIds(data, result) {
    let index = 0;
    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);
          for (let j = 0; j < item.children.length; j++) {
            if (index < 3) {
              const childrenItme = item.children[j];
              if (item.children && item.children.length > 0) {
                result.push(childrenItme.id);
                index += 1;
    let index = 0
    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.children && item.children.length > 0) {
          result.push(item.id);
          index += 1;
        } else {
          break
        }
      } else {
        break;
      }
    }
  },
  // 图书添加购物车
@@ -894,21 +1203,16 @@
      res.datas.forEach((item) => {
        shoppingCartGetId.push(item.saleMethod.id);
      });
      console.log(shoppingCartGetId, "shoppingCartGetId");
      console.log(this.data.selectedIds, "销售方式id");
      const determine = shoppingCartGetId.some(
        (item) => item == this.data.selectedIds
      );
      console.log(determine);
      if (!determine) {
        let query = {
          requests: [
            {
              saleMethodId: this.data.selectedIds,
              storeEventId: null,
              agentCode: "电子书",
            },
          ],
          requests: [{
            saleMethodId: this.data.selectedIds,
            storeEventId: null,
            agentCode: "电子书",
          }, ],
        };
        const addRes = app.MG.store.addShoppingCart(query);
        this.showSuccessToast();
@@ -941,37 +1245,44 @@
  },
  async buyBook() {
    console.log(
      this.data.bookItemDetail.defaultSaleMethodId,
      "this.data.bookItemDetail.defaultSaleMethodId"
    );
    if (!this.data.expire) {
      let bookOrdersId = "";
      let query = {
        remarks: "电子书",
        requests: [
          {
            saleMethodId: this.data.bookItemDetail.defaultSaleMethodId
              ? this.data.bookItemDetail.defaultSaleMethodId
              : this.data.bookDetail.defaultSaleMethodId,
            count: 1,
          },
        ],
        requests: [{
          saleMethodId: this.data.bookItemDetail.defaultSaleMethodId ?
            this.data.bookItemDetail.defaultSaleMethodId : this.data.bookDetail.defaultSaleMethodId,
          count: 1,
        }, ],
      };
      // 发起订单初始化请求并等待结果
      const res = await app.MG.store.initOrder(query);
      // 获取订单号并赋值给 orderNumber.value
      bookOrdersId = res.orderNumber;
      console.log(bookOrdersId);
      // 检查订单号是否存在
      if (bookOrdersId) {
        const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId;
        wx.navigateTo({
          url,
        });
      } else {
        console.log(222);
      }
        if (this.data.bookDetail.price == "0.00") {
          app.MG.store
            .confirmOrder({
              orderNum: bookOrdersId,
            })
            .then((res) => {
              if (res) {
                wx.showToast({
                  title: "领取成功",
                  icon: "none",
                  duration: 1000,
                });
                this.getBookInfo(this.data.bookDetail.id);
              }
            });
        } else {
          const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId + '&onNorderSaleMethod=' + res.saleMethodLinks[0].orderSaleMethod.id;
          wx.navigateTo({
            url,
          });
        }
      } else {}
    } else {
      wx.showToast({
        title: "商品不在有效期",
@@ -1022,7 +1333,6 @@
              applyState: "Normal",
              deadline: "永久",
            });
            console.log("有效日期", this.data.deadline);
          } else {
            let endTime = new Date(endDate + " 23:59:59").getTime();
            this.setData({
@@ -1057,12 +1367,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,
    });
@@ -1080,14 +1390,12 @@
          cmsTypeRefCode: "",
          newDataListRequest: [],
          name: this.data.bookDetail.name, // name为申请的书本名称
          content: JSON.stringify([
            {
              name: this.data.bookDetail.name,
              id: this.data.bookDetail.id,
              // defaultSaleMethodId: bookData.value.defaultSaleMethodId,
              icon: this.data.bookDetail.icon,
            },
          ]),
          content: JSON.stringify([{
            name: this.data.bookDetail.name,
            id: this.data.bookDetail.id,
            // defaultSaleMethodId: bookData.value.defaultSaleMethodId,
            icon: this.data.bookDetail.icon,
          }, ]),
        };
        app.MG.ugc.newTopicMessage(query).then(async (res) => {
          if (res) {
@@ -1102,9 +1410,10 @@
        wx.showModal({
          title: "尊敬的用户,您好!",
          content: "请先进行教师认证!",
          confirmColor: "#ff6c00",
          cancelColor: "#949494",
          complete: (res) => {
            if (res.cancel) {
            }
            if (res.cancel) {}
            if (res.confirm) {
              wx.navigateTo({
                url: "/packageDomain/pages/teacherCertification/index",
@@ -1117,9 +1426,10 @@
      wx.showModal({
        title: "尊敬的用户,您好!",
        content: "请先进行教师认证!",
        confirmColor: "#ff6c00",
        cancelColor: "#949494",
        complete: (res) => {
          if (res.cancel) {
          }
          if (res.cancel) {}
          if (res.confirm) {
            wx.navigateTo({
              url: "/packageDomain/pages/teacherCertification/index",
@@ -1146,9 +1456,10 @@
      wx.showModal({
        title: "尊敬的用户,您好!",
        content: "请先进行教师认证!",
        confirmColor: "#ff6c00",
        cancelColor: "#949494",
        complete: (res) => {
          if (res.cancel) {
          }
          if (res.cancel) {}
          if (res.confirm) {
            wx.navigateTo({
              url: "/packageDomain/pages/teacherCertification/index",
@@ -1274,9 +1585,40 @@
  // 判断资源是否购买
  resourceIsBuy(data) {
    if (data.saleMethod && data.saleMethod.length) {
      const saleData = data.saleMethod.find((item) => item.SaleType == 'Normal')
      if (saleData.State == 'Disable') return false
      const isShow = this.data.buyIdList.some(
        (item) => item == saleData.Id
      );
      // 已经购买
      if (isShow) return false
      // 未购买,查看销售方式是否过期
      if (!isShow) {
        const flag = new Date(saleData.EndDate).getTime() >= new Date().getTime() &&
          new Date(saleData.BeginDate).getTime() <= new Date().getTime()
        if (flag) {
          // 为过期 ,需要购买
          return true
        } else {
          // 已过期 无需购买
          return false
        }
      }
    } else {
      return false;
    }
  },
  // 云学习资源是否显示锁图标(未购买,且资源售价大于零)
  isShowNeedBuy(data) {
    if (data.saleMethod && data.saleMethod.length) {
      const isSHow = this.data.buyIdList.some(
        (item) => item == data.saleMethod[0].Id
      );
      if (isSHow) {
        return false;
      } else {
        return data.saleMethod[0].Price > 0 ? true : false;
      }
      return !isSHow;
    } else {
      return false;
@@ -1304,20 +1646,30 @@
  // 判断资源加入购物车按钮是否显示
  isShoppingCart(data) {
    if (data.saleMethod && data.saleMethod.length) {
      if (data.saleMethod[0].Price <= 0) return false;
      const saleData = data.saleMethod.find((item) => item.SaleType == 'Normal')
      // 先判断是否免费
      if (saleData.Price <= 0) return false
      // 再判断是否购买
      const isBuy = this.data.buyIdList.some(
        (item) => item == data.saleMethod[0].Id
      );
      const isBuy = this.data.buyIdList.some((item) => item == saleData.Id)
      if (isBuy) {
        // 购买了
        return false;
        return false
      } else {
        // 判断是否加入购物车
        const isSHow = this.data.shoppingCartGetId.some(
          (item) => item == data.saleMethod[0].Id
        );
        return !isSHow;
        const isShow = this.data.shoppingCartGetId.some((item) => item == saleData.Id)
        if (isShow) return false
        // 未购买,查看销售方式是否过期
        if (!isShow) {
          const flag = new Date(saleData.EndDate).getTime() >= new Date().getTime() &&
            new Date(saleData.BeginDate).getTime() <= new Date().getTime()
          if (flag) {
            // 为过期 ,需要购买
            return true
          } else {
            // 已过期 无需购买
            return false
          }
        }
      }
    } else {
      return false;
@@ -1328,16 +1680,16 @@
    const isSHow = this.data.shoppingCartGetId.some(
      (item) => item == data.saleMethod[0].Id
    );
    console.log(isSHow);
    return !isSHow;
  },
  //刷新购物车图标
  updateCloudLearning() {
    this.getBookInfo()
    this.getShoppingCartProductGet()
    const checkData = this.data.cmsDatas.find(
      (item) => item.refCode == "jsek_cloudLearning"
    );
    this.getResourceData(checkData);
    debugger;
    console.log(55555);
    this.getResourceDataList(checkData);
  },
  // 遍历树结构转换为数组方法
  handleTreeData(array) {
@@ -1351,7 +1703,7 @@
        flattenedArray.push(...childrenArray);
      }
    });
    return flattenedArray.filter((item) => item.sysType == "CmsItem");
    return flattenedArray;
  },
  // 云学习一键领取
  async getFreeResource() {
@@ -1366,19 +1718,34 @@
          // 出现错误,返回false
        }
      });
    }
    // 领取查看 ,先看云学习上的  再看资源上的
    const cloundMenu = this.data.resourceCodeList.find((item) => item.refCode == 'jsek_cloudLearning')
    const cloundMenuSaleMethod =
      cloundMenu.saleMethod && cloundMenu.saleMethod.length ?
      cloundMenu.saleMethod.find((ditem) => ditem.SaleType == 'Normal') :
      undefined
    let query = {}
    if (this.data.isCloundHaveSaleMethod && !cloundMenuSaleMethod.Price) {
      // 云学习上有销售方式,且为0元,直接领取云学习
      query = {
        remarks: '云学习',
        requests: [{
          saleMethodId: cloundMenuSaleMethod.Id,
          count: 1
        }]
      }
    } else {
      let arr = this.handleTreeData(this.data.learn).filter((item) =>
        this.resourceIsBuy(item)
      );
      // 领取资源
      let arr = this.handleTreeData(this.data.learn).filter(item => this.resourceIsBuy(item))
      let freeIds = arr.filter((item) => {
        return item.saleMethod[0].Price == 0;
      });
        return item.saleMethod.find((citem) => citem.SaleType == 'Normal').Price == 0
      })
      if (!freeIds.length)
        return wx.showToast({
          icon: "error",
          title: "暂无免费资源",
        });
      child.changeReceive(true);
      let requests = [];
      freeIds.forEach((item, index) => {
        if (this.resourceIsBuy(item)) {
@@ -1388,27 +1755,35 @@
          });
        }
      });
      let query = {
      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);
    }
    child.changeReceive(true);
    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);
        this.getResourceDataList({
          refCode: 'jsek_cloudLearning',
          productLinkPath: this.data.learnPath
        })
        this.setData({
          successOrderNumber: confirmOrderRes.orderNumber
        })
      }
    } catch (error) {
      console.log(error);
    }
  },
  // 云学习一键购买
@@ -1423,7 +1798,8 @@
        },
      });
    }
    let shopList = this.handleTreeData(this.data.learn).filter((item) =>
    let shopList = this.handleTreeData(this.data.learn).filter(item => item.cmsType == 'cmsItem')
    shopList = shopList.filter((item) =>
      this.resourceIsBuy(item)
    );
    this.getShoppingCartProductGet();
@@ -1459,6 +1835,11 @@
        title: "请重试",
      });
    }
  },
  // 云学习字段购买
  async buyCloundMenu() {
    const cloundData = this.data.resourceCodeList.find(item => item.refCode == 'jsek_cloudLearning')
  },
  // 变为所有check   true
  findAndUpdateItemsByIds(tree, ids) {
@@ -1504,9 +1885,9 @@
        if (new RegExp("(" + k + ")").test(fmt)) {
          fmt = fmt.replace(
            RegExp.$1,
            RegExp.$1.length == 1
              ? o[k]
              : ("00" + o[k]).substr(("" + o[k]).length)
            RegExp.$1.length == 1 ?
            o[k] :
            ("00" + o[k]).substr(("" + o[k]).length)
          );
        }
      }
@@ -1517,6 +1898,8 @@
  },
  // 获取组卷答题数据
  getMockData() {
    // const child = this.selectComponent("#test-resource");
    // if (child) child.changeTestLoaidng(true);
    this.setData({
      "mockData.useCount": 0,
      "mockData.mockList": [],
@@ -1560,12 +1943,10 @@
    try {
      let query = {
        remarks: "组卷",
        requests: [
          {
            saleMethodId: this.data.mockData.id,
            count: 1,
          },
        ],
        requests: [{
          saleMethodId: this.data.mockData.id,
          count: 1,
        }, ],
      };
      if (this.data.flag) {
        this.setData({
@@ -1615,13 +1996,11 @@
    });
    // 记录购买时间,并设状态state为1,表示刚购买完成组卷
    app.MG.identity.setUserKey({
      setKeyRequests: [
        {
          domain: "mockData",
          key: this.data.bookDetail.id + "",
          value: JSON.stringify(this.data.mockData.mockList),
        },
      ],
      setKeyRequests: [{
        domain: "mockData",
        key: this.data.bookDetail.id + "",
        value: JSON.stringify(this.data.mockData.mockList),
      }, ],
    });
  },
  // 获取相关图书
@@ -1646,38 +2025,53 @@
      },
    };
    app.MG.store.getProductList(query).then((res) => {
      console.log("完整相关图书", res.datas);
      const Arr = res.datas.filter(
        (item) => item.id != this.data.bookDetail.id
      );
      let bookArr = [];
      // if (Arr.length > 3) {
      //   for (var i = 0; i < 3; i++) {
      //     var _num = Math.floor(Math.random() * Arr.length);
      //     var mm = Arr[_num];
      //     Arr.splice(_num, 1);
      //     bookArr.push(mm);
      //   }
      // } else {
      //   bookArr = Arr;
      // }
      if (Arr.length > 9) {
        for (var i = 0; i < 9; i++) {
          var _num = Math.floor(Math.random() * Arr.length);
          var mm = Arr[_num];
          Arr.splice(_num, 1);
          bookArr.push(mm);
        }
      } else {
        bookArr = Arr;
      }
      this.setData({
        relatedBookData: Arr,
        relatedBookData: bookArr,
        relatedBookLoading: false,
      });
      if (!this.data.relatedBookData.length)
        this.setData({
          noRelatedBookData: true,
        });
      console.log("相关图书", this.data.relatedBookData);
    });
  },
  goBookDetails(e) {
    console.log(e);
    this.setData({
      tabValue: "brief",
      pageLoading: true,
    });
    let bookPathList = wx.getStorageSync("bookPathList");
    const bookPath = {
      id: this.data.bookDetail.id,
      name: this.data.bookDetail.name,
    };
    if (bookPathList) {
      bookPathList = JSON.parse(bookPathList);
      if (bookPathList.length > 8) bookPathList.shift();
      bookPathList.push(bookPath);
    } else {
      bookPathList = [bookPath];
    }
    wx.setStorageSync("bookPathList", JSON.stringify(bookPathList));
    this.setData({
      learn: [],
      teach: []
    })
    this.onLoad({
      id: e.detail.id,
      name: e.detail.name,
@@ -1705,8 +2099,7 @@
      return false;
    }
    wx.navigateTo({
      url:
        "/packageBookService/pages/components/webView/index?md5=" +
      url: "/packageBookService/pages/components/webView/index?md5=" +
        this.data.fileInfo.md5 +
        "&fileName=" +
        this.data.fileInfo.bookName +
@@ -1718,6 +2111,7 @@
        this.data.bookBuy +
        "&bookId=" +
        this.data.bookDetail.id,
    });
  },
@@ -1782,6 +2176,19 @@
            list.push(item);
          }
        });
        const smBook = list.find(item => item.content[0].id == this.data.bookDetail.id)
        if (smBook && smBook.state == 'Normal') {
          const flag = new Date(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,
        });
@@ -1818,7 +2225,23 @@
  //申请电子样书
  appplyElectronicBook() {
    console.log(this.data.bookDetail);
    // 先判断下教师认证,未对原有逻辑修改
    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
@@ -1841,14 +2264,7 @@
          });
          return false;
        }
        if (this.data.electronicBookList.length >= 2) {
          wx.showToast({
            title: "每次最多只可申请2本样书",
            icon: "none",
            duration: 1000,
          });
          return false;
        }
        let isHas = this.data.electronicBookList.find(
          (eitem) => eitem.id == this.data.bookDetail.id
        );
@@ -1861,11 +2277,31 @@
          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) {
          if (isApply.state == 'WaitAudit') {
            wx.showToast({
              title: "该书已申请!",
              icon: "none",
              duration: 1000,
            });
            return false;
          } else if (isApply.state == 'Normal') {
            const flag = new Date(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({
            title: "该书已申请!",
            title: "每次最多只可申请2本样书",
            icon: "none",
            duration: 1000,
          });
@@ -1876,13 +2312,14 @@
        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) {
            }
            } else if (res.cancel) {}
          },
        });
      }
@@ -1896,6 +2333,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
@@ -1911,14 +2364,18 @@
          });
          return false;
        }
        if (this.data.paperBookList.length >= 2) {
        let isApply = this.data.alreadyPaperBookList.find(
          (pitem) => pitem.content[0].id == this.data.bookDetail.id
        );
        if (isApply) {
          wx.showToast({
            title: "每次最多只可申请2本样书",
            title: "该书已申请!",
            icon: "none",
            duration: 1000,
          });
          return false;
        }
        let isHas = this.data.paperBookList.find(
          (pitem) => pitem.id == this.data.bookDetail.id
        );
@@ -1930,12 +2387,9 @@
          });
          return false;
        }
        let isApply = this.data.alreadyPaperBookList.find(
          (pitem) => pitem.id == this.data.bookDetail.id
        );
        if (isApply) {
        if (this.data.paperBookList.length >= 2) {
          wx.showToast({
            title: "该书已申请!",
            title: "每次最多只可申请2本样书",
            icon: "none",
            duration: 1000,
          });
@@ -1946,13 +2400,14 @@
        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) {
            }
            } else if (res.cancel) {}
          },
        });
      }
@@ -1986,13 +2441,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,
@@ -2037,4 +2492,301 @@
      teach: tree,
    });
  },
});
  // 剔除树结构多余,只保留初始需要展开的
  // 第一步:保留树结构前两层,并将展开项加入数组
  deleteTreeData(list, openids) {
    let resultList = []
    for (let index = 0; index < list.length; index++) {
      const item = list[index];
      if (item.children.length > 0) {
        for (let cindex = 0; cindex < item.children.length; cindex++) {
          const citem = item.children[cindex];
          citem.children = []
        }
      }
      resultList.push(item)
    }
    for (let index = 0; index < openids.length; index++) {
      const id = openids[index];
      // 展开项加入数组
      this.increaseTreeData(list, resultList, id)
    }
    return resultList
  },
  // 传递ids,将需要展开的id的children 赋值
  increaseTreeData(treeList, list, openid) {
    let num = 0;
    // let useData = treeList.find(item => item.id == openid)
    for (let index = 0; index < treeList.length; index++) {
      const item = treeList[index];
      if (item.id == openid && num >= 3) {
        let useArr = item.children ? item.children : []
        this.changeList(list, openid, useArr)
      } else {
        num += 1
        this.increaseTreeData(item.children, list, openid)
      }
    }
  },
  // 递归前两层,找出需要展开的
  changeList(isList, id, childrenList) {
    for (let dindex = 0; dindex < isList.length; dindex++) {
      const ditem = isList[dindex];
      if (ditem.id == id) {
        ditem.children = childrenList
        return true
      } else {
        this.changeList(ditem.children, id, childrenList)
      }
    }
    return childrenList
  },
  uploadFile(e) {
    this.setData({
      dialogBox: true,
      isShowUp: true
    });
  },
  closeDialog() {
    this.setData({
      dialogBox: false,
      resourceInfo: {
        resourceName: '',
        fileType: '',
        description: '',
        agree: false
      },
    });
  },
  onCloseProtocol() {
    this.setData({
      protocolShow: false,
    });
  },
  onVisibleChange(e) {
    this.setData({
      protocolShow: e.detail.visible,
    });
  },
  //查看协议
  getAgreement() {
    let query = {
      path: 'jsek_protocol',
      fields: {
        content: [],
      }
    }
    app.MG.resource.getItem(query).then((res) => {
      try {
        const data = res.datas.find((e) => e.refCode == 'jsek_authorizationAndConsentLetter')
        this.setData({
          protocolTxt: data && data.content ? data.content : '暂无协议',
          protocolShow: true
        });
      } catch (error) {
        this.setData({
          protocolTxt: '暂无协议',
          protocolShow: true,
        });
      }
    })
  },
  onNameInput(e) {
    this.setData({
      'resourceInfo.resourceName': e.detail.value,
    });
  },
  onResourcePicker(e) {
    this.setData({
      resourceValue: [this.data.resourceInfo.fileType],
      resourceVisible: true,
    });
  },
  onPickerChange(e) {
    const {
      value
    } = e.detail;
    this.setData({
      resourceVisible: false,
      resourceValue: value,
      'resourceInfo.fileType': value.join(' '),
    });
  },
  onPickerCancel(e) {
    this.setData({
      resourceVisible: false,
    });
  },
  textareaChange(e) {
    this.setData({
      'resourceInfo.description': e.detail.value,
    });
  },
  onChange() {
    if (this.data.resourceInfo.agree) {
      this.setData({
        'resourceInfo.agree': false,
      });
    } else {
      this.setData({
        'resourceInfo.agree': true,
      });
    }
  },
  uploadPicture() {
    var that = this;
    wx.chooseMessageFile({
      count: 1,
      type: 'file',
      success(res) {
        const isLt2M = res.tempFiles[0].size / 1024 / 1024 < 50
        if (!isLt2M) {
          return wx.showToast({
            title: "上传文件大小不能超过 50MB!",
            icon: "none",
            duration: 1000,
          });
        }
        const FileName = res.tempFiles[0].name.split('.')[0]
        const Extension = res.tempFiles[0].name.split('.')[1]
        var medioType = ''
        const audioData = ['mp3', 'mp3']
        const videoData = ['mp4', 'avi']
        const pdfData = ['pdf']
        const Compression = ['rar', 'zip']
        const pictureData = ['jpg', 'png']
        const documentData = ['doc', 'docx', 'xls', 'xlsx', "ppt", "pptx"]
        if (audioData.indexOf(Extension) > -1) {
          medioType = '音频'
        } else if (videoData.indexOf(Extension) > -1) {
          medioType = '视频'
        } else if (pdfData.indexOf(Extension) > -1) {
          medioType = 'PDF'
        } else if (Compression.indexOf(Extension) > -1) {
          medioType = '资源包'
        } else if (pictureData.indexOf(Extension) > -1) {
          medioType = '图片'
        } else if (documentData.indexOf(Extension) > -1) {
          medioType = '文档'
        } else {
          medioType = '其他'
        }
        wx.getFileSystemManager().getFileInfo({
          filePath: res.tempFiles[0].path, //选择图片返回的相对路径
          // encoding: 'binary', //编码格式
          success: ress => {
            //成功的回调
            let md5 = ress.digest;
            let formData = new FormData();
            formData.append('Md5', md5);
            formData.append('FileName', FileName);
            formData.append('FileType', res.tempFiles[0].type);
            formData.appendFile("file", res.tempFiles[0].path);
            const data = formData.getData();
            let _token = wx.getStorageSync(app.config.tokenKey);
            let header = {};
            if (_token == null) {
              header["Authorization"] = `Basic ${Base64.encode(website.clientId + ":" + website.clientSecret)}`;
            } else {
              header["Authorization"] = `Bearer ` + _token;
            }
            new Promise((resolve, reject) => {
              wx.request({
                url: app.config.requestCtx + '/file/api/ApiUpload',
                method: 'POST',
                header: {
                  'content-type': data.contentType,
                  ...header
                },
                data: data.buffer,
                success(res1) {
                  resolve(res1.data);
                  if (res1.data) {
                    let file = [{
                      name: res.tempFiles[0].name,
                      md5: md5,
                      type: medioType,
                      FileType: Extension
                    }]
                    that.setData({
                      "resourceInfo.resourceName": FileName,
                      "resourceInfo.fileType": medioType,
                      fileList: file,
                      isShowUp: false
                    })
                  }
                }
              })
            })
          }
        })
      }
    })
  },
  handleRemove(e) {
    this.setData({
      isShowUp: true,
      fileList: []
    });
  },
  confirmM() {
    if (this.data.resourceInfo.resourceName == '') {
      return wx.showToast({
        icon: "error",
        title: "请填写资源名称",
      });
    }
    if (this.data.resourceInfo.fileType == '') {
      return wx.showToast({
        icon: "error",
        title: "请选择资源类型",
      });
    }
    if (!this.data.fileList.length) {
      return wx.showToast({
        icon: "error",
        title: "请上传资源文件",
      });
    }
    if (!this.data.resourceInfo.agree) {
      return wx.showToast({
        icon: "none",
        title: "请同意《授权同意书》!",
      });
    }
    let query = {
      topicIdOrRefCode: "uploadFiles",
      name: this.data.bookDetail.name,
      content: JSON.stringify(JSON.parse(JSON.stringify(this.data.fileList))),
      type: 'UserSubmit',
      description: this.data.resourceInfo.description,
      cmsTypeRefCode: '',
      newDataListRequest: []
    }
    app.MG.ugc.newTopicMessage(query).then((res) => {
      wx.showToast({
        icon: "success",
        title: "请上传资源文件",
      });
      this.closeDialog()
    })
  },
  getCloundIsBuy() {
    let flag = false
    if (!this.data.isCloundHaveSaleMethod) flag = false
    const cloundData = this.data.resourceCodeList.find(item => item.refCode == 'jsek_cloudLearning')
    const saleData = cloundData.saleMethod.find(item => item.SaleType == "Normal")
    if (!saleData) flag = false
    flag = this.data.buyIdList.some(item => item == saleData.Id)
    this.setData({
      cloundMenuIsBuy: flag
    })
  }
})