IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vite2+Vue3+TypeScript+Element-plus脚手架搭建(13-登录页开发) -> 正文阅读

[JavaScript知识库]Vite2+Vue3+TypeScript+Element-plus脚手架搭建(13-登录页开发)

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

?01-创建项目???????02-环境变量???????03-Vite配置???????04-引入scss???????05-路由初试???????06-TS配置???????07-axios初试???????08-axios封装???????09-ESLint配置???????10-Prettier配置???????11-使用Mock.js???????12-引入Element-Plus???????13-登录页开发??????🔲xx-敬请期待


源码地址: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

登录 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 等页面元素及登录方法:

💡 未粘贴 scss 代码,可去 GitHub / 码云 获取

<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>

其它改动

src\utils\http\index.tssrc\utils\http\custom-axios.ts 有少量非业务代码改动。

💡 主要为控制台输出和 alert 弹框,可去 GitHub / 码云 获取

🎭 结果

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

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

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:42:11  更:2021-09-20 15:42:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:22:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码