Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fk-spider-web
Overview
Overview
Details
Activity
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
周田
fk-spider-web
Commits
995abc27
Commit
995abc27
authored
Jan 28, 2026
by
周田
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'liucan' into 'main'
feat:用户管理添加角色校验 See merge request
!32
parents
6bcce379
23b74e93
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
201 additions
and
163 deletions
+201
-163
apiPaths.ts
src/api/apiPaths.ts
+95
-94
system.ts
src/api/system.ts
+1
-0
user.ts
src/api/user.ts
+20
-5
index.vue
src/views/os-system/index.vue
+85
-64
No files found.
src/api/apiPaths.ts
View file @
995abc27
// API路径配置文件
// API路径配置文件
// 这个文件确保所有API路径在一处统一管理,方便修改
// 这个文件确保所有API路径在一处统一管理,方便修改
import
{
pauseJob
}
from
"./schedule"
;
import
{
pauseJob
}
from
'./schedule'
export
const
authApi
=
{
export
const
authApi
=
{
login
:
"/auth/login"
,
login
:
'/auth/login'
,
logout
:
"/auth/logout"
,
logout
:
'/auth/logout'
}
as
const
;
}
as
const
export
const
scrapydApi
=
{
export
const
scrapydApi
=
{
// scrapyd相关接口
// scrapyd相关接口
listProjects
:
"/scrapyd/listProjects"
,
listProjects
:
'/scrapyd/listProjects'
,
listVersions
:
"/scrapyd/listVersions"
,
listVersions
:
'/scrapyd/listVersions'
,
listSpiders
:
"/scrapyd/listSpiders"
,
listSpiders
:
'/scrapyd/listSpiders'
,
listJobsMerge
:
"/scrapyd/listJobsMerge"
,
listJobsMerge
:
'/scrapyd/listJobsMerge'
,
cancel
:
"/scrapyd/cancel"
,
cancel
:
'/scrapyd/cancel'
,
cancelAllJob
:
"/scrapyd/cancelAllJob"
,
cancelAllJob
:
'/scrapyd/cancelAllJob'
,
deleteVersion
:
"/scrapyd/deleteVersion"
,
deleteVersion
:
'/scrapyd/deleteVersion'
,
deleteProject
:
"/scrapyd/deleteProject"
,
deleteProject
:
'/scrapyd/deleteProject'
,
schedule
:
"/scrapyd/schedule"
,
schedule
:
'/scrapyd/schedule'
,
daemonStatus
:
"/scrapyd/daemonStatus"
,
daemonStatus
:
'/scrapyd/daemonStatus'
,
addVersion
:
"/scrapyd/addVersion"
,
addVersion
:
'/scrapyd/addVersion'
,
// 日志相关
// 日志相关
logs
:
"/scrapyd/logs"
,
logs
:
'/scrapyd/logs'
,
projectLogs
:
"/scrapyd/projectLogs"
,
projectLogs
:
'/scrapyd/projectLogs'
,
spiderLogs
:
"/scrapyd/spiderLogs"
,
spiderLogs
:
'/scrapyd/spiderLogs'
,
jobLog
:
"/scrapyd/jobLog"
,
jobLog
:
'/scrapyd/jobLog'
,
errorLogs
:
"/errorLogs/list"
,
errorLogs
:
'/errorLogs/list'
}
as
const
;
}
as
const
export
const
scheduleApi
=
{
export
const
scheduleApi
=
{
// 调度任务相关
// 调度任务相关
addJob
:
"/schedule/addJob"
,
addJob
:
'/schedule/addJob'
,
getJobs
:
"/schedule/getJobs"
,
getJobs
:
'/schedule/getJobs'
,
pauseJob
:
"/schedule/pauseJob"
,
pauseJob
:
'/schedule/pauseJob'
,
resumeJob
:
"/schedule/resumeJob"
,
resumeJob
:
'/schedule/resumeJob'
,
removeJob
:
"/schedule/removeJob"
,
removeJob
:
'/schedule/removeJob'
,
jobDetail
:
"/schedule/jobDetail"
,
jobDetail
:
'/schedule/jobDetail'
,
state
:
"/schedule/state"
,
state
:
'/schedule/state'
,
start
:
"/schedule/start"
,
start
:
'/schedule/start'
,
shutdown
:
"/schedule/shutdown"
,
shutdown
:
'/schedule/shutdown'
,
pause
:
"/schedule/pause"
,
pause
:
'/schedule/pause'
,
resume
:
"/schedule/resume"
,
resume
:
'/schedule/resume'
,
removeAllJobs
:
"/schedule/removeAllJobs"
,
removeAllJobs
:
'/schedule/removeAllJobs'
,
scheduleLogs
:
"/schedule/scheduleLogs"
,
scheduleLogs
:
'/schedule/scheduleLogs'
,
removeScheduleLogs
:
"/schedule/removeScheduleLogs"
,
removeScheduleLogs
:
'/schedule/removeScheduleLogs'
}
as
const
;
}
as
const
export
const
scrapydServerApi
=
{
export
const
scrapydServerApi
=
{
getScrapydServerPage
:
"/scrapydServer/getScrapydServerPage"
,
getScrapydServerPage
:
'/scrapydServer/getScrapydServerPage'
,
addScrapydServer
:
"/scrapydServer/addScrapydServer"
,
addScrapydServer
:
'/scrapydServer/addScrapydServer'
,
updateScrapydServer
:
"/scrapydServer/updateScrapydServer"
,
updateScrapydServer
:
'/scrapydServer/updateScrapydServer'
,
updateScrapydServerStatus
:
"/scrapydServer/updateScrapydServerStatus"
,
updateScrapydServerStatus
:
'/scrapydServer/updateScrapydServerStatus'
,
deleteScrapydServer
:
"/scrapydServer/deleteScrapydServer"
,
deleteScrapydServer
:
'/scrapydServer/deleteScrapydServer'
}
as
const
;
}
as
const
// 系统相关
// 系统相关
export
const
systemApi
=
{
export
const
systemApi
=
{
systemInfo
:
"/system/systemInfo"
,
systemInfo
:
'/system/systemInfo'
,
systemData
:
"/system/systemData"
,
systemData
:
'/system/systemData'
,
systemConfig
:
"/system/systemConfig"
,
systemConfig
:
'/system/systemConfig'
,
loginHistoryList
:
"/actionHistory/loginHistoryList"
,
loginHistoryList
:
'/actionHistory/loginHistoryList'
,
scrapydServerList
:
"/system/scrapydServerList"
,
// 没用
scrapydServerList
:
'/system/scrapydServerList'
// 没用
}
as
const
;
}
as
const
// 统计相关
// 统计相关
export
const
statsApi
=
{
export
const
statsApi
=
{
statsList
:
"/statsCollection/listItem"
,
statsList
:
'/statsCollection/listItem'
,
statsDetail
:
"/statsCollection/detail"
,
statsDetail
:
'/statsCollection/detail'
,
removeStats
:
"/statsCollection/delete"
,
removeStats
:
'/statsCollection/delete'
,
clearAllStats
:
"/statsCollection/clearAll"
,
// TODO 未实现
clearAllStats
:
'/statsCollection/clearAll'
// TODO 未实现
}
as
const
;
}
as
const
// 系统用户相关接口
// 系统用户相关接口
export
const
userApi
=
{
export
const
userApi
=
{
userList
:
"/user/list"
,
userList
:
'/user/list'
,
addUser
:
"/user/insert"
,
addUser
:
'/user/insert'
,
updateUser
:
"/user/update"
,
updateUser
:
'/user/update'
,
deleteUser
:
"/user/delete"
,
deleteUser
:
'/user/delete'
,
batchDelete
:
"/user/batchDelete"
,
batchDelete
:
'/user/batchDelete'
,
}
as
const
;
getUserRole
:
'/user/getUserRole'
}
as
const
// 系统用户相关接口
// 系统用户相关接口
export
const
spiderApi
=
{
export
const
spiderApi
=
{
spiderList
:
"/scrapyd/listSpiders"
,
spiderList
:
'/scrapyd/listSpiders'
}
as
const
;
}
as
const
// 爬虫任务相关接口
// 爬虫任务相关接口
export
const
spiderTaskApi
=
{
export
const
spiderTaskApi
=
{
taskList
:
"/schedule/getJobs"
,
taskList
:
'/schedule/getJobs'
,
taskRecord
:
"/schedule/scheduleLogs"
,
taskRecord
:
'/schedule/scheduleLogs'
,
addTask
:
"/schedule/addJob"
,
addTask
:
'/schedule/addJob'
,
deleteTask
:
"/schedule/removeJob"
,
deleteTask
:
'/schedule/removeJob'
,
pauseJob
:
"/schedule/pauseJob"
,
pauseJob
:
'/schedule/pauseJob'
,
resumeJob
:
"/schedule/resumeJob"
,
resumeJob
:
'/schedule/resumeJob'
,
jobDetail
:
"/schedule/jobDetail"
,
jobDetail
:
'/schedule/jobDetail'
,
taskCount
:
"/schedule/getAllJobCount"
,
taskCount
:
'/schedule/getAllJobCount'
,
addSateNo
:
"/noradId/add"
,
addSateNo
:
'/noradId/add'
,
getSateIdList
:
"/noradId/list"
,
getSateIdList
:
'/noradId/list'
,
deleteSateNoList
:
"/noradId/delete"
,
deleteSateNoList
:
'/noradId/delete'
,
addSateNoList
:
"/noradId/batchAdd"
,
addSateNoList
:
'/noradId/batchAdd'
}
as
const
;
}
as
const
// 爬虫数据相关接口
// 爬虫数据相关接口
export
const
spiderDataApi
=
{
export
const
spiderDataApi
=
{
dsnList
:
"/dsn/list"
,
dsnList
:
'/dsn/list'
,
dsnDetail
:
"/dsn/detail"
,
dsnDetail
:
'/dsn/detail'
,
dsnDataDelete
:
"/dsn/delete"
,
dsnDataDelete
:
'/dsn/delete'
,
ituList
:
"/itu/list"
,
ituList
:
'/itu/list'
,
ituDetail
:
"/itu/detail"
,
ituDetail
:
'/itu/detail'
,
ituDataDelete
:
"/itu/delete"
,
ituDataDelete
:
'/itu/delete'
,
stList
:
"/spaceTrack/list"
,
stList
:
'/spaceTrack/list'
,
stDetail
:
"/spaceTrack/detail"
,
stDetail
:
'/spaceTrack/detail'
,
stDataDelete
:
"/sspaceTrackt/delete"
,
stDataDelete
:
'/sspaceTrackt/delete'
,
exportSpiderData
:
"/export/downloadFile"
,
exportSpiderData
:
'/export/downloadFile'
,
esaList
:
"/esa/list"
,
esaList
:
'/esa/list'
,
esaMissionDetail
:
"/esa/missionDetail"
,
esaMissionDetail
:
'/esa/missionDetail'
,
esaStationDetail
:
"/esa/stationDetail"
,
esaStationDetail
:
'/esa/stationDetail'
,
exportRecordList
:
"/exportRecord/list"
,
exportRecordList
:
'/exportRecord/list'
}
as
const
;
}
as
const
// 爬虫数据相关接口
// 爬虫数据相关接口
export
const
dataApi
=
{
export
const
dataApi
=
{
dataStatistics
:
"/statistic/dataStatistics"
,
dataStatistics
:
'/statistic/dataStatistics'
,
taskStatistics
:
"/statistic/taskStatistics"
,
taskStatistics
:
'/statistic/taskStatistics'
,
performanceStatistics
:
"/statistic/performanceStatistics"
,
performanceStatistics
:
'/statistic/performanceStatistics'
,
allSpiderTaskStatistics
:
"/statistic/getAllTaskStatistics"
,
allSpiderTaskStatistics
:
'/statistic/getAllTaskStatistics'
}
as
const
;
}
as
const
src/api/system.ts
View file @
995abc27
...
@@ -95,3 +95,4 @@ export function getSateIdList() {
...
@@ -95,3 +95,4 @@ export function getSateIdList() {
method
:
POST
,
method
:
POST
,
})
as
unknown
as
Promise
<
ApiResponse
>
;
})
as
unknown
as
Promise
<
ApiResponse
>
;
}
}
src/api/user.ts
View file @
995abc27
import
{
request
,
POST
}
from
'@/utils/request'
import
{
request
,
POST
}
from
'@/utils/request'
import
type
{
ApiResponse
,
UserQueryParams
}
from
'@/utils/request'
import
type
{
ApiResponse
,
UserQueryParams
}
from
'@/utils/request'
import
{
authApi
,
userApi
}
from
'./apiPaths'
import
{
authApi
,
userApi
}
from
'./apiPaths'
// 用户登录
// 用户登录
export
function
login
(
data
:
{
username
:
string
,
password
:
string
}):
Promise
<
ApiResponse
>
{
export
function
login
(
data
:
{
username
:
string
;
password
:
string
}):
Promise
<
ApiResponse
>
{
return
request
({
return
request
({
url
:
authApi
.
login
,
url
:
authApi
.
login
,
method
:
POST
,
method
:
POST
,
...
@@ -13,7 +13,7 @@ export function login(data: { username: string, password: string }): Promise<Api
...
@@ -13,7 +13,7 @@ export function login(data: { username: string, password: string }): Promise<Api
// 获取用户信息
// 获取用户信息
export
function
getInfo
()
{
export
function
getInfo
()
{
return
new
Promise
(
resolve
=>
{
return
new
Promise
(
(
resolve
)
=>
{
resolve
({
resolve
({
data
:
{
data
:
{
roles
:
[
'admin'
],
roles
:
[
'admin'
],
...
@@ -76,4 +76,20 @@ export function batchDeleteUser(data: UserQueryParams) {
...
@@ -76,4 +76,20 @@ export function batchDeleteUser(data: UserQueryParams) {
method
:
POST
,
method
:
POST
,
data
data
})
as
unknown
as
Promise
<
ApiResponse
>
})
as
unknown
as
Promise
<
ApiResponse
>
}
}
\ No newline at end of file
// 查询用户角色
export
function
getUserRole
()
{
return
request
({
url
:
userApi
.
getUserRole
,
method
:
POST
})
as
unknown
as
Promise
<
ApiResponse
>
}
//用户角色枚举
export
const
UserRole
=
{
ADMIN
:
1
,
NORMAL_USER
:
0
}
as
const
export
type
UserRole
=
(
typeof
UserRole
)[
keyof
typeof
UserRole
]
src/views/os-system/index.vue
View file @
995abc27
...
@@ -26,19 +26,31 @@
...
@@ -26,19 +26,31 @@
<el-table-column
property=
"nickname"
label=
"用户名称"
show-overflow-tooltip
/>
<el-table-column
property=
"nickname"
label=
"用户名称"
show-overflow-tooltip
/>
<el-table-column
property=
"role"
label=
"用户角色"
show-overflow-tooltip
>
<el-table-column
property=
"role"
label=
"用户角色"
show-overflow-tooltip
>
<template
#
default=
"scope"
>
<template
#
default=
"scope"
>
{{
scope
.
row
.
role
==
1
?
"管理员"
:
"普通用户"
}}
{{
scope
.
row
.
role
==
1
?
'管理员'
:
'普通用户'
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
property=
"status"
label=
"用户状态"
show-overflow-tooltip
>
<el-table-column
property=
"status"
label=
"用户状态"
show-overflow-tooltip
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
{{
scope
.
row
.
status
?
"启用"
:
"停用"
}}
{{
scope
.
row
.
status
?
'启用'
:
'停用'
}}
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
property=
"create_time"
label=
"创建时间"
width=
"280"
show-overflow-tooltip
/>
<el-table-column
property=
"create_time"
label=
"创建时间"
width=
"280"
show-overflow-tooltip
/>
<el-table-column
label=
"操作"
width=
"220"
>
<el-table-column
label=
"操作"
width=
"220"
>
<
template
#
default=
"scope"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
plain
@
click=
"handleEdit(scope.row)"
id=
"editUser"
>
编辑
</el-button>
<el-button
<el-button
link
type=
"danger"
plain
@
click=
"handleDelete(scope.row)"
>
删除
</el-button>
link
type=
"primary"
plain
@
click=
"handleEdit(scope.row)"
id=
"editUser"
v-if=
"uRole === UserRole.ADMIN"
>
编辑
</el-button>
<el-button
link
type=
"danger"
plain
@
click=
"handleDelete(scope.row)"
v-if=
"uRole === UserRole.ADMIN"
>
删除
</el-button>
<el-button
type=
"danger"
plain
disabled
v-if=
"uRole === UserRole.NORMAL_USER"
>
无操作权限
</el-button>
</
template
>
</
template
>
</el-table-column>
</el-table-column>
</el-table>
</el-table>
...
@@ -76,92 +88,101 @@
...
@@ -76,92 +88,101 @@
</template>
</template>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ref
,
onMounted
}
from
"vue"
;
import
{
ref
,
onMounted
}
from
'vue'
import
Pagination
from
"@/components/pagination/index.vue"
;
import
Pagination
from
'@/components/pagination/index.vue'
import
deleteDialog
from
"@/components/Delete/index.vue"
;
import
deleteDialog
from
'@/components/Delete/index.vue'
import
addUserDialog
from
"./components/addUserDialog.vue"
;
import
addUserDialog
from
'./components/addUserDialog.vue'
import
{
getUserList
}
from
"@/api/user.ts"
;
import
{
getUserList
,
getUserRole
,
UserRole
}
from
'@/api/user.ts'
import
{
DeleteMode
}
from
"@/components/Delete/enum.ts"
;
import
{
DeleteMode
}
from
'@/components/Delete/enum.ts'
import
{
AddMode
}
from
"./components/enum.ts"
;
import
{
AddMode
}
from
'./components/enum.ts'
import
{
ElMessage
}
from
"element-plus"
;
import
{
ElMessage
}
from
'element-plus'
import
MenuTitle
from
"@/components/MenuTitle.vue"
;
import
MenuTitle
from
'@/components/MenuTitle.vue'
const
userId
=
ref
<
number
>
(
-
1
)
;
const
userId
=
ref
<
number
>
(
-
1
)
const
userIds
=
ref
<
number
[]
>
([])
;
const
userIds
=
ref
<
number
[]
>
([])
const
nickName
=
ref
<
string
>
(
""
);
const
nickName
=
ref
<
string
>
(
''
)
const
userName
=
ref
<
string
>
(
""
);
const
userName
=
ref
<
string
>
(
''
)
const
userRole
=
ref
<
number
>
(
0
)
;
const
userRole
=
ref
<
number
>
(
0
)
const
userStatus
=
ref
<
boolean
>
(
true
)
;
const
userStatus
=
ref
<
boolean
>
(
true
)
const
userPassword
=
ref
<
string
>
(
""
);
const
userPassword
=
ref
<
string
>
(
''
)
const
showDeleteDialog
=
ref
(
false
)
;
const
showDeleteDialog
=
ref
(
false
)
const
deleteMode
=
ref
<
DeleteMode
>
(
DeleteMode
.
SINGLE_DELETE
)
;
const
deleteMode
=
ref
<
DeleteMode
>
(
DeleteMode
.
SINGLE_DELETE
)
const
dialogVisible
=
ref
<
boolean
>
(
false
)
;
const
dialogVisible
=
ref
<
boolean
>
(
false
)
const
mode
=
ref
<
AddMode
>
(
AddMode
.
ADD_MODE
)
;
const
mode
=
ref
<
AddMode
>
(
AddMode
.
ADD_MODE
)
const
tableData
=
ref
([])
;
const
tableData
=
ref
([])
const
pageObj
=
ref
({
const
pageObj
=
ref
({
total
:
0
,
total
:
0
,
pageSize
:
10
,
pageSize
:
10
,
pageNo
:
1
,
pageNo
:
1
})
;
})
// 编辑用户信息的方法
// 编辑用户信息的方法
const
handleEdit
=
async
(
row
:
any
)
=>
{
const
handleEdit
=
async
(
row
:
any
)
=>
{
mode
.
value
=
AddMode
.
UPDATE_MODE
;
mode
.
value
=
AddMode
.
UPDATE_MODE
nickName
.
value
=
row
.
nickname
;
nickName
.
value
=
row
.
nickname
userName
.
value
=
row
.
username
;
userName
.
value
=
row
.
username
userRole
.
value
=
row
.
role
;
userRole
.
value
=
row
.
role
userStatus
.
value
=
row
.
status
;
userStatus
.
value
=
row
.
status
userPassword
.
value
=
row
.
password
;
userPassword
.
value
=
row
.
password
dialogVisible
.
value
=
true
;
dialogVisible
.
value
=
true
userId
.
value
=
row
.
id
;
userId
.
value
=
row
.
id
}
;
}
// 弹窗关闭的方法
// 弹窗关闭的方法
const
handleDelete
=
async
(
row
:
any
)
=>
{
const
handleDelete
=
async
(
row
:
any
)
=>
{
showDeleteDialog
.
value
=
true
;
showDeleteDialog
.
value
=
true
deleteMode
.
value
=
DeleteMode
.
SINGLE_DELETE
;
deleteMode
.
value
=
DeleteMode
.
SINGLE_DELETE
userId
.
value
=
row
.
id
;
userId
.
value
=
row
.
id
}
;
}
// 批量删除用户的方法
// 批量删除用户的方法
const
handleBatchDelete
=
async
()
=>
{
const
handleBatchDelete
=
async
()
=>
{
if
(
!
userIds
.
value
||
userIds
.
value
.
length
===
0
)
{
if
(
!
userIds
.
value
||
userIds
.
value
.
length
===
0
)
{
ElMessage
({
ElMessage
({
message
:
"请先选择要删除的用户"
,
message
:
'请先选择要删除的用户'
,
type
:
"warning"
,
type
:
'warning'
})
;
})
return
;
return
}
else
{
}
else
{
deleteMode
.
value
=
DeleteMode
.
BATCH_DELETE
;
deleteMode
.
value
=
DeleteMode
.
BATCH_DELETE
showDeleteDialog
.
value
=
true
;
showDeleteDialog
.
value
=
true
}
}
}
;
}
// 多选框改变后的方法
// 多选框改变后的方法
const
handleSelectionChange
=
(
data
:
any
)
=>
{
const
handleSelectionChange
=
(
data
:
any
)
=>
{
let
array
=
[]
;
let
array
=
[]
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
data
.
length
;
i
++
)
{
array
.
push
(
data
[
i
].
id
)
;
array
.
push
(
data
[
i
].
id
)
}
}
userIds
.
value
=
array
;
userIds
.
value
=
array
}
;
}
const
openAddUserDialog
=
()
=>
{
const
openAddUserDialog
=
()
=>
{
mode
.
value
=
AddMode
.
ADD_MODE
;
mode
.
value
=
AddMode
.
ADD_MODE
dialogVisible
.
value
=
true
;
dialogVisible
.
value
=
true
}
;
}
const
tableLoading
=
ref
(
false
)
;
const
tableLoading
=
ref
(
false
)
// 获取用户列表数据的方法
// 获取用户列表数据的方法
const
getUserListData
=
async
()
=>
{
const
getUserListData
=
async
()
=>
{
tableLoading
.
value
=
true
;
tableLoading
.
value
=
true
const
userList
=
await
getUserList
({
const
userList
=
await
getUserList
({
page
:
pageObj
.
value
.
pageNo
,
page
:
pageObj
.
value
.
pageNo
,
size
:
pageObj
.
value
.
pageSize
,
size
:
pageObj
.
value
.
pageSize
});
})
tableLoading
.
value
=
false
;
tableLoading
.
value
=
false
tableData
.
value
=
userList
.
data
.
list
;
tableData
.
value
=
userList
.
data
.
list
pageObj
.
value
.
total
=
userList
.
data
.
total
;
pageObj
.
value
.
total
=
userList
.
data
.
total
};
}
const
uRole
=
ref
<
UserRole
>
(
UserRole
.
NORMAL_USER
)
// 查询用户角色
const
getURole
=
async
()
=>
{
const
res
=
await
getUserRole
()
uRole
.
value
=
res
.
data
}
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
getUserListData
();
await
getURole
()
});
getUserListData
()
})
</
script
>
</
script
>
<
style
scoped
>
<
style
scoped
>
...
...
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