bug
闫增涛
2024-09-09 606018855ad2d5ad55f527b76e9652fdb58ed982
pages/digitalCourses/digitalCoursesDetails/index.js
@@ -1,5 +1,11 @@
// pages/digitalCourses/digitalCoursesDetails/index.js
const app = getApp()
import SparkMD5 from 'spark-md5'
import FormData from '../../../utils/formdata/index.js';
import Wxml2Canvas from 'wxml2canvas';
import {
  worksDataBytool
} from "../../../assets/js/toolClass.js";
import moment from 'moment'
import Toast from "tdesign-miniprogram/toast";
import {
@@ -47,12 +53,20 @@
    onlineQuestioningClick: {
      name: "/static/images/digitalCourses/tiwen-click@2x.png"
    },
    testResourceClickIocn: {
      name: "/static/images/digitalTextbooks/link-t-click@3x.png",
    },
    testResourceIocn: {
      name: "/static/images/digitalTextbooks/link-t@3x.png",
    },
    relationTextBook: null,
    isTextBookBuy: false,
    dialogBox: false,
    lecturerList: [],
    selectActive: 'learn',
    learnList: [],
    testList: [],
    testCount: 0,
    openTeachids: [],
    onlineQuestionsList: [],
    //分页
@@ -71,11 +85,25 @@
    closeBtn: false,
    deleteBtn: false,
    bookId: '',
    bookPath: '',
    playerList: [],
    worksInfo: [],
    isCertificate: {},
    isLearn: false,
    isTest: false,
    userInfo: {
      fullName: '', //名称
      userPicture: '' //申请证书用户图片
    },
    userName: '',
    pictureMd5: '',
    publishingUnit: '',
    pubCertificateHide: true,
    cbzsImg: '', //出版证书base64
    rzzsImg: '', //认证证书base64
    imageWidth: '', //画在画布上的图片的宽度
    imageHeight: '', //画在画布上的图片的高度
    website: 'https://jsek.bnuic.com',
  },
  formatDate(dateString) {
    if (!dateString) {
@@ -127,12 +155,28 @@
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    let parentPath = options.path.split('\\');
    parentPath.pop();
    this.setData({
      bookId: options.id
      bookId: options.id,
      bookPath: parentPath.join('\\')
    })
    const token = wx.getStorageSync(app.config.tokenKey)
    if (!token) {
      loginInfo(app, (data) => {
        if (data) {
          this.digitalCoursesDetailsGet(options.id)
          this.getPlayerList()
          this.getType()
        } else {}
      })
    }
    this.digitalCoursesDetailsGet(options.id)
    this.getPlayerList()
    this.getResource()
    this.getType()
    this.setData({
      userName: JSON.parse(wx.getStorageSync(app.config.userInfoKey)).name,
    })
  },
  /**
@@ -195,7 +239,6 @@
          this.setData({
            playerList: JSON.parse(res[0].value)
          })
          console.log(this.data.playerList, "playerList")
        }
      })
  },
@@ -237,8 +280,7 @@
        //epub试读百分比
      }
    }
    app.MG.store.getProductDetail(query).then(res => {
      console.log(res);
    app.MG.store.getProductDetail(query).then(async res => {
      if (res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)) {
        this.setData({
          isBuy: true
@@ -259,12 +301,15 @@
          expire: res.false
        })
      }
      res.datas.publicationDate = this.formatDate(res.datas.publicationDate)
      res.datas.publicationDate = moment(res.datas.publicationDate).format('YYYY年MM月')
      res.datas.price = res.datas.price.toFixed(2)
      res.datas.oldPrice = res.datas.oldPrice.toFixed(2)
      wx.setNavigationBarTitle({
        title: res.datas.name,
      })
      if (res.datas.publishingUnit) {
        await this.getBookPublishUnit(res.datas.publishingUnit)
      }
      let lecturer = []
      if (res.datas.datas.speaker && res.datas.datas.speaker.length > 0) {
        res.datas.datas.speaker.forEach(item => {
@@ -282,7 +327,16 @@
          }
        })
      }
      if (this.data.bookPath) {
        this.getAboutBook(this.data.bookPath)
      } else {
        this.getAboutBook(res.datas.productLinkInfo[res.datas.productLinkInfo.length - 1].LinkPath)
      }
      this.getCertificateList()
      res.datas.content = res.datas.content && res.datas.content.replace('../', app.config.requestCtx + '/').replace(
        /\<img/gi,
        '<img style="max-width:100%;height:auto;display:block;margin-top:0;margin-bottom:0;"'
      )
      this.setData({
        lecturerList: lecturer,
        digitalsData: res.datas,
@@ -290,14 +344,40 @@
      })
    })
  },
  //获取图书出版单位
  async getBookPublishUnit(listStr) {
    let query = {
      refCodes: ['publishingUnit']
    }
    await app.MG.store.getProductTypeField(query).then((res) => {
      const list = JSON.parse(listStr)
      let dataList = []
      list.forEach((unit) => {
        JSON.parse(res[0].config).option.forEach((item) => {
          if (item.value == unit) {
            dataList.push(item.name)
          }
        })
      })
      if (dataList.length == list.length) {
        this.setData({
          publishingUnit: dataList.join('  '),
        })
      }
    })
  },
  onTabsChange(event) {
    const value = event.detail.value
    this.setData({
      tabValue: value
    })
    console.log(this.data.tabValue);
    if (this.data.tabValue == 1) {
      this.saveAsImage()
    }
    if (this.data.tabValue == 2) {
      this.getResource()
      this.getRelationBook()
    }
    if (this.data.tabValue == 3) {
      this.selectComponent("#note").getNoteList();
@@ -308,7 +388,6 @@
  },
  selectChange(event) {
    console.log(event)
    const value = event.target.dataset.value
    this.setData({
      selectActive: value
@@ -350,6 +429,7 @@
        res.datas.cmsDatas[0].datas.forEach((item) => {
          if (item.type == 'questionBankFolder' || item.type == 'questionBankItem') {
            test.push(item)
          } else if (item.type != "resourceItem") {
            this.data.playerList.forEach(pItem => {
              if (pItem.cmsItemId == item.id) {
@@ -387,6 +467,7 @@
          const data = test.filter(
            (item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0
          )
          if (data.length > 0) {
            let list = []
            let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
@@ -395,6 +476,7 @@
            list = this.ensureTreeConsistency(list)
            let result = [];
            this.findChildIds(list[0].children, result)
            this.countLeafNodes(list[0].children)
            this.setData({
              testList: list[0].children,
              openTeachids: result,
@@ -449,6 +531,7 @@
      i.children = []
      this.getTreeList(rootList, pathLength + addNum, i.children, i.productLinkPath, addNum)
      if (i.children.length == 0) {
        newArr[0].istry = true
        delete i.children
      }
    }
@@ -527,6 +610,144 @@
      }
    }
  },
  //在线测试获取最后一个节点数量
  countLeafNodes(tree) {
    tree.forEach(node => {
      if (!node.children || node.children.length === 0) {
        this.setData({
          testCount: this.data.testCount + 1
        })
      } else {
        this.countLeafNodes(node.children);
      }
    });
  },
  //获取关联子商品/数字教材
  getRelationBook() {
    app.MG.store.getProductList({
        path: '*',
        storeInfo: app.config.digitalCourses,
        mainProductId: this.data.digitalsData.id,
        queryType: 'Related', // 查询类型: Related:查询关联商品;SubProduct: 查询子商品;
        paging: {
          start: 0,
          size: 1
        },
        fields: {
          author: [],
          publicationDate: [],
          isbn: [],
          content: [],
          Creator: [],
          probationPage: []
        }
      })
      .then((res) => {
        if (res.datas.length > 0) {
          this.setData({
            relationTextBook: res.datas[0]
          })
          if (this.data.relationTextBook.purchasedSaleMethodIdList.includes(this.data.relationTextBook.defaultSaleMethodId)) {
            this.setData({
              isTextBookBuy: true
            })
          } else {
            this.setData({
              isTextBookBuy: false
            })
          }
        }
      })
  },
  readTextBook() {
    wx.navigateTo({
      url: '/pages/digitalCourses/digitalCoursesDetails/components/digitalRead/index?refCode=' + this.data.relationTextBook.refCode + '&tryPageCount=' + this.data.relationTextBook.probationPage + '&isTextBookBuy=' + this.data.isTextBookBuy
    })
  },
  //在线测试我的收藏、我的错题
  goMycollect(e) {
    const answertype = e.currentTarget.dataset.answertype;
    const token = wx.getStorageSync("jsek-token");
    if (!token) {
      return wx.getUserProfile({
        desc: "用户登录",
        success: (res) => {
          console.log(res);
        },
      });
    }
    wx.navigateTo({
      url: `/packageBookService/pages/bookServices/examination/examination?bookId=${
        this.data.digitalsData.id
      }&rootCmsItemId=${this.data.digitalsData.rootCmsItemId}&answerTitle=${
        answertype == "collectQuestion" ? "我的收藏" : "我的错题"
      }&answerType=${answertype}&storeInfo=${app.config.digitalCourses}`,
    });
  },
  onCorrelationBook(e) {
    const item = e.currentTarget.dataset.item;
    // this.digitalCoursesDetailsGet(item.id)
    // this.getPlayerList()
    this.onLoad({
      loading: true,
      id: item.id,
      path: item.idPath
    })
  },
  // 获取相关课程
  getAboutBook(path) {
    let query = {
      path,
      queryType: '*',
      coverSize: {
        width: 260
      },
      paging: {
        start: 0,
        size: 9
      },
      fields: {
        author: [],
        publicationDate: []
      }
    }
    app.MG.store.getProductList(query).then(res => {
      const Arr = res.datas.filter(
        (item) => item.id != this.data.digitalsData.id
      );
      let bookArr = []
      if (Arr.length) {
        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
        }
        bookArr.forEach(item => {
          if (item.icon == '') {
            item.icon = '/static/images/default-book-img.png'
          }
        })
        this.setData({
          relatedBookData: bookArr.slice(0, 6)
        })
      } else {
        this.setData({
          relatedBookData: []
        })
      }
    })
  },
  //学习笔记
  //在线提问
  // 图书添加购物车
@@ -597,7 +818,6 @@
      // 发起订单初始化请求并等待结果
      const res = await app.MG.store.initOrder(query);
      // 获取订单号并赋值给 orderNumber.value
      console.log(res, 'res456');
      bookOrdersId = res.orderNumber;
      // 检查订单号是否存在
      if (bookOrdersId) {
@@ -622,9 +842,7 @@
            url,
          });
        }
      } else {
        console.log(222);
      }
      } else {}
    } else {
      wx.showToast({
        title: "商品不在有效期",
@@ -645,7 +863,118 @@
    });
  },
  //申请证书
  async saveAsImage() {
    const that = this
    const query = wx.createSelectorQuery().in(this)
    query
      .select('#pubCertificate')
      .fields({
          // 选择需要生成canvas的范围
          size: true,
          node: true,
          scrollOffset: true,
        },
        (data) => {
          let width = data.width
          let height = data.height
          that.setData({
            imageWidth: width,
            imageHeight: height,
          })
        },
      )
      .exec()
    this.drawImage()
    query
      .select('#textCertificate')
      .fields({
          // 选择需要生成canvas的范围
          size: true,
          node: true,
          scrollOffset: true,
        },
        (data) => {
          let width = data.width
          let height = data.height
          that.setData({
            imageWidth: width,
            imageHeight: height,
          })
        },
      )
      .exec()
    this.drawImage1()
  },
  drawImage() {
    let that = this;
    let drawMyImage = new Wxml2Canvas({
      width: that.data.imageWidth,
      height: that.data.imageHeight,
      element: 'myCanvas',
      progress(percent) {},
      finish(url) {
        wx.getFileSystemManager().readFile({
          filePath: url,
          encoding: 'base64',
          success: (res) => {
            let MyImageBase64 = 'data:image/jpg;base64,' + res.data
            that.setData({
              cbzsImg: MyImageBase64,
              pubCertificateHide: false,
            })
          },
        })
      },
      error(res) {
        console.log("生成的图片失败", res)
      }
    }, this);
    let data = {
      list: [{
        type: 'wxml',
        class: '.my_canvas .my_draw_canvas', //.my_draw_canvas每个要绘制元素的类名
        limit: '.my_canvas', //my_canvas根元素类名
        x: 0,
        y: 0
      }]
    }
    drawMyImage.draw(data, that);
  },
  drawImage1() {
    let that = this;
    let drawMyImage1 = new Wxml2Canvas({
      width: that.data.imageWidth,
      height: that.data.imageHeight,
      element: 'myCanvas1',
      progress(percent) {},
      finish(url) {
        wx.getFileSystemManager().readFile({
          filePath: url,
          encoding: 'base64',
          success: (res) => {
            let MyImageBase641 = 'data:image/jpg;base64,' + res.data
            that.setData({
              rzzsImg: MyImageBase641,
              pubCertificateHide: false,
            })
          },
        })
      },
      error(res) {
        console.log("生成的图片失败", res)
      }
    }, this);
    let data = {
      list: [{
        type: 'wxml',
        class: '.my_canvas1 .my_draw_canvas1', //.my_draw_canvas每个要绘制元素的类名
        limit: '.my_canvas1', //my_canvas根元素类名
        x: 0,
        y: 0
      }]
    }
    drawMyImage1.draw(data, that);
  },
  //获取字段
  getType() {
    app.MG.resource.getCmsTypeByRefCode({
@@ -661,7 +990,7 @@
      start: 0,
      size: 9999,
      topicIdOrRefCode: 'applyCourseCertificate',
      appRefCode: config.appRefCode,
      appRefCode: app.config.appRefCode,
      sort: {
        type: 'Desc',
        field: 'CreateDate'
@@ -677,8 +1006,11 @@
          })
        }
      })
    })
  },
  onCertificate() {
    if (!this.data.isBuy) {
@@ -692,6 +1024,14 @@
    if (!this.data.isLearn) {
      wx.showToast({
        title: "您的学习任务还未完成,暂不能申请证书,加油哦!",
        icon: "none",
        duration: 1000,
      });
      return false
    }
    if (this.data.isCertificate && this.data.isCertificate.state == 'WaitAudit') {
      wx.showToast({
        title: "您申请的证书正在审核中",
        icon: "none",
        duration: 1000,
      });
@@ -714,11 +1054,132 @@
      scrollJudge: true
    })
  },
  confirmM() {
  //姓名
  onFullNameInput(e) {
    this.setData({
      dialogBox: false,
      scrollJudge: true
    })
      "userInfo.fullName": e.detail.value,
    });
  },
  uploadPicture() {
    var that = this;
    wx.chooseMedia({
      count: 1, // 默认9
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
      success: function (res) {
        wx.getFileSystemManager().readFile({
          filePath: res.tempFiles[0].tempFilePath, //选择图片返回的相对路径
          // encoding: 'binary', //编码格式
          success: ress => {
            //成功的回调
            let spark = new SparkMD5.ArrayBuffer();
            spark.append(ress.data);
            let md5 = spark.end(false);
            let formData = new FormData();
            formData.append('Md5', md5);
            formData.append('FileName', md5);
            formData.append('FileType', res.tempFiles[0].fileType);
            formData.appendFile("file", res.tempFiles[0].tempFilePath);
            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(res) {
                  if (res.statusCode == 200) {
                    resolve(res.data);
                    if (res.data) {
                      that.setData({
                        'userInfo.userPicture': app.config.requestCtx + `/file/GetPreViewImage?md5=` + md5,
                        pictureMd5: md5
                      });
                    }
                  } else {
                    reject('运行时错误,请稍后再试');
                  }
                }
              })
            })
          }
        })
      }
    });
  },
  confirmM() {
    if (this.data.userInfo.fullName) {
      if (this.data.pictureMd5 == '') {
        wx.showToast({
          title: "请上传照片",
          icon: "none",
          duration: 1000,
        });
        return false
      }
      let data = {}
      let bookInfo = {
        bookId: this.data.digitalsData.id,
        icon: this.data.digitalsData.icon,
        courseLeader: this.data.digitalsData.courseLeader,
        name: this.data.digitalsData.name,
        ISBN: this.data.digitalsData.isbn,
        affiliatedUnit: this.data.digitalsData.affiliatedUnit,
        publicationDate: this.data.digitalsData.publicationDate,
        classHours: this.data.digitalsData.classHours,
        lecturerList: this.data.lecturerList.length > 0 ?
          this.data.lecturerList[0].name : this.data.digitalsData.courseLeader,
        userPicture: this.data.pictureMd5,
        certificate: this.data.rzzsImg
      }
      data = {
        topicIdOrRefCode: 'applyCourseCertificate',
        name: this.data.userInfo.fullName,
        content: JSON.stringify(bookInfo),
        state: 'WaitAudit',
        cmsTypeRefCode: 'jsek_courseCertificate',
        type: 'applyCourse',
        newDataListRequest: worksDataBytool(this.data.worksInfo, this.data.userInfo)
      }
      app.MG.ugc
        .newTopicMessage(data)
        .then((res) => {
          wx.showToast({
            title: "已提交申请",
            icon: "none",
            duration: 1000,
          });
          this.setData({
            "userInfo.fullName": "",
            dialogBox: false,
            scrollJudge: true
          })
          this.getCertificateList()
        })
        .catch(() => {
          this.setData({
            "userInfo.fullName": "",
          })
        })
    } else {
      wx.showToast({
        title: "姓名不能为空",
        icon: "none",
        duration: 1000,
      });
    }
  },
  setCoolect() {
    // 首页测试登录功能,后续注释
@@ -783,14 +1244,14 @@
  //证书查看
  onClick1() {
    this.setData({
      images: ['/static/images/certificate/cbzs.jpg'],
      images: [this.data.cbzsImg],
      showIndex: true,
      visible: true,
    })
  },
  onClick2() {
    this.setData({
      images: ['/static/images/certificate/rzzs.jpg'],
      images: [this.data.rzzsImg],
      showIndex: true,
      visible: true,
    })
@@ -799,7 +1260,6 @@
    const {
      trigger
    } = e.detail;
    console.log(trigger);
    this.setData({
      visible: false,
    });