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

修改导航权限

parent 50b0e0ea
...@@ -37,7 +37,8 @@ const devWebpackConfig = merge(baseWebpackConfig, { ...@@ -37,7 +37,8 @@ const devWebpackConfig = merge(baseWebpackConfig, {
quiet: true, quiet: true,
watchOptions: { watchOptions: {
poll: config.dev.poll, poll: config.dev.poll,
} },
disableHostCheck: true
}, },
plugins: [ plugins: [
new webpack.DefinePlugin({ new webpack.DefinePlugin({
......
...@@ -6,17 +6,15 @@ module.exports = { ...@@ -6,17 +6,15 @@ module.exports = {
assetsPublicPath: '/', assetsPublicPath: '/',
proxyTable: { proxyTable: {
'/api': { '/api': {
// target: 'http://172.16.15.100:801',// 开发环境地址 target: 'http://172.16.15.117:8084/',// 开发环境地址
target: 'http://172.16.15.117:8084/',// 开发环境地址 // target: 'http://172.16.15.100:801',
// target: 'http://172.16.15.115:8010',// 开发环境地址
//target: 'http://172.16.15.100:8081',// 开发环境地址
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
'^/api': '/api' '^/api': '/api'
} }
} }
}, },
host: 'localhost', host: '0.0.0.0',
port: 8086, port: 8086,
autoOpenBrowser: false, autoOpenBrowser: false,
errorOverlay: true, errorOverlay: true,
......
import request from '../util/ajax' import request from '../util/ajax'
export function login() { export function login(params) {
return request({ 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' ...@@ -24,7 +24,11 @@ import { mapGetters, mapActions } from 'vuex'
import NavBarItem from './NavBarItem' import NavBarItem from './NavBarItem'
import Bus from '../../util/Bus'; import Bus from '../../util/Bus';
export default { export default {
props: { components: { NavBarItem },
computed: {
...mapGetters([
'menuMap'
])
}, },
data() { data() {
return { return {
...@@ -35,45 +39,65 @@ export default { ...@@ -35,45 +39,65 @@ export default {
}, },
watch: { watch: {
}, },
mounted() { mounted() {
this.leftMenu = [ console.log(this.menuMap)
{ this.initNav()
name: '急救资源', // this.leftMenu = [
icon: 'fa-address-book-o', // {
child: [ // name: '急救资源',
{ name: '急救车资源', path: '/resources/emergencyCar' }, // icon: 'fa-address-book-o',
{ name: '急救绿道资源', path: '/resources/greenWay' }, // child: [
{ name: '急诊科抢救资源', path: '/resources/rescue' }, // { name: '急救车资源', path: '/resources/emergencyCar' },
{ name: '急诊专家资源', path: '/resources/expert' }, // { name: '急救绿道资源', path: '/resources/greenWay' },
{ name: '急救药品耗材资源', path: '/resources/medical' }, // { name: '急诊科抢救资源', path: '/resources/rescue' },
{ name: '急诊站点资源', path: '/resources/sitePage' } // { name: '急诊专家资源', path: '/resources/expert' },
] // { name: '急救药品耗材资源', path: '/resources/medical' },
}, // { name: '急诊站点资源', path: '/resources/sitePage' }
{ // ]
name: '业务监管', // },
icon: 'fa-address-book-o', // {
child: [ // name: '业务监管',
{ name: '急救站点查询', path: '/business/siteQuery' }, // icon: 'fa-address-book-o',
] // child: [
}, // { name: '急救站点查询', path: '/business/siteQuery' },
{ // ]
name: '基础信息管理', // },
icon: 'fa-address-book-o', // {
child: [ // name: '基础信息管理',
{ name: '用户管理', path: '/basicInfo/user' }, // icon: 'fa-address-book-o',
{ name: '菜单管理', path: '/basicInfo/nav' }, // child: [
] // { name: '用户管理', path: '/basicInfo/user' },
} // { name: '菜单管理', path: '/basicInfo/nav' },
] // ]
// }
// ]
}, },
created() { created() {
}, },
methods: { 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> </script>
......
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
> >
<!-- 创建父级菜单 --> <!-- 创建父级菜单 -->
<template slot="title"> <template slot="title">
<i <!-- <i
class="fa fa-fw" class="fa fa-fw"
:class="item.icon" :class="item.icon"
></i> ></i> -->
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</template> </template>
<!-- 创建子菜单 --> <!-- 创建子菜单 -->
...@@ -26,11 +26,11 @@ ...@@ -26,11 +26,11 @@
:index="item.path" :index="item.path"
:route="{path: item.path}" :route="{path: item.path}"
> >
<i <!-- <i
class="fa fa-fw" class="fa fa-fw"
:class="item.icon" :class="item.icon"
:Icons="'icon'+navIndex" :Icons="'icon'+navIndex"
></i> ></i> -->
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</el-menu-item> </el-menu-item>
</template> </template>
......
...@@ -4,10 +4,7 @@ ...@@ -4,10 +4,7 @@
<header-bar></header-bar> <header-bar></header-bar>
<div class="main-body"> <div class="main-body">
<nav-bar></nav-bar> <nav-bar></nav-bar>
<div <div class="main-content">
class="main-content"
:style="{left: menuType ? '200px': '0'}"
>
<router-view></router-view> <router-view></router-view>
</div> </div>
</div> </div>
...@@ -26,9 +23,9 @@ export default { ...@@ -26,9 +23,9 @@ export default {
methods: { methods: {
}, },
computed: { computed: {
...mapGetters([ // ...mapGetters([
'menuType' // // 'menuType'
]) // ])
}, },
components: { components: {
HeaderBar, HeaderBar,
......
<template> <template>
<div> <div class="main-page">
nav <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> </div>
</template> </template>
<script> <script>
import { queryCheckMenuList, updateCheckMenuList } from '@/api/nav'
import store from '../../store'
export default { 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> </script>
<style lang="scss" scoped>
<style> .mainContent {
</style> padding: 20px;
\ No newline at end of file .bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
<template> <template>
<div> <div class="main-page">
user <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> </div>
</template> </template>
<script> <script>
import { tableDataMixin } from '../../common/js/mixin'
import { queryEmergencyHospitalList } from '@/api/common'
import { updateInsideRole, queryTeamUserPageList } from '@/api/user'
export default { 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> </script>
<style lang="scss" scoped>
<style> .mainContent {
</style> padding: 20px;
\ No newline at end of file .bt {
text-align: right;
margin-bottom: 16px;
}
}
</style>
...@@ -2,8 +2,11 @@ import Vue from 'vue' ...@@ -2,8 +2,11 @@ import Vue from 'vue'
import VueRouter from 'vue-router' import VueRouter from 'vue-router'
import NProgress from 'nprogress' import NProgress from 'nprogress'
import 'nprogress/nprogress.css' import 'nprogress/nprogress.css'
import {Auth} from '@/util/auth' import whiteList from './whiteList'
import staticRoute from './staticRoute' import {Auth, Cache} from '@/util/auth'
import store from '../store'
import {staticRoute, routeHandle} from './staticRoute'
import { login } from '../api/common'
NProgress.configure({showSpinner: false}) NProgress.configure({showSpinner: false})
Vue.use(VueRouter) Vue.use(VueRouter)
...@@ -18,10 +21,78 @@ const router = new VueRouter({ ...@@ -18,10 +21,78 @@ const router = new VueRouter({
}) })
// 路由跳转前验证 // 路由跳转前验证
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
// 开启进度条 // 开启进度条
NProgress.start() NProgress.start()
// 判断用户是否处于登录状态 // 判断是否传入token
next()
// 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 = [ ...@@ -28,63 +28,33 @@ const staticRoute = [
] ]
}, },
{ {
path: '/resources', path: '/bigscreen',
component: Layout, component: () => import('../page/bigscreen/index')
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'
} }
] ]
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 = [ const whiteList = [
'/login', '/error/401',
'/error/403',
'/error/404',
'/error/500',
'/bigscreen'
// '/register' // '/register'
] ]
......
import * as types from './mutation-types' import * as types from './mutation-types'
import {Cache, Auth} from '@/util/auth' import {Cache} from '@/util/auth'
export const clearStore = function({commit, state}) { export const clearStore = function({commit, state}) {
commit(types.SET_TOKEN, Cache.clearToken()) commit(types.SET_MENUMAP, Cache.clearMenuMap())
commit(types.SET_MENULIST, Cache.clearPermission()) commit(types.SET_USERINFO, Cache.clearUserInfo())
commit(types.SET_TAGNAVLIST, [])
commit(types.SET_USERINFO, Auth.clearLoginInfo())
commit(types.SET_OPENEDPAGELIST, Cache.clearOpenedPages())
commit(types.SET_BREADCRUMBLIST, Cache.clearBreadcrumb())
} }
export const saveToken = function({commit}, data) { export const saveMenuMap= function({commit}, data) {
commit(types.SET_TOKEN, Cache.setToken(data)) commit(types.SET_MENUMAP, Cache.setMenuMap(data))
} }
export const saveMenuType = function({commit}, data) { export const saveUserInfo = function({commit}, data) {
commit(types.SET_MENUTYPE, Cache.setMenuType(data)) commit(types.SET_USERINFO, Cache.setUserInfo(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 token = state => state.token export const menuMap = state => state.menuMap
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 userInfo = state => state.userInfo 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_MENUMAP = 'SET_MENUMAP'
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_USERINFO = 'SET_USERINFO' export const SET_USERINFO = 'SET_USERINFO'
export const SET_OPENEDPAGELIST = 'SET_OPENEDPAGELIST'
export const SET_BREADCRUMBLIST = 'SET_BREADCRUMBLIST'
import * as types from './mutation-types' import * as types from './mutation-types'
export default { export default {
[types.SET_TOKEN](state, data) { [types.SET_MENUMAP](state, data) {
state.token = data state.menuMap = 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_USERINFO](state, data) { [types.SET_USERINFO](state, data) {
state.userInfo = 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' ...@@ -3,14 +3,6 @@ import {Cache, Auth} from '@/util/auth'
export default { export default {
// 通知框等需要自动消失的时间 // 通知框等需要自动消失的时间
// duration: 5000 // duration: 5000
token: Cache.getToken(), menuMap: Cache.getMenuMap(),
menuList: Cache.getPermission(), userInfo: Cache.getUserInfo()
tagNavList: Cache.getTagNavList(Cache.getPermission()),
userInfo: Auth.getLoginInfo(),
// 已经打开的页面
openedPageList: Cache.getOpenedPages(),
breadcrumbList: Cache.getBreadcrumb(),
menuType: Cache.getMenuType(),
leftMenu: [],
msgChange:false
} }
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
* TODO: 拦截器全局配置,根据实际情况修改 * TODO: 拦截器全局配置,根据实际情况修改
*/ */
import axios from 'axios' import axios from 'axios'
import store from '../store'
import router from '../router' import router from '../router'
import {Message} from 'element-ui' import {Message} from 'element-ui'
import {Auth} from '@/util/auth' import {Auth} from '@/util/auth'
...@@ -21,8 +20,8 @@ const service = axios.create({ ...@@ -21,8 +20,8 @@ const service = axios.create({
// 每次请求都为http头增加token字段,其内容为token // 每次请求都为http头增加token字段,其内容为token
service.interceptors.request.use( service.interceptors.request.use(
config => { config => {
if (store.getters.token) { if (Auth.getLoginInfo()) {
config.headers['token'] = getToken() config.headers['token'] = Auth.getLoginInfo()
} }
return config return config
}, },
......
...@@ -2,106 +2,29 @@ import Cookies from 'js-cookie' ...@@ -2,106 +2,29 @@ import Cookies from 'js-cookie'
import storage from 'good-storage' import storage from 'good-storage'
const Cache = { const Cache = {
TOKEN: 'token', MENUMAP: 'menuMap',
MENUTYPE: 'menuType', USERINFO: 'userInfo',
PERMISSION: 'permission', setMenuMap: function(menuMap) {
OPENEDPAGES: 'openedPages', storage.set(this.MENUMAP, menuMap)
BREADCRUMB: 'breadcrumb', return menuMap
setToken: function(token) {
storage.set(this.TOKEN, token)
return token
}, },
setPermission: function(val) { getMenuMap: function() {
storage.set(this.PERMISSION, val) return storage.get(this.MENUMAP, '')
return val
}, },
getToken: function() { clearMenuMap: function() {
return storage.get(this.TOKEN, '') storage.remove(this.MENUMAP)
},
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)
return '' return ''
}, },
clearPermission: function() { setUserInfo: function(userInfo) {
storage.remove(this.PERMISSION) storage.set(this.USERINFO, userInfo)
storage.remove(this.MENUTYPE) return userInfo
return []
},
setOpenedPages: function(val) {
storage.set(this.OPENEDPAGES, val)
return val
}, },
getOpenedPages: function() { getUserInfo: function() {
return storage.get(this.OPENEDPAGES, []) return storage.get(this.USERINFO, '')
}, },
clearOpenedPages: function() { clearUserInfo: function() {
storage.remove(this.OPENEDPAGES) storage.remove(this.USERINFO)
return [] 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)
}
}
} }
} }
......
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