提交 71443a7d authored 作者: 龙菲's avatar 龙菲

增加菜单权限

上级 0a43c843
...@@ -7,6 +7,16 @@ export function getCulturalRelicList(data) { ...@@ -7,6 +7,16 @@ export function getCulturalRelicList(data) {
data data
}) })
} }
export function getCulturalRelicListPer(data) {
return request({
url: '/bizCulturalRelic/listByPagePer',
method: 'post',
data
})
}
export function addCulturalRelic(data) { export function addCulturalRelic(data) {
return request({ return request({
url: '/bizCulturalRelic/add', url: '/bizCulturalRelic/add',
......
...@@ -8,6 +8,16 @@ export function getList(data) { ...@@ -8,6 +8,16 @@ export function getList(data) {
data data
}) })
} }
// 获取布展列表
export function getListPer(data) {
return request({
url: '/bizExhibition/listByPagePer',
method: 'post',
data
})
}
// 新增 // 新增
export function addDisplay(data) { export function addDisplay(data) {
return request({ return request({
......
...@@ -33,7 +33,7 @@ export function logout() { ...@@ -33,7 +33,7 @@ export function logout() {
}) })
} }
// 获取菜单权限 // 获取菜单权限(菜单用此接口)
export function getMenu() { export function getMenu() {
return request({ return request({
url: '/sys/home', url: '/sys/home',
......
...@@ -9,6 +9,15 @@ export function getVirtualList(data) { ...@@ -9,6 +9,15 @@ export function getVirtualList(data) {
}) })
} }
export function getVirtualListPer(data) {
return request({
url: '/bizVirtual/listByPagePer',
method: 'post',
data
})
}
export function addVirtual(data) { export function addVirtual(data) {
return request({ return request({
url: '/bizVirtual/add', url: '/bizVirtual/add',
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
:unique-opened="false" :unique-opened="false"
:active-text-color="variables.menuActiveText" :active-text-color="variables.menuActiveText"
:collapse-transition="false" :collapse-transition="false"
:default-openeds="openeds" :default-openeds="openeds"
mode="vertical" mode="vertical"
> >
<sidebar-item <sidebar-item
...@@ -37,6 +37,9 @@ export default { ...@@ -37,6 +37,9 @@ export default {
// routes() { // routes() {
// return this.getRoute() // return this.getRoute()
// }, // },
routes() {
return this.$store.getters.routerList;
},
activeMenu() { activeMenu() {
const route = this.$route; const route = this.$route;
const { meta, path } = route; const { meta, path } = route;
...@@ -58,25 +61,24 @@ export default { ...@@ -58,25 +61,24 @@ export default {
}, },
data() { data() {
return { return {
routes: [], // routes: [],
openeds:['/business','/system'] openeds: ["/business", "/system"],
}; };
}, },
created() { created() {
this.routes = this.$router.options.routes; // this.routes = this.$router.options.routes;
// this.routes = this.getRoute() // this.routes = this.getRoute()
// let parentArr = [] // let parentArr = []
// for (const key in this.menu) { // for (const key in this.menu) {
// parentArr.push(key+'Menu') // parentArr.push(key+'Menu')
// } // }
// this.routes.map(item=>{ // this.routes.map(item=>{
// parentArr.map(pr=>{ // parentArr.map(pr=>{
// if (condition) { // if (condition) {
// }
// } // })
// }) // })
// }) // console.log('parentArr',parentArr);
// console.log('parentArr',parentArr);
}, },
methods: { methods: {
getRoute() { getRoute() {
......
import router from './router' import router from './router'
import store from './store' import store from './store'
import { import { Message } from 'element-ui'
Message
} from 'element-ui'
import NProgress from 'nprogress' // progress bar import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style import 'nprogress/nprogress.css' // progress bar style
import { import { getToken, removeToken } from '@/utils/auth' // get token from cookie
getToken
} from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title' import getPageTitle from '@/utils/get-page-title'
import { getMenu } from "./api/user";
import { addRouter } from "./utils/addRouter";
import user from "./store/modules/user";
NProgress.configure({ NProgress.configure({
showSpinner: false showSpinner: false
}) // NProgress Configuration }) // NProgress Configuration
...@@ -24,36 +22,38 @@ router.beforeEach(async (to, from, next) => { ...@@ -24,36 +22,38 @@ router.beforeEach(async (to, from, next) => {
document.title = getPageTitle(to.meta.title) document.title = getPageTitle(to.meta.title)
// determine whether the user has logged in // determine whether the user has logged in
const hasToken = getToken()
if (hasToken) { if (getToken()) {
if (to.path === '/login') { // 判断cookice是否存在 不存在即为未登录
// if is logged in, redirect to the home page if (to.path !== "/login") {
next({ if (user.state.init) {
path: '/' // 获取了动态路由 data一定true,就无需再次请求 直接放行
}) next();
NProgress.done() } else {
// data为false,一定没有获取动态路由,就跳转到获取动态路由的方法
gotoRouter(to, next);
}
} else { } else {
next() Message({ message: "您已经登录", type: "info" });
NProgress.done() next("/");
// const hasGetUserInfo = store.getters.name
// if (hasGetUserInfo) {
// next()
// } else {
// try {
// // get user info
// await store.dispatch('user/getInfo')
// next()
// } catch (error) {
// // remove token and go to login page to re-login
// await store.dispatch('user/resetToken')
// Message.error(error || 'Has Error')
// next(`/login?redirect=${to.path}`)
// NProgress.done()
// }
// }
} }
// if (to.path === '/login') {
// // if is logged in, redirect to the home page
// next({
// path: '/'
// })
// NProgress.done()
// } else {
// // next()
// // NProgress.done()
// if (user.state.init) {
// // 获取了动态路由 data一定true,就无需再次请求 直接放行
// next();
// } else {
// // data为false,一定没有获取动态路由,就跳转到获取动态路由的方法
// gotoRouter(to, next);
// }
// }
} else { } else {
/* has no token*/ /* has no token*/
...@@ -68,7 +68,34 @@ router.beforeEach(async (to, from, next) => { ...@@ -68,7 +68,34 @@ router.beforeEach(async (to, from, next) => {
} }
}) })
router.afterEach(() => { router.afterEach((to, from) => {
// finish progress bar NProgress.done(); // 结束Progress
NProgress.done() });
})
function gotoRouter(to, next) {
getMenu() // 获取动态路由的方法
.then(res => {
console.log("解析后端动态路由", res);
const asyncRouter = addRouter(res.data.menus); // 进行递归解析
// store.dispatch("user/setroles", res.data.permit);
return asyncRouter;
})
.then(asyncRouter => {
// 后置添加404页面,防止刷新404
asyncRouter.push({
path: "*",
redirect: "/404",
hidden: true
});
router.addRoutes(asyncRouter); // vue-router提供的addRouter方法进行路由拼接
console.log(asyncRouter);
store.dispatch("user/setRouterList", asyncRouter); // 存储到vuex
// store.dispatch("user/GetInfo");
store.commit("user/set_init", true);
next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
})
.catch(e => {
console.log(e);
removeToken();
});
}
...@@ -30,34 +30,54 @@ import Layout from '@/layout' ...@@ -30,34 +30,54 @@ import Layout from '@/layout'
* a base page that does not have permission requirements * a base page that does not have permission requirements
* all roles can be accessed * all roles can be accessed
*/ */
export const constantRoutes = [{
path: '/login',
component: () => import('@/views/login/index'),
hidden: true
},
{
path: '/404',
component: () => import('@/views/404'),
hidden: true
},
{ /**
path: '/', * 静态路由
component: Layout, */
redirect: '/home',
name: 'HomeMenu', export const constantRoutes = [{
hidden: false, path: '/login',
children: [{ component: () => import('@/views/login/index'),
path: 'home', hidden: true
name: 'Home', },
component: () => import('@/views/home/index'),
meta: { {
title: '首页', path: '/404',
icon: 'dashboard' component: () => import('@/views/404'),
} hidden: true
}] },
},
{
path: '/',
component: Layout,
redirect: '/home',
name: 'HomeMenu',
hidden: false,
children: [{
path: 'home',
name: 'Home',
component: () => import('@/views/home/index'),
meta: {
title: '首页',
icon: 'dashboard'
}
}]
},
// 404 page must be placed at the end !!!
// {
// path: '*',
// redirect: '/404',
// hidden: true
// }
]
/**
* 需要动态添加的路由
*/
export const asyncRouterMap = [
{ {
path: '/business', path: '/business',
component: Layout, component: Layout,
...@@ -163,29 +183,6 @@ export const constantRoutes = [{ ...@@ -163,29 +183,6 @@ export const constantRoutes = [{
}, },
] ]
}, },
// {
// path: '/importExport',
// component: Layout,
// name: 'ImportExportMenu',
// hidden: false,
// children: [{
// path: 'importExport',
// name: 'ImportExport',
// component: () => import('@/views/importExport/index'),
// meta: {
// title: '导入记录',
// icon: 'file'
// }
// }]
// },
// 404 page must be placed at the end !!!
{
path: '*',
redirect: '/404',
hidden: true
}
] ]
const createRouter = () => new Router({ const createRouter = () => new Router({
......
const getters = { const getters = {
sidebar: state => state.app.sidebar, sidebar: state => state.app.sidebar,
device: state => state.app.device, device: state => state.app.device,
token: state => state.user.token, token: state => state.user.token,
userInfo: state => state.user.userInfo, userInfo: state => state.user.userInfo,
avatar: state => state.user.avatar, avatar: state => state.user.avatar,
...@@ -10,6 +10,6 @@ const getters = { ...@@ -10,6 +10,6 @@ const getters = {
dicts: state => state.dict.dicts, dicts: state => state.dict.dicts,
museumTree: state => state.org.museumTree, museumTree: state => state.org.museumTree,
routerList: state => state.user.routerList
} }
export default getters export default getters
...@@ -4,6 +4,7 @@ import { ...@@ -4,6 +4,7 @@ import {
getMenu, getMenu,
getPermissionTreeAll getPermissionTreeAll
} from '@/api/user' } from '@/api/user'
import { constantRoutes } from '@/router/index'
import { import {
getToken, getToken,
setToken, setToken,
...@@ -26,7 +27,9 @@ const getDefaultState = () => { ...@@ -26,7 +27,9 @@ const getDefaultState = () => {
menu: getLocalMenu(), menu: getLocalMenu(),
name: '', name: '',
avatar: '', avatar: '',
permissionTree: [] permissionTree: [],
routerList: [], // 动态路由,
init: false, // 是否完成初始化 // 默认未完成
} }
} }
...@@ -54,6 +57,15 @@ const mutations = { ...@@ -54,6 +57,15 @@ const mutations = {
SET_PERMISSION_TREE_ALL: (state, permissionTree) => { SET_PERMISSION_TREE_ALL: (state, permissionTree) => {
state.permissionTree = permissionTree state.permissionTree = permissionTree
}, },
SET_ROUTER: (state, routerList) => {
state.routerList = routerList
},
set_init: (state, status) => {
state.init = status
},
set_router: (state, routerList) => {
state.routerList = routerList
},
} }
const actions = { const actions = {
...@@ -80,7 +92,7 @@ const actions = { ...@@ -80,7 +92,7 @@ const actions = {
commit('SET_USERINFO', data) commit('SET_USERINFO', data)
setToken(data.accessToken) setToken(data.accessToken)
setUserInfo(data) setUserInfo(data)
resolve() resolve(response)
}).catch(error => { }).catch(error => {
reject(error) reject(error)
}) })
...@@ -172,6 +184,10 @@ const actions = { ...@@ -172,6 +184,10 @@ const actions = {
}) })
}, },
// 动态设置路由 此为设置设置途径
setRouterList({ commit }, routerList) {
commit('set_router', constantRoutes.concat(routerList)) // 进行路由拼接并存储
},
} }
......
/**
* 生成路由
* @param {Array} routerlist 格式化路由
* @returns
*/
export function addRouter(routerlist) {
const router = []
try {
routerlist.forEach(e => {
if (e.path && e.menuName && e.component) {
let e_new = {
path: e.path,
name: e.menuName,
component: resolve => e.component === 'Layout' ? require([`@/layout`], resolve) : require([`@/views/${e.component}/index`], resolve)
}
if (e.children) {
const children = addRouter(e.children)
// 保存权限
e_new = { ...e_new, children: children }
}
if (e.redirect) {
e_new = { ...e_new, redirect: e.redirect }
}
// if (e.generatemenu === 0) {
// e_new = { ...e_new, hidden: true }
// }
if (e.icon !== '' && e.menuLabel !== '') {
e_new = { ...e_new, meta: { title: e.menuLabel, icon: e.icon } }
} else if (e.menuLabel !== '' && e.icon === '') {
e_new = { ...e_new, meta: { title: e.menuLabel } }
}
router.push(e_new)
}
})
} catch (error) {
console.error(error)
return []
}
return router
}
\ No newline at end of file
...@@ -195,4 +195,28 @@ export function getFullUrl(url) { ...@@ -195,4 +195,28 @@ export function getFullUrl(url) {
} else { } else {
return (num / 10000).toFixed(1) + 'w'; return (num / 10000).toFixed(1) + 'w';
} }
} }
\ No newline at end of file
// /**
// * 树 转 列表
// * 广度优先,先进先出
// * @param {Array} tree 树状数据
// * @param {String} childKey children的key
// */
// export function treeToList(tree, childKey = 'children') {
// let stack = tree.concat([])
// let data = []
// while (stack.length !== 0) {
// // 从stack中拿出来分析
// let shift = stack.shift() // stack.pop() 先进后出
// data.push(shift)
// let children = shift[childKey]
// if (children) {
// for (let i = 0; i < children.length; i++) {
// // 把数据放入stack中
// stack.push(children[i])
// }
// }
// }
// return data
// }
...@@ -111,21 +111,21 @@ export default { ...@@ -111,21 +111,21 @@ export default {
status: "", status: "",
}, },
searchConfig: [ searchConfig: [
{ // {
prop: "type", // prop: "type",
type: "select", // type: "select",
label: "所属分类", // label: "所属分类",
selectOptions: [ // selectOptions: [
{ // {
label: "文物", // label: "文物",
value: "biz_cultural_relic", // value: "biz_cultural_relic",
}, // },
{ // {
label: "展览", // label: "展览",
value: "biz_exhibition", // value: "biz_exhibition",
}, // },
], // ],
}, // },
{ {
prop: "batchNum", prop: "batchNum",
type: "input", type: "input",
......
...@@ -143,7 +143,7 @@ import TableOperation from "@/components/Table/TableOperation.vue"; ...@@ -143,7 +143,7 @@ import TableOperation from "@/components/Table/TableOperation.vue";
import SearchBar from "@/components/SearchBar"; import SearchBar from "@/components/SearchBar";
import { title, operates, operations } from "./config"; import { title, operates, operations } from "./config";
import { import {
getCulturalRelicList, getCulturalRelicListPer,
getRCDetailById, getRCDetailById,
deleteCultralRelic, deleteCultralRelic,
editCulturalRelic, editCulturalRelic,
...@@ -297,7 +297,7 @@ export default { ...@@ -297,7 +297,7 @@ export default {
if (params.status == "") { if (params.status == "") {
delete params.status; delete params.status;
} }
let res = await getCulturalRelicList(params); let res = await getCulturalRelicListPer(params);
if (res.code == 0) { if (res.code == 0) {
this.list = res.data; this.list = res.data;
} }
...@@ -313,7 +313,7 @@ export default { ...@@ -313,7 +313,7 @@ export default {
page: this.list.current, page: this.list.current,
limit: this.list.size, limit: this.list.size,
}; };
let res = await getCulturalRelicList(params); let res = await getCulturalRelicListPer(params);
if (res.code == 0) { if (res.code == 0) {
// debugger // debugger
this.list = res.data; this.list = res.data;
......
...@@ -166,7 +166,7 @@ ...@@ -166,7 +166,7 @@
<script> <script>
let euId = 1000; let euId = 1000;
import ManualUploader from "@/components/Uploader/ManualUploader.vue"; import ManualUploader from "@/components/Uploader/ManualUploader.vue";
import { getCulturalRelicList } from "@/api/culturalRelic"; import { getCulturalRelicListPer } from "@/api/culturalRelic";
import VueQuillEditor from "@/components/VueQuillEditor"; import VueQuillEditor from "@/components/VueQuillEditor";
export default { export default {
...@@ -248,7 +248,7 @@ export default { ...@@ -248,7 +248,7 @@ export default {
}; };
setTimeout(async () => { setTimeout(async () => {
this.loading = false; this.loading = false;
const res = await getCulturalRelicList(params); const res = await getCulturalRelicListPer(params);
if (res.code == 0) { if (res.code == 0) {
this.CRList = res.data.records; this.CRList = res.data.records;
} else { } else {
......
...@@ -98,7 +98,7 @@ import TablePage from "@/components/Table/TablePage.vue"; ...@@ -98,7 +98,7 @@ import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue"; import TableOperation from "@/components/Table/TableOperation.vue";
import { title, operates, operations } from "./config"; import { title, operates, operations } from "./config";
import { import {
getList, getListPer,
deleteDisplay, deleteDisplay,
getDisplayById, getDisplayById,
editDisplay, editDisplay,
...@@ -219,7 +219,7 @@ export default { ...@@ -219,7 +219,7 @@ export default {
if (params.status == "") { if (params.status == "") {
delete params.status; delete params.status;
} }
let res = await getList(params); let res = await getListPer(params);
if (res.code == 0) { if (res.code == 0) {
this.list = res.data; this.list = res.data;
} }
...@@ -235,7 +235,7 @@ export default { ...@@ -235,7 +235,7 @@ export default {
page: this.list.current, page: this.list.current,
limit: this.list.size, limit: this.list.size,
}; };
let res = await getList(params); let res = await getListPer(params);
if (res.code == 0) { if (res.code == 0) {
console.log(res.data); console.log(res.data);
this.list = res.data; this.list = res.data;
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
<TablePage <TablePage
:data="list.records" :data="list.records"
:tableTitle="tableTitle" :tableTitle="tableTitle"
:operates="tableOperates"
> >
</TablePage> </TablePage>
...@@ -84,9 +83,6 @@ export default { ...@@ -84,9 +83,6 @@ export default {
tableTitle() { tableTitle() {
return title; return title;
}, },
tableOperates() {
return operates;
},
tableOperations() { tableOperations() {
return operations; return operations;
}, },
......
...@@ -158,7 +158,7 @@ export default { ...@@ -158,7 +158,7 @@ export default {
.dispatch("user/login", this.loginForm) .dispatch("user/login", this.loginForm)
.then(async() => { .then(async() => {
// debugger // debugger
await this.$store.dispatch('user/getMenuList') // await this.$store.dispatch('user/getMenuList')
this.$router.push({ path: this.redirect || "/" }); this.$router.push({ path: this.redirect || "/" });
this.loading = false; this.loading = false;
}) })
......
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
import TablePage from "@/components/Table/TablePage.vue"; import TablePage from "@/components/Table/TablePage.vue";
import TableOperation from "@/components/Table/TableOperation.vue"; import TableOperation from "@/components/Table/TableOperation.vue";
import { title, operates, operations } from "./config"; import { title, operates, operations } from "./config";
import { deleteVirtual, editVirtual, getVirtualList } from "@/api/vitual"; import { deleteVirtual, editVirtual, getVirtualListPer } from "@/api/vitual";
import InfoEditDialog from "./components/InfoEditDialog"; import InfoEditDialog from "./components/InfoEditDialog";
import SearchBar from "@/components/SearchBar"; import SearchBar from "@/components/SearchBar";
...@@ -173,7 +173,7 @@ export default { ...@@ -173,7 +173,7 @@ export default {
delete params.status; delete params.status;
} }
console.log("params", params); console.log("params", params);
let res = await getVirtualList(params); let res = await getVirtualListPer(params);
if (res.code == 0) { if (res.code == 0) {
this.list = res.data; this.list = res.data;
} }
...@@ -189,7 +189,7 @@ export default { ...@@ -189,7 +189,7 @@ export default {
page: this.list.current, page: this.list.current,
limit: this.list.size, limit: this.list.size,
}; };
let res = await getVirtualList(params); let res = await getVirtualListPer(params);
if (res.code == 0) { if (res.code == 0) {
this.list = res.data; this.list = res.data;
} }
......
...@@ -31,8 +31,8 @@ module.exports = { ...@@ -31,8 +31,8 @@ module.exports = {
lintOnSave: false, lintOnSave: false,
productionSourceMap: false, productionSourceMap: false,
devServer: { devServer: {
// host: '172.24.100.18', host: '172.24.100.139',
host:'127.0.0.1', // host:'127.0.0.1',
port: port, port: port,
open: true, open: true,
overlay: { overlay: {
...@@ -41,7 +41,7 @@ module.exports = { ...@@ -41,7 +41,7 @@ module.exports = {
}, },
proxy: { proxy: {
'/api': { '/api': {
// target: 'http://192.168.1.230:9566/api', // target: 'http://172.24.100.109:8080/',
target:'http://222.85.214.245:9566/api', target:'http://222.85.214.245:9566/api',
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论