|
|
@ -3,22 +3,32 @@ |
|
|
@ 时间: 2023-05-30 13:52:12 |
|
|
@ 时间: 2023-05-30 13:52:12 |
|
|
@ 备注: 配置权限 |
|
|
@ 备注: 配置权限 |
|
|
--> |
|
|
--> |
|
|
<script lang='ts' setup> |
|
|
<script lang="ts" setup> |
|
|
import { setupPage,systemCont,systemMenusTypeTree,submintPostPower } from "@/api/system/roleapi/types"; |
|
|
import { |
|
|
import { getSystemType,getSystemPoewrTreeForRole,getGrantRolePowers,grantSystemRolePoewr } from "@/api/system/roleapi/postrole"; |
|
|
setupPage, |
|
|
|
|
|
systemCont, |
|
|
|
|
|
systemMenusTypeTree, |
|
|
|
|
|
submintPostPower, |
|
|
|
|
|
} from "@/api/system/roleapi/types"; |
|
|
|
|
|
import { |
|
|
|
|
|
getSystemType, |
|
|
|
|
|
getSystemPoewrTreeForRole, |
|
|
|
|
|
getGrantRolePowers, |
|
|
|
|
|
grantSystemRolePoewr, |
|
|
|
|
|
} from "@/api/system/roleapi/postrole"; |
|
|
const props = defineProps({ |
|
|
const props = defineProps({ |
|
|
powerIsShow:{ |
|
|
powerIsShow: { |
|
|
type:Boolean, |
|
|
type: Boolean, |
|
|
default:false |
|
|
default: false, |
|
|
}, |
|
|
}, |
|
|
roleId:{ |
|
|
roleId: { |
|
|
type:String, |
|
|
type: String, |
|
|
default:'' |
|
|
default: "", |
|
|
|
|
|
}, |
|
|
|
|
|
roleTitle: { |
|
|
|
|
|
type: String, |
|
|
|
|
|
default: "配置权限", |
|
|
}, |
|
|
}, |
|
|
roleTitle:{ |
|
|
|
|
|
type:String, |
|
|
|
|
|
default:'配置权限' |
|
|
|
|
|
} |
|
|
|
|
|
}); |
|
|
}); |
|
|
/** |
|
|
/** |
|
|
* 树形组件 |
|
|
* 树形组件 |
|
|
@ -28,35 +38,35 @@ const powerLoading = ref(false); |
|
|
const powerLoadingSub = ref(false); |
|
|
const powerLoadingSub = ref(false); |
|
|
const emits = defineEmits(["update:powerIsShow"]); //父级元素 |
|
|
const emits = defineEmits(["update:powerIsShow"]); //父级元素 |
|
|
/** |
|
|
/** |
|
|
* 系统选择标签 |
|
|
* 系统选择标签 |
|
|
*/ |
|
|
*/ |
|
|
const systemTabs = ref('') |
|
|
const systemTabs = ref(""); |
|
|
/** |
|
|
/** |
|
|
* 系统列表 |
|
|
* 系统列表 |
|
|
*/ |
|
|
*/ |
|
|
const orgPostTreeContList = ref<systemCont[]>([]); |
|
|
const orgPostTreeContList = ref<systemCont[]>([]); |
|
|
/** |
|
|
/** |
|
|
* 管理范围 |
|
|
* 管理范围 |
|
|
*/ |
|
|
*/ |
|
|
const manageScope = ref(1) |
|
|
const manageScope = ref(0); |
|
|
/** |
|
|
/** |
|
|
* 树形结构约束 |
|
|
* 树形结构约束 |
|
|
*/ |
|
|
*/ |
|
|
const systemMenuTreeProps = { |
|
|
const systemMenuTreeProps = { |
|
|
children: "child", |
|
|
children: "child", |
|
|
label: "name", |
|
|
label: "name", |
|
|
} |
|
|
}; |
|
|
/** |
|
|
/** |
|
|
* 分页参数 |
|
|
* 分页参数 |
|
|
*/ |
|
|
*/ |
|
|
const setupPageCont = reactive<setupPage>({ |
|
|
const setupPageCont = reactive<setupPage>({ |
|
|
page:1, |
|
|
page: 1, |
|
|
pagesize:100000 |
|
|
pagesize: 100000, |
|
|
}); |
|
|
}); |
|
|
/** |
|
|
/** |
|
|
* 弹窗显示控制 |
|
|
* 弹窗显示控制 |
|
|
*/ |
|
|
*/ |
|
|
const power_is_Show = computed({ |
|
|
const power_is_Show = computed({ |
|
|
get: () => props.powerIsShow, |
|
|
get: () => props.powerIsShow, |
|
|
set: (val) => { |
|
|
set: (val) => { |
|
|
emits("update:powerIsShow", val); |
|
|
emits("update:powerIsShow", val); |
|
|
@ -65,126 +75,148 @@ const systemMenuTreeProps = { |
|
|
/** |
|
|
/** |
|
|
* 关闭弹窗回调 |
|
|
* 关闭弹窗回调 |
|
|
*/ |
|
|
*/ |
|
|
function handleClosePower () { |
|
|
function handleClosePower() { |
|
|
emits("update:powerIsShow", false); |
|
|
emits("update:powerIsShow", false); |
|
|
initData(); |
|
|
initData(); |
|
|
} |
|
|
} |
|
|
/** |
|
|
/** |
|
|
* 初始化数据 |
|
|
* 初始化数据 |
|
|
*/ |
|
|
*/ |
|
|
function initData(){ |
|
|
function initData() { |
|
|
powerLoading.value = false; |
|
|
powerLoading.value = false; |
|
|
powerLoadingSub.value = false |
|
|
powerLoadingSub.value = false; |
|
|
setupPageCont.page = 1; |
|
|
setupPageCont.page = 1; |
|
|
setupPageCont.pagesize = 100000; |
|
|
setupPageCont.pagesize = 100000; |
|
|
systemTabs.value = ""; |
|
|
systemTabs.value = ""; |
|
|
manageScope.value = 1; |
|
|
manageScope.value = 0; |
|
|
gainPowerAry.value=[]; |
|
|
gainPowerAry.value = []; |
|
|
} |
|
|
} |
|
|
/** |
|
|
/** |
|
|
* 监听数据 |
|
|
* 监听数据 |
|
|
*/ |
|
|
*/ |
|
|
watch(() => props.powerIsShow,() => { |
|
|
watch( |
|
|
if(props.powerIsShow){ |
|
|
() => props.powerIsShow, |
|
|
getSystemTypeList() |
|
|
() => { |
|
|
}else{ |
|
|
if (props.powerIsShow) { |
|
|
initData() |
|
|
getSystemTypeList(); |
|
|
|
|
|
} else { |
|
|
|
|
|
initData(); |
|
|
} |
|
|
} |
|
|
}); |
|
|
} |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 获取系统分类 |
|
|
* 获取系统分类 |
|
|
*/ |
|
|
*/ |
|
|
function getSystemTypeList() { |
|
|
function getSystemTypeList() { |
|
|
getSystemType(setupPageCont) |
|
|
getSystemType(setupPageCont).then((data) => { |
|
|
.then((data)=>{ |
|
|
|
|
|
// console.log(data); |
|
|
// console.log(data); |
|
|
orgPostTreeContList.value = data.data.list; |
|
|
orgPostTreeContList.value = data.data.list; |
|
|
if(data.data.list[0]){ |
|
|
if (data.data.list[0]) { |
|
|
systemTabs.value = data.data.list[0].coder |
|
|
systemTabs.value = data.data.list[0].coder; |
|
|
} |
|
|
} |
|
|
}) |
|
|
}); |
|
|
} |
|
|
} |
|
|
/** |
|
|
/** |
|
|
* 权限菜单列表 |
|
|
* 权限菜单列表 |
|
|
*/ |
|
|
*/ |
|
|
const systemPowerMenusTree = ref<systemMenusTypeTree[]>([]); |
|
|
const systemPowerMenusTree = ref<systemMenusTypeTree[]>([]); |
|
|
/** |
|
|
/** |
|
|
* 已授权的权限 |
|
|
* 已授权的权限 |
|
|
*/ |
|
|
*/ |
|
|
const gainPowerAry = ref<String[]>([]) |
|
|
const gainPowerAry = ref<String[]>([]); |
|
|
/** |
|
|
/** |
|
|
* 获取菜单 |
|
|
* 获取菜单 |
|
|
*/ |
|
|
*/ |
|
|
function getSysMenuTree(sysKey:string){ |
|
|
function getSysMenuTree(sysKey: string) { |
|
|
powerLoading.value = true; |
|
|
powerLoading.value = true; |
|
|
systemPowerMenusTree.value =[] |
|
|
systemPowerMenusTree.value = []; |
|
|
getSystemPoewrTreeForRole({name:sysKey,roleid:props.roleId}) |
|
|
getSystemPoewrTreeForRole({ name: sysKey, roleid: props.roleId }) |
|
|
.then(({ data })=>{ |
|
|
.then(({ data }) => { |
|
|
systemPowerMenusTree.value = data; |
|
|
systemPowerMenusTree.value = data; |
|
|
getGrantRolePowers({name:sysKey,roleid:props.roleId}) |
|
|
getGrantRolePowers({ name: sysKey, roleid: props.roleId }) |
|
|
.then(({data})=>{ |
|
|
.then(({ data }) => { |
|
|
// console.log("获取菜单====>",data); |
|
|
// console.log("获取菜单====>",data); |
|
|
manageScope.value = data.level |
|
|
manageScope.value = data.level; |
|
|
if(data != null){ |
|
|
if (data != null) { |
|
|
gainPowerAry.value= data.powerList |
|
|
gainPowerAry.value = data.powerList; |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
.finally(()=>{ |
|
|
.finally(() => { |
|
|
powerLoading.value = false; |
|
|
powerLoading.value = false; |
|
|
setCheckedKeys(); |
|
|
setCheckedKeys(); |
|
|
|
|
|
}); |
|
|
}) |
|
|
}) |
|
|
}) |
|
|
.finally(() => { |
|
|
.finally(()=>{powerLoading.value=false}) |
|
|
powerLoading.value = false; |
|
|
|
|
|
}); |
|
|
} |
|
|
} |
|
|
/** |
|
|
/** |
|
|
* 设置已经授权的权限 |
|
|
* 设置已经授权的权限 |
|
|
*/ |
|
|
*/ |
|
|
function setCheckedKeys(){ |
|
|
function setCheckedKeys() { |
|
|
// console.log("设置已经授权的权限",gainPowerAry.value) |
|
|
// console.log("设置已经授权的权限",gainPowerAry.value) |
|
|
gainPowerAry.value.forEach((menuId) => |
|
|
gainPowerAry.value.forEach((menuId) => menuRef.value.setChecked(menuId, true, false)); |
|
|
menuRef.value.setChecked(menuId, true, false) |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
} |
|
|
watch(() => systemTabs.value,() => { |
|
|
watch( |
|
|
|
|
|
() => systemTabs.value, |
|
|
|
|
|
() => { |
|
|
powerLoading.value = true; |
|
|
powerLoading.value = true; |
|
|
if(systemTabs.value != "" && systemTabs.value != null){ |
|
|
if (systemTabs.value != "" && systemTabs.value != null) { |
|
|
getSysMenuTree(systemTabs.value) |
|
|
getSysMenuTree(systemTabs.value); |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
}); |
|
|
); |
|
|
/** |
|
|
/** |
|
|
* 授权 |
|
|
* 授权 |
|
|
*/ |
|
|
*/ |
|
|
function enterEmpowerClick(){ |
|
|
function enterEmpowerClick() { |
|
|
powerLoadingSub.value = true; |
|
|
powerLoadingSub.value = true; |
|
|
const checkedMenuTrue:systemMenusTypeTree[] = menuRef.value |
|
|
const checkedMenuTrue: systemMenusTypeTree[] = menuRef.value |
|
|
.getCheckedNodes(false, true) |
|
|
.getCheckedNodes(false, true) |
|
|
.map((node: any) => node); |
|
|
.map((node: any) => node); |
|
|
// console.log("确定授权", checkedMenuTrue); |
|
|
// console.log("确定授权", checkedMenuTrue); |
|
|
checkedMenuTrue.forEach(item=>{ |
|
|
checkedMenuTrue.forEach((item) => { |
|
|
item.child=[]; |
|
|
item.child = []; |
|
|
|
|
|
}); |
|
|
|
|
|
grantSystemRolePoewr({ |
|
|
|
|
|
systemname: systemTabs.value, |
|
|
|
|
|
roleid: props.roleId, |
|
|
|
|
|
level: manageScope.value * 1, |
|
|
|
|
|
power: checkedMenuTrue, |
|
|
}) |
|
|
}) |
|
|
grantSystemRolePoewr({systemname:systemTabs.value,roleid:props.roleId,level:manageScope.value*1,power:checkedMenuTrue}) |
|
|
.then((data) => { |
|
|
.then((data)=>{ |
|
|
|
|
|
// console.log("确定授权返回----》", data); |
|
|
// console.log("确定授权返回----》", data); |
|
|
ElMessage.success("授权成功"); |
|
|
ElMessage.success("授权成功"); |
|
|
handleClosePower(); |
|
|
handleClosePower(); |
|
|
}).finally(()=>{powerLoadingSub.value = false;}) |
|
|
}) |
|
|
|
|
|
.finally(() => { |
|
|
|
|
|
powerLoadingSub.value = false; |
|
|
|
|
|
}); |
|
|
} |
|
|
} |
|
|
</script> |
|
|
</script> |
|
|
<template> |
|
|
<template> |
|
|
<el-dialog v-model="power_is_Show" custom-class="dialog_box" :title="roleTitle" top="50px" :before-close="handleClosePower"> |
|
|
<el-dialog |
|
|
|
|
|
v-model="power_is_Show" |
|
|
|
|
|
custom-class="dialog_box" |
|
|
|
|
|
:title="roleTitle" |
|
|
|
|
|
top="50px" |
|
|
|
|
|
:before-close="handleClosePower" |
|
|
|
|
|
> |
|
|
<el-container> |
|
|
<el-container> |
|
|
<el-aside width="125px"> |
|
|
<el-aside width="125px"> |
|
|
<el-tabs v-model="systemTabs" tab-position="left" class="demo-tabs tabs_box" > |
|
|
<el-tabs v-model="systemTabs" tab-position="left" class="demo-tabs tabs_box"> |
|
|
<el-tab-pane v-for="item in orgPostTreeContList" :key="item.key" :label="item.title" :name="item.coder"></el-tab-pane> |
|
|
<el-tab-pane |
|
|
|
|
|
v-for="item in orgPostTreeContList" |
|
|
|
|
|
:key="item.key" |
|
|
|
|
|
:label="item.title" |
|
|
|
|
|
:name="item.coder" |
|
|
|
|
|
></el-tab-pane> |
|
|
</el-tabs> |
|
|
</el-tabs> |
|
|
</el-aside> |
|
|
</el-aside> |
|
|
<el-main> |
|
|
<el-main> |
|
|
<el-radio-group v-model="manageScope" style="margin-bottom: 10px"> |
|
|
<el-radio-group v-model="manageScope" style="margin-bottom: 10px"> |
|
|
|
|
|
<el-radio-button label="0">默认</el-radio-button> |
|
|
<el-radio-button label="1">本岗位</el-radio-button> |
|
|
<el-radio-button label="1">本岗位</el-radio-button> |
|
|
<el-radio-button label="2">本部门</el-radio-button> |
|
|
<el-radio-button label="2">本部门</el-radio-button> |
|
|
<el-radio-button label="3">本分部</el-radio-button> |
|
|
<el-radio-button label="3">本分部</el-radio-button> |
|
|
@ -200,19 +232,12 @@ function enterEmpowerClick(){ |
|
|
:default-expand-all="true" |
|
|
:default-expand-all="true" |
|
|
:props="systemMenuTreeProps" |
|
|
:props="systemMenuTreeProps" |
|
|
> |
|
|
> |
|
|
<template #default="{ node,data }"> |
|
|
<template #default="{ node, data }"> |
|
|
<span class="tree_sapn">{{ node.label }}</span> |
|
|
<span class="tree_sapn">{{ node.label }}</span> |
|
|
<el-tag |
|
|
<el-tag v-if="data.attribute === 2" type="warning">目录</el-tag> |
|
|
v-if="data.attribute === 2" |
|
|
<el-tag v-if="data.attribute === 1" type="success">菜单</el-tag> |
|
|
type="warning" |
|
|
<el-tag v-if="data.attribute === 4" type="danger">按钮</el-tag> |
|
|
>目录</el-tag> |
|
|
<el-tag v-if="data.attribute === 3" type="info">外链</el-tag> |
|
|
<el-tag v-if="data.attribute === 1" type="success" |
|
|
|
|
|
>菜单</el-tag> |
|
|
|
|
|
<el-tag v-if="data.attribute ===4" type="danger" |
|
|
|
|
|
>按钮</el-tag> |
|
|
|
|
|
<el-tag v-if="data.attribute === 3" type="info" |
|
|
|
|
|
>外链</el-tag> |
|
|
|
|
|
|
|
|
|
|
|
</template> |
|
|
</template> |
|
|
</el-tree> |
|
|
</el-tree> |
|
|
</el-scrollbar> |
|
|
</el-scrollbar> |
|
|
@ -221,30 +246,31 @@ function enterEmpowerClick(){ |
|
|
<template #footer> |
|
|
<template #footer> |
|
|
<span class="dialog-footer"> |
|
|
<span class="dialog-footer"> |
|
|
<el-button type="danger" @click="handleClosePower">取消</el-button> |
|
|
<el-button type="danger" @click="handleClosePower">取消</el-button> |
|
|
<el-button type="primary" :loading="powerLoadingSub" @click="enterEmpowerClick">授权</el-button> |
|
|
<el-button type="primary" :loading="powerLoadingSub" @click="enterEmpowerClick" |
|
|
|
|
|
>授权</el-button |
|
|
|
|
|
> |
|
|
</span> |
|
|
</span> |
|
|
</template> |
|
|
</template> |
|
|
</el-dialog> |
|
|
</el-dialog> |
|
|
</template> |
|
|
</template> |
|
|
<style lang='scss' scoped> |
|
|
<style lang="scss" scoped> |
|
|
.el-dialog__body{ |
|
|
.el-dialog__body { |
|
|
padding: 0; |
|
|
padding: 0; |
|
|
} |
|
|
} |
|
|
.tabs_box{ |
|
|
.tabs_box { |
|
|
height: calc(100vh - 500px); |
|
|
height: calc(100vh - 500px); |
|
|
.tab_pane_box{ |
|
|
.tab_pane_box { |
|
|
height: calc(100vh - 550px); |
|
|
height: calc(100vh - 550px); |
|
|
overflow: hidden; |
|
|
overflow: hidden; |
|
|
overflow-y: auto; |
|
|
overflow-y: auto; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
.tab_pane_box{ |
|
|
.tab_pane_box { |
|
|
height: calc(100vh - 550px); |
|
|
height: calc(100vh - 550px); |
|
|
overflow: hidden; |
|
|
overflow: hidden; |
|
|
overflow-y: auto; |
|
|
overflow-y: auto; |
|
|
} |
|
|
} |
|
|
.tree_sapn{ |
|
|
.tree_sapn { |
|
|
padding: 0 15px; |
|
|
padding: 0 15px; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
</style> |
|
|
</style> |
|
|
|