Element框架实现后台管理系统的业务逻辑(登录页)

74 篇文章 3 订阅

一、事前准备

1.从0到1自定义创建vue框架
2.Element框架从安装到使用

二、实现步骤

2.1创建路由对象并添加配置

//当前项目的路由模块
//如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能
import Vue from 'vue'
//安装好后就会有vue-router
import VueRouter from 'vue-router'
//在当前项目中安装路由
Vue.use(VueRouter)
// 1.创建路由对象
const router = new VueRouter({
    // 2.添加路由配置,通过routes来添加路由配置
    routes: [
        //3.添加具体的路由配置:配置的本质就是将路由映射到组件
        //一般来说,我们可以设置为如下几个选项:name path component redirect children
        // name:路由名称
        //path:路由路径
        //component:路由所映射的组件对象
        {
            name: 'login',
            path: '/login',
            // 异步引入组件
            component: () => import('@/views/login.vue')
        },
    ]
})

// 4.暴露
export default router

2.2登录页引入路由

import { login } from "@/apis/user";

2.3制作登录组件

实现逻辑:
1.书写静态样式
2.element挑选适合的组件,删去不需要的部分,这里使用到的是:
from组件(表单验证)
input(icon图标)
Button 按钮
3.使用validate验证用户信息输入是否规范,失焦时一次验证,点击登录二次验证。
4.data中使用rules定义校验规则
5.在表单获取焦点(focus)时清除校验信息(clearValidate),意指在用户输入时不要提示,提升用户体验.
6.书写不规范、登录失败、输入框为空等$message给出提示。
7.点击登录validate验证信息,校验成功获取表单信息发送登录请求,登录请求成功给出提示,并储存用户信息。登录失败给提示不发送请求。
8.跳转前使用导航守卫从储存获取token进行验证,由于这个是后台管理系统,除了登录页外都需要验证。
validate的使用:Element------validate表单验证代码示例与校验规则

登录页代码

.<template>
  <div class="login">
    <div class="container">
      <!-- 头像 -->
      <img src="../assets/headimg.jpg" alt="" class="avatar" />
      <!-- el-form -->
      <!-- :model:值为整个表单的数据 -->
      <!-- rules:传入约定的验证规则,是一个对象,里面的每组键值对就是一条规则,一条规则就是一个数据属性的规则-->
      <!-- ref:当前表单的标识,DOM元素或子组件注册引用信息 -->
      <el-form
        :model="user"
        :rules="rules"
        ref="ruleForm"
        class="demo-ruleForm"
      >
        <!-- el-form-item:就是一个表单元素 -->
        <!-- prop:设置为需校验的字段名 -->
        <!-- v-model:数据绑定,这里为用户框/密码框 -->
        <!-- prefix-icon:在 input 组件首部增加显示图标,也可以通过 slot 来放置图标。 -->
        <!-- focus:焦点事件,在 Input 获得焦点时触发 -->
        <!-- 用户名框 -->
        <el-form-item prop="username">
          <el-input
            v-model="user.username"
            placeholder="请输入用户名称"
            prefix-icon="el-icon-user"
            @focus="clearRules('username')"
          ></el-input>
        </el-form-item>
        <!-- 密码框 -->
        <el-form-item prop="password">
          <el-input
            v-model="user.password"
            placeholder="请输入密码"
            type="password"
            prefix-icon="el-icon-lock"
            @focus="clearRules('password')"
          ></el-input>
        </el-form-item>
        <!-- 按钮 -->
        <!-- type、round:定义按钮样式 -->
        <!-- click:点击触发事件 -->
        <el-button type="primary" round class="login-btn" @click="userlogin"
          >登录</el-button
        >
      </el-form>
    </div>
  </div>
</template>

<script>
import { login } from "@/apis/user";
export default {
  data() {
    return {
      // 表单成员
      user: {
        username: "10086",
        password: "123",
      },
      /*通过rules定义校验规则
       required:必填
       message:未填时触发报错信息
       trigger:触发器,失去焦点是触发
       pattern:正则*/
      rules: {
        username: [
          { required: true, message: "请输入用户名称", trigger: "blur" },
          {
            pattern: /^1\d{4}$|^1d{10}$/,
            message: "请输入合法的手机号",
            trigger: "blur",
          },
        ],
        password: [{ required: true, message: "请输入密码", trigger: "blur" }],
      },
    };
  },
  methods: {
    // clearValidate:表单聚焦时移除表单项的校验结果,需传入prop属性或数组,否则移出整个表单校验结果
    clearRules(a) {
      this.$refs.ruleForm.clearValidate(a);
    },
    async userlogin() {
      // 点击时调用validate验证
      this.$refs.ruleForm.validate(async (valid) => {
        // 如果数据为true则发送登陆请求
        if (valid) {
          let res = await login(this.user);
          console.log(res);
          //如果请求成功转换成字符串储存用户信息,并用$message发送提示
          if (res.data.message == "登录成功") {
            localStorage.setItem("usermanager", JSON.stringify(res.data.data));
            this.$message({
              message: res.data.message,
              type: "success",
            });
            //成功后跳转首页
            this.$router.push({ path: "/index" });
          } else {
            // 请求失败发送提示
            this.$message({
              message: res.data.message,
              type: "error",
            });
          }
        } else {
          this.$message({
            message: "用户输入不合法",
            type: "error",
          });
        }
      });
    },
  },
};
</script>

.<style lang="less" scoped>
//样式
.login {
  position: fixed;
  width: 100%;
  height: 100%;
  background-color: #2f4050;

  .container {
    position: absolute;
    left: 0;
    right: 0;
    width: 400px;
    padding: 0px 40px 15px 40px;
    margin: 200px auto;
    background: white;
    .avatar {
      position: relative;
      left: 50%;
      width: 120px;
      height: 120px;
      margin-left: -60px;
      margin-top: -60px;
      box-sizing: border-box;
      border-radius: 50%;
      border: 10px solid #fff;
      box-shadow: 0 1px 5px #ccc;
      overflow: hidden;
    }
    .login-btn {
      width: 100%;
    }
  }
}
</style>

导航守卫代码

//添加导航守卫
router.beforeEach((to, from, next) => {
    // console.log(to, from, next);
    if (to.name == 'login') {
        next()
    } else {
        let token = JSON.parse(localStorage.getItem('usermanager') || "{}").token
        if (token) {
            next()
        } else {
            next({ path: '/login' })
        }
    }
})

三、效果

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台管理系统业务逻辑包括配置路由、制作首组件、实现接口、使用webflux实现复杂逻辑登录鉴权等内容。其中,配置路由是指设置后台管理系统的路由,使得用户可以通过相应的URL路径访问不同的功能面。制作首组件是指创建一个包含整体结构的首组件,该组件包含后台管理系统的各个功能模块。实现接口是指开发后台管理系统所需的业务接口,可以通过这些接口实现与数据库的交互和数据的增删改查等操作。使用webflux实现复杂逻辑是指利用webflux框架实现一些复杂的业务逻辑,如异步处理、流式处理等。登录鉴权是指通过身份验证和授权机制来确保后台管理系统的安全性,只有经过身份验证的用户才能访问系统的敏感功能。综上所述,后台管理系统业务逻辑涵盖了路由配置、首组件制作、接口实现、webflux应用和登录鉴权等方面。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Element框架实现后台管理系统业务逻辑(首)](https://blog.csdn.net/weixin_47886687/article/details/109469549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Spring WebFlux + React搭建后台管理系统(2): 主要业务逻辑实现](https://blog.csdn.net/tonydz0523/article/details/108269233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [大型互联网平台后台管理系统源码](https://download.csdn.net/download/sucaiwa/87840766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值