umi创建简单的登录界面

首先我们先创建一个项目
yarn create @umijs/umi-app或或者是npm create @umijs/umi-app
然后我们需要在pages文件夹中创建一个Login的文件夹,在文件夹下创建login.tsx和index.less两个文件
在这里插入图片描述
然后接着我们就要实现一个登录之后能够有css样式的登录鉴权功能,这里我们参照
https://blog.csdn.net/qq_53509791/article/details/129068969?spm=1001.2014.3001.5501
然后我们的路由文件当中就是这样的形式
在这里插入图片描述
接下来我们就要编写登录界面了,这里声明我们需要用到antd-mobile
注意:umi框架当中拥有的是2.x版本的antd-mobile,如果你使用的不是2.x版本的antd-mobile,则需要进行下载相应的版本就可以了。
接下来我们要完成的一个功能就是实现切换主题。

<NavBar backArrow={false} right={right} style={{ "backgroundColor": sco, color: "white" }}>用户登录</NavBar>

好了,接下来请大家欣赏代码

import React, { useState,useEffect } from 'react'
import { NavBar, AutoCenter, Form, Input, Button, TextArea, Space, Toast } from 'antd-mobile/es'
import { CheckCircleFill, CloseCircleFill } from 'antd-mobile-icons'
import { useHistory } from 'umi'

export default function login() {
    const history =useHistory()
    const [password, setpassword] = useState("")
    const [password1, setpassword1] = useState(false)
    const [phone, setphone] = useState("")
    const [phone1, setphone1] = useState(false)
    const [sco, setSco] = useState("#123456")
    const [inp, setinp] = useState(["pink", "black", "red", "yellow"])
    let left = () => {
        let ids = Math.floor(Math.random() * inp.length)
        setSco(inp[ids])
    }
    const right = (
        <div style={{ fonstSize: 20 }}>
            <Space>
                <Button onClick={left} fill="none" style={{ color: "white" }}>切换主题</Button>
            </Space>
        </div>
    )
    function useVerifyPhoneNum() {
        let phoneReg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
        let pwdPattern = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*()_.]+)$)^[\w~!@#$%^&*()_.]{6,16}$/;
        if (!phoneReg.test(phone)) {
            Toast.show({
                icon: "fail",
                content: "手机号错误"
            })
        }
        if (!pwdPattern.test(password)) {
            Toast.show({
                icon: "fail",
                content: "密码错误"
            })
        } else {
            Toast.show({
                icon: "success",
                content: "登录成功"
            })
            history.push("/home")
            localStorage.setItem("token","这是一个token")
        }
    }
    useEffect(() => {
        let phoneReg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
        if (!phoneReg.test(phone)) {
            setphone1(false)
        } else {
            setphone1(true)
        }
    }, [phone])
    useEffect(() => {
        let pwdPattern = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*()_.]+)$)^[\w~!@#$%^&*()_.]{6,16}$/;
        if (!pwdPattern.test(password)) {
            setpassword1(false)
        } else {
            setpassword1(true)
        }
    }, [password])
    return (
        <div>
            <NavBar backArrow={false} right={right} style={{ "backgroundColor": sco, color: "white" }}>用户登录</NavBar>
            <AutoCenter>
                <Form
                    layout='horizontal'
                    footer={
                        <Button block type='submit' color='primary' size='large' style={{ "backgroundColor": sco }} onClick={useVerifyPhoneNum.bind(this)}>
                            提交
                        </Button>
                    }
                >
                    <Form.Item
                        name='手机号'
                        label='手机号'
                        rules={[{ required: true, message: '手机号不能为空' }]}
                        extra={phone ? phone1 ? <CheckCircleFill color="76c6b8" /> : <CloseCircleFill color="var(--adm-color-danger)" /> : ""}
                    >
                        <Input onChange={val => {
                            setphone(val)
                        }} placeholder='手机号' value={phone} />
                    </Form.Item>
                    <Form.Item rules={[{ required: true, message: '密码不能为空' }]} name='submit' label='密码' extra={password ? password1 ? <CheckCircleFill color="76c6b8" /> : <CloseCircleFill color="var(--adm-color-danger)" /> : ""}>
                        <Input placeholder='请输入密码' value={password} onChange={val => {
                            setpassword(val)
                        }} />
                    </Form.Item>
                </Form>

            </AutoCenter>
        </div>
    )
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程雪员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值