@ -0,0 +1,6 @@ |
|||
{ |
|||
"presets": ["@babel/preset-env"], |
|||
"plugins": [ |
|||
"@babel/plugin-transform-runtime" |
|||
] |
|||
} |
@ -0,0 +1,2 @@ |
|||
> 1% |
|||
last 2 versions |
@ -0,0 +1,14 @@ |
|||
# https://editorconfig.org |
|||
root = true |
|||
|
|||
[*] |
|||
charset = utf-8 |
|||
indent_style = space |
|||
indent_size = 4 |
|||
end_of_line = lf |
|||
insert_final_newline = true |
|||
trim_trailing_whitespace = true |
|||
|
|||
[*.md] |
|||
insert_final_newline = false |
|||
trim_trailing_whitespace = false |
@ -0,0 +1 @@ |
|||
|
@ -0,0 +1,21 @@ |
|||
module.exports = { |
|||
root: true, |
|||
env: { |
|||
node: true |
|||
}, |
|||
"globals": { |
|||
"config": true //这里添加变量名称
|
|||
}, |
|||
'extends': [ |
|||
'plugin:vue/essential', |
|||
'eslint:recommended', |
|||
'@vue/typescript/recommended' |
|||
], |
|||
parserOptions: { |
|||
ecmaVersion: 2020 |
|||
}, |
|||
rules: { |
|||
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', |
|||
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
.DS_Store |
|||
node_modules |
|||
/dist |
|||
|
|||
/tests/e2e/videos/ |
|||
/tests/e2e/screenshots/ |
|||
|
|||
# local env files |
|||
.env.local |
|||
.env.*.local |
|||
|
|||
# Log files |
|||
npm-debug.log* |
|||
yarn-debug.log* |
|||
yarn-error.log* |
|||
|
|||
# Editor directories and files |
|||
.idea |
|||
.vscode |
|||
*.suo |
|||
*.ntvs* |
|||
*.njsproj |
|||
*.sln |
|||
*.sw? |
@ -0,0 +1,20 @@ |
|||
const plugins = []; |
|||
if (['production', 'prod'].includes(process.env.NODE_ENV)) { |
|||
plugins.push("transform-remove-console") |
|||
} |
|||
|
|||
module.exports = { |
|||
presets: [ |
|||
[ |
|||
"@vue/app", |
|||
{ |
|||
"useBuiltIns": "entry", |
|||
polyfills: [ |
|||
'es6.promise', |
|||
'es6.symbol' |
|||
] |
|||
} |
|||
] |
|||
], |
|||
plugins: plugins |
|||
}; |
@ -0,0 +1,3 @@ |
|||
{ |
|||
"pluginsFile": "tests/e2e/plugins/index.js" |
|||
} |
@ -0,0 +1,64 @@ |
|||
{ |
|||
"name": "GY_web", |
|||
"version": "0.1.0", |
|||
"private": true, |
|||
"scripts": { |
|||
"serve": "vue-cli-service serve", |
|||
"build": "vue-cli-service build", |
|||
"test:e2e": "vue-cli-service test:e2e", |
|||
"lint": "vue-cli-service lint" |
|||
}, |
|||
"dependencies": { |
|||
"@babel/compat-data": "^7.12.5", |
|||
"@types/js-cookie": "^2.2.5", |
|||
"@types/qs": "^6.9.1", |
|||
"axios": "^0.19.2", |
|||
"babel-plugin-transform-remove-console": "^6.9.4", |
|||
"core-js": "^3.6.4", |
|||
"echarts": "^4.6.0", |
|||
"echarts-gl": "^1.1.1", |
|||
"element-ui": "^2.13.0", |
|||
"es6-promise": "^4.2.8", |
|||
"js-cookie": "^2.2.1", |
|||
"js-md5": "^0.7.3", |
|||
"jsencrypt": "^3.0.0-rc.1", |
|||
"nprogress": "^0.2.0", |
|||
"querystring": "^0.2.0", |
|||
"quill": "^1.3.7", |
|||
"quill-image-drop-module": "^1.0.3", |
|||
"quill-image-extend-module": "^1.1.2", |
|||
"quill-image-resize-module": "^3.0.0", |
|||
"register-service-worker": "^1.6.2", |
|||
"v-distpicker": "^1.2.2", |
|||
"vue": "^2.6.11", |
|||
"vue-class-component": "^7.2.2", |
|||
"vue-property-decorator": "^8.3.0", |
|||
"vue-quill-editor": "^3.0.6", |
|||
"vue-router": "^3.1.5", |
|||
"vue-seamless-scroll": "^1.1.21", |
|||
"vue-ueditor": "^0.1.3", |
|||
"vuex": "^3.1.2" |
|||
}, |
|||
"devDependencies": { |
|||
"@typescript-eslint/eslint-plugin": "^2.18.0", |
|||
"@typescript-eslint/parser": "^2.18.0", |
|||
"@vue/cli-plugin-babel": "~4.2.0", |
|||
"@vue/cli-plugin-e2e-cypress": "~4.2.0", |
|||
"@vue/cli-plugin-eslint": "~4.2.0", |
|||
"@vue/cli-plugin-pwa": "~4.2.0", |
|||
"@vue/cli-plugin-router": "~4.2.0", |
|||
"@vue/cli-plugin-typescript": "~4.2.0", |
|||
"@vue/cli-plugin-vuex": "~4.2.0", |
|||
"@vue/cli-service": "~4.2.0", |
|||
"@vue/eslint-config-typescript": "^5.0.1", |
|||
"babel-polyfill": "^6.26.0", |
|||
"eslint": "^6.7.2", |
|||
"eslint-plugin-vue": "^6.1.2", |
|||
"sass": "^1.25.0", |
|||
"sass-loader": "^8.0.2", |
|||
"svg-sprite-loader": "^5.0.0", |
|||
"typescript": "~3.7.5", |
|||
"vue-template-compiler": "^2.6.11", |
|||
"vue-ueditor-wrap": "^2.4.1" |
|||
} |
|||
} |
@ -0,0 +1,13 @@ |
|||
// config = {
|
|||
// API_URL: 'http://www.fatoaniic.com/api',
|
|||
// UPLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/upload",
|
|||
// DOWNLOAD_URL: "http://www.fatoaniic.com/api/api-ftp/ftp/download?filename=",
|
|||
// SHOW_URL: "http://www.fatoaniic.com/ftpfile/",
|
|||
// }
|
|||
config = { |
|||
API_URL: 'http://61.135.192.42:8082', |
|||
UPLOAD_URL: "http://61.135.192.42:8082/attachment/uploadOne", |
|||
DOWNLOAD_URL: "http://61.135.192.42:8082/api-ftp/ftp/download?filename=", |
|||
SHOW_URL: "http://www.fatoaniic.com/ftpfile/", |
|||
} |
|||
|
After Width: | Height: | Size: 66 KiB |
@ -0,0 +1,21 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> |
|||
<meta name="viewport" content="width=device-width,initial-scale=1.0"> |
|||
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> |
|||
<title>牛栏山工业互联网防伪系统</title> |
|||
<script src="./config.js"></script> |
|||
</head> |
|||
|
|||
<body> |
|||
<noscript> |
|||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> |
|||
</noscript> |
|||
<div id="app"></div> |
|||
<!-- built files will be auto injected --> |
|||
</body> |
|||
|
|||
</html> |
@ -0,0 +1,2 @@ |
|||
User-agent: * |
|||
Disallow: |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 823 B |
After Width: | Height: | Size: 419 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 1.2 MiB |
After Width: | Height: | Size: 574 B |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 495 B |
After Width: | Height: | Size: 642 B |
After Width: | Height: | Size: 521 B |
After Width: | Height: | Size: 557 B |
@ -0,0 +1,228 @@ |
|||
|
|||
$bg: #2d3a4b; |
|||
$light_gray: #eee; |
|||
|
|||
/* reset element-ui css */ |
|||
.login-container { |
|||
width: 100%; |
|||
height: 100%; |
|||
background: url("../../img/login/bg.png") no-repeat; |
|||
background-size: 100% 100%; |
|||
.platform-select .el-input{ |
|||
width:100%; |
|||
} |
|||
.el-input { |
|||
display: inline-block; |
|||
height: 34px; |
|||
width: 80%; |
|||
|
|||
input { |
|||
background: transparent; |
|||
border: 0px; |
|||
-webkit-appearance: none; |
|||
border-radius: 0px; |
|||
padding: 0 10px; |
|||
color: #333; |
|||
height: 32px; |
|||
font-size: 16px; |
|||
|
|||
/**&:-webkit-autofill { |
|||
-webkit-box-shadow: 0 0 0px 1000px $bg inset !important; |
|||
-webkit-text-fill-color: #fff !important; |
|||
}**/ |
|||
} |
|||
.el-input__inner { |
|||
line-height: normal; |
|||
} |
|||
input::-webkit-input-placeholder { /* WebKit browsers */ |
|||
color: rgba(153,153,153,1); |
|||
font-size: 14px; |
|||
} |
|||
|
|||
input::-moz-placeholder { /* Mozilla Firefox 19+ */ |
|||
color: rgba(153,153,153,1); |
|||
font-size: 14px; |
|||
} |
|||
|
|||
input:-ms-input-placeholder { /* Internet Explorer 10+ */ |
|||
color: rgba(153,153,153,1); |
|||
font-size: 14px; |
|||
} |
|||
} |
|||
|
|||
.el-form-item { |
|||
// width:407px; |
|||
max-width: 100%; |
|||
height:34px; |
|||
background:rgba(255,255,255,1); |
|||
border:1px solid rgba(220,220,220,1); |
|||
border-radius:4px; |
|||
margin-bottom: 25px; |
|||
.el-form-item__content{ |
|||
line-height: normal; |
|||
} |
|||
} |
|||
.login-btn{ |
|||
font-size:18px; |
|||
padding: 0; |
|||
color:rgba(255,255,255,1); |
|||
width:405px; |
|||
height:35px; |
|||
// background:linear-gradient(-24deg,rgba(223,52,52,1),rgba(255,108,88,1)); |
|||
border:1px solid rgba(220, 220, 220, 1); |
|||
border-radius:4px; |
|||
} |
|||
a.click_link { |
|||
font-size: 14px; |
|||
color: #2788CC; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
|
|||
$bg: #2d3a4b; |
|||
$dark_blue:#2788CC; |
|||
$dark_gray: #889aa4; |
|||
$light_gray: #eee; |
|||
.login-container { |
|||
position: relative; |
|||
height: 100%; |
|||
min-height: 700px; |
|||
width: 100%; |
|||
min-width: 700px; |
|||
background-color: $bg; |
|||
|
|||
.login-form { |
|||
background:rgba(255,255,255,1); |
|||
box-shadow:0px 3px 40px 0px rgba(143, 143, 143, 0.35); |
|||
border-radius:4px; |
|||
position: absolute; |
|||
width: 450px; |
|||
left: 50%; |
|||
top:calc(15vh + 130px); |
|||
z-index: 100; |
|||
padding: 50px 70px; |
|||
transform: translateX(-50%); |
|||
.platform-select{ |
|||
width:100%; |
|||
} |
|||
} |
|||
.title-form { |
|||
font-size:24px; |
|||
font-family:PingFang SC; |
|||
font-weight:500; |
|||
color:rgba(51,51,51,1); |
|||
line-height:45px; |
|||
margin-bottom: 20px; |
|||
.title-regiter{ |
|||
float: right; |
|||
font-size:14px; |
|||
// a { |
|||
// font-size: 14px; |
|||
// color: #2788CC; |
|||
// cursor: pointer; |
|||
// } |
|||
} |
|||
} |
|||
.svg-container { |
|||
padding: 5px 5px 5px 10px; |
|||
color: $dark_gray; |
|||
display: inline-block; |
|||
position: relative; |
|||
vertical-align: top; |
|||
.user-img{ |
|||
width:19px; |
|||
height:21px; |
|||
} |
|||
.pass-img{ |
|||
width:19px; |
|||
height:21px; |
|||
// margin-left: 4px; |
|||
} |
|||
} |
|||
.code-refresh { |
|||
position: absolute; |
|||
right: 2px; |
|||
top: 5px; |
|||
width: 25px; |
|||
height: 20px; |
|||
cursor: pointer; |
|||
} |
|||
.code-pic { |
|||
margin: 0 5px; |
|||
border:1px solid rgba(220, 220, 220, 1); |
|||
border-radius:3px; |
|||
width: 90px; |
|||
height: 34px; |
|||
// cursor: pointer; |
|||
} |
|||
.header { |
|||
position: relative; |
|||
text-align: center; |
|||
top: 15vh; |
|||
font-weight:bold; |
|||
color:rgba(255,255,255,1); |
|||
letter-spacing:5px; |
|||
.title-cn { |
|||
font-size:48px; |
|||
height: 48px; |
|||
line-height: 48px; |
|||
font-family:Microsoft YaHei; |
|||
text-shadow:0px 1px 3px rgba(0, 0, 0, 0.4); |
|||
} |
|||
.title-en { |
|||
margin-top: 15px; |
|||
height:22px; |
|||
font-size:22px; |
|||
line-height:22px; |
|||
font-family:Arial; |
|||
text-shadow:0px 1px 2px rgba(0, 0, 0, 0.4); |
|||
letter-spacing: 3px; |
|||
word-spacing: 2px; |
|||
} |
|||
} |
|||
.remember-block { |
|||
margin-bottom: 20px; |
|||
// a { |
|||
// font-size: 14px; |
|||
// color: #2788CC; |
|||
// cursor: pointer; |
|||
// } |
|||
} |
|||
|
|||
.show-pwd { |
|||
position: absolute; |
|||
width: 20px; |
|||
height: 15px; |
|||
right: 10px; |
|||
top: 9px; |
|||
font-size: 16px; |
|||
color: $dark_gray; |
|||
cursor: pointer; |
|||
user-select: none; |
|||
.eye { |
|||
width: 100%; |
|||
height: 100%; |
|||
background: url("../../img/login/show-P.png") no-repeat; |
|||
background-size: 100% 100%; |
|||
} |
|||
.eye-open { |
|||
width: 100%; |
|||
height: 100%; |
|||
background: url("../../img/login/hide-P.png") no-repeat; |
|||
background-size: 100% 100%; |
|||
} |
|||
} |
|||
} |
|||
.login_copyright{ |
|||
position: absolute; |
|||
bottom: 0; |
|||
|
|||
width: 100vw; |
|||
height:56px; |
|||
font-size: 14px; |
|||
line-height: 56px; |
|||
text-align: center; |
|||
color:#000; |
|||
background-color: rgba(255, 255, 255, 0.2); |
|||
} |
@ -0,0 +1,166 @@ |
|||
//to reset element-ui default css |
|||
//table header reset css |
|||
.el-table thead { |
|||
color: #333333; |
|||
font-weight: 500; |
|||
font-size: 15px; |
|||
} |
|||
.el-table__header-wrapper tr { |
|||
background-color: #ececec !important; |
|||
} |
|||
.el-table th, |
|||
.el-table tr { |
|||
background-color: transparent; |
|||
} |
|||
|
|||
//分页器reset css |
|||
.el-pagination { |
|||
padding: 30px 5px; |
|||
text-align: center; |
|||
} |
|||
.el-pagination.is-background .btn-next, |
|||
.el-pagination.is-background .btn-prev, |
|||
.el-pagination.is-background .el-pager li { |
|||
background-color: #ffffff; |
|||
border: 1px solid #ececec; |
|||
color: #606266; |
|||
} |
|||
.el-pagination.is-background .el-pager li:not(.disabled):hover { |
|||
color: #1b5c7d; |
|||
} |
|||
.el-pagination.is-background .el-pager li:not(.disabled).active { |
|||
background-color: #1b5c7d; |
|||
color: #fff; |
|||
} |
|||
.el-pagination__sizes .el-input .el-input__inner:hover { |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-select .el-input.is-focus .el-input__inner { |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-select-dropdown__item.selected { |
|||
color: #1b5c7d; |
|||
} |
|||
.el-input.is-active .el-input__inner, |
|||
.el-input__inner:focus { |
|||
border-color: #1b5c7d; |
|||
} |
|||
|
|||
.el-dialog__header { |
|||
background-color:rgba(248,248,248,1); |
|||
} |
|||
//下拉条 |
|||
.avatar-uploader .el-upload { |
|||
border: 1px dashed #929292; |
|||
border-radius: 6px; |
|||
cursor: pointer; |
|||
position: relative; |
|||
overflow: hidden; |
|||
} |
|||
.avatar-uploader .el-upload:hover { |
|||
border-color: #409EFF; |
|||
} |
|||
.avatar-uploader-icon { |
|||
font-size: 28px; |
|||
color: #8c939d; |
|||
width: 120px; |
|||
height: 120px; |
|||
line-height: 120px; |
|||
text-align: center; |
|||
} |
|||
.avatar { |
|||
width: 120px; |
|||
height: 120px; |
|||
display: block; |
|||
} |
|||
|
|||
//下拉菜单 |
|||
.el-dropdown-menu { |
|||
background-color: #F7F7F7 !important; |
|||
.el-dropdown-menu__item:focus, .el-dropdown-menu__item:not(.is-disabled):hover { |
|||
background-color: #ffe8e6 !important; |
|||
color: #606266; |
|||
} |
|||
} |
|||
|
|||
//步骤条 |
|||
.el-step__head.is-process { |
|||
color: #1b5c7d; |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-step__title.is-process { |
|||
font-weight: 700; |
|||
color: #1b5c7d; |
|||
} |
|||
.el-step__description.is-process { |
|||
color: #1b5c7d; |
|||
} |
|||
|
|||
//文字链接 |
|||
.el-link { |
|||
vertical-align: unset; |
|||
} |
|||
|
|||
.el-header{ |
|||
position: relative; |
|||
width:100%; |
|||
padding: 0; |
|||
height:84px; |
|||
background-color: #1b5c7d; |
|||
z-index: 100; |
|||
} |
|||
|
|||
//el-dialog样式 |
|||
.el-dialog__title { |
|||
font-size: 16px; |
|||
} |
|||
.el-dialog__headerbtn { |
|||
font-size: 22px; |
|||
} |
|||
.el-dialog__footer { |
|||
text-align: center; |
|||
} |
|||
//el-message-box样式 |
|||
.el-message-box__title { |
|||
font-size: 16px; |
|||
} |
|||
.el-message-box__headerbtn { |
|||
font-size: 22px; |
|||
} |
|||
// .el-upload { |
|||
// input[type="file"] { |
|||
// display: none !important; |
|||
// } |
|||
// } |
|||
|
|||
// .el-upload__input { |
|||
// display: none; |
|||
// } |
|||
|
|||
// //暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461 |
|||
// .el-dialog { |
|||
// transform: none; |
|||
// left: 0; |
|||
// position: relative; |
|||
// margin: 0 auto; |
|||
// } |
|||
|
|||
// //element ui upload |
|||
// .upload-container { |
|||
// .el-upload { |
|||
// width: 100%; |
|||
// .el-upload-dragger { |
|||
// width: 100%; |
|||
// height: 200px; |
|||
// } |
|||
// } |
|||
// } |
|||
// //树形节点 |
|||
// .custom-tree-node { |
|||
// flex: 1; |
|||
// display: flex; |
|||
// align-items: center; |
|||
// justify-content: space-between; |
|||
// font-size: 14px; |
|||
// padding-right: 8px; |
|||
// } |
@ -0,0 +1,245 @@ |
|||
@import './variables.scss'; |
|||
// @import './mixin.scss'; |
|||
// @import './transition.scss'; |
|||
@import './element-ui.scss'; |
|||
@import './sidebar.scss'; |
|||
// @import './button.scss'; |
|||
// @import './header.scss'; |
|||
// @import './reset-el';//覆盖element 表单和表格样式 |
|||
html, body, h1, h2, h3, h4, h5, h6, div, dl, dt, dd, ul, ol, li, p, blockquote, pre, hr, figure, table, caption, th, td, form, fieldset, legend, input, button, textarea, menu { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
body { |
|||
height: 100%; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
-webkit-font-smoothing: antialiased; |
|||
text-rendering: optimizeLegibility; |
|||
font-family: Helvetica Neue,Helvetica,Arial,Microsoft Yahei,Hiragino Sans GB,Heiti SC,WenQuanYi Micro Hei,sans-serif; |
|||
} |
|||
|
|||
label { |
|||
font-weight: 700; |
|||
} |
|||
|
|||
html { |
|||
height: 100%; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
#app { |
|||
height: 100%; |
|||
} |
|||
|
|||
*, |
|||
*:before, |
|||
*:after { |
|||
box-sizing: inherit; |
|||
} |
|||
|
|||
a, |
|||
a:focus, |
|||
a:hover { |
|||
cursor: pointer; |
|||
color: inherit; |
|||
outline: none; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
div:focus { |
|||
outline: none; |
|||
} |
|||
|
|||
a:focus, |
|||
a:active { |
|||
outline: none; |
|||
} |
|||
//IE9不支持颜色渐变 |
|||
#starsBox { |
|||
background-color: #0C1739; |
|||
.my-header span { |
|||
background-color: #166ECF; |
|||
} |
|||
#dashboard .my-main .map-header li span { |
|||
background-color: #1094DD; |
|||
} |
|||
} |
|||
.clearfix { |
|||
&:after { |
|||
visibility: hidden; |
|||
display: block; |
|||
font-size: 0; |
|||
content: " "; |
|||
clear: both; |
|||
height: 0; |
|||
} |
|||
} |
|||
.flex-box { |
|||
display: -webkit-box; |
|||
display: -webkit-flex; /* Safari */ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
.flex-box-column { |
|||
display: -webkit-box; |
|||
display: -webkit-flex; /* Safari */ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
} |
|||
.font-size-21 { |
|||
font-size: 21px; |
|||
} |
|||
.font-size-13 { |
|||
font-size: 13px; |
|||
} |
|||
.font-size-16 { |
|||
font-size: 16px; |
|||
} |
|||
.font-weight-bold { |
|||
font-weight:bold; |
|||
} |
|||
.line-height-2em { |
|||
line-height: 2em; |
|||
} |
|||
.text-center { |
|||
text-align: center; |
|||
} |
|||
.text-right { |
|||
text-align: right; |
|||
} |
|||
.flex-1 { |
|||
-webkit-box-flex: 1; |
|||
-webkit-flex: 1; |
|||
flex: 1; |
|||
} |
|||
.color-success { |
|||
color: #5CB959; |
|||
} |
|||
.color-error { |
|||
color: #EA6356; |
|||
} |
|||
.color-wait { |
|||
color: #FFBF00; |
|||
} |
|||
.color-send { |
|||
color: #4395ff; |
|||
} |
|||
.float-left{ |
|||
float: left; |
|||
} |
|||
.float-right{ |
|||
float: right; |
|||
} |
|||
// ul,ol,li{ |
|||
// list-style: none; |
|||
// } |
|||
|
|||
//main-container全局样式 |
|||
.app-main { |
|||
min-height: 100%; |
|||
padding-top:84px; |
|||
border-top: 2px solid #1b5c7d; |
|||
} |
|||
|
|||
.app-container { |
|||
padding: 20px; |
|||
background-color: #fff; |
|||
.input-suffix { |
|||
line-height: 60px; |
|||
display: inline; |
|||
margin: 0 1em; |
|||
} |
|||
.filter-container { |
|||
line-height: 50px; |
|||
text-align: right; |
|||
} |
|||
} |
|||
//瀑布流中间内容 |
|||
.sault-container { |
|||
width: 1200px; |
|||
margin: 0 auto; |
|||
.title-1 { |
|||
position: relative; |
|||
text-align: center; |
|||
color: #333333; |
|||
font-size: 38px; |
|||
line-height: 100px; |
|||
margin-bottom: 30px; |
|||
&:before { |
|||
content: ""; |
|||
position: absolute; |
|||
display: inline-block; |
|||
bottom: 0px; |
|||
left:calc(50% - 20px); |
|||
width: 40px; |
|||
height: 4px; |
|||
background-color: #E63229; |
|||
z-index: 100; |
|||
} |
|||
} |
|||
.title-2 { |
|||
position: relative; |
|||
text-align: center; |
|||
color: #333333; |
|||
font-size: 21px; |
|||
margin-bottom: 30px; |
|||
} |
|||
.content-box { |
|||
padding: 20px; |
|||
} |
|||
} |
|||
//处理浏览器输入框记住账号密码后的背景色 |
|||
input:-webkit-autofill , textarea:-webkit-autofill, select:-webkit-autofill { |
|||
-webkit-text-fill-color: #333 !important; |
|||
-webkit-box-shadow: 0 0 0px 1000px transparent inset !important; |
|||
background-color:transparent; |
|||
background-image: none; |
|||
transition: background-color 50000s ease-in-out 0s; //背景色透明 生效时长 过渡效果 启用时延迟的时间 |
|||
} |
|||
input { |
|||
background-color:transparent; |
|||
} |
|||
|
|||
// .container-box{ |
|||
// .query-box{ |
|||
// background: #fff; |
|||
// margin-bottom:20px; |
|||
// border-radius: 5px; |
|||
// .title{ |
|||
// padding: 20px; |
|||
// font-size:18px; |
|||
// font-family:Microsoft YaHei; |
|||
// font-weight:400; |
|||
// color:rgba(52,123,229,1); |
|||
// border-bottom:1px solid #DEDEDE; |
|||
// } |
|||
// } |
|||
// .table-box{ |
|||
// background: #fff; |
|||
// border-radius: 5px; |
|||
// padding-bottom: 50px; |
|||
// .title-box{ |
|||
// .title{ |
|||
// padding: 21px 0 21px 21px; |
|||
// p{ |
|||
// font-size:18px; |
|||
// font-family:Microsoft YaHei; |
|||
// font-weight:400; |
|||
// color:rgba(68,138,231,1); |
|||
// border-left:3px solid #448AE7; |
|||
// padding-left: 8px; |
|||
// } |
|||
// } |
|||
// .btn{ |
|||
// padding: 11px 54px 11px 0; |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
// input:-webkit-autofill { |
|||
// -webkit-box-shadow: 0 0 0 1000px white inset !important; |
|||
// } |
|||
|
@ -0,0 +1,234 @@ |
|||
@import './variables.scss'; |
|||
#app { |
|||
// 主体区域 |
|||
.main-container { |
|||
position: relative; |
|||
min-height: 100%; |
|||
width: calc(100% - 180px); |
|||
background-color: #EFEFEF; |
|||
transition: margin-left .28s; |
|||
margin-left: 180px; |
|||
} |
|||
.main-content { |
|||
width: calc(100% - 180px); |
|||
margin: 0 15px; |
|||
} |
|||
.header-content { |
|||
width: 100%; |
|||
padding: 0 20px; |
|||
} |
|||
// 顶边栏 |
|||
.header-sidebar-container { |
|||
width: 100%; |
|||
// height: 60px; |
|||
position: fixed; |
|||
min-width: 700px; |
|||
background-color: #1b5c7d; |
|||
color: #fff; |
|||
top: 0; |
|||
left: 0; |
|||
font-size: 18px; |
|||
z-index: 1001; |
|||
// overflow: hidden; |
|||
.svg-icon { |
|||
color: #000; |
|||
margin-right: 16px; |
|||
} |
|||
.el-menu { |
|||
display: inline-block; |
|||
border: none; |
|||
height: 84px; |
|||
vertical-align: bottom; |
|||
a, |
|||
.el-submenu { |
|||
display: inline-block; |
|||
float: left; |
|||
} |
|||
.el-submenu__icon-arrow { |
|||
position: static; |
|||
vertical-align: middle; |
|||
margin-left: 8px; |
|||
margin-top: -3px; |
|||
} |
|||
.el-menu-item, |
|||
.el-submenu__title { |
|||
i { |
|||
color: #ffffff; |
|||
} |
|||
height: 84px; |
|||
line-height: 84px; |
|||
font-size: 16px; |
|||
padding:0 15px; |
|||
&:hover { |
|||
background-color: $menuHover !important; |
|||
} |
|||
} |
|||
} |
|||
.is-active { |
|||
border-top: 3px solid #fff; |
|||
border-bottom: 0; |
|||
background-color: $menuHover !important; |
|||
} |
|||
// menu hover |
|||
// .submenu-title-noDropdown, |
|||
// .el-submenu__title { |
|||
// i { |
|||
// color: #ffffff; |
|||
// } |
|||
// &:hover { |
|||
// background-color: $menuHover !important; |
|||
// } |
|||
// } |
|||
// .is-active>.el-submenu__title { |
|||
// color: $subMenuActiveText !important; |
|||
// } |
|||
// & .nest-menu .el-submenu>.el-submenu__title, |
|||
// & .el-submenu .el-menu-item { |
|||
// min-width: $sideBarWidth !important; |
|||
// background-color: $subMenuBg !important; |
|||
// &:hover { |
|||
// background-color: $subMenuHover !important; |
|||
// } |
|||
// } |
|||
} |
|||
// 侧边栏 |
|||
.sidebar-container { |
|||
transition: width 0.28s; |
|||
width: 180px !important; |
|||
height: calc(100% - 84px); |
|||
position: fixed; |
|||
font-size: 0px; |
|||
top: 84px; |
|||
bottom: 0; |
|||
left: 0; |
|||
z-index: 1001; |
|||
overflow: hidden; |
|||
//reset element-ui css |
|||
.horizontal-collapse-transition { |
|||
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; |
|||
} |
|||
.scrollbar-wrapper { |
|||
height: calc(100% + 15px); |
|||
.el-scrollbar__view { |
|||
height: 100%; |
|||
} |
|||
} |
|||
.is-horizontal { |
|||
display: none; |
|||
} |
|||
a { |
|||
display: inline-block; |
|||
width: 100%; |
|||
overflow: hidden; |
|||
} |
|||
.svg-icon { |
|||
margin-right: 16px; |
|||
} |
|||
.el-menu { |
|||
border: none; |
|||
height: 100%; |
|||
width: 100% !important; |
|||
// background-image: url("../../static/bg.png"); |
|||
background-repeat: no-repeat; |
|||
background-size: 100% 100%; |
|||
li { |
|||
&:hover { |
|||
color: #1b5c7d; |
|||
background-color: #ececec !important; |
|||
} |
|||
} |
|||
} |
|||
.is-active { |
|||
border-left: 3px solid #1b5c7d; |
|||
color: #1b5c7d; |
|||
border-bottom: 0; |
|||
background-color: #ececec !important; |
|||
} |
|||
} |
|||
.openSidebar { |
|||
position: relative; |
|||
top: 84px; |
|||
height: calc(100% - 84px); |
|||
} |
|||
.hideSidebar { |
|||
position: relative; |
|||
top: 84px; |
|||
height: calc(100% - 84px); |
|||
.sidebar-container { |
|||
width: 60px !important; |
|||
} |
|||
.main-container { |
|||
margin-left: 60px; |
|||
} |
|||
.submenu-title-noDropdown { |
|||
padding-left: 10px !important; |
|||
position: relative; |
|||
.el-tooltip { |
|||
padding: 0 10px !important; |
|||
} |
|||
} |
|||
.el-submenu { |
|||
overflow: hidden; |
|||
&>.el-submenu__title { |
|||
padding-left: 10px !important; |
|||
.el-submenu__icon-arrow { |
|||
display: none; |
|||
} |
|||
} |
|||
} |
|||
.el-menu--collapse { |
|||
.el-submenu { |
|||
&>.el-submenu__title { |
|||
&>span { |
|||
height: 0; |
|||
width: 0; |
|||
overflow: hidden; |
|||
visibility: hidden; |
|||
display: inline-block; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//适配移动端 |
|||
.mobile { |
|||
.main-container { |
|||
margin-left: 0px; |
|||
} |
|||
.sidebar-container { |
|||
transition: transform .28s; |
|||
width: 180px !important; |
|||
} |
|||
&.hideSidebar { |
|||
.sidebar-container { |
|||
transition-duration: 0.3s; |
|||
transform: translate3d(-180px, 0, 0); |
|||
} |
|||
} |
|||
} |
|||
.withoutAnimation { |
|||
.main-container, |
|||
.sidebar-container { |
|||
transition: none; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.el-menu--horizontal { |
|||
// width: 100% !important; |
|||
// left: 0 !important; |
|||
background-color: #F7F7F7; |
|||
.el-menu--popup { |
|||
min-width: 120px; |
|||
.is-active { |
|||
// border-bottom: 2px solid #fff; |
|||
background-color: rgba(255, 232, 230, 1) !important; |
|||
} |
|||
.el-menu-item { |
|||
color: #000 !important; |
|||
&:hover { |
|||
background-color: rgba(255, 232, 230, 1) !important; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,27 @@ |
|||
//sidebar |
|||
$menuText:#fff; |
|||
$menuText2:#212121; |
|||
$menuActiveText:#fff; |
|||
$menuActiveText2:rgb(217, 52, 223); |
|||
$subMenuActiveText:#4b4bce; //https://github.com/ElemeFE/element/issues/12951 |
|||
|
|||
$menuBg:rgba(0,0,0,0); |
|||
$menuHover: rgba(255,255,255,0.3); |
|||
|
|||
$subMenuBg:#000; |
|||
$subMenuHover:#ffffff33; |
|||
|
|||
$sideBarWidth: 200px; |
|||
|
|||
// the :export directive is the magic sauce for webpack |
|||
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass |
|||
:export { |
|||
menuText: $menuText; |
|||
menuActiveText: $menuActiveText; |
|||
subMenuActiveText: $subMenuActiveText; |
|||
menuBg: $menuBg; |
|||
menuHover: $menuHover; |
|||
subMenuBg: $subMenuBg; |
|||
subMenuHover: $subMenuHover; |
|||
sideBarWidth: $sideBarWidth; |
|||
} |
@ -0,0 +1,5 @@ |
|||
<template> |
|||
<div id="app"> |
|||
<router-view/> |
|||
</div> |
|||
</template> |
@ -0,0 +1,51 @@ |
|||
|
|||
|
|||
import request from '@/utils/request'; |
|||
//获取参会人员列表信息
|
|||
export function getAttendeeList(param) { |
|||
return request({ |
|||
url: '/conferee/search', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//创建参会人员
|
|||
export function addAttendee(param) { |
|||
return request({ |
|||
url: '/conferee/add', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//删除参会人员
|
|||
export function deleteAttendee(param) { |
|||
return request({ |
|||
url: '/conferee/delete', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//修改参会人员
|
|||
export function editAttendee(param) { |
|||
return request({ |
|||
url: '/conferee/edit', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
// //获取参会人员详情信息(id)
|
|||
// export function getAttendeeById(id) {
|
|||
// return request({
|
|||
// url: '/conferee/get/'+id,
|
|||
// method: 'get'
|
|||
// });
|
|||
// }
|
|||
//导出参会人员列表信息
|
|||
export function getAttendeeById(param) { |
|||
return request({ |
|||
url: '/conferee/export', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
|
@ -0,0 +1,111 @@ |
|||
import request from '@/utils/request'; |
|||
//获取企业列表
|
|||
export function getEnterpriseList(params) { |
|||
return request({ |
|||
url: '/company/search', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//删除企业
|
|||
export function deleteEnterprise(params) { |
|||
return request({ |
|||
url: '/company/delete', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//获取企业详情
|
|||
export function getEnterpriseDetails(params) { |
|||
return request({ |
|||
url: '/company/get/'+params, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//修改企业信息
|
|||
export function editEnterprise(params) { |
|||
return request({ |
|||
url: '/company/edit', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//添加企业
|
|||
export function addEnterprise(params) { |
|||
return request({ |
|||
url: '/company/add', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//区域查询接口
|
|||
export function getArea(params) { |
|||
return request({ |
|||
url: '/common/getComboList_2/40010/'+params, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//行业大类查询接口
|
|||
export function getBigIndustryList() { |
|||
return request({ |
|||
url: '/common/getComboList_1/40008', |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//行业小类查询接口
|
|||
export function getSmallIndustryList(params) { |
|||
return request({ |
|||
url: '/common/getComboList_2/40009/'+params, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//审核企业信息
|
|||
export function approveEnterprise(params) { |
|||
return request({ |
|||
url: '/company/audit', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
//启
|
|||
export function enableEnterprise(params) { |
|||
return request({ |
|||
url: '/api-enterprise/enterprise/enable', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
|||
//停
|
|||
export function disableEnterprise(params) { |
|||
return request({ |
|||
url: '/api-enterprise/enterprise/disable', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
//企业审核列表
|
|||
export function enApplyList(params) { |
|||
return request({ |
|||
url: '/api-enterprise/enApply/page', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//公司审核页面的详情
|
|||
export function enApplyDetail(params) { |
|||
return request({ |
|||
url: '/api-enterprise/enApply/detail', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
@ -0,0 +1,84 @@ |
|||
import request from '@/utils/request'; |
|||
//登录接口
|
|||
export function login(param) { |
|||
return request({ |
|||
url: '/user/login', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//登出接口
|
|||
export function logout() { |
|||
return request({ |
|||
url: '/common/logout', |
|||
method: 'post' |
|||
}); |
|||
} |
|||
//普通账户修改密码
|
|||
export function updatePass(params) { |
|||
return request({ |
|||
url: '/common/updatePassword', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
//注册账户
|
|||
export function registerUser(params) { |
|||
return request({ |
|||
url: '/api-login/user/registerUser', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//获取短信验证码
|
|||
export function sendMessage(params) { |
|||
return request({ |
|||
url: '/api-login/common/send', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//忘记密码-输入账号换取手机号
|
|||
export function userToTelphone(params) { |
|||
return request({ |
|||
url: '/api-login/user/telPhone', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//忘记密码-重设密码
|
|||
export function setUpPassword(params) { |
|||
return request({ |
|||
url: '/api-login/user/setUpPassword', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//验证短信验证码
|
|||
export function smsVerification(params) { |
|||
return request({ |
|||
url: '/api-login/common/smsVerification', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//非法字符列表
|
|||
export function getKeysList(params) { |
|||
return request({ |
|||
url: '/api-login/key/keys', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//获取待办事项
|
|||
export function getAnnCount(params) { |
|||
return request({ |
|||
url: '/api-login/ann/getAnnCount', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
@ -0,0 +1,43 @@ |
|||
|
|||
|
|||
import request from '@/utils/request'; |
|||
//获取会议列表信息
|
|||
export function getMeetingList(param) { |
|||
return request({ |
|||
url: '/conference/search', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//创建会议
|
|||
export function addMeeting(param) { |
|||
return request({ |
|||
url: '/conference/add', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//删除会议
|
|||
export function deleteMeeting(param) { |
|||
return request({ |
|||
url: '/conference/delete', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//修改会议
|
|||
export function editMeeting(param) { |
|||
return request({ |
|||
url: '/conference/edit', |
|||
method: 'post', |
|||
data:param |
|||
}); |
|||
} |
|||
//获取会议详情信息(id)
|
|||
export function getMeetingById(id) { |
|||
return request({ |
|||
url: '/conference/get/'+id, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
|
@ -0,0 +1,54 @@ |
|||
import request from '@/utils/request'; |
|||
import requestLoading from '@/utils/requestLoading'; |
|||
//获取文章类型下拉列表
|
|||
export function getNoticeTypeList(params) { |
|||
return request({ |
|||
url: '/common/getComboList_1/40005', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//获取文章列表
|
|||
export function getNoticeList(params) { |
|||
return request({ |
|||
url: '/content/search', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//添加文章
|
|||
export function addNoticeInfo(params) { |
|||
return request({ |
|||
url: '/content/add', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
//获取文章详情
|
|||
export function getNoticeInfo(params) { |
|||
return request({ |
|||
url: '/content/get/'+params, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//更新文章详情
|
|||
export function editNoticeInfo(params) { |
|||
return request({ |
|||
url: '/content/edit', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//删除文章
|
|||
export function deleteNoticeInfo(params) { |
|||
return request({ |
|||
url: '/content/delete', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/utils/request'; |
|||
import requestLoading from '@/utils/requestLoading'; |
|||
//获取权限列表
|
|||
export function getAuthorityList(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/authority/authoritys', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//获取权限详情
|
|||
export function getAuthorityInfo(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/authority/authority', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//添加权限
|
|||
export function addAuthority(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/authority/authority', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//修改权限
|
|||
export function editAuthority(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/authority/authority', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
|||
//获取菜单tree
|
|||
export function getMenusTree(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/menu/menus', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
@ -0,0 +1,42 @@ |
|||
import request from '@/utils/request'; |
|||
import requestLoading from '@/utils/requestLoading'; |
|||
//获取前缀列表
|
|||
export function getPrefixList(params) { |
|||
return requestLoading({ |
|||
url: '/api-enterprise/prefix/apply', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//详情
|
|||
export function getPrefixInfo(params) { |
|||
return requestLoading({ |
|||
url: '/api-enterprise/prefix/enInfo', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//申请前缀
|
|||
export function applyPrefix(params) { |
|||
return requestLoading({ |
|||
url: '/api-enterprise/prefix/apply', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//前缀审核
|
|||
export function auditingPrefix(params) { |
|||
return requestLoading({ |
|||
url: '/api-enterprise/prefix/approve', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
|||
//同步
|
|||
export function syncPrefix(params) { |
|||
return requestLoading({ |
|||
url: '/api-enterprise/prefix/synchronizationEnInfo', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
@ -0,0 +1,5 @@ |
|||
import request from '@/utils/request'; |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,50 @@ |
|||
import request from '@/utils/request'; |
|||
import requestLoading from '@/utils/requestLoading'; |
|||
//获取角色列表
|
|||
export function getRoleList(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/role/roleList', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//获取角色详情
|
|||
export function getRoleInfo(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/role/roleInfo', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//添加角色
|
|||
export function addRole(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/role/role', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//修改角色
|
|||
export function editRole(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/role/role', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
|||
//删除角色
|
|||
export function deleteRole(params) { |
|||
return requestLoading({ |
|||
url: '/api-login/role/role', |
|||
method: 'delete', |
|||
params |
|||
}); |
|||
} |
|||
//校验角色
|
|||
export function existsRoleName(params) { |
|||
return request({ |
|||
url: '/api-login/role/existName', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
@ -0,0 +1,98 @@ |
|||
import request from '@/utils/request'; |
|||
//获取用户列表
|
|||
export function getUserList(params) { |
|||
return request({ |
|||
url: '/user/search', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//根据id获取用户详情
|
|||
export function getUserDetail(id) { |
|||
return request({ |
|||
url: '/user/get/'+id, |
|||
method: 'get' |
|||
}); |
|||
} |
|||
//添加用户
|
|||
export function addUser(params) { |
|||
return request({ |
|||
url: '/user/add', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//删除用户
|
|||
export function deleteUser(params) { |
|||
return request({ |
|||
url: '/user/delete', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//更新用户信息
|
|||
export function updateUserInfo(params) { |
|||
return request({ |
|||
url: '/user/edit', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
//添加用户时校验用户是否存在
|
|||
export function existsUserName(params) { |
|||
return request({ |
|||
url: '/user/checkUserInfo', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
//用户启用停用状态
|
|||
export function editUserStatus(params) { |
|||
return request({ |
|||
url: '/api-login/user/status', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//获取角色类型
|
|||
export function getRoleType(params) { |
|||
return request({ |
|||
url: '/api-login/user/types', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
//管理员账户重置密码
|
|||
export function resetPass(params) { |
|||
return request({ |
|||
url: '/api-login/user/restPassword', |
|||
method: 'post', |
|||
data:params |
|||
}); |
|||
} |
|||
|
|||
//获取当前用户类别与角色
|
|||
export function getAddRole(params) { |
|||
return request({ |
|||
url: '/api-login/user/getAddRole', |
|||
method: 'get', |
|||
params |
|||
}); |
|||
} |
|||
//更改个人中心信息
|
|||
export function editPersonalCenter(params) { |
|||
return request({ |
|||
url: '/api-login/user/personalCenter', |
|||
method: 'put', |
|||
data:params |
|||
}); |
|||
} |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 574 B |
After Width: | Height: | Size: 576 B |
After Width: | Height: | Size: 495 B |
After Width: | Height: | Size: 642 B |
After Width: | Height: | Size: 521 B |
After Width: | Height: | Size: 557 B |
@ -0,0 +1,58 @@ |
|||
<template> |
|||
<el-breadcrumb class="app-breadcrumb" separator=">"> |
|||
<transition-group name="breadcrumb"> |
|||
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path" v-if="item.title || item.meta.title"> |
|||
<span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{item.title || item.meta.title}}</span> |
|||
<router-link v-else :to="item.redirect||item.path">{{item.title || item.meta.title}}</router-link> |
|||
</el-breadcrumb-item> |
|||
</transition-group> |
|||
</el-breadcrumb> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
created() { |
|||
this.getBreadcrumb() |
|||
}, |
|||
data() { |
|||
return { |
|||
levelList: null |
|||
} |
|||
}, |
|||
watch: { |
|||
$route() { |
|||
this.getBreadcrumb() |
|||
} |
|||
}, |
|||
methods: { |
|||
getBreadcrumb() { |
|||
let matched = [] |
|||
if(this.$route.meta.breadcrumbList && this.$route.meta.breadcrumbList.length != 0) |
|||
{ |
|||
matched = this.$route.meta.breadcrumbList |
|||
} else { |
|||
matched = this.$route.matched.filter(item => item.name) |
|||
} |
|||
|
|||
// const first = matched[0] |
|||
// if (first && first.name !== 'dashboard') { |
|||
// matched = [{ path: '/dashboard', meta: { title: '首页' }}].concat(matched) |
|||
// } |
|||
this.levelList = matched |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style rel="stylesheet/scss" lang="scss" scoped> |
|||
.app-breadcrumb.el-breadcrumb { |
|||
display: inline-block; |
|||
font-size: 14px; |
|||
line-height: 50px; |
|||
margin-left: 10px; |
|||
.no-redirect { |
|||
color: #97a8be; |
|||
cursor: text; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,120 @@ |
|||
<template> |
|||
<div> |
|||
<div class='input_span'> |
|||
<!-- <label style='margin-left:40px;'>强度:</label> --> |
|||
<span id="one_ps"></span> |
|||
<span id="two_ps"></span> |
|||
<span id="three_ps"></span> |
|||
</div> |
|||
<div id="font_ps"> |
|||
<span>弱</span> |
|||
<span>中</span> |
|||
<span>强</span> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
export default { |
|||
name:'checkPasswordStrong', |
|||
data(){ |
|||
return { |
|||
msgText:'', |
|||
pwd:'' |
|||
} |
|||
}, |
|||
props:{ |
|||
sValue:{ |
|||
type: String, |
|||
} |
|||
}, |
|||
watch:{ |
|||
sValue(newValue) { |
|||
this.msgText = this.checkStrong(newValue); |
|||
if(this.msgText > 1 || this.msgText == 1) { |
|||
document.getElementById("one_ps").style.background = "red" |
|||
} else { |
|||
document.getElementById("one_ps").style.background = "#eee" |
|||
} |
|||
if(this.msgText > 2 || this.msgText == 2) { |
|||
document.getElementById("two_ps").style.background = "#ff9268" |
|||
} else { |
|||
document.getElementById("two_ps").style.background = "#eee" |
|||
} |
|||
if(this.msgText == 4) { |
|||
document.getElementById("three_ps").style.background = "#00D1B2" |
|||
} else { |
|||
document.getElementById("three_ps").style.background = "#eee" |
|||
} |
|||
} |
|||
}, |
|||
methods:{ |
|||
checkStrong(value) { |
|||
let modes = 0; |
|||
//正则表达式验证符合要求的 |
|||
if(value.length < 1) return modes; |
|||
if(/\d/.test(value)) modes++; //数字 |
|||
if(/[a-z]/.test(value)) modes++; //小写 |
|||
if(/[A-Z]/.test(value)) modes++; //大写 |
|||
if(/\W/.test(value)) modes++; //特殊字符 |
|||
|
|||
//逻辑处理 |
|||
switch(modes) { |
|||
case 1: |
|||
return 1; |
|||
case 2: |
|||
return 2; |
|||
case 3: |
|||
case 4: |
|||
return value.length < 10 ? 3 : 4 |
|||
} |
|||
return modes; |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.input_span,#font_ps { |
|||
line-height: 20px; |
|||
} |
|||
.input_span span { |
|||
display: inline-block; |
|||
width: calc(33% - 3px); |
|||
height: 10px; |
|||
background: #eee; |
|||
line-height: 20px; |
|||
} |
|||
|
|||
#one_ps { |
|||
border-top-left-radius: 5px; |
|||
border-bottom-left-radius: 5px; |
|||
border-right: 0px solid; |
|||
/* margin-left: 20px; */ |
|||
margin-right: 5px; |
|||
} |
|||
|
|||
#two_ps { |
|||
border-left: 0px solid; |
|||
border-right: 0px solid; |
|||
/* margin-left: -5px; */ |
|||
margin-right: 5px; |
|||
} |
|||
|
|||
#three_ps { |
|||
border-top-right-radius: 5px; |
|||
border-bottom-right-radius: 5px; |
|||
border-left: 0px solid; |
|||
/* margin-left: -5px; */ |
|||
} |
|||
#font_ps span:nth-child(1){ |
|||
color:red; |
|||
margin-left: 14%; |
|||
} |
|||
#font_ps span:nth-child(2){ |
|||
color:orange; |
|||
margin: 0 28%; |
|||
} |
|||
#font_ps span:nth-child(3){ |
|||
color:#00D1B2; |
|||
} |
|||
</style> |
@ -0,0 +1,44 @@ |
|||
<template> |
|||
<div> |
|||
<svg t="1492500959545" @click="toggleClick" class="hamburger" :class="{'is-active':isActive}" style="" viewBox="0 0 1024 1024" |
|||
version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1691" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"> |
|||
<path d="M966.8023 568.849776 57.196677 568.849776c-31.397081 0-56.850799-25.452695-56.850799-56.850799l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 543.397081 998.200404 568.849776 966.8023 568.849776z" |
|||
p-id="1692" fill="#212121"></path> |
|||
<path d="M966.8023 881.527125 57.196677 881.527125c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.849776 56.850799-56.849776l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.849776l0 0C1023.653099 856.07443 998.200404 881.527125 966.8023 881.527125z" |
|||
p-id="1693" fill="#212121"></path> |
|||
<path d="M966.8023 256.17345 57.196677 256.17345c-31.397081 0-56.850799-25.452695-56.850799-56.849776l0 0c0-31.397081 25.452695-56.850799 56.850799-56.850799l909.605623 0c31.397081 0 56.849776 25.452695 56.849776 56.850799l0 0C1023.653099 230.720755 998.200404 256.17345 966.8023 256.17345z" |
|||
p-id="1694" fill="#212121"></path> |
|||
</svg> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'hamburger', |
|||
props: { |
|||
isActive: { |
|||
type: Boolean, |
|||
default: false |
|||
}, |
|||
toggleClick: { |
|||
type: Function, |
|||
default: null |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.hamburger { |
|||
display: inline-block; |
|||
cursor: pointer; |
|||
width: 20px; |
|||
height: 20px; |
|||
transform: rotate(90deg); |
|||
transition: .38s; |
|||
transform-origin: 50% 50%; |
|||
} |
|||
.hamburger.is-active { |
|||
transform: rotate(0deg); |
|||
} |
|||
</style> |
@ -0,0 +1,42 @@ |
|||
<template> |
|||
<svg :class="svgClass" aria-hidden="true"> |
|||
<use :xlink:href="iconName"></use> |
|||
</svg> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
name: 'svg-icon', |
|||
props: { |
|||
iconClass: { |
|||
type: String, |
|||
required: true |
|||
}, |
|||
className: { |
|||
type: String |
|||
} |
|||
}, |
|||
computed: { |
|||
iconName() { |
|||
return `#icon-${this.iconClass}` |
|||
}, |
|||
svgClass() { |
|||
if (this.className) { |
|||
return 'svg-icon ' + this.className |
|||
} else { |
|||
return 'svg-icon' |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style scoped> |
|||
.svg-icon { |
|||
width: 1em; |
|||
height: 1em; |
|||
vertical-align: -0.15em; |
|||
fill: currentColor; |
|||
overflow: hidden; |
|||
} |
|||
</style> |
@ -0,0 +1,76 @@ |
|||
<template> |
|||
<div> |
|||
<!--下面通过传递进来的id完成初始化--> |
|||
<script :id="randomId" type="text/plain"></script> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
//主体文件引入 |
|||
import '../../../public/ueditor/ueditor.config.js' |
|||
import '../../../public/ueditor/ueditor.all.min.js' |
|||
import '../../../public/ueditor/lang/zh-cn/zh-cn.js' |
|||
|
|||
export default { |
|||
name: 'UE', |
|||
props: { |
|||
value: { |
|||
default: function() { |
|||
return '' |
|||
} |
|||
}, |
|||
//配置可以传递进来 |
|||
ueditorConfig: {} |
|||
}, |
|||
data() { |
|||
return { |
|||
//每个编辑器生成不同的id,以防止冲突 |
|||
randomId: 'editor_' + (Math.random() * 100000000000000000), |
|||
//编辑器实例 |
|||
instance: null, |
|||
ready: false, |
|||
}; |
|||
}, |
|||
watch: { |
|||
value: function(val, oldVal) { |
|||
if (val != null && this.ready) { |
|||
this.instance = UE.getEditor(this.randomId, this.ueditorConfig); |
|||
this.instance.setContent(val); |
|||
} |
|||
} |
|||
}, |
|||
//此时--el挂载到实例上去了,可以初始化对应的编辑器了 |
|||
mounted() { |
|||
this.initEditor(); |
|||
}, |
|||
|
|||
beforeDestroy() { |
|||
// 组件销毁的时候,要销毁 UEditor 实例 |
|||
if(this.instance !== null && this.instance.destroy) { |
|||
this.instance.destroy(); |
|||
} |
|||
}, |
|||
methods: { |
|||
initEditor() { |
|||
const _this = this; |
|||
//dom元素已经挂载上去了 |
|||
this.$nextTick(() => { |
|||
this.instance = UE.getEditor(this.randomId, this.ueditorConfig); |
|||
// 绑定事件,当 UEditor 初始化完成后,将编辑器实例通过自定义的 ready 事件交出去 |
|||
this.instance.addListener('ready', () => { |
|||
this.ready = true; |
|||
this.$emit('ready', this.instance); |
|||
}); |
|||
}); |
|||
}, |
|||
setText(con) { |
|||
this.instance = UE.getEditor(this.randomId, this.ueditorConfig); |
|||
this.instance.setContent(con); |
|||
}, |
|||
} |
|||
}; |
|||
|
|||
</script> |
|||
|
|||
<style> |
|||
</style> |
@ -0,0 +1,9 @@ |
|||
import Vue from 'vue' |
|||
import SvgIcon from '@/components/SvgIcon'// svg组件
|
|||
|
|||
// register globally
|
|||
Vue.component('svg-icon', SvgIcon) |
|||
|
|||
const requireAll = requireContext => requireContext.keys().map(requireContext) |
|||
const req = require.context('./svg', false, /\.svg$/) |
|||
requireAll(req) |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 852 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 4.6 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 4.9 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 532 B |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 777 B |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 4.1 KiB |
@ -0,0 +1,30 @@ |
|||
import 'babel-polyfill' //兼容IE9
|
|||
import 'es6-promise/auto' //兼容IE9
|
|||
// import Es6Promise from 'es6-promise'
|
|||
// Es6Promise.polyfill()
|
|||
import Vue from 'vue' |
|||
import ElementUI from 'element-ui' |
|||
import 'element-ui/lib/theme-chalk/index.css' |
|||
import '@/styles/index.scss' // global css
|
|||
import App from './App.vue' |
|||
import './registerServiceWorker' |
|||
import router from './router' |
|||
import store from './store' |
|||
import '@/icons' // icon
|
|||
import echarts from 'echarts' //echarts
|
|||
import scroll from 'vue-seamless-scroll' //滚动插件
|
|||
import md5 from 'js-md5'; //md5 加密
|
|||
// import '@/permission' // 权限控制
|
|||
|
|||
Vue.use(scroll) |
|||
Vue.use(ElementUI) |
|||
Vue.config.productionTip = false |
|||
Vue.prototype.$echarts = echarts |
|||
Vue.prototype.$md5 = md5 |
|||
|
|||
new Vue({ |
|||
router, |
|||
store, |
|||
render: h => h(App) |
|||
}).$mount('#app') |
|||
|
@ -0,0 +1,43 @@ |
|||
import router from './router' |
|||
import store from './store' |
|||
import NProgress from 'nprogress' // Progress 进度条
|
|||
import 'nprogress/nprogress.css'// Progress 进度条样式
|
|||
// import { Message } from 'element-ui'
|
|||
import {getToken} from '@/utils/auth' // 验权
|
|||
|
|||
const whiteList = ['/login', '/register', '/retrievePassword'] // 不重定向白名单
|
|||
router.beforeEach((to, from, next) => { |
|||
NProgress.start() |
|||
if (getToken()) { |
|||
if (to.path === '/login') { |
|||
next({path: '/'}) |
|||
NProgress.done() // if current page is dashboard will not trigger afterEach hook, so manually handle it
|
|||
} else { |
|||
// if (store.getters.roles.length === 0) {
|
|||
// store.dispatch('GetInfo').then(res => { // 拉取用户信息
|
|||
// next()
|
|||
// }).catch((err) => {
|
|||
// store.dispatch('FedLogOut').then(() => {
|
|||
// Message.error(err || 'Verification failed, please login again')
|
|||
// next({ path: '/' })
|
|||
// })
|
|||
// })
|
|||
// } else {
|
|||
// store.dispatch('changeActiveIndex', '/' + to.path.split("/")[1]).then();
|
|||
next() |
|||
NProgress.done() |
|||
// }
|
|||
} |
|||
} else { |
|||
if (whiteList.indexOf(to.path) !== -1) { |
|||
next() |
|||
} else { |
|||
next('/login') |
|||
NProgress.done() |
|||
} |
|||
} |
|||
}) |
|||
|
|||
router.afterEach(() => { |
|||
NProgress.done() // 结束Progress
|
|||
}) |
@ -0,0 +1,32 @@ |
|||
/* eslint-disable no-console */ |
|||
|
|||
import { register } from 'register-service-worker' |
|||
|
|||
if (process.env.NODE_ENV === 'production') { |
|||
register(`${process.env.BASE_URL}service-worker.js`, { |
|||
ready () { |
|||
console.log( |
|||
'App is being served from cache by a service worker.\n' + |
|||
'For more details, visit https://goo.gl/AFskqB' |
|||
) |
|||
}, |
|||
registered () { |
|||
console.log('Service worker has been registered.') |
|||
}, |
|||
cached () { |
|||
console.log('Content has been cached for offline use.') |
|||
}, |
|||
updatefound () { |
|||
console.log('New content is downloading.') |
|||
}, |
|||
updated () { |
|||
console.log('New content is available; please refresh.') |
|||
}, |
|||
offline () { |
|||
console.log('No internet connection found. App is running in offline mode.') |
|||
}, |
|||
error (error) { |
|||
console.error('Error during service worker registration:', error) |
|||
} |
|||
}) |
|||
} |
@ -0,0 +1,216 @@ |
|||
import Vue from 'vue' |
|||
import VueRouter from 'vue-router' |
|||
import Layout from '../views/layout/Layout.vue'; |
|||
import AppMain from '../views/layout/components/AppMain.vue'; |
|||
|
|||
Vue.use(VueRouter) |
|||
|
|||
/** |
|||
* hidden: true if `hidden:true` will not show in the sidebar(default is false) |
|||
* alwaysShow: true if set true, will always show the root menu, whatever its child routes length |
|||
* if not set alwaysShow, only more than one route under the children |
|||
* it will becomes nested mode, otherwise not show the root menu |
|||
* redirect: noredirect if `redirect:noredirect` will no redirect in the breadcrumb |
|||
* name:'router-name' the name is used by <keep-alive> (must set!!!) |
|||
* meta : { |
|||
title: 'title' the name show in subMenu and breadcrumb (recommend set) |
|||
icon: 'svg-name' the icon show in the sidebar |
|||
breadcrumb: false if false, the item will hidden in breadcrumb(default is true) |
|||
breadcrumbList:[ 自定义面包屑列表,需要从一级按顺序开始写 |
|||
{title: "系统管理", path: "",redirect:'noredirect'}, |
|||
{title: "公司管理", path: "/system/company/list"}, |
|||
{title: "公司详情", path: "/system/company/companyDetail"} |
|||
] |
|||
} |
|||
**/ |
|||
//
|
|||
const routes = [ |
|||
{path: '/login', name: 'login', component: () => import('@/views/login/index.vue'), hidden: true}, |
|||
{path: '/404', component: () => import('@/views/404.vue'), hidden: true}, |
|||
// { path: '/', component: () => import('@/views/markSearch/index.vue'), hidden: true },
|
|||
// { path: '/search/detail', component: () => import('@/views/markSearch/detail.vue'), hidden: true },
|
|||
{ |
|||
path: '', |
|||
name: '', |
|||
component: Layout, |
|||
children: [ |
|||
//防伪码管理---系统管理员
|
|||
{ |
|||
path: 'antiFake', |
|||
component: AppMain, |
|||
name: 'antiFake', |
|||
redirect: 'noredirect', |
|||
meta: {title: '防伪码管理'}, |
|||
children: [ |
|||
{ |
|||
path: 'send', |
|||
component: () => import('@/views/send/send.vue'), |
|||
name: 'send', |
|||
meta: {title: '防伪码发码', icon: 'eye', noCache: true}, |
|||
}, |
|||
|
|||
{ |
|||
path: 'cancel', |
|||
name: 'cancel', |
|||
component: () => import('@/views/send/cancel.vue'), |
|||
meta: {title: '防伪码作废', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'getDetail', |
|||
name: 'getDetail', |
|||
hidden: true, |
|||
component: () => import('@/views/send/getDetail.vue'), |
|||
meta: {title: '取码详情', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'cancelDetail', |
|||
name: 'cancelDetail', |
|||
hidden: true, |
|||
component: () => import('@/views/send/cancelDetail.vue'), |
|||
meta: {title: '防伪码作废详情', icon: 'form', noCache: true}, |
|||
}, |
|||
], |
|||
}, |
|||
//防伪码取码管理---印刷厂
|
|||
{ |
|||
path: 'getAntiFake', |
|||
component: AppMain, |
|||
name: 'getAntiFake', |
|||
redirect: 'noredirect', |
|||
meta: {title: '防伪码取码管理'}, |
|||
children: [ |
|||
{ |
|||
path: 'getAntiFake', |
|||
component: () => import('@/views/get/get.vue'), |
|||
name: 'getAntiFake', |
|||
meta: {title: '取码单管理', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'addGet', |
|||
component: () => import('@/views/get/addGet.vue'), |
|||
name: 'addGet', |
|||
hidden: true, |
|||
meta: {title: '创建取码单', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'getDetail', |
|||
component: () => import('@/views/get/getDetail.vue'), |
|||
name: 'getGetDetail', |
|||
hidden: true, |
|||
meta: {title: '取码单详情', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'cancelAntiFake', |
|||
name: 'cancelAntiFake', |
|||
component: () => import('@/views/get/cancel.vue'), |
|||
meta: {title: '废码单管理', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'addCancel', |
|||
name: 'addCancel', |
|||
hidden: true, |
|||
component: () => import('@/views/get/addCancel.vue'), |
|||
meta: {title: '创建废码单', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'cancelDetail', |
|||
name: 'getCancelDetail', |
|||
hidden: true, |
|||
component: () => import('@/views/send/cancelDetail.vue'), //与管理员页面一样
|
|||
meta: {title: '废码单详情', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'returnReceipt', |
|||
name: 'returnReceipt', |
|||
component: () => import('@/views/get/returnReceipt.vue'), |
|||
meta: {title: '回执单管理', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'deliverGoods', |
|||
name: 'deliverGoods', |
|||
hidden: true, |
|||
component: () => import('@/views/get/deliverGoods.vue'), |
|||
meta: {title: '送货', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'returnReceiptDetail', |
|||
name: 'returnReceiptDetail', |
|||
hidden: true, |
|||
component: () => import('@/views/get/getDetail.vue'), //与取码详情页面一样
|
|||
meta: {title: '回执单详情', icon: 'form', noCache: true}, |
|||
} |
|||
], |
|||
}, |
|||
//防伪码发放情况---酒厂
|
|||
{ |
|||
path: 'sendStatus', |
|||
component: AppMain, |
|||
name: 'sendStatus', |
|||
redirect: 'noredirect', |
|||
meta: {title: '防伪码发放情况'}, |
|||
children: [ |
|||
{ |
|||
path: '', |
|||
component: () => import('@/views/status/sendStatus.vue'), |
|||
name: 'sendStatus', |
|||
meta: {title: '防伪码发放情况', icon: 'form', noCache: true}, |
|||
} |
|||
], |
|||
}, |
|||
//印制成品码数据统计---酒厂
|
|||
{ |
|||
path: 'goodsCount', |
|||
component: AppMain, |
|||
name: 'goodsCount', |
|||
redirect: 'noredirect', |
|||
meta: {title: '印制成品码数据统计'}, |
|||
children: [ |
|||
{ |
|||
path: '', |
|||
component: () => import('@/views/status/goodsCount.vue'), |
|||
name: 'goodsCount', |
|||
meta: {title: '印制成品码数据统计', icon: 'form', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'getGoodsDetail', |
|||
component: () => import('@/views/get/getDetail.vue'), |
|||
name: 'getGoodsDetail', |
|||
hidden: true, |
|||
meta: {title: '成品码去向', icon: 'form', noCache: true}, |
|||
}, |
|||
], |
|||
}, |
|||
//系统管理
|
|||
{ |
|||
path: 'system', |
|||
component: AppMain, |
|||
name: 'system', |
|||
redirect: 'noredirect', |
|||
meta: {title: '系统管理'}, |
|||
children: [ |
|||
{ |
|||
path: 'user', |
|||
component: () => import('@/views/systemManage/user.vue'), |
|||
name: 'userManage', |
|||
meta: {title: '用户管理', icon: 'register', noCache: true}, |
|||
}, |
|||
{ |
|||
path: 'whiteList', |
|||
name: 'whiteList', |
|||
component: () => import('@/views/systemManage/whiteList.vue'), |
|||
meta: {title: '白名单', icon: 'form', noCache: true}, |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}, |
|||
{path: '*', redirect: '/404', hidden: true}, |
|||
] |
|||
|
|||
const router = new VueRouter({ |
|||
// mode: 'history',
|
|||
// base: config.API_URL,
|
|||
routes |
|||
}) |
|||
|
|||
export default router |
@ -0,0 +1,13 @@ |
|||
import Vue, { VNode } from 'vue' |
|||
|
|||
declare global { |
|||
namespace JSX { |
|||
// tslint:disable no-empty-interface
|
|||
interface Element extends VNode {} |
|||
// tslint:disable no-empty-interface
|
|||
interface ElementClass extends Vue {} |
|||
interface IntrinsicElements { |
|||
[elem: string]: any; |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,4 @@ |
|||
declare module '*.vue' { |
|||
import Vue from 'vue' |
|||
export default Vue |
|||
} |
@ -0,0 +1,13 @@ |
|||
const getters = { |
|||
sidebar: state => state.app.sidebar, //全局变量菜单栏
|
|||
device: state => state.app.device, //全局变量设备端类型
|
|||
token: state => state.user.token, //全局变量token
|
|||
id: state => state.user.id, //全局变量id
|
|||
router: state => state.user.router, //全局变量路由
|
|||
name: state => state.user.name, //全局变量用户姓名
|
|||
activeIndex: state => state.user.activeIndex, //全局变量菜单索引
|
|||
template: state => state.user.template, //全局变量皮肤模板
|
|||
identity: state => state.user.identity, //全局变量用户类型
|
|||
keys: state => state.user.keys //全局变量敏感字符集
|
|||
} |
|||
export default getters |
@ -0,0 +1,17 @@ |
|||
import Vue from 'vue' |
|||
import Vuex from 'vuex' |
|||
import app from './modules/app' |
|||
import user from './modules/user' |
|||
import getters from './getters' |
|||
|
|||
Vue.use(Vuex) |
|||
|
|||
const store = new Vuex.Store({ |
|||
modules: { |
|||
app, |
|||
user |
|||
}, |
|||
getters |
|||
}) |
|||
|
|||
export default store |
@ -0,0 +1,45 @@ |
|||
import Cookies from 'js-cookie' |
|||
|
|||
const app = { |
|||
state: { |
|||
sidebar: { |
|||
opened: !+Cookies.get('sidebarStatus'), |
|||
withoutAnimation: false |
|||
}, |
|||
device: 'desktop' |
|||
}, |
|||
mutations: { |
|||
TOGGLE_SIDEBAR: state => { |
|||
if (state.sidebar.opened) { |
|||
Cookies.set('sidebarStatus', 1) |
|||
} else { |
|||
Cookies.set('sidebarStatus', 0) |
|||
} |
|||
state.sidebar.opened = !state.sidebar.opened |
|||
state.sidebar.withoutAnimation = false |
|||
}, |
|||
CLOSE_SIDEBAR: (state, withoutAnimation) => { |
|||
// Cookies.set('sidebarStatus', 1)
|
|||
// state.sidebar.opened = false
|
|||
// state.sidebar.withoutAnimation = withoutAnimation
|
|||
|
|||
//响应式左侧菜单,可以折叠暂时去掉
|
|||
}, |
|||
TOGGLE_DEVICE: (state, device) => { |
|||
state.device = device |
|||
} |
|||
}, |
|||
actions: { |
|||
ToggleSideBar: ({ commit }) => { |
|||
commit('TOGGLE_SIDEBAR') |
|||
}, |
|||
CloseSideBar({ commit }, { withoutAnimation }) { |
|||
commit('CLOSE_SIDEBAR', withoutAnimation) |
|||
}, |
|||
ToggleDevice({ commit }, device) { |
|||
commit('TOGGLE_DEVICE', device) |
|||
} |
|||
} |
|||
} |
|||
|
|||
export default app |
@ -0,0 +1,135 @@ |
|||
import {login, logout, getKeysList} from '@/api/login'; |
|||
import { |
|||
getToken, |
|||
setToken, |
|||
removeToken, |
|||
// getTemplate,
|
|||
// setTemplate,
|
|||
// getRouter,
|
|||
// setRouter,
|
|||
// removeRouter,
|
|||
getName, |
|||
setName, |
|||
removeName, |
|||
// getId,
|
|||
// setId,
|
|||
// removeId,
|
|||
// getIdentity,
|
|||
// setIdentity,
|
|||
// removeIdentity,
|
|||
// setActiveIndex,
|
|||
// removeActiveIndex,
|
|||
// getActiveIndex,
|
|||
// getKeys,
|
|||
// setKeys,
|
|||
// removeKeys
|
|||
} from '@/utils/auth'; |
|||
|
|||
const user = { |
|||
state: { |
|||
token: getToken() || '', |
|||
// router: getRouter() || [],
|
|||
name: getName() || '', |
|||
// id: getId()|| '',
|
|||
// template: getTemplate() || '001',
|
|||
// identity: getIdentity() || '',
|
|||
// activeIndex: getActiveIndex() || '',
|
|||
// keys: getKeys() || []
|
|||
}, |
|||
|
|||
mutations: { |
|||
SET_TOKEN: (state, token) => { |
|||
state.token = token; |
|||
}, |
|||
// SET_ROUTER: (state, router) => {
|
|||
// state.router = router;
|
|||
// },
|
|||
SET_NAME: (state, name) => { |
|||
state.name = name; |
|||
}, |
|||
// SET_ID: (state, id) => {
|
|||
// state.id = id;
|
|||
// },
|
|||
// SET_TEMPLATE: (state, template) => {
|
|||
// state.template = template;
|
|||
// },
|
|||
// SET_IDENTITY: (state, identity) => {
|
|||
// state.identity = identity;
|
|||
// },
|
|||
// SET_ACTIVEINDEX: (state, activeIndex) => {
|
|||
// state.activeIndex = activeIndex;
|
|||
// },
|
|||
// SET_KEYS: (state, keys) => {
|
|||
// state.keys = keys;
|
|||
// },
|
|||
}, |
|||
|
|||
actions: { |
|||
// 登录
|
|||
Login({commit}, param) { |
|||
//登录获取登录权限
|
|||
return new Promise((resolve, reject) => { |
|||
login(param).then(response => { |
|||
const data = response.data |
|||
setToken(data.token) |
|||
setName(data.account) |
|||
commit('SET_TOKEN', data.token) |
|||
commit('SET_NAME', data.account) |
|||
resolve(data) |
|||
}).catch(error => { |
|||
reject(error) |
|||
}) |
|||
}) |
|||
}, |
|||
// 一级菜单变化
|
|||
// changeActiveIndex({commit}, activeIndex) {
|
|||
// return new Promise(resolve => {
|
|||
// setActiveIndex(activeIndex)
|
|||
// commit('SET_ACTIVEINDEX', activeIndex);
|
|||
// resolve();
|
|||
// });
|
|||
// },
|
|||
// keyWords({commit, state}) {
|
|||
// if (state.keys.length != 0) {
|
|||
// return
|
|||
// } else {
|
|||
// return new Promise(resolve => {
|
|||
// getKeysList().then(res => {
|
|||
// setKeys(res.data)
|
|||
// commit('SET_KEYS', res.data);
|
|||
// resolve(res.data)
|
|||
// }).catch(error => {
|
|||
// reject(error)
|
|||
// })
|
|||
// });
|
|||
// }
|
|||
// },
|
|||
// // 登出
|
|||
LogOut({commit, state}) { |
|||
return new Promise((resolve, reject) => { |
|||
logout({}).then(() => { |
|||
commit('SET_TOKEN', ''); |
|||
commit('SET_NAME', "") |
|||
removeToken(); |
|||
removeName() |
|||
resolve(); |
|||
}).catch(error => { |
|||
reject(error); |
|||
}); |
|||
}); |
|||
}, |
|||
|
|||
// 前端 登出
|
|||
FedLogOut({commit}) { |
|||
return new Promise(resolve => { |
|||
commit('SET_TOKEN', ''); |
|||
commit('SET_NAME', "") |
|||
removeToken(); |
|||
removeName() |
|||
resolve(); |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
|
|||
export default user; |
@ -0,0 +1,166 @@ |
|||
//to reset element-ui default css |
|||
//table header reset css |
|||
.el-table thead { |
|||
color: #333333; |
|||
font-weight: 500; |
|||
font-size: 15px; |
|||
} |
|||
.el-table__header-wrapper tr { |
|||
background-color: #ececec !important; |
|||
} |
|||
.el-table th, |
|||
.el-table tr { |
|||
background-color: transparent; |
|||
} |
|||
|
|||
//分页器reset css |
|||
.el-pagination { |
|||
padding: 30px 5px; |
|||
text-align: center; |
|||
} |
|||
.el-pagination.is-background .btn-next, |
|||
.el-pagination.is-background .btn-prev, |
|||
.el-pagination.is-background .el-pager li { |
|||
background-color: #ffffff; |
|||
border: 1px solid #ececec; |
|||
color: #606266; |
|||
} |
|||
.el-pagination.is-background .el-pager li:not(.disabled):hover { |
|||
color: #1b5c7d; |
|||
} |
|||
.el-pagination.is-background .el-pager li:not(.disabled).active { |
|||
background-color: #1b5c7d; |
|||
color: #fff; |
|||
} |
|||
.el-pagination__sizes .el-input .el-input__inner:hover { |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-select .el-input.is-focus .el-input__inner { |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-select-dropdown__item.selected { |
|||
color: #1b5c7d; |
|||
} |
|||
.el-input.is-active .el-input__inner, |
|||
.el-input__inner:focus { |
|||
border-color: #1b5c7d; |
|||
} |
|||
|
|||
.el-dialog__header { |
|||
background-color:rgba(248,248,248,1); |
|||
} |
|||
//下拉条 |
|||
.avatar-uploader .el-upload { |
|||
border: 1px dashed #929292; |
|||
border-radius: 6px; |
|||
cursor: pointer; |
|||
position: relative; |
|||
overflow: hidden; |
|||
} |
|||
.avatar-uploader .el-upload:hover { |
|||
border-color: #409EFF; |
|||
} |
|||
.avatar-uploader-icon { |
|||
font-size: 28px; |
|||
color: #8c939d; |
|||
width: 120px; |
|||
height: 120px; |
|||
line-height: 120px; |
|||
text-align: center; |
|||
} |
|||
.avatar { |
|||
width: 120px; |
|||
height: 120px; |
|||
display: block; |
|||
} |
|||
|
|||
//下拉菜单 |
|||
.el-dropdown-menu { |
|||
background-color: #F7F7F7 !important; |
|||
.el-dropdown-menu__item:focus, .el-dropdown-menu__item:not(.is-disabled):hover { |
|||
// background-color: #ffe8e6 !important; |
|||
color: #606266; |
|||
} |
|||
} |
|||
|
|||
//步骤条 |
|||
.el-step__head.is-process { |
|||
color: #1b5c7d; |
|||
border-color: #1b5c7d; |
|||
} |
|||
.el-step__title.is-process { |
|||
font-weight: 700; |
|||
color: #1b5c7d; |
|||
} |
|||
.el-step__description.is-process { |
|||
color: #1b5c7d; |
|||
} |
|||
|
|||
//文字链接 |
|||
.el-link { |
|||
vertical-align: unset; |
|||
} |
|||
|
|||
.el-header{ |
|||
position: relative; |
|||
width:100%; |
|||
padding: 0; |
|||
height:84px; |
|||
background-color: #439CFF; |
|||
z-index: 100; |
|||
} |
|||
|
|||
//el-dialog样式 |
|||
.el-dialog__title { |
|||
font-size: 16px; |
|||
} |
|||
.el-dialog__headerbtn { |
|||
font-size: 22px; |
|||
} |
|||
.el-dialog__footer { |
|||
text-align: center; |
|||
} |
|||
//el-message-box样式 |
|||
.el-message-box__title { |
|||
font-size: 16px; |
|||
} |
|||
.el-message-box__headerbtn { |
|||
font-size: 22px; |
|||
} |
|||
// .el-upload { |
|||
// input[type="file"] { |
|||
// display: none !important; |
|||
// } |
|||
// } |
|||
|
|||
// .el-upload__input { |
|||
// display: none; |
|||
// } |
|||
|
|||
// //暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461 |
|||
// .el-dialog { |
|||
// transform: none; |
|||
// left: 0; |
|||
// position: relative; |
|||
// margin: 0 auto; |
|||
// } |
|||
|
|||
// //element ui upload |
|||
// .upload-container { |
|||
// .el-upload { |
|||
// width: 100%; |
|||
// .el-upload-dragger { |
|||
// width: 100%; |
|||
// height: 200px; |
|||
// } |
|||
// } |
|||
// } |
|||
// //树形节点 |
|||
// .custom-tree-node { |
|||
// flex: 1; |
|||
// display: flex; |
|||
// align-items: center; |
|||
// justify-content: space-between; |
|||
// font-size: 14px; |
|||
// padding-right: 8px; |
|||
// } |
@ -0,0 +1,245 @@ |
|||
@import './variables.scss'; |
|||
// @import './mixin.scss'; |
|||
// @import './transition.scss'; |
|||
@import './element-ui.scss'; |
|||
@import './sidebar.scss'; |
|||
// @import './button.scss'; |
|||
// @import './header.scss'; |
|||
// @import './reset-el';//覆盖element 表单和表格样式 |
|||
html, body, h1, h2, h3, h4, h5, h6, div, dl, dt, dd, ul, ol, li, p, blockquote, pre, hr, figure, table, caption, th, td, form, fieldset, legend, input, button, textarea, menu { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
body { |
|||
height: 100%; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
-webkit-font-smoothing: antialiased; |
|||
text-rendering: optimizeLegibility; |
|||
font-family: Helvetica Neue,Helvetica,Arial,Microsoft Yahei,Hiragino Sans GB,Heiti SC,WenQuanYi Micro Hei,sans-serif; |
|||
} |
|||
|
|||
label { |
|||
font-weight: 700; |
|||
} |
|||
|
|||
html { |
|||
height: 100%; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
#app { |
|||
height: 100%; |
|||
} |
|||
|
|||
*, |
|||
*:before, |
|||
*:after { |
|||
box-sizing: inherit; |
|||
} |
|||
|
|||
a, |
|||
a:focus, |
|||
a:hover { |
|||
cursor: pointer; |
|||
color: inherit; |
|||
outline: none; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
div:focus { |
|||
outline: none; |
|||
} |
|||
|
|||
a:focus, |
|||
a:active { |
|||
outline: none; |
|||
} |
|||
//IE9不支持颜色渐变 |
|||
#starsBox { |
|||
background-color: #0C1739; |
|||
.my-header span { |
|||
background-color: #166ECF; |
|||
} |
|||
#dashboard .my-main .map-header li span { |
|||
background-color: #1094DD; |
|||
} |
|||
} |
|||
.clearfix { |
|||
&:after { |
|||
visibility: hidden; |
|||
display: block; |
|||
font-size: 0; |
|||
content: " "; |
|||
clear: both; |
|||
height: 0; |
|||
} |
|||
} |
|||
.flex-box { |
|||
display: -webkit-box; |
|||
display: -webkit-flex; /* Safari */ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
.flex-box-column { |
|||
display: -webkit-box; |
|||
display: -webkit-flex; /* Safari */ |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
flex-direction: column; |
|||
} |
|||
.font-size-21 { |
|||
font-size: 21px; |
|||
} |
|||
.font-size-13 { |
|||
font-size: 13px; |
|||
} |
|||
.font-size-16 { |
|||
font-size: 16px; |
|||
} |
|||
.font-weight-bold { |
|||
font-weight:bold; |
|||
} |
|||
.line-height-2em { |
|||
line-height: 2em; |
|||
} |
|||
.text-center { |
|||
text-align: center; |
|||
} |
|||
.text-right { |
|||
text-align: right; |
|||
} |
|||
.flex-1 { |
|||
-webkit-box-flex: 1; |
|||
-webkit-flex: 1; |
|||
flex: 1; |
|||
} |
|||
.color-success { |
|||
color: #5CB959; |
|||
} |
|||
.color-error { |
|||
color: #EA6356; |
|||
} |
|||
.color-wait { |
|||
color: #FFBF00; |
|||
} |
|||
.color-send { |
|||
color: #4395ff; |
|||
} |
|||
.float-left{ |
|||
float: left; |
|||
} |
|||
.float-right{ |
|||
float: right; |
|||
} |
|||
// ul,ol,li{ |
|||
// list-style: none; |
|||
// } |
|||
|
|||
//main-container全局样式 |
|||
.app-main { |
|||
min-height: 100%; |
|||
padding-top:84px; |
|||
border-top: 2px solid #1b5c7d; |
|||
} |
|||
|
|||
.app-container { |
|||
padding: 20px; |
|||
background-color: #fff; |
|||
.input-suffix { |
|||
line-height: 60px; |
|||
display: inline; |
|||
margin: 0 1em; |
|||
} |
|||
.filter-container { |
|||
line-height: 50px; |
|||
text-align: right; |
|||
} |
|||
} |
|||
//瀑布流中间内容 |
|||
.sault-container { |
|||
width: 1200px; |
|||
margin: 0 auto; |
|||
.title-1 { |
|||
position: relative; |
|||
text-align: center; |
|||
color: #333333; |
|||
font-size: 38px; |
|||
line-height: 100px; |
|||
margin-bottom: 30px; |
|||
&:before { |
|||
content: ""; |
|||
position: absolute; |
|||
display: inline-block; |
|||
bottom: 0px; |
|||
left:calc(50% - 20px); |
|||
width: 40px; |
|||
height: 4px; |
|||
background-color: #E63229; |
|||
z-index: 100; |
|||
} |
|||
} |
|||
.title-2 { |
|||
position: relative; |
|||
text-align: center; |
|||
color: #333333; |
|||
font-size: 21px; |
|||
margin-bottom: 30px; |
|||
} |
|||
.content-box { |
|||
padding: 20px; |
|||
} |
|||
} |
|||
//处理浏览器输入框记住账号密码后的背景色 |
|||
input:-webkit-autofill , textarea:-webkit-autofill, select:-webkit-autofill { |
|||
-webkit-text-fill-color: #333 !important; |
|||
-webkit-box-shadow: 0 0 0px 1000px transparent inset !important; |
|||
background-color:transparent; |
|||
background-image: none; |
|||
transition: background-color 50000s ease-in-out 0s; //背景色透明 生效时长 过渡效果 启用时延迟的时间 |
|||
} |
|||
input { |
|||
background-color:transparent; |
|||
} |
|||
|
|||
// .container-box{ |
|||
// .query-box{ |
|||
// background: #fff; |
|||
// margin-bottom:20px; |
|||
// border-radius: 5px; |
|||
// .title{ |
|||
// padding: 20px; |
|||
// font-size:18px; |
|||
// font-family:Microsoft YaHei; |
|||
// font-weight:400; |
|||
// color:rgba(52,123,229,1); |
|||
// border-bottom:1px solid #DEDEDE; |
|||
// } |
|||
// } |
|||
// .table-box{ |
|||
// background: #fff; |
|||
// border-radius: 5px; |
|||
// padding-bottom: 50px; |
|||
// .title-box{ |
|||
// .title{ |
|||
// padding: 21px 0 21px 21px; |
|||
// p{ |
|||
// font-size:18px; |
|||
// font-family:Microsoft YaHei; |
|||
// font-weight:400; |
|||
// color:rgba(68,138,231,1); |
|||
// border-left:3px solid #448AE7; |
|||
// padding-left: 8px; |
|||
// } |
|||
// } |
|||
// .btn{ |
|||
// padding: 11px 54px 11px 0; |
|||
// } |
|||
// } |
|||
// } |
|||
// } |
|||
// input:-webkit-autofill { |
|||
// -webkit-box-shadow: 0 0 0 1000px white inset !important; |
|||
// } |
|||
|
@ -0,0 +1,28 @@ |
|||
@mixin clearfix { |
|||
&:after { |
|||
content: ""; |
|||
display: table; |
|||
clear: both; |
|||
} |
|||
} |
|||
|
|||
@mixin scrollBar { |
|||
&::-webkit-scrollbar-track-piece { |
|||
background: #d3dce6; |
|||
} |
|||
|
|||
&::-webkit-scrollbar { |
|||
width: 6px; |
|||
} |
|||
|
|||
&::-webkit-scrollbar-thumb { |
|||
background: #99a9bf; |
|||
border-radius: 20px; |
|||
} |
|||
} |
|||
|
|||
@mixin relative { |
|||
position: relative; |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
@ -0,0 +1,233 @@ |
|||
@import './variables.scss'; |
|||
#app { |
|||
// 主体区域 |
|||
.main-container { |
|||
position: relative; |
|||
min-height: 100%; |
|||
width: calc(100% - 180px); |
|||
background-color: #EFEFEF; |
|||
transition: margin-left .28s; |
|||
margin-left: 180px; |
|||
} |
|||
.main-content { |
|||
width: calc(100% - 180px); |
|||
margin: 0 15px; |
|||
} |
|||
.header-content { |
|||
width: 100%; |
|||
padding: 0 20px; |
|||
} |
|||
// 顶边栏 |
|||
.header-sidebar-container { |
|||
width: 100%; |
|||
// height: 60px; |
|||
position: fixed; |
|||
min-width: 700px; |
|||
background-color: #439CFF; |
|||
color: #fff; |
|||
top: 0; |
|||
left: 0; |
|||
font-size: 18px; |
|||
z-index: 1001; |
|||
// overflow: hidden; |
|||
.svg-icon { |
|||
color: #000; |
|||
margin-right: 16px; |
|||
} |
|||
.el-menu { |
|||
display: inline-block; |
|||
border: none; |
|||
height: 84px; |
|||
vertical-align: bottom; |
|||
a, |
|||
.el-submenu { |
|||
display: inline-block; |
|||
float: left; |
|||
} |
|||
.el-submenu__icon-arrow { |
|||
position: static; |
|||
vertical-align: middle; |
|||
margin-left: 8px; |
|||
margin-top: -3px; |
|||
} |
|||
.el-menu-item, |
|||
.el-submenu__title { |
|||
i { |
|||
color: #ffffff; |
|||
} |
|||
height: 84px; |
|||
line-height: 84px; |
|||
font-size: 16px; |
|||
padding:0 15px; |
|||
&:hover { |
|||
background-color: $menuHover !important; |
|||
} |
|||
} |
|||
} |
|||
.is-active { |
|||
border-top: 3px solid #fff; |
|||
border-bottom: 0; |
|||
background-color: $menuHover !important; |
|||
} |
|||
// menu hover |
|||
// .submenu-title-noDropdown, |
|||
// .el-submenu__title { |
|||
// i { |
|||
// color: #ffffff; |
|||
// } |
|||
// &:hover { |
|||
// background-color: $menuHover !important; |
|||
// } |
|||
// } |
|||
// .is-active>.el-submenu__title { |
|||
// color: $subMenuActiveText !important; |
|||
// } |
|||
// & .nest-menu .el-submenu>.el-submenu__title, |
|||
// & .el-submenu .el-menu-item { |
|||
// min-width: $sideBarWidth !important; |
|||
// background-color: $subMenuBg !important; |
|||
// &:hover { |
|||
// background-color: $subMenuHover !important; |
|||
// } |
|||
// } |
|||
} |
|||
// 侧边栏 |
|||
.sidebar-container { |
|||
transition: width 0.28s; |
|||
width: 180px !important; |
|||
height: calc(100% - 84px); |
|||
position: fixed; |
|||
font-size: 0px; |
|||
top: 84px; |
|||
bottom: 0; |
|||
left: 0; |
|||
z-index: 1001; |
|||
overflow: hidden; |
|||
//reset element-ui css |
|||
.horizontal-collapse-transition { |
|||
transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; |
|||
} |
|||
.scrollbar-wrapper { |
|||
height: calc(100% + 15px); |
|||
.el-scrollbar__view { |
|||
height: 100%; |
|||
} |
|||
} |
|||
.is-horizontal { |
|||
display: none; |
|||
} |
|||
a { |
|||
display: inline-block; |
|||
width: 100%; |
|||
overflow: hidden; |
|||
} |
|||
.svg-icon { |
|||
margin-right: 16px; |
|||
} |
|||
.el-menu { |
|||
border: none; |
|||
height: 100%; |
|||
width: 100% !important; |
|||
background-repeat: no-repeat; |
|||
background-size: 100% 100%; |
|||
li { |
|||
&:hover { |
|||
color: #1b5c7d; |
|||
// background-color: #ececec !important; |
|||
} |
|||
} |
|||
} |
|||
.is-active { |
|||
border-left: 3px solid #1b5c7d; |
|||
color: #1b5c7d; |
|||
border-bottom: 0; |
|||
// background-color: #ececec !important; |
|||
} |
|||
} |
|||
.openSidebar { |
|||
position: relative; |
|||
top: 84px; |
|||
height: calc(100% - 84px); |
|||
} |
|||
.hideSidebar { |
|||
position: relative; |
|||
top: 84px; |
|||
height: calc(100% - 84px); |
|||
.sidebar-container { |
|||
width: 60px !important; |
|||
} |
|||
.main-container { |
|||
margin-left: 60px; |
|||
} |
|||
.submenu-title-noDropdown { |
|||
padding-left: 10px !important; |
|||
position: relative; |
|||
.el-tooltip { |
|||
padding: 0 10px !important; |
|||
} |
|||
} |
|||
.el-submenu { |
|||
overflow: hidden; |
|||
&>.el-submenu__title { |
|||
padding-left: 10px !important; |
|||
.el-submenu__icon-arrow { |
|||
display: none; |
|||
} |
|||
} |
|||
} |
|||
.el-menu--collapse { |
|||
.el-submenu { |
|||
&>.el-submenu__title { |
|||
&>span { |
|||
height: 0; |
|||
width: 0; |
|||
overflow: hidden; |
|||
visibility: hidden; |
|||
display: inline-block; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//适配移动端 |
|||
.mobile { |
|||
.main-container { |
|||
margin-left: 0px; |
|||
} |
|||
.sidebar-container { |
|||
transition: transform .28s; |
|||
width: 180px !important; |
|||
} |
|||
&.hideSidebar { |
|||
.sidebar-container { |
|||
transition-duration: 0.3s; |
|||
transform: translate3d(-180px, 0, 0); |
|||
} |
|||
} |
|||
} |
|||
.withoutAnimation { |
|||
.main-container, |
|||
.sidebar-container { |
|||
transition: none; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.el-menu--horizontal { |
|||
// width: 100% !important; |
|||
// left: 0 !important; |
|||
background-color: #F7F7F7; |
|||
.el-menu--popup { |
|||
min-width: 120px; |
|||
.is-active { |
|||
// border-bottom: 2px solid #fff; |
|||
background-color: rgba(255, 232, 230, 1) !important; |
|||
} |
|||
.el-menu-item { |
|||
color: #000 !important; |
|||
&:hover { |
|||
background-color: rgba(255, 232, 230, 1) !important; |
|||
} |
|||
} |
|||
} |
|||
} |