<template>
|
<el-dialog
|
class="command-page-view-dialog"
|
v-model="visible"
|
title="角色权限配置"
|
append-to-body
|
:close-on-click-modal="false"
|
destroy-on-close
|
@closed="handleClosed"
|
>
|
<el-tabs type="border-card">
|
<el-tab-pane label="任务工单">
|
<el-tree
|
class="command-tree"
|
ref="workRef"
|
:data="menuGrantListWord"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjWork"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
<el-tab-pane label="移动app">
|
<el-tree
|
class="command-tree"
|
ref="treeMenuApp"
|
:data="menuGrantListApp"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="menuTreeObjApp"
|
:props="treeProps"
|
/>
|
</el-tab-pane>
|
</el-tabs>
|
<template #footer>
|
<el-button color="#F2F3F5" @click="visible = false">取消</el-button>
|
<el-button color="#4C34FF" type="primary" @click="submit">确定</el-button>
|
</template>
|
|
<!-- 有用wu删,提供给保存接口,防止重置其他系统菜单 -->
|
<el-tree
|
v-show="false"
|
class="command-tree"
|
ref="droneControl"
|
:data="menuGrantListDroneControl"
|
show-checkbox
|
node-key="id"
|
:default-checked-keys="droneControlMenuTreeObj"
|
:props="treeProps"
|
/>
|
|
</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 menuGrantListApp = ref([])
|
const menuGrantListDroneControl = ref([])
|
const menuGrantListWord = ref([])
|
const menuTreeObjApp = ref([])
|
const droneControlMenuTreeObj = ref([])
|
const menuTreeObjWork = ref([])
|
|
const treeMenuApp = ref(null)
|
const workRef = ref(null)
|
const droneControl = ref(null)
|
|
const emit = defineEmits(['success'])
|
const route = useRoute()
|
|
function resetState() {
|
menuGrantListApp.value = []
|
menuGrantListDroneControl.value = []
|
menuGrantListWord.value = []
|
menuTreeObjApp.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(3, menuGrantListApp, menuTreeObjApp),
|
loadGrantTree(5, menuGrantListDroneControl, droneControlMenuTreeObj),
|
loadGrantTree(6, menuGrantListWord, menuTreeObjWork),
|
])
|
}
|
|
function submit() {
|
const menuListApp = treeMenuApp.value?.getCheckedKeys?.() ?? []
|
const menuListWebWork = workRef.value?.getCheckedKeys?.() ?? []
|
const menuListDroneControl = droneControl.value?.getCheckedKeys?.() ?? []
|
grant(
|
[roleId.value],
|
[...menuListApp, ...menuListDroneControl, ...menuListWebWork],
|
[],
|
[]
|
).then(() => {
|
saveOperationLog({
|
requestUri: route.path,
|
title: `${route.name || '角色管理'}-权限设置`,
|
type: 1,
|
})
|
visible.value = false
|
emit('success')
|
})
|
}
|
|
function handleClosed() {
|
resetState()
|
}
|
|
defineExpose({ open })
|
</script>
|