VUE-TypeScript 登入功能

目录

功能介绍

功能演示

代码演示


功能介绍

实现登入功能 请求接口 数据校验 Element使用

 

功能演示

代码演示

LoginView.vue

<template>
  <div class="login-box">
    <el-form
      ref="ruleFormRef"
      :model="data.ruleForm"
      status-icon
      :rules="rules"
      label-width="120px"
      class="demo-ruleForm"
    >
      <h2>后台登入</h2>
      <el-form-item label="电话号码" prop="userTelephone">
        <el-input
          v-model.number="data.ruleForm.userTelephone"
          type="userTelephone"
          autocomplete="off"
        />
      </el-form-item>
      <el-form-item label="密码" prop="userPassword">
        <el-input
          v-model="data.ruleForm.userPassword"
          type="userPassword"
          autocomplete="off"
        />
      </el-form-item>
      <el-form-item>
        <el-button
          class="loginBtn"
          type="primary"
          @click="submitForm(ruleFormRef)"
          >登入</el-button
        >
        <el-button class="loginBtn" @click="resetForm(ruleFormRef)"
          >重置</el-button
        >
      </el-form-item>
    </el-form>
  </div>
</template>

<script lang="ts" setup>
import { reactive, ref } from "vue";
import type { FormInstance, FormRules } from "element-plus";
import { LoginData } from "../type/login";
import { login } from "@/request/api";
import { useRouter } from "vue-router";

const ruleFormRef = ref<FormInstance>();
//用户输入数据
const data = reactive(new LoginData());
//数据输入规则
const rules = reactive<FormRules>({
  userTelephone: [
    { required: true, message: "请输入电话号码", trigger: "blur" },
    { type: "number", message: "必须为数字",trigger: "blur" },
    {
      pattern: /^(?:0|86|\+86)?1[3-9]\d{9}/,
      message: "请输入正确的手机号码",
      trigger: "blur"
    },
  ],
  userPassword: [
    {
      required: true,
      message: "请输入密码",
      trigger: "blur",
    },
    { min: 6, max: 18, message: "密码长度应在6-18位之间", trigger: "blur" },
  ],
});
const router = useRouter(); //=>this.$router
//后台登入
const submitForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return;
  //对表单内容进行验证
  //valid 布尔类型 为true 验证成功
  formEl.validate((valid) => {
    if (valid) {
      //调用登入接口
      login(data.ruleForm).then((res) => {
        console.log(res)
        localStorage.setItem("token", res.data.token);
        router.push("/");
      });
    } else {
      console.log("error submit!");
      return false;
    }
  });
};
//重置操作
const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return;
  formEl.resetFields();
};
</script>

<style lang="scss" scoped>
//总体样式
.login-box {
  width: 100%;
  height: 100%;
  background: url(../assets/login/login-bt.png) no-repeat center center fixed;
  /*兼容浏览器版本*/
  -webkit-background-size: cover;
  -o-background-size: cover;
  background-size: cover;
  padding: 1px;
  text-align: center;
  // 输入框样式
  .demo-ruleForm {
    width: 500px;
    margin: 200px auto;
    background-color: bisque;
    padding: 40px;
    border-radius: 20px;
  }
  //提交按钮样式
  .loginBtn {
    width: 48%;
  }
  h2 {
    margin-bottom: 10px;
  }
}
</style>

router index.ts

import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import HomeView from '../views/HomeView.vue'

const LoginView =() => import(/* webpackChunkName: "login" */ '../views/LoginView.vue');

const routes: Array<RouteRecordRaw> = [
  // 首页
  {
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    path: '/about',
    name: 'about',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
  },
  // 登入
  {
    path: '/login',
    name: 'login',
    component: LoginView
  },
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

type login.ts

export interface LoginForm {
    userTelephone: string
    userPassword: string
}
export class LoginData{
    ruleForm:LoginForm={
        userTelephone: "",
        userPassword:""

    }
}

axios数据封装 

接口请求的配置=>Axios配置 封装 简单使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

新生代农民工-小王八

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

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

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

打赏作者

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

抵扣说明:

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

余额充值