Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-middle-front
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
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-middle-front
Commits
f8b8a311
Commit
f8b8a311
authored
Aug 20, 2025
by
yuzhenWang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
做了角色管理做到了修改
parent
884357e6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
497 additions
and
317 deletions
+497
-317
src/api/system/menu.js
+9
-2
src/api/system/role.js
+27
-4
src/views/system/menu/index.vue
+2
-2
src/views/system/role/index.vue
+459
-309
No files found.
src/api/system/menu.js
View file @
f8b8a311
...
@@ -57,4 +57,12 @@ export function delMenu(menuId) {
...
@@ -57,4 +57,12 @@ export function delMenu(menuId) {
url
:
'/system/menu/'
+
menuId
,
url
:
'/system/menu/'
+
menuId
,
method
:
'delete'
method
:
'delete'
})
})
}
}
\ No newline at end of file
export
function
getMenuList
(
data
)
{
return
request
({
url
:
'/user/api//sysMenu/tree/list'
,
method
:
'put'
,
data
:
data
})
}
src/api/system/role.js
View file @
f8b8a311
import
request
from
'@/utils/request'
import
request
from
'@/utils/request'
// 查询角色列表
// 查询角色列表
export
function
listRole
(
query
)
{
export
function
listRole
(
data
)
{
return
request
({
return
request
({
url
:
'/
system/role/list
'
,
url
:
'/
user/api/sysRole/page
'
,
method
:
'
ge
t'
,
method
:
'
pos
t'
,
params
:
query
data
:
data
})
})
}
}
...
@@ -117,3 +117,26 @@ export function deptTreeSelect(roleId) {
...
@@ -117,3 +117,26 @@ export function deptTreeSelect(roleId) {
method
:
'get'
method
:
'get'
})
})
}
}
// 编辑角色状态
export
function
roleStatusChange
(
roleBizId
,
status
)
{
return
request
({
url
:
`/user/api/sysRole/edit/status?roleBizId=
${
roleBizId
}
&status=
${
status
}
`
,
method
:
'patch'
})
}
// 查询角色详情
export
function
getRoleDetail
(
roleBizId
)
{
return
request
({
url
:
`/user/api/sysRole/detail?roleBizId=
${
roleBizId
}
`
,
method
:
'get'
})
}
// 修改角色
export
function
roleUpdate
(
data
)
{
return
request
({
url
:
'/user/api/sysRole/edit'
,
method
:
'put'
,
data
:
data
})
}
src/views/system/menu/index.vue
View file @
f8b8a311
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
>
新增
</el-button>
>
新增
</el-button>
</el-col>
</el-col>
<el-col
:span=
"1.5"
>
<el-col
:span=
"1.5"
>
<el-button
<el-button
type=
"info"
type=
"info"
plain
plain
icon=
"Sort"
icon=
"Sort"
...
@@ -289,7 +289,7 @@
...
@@ -289,7 +289,7 @@
</template>
</template>
<
script
setup
name=
"Menu"
>
<
script
setup
name=
"Menu"
>
import
{
addMenu
,
delMenu
,
getMenu
,
listMenu
,
updateMenu
}
from
"@/api/system/menu"
import
{
addMenu
,
delMenu
,
getMenu
,
listMenu
,
updateMenu
,
getMenuList
}
from
"@/api/system/menu"
import
SvgIcon
from
"@/components/SvgIcon"
import
SvgIcon
from
"@/components/SvgIcon"
import
IconSelect
from
"@/components/IconSelect"
import
IconSelect
from
"@/components/IconSelect"
...
...
src/views/system/role/index.vue
View file @
f8b8a311
<
template
>
<
template
>
<div
class=
"app-container"
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryRef"
v-show=
"showSearch"
:inline=
"true"
label-width=
"68px"
>
<el-form
<el-form-item
label=
"角色名称"
prop=
"roleName"
>
:model=
"queryParams"
<el-input
ref=
"queryRef"
v-model=
"queryParams.roleName"
v-show=
"showSearch"
placeholder=
"请输入角色名称"
:inline=
"true"
clearable
label-width=
"68px"
style=
"width: 240px"
>
@
keyup
.
enter=
"handleQuery"
<el-form-item
label=
"角色名称"
prop=
"roleName"
>
/>
<el-input
</el-form-item>
v-model=
"queryParams.roleName"
<el-form-item
label=
"权限字符"
prop=
"roleKey"
>
placeholder=
"请输入角色名称"
<el-input
clearable
v-model=
"queryParams.roleKey"
style=
"width: 240px"
placeholder=
"请输入权限字符"
@
keyup
.
enter=
"handleQuery"
clearable
/>
style=
"width: 240px"
</el-form-item>
@
keyup
.
enter=
"handleQuery"
<!--
<el-form-item
label=
"权限字符"
prop=
"roleKey"
>
/>
<el-input
</el-form-item>
v-model=
"queryParams.roleKey"
<el-form-item
label=
"状态"
prop=
"status"
>
placeholder=
"请输入权限字符"
<el-select
clearable
v-model=
"queryParams.status"
style=
"width: 240px"
placeholder=
"角色状态"
@
keyup
.
enter=
"handleQuery"
clearable
/>
style=
"width: 240px"
</el-form-item>
-->
>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-option
<el-select
v-for=
"dict in sys_normal_disable"
v-model=
"queryParams.status"
:key=
"dict.value"
placeholder=
"角色状态"
:label=
"dict.label"
clearable
:value=
"dict.value"
style=
"width: 240px"
/>
>
</el-select>
<el-option
</el-form-item>
v-for=
"dict in sys_status"
<el-form-item
label=
"创建时间"
style=
"width: 308px"
>
:key=
"dict.value"
<el-date-picker
:label=
"dict.label"
v-model=
"dateRange"
:value=
"Number(dict.value)"
value-format=
"YYYY-MM-DD"
/>
type=
"daterange"
</el-select>
range-separator=
"-"
</el-form-item>
start-placeholder=
"开始日期"
<!--
<el-form-item
label=
"创建时间"
style=
"width: 308px"
>
end-placeholder=
"结束日期"
<el-date-picker
></el-date-picker>
v-model=
"dateRange"
</el-form-item>
value-format=
"YYYY-MM-DD"
<el-form-item>
type=
"daterange"
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
range-separator=
"-"
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
start-placeholder=
"开始日期"
</el-form-item>
end-placeholder=
"结束日期"
</el-form>
></el-date-picker>
<el-row
:gutter=
"10"
class=
"mb8"
>
</el-form-item>
-->
<el-col
:span=
"1.5"
>
<el-form-item>
<el-button
type=
"primary"
icon=
"Search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"Refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<!--
<el-row
:gutter=
"10"
class=
"mb8"
>
<el-col
:span=
"1.5"
>
<el-button
type=
"primary"
plain
icon=
"Plus"
@
click=
"handleAdd"
v-hasPermi=
"['system:role:add']"
>
新增
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"success"
plain
icon=
"Edit"
:disabled=
"single"
@
click=
"handleUpdate"
v-hasPermi=
"['system:role:edit']"
>
修改
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"danger"
plain
icon=
"Delete"
:disabled=
"multiple"
@
click=
"handleDelete"
v-hasPermi=
"['system:role:remove']"
>
删除
</el-button
>
</el-col>
<el-col
:span=
"1.5"
>
<el-button
type=
"warning"
plain
icon=
"Download"
@
click=
"handleExport"
v-hasPermi=
"['system:role:export']"
>
导出
</el-button
>
</el-col>
<right-toolbar
v-model:showSearch=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</el-row>
-->
<!-- 表格数据 -->
<el-table
v-loading=
"loading"
:data=
"roleList"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"角色名称"
prop=
"roleName"
:show-overflow-tooltip=
"true"
width=
"150"
/>
<el-table-column
label=
"角色类型"
prop=
"roleType"
:show-overflow-tooltip=
"true"
width=
"150"
>
<template
#
default=
"scope"
>
<dict-tag
:options=
"sys_role_type"
:value=
"scope.row.roleType"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"作用域"
prop=
"scope"
:show-overflow-tooltip=
"true"
width=
"150"
>
<
template
#
default=
"scope"
>
<dict-tag
:options=
"sys_scope"
:value=
"scope.row.scope"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"租户名称"
prop=
"tenantName"
:show-overflow-tooltip=
"true"
width=
"150"
/>
<el-table-column
label=
"项目名称"
prop=
"projectName"
:show-overflow-tooltip=
"true"
width=
"150"
/>
<el-table-column
label=
"状态"
align=
"center"
width=
"100"
>
<
template
#
default=
"scope"
>
<el-switch
v-model=
"scope.row.status"
:active-value=
"1"
:inactive-value=
"0"
@
click=
"
evt =>
{
evt.preventDefault()
handleStatusChange(scope.row)
}
"
>
</el-switch>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
>
<
template
#
default=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#
default=
"scope"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
>
修改
</el-button
>
<el-button
link
type=
"primary"
icon=
"Delete"
>
删除
</el-button>
</
template
>
<!-- <template #default="scope">
<el-tooltip content="修改" placement="top">
<el-button
<el-button
type=
"primary"
link
plain
type="primary"
icon=
"Plus
"
icon="Edit
"
@
click=
"handleAdd
"
@click="handleUpdate(scope.row)
"
v-hasPermi=
"['system:role:add
']"
v-hasPermi="['system:role:edit
']"
>
新增
</el-button>
></el-button>
</el-col
>
</el-tooltip
>
<el-col
:span=
"1.5
"
>
<el-tooltip content="删除" placement="top
">
<el-button
<el-button
type=
"success"
link
plain
type="primary"
icon=
"Edit"
icon="Delete"
:disabled=
"single"
@click="handleDelete(scope.row)"
@
click=
"handleUpdate"
v-hasPermi="['system:role:remove']"
v-hasPermi=
"['system:role:edit']"
></el-button>
>
修改
</el-button>
</el-tooltip>
</el-col>
<el-tooltip content="数据权限" placement="top">
<el-col
:span=
"1.5"
>
<el-button
<el-button
type=
"danger"
link
plain
type="primary"
icon=
"Delete"
icon="CircleCheck"
:disabled=
"multiple"
@click="handleDataScope(scope.row)"
@
click=
"handleDelete"
v-hasPermi="['system:role:edit']"
v-hasPermi=
"['system:role:remove']"
></el-button>
>
删除
</el-button>
</el-tooltip>
</el-col>
<el-tooltip content="分配用户" placement="top">
<el-col
:span=
"1.5"
>
<el-button
<el-button
type=
"warning"
link
plain
type="primary"
icon=
"Download"
icon="User"
@
click=
"handleExport"
@click="handleAuthUser(scope.row)"
v-hasPermi=
"['system:role:export']"
v-hasPermi="['system:role:edit']"
>
导出
</el-button>
></el-button>
</el-col>
</el-tooltip>
<right-toolbar
v-model:showSearch=
"showSearch"
@
queryTable=
"getList"
></right-toolbar>
</template> -->
</el-row>
</el-table-column>
</el-table>
<!-- 表格数据 -->
<el-table
v-loading=
"loading"
:data=
"roleList"
@
selection-change=
"handleSelectionChange"
>
<pagination
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
v-show=
"total > 0"
<el-table-column
label=
"角色编号"
prop=
"roleId"
width=
"120"
/>
:total=
"total"
<el-table-column
label=
"角色名称"
prop=
"roleName"
:show-overflow-tooltip=
"true"
width=
"150"
/>
v-model:page=
"queryParams.pageNum"
<el-table-column
label=
"权限字符"
prop=
"roleKey"
:show-overflow-tooltip=
"true"
width=
"150"
/>
v-model:limit=
"queryParams.pageSize"
<el-table-column
label=
"显示顺序"
prop=
"roleSort"
width=
"100"
/>
@
pagination=
"getList"
<el-table-column
label=
"状态"
align=
"center"
width=
"100"
>
/>
<template
#
default=
"scope"
>
<el-switch
<!-- 添加或修改角色配置对话框 -->
v-model=
"scope.row.status"
<el-dialog
:title=
"title"
v-model=
"open"
width=
"800px"
append-to-body
>
active-value=
"0"
<el-form
ref=
"roleRef"
:model=
"form"
:rules=
"rules"
label-width=
"100px"
>
inactive-value=
"1"
<el-row>
@
change=
"handleStatusChange(scope.row)"
<el-col
:span=
"12"
>
></el-switch>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间"
align=
"center"
prop=
"createTime"
>
<
template
#
default=
"scope"
>
<span>
{{
parseTime
(
scope
.
row
.
createTime
)
}}
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
#
default=
"scope"
>
<el-tooltip
content=
"修改"
placement=
"top"
v-if=
"scope.row.roleId !== 1"
>
<el-button
link
type=
"primary"
icon=
"Edit"
@
click=
"handleUpdate(scope.row)"
v-hasPermi=
"['system:role:edit']"
></el-button>
</el-tooltip>
<el-tooltip
content=
"删除"
placement=
"top"
v-if=
"scope.row.roleId !== 1"
>
<el-button
link
type=
"primary"
icon=
"Delete"
@
click=
"handleDelete(scope.row)"
v-hasPermi=
"['system:role:remove']"
></el-button>
</el-tooltip>
<el-tooltip
content=
"数据权限"
placement=
"top"
v-if=
"scope.row.roleId !== 1"
>
<el-button
link
type=
"primary"
icon=
"CircleCheck"
@
click=
"handleDataScope(scope.row)"
v-hasPermi=
"['system:role:edit']"
></el-button>
</el-tooltip>
<el-tooltip
content=
"分配用户"
placement=
"top"
v-if=
"scope.row.roleId !== 1"
>
<el-button
link
type=
"primary"
icon=
"User"
@
click=
"handleAuthUser(scope.row)"
v-hasPermi=
"['system:role:edit']"
></el-button>
</el-tooltip>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
v-model:page=
"queryParams.pageNum"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
<!-- 添加或修改角色配置对话框 -->
<el-dialog
:title=
"title"
v-model=
"open"
width=
"500px"
append-to-body
>
<el-form
ref=
"roleRef"
:model=
"form"
:rules=
"rules"
label-width=
"100px"
>
<el-form-item
label=
"角色名称"
prop=
"roleName"
>
<el-form-item
label=
"角色名称"
prop=
"roleName"
>
<el-input
v-model=
"form.roleName"
placeholder=
"请输入角色名称"
/>
<el-input
v-model=
"form.roleName"
placeholder=
"请输入角色名称"
maxlength=
"30"
/>
</el-form-item>
<el-form-item
prop=
"roleKey"
>
<
template
#
label
>
<span>
<el-tooltip
content=
"控制器中定义的权限字符,如:@PreAuthorize(`@ss.hasRole('admin')`)"
placement=
"top"
>
<el-icon><question-filled
/></el-icon>
</el-tooltip>
权限字符
</span>
</
template
>
<el-input
v-model=
"form.roleKey"
placeholder=
"请输入权限字符"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"角色顺序"
prop=
"roleSort"
>
</el-col>
<el-input-number
v-model=
"form.roleSort"
controls-position=
"right"
:min=
"0"
/>
<el-col
:span=
"12"
>
</el-form-item>
<el-form-item
label=
"角色类型"
prop=
"roleType"
>
<el-form-item
label=
"状态"
>
<el-select
v-model=
"form.roleType"
placeholder=
"请选择角色类型"
>
<el-radio-group
v-model=
"form.status"
>
<el-option
<el-radio
v-for=
"dict in sys_role_type"
v-for=
"dict in sys_normal_disable"
:key=
"dict.value"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
:value=
"Number(dict.value)"
>
{{ dict.label }}
</el-radio>
></el-option>
</el-radio-group>
</el-select>
</el-form-item>
<el-form-item
label=
"菜单权限"
>
<el-checkbox
v-model=
"menuExpand"
@
change=
"handleCheckedTreeExpand($event, 'menu')"
>
展开/折叠
</el-checkbox>
<el-checkbox
v-model=
"menuNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'menu')"
>
全选/全不选
</el-checkbox>
<el-checkbox
v-model=
"form.menuCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'menu')"
>
父子联动
</el-checkbox>
<el-tree
class=
"tree-border"
:data=
"menuOptions"
show-checkbox
ref=
"menuRef"
node-key=
"id"
:check-strictly=
"!form.menuCheckStrictly"
empty-text=
"加载中,请稍候"
:props=
"{ label: 'label', children: 'children' }"
></el-tree>
</el-form-item>
</el-form-item>
<el-form-item
label=
"备注"
>
</el-col>
<el-input
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入内容"
></el-input>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"作用域"
prop=
"scope"
>
<el-select
v-model=
"form.scope"
placeholder=
"请选择作用域"
>
<el-option
v-for=
"dict in sys_scope"
:key=
"dict.value"
:label=
"dict.label"
:value=
"Number(dict.value)"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
</el-form>
</el-col>
<
template
#
footer
>
<el-col
:span=
"12"
>
<div
class=
"dialog-footer"
>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
<el-radio-group
v-model=
"form.status"
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
<el-radio
</div>
v-for=
"dict in sys_status"
</
template
>
:key=
"dict.value"
</el-dialog>
:value=
"Number(dict.value)"
>
{{ dict.label }}
</el-radio
<!-- 分配角色数据权限对话框 -->
>
<el-dialog
:title=
"title"
v-model=
"openDataScope"
width=
"500px"
append-to-body
>
</el-radio-group>
<el-form
:model=
"form"
label-width=
"80px"
>
<el-form-item
label=
"角色名称"
>
<el-input
v-model=
"form.roleName"
:disabled=
"true"
/>
</el-form-item>
</el-form-item>
<el-form-item
label=
"权限字符"
>
</el-col>
<el-input
v-model=
"form.roleKey"
:disabled=
"true"
/>
</el-row>
<el-row>
<el-col
:span=
"12"
v-if=
"form.scope == 3"
>
<el-form-item
label=
"所属项目"
prop=
"projectBizId"
>
<el-select
v-model=
"form.projectBizId"
placeholder=
"请选择项目"
>
<el-option
v-for=
"dict in sys_scope"
:key=
"dict.value"
:label=
"dict.label"
:value=
"dict.value"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"权限范围"
>
</el-col>
<el-select
v-model=
"form.dataScope"
@
change=
"dataScopeSelectChange"
>
<el-col
:span=
"12"
v-if=
"form.scope == 2"
>
<el-option
<el-form-item
label=
"所属租户"
prop=
"tenantBizId"
>
v-for=
"item in dataScopeOptions"
<el-select
v-model=
"form.tenantBizId"
placeholder=
"请选择租户"
>
:key=
"item.value"
<el-option
:label=
"item.label"
v-for=
"dict in sys_scope"
:value=
"item.value"
:key=
"dict.value"
></el-option>
:label=
"dict.label"
</el-select>
:value=
"dict.value"
></el-option>
</el-select>
</el-form-item>
</el-form-item>
<el-form-item
label=
"数据权限"
v-show=
"form.dataScope == 2"
>
</el-col>
<el-checkbox
v-model=
"deptExpand"
@
change=
"handleCheckedTreeExpand($event, 'dept')"
>
展开/折叠
</el-checkbox>
</el-row>
<el-checkbox
v-model=
"deptNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'dept')"
>
全选/全不选
</el-checkbox>
<el-row>
<el-checkbox
v-model=
"form.deptCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'dept')"
>
父子联动
</el-checkbox>
<el-col
:span=
"24"
>
<el-tree
<el-form-item
label=
"备注"
>
class=
"tree-border"
<el-input
:data=
"deptOptions"
v-model=
"form.description"
show-checkbox
type=
"textarea"
default-expand-all
placeholder=
"请输入内容"
ref=
"deptRef"
></el-input>
node-key=
"id"
:check-strictly=
"!form.deptCheckStrictly"
empty-text=
"加载中,请稍候"
:props=
"{ label: 'label', children: 'children' }"
></el-tree>
</el-form-item>
</el-form-item>
</el-form>
</el-col>
<
template
#
footer
>
</el-row>
<div
class=
"dialog-footer"
>
</el-form>
<el-button
type=
"primary"
@
click=
"submitDataScope"
>
确 定
</el-button>
<
template
#
footer
>
<el-button
@
click=
"cancelDataScope"
>
取 消
</el-button>
<div
class=
"dialog-footer"
>
</div>
<el-button
type=
"primary"
@
click=
"submitForm"
>
确 定
</el-button>
</
template
>
<el-button
@
click=
"cancel"
>
取 消
</el-button>
</el-dialog>
</div>
</div>
</
template
>
</el-dialog>
<!-- 分配角色数据权限对话框 -->
<el-dialog
:title=
"title"
v-model=
"openDataScope"
width=
"800px"
append-to-body
>
<el-form
:model=
"form"
label-width=
"80px"
>
<el-form-item
label=
"角色名称"
>
<el-input
v-model=
"form.roleName"
:disabled=
"true"
/>
</el-form-item>
<el-form-item
label=
"权限字符"
>
<el-input
v-model=
"form.roleKey"
:disabled=
"true"
/>
</el-form-item>
<el-form-item
label=
"权限范围"
>
<el-select
v-model=
"form.dataScope"
@
change=
"dataScopeSelectChange"
>
<el-option
v-for=
"item in dataScopeOptions"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据权限"
v-show=
"form.dataScope == 2"
>
<el-checkbox
v-model=
"deptExpand"
@
change=
"handleCheckedTreeExpand($event, 'dept')"
>
展开/折叠
</el-checkbox
>
<el-checkbox
v-model=
"deptNodeAll"
@
change=
"handleCheckedTreeNodeAll($event, 'dept')"
>
全选/全不选
</el-checkbox
>
<el-checkbox
v-model=
"form.deptCheckStrictly"
@
change=
"handleCheckedTreeConnect($event, 'dept')"
>
父子联动
</el-checkbox
>
<el-tree
class=
"tree-border"
:data=
"deptOptions"
show-checkbox
default-expand-all
ref=
"deptRef"
node-key=
"id"
:check-strictly=
"!form.deptCheckStrictly"
empty-text=
"加载中,请稍候"
:props=
"{ label: 'label', children: 'children' }"
></el-tree>
</el-form-item>
</el-form>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"submitDataScope"
>
确 定
</el-button>
<el-button
@
click=
"cancelDataScope"
>
取 消
</el-button>
</div>
</
template
>
</el-dialog>
</div>
</template>
</template>
<
script
setup
name=
"Role"
>
<
script
setup
name=
"Role"
>
import
{
addRole
,
changeRoleStatus
,
dataScope
,
delRole
,
getRole
,
listRole
,
updateRole
,
deptTreeSelect
}
from
"@/api/system/role"
import
{
import
{
roleMenuTreeselect
,
treeselect
as
menuTreeselect
}
from
"@/api/system/menu"
addRole
,
roleStatusChange
,
dataScope
,
delRole
,
getRole
,
listRole
,
updateRole
,
deptTreeSelect
,
getRoleDetail
,
roleUpdate
}
from
'@/api/system/role'
import
{
roleMenuTreeselect
,
treeselect
as
menuTreeselect
}
from
'@/api/system/menu'
import
useUserStore
from
'@/store/modules/user'
const
userStore
=
useUserStore
()
const
router
=
useRouter
()
const
router
=
useRouter
()
const
{
proxy
}
=
getCurrentInstance
()
const
{
proxy
}
=
getCurrentInstance
()
const
{
sys_normal_disable
}
=
proxy
.
useDict
(
"sys_normal_disable"
)
const
{
sys_role_type
,
sys_scope
,
sys_status
}
=
proxy
.
useDict
(
'sys_role_type'
,
'sys_scope'
,
'sys_status'
)
const
roleList
=
ref
([])
const
roleList
=
ref
([])
const
open
=
ref
(
false
)
const
open
=
ref
(
false
)
...
@@ -257,7 +384,7 @@ const ids = ref([])
...
@@ -257,7 +384,7 @@ const ids = ref([])
const
single
=
ref
(
true
)
const
single
=
ref
(
true
)
const
multiple
=
ref
(
true
)
const
multiple
=
ref
(
true
)
const
total
=
ref
(
0
)
const
total
=
ref
(
0
)
const
title
=
ref
(
""
)
const
title
=
ref
(
''
)
const
dateRange
=
ref
([])
const
dateRange
=
ref
([])
const
menuOptions
=
ref
([])
const
menuOptions
=
ref
([])
const
menuExpand
=
ref
(
false
)
const
menuExpand
=
ref
(
false
)
...
@@ -271,11 +398,11 @@ const deptRef = ref(null)
...
@@ -271,11 +398,11 @@ const deptRef = ref(null)
/** 数据范围选项*/
/** 数据范围选项*/
const
dataScopeOptions
=
ref
([
const
dataScopeOptions
=
ref
([
{
value
:
"1"
,
label
:
"全部数据权限"
},
{
value
:
'1'
,
label
:
'全部数据权限'
},
{
value
:
"2"
,
label
:
"自定数据权限"
},
{
value
:
'2'
,
label
:
'自定数据权限'
},
{
value
:
"3"
,
label
:
"本部门数据权限"
},
{
value
:
'3'
,
label
:
'本部门数据权限'
},
{
value
:
"4"
,
label
:
"本部门及以下数据权限"
},
{
value
:
'4'
,
label
:
'本部门及以下数据权限'
},
{
value
:
"5"
,
label
:
"仅本人数据权限"
}
{
value
:
'5'
,
label
:
'仅本人数据权限'
}
])
])
const
data
=
reactive
({
const
data
=
reactive
({
...
@@ -283,15 +410,19 @@ const data = reactive({
...
@@ -283,15 +410,19 @@ const data = reactive({
queryParams
:
{
queryParams
:
{
pageNum
:
1
,
pageNum
:
1
,
pageSize
:
10
,
pageSize
:
10
,
loginTenantBizId
:
userStore
.
currentTenant
.
apiLoginTenantInfoResponse
.
tenantBizId
,
roleName
:
undefined
,
roleName
:
undefined
,
roleKey
:
undefined
,
roleKey
:
undefined
,
status
:
undefined
status
:
undefined
},
},
rules
:
{
rules
:
{
roleName
:
[{
required
:
true
,
message
:
"角色名称不能为空"
,
trigger
:
"blur"
}],
roleName
:
[{
required
:
true
,
message
:
'角色名称不能为空'
,
trigger
:
'blur'
}],
roleKey
:
[{
required
:
true
,
message
:
"权限字符不能为空"
,
trigger
:
"blur"
}],
roleType
:
[{
required
:
true
,
message
:
'角色类型不能为空'
,
trigger
:
'blur'
}],
roleSort
:
[{
required
:
true
,
message
:
"角色顺序不能为空"
,
trigger
:
"blur"
}]
scope
:
[{
required
:
true
,
message
:
'作用域不能为空'
,
trigger
:
'blur'
}],
},
status
:
[{
required
:
true
,
message
:
'状态不能为空'
,
trigger
:
'blur'
}],
projectBizId
:
[{
required
:
true
,
message
:
'项目不能为空'
,
trigger
:
'blur'
}],
tenantBizId
:
[{
required
:
true
,
message
:
'租户不能为空'
,
trigger
:
'blur'
}]
}
})
})
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
)
const
{
queryParams
,
form
,
rules
}
=
toRefs
(
data
)
...
@@ -299,10 +430,14 @@ const { queryParams, form, rules } = toRefs(data)
...
@@ -299,10 +430,14 @@ const { queryParams, form, rules } = toRefs(data)
/** 查询角色列表 */
/** 查询角色列表 */
function
getList
()
{
function
getList
()
{
loading
.
value
=
true
loading
.
value
=
true
listRole
(
proxy
.
addDateRange
(
queryParams
.
value
,
dateRange
.
value
)).
then
(
response
=>
{
listRole
(
queryParams
.
value
).
then
(
response
=>
{
roleList
.
value
=
response
.
rows
if
(
response
.
code
===
200
)
{
total
.
value
=
response
.
total
roleList
.
value
=
response
.
data
.
records
loading
.
value
=
false
total
.
value
=
response
.
data
.
total
loading
.
value
=
false
}
else
{
proxy
.
$modal
.
msgError
(
response
.
msg
)
}
})
})
}
}
...
@@ -315,26 +450,34 @@ function handleQuery() {
...
@@ -315,26 +450,34 @@ function handleQuery() {
/** 重置按钮操作 */
/** 重置按钮操作 */
function
resetQuery
()
{
function
resetQuery
()
{
dateRange
.
value
=
[]
dateRange
.
value
=
[]
proxy
.
resetForm
(
"queryRef"
)
proxy
.
resetForm
(
'queryRef'
)
handleQuery
()
handleQuery
()
}
}
/** 删除按钮操作 */
/** 删除按钮操作 */
function
handleDelete
(
row
)
{
function
handleDelete
(
row
)
{
const
roleIds
=
row
.
roleId
||
ids
.
value
const
roleIds
=
row
.
roleId
||
ids
.
value
proxy
.
$modal
.
confirm
(
'是否确认删除角色编号为"'
+
roleIds
+
'"的数据项?'
).
then
(
function
()
{
proxy
.
$modal
return
delRole
(
roleIds
)
.
confirm
(
'是否确认删除角色编号为"'
+
roleIds
+
'"的数据项?'
)
}).
then
(()
=>
{
.
then
(
function
()
{
getList
()
return
delRole
(
roleIds
)
proxy
.
$modal
.
msgSuccess
(
"删除成功"
)
})
}).
catch
(()
=>
{})
.
then
(()
=>
{
getList
()
proxy
.
$modal
.
msgSuccess
(
'删除成功'
)
})
.
catch
(()
=>
{})
}
}
/** 导出按钮操作 */
/** 导出按钮操作 */
function
handleExport
()
{
function
handleExport
()
{
proxy
.
download
(
"system/role/export"
,
{
proxy
.
download
(
...
queryParams
.
value
,
'system/role/export'
,
},
`role_
${
new
Date
().
getTime
()}
.xlsx`
)
{
...
queryParams
.
value
},
`role_
${
new
Date
().
getTime
()}
.xlsx`
)
}
}
/** 多选框选中数据 */
/** 多选框选中数据 */
...
@@ -346,23 +489,36 @@ function handleSelectionChange(selection) {
...
@@ -346,23 +489,36 @@ function handleSelectionChange(selection) {
/** 角色状态修改 */
/** 角色状态修改 */
function
handleStatusChange
(
row
)
{
function
handleStatusChange
(
row
)
{
let
text
=
row
.
status
===
"0"
?
"启用"
:
"停用"
console
.
log
(
'row'
,
row
.
status
)
proxy
.
$modal
.
confirm
(
'确认要"'
+
text
+
'""'
+
row
.
roleName
+
'"角色吗?'
).
then
(
function
()
{
return
changeRoleStatus
(
row
.
roleId
,
row
.
status
)
const
newStatus
=
row
.
status
===
0
?
0
:
1
// 获取切换后的新状态
}).
then
(()
=>
{
const
text
=
newStatus
===
1
?
'停用'
:
'启用'
// 根据新状态显示文本
proxy
.
$modal
.
msgSuccess
(
text
+
"成功"
)
console
.
log
(
'newStatus'
,
newStatus
)
}).
catch
(
function
()
{
proxy
.
$modal
row
.
status
=
row
.
status
===
"0"
?
"1"
:
"0"
.
confirm
(
`确认要
${
text
}
"
${
row
.
roleName
}
"角色吗?`
)
})
.
then
(
function
()
{
return
roleStatusChange
(
row
.
roleBizId
,
newStatus
).
then
(()
=>
{
proxy
.
$modal
.
msgSuccess
(
`
${
text
}
成功`
)
// 请求成功后,更新状态
row
.
status
=
newStatus
getList
()
})
})
.
catch
(()
=>
{
// 操作取消时恢复原状态
row
.
status
=
row
.
status
===
1
?
0
:
1
// 用户取消操作,保持原状态不变
// 这里不需要做任何操作,因为switch会自动回滚
})
}
}
/** 更多操作 */
/** 更多操作 */
function
handleCommand
(
command
,
row
)
{
function
handleCommand
(
command
,
row
)
{
switch
(
command
)
{
switch
(
command
)
{
case
"handleDataScope"
:
case
'handleDataScope'
:
handleDataScope
(
row
)
handleDataScope
(
row
)
break
break
case
"handleAuthUser"
:
case
'handleAuthUser'
:
handleAuthUser
(
row
)
handleAuthUser
(
row
)
break
break
default
:
default
:
...
@@ -372,7 +528,7 @@ function handleCommand(command, row) {
...
@@ -372,7 +528,7 @@ function handleCommand(command, row) {
/** 分配用户 */
/** 分配用户 */
function
handleAuthUser
(
row
)
{
function
handleAuthUser
(
row
)
{
router
.
push
(
"/system/role-auth/user/"
+
row
.
roleId
)
router
.
push
(
'/system/role-auth/user/'
+
row
.
roleId
)
}
}
/** 查询菜单树结构 */
/** 查询菜单树结构 */
...
@@ -406,14 +562,14 @@ function reset() {
...
@@ -406,14 +562,14 @@ function reset() {
roleName
:
undefined
,
roleName
:
undefined
,
roleKey
:
undefined
,
roleKey
:
undefined
,
roleSort
:
0
,
roleSort
:
0
,
status
:
"0"
,
status
:
'0'
,
menuIds
:
[],
menuIds
:
[],
deptIds
:
[],
deptIds
:
[],
menuCheckStrictly
:
true
,
menuCheckStrictly
:
true
,
deptCheckStrictly
:
true
,
deptCheckStrictly
:
true
,
remark
:
undefined
remark
:
undefined
}
}
proxy
.
resetForm
(
"roleRef"
)
proxy
.
resetForm
(
'roleRef'
)
}
}
/** 添加角色 */
/** 添加角色 */
...
@@ -421,30 +577,22 @@ function handleAdd() {
...
@@ -421,30 +577,22 @@ function handleAdd() {
reset
()
reset
()
getMenuTreeselect
()
getMenuTreeselect
()
open
.
value
=
true
open
.
value
=
true
title
.
value
=
"添加角色"
title
.
value
=
'添加角色'
}
}
/** 修改角色 */
/** 修改角色 */
function
handleUpdate
(
row
)
{
function
handleUpdate
(
row
)
{
reset
()
reset
()
const
roleId
=
row
.
roleId
||
ids
.
value
const
roleBizId
=
row
.
roleBizId
const
roleMenu
=
getRoleMenuTreeselect
(
roleId
)
getRoleDetail
(
roleBizId
).
then
(
response
=>
{
getRole
(
roleId
).
then
(
response
=>
{
if
(
response
.
code
===
200
)
{
form
.
value
=
response
.
data
form
.
value
=
response
.
data
form
.
value
.
roleSort
=
Number
(
form
.
value
.
roleSort
)
open
.
value
=
true
open
.
value
=
true
title
.
value
=
'修改角色'
nextTick
(()
=>
{
}
else
{
roleMenu
.
then
((
res
)
=>
{
proxy
.
$modal
.
msgError
(
response
.
msg
)
let
checkedKeys
=
res
.
checkedKeys
}
checkedKeys
.
forEach
((
v
)
=>
{
nextTick
(()
=>
{
menuRef
.
value
.
setChecked
(
v
,
true
,
false
)
})
})
})
})
})
})
title
.
value
=
"修改角色"
}
}
/** 根据角色ID查询菜单树结构 */
/** 根据角色ID查询菜单树结构 */
...
@@ -465,12 +613,12 @@ function getDeptTree(roleId) {
...
@@ -465,12 +613,12 @@ function getDeptTree(roleId) {
/** 树权限(展开/折叠)*/
/** 树权限(展开/折叠)*/
function
handleCheckedTreeExpand
(
value
,
type
)
{
function
handleCheckedTreeExpand
(
value
,
type
)
{
if
(
type
==
"menu"
)
{
if
(
type
==
'menu'
)
{
let
treeList
=
menuOptions
.
value
let
treeList
=
menuOptions
.
value
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
menuRef
.
value
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
menuRef
.
value
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
}
}
}
else
if
(
type
==
"dept"
)
{
}
else
if
(
type
==
'dept'
)
{
let
treeList
=
deptOptions
.
value
let
treeList
=
deptOptions
.
value
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
treeList
.
length
;
i
++
)
{
deptRef
.
value
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
deptRef
.
value
.
store
.
nodesMap
[
treeList
[
i
].
id
].
expanded
=
value
...
@@ -480,18 +628,18 @@ function handleCheckedTreeExpand(value, type) {
...
@@ -480,18 +628,18 @@ function handleCheckedTreeExpand(value, type) {
/** 树权限(全选/全不选) */
/** 树权限(全选/全不选) */
function
handleCheckedTreeNodeAll
(
value
,
type
)
{
function
handleCheckedTreeNodeAll
(
value
,
type
)
{
if
(
type
==
"menu"
)
{
if
(
type
==
'menu'
)
{
menuRef
.
value
.
setCheckedNodes
(
value
?
menuOptions
.
value
:
[])
menuRef
.
value
.
setCheckedNodes
(
value
?
menuOptions
.
value
:
[])
}
else
if
(
type
==
"dept"
)
{
}
else
if
(
type
==
'dept'
)
{
deptRef
.
value
.
setCheckedNodes
(
value
?
deptOptions
.
value
:
[])
deptRef
.
value
.
setCheckedNodes
(
value
?
deptOptions
.
value
:
[])
}
}
}
}
/** 树权限(父子联动) */
/** 树权限(父子联动) */
function
handleCheckedTreeConnect
(
value
,
type
)
{
function
handleCheckedTreeConnect
(
value
,
type
)
{
if
(
type
==
"menu"
)
{
if
(
type
==
'menu'
)
{
form
.
value
.
menuCheckStrictly
=
value
?
true
:
false
form
.
value
.
menuCheckStrictly
=
value
?
true
:
false
}
else
if
(
type
==
"dept"
)
{
}
else
if
(
type
==
'dept'
)
{
form
.
value
.
deptCheckStrictly
=
value
?
true
:
false
form
.
value
.
deptCheckStrictly
=
value
?
true
:
false
}
}
}
}
...
@@ -508,22 +656,24 @@ function getMenuAllCheckedKeys() {
...
@@ -508,22 +656,24 @@ function getMenuAllCheckedKeys() {
/** 提交按钮 */
/** 提交按钮 */
function
submitForm
()
{
function
submitForm
()
{
proxy
.
$refs
[
"roleRef"
].
validate
(
valid
=>
{
proxy
.
$refs
[
'roleRef'
].
validate
(
valid
=>
{
if
(
valid
)
{
if
(
valid
)
{
if
(
form
.
value
.
roleId
!=
undefined
)
{
if
(
form
.
value
.
roleBizId
!=
undefined
)
{
form
.
value
.
menuIds
=
getMenuAllCheckedKeys
()
roleUpdate
(
form
.
value
).
then
(
response
=>
{
updateRole
(
form
.
value
).
then
(
response
=>
{
if
(
response
.
code
===
200
)
{
proxy
.
$modal
.
msgSuccess
(
"修改成功"
)
proxy
.
$modal
.
msgSuccess
(
'修改成功'
)
open
.
value
=
false
open
.
value
=
false
getList
()
getList
()
}
else
{
proxy
.
$modal
.
msgError
(
response
.
msg
)
}
})
})
}
else
{
}
else
{
form
.
value
.
menuIds
=
getMenuAllCheckedKeys
()
// addRole(form.value).then(response => {
addRole
(
form
.
value
).
then
(
response
=>
{
// proxy.$modal.msgSuccess('新增成功')
proxy
.
$modal
.
msgSuccess
(
"新增成功"
)
// open.value = false
open
.
value
=
false
// getList()
getList
()
// })
})
}
}
}
}
})
})
...
@@ -537,7 +687,7 @@ function cancel() {
...
@@ -537,7 +687,7 @@ function cancel() {
/** 选择角色权限范围触发 */
/** 选择角色权限范围触发 */
function
dataScopeSelectChange
(
value
)
{
function
dataScopeSelectChange
(
value
)
{
if
(
value
!==
"2"
)
{
if
(
value
!==
'2'
)
{
deptRef
.
value
.
setCheckedKeys
([])
deptRef
.
value
.
setCheckedKeys
([])
}
}
}
}
...
@@ -559,7 +709,7 @@ function handleDataScope(row) {
...
@@ -559,7 +709,7 @@ function handleDataScope(row) {
})
})
})
})
})
})
title
.
value
=
"分配数据权限"
title
.
value
=
'分配数据权限'
}
}
/** 提交按钮(数据权限) */
/** 提交按钮(数据权限) */
...
@@ -567,7 +717,7 @@ function submitDataScope() {
...
@@ -567,7 +717,7 @@ function submitDataScope() {
if
(
form
.
value
.
roleId
!=
undefined
)
{
if
(
form
.
value
.
roleId
!=
undefined
)
{
form
.
value
.
deptIds
=
getDeptAllCheckedKeys
()
form
.
value
.
deptIds
=
getDeptAllCheckedKeys
()
dataScope
(
form
.
value
).
then
(
response
=>
{
dataScope
(
form
.
value
).
then
(
response
=>
{
proxy
.
$modal
.
msgSuccess
(
"修改成功"
)
proxy
.
$modal
.
msgSuccess
(
'修改成功'
)
openDataScope
.
value
=
false
openDataScope
.
value
=
false
getList
()
getList
()
})
})
...
...
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