Files
ostandari/pages/admin/Login.vue
T
2024-11-19 14:01:47 +03:30

231 lines
6.6 KiB
Vue

<template>
<CRow class="justify-content-center">
<CCol lg="5">
<CCardGroup>
<CCard class="p-4">
<CCardBody>
<CForm v-if="step === 1" @submit.prevent="doLogin">
<h1 class="text-muted text-center mb-5">پنل مدیریت</h1>
<CInput
:class="validation.username ? 'err' : null"
placeholder="شماره موبایل"
:description="
validation.username ? validation.username.msg : null
"
autocomplete="username email"
v-model="phone"
>
<template #prepend-content>
<CIcon name="cil-user" />
</template>
</CInput>
<!--
<CInput
:class="validation.username ? 'err' : null"
placeholder="نام کاربری"
:description="validation.username ? validation.username.msg : null"
autocomplete="username email"
v-model="login.username"
>
<template #prepend-content>
<CIcon name="cil-user"/>
</template>
</CInput>
<div class="butt">
<CInput
:class="validation.password ? 'err' : null"
placeholder="کلمه عبور"
:type="passwordState"
:description="validation.password ? validation.password.msg : null"
autocomplete="curent-password"
v-model="login.password"
>
<template #prepend-content>
<CIcon name="cil-lock-locked"/>
</template>
</CInput>
<i @click="showPass = !showPass" class="far fa-eye"></i>
</div>
<CInputCheckbox label="مرا به خاطر بسپار" @update:checked="val => login.remember_me = val"/> -->
<CRow>
<CCol col="12" class="text-right mt-2">
<CButton color="primary" @click="send_number" class="px-4"
>ارسال کد</CButton
>
</CCol>
</CRow>
<!-- <p class="text-muted mt-3" style="font-size: 11px;">*درصورتی که گزینه "مرا به خاطر بسپار" را فعال نکنید بعد از 1 ساعت باید دوباره وارد سیستم شوید.</p> -->
</CForm>
<CForm v-if="step === 2" @submit.prevent="doLogin">
<h1 class="text-muted text-center mb-5">پنل مدیریت</h1>
<CInput
:class="validation.username ? 'err' : null"
placeholder="کد ورود را وارد کنید"
:description="
validation.username ? validation.username.msg : null
"
autocomplete="username email"
v-model="otp"
>
<template #prepend-content>
<CIcon name="cil-user" />
</template>
</CInput>
<CRow>
<CCol col="12" class="text-right mt-2">
<CButton color="primary" type="submit" class="px-4"
>ورود</CButton
>
</CCol>
</CRow>
</CForm>
</CCardBody>
</CCard>
</CCardGroup>
</CCol>
</CRow>
</template>
<script>
import { ref } from "vue";
export default {
data() {
return {
showPass: false,
step: 1,
phone: "",
otp: "",
login: {
username: "",
password: "",
remember_me: false,
},
validation: {},
};
},
computed: {
passwordState() {
return this.showPass ? "text" : "password";
},
},
methods: {
async send_number() {
if (!this.phone) {
this.$message({
type: "warning",
message: "شماره تماس را وارد کنید !",
});
return;
}
try {
const phoneNumber = this.phone;
const send_request = await fetch("/api/auth/otp", {
method: "POST",
headers: {
Accept: "application/json",
"content-type": "application/json",
},
body: JSON.stringify({ phone: phoneNumber }),
});
if (send_request.status === 429 || send_request.status === 406) {
this.$message({
type: "warning",
message: "لطفا بعد از ۱۰ دقیقه مجدد تلاش کنید",
});
return;
}
const resData = await send_request.json();
if (send_request.status === 200 || send_request.status === 201) {
this.$message({
type: "success",
// message: "کد ورود ارسال شد",
message: resData.message,
});
this.step = 2;
return;
} else {
this.$message({
type: "warning",
// message: "مشکل در برقرای ارتباط",
message: resData.message,
});
}
} catch (error) {
console.log("err", error);
this.$message({
type: "warning",
message: "خطای ناشناخته",
});
return;
}
},
doLogin() {
this.validation = {};
this.$auth
.loginWith("local", {
data: {
phone: this.phone,
code: this.otp,
},
})
.then((response) => {
window.location.replace(window.location.origin + "/admin");
})
.catch((err) => {
if (err.response.status === 422)
this.validation = err.response.data.validation;
if (err.response.status === 403) {
this.$message({
type: "warning",
message: err.response.data.message,
});
} else {
this.$message({
type: "warning",
message: err?.response?.data?.validation?.code?.msg,
});
console.log(err.response.data.validation.code.msg);
}
});
},
},
layout: "admin-auth",
};
</script>
<style lang="scss">
.butt {
position: relative;
i {
position: absolute;
left: 7px;
top: 11px;
z-index: 3;
cursor: pointer;
color: rgba(#000, 0.5);
-webkit-transition: 0.2s;
-moz-transition: 0.2s;
-ms-transition: 0.2s;
-o-transition: 0.2s;
transition: 0.2s;
&:hover {
color: #000;
}
}
}
</style>