index.vue 5.8 KB
<template>
        <el-menu default-active="$route.path"
                 :class="collapsed?'logo-collapse-width':'logo-width'"
                 background-color="#26384c"
                 text-color="#fff"
                 active-text-color="#ffd04b"
                 style="overflow-y:scroll"
                 @open="handleopen"
                 @close="handleclose"
                 @select="handleselect"
                 unique-opened
                 router
                 :collapse="collapsed">
            <!--                 class="el-menu-vertical-demo"-->

            <!--            <el-radio-group v-model="collapsed" style="margin-left: 200px;">-->
<!--                <el-radio-button :label="false">展开</el-radio-button>-->
<!--                <el-radio-button :label="true">收起</el-radio-button>-->
<!--            </el-radio-group>-->

            <div align="center" style="background-color: #2b2f3a;height: 67px">
                <img src="~@/assets/logo1.png">
                <h1 style="color:white;display: inline-block;font-weight: 600;font-size: 15px;line-height: 50px">航空物流公共信息服务平台</h1>
            </div>
            <template v-for="(item,index) in menu">
                <el-submenu :index="index+''" v-if="item.hasChild">
                    <template slot="title">
                        <i :class="item.iconCls"></i>
                        <span slot="title">{{item.name}}</span>
                    </template>
                    <el-menu-item v-for="child in item.children"
                                  :index="child.path"
                                  :key="child.permissionId"
                                  v-if="!child.hidden"
                                  class="el-submenu__title">
                        {{child.name}}
                    </el-menu-item>
                </el-submenu>
                <el-menu-item v-if="!item.hasChild" :index="item.path">
                    <i :class="item.iconCls"></i>
                    <span slot="title">{{item.name}}</span>
                </el-menu-item>
            </template>
        </el-menu>
</template>

<script>
    import userInfo from '@/api/base';
    import {userMenu} from '@/api/perm_api';
    import {mapActions, mapGetters} from 'vuex'
    export default {
        name: 'NavMenus',
        props:['collapsed'],
        data() {
            return {
                rotate:false,
                menu:[]
            }
        },
        methods: {
            initMenu:function(){
                if (this.getUserMenuStore.length > 0){
                    this.menu = this.getUserMenuStore;
                }else {
                    this.getUserMenu();
                }
            },
            ...mapActions( // 语法糖
                ['setUserMenuStore'] // 相当于this.$store.dispatch('modifyName'),提交这个方法
            ),
            start(){
                this.rotate=!this.rotate;
            },
            collapse:function(){
                this.collapsed=!this.collapsed;
            },
            onSubmit() {
                console.log('submit!');
            },
            handleopen() {
                console.log('handleopen');
            },
            handleclose() {
                console.log('handleclose');
            },
            handleselect: function (a, b) {
                this.reload()
            },
            showMenu(i,status){
                this.$refs.menuCollapsed.getElementsByClassName('submenu-hook-'+i)[0].style.display=status?'block':'none';
            },
            getUserMenu:function(){
                const _this=this;
                const para={
                    userId:userInfo.userId
                };
                userMenu(para).then((res) => {
                    console.log("ce"+res.data);
                    _this.menu = res.data.data;
                    this.setUserMenuStore(_this.menu);
                }).catch((error) => {
                    if(null!= error.response && error.response!==undefined){
                        let status= error.response.status;
                        let msg = error.response.statusText;
                        _this.$message({
                            //  饿了么的消息弹窗组件
                            message: msg,
                            type: "error"
                        });
                    }else {
                        _this.$message({
                            //  饿了么的消息弹窗组件
                            message: error,
                            type: "error"
                        });
                    }
                });
            },
            reload() {
                this.$nextTick(function () {
                    this.$router.push({
                        path: this.$router.path,
                        query:{
                            t: new Date().getTime()
                        }
                    })
                })
            },
        },
        computed: {
            ...mapGetters(['getUserMenuStore']) // 动态计算属性,相当于this.$store.getters.resturantName
        },
        mounted() {
            console.log(userInfo);
            this.initMenu();

        }
    }
</script>
<style scoped lang="scss">

</style>
<style scoped lang="scss">
    .go{
        transform:rotate(-180deg);
    }
    .el-menu-vertical-demo{
        position: relative;
    }
    .tools{
        position:absolute;

    }
    .logo-width{
        width:22%;
        margin: -20px;
    }
    .logo-collapse-width{
        width:90px;
        margin: -20px;

    }
    /*el-submenu__title:hover {*/
    /*    background-color: #4f6273;*/
    /*    border-left: 3px solid #be1fd9*/

    /*}*/
    /*.el-submenu:hover {*/
    /*    border-left: 25px solid #be1fd9;*/

    /*}*/
    .el-submenu__title:hover {
        border-left: 23px solid #be1fd9
    }
</style>