自定义全局首页配置

需求:

使用代码的方式创建全局首页,给移动端单独配置首页,做到PC端和移动端跳转的首页不同。

代码实现:

大概逻辑是使用SPI的方式去修改路由首页的逻辑。

  1. 判断请求是否是移动端,如果是移动端,则走自定义逻辑。
  2. 查出需要跳转的viewAction,拼出UeModule首页配置
  3. 校验是否有该viewAction的权限。
package pro.shushi.pamirs.top.api.spi;

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import pro.shushi.pamirs.boot.base.model.Action;
import pro.shushi.pamirs.boot.base.model.UeModule;
import pro.shushi.pamirs.boot.base.model.ViewAction;
import pro.shushi.pamirs.boot.web.loader.path.AccessResourceInfo;
import pro.shushi.pamirs.boot.web.manager.MetaCacheManager;
import pro.shushi.pamirs.boot.web.session.AccessResourceInfoSession;
import pro.shushi.pamirs.boot.web.spi.api.HomepageFetcherApi;
import pro.shushi.pamirs.boot.web.spi.service.DefaultHomepageFetcher;
import pro.shushi.pamirs.framework.faas.utils.ArgUtils;
import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j;
import pro.shushi.pamirs.meta.api.core.auth.AuthApi;
import pro.shushi.pamirs.meta.api.session.PamirsSession;
import pro.shushi.pamirs.meta.common.spi.SPI;
import pro.shushi.pamirs.meta.common.spi.Spider;
import pro.shushi.pamirs.meta.domain.module.ModuleDefinition;
import pro.shushi.pamirs.meta.enmu.ClientTypeEnum;

import javax.annotation.Resource;

@Component
@Order(88)
@SPI.Service
@Slf4j
public class GlobalHomePageExtension implements HomepageFetcherApi {

    @Resource
    private DefaultHomepageFetcher defaultHomepageFetcher;

    @Resource
    private MetaCacheManager metaCacheManager;
    //获取全局首页
    @Override
    public UeModule fetchGlobalHomepage() {
        UeModule fetchGlobalHomepage = defaultHomepageFetcher.fetchGlobalHomepage();
        //判断是登录平台,使用默认全局首页配置
        ClientTypeEnum clientTypeEnum = PamirsSession.getRequestVariables().getClientType();
        if (clientTypeEnum.equals(ClientTypeEnum.MOBILE)) {
            return fetchGlobalHomepage;
        }

        //配置返回首页
        ViewAction viewAction = null;
        Action action = metaCacheManager.fetchAction("workbench.WorkBenchHomePage", "homepage");
        if (action instanceof ViewAction) {
            viewAction = (ViewAction) action;
        }
        if (viewAction != null && viewAction.getName() != null && viewAction.getModel() != null) {
            ModuleDefinition moduleDefinition = PamirsSession.getContext().getModule(viewAction.getModule());
            UeModule ueModule = ArgUtils.convert(ModuleDefinition.MODEL_MODEL, UeModule.MODEL_MODEL, moduleDefinition);
            String module = viewAction.getModule();
            if (ueModule.getModule().equals(module)) {
                AccessResourceInfo backupInfo = AccessResourceInfoSession.getInfo();
                //验权
                if (Spider.getDefaultExtension(AuthApi.class).canAccessHomepage(viewAction.getModule()).getSuccess()) {
                    ueModule.setHomePageModel(viewAction.getModel());
                    ueModule.setHomePageName(viewAction.getName());
                    return ueModule;
                } else {
                    AccessResourceInfoSession.setInfo(backupInfo);
                }
            }
        }
        return fetchGlobalHomepage;
    }

    //获取应用首页
    @Override
    public Action fetchApplicationHomePage(UeModule module, String homepageModel, String homepageName) {
        return defaultHomepageFetcher.fetchApplicationHomePage(module, homepageModel, homepageName);
    }
}

效果:

我这边校验的是PC端,PC端登录之后返回的首页如下:
自定义全局首页配置

Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/dai-ma-shi-jian/19590.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
yexiu的头像yexiu数式员工
上一篇 2024年11月23日 上午11:27
下一篇 2024年11月26日 下午3:04

相关推荐

  • mybatis拦截器的使用

    场景:自定义拦截器做数据的加解密。 注册自定义拦截器 @Configuration public class MyBatisConfig { // TODO: 注册自定义拦截器 @Bean @Order(999) public EncryptionInterceptor encryptionInterceptor() { return new Encrypt…

    2024年12月2日
    29100
  • 复杂Excel模版定义

    模版示例: Demo Excel样例 代码示例: @Model.model(TestApply.MODEL_MODEL) @Model(displayName = "测试申请") public class TestApply extends IdModel { public static final String MODEL_MODEL …

    2024年11月18日
    35400
  • 如何选择适合的模型类型?

    介绍 通过Oinone 7天从入门到精通的模型的类型章节我们可以知道模型有抽象模型、存储模型、代理模型、传输模型这四种。但是在在定义模型的时候我们可能不知道该如何选择类型,下面结合业务场景为大家讲解几种模型的典型使用场景。 抽象模型 抽象模型往往是提供公共能力和字段的模型,它本身不会直接用于构建协议和基础设施(如表结构等)。 场景:猫、鸟都继承自动物这个抽象…

    2024年4月7日
    66000
  • 如何删除系统权限中默认的首页节点

    场景: 并没有设置过首页的配置,为什么在系统权限这里的配置菜单中却有首页的配置。而且显示当前资源未完成初始化设置,无法配置。这个文章将帮助你删除这个节点。 注意:如果添加了以下代码,后续如果需要使用首页的配置,则需要删除该代码。 扩展权限加载节点: 遍历权限加载的节点,找到需要删除的模块首页节点。删除节点。 @Component @Order(88) @SP…

    2024年12月31日
    43800
  • 如何改变调度策略,让Schedule独立执行线程

    1、后台创建task type相关的类,继承BaseScheduleNoTransactionTask,要加springbean的注解,参考:task type建议使用类名 2、提交任务的时候,设置tasktype为步骤1的TaskType 3、控制台新增策略和任务bean名称为步骤1的spring beanName,任务名称 $xxx,右边的占位符内容为y…

    2024年2月20日
    49100

发表回复

登录后才能评论