What's wrong with the login code of this vue+element?

clipboard.png

<template>
    <div class="login-wrap">
        <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="80px"
                 class="demo-ruleForm login-from">
            <h2></h2>
            <el-form-item label="" prop="checkuser">
                <el-input type="text" v-model="ruleForm.username" auto-complete="off"></el-input>
            </el-form-item>

            <el-form-item label="" prop="checkpass">
                <el-input type="password" v-model="ruleForm.password" auto-complete="off"></el-input>
            </el-form-item>

            <el-form-item>
                <el-button class="login-btn" type="primary" @click.peevent="login"></el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        data() {
            let validateUser = (rule, value, callback) => {
                if (value === "") {
                    callback(new Error(""));
                } else {
                    callback();
                }
            };
            let validatePass = (rule, value, callback) => {
                console.log(value);
                if (value === "") {
                    callback(new Error(""));
                } else {
                    callback();
                }
            };
            return {
                ruleForm: {
                    username: "admin",
                    password: "123456"
                },
                rules: {
                    checkuser: [
                        {validator: validateUser, trigger: "blur"}
                    ],
                    checkpass: [
                        {validator: validatePass, trigger: "blur"}
                    ]
                }
            };
        },
        methods: {
            open(message = "", type = "success") {
                this.$message({
                    message,
                    type,
                    center: true
                });
            },
            login() {
                this.$http.post("/login", this.ruleForm).then(res => {
                    let {meta, data} = res.data;
                    if (meta.status === 200) {
                        this.open();
                        window.sessionStorage.setItem("token", data.token);
                        this.$router.push("/home/index");
                    } else {
                        this.open(meta.msg, "error");
                    }
                });
            }
        }
    }
</script>

<style scoped>
    .login-wrap {
        background-color: -sharp324152;
        height: 100%;
        display: flex;
        justify-content: center;
        align-items: center;
    }

    .login-wrap .login-from {
        background-color: -sharpfff;
        width: 400px;
        padding: 30px;
        border-radius: 5px;
    }

    .login-wrap .login-from .login-btn {
        width: 100%;
    }
</style>
May.10,2021

it's all very clear upstairs.
prop and v-model must have the same name.
in addition, a weak suggestion is made that it is appropriate to execute the login request directly without checking whether the verification is passed in the login function.


it should be like this:

<el-form-item label="" prop="username">
         <el-input type="text" v-model="ruleForm.username" auto-complete="off"></el-input>
</el-form-item>
    
<el-form-item label="" prop="password">
         <el-input type="password" v-model="ruleForm.password" auto-complete="off"></el-input>
</el-form-item>
return {
      ruleForm: {
            username: 'admin',
            password: '123456',
      },
      rules1: {
            username: [
                { validator: validateUser, trigger: 'blur'}
            ],
            password: [
                { validator: validatePass, trigger: 'blur'}
            ]
       }
};

Update again,

<el-form-item label="" prop="username">
   <el-input type="text" v-model="ruleForm.username" auto-complete="off"></el-input>
</el-form-item>
rules: {
    username: [
        {validator: validateUser, trigger: 'blur'}
    ],
    ...
}
< hr >
rules: {
  username: [
    { required: true, message: '', trigger: 'blur' },
  ],
   ...
}
<el-form-item label="" prop="username"> // prop
                <el-input type="text" v-model="ruleForm.username" auto-complete="off"></el-input>
            </el-form-item>
< hr >

you should post the wrong report, otherwise how to prescribe the right medicine to the case


 @click.peevent="login"

is it wrong?

 @click.prevent="login"

I think the prop in form-item is not consistent with the v-model field of the specific form element.

Menu