若依VUE前后分离版本自定义主题风格

1.效果展示

在这里插入图片描述

在这里插入图片描述

2.操作步骤

2.1修改Navbar头部背景颜色

在这里插入图片描述
文件路径:src\layout\components\Navbar.vue
修改内容:设置头部背影颜色及右侧图标颜色

在这里插入图片描述
在这里插入图片描述

2.2 修改左侧图标颜色

在这里插入图片描述

文件路径:src\components\Hamburger\index.vue

<template>
  <div style="padding: 1px 15px;" @click="toggleClick">
    <i class="el-icon-s-fold hamburger" :class="{'is-active':isActive}" ></i>
  </div>
</template>

.hamburger {
  display: inline-block;
  vertical-align: middle;
  width: 20px;
  height: 20px;
  color: #FFFFFF;
  font-size: 20px;
}

2.3添加自定义主题风格

文件路径:src\layout\components\Settings\index.vue
新增一个主题风格选项,主要注意的是handleTheme里面的传参(后面会用到)和img的src图片,例如实例中的blue.svg

            <!--自定义主题风格-->
            <div class="setting-drawer-block-checbox-item" @click="handleTheme('theme-blue')">
              <img src="@/assets/images/blue.svg" alt="dark">
              <div v-if="sideTheme === 'theme-blue'" class="setting-drawer-block-checbox-selectIcon"
                   style="display: block;">
                <i aria-label="图标: check" class="anticon anticon-check">
                  <svg viewBox="64 64 896 896" data-icon="check" width="1em" height="1em" :fill="theme"
                       aria-hidden="true" focusable="false" class="">
                    <path
                      d="M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 0 0-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"/>
                  </svg>
                </i>
              </div>
            </div>

静态资源svg图片代码 放在src\assets\images 目录下

<?xml version="1.0" encoding="UTF-8"?>
<svg width="52px" height="45px" viewBox="0 0 52 45" version="1.1"
    xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <defs>
        <filter x="-9.4%" y="-6.2%" width="118.8%" height="122.5%" filterUnits="objectBoundingBox" id="filter-1">
            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
            <feGaussianBlur stdDeviation="1" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.15 0" type="matrix" in="shadowBlurOuter1" result="shadowMatrixOuter1"></feColorMatrix>
            <feMerge>
                <feMergeNode in="shadowMatrixOuter1"></feMergeNode>
                <feMergeNode in="SourceGraphic"></feMergeNode>
            </feMerge>
        </filter>
        <rect id="path-2" x="0" y="0" width="48" height="40" rx="4"></rect>
        <filter x="-4.2%" y="-2.5%" width="108.3%" height="110.0%" filterUnits="objectBoundingBox" id="filter-4">
            <feOffset dx="0" dy="1" in="SourceAlpha" result="shadowOffsetOuter1"></feOffset>
            <feGaussianBlur stdDeviation="0.5" in="shadowOffsetOuter1" result="shadowBlurOuter1"></feGaussianBlur>
            <feColorMatrix values="0 0 0 0 0   0 0 0 0 0   0 0 0 0 0  0 0 0 0.1 0" type="matrix" in="shadowBlurOuter1"></feColorMatrix>
        </filter>
    </defs>
    <g id="配置面板" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <g id="setting-copy-2" transform="translate(-1254.000000, -136.000000)">
            <g id="Group-8" transform="translate(1167.000000, 0.000000)">
                <g id="Group-5" filter="url(#filter-1)" transform="translate(89.000000, 137.000000)">
                    <mask id="mask-3" fill="white">
                        <use xlink:href="#path-2"></use>
                    </mask>
                    <g id="Rectangle-18">
                        <use fill="black" fill-opacity="1" filter="url(#filter-4)" xlink:href="#path-2"></use>
                        <use fill="#F0F2F5" fill-rule="evenodd" xlink:href="#path-2"></use>
                    </g>
                    <rect id="Rectangle-18" fill="#2f54eb" mask="url(#mask-3)" x="0" y="0" width="16" height="40"></rect>
                    <rect id="Rectangle-11" fill="#2f54eb" mask="url(#mask-3)" x="0" y="0" width="48" height="10"></rect>
                </g>
            </g>
        </g>
    </g>
</svg>

2.4 自定义样式

2.4.1 修改文件路径:src\assets\styles\variables.scss

在这里插入图片描述
在这里插入图片描述

// 新增菜单主题风格
$base-menu-blue-background:#2f54eb;  //一级菜单颜色
$blue-sub-menu-background:#003793;  //二级菜单展开颜色
$blue-sub-menu-hover:#023281;  //二级菜单鼠标移入颜色
$blue-logo-light-title-color: #2f54eb;  //顶部logo背景颜色

  //新增导出
  menuBlueBackground:$base-menu-blue-background;
  menuBackgroundColor:$blue-logo-light-title-color;  //头部logo背景颜色

这里的变量名可以自定义,但还是要注意和后面的一一对应

2.4.2 修改文件路径:src\assets\styles\sidebar.scss在这里插入图片描述

    //新增样式
    & .theme-blue .nest-menu .el-submenu>.el-submenu__title,
    & .theme-blue .el-submenu .el-menu-item {
      background-color: $blue-sub-menu-background !important;

      &:hover {
        background-color: $blue-sub-menu-hover !important;
      }
    }

2.5 修改Logo.vue

文件路径:src\layout\components\Sidebar\Logo.vue

<template>
  <!--顶部logo的背景颜色-->
  <div class="sidebar-logo-container" :class="{'collapse':collapse}"
       :style="{ backgroundColor: variables.menuBackgroundColor}">

    <transition name="sidebarLogoFade">
      <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
        <img v-if="logo" :src="logo" class="sidebar-logo"/>
        <!--固定顶部文字颜色为白色-->
        <h1 v-else class="sidebar-title"
            :style="{color : variables.logoTitleColor}">
          {{ title }} </h1>
      </router-link>

      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
        <img v-if="logo" :src="logo" class="sidebar-logo"/>
        <!--固定顶部文字颜色为白色-->
        <h1 class="sidebar-title"
            :style="{color : variables.logoTitleColor}">
          {{ title }} </h1>
      </router-link>

    </transition>
  </div>
</template>

这里主要是修改顶部logo的背景颜色

2.6 修改Sidebar.vue

      <el-menu
        :default-active="activeMenu"
        :collapse="isCollapse"
        :background-color="settings.sideTheme === 'theme-dark' ? variables.menuBackground : settings.sideTheme === 'theme-blue' ? variables.menuBlueBackground : variables.menuLightBackground"
        :text-color="settings.sideTheme === 'theme-dark' ? variables.menuColor : settings.sideTheme === 'theme-blue' ? variables.menuColor : variables.menuLightColor"
        :unique-opened="true"
        :active-text-color="settings.theme"
        :collapse-transition="false"
        mode="vertical"
      >
        <sidebar-item
          v-for="(route, index) in sidebarRouters"
          :key="route.path  + index"
          :item="route"
          :base-path="route.path"
        />
      </el-menu>

以下代码是去除顶部logo的阴影效果,个人感觉好看一些,把sidebar-container属性下的
overflow: hidden;
-webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
box-shadow: 2px 0 6px rgba(0,21,41,.35);
移入到 el-scrollbar 属性中


 //修改左侧菜单栏右侧去除顶部的阴影效果
    .el-scrollbar {
      height: 100%;
      overflow: hidden;
      -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35);
      box-shadow: 2px 0 6px rgba(0,21,41,.35);
    }
  • 36
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,我来简单介绍一下Spring Boot和Vue前后端分离中使用Security进行自定义登录的步骤。 首先,我们需要在Spring Boot中引入Spring Security依赖。可以在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 然后,我们需要创建一个类来实现SecurityConfigurerAdapter,并重写configure方法。在这个方法中,我们可以自定义登录页面、登录接口、认证方式等等。以下是一个简单的例子: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserService userService; @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .antMatchers("/", "/login").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login").permitAll() .defaultSuccessUrl("/home") .and() .logout().permitAll(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(passwordEncoder()); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 在上面的代码中,我们使用了一个自定义的UserService来获取用户信息,并使用BCryptPasswordEncoder对密码进行加密。 接下来,我们需要在Vue中发送登录请求,并将输入的用户名和密码传递给后端进行认证。可以使用axios库来发送请求。以下是一个简单的例子: ```javascript axios.post('/login', { username: 'user', password: 'password' }).then(response => { // 登录成功,获取返回的token并保存到本地 const token = response.data.token; localStorage.setItem('token', token); }).catch(error => { // 登录失败,输出错误信息 console.error(error.response.data); }); ``` 在上面的代码中,我们发送了一个POST请求到/login接口,参数为username和password。如果登录成功,后端会返回一个token,我们将其保存到本地。如果登录失败,后端会返回一个错误信息,我们将其输出到控制台。 最后,我们需要在后端中验证token。可以在每个接口中添加一个拦截器,在拦截器中进行token的验证。以下是一个简单的例子: ```java public class JwtInterceptor implements HandlerInterceptor { @Autowired private UserService userService; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 从请求头中获取token String token = request.getHeader("Authorization"); if (token == null) { throw new UnauthorizedException("未登录"); } // 验证token String username = JwtUtil.getUsername(token); User user = userService.loadUserByUsername(username); if (!JwtUtil.verify(token, username, user.getPassword())) { throw new UnauthorizedException("无效的token"); } return true; } } ``` 在上面的代码中,我们从请求头中获取token,并使用JwtUtil对token进行验证。如果验证通过,就说明用户已经登录。如果验证失败,就说明token无效,需要重新登录。 以上就是Spring Boot和Vue前后端分离中使用Security进行自定义登录的步骤。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锐爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值