html
<form v-if="!$store.state.authUser" @submit.prevent="login">
<p class="error" v-if="formError">{{ formError }}</p>
<p><i>To login, use <b>demo</b> as username and <b>demo</b> as password.</i></p>
<p>Username: <input type="text" v-model="formUsername" name="username" required="required"/></p>
<p>Password: <input type="password" v-model="formPassword" name="password" required="required"/></p>
<p>Captcha: <input type="number" v-model="formCaptcha" name="captcha" autocomplete="off" required="required"/></p>
<p v-if="captcha" v-html="captcha" v-on:click="refresh"></p>
<button type="submit">Login</button>
</form>
js
methods: {
login () {
this.$store.dispatch('login', {
username: this.formUsername,
password: this.formPassword,
captcha: this.formCaptcha
})
.then(() => {
this.formUsername = '';
this.formPassword = '';
this.formCaptcha = '';
this.formError = null;
self.$router.replace({ path: 'admin' })
})
.catch((e) => {
this.formError = e.message
})
},
store
actions: {
login ({ commit }, { username, password, captcha }) {
return axios.post('/api/login', {
username,
password,
captcha
})
.then((res) => {
commit('SET_USER', res.data)
})
.catch((error) => {
if (error.response.status === 401) {
throw new Error(error.response.data.error)
}
})
},
当然,你不用vuex的话,发请求直接写在methods里面就可以了