|
@@ -226,19 +226,70 @@ export default {
|
|
thumPath = require('@/assets/source/zip.png')
|
|
thumPath = require('@/assets/source/zip.png')
|
|
} else if (type === 'thum') {
|
|
} else if (type === 'thum') {
|
|
thumPath = require('@/assets/source/image.png')
|
|
thumPath = require('@/assets/source/image.png')
|
|
- }else{
|
|
|
|
|
|
+ } else {
|
|
thumPath = require('@/assets/source/link.png')
|
|
thumPath = require('@/assets/source/link.png')
|
|
}
|
|
}
|
|
return thumPath
|
|
return thumPath
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+ /* 获取文件后缀名 */
|
|
getSuffix(name) {
|
|
getSuffix(name) {
|
|
return name.substr(name.lastIndexOf(".") + 1)
|
|
return name.substr(name.lastIndexOf(".") + 1)
|
|
},
|
|
},
|
|
-
|
|
|
|
|
|
+ /* 导出表格 */
|
|
exportTable(params) {
|
|
exportTable(params) {
|
|
excel.export_array_to_excel(params)
|
|
excel.export_array_to_excel(params)
|
|
},
|
|
},
|
|
|
|
+ /* 检查音视频格式是否符合格式要求 */
|
|
|
|
+ checkMediaFile(file) {
|
|
|
|
+ return new Promise((r, j) => {
|
|
|
|
+ const getSize = () => file.size
|
|
|
|
+ const readChunk = (chunkSize, offset) =>
|
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
|
+ const reader = new FileReader()
|
|
|
|
+ reader.onload = (event) => {
|
|
|
|
+ if (event.target.error) {
|
|
|
|
+ reject(event.target.error)
|
|
|
|
+ }
|
|
|
|
+ resolve(new Uint8Array(event.target.result))
|
|
|
|
+ }
|
|
|
|
+ reader.readAsArrayBuffer(file.slice(offset, offset + chunkSize))
|
|
|
|
+ })
|
|
|
|
+ window.MediaInfo().then((media) => {
|
|
|
|
+ media.analyzeData(getSize, readChunk).then((result) => {
|
|
|
|
+ console.log(result)
|
|
|
|
+ if (result['media']) {
|
|
|
|
+ let tracks = result['media']['track']
|
|
|
|
+ // 判断是否是视频
|
|
|
|
+ let videoTrack = tracks.find(track => track['@type'] === 'Video')
|
|
|
|
+ let audioTrack = tracks.find(track => track['@type'] === 'Audio')
|
|
|
|
+ // 如果视频文件满足MP4(H264+AAC),WAV('vp8','vp9') 则代表是可以正常播放的视频文件,返回视频的编码级别
|
|
|
|
+ if (videoTrack && audioTrack) {
|
|
|
|
+ let videoFormat = videoTrack.Format.toLowerCase()
|
|
|
|
+ let audioFormat = audioTrack.Format.toLowerCase()
|
|
|
|
+ if((videoFormat === 'avc' && audioFormat === 'aac') || (['vp8','vp9'].includes(videoFormat) && audioFormat === 'vorbis')) {
|
|
|
|
+ r(videoTrack.Format_Profile || true)
|
|
|
|
+ }else{
|
|
|
|
+ r(false)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 如果是音频文件则需要满足 mp3(MPEG Audio),ogg(Vorbis),wav(PCM) 任意一种编码格式
|
|
|
|
+ else if (!videoTrack && audioTrack && ['mpeg audio','vorbis','pcm'].includes(audioTrack.Format.toLowerCase())) {
|
|
|
|
+ r(true)
|
|
|
|
+ } else {
|
|
|
|
+ r(false)
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ r(false)
|
|
|
|
+ }
|
|
|
|
+ }).catch((error) => {
|
|
|
|
+ j(error)
|
|
|
|
+ })
|
|
|
|
+ }).catch((error) => {
|
|
|
|
+ j(error)
|
|
|
|
+ })
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
/* 根据最新服务器时间获取当前所在学期的起止时间戳 */
|
|
/* 根据最新服务器时间获取当前所在学期的起止时间戳 */
|
|
getSemesterTimeRange() {
|
|
getSemesterTimeRange() {
|
|
let curServerTime = localStorage.getItem('serverTime') // 服务器时间
|
|
let curServerTime = localStorage.getItem('serverTime') // 服务器时间
|
|
@@ -312,7 +363,7 @@ export default {
|
|
range.push([
|
|
range.push([
|
|
this.tranNum([+semesters[i].month, +semesters[i].day]),
|
|
this.tranNum([+semesters[i].month, +semesters[i].day]),
|
|
i === semesters.length - 1 ? this.tranNum([+semesters[0].month, +semesters[0].day]) : this
|
|
i === semesters.length - 1 ? this.tranNum([+semesters[0].month, +semesters[0].day]) : this
|
|
- .tranNum([+semesters[i + 1].month, +semesters[i + 1].day])
|
|
|
|
|
|
+ .tranNum([+semesters[i + 1].month, +semesters[i + 1].day])
|
|
])
|
|
])
|
|
}
|
|
}
|
|
return range
|
|
return range
|
|
@@ -389,11 +440,11 @@ export default {
|
|
}
|
|
}
|
|
},
|
|
},
|
|
/* 生成随机UUID工具 */
|
|
/* 生成随机UUID工具 */
|
|
- randomId: function() {
|
|
|
|
|
|
+ randomId: function () {
|
|
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
|
|
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)
|
|
},
|
|
},
|
|
/* 生成随机UUID工具 */
|
|
/* 生成随机UUID工具 */
|
|
- guid: function() {
|
|
|
|
|
|
+ guid: function () {
|
|
return (this.randomId() + this.randomId() + '-' + this.randomId() + '-' + this.randomId() + '-' + this
|
|
return (this.randomId() + this.randomId() + '-' + this.randomId() + '-' + this.randomId() + '-' + this
|
|
.randomId() +
|
|
.randomId() +
|
|
'-' + this.randomId() + this.randomId() + this.randomId())
|
|
'-' + this.randomId() + this.randomId() + this.randomId())
|
|
@@ -434,21 +485,21 @@ export default {
|
|
/* 根据x,y,w,h获取四点坐标 */
|
|
/* 根据x,y,w,h获取四点坐标 */
|
|
getBoxPos(x, y, w, h) {
|
|
getBoxPos(x, y, w, h) {
|
|
return [{
|
|
return [{
|
|
- x: x,
|
|
|
|
- y: y
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- x: x + w,
|
|
|
|
- y: y
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- x: x + w,
|
|
|
|
- y: y + h
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- x: x,
|
|
|
|
- y: y + h
|
|
|
|
- }
|
|
|
|
|
|
+ x: x,
|
|
|
|
+ y: y
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ x: x + w,
|
|
|
|
+ y: y
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ x: x + w,
|
|
|
|
+ y: y + h
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ x: x,
|
|
|
|
+ y: y + h
|
|
|
|
+ }
|
|
]
|
|
]
|
|
},
|
|
},
|
|
/* 匹配URL里面的HOST */
|
|
/* 匹配URL里面的HOST */
|
|
@@ -519,7 +570,7 @@ export default {
|
|
for (var k in o)
|
|
for (var k in o)
|
|
if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
|
|
if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : ((
|
|
'00' + o[
|
|
'00' + o[
|
|
- k]).substr(('' + o[k]).length)))
|
|
|
|
|
|
+ k]).substr(('' + o[k]).length)))
|
|
return fmt
|
|
return fmt
|
|
},
|
|
},
|
|
/* 字节格式转换 */
|
|
/* 字节格式转换 */
|
|
@@ -537,7 +588,7 @@ export default {
|
|
var formData = new FormData();
|
|
var formData = new FormData();
|
|
xhr.open('get', url); //url填写后台的接口地址,如果是post,在formData append参数(参考原文地址)
|
|
xhr.open('get', url); //url填写后台的接口地址,如果是post,在formData append参数(参考原文地址)
|
|
if (type) xhr.responseType = 'arraybuffer';
|
|
if (type) xhr.responseType = 'arraybuffer';
|
|
- xhr.onload = function(e) {
|
|
|
|
|
|
+ xhr.onload = function (e) {
|
|
switch (e.currentTarget.status) {
|
|
switch (e.currentTarget.status) {
|
|
case 200:
|
|
case 200:
|
|
resolve(e.currentTarget.response)
|
|
resolve(e.currentTarget.response)
|
|
@@ -775,9 +826,9 @@ export default {
|
|
})
|
|
})
|
|
},
|
|
},
|
|
/* 生成学生清单PDF */
|
|
/* 生成学生清单PDF */
|
|
- batchStuList(datas,pdfName){
|
|
|
|
- return new Promise(async (resolve,reject) => {
|
|
|
|
- try{
|
|
|
|
|
|
+ batchStuList(datas, pdfName) {
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
+ try {
|
|
let namesArr = await this.getNamesBase64(datas.map(i => i.name))
|
|
let namesArr = await this.getNamesBase64(datas.map(i => i.name))
|
|
let classNameBase64 = await this.getClassNameBase64(pdfName)
|
|
let classNameBase64 = await this.getClassNameBase64(pdfName)
|
|
let pageCount = 1
|
|
let pageCount = 1
|
|
@@ -791,72 +842,72 @@ export default {
|
|
const a4Width = 210
|
|
const a4Width = 210
|
|
// 生成学生清单表格
|
|
// 生成学生清单表格
|
|
PDF.autoTable({
|
|
PDF.autoTable({
|
|
- theme:'plain',
|
|
|
|
- styles:{
|
|
|
|
- valign:'middle'
|
|
|
|
|
|
+ theme: 'plain',
|
|
|
|
+ styles: {
|
|
|
|
+ valign: 'middle'
|
|
},
|
|
},
|
|
- margin:{
|
|
|
|
- top:15,
|
|
|
|
- left:15,
|
|
|
|
|
|
+ margin: {
|
|
|
|
+ top: 15,
|
|
|
|
+ left: 15,
|
|
},
|
|
},
|
|
- headStyles:{
|
|
|
|
- cellPadding:{
|
|
|
|
- top:3,
|
|
|
|
- bottom:3,
|
|
|
|
- left:5
|
|
|
|
|
|
+ headStyles: {
|
|
|
|
+ cellPadding: {
|
|
|
|
+ top: 3,
|
|
|
|
+ bottom: 3,
|
|
|
|
+ left: 5
|
|
},
|
|
},
|
|
- valign:'middle',
|
|
|
|
|
|
+ valign: 'middle',
|
|
},
|
|
},
|
|
- bodyStyles:{
|
|
|
|
- cellPadding:5,
|
|
|
|
|
|
+ bodyStyles: {
|
|
|
|
+ cellPadding: 5,
|
|
},
|
|
},
|
|
- columnStyles:{
|
|
|
|
- 0:{
|
|
|
|
- cellWidth:20,
|
|
|
|
- valign:'middle',
|
|
|
|
- halign:'center'
|
|
|
|
|
|
+ columnStyles: {
|
|
|
|
+ 0: {
|
|
|
|
+ cellWidth: 20,
|
|
|
|
+ valign: 'middle',
|
|
|
|
+ halign: 'center'
|
|
}
|
|
}
|
|
},
|
|
},
|
|
head: [
|
|
head: [
|
|
- ['','Name', 'ID', 'IRS','']
|
|
|
|
|
|
+ ['', 'Name', 'ID', 'IRS', '']
|
|
],
|
|
],
|
|
- body: datas.map(i => ['','', i.id, i.irs]),
|
|
|
|
|
|
+ body: datas.map(i => ['', '', i.id, i.irs]),
|
|
didDrawPage: (data) => {
|
|
didDrawPage: (data) => {
|
|
- PDF.addImage(classNameBase64,'JPEG',15,5,200,10);
|
|
|
|
|
|
+ PDF.addImage(classNameBase64, 'JPEG', 15, 5, 200, 10);
|
|
PDF.setFontSize(12);
|
|
PDF.setFontSize(12);
|
|
PDF.setFont('Times New Roman')
|
|
PDF.setFont('Times New Roman')
|
|
// PDF.text(`${data.pageNumber} / ${data.doc.internal.pages.length}`, a4Width / 2 - 5, a4Height - 4,'center')
|
|
// PDF.text(`${data.pageNumber} / ${data.doc.internal.pages.length}`, a4Width / 2 - 5, a4Height - 4,'center')
|
|
},
|
|
},
|
|
didDrawCell: (cell) => {
|
|
didDrawCell: (cell) => {
|
|
- if(cell.column.dataKey === 0 && cell.section === 'body'){
|
|
|
|
|
|
+ if (cell.column.dataKey === 0 && cell.section === 'body') {
|
|
let defaultImg = require('@/assets/image/tmd_logo.png')
|
|
let defaultImg = require('@/assets/image/tmd_logo.png')
|
|
let url = datas[cell.row.index].picture || defaultImg
|
|
let url = datas[cell.row.index].picture || defaultImg
|
|
var img = new Image();
|
|
var img = new Image();
|
|
img.src = url;
|
|
img.src = url;
|
|
- PDF.addImage(img,'JPEG', cell.cursor.x + 5, cell.cursor.y + 2,10,10);
|
|
|
|
|
|
+ PDF.addImage(img, 'JPEG', cell.cursor.x + 5, cell.cursor.y + 2, 10, 10);
|
|
}
|
|
}
|
|
- if(cell.column.dataKey === 1 && cell.section === 'body'){
|
|
|
|
|
|
+ if (cell.column.dataKey === 1 && cell.section === 'body') {
|
|
let nameBase64 = namesArr[cell.row.index]
|
|
let nameBase64 = namesArr[cell.row.index]
|
|
- PDF.addImage(nameBase64,'JPEG', cell.cursor.x + 5, cell.cursor.y + 4,20,8);
|
|
|
|
|
|
+ PDF.addImage(nameBase64, 'JPEG', cell.cursor.x + 5, cell.cursor.y + 4, 20, 8);
|
|
}
|
|
}
|
|
- if(cell.column.dataKey === 4 && cell.section === 'body'){
|
|
|
|
|
|
+ if (cell.column.dataKey === 4 && cell.section === 'body') {
|
|
PDF.setDrawColor(0);
|
|
PDF.setDrawColor(0);
|
|
PDF.setLineWidth(0.6);
|
|
PDF.setLineWidth(0.6);
|
|
- PDF.rect(cell.cursor.x + 5, cell.cursor.y + 4,5,5);
|
|
|
|
|
|
+ PDF.rect(cell.cursor.x + 5, cell.cursor.y + 4, 5, 5);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})
|
|
})
|
|
PDF.save(pdfName + '.pdf')
|
|
PDF.save(pdfName + '.pdf')
|
|
resolve(200)
|
|
resolve(200)
|
|
- }catch(e){
|
|
|
|
|
|
+ } catch (e) {
|
|
reject(500)
|
|
reject(500)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
},
|
|
/* 根据图片生成PDF */
|
|
/* 根据图片生成PDF */
|
|
- generatePdfByImgs(urls,pdfName){
|
|
|
|
- return new Promise(async (resolve,reject) => {
|
|
|
|
- try{
|
|
|
|
|
|
+ generatePdfByImgs(urls, pdfName) {
|
|
|
|
+ return new Promise(async (resolve, reject) => {
|
|
|
|
+ try {
|
|
const a4Height = 297
|
|
const a4Height = 297
|
|
const a4Width = 210
|
|
const a4Width = 210
|
|
let PDF = new JsPDF({
|
|
let PDF = new JsPDF({
|
|
@@ -865,32 +916,32 @@ export default {
|
|
format: 'a4',
|
|
format: 'a4',
|
|
putOnlyUsedFonts: true
|
|
putOnlyUsedFonts: true
|
|
})
|
|
})
|
|
- urls.forEach((url,index) => {
|
|
|
|
|
|
+ urls.forEach((url, index) => {
|
|
var img = new Image();
|
|
var img = new Image();
|
|
img.src = url;
|
|
img.src = url;
|
|
- PDF.addImage(img,'JPEG', 0,0,a4Height,a4Width);
|
|
|
|
- if(index !== urls.length - 1){
|
|
|
|
|
|
+ PDF.addImage(img, 'JPEG', 0, 0, a4Height, a4Width);
|
|
|
|
+ if (index !== urls.length - 1) {
|
|
PDF.addPage()
|
|
PDF.addPage()
|
|
}
|
|
}
|
|
})
|
|
})
|
|
PDF.save(pdfName + '.pdf')
|
|
PDF.save(pdfName + '.pdf')
|
|
resolve(200)
|
|
resolve(200)
|
|
- }catch(e){
|
|
|
|
|
|
+ } catch (e) {
|
|
reject(500)
|
|
reject(500)
|
|
console.log(e)
|
|
console.log(e)
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
},
|
|
/* 生成名字图片 */
|
|
/* 生成名字图片 */
|
|
- getImgsBase64ByUrls(urls){
|
|
|
|
- return new Promise((resolve,reject) => {
|
|
|
|
|
|
+ getImgsBase64ByUrls(urls) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
let promiseArr = []
|
|
let promiseArr = []
|
|
urls.forEach(url => {
|
|
urls.forEach(url => {
|
|
- promiseArr.push(new Promise((r,j) => {
|
|
|
|
|
|
+ promiseArr.push(new Promise((r, j) => {
|
|
console.error(url)
|
|
console.error(url)
|
|
var img = new Image();
|
|
var img = new Image();
|
|
img.src = url
|
|
img.src = url
|
|
- img.onload=function(){
|
|
|
|
|
|
+ img.onload = function () {
|
|
var canvas = document.createElement("canvas");
|
|
var canvas = document.createElement("canvas");
|
|
canvas.width = img.width;
|
|
canvas.width = img.width;
|
|
canvas.height = img.height;
|
|
canvas.height = img.height;
|
|
@@ -903,14 +954,14 @@ export default {
|
|
})
|
|
})
|
|
Promise.all(promiseArr).then(result => {
|
|
Promise.all(promiseArr).then(result => {
|
|
resolve(result)
|
|
resolve(result)
|
|
- }).catch(e =>{
|
|
|
|
|
|
+ }).catch(e => {
|
|
reject(e)
|
|
reject(e)
|
|
})
|
|
})
|
|
})
|
|
})
|
|
},
|
|
},
|
|
/* 生成班级名称图片 */
|
|
/* 生成班级名称图片 */
|
|
- getClassNameBase64(name){
|
|
|
|
- return new Promise((resolve,reject) => {
|
|
|
|
|
|
+ getClassNameBase64(name) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
let dom = document.createElement('div')
|
|
let dom = document.createElement('div')
|
|
dom.style.width = '200mm'
|
|
dom.style.width = '200mm'
|
|
dom.style.height = '10mm'
|
|
dom.style.height = '10mm'
|
|
@@ -923,15 +974,15 @@ export default {
|
|
dom.remove()
|
|
dom.remove()
|
|
resolve(pageData)
|
|
resolve(pageData)
|
|
})
|
|
})
|
|
- },100)
|
|
|
|
|
|
+ }, 100)
|
|
})
|
|
})
|
|
},
|
|
},
|
|
/* 生成名字图片 */
|
|
/* 生成名字图片 */
|
|
- getNamesBase64(arr){
|
|
|
|
- return new Promise((resolve,reject) => {
|
|
|
|
|
|
+ getNamesBase64(arr) {
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
let promiseArr = []
|
|
let promiseArr = []
|
|
arr.forEach(name => {
|
|
arr.forEach(name => {
|
|
- promiseArr.push(new Promise((r,j) => {
|
|
|
|
|
|
+ promiseArr.push(new Promise((r, j) => {
|
|
let dom = document.createElement('div')
|
|
let dom = document.createElement('div')
|
|
dom.style.width = '20mm'
|
|
dom.style.width = '20mm'
|
|
dom.style.height = '8mm'
|
|
dom.style.height = '8mm'
|
|
@@ -944,7 +995,7 @@ export default {
|
|
dom.remove()
|
|
dom.remove()
|
|
r(pageData)
|
|
r(pageData)
|
|
})
|
|
})
|
|
- },100)
|
|
|
|
|
|
+ }, 100)
|
|
}))
|
|
}))
|
|
})
|
|
})
|
|
Promise.all(promiseArr).then(result => {
|
|
Promise.all(promiseArr).then(result => {
|
|
@@ -963,7 +1014,7 @@ export default {
|
|
},
|
|
},
|
|
/* 获取视频第一帧 */
|
|
/* 获取视频第一帧 */
|
|
getVideoBase64(url) {
|
|
getVideoBase64(url) {
|
|
- return new Promise(function(resolve, reject) {
|
|
|
|
|
|
+ return new Promise(function (resolve, reject) {
|
|
let dataURL = '';
|
|
let dataURL = '';
|
|
let video = document.createElement("video");
|
|
let video = document.createElement("video");
|
|
video.setAttribute('crossOrigin', 'anonymous'); //处理跨域
|
|
video.setAttribute('crossOrigin', 'anonymous'); //处理跨域
|
|
@@ -971,7 +1022,7 @@ export default {
|
|
video.setAttribute('preload', 'auto');
|
|
video.setAttribute('preload', 'auto');
|
|
video.setAttribute('width', 150);
|
|
video.setAttribute('width', 150);
|
|
video.setAttribute('height', 90);
|
|
video.setAttribute('height', 90);
|
|
- video.addEventListener('loadeddata', function() {
|
|
|
|
|
|
+ video.addEventListener('loadeddata', function () {
|
|
let canvas = document.createElement("canvas"),
|
|
let canvas = document.createElement("canvas"),
|
|
width = video.width, //canvas的尺寸和图片一样
|
|
width = video.width, //canvas的尺寸和图片一样
|
|
height = video.height;
|
|
height = video.height;
|
|
@@ -983,7 +1034,7 @@ export default {
|
|
var img = new Image()
|
|
var img = new Image()
|
|
img.src = require('@/assets/icon/icon_play.png')
|
|
img.src = require('@/assets/icon/icon_play.png')
|
|
img.setAttribute('crossOrigin', 'anonymous');
|
|
img.setAttribute('crossOrigin', 'anonymous');
|
|
- img.onload = function() {
|
|
|
|
|
|
+ img.onload = function () {
|
|
//画图
|
|
//画图
|
|
canvas.getContext("2d").drawImage(img, 55, 25, 40, 40);
|
|
canvas.getContext("2d").drawImage(img, 55, 25, 40, 40);
|
|
var data = canvas.toDataURL('image/jpeg');
|
|
var data = canvas.toDataURL('image/jpeg');
|
|
@@ -998,7 +1049,7 @@ export default {
|
|
var vid = document.createElement('video');
|
|
var vid = document.createElement('video');
|
|
var fileURL = url || URL.createObjectURL(file);
|
|
var fileURL = url || URL.createObjectURL(file);
|
|
vid.src = fileURL;
|
|
vid.src = fileURL;
|
|
- vid.addEventListener('loadedmetadata', function() {
|
|
|
|
|
|
+ vid.addEventListener('loadedmetadata', function () {
|
|
resolve(vid.duration);
|
|
resolve(vid.duration);
|
|
});
|
|
});
|
|
vid.remove()
|
|
vid.remove()
|
|
@@ -1043,11 +1094,11 @@ export default {
|
|
|
|
|
|
Promise.all(promises).then(() => {
|
|
Promise.all(promises).then(() => {
|
|
zip.generateAsync({
|
|
zip.generateAsync({
|
|
- type: "blob"
|
|
|
|
- }).then(content => {
|
|
|
|
- // 生成二进制流
|
|
|
|
- FileSaver.saveAs(content, zipName + ".zip"); // 利用file-saver保存文件
|
|
|
|
- })
|
|
|
|
|
|
+ type: "blob"
|
|
|
|
+ }).then(content => {
|
|
|
|
+ // 生成二进制流
|
|
|
|
+ FileSaver.saveAs(content, zipName + ".zip"); // 利用file-saver保存文件
|
|
|
|
+ })
|
|
.catch(err => {
|
|
.catch(err => {
|
|
console.log(err);
|
|
console.log(err);
|
|
});
|
|
});
|
|
@@ -1293,7 +1344,7 @@ export default {
|
|
|
|
|
|
},
|
|
},
|
|
/* 判断是否相等 */
|
|
/* 判断是否相等 */
|
|
- isEqual: function(x, y) {
|
|
|
|
|
|
+ isEqual: function (x, y) {
|
|
// If both x and y are null or undefined and exactly the same
|
|
// If both x and y are null or undefined and exactly the same
|
|
if (x === y) {
|
|
if (x === y) {
|
|
return true;
|
|
return true;
|
|
@@ -1319,7 +1370,7 @@ export default {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
// Numbers, Strings, Functions, Booleans must be strictly equal
|
|
// Numbers, Strings, Functions, Booleans must be strictly equal
|
|
- if (typeof(x[p]) !== "object") {
|
|
|
|
|
|
+ if (typeof (x[p]) !== "object") {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
// Objects and Arrays must be tested recursively
|
|
// Objects and Arrays must be tested recursively
|
|
@@ -1348,7 +1399,7 @@ export default {
|
|
stu.subjects[subjectIndex].fieldPoint[index],
|
|
stu.subjects[subjectIndex].fieldPoint[index],
|
|
val.fScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex]
|
|
val.fScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex]
|
|
.fieldPoint[index] / val.fScores[subjectIndex].value[index])
|
|
.fieldPoint[index] / val.fScores[subjectIndex].value[index])
|
|
- .toFixed(2)
|
|
|
|
|
|
+ .toFixed(2)
|
|
])
|
|
])
|
|
})
|
|
})
|
|
return result
|
|
return result
|
|
@@ -1359,7 +1410,7 @@ export default {
|
|
val.classes.forEach(classItem => {
|
|
val.classes.forEach(classItem => {
|
|
result.push(classItem.subjects[subjectIndex].field.map((score, index) => val.fieldwrong[
|
|
result.push(classItem.subjects[subjectIndex].field.map((score, index) => val.fieldwrong[
|
|
subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex]
|
|
subjectIndex].value[index][1] == 0 ? 0 : Number(score / val.fieldwrong[subjectIndex]
|
|
- .value[index][1]) * 100)[index])
|
|
|
|
|
|
+ .value[index][1]) * 100)[index])
|
|
})
|
|
})
|
|
return result
|
|
return result
|
|
},
|
|
},
|
|
@@ -1394,7 +1445,7 @@ export default {
|
|
stu.subjects[subjectIndex].point[index],
|
|
stu.subjects[subjectIndex].point[index],
|
|
val.kScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex].point[
|
|
val.kScores[subjectIndex].value[index] == 0 ? 0 : (stu.subjects[subjectIndex].point[
|
|
index] / val.kScores[subjectIndex].value[index])
|
|
index] / val.kScores[subjectIndex].value[index])
|
|
- .toFixed(2)
|
|
|
|
|
|
+ .toFixed(2)
|
|
])
|
|
])
|
|
})
|
|
})
|
|
return result
|
|
return result
|
|
@@ -1406,7 +1457,7 @@ export default {
|
|
// 取当前班级在每个知识点的得分 除以知识点的总分 得到每个班在该知识点的得分率 index=>知识点下标
|
|
// 取当前班级在每个知识点的得分 除以知识点的总分 得到每个班在该知识点的得分率 index=>知识点下标
|
|
result.push(classItem.subjects[subjectIndex].point.map((score, pointIndex) => val.wrong[
|
|
result.push(classItem.subjects[subjectIndex].point.map((score, pointIndex) => val.wrong[
|
|
subjectIndex].value[pointIndex][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex]
|
|
subjectIndex].value[pointIndex][1] == 0 ? 0 : Number(score / val.wrong[subjectIndex]
|
|
- .value[pointIndex][1]) * 100)[index])
|
|
|
|
|
|
+ .value[pointIndex][1]) * 100)[index])
|
|
})
|
|
})
|
|
return result
|
|
return result
|
|
},
|
|
},
|