UI_2022-02-10
parent
bc11841b59
commit
6277ff7435
77 changed files with 6682 additions and 5395 deletions
@ -1,24 +1,25 @@ |
|||||||
<template> |
<template> |
||||||
<div id="app" > |
<div id="app"> |
||||||
<router-view></router-view> |
<router-view></router-view> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
import Setting from '@/setting'; |
import Setting from "@/setting"; |
||||||
import util from '@/libs/util'; |
import util from "@/libs/util"; |
||||||
export default { |
|
||||||
name: 'App', |
|
||||||
created () { |
|
||||||
//在页面加载时读取localStorage里的状态信息 |
|
||||||
if (util.local.get(Setting.storeKey) ) { |
|
||||||
this.$store.replaceState(Object.assign({}, this.$store.state,util.local.get(Setting.storeKey))) |
|
||||||
} |
|
||||||
|
|
||||||
//在页面刷新时将vuex里的信息保存到localStorage里 |
export default { |
||||||
window.addEventListener("beforeunload",()=>{ |
name: "App", |
||||||
util.local.get(Setting.tokenKey) && util.local.set(Setting.storeKey,this.$store.state) |
created() { |
||||||
}) |
//在页面加载时读取localStorage里的状态信息 |
||||||
|
if (util.local.get(Setting.storeKey)) { |
||||||
|
this.$store.replaceState(Object.assign({}, this.$store.state, util.local.get(Setting.storeKey))); |
||||||
} |
} |
||||||
|
|
||||||
|
//在页面刷新时将vuex里的信息保存到localStorage里 |
||||||
|
window.addEventListener("beforeunload", () => { |
||||||
|
util.local.get(Setting.tokenKey) && util.local.set(Setting.storeKey, this.$store.state); |
||||||
|
}); |
||||||
} |
} |
||||||
|
}; |
||||||
</script> |
</script> |
@ -1,16 +1,16 @@ |
|||||||
export default [ |
export default [ |
||||||
['bold', 'italic', 'underline', 'strike'], |
["bold", "italic", "underline", "strike"], |
||||||
['blockquote', 'code-block'], |
["blockquote", "code-block"], |
||||||
[{ 'header': 1 }, { 'header': 2 }], |
[{ "header": 1 }, { "header": 2 }], |
||||||
[{ 'list': 'ordered' }, { 'list': 'bullet' }], |
[{ "list": "ordered" }, { "list": "bullet" }], |
||||||
[{ 'script': 'sub' }, { 'script': 'super' }], |
[{ "script": "sub" }, { "script": "super" }], |
||||||
[{ 'indent': '-1' }, { 'indent': '+1' }], |
[{ "indent": "-1" }, { "indent": "+1" }], |
||||||
[{ 'direction': 'rtl' }], |
[{ "direction": "rtl" }], |
||||||
[{ 'size': ['small', false, 'large', 'huge'] }], |
[{ "size": ["small", false, "large", "huge"] }], |
||||||
[{ 'header': [1, 2, 3, 4, 5, 6, false] }], |
[{ "header": [1, 2, 3, 4, 5, 6, false] }], |
||||||
[{ 'color': [] }, { 'background': [] }], |
[{ "color": [] }, { "background": [] }], |
||||||
[{ 'font': [] }], |
[{ "font": [] }], |
||||||
[{ 'align': [] }], |
[{ "align": [] }], |
||||||
['clean'], |
["clean"], |
||||||
['link', 'image', 'video'] |
["link", "image", "video"] |
||||||
] |
]; |
@ -1,30 +1,30 @@ |
|||||||
export const messages = { |
export const messages = { |
||||||
'zh': { |
"zh": { |
||||||
i18n: { |
i18n: { |
||||||
breadcrumb: '国际化产品', |
breadcrumb: "国际化产品", |
||||||
tips: '通过切换语言按钮,来改变当前内容的语言。', |
tips: "通过切换语言按钮,来改变当前内容的语言。", |
||||||
btn: '切换英文', |
btn: "切换英文", |
||||||
title1: '常用用法', |
title1: "常用用法", |
||||||
p1: '要是你把你的秘密告诉了风,那就别怪风把它带给树。', |
p1: "要是你把你的秘密告诉了风,那就别怪风把它带给树。", |
||||||
p2: '没有什么比信念更能支撑我们度过艰难的时光了。', |
p2: "没有什么比信念更能支撑我们度过艰难的时光了。", |
||||||
p3: '只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。', |
p3: "只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。", |
||||||
title2: '组件插值', |
title2: "组件插值", |
||||||
info: 'Element组件需要国际化,请参考 {action}。', |
info: "Element组件需要国际化,请参考 {action}。", |
||||||
value: '文档' |
value: "文档" |
||||||
} |
} |
||||||
}, |
}, |
||||||
'en': { |
"en": { |
||||||
i18n: { |
i18n: { |
||||||
breadcrumb: 'International Products', |
breadcrumb: "International Products", |
||||||
tips: 'Click on the button to change the current language. ', |
tips: "Click on the button to change the current language. ", |
||||||
btn: 'Switch Chinese', |
btn: "Switch Chinese", |
||||||
title1: 'Common usage', |
title1: "Common usage", |
||||||
p1: "If you reveal your secrets to the wind you should not blame the wind for revealing them to the trees.", |
p1: "If you reveal your secrets to the wind you should not blame the wind for revealing them to the trees.", |
||||||
p2: "Nothing can help us endure dark times better than our faith. ", |
p2: "Nothing can help us endure dark times better than our faith. ", |
||||||
p3: "If you can do what you do best and be happy, you're further along in life than most people.", |
p3: "If you can do what you do best and be happy, you're further along in life than most people.", |
||||||
title2: 'Component interpolation', |
title2: "Component interpolation", |
||||||
info: 'The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.', |
info: "The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.", |
||||||
value: 'documentation' |
value: "documentation" |
||||||
} |
} |
||||||
} |
} |
||||||
} |
}; |
@ -1,82 +1,87 @@ |
|||||||
<template> |
<template> |
||||||
<div> |
<div> |
||||||
<el-tabs v-model="active" @tab-click="jump"> |
<el-tabs v-model="active" @tab-click="jump"> |
||||||
<el-tab-pane v-for="(item,index) in menus" :key="index" :label="item.label" :name="item.index"></el-tab-pane> |
<el-tab-pane v-for="(item,index) in menus" :key="index" :label="item.label" |
||||||
|
:name="item.index"></el-tab-pane> |
||||||
</el-tabs> |
</el-tabs> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
import { mapState,mapActions } from 'vuex' |
import { mapState, mapActions } from "vuex"; |
||||||
import Setting from '@/setting' |
import Setting from "@/setting"; |
||||||
import util from '@/libs/util' |
import util from "@/libs/util"; |
||||||
|
|
||||||
export default { |
export default { |
||||||
data() { |
data() { |
||||||
return { |
return { |
||||||
active: this.$route.path, |
active: this.$route.path, |
||||||
menus: [ |
menus: [ |
||||||
{ |
{ |
||||||
index: '/station/list', |
index: "/station/list", |
||||||
label: '实验台' |
label: "实验台" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/preview/list', |
index: "/appraisal/list", |
||||||
label: '能力测评' |
label: "能力测评" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/record/list', |
index: "/record/list", |
||||||
label: '实验记录' |
label: "实验记录" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/ass/list', |
index: "/ass/list", |
||||||
label: '考核列表' |
label: "考核列表" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/course/list', |
index: "/course/list", |
||||||
label: '课程学习' |
label: "课程学习" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/information/list', |
index: "/info/list", |
||||||
label: '资讯' |
label: "资讯" |
||||||
}, |
}, |
||||||
{ |
{ |
||||||
index: '/match/list', |
index: "/match/list", |
||||||
label: '线上赛事' |
label: "线上赛事" |
||||||
}, |
} |
||||||
], |
] |
||||||
}; |
}; |
||||||
}, |
}, |
||||||
watch: { |
watch: { |
||||||
'$route'(to,from) { |
"$route"(to, from) { |
||||||
this.active = this.$route.path |
this.active = this.$route.path; |
||||||
} |
} |
||||||
}, |
}, |
||||||
mounted() { |
mounted() { |
||||||
|
|
||||||
}, |
}, |
||||||
methods: { |
methods: { |
||||||
// 点击标签页跳转到相应的路由 |
// 点击标签页跳转到相应的路由 |
||||||
jump(tab){ |
jump(tab) { |
||||||
this.active = tab.name |
this.active = tab.name; |
||||||
this.$router.push(tab.name).catch(err => {}) |
this.$router.push(tab.name).catch(err => { |
||||||
}, |
}); |
||||||
|
} |
||||||
} |
} |
||||||
}; |
}; |
||||||
</script> |
</script> |
||||||
|
|
||||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||||
/deep/.el-tabs__header{ |
/deep/ .el-tabs__header { |
||||||
z-index: 2; |
z-index: 2; |
||||||
padding: 20px 60px 0; |
padding: 20px 60px 0; |
||||||
margin: 0; |
margin: 0; |
||||||
box-shadow:0px 0px 25px 2px rgba(48,115,248,0.14); |
box-shadow: 0px 0px 25px 2px rgba(48, 115, 248, 0.14); |
||||||
|
background-color: #fff; |
||||||
|
|
||||||
|
.el-tabs__nav-wrap::after { |
||||||
background-color: #fff; |
background-color: #fff; |
||||||
.el-tabs__nav-wrap::after{ |
|
||||||
background-color: #fff; |
.el-tabs__item { |
||||||
.el-tabs__item{ |
padding: 0 30px; |
||||||
padding: 0 30px; |
outline: none; |
||||||
outline: none; |
|
||||||
} |
|
||||||
} |
} |
||||||
} |
} |
||||||
|
} |
||||||
</style> |
</style> |
@ -1,16 +1,18 @@ |
|||||||
// rem等比适配配置文件
|
// rem等比适配配置文件
|
||||||
// 基准大小
|
// 基准大小
|
||||||
const baseSize = 16 |
const baseSize = 16; |
||||||
|
|
||||||
// 设置 rem 函数
|
// 设置 rem 函数
|
||||||
function setRem () { |
function setRem() { |
||||||
// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
|
// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
|
||||||
const scale = document.documentElement.clientWidth / 1920 |
const scale = document.documentElement.clientWidth / 1920; |
||||||
// 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
|
// 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
|
||||||
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px' |
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + "px"; |
||||||
} |
} |
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
setRem() |
setRem(); |
||||||
// 改变窗口大小时重新设置 rem
|
// 改变窗口大小时重新设置 rem
|
||||||
window.onresize = function () { |
window.onresize = function() { |
||||||
setRem() |
setRem(); |
||||||
} |
}; |
@ -1,31 +1,31 @@ |
|||||||
import store from '@/store'; |
import store from "@/store"; |
||||||
import router from '@/router'; |
import router from "@/router"; |
||||||
import generateBtnPermission from '../auth/generateBtnPermission'; |
import generateBtnPermission from "../auth/generateBtnPermission"; |
||||||
|
|
||||||
const newRoutes = [] |
const newRoutes = []; |
||||||
|
|
||||||
function createMeta(item){ |
function createMeta(item) { |
||||||
let meta = { title: item.name } |
let meta = { title: item.name }; |
||||||
return meta |
return meta; |
||||||
} |
} |
||||||
|
|
||||||
function createRoute(data){ |
function createRoute(data) { |
||||||
data.map(e => { |
data.map(e => { |
||||||
if(e.select && e.path){ |
if (e.select && e.path) { |
||||||
let meta = createMeta(e) |
let meta = createMeta(e); |
||||||
newRoutes.push({ |
newRoutes.push({ |
||||||
name: e.path, |
name: e.path, |
||||||
path: () => import(`@/pages/${e.path}.vue`), |
path: () => import(`@/pages/${e.path}.vue`), |
||||||
meta |
meta |
||||||
}) |
}); |
||||||
} |
} |
||||||
e.children && e.children.length && createRoute(e.children) |
e.children && e.children.length && createRoute(e.children); |
||||||
}) |
}); |
||||||
} |
} |
||||||
|
|
||||||
export default function(data,path){ |
export default function(data, path) { |
||||||
generateBtnPermission(data) |
generateBtnPermission(data); |
||||||
createRoute(data) |
createRoute(data); |
||||||
store.dispatch('auth/addRoutes',newRoutes) |
store.dispatch("auth/addRoutes", newRoutes); |
||||||
// router.addRoutes(routes)
|
// router.addRoutes(routes)
|
||||||
} |
} |
@ -1,26 +1,26 @@ |
|||||||
import store from '@/store'; |
import store from "@/store"; |
||||||
import router from '@/router'; |
import router from "@/router"; |
||||||
|
|
||||||
export default function(){ |
export default function() { |
||||||
setTimeout(() => { |
setTimeout(() => { |
||||||
let routes = store.state.auth.routes |
let routes = store.state.auth.routes; |
||||||
routes.forEach(e => { |
routes.forEach(e => { |
||||||
if(e.path == '/'){ |
if (e.path == "/") { |
||||||
e.component = () => import('@/layouts/home/index.vue') |
e.component = () => import("@/layouts/home/index.vue"); |
||||||
}else{ |
} else { |
||||||
e.component = () => import(`@/pages/${e.path}.vue`) |
e.component = () => import(`@/pages/${e.path}.vue`); |
||||||
} |
} |
||||||
|
|
||||||
e.children && e.children.forEach(n => { |
e.children && e.children.forEach(n => { |
||||||
n.path && (n.component = () => import(`@/pages/${n.path}.vue`)) |
n.path && (n.component = () => import(`@/pages/${n.path}.vue`)); |
||||||
}) |
}); |
||||||
}) |
}); |
||||||
|
|
||||||
routes.push({ |
routes.push({ |
||||||
path: '*', |
path: "*", |
||||||
redirect: '404' |
redirect: "404" |
||||||
}) |
}); |
||||||
|
|
||||||
router.addRoutes(routes) |
router.addRoutes(routes); |
||||||
},500) |
}, 500); |
||||||
} |
} |
@ -1,6 +1,6 @@ |
|||||||
import router from '@/router'; |
import router from "@/router"; |
||||||
|
|
||||||
export default function(){ |
export default function() { |
||||||
const newRouter = createRouter() |
const newRouter = createRouter(); |
||||||
router.matcher = newRouter.matcher |
router.matcher = newRouter.matcher; |
||||||
} |
} |
@ -1,159 +1,178 @@ |
|||||||
import cookies from './util.cookies' |
import cookies from "./util.cookies"; |
||||||
import {_local,_session} from './util.db' |
import { _local, _session } from "./util.db"; |
||||||
import { Message } from 'element-ui' |
import { Message } from "element-ui"; |
||||||
import store from '@/store' |
import store from "@/store"; |
||||||
import axios from 'axios' |
import axios from "axios"; |
||||||
import api from '@/api' |
import api from "@/api"; |
||||||
import Setting from '@/setting' |
import Setting from "@/setting"; |
||||||
|
|
||||||
let logout = false |
let logout = false; |
||||||
const util = { |
const util = { |
||||||
cookies, |
cookies, |
||||||
local: _local, |
local: _local, |
||||||
session: _session, |
session: _session, |
||||||
// 传入身份证获取生日
|
// 传入身份证获取生日
|
||||||
getBirth(idCard) { |
getBirth(idCard) { |
||||||
var birthday = ""; |
var birthday = ""; |
||||||
if(idCard != null && idCard != ""){ |
if (idCard != null && idCard != "") { |
||||||
if(idCard.length == 15){ |
if (idCard.length == 15) { |
||||||
birthday = "19"+idCard.slice(6,12); |
birthday = "19" + idCard.slice(6, 12); |
||||||
} else if(idCard.length == 18){ |
} else if (idCard.length == 18) { |
||||||
birthday = idCard.slice(6,14); |
birthday = idCard.slice(6, 14); |
||||||
}
|
} |
||||||
birthday = birthday.replace(/(.{4})(.{2})/,"$1-$2-"); |
birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-"); |
||||||
//通过正则表达式来指定输出格式为:1990-01-01
|
//通过正则表达式来指定输出格式为:1990-01-01
|
||||||
}
|
|
||||||
return birthday; |
|
||||||
}, |
|
||||||
// new Date('2020-11-12 00:00:00') 在IE下失效,因此把-替换成/
|
|
||||||
dateCompatible(date) { |
|
||||||
return date.replace(/\-/g, '/') |
|
||||||
}, |
|
||||||
// 日期时间前面补零
|
|
||||||
formateTime(num) { |
|
||||||
return num < 10 ? `0${num}` : num |
|
||||||
}, |
|
||||||
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
|
|
||||||
formatDate(fmt,date) { |
|
||||||
var date = date ? date : new Date() |
|
||||||
var o = {
|
|
||||||
"M+" : date.getMonth()+1, //月份
|
|
||||||
"d+" : date.getDate(), //日
|
|
||||||
"h+" : date.getHours(), //小时
|
|
||||||
"m+" : date.getMinutes(), //分
|
|
||||||
"s+" : date.getSeconds(), //秒
|
|
||||||
"q+" : Math.floor((date.getMonth()+3)/3), //季度
|
|
||||||
"S" : date.getMilliseconds() //毫秒
|
|
||||||
};
|
|
||||||
if(/(y+)/.test(fmt)) { |
|
||||||
fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
|
|
||||||
} |
|
||||||
for(var k in o) { |
|
||||||
if(new RegExp("("+ k +")").test(fmt)){ |
|
||||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); |
|
||||||
} |
} |
||||||
} |
return birthday; |
||||||
return fmt;
|
}, |
||||||
}, |
// new Date('2020-11-12 00:00:00') 在IE下失效,因此把-替换成/
|
||||||
// 移除数组中指定值
|
dateCompatible(date) { |
||||||
removeByValue(arr, val) { |
return date.replace(/\-/g, "/"); |
||||||
for(var i=0; i<arr.length; i++) { |
}, |
||||||
if(arr[i] == val) { |
// 日期时间前面补零
|
||||||
arr.splice(i, 1); |
formateTime(num) { |
||||||
break; |
return num < 10 ? `0${num}` : num; |
||||||
|
}, |
||||||
|
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
|
||||||
|
formatDate(fmt, date) { |
||||||
|
var date = date ? date : new Date(); |
||||||
|
var o = { |
||||||
|
"M+": date.getMonth() + 1, //月份
|
||||||
|
"d+": date.getDate(), //日
|
||||||
|
"h+": date.getHours(), //小时
|
||||||
|
"m+": date.getMinutes(), //分
|
||||||
|
"s+": date.getSeconds(), //秒
|
||||||
|
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
|
||||||
|
"S": date.getMilliseconds() //毫秒
|
||||||
|
}; |
||||||
|
if (/(y+)/.test(fmt)) { |
||||||
|
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); |
||||||
} |
} |
||||||
} |
for (var k in o) { |
||||||
}, |
if (new RegExp("(" + k + ")").test(fmt)) { |
||||||
// 传入文件后缀判断是否是视频
|
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); |
||||||
isVideo(ext) { |
} |
||||||
if('mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv'.includes(ext)) return true |
} |
||||||
return false |
return fmt; |
||||||
}, |
}, |
||||||
// 传入文件后缀判断是否是音频
|
// 移除数组中指定值
|
||||||
isAudio(ext) { |
removeByValue(arr, val) { |
||||||
if('mp3,aac,ape,flac,wav,wma,amr,mid'.includes(ext)) return true |
for (var i = 0; i < arr.length; i++) { |
||||||
return false |
if (arr[i] == val) { |
||||||
}, |
arr.splice(i, 1); |
||||||
// 传入文件后缀判断是否是图片
|
break; |
||||||
isImg(ext) { |
} |
||||||
if('jpg,jpeg,png,gif,svg,psd'.includes(ext)) return true |
} |
||||||
return false |
}, |
||||||
}, |
// 传入文件后缀判断是否是视频
|
||||||
// 传入文件后缀判断是否是pdf以外的文档
|
isVideo(ext) { |
||||||
isDoc(ext) { |
if ("mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv".includes(ext)) return true; |
||||||
if(!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && ext != 'pdf') return true |
return false; |
||||||
return false |
}, |
||||||
}, |
// 传入文件后缀判断是否是音频
|
||||||
// 循环去除html标签
|
isAudio(ext) { |
||||||
removeHtmlTag(list,attr) { |
if ("mp3,aac,ape,flac,wav,wma,amr,mid".includes(ext)) return true; |
||||||
list.map(n => { |
return false; |
||||||
n[attr] = n[attr].replace(/<\/?.+?>/gi,'') |
}, |
||||||
}) |
// 传入文件后缀判断是否是图片
|
||||||
return list |
isImg(ext) { |
||||||
}, |
if ("jpg,jpeg,png,gif,svg,psd".includes(ext)) return true; |
||||||
// 传入文件名获取文件后缀
|
return false; |
||||||
getFileExt(fileName) { |
}, |
||||||
return fileName.substring(fileName.lastIndexOf('.') + 1) |
// 传入文件后缀判断是否是pdf以外的文档
|
||||||
}, |
isDoc(ext) { |
||||||
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
|
if (!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && ext != "pdf") return true; |
||||||
downloadFile(fileName,url) { |
return false; |
||||||
var x = new XMLHttpRequest() |
}, |
||||||
x.open("GET", url, true) |
// 循环去除html标签
|
||||||
x.responseType = 'blob' |
removeHtmlTag(list, attr) { |
||||||
x.onload=function(e) { |
list.map(n => { |
||||||
var url = window.URL.createObjectURL(x.response) |
n[attr] = n[attr].replace(/<\/?.+?>/gi, ""); |
||||||
var a = document.createElement('a') |
}); |
||||||
a.href = url |
return list; |
||||||
a.download = fileName |
}, |
||||||
a.click() |
// 传入文件名获取文件后缀
|
||||||
} |
getFileExt(fileName) { |
||||||
x.send() |
return fileName.substring(fileName.lastIndexOf(".") + 1); |
||||||
}, |
}, |
||||||
// 传入文件名和数据,下载文件
|
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
|
||||||
downloadFileDirect(fileName,data) { |
downloadFile(fileName, url) { |
||||||
if ('download' in document.createElement('a')) { // 非IE下载
|
var x = new XMLHttpRequest(); |
||||||
const elink = document.createElement('a') |
x.open("GET", url, true); |
||||||
elink.download = fileName |
x.responseType = "blob"; |
||||||
elink.style.display = 'none' |
x.onload = function(e) { |
||||||
elink.href = URL.createObjectURL(data) |
var url = window.URL.createObjectURL(x.response); |
||||||
document.body.appendChild(elink) |
var a = document.createElement("a"); |
||||||
elink.click() |
a.href = url; |
||||||
URL.revokeObjectURL(elink.href) // 释放URL 对象
|
a.download = fileName; |
||||||
document.body.removeChild(elink) |
a.click(); |
||||||
} else { // IE10+下载
|
}; |
||||||
navigator.msSaveBlob(data, fileName) |
x.send(); |
||||||
} |
}, |
||||||
}, |
// 传入文件名和数据,下载文件
|
||||||
// 成功提示
|
downloadFileDirect(fileName, data) { |
||||||
successMsg(message,duration = 3000) { |
if ("download" in document.createElement("a")) { // 非IE下载
|
||||||
return Message.success({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration}) |
const elink = document.createElement("a"); |
||||||
}, |
elink.download = fileName; |
||||||
// 警告提示
|
elink.style.display = "none"; |
||||||
warningMsg(message,duration = 3000) { |
elink.href = URL.createObjectURL(data); |
||||||
return Message.warning({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration}) |
document.body.appendChild(elink); |
||||||
}, |
elink.click(); |
||||||
// 错误提示
|
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||||
errorMsg(message,duration = 3000) { |
document.body.removeChild(elink); |
||||||
return Message.error({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration}) |
} else { // IE10+下载
|
||||||
}, |
navigator.msSaveBlob(data, fileName); |
||||||
// 登录互踢
|
} |
||||||
getToken(){ |
}, |
||||||
if(process.env.NODE_ENV == 'production'){ |
// 成功提示
|
||||||
if(store.state.user.dataTime && !logout){ |
successMsg(message, duration = 3000) { |
||||||
axios.get(`${api.queryToken}?token=${_local.get(Setting.tokenKey)}`).then(res => { |
Message.closeAll(); |
||||||
if(store.state.user.dataTime && (res.data.message != store.state.user.dataTime)){ |
return Message.success({ |
||||||
logout || Message.error('您已在另一台设备登录,本次登录已下线!') |
message, |
||||||
logout = true |
showClose: true, |
||||||
setTimeout(() => { |
offset: (document.documentElement.clientHeight - 40) / 2, |
||||||
_local.remove(Setting.storeKey) |
duration |
||||||
_local.remove(Setting.tokenKey) |
}); |
||||||
location.reload() |
}, |
||||||
},1500) |
// 警告提示
|
||||||
} |
warningMsg(message, duration = 3000) { |
||||||
}).catch(err => {}) |
Message.closeAll(); |
||||||
|
return Message.warning({ |
||||||
|
message, |
||||||
|
showClose: true, |
||||||
|
offset: (document.documentElement.clientHeight - 40) / 2, |
||||||
|
duration |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 错误提示
|
||||||
|
errorMsg(message, duration = 3000) { |
||||||
|
Message.closeAll(); |
||||||
|
return Message.error({ |
||||||
|
message, |
||||||
|
showClose: true, |
||||||
|
offset: (document.documentElement.clientHeight - 40) / 2, |
||||||
|
duration |
||||||
|
}); |
||||||
|
}, |
||||||
|
// 登录互踢
|
||||||
|
getToken() { |
||||||
|
if (process.env.NODE_ENV == "production") { |
||||||
|
if (store.state.user.dataTime && !logout) { |
||||||
|
axios.get(`${api.queryToken}?token=${_local.get(Setting.tokenKey)}`).then(res => { |
||||||
|
if (store.state.user.dataTime && (res.data.message != store.state.user.dataTime)) { |
||||||
|
logout || Message.error("您已在另一台设备登录,本次登录已下线!"); |
||||||
|
logout = true; |
||||||
|
setTimeout(() => { |
||||||
|
_local.remove(Setting.storeKey); |
||||||
|
_local.remove(Setting.tokenKey); |
||||||
|
location.reload(); |
||||||
|
}, 1500); |
||||||
|
} |
||||||
|
}).catch(err => { |
||||||
|
}); |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
} |
}; |
||||||
} |
|
||||||
|
|
||||||
export default util |
export default util; |
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,8 @@ |
|||||||
export default { |
export default { |
||||||
beforeCreate() { |
beforeCreate() { |
||||||
document.querySelector('body').setAttribute('style', 'background-color:#fff') |
document.querySelector("body").setAttribute("style", "background-color:#fff"); |
||||||
}, |
}, |
||||||
beforeDestroy() { |
beforeDestroy() { |
||||||
document.body.removeAttribute('style') |
document.body.removeAttribute("style"); |
||||||
} |
} |
||||||
} |
}; |
@ -1,32 +1,278 @@ |
|||||||
<template> |
<template> |
||||||
<div> |
<div class="box"> |
||||||
课程学习 |
<div class="search"> |
||||||
|
<input type="text" placeholder="请输入课程名称" v-model="keyword" /> |
||||||
|
<button>搜索</button> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="main"> |
||||||
|
<div class="filter"> |
||||||
|
<dl> |
||||||
|
<dt>课程分类:</dt> |
||||||
|
<dd> |
||||||
|
<el-select v-model="classificationId" clearable placeholder="请选择课程分类" size="small" |
||||||
|
@change="getData"> |
||||||
|
<el-option label="不限" value=""></el-option> |
||||||
|
<el-option v-for="(item,index) in classificationList" :key="index" :label="item.name" |
||||||
|
:value="item.id"></el-option> |
||||||
|
</el-select> |
||||||
|
</dd> |
||||||
|
</dl> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="courses"> |
||||||
|
<template v-if="courseData.length"> |
||||||
|
<ul> |
||||||
|
<li v-for="(item, index) in courseData" :key="index" @click="toDetail(item.id)"> |
||||||
|
<img :src="item.coverUrl" alt="" /> |
||||||
|
<div class="title">{{ item.name }}</div> |
||||||
|
<div class="desc" :class="{ie: core.isIE(),ie: core.isFirefox()}" v-html="item.description"></div> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
<div class="pagination"> |
||||||
|
<el-pagination background layout="total, prev, pager, next" :total="totals" |
||||||
|
@current-change="handleCurrentChange" :current-page="pageNo"> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<div class="empty"> |
||||||
|
<div> |
||||||
|
<img src="@/assets/img/none.png" alt=""> |
||||||
|
<p>暂无课程</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
|
import { Loading } from "element-ui"; |
||||||
|
import bus from "@/libs/bus"; |
||||||
|
|
||||||
export default { |
export default { |
||||||
name: 'course', |
name: "course", |
||||||
data() { |
data() { |
||||||
return { |
return { |
||||||
|
userId: this.$store.state.userId, |
||||||
} |
schoolId: this.$store.state.schoolId, |
||||||
|
classificationId: "", |
||||||
|
classificationList: [], |
||||||
|
courseData: [], |
||||||
|
keyword: "", |
||||||
|
totals: 0, |
||||||
|
pageNo: 1, |
||||||
|
pageSize: 8, |
||||||
|
searchTimer: null, |
||||||
|
loadIns: null |
||||||
|
}; |
||||||
}, |
}, |
||||||
computed: { |
mounted() { |
||||||
|
bus.$emit("setBg", "course"); |
||||||
|
this.getClassification(); |
||||||
|
this.getData(); |
||||||
}, |
}, |
||||||
watch: { |
watch: { |
||||||
|
keyword: function(val) { |
||||||
|
clearTimeout(this.searchTimer); |
||||||
|
this.searchTimer = setTimeout(() => { |
||||||
|
this.initData(); |
||||||
|
}, 500); |
||||||
|
} |
||||||
}, |
}, |
||||||
methods: { |
methods: { |
||||||
|
getData() { |
||||||
}, |
this.loadIns = Loading.service(); |
||||||
mounted() { |
let data = { |
||||||
|
classificationId: this.classificationId, |
||||||
}, |
name: this.keyword, |
||||||
} |
port: 0, |
||||||
|
schoolId: this.schoolId |
||||||
|
}; |
||||||
|
this.$get(`${this.api.queryCourseByCondition}/${this.pageNo}/${this.pageSize}`, data).then(res => { |
||||||
|
this.courseData = res.courseList; |
||||||
|
this.totals = res.total; |
||||||
|
this.courseData.map(n => { |
||||||
|
n.description = n.description.replace(/<img.*?(?:>|\/>)/gi, ""); |
||||||
|
}); |
||||||
|
this.loadIns.close(); |
||||||
|
}).catch(res => { |
||||||
|
this.loadIns.close(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
initData() { |
||||||
|
this.pageNo = 1; |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
getClassification() { |
||||||
|
this.$get(this.api.queryGlClassification).then(res => { |
||||||
|
this.classificationList = res.classificationList; |
||||||
|
}).catch(res => { |
||||||
|
}); |
||||||
|
}, |
||||||
|
changeType(type) { |
||||||
|
this.classificationId = type; |
||||||
|
this.initData(); |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { |
||||||
|
this.pageNo = val; |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
toDetail(id) { |
||||||
|
this.$router.push(`/course/details?id=${id}`); |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
</script> |
</script> |
||||||
|
|
||||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||||
|
.box { |
||||||
|
padding: 20px; |
||||||
|
background-color: #fff; |
||||||
|
|
||||||
|
.search { |
||||||
|
position: relative; |
||||||
|
width: 30%; |
||||||
|
margin: 50px auto; |
||||||
|
border-radius: 30px; |
||||||
|
border: 1px solid #9076FF; |
||||||
|
border-right: 0; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
input { |
||||||
|
width: 100%; |
||||||
|
height: 44px; |
||||||
|
line-height: 44px; |
||||||
|
padding: 0 20px; |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
border: 0; |
||||||
|
outline: none !important; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
button { |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
padding: 0 20px; |
||||||
|
line-height: 46px; |
||||||
|
color: #fff; |
||||||
|
background-color: #9076FF; |
||||||
|
border: 0; |
||||||
|
outline: none !important; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.main { |
||||||
|
width: 70%; |
||||||
|
min-width: 920px; |
||||||
|
padding: 40px; |
||||||
|
margin: 0 auto; |
||||||
|
border-radius: 16px; |
||||||
|
background-color: #fdfdfd; |
||||||
|
box-sizing: border-box; |
||||||
|
|
||||||
|
.filter { |
||||||
|
margin-bottom: 10px; |
||||||
|
|
||||||
|
dl { |
||||||
|
display: flex; |
||||||
|
line-height: 30px; |
||||||
|
|
||||||
|
dt { |
||||||
|
color: rgba(0, 0, 0, .85); |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
|
||||||
|
dd { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
|
||||||
|
span { |
||||||
|
padding: 2px 10px; |
||||||
|
margin: 0 10px; |
||||||
|
color: rgba(0, 0, 0, .65); |
||||||
|
font-size: 14px; |
||||||
|
|
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
color: #CC221C; |
||||||
|
} |
||||||
|
|
||||||
|
&.classification { |
||||||
|
border-radius: 4px; |
||||||
|
color: #fff; |
||||||
|
background-color: #CC221C; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.courses { |
||||||
|
ul { |
||||||
|
display: flex; |
||||||
|
flex-wrap: wrap; |
||||||
|
|
||||||
|
li { |
||||||
|
width: 24%; |
||||||
|
min-height: 250px; |
||||||
|
overflow: hidden; |
||||||
|
padding: 10px; |
||||||
|
margin: 10px .5%; |
||||||
|
box-sizing: border-box; |
||||||
|
cursor: pointer; |
||||||
|
border-radius: 8px; |
||||||
|
background-color: #fff; |
||||||
|
transition: all 0.3s; |
||||||
|
|
||||||
|
img { |
||||||
|
width: 100%; |
||||||
|
height: 165px; |
||||||
|
} |
||||||
|
|
||||||
|
.title { |
||||||
|
margin: 10px 0 5px; |
||||||
|
color: #333; |
||||||
|
font-size: 16px; |
||||||
|
word-wrap: break-word; |
||||||
|
word-break: break-all; |
||||||
|
overflow: hidden; |
||||||
|
text-overflow: ellipsis; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
|
||||||
|
.desc span { |
||||||
|
color: #f00; |
||||||
|
font-size: 14px; |
||||||
|
background-color: #f00; |
||||||
|
} |
||||||
|
|
||||||
|
.desc { |
||||||
|
color: #999; |
||||||
|
font-size: 14px; |
||||||
|
display: -webkit-box; |
||||||
|
-webkit-box-orient: vertical; |
||||||
|
-webkit-line-clamp: 2; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
&.ie { |
||||||
|
height: 80px; |
||||||
|
text-overflow: ellipsis; |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&:hover { |
||||||
|
box-shadow: 0px 5px 12px 4px rgba(142, 123, 253, 0.09), 0px 3px 6px 0px rgba(142, 123, 253, 0.12), 0px 1px 2px -2px rgba(142, 123, 253, 0.16); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
</style> |
</style> |
@ -1,59 +1,64 @@ |
|||||||
<template> |
<template> |
||||||
<div class="error-page"> |
<div class="error-page"> |
||||||
<div class="error-code">4<span>0</span>4</div> |
<div class="error-code">4<span>0</span>4</div> |
||||||
<div class="error-desc">啊哦~ 你所访问的页面不存在</div> |
<div class="error-desc">啊哦~ 你所访问的页面不存在</div> |
||||||
<div class="error-handle"> |
<div class="error-handle"> |
||||||
<router-link to="/"> |
<router-link to="/"> |
||||||
<el-button type="primary" size="large" @click="toIndex">返回首页</el-button> |
<el-button type="primary" size="large" @click="toIndex">返回首页</el-button> |
||||||
</router-link> |
</router-link> |
||||||
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button> |
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button> |
||||||
</div> |
</div> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
export default { |
export default { |
||||||
methods: { |
methods: { |
||||||
toIndex(){ |
toIndex() { |
||||||
this.$router.push('/') |
this.$router.push("/"); |
||||||
}, |
}, |
||||||
goBack(){ |
goBack() { |
||||||
this.$router.go(-1); |
this.$router.go(-1); |
||||||
} |
} |
||||||
} |
} |
||||||
} |
}; |
||||||
</script> |
</script> |
||||||
|
|
||||||
|
|
||||||
<style scoped> |
<style scoped> |
||||||
.error-page{ |
.error-page { |
||||||
display: flex; |
display: flex; |
||||||
justify-content: center; |
justify-content: center; |
||||||
align-items: center; |
align-items: center; |
||||||
flex-direction: column; |
flex-direction: column; |
||||||
width: 100%; |
width: 100%; |
||||||
height: 100%; |
height: 100%; |
||||||
background: #f3f3f3; |
background: #f3f3f3; |
||||||
box-sizing: border-box; |
box-sizing: border-box; |
||||||
} |
} |
||||||
.error-code{ |
|
||||||
line-height: 1; |
.error-code { |
||||||
font-size: 250px; |
line-height: 1; |
||||||
font-weight: bolder; |
font-size: 250px; |
||||||
color: #2d8cf0; |
font-weight: bolder; |
||||||
} |
color: #2d8cf0; |
||||||
.error-code span{ |
} |
||||||
color: #00a854; |
|
||||||
} |
.error-code span { |
||||||
.error-desc{ |
color: #00a854; |
||||||
font-size: 30px; |
} |
||||||
color: #777; |
|
||||||
} |
.error-desc { |
||||||
.error-handle{ |
font-size: 30px; |
||||||
margin-top: 30px; |
color: #777; |
||||||
padding-bottom: 200px; |
} |
||||||
} |
|
||||||
.error-btn{ |
.error-handle { |
||||||
margin-left: 100px; |
margin-top: 30px; |
||||||
} |
padding-bottom: 200px; |
||||||
|
} |
||||||
|
|
||||||
|
.error-btn { |
||||||
|
margin-left: 100px; |
||||||
|
} |
||||||
</style> |
</style> |
||||||
|
@ -1,31 +1,30 @@ |
|||||||
<template> |
<template> |
||||||
<div class="wrap"> |
<div class="wrap"> |
||||||
|
|
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
import { mapState } from 'vuex' |
import { mapState } from "vuex"; |
||||||
|
|
||||||
export default { |
export default { |
||||||
name: 'index', |
name: "index", |
||||||
data() { |
data() { |
||||||
return { |
return {}; |
||||||
|
|
||||||
} |
|
||||||
}, |
}, |
||||||
mounted() { |
mounted() { |
||||||
this.getHot() |
this.getHot(); |
||||||
}, |
}, |
||||||
methods: { |
methods: { |
||||||
getData(){ |
getData() { |
||||||
|
|
||||||
}, |
} |
||||||
} |
} |
||||||
}; |
}; |
||||||
</script> |
</script> |
||||||
|
|
||||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||||
.wrap{ |
.wrap { |
||||||
|
|
||||||
} |
} |
||||||
</style> |
</style> |
@ -1,32 +0,0 @@ |
|||||||
<template> |
|
||||||
<div> |
|
||||||
资讯 |
|
||||||
</div> |
|
||||||
</template> |
|
||||||
|
|
||||||
<script> |
|
||||||
export default { |
|
||||||
name: 'information', |
|
||||||
data() { |
|
||||||
return { |
|
||||||
|
|
||||||
} |
|
||||||
}, |
|
||||||
computed: { |
|
||||||
|
|
||||||
}, |
|
||||||
watch: { |
|
||||||
|
|
||||||
}, |
|
||||||
methods: { |
|
||||||
|
|
||||||
}, |
|
||||||
mounted() { |
|
||||||
|
|
||||||
}, |
|
||||||
} |
|
||||||
</script> |
|
||||||
|
|
||||||
<style lang="scss" scoped> |
|
||||||
|
|
||||||
</style> |
|
@ -1,32 +1,573 @@ |
|||||||
<template> |
<template> |
||||||
<div> |
<div class="box"> |
||||||
线上赛事 |
<div class="search"> |
||||||
|
<input type="text" placeholder="请输入竞赛名称" v-model="keyword" /> |
||||||
|
<button>搜索</button> |
||||||
|
</div> |
||||||
|
|
||||||
|
<div class="main"> |
||||||
|
<div class="nav"> |
||||||
|
<div class="sub-title">赛事报名</div> |
||||||
|
<div class="sidebar"> |
||||||
|
<div class="item" :class="{ active: way === item.id }" v-for="(item, index) in typeList" |
||||||
|
:key="index" @click="changeType(item.id)">{{ item.name }} |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="list-wrap"> |
||||||
|
<div class="list"> |
||||||
|
<template v-if="listData.length"> |
||||||
|
<ul> |
||||||
|
<li v-for="(item,index) in listData" :key="index" @click="toDetail(item)"> |
||||||
|
<div class="left"> |
||||||
|
<div class="cover"> |
||||||
|
<img :src="item.coverUrl" alt=""> |
||||||
|
</div> |
||||||
|
<div class="info"> |
||||||
|
<div class="title">{{ item.name }}</div> |
||||||
|
<div class="metas"> |
||||||
|
<div :class="{'flex-top': item.sponsor.split(',').length > 1}"> |
||||||
|
<span class="label">主办方:</span> |
||||||
|
<template v-if="item.sponsor.split(',').length > 1"> |
||||||
|
<div> |
||||||
|
<span v-for="(sponsor,index) in item.sponsor.split(',')" |
||||||
|
:key="index" class="val a-line">{{ sponsor }}</span> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<span v-else class="val">{{ item.sponsor }}</span> |
||||||
|
</div> |
||||||
|
<div :class="{'flex-top': item.undertaker.split(',').length > 1}"> |
||||||
|
<span class="label">承办方:</span> |
||||||
|
<template v-if="item.undertaker.split(',').length > 1"> |
||||||
|
<div> |
||||||
|
<span v-for="(undertaker,index) in item.undertaker.split(',')" |
||||||
|
:key="index" class="val a-line">{{ undertaker }}</span> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<span v-else class="val">{{ item.undertaker }}</span> |
||||||
|
</div> |
||||||
|
<p> |
||||||
|
<span class="label">报名时间:</span><span class="val">{{ item.signUpStartTime}} ~ {{ item.signUpEndTime }}</span> |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
<span class="label">比赛时间:</span><span class="val">{{ item.playStartTime}} ~ {{ item.playEndTime }}</span> |
||||||
|
</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="right"> |
||||||
|
<p class="status" |
||||||
|
:class="{wait: item.status == 0 || item.status == 4,signing: item.status == 2,signed: item.status == 1,finish: item.status == 3 || item.status == 5}" |
||||||
|
@click.stop="signup(item)">{{ statusList[item.status] }}</p> |
||||||
|
<p class="end-text" v-if="item.status != 5">距离{{ endList[item.status] }}还有 |
||||||
|
<template v-if="item.end > 0">{{ item.end }}天</template> |
||||||
|
<em v-else v-countdown="index">{{ item.end }}</em></p> |
||||||
|
</div> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
<div class="pagination"> |
||||||
|
<el-pagination background layout="total, prev, pager, next" :total="totals" |
||||||
|
@current-change="handleCurrentChange" |
||||||
|
:current-page="pageNo"> |
||||||
|
</el-pagination> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<template v-else> |
||||||
|
<div class="empty"> |
||||||
|
<div> |
||||||
|
<img src="@/assets/img/none.png" alt=""> |
||||||
|
<p>暂无赛事</p> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script> |
<script> |
||||||
|
import { mapState, mapActions } from "vuex"; |
||||||
|
import { Loading } from "element-ui"; |
||||||
|
import bus from "@/libs/bus"; |
||||||
|
|
||||||
export default { |
export default { |
||||||
name: 'match', |
name: "match", |
||||||
data() { |
data() { |
||||||
return { |
return { |
||||||
|
way: "", |
||||||
} |
statusList: ["等待报名", "已报名", "立即报名", "报名截止", "比赛中", "已结束"], |
||||||
|
endList: ["报名开始", "报名截止", "报名截止", "竞赛开始", "竞赛结束", ""], |
||||||
|
typeList: [ |
||||||
|
{ |
||||||
|
id: "", |
||||||
|
name: "近期报名" |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 0, |
||||||
|
name: "最近更新" |
||||||
|
}, |
||||||
|
{ |
||||||
|
id: 1, |
||||||
|
name: "已报名" |
||||||
|
} |
||||||
|
], |
||||||
|
keyword: "", |
||||||
|
searchTimer: null, |
||||||
|
pageNo: 1, |
||||||
|
pageSize: 10, |
||||||
|
totals: 0, |
||||||
|
listData: [], |
||||||
|
covers: [], |
||||||
|
loadIns: null, |
||||||
|
contestIds: [], |
||||||
|
isFirst: true, |
||||||
|
timerList: [] |
||||||
|
}; |
||||||
}, |
}, |
||||||
computed: { |
computed: { |
||||||
|
...mapState([ |
||||||
|
"userId", |
||||||
|
"name", |
||||||
|
"account", |
||||||
|
"phone", |
||||||
|
"schoolName" |
||||||
|
]) |
||||||
|
}, |
||||||
|
directives: { |
||||||
|
countdown: { |
||||||
|
bind: function(el, binding, vnode) { |
||||||
|
let that = vnode.context; |
||||||
|
let item = that.listData[binding.value]; |
||||||
|
let time = ""; |
||||||
|
|
||||||
|
let second = 1000; |
||||||
|
let minute = second * 60; |
||||||
|
let hour = minute * 60; |
||||||
|
let now = new Date().getTime(); |
||||||
|
let signUpStartTime = new Date(that.core.dateCompatible(item.signUpStartTime)).getTime(); // 报名开始时间 |
||||||
|
let signUpEndTime = new Date(that.core.dateCompatible(item.signUpEndTime)).getTime(); // 报名结束时间 |
||||||
|
let playStartTime = new Date(that.core.dateCompatible(item.playStartTime)).getTime(); // 比赛开始时间 |
||||||
|
let playEndTime = new Date(that.core.dateCompatible(item.playEndTime)).getTime(); // 比赛结束时间 |
||||||
|
switch (item.status) { |
||||||
|
// status每个值的解释请看getData方法 |
||||||
|
case 0: |
||||||
|
if (now > signUpStartTime) { |
||||||
|
item.status = 1; |
||||||
|
} else { |
||||||
|
time = signUpStartTime - now; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 1: |
||||||
|
if (now > signUpEndTime) { |
||||||
|
item.status = 3; |
||||||
|
} else { |
||||||
|
time = signUpEndTime - now; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 2: |
||||||
|
if (now > signUpEndTime) { |
||||||
|
item.status = 3; |
||||||
|
} else { |
||||||
|
time = signUpEndTime - now; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 3: |
||||||
|
if (now > playStartTime) { |
||||||
|
item.status = 4; |
||||||
|
} else { |
||||||
|
time = playStartTime - now; |
||||||
|
} |
||||||
|
break; |
||||||
|
case 4: |
||||||
|
if (now > playEndTime) { |
||||||
|
item.status = 5; |
||||||
|
} else { |
||||||
|
time = playEndTime - now; |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
time = `${Math.floor(time / hour)}:${Math.floor(time % hour / minute)}:${Math.floor(time % hour % minute / second)}`; |
||||||
|
let timer = setInterval(() => { |
||||||
|
let timeList = time.split(":"); |
||||||
|
let total = Number.parseInt(timeList[0] * 60 * 60) + Number.parseInt(timeList[1] * 60) + Number.parseInt(timeList[2]); |
||||||
|
if (total > 0) { |
||||||
|
--total; |
||||||
|
let hours = Math.floor(total / (60 * 60)); |
||||||
|
let minutes = Math.floor(total % (60 * 60) / 60); |
||||||
|
let seconds = Math.floor(total % (60 * 60) % 60); |
||||||
|
time = `${that.core.formateTime(hours)}:${that.core.formateTime(minutes)}:${that.core.formateTime(seconds)}`; |
||||||
|
} else { |
||||||
|
clearInterval(timer); |
||||||
|
} |
||||||
|
el.innerHTML = time; |
||||||
|
}, 1000); |
||||||
|
that.timerList.push(timer); |
||||||
|
} |
||||||
|
} |
||||||
}, |
}, |
||||||
watch: { |
watch: { |
||||||
|
keyword: function(val) { |
||||||
|
clearTimeout(this.searchTimer); |
||||||
|
this.searchTimer = setTimeout(() => { |
||||||
|
this.getData(); |
||||||
|
}, 500); |
||||||
|
} |
||||||
|
}, |
||||||
|
mounted() { |
||||||
|
bus.$emit("setBg", "match"); |
||||||
|
this.getData(); |
||||||
|
|
||||||
|
this.$once("hook:beforeDestroy", function() { |
||||||
|
this.timerList.forEach((n, k) => { |
||||||
|
clearInterval(n); |
||||||
|
}); |
||||||
|
this.timerList = []; |
||||||
|
}); |
||||||
}, |
}, |
||||||
methods: { |
methods: { |
||||||
|
...mapActions("match", [ |
||||||
|
"setMatchId", "setMatchSignupStatus" |
||||||
|
]), |
||||||
|
getData() { |
||||||
|
let data = { |
||||||
|
name: this.keyword, |
||||||
|
way: this.way, |
||||||
|
userId: this.userId |
||||||
|
}; |
||||||
|
this.loadIns = Loading.service(); |
||||||
|
this.$get(`${this.api.onlineContestQuery}/${this.pageNo}/${this.pageSize}`, data).then(res => { |
||||||
|
this.listData = res.contestList; |
||||||
|
let contestIds = res.contestIds; |
||||||
|
this.contestIds = contestIds; |
||||||
|
let time = 60 * 60 * 1000 * 24; |
||||||
|
let covers = []; |
||||||
|
this.listData.forEach((n, k) => { |
||||||
|
let now = new Date().getTime(); |
||||||
|
let signUpStartTime = new Date(this.core.dateCompatible(n.signUpStartTime)).getTime(); // 报名开始时间 |
||||||
|
let signUpEndTime = new Date(this.core.dateCompatible(n.signUpEndTime)).getTime(); // 报名结束时间 |
||||||
|
let playStartTime = new Date(this.core.dateCompatible(n.playStartTime)).getTime(); // 比赛开始时间 |
||||||
|
let playEndTime = new Date(this.core.dateCompatible(n.playEndTime)).getTime(); // 比赛结束时间 |
||||||
|
|
||||||
}, |
if (now < signUpStartTime) { // 报名没开始 |
||||||
mounted() { |
n.status = 0; |
||||||
|
n.end = Math.floor((signUpStartTime - now) / time); |
||||||
|
} else if (now > signUpStartTime && now < signUpEndTime) { // 报名进行中 |
||||||
|
n.status = 1; |
||||||
|
n.end = Math.floor((signUpEndTime - now) / time); |
||||||
|
} else if (now > signUpEndTime && now < playStartTime) { // 报名结束了,但比赛没开始 |
||||||
|
n.status = 3; |
||||||
|
n.end = Math.floor((playStartTime - now) / time); |
||||||
|
} else if (now > playStartTime && now < playEndTime) { // 比赛进行中 |
||||||
|
n.status = 4; |
||||||
|
n.end = Math.floor((playEndTime - now) / time); |
||||||
|
} else if (now > playEndTime) { // 比赛结束 |
||||||
|
n.status = 5; |
||||||
|
} |
||||||
|
|
||||||
}, |
// 判断该用户已报名的比赛id集合中有没有该比赛id |
||||||
} |
let isInclude = contestIds.includes(n.id); |
||||||
|
if (n.status == 1 && !isInclude) { // 如果报名在进行中,而且该用户没报名,则显示报名按钮,必须status为2,并且signup为true才能报名,下面报名的方法中有做判断 |
||||||
|
n.status = 2; |
||||||
|
n.signup = true; |
||||||
|
} else { |
||||||
|
n.signup = false; |
||||||
|
} |
||||||
|
(covers.length < 3 && n.carouselUrl) && covers.push(n); |
||||||
|
}); |
||||||
|
if (this.isFirst) this.covers = covers; |
||||||
|
this.totals = res.total; |
||||||
|
this.loadIns.close(); |
||||||
|
this.isFirst = false; |
||||||
|
}).catch(res => { |
||||||
|
this.loadIns.close(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
changeType(type) { |
||||||
|
this.way = type; |
||||||
|
if (type != 1) { |
||||||
|
this.getData(); |
||||||
|
} else { |
||||||
|
let listData = this.listData; |
||||||
|
let result = []; |
||||||
|
listData.forEach((n, k) => { |
||||||
|
let isInclude = this.contestIds.includes(n.id); |
||||||
|
if (n.status == 1 && isInclude) { |
||||||
|
result.push(n); |
||||||
|
} |
||||||
|
}); |
||||||
|
this.listData = result; |
||||||
|
this.totals = this.listData.length; |
||||||
|
} |
||||||
|
}, |
||||||
|
toDetail(item) { |
||||||
|
let status = item.status == 1 ? (item.signup ? true : false) : "hide"; |
||||||
|
this.setMatchId(item.id); |
||||||
|
this.setMatchSignupStatus(status); |
||||||
|
this.$router.push(`/match/details`); |
||||||
|
}, |
||||||
|
handleCurrentChange(val) { |
||||||
|
this.pageNo = val; |
||||||
|
this.getData(); |
||||||
|
}, |
||||||
|
signup(item) { |
||||||
|
if (item.status == 2 && item.signup) { |
||||||
|
let data = { |
||||||
|
contestId: item.id, |
||||||
|
account: this.account, |
||||||
|
phone: this.phone, |
||||||
|
school: this.schoolName, |
||||||
|
userId: this.userId, |
||||||
|
username: this.name |
||||||
|
}; |
||||||
|
this.$post(this.api.addApplicant, data).then(res => { |
||||||
|
if (res.success) { |
||||||
|
this.$message.success("报名成功"); |
||||||
|
this.getData(); |
||||||
|
} else { |
||||||
|
this.$message.error(res.message); |
||||||
|
} |
||||||
|
}).catch(res => { |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
}; |
||||||
</script> |
</script> |
||||||
|
|
||||||
<style lang="scss" scoped> |
<style lang="scss" scoped> |
||||||
|
.box { |
||||||
|
padding: 20px; |
||||||
|
|
||||||
|
.search { |
||||||
|
position: relative; |
||||||
|
width: 30%; |
||||||
|
margin: 50px auto; |
||||||
|
border-radius: 30px; |
||||||
|
border: 1px solid #9076FF; |
||||||
|
border-right: 0; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
input { |
||||||
|
width: 100%; |
||||||
|
height: 44px; |
||||||
|
line-height: 44px; |
||||||
|
padding: 0 20px; |
||||||
|
font-size: 14px; |
||||||
|
color: #333; |
||||||
|
border: 0; |
||||||
|
outline: none !important; |
||||||
|
box-sizing: border-box; |
||||||
|
} |
||||||
|
|
||||||
|
button { |
||||||
|
position: absolute; |
||||||
|
top: 0; |
||||||
|
right: 0; |
||||||
|
padding: 0 20px; |
||||||
|
line-height: 46px; |
||||||
|
color: #fff; |
||||||
|
background-color: #9076FF; |
||||||
|
border: 0; |
||||||
|
outline: none !important; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.main { |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: flex-start; |
||||||
|
padding-bottom: 40px; |
||||||
|
margin-top: 20px; |
||||||
|
|
||||||
|
.nav { |
||||||
|
width: 220px; |
||||||
|
border-radius: 8px; |
||||||
|
overflow: hidden; |
||||||
|
|
||||||
|
.sub-title { |
||||||
|
line-height: 88px; |
||||||
|
color: #fff; |
||||||
|
font-size: 24px; |
||||||
|
text-align: center; |
||||||
|
background: #9076FF; |
||||||
|
} |
||||||
|
|
||||||
|
/deep/ .sidebar { |
||||||
|
background-color: #fff; |
||||||
|
|
||||||
|
.item { |
||||||
|
padding: 15px 0; |
||||||
|
color: rgba(0, 0, 0, .85); |
||||||
|
font-size: 18px; |
||||||
|
text-align: center; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
&.active { |
||||||
|
color: #9076FF; |
||||||
|
} |
||||||
|
|
||||||
|
&:hover { |
||||||
|
background-color: #f4f1ff; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.list-wrap { |
||||||
|
width: 50%; |
||||||
|
min-width: 790px; |
||||||
|
margin-left: 40px; |
||||||
|
|
||||||
|
.list { |
||||||
|
padding: 32px; |
||||||
|
background-color: #fff; |
||||||
|
border-radius: 8px; |
||||||
|
|
||||||
|
li { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
padding-bottom: 24px; |
||||||
|
margin-bottom: 20px; |
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
transition: all 0.3s; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
.left { |
||||||
|
display: inline-flex; |
||||||
|
|
||||||
|
.cover { |
||||||
|
img { |
||||||
|
width: 200px; |
||||||
|
height: 120px; |
||||||
|
border-radius: 4px; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.info { |
||||||
|
display: inline-flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: space-between; |
||||||
|
margin-left: 20px; |
||||||
|
|
||||||
|
.title { |
||||||
|
font-size: 20px; |
||||||
|
color: rgba(0, 0, 0, .85); |
||||||
|
} |
||||||
|
|
||||||
|
.metas { |
||||||
|
font-size: 14px; |
||||||
|
color: #999; |
||||||
|
|
||||||
|
div { |
||||||
|
display: flex; |
||||||
|
align-items: center; |
||||||
|
margin-bottom: 5px; |
||||||
|
|
||||||
|
&.flex-top { |
||||||
|
align-items: flex-start; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.label, .val { |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, .65); |
||||||
|
white-space: nowrap; |
||||||
|
} |
||||||
|
|
||||||
|
.val { |
||||||
|
max-width: 350px; |
||||||
|
} |
||||||
|
|
||||||
|
.a-line { |
||||||
|
display: block; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.desc { |
||||||
|
font-size: 14px; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.right { |
||||||
|
display: flex; |
||||||
|
flex-direction: column; |
||||||
|
justify-content: center; |
||||||
|
align-items: flex-end; |
||||||
|
flex: 1; |
||||||
|
|
||||||
|
.status { |
||||||
|
padding: 0 15px; |
||||||
|
line-height: 32px; |
||||||
|
font-size: 12px; |
||||||
|
color: #fff; |
||||||
|
background-color: #52C41A; |
||||||
|
border-radius: 4px; |
||||||
|
|
||||||
|
&.wait { |
||||||
|
background-color: #FAAD14; |
||||||
|
} |
||||||
|
|
||||||
|
&.signing { |
||||||
|
background-color: #9076FF; |
||||||
|
} |
||||||
|
|
||||||
|
&.signed { |
||||||
|
background-color: #52C41A; |
||||||
|
} |
||||||
|
|
||||||
|
&.finish { |
||||||
|
background-color: rgba(0, 0, 0, .45); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.btn { |
||||||
|
padding: 12px 20px; |
||||||
|
color: #fff; |
||||||
|
background-color: #cb221c; |
||||||
|
border-radius: 4px; |
||||||
|
cursor: pointer; |
||||||
|
|
||||||
|
&:hover { |
||||||
|
opacity: .9; |
||||||
|
} |
||||||
|
|
||||||
|
&.disabled { |
||||||
|
cursor: not-allowed; |
||||||
|
background-color: #969696; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.end-text { |
||||||
|
margin-top: 10px; |
||||||
|
color: rgba(0, 0, 0, .65); |
||||||
|
font-size: 14px; |
||||||
|
white-space: nowrap; |
||||||
|
|
||||||
|
em { |
||||||
|
font-size: 20px; |
||||||
|
font-style: normal; |
||||||
|
font-weight: bold; |
||||||
|
color: #cb221c; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
&:hover { |
||||||
|
.left { |
||||||
|
.info { |
||||||
|
.title { |
||||||
|
color: #9076FF; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
border-bottom-color: #9076FF; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
</style> |
</style> |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,27 +1,27 @@ |
|||||||
import router from './index' |
import router from "./index"; |
||||||
import Setting from '@/setting' |
import Setting from "@/setting"; |
||||||
import util from '@/libs/util' |
import util from "@/libs/util"; |
||||||
|
|
||||||
router.beforeEach((to, from, next) => { |
router.beforeEach((to, from, next) => { |
||||||
document.title = Setting.titleSuffix |
document.title = Setting.titleSuffix; |
||||||
const role = util.local.get(Setting.tokenKey) |
const role = util.local.get(Setting.tokenKey); |
||||||
if (!role && to.path !== '/login') { |
if (!role && to.path !== "/login") { |
||||||
next('/login') |
next("/login"); |
||||||
} else if(role && to.path == '/login') { |
} else if (role && to.path == "/login") { |
||||||
next('/index') |
next("/index"); |
||||||
} else { |
} else { |
||||||
let mg = from.query.mg |
let mg = from.query.mg; |
||||||
if(mg){ |
if (mg) { |
||||||
if(!to.query.mg){ |
if (!to.query.mg) { |
||||||
next({ |
next({ |
||||||
path: to.path, |
path: to.path, |
||||||
query: {mg} |
query: { mg } |
||||||
}) |
}); |
||||||
}else{ |
} else { |
||||||
next() |
next(); |
||||||
} |
} |
||||||
}else{ |
} else { |
||||||
next() |
next(); |
||||||
} |
} |
||||||
} |
} |
||||||
}); |
}); |
@ -1,4 +1,2 @@ |
|||||||
const getters = { |
const getters = {}; |
||||||
|
export default getters; |
||||||
} |
|
||||||
export default getters |
|
@ -1,25 +1,25 @@ |
|||||||
import Vue from 'vue'; |
import Vue from "vue"; |
||||||
import Vuex from 'vuex'; |
import Vuex from "vuex"; |
||||||
import getters from './getters' |
import getters from "./getters"; |
||||||
|
|
||||||
Vue.use(Vuex); |
Vue.use(Vuex); |
||||||
|
|
||||||
// https://webpack.js.org/guides/dependency-management/#requirecontext
|
// https://webpack.js.org/guides/dependency-management/#requirecontext
|
||||||
const modulesFiles = require.context('./modules', true, /\.js$/) |
const modulesFiles = require.context("./modules", true, /\.js$/); |
||||||
|
|
||||||
// you do not need `import app from './modules/app'`
|
// you do not need `import app from './modules/app'`
|
||||||
// it will auto require all vuex module from modules file
|
// it will auto require all vuex module from modules file
|
||||||
const modules = modulesFiles.keys().reduce((modules, modulePath) => { |
const modules = modulesFiles.keys().reduce((modules, modulePath) => { |
||||||
// set './app.js' => 'app'
|
// set './app.js' => 'app'
|
||||||
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') |
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1"); |
||||||
const value = modulesFiles(modulePath) |
const value = modulesFiles(modulePath); |
||||||
modules[moduleName] = value.default |
modules[moduleName] = value.default; |
||||||
return modules |
return modules; |
||||||
}, {}) |
}, {}); |
||||||
|
|
||||||
const store = new Vuex.Store({ |
const store = new Vuex.Store({ |
||||||
modules, |
modules, |
||||||
getters |
getters |
||||||
}) |
}); |
||||||
|
|
||||||
export default store |
export default store; |
@ -1,26 +1,26 @@ |
|||||||
/** |
/** |
||||||
* 项目、系统相关 |
* 项目、系统相关 |
||||||
* */ |
* */ |
||||||
export default { |
export default { |
||||||
namespaced: true, |
namespaced: true, |
||||||
state: { |
state: { |
||||||
lastSystemId: 1, |
lastSystemId: 1, |
||||||
lastRecordType: 'practice' |
lastRecordType: "practice" |
||||||
}, |
}, |
||||||
mutations: { |
mutations: { |
||||||
SET_SYSTEM_ID: (state, systemId) => { |
SET_SYSTEM_ID: (state, systemId) => { |
||||||
state.lastSystemId = systemId |
state.lastSystemId = systemId; |
||||||
}, |
}, |
||||||
SET_RECORD: (state, type) => { |
SET_RECORD: (state, type) => { |
||||||
state.lastRecordType = type |
state.lastRecordType = type; |
||||||
}, |
} |
||||||
}, |
}, |
||||||
actions: { |
actions: { |
||||||
setSystemId({ state,commit },systemId) { |
setSystemId({ state, commit }, systemId) { |
||||||
commit('SET_SYSTEM_ID',systemId) |
commit("SET_SYSTEM_ID", systemId); |
||||||
}, |
|
||||||
setRecord({ state,commit },type) { |
|
||||||
commit('SET_RECORD',type) |
|
||||||
}, |
}, |
||||||
|
setRecord({ state, commit }, type) { |
||||||
|
commit("SET_RECORD", type); |
||||||
|
} |
||||||
} |
} |
||||||
} |
}; |
@ -1,248 +1,301 @@ |
|||||||
@import "./default/index.scss"; |
@import "./default/index.scss"; |
||||||
|
|
||||||
@font-face{ |
@font-face { |
||||||
font-family: youshe; |
font-family: youshe; |
||||||
src: url('font/YouSheBiaoTiHei.ttf'); |
src: url('font/YouSheBiaoTiHei.ttf'); |
||||||
} |
} |
||||||
|
|
||||||
[v-cloak] { |
[v-cloak] { |
||||||
display: none; |
display: none; |
||||||
} |
} |
||||||
|
|
||||||
.flex-between{ |
.flex-between { |
||||||
display: flex; |
display: flex; |
||||||
justify-content: space-between; |
justify-content: space-between; |
||||||
align-items: center; |
align-items: center; |
||||||
} |
} |
||||||
|
|
||||||
::-webkit-scrollbar { |
::-webkit-scrollbar { |
||||||
width: 8px; |
width: 8px; |
||||||
height: 8px; |
height: 8px; |
||||||
} |
} |
||||||
|
|
||||||
::-webkit-scrollbar-thumb { |
::-webkit-scrollbar-thumb { |
||||||
width: 5px; |
width: 5px; |
||||||
border-radius: 6px; |
border-radius: 6px; |
||||||
background: rgba(142,123,253,.75); |
background: rgba(142, 123, 253, .75); |
||||||
} |
} |
||||||
|
|
||||||
.p-title{ |
.p-title { |
||||||
padding-left: 5px; |
padding-left: 5px; |
||||||
margin-bottom: 24px; |
margin-bottom: 24px; |
||||||
line-height: 1; |
line-height: 1; |
||||||
font-size: 14px; |
font-size: 14px; |
||||||
color: #585858; |
color: #585858; |
||||||
border-left: 3px solid $--color-primary; |
border-left: 3px solid $--color-primary; |
||||||
} |
} |
||||||
|
|
||||||
.el-input{ |
.el-input { |
||||||
.el-input__inner{ |
.el-input__inner { |
||||||
border-color: rgba(0, 0, 0, 0.15); |
border-color: rgba(0, 0, 0, 0.15); |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
.filter{ |
.filter { |
||||||
|
display: inline-flex; |
||||||
|
align-items: center; |
||||||
|
flex: 1; |
||||||
|
|
||||||
|
li { |
||||||
display: inline-flex; |
display: inline-flex; |
||||||
align-items: center; |
align-items: center; |
||||||
flex: 1; |
margin-right: 30px; |
||||||
li{ |
|
||||||
display: inline-flex; |
label { |
||||||
align-items: center; |
margin-right: 10px; |
||||||
margin-right: 30px; |
font-size: 14px; |
||||||
label{ |
line-height: 14px; |
||||||
margin-right: 10px; |
color: rgba(0, 0, 0, .65); |
||||||
font-size: 14px; |
white-space: nowrap; |
||||||
line-height: 14px; |
} |
||||||
color: rgba(0,0,0,.65); |
|
||||||
white-space: nowrap; |
.el-radio { |
||||||
} |
margin-right: 10px !important; |
||||||
.el-radio{ |
|
||||||
margin-right: 10px!important; |
.el-radio__input { |
||||||
.el-radio__input{ |
display: none !important; |
||||||
display: none!important; |
} |
||||||
} |
|
||||||
} |
|
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
.page{ |
|
||||||
position: relative; |
.page { |
||||||
padding: 24px; |
position: relative; |
||||||
background-color: #fff; |
padding: 24px; |
||||||
border-radius: 8px; |
background-color: #fff; |
||||||
.tool{ |
border-radius: 8px; |
||||||
|
|
||||||
|
.tool { |
||||||
|
display: flex; |
||||||
|
justify-content: space-between; |
||||||
|
margin-bottom: 24px; |
||||||
|
|
||||||
|
.single-choice { |
||||||
|
dl { |
||||||
display: flex; |
display: flex; |
||||||
justify-content: space-between; |
line-height: 30px; |
||||||
margin-bottom: 24px; |
|
||||||
|
dt { |
||||||
.single-choice{ |
color: rgba(0, 0, 0, .65); |
||||||
dl { |
font-size: 14px; |
||||||
display: flex; |
white-space: nowrap; |
||||||
line-height: 30px; |
} |
||||||
dt { |
|
||||||
color: rgba(0,0,0,.65); |
dd { |
||||||
font-size: 14px; |
display: inline-flex; |
||||||
white-space: nowrap; |
align-items: center; |
||||||
} |
flex-wrap: wrap; |
||||||
dd { |
|
||||||
display: inline-flex; |
span { |
||||||
align-items: center; |
padding: 0 10px; |
||||||
flex-wrap: wrap; |
margin: 0 10px; |
||||||
span { |
color: #333; |
||||||
padding: 0 10px; |
font-size: 14px; |
||||||
margin: 0 10px; |
line-height: 1.8; |
||||||
color: #333; |
white-space: nowrap; |
||||||
font-size: 14px; |
|
||||||
line-height: 1.8; |
cursor: pointer; |
||||||
white-space: nowrap; |
|
||||||
|
&:hover { |
||||||
cursor: pointer; |
color: $--color-primary; |
||||||
&:hover { |
} |
||||||
color: $--color-primary; |
|
||||||
} |
&.active { |
||||||
&.active { |
border-radius: 4px; |
||||||
border-radius: 4px; |
color: #fff; |
||||||
color: #fff; |
background-color: $--color-primary; |
||||||
background-color: $--color-primary; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.pagination { |
.pagination { |
||||||
margin: 20px 0; |
margin: 20px 0; |
||||||
text-align: center; |
text-align: center; |
||||||
button,.number{ |
|
||||||
color: rgba(0,0,0,.65) !important; |
button, .number { |
||||||
background-color: transparent !important; |
color: rgba(0, 0, 0, .65) !important; |
||||||
border: 1px solid rgba(0, 0, 0, 0.15) !important; |
background-color: transparent !important; |
||||||
border-radius: 4px !important; |
border: 1px solid rgba(0, 0, 0, 0.15) !important; |
||||||
} |
border-radius: 4px !important; |
||||||
button i{ |
} |
||||||
color: #333; |
|
||||||
} |
button i { |
||||||
.active{ |
color: #333; |
||||||
color: #fff !important; |
} |
||||||
background-color: $--color-primary !important; |
|
||||||
} |
.active { |
||||||
|
color: #fff !important; |
||||||
|
background-color: $--color-primary !important; |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.el-table{ |
.el-table { |
||||||
border-radius: 8px; |
border-radius: 8px; |
||||||
border: 1px solid rgba(0, 0, 0, 0.06); |
border: 1px solid rgba(0, 0, 0, 0.06); |
||||||
border-bottom: 0; |
border-bottom: 0; |
||||||
th{ |
|
||||||
background: $--color-primary !important; |
th { |
||||||
.cell{ |
background: $--color-primary !important; |
||||||
color: #fff; |
|
||||||
font-size: 14px; |
.cell { |
||||||
font-weight: normal; |
color: #fff; |
||||||
.el-checkbox{ |
font-size: 14px; |
||||||
&:before{ |
font-weight: normal; |
||||||
opacity: 1; |
|
||||||
} |
.el-checkbox { |
||||||
} |
&:before { |
||||||
|
opacity: 1; |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.el-message{ |
.el-message { |
||||||
padding: 11px 20px; |
padding: 11px 20px; |
||||||
.el-message__icon{ |
|
||||||
font-size: 16px; |
.el-message__icon { |
||||||
} |
font-size: 16px; |
||||||
.el-message__content{ |
} |
||||||
font-size: 14px; |
|
||||||
color: rgba(0, 0, 0, 0.65); |
.el-message__content { |
||||||
} |
font-size: 14px; |
||||||
.el-icon-close{ |
color: rgba(0, 0, 0, 0.65); |
||||||
font-size: 14px; |
} |
||||||
color: #92998d; |
|
||||||
} |
.el-icon-close { |
||||||
.el-message--success{ |
font-size: 14px; |
||||||
border: 1px solid #B7EB8F; |
color: #92998d; |
||||||
background: #F6FFED; |
} |
||||||
.el-message__icon{ |
|
||||||
color: #00c700; |
.el-message--success { |
||||||
} |
border: 1px solid #B7EB8F; |
||||||
|
background: #F6FFED; |
||||||
|
|
||||||
|
.el-message__icon { |
||||||
|
color: #00c700; |
||||||
} |
} |
||||||
.el-message--warning{ |
} |
||||||
border: 1px solid #FFE58F; |
|
||||||
background: #FFFBE6; |
.el-message--warning { |
||||||
.el-message__icon{ |
border: 1px solid #FFE58F; |
||||||
color: #ffa900; |
background: #FFFBE6; |
||||||
} |
|
||||||
|
.el-message__icon { |
||||||
|
color: #ffa900; |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.el-message-box{ |
.el-message-box { |
||||||
padding-bottom: 24px; |
padding-bottom: 24px; |
||||||
.el-message-box__header{ |
|
||||||
padding: 32px 32px 12px 50px; |
.el-message-box__header { |
||||||
span{ |
padding: 32px 32px 12px 50px; |
||||||
font-size: 16px; |
|
||||||
color: rgba(0, 0, 0, 0.85); |
span { |
||||||
font-weight: 500; |
font-size: 16px; |
||||||
} |
color: rgba(0, 0, 0, 0.85); |
||||||
} |
font-weight: 500; |
||||||
.el-message-box__status{ |
|
||||||
top: -30px; |
|
||||||
} |
|
||||||
.el-message-box__status + .el-message-box__message{ |
|
||||||
font-size: 14px; |
|
||||||
color: rgba(0, 0, 0, 0.65); |
|
||||||
} |
} |
||||||
.el-message-box__btns{ |
} |
||||||
padding-right: 32px; |
|
||||||
&.el-icon-warning{ |
.el-message-box__status { |
||||||
color: #ffa900; |
top: -30px; |
||||||
} |
} |
||||||
|
|
||||||
|
.el-message-box__status + .el-message-box__message { |
||||||
|
font-size: 14px; |
||||||
|
color: rgba(0, 0, 0, 0.65); |
||||||
|
} |
||||||
|
|
||||||
|
.el-message-box__btns { |
||||||
|
padding-right: 32px; |
||||||
|
|
||||||
|
&.el-icon-warning { |
||||||
|
color: #ffa900; |
||||||
} |
} |
||||||
&:not(.normal){ |
} |
||||||
.el-button--primary{ |
|
||||||
color: #606266; |
&:not(.normal) { |
||||||
background: #fff; |
.el-button--primary { |
||||||
border-color: #DCDFE6; |
color: #606266; |
||||||
&:hover{ |
background: #fff; |
||||||
color: $--color-primary; |
border-color: #DCDFE6; |
||||||
border-color: #efbdbb; |
|
||||||
background-color: #fae9e8; |
&:hover { |
||||||
} |
color: $--color-primary; |
||||||
} |
border-color: #efbdbb; |
||||||
|
background-color: #fae9e8; |
||||||
|
} |
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.el-dialog__wrapper{ |
.el-dialog__wrapper { |
||||||
.el-dialog{ |
.el-dialog { |
||||||
|
border-radius: 4px; |
||||||
|
|
||||||
|
.el-dialog__header { |
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
|
||||||
|
.el-dialog__title { |
||||||
|
font-size: 16px; |
||||||
|
color: rgba(0, 0, 0, 0.85); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.el-dialog__footer { |
||||||
|
padding: 10px 16px; |
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.06); |
||||||
|
|
||||||
|
.el-button { |
||||||
|
font-size: 14px; |
||||||
border-radius: 4px; |
border-radius: 4px; |
||||||
.el-dialog__header{ |
border-color: rgba(0, 0, 0, 0.15); |
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.06); |
} |
||||||
.el-dialog__title{ |
|
||||||
font-size: 16px; |
|
||||||
color: rgba(0, 0, 0, 0.85); |
|
||||||
} |
|
||||||
} |
|
||||||
.el-dialog__footer{ |
|
||||||
padding: 10px 16px; |
|
||||||
border-top: 1px solid rgba(0, 0, 0, 0.06); |
|
||||||
.el-button{ |
|
||||||
font-size: 14px; |
|
||||||
border-radius: 4px; |
|
||||||
border-color: rgba(0, 0, 0, 0.15); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
} |
||||||
|
} |
||||||
} |
} |
||||||
|
|
||||||
.el-tooltip__popper{ |
.el-tooltip__popper { |
||||||
width: 300px; |
width: 300px; |
||||||
} |
} |
||||||
|
|
||||||
@media(max-width: 1600px){ |
@media(max-width: 1600px) { |
||||||
.el-table{ |
.el-table { |
||||||
.el-switch__label--right.is-active{ |
.el-switch__label--right.is-active { |
||||||
left: 8px; |
left: 8px; |
||||||
} |
|
||||||
} |
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
.empty{ |
||||||
|
display: flex; |
||||||
|
justify-content: center; |
||||||
|
align-items: center; |
||||||
|
padding: 50px 0; |
||||||
|
text-align: center; |
||||||
|
img{ |
||||||
|
width: 471px; |
||||||
|
} |
||||||
|
p{ |
||||||
|
margin-top: 40px; |
||||||
|
font-size: 18px; |
||||||
|
color: rgba(0, 0, 0, 0.25); |
||||||
|
} |
||||||
} |
} |
@ -1,71 +1,70 @@ |
|||||||
@font-face {font-family: "iconfont"; |
@font-face { |
||||||
src: url('iconfont.eot?t=1589437921018'); /* IE9 */ |
font-family: "iconfont"; |
||||||
src: url('iconfont.eot?t=1589437921018#iefix') format('embedded-opentype'), /* IE6-IE8 */ |
src: url('iconfont.eot?t=1589437921018'); /* IE9 */ |
||||||
url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), |
src: url('iconfont.eot?t=1589437921018#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), |
||||||
url('iconfont.woff?t=1589437921018') format('woff'), |
url('iconfont.woff?t=1589437921018') format('woff'), |
||||||
url('iconfont.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ |
url('iconfont.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */ |
||||||
url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */ |
|
||||||
} |
} |
||||||
|
|
||||||
.iconfont { |
.iconfont { |
||||||
font-family: "iconfont" !important; |
font-family: "iconfont" !important; |
||||||
font-size: 16px; |
font-size: 16px; |
||||||
font-style: normal; |
font-style: normal; |
||||||
-webkit-font-smoothing: antialiased; |
-webkit-font-smoothing: antialiased; |
||||||
-moz-osx-font-smoothing: grayscale; |
-moz-osx-font-smoothing: grayscale; |
||||||
} |
} |
||||||
|
|
||||||
.icon-yigouxuan:before { |
.icon-yigouxuan:before { |
||||||
content: "\e63d"; |
content: "\e63d"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-weigouxuan:before { |
.icon-weigouxuan:before { |
||||||
content: "\e63e"; |
content: "\e63e"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-weigouxuan1:before { |
.icon-weigouxuan1:before { |
||||||
content: "\e64a"; |
content: "\e64a"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-yigouxuan1:before { |
.icon-yigouxuan1:before { |
||||||
content: "\e64b"; |
content: "\e64b"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-shixiangyoujiantou-:before { |
.icon-shixiangyoujiantou-:before { |
||||||
content: "\e626"; |
content: "\e626"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-shixiangxiajiantou-:before { |
.icon-shixiangxiajiantou-:before { |
||||||
content: "\e625"; |
content: "\e625"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-jiahao:before { |
.icon-jiahao:before { |
||||||
content: "\e72d"; |
content: "\e72d"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-up:before { |
.icon-up:before { |
||||||
content: "\e769"; |
content: "\e769"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-down:before { |
.icon-down:before { |
||||||
content: "\e76b"; |
content: "\e76b"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-delete:before { |
.icon-delete:before { |
||||||
content: "\e6e9"; |
content: "\e6e9"; |
||||||
} |
} |
||||||
|
|
||||||
.icon-qq:before { |
.icon-qq:before { |
||||||
content: "\e614"; |
content: "\e614"; |
||||||
font-size: 60px; |
font-size: 60px; |
||||||
color: #22aaf8; |
color: #22aaf8; |
||||||
margin-left: 32px; |
margin-left: 32px; |
||||||
} |
} |
||||||
|
|
||||||
.icon-weixin:before { |
.icon-weixin:before { |
||||||
content: "\e68a"; |
content: "\e68a"; |
||||||
font-size: 60px; |
font-size: 60px; |
||||||
color: #10b747; |
color: #10b747; |
||||||
margin-right: 32px; |
margin-right: 32px; |
||||||
} |
} |
||||||
|
|
||||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@ -1,3 +1,3 @@ |
|||||||
[class*=" icon-"], [class^=icon-] { |
[class*=" icon-"], [class^=icon-] { |
||||||
font-family: iconfont!important; |
font-family: iconfont !important; |
||||||
} |
} |
@ -1,16 +1,17 @@ |
|||||||
@import "lib/var"; |
@import "lib/var"; |
||||||
@import "var"; |
@import "var"; |
||||||
|
|
||||||
html, |
html, |
||||||
body, |
body, |
||||||
#app, |
#app, |
||||||
.wrapper { |
.wrapper { |
||||||
width: 100%; |
width: 100%; |
||||||
height: 100%; |
height: 100%; |
||||||
} |
} |
||||||
|
|
||||||
body { |
body { |
||||||
min-width: 1280px; |
min-width: 1280px; |
||||||
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; |
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; |
||||||
font-size: 14px; |
font-size: 14px; |
||||||
background: rgba(0, 0, 0, 0.02); |
background: rgba(0, 0, 0, 0.02); |
||||||
} |
} |
Loading…
Reference in new issue