Admin
2022-08-13 4800905967d0fe8781304cae505d42f735851169
添加修改页面
已修改1个文件
已添加29个文件
716 ■■■■■ 文件已修改
src/assets/newMenu/card1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card10.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card11.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card5.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card6.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card7.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card8.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card9.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon10.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon11.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon4.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon5.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon6.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon7.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon8.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/icon9.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/leftbg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/leftbg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/pic_line1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/pic_line2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/topbg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/toplogo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/views/intellectInspect/inspectIndex/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/newHome/index.vue 715 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/newMenu/card1.png
src/assets/newMenu/card10.png
src/assets/newMenu/card11.png
src/assets/newMenu/card2.png
src/assets/newMenu/card3.png
src/assets/newMenu/card4.png
src/assets/newMenu/card5.png
src/assets/newMenu/card6.png
src/assets/newMenu/card7.png
src/assets/newMenu/card8.png
src/assets/newMenu/card9.png
src/assets/newMenu/icon1.png
src/assets/newMenu/icon10.png
src/assets/newMenu/icon11.png
src/assets/newMenu/icon2.png
src/assets/newMenu/icon3.png
src/assets/newMenu/icon4.png
src/assets/newMenu/icon5.png
src/assets/newMenu/icon6.png
src/assets/newMenu/icon7.png
src/assets/newMenu/icon8.png
src/assets/newMenu/icon9.png
src/assets/newMenu/leftbg.jpg
src/assets/newMenu/leftbg.png
src/assets/newMenu/pic_line1.png
src/assets/newMenu/pic_line2.png
src/assets/newMenu/topbg.jpg
src/assets/newMenu/toplogo.png
src/views/intellectInspect/inspectIndex/index.vue
@@ -134,7 +134,6 @@
        const toLine = (item) =>{
            let id = JSON.parse(JSON.stringify(item)).id
            console.log(id,'id')
            router.push({
                path: 'intelligentLine',
                query: {
src/views/newHome/index.vue
对比新文件
@@ -0,0 +1,715 @@
<template>
    <div class="login-container" :key="once">
        <div class="topPanel">
        </div>
        <div class="topPanelBg">
        </div>
        <div class="topPanelCont">
            <div class="topLogo">
                <img src="../../assets/newMenu/toplogo.png" />
            </div>
            <div class="userInfo">
                <div @click="onScreenfullClick" style="margin-right: 15px;cursor: pointer">
                    <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i>
                </div>
                <div class="loginOut" @click="onLoginOut">退出登录</div>
                <span></span>
                <div class="avator">
                    <img src="../../assets/menu/admin.png" />
                    <div>admin</div>
                </div>
            </div>
        </div>
        <div class="leftCont">
        </div>
        <div class="topCont">
            <div class="topInfo">
                <div class="topTit">
                    新疆国泰新华<br/>安全风险预警监测系统
                </div>
                <div class="topTime">
                    <div class="time">
                        {{time}}
                    </div>
                    <span></span>
                    <div class="today">
                        <div>{{date}}</div>
                        <div><span>{{weekDay}}</span><span>{{dayTime}}</span></div>
                    </div>
                </div>
            </div>
            <div class="line">
            </div>
        </div>
        <div class="menuGrid">
            <div class="gridCont">
                <div class="grid-content grid-content-1 cont-bg-1" v-throttle @click="toRiskPlatform">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon1.png"/>
                        <div>
                            <div class="itemTit1">安全风险综合预警<br/>预报平台</div>
                            <div class="enTit1">Security risk comprehensive early warning and forecast platform</div>
                        </div>
                    </div>
                    <img class="bgImg1" src="../../assets/newMenu/card1.png" />
                </div>
                <div class="grid-content cont-bg-1" v-throttle @click="render('2')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon2.png" />
                        <div>
                            <div class="itemTit">双重预防系统</div>
                            <div class="enTit">Double prevention</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card4.png" />
                </div>
                <div class="grid-content cont-bg-1" v-throttle @click="render('4')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon3.png" />
                        <div>
                            <div class="itemTit">智能巡检系统</div>
                            <div class="enTit">Intelligent inspection system</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card8.png" />
                </div>
                <div class="grid-content cont-bg-1" v-throttle @click="render('3')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon4.png" />
                        <div>
                            <div class="itemTit">特殊作业系统</div>
                            <div class="enTit">special work</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card7.png" />
                </div>
                <div class="grid-content cont-bg-1" v-throttle @click="render('7')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon5.png" />
                        <div>
                            <div class="itemTit">目标责任管理系统</div>
                            <div class="enTit">Target Responsibility Management</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card2.png" />
                </div>
                <div class="grid-content cont-bg-2" v-throttle @click="render('10')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon6.png" />
                        <div>
                            <div class="itemTit">安全知识图谱系统</div>
                            <div class="enTit">Security Knowledge Graph</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card3.png" />
                </div>
                <div class="grid-content cont-bg-2" v-throttle @click="render('9')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon7.png" />
                        <div>
                            <div class="itemTit">设备综合管控系统</div>
                            <div class="enTit">Comprehensive equipment control</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card9.png" />
                </div>
                <div class="grid-content cont-bg-2" v-throttle @click="render('6')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon8.png" />
                        <div>
                            <div class="itemTit">应急管理系统</div>
                            <div class="enTit">Emergency management</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card5.png" />
                </div>
                <div class="grid-content cont-bg-2" v-throttle @click="render('11')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon9.png" />
                        <div>
                            <div class="itemTit">危险化学品全生命周期安全<br />管理系统</div>
                            <div class="enTit">Full life cycle of hazardous chemicals</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card10.png" />
                </div>
                <div class="grid-content cont-bg-2" v-throttle @click="render('8')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon10.png" />
                        <div>
                            <div class="itemTit">事故管理系统</div>
                            <div class="enTit">Incident Management</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card6.png" />
                </div>
                <div class="grid-content cont-bg-2" @click="render('1')">
                    <div class="toplayer">
                        <img class="iconImg" src="../../assets/newMenu/icon11.png" />
                        <div>
                            <div class="itemTit">安全基础信息系统</div>
                            <div class="enTit">Basic data permissions</div>
                        </div>
                    </div>
                    <img class="bgImg" src="../../assets/newMenu/card11.png" />
                </div>
            </div>
        </div>
        <div class="bot-rights">
            <img src="../../assets/newMenu/pic_line1.png">
            <div>技术支持:苏州国科鸿宇智能科技有限公司</div>
            <img src="../../assets/newMenu/pic_line2.png">
        </div>
    </div>
</template>
<script lang="ts">
import { toRefs, reactive, computed, defineComponent, onMounted } from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
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 { 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';
import screenfull from 'screenfull';
import router from '../../router'
// 定义接口来定义对象的类型
interface LoginState {
    tabsActiveName: string;
    isScan: boolean;
    count: number;
    projectId: string;
    once: number;
    isScreenfull: boolean;
    time:string;
    date:string;
    weekDay:string;
    dayTime:string
}
export default defineComponent({
    name: 'loginIndex',
    components: {},
    setup() {
        const { t } = useI18n();
        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 timeForm = {
            hour12: false,
            year: 'numeric',
            month: '2-digit',
            day: '2-digit',
            hour: '2-digit',
            minute: '2-digit',
            second: '2-digit'
        }
        const state = reactive<LoginState>({
            tabsActiveName: 'account',
            isScan: false,
            count: 0,
            projectId: '1',
            once: 0,
            time: '',
            date: '',
            weekDay: '',
            dayTime: '',
            isScreenfull: false
        });
        // 获取布局配置信息
        const getThemeConfig = computed(() => {
            return themeConfig.value;
        });
        // 当前时间
        const getDateTime = ()=>{
            const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-')
            state.time = curTime.slice(10,16)
            state.date = curTime.slice(0,10)
            let week = ['日','一','二','三','四','五','六']
            let day = new Date().getDay()
            state.weekDay = '星期' + week[day]
            let curHour = Number(curTime.slice(10,13))
            if(curHour>=5&&curHour<=10){state.dayTime = '上午'}
            if(curHour>10&&curHour<=12){state.dayTime = '中午'}
            if(curHour>12&&curHour<=18){state.dayTime = '下午'}
            if(curHour>18&&curHour<=22){state.dayTime = '晚上'}
            if(curHour>22){state.dayTime = '午夜'}
        }
        // 下拉菜单点击时
        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 render = (value: string) => {
            state.projectId = value;
            renderMenu();
        };
        // 全屏点击时
        const onScreenfullClick = () => {
            if (!screenfull.isEnabled) {
                ElMessage.warning('暂不不支持全屏');
                return false;
            }
            screenfull.toggle();
            screenfull.on('change', () => {
                if (screenfull.isFullscreen) state.isScreenfull = true;
                else state.isScreenfull = false;
            });
        };
        // 去风险大屏
        const toRiskPlatform = ()=>{
            router.push({
                name: "bigDataScreen"
            });
        }
        const throttle = (renderMenu: any, delay: number) => {
            let flag = true;
            let count = 0;
            return function () {
                if (!flag) return;
                flag = false;
                if (count === 0) {
                    renderMenu.apply();
                    count++;
                    flag = true;
                } else {
                    setTimeout(() => {
                        renderMenu.apply();
                        flag = true;
                    }, delay);
                }
            };
        };
        //调用菜单方法
        const renderMenu = throttle(() => {
            renderFun();
        }, 2000);
        //调后台菜单接口
        const renderFun = async () => {
            Session.set('projectId', state.projectId);
            userInfos.value.projectId = state.projectId;
            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(() => {
            state.once += 1;
            NextLoading.done()
            setInterval(()=>{
                getDateTime()
            },1000)
            // loginBg();
            // loginApp()
        });
        return {
            render,
            logoMini,
            onLoginOut,
            getDateTime,
            toRiskPlatform,
            onScreenfullClick,
            loginIconTwo,
            getThemeConfig,
            ...toRefs(state)
        };
    }
});
</script>
<style scoped lang="scss">
.login-container {
    width: 100%;
    height: 100%;
    position: relative;
    background: #fff;
    .topPanel {
        width: 100%;
        height: 260px;
        background: url('../../assets/newMenu/topbg.jpg') no-repeat center;
        background-size: 100% 100%;
        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;
            }
        }
    }
    .topPanelBg{
        position: absolute;
        width: 100%;
        height: 60px;
        top: 0;
        left: 0;
        background: rgba(255,255,255,.8);
        z-index: 9;
    }
    .topPanelCont {
        position: absolute;
        width: 100%;
        height: 60px;
        padding: 0 50px;
        top: 0;
        left: 0;
        display: flex;
        align-items: center;
        justify-content: space-between;
        z-index: 999;
        .topLogo {
            display: flex;
            align-items: center;
            img{
                width: 146px;
                height: auto;
            }
        }
        .userInfo {
            display: flex;
            align-items: center;
            .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;
                &:hover {
                    color: #006df5;
                }
            }
        }
    }
    .leftCont{
        position: absolute;
        left: 0;
        top: 0;
        width: 240px;
        height: 100%;
        z-index: 99;
        background: url('../../assets/newMenu/leftbg.png') no-repeat center;
        background-size: 100% auto;
    }
    .topCont{
        position: absolute;
        width: 100%;
        height: 200px;
        left: 0;
        top: 60px;
        padding: 0 40px 0 120px;
        z-index: 99999;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: flex-start;
        .topInfo{
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: space-between;
            margin-bottom: 10px;
            .topTit{
                font-size: 44px;
                font-family: "PingFang SC";
                font-weight: bolder;
                text-align: left;
                color: #fff;
                text-shadow: 0 3px 8px rgba(0,0,0,.2);
            }
            .topTime{
                padding: 15px 10px;
                box-sizing: border-box;
                background: rgba(6,64,195,.8);
                border-radius: 8px;
                color: #fff;
                font-family: "PingFang SC";
                font-weight: 600;
                font-size: 16px;
                display: flex;
                align-items: center;
                .time{
                    font-size: 48px;
                }
                &>span{
                    width: 1px;
                    height: 40px;
                    margin: 0 15px;
                    background: #fff;
                }
                .today{
                    display: flex;
                    flex-direction: column;
                    align-items: flex-start;
                    span{
                        font-size: 14px;
                    }
                    span:first-of-type{
                        margin-right: 10px;
                    }
                }
            }
        }
        .line{
            width: 120px;
            height: 6px;
            background: #00EEFF;
        }
    }
    .menuGrid {
        width: calc(100vw - 240px);
        height: calc(100vh - 320px);
        padding: 20px 20px 0;
        position: absolute;
        top: 260px;
        left: 240px;
        .gridCont {
            width: 100%;
            height: 100%;
            display: grid;
            grid-gap: 20px;
            grid-template-columns: repeat(3, 1fr);
            grid-auto-flow: row;
            justify-content: center;
            .grid-content {
                border-radius: 16px;
                position: relative;
                overflow: hidden;
                cursor: pointer;
                transition: 0.3s;
                border: none;
                .toplayer{
                    width: 100%;
                    height: 100%;
                    position: absolute;
                    left: 0;
                    top: 0;
                    display: flex;
                    align-items: center;
                    padding: 0 20px;
                    z-index: 99;
                }
                &:hover {
                    background-image: radial-gradient(ellipse farthest-side at 50% 100%,#48A3FF 0%,#fff 120%);
                    box-shadow: 0 8px 32px rgba(20, 97, 234, 0.4);
                }
                .itemTit {
                    font-size: 32px;
                    line-height: 36px;
                    height: 40%;
                    font-family: 'PingFang SC';
                    font-weight: 600;
                    color: #072270;
                    margin-bottom: 2px;
                }
                .enTit{
                    font-size: 18px;
                    color: #072270;
                    font-family: 'PingFang SC';
                    font-weight: 600;
                }
                .enTit1{
                    font-size: 22px;
                    color: #072270;
                    font-family: 'PingFang SC';
                    font-weight: 600;
                }
                .itemTit1 {
                    font-size: 36px;
                    line-height: 48px;
                    height: 40%;
                    font-family: 'PingFang SC';
                    font-weight: 600;
                    letter-spacing: 1px;
                    color: #072270;
                    margin-bottom: 18px;
                }
                .iconImg {
                    width: 88px;
                    height: 88px;
                    margin-right: 20px;
                }
                .bgImg1 {
                    position: absolute;
                    width: 45%;
                    height: auto;
                    right: -20px;
                    top: 30%;
                }
                .bgImg {
                    position: absolute;
                    width: 30%;
                    height: auto;
                    right: -10px;
                    top: 15px;
                }
            }
            .cont-bg-1{
                background: #D9EAFF;
            }
            .cont-bg-2{
                background: #CDD6FF;
            }
            .grid-content-1{
                grid-row-start: 1;
                grid-row-end: 3;
                .toplayer{
                    width: 100%;
                    height: 100%;
                    position: absolute;
                    left: 0;
                    top: 0;
                    display: flex;
                    align-items: flex-start;
                    padding: 40px 20px;
                    z-index: 99;
                }
            }
            /*.grid-content-2{*/
            /*    background-image: linear-gradient(135deg,#0098F5,#1461EA);*/
            /*}*/
            /*.grid-content-3{*/
            /*    background-image: linear-gradient(135deg,#006DF5,#1450EA);*/
            /*}*/
        }
    }
    .bot-rights{
        width: calc(100vw - 240px);
        height: 60px;
        position: absolute;
        bottom: 0;
        left: 240px;
        z-index: 9999;
        display: flex;
        align-items: center;
        justify-content: center;
        img{
            width: 248px;
            height: 8px;
        }
        div{
            font-size: 18px;
            color: #333;
            margin: 0 20px;
        }
    }
}
</style>