Files
JY1.0/src/views/dashboard/index.vue
zhangdingyu d1d86a0319 dashboard
2019-09-19 10:21:47 +08:00

231 lines
6.3 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<el-card style="min-height:calc(100vh - 84px);background: rgb(236,243,250);background-size:100% 100%">
<div class="dashboard-container">
<div class="sudoku_row" >
<div class="dashboard-text" style="color:black">用户名{{ name }}</div>
<el-divider content-position="right" style="margin:24px">消息通知</el-divider>
<el-card v-for="(sudoku,index) in sudokus" :class="curSelect === sudoku.id?'opacity':''" :key="index+9999" shadow="hover" class="sudoku_item">
<div>
<el-badge :value="sudoku.value">
<svg-icon :icon-class="sudoku.icon" :style="{color:Color(index)}"/>
<router-link :to="sudoku.router">{{ sudoku.name }}</router-link>
</el-badge>
</div>
</el-card>
<div v-for="(value1,index1) in fathers" :key="index1" style="width:100%">
<div style="width: 100%;height: 40px;line-height: 40px;background: rgb(127,172,237);color:white">
<svg-icon :icon-class="value1.icon" style="color: white;margin: 5px 5px 0px 10px;border: 0 solid black;width:25px;height:25px"/>
{{ value1.title }}
</div>
<router-link v-for="(value2,index2) in sons" v-if="value2.pid === value1.id" :key="index2" :to="value2.path">
<el-card shadow="hover" class="sudoku_item1" style="height:150px;width:170px;margin: 5px;display: inline-block;background: rgba(255,255,255,0.4)">
<svg-icon :icon-class="value2.icon" class="bgc" style="color: rgb(127,172,237);display:block;margin: auto;border: 0 solid black;width:50px;height:50px"/><br>
<div style="color:rgb(127,172,237);text-align:center">{{ value2.title }}</div>
</el-card>
</router-link>
</div>
</div>
</div>
</el-card>
</template>
<script>
import { mapGetters } from 'vuex'
import request from '@/utils/request'
export default {
name: 'Dashboard',
data() {
return {
sudokus: [],
curSelect: null,
number: '',
timer: '',
fathers: [],
sons: []
}
},
computed: {
...mapGetters([
'name',
'token'
])
},
mounted() {
this.getFileList()
this.timer = setInterval(this.getFileList, 60 * 60 * 1000) // 60 分钟一刷新
this.initFirstModule()
this.initSecondModule()
},
beforeDestroy() {
clearInterval(this.timer)
},
methods: {
async initFirstModule() {
await request({
url: '',
method: 'post',
data: {
type: '3',
name: `select * from 基础表_角色模块信息 inner join 基础表_模块信息 on 基础表_角色模块信息.id = 基础表_模块信息.id where 角色编号= ${this.token} and [path] = '/'`
}
}).then(data => {
this.fathers = []
data.data.map(v => {
this.fathers.push({
id: v.id,
title: v.title,
icon: v.icon
})
})
})
},
Color(index) {
const colorAngle = Math.floor(Math.random() * 360 + index)
return 'hsla(' + colorAngle + ',70%,30%,1)'
},
async initSecondModule() {
await request({
url: '',
method: 'post',
data: {
type: '3',
name: `select * from 基础表_角色模块信息 inner join 基础表_模块信息 on 基础表_角色模块信息.id = 基础表_模块信息.id where 角色编号= ${this.token} and [path] <> '/'`
}
}).then(data => {
this.sons = []
data.data.map(v => {
this.sons.push({
id: v.id,
pid: v.pid,
path: v.path,
icon: v.icon,
title: v.title
})
})
})
},
async getFileList() {
await request({
url: '',
method: 'post',
data: {
type: '3',
name: `select * from 基础表_角色模块信息 inner join 基础表_模块信息 on 基础表_角色模块信息.id = 基础表_模块信息.id where 角色编号=${this.token} and 是否通知 = 1`
}
}).then(data => {
this.sudokus = []
for (let i = 0; i < data.data.length; i++) {
this.getMessageNum(data.data[i].消息通知来源, data.data[i].通知条件, data, i)
}
})
},
async getMessageNum(tableName, condition, rawData, i) {
await request({
url: '',
method: 'post',
data: {
type: '3',
name: `select count(*) from ${tableName} where ${condition}`
}
}).then(res => {
this.sudokus.push({
id: rawData.data[i].id,
name: rawData.data[i].title,
icon: rawData.data[i].icon,
router: rawData.data[i].path,
value: res.data[0].Column1
})
})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss">
.dashboard-container .el-divider__text {
color: gray;
font-size: 22px;
background-color: rgba(255,255,255,0.8);
}
</style>
<style rel="stylesheet/scss" lang="scss" scoped>
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.box-card {
width: 100%
}
.item {
margin-top: 10px;
margin-right: 40px;
}
.sudoku_row{
display: flex;
align-items: center;
width:100%;
flex-wrap: wrap;
}
.sudoku_item{
margin-top: 24ps;
margin-bottom: 20px;
margin-left: 20px;
border: 0 solid red;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width:15%;
height: 80px;
/*padding-top: 20px;*/
/*padding-bottom: 10px;*/
}
.sudoku_item:hover {
border: 2px solid white;
}
.sudoku_item img{
margin-bottom: 3px;
display: block;
}
.sudoku_item1{
margin-top: 24ps;
margin-bottom: 20px;
margin-left: 20px;
border: 0 solid red;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width:15%;
height: 80px;
padding-top: 20px;
margin: 20px;
/*padding-bottom: 10px;*/
}
.sudoku_item1:hover {
border: 2px solid white;
}
.sudoku_item1 img{
margin-bottom: 3px;
display: block;
}
.opacity{
opacity: 0.4;
background: #e5e5e5;
}
.dashboard {
&-container {
margin: 30px;
}
&-text {
font-size: 30px;
line-height: 46px;
}
}
</style>