// 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,
|
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({
|
|
/**
|
* 页面的初始数据
|
*/
|
data: {
|
loading: true,
|
digitalsData: {},
|
expire: false, //商品或子商品销售方式是否过期
|
isBuy: false,
|
tabValue: 0,
|
learnResourceIcon: {
|
name: "/static/images/digitalTextbooks/shengshu-t@2x.png",
|
},
|
learnResourceClickIcon: {
|
name: "/static/images/digitalTextbooks/zhengshu-t-click@3x.png",
|
},
|
briefIcon: {
|
name: "/static/images/digitalTextbooks/jibenxinxi-t@2x.png",
|
},
|
briefIconClick: {
|
name: "/static/images/digitalTextbooks/jibenxinxi-t-click@3x.png",
|
},
|
courseLearning: {
|
name: "/static/images/digitalCourses/jiaoxueziyuan@2x.png"
|
},
|
courseLearningClick: {
|
name: "/static/images/digitalCourses/jiaoxueziyuan.png"
|
},
|
learningNotes: {
|
name: "/static/images/digitalCourses/biji/icon@2x.png"
|
},
|
learningNotesClick: {
|
name: "/static/images/bookService/detail/biji-click-icon.png",
|
},
|
|
onlineQuestioning: {
|
name: "/static/images/digitalCourses/tiwen@2x.png"
|
},
|
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: [],
|
//分页
|
page: 1,
|
limit: 6,
|
questionTotalCount: 0,
|
bottomLoading: false,
|
isMoreData: false,
|
noteList: [],
|
notePage: 1,
|
noteLimit: 6,
|
noteTotalCount: 0,
|
images: [],
|
visible: false,
|
showIndex: false,
|
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/home/#/digitalCourses',
|
wxShareUrl: '',
|
imgUrl: '',
|
imgUrl1: ''
|
},
|
formatDate(dateString) {
|
if (!dateString) {
|
return "";
|
}
|
const match = dateString.match(
|
/^(\d{4})\/(\d{1,2})\/(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/
|
);
|
if (!match) {
|
throw new Error("Invalid date format");
|
}
|
|
const [, year, month, day, hours, minutes, seconds] = match;
|
const date = new Date(
|
parseInt(year, 10),
|
parseInt(month, 10) - 1,
|
parseInt(day, 10),
|
parseInt(hours, 10),
|
parseInt(minutes, 10),
|
parseInt(seconds, 10)
|
);
|
|
if (isNaN(date.getTime())) {
|
throw new Error("Invalid date");
|
}
|
|
// 由于小程序环境可能不支持 Intl.DateTimeFormat,我们使用简化的格式化方法
|
const formatted = `${year}年${this.formatMonth(month)}`;
|
return formatted;
|
},
|
formatMonth(month) {
|
const months = [
|
"1月",
|
"2月",
|
"3月",
|
"4月",
|
"5月",
|
"6月",
|
"7月",
|
"8月",
|
"9月",
|
"10月",
|
"11月",
|
"12月",
|
];
|
return months[parseInt(month, 10) - 1];
|
},
|
/**
|
* 生命周期函数--监听页面加载
|
*/
|
onLoad(options) {
|
let parentPath = options.path.split('\\');
|
parentPath.pop();
|
this.setData({
|
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.setData({
|
// userName: JSON.parse(wx.getStorageSync(app.config.userInfoKey)).name,
|
// })
|
},
|
|
/**
|
* 生命周期函数--监听页面初次渲染完成
|
*/
|
onReady() {
|
|
},
|
|
/**
|
* 生命周期函数--监听页面显示
|
*/
|
onShow() {
|
if (this.data.tabValue == 2 && this.data.selectActive == 'learn') {
|
this.getPlayerList()
|
this.getResource()
|
this.getRelationBook()
|
}
|
},
|
|
/**
|
* 生命周期函数--监听页面隐藏
|
*/
|
onHide() {
|
|
},
|
|
/**
|
* 生命周期函数--监听页面卸载
|
*/
|
onUnload() {
|
|
},
|
|
/**
|
* 页面相关事件处理函数--监听用户下拉动作
|
*/
|
onPullDownRefresh() {
|
|
},
|
|
/**
|
* 页面上拉触底事件的处理函数
|
*/
|
onReachBottom() {
|
|
},
|
|
/**
|
* 用户点击右上角分享
|
*/
|
onShareAppMessage() {},
|
onShareTimeline() {},
|
//获取视频学习
|
getPlayerList() {
|
app.MG.identity
|
.getUserKey({
|
domain: 'videoPlayer',
|
keys: [this.data.bookId + '']
|
})
|
.then((res) => {
|
console.log(1, res);
|
if (res.length > 0) {
|
this.setData({
|
playerList: JSON.parse(res[0].value)
|
})
|
}
|
})
|
},
|
digitalCoursesDetailsGet(digitalTextId) {
|
let that = this;
|
let query = {
|
path: '*',
|
queryType: '*',
|
productId: digitalTextId,
|
storeInfo: 'jsek_digitalCourses',
|
coverSize: {
|
height: 300
|
},
|
fields: {
|
seriesName: [],
|
author: [],
|
isbn: [],
|
publicationDate: [],
|
speaker: [],
|
bookClassification: [],
|
paperPrice: [],
|
JDLink: [],
|
tmallLink: [],
|
dangdangLink: [],
|
weidianLink: [],
|
content: [],
|
authorIntroduction: [],
|
isApplyBook: [],
|
isSell: [],
|
pdf: [],
|
protectedEpub: [],
|
probationPage: [], //pdf试读页数
|
freeEpubPage: [],
|
courseLeader: [],
|
affiliatedUnit: [],
|
publishingUnit: [],
|
classHours: [],
|
productLinkPath: [],
|
|
//epub试读百分比
|
}
|
}
|
app.MG.store.getProductDetail(query).then(async res => {
|
if (res.datas.purchasedSaleMethodIdList.includes(res.datas.defaultSaleMethodId)) {
|
this.setData({
|
isBuy: true
|
})
|
} else {
|
this.setData({
|
isBuy: false
|
})
|
}
|
let times = new Date(res.datas.defaultSaleMethod.endDate).getTime()
|
let startTime = new Date(res.datas.defaultSaleMethod.beginDate).getTime()
|
if (times < new Date().getTime() || new Date().getTime() < startTime) {
|
this.setData({
|
expire: true
|
})
|
} else {
|
this.setData({
|
expire: res.false
|
})
|
}
|
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)
|
}
|
if (res.datas.datas.speaker && res.datas.datas.speaker.length > 0) {
|
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) {
|
lecturerList.push({
|
name: item1.name,
|
positionalTitle: item1.positionalTitle,
|
icon: item1.icon,
|
description: item1.description ? item1.description : '暂无简介'
|
})
|
}
|
})
|
}
|
})
|
this.getPositionalTitle(lecturerList)
|
}
|
})
|
},
|
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: list
|
})
|
})
|
},
|
|
//获取图书出版单位
|
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
|
})
|
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()
|
}
|
if (this.data.tabValue == 3) {
|
this.selectComponent("#note").getNoteList();
|
}
|
if (this.data.tabValue == 4) {
|
this.selectComponent("#question").getDataList();
|
}
|
},
|
|
selectChange(event) {
|
const value = event.target.dataset.value
|
this.setData({
|
selectActive: value,
|
testCount: 0
|
})
|
this.getResource()
|
},
|
|
getResource() {
|
let query = {
|
storeInfo: app.config.digitalCourses,
|
path: '*',
|
queryType: '*',
|
productId: this.data.digitalsData.id,
|
cmsPath: this.data.digitalsData.rootCmsItemId + '',
|
cmsType: '*',
|
itemFields: {
|
SysType: 'CmsFolder',
|
selectType: [],
|
freeFile: [],
|
file: [],
|
protectedFile: [],
|
resourcesClassification: [],
|
isDownload: [],
|
jsek_resourceBrief: [],
|
jsek_link: [],
|
jsek_questionBank: [],
|
learnSelectType: []
|
},
|
pading: {
|
start: 99,
|
size: 0
|
}
|
}
|
app.MG.store.getProductDetail(query).then((res) => {
|
let test = []
|
let learn = []
|
let learnItemList = []
|
if (res.datas.cmsDatas[0].datas.length > 0) {
|
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) {
|
item.progress = pItem.progress
|
}
|
})
|
learn.push(item)
|
}
|
if (item.type == 'productItem') {
|
learnItemList.push(item)
|
}
|
})
|
if (this.data.selectActive === 'learn') {
|
let list = []
|
// 测试 6位// 正式 5位// 测试调用传20,内部7 正式调用传17 内部传6
|
if (learn.some((item) => item.sysType == 'CmsFolder')) {
|
// 1.只有目录,没有资源
|
if (!learn.some((item) => item.sysType == 'CmsItem')) {
|
list = learn
|
} else {
|
// 2.目录和资源都有
|
this.getTreeList(learn, list, query.cmsPath)
|
list = this.ensureTreeConsistency(list)
|
}
|
} else {
|
// 3.只有资源,没有目录
|
list = learn
|
}
|
let result = [];
|
this.findChildIds(list, result)
|
if (list.length > 0) {
|
this.setData({
|
learnList: list,
|
openTeachids: result,
|
});
|
}
|
} else {
|
const data = test.filter(
|
(item) => item.type == 'questionBankFolder' && item.childrenFolderCount > 0
|
)
|
if (data.length > 0) {
|
let list = []
|
this.getTreeList(data, list, query.cmsPath)
|
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,
|
});
|
}
|
}
|
//判断资源是否学习完成
|
if (learnItemList.length == this.data.playerList.length) {
|
let data = this.data.playerList.filter((ditem) => ditem.progress != '100')
|
if (data) {
|
this.setData({
|
isLearn: false,
|
});
|
|
} else {
|
this.setData({
|
isLearn: true,
|
});
|
}
|
} else {
|
this.setData({
|
isLearn: false,
|
});
|
}
|
}
|
})
|
},
|
// 扁平化数据转换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;
|
},
|
|
// 获取展开项
|
findChildIds(data, result) {
|
let index = 0
|
for (let i = 0; i < data.length; i++) {
|
if (index < 3) {
|
const item = data[i]
|
if (item.childrenFolderCount > 0) {
|
result.push(item.id)
|
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 if (item.childrenCount > 0) {
|
result.push(item.id)
|
index += 1
|
}
|
} else {
|
break
|
}
|
}
|
},
|
|
//在线测试获取最后一个节点数量
|
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.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: []
|
})
|
}
|
})
|
},
|
//学习笔记
|
//在线提问
|
// 图书添加购物车
|
async addBookShopcCar() {
|
if (!this.data.expire) {
|
const shoppingCartGetId = [];
|
let query = {
|
start: 0,
|
size: 9999,
|
filterList: [],
|
searchList: [],
|
};
|
const res = await app.MG.store.getShoppingCartProductList(query);
|
res.datas.forEach((item) => {
|
shoppingCartGetId.push(item.saleMethod.id);
|
});
|
const determine = shoppingCartGetId.some(
|
(item) => item == this.data.digitalsData.defaultSaleMethodId
|
);
|
if (!determine) {
|
let query = {
|
requests: [{
|
saleMethodId: this.data.digitalsData.defaultSaleMethodId,
|
storeEventId: null,
|
agentCode: "电子书",
|
}, ],
|
};
|
const addRes = app.MG.store.addShoppingCart(query);
|
this.showSuccessToast();
|
} else {
|
Toast({
|
context: this,
|
selector: "#t-toast",
|
message: "该课程已在购物车,请勿重复添加",
|
theme: "warning",
|
direction: "column",
|
});
|
}
|
} else {
|
wx.showToast({
|
title: "商品不在有效期",
|
icon: "none",
|
duration: 1000,
|
});
|
}
|
},
|
showSuccessToast() {
|
Toast({
|
context: this,
|
selector: "#t-toast",
|
message: "添加成功",
|
theme: "success",
|
direction: "column",
|
});
|
},
|
|
//购买按钮
|
async buyBtn() {
|
if (!this.data.expire) {
|
let bookOrdersId = "";
|
let query = {
|
remarks: "电子书",
|
requests: [{
|
saleMethodId: this.data.digitalsData.defaultSaleMethodId,
|
count: 1,
|
}, ],
|
};
|
// 发起订单初始化请求并等待结果
|
const res = await app.MG.store.initOrder(query);
|
// 获取订单号并赋值给 orderNumber.value
|
bookOrdersId = res.orderNumber;
|
// 检查订单号是否存在
|
if (bookOrdersId) {
|
if (this.data.digitalsData.price == "0.00") {
|
app.MG.store
|
.confirmOrder({
|
orderNum: bookOrdersId,
|
})
|
.then((res) => {
|
if (res) {
|
this.digitalCoursesDetailsGet(this.data.digitalsData.id);
|
wx.showToast({
|
title: "领取成功",
|
icon: "none",
|
duration: 1000,
|
});
|
this.digitalCoursesDetailsGet(this.data.bookId);
|
}
|
});
|
} else {
|
const url = "/pages/cart/paymentPage/index?orderNumber=" + bookOrdersId + '&onNorderSaleMethod=' + res.saleMethodLinks[0].orderSaleMethod.id;
|
wx.navigateTo({
|
url,
|
});
|
}
|
} else {}
|
} else {
|
wx.showToast({
|
title: "商品不在有效期",
|
icon: "none",
|
duration: 1000,
|
});
|
}
|
},
|
|
|
|
closeDialog() {
|
const {
|
dialogKey
|
} = this.data;
|
this.setData({
|
[dialogKey]: false
|
});
|
},
|
//申请证书
|
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()
|
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() {
|
app.MG.resource.getCmsTypeByRefCode({
|
refCodes: ['jsek_courseCertificate']
|
}).then((res) => {
|
this.setData({
|
worksInfo: res[0].cmsTypeLinks[0].children,
|
})
|
})
|
},
|
getCertificateList() {
|
const data = {
|
start: 0,
|
size: 9999,
|
topicIdOrRefCode: 'applyCourseCertificate',
|
appRefCode: app.config.appRefCode,
|
sort: {
|
type: 'Desc',
|
field: 'CreateDate'
|
}
|
}
|
|
app.MG.ugc.getTopicMessageList(data).then((res) => {
|
res.datas.map((item) => {
|
item.content = JSON.parse(item.content)
|
if (item.content.bookId == this.data.bookId) {
|
this.setData({
|
isCertificate: item,
|
userName: item.content.userName,
|
userPicture: app.config.requestCtx + `/file/GetPreViewImage?md5=` + item.content.userPicture
|
})
|
}
|
})
|
})
|
},
|
|
onCertificate() {
|
if (!this.data.isBuy) {
|
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: "您申请的证书正在审核中",
|
icon: "none",
|
duration: 1000,
|
});
|
return false
|
}
|
|
var page = getCurrentPages().pop(); // 获取当前页面实例
|
page.setData({
|
// 动态设置禁止滚动的样式
|
disableScrollStyle: 'overflow: hidden;'
|
});
|
this.setData({
|
dialogBox: true,
|
scrollJudge: ''
|
})
|
},
|
closeDialog() {
|
this.setData({
|
dialogBox: false,
|
scrollJudge: true
|
})
|
},
|
|
//姓名
|
onFullNameInput(e) {
|
this.setData({
|
"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() {
|
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({
|
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,
|
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,
|
studyTime: this.data.digitalsData.beginDate + '-' + year + '-' + month + '-' + today,
|
website: this.data.website,
|
wxShareUrl: this.data.wxShareUrl
|
}
|
|
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": "",
|
})
|
})
|
}
|
} else {
|
wx.showToast({
|
title: "姓名不能为空",
|
icon: "none",
|
duration: 1000,
|
});
|
}
|
},
|
setCoolect() {
|
// 首页测试登录功能,后续注释
|
// 检查登录状态
|
const token = wx.getStorageSync(app.config.tokenKey)
|
if (!token) {
|
loginInfo(app, (data) => {
|
// 如果不是第一次登录,会执行回调
|
if (data) {
|
if (this.data.digitalsData.isFavourite) {
|
app.MG.store
|
.delProductLink({
|
productIds: [this.data.digitalsData.id],
|
linkType: 'Favoriteclass'
|
})
|
.then(() => {
|
this.setData({
|
"digitalsData.isFavourite": false
|
})
|
})
|
} else {
|
let params = {
|
productIds: [this.data.digitalsData.id],
|
linkType: 'Favoriteclass'
|
}
|
app.MG.store.addProductLink(params).then((res) => {
|
this.setData({
|
"digitalsData.isFavourite": true
|
})
|
})
|
}
|
} else {
|
// 出现错误,返回false
|
}
|
})
|
} else {
|
if (this.data.digitalsData.isFavourite) {
|
app.MG.store
|
.delProductLink({
|
productIds: [this.data.digitalsData.id],
|
linkType: 'Favoriteclass'
|
})
|
.then(() => {
|
this.setData({
|
"digitalsData.isFavourite": false
|
})
|
})
|
} else {
|
let params = {
|
productIds: [this.data.digitalsData.id],
|
linkType: 'Favoriteclass'
|
}
|
app.MG.store.addProductLink(params).then((res) => {
|
this.setData({
|
"digitalsData.isFavourite": true
|
})
|
})
|
}
|
}
|
},
|
|
//证书查看
|
onClick1() {
|
this.setData({
|
images: [this.data.cbzsImg],
|
showIndex: true,
|
visible: true,
|
})
|
},
|
onClick2() {
|
this.setData({
|
images: [this.data.rzzsImg],
|
showIndex: true,
|
visible: true,
|
})
|
},
|
onClose(e) {
|
const {
|
trigger
|
} = e.detail;
|
this.setData({
|
visible: false,
|
});
|
},
|
})
|