@ -0,0 +1 @@
|
|||||||
|
cnpm install
|
@ -0,0 +1 @@
|
|||||||
|
cnpm run serve
|
@ -0,0 +1 @@
|
|||||||
|
cnpm run build
|
@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: [
|
||||||
|
'@vue/cli-plugin-babel/preset'
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 4.7 KiB |
@ -0,0 +1,9 @@
|
|||||||
|
<!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"><link rel="icon" href="./favicon.ico">
|
||||||
|
<title>赛界智慧管家后台管理系统</title><link href="./css/app.8ba4db22.css" rel="preload" as="style">
|
||||||
|
<link href="./css/chunk-vendors.0fdd4e14.css" rel="preload" as="style"><link href="./js/app.c5ed17a5.js" rel="preload" as="script">
|
||||||
|
<link href="./js/chunk-vendors.66d3be90.js" rel="preload" as="script"><link href="./css/chunk-vendors.0fdd4e14.css" rel="stylesheet">
|
||||||
|
<link href="./css/app.8ba4db22.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but mas-creator-admin doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app">
|
||||||
|
|
||||||
|
</div><script src="./js/chunk-vendors.66d3be90.js"></script><script src="./js/app.c5ed17a5.js"></script></body></html>
|
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
"name": "mas-creator-admin",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"serve": "vue-cli-service serve",
|
||||||
|
"build": "vue-cli-service build",
|
||||||
|
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
|
||||||
|
"lint": "vue-cli-service lint"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.19.2",
|
||||||
|
"core-js": "^3.4.4",
|
||||||
|
"echarts": "^4.6.0",
|
||||||
|
"element-ui": "^2.13.0",
|
||||||
|
"js-md5": "^0.7.3",
|
||||||
|
"print-js": "^1.5.0",
|
||||||
|
"vue": "^2.6.10",
|
||||||
|
"vue-quill-editor": "^3.0.6",
|
||||||
|
"vue-amap": "^0.5.10",
|
||||||
|
"vue-json-excel": "^0.3.0",
|
||||||
|
"vue-router": "^3.1.5"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vue/cli-plugin-babel": "^4.1.0",
|
||||||
|
"@vue/cli-plugin-eslint": "^4.1.0",
|
||||||
|
"@vue/cli-service": "^4.1.0",
|
||||||
|
"babel-eslint": "^10.0.3",
|
||||||
|
"babel-plugin-component": "^1.1.1",
|
||||||
|
"eslint": "^5.16.0",
|
||||||
|
"eslint-plugin-vue": "^5.0.0",
|
||||||
|
"node-sass": "^4.13.1",
|
||||||
|
"sass-loader": "^8.0.2",
|
||||||
|
"svg-sprite-loader": "4.1.3",
|
||||||
|
"svgo": "1.2.2",
|
||||||
|
"vue-template-compiler": "^2.6.10"
|
||||||
|
},
|
||||||
|
"eslintConfig": {
|
||||||
|
"root": true,
|
||||||
|
"env": {
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"plugin:vue/essential",
|
||||||
|
"eslint:recommended"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"no-console": "off",
|
||||||
|
"no-unused-vars": 0,
|
||||||
|
"no-useless-escape": "off"
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"parser": "babel-eslint"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"> 1%",
|
||||||
|
"last 2 versions",
|
||||||
|
"not ie <= 8",
|
||||||
|
"Android >= 4.0"
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 4.2 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>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but mas-creator-admin 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,30 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app" class="">
|
||||||
|
<router-view></router-view>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "app",
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
*{
|
||||||
|
padding: 0;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
html,body{
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
#app{
|
||||||
|
height:100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,9 @@
|
|||||||
|
/* 改变主题色变量 */
|
||||||
|
$--color-primary: #00c292 !default;
|
||||||
|
$--color-success: #67c23a !default;
|
||||||
|
$--color-warning: #e6a23c !default;
|
||||||
|
$--color-danger: #f56c6c !default;
|
||||||
|
$--color-info: #909399 !default;
|
||||||
|
/* 改变 icon 字体路径变量,必需 */
|
||||||
|
$--font-path: '~element-ui/lib/theme-chalk/fonts';
|
||||||
|
@import "~element-ui/packages/theme-chalk/src/index";
|
@ -0,0 +1,47 @@
|
|||||||
|
.form-content {
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 10px 10px 0 10px;
|
||||||
|
}
|
||||||
|
.table-content {
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
.pagination-content {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.detail-form-content{
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 10px;
|
||||||
|
.el-input{
|
||||||
|
min-width: 200px;
|
||||||
|
max-width: 600px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bg {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.login-form {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 350px;
|
||||||
|
height: 100%;
|
||||||
|
background: #ffffff;
|
||||||
|
padding: 0 60px;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.h1 {
|
||||||
|
margin-top: 80px;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.btn-login {
|
||||||
|
margin-top: 50px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 4.1 MiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 843 B |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 1.2 KiB |
@ -0,0 +1,43 @@
|
|||||||
|
<template>
|
||||||
|
<svg :class="svgClass" aria-hidden="true" v-on="$listeners">
|
||||||
|
<use :xlink:href="iconName" />
|
||||||
|
</svg>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'SvgIcon',
|
||||||
|
props: {
|
||||||
|
iconClass: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
className: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
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,109 @@
|
|||||||
|
<template>
|
||||||
|
<el-breadcrumb class="app-breadcrumb" separator="∰" style="height:50px;backgroundColor:rgba(255, 255, 255, 1);borderRadius:10px;padding:0px 20px 0px 20px;boxShadow:0px 0px 0px #f903d4;borderWidth:0px;borderStyle:dotted solid double dashed;borderColor:rgba(40, 36, 36, 1);">
|
||||||
|
<transition-group name="breadcrumb" class="box" :style="1==1?'justifyContent:flex-start;':1==2?'justifyContent:center;':'justifyContent:flex-end;'">
|
||||||
|
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
|
||||||
|
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.name }}</span>
|
||||||
|
<a v-else @click.prevent="handleLink(item)">{{ item.name }}</a>
|
||||||
|
</el-breadcrumb-item>
|
||||||
|
</transition-group>
|
||||||
|
</el-breadcrumb>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import pathToRegexp from 'path-to-regexp'
|
||||||
|
import { generateTitle } from '@/utils/i18n'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
levelList: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
$route() {
|
||||||
|
this.getBreadcrumb()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getBreadcrumb()
|
||||||
|
this.breadcrumbStyleChange()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
generateTitle,
|
||||||
|
getBreadcrumb() {
|
||||||
|
// only show routes with meta.title
|
||||||
|
let route = this.$route
|
||||||
|
let matched = route.matched.filter(item => item.meta)
|
||||||
|
const first = matched[0]
|
||||||
|
matched = [{ path: '/index' }].concat(matched)
|
||||||
|
|
||||||
|
this.levelList = matched.filter(item => item.meta)
|
||||||
|
},
|
||||||
|
isDashboard(route) {
|
||||||
|
const name = route && route.name
|
||||||
|
if (!name) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return name.trim().toLocaleLowerCase() === 'Index'.toLocaleLowerCase()
|
||||||
|
},
|
||||||
|
pathCompile(path) {
|
||||||
|
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
|
||||||
|
const { params } = this.$route
|
||||||
|
var toPath = pathToRegexp.compile(path)
|
||||||
|
return toPath(params)
|
||||||
|
},
|
||||||
|
handleLink(item) {
|
||||||
|
const { redirect, path } = item
|
||||||
|
if (redirect) {
|
||||||
|
this.$router.push(redirect)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.$router.push(path)
|
||||||
|
},
|
||||||
|
breadcrumbStyleChange(val) {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__separator').forEach(el=>{
|
||||||
|
el.innerText = "∰"
|
||||||
|
el.style.color = "rgba(255, 0, 0, 1)"
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__inner a').forEach(el=>{
|
||||||
|
el.style.color = "rgba(0, 0, 0, 1)"
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.app-breadcrumb .el-breadcrumb__inner .no-redirect').forEach(el=>{
|
||||||
|
el.style.color = "rgba(255, 0, 0, 1)"
|
||||||
|
})
|
||||||
|
|
||||||
|
let str = "vertical"
|
||||||
|
if("vertical" === str) {
|
||||||
|
let headHeight = "80px"
|
||||||
|
headHeight = parseInt(headHeight) + 10 + 'px'
|
||||||
|
document.querySelectorAll('.app-breadcrumb').forEach(el=>{
|
||||||
|
el.style.marginTop = headHeight
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-breadcrumb {
|
||||||
|
display: block;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 50px;
|
||||||
|
|
||||||
|
.box {
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-redirect {
|
||||||
|
color: #97a8be;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,77 @@
|
|||||||
|
<template>
|
||||||
|
<el-breadcrumb class="app-breadcrumb" separator="/">
|
||||||
|
<transition-group name="breadcrumb">
|
||||||
|
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
|
||||||
|
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.name }}</span>
|
||||||
|
<a v-else @click.prevent="handleLink(item)">{{ item.name }}</a>
|
||||||
|
</el-breadcrumb-item>
|
||||||
|
</transition-group>
|
||||||
|
</el-breadcrumb>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import pathToRegexp from 'path-to-regexp'
|
||||||
|
import { generateTitle } from '@/utils/i18n'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
levelList: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
$route() {
|
||||||
|
this.getBreadcrumb()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.getBreadcrumb()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
generateTitle,
|
||||||
|
getBreadcrumb() {
|
||||||
|
// only show routes with meta.title
|
||||||
|
console.log(this.$route)
|
||||||
|
let matched = this.$route.matched.filter(item => item.meta)
|
||||||
|
const first = matched[0]
|
||||||
|
matched = [{ path: '/index' }].concat(matched)
|
||||||
|
|
||||||
|
this.levelList = matched.filter(item => item.meta)
|
||||||
|
},
|
||||||
|
isDashboard(route) {
|
||||||
|
const name = route && route.name
|
||||||
|
if (!name) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return name.trim().toLocaleLowerCase() === 'Index'.toLocaleLowerCase()
|
||||||
|
},
|
||||||
|
pathCompile(path) {
|
||||||
|
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
|
||||||
|
const { params } = this.$route
|
||||||
|
var toPath = pathToRegexp.compile(path)
|
||||||
|
return toPath(params)
|
||||||
|
},
|
||||||
|
handleLink(item) {
|
||||||
|
const { redirect, path } = item
|
||||||
|
if (redirect) {
|
||||||
|
this.$router.push(redirect)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.$router.push(path)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.app-breadcrumb.el-breadcrumb {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 50px;
|
||||||
|
margin-left: 8px;
|
||||||
|
|
||||||
|
.no-redirect {
|
||||||
|
color: #97a8be;
|
||||||
|
cursor: text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,60 @@
|
|||||||
|
<template>
|
||||||
|
<el-card class="box-card">
|
||||||
|
<div slot="header" class="header">
|
||||||
|
<span>{{title}}</span>
|
||||||
|
<span>
|
||||||
|
<el-tag size="small" :type="titleTag">{{titleUnit}}</el-tag>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
{{content}}
|
||||||
|
<span class="unit">{{contentUnit}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="bottom">
|
||||||
|
<span>{{bottomTitle}}</span>
|
||||||
|
<span>
|
||||||
|
{{bottomContent}}
|
||||||
|
<i :class="bottomIcon"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: [
|
||||||
|
"title",
|
||||||
|
"titleTag",
|
||||||
|
"titleUnit",
|
||||||
|
"content",
|
||||||
|
"contentUnit",
|
||||||
|
"bottomTitle",
|
||||||
|
"bottomContent",
|
||||||
|
"bottomIcon"
|
||||||
|
]
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.box-card {
|
||||||
|
margin-right: 10px;
|
||||||
|
.header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.content {
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
text-align: center;
|
||||||
|
.unit {
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bottom {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,101 @@
|
|||||||
|
<template>
|
||||||
|
<div class="home-comment">
|
||||||
|
<div class="title">用户留言</div>
|
||||||
|
<div class="comment-list">
|
||||||
|
<div v-for="(item,index) in list" v-bind:key="index" class="comment-item">
|
||||||
|
<div class="user-content">
|
||||||
|
<el-image
|
||||||
|
class="avator"
|
||||||
|
:src="item.avator"
|
||||||
|
></el-image>
|
||||||
|
<span class="user">{{item.name}}</span>
|
||||||
|
</div>
|
||||||
|
<div class="comment">{{item.content}}</div>
|
||||||
|
<div class="create-time">{{item.createTime}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: [
|
||||||
|
{
|
||||||
|
name: "MaskLin",
|
||||||
|
avator:
|
||||||
|
"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
|
||||||
|
content:
|
||||||
|
"你以为只要长得漂亮就有男生喜欢?你以为只要有了钱漂亮妹子就自己贴上来了?你以为学霸就能找到好工作?我告诉你吧,这些都是真的!",
|
||||||
|
createTime: "5月02日 00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MaskLin",
|
||||||
|
avator:
|
||||||
|
"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
|
||||||
|
content: "作者太帅了",
|
||||||
|
createTime: "5月04日 00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MaskLin",
|
||||||
|
avator:
|
||||||
|
"https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
|
||||||
|
content: "作者太帅了",
|
||||||
|
createTime: "5月04日 00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "MaskLin",
|
||||||
|
avator: "https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg",
|
||||||
|
content: "作者太帅了",
|
||||||
|
createTime: "5月04日 00:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.home-comment {
|
||||||
|
background: #ffffff;
|
||||||
|
.title {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #666;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 1px solid #eeeeee;
|
||||||
|
}
|
||||||
|
.comment-list {
|
||||||
|
padding: 10px;
|
||||||
|
.comment-item {
|
||||||
|
padding: 10px;
|
||||||
|
border-bottom: 1px solid #eeeeee;
|
||||||
|
.user-content {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.user {
|
||||||
|
font-size: 18px;
|
||||||
|
color: #666;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 50px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
.avator {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.comment {
|
||||||
|
margin-top: 10px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
.create-time {
|
||||||
|
margin-top: 15px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,55 @@
|
|||||||
|
<template>
|
||||||
|
<div class="home-progress">
|
||||||
|
<div class="title">月访问量</div>
|
||||||
|
<div class="tip">同上期增长</div>
|
||||||
|
<el-progress
|
||||||
|
class="progress"
|
||||||
|
:text-inside="true"
|
||||||
|
:stroke-width="24"
|
||||||
|
:percentage="20"
|
||||||
|
status="success"
|
||||||
|
></el-progress>
|
||||||
|
<div class="title">月用户量</div>
|
||||||
|
<div class="tip">同上期增长</div>
|
||||||
|
<el-progress
|
||||||
|
class="progress"
|
||||||
|
:text-inside="true"
|
||||||
|
:stroke-width="24"
|
||||||
|
:percentage="50"
|
||||||
|
status="success"
|
||||||
|
></el-progress>
|
||||||
|
<div class="title">月收入</div>
|
||||||
|
<div class="tip">同上期减少</div>
|
||||||
|
<el-progress
|
||||||
|
class="progress"
|
||||||
|
:text-inside="true"
|
||||||
|
:stroke-width="24"
|
||||||
|
:percentage="28"
|
||||||
|
status="exception"
|
||||||
|
></el-progress>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {};
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.home-progress {
|
||||||
|
background: #ffffff;
|
||||||
|
height: 400px;
|
||||||
|
padding: 20px;
|
||||||
|
.title {
|
||||||
|
color: #666666;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 20px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.tip {
|
||||||
|
color: #888888;
|
||||||
|
font-size: 16px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.progress {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,56 @@
|
|||||||
|
<template>
|
||||||
|
<el-aside class="index-aside" width="200px">
|
||||||
|
<div class="index-aside-inner">
|
||||||
|
<el-menu default-active="1">
|
||||||
|
<el-menu-item @click="menuHandler('/')" index="1">
|
||||||
|
<!-- <i class="el-icon-s-home"></i> -->
|
||||||
|
首页
|
||||||
|
</el-menu-item>
|
||||||
|
<sub-menu
|
||||||
|
v-for="menu in menuList"
|
||||||
|
:key="menu.menuId"
|
||||||
|
:menu="menu"
|
||||||
|
:dynamicMenuRoutes="dynamicMenuRoutes"
|
||||||
|
></sub-menu>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
</el-aside>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import SubMenu from "@/components/index/IndexAsideSub";
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
menuList: [],
|
||||||
|
dynamicMenuRoutes: []
|
||||||
|
};
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
SubMenu
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// 获取动态菜单数据并且渲染
|
||||||
|
this.menuList = JSON.parse(sessionStorage.getItem("menuList") || "[]");
|
||||||
|
this.dynamicMenuRoutes = JSON.parse(
|
||||||
|
sessionStorage.getItem("dynamicMenuRoutes") || "[]"
|
||||||
|
);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
menuHandler(path) {
|
||||||
|
this.$router.push({ path: path });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.index-aside {
|
||||||
|
margin-top: 80px;
|
||||||
|
overflow: hidden;
|
||||||
|
.index-aside-inner {
|
||||||
|
width: 217px;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,240 @@
|
|||||||
|
<template>
|
||||||
|
<el-aside class="index-aside" height="100vh" width="260px">
|
||||||
|
<div class="index-aside-inner menulist" style="height:100%">
|
||||||
|
<div v-for="item in menuList" :key="item.roleName" v-if="role==item.roleName" class="menulist-item" style="height:100%;broder:0;background-color:#304156">
|
||||||
|
<div class="menulistImg" style="backgroundColor:#ff0000;padding:25px 0" v-if="false && menulistStyle == 'vertical'">
|
||||||
|
<el-image v-if="''" src="" fit="cover" />
|
||||||
|
</div>
|
||||||
|
<el-menu mode="vertical" :unique-opened="true" class="el-menu-demo" style="height:100%;" background-color="#304156" text-color="#ffffff" active-text-color="#FFFFFF" default-active="0">
|
||||||
|
<el-menu-item index="0" :style="menulistBorderBottom" @click="menuHandler('')"><i v-if="true" class="el-icon-s-home" />首页</el-menu-item>
|
||||||
|
<el-submenu :index="1+''" :style="menulistBorderBottom">
|
||||||
|
<template slot="title">
|
||||||
|
<i v-if="true" class="el-icon-user-solid" />
|
||||||
|
<span>个人中心</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item :index="1-1" @click="menuHandler('updatePassword')">修改密码</el-menu-item>
|
||||||
|
<el-menu-item :index="1-2" @click="menuHandler('center')">个人信息</el-menu-item>
|
||||||
|
</el-submenu>
|
||||||
|
<el-submenu :style="menulistBorderBottom" v-for=" (menu,index) in item.backMenu" :key="menu.menu" :index="index+2+''">
|
||||||
|
<template slot="title">
|
||||||
|
<i v-if="true" :class="icons[index]" />
|
||||||
|
<span>{{ menu.menu }}</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item v-for=" (child,sort) in menu.child" :key="sort" :index="(index+2)+'-'+sort" @click="menuHandler(child.tableName)">{{ child.menu }}</el-menu-item>
|
||||||
|
</el-submenu>
|
||||||
|
</el-menu>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-aside>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import menu from '@/utils/menu'
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
menuList: [],
|
||||||
|
dynamicMenuRoutes: [],
|
||||||
|
role: '',
|
||||||
|
icons: [
|
||||||
|
'el-icon-s-cooperation',
|
||||||
|
'el-icon-s-order',
|
||||||
|
'el-icon-s-platform',
|
||||||
|
'el-icon-s-fold',
|
||||||
|
'el-icon-s-unfold',
|
||||||
|
'el-icon-s-operation',
|
||||||
|
'el-icon-s-promotion',
|
||||||
|
'el-icon-s-release',
|
||||||
|
'el-icon-s-ticket',
|
||||||
|
'el-icon-s-management',
|
||||||
|
'el-icon-s-open',
|
||||||
|
'el-icon-s-shop',
|
||||||
|
'el-icon-s-marketing',
|
||||||
|
'el-icon-s-flag',
|
||||||
|
'el-icon-s-comment',
|
||||||
|
'el-icon-s-finance',
|
||||||
|
'el-icon-s-claim',
|
||||||
|
'el-icon-s-custom',
|
||||||
|
'el-icon-s-opportunity',
|
||||||
|
'el-icon-s-data',
|
||||||
|
'el-icon-s-check',
|
||||||
|
'el-icon-s-grid',
|
||||||
|
'el-icon-menu',
|
||||||
|
'el-icon-chat-dot-square',
|
||||||
|
'el-icon-message',
|
||||||
|
'el-icon-postcard',
|
||||||
|
'el-icon-position',
|
||||||
|
'el-icon-microphone',
|
||||||
|
'el-icon-close-notification',
|
||||||
|
'el-icon-bangzhu',
|
||||||
|
'el-icon-time',
|
||||||
|
'el-icon-odometer',
|
||||||
|
'el-icon-crop',
|
||||||
|
'el-icon-aim',
|
||||||
|
'el-icon-switch-button',
|
||||||
|
'el-icon-full-screen',
|
||||||
|
'el-icon-copy-document',
|
||||||
|
'el-icon-mic',
|
||||||
|
'el-icon-stopwatch',
|
||||||
|
],
|
||||||
|
menulistStyle: 'vertical',
|
||||||
|
menulistBorderBottom: {},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
const menus = menu.list()
|
||||||
|
this.menuList = menus
|
||||||
|
this.role = this.$storage.get('role')
|
||||||
|
},
|
||||||
|
created(){
|
||||||
|
setTimeout(()=>{
|
||||||
|
this.menulistStyleChange()
|
||||||
|
},10)
|
||||||
|
this.icons.sort(()=>{
|
||||||
|
return (0.5-Math.random())
|
||||||
|
})
|
||||||
|
this.lineBorder()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
lineBorder() {
|
||||||
|
let style = 'vertical'
|
||||||
|
let w = '0'
|
||||||
|
let s = 'solid'
|
||||||
|
let c = '${template.back.menulist.menulistLineColor}'
|
||||||
|
if(style == 'vertical') {
|
||||||
|
this.menulistBorderBottom = {
|
||||||
|
borderBottomWidth: w,
|
||||||
|
borderBottomStyle: s,
|
||||||
|
borderBottomColor: c
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.menulistBorderBottom = {
|
||||||
|
borderRightWidth: w,
|
||||||
|
borderRightStyle: s,
|
||||||
|
borderRightColor: c
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
menuHandler(name) {
|
||||||
|
let router = this.$router
|
||||||
|
name = '/'+name
|
||||||
|
router.push(name)
|
||||||
|
},
|
||||||
|
// 菜单
|
||||||
|
setMenulistHoverColor(){
|
||||||
|
let that = this
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.menulist .el-menu-item').forEach(el=>{
|
||||||
|
el.addEventListener("mouseenter", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "rgba(24, 144, 255, 1)"
|
||||||
|
})
|
||||||
|
el.addEventListener("mouseleave", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "#304156"
|
||||||
|
})
|
||||||
|
el.addEventListener("focus", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "rgba(24, 144, 255, 1)"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.menulist .el-submenu__title').forEach(el=>{
|
||||||
|
el.addEventListener("mouseenter", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "rgba(24, 144, 255, 1)"
|
||||||
|
})
|
||||||
|
el.addEventListener("mouseleave", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "#304156"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
setMenulistIconColor() {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.menulist .el-submenu__title .el-submenu__icon-arrow').forEach(el=>{
|
||||||
|
el.style.color = "rgba(153, 153, 153, 1)"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
menulistStyleChange() {
|
||||||
|
this.setMenulistIconColor()
|
||||||
|
this.setMenulistHoverColor()
|
||||||
|
this.setMenulistStyleHeightChange()
|
||||||
|
let str = "vertical"
|
||||||
|
if("horizontal" === str) {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.el-container .el-container').forEach(el=>{
|
||||||
|
el.style.display = "block"
|
||||||
|
el.style.paddingTop = "80px" // header 高度
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.el-aside').forEach(el=>{
|
||||||
|
el.style.width = "100%"
|
||||||
|
el.style.height = "60px"
|
||||||
|
el.style.paddingTop = '0'
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.index-aside .index-aside-inner').forEach(el=>{
|
||||||
|
el.style.paddingTop = '0'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if("vertical" === str) {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.index-aside .index-aside-inner').forEach(el=>{
|
||||||
|
el.style.paddingTop = "80px"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setMenulistStyleHeightChange() {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.menulist-item>.el-menu--horizontal>.el-menu-item').forEach(el=>{
|
||||||
|
el.style.height = "60px"
|
||||||
|
el.style.lineHeight = "60px"
|
||||||
|
})
|
||||||
|
document.querySelectorAll('.menulist-item>.el-menu--horizontal>.el-submenu>.el-submenu__title').forEach(el=>{
|
||||||
|
el.style.height = "60px"
|
||||||
|
el.style.lineHeight = "60px"
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.index-aside {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.menulistImg {
|
||||||
|
padding: 24px 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
.el-image {
|
||||||
|
margin: 0 auto;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
border-radius: 100%;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.index-aside-inner {
|
||||||
|
height: 100%;
|
||||||
|
margin-right: -17px;
|
||||||
|
margin-bottom: -17px;
|
||||||
|
overflow: scroll;
|
||||||
|
overflow-x: hidden !important;
|
||||||
|
padding-top: 60px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-menu {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,76 @@
|
|||||||
|
<template>
|
||||||
|
<el-aside class="index-aside" width="200px">
|
||||||
|
<div class="index-aside-inner">
|
||||||
|
<div v-for="item in menuList" v-bind:key="item.roleName">
|
||||||
|
<el-menu
|
||||||
|
background-color="#263238"
|
||||||
|
text-color="#fff"
|
||||||
|
active-text-color="#ffd04b"
|
||||||
|
default-active="0"
|
||||||
|
v-if="role==item.roleName"
|
||||||
|
>
|
||||||
|
<el-menu-item @click="menuHandler('home')" index="0">首页</el-menu-item>
|
||||||
|
<el-submenu
|
||||||
|
:index="1+''"
|
||||||
|
>
|
||||||
|
<template slot="title">
|
||||||
|
<span>个人中心</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item
|
||||||
|
@click="menuHandler('updatePassword')"
|
||||||
|
:index="1-1"
|
||||||
|
>修改密码</el-menu-item>
|
||||||
|
<el-menu-item
|
||||||
|
@click="menuHandler('center')"
|
||||||
|
:index="1-2"
|
||||||
|
>个人信息</el-menu-item>
|
||||||
|
</el-submenu>
|
||||||
|
<el-submenu
|
||||||
|
v-for=" (menu,index) in item.backMenu"
|
||||||
|
v-bind:key="menu.menu"
|
||||||
|
:index="index+2+''"
|
||||||
|
>
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{menu.menu}}</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item
|
||||||
|
v-for=" (child,sort) in menu.child"
|
||||||
|
v-bind:key="sort"
|
||||||
|
@click="menuHandler(child.tableName)"
|
||||||
|
:index="(index+2)+'-'+sort"
|
||||||
|
>{{child.menu}}</el-menu-item>
|
||||||
|
</el-submenu>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-aside>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import menu from "@/utils/menu";
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
menuList: [],
|
||||||
|
dynamicMenuRoutes: [],
|
||||||
|
role: ""
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
let menus = menu.list();
|
||||||
|
this.menuList = menus;
|
||||||
|
this.role = this.$storage.get("role");
|
||||||
|
console.log(this.menuList)
|
||||||
|
console.log(this.role)
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
menuHandler(name) {
|
||||||
|
this.$router.push({
|
||||||
|
name: name
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,51 @@
|
|||||||
|
<template>
|
||||||
|
<el-submenu v-if="menu.list && menu.list.length >= 1" :index="menu.menuId + ''">
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{ menu.name }}</span>
|
||||||
|
</template>
|
||||||
|
<sub-menu
|
||||||
|
v-for="item in menu.list"
|
||||||
|
:key="item.menuId"
|
||||||
|
:menu="item"
|
||||||
|
:dynamicMenuRoutes="dynamicMenuRoutes"
|
||||||
|
></sub-menu>
|
||||||
|
</el-submenu>
|
||||||
|
<el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)">
|
||||||
|
<span>{{ menu.name }}</span>
|
||||||
|
</el-menu-item>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import SubMenu from "./IndexAsideSub";
|
||||||
|
export default {
|
||||||
|
name: "sub-menu",
|
||||||
|
props: {
|
||||||
|
menu: {
|
||||||
|
type: Object,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
dynamicMenuRoutes: {
|
||||||
|
type: Array,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
SubMenu
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
|
||||||
|
gotoRouteHandle(menu) {
|
||||||
|
var route = this.dynamicMenuRoutes.filter(
|
||||||
|
item => item.meta.menuId === menu.menuId
|
||||||
|
);
|
||||||
|
if (route.length >= 1) {
|
||||||
|
if (route[0].component != null) {
|
||||||
|
this.$router.replace({ name: route[0].name });
|
||||||
|
} else {
|
||||||
|
this.$router.push({ name: "404" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
@ -0,0 +1,184 @@
|
|||||||
|
<template>
|
||||||
|
<!-- <el-header>
|
||||||
|
<el-menu background-color="#00c292" text-color="#FFFFFF" active-text-color="#FFFFFF" mode="horizontal">
|
||||||
|
<div class="fl title">{{this.$project.projectName}}</div>
|
||||||
|
<div class="fr logout" style="display:flex;">
|
||||||
|
<el-menu-item index="3">
|
||||||
|
<div>{{this.$storage.get('role')}} {{this.$storage.get('adminName')}}</div>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item @click="onLogout" index="2">
|
||||||
|
<div>退出登录</div>
|
||||||
|
</el-menu-item>
|
||||||
|
</div>
|
||||||
|
</el-menu>
|
||||||
|
</el-header> -->
|
||||||
|
<div class="navbar" :style="{backgroundColor:heads.headBgColor,height:heads.headHeight,boxShadow:heads.headBoxShadow,lineHeight:heads.headHeight}">
|
||||||
|
<div class="title-menu" :style="{justifyContent:heads.headTitleStyle=='1'?'flex-start':'center'}">
|
||||||
|
<el-image v-if="heads.headTitleImg" class="title-img" :style="{width:heads.headTitleImgWidth,height:heads.headTitleImgHeight,boxShadow:heads.headTitleImgBoxShadow,borderRadius:heads.headTitleImgBorderRadius}" :src="heads.headTitleImgUrl" fit="cover"></el-image>
|
||||||
|
<div class="title-name" :style="{color:heads.headFontColor,fontSize:heads.headFontSize}">{{this.$project.projectName}}</div>
|
||||||
|
</div>
|
||||||
|
<div class="right-menu">
|
||||||
|
<div class="user-info" :style="{color:heads.headUserInfoFontColor,fontSize:heads.headUserInfoFontSize}">{{this.$storage.get('role')}} {{this.$storage.get('adminName')}}</div>
|
||||||
|
<div class="logout" :style="{color:heads.headLogoutFontColor,fontSize:heads.headLogoutFontSize}" @click="onIndexTap">退出到前台</div>
|
||||||
|
<div class="logout" :style="{color:heads.headLogoutFontColor,fontSize:heads.headLogoutFontSize}" @click="onLogout">退出登录</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
ruleForm: {},
|
||||||
|
user: {},
|
||||||
|
heads: {"headLogoutFontHoverColor":"#fff","headFontSize":"20px","headUserInfoFontColor":"rgba(255, 255, 255, 1)","headBoxShadow":"0 10px 0px rgba(13, 142, 235, 1)","headTitleImgHeight":"44px","headLogoutFontHoverBgColor":"rgba(213, 17, 17, 1)","headFontColor":"rgba(255, 255, 255, 1)","headTitleImg":false,"headHeight":"80px","headTitleImgBorderRadius":"22px","headTitleImgUrl":"","headBgColor":"#2B3C4F","headTitleImgBoxShadow":"0 1px 6px #444","headLogoutFontColor":"rgba(255, 255, 255, 1)","headUserInfoFontSize":"16px","headTitleImgWidth":"44px","headTitleStyle":"1","headLogoutFontSize":"16px"},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
created() {
|
||||||
|
this.setHeaderStyle()
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
let sessionTable = this.$storage.get("sessionTable")
|
||||||
|
this.$http({
|
||||||
|
url: sessionTable + '/session',
|
||||||
|
method: "get"
|
||||||
|
}).then(({
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.user = data.data;
|
||||||
|
} else {
|
||||||
|
let message = this.$message
|
||||||
|
message.error(data.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onLogout() {
|
||||||
|
let storage = this.$storage
|
||||||
|
let router = this.$router
|
||||||
|
storage.remove("Token");
|
||||||
|
router.replace({
|
||||||
|
name: "login"
|
||||||
|
});
|
||||||
|
},
|
||||||
|
onIndexTap(){
|
||||||
|
window.location.href = `${this.$base.indexUrl}`
|
||||||
|
},
|
||||||
|
setHeaderStyle() {
|
||||||
|
this.$nextTick(()=>{
|
||||||
|
document.querySelectorAll('.navbar .right-menu .logout').forEach(el=>{
|
||||||
|
el.addEventListener("mouseenter", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = this.heads.headLogoutFontHoverBgColor
|
||||||
|
el.style.color = this.heads.headLogoutFontHoverColor
|
||||||
|
})
|
||||||
|
el.addEventListener("mouseleave", e => {
|
||||||
|
e.stopPropagation()
|
||||||
|
el.style.backgroundColor = "transparent"
|
||||||
|
el.style.color = this.heads.headLogoutFontColor
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.navbar {
|
||||||
|
height: 60px;
|
||||||
|
line-height: 60px;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0 34px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
background-color: #ff00ff;
|
||||||
|
position: relative;
|
||||||
|
z-index: 111;
|
||||||
|
|
||||||
|
.right-menu {
|
||||||
|
position: absolute;
|
||||||
|
right: 34px;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
z-index: 111;
|
||||||
|
|
||||||
|
.user-info {
|
||||||
|
font-size: 16px;
|
||||||
|
color: red;
|
||||||
|
padding: 0 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logout {
|
||||||
|
font-size: 16px;
|
||||||
|
color: red;
|
||||||
|
padding: 0 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-menu {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
|
||||||
|
.title-img {
|
||||||
|
width: 44px;
|
||||||
|
height: 44px;
|
||||||
|
border-radius: 22px;
|
||||||
|
box-shadow: 0 1px 6px #444;
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-name {
|
||||||
|
font-size: 24px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// .el-header .fr {
|
||||||
|
// float: right;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .el-header .fl {
|
||||||
|
// float: left;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .el-header {
|
||||||
|
// width: 100%;
|
||||||
|
// color: #333;
|
||||||
|
// text-align: center;
|
||||||
|
// line-height: 60px;
|
||||||
|
// padding: 0;
|
||||||
|
// z-index: 99;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .logo {
|
||||||
|
// width: 60px;
|
||||||
|
// height: 60px;
|
||||||
|
// margin-left: 70px;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .avator {
|
||||||
|
// width: 40px;
|
||||||
|
// height: 40px;
|
||||||
|
// background: #ffffff;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// .title {
|
||||||
|
// color: #ffffff;
|
||||||
|
// font-size: 20px;
|
||||||
|
// font-weight: bold;
|
||||||
|
// margin-left: 20px;
|
||||||
|
// }
|
||||||
|
</style>
|
@ -0,0 +1,89 @@
|
|||||||
|
<template>
|
||||||
|
<el-header>
|
||||||
|
<el-menu background-color="#00c292" text-color="#FFFFFF" active-text-color="#FFFFFF" mode="horizontal">
|
||||||
|
<div class="fl title">{{this.$project.projectName}}</div>
|
||||||
|
<div class="fr logout" style="display:flex;">
|
||||||
|
<el-menu-item index="3">
|
||||||
|
<div>{{this.$storage.get('role')}} {{this.$storage.get('adminName')}}</div>
|
||||||
|
</el-menu-item>
|
||||||
|
<el-menu-item @click="onLogout" index="2">
|
||||||
|
<div>退出登录</div>
|
||||||
|
</el-menu-item>
|
||||||
|
</div>
|
||||||
|
</el-menu>
|
||||||
|
</el-header>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dialogVisible: false,
|
||||||
|
ruleForm: {},
|
||||||
|
user: {}
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$http({
|
||||||
|
url: `${this.$storage.get("sessionTable")}/session`,
|
||||||
|
method: "get"
|
||||||
|
}).then(({
|
||||||
|
data
|
||||||
|
}) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.user = data.data;
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onLogout() {
|
||||||
|
this.$storage.remove("Token");
|
||||||
|
this.$router.replace({
|
||||||
|
name: "login"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.el-header .fr {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-header .fl {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-header {
|
||||||
|
width: 100%;
|
||||||
|
color: #333;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 60px;
|
||||||
|
padding: 0;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
margin-left: 70px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.avator {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: #ffffff;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,124 @@
|
|||||||
|
<template>
|
||||||
|
<el-main>
|
||||||
|
<bread-crumbs :title="title" class="bread-crumbs"></bread-crumbs>
|
||||||
|
<router-view class="router-view"></router-view>
|
||||||
|
</el-main>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import menu from "@/utils/menu";
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
menuList: [],
|
||||||
|
role: "",
|
||||||
|
currentIndex: -2,
|
||||||
|
itemMenu: [],
|
||||||
|
title: ''
|
||||||
|
};
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
let menus = menu.list();
|
||||||
|
this.menuList = menus;
|
||||||
|
this.role = this.$storage.get("role");
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
menuHandler(menu) {
|
||||||
|
this.$router.push({
|
||||||
|
name: menu.tableName
|
||||||
|
});
|
||||||
|
this.title = menu.menu;
|
||||||
|
},
|
||||||
|
titleChange(index, menus) {
|
||||||
|
this.currentIndex = index
|
||||||
|
this.itemMenu = menus;
|
||||||
|
console.log(menus);
|
||||||
|
},
|
||||||
|
homeChange(index) {
|
||||||
|
this.itemMenu = [];
|
||||||
|
this.title = ""
|
||||||
|
this.currentIndex = index
|
||||||
|
this.$router.push({
|
||||||
|
name: 'home'
|
||||||
|
});
|
||||||
|
},
|
||||||
|
centerChange(index) {
|
||||||
|
this.itemMenu = [{
|
||||||
|
"buttons": ["新增", "查看", "修改", "删除"],
|
||||||
|
"menu": "修改密码",
|
||||||
|
"tableName": "updatePassword"
|
||||||
|
}, {
|
||||||
|
"buttons": ["新增", "查看", "修改", "删除"],
|
||||||
|
"menu": "个人信息",
|
||||||
|
"tableName": "center"
|
||||||
|
}];
|
||||||
|
this.title = ""
|
||||||
|
this.currentIndex = index
|
||||||
|
this.$router.push({
|
||||||
|
name: 'home'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
background: #00c292;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-list {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
text-align: left;
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
.nav-title {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #333;
|
||||||
|
padding: 15px 25px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-title.active {
|
||||||
|
color: #555;
|
||||||
|
cursor: default;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-item {
|
||||||
|
margin-top: 20px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
padding: 15px 0;
|
||||||
|
|
||||||
|
.menu {
|
||||||
|
padding: 15px 25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-main {
|
||||||
|
background-color: #F6F8FA;
|
||||||
|
padding: 0 24px;
|
||||||
|
// padding-top: 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.router-view {
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
background: #FFFFFF;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bread-crumbs {
|
||||||
|
width: 100%;
|
||||||
|
// border-bottom: 1px solid #e9eef3;
|
||||||
|
// border-top: 1px solid #e9eef3;
|
||||||
|
margin-top: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,9 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import SvgIcon from '@/components/SvgIcon'// svg component
|
||||||
|
|
||||||
|
// register globally
|
||||||
|
Vue.component('svg-icon', SvgIcon)
|
||||||
|
|
||||||
|
const req = require.context('./svg/svg', false, /\.svg$/)
|
||||||
|
const requireAll = requireContext => requireContext.keys().map(requireContext)
|
||||||
|
requireAll(req)
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 629 B |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 990 B |
After Width: | Height: | Size: 210 B |
After Width: | Height: | Size: 765 B |
After Width: | Height: | Size: 356 B |
After Width: | Height: | Size: 300 B |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 921 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 379 B |
After Width: | Height: | Size: 705 B |
After Width: | Height: | Size: 457 B |
After Width: | Height: | Size: 449 B |
After Width: | Height: | Size: 727 B |
After Width: | Height: | Size: 627 B |
After Width: | Height: | Size: 384 B |
After Width: | Height: | Size: 569 B |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 821 B |
After Width: | Height: | Size: 607 B |
After Width: | Height: | Size: 421 B |
After Width: | Height: | Size: 741 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 608 B |
After Width: | Height: | Size: 561 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 408 B |
After Width: | Height: | Size: 642 B |
After Width: | Height: | Size: 360 B |
After Width: | Height: | Size: 525 B |
After Width: | Height: | Size: 595 B |
After Width: | Height: | Size: 595 B |
After Width: | Height: | Size: 2.3 KiB |