zoukankan      html  css  js  c++  java
  • 登录及注册页面

    前提:基于element-ui环境

    模态登录组件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    <template>
    <div class="login">
    <div class="box">
    <i class="el-icon-close" @click="close_login"></i>
    <div class="content">
    <div class="nav">
    <span :class="{active: login_method === 'is_pwd'}"
    @click="change_login_method('is_pwd')">密码登录</span>
    <span :class="{active: login_method === 'is_sms'}"
    @click="change_login_method('is_sms')">短信登录</span>
    </div>

    <el-form v-if="login_method === 'is_pwd'">
    <el-input
    placeholder="用户名/手机号/邮箱"
    prefix-icon="el-icon-user"
    v-model="username"
    clearable>
    </el-input>
    <el-input
    placeholder="密码"
    prefix-icon="el-icon-key"
    v-model="password"
    clearable
    show-password>
    </el-input>
    <el-button type="primary" @click="login">登录</el-button>
    </el-form>

    <el-form v-if="login_method === 'is_sms'">
    <el-input
    placeholder="手机号"
    prefix-icon="el-icon-phone-outline"
    v-model="mobile"
    clearable
    @blur="check_mobile">
    </el-input>
    <el-input
    placeholder="验证码"
    prefix-icon="el-icon-chat-line-round"
    v-model="sms"
    clearable>
    <template slot="append">
    <span class="sms" @click="send_sms">{{ sms_interval }}</span>
    </template>
    </el-input>
    <el-button type="primary">登录</el-button>
    </el-form>

    <div class="foot">
    <span @click="go_register">立即注册</span>
    </div>
    </div>
    </div>
    </div>
    </template>

    <script>
    export default {
    name: "Login",
    data() {
    return {
    username: '',
    password: '',
    mobile: '',
    sms: '',
    login_method: 'is_pwd',
    sms_interval: '获取验证码',
    is_send: false,
    }
    },
    methods: {
    close_login() {
    this.$emit('close')
    },
    go_register() {
    this.$emit('go')
    },
    change_login_method(method) {
    this.login_method = method;
    },
    check_mobile() {
    if (!this.mobile) return;
    if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) {
    this.$message({
    message: '手机号有误',
    type: 'warning',
    duration: 1000,
    onClose: () => {
    this.mobile = '';
    }
    });
    return false;
    }
    this.is_send = true;
    },
    send_sms() {

    if (!this.is_send) return;
    this.is_send = false;
    let sms_interval_time = 60;
    this.sms_interval = "发送中...";
    let timer = setInterval(() => {
    if (sms_interval_time <= 1) {
    clearInterval(timer);
    this.sms_interval = "获取验证码";
    this.is_send = true; // 重新回复点击发送功能的条件
    } else {
    sms_interval_time -= 1;
    this.sms_interval = `${sms_interval_time}秒后再发`;
    }
    }, 1000);
    },

    login() {
    if (!(this.username && this.password)) {
    this.$message({
    message: '请填好账号密码',
    type: 'warning',
    duration: 1500
    });
    return false // 直接结束逻辑
    }

    this.$axios({
    url: this.$settings.base_url + '/user/login/',
    method: 'post',
    data: {
    username: this.username,
    password: this.password,
    }
    }).then(response => {
    let username = response.data.data.username;
    let token = response.data.data.token;
    let user_id = response.data.data.id;
    this.$cookies.set('username', username, '7d');
    this.$cookies.set('token', token, '7d');
    this.$cookies.set('user_id', user_id, '7d');
    this.$emit('close')
    // this.$emit('success', response.data);
    }).catch(error => {
    console.log(error.response.data)
    // console.log(error.response.data)
    })
    }
    }
    }
    </script>

    <style scoped>
    .login {
    100vw;
    height: 100vh;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 10;
    background-color: rgba(0, 0, 0, 0.3);
    }

    .box {
    400px;
    height: 420px;
    background-color: white;
    border-radius: 10px;
    position: relative;
    top: calc(50vh - 210px);
    left: calc(50vw - 200px);
    }

    .el-icon-close {
    position: absolute;
    font-weight: bold;
    font-size: 20px;
    top: 10px;
    right: 10px;
    cursor: pointer;
    }

    .el-icon-close:hover {
    color: darkred;
    }

    .content {
    position: absolute;
    top: 40px;
    280px;
    left: 60px;
    }

    .nav {
    font-size: 20px;
    height: 38px;
    border-bottom: 2px solid darkgrey;
    }

    .nav > span {
    margin: 0 20px 0 35px;
    color: darkgrey;
    user-select: none;
    cursor: pointer;
    padding-bottom: 10px;
    border-bottom: 2px solid darkgrey;
    }

    .nav > span.active {
    color: black;
    border-bottom: 3px solid black;
    padding-bottom: 9px;
    }

    .el-input, .el-button {
    margin-top: 40px;
    }

    .el-button {
    100%;
    font-size: 18px;
    }

    .foot > span {
    float: right;
    margin-top: 20px;
    color: orange;
    cursor: pointer;
    }

    .sms {
    color: orange;
    cursor: pointer;
    display: inline-block;
    70px;
    text-align: center;
    user-select: none;
    }
    </style>
     

    模态注册组件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    <template>
    <div class="register">
    <div class="box">
    <i class="el-icon-close" @click="close_register"></i>
    <div class="content">
    <div class="nav">
    <span class="active">新用户注册</span>
    </div>
    <el-form>
    <el-input
    placeholder="手机号"
    prefix-icon="el-icon-phone-outline"
    v-model="mobile"
    clearable
    @blur="check_mobile">
    </el-input>
    <el-input
    placeholder="密码"
    prefix-icon="el-icon-key"
    v-model="password"
    clearable
    show-password>
    </el-input>
    <el-input
    placeholder="验证码"
    prefix-icon="el-icon-chat-line-round"
    v-model="sms"
    clearable>
    <template slot="append">
    <span class="sms" @click="send_sms">{{ sms_interval }}</span>
    </template>
    </el-input>
    <el-button type="primary">注册</el-button>
    </el-form>
    <div class="foot">
    <span @click="go_login">立即登录</span>
    </div>
    </div>
    </div>
    </div>
    </template>

    <script>
    export default {
    name: "Register",
    data() {
    return {
    mobile: '',
    password: '',
    sms: '',
    sms_interval: '获取验证码',
    is_send: false,
    }
    },
    methods: {
    close_register() {
    this.$emit('close', false)
    },
    go_login() {
    this.$emit('go')
    },
    check_mobile() {
    if (!this.mobile) return;
    if (!this.mobile.match(/^1[3-9][0-9]{9}$/)) {
    this.$message({
    message: '手机号有误',
    type: 'warning',
    duration: 1000,
    onClose: () => {
    this.mobile = '';
    }
    });
    return false;
    }
    this.is_send = true;
    },
    send_sms() {
    if (!this.is_send) return;
    this.is_send = false;
    let sms_interval_time = 60;
    this.sms_interval = "发送中...";
    let timer = setInterval(() => {
    if (sms_interval_time <= 1) {
    clearInterval(timer);
    this.sms_interval = "获取验证码";
    this.is_send = true; // 重新回复点击发送功能的条件
    } else {
    sms_interval_time -= 1;
    this.sms_interval = `${sms_interval_time}秒后再发`;
    }
    }, 1000);
    }
    }
    }
    </script>

    <style scoped>
    .register {
    width: 100vw;
    height: 100vh;
    position: fixed;
    top: 0;
    left: 0;
    z-index: 10;
    background-color: rgba(0, 0, 0, 0.3);
    }

    .box {
    width: 400px;
    height: 480px;
    background-color: white;
    border-radius: 10px;
    position: relative;
    top: calc(50vh - 240px);
    left: calc(50vw - 200px);
    }

    .el-icon-close {
    position: absolute;
    font-weight: bold;
    font-size: 20px;
    top: 10px;
    right: 10px;
    cursor: pointer;
    }

    .el-icon-close:hover {
    color: darkred;
    }

    .content {
    position: absolute;
    top: 40px;
    width: 280px;
    left: 60px;
    }

    .nav {
    font-size: 20px;
    height: 38px;
    border-bottom: 2px solid darkgrey;
    }

    .nav > span {
    margin-left: 90px;
    color: darkgrey;
    user-select: none;
    cursor: pointer;
    padding-bottom: 10px;
    border-bottom: 2px solid darkgrey;
    }

    .nav > span.active {
    color: black;
    border-bottom: 3px solid black;
    padding-bottom: 9px;
    }

    .el-input, .el-button {
    margin-top: 40px;
    }

    .el-button {
    width: 100%;
    font-size: 18px;
    }

    .foot > span {
    float: right;
    margin-top: 20px;
    color: orange;
    cursor: pointer;
    }

    .sms {
    color: orange;
    cursor: pointer;
    display: inline-block;
    width: 70px;
    text-align: center;
    user-select: none;
    }
    </style>

    导航条:结合实际情况完成样式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <template>
    <div class="nav">
    <span @click="put_login">登录</span>
    <span @click="put_register">注册</span>
    <Login v-if="is_login" @close="close_login" @go="put_register" />
    <Register v-if="is_register" @close="close_register" @go="put_login" />
    </div>
    </template>

    <script>
    import Login from "./Login";
    import Register from "./Register";
    export default {
    name: "Nav",
    data() {
    return {
    is_login: false,
    is_register: false,
    }
    },
    methods: {
    put_login() {
    this.is_login = true;
    this.is_register = false;
    },
    put_register() {
    this.is_login = false;
    this.is_register = true;
    },
    close_login() {
    this.is_login = false;
    },
    close_register() {
    this.is_register = false;
    }
    },
    components: {
    Login,
    Register
    }
    }
    </script>

    <style scoped>

    </style>

    登录业务分析

    多方式登录

    1
    2
    3
    4
    5
    6
    """
    1)前台提供账号密码,账号可能是 用户名、手机号、邮箱等

    接口:
    后台只需要提供一个多方式登录接口即可 - 多方式登录接口
    """
    验证码登录

    1
    2
    3
    4
    5
    6
    7
    8
    """
    1)前台提供手机号和验证码完成登录

    接口:
    前台填完手机号,往后台发送校验手机号的请求,如果存在继续,不存在提示注册 - 手机号存在与否接口
    前台点击发送验证码,将手机再次发送给后台,后台将手机号通知给第三方,发送短信 - 手机验证码接口
    前台点击登录提交手机号与验证码,完成验证码登录 - 验证码登录接口
    """

    注册业务分析

    验证码注册

    1
    2
    3
    4
    5
    6
    7
    8
    """
    1)前台提供手机号、验证码、密码完成注册

    接口:
    前台填完手机号,往后台发送校验手机号的请求,如果不存在继续,存在提示登录 - 手机号存在与否接口
    前台点击发送验证码,将手机再次发送给后台,后台将手机号通知给第三方,发送短信 - 手机验证码接口
    前台点击注册提交手机号、验证码及密码,完成验证码注册 - 验证码注册接口
    """

    汇总

    1
    2
    3
    4
    5
    6
    7
    """
    多方式登录接口
    手机号存在与否接口
    手机验证码接口
    验证码登录接口
    验证码注册接口
    """
  • 相关阅读:
    常用JS判断正则
    Java中final修饰参数的作用
    hibernate实现动态表名
    java urlrewrite
    tomcat下,超链接下载出现乱码页面
    Hibernate 在MyEclipse中配置
    javamail command not implemented
    The Missing Piece
    十六进制颜色码【转载】
    【转载】关于:读写xls文件,提供下载的一个小例子(jxl 的简单运用) 创建文件
  • 原文地址:https://www.cnblogs.com/plyc/p/14126460.html
Copyright © 2011-2022 走看看