From ee0ac825f26251ecc64879d7a244106e42a91228 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Mar 2025 18:13:02 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=A7=92=E8=89=B2=20role=20?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=2090%=EF=BC=88?= =?UTF-8?q?=E5=9F=BA=E4=BA=8E=20VbenTree=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/assign-data-permission-form.vue | 82 ++++++++++++++++--- 1 file changed, 69 insertions(+), 13 deletions(-) diff --git a/apps/web-antd/src/views/system/role/modules/assign-data-permission-form.vue b/apps/web-antd/src/views/system/role/modules/assign-data-permission-form.vue index 9809685ca..66e21ded5 100644 --- a/apps/web-antd/src/views/system/role/modules/assign-data-permission-form.vue +++ b/apps/web-antd/src/views/system/role/modules/assign-data-permission-form.vue @@ -4,13 +4,13 @@ import type { SystemDeptApi } from '#/api/system/dept'; import { VbenTree } from '@vben/common-ui'; import { useVbenModal } from '@vben/common-ui'; -import { Button, message } from 'ant-design-vue'; +import { message, Checkbox } from 'ant-design-vue'; import { ref } from 'vue'; import { $t } from '#/locales'; import { useVbenForm } from '#/adapter/form'; import { getRole } from '#/api/system/role'; -import { assignRoleDataScope} from '#/api/system/permission'; +import { assignRoleDataScope } from '#/api/system/permission'; import { getDeptList } from '#/api/system/dept'; import { handleTree } from '#/utils/tree'; @@ -22,6 +22,11 @@ const formData = ref(); const deptTree = ref([]); // 部门树 const deptLoading = ref(false); // 加载部门列表 +const isAllSelected = ref(false); // 全选状态 +const isExpanded = ref(true); // 展开状态 +const isDeptCheckStrictly = ref(true); // 父子联动状态 + +const treeRef = ref(); // 树组件引用 const [Form, formApi] = useVbenForm({ layout: 'horizontal', @@ -29,11 +34,6 @@ const [Form, formApi] = useVbenForm({ showDefaultActions: false, }); -function resetForm() { - formApi.resetForm(); - formApi.setValues(formData.value || {}); -} - const [Modal, modalApi] = useVbenModal({ async onConfirm() { const { valid } = await formApi.validate(); @@ -46,7 +46,10 @@ const [Modal, modalApi] = useVbenModal({ await assignRoleDataScope({ roleId: data.id, dataScope: data.dataScope, - dataScopeDeptIds: data.dataScope === SystemDataScopeEnum.DEPT_CUSTOM ? data.dataScopeDeptIds : undefined, + dataScopeDeptIds: + data.dataScope === SystemDataScopeEnum.DEPT_CUSTOM + ? data.dataScopeDeptIds + : undefined, }); await modalApi.close(); emit('success'); @@ -88,6 +91,51 @@ async function loadDeptTree() { deptLoading.value = false; } } + +/** 全选/全不选 */ +function toggleSelectAll() { + isAllSelected.value = !isAllSelected.value; + if (treeRef.value) { + // 根据VbenTree组件的API,调用相应方法全选或全不选 + if (isAllSelected.value) { + // 全选逻辑,可能需要根据实际实现调整 + const allIds = getAllNodeIds(deptTree.value); + formApi.setFieldValue('dataScopeDeptIds', allIds); + } else { + // 全不选 + formApi.setFieldValue('dataScopeDeptIds', []); + } + } +} + +/** 展开/折叠所有节点 */ +function toggleExpandAll() { + isExpanded.value = !isExpanded.value; + debugger + if (treeRef.value) { + if (isExpanded.value) { + treeRef.value.expandAll(); // 展开所有节点 + } else { + treeRef.value.collapseAll(); // 折叠所有节点 + } + } +} + +/** 切换父子联动 */ +function toggleCheckStrictly() { + isDeptCheckStrictly.value = !isDeptCheckStrictly.value; +} + +/** 递归获取所有节点ID */ +function getAllNodeIds(nodes, ids = []) { + nodes.forEach((node) => { + ids.push(node.id); + if (node.children && node.children.length > 0) { + getAllNodeIds(node.children, ids); + } + }); + return ids; +}