当前位置: 首页 > wzjs >正文

东莞销售网站建设网站建设原创软文

东莞销售网站建设,网站建设原创软文,wordpress 熊掌号代码,wordpress 自定义标签页文章目录 前言一、新增登录页面1.登录页面代码2.登录处理 3.修改app.tsx 二、说一下逻辑1. 流程图2. 注意点 总结 前言 前面写了创建项目及修改一些配置。这一章写写登录页面。 一、新增登录页面 新增登录页面,会涉及Umi的目录结构。先看一下文档再动手。 1.登录…

文章目录

  • 前言
  • 一、新增登录页面
    • 1.登录页面代码
      • 2.登录处理
    • 3.修改app.tsx
  • 二、说一下逻辑
    • 1. 流程图
    • 2. 注意点
  • 总结


前言

前面写了创建项目及修改一些配置。这一章写写登录页面。


一、新增登录页面

新增登录页面,会涉及Umi的目录结构。先看一下文档再动手。

1.登录页面代码

// src/pages/user/login.tsx
import {LockOutlined,MobileOutlined,UserOutlined,
} from '@ant-design/icons';
import {LoginForm,ProFormCaptcha,ProFormCheckbox,ProFormText,
} from '@ant-design/pro-components';
import { Divider, Space, Tabs, message } from 'antd';
import { useState } from 'react';
import { history,useModel } from '@umijs/max';
import { login } from "@/services/demo/UserController"; //该处代码下面见
import { flushSync } from 'react-dom'; //强刷新一下type LoginType = 'phone' | 'account'; //看字面意思就可以了export default () => {const items = [{ label: '账户密码登录', key: 'account' },{ label: '手机号登录', key: 'phone' },];const [loginType, setLoginType] = useState<LoginType>('account');const { initialState, setInitialState } = useModel('@@initialState'); //注意一下,后面解释//写一个获取用户信息的函数const fetchUserInfo = async () => {const userInfo = await initialState?.fetchUserInfo?.(); //出现initialState了,后面解释if (userInfo) {flushSync(() => {setInitialState((s) => ({...s,currentUser: userInfo,}));});}};const onSubmit = async (formData: API.LoginParams) => {try {const success = await login({ ...formData });if (success) {message.success("登录成功");await fetchUserInfo(); //调用获取用户信息函数history.push('/');}else{message.error("登录失败");}      }catch (error:any) {if(error.response){message.error(error.response.data.message);}else{message.error("未知错误");}}};return (<divstyle={{display: 'flex',flexDirection: 'column',height: '100vh',overflow: 'auto',backgroundImage:"url('https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/V-_oS6r-i7wAAAAAAAAAAAAAFl94AQBr')",backgroundSize: '100% 100%',}}><LoginFormonFinish={onSubmit}title="AntDesgin Pro"subTitle="基于Umi从零搭建Ant Desgin Pro"><Tabscentereditems={items}activeKey={loginType}onChange={(activeKey) => setLoginType(activeKey as LoginType)}></Tabs>{loginType === 'account' && (<><ProFormTextname="username"fieldProps={{size: 'large',prefix: <UserOutlined className={'prefixIcon'} />,}}placeholder={'请输入账号/邮箱/电话号码'}rules={[{required: true,message: '请输入用户名!',},]}/><ProFormText.Passwordname="password"fieldProps={{size: 'large',prefix: <LockOutlined className={'prefixIcon'} />,}}placeholder={'请输入密码'}rules={[{required: true,message: '请输入密码!',},]}/></>)}{loginType === 'phone' && (<><ProFormTextfieldProps={{size: 'large',prefix: <MobileOutlined className={'prefixIcon'} />,}}name="mobile"placeholder={'手机号'}rules={[{required: true,message: '请输入手机号!',},{pattern: /^1\d{10}$/,message: '手机号格式错误!',},]}/><ProFormCaptchafieldProps={{size: 'large',prefix: <LockOutlined className={'prefixIcon'} />,}}captchaProps={{size: 'large',}}placeholder={'请输入验证码'}captchaTextRender={(timing, count) => {if (timing) {return `${count} ${'获取验证码'}`;}return '获取验证码';}}name="captcha"rules={[{required: true,message: '请输入验证码!',},]}onGetCaptcha={async () => {message.success('获取验证码成功!验证码为:1234');}}/></>)}<div style={{ marginBlockEnd: 24 }}><ProFormCheckbox noStyle name="autoLogin">自动登录</ProFormCheckbox><a style={{ float: 'right' }}>忘记密码 </a></div></LoginForm></div>);
};

2.登录处理

代码没有做优化,目前代码只是跑通。只为搞明白逻辑关系。

/* eslint-disable */
// src/services/demo/UserController.ts
import { request } from '@umijs/max';/** 登录接口 POST /api/login/account */
export async function login(body: API.LoginParams, options?: { [key: string]: any }) {return request<API.LoginResult>('/api/admin/login', {method: 'POST',headers: {'Content-Type': 'application/json',},data: body,...(options || {}),});
}/** 获取当前的用户 GET /api/currentUser */
export async function currentUser(options?: { [key: string]: any }) {return request<{data: API.CurrentUser;}>('/api/admin/currentUser', {method: 'GET',...(options || {}),});
}

3.修改app.tsx

import { currentUser as queryCurrentUser } from './services/demo/UserController';import { AvatarName }  from '@/components';
// 全局初始化数据配置,用于 Layout 用户信息和权限初始化
// 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstateconst loginPath = '/user/login';
export async function getInitialState(): Promise<{ name: string,currentUser?: API.CurrentUser; fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;}> {const fetchUserInfo = async () => {try {const msg = await queryCurrentUser({skipErrorHandler: true,});return msg.data;} catch (error) {history.push(loginPath);}return undefined;};const { location } = history; if (![loginPath, '/user/register', '/user/register-result'].includes(location.pathname)) {const currentUser = await fetchUserInfo();return {fetchUserInfo,currentUser,name: '@umijs/max',};}return {fetchUserInfo,name: '@umijs/max',};
}

二、说一下逻辑

1. 流程图

和AntDesign Pro的流程基本一样。

非登录页面流程
登录页面流程
成功
成功
成功
失败
执行完整初始化
自动调用fetchUserInfo
用户信息
获取成功?
更新currentUser状态
渲染目标页面
跳过用户信息初始化
代码中未返回currentUser
当前是登录页面?
显示登录页面
用户提交认证?
调用fetchUserInfo
获取currentUser对象
跳转到首页
访问任何页面
执行应用初始化
getInitialState

2. 注意点

  • Login页面中的fetchUserInfo 调用了InitialState中的fetchUserInfo,并将获取的currentUser初始化,并flushSync了一下。
  • 用户认证与用户信息获取是分开的。
  • 在上一篇Umi从零搭建Ant Design Pro项目(1)中,我已经做了网络拦截,将获取的token进行了处理。就是说包括fetchUserInfo在内的网络请求都会带上token时,后端就会鉴权。

总结

今天就写这么多内容。


文章转载自:

http://xaH5u5p6.wynnb.cn
http://h0ZzZY2G.wynnb.cn
http://RKW6twkI.wynnb.cn
http://EgTh4nPZ.wynnb.cn
http://QlGQNtov.wynnb.cn
http://eaDh1myn.wynnb.cn
http://AEHbiZlV.wynnb.cn
http://64GPdW7n.wynnb.cn
http://xofaXmnE.wynnb.cn
http://DUvx2OUo.wynnb.cn
http://fAzfOepU.wynnb.cn
http://9KMAKQYj.wynnb.cn
http://suyUV86j.wynnb.cn
http://KDF3I8uO.wynnb.cn
http://B7C608PB.wynnb.cn
http://31t4cGUu.wynnb.cn
http://DyzzhBmM.wynnb.cn
http://dcdTBdP4.wynnb.cn
http://Pcq5s6N2.wynnb.cn
http://EpmUGF1k.wynnb.cn
http://zCPJUjVg.wynnb.cn
http://J6Mkg4iK.wynnb.cn
http://kdiYj8oe.wynnb.cn
http://bXFJIWG5.wynnb.cn
http://yK33TFOL.wynnb.cn
http://2pVX3nvN.wynnb.cn
http://Vyq1eUWW.wynnb.cn
http://5VWhOYXK.wynnb.cn
http://agFBWSsi.wynnb.cn
http://hdiDDtf7.wynnb.cn
http://www.dtcms.com/wzjs/703190.html

相关文章:

  • 天津网站建设哪家公司好免费观看
  • 的网站建设公司那个好商业策划公司
  • 怎么给网站做logoWordPress文章相册插件
  • 已备案网站更换域名大数据分析软件
  • 企业网站建设模块做电影网站都需要什么手续
  • 票务网站做酒店推荐的目的网站建设 服务内容
  • 微页制作网站模板免费下载网站建设 发展历程
  • 企业网站建设开发公司合肥网站建设哪家专业
  • 商城网站建设哪家效益快学校门户网站建设的好处
  • 家用电脑做网站后台企业电子网站的建设案例分析
  • 如何创建网站?旅游景点介绍网页设计模板
  • 在服务器网站上做跳转页面跳转页面网易企业邮箱服务器配置
  • 制作app的网站商品列表页面html模板
  • 旅游 便宜 网站建设企业品牌推广方式有哪些
  • 广州远洋建设实业公司网站十大免费ppt网站下载
  • 代码做网站图片怎么插企业所得税怎么征收2021税率
  • 手机端网站模板下载给菠菜网站做外包
  • 青岛开发区网站建设服务恩施有做网站的吗
  • 网站服务器有什么用沪佳装修口碑怎么样
  • 一家专门做护肤的网站建设网站建设哪家快
  • 网站建设松江东莞网站推广优化网站
  • 正规网站开发文案如何建设一个查询系统网站
  • 福州网站建设网站设计网站推广wordpress记录用户搜索
  • 百度竞价做网站企业宣传ppt范文
  • 空间手机版网站目录建设微商网站开发
  • 需要个网站app设计论文
  • 建设信用卡分期购物网站做装修那个网站好
  • 可以玩小游戏的网站厦门上网站设计建设
  • 电脑建设网站服务器网站开发团队哪些人
  • 一级a做爰片51网站泰州做网站公司