diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuappController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuappController.java new file mode 100644 index 0000000..134e96a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuappController.java @@ -0,0 +1,127 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.translation.TranslateUtils; +import com.ruoyi.system.domain.SysMenuapp; +import com.ruoyi.system.service.ISysMenuappService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 手机菜单Controller + * + * @author rongxin + * @date 2025-09-02 + */ +@RestController +@RequestMapping("/system/menuapp") +public class SysMenuappController extends BaseController +{ + @Autowired + private ISysMenuappService sysMenuappService; + + /** + * 查询手机菜单列表 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:list')") + @GetMapping("/list") + public TableDataInfo list(SysMenuapp sysMenuapp) + { + startPage(); + List list = sysMenuappService.selectSysMenuappList(sysMenuapp); + return getDataTable(list); + } + + + /** + * 导出手机菜单列表 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:export')") + @Log(title = "手机菜单", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysMenuapp sysMenuapp) + { + List list = sysMenuappService.selectSysMenuappList(sysMenuapp); + ExcelUtil util = new ExcelUtil(SysMenuapp.class); + util.exportExcel(response, list, "手机菜单数据"); + } + + /** + * 手机菜单导入模板 + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ExcelUtil util = new ExcelUtil(SysMenuapp.class); + util.importTemplateExcel(response, "手机菜单数据"); + } + + /** + * 手机菜单导入 + */ + @Log(title = "手机菜单", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:menuapp:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil(SysMenuapp.class); + List list = util.importExcel(file.getInputStream(), 0); + String message = sysMenuappService.importSysMenuapp(list, updateSupport, getUsername()); + return AjaxResult.success(message); + } + + /** + * 获取手机菜单详细信息 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + SysMenuapp detail = sysMenuappService.selectSysMenuappById(id); + TranslateUtils.translate(detail, false); + return success(detail); + } + + /** + * 新增手机菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:add')") + @Log(title = "手机菜单", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysMenuapp sysMenuapp) + { + return toAjax(sysMenuappService.insertSysMenuapp(sysMenuapp)); + } + + /** + * 修改手机菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:edit')") + @Log(title = "手机菜单", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysMenuapp sysMenuapp) + { + return toAjax(sysMenuappService.updateSysMenuapp(sysMenuapp)); + } + + /** + * 删除手机菜单 + */ + @PreAuthorize("@ss.hasPermi('system:menuapp:remove')") + @Log(title = "手机菜单", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(sysMenuappService.deleteSysMenuappByIds(ids)); + } + + +} diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index caf2173..28af0af 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -100,7 +100,9 @@ public class ${ClassName}Controller extends BaseController @GetMapping(value = "/{${pkColumn.javaField}}") public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) { - return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + ${ClassName} detail = ${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + TranslateUtils.translate(detail, false); + return success(detail); } /** diff --git a/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-generator/src/main/resources/vm/sql/sql.vm index 6b7c603..c46e032 100644 --- a/ruoyi-generator/src/main/resources/vm/sql/sql.vm +++ b/ruoyi-generator/src/main/resources/vm/sql/sql.vm @@ -1,6 +1,6 @@ -- 菜单 SQL insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}菜单'); +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', 'rate', 'admin', sysdate(), '', null, '${functionName}菜单'); -- 按钮父菜单ID SELECT @parentId := LAST_INSERT_ID(); @@ -27,6 +27,4 @@ values('导入', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPre insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) values('打印', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:import', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) -values('附件', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:attach', '#', 'admin', sysdate(), '', null, ''); diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm index 436c4d1..226a565 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -191,7 +191,7 @@ #set($comment=$column.columnComment) #end #set($dictType=$column.dictType) - #if(($column.htmlType == "select" || $column.htmlType == "checkbox" || $column.htmlType == "radio") && "" != $dictType)#elseif($column.htmlType == "imageUpload")
#elseif($column.htmlType == "editor")
{{ form.${field} }}
#elseif($column.htmlType == "fileUpload")
#else{{ form.${field} }}#end + {{ form.${field} }} #end #end #end @@ -245,13 +245,7 @@ #elseif($column.htmlType == "select" && "" != $dictType) - + #elseif($column.htmlType == "select" && $dictType) @@ -275,13 +269,7 @@ #elseif($column.htmlType == "radio" && "" != $dictType) - {{dict.label}} + {{dict.label}} #elseif($column.htmlType == "radio" && $dictType) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenuapp.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenuapp.java new file mode 100644 index 0000000..5b218f9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenuapp.java @@ -0,0 +1,132 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 手机菜单对象 sys_menuapp + * + * @author rongxin + * @date 2025-09-02 + */ +public class SysMenuapp extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** id */ + private Long id; + + /** 模块名称 */ + @Excel(name = "模块名称", dictType = "model_type") + private String modelType; + + /** 菜单名称 */ + @Excel(name = "菜单名称") + private String menuName; + + /** 菜单路径 */ + @Excel(name = "菜单路径") + private String menuUrl; + + /** 菜单图标 */ + @Excel(name = "菜单图标") + private String menuIcon; + + /** 显示顺序 */ + @Excel(name = "显示顺序") + private Integer menuNum; + + /** 菜单状态 */ + @Excel(name = "菜单状态", dictType = "sys_normal_disable") + private String menuStatus; + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + + public void setModelType(String modelType) + { + this.modelType = modelType; + } + + public String getModelType() + { + return modelType; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getMenuName() + { + return menuName; + } + + public void setMenuUrl(String menuUrl) + { + this.menuUrl = menuUrl; + } + + public String getMenuUrl() + { + return menuUrl; + } + + public void setMenuIcon(String menuIcon) + { + this.menuIcon = menuIcon; + } + + public String getMenuIcon() + { + return menuIcon; + } + + public void setMenuNum(Integer menuNum) + { + this.menuNum = menuNum; + } + + public Integer getMenuNum() + { + return menuNum; + } + + public void setMenuStatus(String menuStatus) + { + this.menuStatus = menuStatus; + } + + public String getMenuStatus() + { + return menuStatus; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("modelType", getModelType()) + .append("menuName", getMenuName()) + .append("menuUrl", getMenuUrl()) + .append("menuIcon", getMenuIcon()) + .append("menuNum", getMenuNum()) + .append("menuStatus", getMenuStatus()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuappMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuappMapper.java new file mode 100644 index 0000000..adf1513 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuappMapper.java @@ -0,0 +1,78 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysMenuapp; + +import java.util.List; + +/** + * 手机菜单Mapper接口 + * + * @author rongxin + * @date 2025-09-02 + */ +public interface SysMenuappMapper +{ + /** + * 查询手机菜单 + * + * @param id 手机菜单主键 + * @return 手机菜单 + */ + public SysMenuapp selectSysMenuappById(Long id); + + /** + * 查询手机菜单列表 + * + * @param sysMenuapp 手机菜单 + * @return 手机菜单集合 + */ + public List selectSysMenuappList(SysMenuapp sysMenuapp); + + /** + * 新增手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + public int insertSysMenuapp(SysMenuapp sysMenuapp); + + /** + * 批量新增手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + public int insertSysMenuappBatch(List list); + + /** + * 修改手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + public int updateSysMenuapp(SysMenuapp sysMenuapp); + + /** + * 批量修改 手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + public int updateSysMenuappBatch(List list); + + /** + * 删除手机菜单 + * + * @param id 手机菜单主键 + * @return 结果 + */ + public int deleteSysMenuappById(Long id); + + /** + * 批量删除手机菜单 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteSysMenuappByIds(Long[] ids); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuappService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuappService.java new file mode 100644 index 0000000..94d7de3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuappService.java @@ -0,0 +1,88 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysMenuapp; + +import java.util.List; + +/** + * 手机菜单Service接口 + * + * @author rongxin + * @date 2025-09-02 + */ +public interface ISysMenuappService +{ + /** + * 查询手机菜单 + * + * @param id 手机菜单主键 + * @return 手机菜单 + */ + public SysMenuapp selectSysMenuappById(Long id); + + /** + * 查询手机菜单列表 + * + * @param sysMenuapp 手机菜单 + * @return 手机菜单集合 + */ + public List selectSysMenuappList(SysMenuapp sysMenuapp); + + /** + * 导入手机菜单数据 + * + * @param list 手机菜单数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param userName 操作用户 + * @return 结果 + */ + public String importSysMenuapp(List list, Boolean isUpdateSupport, String userName); + + /** + * 新增手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + public int insertSysMenuapp(SysMenuapp sysMenuapp); + + /** + * 批量新增手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + public int insertSysMenuappBatch(List list); + + /** + * 修改手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + public int updateSysMenuapp(SysMenuapp sysMenuapp); + + /** + * 批量修改 手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + public int updateSysMenuappBatch(List list); + + /** + * 批量删除手机菜单 + * + * @param ids 需要删除的手机菜单主键集合 + * @return 结果 + */ + public int deleteSysMenuappByIds(Long[] ids); + + /** + * 删除手机菜单信息 + * + * @param id 手机菜单主键 + * @return 结果 + */ + public int deleteSysMenuappById(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuappServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuappServiceImpl.java new file mode 100644 index 0000000..5bc4819 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuappServiceImpl.java @@ -0,0 +1,197 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysMenuapp; +import com.ruoyi.system.mapper.SysMenuappMapper; +import com.ruoyi.system.service.ISysMenuappService; +import org.apache.commons.collections4.ListUtils; +import org.apache.commons.compress.utils.Lists; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 手机菜单Service业务层处理 + * + * @author rongxin + * @date 2025-09-02 + */ +@Service +public class SysMenuappServiceImpl implements ISysMenuappService +{ + @Autowired + private SysMenuappMapper sysMenuappMapper; + + /** + * 查询手机菜单 + * + * @param id 手机菜单主键 + * @return 手机菜单 + */ + @Override + public SysMenuapp selectSysMenuappById(Long id) + { + return sysMenuappMapper.selectSysMenuappById(id); + } + + /** + * 查询手机菜单列表 + * + * @param sysMenuapp 手机菜单 + * @return 手机菜单 + */ + @Override + public List selectSysMenuappList(SysMenuapp sysMenuapp) + { + return sysMenuappMapper.selectSysMenuappList(sysMenuapp); + } + + /** + * 导入手机菜单数据 + * + * @param list 手机菜单数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * @return 结果 + */ + @Override + @Transactional + public String importSysMenuapp(List list, Boolean isUpdateSupport, String operName) { + if (StringUtils.isEmpty(list)) { + throw new ServiceException("导入手机菜单数据不能为空!"); + } + + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + List insertList = Lists.newArrayList(); + List updateList = Lists.newArrayList(); + + + // 缓存已存在的数据 + SysMenuapp sysMenuapp = new SysMenuapp(); + List sysMenuappList = sysMenuappMapper.selectSysMenuappList(sysMenuapp); + + for (SysMenuapp item : list) { + // 验证是否存在这个手机菜单信息 + Long id = item.getId(); + List filters = sysMenuappList.stream().filter(a -> a.getId().equals(id)).collect(Collectors.toList()); + if (StringUtils.isEmpty(filters)) { //不存在时,直接插入 + item.setCreateBy(operName); + item.setCreateTime(DateUtils.getNowDate()); + insertList.add(item); + successNum++; + } else { //存在时 + if(isUpdateSupport){ //勾选则更新 + item.setUpdateBy(operName); + item.setUpdateTime(DateUtils.getNowDate()); + item.setId(filters.get(0).getId()); + updateList.add(item); + successNum++; + } + } + } + + // 执行更新或者保存 + List> insertSplists = ListUtils.partition(insertList, 50); + insertSplists.forEach(insertSplist ->{ + sysMenuappMapper.insertSysMenuappBatch(insertSplist); + }); + List> updateSplists = ListUtils.partition(updateList, 30); + updateSplists.forEach(updateSplist ->{ + sysMenuappMapper.updateSysMenuappBatch(updateSplist); + }); + + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条。"); + return successMsg.toString(); + } + + + /** + * 新增手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + @Override + public int insertSysMenuapp(SysMenuapp sysMenuapp) + { + sysMenuapp.setCreateTime(DateUtils.getNowDate()); + return sysMenuappMapper.insertSysMenuapp(sysMenuapp); + } + + /** + * 批量新增手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + @Override + @Transactional + public int insertSysMenuappBatch(List list){ + List> splists = ListUtils.partition(list, 50); + splists.forEach(splist->{ + sysMenuappMapper.insertSysMenuappBatch(splist); + }); + return 1; + } + + /** + * 修改手机菜单 + * + * @param sysMenuapp 手机菜单 + * @return 结果 + */ + @Override + public int updateSysMenuapp(SysMenuapp sysMenuapp) + { + sysMenuapp.setUpdateTime(DateUtils.getNowDate()); + return sysMenuappMapper.updateSysMenuapp(sysMenuapp); + } + + /** + * 批量修改 手机菜单 + * + * @param list 手机菜单 + * @return 结果 + */ + @Override + @Transactional + public int updateSysMenuappBatch(List list) { + List> splists = ListUtils.partition(list, 30); + splists.forEach(splist->{ + sysMenuappMapper.updateSysMenuappBatch(splist); + }); + return 1; + } + + /** + * 批量删除手机菜单 + * + * @param ids 需要删除的手机菜单主键 + * @return 结果 + */ + @Override + public int deleteSysMenuappByIds(Long[] ids) + { + return sysMenuappMapper.deleteSysMenuappByIds(ids); + } + + /** + * 删除手机菜单信息 + * + * @param id 手机菜单主键 + * @return 结果 + */ + @Override + public int deleteSysMenuappById(Long id) + { + return sysMenuappMapper.deleteSysMenuappById(id); + } +} diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index b11626f..bbf7cb1 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -67,7 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + and model_type = #{modelType} + and menu_name like concat('%', #{menuName}, '%') + and menu_status = #{menuStatus} + + + + + + + insert into sys_menuapp + + model_type, + menu_name, + menu_url, + menu_icon, + menu_num, + menu_status, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{modelType}, + #{menuName}, + #{menuUrl}, + #{menuIcon}, + #{menuNum}, + #{menuStatus}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + insert into sys_menuapp + + model_type, + menu_name, + menu_url, + menu_icon, + menu_num, + menu_status, + remark, + create_by, + create_time, + update_by, + update_time, + + values + + + #{item.modelType}, + #{item.menuName}, + #{item.menuUrl}, + #{item.menuIcon}, + #{item.menuNum}, + #{item.menuStatus}, + #{item.remark}, + #{item.createBy}, + #{item.createTime}, + #{item.updateBy}, + #{item.updateTime}, + + + + + + update sys_menuapp + + model_type = #{modelType}, + menu_name = #{menuName}, + menu_url = #{menuUrl}, + menu_icon = #{menuIcon}, + menu_num = #{menuNum}, + menu_status = #{menuStatus}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + + + update sys_menuapp + + model_type = #{item.modelType}, + menu_name = #{item.menuName}, + menu_url = #{item.menuUrl}, + menu_icon = #{item.menuIcon}, + menu_num = #{item.menuNum}, + menu_status = #{item.menuStatus}, + remark = #{item.remark}, + create_by = #{item.createBy}, + create_time = #{item.createTime}, + update_by = #{item.updateBy}, + update_time = #{item.updateTime}, + + where id = #{item.id} + + + + + delete from sys_menuapp where id = #{id} + + + + delete from sys_menuapp where id in + + #{id} + + +