首页 教程 Web前端 云图库平台(四)——前端用户模块开发

云图库平台(四)——前端用户模块开发

目录

  • 一、新建页面和路由
  • 二、获取当前登录用户信息
  • 三、用户登录页面
  • 四、用户注册页面
  • 五、用户注销

一、新建页面和路由

后端接口改变之后,前端openapi工具会重新生成代码,如下:

云图库平台(四)——前端用户模块开发

云图库平台(四)——前端用户模块开发

之后后端每次改动之后,我们都需要使用执行openapi命令来生成对应的接口。

  • 新建页面和路由

云图库平台(四)——前端用户模块开发

  • 然后修改router/index.ts中的路由配置:

routes:[{ path:'/', name:'主页', component: HomePage,},{ path:'/user/login', name:'用户登录', component: UserLoginPage,},{ path:'/user/register', name:'用户注册', component: UserRegisterPage,},{ path:'/admin/userManage', name:'用户管理', component: UserManagePage,},],

现在我们开始开发一些功能和页面。

二、获取当前登录用户信息

之前在前端初始化过程中,已经在全局导航菜单(全局顶部栏)中添加了展示用户名称的逻辑,并且在全局状态管理器stores目录中定义了前端用户的登录信息存储在哪。后端已经完成了获取当前登录用户的接口,所以直接修改fetchLoginUser函数即可。

async function fetchLoginUser(){const res = await getLoginUserUsingGet()if(res.data.code ===0&& res.data.data){ loginUser.value = res.data.data }// // 测试用户登录,3 秒后登录// setTimeout(() => {// loginUser.value = { userName: '用于展示登录用户信息', id: 1 }// }, 3000)}

三、用户登录页面

现在进行UserLoginPage.vue的页面开发,依然是借助Ant Design快速进行页面开发。基础页面代码如下(其中可以根据自己需求增加一定的前端校验):

<template> <div id="userLoginPage"> <h2 class="title">鱼皮云图库 - 用户登录</h2> <div class="desc">企业级智能协同云图库</div> <a-form :model="formState" name="basic" autocomplete="off" @finish="handleSubmit"> <a-form-item name="userAccount" :rules="[{ required: true, message: '请输入账号' }]"> <a-input v-model:value="formState.userAccount" placeholder="请输入账号" /> </a-form-item> <a-form-item name="userPassword" :rules="[ { required: true, message: '请输入密码' }, { min: 8, message: '密码不能小于 8 位' }, ]" > <a-input-password v-model:value="formState.userPassword" placeholder="请输入密码" /> </a-form-item> <div class="tips"> 没有账号? <RouterLink to="/user/register">去注册</RouterLink> </div> <a-form-item> <a-button type="primary" html-type="submit" style="width: 100%">登录</a-button> </a-form-item> </a-form> </div> </template>

定义响应式变量来接收表单的值:

// 用于接收表单输入的值const formState =reactive<API.UserLoginRequest>({ userAccount:'', userPassword:'',})

css美化样式:

<style scoped> #userLoginPage{max-width: 360px;margin: 0 auto;}.title{text-align: center;margin-bottom: 16px;}.desc{text-align: center;color: #bbb;margin-bottom: 16px;}.tips{color: #bbb;text-align: right;font-size: 13px;margin-bottom: 16px;} </style>

编写表单提交执行的函数,登录成功后需要在全局状态中记录当前登录用户的信息并跳转到主页,代码如下:

const router =useRouter()const loginUserStore =useLoginUserStore()/** * 提交表单 * @param values */const handleSubmit = async (values: any)=>{const res = await userLoginUsingPost(values)// 登录成功,把登录态保存到全局状态中if(res.data.code ===0&& res.data.data){ await loginUserStore.fetchLoginUser() message.success('登录成功') router.push({ path:'/', replace:true,})}else{ message.error('登录失败,'+ res.data.message)}}

登录成功页面效果如下:

云图库平台(四)——前端用户模块开发

四、用户注册页面

用户注册页面同样使用表单,这里我们直接复用用户登录页面的代码,然后小范围对代码进行调整即可。具体代码如下:

<template><div id="userRegisterPage"><h2 class="title">鱼皮云图库 - 用户注册</h2><div class="desc">企业级智能协同云图库</div><a-form :model="formState" name="basic" label-align="left" autocomplete="off"@finish="handleSubmit"><a-form-item name="userAccount":rules="[{ required: true, message: '请输入账号' }]"><a-input v-model:value="formState.userAccount" placeholder="请输入账号"/></a-form-item><a-form-item name="userPassword":rules="[{ required:true, message:'请输入密码'},{ min:8, message:'密码不能小于 8 位'},]" ><a-input-password v-model:value="formState.userPassword" placeholder="请输入密码"/></a-form-item><a-form-item name="checkPassword":rules="[{ required:true, message:'请输入确认密码'},{ min:8, message:'确认密码不能小于 8 位'},]" ><a-input-password v-model:value="formState.checkPassword" placeholder="请输入确认密码"/></a-form-item><div class="tips"> 已有账号? <RouterLink to="/user/login">去登录</RouterLink></div><a-form-item><a-button type="primary" html-type="submit" style="width: 100%">注册</a-button></a-form-item></a-form></div></template>

注册成功页面如下:

云图库平台(四)——前端用户模块开发

五、用户注销

大部分网站的用户注销(用户登录)是这样的:当鼠标悬停到用户头像的时候,会展示包含用户注销(也就是用户登录)功能的下拉菜单。

页面结构如下:

<div v-if="loginUserStore.loginUser.id"> <a-dropdown> <ASpace> <a-avatar :src="loginUserStore.loginUser.userAvatar" /> {{ loginUserStore.loginUser.userName ?? '无名' }} </ASpace> <template #overlay> <a-menu> <a-menu-item @click="doLogout"> <LogoutOutlined /> 退出登录 </a-menu-item> </a-menu> </template> </a-dropdown> </div>

编写用户注销事件函数,代码如下:

// 用户注销const doLogout = async ()=>{const res = await userLogoutUsingPost() console.log(res)if(res.data.code ===0){ loginUserStore.setLoginUser({ userName:'未登录',}) message.success('退出登录成功') await router.push('/user/login')}else{ message.error('退出登录失败,' + res.data.message)}}

云图库平台(四)——前端用户模块开发

本文就到这里吧,再见啦友友们。

评论(0)条

提示:请勿发布广告垃圾评论,否则封号处理!!

    猜你喜欢
    【MySQL】用户管理

    【MySQL】用户管理

     服务器/数据库  2个月前  2.18k

    我们推荐使用普通用户对数据的访问。而root作为管理员可以对普通用户对应的权限进行设置和管理。如给张三和李四这样的普通用户权限设定后。就只能操作给你权限的库了。

    Cursor Rules 让开发效率变成10倍速

    Cursor Rules 让开发效率变成10倍速

     服务器/数据库  2个月前  1.23k

    在AI与编程的交汇点上,awesome-cursorrules项目犹如一座灯塔,指引着开发者们驶向更高效、更智能的编程未来。无论你是经验丰富的老手,还是刚入行的新人,这个项目都能为你的编程之旅增添一抹亮色。这些规则文件就像是你私人定制的AI助手,能够根据你的项目需求和个人偏好,精确地调教AI的行为。突然间,你会发现AI不仅能理解Next.js的最佳实践,还能自动应用TypeScript的类型检查,甚至主动提供Tailwind CSS的类名建议。探索新的应用场景,推动AI辅助编程的边界。

    探索Django 5: 从零开始,打造你的第一个Web应用

    探索Django 5: 从零开始,打造你的第一个Web应用

     服务器/数据库  2个月前  1.16k

    Django 是一个开放源代码的 Web 应用程序框架,由 Python 写成。它遵循 MVT(Model-View-Template)的设计模式,旨在帮助开发者高效地构建复杂且功能丰富的 Web 应用程序。随着每个版本的升级,Django 不断演变,提供更多功能和改进,让开发变得更加便捷。《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体,是一本从零基础到精通Django Web企业级开发技术的实战指南《Django 5 Web应用开发实战》内容以。

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

    MySQL 的mysql_secure_installation安全脚本执行过程介绍

     服务器/数据库  2个月前  1.09k

    mysql_secure_installation 是 MySQL 提供的一个安全脚本,用于提高数据库服务器的安全性

    【MySQL基础篇】概述及SQL指令:DDL及DML

    【MySQL基础篇】概述及SQL指令:DDL及DML

     服务器/数据库  2个月前  489

    数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。

    Redis中的哨兵(Sentinel)

    Redis中的哨兵(Sentinel)

     服务器/数据库  2个月前  315

    ​ 上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。