diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserMenuConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserMenuConfigController.java new file mode 100644 index 0000000..eec291e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserMenuConfigController.java @@ -0,0 +1,52 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.system.domain.SysUserMenuConfig; +import com.ruoyi.system.service.ISysUserMenuConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * 用户左侧菜单配置(当前登录用户自己的配置) + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/user/menuConfig") +public class SysUserMenuConfigController extends BaseController { + + @Autowired + private ISysUserMenuConfigService menuConfigService; + + /** + * 获取当前用户的左侧菜单配置 + */ + @GetMapping + public AjaxResult getMyConfig() { + Long userId = getUserId(); + SysUserMenuConfig config = menuConfigService.selectByUserId(userId); + if (config == null) { + return success(null); + } + return success(config); + } + + /** + * 保存当前用户的左侧菜单配置 + * 请求体: { "menuItems": "[{...}]", "position": "left" } + */ + @PutMapping + public AjaxResult saveMyConfig(@RequestBody Map body) { + Long userId = getUserId(); + String menuItems = body != null && body.get("menuItems") != null ? body.get("menuItems").toString() : null; + String position = body != null && body.get("position") != null ? body.get("position").toString() : "left"; + if (menuItems == null) { + return error("菜单项不能为空"); + } + int rows = menuConfigService.saveConfig(userId, menuItems, position, getUsername()); + return toAjax(rows); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserMenuConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserMenuConfig.java new file mode 100644 index 0000000..6b08c56 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserMenuConfig.java @@ -0,0 +1,63 @@ +package com.ruoyi.system.domain; + +import javax.validation.constraints.Size; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 用户左侧菜单配置对象 sys_user_menu_config + * + * @author ruoyi + */ +public class SysUserMenuConfig extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 配置主键 */ + private Long configId; + + /** 用户ID */ + @Excel(name = "用户ID") + private Long userId; + + /** 菜单项JSON数组 */ + @Excel(name = "菜单项") + private String menuItems; + + /** 菜单位置 left/top/bottom */ + @Excel(name = "菜单位置") + @Size(max = 20) + private String position; + + public Long getConfigId() { + return configId; + } + + public void setConfigId(Long configId) { + this.configId = configId; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public String getMenuItems() { + return menuItems; + } + + public void setMenuItems(String menuItems) { + this.menuItems = menuItems; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMenuConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMenuConfigMapper.java new file mode 100644 index 0000000..1b5c771 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMenuConfigMapper.java @@ -0,0 +1,35 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysUserMenuConfig; + +/** + * 用户左侧菜单配置 数据层 + * + * @author ruoyi + */ +public interface SysUserMenuConfigMapper { + + /** + * 根据用户ID查询配置 + * + * @param userId 用户ID + * @return 配置信息 + */ + SysUserMenuConfig selectByUserId(Long userId); + + /** + * 新增配置 + * + * @param config 配置信息 + * @return 结果 + */ + int insertConfig(SysUserMenuConfig config); + + /** + * 更新配置 + * + * @param config 配置信息 + * @return 结果 + */ + int updateConfig(SysUserMenuConfig config); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserMenuConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserMenuConfigService.java new file mode 100644 index 0000000..d3ccd59 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserMenuConfigService.java @@ -0,0 +1,30 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysUserMenuConfig; + +/** + * 用户左侧菜单配置 服务层 + * + * @author ruoyi + */ +public interface ISysUserMenuConfigService { + + /** + * 根据当前登录用户ID查询配置 + * + * @param userId 用户ID + * @return 配置信息,无则返回 null + */ + SysUserMenuConfig selectByUserId(Long userId); + + /** + * 保存当前用户的菜单配置(有则更新,无则新增) + * + * @param userId 用户ID + * @param menuItems 菜单项JSON字符串 + * @param position 菜单位置 + * @param operator 操作人(createBy/updateBy) + * @return 结果 + */ + int saveConfig(Long userId, String menuItems, String position, String operator); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserMenuConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserMenuConfigServiceImpl.java new file mode 100644 index 0000000..367a20c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserMenuConfigServiceImpl.java @@ -0,0 +1,55 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserMenuConfig; +import com.ruoyi.system.mapper.SysUserMenuConfigMapper; +import com.ruoyi.system.service.ISysUserMenuConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 用户左侧菜单配置 服务层实现 + * + * @author ruoyi + */ +@Service +public class SysUserMenuConfigServiceImpl implements ISysUserMenuConfigService { + + @Autowired + private SysUserMenuConfigMapper menuConfigMapper; + + @Override + public SysUserMenuConfig selectByUserId(Long userId) { + if (userId == null) { + return null; + } + return menuConfigMapper.selectByUserId(userId); + } + + @Override + public int saveConfig(Long userId, String menuItems, String position, String operator) { + if (userId == null) { + return 0; + } + SysUserMenuConfig existing = menuConfigMapper.selectByUserId(userId); + if (existing != null) { + existing.setMenuItems(menuItems); + if (StringUtils.isNotEmpty(position)) { + existing.setPosition(position); + } + if (StringUtils.isNotEmpty(operator)) { + existing.setUpdateBy(operator); + } + return menuConfigMapper.updateConfig(existing); + } else { + SysUserMenuConfig config = new SysUserMenuConfig(); + config.setUserId(userId); + config.setMenuItems(menuItems); + config.setPosition(StringUtils.isEmpty(position) ? "left" : position); + if (StringUtils.isNotEmpty(operator)) { + config.setCreateBy(operator); + } + return menuConfigMapper.insertConfig(config); + } + } +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMenuConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMenuConfigMapper.xml new file mode 100644 index 0000000..b03f615 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMenuConfigMapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + select config_id, user_id, menu_items, position, create_by, create_time, update_by, update_time, remark + from sys_user_menu_config + + + + + + insert into sys_user_menu_config ( + user_id, + menu_items, + position, + create_by, + remark, + create_time + ) values ( + #{userId}, + #{menuItems}, + #{position}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user_menu_config + + menu_items = #{menuItems}, + position = #{position}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + diff --git a/ruoyi-ui/src/api/system/userMenuConfig.js b/ruoyi-ui/src/api/system/userMenuConfig.js new file mode 100644 index 0000000..a87faba --- /dev/null +++ b/ruoyi-ui/src/api/system/userMenuConfig.js @@ -0,0 +1,23 @@ +import request from '@/utils/request' + +/** + * 获取当前用户的左侧菜单配置 + */ +export function getMenuConfig() { + return request({ + url: '/system/user/menuConfig', + method: 'get' + }) +} + +/** + * 保存当前用户的左侧菜单配置 + * @param {Object} data - { menuItems: string (JSON), position: string } + */ +export function saveMenuConfig(data) { + return request({ + url: '/system/user/menuConfig', + method: 'put', + data: data + }) +}