13-渐变+透明样式实现清爽登录页

Vite2+Vue3+TypeScript+Element-plus脚手架搭建系列

✅01-初始化 Vite 项目
✅02-配置 Vite2 环境变量
✅03-Vite2 配置及说明
✅04-Vue3 使用 SCSS
✅05-Vue3 路由配置
✅06-TypeScript 配置及说明
✅07-Vue3 使用 axios
✅08-Vue3 axios 对象封装
✅09-ESLint 配置及说明
✅10-ESLint 与 Prettier 集成配置及说明
✅11-Mock.js 模拟接口数据
✅12-Vite2 引入 Element-Plus 框架
✅13-渐变+透明样式实现清爽登录页
✅14-Element-Plus 实现后台管理系统布局
✅15-Pinia 实现 store 状态管理
✅16-Vue3 动态路由权限控制


源码地址:GitHub / 码云


渐变+透明样式实现清爽登录页

🎯 目标

完成页面开发,mock 登录接口,实现登录功能。登录成功跳转到首页。

🍸 准备

调整文件&目录

  • 添加 src/utils/notice/message.ts ,Message 类型提示的工具文件。
  • 添加 src/api/login/index.ts ,登录 api 文件。
  • 添加 src/mock/login/index.ts ,登录 mock 文件。
  • 添加 src/assets/logo-100.png ,Logo 文件。

🌈 Coding

💡 只粘贴了部分核心代码,完整代码可去 GitHub / 码云 获取

登录 API

src/api/login/index.ts 添加登录接口:

import http from '@/utils/http/index'

export default {
  // ↓登录
  signin: (data?: any) => {
    return http.post('/login/signin', data)
  },
}

Mock 登录接口

src/mock/login/index.ts mock 登录接口数据:

💡 仅当用户名/密码为 admin/123456 时能登录成功

import Mock from 'mockjs'

// ↓mock数据
const data = Mock.mock({
  'info|1': [
    {
      id: '@INCREMENT()',
      username: 'admin',
      name: '超级管理员',
      avatar: '@IMAGE(100, "#ffc72d", "Code-Bee"),',
    },
  ],
})

export default [
  // ↓登录
  {
    url: new RegExp('/login/signin'),
    type: 'post',
    result: (config: any) => {
      const obj = JSON.parse(config.body)
      // ↓校验用户名密码
      if (obj.username !== 'admin' || obj.password !== '123456') {
        return {
          code: 400,
          data: null,
          message: '用户名或者密码错误',
        }
      }
      return {
        code: 200,
        data: data.info,
        message: '登录成功',
      }
    },
  },
]

/src/mocks/index.ts 注册 mock:

import Mock from 'mockjs'
import userMock from './sys/user'
import loginMock from './login/index'

userMock.concat(loginMock).forEach((item) => {
  Mock.mock(item.url, item.type, item.result)
})

Message 提示工具

src/utils/notice/message.ts 提供 Message 组件使用的工具方法:

import { ElMessage } from 'element-plus'

// 正常
const normalMessage = (message: string): any => {
  return ElMessage({
    showClose: true,
    message,
  })
}

// 成功
const successMessage = (message: string): any => {
  return ElMessage({
    showClose: true,
    message,
    type: 'success',
  })
}

// 警告
const warnMessage = (message: string): any => {
  return ElMessage({
    showClose: true,
    message,
    type: 'warning',
  })
}

// 错误
const errorMessage = (message: string): any => {
  return ElMessage({
    showClose: true,
    message,
    type: 'error',
  })
}

export { normalMessage, successMessage, warnMessage, errorMessage }

引入 Element 组件

/src/config/element/index.ts 配置新引入 Element-Plus 组件:

import { App } from 'vue'
import { ElContainer, ElAside, ElHeader, ElMain, ElFooter, ElInput, ElButton } from 'element-plus'

const components = [ElContainer, ElAside, ElHeader, ElMain, ElFooter, ElInput, ElButton]

export function useElementComponents(app: App): void {
  components.forEach((component) => {
    app.component(component.name, component)
  })
}

登录页面

Login.vue 添加登录表单、背景、系统 Logo 等页面元素及登录方法:

<template>
  <div class="bg">
    <div class="panel">
      <div class="panel-left">
        <el-input v-model="form.username" class="form-item" placeholder="用户名"></el-input>
        <el-input v-model="form.password" class="form-item" type="password" placeholder="密码"></el-input>
        <el-button class="login-btn" @click="signin">登 录</el-button>
      </div>
      <div class="panel-right">
        <img src="@/assets/logo-100.png" width="60" />
        <div class="title">Code-Bee</div>
      </div>
    </div>
  </div>
</template>

<script lang="ts">
import { defineComponent, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { errorMessage } from '@/utils/notice/message'
import loginApi from '@/api/login'

export default defineComponent({
  name: 'Login',
  setup() {
    const router = useRouter()

    // ↓表单数据
    const form = reactive({
      username: '',
      password: '',
    })

    // ↓登录
    const signin = () => {
      if (!form.username) {
        errorMessage('用户名为空')
      } else if (!form.password) {
        errorMessage('密码为空')
      } else {
        loginApi.signin(form).then((res: any) => {
          // TODO 保存用户信息
          console.log('登录成功,跳转到首页', res)
          router.push('/')
        })
      }
    }
    return { form, signin }
  },
})
</script>

🎭 结果

  • 页面效果
    在这里插入图片描述
  • 输入正确用户名密码,控制台输出登录成功信息,页面跳转到首页。
    在这里插入图片描述
  • 登录失败提示信息。
    在这里插入图片描述

本文为博主原创文章,任何个人、团体、机构转载和摘录,请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

code-bee

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

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

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

打赏作者

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

抵扣说明:

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

余额充值