From fa3ac93010bea3805438ee3ab0a182bfbf7423da Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期一, 27 五月 2024 16:19:31 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/views/system/departUser/components/DepartRoleAuthDrawer.vue | 158 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 158 insertions(+), 0 deletions(-) diff --git a/src/views/system/departUser/components/DepartRoleAuthDrawer.vue b/src/views/system/departUser/components/DepartRoleAuthDrawer.vue new file mode 100644 index 0000000..10989df --- /dev/null +++ b/src/views/system/departUser/components/DepartRoleAuthDrawer.vue @@ -0,0 +1,158 @@ +<template> + <BasicDrawer + title="閮ㄩ棬瑙掕壊鏉冮檺閰嶇疆" + :width="650" + :loading="loading" + showFooter + okText="淇濆瓨骞跺叧闂�" + @ok="onSubmit(true)" + @close="onClose" + @register="registerDrawer" + > + <div> + <a-spin :spinning="loading"> + <template v-if="treeData.length > 0"> + <BasicTree + title="鎵�鎷ユ湁鐨勯儴闂ㄦ潈闄�" + toolbar + checkable + :treeData="treeData" + :checkedKeys="checkedKeys" + :selectedKeys="selectedKeys" + :expandedKeys="expandedKeys" + :checkStrictly="checkStrictly" + :clickRowToExpand="false" + @check="onCheck" + @expand="onExpand" + @select="onSelect" + > + <template #title="{ slotTitle, ruleFlag }"> + <span>{{ slotTitle }}</span> + <Icon v-if="ruleFlag" icon="ant-design:align-left-outlined" style="margin-left: 5px; color: red" /> + </template> + </BasicTree> + </template> + <a-empty v-else description="鏃犲彲閰嶇疆閮ㄩ棬鏉冮檺" /> + </a-spin> + </div> + + <template #centerFooter> + <a-button type="primary" :loading="loading" ghost @click="onSubmit(false)">浠呬繚瀛�</a-button> + </template> + </BasicDrawer> + <DepartRoleDataRuleDrawer @register="registerDataRuleDrawer" /> +</template> + +<script lang="ts" setup> + import { ref } from 'vue' + + import { BasicDrawer, useDrawer, useDrawerInner } from '/@/components/Drawer' + import { BasicTree } from '/@/components/Tree/index' + import { useMessage } from '/@/hooks/web/useMessage' + + import { queryDeptRolePermission, queryTreeListForDeptRole, saveDeptRolePermission } from '../depart.user.api' + import DepartRoleDataRuleDrawer from './DepartRoleDataRuleDrawer.vue' + + defineEmits(['register']) + const { createMessage } = useMessage() + const loading = ref(false) + const departId = ref('') + const roleId = ref('') + const treeData = ref<Array<any>>([]) + const checkedKeys = ref<Array<any>>([]) + const lastCheckedKeys = ref<Array<any>>([]) + const expandedKeys = ref<Array<any>>([]) + const selectedKeys = ref<Array<any>>([]) + const allTreeKeys = ref<Array<any>>([]) + const checkStrictly = ref(true) + + // 娉ㄥ唽鎶藉眽缁勪欢 + const [registerDrawer, { closeDrawer }] = useDrawerInner((data) => { + roleId.value = data.record.id + departId.value = data.record.departId + loadData() + }) + // 娉ㄥ唽鏁版嵁瑙勫垯鎺堟潈寮圭獥鎶藉眽 + const [registerDataRuleDrawer, dataRuleDrawer] = useDrawer() + + async function loadData() { + try { + loading.value = true + // 鐢ㄦ埛瑙掕壊鎺堟潈鍔熻兘锛屾煡璇㈣彍鍗曟潈闄愭爲 + const { ids, treeList } = await queryTreeListForDeptRole({ departId: departId.value }) + if (ids.length > 0) { + allTreeKeys.value = ids + expandedKeys.value = ids + treeData.value = treeList + // 鏌ヨ瑙掕壊鎺堟潈 + checkedKeys.value = await queryDeptRolePermission({ roleId: roleId.value }) + lastCheckedKeys.value = [checkedKeys.value] + } else { + reset() + } + } finally { + loading.value = false + } + } + + // 閲嶇疆椤甸潰 + function reset() { + treeData.value = [] + expandedKeys.value = [] + checkedKeys.value = [] + lastCheckedKeys.value = [] + loading.value = false + } + + // tree鍕鹃�夊閫夋浜嬩欢 + function onCheck(event) { + if (checkStrictly.value) { + checkedKeys.value = event.checked + } else { + checkedKeys.value = event + } + } + + // tree灞曞紑浜嬩欢 + function onExpand($expandedKeys) { + expandedKeys.value = $expandedKeys + } + + // tree閫変腑浜嬩欢 + function onSelect($selectedKeys, { selectedNodes }) { + if (selectedNodes[0]?.ruleFlag) { + let functionId = $selectedKeys[0] + dataRuleDrawer.openDrawer(true, { roleId, departId, functionId }) + } + selectedKeys.value = [] + } + + function doClose() { + reset() + closeDrawer() + } + + function onClose() { + reset() + } + + async function onSubmit(exit) { + try { + loading.value = true + let params = { + roleId: roleId.value, + permissionIds: checkedKeys.value.join(','), + lastpermissionIds: lastCheckedKeys.value.join(','), + } + await saveDeptRolePermission(params) + if (exit) { + doClose() + } + } finally { + loading.value = false + if (!exit) { + loadData() + } + } + } +</script> -- Gitblit v1.9.3