自定义全局首页配置

需求:

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

代码实现:

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

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

import org.springframework.beans.factory.annotation.Autowired;
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.loader.path.ResourcePath;
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.boot.web.utils.PageLoadHelper;
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.enmu.ClientTypeEnum;

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

    @Autowired
    private DefaultHomepageFetcher defaultHomepageFetcher;

    //获取全局首页
    @Override
    public UeModule fetchGlobalHomepage() {
        UeModule fetchGlobalHomepage = defaultHomepageFetcher.fetchGlobalHomepage();
        //如果是PC端,使用默认全局首页配置
        ClientTypeEnum clientTypeEnum = PamirsSession.getRequestVariables().getClientType();
        if (clientTypeEnum.equals(ClientTypeEnum.PC)) {
            return fetchGlobalHomepage;
        }

        //配置返回首页
        ViewAction viewAction = new ViewAction().setModel(WorkBenchHomePage.MODEL_MODEL).setName("homepage").queryOne();
        if (viewAction != null && viewAction.getName() != null && viewAction.getModel() != null) {
            UeModule ueModule = new UeModule();
            ueModule.setModule(viewAction.getModule());
            String module = viewAction.getModule();
            if (ueModule.getModule().equals(module)) {
                AccessResourceInfo backupInfo = AccessResourceInfoSession.getInfo();
                AccessResourceInfo info = PageLoadHelper.generatorAccessResourceInfo(ueModule.getModule(), viewAction);
                AccessResourceInfoSession.setInfo(info);
                String path = ResourcePath.generatorPath(viewAction.getModel(), viewAction.getName());
                viewAction.setSessionPath(path);
                //验权
                if (Spider.getDefaultExtension(AuthApi.class).canAccessAction(path).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数式员工
上一篇 4天前
下一篇 22小时前

相关推荐

  • 复杂Excel模版定义

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

    2024年11月18日
    25900
  • 如何角色给菜单增加权限

    对接第三方的权限时,第三方传过来菜单项,需要拿着这些菜单在平台这边进行授权,可以使用代码的方式给指定菜单创建权限代码示例: public class demo { @Autowired private PermissionNodeLoader permissionNodeLoader; @Autowired private AuthRbacRolePermi…

    2024年11月14日
    27900
  • 如何改变调度策略,让Schedule独立执行线程

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

    2024年2月20日
    41700
  • 后端:如何自定义表达式实现特殊需求?扩展内置函数表达式

    平台提供了很多的表达式,如果这些表达式不满足场景?那我们应该如何新增表达式去满足项目的需求?目前平台支持的表达式内置函数,参考 1. 扩展表达式的场景 注解@Validation的rule字段支持配置表达式校验如果需要判断入参List类型字段中的某一个参数进行NULL校验,发现平台的内置函数不支持该场景的配置,这里就可以通过平台的机制,对内置函数进行扩展。 …

    2024年5月30日
    81200
  • Oinone登录扩展:对接SSO(适应于4.7.8及之后的版本)

    适配版本 4.7.8及其之后的版本 概述 在企业内部,对于已有一套完整的登录系统(SSO)的情况下,通常会要求把所有的系统都对接到SSO中;本文主要讲解用Oinone开发的项目对接SSO的具体实现。 对接步骤 1、项目自定义实现UserCookieLogin,可参考示例说明:pro.shushi.pamirs.user.api.login.UserCooki…

    2024年4月2日
    93100

发表回复

登录后才能评论