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; +}