Я создаю SPA на основе VueJs. Я хотел бы добавить простой, если государство. Если флажок пользователя и повторная проверка решены корректно, Vue отправил письмо. Это работает. Но если флажок не был установлен до нажатия кнопки «Отправить», пользователь больше не сможет отправлять почту до перезагрузки страницы, даже если пользователь установил флажок, как его просили.
Я пытался делать заявления и переключаться. Возможно проблема в Vue Recaptcha или в том, что это метод.
<template>
<b-row>
<b-col cols=12 xl=6>
<h2 class="display-1">Contact Form</h2>
<label>Name</label>
<div class="form-group">
<b-form-input v-model="user_name" placeholder="Provide name"></b-form-input>
<label class="pt-3">Mail</label>
<b-form-input v-model="user_reply" placeholder="Provide mail"></b-form-input>
<label class="pt-3">Message</label>
<textarea v-model="user_message" rows="3" placeholder="message" class="form-control"></textarea>
</div>
<b-form-checkbox
id="checkbox-1"
v-model="selected"
name="checkbox-1"
value="true"
unchecked-value="false"
>
I accept <router-link class="text-white" to="/privacy"><b>the privacy policy</b></router-link>
</b-form-checkbox>
<b-row>
<b-col cols=6 xl=3 class="pt-3">
<vue-recaptcha
ref="recaptcha"
@verify="onVerify"
@expired="onExpired"
:sitekey="sitekey">
<button class="btn-primary">Sent message</button>
</vue-recaptcha>
</b-col>
</b-row>
{{selected}}
<p v-if="message_status == 'error'" class="text-danger">Error during sending</p>
<p v-if="message_status == 'success'" class="text-success">Message was send correctly</p>
<p v-if="message_status == 'error_check'" class="text-danger">You have to accept privacy.</p>
</b-col>
</b-row>
</template>
<script>
import VueRecaptcha from 'vue-recaptcha';
export default {
name: 'contact',
components: { VueRecaptcha },
data() {
return{
sitekey: 'RECAPTCHA KEY HERE',
user_name: '',
user_reply: '',
user_message: '',
message_status: '',
selected: 'false',
}
},
methods: {
sendMail() {
var service_id = 'gmail';
var template_id = 'template_ZZsyPIab';
var template_params = {
to_name: this.user_name,
from_name: this.user_reply,
message_html: this.user_message
};
emailjs.send(service_id,template_id,template_params);
},
onSubmit() {
this.$refs.invisibleRecaptcha.execute();
},
onVerify(response) {
console.log('Verify: ' + response)
switch (this.selected) {
case 'true':
var service_id = 'gmail';
var template_id = 'template_ZZsyPIab';
var template_params = {
to_name: this.user_name,
from_name: this.user_reply,
message_html: this.user_message
};
emailjs.send(service_id,template_id,template_params)
.then(() => {
this.message_status = 'success';
}, function(err) {
this.message_status = 'error';
});
break;
case 'false':
this.message_status = 'error_check';
break;
default:
this.message_status = 'error_check';
}
},
onExpired: function () {
console.log('Expired')
},
},
}
</script>
<style lang="scss" scoped>
...
</style>