Commit ce37020f authored by 何鹏程's avatar 何鹏程

修改导航权限

parent 50b0e0ea
......@@ -37,7 +37,8 @@ const devWebpackConfig = merge(baseWebpackConfig, {
quiet: true,
watchOptions: {
poll: config.dev.poll,
}
},
disableHostCheck: true
},
plugins: [
new webpack.DefinePlugin({
......
......@@ -6,17 +6,15 @@ module.exports = {
assetsPublicPath: '/',
proxyTable: {
'/api': {
// target: 'http://172.16.15.100:801',// 开发环境地址
target: 'http://172.16.15.117:8084/',// 开发环境地址
// target: 'http://172.16.15.115:8010',// 开发环境地址
//target: 'http://172.16.15.100:8081',// 开发环境地址
target: 'http://172.16.15.117:8084/',// 开发环境地址
// target: 'http://172.16.15.100:801',
changeOrigin: true,
pathRewrite: {
'^/api': '/api'
}
}
},
host: 'localhost',
host: '0.0.0.0',
port: 8086,
autoOpenBrowser: false,
errorOverlay: true,
......
import request from '../util/ajax'
export function login() {
export function login(params) {
return request({
url: ''
url: '/api/team/login',
method: 'POST',
data: params
})
}
......
import request from '../util/ajax'
export function updateCheckMenuList(params) {
return request({
url: '/api/team/menu/updateCheckMenuList',
method: 'POST',
data: params
})
}
export function queryCheckMenuList(params) {
return request({
url: '/api/team/menu/queryCheckMenuList',
method: 'POST',
data: params
})
}
\ No newline at end of file
import request from '../util/ajax'
export function queryTeamUserPageList(params) {
return request({
url: '/api/team/user/queryTeamUserPageList',
method: 'POST',
data: params
})
}
export function updateInsideRole(params) {
return request({
url: '/api/team/user/updateInsideRole',
method: 'POST',
data: params
})
}
\ No newline at end of file
This diff is collapsed.
<template>
<div class="main">
<div
class="chart"
ref="chart"
>
</div>
</div>
</template>
<script>
let Echarts = require('echarts/lib/echarts');
export default {
data() {
return {
chart: null,
list: [
{ value: 27594, name: '胸痛' },
{ value: 18594, name: '卒中' },
{ value: 18594, name: '创/烧伤' },
{ value: 18594, name: '其他' }
],
total: 0
}
},
mounted() {
let count = 0
this.list.forEach(i => {
count += i.value
})
this.total = count
this.init()
},
methods: {
init() {
this.chart = Echarts.init(this.$refs.chart);
let option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: '50%',
top: 'middle',
itemGap: 72,
itemWidth: 24,
itemHeight: 24,
formatter: (name) => {
const item = this.list.find(i => i.name = name)
const per = parseInt(item.value / this.total * 100)
return '{a|' + name + '}{b|' + per + '%}{x|' + item.value + '人}'
},
textStyle: {
padding: [0, 20, 0, 0],
rich: {
a: {
color: 'rgba(255, 255, 255, 0.6)',
fontSize: 40,
width: 180,
padding: [0, 0, 0, 10]
},
b: {
color: '#FFFFFF',
fontSize: 40,
width: 120
},
x: {
color: '#FFFFFF',
fontSize: 40,
width: 200
},
}
}
},
color: ['#FF3178', '#00C9FF', '#FFA400', '#7A52FF'],
series: [
{
name: '访问来源',
type: 'pie',
clockwise: false,
radius: ['60%', '85%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
center: ['25%', '50%'],
labelLine: {
show: false
},
data: this.list,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
this.chart.setOption(option);
}
}
}
</script>
<style lang="scss" scoped>
.main {
position: relative;
margin: 132px 60px;
.chart {
width: 100%;
height: 500px;
position: absolute;
top: 0;
}
.total {
position: absolute;
top: 183px;
left: 157px;
text-align: center;
z-index: 9999;
span {
height: 40px;
font-size: 40px;
color: rgba(255, 255, 255, 0.6);
}
p {
height: 48px;
font-size: 56px;
color: #ffffff;
line-height: 48px;
margin-top: 20px;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="main">
<div class="total">
<span>总人数</span>
<p>{{this.total}}</p>
</div>
<div
class="chart"
ref="chart"
>
</div>
</div>
</template>
<script>
let Echarts = require('echarts/lib/echarts');
export default {
data() {
return {
chart: null,
list: [
{ value: 27594, name: '胸痛' },
{ value: 18594, name: '卒中' },
{ value: 18594, name: '创/烧伤' },
{ value: 18594, name: '其他' }
],
total: 0
}
},
mounted() {
let count = 0
this.list.forEach(i => {
count += i.value
})
this.total = count
this.init()
},
methods: {
init() {
this.chart = Echarts.init(this.$refs.chart);
let option = {
tooltip: {
trigger: 'item'
},
legend: {
orient: 'vertical',
left: '50%',
top: 'middle',
itemGap: 72,
itemWidth: 24,
itemHeight: 24,
formatter: (name) => {
const item = this.list.find(i => i.name = name)
const per = parseInt(item.value / this.total * 100)
return '{a|' + name + '}{b|' + per + '%}{x|' + item.value + '人}'
},
textStyle: {
padding: [0, 20, 0, 0],
rich: {
a: {
color: 'rgba(255, 255, 255, 0.6)',
fontSize: 40,
width: 180,
padding: [0, 0, 0, 10]
},
b: {
color: '#FFFFFF',
fontSize: 40,
width: 120
},
x: {
color: '#FFFFFF',
fontSize: 40,
width: 200
},
}
}
},
color: ['#FF3178', '#00C9FF', '#FFA400', '#7A52FF'],
series: [
{
name: '访问来源',
type: 'pie',
clockwise: false,
radius: ['60%', '85%'],
avoidLabelOverlap: false,
label: {
show: false,
position: 'center'
},
center: ['25%', '50%'],
labelLine: {
show: false
},
data: this.list,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
this.chart.setOption(option);
}
}
}
</script>
<style lang="scss" scoped>
.main {
position: relative;
margin: 132px 60px;
.chart {
width: 100%;
height: 500px;
position: absolute;
top: 0;
}
.total {
position: absolute;
top: 183px;
left: 157px;
text-align: center;
z-index: 9999;
span {
height: 40px;
font-size: 40px;
color: rgba(255, 255, 255, 0.6);
}
p {
height: 48px;
font-size: 56px;
color: #ffffff;
line-height: 48px;
margin-top: 20px;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="title">
<i class="left"></i>
<span>{{title}}</span>
<i class="right"></i>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
default: ''
}
}
}
</script>
<style lang="scss" scoped>
.title {
font-size: 64px;
height: 64px;
padding-top: 68px;
text-align: center;
color: #6f96fe;
font-weight: bold;
letter-spacing: 10px;
span {
margin: 0 40px;
}
i {
display: inline-block;
width: 20px;
height: 20px;
background: #6f96fe;
transform: rotate(45deg);
vertical-align: middle;
}
}
</style>
\ No newline at end of file
This diff is collapsed.
......@@ -24,7 +24,11 @@ import { mapGetters, mapActions } from 'vuex'
import NavBarItem from './NavBarItem'
import Bus from '../../util/Bus';
export default {
props: {
components: { NavBarItem },
computed: {
...mapGetters([
'menuMap'
])
},
data() {
return {
......@@ -35,45 +39,65 @@ export default {
},
watch: {
},
mounted() {
this.leftMenu = [
{
name: '急救资源',
icon: 'fa-address-book-o',
child: [
{ name: '急救车资源', path: '/resources/emergencyCar' },
{ name: '急救绿道资源', path: '/resources/greenWay' },
{ name: '急诊科抢救资源', path: '/resources/rescue' },
{ name: '急诊专家资源', path: '/resources/expert' },
{ name: '急救药品耗材资源', path: '/resources/medical' },
{ name: '急诊站点资源', path: '/resources/sitePage' }
]
},
{
name: '业务监管',
icon: 'fa-address-book-o',
child: [
{ name: '急救站点查询', path: '/business/siteQuery' },
]
},
{
name: '基础信息管理',
icon: 'fa-address-book-o',
child: [
{ name: '用户管理', path: '/basicInfo/user' },
{ name: '菜单管理', path: '/basicInfo/nav' },
]
}
]
console.log(this.menuMap)
this.initNav()
// this.leftMenu = [
// {
// name: '急救资源',
// icon: 'fa-address-book-o',
// child: [
// { name: '急救车资源', path: '/resources/emergencyCar' },
// { name: '急救绿道资源', path: '/resources/greenWay' },
// { name: '急诊科抢救资源', path: '/resources/rescue' },
// { name: '急诊专家资源', path: '/resources/expert' },
// { name: '急救药品耗材资源', path: '/resources/medical' },
// { name: '急诊站点资源', path: '/resources/sitePage' }
// ]
// },
// {
// name: '业务监管',
// icon: 'fa-address-book-o',
// child: [
// { name: '急救站点查询', path: '/business/siteQuery' },
// ]
// },
// {
// name: '基础信息管理',
// icon: 'fa-address-book-o',
// child: [
// { name: '用户管理', path: '/basicInfo/user' },
// { name: '菜单管理', path: '/basicInfo/nav' },
// ]
// }
// ]
},
created() {
},
methods: {
initNav() {
const navList = []
this.menuMap.forEach(item => {
if (item.secondMenuList && item.secondMenuList.length > 0) {
const child = []
item.secondMenuList.forEach(_item => {
child.push({
name: _item.menuName,
path: _item.url
})
})
const nav = {
name: item.menuName,
child: child
}
navList.push(nav)
}
});
this.leftMenu = navList
}
},
components: { NavBarItem }
}
</script>
......
......@@ -5,10 +5,10 @@
>
<!-- 创建父级菜单 -->
<template slot="title">
<i
<!-- <i
class="fa fa-fw"
:class="item.icon"
></i>
></i> -->
<span>{{ item.name }}</span>
</template>
<!-- 创建子菜单 -->
......@@ -26,11 +26,11 @@
:index="item.path"
:route="{path: item.path}"
>
<i
<!-- <i
class="fa fa-fw"
:class="item.icon"
:Icons="'icon'+navIndex"
></i>
></i> -->
<span>{{ item.name }}</span>
</el-menu-item>
</template>
......
......@@ -4,10 +4,7 @@
<header-bar></header-bar>
<div class="main-body">
<nav-bar></nav-bar>
<div
class="main-content"
:style="{left: menuType ? '200px': '0'}"
>
<div class="main-content">
<router-view></router-view>
</div>
</div>
......@@ -26,9 +23,9 @@ export default {
methods: {
},
computed: {
...mapGetters([
'menuType'
])
// ...mapGetters([
// // 'menuType'
// ])
},
components: {
HeaderBar,
......
<template>
<div>
nav
<div class="main-page">
<div class="main-page-header">
<p class="title">菜单配置</p>
</div>
<div class="main-page-body">
<div class="mainContent">
<el-form
:model="formData"
ref="formData"
size="small"
>
<el-form-item
:prop="item.keyName"
:label="'是否展现' + item.menuName"
v-for="item in list"
:key="item.keyName"
>
<el-switch
v-model="formData[item.keyName]"
inactive-text="是"
active-color="#ff4949"
inactive-color="#13ce66"
active-text="否"
:active-value="2"
:inactive-value="1"
@change="changeHandle(item)"
>
</el-switch>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { queryCheckMenuList, updateCheckMenuList } from '@/api/nav'
import store from '../../store'
export default {
name: 'expertPage',
data() {
return {
list: [],
formData: {}
}
},
mounted() {
this.getData()
},
methods: {
getData() {
queryCheckMenuList({}).then(res => {
this.list = res.respData
// console.log(this.list)
const p = {}
this.list.forEach(item => {
p[item.keyName] = item.isCheck
})
this.formData = p
})
},
changeHandle(item) {
const params = {
...item
}
params.isCheck = this.formData[item.keyName]
updateCheckMenuList(params).then(res => {
if (res.msg === 201) {
this.$message.success('修改成功')
store.dispatch('clearStore')
} else {
this.$message.success(res.content)
}
})
}
},
}
</script>
<style>
</style>
\ No newline at end of file
<style lang="scss" scoped>
.mainContent {
padding: 20px;
.bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
<template>
<div>
user
<div class="main-page">
<div class="main-page-header">
<p class="title">用户管理</p>
<el-form
:inline="true"
:model="searchForm"
ref="searchForm"
size="small"
>
<el-form-item
prop="hospitalCode"
label="单位名称"
>
<el-select
v-model="searchForm.hospitalCode"
placeholder="请选择医院"
style="width: 100%"
:clearable="true"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
<el-form-item
prop="hospitalCode"
label="角色类型"
>
<el-select
v-model="searchForm.hospitalCode"
placeholder="请选择医院"
style="width: 100%"
:clearable="true"
>
<el-option
v-for="item in hospitalList"
:label="item.hospitalName"
:key="item.id"
:value="item.hospitalCode"
/>
</el-select>
</el-form-item>
<el-form-item
prop="materialType"
label="用户名"
>
<el-input
placeholder="请输入用户名"
v-model="searchForm.vehicleManager"
/>
</el-form-item>
<div class="btns">
<el-button
type="primary"
size="small"
@click="search"
>查询</el-button>
<el-button
size="small"
@click="resetForm('searchForm')"
>重置</el-button>
<!-- <el-button
type="primary"
size="small"
@click="search"
>同步用户信息</el-button> -->
</div>
</el-form>
</div>
<div class="main-page-body">
<div class="mainContent">
<table-mixin
:pageSize="pageSize"
:pageNum="pageNum"
:total="total"
:pagination="pagination"
:handleSizeChange="handleSizeChange"
:handleCurrentChange="handleCurrentChange"
>
<el-table
v-loading="tableData.loading"
:data="tableData.body"
@sort-change="handleSortChange"
>
<div
slot="empty"
class="noData"
></div>
<el-table-column
label="序号"
type="index"
width="50"
>
</el-table-column>
<el-table-column
v-for="(item,index) in tableData.head"
:prop="item.key"
:label="item.name"
align="left"
:formatter="item.formatter"
:sortable="item.sortable"
:fixed="item.fixed"
:key="index"
:width="item.width"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
label="操作"
align="left"
width="auto"
min-width="200px"
>
<template slot-scope="scope">
<el-link
type="primary"
@click="auditHandler(scope.row.id)"
>权限配置</el-link>
</template>
</el-table-column>
</el-table>
</table-mixin>
</div>
</div>
</div>
</template>
<script>
import { tableDataMixin } from '../../common/js/mixin'
import { queryEmergencyHospitalList } from '@/api/common'
import { updateInsideRole, queryTeamUserPageList } from '@/api/user'
export default {
name: 'expertPage',
mixins: [tableDataMixin],
data() {
return {
searchForm: {
hospitalCode: '',
materialType: ''
},
hospitalList: [],
tableData: {
loading: false,
head: [
{
name: '用户名',
key: 'loginName',
sortable: false,
width: '200',
fixed: false
},
{
name: '真实姓名',
key: 'userName',
sortable: false,
width: '100',
fixed: false
},
{
name: '手机号',
key: 'cellphone',
sortable: false,
width: '200',
fixed: false
},
{
name: '单位名称',
key: 'storeCount',
sortable: false,
width: '150',
fixed: false
},
{
name: '辖区',
key: 'storePlaceStr',
sortable: false,
width: '300',
fixed: false
},
{
name: '状态',
key: 'auditStatusStr',
sortable: false,
width: '100',
fixed: false
},
{
name: '注册时间',
key: 'auditStatusStr',
sortable: false,
width: '100',
fixed: false
}
],
body: [],
option: [],
condition: []
}
}
},
mounted() {
//获取可选择的医院
queryEmergencyHospitalList().then(res => {
this.hospitalList = res.respData
})
this.search()
},
methods: {
getTableData() {
this.tableData.loading = true
const params = {
...this.searchForm,
pageNo: this.pageNum,
pageSize: this.pageSize
}
queryTeamUserPageList(params).then((res) => {
if (res.msg == 201) {
this.dealTableResponse(res)
} else {
this.$message.error(res.content)
}
})
},
showSaveDialog(type = 'add', id = '') {
this.$refs.saveDialog.init(type, id)
},
auditHandler(id) {
this.$confirm('是否审批通过?', '提示', {
confirmButtonText: '通过',
cancelButtonText: '拒绝',
distinguishCancelAndClose: true,
type: 'warning'
}).then(() => {
this.auditData(id, 2)
}).catch(action => {
if (action === 'cancel') {
this.auditData(id, 3)
}
})
},
auditData(id, auditStatus) {
addOrUpdateEmergencyMedical({ id: id, auditStatus: auditStatus }).then(res => {
if (res.msg === 201) {
this.$message.success('操作成功!')
} else {
this.$message.error(res.content)
}
this.search()
})
}
}
}
</script>
<style>
</style>
\ No newline at end of file
<style lang="scss" scoped>
.mainContent {
padding: 20px;
.bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
......@@ -2,8 +2,11 @@ import Vue from 'vue'
import VueRouter from 'vue-router'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import {Auth} from '@/util/auth'
import staticRoute from './staticRoute'
import whiteList from './whiteList'
import {Auth, Cache} from '@/util/auth'
import store from '../store'
import {staticRoute, routeHandle} from './staticRoute'
import { login } from '../api/common'
NProgress.configure({showSpinner: false})
Vue.use(VueRouter)
......@@ -18,10 +21,78 @@ const router = new VueRouter({
})
// 路由跳转前验证
router.beforeEach((to, from, next) => {
// 开启进度条
NProgress.start()
// 判断用户是否处于登录状态
next()
// 判断是否传入token
// const token = 12332
// store.dispatch('clearStore')
// login({token: token}).then(res => {
// if (res.msg === 201) {
// store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList)
// router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList))
// store.dispatch('saveUserInfo', res.respData.userDto)
// Auth.setLoginInfo(res.respData.token)
// next()
// } else {
// next({path: '/error/404', replace: true})
// }
// })
if (to.query && to.query.token) {
const token = to.query.token
const _token = Auth.getLoginInfo()
if (_token === token) {
next()
} else {
store.dispatch('clearStore')
login({token: token}).then(res => {
if (res.msg === 201) {
store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList)
router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList))
store.dispatch('saveUserInfo', res.respData.userDto)
// console.log(router.getRoutes())
// console.log(to.path)
Auth.setLoginInfo(res.respData.token)
next()
} else {
// next({path: '/error/404', replace: true})
this.$message.error(res.content)
}
})
}
} else {
// 判断是否登录过
if (Auth.getLoginInfo() && store.getters.userInfo && store.getters.menuMap){
next()
} else {
if (Auth.getLoginInfo()) {
const token = Auth.getLoginInfo()
store.dispatch('clearStore')
login({token: token}).then(res => {
if (res.msg === 201) {
store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList)
router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList))
store.dispatch('saveUserInfo', res.respData.userDto)
Auth.setLoginInfo(res.respData.token)
next()
} else {
next({path: '/error/404', replace: true})
}
})
} else {
// 判断是否为白名单页面
if (whiteList.indexOf(to.path) >= 0) {
next()
} else {
store.dispatch('clearStore')
next({path: '/error/404', replace: true})
}
}
}
}
})
......
......@@ -28,63 +28,33 @@ const staticRoute = [
]
},
{
path: '/resources',
component: Layout,
children: [
{
path: '/resources/emergencyCar',
component: () => import('../page/emergencyCar/index')
},
{
path: '/resources/sitePage',
component: () => import('../page/sitePage/index')
},
{
path: '/resources/rescue',
component: () => import('../page/rescue/index')
},
{
path: '/resources/medical',
component: () => import('../page/medical/index')
},
{
path: '/resources/greenWay',
component: () => import('../page/greenWay/index')
},
{
path: '/resources/expert',
component: () => import('../page/expert/index')
},
]
},
{
path: '/business',
component: Layout,
children: [
{
path: '/business/siteQuery',
component: () => import('../page/siteQuery/index')
}
]
},
{
path: '/basicInfo',
component: Layout,
children: [
{
path: '/basicInfo/user',
component: () => import('../page/user/index')
},
{
path: '/basicInfo/nav',
component: () => import('../page/nav/index')
}
]
},
{
path: '*',
redirect: '/error/404'
path: '/bigscreen',
component: () => import('../page/bigscreen/index')
}
]
const routeHandle = (map) => {
const routers = []
map.forEach(item => {
if(item.secondMenuList || item.secondMenuList.length > 0) {
const children = []
item.secondMenuList.forEach(_item => {
let url = _item.url.split('/')[2]
children.push({
path: _item.url,
component: () => import(`@/page/${url}`)
})
})
routers.push({
path: item.url,
component: Layout,
children: children
})
}
});
return routers
}
export default staticRoute
export {
staticRoute,
routeHandle
}
\ No newline at end of file
// 免登录白名单页面
const whiteList = [
'/login',
'/error/401',
'/error/403',
'/error/404',
'/error/500',
'/bigscreen'
// '/register'
]
......
import * as types from './mutation-types'
import {Cache, Auth} from '@/util/auth'
import {Cache} from '@/util/auth'
export const clearStore = function({commit, state}) {
commit(types.SET_TOKEN, Cache.clearToken())
commit(types.SET_MENULIST, Cache.clearPermission())
commit(types.SET_TAGNAVLIST, [])
commit(types.SET_USERINFO, Auth.clearLoginInfo())
commit(types.SET_OPENEDPAGELIST, Cache.clearOpenedPages())
commit(types.SET_BREADCRUMBLIST, Cache.clearBreadcrumb())
commit(types.SET_MENUMAP, Cache.clearMenuMap())
commit(types.SET_USERINFO, Cache.clearUserInfo())
}
export const saveToken = function({commit}, data) {
commit(types.SET_TOKEN, Cache.setToken(data))
export const saveMenuMap= function({commit}, data) {
commit(types.SET_MENUMAP, Cache.setMenuMap(data))
}
export const saveMenuType = function({commit}, data) {
commit(types.SET_MENUTYPE, Cache.setMenuType(data))
}
export const saveLeftMenu = function({commit}, data) {
commit(types.SET_LEFTMENU,data)
}
export const saveMenuList = function({commit}, data) {
commit(types.SET_MENULIST, Cache.setPermission(data))
commit(types.SET_TAGNAVLIST, Cache.getTagNavList(data))
}
export const saveMsgChange = function({commit}, data) {
commit(types.SET_MSGCHANGE,data)
}
export const saveUserUserInfo = function({commit}, data) {
commit(types.SET_USERINFO, Auth.setLoginInfo(data))
}
export const saveOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.setOpenedPages(data))
}
export const insertOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.insertOpenedPages(data))
}
export const deleteOpenedPageList = function({commit}, data) {
commit(types.SET_OPENEDPAGELIST, Cache.deleteOpenedPages(data))
}
export const saveBreadcrumbList = function({commit}, data) {
commit(types.SET_BREADCRUMBLIST, Cache.setBreadcrumb(data))
export const saveUserInfo = function({commit}, data) {
commit(types.SET_USERINFO, Cache.setUserInfo(data))
}
export const token = state => state.token
export const menuList = state => state.menuList
export const menuType = state => state.menuType
export const leftMenu = state => state.leftMenu
export const tagNavList = state => state.tagNavList
export const menuMap = state => state.menuMap
export const userInfo = state => state.userInfo
export const openedPageList = state => state.openedPageList
export const breadcrumbList = state => state.breadcrumbList
export const msgChange = state => state.msgChange
export const SET_TOKEN = 'SET_TOKEN'
export const SET_MENUTYPE = 'SET_MENUTYPE'
export const SET_MSGCHANGE = 'SET_MSGCHANGE'
export const SET_MENULIST = 'SET_MENULIST'
export const SET_LEFTMENU = 'SET_LEFTMENU'
export const SET_TAGNAVLIST = 'SET_TAGNAVLIST'
export const SET_MENUMAP = 'SET_MENUMAP'
export const SET_USERINFO = 'SET_USERINFO'
export const SET_OPENEDPAGELIST = 'SET_OPENEDPAGELIST'
export const SET_BREADCRUMBLIST = 'SET_BREADCRUMBLIST'
import * as types from './mutation-types'
export default {
[types.SET_TOKEN](state, data) {
state.token = data
},
[types.SET_MENULIST](state, data) {
state.menuList = data
},
[types.SET_MSGCHANGE](state, data) {
state.msgChange = data
},
[types.SET_MENUTYPE](state, data) {
state.menuType = data
},
[types.SET_LEFTMENU](state, data) {
state.leftMenu = data
},
[types.SET_TAGNAVLIST](state, data) {
state.tagNavList = data
[types.SET_MENUMAP](state, data) {
state.menuMap = data
},
[types.SET_USERINFO](state, data) {
state.userInfo = data
},
[types.SET_OPENEDPAGELIST](state, data) {
state.openedPageList = data
},
[types.SET_BREADCRUMBLIST](state, data) {
state.breadcrumbList = data
}
}
......@@ -3,14 +3,6 @@ import {Cache, Auth} from '@/util/auth'
export default {
// 通知框等需要自动消失的时间
// duration: 5000
token: Cache.getToken(),
menuList: Cache.getPermission(),
tagNavList: Cache.getTagNavList(Cache.getPermission()),
userInfo: Auth.getLoginInfo(),
// 已经打开的页面
openedPageList: Cache.getOpenedPages(),
breadcrumbList: Cache.getBreadcrumb(),
menuType: Cache.getMenuType(),
leftMenu: [],
msgChange:false
menuMap: Cache.getMenuMap(),
userInfo: Cache.getUserInfo()
}
......@@ -3,7 +3,6 @@
* TODO: 拦截器全局配置,根据实际情况修改
*/
import axios from 'axios'
import store from '../store'
import router from '../router'
import {Message} from 'element-ui'
import {Auth} from '@/util/auth'
......@@ -21,8 +20,8 @@ const service = axios.create({
// 每次请求都为http头增加token字段,其内容为token
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['token'] = getToken()
if (Auth.getLoginInfo()) {
config.headers['token'] = Auth.getLoginInfo()
}
return config
},
......
......@@ -2,106 +2,29 @@ import Cookies from 'js-cookie'
import storage from 'good-storage'
const Cache = {
TOKEN: 'token',
MENUTYPE: 'menuType',
PERMISSION: 'permission',
OPENEDPAGES: 'openedPages',
BREADCRUMB: 'breadcrumb',
setToken: function(token) {
storage.set(this.TOKEN, token)
return token
MENUMAP: 'menuMap',
USERINFO: 'userInfo',
setMenuMap: function(menuMap) {
storage.set(this.MENUMAP, menuMap)
return menuMap
},
setPermission: function(val) {
storage.set(this.PERMISSION, val)
return val
getMenuMap: function() {
return storage.get(this.MENUMAP, '')
},
getToken: function() {
return storage.get(this.TOKEN, '')
},
setMenuType: function(menuType) {
storage.set(this.MENUTYPE, menuType)
return menuType
},
getMenuType: function() {
return storage.get(this.MENUTYPE, '')
},
getPermission: function() {
return storage.get(this.PERMISSION, [])
},
clearToken: function() {
storage.remove(this.TOKEN)
clearMenuMap: function() {
storage.remove(this.MENUMAP)
return ''
},
clearPermission: function() {
storage.remove(this.PERMISSION)
storage.remove(this.MENUTYPE)
return []
},
setOpenedPages: function(val) {
storage.set(this.OPENEDPAGES, val)
return val
setUserInfo: function(userInfo) {
storage.set(this.USERINFO, userInfo)
return userInfo
},
getOpenedPages: function() {
return storage.get(this.OPENEDPAGES, [])
getUserInfo: function() {
return storage.get(this.USERINFO, '')
},
clearOpenedPages: function() {
storage.remove(this.OPENEDPAGES)
return []
},
setBreadcrumb: function(val) {
storage.set(this.BREADCRUMB, val)
return val
},
getBreadcrumb: function() {
return storage.get(this.BREADCRUMB, [])
},
clearBreadcrumb: function() {
storage.remove(this.BREADCRUMB)
return []
},
insertOpenedPages: function(data) {
let pages = Cache.getOpenedPages()
let flag = pages.some(v => {
let pathEq = v.path === data.path
let queryEq = JSON.stringify(v.query) === JSON.stringify(data.query)
return pathEq && queryEq
})
if (!flag) {
pages.push(data)
}
Cache.setOpenedPages(pages)
return pages
},
deleteOpenedPages: function(data) {
let pages = Cache.getOpenedPages()
for (let [i, v] of pages.entries()) {
let pathEq = v.path === data.path
let queryEq = JSON.stringify(v.query) === JSON.stringify(data.query)
if (pathEq && queryEq) {
pages.splice(i, 1)
}
}
Cache.setOpenedPages(pages)
return pages
},
getTagNavList: function(data) {
let list = []
this.flatNavList(data, list)
return list
},
flatNavList(obj, list) {
for (let v of obj) {
if (v.child && v.child.length) {
this.flatNavList(v.child, list)
} else {
list.push(v)
}
}
clearUserInfo: function() {
storage.remove(this.USERINFO)
return ''
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment