vue+iview 静态路由 菜单栏

6 篇文章 0 订阅

一、menu模块

<Menu
                        ref="leftmenu" 
                        @on-select="selectItem"
                        @on-open-change="isCollapsed=false" 
                        :active-name="activeName"
                        theme="dark" 
                        width="auto" 
                        :accordion="true"
                        :open-names="opennames"
                        :class="menuitemClasses">  
                        <!-- 静态菜单 -->
                        <MenuItem name="0-1" to="/">
                            <Icon type="ios-briefcase-outline"></Icon>
                            <span>案例</span>
                        </MenuItem>
                        <Submenu name="1">
                            <template slot="title">
                                <Icon type="ios-eye-outline"></Icon>
                                <span>监控列表</span>
                            </template>
                            <MenuItem name="1-1" to="/monitor/elasticComputeCloudMonitor">EC2</MenuItem>
                            <MenuItem name="1-2" to="/monitor/elasticBlockStoreMonitor">EBS</MenuItem>
                            <MenuItem name="1-3" to="/monitor/billingMonitor">财务</MenuItem>
                            <MenuItem name="1-4" to="/monitor/logMonitor">日志</MenuItem>
                        </Submenu>
                        <Submenu name="2">
                            <template slot="title">
                                <Icon type="ios-construct-outline"></Icon>
                                <span>配置管理</span>
                            </template>
                            <MenuItem name="2-1" to="/configurationManagement/systemTask">定时任务配置</MenuItem>
                        </Submenu>
                        <MenuItem name="0-2" to="/alarmContact">
                            <Icon type="ios-people-outline"></Icon>
                            <span>报警联系人</span>
                        </MenuItem>
                        <MenuItem name="0-3" to="/accounts">
                            <Icon type="ios-contacts-outline"></Icon>
                            <span>账户</span>
                        </MenuItem>
                        <MenuItem name="0-4" to="/user" v-show="showUser">
                            <Icon type="ios-contacts-outline"></Icon>
                            <span>用户管理</span>
                        </MenuItem>
                    </Menu>

二、定义模块

data () {
	return {
	    opennames:[],
	    activeName:'',
	    isCollapsed: false,
	    showUser:false
};

三、解决刷新收缩导航栏以及刷新高亮

created(){
            if(this.$route.meta && this.$route.meta.order){
                // 当前高亮
                this.activeName = this.$route.meta.order;
                // 刷新后二级菜单收缩问题
                var submenuname=this.$route.meta.order.split('-')[0];
                if(submenuname!=="0"){
                    this.opennames.push(submenuname);
                }
            }
        },
        watch:{
            // 收缩
            isCollapsed(val){
                if(val){
                    this.opennames=[];
                    this.$nextTick(()=>{
                        this.$refs.leftmenu.updateOpened();
                    });
                }
            }
        },
        computed: {
            menuitemClasses: function () {
                return [
                    'menu-item',
                    this.isCollapsed ? 'collapsed-menu' : ''
                ]
            }
        },
        methods:{
            selectItem:function(name){
                this.isCollapsed=false;
                if(name.startsWith('0')){
                   this.opennames=[];
                    this.$nextTick(()=>{
                        this.$refs.leftmenu.updateOpened();
                    }); 
                }
            }
        }

四、路由模块

export const constantRouterMap=[
    {
      path: '/login',
      name: 'Login',
      component: Login
    },
    {
      path: '/register',
      name: 'Register',
      component: Register
    },
    {
      path: '/',
      component: Main,
      children:[
        {
          path: '',
          component: Case,
          type:'ios-briefcase-outline',
          meta: {
            title:'案例',
            order:"0-1",
            requireAuth: true
          }
        },
        {
          path: '/caseDetail',
          name: 'CaseDetail',
          component: CaseDetail,
          meta: {
            title:'案例',
            order:"0-1",
            requireAuth: true
          }
        }
      ]
    },
    {
      path:'/monitor',
      component: Main,
      type:"ios-eye-outline",                           
      meta: {
          title:'监控列表',
          order:"1",
          requireAuth: true
      },
      children:[
        {
          path: '/monitor/elasticComputeCloudMonitor',
          component: ElasticComputeCloudMonitor,
          meta: {
            title:'EC2',
            order:"1-1",
            requireAuth: true
          }
        },
        {
          path: '/monitor/elasticBlockStoreMonitor',
          component: ElasticBlockStoreMonitor,
          meta: {
            title:'EBS',
            order:"1-2",
            requireAuth: true
          }
        },
        {
          path: '/monitor/billingMonitor',
          component: BillingMonitor,
          meta: {
            title:'财务',
            order:"1-3",
            requireAuth: true
          }
        },
        {
          path: '/monitor/logMonitor',
          component: LogMonitor,
          meta: {
            title:'日志',
            order:"1-4",
            requireAuth: true
          }
        }
      ]  
    },
    {
      path:'/alarmContact',
      component: Main,
      children:[
        {
          path: '/alarmContact',
          component: AlarmContact,
          type:'ios-people-outline',
          meta: {
            title:'报警联系人',
            order:"0-2",
            requireAuth: true
          }
        }
      ]  
    },
    {
      path:'/accounts',
      component: Main,
      children:[
        { 
          path: '/accounts',
          component: Accounts,
          type:'ios-contacts-outline',
          meta: {
            title:'账户',
            order:"0-3",
            requireAuth: true
          }
        }
      ]  
    },
    {
      path:'/timerSwitchs',
      type:'ios-stopwatch-outline',
      component: Main,
      meta: {
        title:'定时开关机',
        order:"3",
        requireAuth: true
      },
      children:[
        {
          path: '/timerSwitchs/serverSearchs',
          component: ServerSearchs,
          meta: {
            title:'查询',
            order:"3-1",
            requireAuth: true
          }
        }
      ]
    },
    {
      path:'/auditTask',
      component: Main,
      children:[
        {
          path: '/auditTask',
          component: AuditTask,
          type:'ios-clipboard-outline',
          meta: {
            title:'审核任务',
            order:"0-5",
            requireAuth: true
          }
        }
      ]  
    },
    {
      path:'/configurationManagement',
      type:'ios-briefcase-outline',
      component: Main,
      meta: {
        title:'配置管理',
        order:"2",
        requireAuth: true
      },
      children:[
        {
          path: '/configurationManagement/systemTask',
          component: SystemTask,
          meta: {
            title:'定时任务配置',
            order:"2-1",
            requireAuth: true
          }
        }
      ]
    },
    {
      path:'/user',
      component: Main,
      children:[
        {
          path: '/user',
          component: Users,
          type:'ios-contacts-outline',
          meta: {
            title:'用户管理',
            order:"0-4",
            requireAuth: true
          }
        }
      ]  
    }
  ]
    


export default new Router({
  routes: constantRouterMap
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,在项目中引入iviewvue-resource: ``` import Vue from 'vue' import iView from 'iview' import 'iview/dist/styles/iview.css' import VueResource from 'vue-resource' Vue.use(iView) Vue.use(VueResource) ``` 2. 在vue文件中使用iview的Select组件实现省市选择: ``` <template> <div> <Select v-model="province" @on-change="getCityList"> <Option v-for="(item, index) in provinceList" :value="item.id" :key="index">{{ item.name }}</Option> </Select> <Select v-model="city"> <Option v-for="(item, index) in cityList" :value="item.id" :key="index">{{ item.name }}</Option> </Select> </div> </template> <script> export default { data () { return { province: '', city: '', provinceList: [], cityList: [] } }, mounted () { this.getProvinceList() }, methods: { // 获取省份列表 getProvinceList () { this.$http.get('/api/province').then(res => { this.provinceList = res.data }) }, // 获取城市列表 getCityList () { this.$http.get('/api/city', { params: { province: this.province } }).then(res => { this.cityList = res.data }) } } } </script> ``` 3. 在后台实现省市数据接口: 省份接口: ``` app.get('/api/province', function(req, res) { res.json([ {id: 1, name: '北京'}, {id: 2, name: '上海'}, {id: 3, name: '广东省'}, {id: 4, name: '湖南省'} ]) }) ``` 城市接口: ``` app.get('/api/city', function(req, res) { var provinceId = req.query.province var cityList = [] switch(provinceId) { case '1': cityList = [ {id: 101, name: '北京市'}, {id: 102, name: '海淀区'}, {id: 103, name: '朝阳区'}, {id: 104, name: '东城区'}, {id: 105, name: '西城区'} ] break case '2': cityList = [ {id: 201, name: '上海市'}, {id: 202, name: '浦东新区'}, {id: 203, name: '徐汇区'}, {id: 204, name: '黄浦区'}, {id: 205, name: '静安区'} ] break case '3': cityList = [ {id: 301, name: '广州市'}, {id: 302, name: '深圳市'}, {id: 303, name: '珠海市'}, {id: 304, name: '佛山市'}, {id: 305, name: '东莞市'} ] break case '4': cityList = [ {id: 401, name: '长沙市'}, {id: 402, name: '株洲市'}, {id: 403, name: '湘潭市'}, {id: 404, name: '衡阳市'}, {id: 405, name: '邵阳市'} ] break default: break } res.json(cityList) }) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值