css
litian
2024-09-25 b471803c1a9e4c1452a98a8b3631bde66641b910
pages/digitalCourses/digitalCoursesDetails/index.js
@@ -2,16 +2,17 @@
const app = getApp()
import SparkMD5 from 'spark-md5'
import FormData from '../../../utils/formdata/index.js';
// import Wxml2Canvas from 'wxml2canvas';
// const Wxml2Canvas = require('Wxml2Canvas')
import Wxml2Canvas from 'wxml2canvas';
import {
  worksDataBytool
  worksDataBytool,
  UpdateworksDataBytool
} from "../../../assets/js/toolClass.js";
import moment from 'moment'
import Toast from "tdesign-miniprogram/toast";
import {
  loginInfo
} from '../../../assets/js/login';
import wxbarcode from 'wxbarcode'
Page({
  /**
@@ -67,6 +68,7 @@
    selectActive: 'learn',
    learnList: [],
    testList: [],
    testCount: 0,
    openTeachids: [],
    onlineQuestionsList: [],
    //分页
@@ -85,6 +87,7 @@
    closeBtn: false,
    deleteBtn: false,
    bookId: '',
    bookPath: '',
    playerList: [],
    worksInfo: [],
    isCertificate: {},
@@ -94,12 +97,18 @@
      fullName: '', //名称
      userPicture: '' //申请证书用户图片
    },
    userName: '',
    pictureMd5: '',
    publishingUnit: '',
    pubCertificateHide: true,
    cbzsImg: '', //出版证书base64
    rzzsImg: '' //认证证书base64
    rzzsImg: '', //认证证书base64
    imageWidth: '', //画在画布上的图片的宽度
    imageHeight: '', //画在画布上的图片的高度
    website: 'https://jsek.bnuic.com/home/#/digitalCourses',
    wxShareUrl: '',
    imgUrl: '',
    imgUrl1: ''
  },
  formatDate(dateString) {
    if (!dateString) {
@@ -151,13 +160,25 @@
   * 生命周期函数--监听页面加载
   */
  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.getType()
    this.getCertificateList()
  },
  /**
@@ -171,6 +192,10 @@
   * 生命周期函数--监听页面显示
   */
  onShow() {
    if (this.data.tabValue == 2) {
      this.getPlayerList()
      this.getResource()
    }
  },
@@ -205,26 +230,25 @@
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
  },
  onShareAppMessage() {},
  onShareTimeline() {},
  //获取视频学习
  getPlayerList() {
    app.MG.identity
      .getUserKey({
        domain: 'videoPlayer',
        keys: [this.data.bookId]
        keys: [this.data.bookId + '']
      })
      .then((res) => {
        if (res.length > 0) {
          this.setData({
            playerList: JSON.parse(res[0].value)
          })
          console.log(this.data.playerList, "playerList")
        }
      })
  },
  digitalCoursesDetailsGet(digitalTextId) {
    let that = this;
    let query = {
      path: '*',
      queryType: '*',
@@ -263,7 +287,6 @@
      }
    }
    app.MG.store.getProductDetail(query).then(async res => {
      console.log(res);
      if (res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)) {
        this.setData({
          isBuy: true
@@ -284,38 +307,122 @@
          expire: res.false
        })
      }
      res.datas.publicationDate = moment(res.datas.publicationDate).format('YYYY年MM月DD日')
      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 => {
          if (res.datas.subItems && res.datas.subItems.QueryCms.length > 0) {
            res.datas.subItems.QueryCms.forEach(item1 => {
        this.getSpeaker(res.datas.datas.speaker)
      } else {
        this.setData({
          lecturerList: []
        })
      }
      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({
        digitalsData: res.datas,
        loading: false,
        wxShareUrl: app.config.shareUrl + '?id=' + res.datas.id + '&path=' + this.data.bookPath + '&type=course'
      })
      if (this.data.wxShareUrl) {
        wxbarcode.qrcode('qrcode', this.data.wxShareUrl, 160, 160);
        wxbarcode.qrcode('qrcode1', this.data.wxShareUrl, 160, 160);
        setTimeout(() => {
          wx.canvasToTempFilePath({
            canvasId: 'qrcode',
            success: function (res) {
              // res.tempFilePath 包含生成的图片文件路径
              that.setData({
                imgUrl: res.tempFilePath
              })
            }
          });
          wx.canvasToTempFilePath({
            canvasId: 'qrcode1',
            success: function (res) {
              // res.tempFilePath 包含生成的图片文件路径
              that.setData({
                imgUrl1: res.tempFilePath
              })
            }
          });
        }, 1000)
      }
    })
  },
  //获取主讲人
  getSpeaker(list) {
    this.setData({
      lecturerList: []
    })
    let query = {
      path: 'jsek_speaker',
      fields: {
        content: [],
        positionalTitle: []
      },
      coverSize: {
        height: 250
      }
    }
    app.MG.resource.getItem(query).then((res) => {
      let lecturerList = []
      if (list && res.datas.length > 0) {
        list.forEach((item) => {
          if (res.datas && res.datas.length > 0) {
            res.datas.forEach((item1) => {
              if (JSON.parse(item.Data.Value).items[0] == item1.id) {
                lecturer.push({
                lecturerList.push({
                  name: item1.name,
                  icon: item1.icon ? item1.icon : '',
                  description: item1.description ? item1.description : '',
                  positionalTitle: item1.positionalTitle,
                  icon: item1.icon,
                  description: item1.description ? item1.description : '暂无简介'
                })
              }
            })
          }
        })
        this.getPositionalTitle(lecturerList)
      }
      this.getAboutBook(res.datas.productLinkInfo[res.datas.productLinkInfo.length - 1].LinkPath)
    })
  },
  async getPositionalTitle(listStr) {
    let list = []
    let query = {
      refCodes: ['positionalTitle']
    }
    await app.MG.store.getProductTypeField(query).then((res) => {
      let option = JSON.parse(res[0].config).option
      listStr.forEach((unit) => {
        option.forEach((item) => {
          if (item.value == unit.positionalTitle) {
            unit.positionalName = item.name
          }
        })
        list.push({
          name: unit.name,
          positionalTitle: unit.positionalName,
          icon: unit.icon,
          description: unit.description ? unit.description : '暂无简介'
        })
      })
      this.setData({
        lecturerList: lecturer,
        digitalsData: res.datas,
        loading: false
        lecturerList: list
      })
    })
  },
@@ -347,7 +454,12 @@
    this.setData({
      tabValue: value
    })
    console.log(this.data.tabValue);
    if (this.data.tabValue == 0) {
      this.digitalCoursesDetailsGet(this.data.bookId)
    }
    if (this.data.tabValue == 1) {
      this.saveAsImage()
    }
    if (this.data.tabValue == 2) {
      this.getResource()
      this.getRelationBook()
@@ -361,10 +473,10 @@
  },
  selectChange(event) {
    console.log(event)
    const value = event.target.dataset.value
    this.setData({
      selectActive: value
      selectActive: value,
      testCount: 0
    })
    this.getResource()
  },
@@ -414,9 +526,7 @@
          if (item.type == 'productItem') {
            learnItemList.push(item)
          }
        })
        if (this.data.selectActive === 'learn') {
          let list = []
          // 测试 6位// 正式 5位//  测试调用传20,内部7  正式调用传17 内部传6
@@ -435,11 +545,13 @@
              learnList: list,
              openTeachids: result,
            });
            console.log(1, this.data.learnList, this.data.playerList)
          }
        } else {
          const data = test.filter(
            (item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0
          )
          if (data.length > 0) {
            let list = []
            let addNum = query.cmsPath.length > 5 ? 7 : query.cmsPath.length > 6 ? 8 : 6
@@ -448,6 +560,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,
@@ -502,6 +615,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
      }
    }
@@ -581,6 +695,20 @@
    }
  },
  //在线测试获取最后一个节点数量
  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({
@@ -602,25 +730,56 @@
        }
      })
      .then((res) => {
        this.setData({
          relationTextBook: res.datas[0]
        })
        if (this.data.relationTextBook.purchasedSaleMethodIdList.includes(this.data.relationTextBook.defaultSaleMethodId)) {
        if (res.datas.length > 0) {
          this.setData({
            isTextBookBuy: true
            relationTextBook: res.datas[0]
          })
        } else {
          this.setData({
            isTextBookBuy: false
          })
          if (this.data.relationTextBook.purchasedSaleMethodIdList.includes(this.data.relationTextBook.defaultSaleMethodId)) {
            this.setData({
              isTextBookBuy: true
            })
          } else {
            this.setData({
              isTextBookBuy: false
            })
          }
        }
        console.log(this.data.relationTextBook, "jc")
      })
  },
  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.onLoad({
      loading: true,
      id: item.id,
      path: item.idPath
    })
  },
@@ -663,9 +822,8 @@
          }
        })
        this.setData({
          relatedBookData: bookArr
          relatedBookData: bookArr.slice(0, 6)
        })
        console.log(this.data.relatedBookData);
      } else {
        this.setData({
          relatedBookData: []
@@ -706,7 +864,7 @@
        Toast({
          context: this,
          selector: "#t-toast",
          message: "该书已在购物车,请勿重复添加",
          message: "该课程已在购物车,请勿重复添加",
          theme: "warning",
          direction: "column",
        });
@@ -743,7 +901,6 @@
      // 发起订单初始化请求并等待结果
      const res = await app.MG.store.initOrder(query);
      // 获取订单号并赋值给 orderNumber.value
      console.log(res, 'res456');
      bookOrdersId = res.orderNumber;
      // 检查订单号是否存在
      if (bookOrdersId) {
@@ -754,12 +911,13 @@
            })
            .then((res) => {
              if (res) {
                this.digitalCoursesDetailsGet(this.data.digitalsData.id);
                wx.showToast({
                  title: "领取成功",
                  icon: "none",
                  duration: 1000,
                });
                this.getBookInfo(this.data.bookDetail.id);
                this.digitalCoursesDetailsGet(this.data.bookId);
              }
            });
        } else {
@@ -768,9 +926,7 @@
            url,
          });
        }
      } else {
        console.log(222);
      }
      } else {}
    } else {
      wx.showToast({
        title: "商品不在有效期",
@@ -792,21 +948,120 @@
  },
  //申请证书
  async saveAsImage() {
    await nextTick()
    let query = wx.createSelectorQuery();
    let value = query.select("#pubCertificate").boundingClientRect();
    Wxml2Canvas(value).then((canvas) => {
      const img = canvas.toDataURL('image/png')
      this.setData({
        cbzsImg: img,
      })
    })
    // Wxml2Canvas(textCertificate.value).then((canvas1) => {
    //   const img1 = canvas1.toDataURL('image/png')
    //   rzzsImg.value = img1
    // })
    pubCertificateHide.value = false
    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()
    setTimeout(() => {
      this.drawImage()
    }, 500)
    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()
    setTimeout(() => {
      this.drawImage1()
    }, 500)
  },
  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() {
@@ -833,16 +1088,16 @@
    app.MG.ugc.getTopicMessageList(data).then((res) => {
      res.datas.map((item) => {
        item.content = JSON.parse(item.content)
        if (item.content.id == this.data.bookId) {
        if (item.content.bookId == this.data.bookId) {
          this.setData({
            isCertificate: item
            isCertificate: item,
            userName: item.content.userName,
            userPicture: app.config.requestCtx + `/file/GetPreViewImage?md5=` + item.content.userPicture
          })
        }
      })
    })
  },
  onCertificate() {
    if (!this.data.isBuy) {
@@ -853,14 +1108,14 @@
      });
      return false
    }
    // if (!this.data.isLearn) {
    //   wx.showToast({
    //     title: "您的学习任务还未完成,暂不能申请证书,加油哦!",
    //     icon: "none",
    //     duration: 1000,
    //   });
    //   return false
    // }
    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: "您申请的证书正在审核中",
@@ -905,7 +1160,6 @@
          // encoding: 'binary', //编码格式
          success: ress => {
            //成功的回调
            console.log(ress.data, 45613489)
            let spark = new SparkMD5.ArrayBuffer();
            spark.append(ress.data);
            let md5 = spark.end(false);
@@ -935,7 +1189,6 @@
                  if (res.statusCode == 200) {
                    resolve(res.data);
                    if (res.data) {
                      console.log(md5, "md5555")
                      that.setData({
                        'userInfo.userPicture': app.config.requestCtx + `/file/GetPreViewImage?md5=` + md5,
                        pictureMd5: md5
@@ -954,6 +1207,10 @@
  },
  confirmM() {
    let currentDate = new Date()
    let year = currentDate.getFullYear()
    let month = currentDate.getMonth() + 1
    let today = currentDate.getDate()
    if (this.data.userInfo.fullName) {
      if (this.data.pictureMd5 == '') {
        wx.showToast({
@@ -971,42 +1228,89 @@
        name: this.data.digitalsData.name,
        ISBN: this.data.digitalsData.isbn,
        affiliatedUnit: this.data.digitalsData.affiliatedUnit,
        publishingUnit: this.data.publishingUnit,
        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,
        userName: this.data.userInfo.fullName,
        userPicture: this.data.pictureMd5,
        certificate: this.data.rzzsImg
        studyTime: this.data.digitalsData.beginDate + '-' + year + '-' + month + '-' + today,
        website: this.data.website,
        wxShareUrl: this.data.wxShareUrl
      }
      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)
      if (this.data.isCertificate.id) {
        let dataRequests = UpdateworksDataBytool(
          this.data.worksInfo,
          [this.data.isCertificate],
          this.data.userInfo
        )
        data = {
          id: this.data.isCertificate.id,
          topicIdOrRefCode: 'applyCourseCertificate',
          name: this.data.userInfo.fullName,
          content: JSON.stringify(bookInfo),
          state: 'WaitAudit',
          cmsTypeRefCode: 'jsek_courseCertificate',
          type: 'applyCourse',
          newDataRequests: dataRequests.newData,
          updateDataRequests: dataRequests.updateData,
          delDataRequest: {
            ids: []
          }
        }
        app.MG.ugc
          .updateTopicMessage(data)
          .then((res) => {
            wx.showToast({
              title: "已提交申请",
              icon: "none",
              duration: 1000,
            });
            this.setData({
              "userInfo.fullName": "",
              dialogBox: false,
              scrollJudge: true
            })
            this.getCertificateList()
          })
          .catch(() => {
            btnLoading.value = false
          })
      } else {
        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": "",
            })
          })
      }
      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: "姓名不能为空",
@@ -1078,14 +1382,14 @@
  //证书查看
  onClick1() {
    this.setData({
      images: ['https://jsek.bnuic.com/home/certificate/szkc.jpg'],
      images: [this.data.cbzsImg],
      showIndex: true,
      visible: true,
    })
  },
  onClick2() {
    this.setData({
      images: ['https://jsek.bnuic.com/home/certificate/kczs.jpg'],
      images: [this.data.rzzsImg],
      showIndex: true,
      visible: true,
    })
@@ -1094,7 +1398,6 @@
    const {
      trigger
    } = e.detail;
    console.log(trigger);
    this.setData({
      visible: false,
    });