mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal.git
synced 2025-12-11 03:46:44 +08:00
486 lines
12 KiB
JavaScript
486 lines
12 KiB
JavaScript
/**
|
||
* 对象复制
|
||
*/
|
||
export const deepCopy = (obj) => {
|
||
return JSON.parse(JSON.stringify(obj));
|
||
};
|
||
|
||
/**截取名称部分,以/划分 */
|
||
export const cutFullName = (fullName,num) => {
|
||
let newName=fullName;
|
||
if(newName){
|
||
let names=newName.split('/');
|
||
if(names.length>1){
|
||
newName=names[1];
|
||
if(num==2){
|
||
if(names.length>2){
|
||
newName+="/"+names[2];
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return newName;
|
||
};
|
||
|
||
/**截取机构名称路径namePath最后两段,不包含第一个 */
|
||
export const cutOrgNamePath = (namePath) => {
|
||
let newName=namePath;
|
||
//debugger
|
||
if(newName){
|
||
let names=newName.split('/');
|
||
let len=names.length;
|
||
//使用最后两们
|
||
if(len>1){
|
||
//newName=names[len-2]+'/'+names[len-1];
|
||
newName=names[1];
|
||
if(!newName){
|
||
newName=names[0]
|
||
}
|
||
}
|
||
|
||
// if(names.length>1){
|
||
// newName=names[1];
|
||
// if(num==2){
|
||
// if(names.length>2){
|
||
// newName+="/"+names[2];
|
||
// }
|
||
// }
|
||
// }
|
||
}
|
||
return newName;
|
||
};
|
||
|
||
/**
|
||
* 获取url协议
|
||
* @param {Object} type
|
||
*/
|
||
export function getUrlPre(type) {
|
||
const isHttps='https:'==document.location.prototype ? true:false;
|
||
let isUrl='https';
|
||
if(isHttps){
|
||
isUrl='https';
|
||
}else{
|
||
isUrl='http';
|
||
}
|
||
return isUrl;
|
||
}
|
||
|
||
// 类型过滤
|
||
const contentTypeMaps = {
|
||
10: '视频',
|
||
20: '音频',
|
||
30: '图片',
|
||
40: '文档',
|
||
41: '图文',
|
||
50: 'scorm',
|
||
52: '外链',
|
||
60: '作业',
|
||
61: '考试',
|
||
62: '评估',
|
||
90: '其它',
|
||
};
|
||
export function getType(type) {
|
||
let name = contentTypeMaps[type];
|
||
return name;
|
||
}
|
||
|
||
/**
|
||
* 根据文件类型后续不带点的。比如 mp4 转化为对应的资源数字
|
||
*/
|
||
export function toContentType(fileType) {
|
||
let docTypes=["pdf","doc","xls", "ppt","docx", "xlsx", "pptx"];
|
||
let type = null;
|
||
// ["doc", "xls", "ppt","docx", "xlsx", "pptx","png","txt", "pdf","jpg","gif","bmp","mp4","mp3"]
|
||
if (fileType === "mp4") {
|
||
type = 10;
|
||
} else if (fileType === "mp3") {
|
||
type = 20;
|
||
} else if (fileType === "jpg" ||fileType === "png" ||fileType === "gif") {
|
||
type = 30;
|
||
} else if (docTypes.indexOf(fileType)>-1){
|
||
type = 40;
|
||
} else if(fileType === "zip"){
|
||
type = 50;
|
||
} else {
|
||
type = 90;
|
||
}
|
||
return type;
|
||
}
|
||
|
||
// 10微课,21在线课(直播);20:在线课( 录播);30:面授课;40:混合式,
|
||
|
||
// export function courseType(type) {
|
||
// const maps = {
|
||
// 10: '微课',
|
||
// 21: '在线课(直播)',
|
||
// 20: '在线课(录播)',
|
||
// 30: '面授课',
|
||
// 40: '混合式',
|
||
// };
|
||
// return maps[type];
|
||
// }
|
||
export function courseType(type) {
|
||
const maps = {
|
||
10: '录播课',
|
||
21: '在线课(直播)',
|
||
20: '录播课',
|
||
30: '线下课',
|
||
40: '学习项目',
|
||
};
|
||
return maps[type];
|
||
}
|
||
|
||
/**
|
||
* 把日期格式化为显示时间,yyyy-MM-dd HH:mm:ss
|
||
* @param {Object} date
|
||
*/
|
||
export function formatDate(date){
|
||
var year = date.getFullYear(),
|
||
month = date.getMonth() + 1,//月份是从0开始的
|
||
day = date.getDate(),
|
||
hour = date.getHours(),
|
||
min = date.getMinutes(),
|
||
sec = date.getSeconds();
|
||
if(month<10){month='0'+month}
|
||
if(day<10){day='0'+day}
|
||
if(hour<10){hour='0'+hour}
|
||
if(min<10){min='0'+min}
|
||
if(sec<10){sec='0'+sec}
|
||
var newTime = year + '-' +
|
||
month + '-' +
|
||
day + ' ' +
|
||
hour + ':' +
|
||
min + ':' +
|
||
sec;
|
||
return newTime;
|
||
|
||
}
|
||
|
||
export function formatDateByFmt(date,fmt) {
|
||
if(/(y+)/.test(fmt)){
|
||
fmt = fmt.replace(RegExp.$1,(date.getFullYear()+'').substr(4-RegExp.$1.length));
|
||
}
|
||
let o = {
|
||
'M+':date.getMonth() + 1,
|
||
'd+':date.getDate(),
|
||
'h+':date.getHours(),
|
||
'm+':date.getMinutes(),
|
||
's+':date.getSeconds()
|
||
};
|
||
|
||
// 遍历这个对象
|
||
for(let k in o){
|
||
if(new RegExp(`(${k})`).test(fmt)){
|
||
// console.log(`${k}`)
|
||
let str = o[k] + '';
|
||
fmt = fmt.replace(RegExp.$1,(RegExp.$1.length===1)?str:('00'+str).substr(str.length));
|
||
}
|
||
}
|
||
return fmt;
|
||
}
|
||
|
||
/**
|
||
* 把日期格式化为显示时间,yyyy-MM-dd
|
||
* @param {Object} date
|
||
*/
|
||
export function formatDateShort(date){
|
||
var year = date.getFullYear(),
|
||
month = date.getMonth() + 1,//月份是从0开始的
|
||
day = date.getDate(),
|
||
hour = date.getHours(),
|
||
min = date.getMinutes(),
|
||
sec = date.getSeconds();
|
||
if(month<10){month='0'+month}
|
||
if(day<10){day='0'+day}
|
||
if(hour<10){hour='0'+hour}
|
||
if(min<10){min='0'+min}
|
||
if(sec<10){sec='0'+sec}
|
||
var newTime = year + '-' + month + '-' + day;
|
||
return newTime;
|
||
|
||
}
|
||
|
||
|
||
export function numberToLetter(x){ //此方法和移到utils中去
|
||
let s = "";
|
||
while (x > 0) {
|
||
let m = x % 26;
|
||
m = m === 0 ? (m = 26) : m;
|
||
s = String.fromCharCode(96 + parseInt(m)) + s;
|
||
x = (x - m) / 26;
|
||
}
|
||
return s.toUpperCase();
|
||
}
|
||
|
||
export function testType(type) { //此方法移到tools中
|
||
let name = '';
|
||
switch (type) {
|
||
case 101:
|
||
name = '单选';
|
||
break;
|
||
case 102:
|
||
name = '多选';
|
||
break;
|
||
case 103:
|
||
name = '判断';
|
||
break;
|
||
}
|
||
return name;
|
||
}
|
||
export function examType(type) { //此方法移到tools中
|
||
let name = '';
|
||
switch (type) {
|
||
case 1:
|
||
name = '单选';
|
||
break;
|
||
case 2:
|
||
name = '多选';
|
||
break;
|
||
case 3:
|
||
name = '判断';
|
||
break;
|
||
}
|
||
return name;
|
||
}
|
||
export function correctJudgment(ditem) {
|
||
let judgment = false;
|
||
if(ditem.type == 101 || ditem.type == 103) {
|
||
ditem.options.forEach(item=>{
|
||
if(item.answer){
|
||
if(item.id == ditem.userAnswer) {
|
||
judgment = true;
|
||
} else{
|
||
judgment = false;
|
||
}
|
||
}
|
||
})
|
||
} else {
|
||
ditem.options.forEach(item=>{
|
||
if(item.answer == item.isCheck){
|
||
judgment = true;
|
||
|
||
}else{
|
||
judgment = false;
|
||
}
|
||
})
|
||
}
|
||
return judgment;
|
||
}
|
||
export function toScore(score) {
|
||
if (!score) {
|
||
return '0';
|
||
}
|
||
if((''+score).indexOf('.')>-1){
|
||
return score.toFixed(1);
|
||
}else{
|
||
return score+'.0';
|
||
}
|
||
}
|
||
export function toScoreTow(score) {// 返回两位小数
|
||
if (!score) {
|
||
return '0';
|
||
}
|
||
if((''+score).indexOf('.')>-1){
|
||
return score.toFixed(2);
|
||
}else{
|
||
return score+'.00';
|
||
}
|
||
}
|
||
/**
|
||
* 数组互换位置
|
||
* @param {array} arr 数组
|
||
* @param {number} index1 添加项目的位置
|
||
* @param {number} index2 删除项目的位置
|
||
* index1和index2分别是两个数组的索引值,即是两个要交换元素位置的索引值,如1,5就是数组中下标为1和5的两个元素交换位置
|
||
*/
|
||
export function swapArray(arr, index1, index2) {
|
||
arr[index1] = arr.splice(index2, 1, arr[index1])[0];
|
||
return arr;
|
||
}
|
||
|
||
/**
|
||
* 头像文字
|
||
* @param {*} text
|
||
* @returns
|
||
*/
|
||
export function userAvatarText(text){
|
||
if(text){
|
||
let len=text.length;
|
||
if(len>2){
|
||
text=text.substring(len-2);
|
||
}
|
||
}
|
||
return text;
|
||
}
|
||
// u币key
|
||
const uTypeMaps = {
|
||
'PublishArticle': '发表文章',
|
||
'ViewArticle': '阅读文章',
|
||
'StudyCourse': '学习课程',
|
||
'PublishCourse': '发布课程',
|
||
'PulishQuestion': '发布问题',
|
||
'ReadQuestion': '阅读问题',
|
||
'AnswerQuestion': '回答问题',
|
||
'PublishNote': '发布笔记',
|
||
'PublishComment': '发表评论',
|
||
'ReplyComment': '回复评论',
|
||
'Praise': '点赞',
|
||
'ScoreCourse':'课程评分',
|
||
'Feedback':'意见反馈',
|
||
'VideoStudyDayStat':'试听学习时长',
|
||
'ViewCase':'阅读案例',
|
||
'ViewArticle':'阅读文章',
|
||
'DeleteQuestion':'删除问题',
|
||
'other':'其他'
|
||
};
|
||
export function getUType(type) {
|
||
let name = uTypeMaps[type];
|
||
return name;
|
||
}
|
||
|
||
/**此方法的定义,后期需要云掉*/
|
||
export function experienceValue(total) {
|
||
let data = {
|
||
start:'',
|
||
end:'',
|
||
endValue:null,
|
||
percentage:0,
|
||
total,
|
||
}
|
||
if(total < 300) {
|
||
data.start = 'LV1';
|
||
data.end = 'LV2';
|
||
data.endValue = 600;
|
||
data.percentage = parseFloat((total / 600) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 300 && total < 600){
|
||
data.start = 'LV2';
|
||
data.end = 'LV3';
|
||
data.endValue = 1000;
|
||
data.percentage = parseFloat((total / 1000) * 1000);
|
||
return data;
|
||
}
|
||
if(total >= 600 && total < 1000){
|
||
data.start = 'LV3';
|
||
data.end = 'LV4';
|
||
data.endValue = 2000;
|
||
data.percentage = parseFloat((total / 2000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 1000 && total < 2000){
|
||
data.start = 'LV4';
|
||
data.end = 'LV5';
|
||
data.endValue = 4000;
|
||
data.percentage = parseFloat((total / 4000) * 4000);
|
||
return data;
|
||
}
|
||
if(total >= 2000 && total < 4000){
|
||
data.start = 'LV5';
|
||
data.end = 'LV6';
|
||
data.endValue = 8000;
|
||
data.percentage = parseFloat((total / 8000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 4000 && total < 8000){
|
||
data.start = 'LV6';
|
||
data.end = 'LV7';
|
||
data.endValue = 15000;
|
||
data.percentage = parseFloat((total / 15000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 8000 && total < 15000){
|
||
data.start = 'LV7';
|
||
data.end = 'LV8';
|
||
data.endValue = 20000;
|
||
data.percentage = parseFloat((total / 20000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 15000 && total < 20000){
|
||
data.start = 'LV8';
|
||
data.end = 'LV9';
|
||
data.endValue = 30000;
|
||
data.percentage = parseFloat((total / 30000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 20000 && total < 30000){
|
||
data.start = 'LV9';
|
||
data.end = 'LV10';
|
||
data.endValue = 30000;
|
||
data.percentage = parseFloat((total / 30000) * 100);
|
||
return data;
|
||
}
|
||
if(total >= 30000){
|
||
data.start = 'LV10';
|
||
data.end = '';
|
||
data.endValue = 90000;
|
||
data.percentage = parseFloat((total / 90000) * 100);
|
||
return data;
|
||
}
|
||
return data;
|
||
}
|
||
export function translate(field) {
|
||
let name = '';
|
||
switch (field) {
|
||
case 'total':name = '累计'; break;
|
||
case 'now':name = '当前'; break;
|
||
case 'weeks':name = '本周'; break;
|
||
case 'months':name = '本月'; break;
|
||
case 'years':name = '本年'; break;
|
||
default:
|
||
break;
|
||
}
|
||
return name;
|
||
}
|
||
|
||
/**格式化人数的文档 ,学习人数,关注人数等*/
|
||
export function formatUserNumber(num) {
|
||
let rsNum =0;
|
||
if(num<5){return num;}
|
||
if(num>=5 && num<= 10){return 10 +"+";}
|
||
if(num<=94){
|
||
rsNum=Math.round((num)/10)*10;
|
||
return rsNum+'+';
|
||
}
|
||
if(num>94 && num <= 1000){
|
||
rsNum=Math.round((num)/100)*100;
|
||
return rsNum+'+';
|
||
}
|
||
if(num>1000 && num <= 10000){
|
||
rsNum=Math.round((num)/1000)*1000;
|
||
return rsNum+'+';
|
||
}
|
||
if(num>10000){
|
||
// rsNum=Math.round((num)/10000)*10000;
|
||
// return rsNum+'+';
|
||
rsNum=Math.round((num)/10000);
|
||
return rsNum+'W+';
|
||
}
|
||
return num;
|
||
}
|
||
|
||
/**
|
||
* 将秒转换成小时
|
||
* @author wn
|
||
* @date 2022.10.18
|
||
* @param {Object} second 秒
|
||
* @@return 小时
|
||
*/
|
||
export function formatSecondToHour(second) {
|
||
var n = 1; // 保留小数位
|
||
second = Number(second);
|
||
var h = second / 3600;
|
||
h = h.toFixed(n);
|
||
if(isNaN(h)){
|
||
h = 0;
|
||
}
|
||
return h;
|
||
}
|
||
// 秒换成时分秒
|
||
export function getHMS(time) {
|
||
const hour = parseInt(time / 3600) < 10 ? '0' + parseInt(time / 3600) : parseInt(time / 3600)
|
||
const min = parseInt(time % 3600 / 60) < 10 ? '0' + parseInt(time % 3600 / 60) : parseInt(time % 3600 / 60)
|
||
const sec = parseInt(time % 3600 % 60) < 10 ? '0' + parseInt(time % 3600 % 60) : parseInt(time % 3600 % 60)
|
||
return hour + ':' + min + ':' + sec
|
||
}
|