Your Name
2022-07-13 656696be4b70513e94f1341db8d1c2d3f43b3e6d
src/views/homeMenu/homeMenu.vue
@@ -9,7 +9,7 @@
            </div>
            <div class="userInfo">
               <div class="avator">
                  <img src="../../assets/menu/admin.png">
                        <img src="../../assets/menu/admin.png" />
                  <div>admin</div>
               </div>
               <span></span>
@@ -21,29 +21,67 @@
      <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" 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" @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 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" @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-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" @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-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>
@@ -57,10 +95,17 @@
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 {
@@ -72,15 +117,18 @@
   name: 'loginIndex',
   components: {},
   setup() {
        const { t } = useI18n();
      const route = useRoute();
      const router = useRouter();
      const userInfo = useUserInfo()
        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,
            isScan: false
      });
      // 获取布局配置信息
      const getThemeConfig = computed(() => {
@@ -88,13 +136,64 @@
      });
      // 下拉菜单点击时
      const onLoginOut = () => {
         console.log('退出登录')
            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();
         router.push('/home')
            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 = () => {
@@ -108,12 +207,13 @@
      });
      return {
         logoMini,
            onLoginOut,
         loginIconTwo,
         getThemeConfig,
         renderMenu,
         ...toRefs(state),
            ...toRefs(state)
      };
   },
    }
});
</script>
@@ -122,7 +222,7 @@
   width: 100%;
   height: 100%;
   position: relative;
   background: url("../../assets/menu/bg_home1.jpg") no-repeat center;
    background: url('../../assets/menu/bg_home1.jpg') no-repeat center;
   .topPanel{
      position: absolute;
      width: 100%;
@@ -132,8 +232,8 @@
      background: #fff;
      display: flex;
      justify-content: center;
      box-shadow: 0 8px 32px rgba(0,0,0,.1);
      animation: showDown .6s 1 ease forwards;
        box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
        animation: showDown 0.6s 1 ease forwards;
      @keyframes showDown {
         100%{
@@ -157,7 +257,7 @@
            line-height: 28px;
            &>div:last-of-type{
               color: #006DF5;
                    color: #006df5;
            }
            span{
@@ -201,7 +301,7 @@
               cursor: pointer;
               &:hover{
                  color: #006DF5;
                        color: #006df5;
               }
            }
         }
@@ -231,21 +331,21 @@
            height: 234px;
            padding: 32px;
            position: relative;
            background-image: linear-gradient(135deg,#00C0F5,#44b1ff);
                background-image: linear-gradient(135deg, #00c0f5, #44b1ff);
            overflow: hidden;
            cursor: pointer;
            transition: .3s;
                transition: 0.3s;
            border: none;
            &:hover{
               box-shadow: 0 8px 32px rgba(20,97,234,.4);
                    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-family: 'PingFang SC';
               font-weight: lighter;
               color: #fff;
               margin-bottom: 25px;
@@ -270,7 +370,6 @@
         /*   background-image: linear-gradient(135deg,#006DF5,#1450EA);*/
         /*}*/
      }
   }
}
</style>