<script lang="ts" setup name="PanelGroup"> import { computed } from 'vue' import Card from './Card.vue' import useUserStore from '@/store/modules/user' import useRouteStore from '@/store/modules/route' const $router = useRouter() const userStore = useUserStore() const routeStore = useRouteStore() const dataGroup = ref([ { title: '考核规则列表', context: '', icon: 'app-config', color: '#40c9c6', path: '/grade/gradelist', permission: '/examine', }, { title: '部门考核结果', context: '', icon: 'chart-bar', color: '#36a3f7', path: '/deptresult/deptlist', permission: '/efficiency/deptresult', }, { title: '预警统计分析', context: '', icon: 'statics', color: '#ffb980', path: '/analysiss/analysislist', permission: '/proxy/analysiss', }, { title: '登录日志', context: '', icon: 'log', color: '#9cbbff', path: '/loginDiary/list', permission: '/sys/loginLog', }, ]) const goPage = (path: string) => { $router.push(path) } let dataFilterLIst = [] const dataFilter = () => { const btns = userStore.menus const arr = [] routeStore.menus.forEach((element: any) => { arr.push(element) }) // 获取用户全部权限url const permissions = arr.map((v) => { return v.url }) // 过滤dataGroup const datas = dataGroup.value.filter((item) => { if (permissions.includes(item.permission)) { return true } else { return false } }) dataFilterLIst = datas } dataFilter() </script> <template> <el-row :gutter="10" class="panel-group"> <el-col v-for="card in []" :key="card.title" :xs="12" :sm="12" :lg="6" class="card-panel-col"> <card :title="card.title" :context="card.context" :icon="card.icon" :color="card.color" @click.native="goPage(card.path)" /> </el-col> </el-row> </template> <style lang="scss" scoped> .panel-group { padding-right: 20px; .card-panel-col { margin-bottom: 22px; } .card-panel { height: 100px; cursor: pointer; font-size: 12px; position: relative; overflow: hidden; color: #666; background: #fff; box-shadow: 4px 4px 40px rgb(0 0 0 / 5%); border-color: rgb(0 0 0 / 5%); &:hover { .card-panel-icon-wrapper { color: #fff; } .icon-people { background: #40c9c6; } .icon-message { background: #36a3f7; } .icon-money { background: #f4516c; } .icon-shopping { background: #34bfa3; } } .icon-people { color: #40c9c6; } .icon-message { color: #36a3f7; } .icon-money { color: #f4516c; } .icon-shopping { color: #34bfa3; } .card-panel-icon-wrapper { float: left; margin: 14px 0 0 14px; padding: 16px; transition: all 0.38s ease-out; border-radius: 6px; } .card-panel-icon { float: left; font-size: 48px; } .card-panel-description { float: right; font-weight: bold; margin: 26px; margin-left: 0; .card-panel-text { line-height: 18px; color: rgb(0 0 0 / 45%); font-size: 16px; margin-bottom: 12px; } .card-panel-num { font-size: 20px; } } } } @media (max-width: 550px) { .card-panel-description { display: none; } .card-panel-icon-wrapper { float: none !important; width: 100%; height: 100%; margin: 0 !important; .svg-icon { display: block; margin: 14px auto !important; float: none !important; } } } </style>