ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java
@@ -77,6 +77,12 @@ @Autowired private ITCarServiceService tCarServiceService; @Autowired private IMenuEntryConfigService menuEntryConfigService; @Autowired private IMenuService menuService; @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; @@ -107,6 +113,34 @@ model.addAttribute("roleType", user1.getRoleType()); return PREFIX + "platformEdit.html"; } /** * 跳转到入口设置页面 */ @RequestMapping("/menu_entry_config") public String menuEntryConfig(Model model) { addMenuEntryConfigModel(model); return PREFIX + "menuEntryConfig.html"; } /** * 加载入口配置页面数据 */ private void addMenuEntryConfigModel(Model model) { Integer companyId = ShiroKit.getUser().getObjectId(); List<MenuEntryConfig> entryConfigList = menuEntryConfigService.selectList( new EntityWrapper<MenuEntryConfig>().eq("openCityId", companyId).orderBy("id", true)); List<Menu> entryMenuList = menuService.selectList( new EntityWrapper<Menu>() .eq("status", 1) .eq("ismenu", 1) .isNotNull("url") .ne("url", "") .orderBy("levels", true) .orderBy("num", true)); model.addAttribute("entryConfigList", entryConfigList); model.addAttribute("entryMenuList", entryMenuList); } /** @@ -448,6 +482,79 @@ } /** * 保存平台入口配置,入口名称和URL以后端查询到的菜单信息为准。 */ private String saveMenuEntryConfig(String entryConfigArr) { if (ToolUtil.isEmpty(entryConfigArr)) { return null; } // 开通城市id直接取当前登录用户绑定的对象id,不由页面传入。 Integer companyId = ShiroKit.getUser().getObjectId(); JSONArray jsonArray; try { jsonArray = JSON.parseArray(entryConfigArr); } catch (Exception e) { return "入口配置格式错误"; } List<MenuEntryConfig> entryConfigList = new ArrayList<>(); Date now = new Date(); for (int i = 0; i < jsonArray.size(); i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); Long menuId = jsonObject.getLong("menuId"); if (menuId == null) { return "请选择入口"; } Menu menu = menuService.selectById(menuId); if (menu == null || !Integer.valueOf(1).equals(menu.getStatus()) || !Integer.valueOf(1).equals(menu.getIsmenu()) || ToolUtil.isEmpty(menu.getUrl())) { return "入口菜单不存在或已禁用"; } Integer id = jsonObject.getInteger("id"); MenuEntryConfig entryConfig = null; if (id != null) { // 只能更新当前开通城市下的入口配置,避免跨城市改数据。 entryConfig = menuEntryConfigService.selectOne( new EntityWrapper<MenuEntryConfig>().eq("id", id).eq("openCityId", companyId)); if (entryConfig == null) { return "入口配置不存在"; } } if (entryConfig == null) { entryConfig = new MenuEntryConfig(); entryConfig.setCreateTime(now); entryConfig.setOpenCityId(companyId); } // menuName和entryUrl以后端菜单表为准,不信任前端展示值。 entryConfig.setTitle(jsonObject.getString("title")); entryConfig.setMenuId(menu.getId()); entryConfig.setMenuName(menu.getName()); entryConfig.setEntryUrl(menu.getUrl()); entryConfig.setUpdateTime(now); entryConfigList.add(entryConfig); } List<Integer> keepIds = new ArrayList<>(); for (MenuEntryConfig entryConfig : entryConfigList) { if (entryConfig.getId() == null) { menuEntryConfigService.insert(entryConfig); } else { menuEntryConfigService.updateById(entryConfig); } keepIds.add(entryConfig.getId()); } Wrapper<MenuEntryConfig> deleteWrapper = new EntityWrapper<MenuEntryConfig>().eq("openCityId", companyId); if (!keepIds.isEmpty()) { deleteWrapper.notIn("id", keepIds); } menuEntryConfigService.delete(deleteWrapper); return null; } /** * 修改分公司管理 */ @RequestMapping(value = "/update") @@ -464,6 +571,7 @@ if (commissionError != null) { return commissionError; } TCompany oldCompany = tCompanyService.selectById(tCompany.getId()); tCompany.setIsNeedFerry(2); User user = userService.selectById(userId); if(null != user && ToolUtil.isNotEmpty(password)){ @@ -472,7 +580,6 @@ } // ========== 级联更新逻辑 ========== TCompany oldCompany = tCompanyService.selectById(tCompany.getId()); if (oldCompany != null && oldCompany.getType() == 2) { String driverServiceError = validateCancelledServiceDriverUsage(oldCompany, tCompany, true); if (driverServiceError != null) { @@ -510,6 +617,20 @@ } /** * 保存入口设置 */ @RequestMapping(value = "/update_entry_config") @ResponseBody @Transactional(rollbackFor = Exception.class) public Object updateEntryConfig(String entryConfigArr) { String entryConfigError = saveMenuEntryConfig(entryConfigArr); if (entryConfigError != null) { return entryConfigError; } return SUCCESS_TIP; } /** * 修改加盟商管理 */ @RequestMapping(value = "/updateFranchisee") ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuEntryConfigMapper.java
New file @@ -0,0 +1,10 @@ package com.stylefeng.guns.modular.system.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.system.model.MenuEntryConfig; /** * 平台入口配置 Mapper */ public interface MenuEntryConfigMapper extends BaseMapper<MenuEntryConfig> { } ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/MenuEntryConfig.java
New file @@ -0,0 +1,111 @@ package com.stylefeng.guns.modular.system.model; import com.baomidou.mybatisplus.activerecord.Model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import java.io.Serializable; import java.util.Date; /** * 平台入口配置 */ @TableName("sys_menu_entry_config") public class MenuEntryConfig extends Model<MenuEntryConfig> { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; private String title; @TableField("menu_id") private Long menuId; @TableField("menu_name") private String menuName; @TableField("entry_url") private String entryUrl; @TableField("openCityId") private Integer openCityId; @TableField("create_time") private Date createTime; @TableField("update_time") private Date updateTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Long getMenuId() { return menuId; } public void setMenuId(Long menuId) { this.menuId = menuId; } public String getMenuName() { return menuName; } public void setMenuName(String menuName) { this.menuName = menuName; } public String getEntryUrl() { return entryUrl; } public void setEntryUrl(String entryUrl) { this.entryUrl = entryUrl; } public Integer getOpenCityId() { return openCityId; } public void setOpenCityId(Integer openCityId) { this.openCityId = openCityId; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getUpdateTime() { return updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } @Override protected Serializable pkVal() { return this.id; } } ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuEntryConfigService.java
New file @@ -0,0 +1,10 @@ package com.stylefeng.guns.modular.system.service; import com.baomidou.mybatisplus.service.IService; import com.stylefeng.guns.modular.system.model.MenuEntryConfig; /** * 平台入口配置服务 */ public interface IMenuEntryConfigService extends IService<MenuEntryConfig> { } ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuEntryConfigServiceImpl.java
New file @@ -0,0 +1,14 @@ package com.stylefeng.guns.modular.system.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.modular.system.dao.MenuEntryConfigMapper; import com.stylefeng.guns.modular.system.model.MenuEntryConfig; import com.stylefeng.guns.modular.system.service.IMenuEntryConfigService; import org.springframework.stereotype.Service; /** * 平台入口配置服务实现 */ @Service public class MenuEntryConfigServiceImpl extends ServiceImpl<MenuEntryConfigMapper, MenuEntryConfig> implements IMenuEntryConfigService { } ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCompany/menuEntryConfig.html
New file @@ -0,0 +1,71 @@ @layout("/common/_container.html"){ <div class="ibox float-e-margins"> <div class="ibox-content"> <div class="form-horizontal"> <div class="row"> <div class="col-sm-12"> <div class="form-group"> <label class="col-sm-1 control-label">入口配置:</label> <div class="col-sm-11"> <div class="hidden-xs" role="group" style="margin-bottom: 15px;"> <#button btnCss="info" name="添加" id="addEntryConfig" icon="fa-plus" clickFun="MenuEntryConfig.addRow()"/> </div> <table class="table table-striped table-bordered table-hover table-condensed" id="entryConfigTable"> <thead> <tr> <th style="width: 80px;">编号</th> <th style="width: 220px;">标题</th> <th style="width: 260px;">入口</th> <th>入口URL</th> <th style="width: 100px;">操作</th> </tr> </thead> <tbody id="entryConfigBody"> @for(entry in entryConfigList){ <tr class="entry-config-row"> <td> <span class="entry-config-id-text">${entry.id}</span> <input type="hidden" class="entry-config-id" value="${entry.id}"> </td> <td> <input type="text" class="form-control entry-config-title" value="${entry.title}"> </td> <td> <select class="form-control entry-config-menu" onchange="MenuEntryConfig.menuChange(this)"> <option value="">请选择</option> @for(menu in entryMenuList){ <option value="${menu.id}" data-url="${menu.url}" data-name="${menu.name}" ${entry.menuId == menu.id ? 'selected' : ''}>${menu.name}</option> @} </select> </td> <td> <input type="text" class="form-control entry-config-url" value="${entry.entryUrl}" readonly> </td> <td> <button type="button" class="btn btn-danger btn-xs" onclick="MenuEntryConfig.removeRow(this)">删除</button> </td> </tr> @} </tbody> </table> <select id="entryMenuTemplate" style="display: none;"> @for(menu in entryMenuList){ <option value="${menu.id}" data-url="${menu.url}" data-name="${menu.name}">${menu.name}</option> @} </select> </div> </div> </div> </div> <div class="row btn-group-m-t"> <div class="col-sm-10 col-sm-offset-5"> <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="MenuEntryConfig.submit()"/> </div> </div> </div> </div> </div> <script src="${ctxPath}/static/modular/system/tCompany/menuEntryConfig.js"></script> @} ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tCompany/menuEntryConfig.js
New file @@ -0,0 +1,67 @@ var MenuEntryConfig = {}; MenuEntryConfig.menuChange = function (select) { var url = $(select).find("option:selected").data("url") || ""; $(select).closest("tr").find(".entry-config-url").val(url); }; MenuEntryConfig.addRow = function () { var menuOptions = '<option value="">请选择</option>'; $("#entryMenuTemplate option").each(function () { menuOptions += this.outerHTML; }); var row = '<tr class="entry-config-row">' + '<td><span class="entry-config-id-text"></span><input type="hidden" class="entry-config-id" value=""></td>' + '<td><input type="text" class="form-control entry-config-title" value=""></td>' + '<td><select class="form-control entry-config-menu" onchange="MenuEntryConfig.menuChange(this)">' + menuOptions + '</select></td>' + '<td><input type="text" class="form-control entry-config-url" value="" readonly></td>' + '<td><button type="button" class="btn btn-danger btn-xs" onclick="MenuEntryConfig.removeRow(this)">删除</button></td>' + '</tr>'; $("#entryConfigBody").append(row); $("#entryConfigBody .entry-config-row:last .entry-config-menu").val(""); }; MenuEntryConfig.removeRow = function (button) { $(button).closest("tr").remove(); }; MenuEntryConfig.collectData = function () { var entryConfigArr = []; var valid = true; $("#entryConfigBody .entry-config-row").each(function () { var menuId = $(this).find(".entry-config-menu").val(); if (!menuId) { Feng.info("请选择入口"); valid = false; return false; } entryConfigArr.push({ id: $(this).find(".entry-config-id").val(), title: $(this).find(".entry-config-title").val(), menuId: menuId }); }); if (!valid) { return false; } return entryConfigArr; }; MenuEntryConfig.submit = function () { var entryConfigArr = MenuEntryConfig.collectData(); if (entryConfigArr === false) { return; } var ajax = new $ax(Feng.ctxPath + "/tCompany/update_entry_config", function (data) { if (typeof data === "string") { Feng.error(data); return; } Feng.success("提交成功!"); window.location.reload(); }, function (data) { Feng.error("提交失败!" + data.responseJSON.message + "!"); }); ajax.set("entryConfigArr", JSON.stringify(entryConfigArr)); ajax.start(); };