曾富康
2026-06-16 7fec4a3e17c1c0fa206ec2d66a6b425022957d1d
后台新增:入口设置
6个文件已添加
1个文件已修改
406 ■■■■■ 已修改文件
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TCompanyController.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/MenuEntryConfigMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/MenuEntryConfig.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/IMenuEntryConfigService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/MenuEntryConfigServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tCompany/menuEntryConfig.html 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ManagementYKDTravel/guns-admin/src/main/webapp/static/modular/system/tCompany/menuEntryConfig.js 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
};