dev_2022-05-11
parent
245397841c
commit
9eed74a3b5
105 changed files with 7759 additions and 7406 deletions
@ -1,24 +1,25 @@ |
||||
<template> |
||||
<div id="app" > |
||||
<div id="app"> |
||||
<router-view></router-view> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import Setting from '@/setting'; |
||||
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))) |
||||
} |
||||
import Setting from "@/setting"; |
||||
import util from "@/libs/util"; |
||||
|
||||
//在页面刷新时将vuex里的信息保存到localStorage里 |
||||
window.addEventListener("beforeunload",()=>{ |
||||
util.local.get(Setting.tokenKey) && util.local.set(Setting.storeKey,this.$store.state) |
||||
}) |
||||
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里 |
||||
window.addEventListener("beforeunload", () => { |
||||
util.local.get(Setting.tokenKey) && util.local.set(Setting.storeKey, this.$store.state); |
||||
}); |
||||
} |
||||
}; |
||||
</script> |
@ -1,16 +1,16 @@ |
||||
export default [ |
||||
['bold', 'italic', 'underline', 'strike'], |
||||
['blockquote', 'code-block'], |
||||
[{ 'header': 1 }, { 'header': 2 }], |
||||
[{ 'list': 'ordered' }, { 'list': 'bullet' }], |
||||
[{ 'script': 'sub' }, { 'script': 'super' }], |
||||
[{ 'indent': '-1' }, { 'indent': '+1' }], |
||||
[{ 'direction': 'rtl' }], |
||||
[{ 'size': ['small', false, 'large', 'huge'] }], |
||||
[{ 'header': [1, 2, 3, 4, 5, 6, false] }], |
||||
[{ 'color': [] }, { 'background': [] }], |
||||
[{ 'font': [] }], |
||||
[{ 'align': [] }], |
||||
['clean'], |
||||
['link', 'image', 'video'] |
||||
] |
||||
["bold", "italic", "underline", "strike"], |
||||
["blockquote", "code-block"], |
||||
[{ "header": 1 }, { "header": 2 }], |
||||
[{ "list": "ordered" }, { "list": "bullet" }], |
||||
[{ "script": "sub" }, { "script": "super" }], |
||||
[{ "indent": "-1" }, { "indent": "+1" }], |
||||
[{ "direction": "rtl" }], |
||||
[{ "size": ["small", false, "large", "huge"] }], |
||||
[{ "header": [1, 2, 3, 4, 5, 6, false] }], |
||||
[{ "color": [] }, { "background": [] }], |
||||
[{ "font": [] }], |
||||
[{ "align": [] }], |
||||
["clean"], |
||||
["link", "image", "video"] |
||||
]; |
@ -1,30 +1,30 @@ |
||||
export const messages = { |
||||
'zh': { |
||||
"zh": { |
||||
i18n: { |
||||
breadcrumb: '国际化产品', |
||||
tips: '通过切换语言按钮,来改变当前内容的语言。', |
||||
btn: '切换英文', |
||||
title1: '常用用法', |
||||
p1: '要是你把你的秘密告诉了风,那就别怪风把它带给树。', |
||||
p2: '没有什么比信念更能支撑我们度过艰难的时光了。', |
||||
p3: '只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。', |
||||
title2: '组件插值', |
||||
info: 'Element组件需要国际化,请参考 {action}。', |
||||
value: '文档' |
||||
breadcrumb: "国际化产品", |
||||
tips: "通过切换语言按钮,来改变当前内容的语言。", |
||||
btn: "切换英文", |
||||
title1: "常用用法", |
||||
p1: "要是你把你的秘密告诉了风,那就别怪风把它带给树。", |
||||
p2: "没有什么比信念更能支撑我们度过艰难的时光了。", |
||||
p3: "只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。", |
||||
title2: "组件插值", |
||||
info: "Element组件需要国际化,请参考 {action}。", |
||||
value: "文档" |
||||
} |
||||
}, |
||||
'en': { |
||||
"en": { |
||||
i18n: { |
||||
breadcrumb: 'International Products', |
||||
tips: 'Click on the button to change the current language. ', |
||||
btn: 'Switch Chinese', |
||||
title1: 'Common usage', |
||||
breadcrumb: "International Products", |
||||
tips: "Click on the button to change the current language. ", |
||||
btn: "Switch Chinese", |
||||
title1: "Common usage", |
||||
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. ", |
||||
p3: "If you can do what you do best and be happy, you're further along in life than most people.", |
||||
title2: 'Component interpolation', |
||||
info: 'The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.', |
||||
value: 'documentation' |
||||
title2: "Component interpolation", |
||||
info: "The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.", |
||||
value: "documentation" |
||||
} |
||||
} |
||||
} |
||||
}; |
@ -1,16 +1,18 @@ |
||||
// rem等比适配配置文件
|
||||
// 基准大小
|
||||
const baseSize = 16 |
||||
const baseSize = 16; |
||||
|
||||
// 设置 rem 函数
|
||||
function setRem () { |
||||
// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
|
||||
const scale = document.documentElement.clientWidth / 1920 |
||||
// 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
|
||||
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px' |
||||
function setRem() { |
||||
// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。
|
||||
const scale = document.documentElement.clientWidth / 1920; |
||||
// 设置页面根节点字体大小(“Math.min(scale, 2)” 指最高放大比例为2,可根据实际业务需求调整)
|
||||
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + "px"; |
||||
} |
||||
|
||||
// 初始化
|
||||
setRem() |
||||
setRem(); |
||||
// 改变窗口大小时重新设置 rem
|
||||
window.onresize = function () { |
||||
setRem() |
||||
} |
||||
window.onresize = function() { |
||||
setRem(); |
||||
}; |
@ -1,31 +1,31 @@ |
||||
import store from '@/store'; |
||||
import router from '@/router'; |
||||
import generateBtnPermission from '../auth/generateBtnPermission'; |
||||
import store from "@/store"; |
||||
import router from "@/router"; |
||||
import generateBtnPermission from "../auth/generateBtnPermission"; |
||||
|
||||
const newRoutes = [] |
||||
const newRoutes = []; |
||||
|
||||
function createMeta(item){ |
||||
let meta = { title: item.name } |
||||
return meta |
||||
function createMeta(item) { |
||||
let meta = { title: item.name }; |
||||
return meta; |
||||
} |
||||
|
||||
function createRoute(data){ |
||||
function createRoute(data) { |
||||
data.map(e => { |
||||
if(e.menuUrl){ |
||||
let meta = createMeta(e) |
||||
if (e.menuUrl) { |
||||
let meta = createMeta(e); |
||||
newRoutes.push({ |
||||
name: e.menuUrl, |
||||
path: e.menuUrl, |
||||
meta |
||||
}) |
||||
}); |
||||
} |
||||
// 递归生成路由集合
|
||||
e.children && e.children.length && createRoute(e.children) |
||||
}) |
||||
e.children && e.children.length && createRoute(e.children); |
||||
}); |
||||
} |
||||
|
||||
export default function(data,path){ |
||||
generateBtnPermission(data) |
||||
createRoute(data) |
||||
store.dispatch('auth/addRoutes',newRoutes) |
||||
export default function(data, path) { |
||||
generateBtnPermission(data); |
||||
createRoute(data); |
||||
store.dispatch("auth/addRoutes", newRoutes); |
||||
} |
@ -1,26 +1,26 @@ |
||||
import store from '@/store'; |
||||
import router from '@/router'; |
||||
import store from "@/store"; |
||||
import router from "@/router"; |
||||
|
||||
export default function(){ |
||||
export default function() { |
||||
setTimeout(() => { |
||||
let routes = store.state.auth.routes |
||||
let routes = store.state.auth.routes; |
||||
routes.forEach(e => { |
||||
if(e.path == '/'){ |
||||
e.component = () => import('@/layouts/home/index.vue') |
||||
}else{ |
||||
e.component = () => import(`@/pages/${e.path}.vue`) |
||||
if (e.path == "/") { |
||||
e.component = () => import("@/layouts/home/index.vue"); |
||||
} else { |
||||
e.component = () => import(`@/pages/${e.path}.vue`); |
||||
} |
||||
|
||||
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({ |
||||
path: '*', |
||||
redirect: '404' |
||||
}) |
||||
path: "*", |
||||
redirect: "404" |
||||
}); |
||||
|
||||
router.addRoutes(routes) |
||||
},500) |
||||
router.addRoutes(routes); |
||||
}, 500); |
||||
} |
@ -1,6 +1,6 @@ |
||||
import router from '@/router'; |
||||
import router from "@/router"; |
||||
|
||||
export default function(){ |
||||
const newRouter = createRouter() |
||||
router.matcher = newRouter.matcher |
||||
export default function() { |
||||
const newRouter = createRouter(); |
||||
router.matcher = newRouter.matcher; |
||||
} |
@ -1,187 +1,225 @@ |
||||
import cookies from './util.cookies' |
||||
import {_local,_session} from './util.db' |
||||
import { Message } from 'element-ui' |
||||
import store from '@/store' |
||||
import axios from 'axios' |
||||
import api from '@/api' |
||||
import Setting from '@/setting' |
||||
import cookies from "./util.cookies"; |
||||
import { _local, _session } from "./util.db"; |
||||
import { Message } from "element-ui"; |
||||
import store from "@/store"; |
||||
import axios from "axios"; |
||||
import api from "@/api"; |
||||
import Setting from "@/setting"; |
||||
|
||||
let logout = false |
||||
let logout = false; |
||||
const roleList = { |
||||
'1': '超级管理员', |
||||
'13': '管理员', |
||||
'14': '老师', |
||||
'4': '学生' |
||||
} |
||||
"1": "超级管理员", |
||||
"13": "管理员", |
||||
"14": "老师", |
||||
"4": "学生" |
||||
}; |
||||
const util = { |
||||
cookies, |
||||
local: _local, |
||||
session: _session, |
||||
// 传入身份证获取生日
|
||||
getBirth(idCard) { |
||||
var birthday = ""; |
||||
if(idCard != null && idCard != ""){ |
||||
if(idCard.length == 15){ |
||||
birthday = "19"+idCard.slice(6,12); |
||||
} else if(idCard.length == 18){ |
||||
birthday = idCard.slice(6,14); |
||||
}
|
||||
birthday = birthday.replace(/(.{4})(.{2})/,"$1-$2-"); |
||||
//通过正则表达式来指定输出格式为: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))); |
||||
cookies, |
||||
local: _local, |
||||
session: _session, |
||||
// 传入身份证获取生日
|
||||
getBirth(idCard) { |
||||
var birthday = ""; |
||||
if (idCard != null && idCard != "") { |
||||
if (idCard.length == 15) { |
||||
birthday = "19" + idCard.slice(6, 12); |
||||
} else if (idCard.length == 18) { |
||||
birthday = idCard.slice(6, 14); |
||||
} |
||||
birthday = birthday.replace(/(.{4})(.{2})/, "$1-$2-"); |
||||
//通过正则表达式来指定输出格式为:1990-01-01
|
||||
} |
||||
} |
||||
return fmt;
|
||||
}, |
||||
// 移除数组中指定值
|
||||
removeByValue(arr, val) { |
||||
for(var i=0; i<arr.length; i++) { |
||||
if(arr[i] == val) { |
||||
arr.splice(i, 1); |
||||
break; |
||||
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)); |
||||
} |
||||
} |
||||
}, |
||||
// 传入文件后缀判断是否是视频
|
||||
isVideo(ext) { |
||||
if('mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv'.includes(ext)) return true |
||||
return false |
||||
}, |
||||
// 传入文件后缀判断是否是音频
|
||||
isAudio(ext) { |
||||
if('mp3,aac,ape,flac,wav,wma,amr,mid'.includes(ext)) return true |
||||
return false |
||||
}, |
||||
// 传入文件后缀判断是否是图片
|
||||
isImg(ext) { |
||||
if('jpg,jpeg,png,gif,svg,psd'.includes(ext)) return true |
||||
return false |
||||
}, |
||||
// 传入文件后缀判断是否是pdf以外的文档
|
||||
isDoc(ext) { |
||||
if(!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && ext != 'pdf') return true |
||||
return false |
||||
}, |
||||
// 循环去除html标签
|
||||
removeHtmlTag(list,attr) { |
||||
list.map(n => { |
||||
n[attr] = n[attr].replace(/<\/?.+?>/gi,'') |
||||
}) |
||||
return list |
||||
}, |
||||
// 传入文件名获取文件后缀
|
||||
getFileExt(fileName) { |
||||
return fileName.substring(fileName.lastIndexOf('.') + 1) |
||||
}, |
||||
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
|
||||
downloadFile(fileName,url) { |
||||
var x = new XMLHttpRequest() |
||||
x.open("GET", url, true) |
||||
x.responseType = 'blob' |
||||
x.onload=function(e) { |
||||
var url = window.URL.createObjectURL(x.response) |
||||
var a = document.createElement('a') |
||||
a.href = url |
||||
a.download = fileName |
||||
a.click() |
||||
} |
||||
x.send() |
||||
}, |
||||
// 传入文件名和数据,下载文件
|
||||
downloadFileDirect(fileName,data) { |
||||
if ('download' in document.createElement('a')) { // 非IE下载
|
||||
const elink = document.createElement('a') |
||||
elink.download = fileName |
||||
elink.style.display = 'none' |
||||
elink.href = URL.createObjectURL(data) |
||||
document.body.appendChild(elink) |
||||
elink.click() |
||||
URL.revokeObjectURL(elink.href) // 释放URL 对象
|
||||
document.body.removeChild(elink) |
||||
} else { // IE10+下载
|
||||
navigator.msSaveBlob(data, fileName) |
||||
} |
||||
}, |
||||
// 传入字符串,返回去除[]后的字符串,因为通过get请求带入方括号的话会有问题
|
||||
encodeStr(str) { |
||||
if(str.includes('[') || str.includes(']')){ |
||||
let newStr = '' |
||||
for(let i of str){ |
||||
if(i == '[' || i == ']'){ |
||||
newStr += encodeURI(i) |
||||
}else{ |
||||
newStr += i |
||||
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 newStr |
||||
} |
||||
return str |
||||
}, |
||||
// 成功提示
|
||||
successMsg(message,duration = 3000) { |
||||
Message.closeAll(); |
||||
return Message.success({message,showClose: true,offset: (document.documentElement.clientHeight - 40) / 2,duration}) |
||||
}, |
||||
// 警告提示
|
||||
warningMsg(message,duration = 3000) { |
||||
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}) |
||||
}, |
||||
// 传入roleId,返回角色名称
|
||||
getRoleName(roleId){ |
||||
return roleList[roleId] || '未知状态' |
||||
}, |
||||
// 登录互踢
|
||||
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) |
||||
return fmt; |
||||
}, |
||||
// 移除数组中指定值
|
||||
removeByValue(arr, val) { |
||||
for (var i = 0; i < arr.length; i++) { |
||||
if (arr[i] == val) { |
||||
arr.splice(i, 1); |
||||
break; |
||||
} |
||||
} |
||||
}, |
||||
// 传入文件后缀判断是否是视频
|
||||
isVideo(ext) { |
||||
if ("mp4,3gp,mov,m4v,avi,dat,mkv,flv,vob,rmvb,rm,qlv".includes(ext)) return true; |
||||
return false; |
||||
}, |
||||
// 传入文件后缀判断是否是音频
|
||||
isAudio(ext) { |
||||
if ("mp3,aac,ape,flac,wav,wma,amr,mid".includes(ext)) return true; |
||||
return false; |
||||
}, |
||||
// 传入文件后缀判断是否是图片
|
||||
isImg(ext) { |
||||
if ("jpg,jpeg,png,gif,svg,psd".includes(ext)) return true; |
||||
return false; |
||||
}, |
||||
// 传入文件后缀判断是否是pdf以外的文档
|
||||
isDoc(ext) { |
||||
if (!util.isVideo(ext) && !util.isAudio(ext) && !util.isImg(ext) && ext != "pdf") return true; |
||||
return false; |
||||
}, |
||||
// 循环去除html标签
|
||||
removeHtmlTag(list, attr) { |
||||
list.map(n => { |
||||
n[attr] = n[attr].replace(/<\/?.+?>/gi, ""); |
||||
}); |
||||
return list; |
||||
}, |
||||
// 传入文件名获取文件后缀
|
||||
getFileExt(fileName) { |
||||
return fileName.substring(fileName.lastIndexOf(".") + 1); |
||||
}, |
||||
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
|
||||
downloadFile(fileName, url) { |
||||
var x = new XMLHttpRequest(); |
||||
x.open("GET", url, true); |
||||
x.responseType = "blob"; |
||||
x.onload = function(e) { |
||||
var url = window.URL.createObjectURL(x.response); |
||||
var a = document.createElement("a"); |
||||
a.href = url; |
||||
a.download = fileName; |
||||
a.click(); |
||||
}; |
||||
x.send(); |
||||
}, |
||||
// 传入文件名和数据,下载文件
|
||||
downloadFileDirect(fileName, data) { |
||||
if ("download" in document.createElement("a")) { // 非IE下载
|
||||
const elink = document.createElement("a"); |
||||
elink.download = fileName; |
||||
elink.style.display = "none"; |
||||
elink.href = URL.createObjectURL(data); |
||||
document.body.appendChild(elink); |
||||
elink.click(); |
||||
URL.revokeObjectURL(elink.href); // 释放URL 对象
|
||||
document.body.removeChild(elink); |
||||
} else { // IE10+下载
|
||||
navigator.msSaveBlob(data, fileName); |
||||
} |
||||
}, |
||||
// 传入字符串,返回去除[]后的字符串,因为通过get请求带入方括号的话会有问题
|
||||
encodeStr(str) { |
||||
if (str.includes("[") || str.includes("]")) { |
||||
let newStr = ""; |
||||
for (let i of str) { |
||||
if (i == "[" || i == "]") { |
||||
newStr += encodeURI(i); |
||||
} else { |
||||
newStr += i; |
||||
} |
||||
}).catch(err => {}) |
||||
} |
||||
return newStr; |
||||
} |
||||
return str; |
||||
}, |
||||
// 成功提示
|
||||
successMsg(message, duration = 3000) { |
||||
Message.closeAll(); |
||||
return Message.success({ message, showClose: true, offset: (document.documentElement.clientHeight - 40) / 2, duration }); |
||||
}, |
||||
// 警告提示
|
||||
warningMsg(message, duration = 3000) { |
||||
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 }); |
||||
}, |
||||
// 传入roleId,返回角色名称
|
||||
getRoleName(roleId) { |
||||
return roleList[roleId] || "未知状态"; |
||||
}, |
||||
// 登录互踢
|
||||
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 => { |
||||
}); |
||||
} |
||||
} |
||||
}, |
||||
debounce(fn, delay) { // 防抖
|
||||
let timeout = null; |
||||
return function() { |
||||
const context = this; |
||||
const args = arguments; |
||||
clearTimeout(timeout); |
||||
timeout = setTimeout(() => { |
||||
fn.apply(context, args); |
||||
}, delay); |
||||
}; |
||||
}, |
||||
deepCopy(obj) { // 深拷贝
|
||||
if (obj == null) { |
||||
return null; |
||||
} |
||||
if (typeof obj !== "object") return obj; |
||||
let result; |
||||
if (Array.isArray(obj)) { |
||||
result = []; |
||||
obj.forEach(item => { |
||||
result.push( |
||||
typeof item === "object" && !(item instanceof Date) |
||||
? util.deepCopy(item) |
||||
: item |
||||
); |
||||
}); |
||||
} else { |
||||
result = {}; |
||||
Object.keys(obj).forEach(key => { |
||||
result[key] = |
||||
typeof obj[key] === "object" && !(obj[key] instanceof Date) |
||||
? util.deepCopy(obj[key]) |
||||
: obj[key]; |
||||
}); |
||||
} |
||||
return result; |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
|
||||
export default util |
||||
export default util; |
@ -1,8 +1,8 @@ |
||||
export default { |
||||
beforeCreate() { |
||||
document.querySelector('body').setAttribute('style', 'background-color:#fff') |
||||
document.querySelector("body").setAttribute("style", "background-color:#fff"); |
||||
}, |
||||
beforeDestroy() { |
||||
document.body.removeAttribute('style') |
||||
document.body.removeAttribute("style"); |
||||
} |
||||
} |
||||
}; |
@ -1,59 +1,64 @@ |
||||
<template> |
||||
<div class="error-page"> |
||||
<div class="error-code">4<span>0</span>4</div> |
||||
<div class="error-desc">啊哦~ 你所访问的页面不存在</div> |
||||
<div class="error-handle"> |
||||
<router-link to="/"> |
||||
<el-button type="primary" size="large" @click="toIndex">返回首页</el-button> |
||||
</router-link> |
||||
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button> |
||||
</div> |
||||
<div class="error-code">4<span>0</span>4</div> |
||||
<div class="error-desc">啊哦~ 你所访问的页面不存在</div> |
||||
<div class="error-handle"> |
||||
<router-link to="/"> |
||||
<el-button type="primary" size="large" @click="toIndex">返回首页</el-button> |
||||
</router-link> |
||||
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
methods: { |
||||
toIndex(){ |
||||
this.$router.push('/') |
||||
toIndex() { |
||||
this.$router.push("/"); |
||||
}, |
||||
goBack(){ |
||||
goBack() { |
||||
this.$router.go(-1); |
||||
} |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
|
||||
<style scoped> |
||||
.error-page{ |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
flex-direction: column; |
||||
width: 100%; |
||||
height: 100%; |
||||
background: #f3f3f3; |
||||
box-sizing: border-box; |
||||
} |
||||
.error-code{ |
||||
line-height: 1; |
||||
font-size: 250px; |
||||
font-weight: bolder; |
||||
color: #2d8cf0; |
||||
} |
||||
.error-code span{ |
||||
color: #00a854; |
||||
} |
||||
.error-desc{ |
||||
font-size: 30px; |
||||
color: #777; |
||||
} |
||||
.error-handle{ |
||||
margin-top: 30px; |
||||
padding-bottom: 200px; |
||||
} |
||||
.error-btn{ |
||||
margin-left: 100px; |
||||
} |
||||
.error-page { |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
flex-direction: column; |
||||
width: 100%; |
||||
height: 100%; |
||||
background: #f3f3f3; |
||||
box-sizing: border-box; |
||||
} |
||||
|
||||
.error-code { |
||||
line-height: 1; |
||||
font-size: 250px; |
||||
font-weight: bolder; |
||||
color: #2d8cf0; |
||||
} |
||||
|
||||
.error-code span { |
||||
color: #00a854; |
||||
} |
||||
|
||||
.error-desc { |
||||
font-size: 30px; |
||||
color: #777; |
||||
} |
||||
|
||||
.error-handle { |
||||
margin-top: 30px; |
||||
padding-bottom: 200px; |
||||
} |
||||
|
||||
.error-btn { |
||||
margin-left: 100px; |
||||
} |
||||
</style> |
||||
|
File diff suppressed because it is too large
Load Diff
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 Setting from '@/setting' |
||||
import util from '@/libs/util' |
||||
import router from "./index"; |
||||
import Setting from "@/setting"; |
||||
import util from "@/libs/util"; |
||||
|
||||
router.beforeEach((to, from, next) => { |
||||
document.title = Setting.titleSuffix |
||||
const role = util.local.get(Setting.tokenKey) |
||||
if (!role && to.path !== '/login') { |
||||
next('/login') |
||||
} else if(role && to.path == '/login') { |
||||
next('/index') |
||||
document.title = Setting.titleSuffix; |
||||
const role = util.local.get(Setting.tokenKey); |
||||
if (!role && to.path !== "/login") { |
||||
next("/login"); |
||||
} else if (role && to.path == "/login") { |
||||
next("/index"); |
||||
} else { |
||||
let mg = from.query.mg |
||||
if(mg){ |
||||
if(!to.query.mg){ |
||||
let mg = from.query.mg; |
||||
if (mg) { |
||||
if (!to.query.mg) { |
||||
next({ |
||||
path: to.path, |
||||
query: {mg} |
||||
}) |
||||
}else{ |
||||
next() |
||||
query: { mg } |
||||
}); |
||||
} else { |
||||
next(); |
||||
} |
||||
}else{ |
||||
next() |
||||
} else { |
||||
next(); |
||||
} |
||||
} |
||||
}); |
@ -1,4 +1,2 @@ |
||||
const getters = { |
||||
|
||||
} |
||||
export default getters |
||||
const getters = {}; |
||||
export default getters; |
@ -1,25 +1,25 @@ |
||||
import Vue from 'vue'; |
||||
import Vuex from 'vuex'; |
||||
import getters from './getters' |
||||
import Vue from "vue"; |
||||
import Vuex from "vuex"; |
||||
import getters from "./getters"; |
||||
|
||||
Vue.use(Vuex); |
||||
|
||||
// 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'`
|
||||
// it will auto require all vuex module from modules file
|
||||
const modules = modulesFiles.keys().reduce((modules, modulePath) => { |
||||
// set './app.js' => 'app'
|
||||
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1') |
||||
const value = modulesFiles(modulePath) |
||||
modules[moduleName] = value.default |
||||
return modules |
||||
}, {}) |
||||
// set './app.js' => 'app'
|
||||
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1"); |
||||
const value = modulesFiles(modulePath); |
||||
modules[moduleName] = value.default; |
||||
return modules; |
||||
}, {}); |
||||
|
||||
const store = new Vuex.Store({ |
||||
modules, |
||||
getters |
||||
}) |
||||
}); |
||||
|
||||
export default store |
||||
export default store; |
@ -1,295 +1,339 @@ |
||||
@import "./default/index.scss"; |
||||
|
||||
@font-face{ |
||||
font-family: youshe; |
||||
src: url('font/YouSheBiaoTiHei.ttf'); |
||||
@font-face { |
||||
font-family: youshe; |
||||
src: url('font/YouSheBiaoTiHei.ttf'); |
||||
} |
||||
|
||||
[v-cloak] { |
||||
display: none; |
||||
display: none; |
||||
} |
||||
|
||||
::-webkit-scrollbar { |
||||
width: 8px; |
||||
height: 8px; |
||||
width: 8px; |
||||
height: 8px; |
||||
} |
||||
|
||||
::-webkit-scrollbar-thumb { |
||||
width: 5px; |
||||
border-radius: 6px; |
||||
background: rgba(146,120,255,.7); |
||||
width: 5px; |
||||
border-radius: 6px; |
||||
background: rgba(146, 120, 255, .7); |
||||
} |
||||
|
||||
.flex-between{ |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
.flex-between { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
align-items: center; |
||||
} |
||||
|
||||
.el-button--primary.action-btn{ |
||||
color: $--color-primary !important; |
||||
font-size: 14px !important; |
||||
background-color: #fff !important; |
||||
border-radius: 4px !important; |
||||
.el-button--primary.action-btn { |
||||
color: $--color-primary !important; |
||||
font-size: 14px !important; |
||||
background-color: #fff !important; |
||||
border-radius: 4px !important; |
||||
} |
||||
|
||||
.el-input{ |
||||
.el-input__inner{ |
||||
border-color: rgba(0, 0, 0, 0.15); |
||||
} |
||||
.el-input { |
||||
.el-input__inner { |
||||
border-color: rgba(0, 0, 0, 0.15); |
||||
} |
||||
} |
||||
|
||||
.p-title{ |
||||
padding-left: 5px; |
||||
margin-bottom: 24px; |
||||
line-height: 1; |
||||
font-size: 14px; |
||||
color: #585858; |
||||
border-left: 3px solid $--color-primary; |
||||
.p-title { |
||||
padding-left: 5px; |
||||
margin-bottom: 24px; |
||||
line-height: 1; |
||||
font-size: 14px; |
||||
color: #585858; |
||||
border-left: 3px solid $--color-primary; |
||||
} |
||||
.page{ |
||||
position: relative; |
||||
padding: 24px; |
||||
background-color: #fff; |
||||
border-radius: 8px; |
||||
.tool{ |
||||
display: flex; |
||||
justify-content: space-between; |
||||
margin-bottom: 24px; |
||||
|
||||
.filter{ |
||||
display: inline-flex; |
||||
flex-wrap: wrap; |
||||
align-items: center; |
||||
flex: 1; |
||||
li{ |
||||
display: inline-flex; |
||||
align-items: center; |
||||
margin-right: 30px; |
||||
label{ |
||||
margin-right: 6px; |
||||
font-size: 14px; |
||||
line-height: 14px; |
||||
color: rgba(0,0,0,.65); |
||||
white-space: nowrap; |
||||
} |
||||
} |
||||
} |
||||
.el-button--primary{ |
||||
@extend .action-btn; |
||||
} |
||||
&.mul{ |
||||
margin-bottom: 0; |
||||
.filter{ |
||||
width: 1200px; |
||||
li{ |
||||
margin-bottom: 24px; |
||||
} |
||||
} |
||||
|
||||
.page { |
||||
position: relative; |
||||
padding: 24px; |
||||
background-color: #fff; |
||||
border-radius: 8px; |
||||
|
||||
.tool { |
||||
display: flex; |
||||
justify-content: space-between; |
||||
margin-bottom: 24px; |
||||
|
||||
.filter { |
||||
display: inline-flex; |
||||
flex-wrap: wrap; |
||||
align-items: center; |
||||
flex: 1; |
||||
|
||||
li { |
||||
display: inline-flex; |
||||
align-items: center; |
||||
margin-right: 30px; |
||||
|
||||
label { |
||||
margin-right: 6px; |
||||
font-size: 14px; |
||||
line-height: 14px; |
||||
color: rgba(0, 0, 0, .65); |
||||
white-space: nowrap; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.pagination { |
||||
margin: 20px 0; |
||||
text-align: center; |
||||
button,.number{ |
||||
color: rgba(0,0,0,.65) !important; |
||||
background-color: transparent !important; |
||||
border: 1px solid rgba(0, 0, 0, 0.15) !important; |
||||
border-radius: 4px !important; |
||||
} |
||||
button i{ |
||||
color: #333; |
||||
} |
||||
.active{ |
||||
color: #fff !important; |
||||
background-color: $--color-primary !important; |
||||
.el-button--primary { |
||||
@extend .action-btn; |
||||
} |
||||
} |
||||
|
||||
.el-table{ |
||||
border-radius: 8px; |
||||
border: 1px solid rgba(0, 0, 0, 0.06); |
||||
border-bottom: 0; |
||||
.cell{ |
||||
font-size: 14px; |
||||
} |
||||
th{ |
||||
background: $--color-primary !important; |
||||
.cell{ |
||||
color: #fff; |
||||
font-size: 14px; |
||||
font-weight: normal; |
||||
&.mul { |
||||
margin-bottom: 0; |
||||
|
||||
.filter { |
||||
width: 1200px; |
||||
|
||||
li { |
||||
margin-bottom: 24px; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.tabs{ |
||||
display: flex; |
||||
align-items: center; |
||||
padding: 0 24px; |
||||
border-bottom: 1px solid rgba(0,0,0,.06); |
||||
.item{ |
||||
position: relative; |
||||
padding: 20px 0; |
||||
margin-right: 40px; |
||||
font-size: 16px; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
cursor: pointer; |
||||
&:after{ |
||||
content: ''; |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 3px; |
||||
border-bottom: 3px solid transparent; |
||||
border-radius: 2px; |
||||
} |
||||
&.active{ |
||||
font-weight: 500; |
||||
color: rgba(0, 0, 0, 0.85); |
||||
} |
||||
&.active:after{ |
||||
border-bottom-color: $--color-primary; |
||||
} |
||||
} |
||||
.pagination { |
||||
margin: 20px 0; |
||||
text-align: center; |
||||
|
||||
button, .number { |
||||
color: rgba(0, 0, 0, .65) !important; |
||||
background-color: transparent !important; |
||||
border: 1px solid rgba(0, 0, 0, 0.15) !important; |
||||
border-radius: 4px !important; |
||||
} |
||||
|
||||
button i { |
||||
color: #333; |
||||
} |
||||
|
||||
.active { |
||||
color: #fff !important; |
||||
background-color: $--color-primary !important; |
||||
} |
||||
} |
||||
|
||||
.el-message{ |
||||
padding: 11px 20px; |
||||
.el-message__icon{ |
||||
font-size: 16px; |
||||
} |
||||
.el-message__content{ |
||||
font-size: 14px; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
.el-table { |
||||
border-radius: 8px; |
||||
border: 1px solid rgba(0, 0, 0, 0.06); |
||||
border-bottom: 0; |
||||
|
||||
.cell { |
||||
font-size: 14px; |
||||
} |
||||
|
||||
th { |
||||
background: $--color-primary !important; |
||||
|
||||
.cell { |
||||
color: #fff; |
||||
font-size: 14px; |
||||
font-weight: normal; |
||||
} |
||||
.el-icon-close{ |
||||
font-size: 14px; |
||||
color: #92998d; |
||||
} |
||||
} |
||||
|
||||
.tabs { |
||||
display: flex; |
||||
align-items: center; |
||||
padding: 0 24px; |
||||
border-bottom: 1px solid rgba(0, 0, 0, .06); |
||||
|
||||
.item { |
||||
position: relative; |
||||
padding: 20px 0; |
||||
margin-right: 40px; |
||||
font-size: 16px; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
cursor: pointer; |
||||
|
||||
&:after { |
||||
content: ''; |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 3px; |
||||
border-bottom: 3px solid transparent; |
||||
border-radius: 2px; |
||||
} |
||||
.el-message--success{ |
||||
border: 1px solid #B7EB8F; |
||||
background: #F6FFED; |
||||
.el-message__icon{ |
||||
color: #00c700; |
||||
} |
||||
|
||||
&.active { |
||||
font-weight: 500; |
||||
color: rgba(0, 0, 0, 0.85); |
||||
} |
||||
.el-message--warning{ |
||||
border: 1px solid #FFE58F; |
||||
background: #FFFBE6; |
||||
.el-message__icon{ |
||||
color: #ffa900; |
||||
} |
||||
|
||||
&.active:after { |
||||
border-bottom-color: $--color-primary; |
||||
} |
||||
} |
||||
} |
||||
|
||||
.el-message-box{ |
||||
padding-bottom: 24px; |
||||
.el-message-box__header{ |
||||
padding: 32px 32px 12px 50px; |
||||
span{ |
||||
font-size: 16px; |
||||
color: rgba(0, 0, 0, 0.85); |
||||
font-weight: 500; |
||||
} |
||||
.el-message { |
||||
padding: 11px 20px; |
||||
|
||||
.el-message__icon { |
||||
font-size: 16px; |
||||
} |
||||
|
||||
.el-message__content { |
||||
font-size: 14px; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
} |
||||
|
||||
.el-icon-close { |
||||
font-size: 14px; |
||||
color: #92998d; |
||||
} |
||||
|
||||
.el-message--success { |
||||
border: 1px solid #B7EB8F; |
||||
background: #F6FFED; |
||||
|
||||
.el-message__icon { |
||||
color: #00c700; |
||||
} |
||||
.el-message-box__status{ |
||||
top: -30px; |
||||
} |
||||
|
||||
.el-message--warning { |
||||
border: 1px solid #FFE58F; |
||||
background: #FFFBE6; |
||||
|
||||
.el-message__icon { |
||||
color: #ffa900; |
||||
} |
||||
.el-message-box__status + .el-message-box__message{ |
||||
font-size: 14px; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
} |
||||
} |
||||
|
||||
.el-message-box { |
||||
padding-bottom: 24px; |
||||
|
||||
.el-message-box__header { |
||||
padding: 32px 32px 12px 50px; |
||||
|
||||
span { |
||||
font-size: 16px; |
||||
color: rgba(0, 0, 0, 0.85); |
||||
font-weight: 500; |
||||
} |
||||
.el-message-box__btns{ |
||||
padding-right: 32px; |
||||
&.el-icon-warning{ |
||||
color: #ffa900; |
||||
} |
||||
} |
||||
|
||||
.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 { |
||||
color: #ffa900; |
||||
} |
||||
&:not(.normal){ |
||||
.el-button--primary{ |
||||
color: #606266; |
||||
background: #fff; |
||||
border-color: #DCDFE6; |
||||
&:hover{ |
||||
color: $--color-primary; |
||||
border-color: #efbdbb; |
||||
background-color: #fae9e8; |
||||
} |
||||
} |
||||
} |
||||
|
||||
&:not(.normal) { |
||||
.el-button--primary { |
||||
color: #606266; |
||||
background: #fff; |
||||
border-color: #DCDFE6; |
||||
|
||||
&:hover { |
||||
color: $--color-primary; |
||||
border-color: #efbdbb; |
||||
background-color: #fae9e8; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.el-dialog__wrapper{ |
||||
.el-dialog{ |
||||
.el-dialog__wrapper { |
||||
.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; |
||||
.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-color: rgba(0, 0, 0, 0.15); |
||||
} |
||||
} |
||||
border-color: rgba(0, 0, 0, 0.15); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
.upload-wrap{ |
||||
position: relative; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
padding: 34px 0; |
||||
.el-button{ |
||||
span{ |
||||
display: flex; |
||||
align-items: center; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
font-size: 14px; |
||||
img{ |
||||
margin-right: 8px; |
||||
} |
||||
} |
||||
} |
||||
&>.el-button{ |
||||
margin-right: 32px; |
||||
} |
||||
.el-upload-list{ |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
} |
||||
.link{ |
||||
position: absolute; |
||||
bottom: -20px; |
||||
left: 0; |
||||
width: 100%; |
||||
text-align: center; |
||||
} |
||||
&.lg{ |
||||
padding-bottom: 50px; |
||||
.upload-wrap { |
||||
position: relative; |
||||
display: flex; |
||||
justify-content: center; |
||||
align-items: center; |
||||
padding: 34px 0; |
||||
|
||||
.el-button { |
||||
span { |
||||
display: flex; |
||||
align-items: center; |
||||
color: rgba(0, 0, 0, 0.65); |
||||
font-size: 14px; |
||||
|
||||
img { |
||||
margin-right: 8px; |
||||
} |
||||
} |
||||
} |
||||
|
||||
& > .el-button { |
||||
margin-right: 32px; |
||||
} |
||||
|
||||
.el-upload-list { |
||||
position: absolute; |
||||
bottom: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
} |
||||
|
||||
.link { |
||||
position: absolute; |
||||
bottom: -20px; |
||||
left: 0; |
||||
width: 100%; |
||||
text-align: center; |
||||
} |
||||
|
||||
&.lg { |
||||
padding-bottom: 50px; |
||||
} |
||||
} |
||||
|
||||
.el-tooltip__popper{ |
||||
width: 300px; |
||||
.el-tooltip__popper { |
||||
width: 300px; |
||||
} |
||||
|
||||
@media(max-width: 1600px){ |
||||
.el-table{ |
||||
.el-switch__label--right.is-active{ |
||||
left: 8px; |
||||
} |
||||
@media(max-width: 1600px) { |
||||
.el-table { |
||||
.el-switch__label--right.is-active { |
||||
left: 8px; |
||||
} |
||||
} |
||||
} |
@ -1,71 +1,70 @@ |
||||
@font-face {font-family: "iconfont"; |
||||
src: url('iconfont.eot?t=1589437921018'); /* IE9 */ |
||||
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.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ |
||||
url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */ |
||||
@font-face { |
||||
font-family: "iconfont"; |
||||
src: url('iconfont.eot?t=1589437921018'); /* IE9 */ |
||||
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.ttf?t=1589437921018') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('iconfont.svg?t=1589437921018#iconfont') format('svg'); /* iOS 4.1- */ |
||||
} |
||||
|
||||
.iconfont { |
||||
font-family: "iconfont" !important; |
||||
font-size: 16px; |
||||
font-style: normal; |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
font-family: "iconfont" !important; |
||||
font-size: 16px; |
||||
font-style: normal; |
||||
-webkit-font-smoothing: antialiased; |
||||
-moz-osx-font-smoothing: grayscale; |
||||
} |
||||
|
||||
.icon-yigouxuan:before { |
||||
content: "\e63d"; |
||||
content: "\e63d"; |
||||
} |
||||
|
||||
.icon-weigouxuan:before { |
||||
content: "\e63e"; |
||||
content: "\e63e"; |
||||
} |
||||
|
||||
.icon-weigouxuan1:before { |
||||
content: "\e64a"; |
||||
content: "\e64a"; |
||||
} |
||||
|
||||
.icon-yigouxuan1:before { |
||||
content: "\e64b"; |
||||
content: "\e64b"; |
||||
} |
||||
|
||||
.icon-shixiangyoujiantou-:before { |
||||
content: "\e626"; |
||||
content: "\e626"; |
||||
} |
||||
|
||||
.icon-shixiangxiajiantou-:before { |
||||
content: "\e625"; |
||||
content: "\e625"; |
||||
} |
||||
|
||||
.icon-jiahao:before { |
||||
content: "\e72d"; |
||||
content: "\e72d"; |
||||
} |
||||
|
||||
.icon-up:before { |
||||
content: "\e769"; |
||||
content: "\e769"; |
||||
} |
||||
|
||||
.icon-down:before { |
||||
content: "\e76b"; |
||||
content: "\e76b"; |
||||
} |
||||
|
||||
.icon-delete:before { |
||||
content: "\e6e9"; |
||||
content: "\e6e9"; |
||||
} |
||||
|
||||
.icon-qq:before { |
||||
content: "\e614"; |
||||
font-size: 60px; |
||||
color: #22aaf8; |
||||
margin-left: 32px; |
||||
content: "\e614"; |
||||
font-size: 60px; |
||||
color: #22aaf8; |
||||
margin-left: 32px; |
||||
} |
||||
|
||||
.icon-weixin:before { |
||||
content: "\e68a"; |
||||
font-size: 60px; |
||||
color: #10b747; |
||||
margin-right: 32px; |
||||
content: "\e68a"; |
||||
font-size: 60px; |
||||
color: #10b747; |
||||
margin-right: 32px; |
||||
} |
||||
|
||||
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 11 KiB |
@ -1,3 +1,3 @@ |
||||
[class*=" icon-"], [class^=icon-] { |
||||
font-family: iconfont!important; |
||||
font-family: iconfont !important; |
||||
} |
@ -1,16 +1,17 @@ |
||||
@import "lib/var"; |
||||
@import "var"; |
||||
|
||||
html, |
||||
body, |
||||
#app, |
||||
.wrapper { |
||||
width: 100%; |
||||
height: 100%; |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
|
||||
body { |
||||
min-width: 1500px; |
||||
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; |
||||
font-size: 14px; |
||||
background: rgba(0, 0, 0, 0.05); |
||||
min-width: 1500px; |
||||
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif; |
||||
font-size: 14px; |
||||
background: rgba(0, 0, 0, 0.05); |
||||
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue