From 656696be4b70513e94f1341db8d1c2d3f43b3e6d Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期三, 13 七月 2022 09:18:47 +0800 Subject: [PATCH] 登录跳转首页 --- src/views/homeMenu/homeMenu.vue | 573 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 336 insertions(+), 237 deletions(-) diff --git a/src/views/homeMenu/homeMenu.vue b/src/views/homeMenu/homeMenu.vue index c16e22d..0e7d3d1 100644 --- a/src/views/homeMenu/homeMenu.vue +++ b/src/views/homeMenu/homeMenu.vue @@ -1,53 +1,91 @@ <template> - <div class="login-container"> - <div class="topPanel"> - <div class="topPanelCont"> - <div class="topTit"> - <div>新疆国泰新华</div> - <span></span> - <div>安全风险预警监测系统</div> - </div> - <div class="userInfo"> - <div class="avator"> - <img src="../../assets/menu/admin.png"> - <div>admin</div> - </div> - <span></span> - <div class="loginOut" @click="onLoginOut">退出登录</div> - </div> - </div> - </div> + <div class="login-container"> + <div class="topPanel"> + <div class="topPanelCont"> + <div class="topTit"> + <div>新疆国泰新华</div> + <span></span> + <div>安全风险预警监测系统</div> + </div> + <div class="userInfo"> + <div class="avator"> + <img src="../../assets/menu/admin.png" /> + <div>admin</div> + </div> + <span></span> + <div class="loginOut" @click="onLoginOut">退出登录</div> + </div> + </div> + </div> - <div class="menuGrid"> - <div class="gridCont"> - <el-row :gutter="20"> - <el-col :span="6"><div class="grid-content" @click="renderMenu('2')"><div class="itemTit">双重预防系统</div><img class="iconImg" src="../../assets/menu/icon4.png"><img class="bgImg" src="../../assets/menu/card4.png"></div></el-col> - <el-col :span="6"><div class="grid-content" @click="renderMenu('3')"><div class="itemTit">特殊作业系统</div><img class="iconImg" src="../../assets/menu/icon7.png"><img class="bgImg" src="../../assets/menu/card7.png"></div></el-col> - <el-col :span="6"><div class="grid-content" @click="renderMenu('4')"><div class="itemTit">智能巡检系统</div><img class="iconImg" src="../../assets/menu/icon8.png"><img class="bgImg" src="../../assets/menu/card8.png"></div></el-col> - <el-col :span="6"> - <div class="grid-content" @click="renderMenu('5')"> - <div class="itemTit">安全风险综合 - <br>预警预报平台 - </div> - <img class="iconImg" src="../../assets/menu/icon1.png"> - <img class="bgImg" src="../../assets/menu/card1.png"> - </div> - </el-col> - </el-row> - <el-row :gutter="20"> - <el-col :span="6"><div class="grid-content grid-content-2" @click="renderMenu('6')"><div class="itemTit">应急管理系统</div><img class="iconImg" src="../../assets/menu/icon5.png"><img class="bgImg" src="../../assets/menu/card5.png"></div></el-col> - <el-col :span="6"><div class="grid-content grid-content-2" @click="renderMenu('7')"><div class="itemTit">目标责任管理系统</div><img class="iconImg" src="../../assets/menu/icon2.png"><img class="bgImg" src="../../assets/menu/card2.png"></div></el-col> - <el-col :span="6"><div class="grid-content grid-content-2" @click="renderMenu('8')"><div class="itemTit">事故管理系统</div><img class="iconImg" src="../../assets/menu/icon6.png"><img class="bgImg" src="../../assets/menu/card6.png"></div></el-col> - <el-col :span="6"><div class="grid-content grid-content-2" @click="renderMenu('9')"><div class="itemTit">设备综合管控系统</div><img class="iconImg" src="../../assets/menu/icon9.png"><img class="bgImg" src="../../assets/menu/card9.png"></div></el-col> - </el-row> - <el-row :gutter="20"> - <el-col :span="6"><div class="grid-content grid-content-3" @click="renderMenu('10')"><div class="itemTit">安全知识图谱系统</div><img class="iconImg" src="../../assets/menu/icon3.png"><img class="bgImg" src="../../assets/menu/card3.png"></div></el-col> - <el-col :span="9"><div class="grid-content grid-content-3" @click="renderMenu('11')"><div class="itemTit">危险化学品全生命周期安全<br>管理系统</div><img class="iconImg" src="../../assets/menu/icon10.png"><img class="bgImg" src="../../assets/menu/card10.png"></div></el-col> - <el-col :span="9"><div class="grid-content grid-content-3" @click="renderMenu('1')"><div class="itemTit">基础数据权限管理系统</div><img class="iconImg" src="../../assets/menu/icon11.png"><img class="bgImg" src="../../assets/menu/card11.png"></div></el-col> - </el-row> - </div> - </div> - </div> + <div class="menuGrid"> + <div class="gridCont"> + <el-row :gutter="20"> + <el-col :span="6" + ><div class="grid-content" v-throttle @click="renderMenu('2')"> + <div class="itemTit">双重预防系统</div> + <img class="iconImg" src="../../assets/menu/icon4.png" /><img class="bgImg" src="../../assets/menu/card4.png" /></div + ></el-col> + <el-col :span="6" + ><div class="grid-content" v-throttle @click="renderMenu('3')"> + <div class="itemTit">特殊作业系统</div> + <img class="iconImg" src="../../assets/menu/icon7.png" /><img class="bgImg" src="../../assets/menu/card7.png" /></div + ></el-col> + <el-col :span="6" + ><div class="grid-content" v-throttle @click="renderMenu('4')"> + <div class="itemTit">智能巡检系统</div> + <img class="iconImg" src="../../assets/menu/icon8.png" /><img class="bgImg" src="../../assets/menu/card8.png" /></div + ></el-col> + <el-col :span="6"> + <div class="grid-content" v-throttle @click="renderMenu('5')"> + <div class="itemTit">安全风险综合 <br />预警预报平台</div> + <img class="iconImg" src="../../assets/menu/icon1.png" /> + <img class="bgImg" src="../../assets/menu/card1.png" /> + </div> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="6" + ><div class="grid-content grid-content-2" v-throttle @click="renderMenu('6')"> + <div class="itemTit">应急管理系统</div> + <img class="iconImg" src="../../assets/menu/icon5.png" /><img class="bgImg" src="../../assets/menu/card5.png" /></div + ></el-col> + <el-col :span="6" + ><div class="grid-content grid-content-2" v-throttle @click="renderMenu('7')"> + <div class="itemTit">目标责任管理系统</div> + <img class="iconImg" src="../../assets/menu/icon2.png" /><img class="bgImg" src="../../assets/menu/card2.png" /></div + ></el-col> + <el-col :span="6" + ><div class="grid-content grid-content-2" v-throttle @click="renderMenu('8')"> + <div class="itemTit">事故管理系统</div> + <img class="iconImg" src="../../assets/menu/icon6.png" /><img class="bgImg" src="../../assets/menu/card6.png" /></div + ></el-col> + <el-col :span="6" + ><div class="grid-content grid-content-2" v-throttle @click="renderMenu('9')"> + <div class="itemTit">设备综合管控系统</div> + <img class="iconImg" src="../../assets/menu/icon9.png" /><img class="bgImg" src="../../assets/menu/card9.png" /></div + ></el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="6" + ><div class="grid-content grid-content-3" v-throttle @click="renderMenu('10')"> + <div class="itemTit">安全知识图谱系统</div> + <img class="iconImg" src="../../assets/menu/icon3.png" /><img class="bgImg" src="../../assets/menu/card3.png" /></div + ></el-col> + <el-col :span="9" + ><div class="grid-content grid-content-3" v-throttle @click="renderMenu('11')"> + <div class="itemTit">危险化学品全生命周期安全<br />管理系统</div> + <img class="iconImg" src="../../assets/menu/icon10.png" /><img class="bgImg" src="../../assets/menu/card10.png" /></div + ></el-col> + <el-col :span="9" + ><div class="grid-content grid-content-3" v-throttle @click="renderMenu('1')"> + <div class="itemTit">基础数据权限管理系统</div> + <img class="iconImg" src="../../assets/menu/icon11.png" /><img class="bgImg" src="../../assets/menu/card11.png" /></div + ></el-col> + </el-row> + </div> + </div> + </div> </template> <script lang="ts"> @@ -57,220 +95,281 @@ import logoMini from '/@/assets/logo-mini.svg'; import loginIconTwo from '/@/assets/login-icon-two.svg'; import { NextLoading } from '/@/utils/loading'; -import {Session} from "/@/utils/storage"; -import {useRoute, useRouter} from "vue-router"; -import {initBackEndControlRoutes} from "/@/router/backEnd"; -import {useUserInfo} from "/@/stores/userInfo"; +import { Session } from '/@/utils/storage'; +import { useRoute, useRouter } from 'vue-router'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { useRoutesList } from '/@/stores/routesList'; +import pinia from '/@/stores'; +import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; +import { ElMessage } from 'element-plus'; +import { ElMessageBox } from 'element-plus/es'; +import { useLoginApi } from '/@/api/login'; +import { useI18n } from 'vue-i18n'; // 定义接口来定义对象的类型 interface LoginState { - tabsActiveName: string; - isScan: boolean; + tabsActiveName: string; + isScan: boolean; } export default defineComponent({ - name: 'loginIndex', - components: {}, - setup() { - const route = useRoute(); - const router = useRouter(); - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const storesThemeConfig = useThemeConfig(); - const { themeConfig } = storeToRefs(storesThemeConfig); - const state = reactive<LoginState>({ - tabsActiveName: 'account', - isScan: false, - }); - // 获取布局配置信息 - const getThemeConfig = computed(() => { - return themeConfig.value; - }); - // 下拉菜单点击时 - const onLoginOut = () => { - console.log('退出登录') - }; - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - router.push('/home') - }; - // //点击进入特殊作业 - // const toSpecialWorkSys = () => { - // router.push('/layoutPage'); - // }; - // 页面加载时 - onMounted(() => { - NextLoading.done(); - // loginBg(); - // loginApp() - }); - return { - logoMini, - loginIconTwo, - getThemeConfig, - renderMenu, - ...toRefs(state), - }; - }, + name: 'loginIndex', + components: {}, + setup() { + const { t } = useI18n(); + const route = useRoute(); + const router = useRouter(); + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const routeToStore = useRoutesList(pinia); + const { routesList } = storeToRefs(routeToStore); + const storesThemeConfig = useThemeConfig(); + const { themeConfig } = storeToRefs(storesThemeConfig); + const state = reactive<LoginState>({ + tabsActiveName: 'account', + isScan: false + }); + // 获取布局配置信息 + const getThemeConfig = computed(() => { + return themeConfig.value; + }); + // 下拉菜单点击时 + const onLoginOut = () => { + ElMessageBox({ + closeOnClickModal: false, + closeOnPressEscape: false, + title: t('message.user.logOutTitle'), + message: t('message.user.logOutMessage'), + showCancelButton: true, + confirmButtonText: t('message.user.logOutConfirm'), + cancelButtonText: t('message.user.logOutCancel'), + buttonSize: 'default', + beforeClose: (action, instance, done) => { + if (action === 'confirm') { + instance.confirmButtonLoading = true; + instance.confirmButtonText = t('message.user.logOutExit'); + setTimeout(() => { + done(); + setTimeout(() => { + instance.confirmButtonLoading = false; + }, 300); + }, 700); + } else { + done(); + } + } + }) + .then(async () => { + let res = await useLoginApi().signOut(); + if (res.data.code === '200') { + Session.clear(); // 清除缓存/token等 + // 使用 reload 时,不需要调用 resetRoute() 重置路由 + window.location.reload(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes().then(() => { + let linkToMenu = [...routesList.value]; + if (linkToMenu && linkToMenu.length > 1) { + router.push(linkToFirstMenu(JSON.parse(JSON.stringify(linkToMenu))[1])); + } else { + ElMessage({ type: 'warning', message: '你没有该项目的权限' }); + } + }); + }; + const linkToFirstMenu: any = (value: any) => { + let returnMenu = value; + if (returnMenu.children?.length > 0) { + return linkToFirstMenu(returnMenu.children[0]); + } else { + return returnMenu.path; + } + }; + // //点击进入特殊作业 + // const toSpecialWorkSys = () => { + // router.push('/layoutPage'); + // }; + // 页面加载时 + onMounted(() => { + NextLoading.done(); + // loginBg(); + // loginApp() + }); + return { + logoMini, + onLoginOut, + loginIconTwo, + getThemeConfig, + renderMenu, + ...toRefs(state) + }; + } }); </script> <style scoped lang="scss"> .login-container { - width: 100%; - height: 100%; - position: relative; - background: url("../../assets/menu/bg_home1.jpg") no-repeat center; - .topPanel{ - position: absolute; - width: 100%; - top: -100px; - left: 0; - height:100px; - background: #fff; - display: flex; - justify-content: center; - box-shadow: 0 8px 32px rgba(0,0,0,.1); - animation: showDown .6s 1 ease forwards; + width: 100%; + height: 100%; + position: relative; + background: url('../../assets/menu/bg_home1.jpg') no-repeat center; + .topPanel { + position: absolute; + width: 100%; + top: -100px; + left: 0; + height: 100px; + background: #fff; + display: flex; + justify-content: center; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + animation: showDown 0.6s 1 ease forwards; - @keyframes showDown { - 100%{ - position: absolute; - top: 0; - } - } - .topPanelCont{ - width: 1200px; - height: 100%; - display: flex; - align-items: center; - justify-content: space-between; + @keyframes showDown { + 100% { + position: absolute; + top: 0; + } + } + .topPanelCont { + width: 1200px; + height: 100%; + display: flex; + align-items: center; + justify-content: space-between; - .topTit{ - font-size: 24px; - font-weight: bold; - display: flex; - align-items: center; - color: #333; - line-height: 28px; + .topTit { + font-size: 24px; + font-weight: bold; + display: flex; + align-items: center; + color: #333; + line-height: 28px; - &>div:last-of-type{ - color: #006DF5; - } + & > div:last-of-type { + color: #006df5; + } - span{ - width: 1px; - height: 28px; - background: #999; - margin: 0 15px; - } - } + span { + width: 1px; + height: 28px; + background: #999; + margin: 0 15px; + } + } - .userInfo{ - display: flex; - align-items: center; + .userInfo { + display: flex; + align-items: center; - .avator{ - display: flex; - justify-content: right; + .avator { + display: flex; + justify-content: right; - img{ - width: 20px; - height: 20px; - border-radius: 10px; - } - div{ - font-size: 15px; - color: #333333; - line-height: 20px; - margin-left: 6px; - } - } - span{ - width: 1px; - height: 20px; - background: #999; - margin: 0 15px; - } - .loginOut{ - font-size: 15px; - color: #333; - line-height: 20px; - cursor: pointer; + img { + width: 20px; + height: 20px; + border-radius: 10px; + } + div { + font-size: 15px; + color: #333333; + line-height: 20px; + margin-left: 6px; + } + } + span { + width: 1px; + height: 20px; + background: #999; + margin: 0 15px; + } + .loginOut { + font-size: 15px; + color: #333; + line-height: 20px; + cursor: pointer; - &:hover{ - color: #006DF5; - } - } - } - } - } + &:hover { + color: #006df5; + } + } + } + } + } - .menuGrid{ - width: 100%; - position: absolute; - top: 150px; - display: flex; - justify-content: center; - .gridCont{ - width: 1200px; - .el-row { - margin-bottom: 20px; - } - .el-row:last-child { - margin-bottom: 0; - } - .el-col { - border-radius: 8px; - } + .menuGrid { + width: 100%; + position: absolute; + top: 150px; + display: flex; + justify-content: center; + .gridCont { + width: 1200px; + .el-row { + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-col { + border-radius: 8px; + } - .grid-content { - border-radius: 10px; - height: 234px; - padding: 32px; - position: relative; - background-image: linear-gradient(135deg,#00C0F5,#44b1ff); - overflow: hidden; - cursor: pointer; - transition: .3s; - border: none; + .grid-content { + border-radius: 10px; + height: 234px; + padding: 32px; + position: relative; + background-image: linear-gradient(135deg, #00c0f5, #44b1ff); + overflow: hidden; + cursor: pointer; + transition: 0.3s; + border: none; - &:hover{ - box-shadow: 0 8px 32px rgba(20,97,234,.4); - } + &:hover { + box-shadow: 0 8px 32px rgba(20, 97, 234, 0.4); + } - .itemTit{ - font-size: 24px; - line-height: 36px; - height: 40%; - font-family: "PingFang SC"; - font-weight: lighter; - color: #fff; - margin-bottom: 25px; - } - .iconImg{ - width: 80px; - height: 80px; - } + .itemTit { + font-size: 24px; + line-height: 36px; + height: 40%; + font-family: 'PingFang SC'; + font-weight: lighter; + color: #fff; + margin-bottom: 25px; + } + .iconImg { + width: 80px; + height: 80px; + } - .bgImg{ - position: absolute; - right: 0; - bottom: 0; - } - } + .bgImg { + position: absolute; + right: 0; + bottom: 0; + } + } - /*.grid-content-2{*/ - /* background-image: linear-gradient(135deg,#0098F5,#1461EA);*/ - /*}*/ + /*.grid-content-2{*/ + /* background-image: linear-gradient(135deg,#0098F5,#1461EA);*/ + /*}*/ - /*.grid-content-3{*/ - /* background-image: linear-gradient(135deg,#006DF5,#1450EA);*/ - /*}*/ - } - - } + /*.grid-content-3{*/ + /* background-image: linear-gradient(135deg,#006DF5,#1450EA);*/ + /*}*/ + } + } } </style> -- Gitblit v1.9.2