文档章节

iview Admin util.js 解析

MadDragon
 MadDragon
发布于 2017/11/05 00:48
字数 702
阅读 91
收藏 0
import axios from 'axios';
import env from '../config/env';
/**
 * 工具类提供一些便捷地工具服务
 * 1、修改网站titie
 */
let util = {

};
/** 修改网站title */
util.title = function (title) {
    title = title || 'iView admin';
    window.document.title = title;
};

const ajaxUrl = env === 'development'
    ? 'http://127.0.0.1:8888'
    : env === 'production'
    ? 'https://www.url.com'
    : 'https://debug.url.com';

util.ajax = axios.create({
    baseURL: ajaxUrl,
    timeout: 30000
});

util.inOf = function (arr, targetArr) {
    let res = true;
    arr.map(item => {
        if (targetArr.indexOf(item) < 0) {
            res = false;
        }
    });
    return res;
};

/**
 * 判断 ele 是否存在 与 targetArr
 * 返回 存在 还是 不存在
 */
util.oneOf = function (ele, targetArr) {
    if (targetArr.indexOf(ele) >= 0) {
        return true;
    } else {
        return false;
    }
};

util.showThisRoute = function (itAccess, currentAccess) {
    if (typeof itAccess === 'object' && itAccess.isArray()) {
        return util.oneOf(currentAccess, itAccess);
    } else {
        return itAccess === currentAccess;
    }
};

/**
 * 2017年11月4日15:38:46
 * Mad Dragon
 * routers: 路由集合
 * name:路由名称
 *
 * 作用:
 *  在路由列表中匹配 to.name 的路由,并且返回匹配到的路由对象
 */
util.getRouterObjByName = function (routers, name) {
    let routerObj = {};// 定义初始化对象
    routers.forEach(item => { // 遍历 routers 路由集合
        if (item.name === 'otherRouter') { // 如果 是 otherRouter 路由集合 otherRouter:作为Main组件的子页面展示但是不在左侧菜单显示的路由写在otherRouter里
            item.children.forEach((child, i) => { // 遍历子路由
                if (child.name === name) { // if 子路由 和 路 由名 相同
                    routerObj = item.children[i]; // 将对对应子路由信息,写入到 routerObj 对象中
                }
            });
        } else {
            if (item.children.length === 1) { // if item.children 的 长途 全等于 1
                if (item.children[0].name === name) {
                    routerObj = item.children[0];
                }
            } else {
                item.children.forEach((child, i) => {
                    if (child.name === name) {
                        routerObj = item.children[i];
                    }
                });
            }
        }
    });
    return routerObj;
};

util.handleTitle = function (vm, item) {
    if (typeof item.title === 'object') {
        return vm.$t(item.title.i18n);
    } else {
        return item.title;
    }
};

util.setCurrentPath = function (vm, name) {
    let title = '';
    let isOtherRouter = false;
    vm.$store.state.routers.forEach(item => {
        if (item.children.length === 1) {
            if (item.children[0].name === name) {
                title = util.handleTitle(vm, item);
                if (item.name === 'otherRouter') {
                    isOtherRouter = true;
                }
            }
        } else {
            item.children.forEach(child => {
                if (child.name === name) {
                    title = util.handleTitle(vm, child);
                    if (item.name === 'otherRouter') {
                        isOtherRouter = true;
                    }
                }
            });
        }
    });
    let currentPathArr = [];
    if (name === 'home_index') {
        currentPathArr = [
            {
                title: util.handleTitle(vm, util.getRouterObjByName(vm.$store.state.routers, 'home_index')),
                path: '',
                name: 'home_index'
            }
        ];
    } else if ((name.indexOf('_index') >= 0 || isOtherRouter) && name !== 'home_index') {
        currentPathArr = [
            {
                title: util.handleTitle(vm, util.getRouterObjByName(vm.$store.state.routers, 'home_index')),
                path: '/home',
                name: 'home_index'
            },
            {
                title: title,
                path: '',
                name: name
            }
        ];
    } else {
        let currentPathObj = vm.$store.state.routers.filter(item => {
            if (item.children.length <= 1) {
                return item.children[0].name === name;
            } else {
                let i = 0;
                let childArr = item.children;
                let len = childArr.length;
                while (i < len) {
                    if (childArr[i].name === name) {
                        return true;
                    }
                    i++;
                }
                return false;
            }
        })[0];
        if (currentPathObj.children.length <= 1 && currentPathObj.name === 'home') {
            currentPathArr = [
                {
                    title: '首页',
                    path: '',
                    name: 'home_index'
                }
            ];
        } else if (currentPathObj.children.length <= 1 && currentPathObj.name !== 'home') {
            currentPathArr = [
                {
                    title: '首页',
                    path: '/home',
                    name: 'home_index'
                },
                {
                    title: currentPathObj.title,
                    path: '',
                    name: name
                }
            ];
        } else {
            let childObj = currentPathObj.children.filter((child) => {
                return child.name === name;
            })[0];
            currentPathArr = [
                {
                    title: '首页',
                    path: '/home',
                    name: 'home_index'
                },
                {
                    title: currentPathObj.title,
                    path: '',
                    name: currentPathObj.name
                },
                {
                    title: childObj.title,
                    path: currentPathObj.path + '/' + childObj.path,
                    name: name
                }
            ];
        }
    }
    vm.$store.commit('setCurrentPath', currentPathArr);

    return currentPathArr;
};

util.openNewPage = function (vm, name, argu, query) {
    let pageOpenedList = vm.$store.state.pageOpenedList;
    let openedPageLen = pageOpenedList.length;
    let i = 0;
    let tagHasOpened = false;
    while (i < openedPageLen) {
        if (name === pageOpenedList[i].name) {  // 页面已经打开
            vm.$store.commit('pageOpenedList', {
                index: i,
                argu: argu,
                query: query
            });
            tagHasOpened = true;
            break;
        }
        i++;
    }
    if (!tagHasOpened) {
        let tag = vm.$store.state.tagsList.filter((item) => {
            if (item.children) {
                return name === item.children[0].name;
            } else {
                return name === item.name;
            }
        });
        tag = tag[0];
        tag = tag.children ? tag.children[0] : tag;
        if (argu) {
            tag.argu = argu;
        }
        if (query) {
            tag.query = query;
        }
        vm.$store.commit('increateTag', tag);
    }
    vm.$store.commit('setCurrentPageName', name);
};

/**
 * 去默认页面
 *  如果在地址栏输入的是一级菜单则默认打开其第一个二级菜单的页面
 */
util.toDefaultPage = function (routers, name, route, next) {
    let len = routers.length;
    let i = 0;
    let notHandle = true;
    while (i < len) {
        if (routers[i].name === name && routers[i].redirect === undefined) {
            route.replace({
                name: routers[i].children[0].name
            });
            notHandle = false;
            next();
            break;
        }
        i++;
    }
    if (notHandle) {
        next();
    }
};

export default util;

© 著作权归作者所有

共有 人打赏支持
下一篇: fsevents
MadDragon
粉丝 5
博文 40
码字总数 21551
作品 0
杭州
程序员
私信 提问
iview admin 使用爬坑

前段时间公司需要开发一个后台管理系统,时间比较急迫,一两天时间。想一想自己一点一点的搭建起来可能性不太大,就想着有没有现成的可以改一改,就找到了基于Vue.js和iview组件库的现成后台...

ezrealining
2018/08/14
0
0
iView 发布 3.0 版本,以及开发者社区等 5 款新产品

iView 发布 3.0 版本,以及开发者社区等 5 款新产品 7 月 28 日,我们成功地召开了 iView 3.0 暨神秘新品发布会,这可能是前端开源圈第一次举行线下+线上的发布会。现场座无虚席,线上直播也...

aresn
2018/07/30
6K
27
基于 Webpack2、Vue2、iView2 的可视化脚手架 iView Cli 发布 2.0 版本

谷歌今天发布了一系列“性感”的软件,我们也发布了一款大家期待已久的开发者工具,同样很性感 :) iView 2.0 已经发布有两个月了,在 2.0 发布后,npm 下载量、issues 数量都提升了很多(可...

Aresn
2018/10/29
0
0
iView 发布 3.0 版本,以及开发者社区等 5 款新产品

7 月 28 日,我们成功地召开了 iView 3.0 暨神秘新品发布会,这可能是前端开源圈第一次举行线下+线上的发布会。现场座无虚席,线上直播也有超过 2 万人观看。同时这一天也是 iView 两周岁生日...

Aresn
2018/10/29
0
0
【双12首发】终于等来了!PhalApi-iView-admin 开源后台框架

PhalApi-iView-admin 开源后台框架 码云地址:https://gitee.com/dogstar/phalapi-iview-admin Github地址:https://github.com/phalapi/phalapi-iview-admin 主要采用的技术: PhalApi 开源......

暗夜在火星
2018/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

一文说尽MySQL事务及ACID特性的实现原理

本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的 ACID 特性,并分析其实现原理。MySQL 博大精深,文章疏漏之处在所难免,欢迎批评指正。 MySQL 事务基础概念 事务(Transaction)是访...

架构师springboot
32分钟前
7
0
Vue +Element UI后台管理模板搭建示例

一、蓝色主题 Element ui 后台管理 Demo https://github.com/taylorchen709/vueAdmin https://taylorchen709.github.io/vueAdmin/#/user Element ui 文档 http://element.eleme.io/#/zh-CN/......

tianma3798
今天
2
0
小白学习大数据的最详细的学习路线图就在这里

现如今大数据已经上升到国家战略层面,企业对于大数据的关注和重视程度也在不断提升。想要成为大数据工程师,大需要很多种基础理论知识与编程框架、分布式服务器等来支撑,这也是使得一个大数...

董黎明
今天
9
0
2019Java学习规划

重要性 虚拟机 > 并发 > 数据库 > 设计模式 > 算法 读书 深入理解Java虚拟机 Java并发编程实战 剑指offer

2change
今天
3
0
聊聊flink JobManager的High Availability

序 本文主要研究一下flink JobManager的High Availability 配置 flink-conf.yaml high-availability: zookeeperhigh-availability.zookeeper.quorum: zookeeper:2181high-availability.zo......

go4it
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部