基于element-plus-admin实际开发记录(一)element-plus-admin登录

这篇具有很好参考价值的文章主要介绍了基于element-plus-admin实际开发记录(一)element-plus-admin登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录



前言

最近,学习vue3,对比vue2来说,对于我多多少少有点难上手。
身为一个前端程序员,自然不能直接躺平了,于是奋发努力开始充实自己。
GitHub上找了一个比较好的框架,开始摸索学习。
采用element-plus-admin进行开发学习,GitHub地址
基于element-plus-admin实际开发记录(一)element-plus-admin登录
该框架使用技术: ES2015+、vue-next、typescript、vite、postcss 和 element-plus
本人还在学习摸索中,如有哪里不妥,请各位见谅。
话不多说开搞。


提示:以下是本篇文章正文内容

一、解决跨域代理

element-plus-admin使用的vite,vite我也是第一次搞,查阅了不少资料。由于本次学习是好朋友用自己服务器给我搭了一个服务,我本地访问的他的接口需要进行下跨域代理。
直接在vite.config.ts文件中,把server下的proxy注释掉,修改一下,详细如下

 server: {
            // proxy: env.VITE_PROXY ? proxy(JSON.parse(env.VITE_PROXY)) : {},
            proxy:{
                '/api':{
                    target:env.VITE_PROXY,
                    changeOrigin:true,
                    rewrite:(path) => path.replace(/^\/api/,'')
                }
            },
            port: env.VITE_PORT,
            host: '0.0.0.0'
        },

然后在.env.production文件里,修改VITE_PROXY为自己的

VITE_PROXY = [["/api","http://xxx.xxx.xx.xx:8011"]]

二、获取验证码

这里登录时需要输入用户名、密码,然后自己添加了一个图形验证码。
用户的登录的逻辑是这样:
1.用户打开登录页面要先发起请求,获取图形验证码,后台会返回一个image地址和uuid。
2.用户登录时要传递四个参数到登录接口,userName、passWord、captchaCode、uuid。
3.登录成功后会返回用户信息以及token。
4.然后调用路由接口,返回菜单,渲染后进入首页。

第一,在views-user-login.vue文件中添加图形验证码,详细代码如下:

<template>
    <div class='w-screen h-screen bg-gray-800'>
        <div class='layout-login' @keyup='enterSubmit'>
            <h3 class='text-2xl font-semibold text-gray-100 text-center mb-6'>系统登陆</h3>
            <el-form ref='ruleForm' label-position='right' label-width='80px' :model='form' :rules='rules'>
                <el-form-item class='mb-6 -ml-20' prop='name'>
                    <el-input v-model='form.name' placeholder='请输入用户名' prefix-icon='el-icon-user' />
                </el-form-item>
                <el-form-item class='mb-6 -ml-20' prop='pwd'>
                    <el-input v-model='form.pwd' placeholder='请输入密码' prefix-icon='el-icon-lock' show-password />
                </el-form-item>
                <el-form-item class='mb-6 -ml-20' prop='captchaCode'>
                    <el-input v-model='form.captchaCode' placeholder='请输入验证码' prefix-icon='el-icon-lock' style='width:260px' />
                    <el-image class='captchaCodeImg' style='width: 130px; height: 50px;margin-left:10px;border-radius:5px;' :src='captchaCodeImg' @click='getCaptchaCodeImg' />
                </el-form-item>
                <el-form-item class='mb-6 -ml-20'>
                    <el-button type='primary' class='w-full' @click='onSubmit'>登录</el-button>
                </el-form-item>
                
                <div class='flex justify-between'>
                    <div class='text-gray-300'>
                        <p class='leading-6 text-sm'><span class='w-24 inline-block'>账号: admin</span> 密码: 123456</p>
                        <p class='leading-6 text-sm'><span class='w-24 inline-block'>账号: dev</span> 密码: dev</p>
                        <p class='leading-6 text-sm'><span class='w-24 inline-block'>账号: test</span> 密码: test</p>
                    </div>
                    <div><el-button type='primary'>第三方登录</el-button></div>
                </div>
            </el-form>
        </div>
    </div>
</template>

<script lang="ts">
import { computed, defineComponent, reactive, ref } from 'vue'
import { useLayoutStore } from '/@/store/modules/layout'
import { ElNotification } from 'element-plus'
import { validate } from '/@/utils/formExtend'

export default defineComponent({
    name: 'Login',
    setup() {
        const { login } = useLayoutStore()
        let form = reactive({
            name: 'admin',
            pwd: '123456',
            captchaCode: '',
            uid: ''
        })
        const ruleForm = ref(null)
        const enterSubmit = (e:KeyboardEvent) => {
            if(e.key === 'Enter') {
                onSubmit()
            }
        }
        const onSubmit = async() => {
            let { name, pwd ,captchaCode ,uid } = form
            if(!await validate(ruleForm)) return
            await login({ username: name, password: pwd , captchaCode: captchaCode , uid: uid })
            ElNotification({
                title: '欢迎',
                message: '欢迎回来',
                type: 'success'
            })
        }
        const rules = reactive({
            name: [
                { validator: (rule: any, value: any, callback: (arg0?: Error|undefined) => void) => {
                    if (!value) {
                        return callback(new Error('用户名不能为空'))
                    }
                    callback()
                }, trigger: 'blur' 
                }
            ],
            pwd: [
                { validator: (rule: any, value: any, callback: (arg0?: Error|undefined) => void) => {
                    if (!value) {
                        return callback(new Error('密码不能为空'))
                    }
                    callback()
                }, trigger: 'blur' 
                }
            ]
        })
        const captchaCodeImg = ref('')
        // getCaptchaCodeImg为请求图形校验码地址
        function getCaptchaCodeImg() {
            useLayoutStore().getCaptchaCodeImg()
                .then(res => {
                    console.log(res)
                    captchaCodeImg.value = res.image
                    form.uid = res.uid
                })
        }
        return {
            labelCol: { span: 4 },
            wrapperCol: { span: 14 },
            form, 
            onSubmit,
            enterSubmit,
            rules,
            ruleForm,
            captchaCodeImg,
            getCaptchaCodeImg
        }
    },
    mounted() {
        this.getCaptchaCodeImg()
    }
})
</script>

<style lang='postcss' scoped>
.layout-login {
    padding-top: 200px;
    width: 400px;
    margin: 0 auto;

    ::v-deep(.el-input__inner) {
        height: 50px;
        border: 1px solid hsla(0, 0%, 100%, 0.1);
        border-radius: 5px;
        color: #ddd;
    }
}

</style>

第二,在api-layout-index.ts文件里添加获取图形验证码接口,详细代码如下:

import request from '/@/utils/request'
import { AxiosResponse } from 'axios'
import { IMenubarList } from '/@/type/store/layout'

const api = {
    login: '/api/auth/login',
    getUser: '/api/auth/getUserInfo',
    getRouterList: '/api/auth/ownMenu',
    publickey: '/api/User/Publickey',
    getCaptchaCodeImg: '/api/auth/captcha' //获取图形验证码接口
}

export interface loginParam {
    username: string,
    password: string,
    captchaCode: string,
    uid: string
}

export function login(param: loginParam):Promise<AxiosResponse<IResponse<string>>> {
    return request({
        url: api.login,
        method: 'post',
        data: param
    })
}

export function publickey():Promise<AxiosResponse<IResponse<string>>> {
    return request({
        url: api.publickey,
        method: 'get'
    })
}

interface IGetuserRes {
    name: string
    role: Array<string>
}
interface ImgGetRes {
    image: string
    uuid: string
}

export function getUser(): Promise<AxiosResponse<IResponse<IGetuserRes>>> {
    return request({
        url: api.getUser,
        method: 'get'
    })
}
export function getRouterList(): Promise<AxiosResponse<IResponse<Array<IMenubarList>>>> {
    return request({
        url: api.getRouterList,
        method: 'get'
    })
}

export function getCaptchaCodeImg() {
    return request({
        url: api.getCaptchaCodeImg,
        method: 'get'
    })
}

第三,在store-modules-layout.ts里进行调用,引入getCaptchaCodeImg

import { login, loginParam, getRouterList, getUser , getCaptchaCodeImg } from '/@/api/layout/index'

在下方添加

async getCaptchaCodeImg() {
     const res = await getCaptchaCodeImg()
     const CaptchaCode = res.data.data
     return CaptchaCode
 },

这样子就实现了
基于element-plus-admin实际开发记录(一)element-plus-admin登录文章来源地址https://www.toymoban.com/news/detail-438236.html

到了这里,关于基于element-plus-admin实际开发记录(一)element-plus-admin登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript + Element-Plus 从0到1搭建后台管理系统(前后端开源@有来开源组织)

    vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 + Vite4 + TypeScript + Element Plus + Pinia + Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于 一有一无 ( 有 配套后端、 无 复杂封装): 配套完整 J

    2023年04月21日
    浏览(255)
  • 【vue3-element-admin 】基于 Vue3 + Vite4 + TypeScript5+ Element-Plus 从0到1搭建企业级后台管理系统(前后端开源)

    vue3-element-admin 是基于 vue-element-admin 升级的 Vue3 + Element Plus 版本的后台管理前端解决方案,技术栈为 Vue3 + Vite4 + TypeScript + Element Plus + Pinia + Vue Router 等当前主流框架。 相较于其他管理前端框架,vue3-element-admin 的优势在于 一有一无 (有配套后端、无复杂封装): 配套完整 Java 后

    2024年02月07日
    浏览(213)
  • vue-element-plus-admin框架的tag上下文切换bug

    首先贴上该框架的链接:https://github.com/kailong321200875/vue-element-plus-admin 在对路由进行部分修改后,网站多次切换tag时,控制台会出现报错: Cannot read properties of undefined (reading \\\'offsetLeft\\\') 。 我在框架的issue中找到了类似问题:打开多个TagsView时会报错,用的 template 分支 对此,作

    2024年02月15日
    浏览(45)
  • vue-element-plus-admin整合后端实战——实现系统登录、缓存用户数据、实现动态路由

    目标 整合vue-element-plus-admin前端框架,作为开发平台的前端。 准备工作 前端选用vue-element-plus-admin,地址 https://gitee.com/kailong110120130/vue-element-plus-admin。 首先clone项目,然后整合到开发平台中去。这是一个独立的前端的项目,而我将其放到后端项目根目录下,即建一个huayuan-w

    2023年04月22日
    浏览(39)
  • Vue.js 3.0 企业级管理后台开发实战 基于Element Plus

    本书内容 本书共 13 章,各章简介如下。 第 1 章“项目启动” 介绍新项目启动时和项目有关的内容,如项目原型和项目 UI。读者从 中能够清楚地了解项目的业务逻辑、具体要开发的功能,以及要呈现给用户的界面效果和交互 效果。此外,本章还会讨论项目开发过程的原型评

    2023年04月08日
    浏览(40)
  • mybatis-plus在实际开发中的应用

    最近的项目是使用mybatis-plus作为持久层框架,前面也记录过mybatis-plus的基本使用,此次记录一下本次项目中的一些使用要点 基本的导入依赖和代码自动生成器,可以去看以前的文章,本次不再赘述。 以项目中的一个实体类为例 实体类上mybatis-plus的注解有两个, @TableName(“

    2024年02月09日
    浏览(56)
  • 基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

    基于 SpringBoot2 + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统, 前端集成 amis 低代码前端框架,后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一些组件功能。项目易上手,技术更综合,能力更全面

    2024年01月19日
    浏览(44)
  • Admin Plus | 基于vue.3的前端框架,适用于中后台系统

    关于 Admin Plus 功能支持 功能列表 兼容性 去使用 Admin Plus  是一套企业级的通用型中后台前端解决方案,它基于  View UI Plus ,适用于  Vue.js 3 。 包含  JavaScript  和  TypeScript  双版本。 Admin Plus 使用最前沿的前端技术栈,支持各类型产品,比如典型的中后台应用(类阿里云后

    2024年02月08日
    浏览(40)
  • 6. vue-element-admin 二次开发避坑指南

    上一篇博文,我们分享了vue-element-admin二次开发的改造优化技巧,这篇博文汇总 vue-element-admin 二次开发可能遇到的坑。 1.1.1 切换标签时未保存页面的操作内容 有时候会发现一个神奇的现象,当打开多个tab标签,然后当修改某个标签页面内容,再次切换标签页面的时候,会发

    2024年02月10日
    浏览(43)
  • 记录--vue3优雅的使用element-plus的dialog

    摆脱繁琐的 visible 的命名,以及反复的重复 dom。 将 dialog 封装成一个函数就能唤起的组件。如下:   首先定义了 dialogList,它包含了所有弹窗的信息。 component 使用 componet is 去动态加载子组件 addDialog 调用唤起弹窗的函数 closeDialog 关闭弹窗的函数 创建一个弹窗组件 在列表页面

    2024年02月05日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包