From 5eb708efd67798bb5b0dccd45d932b98b85462d3 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期一, 13 十月 2025 13:55:08 +0800
Subject: [PATCH] Merge branch 'dev-1.1.2' of http://120.26.58.240:8888/r/flexJobAdmin into dev-1.1.2
---
src/views/Permission/components/dialogAuthorizeV2.vue | 127 +++++++++++++++++------------------------
1 files changed, 53 insertions(+), 74 deletions(-)
diff --git a/src/views/Permission/components/dialogAuthorizeV2.vue b/src/views/Permission/components/dialogAuthorizeV2.vue
index f2ce5e5..9a272f7 100644
--- a/src/views/Permission/components/dialogAuthorizeV2.vue
+++ b/src/views/Permission/components/dialogAuthorizeV2.vue
@@ -24,7 +24,8 @@
default-expand-all
show-checkbox
ref="moduleTree"
- :default-checked-keys="checkedModules"
+ :default-checked-keys="defaultCheckedKeys"
+ @check="handleModuleCheck"
>
<template #default="{ node }">
<div class="custom-tree-node">
@@ -62,7 +63,8 @@
default-expand-all
show-checkbox
ref="pageButtonTree"
- :default-checked-keys="checkedPageButton"
+ :default-checked-keys="defaultCheckedKeys"
+ @check="handlePageButtonCheck"
>
<template #default="{ node }">
<div class="custom-tree-node">
@@ -97,7 +99,8 @@
default-expand-all
show-checkbox
ref="dataButtonTree"
- :default-checked-keys="checkedDataButton"
+ :default-checked-keys="defaultCheckedKeys"
+ @check="handleDataButtonCheck"
>
<template #default="{ node }">
<div class="custom-tree-node">
@@ -132,7 +135,8 @@
default-expand-all
show-checkbox
ref="dataColumnTree"
- :default-checked-keys="checkedDataColumn"
+ :default-checked-keys="defaultCheckedKeys"
+ @check="handleDataColumnCheck"
>
<template #default="{ node }">
<div class="custom-tree-node">
@@ -155,10 +159,11 @@
<script setup lang="ts">
import { Message } from '@bole-core/core';
import { AuthorizeType, SubModuleType, SubModuleTitle, EnumMenuType } from '@/constants';
-import { getTree } from '@/utils';
+import { getTree, treeEach } from '@/utils';
import { TreeInstance } from 'element-plus';
import { ProDialog } from '@bole-core/components';
import { useMenus, useMenu } from '@/hooks';
+import data from '@iconify-icons/ep/tickets';
const TypeTip = defineComponent({
name: 'TypeTip',
@@ -195,7 +200,7 @@
const form = defineModel<Form>('form');
const emit = defineEmits<{
- (e: 'onConfirm', selectedMenuIds: string[], resourceIds: string[]): void;
+ (e: 'onConfirm', selectedMenuIds: string[]): void;
(e: 'onCancel'): void;
}>();
@@ -207,13 +212,17 @@
const state = reactive({
currentMenuId: '',
- checkedInfo: [] as CheckedResourceItem[],
+ selectedMenuIds: [] as string[],
});
+
+const defaultCheckedKeys = computed(() => Array.from(state.selectedMenuIds));
watch(visible, (newVal) => {
if (newVal) {
state.currentMenuId = '';
- state.checkedInfo = [];
+ const menuIds = form.value.detail?.menuIds ?? [];
+ // menuIds.forEach((id) => state.selectedMenuIds.add(id));
+ state.selectedMenuIds = [...menuIds];
}
});
@@ -225,6 +234,8 @@
const pageButtonTree = useTemplateRef<TreeInstance>('pageButtonTree');
const dataButtonTree = useTemplateRef<TreeInstance>('dataButtonTree');
const dataColumnTree = useTemplateRef<TreeInstance>('dataColumnTree');
+
+type TreeRef = ReturnType<typeof useTemplateRef<TreeInstance>>;
const { menusTree, getMenuById } = useMenus({
params: computed(() => ({
@@ -243,77 +254,45 @@
enabled: computed(() => !!state.currentMenuId),
});
-const checkedModules = computed(() => {
- if (form.value.detail) {
- return form.value.detail.menuIds;
- }
- return [];
-});
-
-const checkedPageButton = computed(() => initChecked(SubModuleType.PageButton));
-const checkedDataButton = computed(() => initChecked(SubModuleType.DataButton));
-const checkedDataColumn = computed(() => initChecked(SubModuleType.Column));
-
-function initChecked(type: SubModuleType) {
- return state.checkedInfo.filter((x) => x.resourceType === type).map((x) => x.resourceId);
-}
-
function handleSelectModule(menu: API.GetMenusQueryResultItem) {
- const modules1 =
- dataButtonTree &&
- dataButtonTree.value.getCheckedKeys(true).map((x) => {
- return {
- resourceType: SubModuleType.DataButton,
- resourceId: x,
- menuId: menu.id,
- } as CheckedResourceItem;
- });
-
- const modules2 =
- pageButtonTree &&
- pageButtonTree.value.getCheckedKeys(true).map((x) => {
- return {
- resourceType: SubModuleType.PageButton,
- resourceId: x,
- menuId: menu.id,
- } as CheckedResourceItem;
- });
-
- const modules3 =
- dataColumnTree &&
- dataColumnTree.value.getCheckedKeys(true).map((x) => {
- return {
- resourceType: SubModuleType.Column,
- resourceId: x,
- menuId: menu.id,
- } as CheckedResourceItem;
- });
-
- const checkExtends = state.checkedInfo.filter(
- (x) => x.menuId !== menu.id && x.menuId !== undefined
- );
-
- if (modules1 && modules1.length) {
- checkExtends.push(...modules1);
- }
- if (modules2 && modules2.length) {
- checkExtends.push(...modules2);
- }
- if (modules3 && modules3.length) {
- checkExtends.push(...modules3);
- }
-
- state.checkedInfo = checkExtends;
state.currentMenuId = menu.id;
}
+function handleModuleCheck(data, params) {
+ handleCheck(data, params, moduleTree);
+}
+
+function handlePageButtonCheck(data, params) {
+ handleCheck(data, params, pageButtonTree);
+}
+
+function handleDataButtonCheck(data, params) {
+ handleCheck(data, params, dataButtonTree);
+}
+
+function handleDataColumnCheck(data, params) {
+ handleCheck(data, params, dataColumnTree);
+}
+
+function handleCheck(data, params, treeRef: TreeRef) {
+ const dataMap = {};
+ treeEach(
+ [treeRef.value.store.root],
+ (node) => (dataMap[node.key] = node),
+ (node) => node.childNodes
+ );
+
+ const uncachedCheckedKeys = params.checkedKeys.filter(
+ (item) => !['pageButtonAll', 'dataButtonAll', 'dataColumnAll'].includes(item)
+ );
+ const cachedKeys = state.selectedMenuIds.filter(
+ (item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)
+ );
+ state.selectedMenuIds = cachedKeys.concat(uncachedCheckedKeys);
+}
+
function handleConfirm() {
- const selectedMenuIds = moduleTree.value.getCheckedNodes(false, true).map((x) => x.id);
- if (state.currentMenuId) {
- handleSelectModule(getMenuById(state.currentMenuId));
- }
- const resourceIds = state.checkedInfo.map((x) => x.resourceId);
- emit('onConfirm', selectedMenuIds, resourceIds);
+ emit('onConfirm', state.selectedMenuIds);
}
</script>
--
Gitblit v1.9.1