import axios from 'axios'; import { getMenuList } from '@/api/index'; import lazyLoading from './lazyLoading.js'; import router from '@/router/index'; import Cookies from "js-cookie"; import { result } from './routerJson.js'; let util = { }; util.title = function (title) { title = title || 'lili 商家后台'; window.document.title = title; }; util.millsToTime = function (mills) { if (!mills) { return ""; } let s = mills / 1000; if (s < 60) { return s.toFixed(0) + " 秒" } let m = s / 60; if (m < 60) { return m.toFixed(0) + " 分钟" } let h = m / 60; if (h < 24) { return h.toFixed(0) + " 小时" } let d = h / 24; if (d < 30) { return d.toFixed(0) + " 天" } let month = d / 30 if (month < 12) { return month.toFixed(0) + " 个月" } let year = month / 12 return year.toFixed(0) + " 年" }; util.inOf = function (arr, targetArr) { let res = true; arr.forEach(item => { if (targetArr.indexOf(item) < 0) { res = false; } }); return res; }; util.oneOf = function (ele, targetArr) { if (targetArr.indexOf(ele) >= 0) { return true; } else { return false; } }; util.getRouterObjByName = function (routers, name) { if (!name || !routers || !routers.length) { return null; } let routerObj = null; for (let item of routers) { if (item.name == name) { return item; } routerObj = util.getRouterObjByName(item.children, name); if (routerObj) { return routerObj; } } return null; }; 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.app.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.app.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.app.routers, 'home_index')), path: '/home', name: 'home_index' }, { title: title, path: '', name: name } ]; } else { let currentPathObj = vm.$store.state.app.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) { if (!vm.$store) { return; } let storeOpenedList = vm.$store.state.app.storeOpenedList; let openedPageLen = storeOpenedList.length; let i = 0; let tagHasOpened = false; while (i < openedPageLen) { if (name == storeOpenedList[i].name) { // 页面已经打开 vm.$store.commit('storeOpenedList', { index: i, argu: argu, query: query }); tagHasOpened = true; break; } i++; } if (!tagHasOpened) { let tag = vm.$store.state.app.tagsList.filter((item) => { if (item.children) { return name == item.children[0].name; } else { return name == item.name; } }); tag = tag[0]; if (tag) { 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].children && routers[i].redirect == undefined) { route.replace({ name: routers[i].children[0].name }); notHandle = false; next(); break; } i++; } if (notHandle) { next(); } }; // 将Csv文件解析为二维数组 export const getArrayFromFile = (file) => { let nameSplit = file.name.split('.') let format = nameSplit[nameSplit.length - 1] return new Promise((resolve, reject) => { let reader = new FileReader() reader.readAsText(file) // 以文本格式读取 let arr = [] reader.onload = function (evt) { let data = evt.target.result // 读到的数据 let pasteData = data.trim() arr = pasteData.split((/[\n\u0085\u2028\u2029]|\r\n?/g)).map(row => { return row.split('\t') }).map(item => { return item[0].split(',') }) if (format == 'csv') resolve(arr) else reject(new Error('[Format Error]:不是Csv文件')) } }) } // 将二维数组转为表格数据 export const getTableDataFromArray = (array) => { let columns = [] let tableData = [] if (array.length > 1) { let titles = array.shift() columns = titles.map(item => { return { title: item, key: item } }) tableData = array.map(item => { let res = {} item.forEach((col, i) => { res[titles[i]] = col }) return res }) } return { columns, tableData } } util.initRouter = function (vm) { // 初始化路由 const constRoutes = []; const otherRoutes = []; // 404路由需要和动态路由一起加载 const otherRouter = [{ path: '/*', name: 'error-404', meta: { title: '404-页面不存在' }, component: 'error-page/404' }]; // 判断用户是否登录 let userInfo = Cookies.get('userInfo') // if (!userInfo) { // // 未登录 // return; // } if (!vm.$store.state.app.added) { // 第一次加载 读取数据 let accessToken = window.localStorage.getItem('accessToken'); // 加载菜单 // axios.get(getMenuList, { headers: { 'accessToken': accessToken } }).then(res => { // let menuData = res.result; let menuData = result; if (!menuData) { return; } util.initAllMenuData(constRoutes, menuData); util.initRouterNode(otherRoutes, otherRouter); // 添加所有主界面路由 vm.$store.commit('updateAppRouter', constRoutes.filter(item => item.children.length > 0)); // 添加全局路由 vm.$store.commit('updateDefaultRouter', otherRoutes); // 添加菜单路由 util.initMenuData(vm, menuData); // 缓存数据 修改加载标识 window.localStorage.setItem('menuData', JSON.stringify(menuData)); vm.$store.commit('setAdded', true); // }); } else { // 读取缓存数据 let data = window.localStorage.getItem('menuData'); if (!data) { vm.$store.commit('setAdded', false); return; } let menuData = JSON.parse(data); // 添加菜单路由 util.initMenuData(vm, menuData); } }; // 添加所有顶部导航栏下的菜单路由 util.initAllMenuData = function (constRoutes, data) { let allMenuData = []; data.forEach(e => { if (e.type == -1) { e.children.forEach(item => { allMenuData.push(item); }) } }) util.initRouterNode(constRoutes, allMenuData); } // 生成菜单格式数据 util.initMenuData = function (vm, data) { const menuRoutes = []; let menuData = data; // 顶部菜单 let navList = []; menuData.forEach(e => { let nav = { name: e.name, title: e.title, icon: e.icon } navList.push(nav); }) if (navList.length < 1) { return; } // 存入vuex vm.$store.commit('setNavList', navList); let currNav = window.localStorage.getItem('currNav') if (currNav) { // 读取缓存title for (var item of navList) { if (item.name == currNav) { vm.$store.commit('setCurrNavTitle', item.title); break; } } } else { // 默认第一个 currNav = navList[0].name; vm.$store.commit('setCurrNavTitle', navList[0].title); } vm.$store.commit('setCurrNav', currNav); for (var item of menuData) { if (item.name == currNav) { // 过滤 menuData = item.children; break; } } util.initRouterNode(menuRoutes, menuData); // 刷新界面菜单 vm.$store.commit('updateMenulist', menuRoutes.filter(item => item.children.length > 0)); let tagsList = []; vm.$store.state.app.routers.map((item) => { if (item.children.length <= 1) { tagsList.push(item.children[0]); } else { tagsList.push(...item.children); } }); vm.$store.commit('setTagsList', tagsList); }; // 生成路由节点 util.initRouterNode = function (routers, data) { // data为所有子菜单数据 for (var item of data) { let menu = Object.assign({}, item); // menu.component = import(`@/views/${menu.component}.vue`); menu.component = lazyLoading(menu.component); if (item.children && item.children.length > 0) { menu.children = []; util.initRouterNode(menu.children, item.children); } let meta = {}; // 给页面添加权限、标题、第三方网页链接 meta.permTypes = menu.permTypes ? menu.permTypes : null; meta.title = menu.title ? menu.title + " - lilishop商家后台" : null; meta.url = menu.url ? menu.url : null; menu.meta = meta; routers.push(menu); } }; export default util;