Vue项目 成员管理系统 系统登录模块(4)

一、登录页面

1.1 在view文件夹下创建login文件夹,并创建index.vue

界面部分:

<template>
    <div class="login-container">
        <el-form
            :model="form"
            status-icon
            :rules="rules"
            ref="form"
            label-width="100px"
            class="login-form"
        >
            <h2 class="login-title">登录</h2>
            <el-form-item
                label="账号"
                prop="username"
            >
                <el-input v-model="form.username">
                </el-input>
            </el-form-item>
            <el-form-item
                label="密码"
                prop="password"
            >
                <el-input
                    type="password"
                    v-model="form.password"
                    autocomplete="off"
                ></el-input>
            </el-form-item>
            <el-form-item>
                <el-button
                    type="primary"
                    @click="submitForm('form')"
                >登录</el-button>
                <el-button @click="goRegister">注册</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

样式部分:

<style  scoped>
.login-cintainer {
    position: absolute;
    width: 100%;
    height: 100%;
    overflow: hidden; /*溢出隐藏*/
    background: url(../../assets/login.jpg);
    background-size: cover;
}
.login-form {
    width: 350px;
    height: 300px;
    margin: 150px auto;
    background-color: rgb(227, 233, 238, 0.5);
    padding: 70px;
    border-radius: 20px; /* 设置圆角 */
}
.login-title {
    text-align: center;
}
</style>

1.2 配置路由,初步显示页面

import Login from '../views/login';
const routes = [//在路由里进行注册
  {
    path: '/register',
    name: 'Register',
    component: Register,//引入的组件
  }, {
    path: '/login',
    name: 'Login',
    component: Login,
  }
];

登录界面显示:

 1.3 在api文件下创建login.js

import request from '@/utils/request'

//登录
export function login(username, password) {//导出非默认成员方法 将这两个参数传给服务端
    return request({
        method: 'post',
        url: '/user/login',
        data: {
            username,
            password
        }
    })
}

二、服务器端配置

2.1 index.vue中对规则和方法:

<script>
import { login } from '@/api/login.js';//读数据库,引入login.js
export default {
    data() {
        return {
            form: {
                username: '',
                password: '',
            },
            rules: {//判断规则
                username: [{ required: 'true', message: '账号不能为空',
                          trigger: 'blur' }],//required:这一项是必需的
                password: [{ required: 'true', message: '密码不能为空', 
                          trigger: 'blur' }],
            }
        }
    },

    components: {},

    methods: {
        submitForm(formName) {
            this.$refs[formName].validate((valid) => {
                if (vaild) {
                    login(this.form.username, this.form.password).then(response => {
                        const resp = response.date;
                        if (resp.flag) {
                            
                        } else {
                            this.$message({
                                message: resp.message,
                                type: error,
                            })
                        }
                    })
                } else {
                    console.log('error submit');
                    return false;
                }
            })
        },
        goRegister() {
            this.$router.push('/register');
        }
    },

}
</script>

2.2在router.js中添加对login部分的配置

router.post('/user/login', function (req, res) {
    var body = req.body;
    User.findOne({//访问数据库
        username: body.username,
        password: body.password
    }, function (err, data) {
        if (err) {
            return res.status(500).json({
                code: 3000,
                flag: false,
                message: 'server error',
            })
        }
        if (!data) {
            return res.status(200).json({
                code: 4000,
                flag: false,
                message: '账号不存在或密码错误',
            })
        }
        return res.status(200).json({
            code: 2000,
            flag: true,
            message: '登陆成功',
            data: {//同时将标志token传回去
                token: data.token//使用token来判断当前是否有登录,登录的是谁.
            }
        })
    })
})

登录成功:

 登录失败:

 2.3 在login.js中增加对获取用户信息的配置

//*获取用户信息
export function getUserInfo(token) {
    return request({
        method: 'get',
        url: `/user/info?token=${token}`
    })
}

同时在index.vue中按需导入getUserInfo

import { login, getUserInfo } from '@/api/login.js';
/*  读数据库,引入login
    读用户数据, 引入getUserInfo*/

2.4 进行获取用户信息的路由配置

增加router.js的内容如下:

//?获取用户信息
router.get('/user/info', function (req, res) {
    var body = req.query;//get方法,所以不用body
    User.findOne({
        token: body.token,
    }, function (err, data) {
        if (err) {
            return res.status(500).json({
                code: 4000,
                flag: false,
                message: 'server error',
            })
        }
        if (!data) {
            return res.status(500).json({
                code: 3000,
                flag: false,
                message: '账号信息不存在或已过期'
            })
        }
        return res.status(200).json({
            code: 2000,
            flag: true,
            message: '获取用户信息成功',
            data: {
                nickname: data.nickname,
                username: data.username,
                id: data._id,//mongodb添加数据默认添加一项_id
            }
        })
    })
})

 在index.vue中对登录成功后获取用户信息部分进行改写

                        const resp = response.data;
                        if (resp.flag) {
                            // console.log(resp);
                            getUserInfo(resp.data.token).then(response => {
                                const respUser = response.data;
                                console.log(respUser);
                            })

成功获取用户信息:

将数据存到localStorage中,在其他页面想要使用的时候,就可以从localStorage中拿到想要的数据

    localStorage.setItem('stu-token', resp.data.token);
    localStorage.setItem('stu-user', JSON.stringify(respUser.data))//转换对象为字符串

点击登录后,返回首页

    this.$router.push('/');//用编程式的方式将路由的地址修改

 优化登录和注册界面,完善逻辑

注册成功,自动跳转登录界面

                            if (resp.flag) {
                            // console.log('注册成功');
                            this.$message({
                                message: resp.message,
                                type: 'success'
                            })
                            this.$router.push('/login')

登录成功,自动跳转首页

                            if (resp.flag) {
                            // console.log(resp);
                            getUserInfo(resp.data.token).then(response => {
                                const respUser = response.data;
                                // console.log(respUser);
                                localStorage.setItem('stu-token', resp.data.token);
                                localStorage.setItem('stu-user',                     
                            JSON.stringify(respUser.data))//转换对象为字符串
                                this.$router.push('/');//用编程式的方式将路由的地址修改
                            })
                            this.$message({
                                message: resp.message,
                                type: 'success'
                            })

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在使用 Vue 开发后台管理系统时,可能会遇到以下几个难点: 1. 状态管理:后台管理系统通常需要管理大量的状态,如用户信息、权限信息、页面状态等。在 Vue 中,可以使用 Vuex 进行状态管理,但是随着业务复杂度的增加,状态的变化和管理可能会变得复杂。因此,需要合理地设计和组织状态,避免状态过多或嵌套过深,同时要注意状态的一致性和变更的响应性。 2. 权限控制:后台管理系统通常需要进行权限控制,以保证不同用户角色在系统中的访问权限。在 Vue 中,可以使用路由守卫、动态路由等技术来实现权限控制。但是,权限控制涉及到多个模块和页面的权限判断,需要在代码中进行判断和处理,同时还要考虑前端权限与后端权限的一致性。 3. 大规模数据渲染和性能优化:后台管理系统可能需要渲染大量的数据列表、表格等组件,在处理大量数据时,可能会导致页面渲染性能下降。为了提高性能,可以使用虚拟滚动、分页加载等技术来优化数据渲染。同时,还可以使用异步加载、懒加载等技术来提升页面加载速度。 4. 多语言支持:后台管理系统通常需要支持多语言,在 Vue 中可以使用国际化插件如 vue-i18n 来实现。但是,多语言支持需要在不同组件和页面中进行切换和管理,同时还要考虑到动态翻译和文本长度等问题。 5. UI 组件的选择和定制:后台管理系统通常需要使用大量的 UI 组件,如表单、弹窗、图表等。在 Vue 中,可以选择第三方的 UI 组件库如 Element UI、Ant Design Vue 等,也可以根据需求自定义组件。但是,在使用第三方组件库时,需要考虑其适配性、功能定制和样式调整等问题。 以上是在使用 Vue 开发后台管理系统时可能会遇到的一些难点,通过合理的设计和技术选型,以及与团队成员的协作,可以有效地解决这些难点。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不是独角兽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值