|
|
<template> <modal name="VerifyCode" :clickToClose="false"> <div class="tw-text-base-primary"> <div class="modal-header tw-flex tw-w-full tw-justify-between tw-mb-[30px]"> <div class="tw-font-bold tw-text-[20px]">{{ $t("Verify your email") }}</div> <button class="close tw-transition tw-btn-md" @click="$modal.hide('VerifyCode')"></button> </div> <div class="tw-mb-[30px]"> <div class="modal-content tw-text-[18px] tw-text-hint"> 我們已寄送認證碼至您的電子信箱<span class="tw-text-primary-1 tw-text-[18px]">{{ account }}</span> </div> <div> 請至電子信箱確認後,在下方輸入驗證碼來啟動您的帳戶。 </div> </div> <div class="tw-mb-[40px]"> <div> <input type="text" v-model="user_VerifyCode" placeholder="請輸入認證碼" :class="['tw-w-full tw-text-[18px] tw-p-[10px] tw-border tw-border-solid tw-mb-[10px] tw-rounded-[8px] md:tw-max-w-[360px]', validation ? 'tw-border-error-default' : 'tw-border-[ef5a5a]']" /> </div> <div :class="['md:tw-flex', validation ? 'md:tw-justify-between' : 'md:tw-justify-end']"> <div :class="['tw-text-[14px] tw-text-error-default', validation ? 'tw-block tw-mb-[10px]' : 'tw-hidden']"> 認證碼錯誤 </div> <button @click="ResendMail" class="tw-grid tw-grid-cols-[18px_100px] tw-gap-[10px]"> <img src="~/assets/svg/Icon.svg"/> <div class="tw-text-[14px] tw-text-complementary-1 tw-w-fit"> 重新寄送認證碼 </div> </button> </div> </div> <div class="tw-grid tw-grid-cols-2 tw-gap-[10px]"> <button @click="cancel" class="tw-rounded-[8px] tw-text-primary-1 tw-text-[18px] tw-px-[12px] tw-py-[12px] md:tw-rounded-[16px]"> 取消 </button> <button @click="checkVerifyCode" :class="['tw-rounded-[8px] tw-text-[18px] tw-px-[12px] tw-py-[12px] md:tw-rounded-[16px]', validation ? 'tw-text-base-disable tw-bg-neutral-100 tw-border-neutral-100' : 'tw-text-white tw-bg-primary-default tw-border-primary-default']"> 確認 </button> </div> </div> </modal> </template> <script> export default { name: "VerifyCode", data() { return { user_VerifyCode: "", checkCode: false, errorCode: false, validation: false, }; }, props: { error: { type: Boolean, }, account: { type: String, } }, watch: { error: { immediate: true, handler: function () { if(this.error){ this.validation = this.error; } }, }, user_VerifyCode: { handler: function () { if(this.user_VerifyCode == ""){ this.validation = true; }else if(this.user_VerifyCode.length > "6"){ this.validation = true; }else{ this.validation = false; } } } }, methods: { checkVerifyCode(){ this.checkCode = true; this.$emit('user-verifyCode', this.user_VerifyCode); }, ResendMail(){ this.$emit('resend-mail'); }, cancel() { this.$modal.hide('VerifyCode'); this.user_VerifyCode = ""; this.validation = false; } } }; </script> <style lang="scss" scoped> .close { position: absolute; right: 25px; top: 25px; background-image: url("~/assets/svg/close.svg"); background-position: center; background-repeat: no-repeat; background-size: cover; width: 14px; height: 14px;
@media (min-width: 1366px) { position: relative; right: initial; top: initial; } }
:deep() { .v--modal { background-color: #fefefe !important; text-align: left; border-radius: 16px; box-shadow: 0 20px 60px -2px rgb(27 33 58 / 40%); padding: 20px; max-width: 100%; top: 0 !important; left: 0 !important; right: 0 !important; margin: 0 auto; height: auto !important; vertical-align: middle;
@media (min-width: 768px) { max-width: 360px; } }
.v--modal-overlay { position: fixed; box-sizing: border-box; left: 0; top: 0; width: 100%; height: auto; background: rgba(0, 0, 0, 0.2); z-index: 999; opacity: 1; }
.v--modal-top-right { display: block; position: fixed; right: 0; top: 0; }
.v--modal-background-click { display: flex; justify-content: center; align-items: center; }
.v--modal-box { margin-left: 60px; margin-right: 60px;
@media (min-width: 768px) { margin-left: 161px; margin-right: 161px; max-width: 360px; } } } </style>
|