<template>
|
<el-dialog
|
v-model="visible"
|
title="角色权限配置"
|
width="620px"
|
append-to-body
|
:close-on-click-modal="false"
|
@closed="handleClosed"
|
>
|
<el-tabs type="border-card">
|
<el-tab-pane label="后台管理">
|
<el-tree
|
ref="treeMenu"
|
:data="menuGrantList"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObj"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="移动app">
|
<el-tree
|
ref="treeMenuApp"
|
:data="menuGrantListApp"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjApp"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="新大屏菜单">
|
<el-tree
|
ref="treeMenuWebNew"
|
:data="menuGrantListNew"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjNew"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="无人机管控">
|
<el-tree
|
ref="droneControl"
|
:data="menuGrantListDroneControl"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="droneControlMenuTreeObj"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="任务工单">
|
<el-tree
|
ref="workRef"
|
:data="menuGrantListWord"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjWork"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="大屏菜单">
|
<el-tree
|
ref="treeMenuWebOld"
|
:data="menuGrantListOld"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjOld"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
</el-tabs>
|
<template #footer>
|
<el-button @click="visible = false">取 消</el-button>
|
<el-button type="primary" @click="submit">确 定</el-button>
|
</template>
|
</el-dialog>
|
</template>
|
|
<script setup>
|
import { ref } from 'vue'
|
import { grant, grantTree, getRole } from '@/api/system/role'
|
import { saveOperationLog } from '@ztzf/apis'
|
import { useRoute } from 'vue-router'
|
|
const visible = ref(false)
|
const roleId = ref('')
|
const treeProps = {
|
label: 'title',
|
value: 'key',
|
}
|
const menuGrantList = ref([])
|
const menuGrantListApp = ref([])
|
const menuGrantListOld = ref([])
|
const menuGrantListNew = ref([])
|
const menuGrantListDroneControl = ref([])
|
const menuGrantListWord = ref([])
|
const menuTreeObj = ref([])
|
const menuTreeObjApp = ref([])
|
const menuTreeObjOld = ref([])
|
const menuTreeObjNew = ref([])
|
const droneControlMenuTreeObj = ref([])
|
const menuTreeObjWork = ref([])
|
|
const treeMenu = ref(null)
|
const treeMenuApp = ref(null)
|
const treeMenuWebOld = ref(null)
|
const treeMenuWebNew = ref(null)
|
const workRef = ref(null)
|
const droneControl = ref(null)
|
|
const emit = defineEmits(['success'])
|
const route = useRoute()
|
|
function resetState() {
|
menuGrantList.value = []
|
menuGrantListApp.value = []
|
menuGrantListOld.value = []
|
menuGrantListNew.value = []
|
menuGrantListDroneControl.value = []
|
menuGrantListWord.value = []
|
menuTreeObj.value = []
|
menuTreeObjApp.value = []
|
menuTreeObjOld.value = []
|
menuTreeObjNew.value = []
|
droneControlMenuTreeObj.value = []
|
menuTreeObjWork.value = []
|
}
|
|
async function loadGrantTree(sysType, setter, keysSetter) {
|
const grantRes = await grantTree({ sysType })
|
setter.value = grantRes?.data?.data?.menu ?? []
|
const roleRes = await getRole(roleId.value)
|
keysSetter.value = roleRes?.data?.data?.menu ?? []
|
}
|
|
async function open({ roleId: id } = {}) {
|
roleId.value = id || ''
|
visible.value = true
|
resetState()
|
await Promise.all([
|
loadGrantTree(1, menuGrantList, menuTreeObj),
|
loadGrantTree(3, menuGrantListApp, menuTreeObjApp),
|
loadGrantTree(4, menuGrantListNew, menuTreeObjNew),
|
loadGrantTree(5, menuGrantListDroneControl, droneControlMenuTreeObj),
|
loadGrantTree(6, menuGrantListWord, menuTreeObjWork),
|
loadGrantTree(2, menuGrantListOld, menuTreeObjOld),
|
])
|
}
|
|
function submit() {
|
const menuList = treeMenu.value?.getCheckedKeys?.() ?? []
|
const menuListApp = treeMenuApp.value?.getCheckedKeys?.() ?? []
|
const menuListWebNew = treeMenuWebNew.value?.getCheckedKeys?.() ?? []
|
const menuListWebWork = workRef.value?.getCheckedKeys?.() ?? []
|
const menuListDroneControl = droneControl.value?.getCheckedKeys?.() ?? []
|
const menuListWebOld = treeMenuWebOld.value?.getCheckedKeys?.() ?? []
|
grant(
|
[roleId.value],
|
[...menuList, ...menuListApp, ...menuListWebNew, ...menuListDroneControl, ...menuListWebOld, ...menuListWebWork],
|
[],
|
[]
|
).then(() => {
|
saveOperationLog({
|
requestUri: route.path,
|
title: `${route.name || '角色管理'}-权限设置`,
|
type: 1,
|
})
|
visible.value = false
|
emit('success')
|
})
|
}
|
|
function handleClosed() {
|
resetState()
|
}
|
|
defineExpose({ open })
|
</script>
|