This commit is contained in:
qsh
2026-02-26 11:54:34 +08:00
parent c3513223b0
commit 1f6665bee4
2 changed files with 57 additions and 20 deletions

View File

@@ -110,14 +110,9 @@
// 找到当前菜单
const menu = findMenuById(menuId, props.treeData)
// 如果是上级菜单,选中所有子菜单
// 如果是上级菜单,选中所有子菜单(递归)
if (menu && hasChildren(menu)) {
menu.children.forEach(child => {
const childId = getMenuId(child)
if (!newSelected.includes(childId)) {
newSelected.push(childId)
}
})
selectAllChildren(menu, newSelected)
}
// 检查并选中上级菜单
@@ -132,15 +127,9 @@
// 找到当前菜单
const menu = findMenuById(menuId, props.treeData)
// 如果是上级菜单,取消选中所有子菜单
// 如果是上级菜单,取消选中所有子菜单(递归)
if (menu && hasChildren(menu)) {
menu.children.forEach(child => {
const childId = getMenuId(child)
const childIndex = newSelected.indexOf(childId)
if (childIndex > -1) {
newSelected.splice(childIndex, 1)
}
})
unselectAllChildren(menu, newSelected)
}
// 检查并取消选中上级菜单
@@ -151,6 +140,35 @@
emit('update:modelValue', newSelected)
}
// 递归选中所有子菜单
function selectAllChildren(menu, selected) {
if (menu.children && menu.children.length > 0) {
menu.children.forEach(child => {
const childId = getMenuId(child)
if (!selected.includes(childId)) {
selected.push(childId)
}
// 递归处理更深层级的子菜单
selectAllChildren(child, selected)
})
}
}
// 递归取消选中所有子菜单
function unselectAllChildren(menu, selected) {
if (menu.children && menu.children.length > 0) {
menu.children.forEach(child => {
const childId = getMenuId(child)
const childIndex = selected.indexOf(childId)
if (childIndex > -1) {
selected.splice(childIndex, 1)
}
// 递归处理更深层级的子菜单
unselectAllChildren(child, selected)
})
}
}
// 根据ID查找菜单
function findMenuById(menuId, menus) {
for (const menu of menus) {
@@ -187,10 +205,8 @@
const parentMenu = findParentMenu(menuId, props.treeData)
if (parentMenu) {
const parentId = getMenuId(parentMenu)
// 检查父菜单的所有子菜单是否都未选中
const allChildrenUnchecked = parentMenu.children.every(child => {
return !selected.includes(getMenuId(child))
})
// 检查父菜单的所有子菜单(包括深层级)是否都未选中
const allChildrenUnchecked = checkAllChildrenUnchecked(parentMenu, selected)
if (allChildrenUnchecked) {
const parentIndex = selected.indexOf(parentId)
@@ -203,6 +219,22 @@
}
}
// 检查所有子菜单(包括深层级)是否都未选中
function checkAllChildrenUnchecked(menu, selected) {
if (menu.children && menu.children.length > 0) {
return menu.children.every(child => {
// 检查当前子菜单是否未选中
const childId = getMenuId(child)
if (selected.includes(childId)) {
return false
}
// 递归检查子菜单的子菜单
return checkAllChildrenUnchecked(child, selected)
})
}
return true
}
// 查找父菜单
function findParentMenu(menuId, menus) {
for (const menu of menus) {

View File

@@ -73,7 +73,7 @@
<view class="form-section">
<view class="section-title">数据权限</view>
<view class="data-scope-list">
<radio-group v-model="form.dataScope">
<radio-group @change="handleDataScopeChange">
<view
v-for="scope in dataScopeOptions"
:key="scope.value"
@@ -192,6 +192,11 @@
function goBack() {
uni.navigateBack({ delta: 1 });
}
// 处理数据权限变更
function handleDataScopeChange(e) {
form.value.dataScope = e.detail.value;
}
</script>
<style lang="scss" scoped>