Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
9
91isoft_web_vue3
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张伯涛
91isoft_web_vue3
Commits
dcf1d2ef
Commit
dcf1d2ef
authored
Jan 26, 2024
by
张毅辰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
路由更改提交
parent
6fdb8357
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
29 deletions
+22
-29
permission.ts
src/permission.ts
+1
-8
user.ts
src/store/modules/user.ts
+21
-21
No files found.
src/permission.ts
View file @
dcf1d2ef
import
router
from
"@/router"
;
import
router
from
"@/router"
;
import
{
useUserStoreHook
}
from
"@/store/modules/user"
;
import
{
useUserStoreHook
}
from
"@/store/modules/user"
;
import
{
usePermissionStoreHook
}
from
"@/store/modules/permission"
;
import
{
getToken
}
from
"@/utils/auth"
;
import
{
getToken
}
from
"@/utils/auth"
;
import
NProgress
from
"nprogress"
;
import
NProgress
from
"nprogress"
;
...
@@ -9,7 +8,6 @@ import "nprogress/nprogress.css";
...
@@ -9,7 +8,6 @@ import "nprogress/nprogress.css";
NProgress
.
configure
({
showSpinner
:
false
});
// 进度条
NProgress
.
configure
({
showSpinner
:
false
});
// 进度条
const
userStore
=
useUserStoreHook
();
const
userStore
=
useUserStoreHook
();
const
permissionStore
=
usePermissionStoreHook
();
// 白名单路由
// 白名单路由
const
whiteList
=
[
"/login"
];
const
whiteList
=
[
"/login"
];
...
@@ -32,20 +30,15 @@ router.beforeEach(async (to, from, next) => {
...
@@ -32,20 +30,15 @@ router.beforeEach(async (to, from, next) => {
}
}
}
else
{
}
else
{
try
{
try
{
const
{
roles
,
permissions
,
menus
,
user
}
=
const
{
permissions
}
=
await
userStore
.
getUserInfo
();
await
userStore
.
getUserInfo
();
if
(
permissions
&&
permissions
.
length
>
0
)
{
if
(
permissions
&&
permissions
.
length
>
0
)
{
const
accessRoutes
=
await
userStore
.
generateRoutes
();
const
accessRoutes
=
await
userStore
.
generateRoutes
();
// const accessRoutes = await permissionStore.generateRoutes(roles);
console
.
log
(
accessRoutes
);
accessRoutes
.
forEach
((
route
)
=>
{
accessRoutes
.
forEach
((
route
)
=>
{
console
.
log
(
route
);
router
.
addRoute
(
route
);
router
.
addRoute
(
route
);
});
});
next
({
...
to
,
replace
:
true
});
next
({
...
to
,
replace
:
true
});
}
else
{
}
else
{
userStore
.
logout
().
then
((
_
)
=>
{
userStore
.
logout
().
then
((
_
)
=>
{
console
.
log
(
"用户无权限2"
);
alert
(
"用户无权限"
);
alert
(
"用户无权限"
);
next
(
`/login`
);
next
(
`/login`
);
});
});
...
...
src/store/modules/user.ts
View file @
dcf1d2ef
import
{
RouteRecordRaw
}
from
"vue-router"
;
import
{
RouteRecordRaw
}
from
"vue-router"
;
import
{
defineStore
}
from
"pinia"
;
import
{
defineStore
}
from
"pinia"
;
import
{
loginApi
,
logoutApi
}
from
"@/api/auth"
;
import
{
loginApi
}
from
"@/api/auth"
;
import
{
getUserInfoApi
}
from
"@/api/user"
;
import
{
getUserInfoApi
}
from
"@/api/user"
;
import
{
constantRoutes
,
resetRouter
}
from
"@/router"
;
import
{
constantRoutes
,
resetRouter
}
from
"@/router"
;
import
{
store
}
from
"@/store"
;
import
{
store
}
from
"@/store"
;
...
@@ -9,10 +9,8 @@ import { store } from "@/store";
...
@@ -9,10 +9,8 @@ import { store } from "@/store";
import
{
LoginData
}
from
"@/api/auth/types"
;
import
{
LoginData
}
from
"@/api/auth/types"
;
import
{
UserInfo
}
from
"@/api/user/types"
;
import
{
UserInfo
}
from
"@/api/user/types"
;
import
{
useStorage
}
from
"@vueuse/core"
;
import
{
getToken
,
setToken
}
from
"@/utils/auth"
;
import
{
getToken
,
setToken
}
from
"@/utils/auth"
;
import
{
ref
}
from
"vue"
;
import
{
ref
}
from
"vue"
;
import
{
listRoutes
}
from
"@/api/menu"
;
const
Layout
=
()
=>
import
(
"@/layout/index.vue"
);
const
Layout
=
()
=>
import
(
"@/layout/index.vue"
);
const
modules
=
import
.
meta
.
glob
(
"../../views/**/**.vue"
);
const
modules
=
import
.
meta
.
glob
(
"../../views/**/**.vue"
);
...
@@ -26,6 +24,7 @@ export const useUserStore = defineStore("user", () => {
...
@@ -26,6 +24,7 @@ export const useUserStore = defineStore("user", () => {
specialTag
:
""
,
specialTag
:
""
,
});
});
const
menus
=
ref
<
RouteRecordRaw
[]
>
([]);
const
menus
=
ref
<
RouteRecordRaw
[]
>
([]);
let
menusList
:
RouteRecordRaw
[]
=
[];
function
setRoutes
(
newRoutes
:
RouteRecordRaw
[])
{
function
setRoutes
(
newRoutes
:
RouteRecordRaw
[])
{
menus
.
value
=
constantRoutes
.
concat
(
newRoutes
);
menus
.
value
=
constantRoutes
.
concat
(
newRoutes
);
...
@@ -33,7 +32,6 @@ export const useUserStore = defineStore("user", () => {
...
@@ -33,7 +32,6 @@ export const useUserStore = defineStore("user", () => {
/**
/**
* 登录
* 登录
*
*
* @param {LoginData}
* @returns
* @returns
*/
*/
function
login
(
loginData
:
LoginData
)
{
function
login
(
loginData
:
LoginData
)
{
...
@@ -60,12 +58,12 @@ export const useUserStore = defineStore("user", () => {
...
@@ -60,12 +58,12 @@ export const useUserStore = defineStore("user", () => {
}
else
{
}
else
{
user
.
roles
=
[
"ROLE_DEFAULT"
];
user
.
roles
=
[
"ROLE_DEFAULT"
];
}
}
user
.
roles
=
data
.
roles
;
user
.
permissions
=
data
.
permissions
;
user
.
permissions
=
data
.
permissions
;
user
.
username
=
data
.
user
?.
username
;
user
.
username
=
data
.
user
?.
username
;
user
.
specialTag
=
data
.
user
?.
specialTag
;
user
.
specialTag
=
data
.
user
?.
specialTag
;
user
.
avatar
=
data
.
user
?.
avatar
;
user
.
avatar
=
data
.
user
?.
avatar
;
menus
.
value
=
data
.
menus
;
menus
.
value
=
data
.
menus
;
menusList
=
data
.
menus
;
resolve
(
data
);
resolve
(
data
);
})
})
.
catch
((
error
)
=>
{
.
catch
((
error
)
=>
{
...
@@ -76,16 +74,18 @@ export const useUserStore = defineStore("user", () => {
...
@@ -76,16 +74,18 @@ export const useUserStore = defineStore("user", () => {
// user logout
// user logout
function
logout
()
{
function
logout
()
{
return
new
Promise
<
void
>
((
resolve
,
reject
)
=>
{
return
new
Promise
<
void
>
((
resolve
)
=>
{
logoutApi
()
//
logoutApi()
.
then
(()
=>
{
//
.then(() => {
user
.
token
=
""
;
user
.
token
=
""
;
user
.
roles
=
[];
user
.
permissions
=
[];
location
.
reload
();
// 清空路由
location
.
reload
();
// 清空路由
resolve
();
resolve
();
})
//
})
.
catch
((
error
)
=>
{
//
.catch((error) => {
reject
(
error
);
//
reject(error);
});
//
});
});
});
}
}
...
@@ -106,10 +106,9 @@ export const useUserStore = defineStore("user", () => {
...
@@ -106,10 +106,9 @@ export const useUserStore = defineStore("user", () => {
function
generateRoutes
()
{
function
generateRoutes
()
{
return
new
Promise
<
RouteRecordRaw
[]
>
((
resolve
,
reject
)
=>
{
return
new
Promise
<
RouteRecordRaw
[]
>
((
resolve
,
reject
)
=>
{
// 接口获取所有路由
// 接口获取所有路由
if
(
menus
.
value
.
length
>
0
)
{
if
(
menus
List
.
length
>
0
)
{
// 根据角色获取有访问权限的路由
// 根据角色获取有访问权限的路由
const
accessedRoutes
=
filterAsyncRoutes
(
menus
.
value
);
const
accessedRoutes
=
filterAsyncRoutes
(
menusList
);
console
.
log
(
accessedRoutes
);
setRoutes
(
accessedRoutes
);
setRoutes
(
accessedRoutes
);
resolve
(
accessedRoutes
);
resolve
(
accessedRoutes
);
}
else
{
}
else
{
...
@@ -119,19 +118,20 @@ export const useUserStore = defineStore("user", () => {
...
@@ -119,19 +118,20 @@ export const useUserStore = defineStore("user", () => {
}
}
function
loadView
(
view
:
any
)
{
function
loadView
(
view
:
any
)
{
// return () => import(`@/views/${view}.vue`);
// return () => import(`@/views/${view}.vue`);
const
path
=
modules
[
`../../views/
${
view
}
.vue`
];
return
modules
[
`../../views/
${
view
}
.vue`
];
return
path
;
}
}
/**
/**
* 递归过滤有权限的异步(动态)路由
* 递归过滤有权限的异步(动态)路由
*
*
* @param routes 接口返回的异步(动态)路由
* @param routes 接口返回的异步(动态)路由
* @param roles 用户角色集合
* @returns 返回用户有权限的异步(动态)路由
* @returns 返回用户有权限的异步(动态)路由
*/
*/
function
filterAsyncRoutes
(
routes
:
RouteRecordRaw
[])
{
function
filterAsyncRoutes
(
routes
:
RouteRecordRaw
[])
{
return
routes
.
filter
((
route
)
=>
{
return
routes
.
filter
((
route
)
=>
{
if
(
route
.
path
[
0
]
!==
"/"
)
{
route
.
path
=
"/"
+
route
.
path
;
}
if
(
route
.
component
)
{
if
(
route
.
component
)
{
// Layout组件特殊处理
// Layout组件特殊处理
if
(
route
.
component
?.
toString
()
===
"Layout"
)
{
if
(
route
.
component
?.
toString
()
===
"Layout"
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment