diff --git a/screen-vue/src/api/bizRole.js b/screen-vue/src/api/bizRole.js
index d43568d..c1432df 100644
--- a/screen-vue/src/api/bizRole.js
+++ b/screen-vue/src/api/bizRole.js
@@ -33,6 +33,17 @@ export function getHomeRoleAssign(data) {
})
}
+/**
+ * 保存角色信息列表
+ */
+export function getHomeRoleSave(data) {
+ return request({
+ url: '/biz/homeRole/save',
+ method: 'post',
+ data
+ })
+}
+
/**
* 删除角色信息
diff --git a/screen-vue/src/components/Layout/index.vue b/screen-vue/src/components/Layout/index.vue
index 2f8a199..a891ab2 100644
--- a/screen-vue/src/components/Layout/index.vue
+++ b/screen-vue/src/components/Layout/index.vue
@@ -191,7 +191,10 @@ const openedSubMenuKeys = ref([])
const getMenuList = async () => {
if (!isMounted.value) return
try {
- const res = await getUserMenuList();
+ const reqParams = {
+ roleId: userStore.loginUser.roleId,
+ }
+ const res = await getUserMenuList(reqParams);
menuList.value = res || [];
const setMenuNameMap = (menus) => {
menus.forEach(menu => {
diff --git a/screen-vue/src/views/system/role/form.vue b/screen-vue/src/views/system/role/form.vue
index 02409e3..ff24ba4 100644
--- a/screen-vue/src/views/system/role/form.vue
+++ b/screen-vue/src/views/system/role/form.vue
@@ -1,8 +1,99 @@
+
+
+
-
-
\ No newline at end of file
diff --git a/screen-vue/src/views/system/role/index.vue b/screen-vue/src/views/system/role/index.vue
index a54ea29..4fc3d3f 100644
--- a/screen-vue/src/views/system/role/index.vue
+++ b/screen-vue/src/views/system/role/index.vue
@@ -20,7 +20,7 @@
-
+
diff --git a/screen-vue/src/views/system/role/list.vue b/screen-vue/src/views/system/role/list.vue
index ae70c80..e2cc700 100644
--- a/screen-vue/src/views/system/role/list.vue
+++ b/screen-vue/src/views/system/role/list.vue
@@ -67,18 +67,6 @@
-
-
-
-
- 编辑
-
-
-
- 删除
-
-
-
@@ -86,6 +74,7 @@
{
ElMessage.success('开始导出数据...')
}
-const handleDelete = (row) => {
- ElMessage.warning(`删除ID为 ${row.id} 的数据`)
-}
-
const handleSizeChange = (val) => {
pagination.pageSize = val
getDataList()
@@ -222,12 +210,21 @@ const handleSave = async () => {
return
}
}
-
- setTimeout(() => {
- ElMessage.success(isEdit.value ? '编辑成功' : '新增成功')
- dialogVisible.value = false
- getDataList()
- }, 500)
+
+ try {
+ saveLoading.value = true;
+ const reqParams = {
+ ...formData.value
+ }
+ const res = await getHomeRoleSave(reqParams);
+ ElMessage.success(res.msg)
+ dialogVisible.value = false
+ emit('refresh-role-list')
+ } catch (error) {
+ console.error('获取数据失败:', error);
+ } finally {
+ saveLoading.value = false;
+ }
}
onMounted(() => {
diff --git a/screen-vue/src/views/system/role/role.vue b/screen-vue/src/views/system/role/role.vue
index 6c008a8..e2c526f 100644
--- a/screen-vue/src/views/system/role/role.vue
+++ b/screen-vue/src/views/system/role/role.vue
@@ -63,13 +63,31 @@ const loading = ref(false)
const menuTreeRef = ref(null)
const selectedMenuIds = ref([])
+const getLeafNodeIds = (treeData, leafIds = []) => {
+ treeData.forEach(node => {
+ if (!node.children || node.children.length === 0) {
+ leafIds.push(String(node.id))
+ } else {
+ getLeafNodeIds(node.children, leafIds)
+ }
+ })
+ return leafIds
+}
+
+const filterOnlyLeafIds = (allIds, treeData) => {
+ const allLeafIds = getLeafNodeIds(treeData)
+ return allIds.filter(id => allLeafIds.includes(id))
+}
+
const getTreeListData = async () => {
try {
const res = await getTreeMenuList()
menuTreeData.value = res ?? []
+ return menuTreeData.value
} catch (error) {
console.error('加载菜单树失败:', error)
menuTreeData.value = []
+ return []
}
}
@@ -90,21 +108,38 @@ const treeProps = reactive({
disabled: 'disabled'
})
+function getIndeterminateKeys(node) {
+ let keys = []
+ if (node.indeterminate) {
+ keys.push(node.key)
+ }
+ if (node.childNodes) {
+ node.childNodes.forEach(c => keys.push(...getIndeterminateKeys(c)))
+ }
+ return keys
+}
+
+function getCheckedAndIndeterminateKeys() {
+ if (!menuTreeRef.value) return []
+ const checked = menuTreeRef.value.getCheckedKeys(false)
+ const indeterminate = getIndeterminateKeys(menuTreeRef.value.root)
+ return [...new Set([...checked, ...indeterminate])]
+}
+
onMounted(async () => {
loading.value = true
try {
- const [_, roleMenuIds] = await Promise.all([
- getTreeListData(),
- getRoleMenuIds()
- ])
-
+ const treeData = await getTreeListData()
+ const roleMenuIds = await getRoleMenuIds()
const propsMenuIds = (props.formData?.menuIds ?? []).map(id => String(id)).filter(id => id)
- const defaultCheckedIds = roleMenuIds.length > 0 ? roleMenuIds : propsMenuIds
- if (defaultCheckedIds.length > 0) {
- selectedMenuIds.value = [...defaultCheckedIds]
+ const allMenuIds = roleMenuIds.length > 0 ? roleMenuIds : propsMenuIds
+ const leafMenuIds = filterOnlyLeafIds(allMenuIds, treeData)
+
+ if (leafMenuIds.length > 0) {
+ selectedMenuIds.value = [...leafMenuIds]
setTimeout(() => {
- if (menuTreeRef.value && menuTreeData.value.length) {
- menuTreeRef.value.setCheckedKeys(defaultCheckedIds, false)
+ if (menuTreeRef.value && treeData.length) {
+ menuTreeRef.value.setCheckedKeys(leafMenuIds, false)
}
}, 300)
}
@@ -116,12 +151,14 @@ onMounted(async () => {
})
watch(() => props.formData.menuIds, (newVal) => {
- if (!newVal || !newVal.length || !menuTreeRef.value) return
+ if (!newVal || !newVal.length || !menuTreeRef.value || !menuTreeData.value.length) return
- const menuIds = newVal.map(id => String(id)).filter(id => id)
- if (menuIds.length) {
- selectedMenuIds.value = [...menuIds]
- menuTreeRef.value.setCheckedKeys(menuIds, false)
+ const allMenuIds = newVal.map(id => String(id)).filter(id => id)
+ const leafMenuIds = filterOnlyLeafIds(allMenuIds, menuTreeData.value)
+
+ if (leafMenuIds.length) {
+ selectedMenuIds.value = [...leafMenuIds]
+ menuTreeRef.value.setCheckedKeys(leafMenuIds, false)
}
}, { deep: true })
@@ -130,7 +167,7 @@ const handleCheck = () => {
selectedMenuIds.value = menuTreeRef.value.getCheckedKeys(false)
}
-const handleCheckChange = (data, checked, indeterminate) => {
+const handleCheckChange = () => {
handleCheck()
}
@@ -152,7 +189,7 @@ const resetForm = () => {
defineExpose({
validate,
resetForm,
- getSelectedMenuIds: () => selectedMenuIds.value,
+ getSelectedMenuIds: () => getCheckedAndIndeterminateKeys(),
getLeafMenuIds: () => menuTreeRef.value ? menuTreeRef.value.getCheckedKeys(true) : []
})
diff --git a/screen-vue/src/views/system/user/list.vue b/screen-vue/src/views/system/user/list.vue
index 9da77b6..daca23d 100644
--- a/screen-vue/src/views/system/user/list.vue
+++ b/screen-vue/src/views/system/user/list.vue
@@ -138,12 +138,12 @@ const dialogVisible = ref(false)
async function getDataList() {
loading.value = true
try {
- const reqParmas = {
+ const reqParams = {
... searchForm,
pageNum: pagination.pageNum,
pageSize: pagination.pageSize,
}
- const res = await getHomeUserList(reqParmas);
+ const res = await getHomeUserList(reqParams);
pagination.total = res.total;
tableData.value = res.list || [];
} catch (error) {
diff --git a/src/main/java/com/mini/mybigscreen/biz/controller/HomeMenuController.java b/src/main/java/com/mini/mybigscreen/biz/controller/HomeMenuController.java
index 9fe4e35..0173803 100644
--- a/src/main/java/com/mini/mybigscreen/biz/controller/HomeMenuController.java
+++ b/src/main/java/com/mini/mybigscreen/biz/controller/HomeMenuController.java
@@ -3,11 +3,15 @@ package com.mini.mybigscreen.biz.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
import com.mini.mybigscreen.Model.Menu;
import com.mini.mybigscreen.Model.Message;
import com.mini.mybigscreen.Model.Result;
import com.mini.mybigscreen.Model.TreeMenu;
import com.mini.mybigscreen.biz.domain.HomeMenu;
+import com.mini.mybigscreen.biz.domain.HomeModule;
+import com.mini.mybigscreen.biz.domain.HomeRoleMenu;
+import com.mini.mybigscreen.biz.mapper.HomeMenuMapper;
import com.mini.mybigscreen.biz.service.HomeMenuService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
@@ -28,6 +32,9 @@ import java.util.stream.Collectors;
public class HomeMenuController {
+ @Resource
+ private HomeMenuMapper homeMenuMapper;
+
@Resource
private HomeMenuService menuService;
@@ -124,7 +131,6 @@ public class HomeMenuController {
return treeMenu;
})
.collect(Collectors.toList());
-
menuList.add(new TreeMenu(menu.getMenuId(), menu.getMenuName(), treeMenus));
}
return Result.success(menuList);
@@ -135,33 +141,38 @@ public class HomeMenuController {
* 用户角色菜单
*/
@GetMapping("userList")
- public Result> getUserList() {
- List