|
@@ -1,88 +1,91 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
|
+import Choice from './comp/choice.vue'
|
|
|
|
+import Mail from './comp/email/index.vue'
|
|
|
|
+import Code from './comp/email/code.vue'
|
|
|
|
+import Google from './comp/email/google.vue'
|
|
|
|
+import AccountList from './comp/account/list.vue'
|
|
|
|
+import useLogin from './useLogin'
|
|
import { useUserStore } from '@/stores/modules/user'
|
|
import { useUserStore } from '@/stores/modules/user'
|
|
|
|
+import { useCommonStore } from '@/stores/modules/common'
|
|
|
|
|
|
|
|
+const commonStore = useCommonStore()
|
|
|
|
+const { accountList, loginType } = storeToRefs(commonStore)
|
|
|
|
+
|
|
|
|
+const { emailStep, isEmailGoogle, selectedAccount } = useLogin()
|
|
const { isLoginModalOpen, closeLoginModal } = useLoginModal()
|
|
const { isLoginModalOpen, closeLoginModal } = useLoginModal()
|
|
|
|
|
|
-const userStore = useUserStore()
|
|
|
|
-const { login } = userStore
|
|
|
|
|
|
+// const userStore = useUserStore()
|
|
|
|
+// const { login } = userStore
|
|
|
|
|
|
-const loginForm = ref({
|
|
|
|
- email: '',
|
|
|
|
- password: '',
|
|
|
|
-})
|
|
|
|
-const error = ref(false)
|
|
|
|
-const isLoading = ref(false)
|
|
|
|
|
|
+// const loginForm = ref({
|
|
|
|
+// email: '',
|
|
|
|
+// password: '',
|
|
|
|
+// })
|
|
|
|
+// const error = ref(false)
|
|
|
|
+// const isLoading = ref(false)
|
|
|
|
|
|
const route = useRoute()
|
|
const route = useRoute()
|
|
|
|
|
|
|
|
+watch(() => accountList.value, (newVal: any) => {
|
|
|
|
+ console.log('accountList changed:', newVal)
|
|
|
|
+ if (newVal.length > 0)
|
|
|
|
+ commonStore.setLoginType('account')
|
|
|
|
+ else
|
|
|
|
+ commonStore.setLoginType('choice')
|
|
|
|
+}, { immediate: true })
|
|
|
|
+
|
|
watch(() => route.path, () => {
|
|
watch(() => route.path, () => {
|
|
if (isLoginModalOpen.value)
|
|
if (isLoginModalOpen.value)
|
|
closeLoginModal({ status: false, error: '用户取消登录' })
|
|
closeLoginModal({ status: false, error: '用户取消登录' })
|
|
})
|
|
})
|
|
|
|
|
|
-async function handleLogin() {
|
|
|
|
- error.value = false
|
|
|
|
- isLoading.value = true
|
|
|
|
- try {
|
|
|
|
- await login(loginForm.value)
|
|
|
|
- closeLoginModal({ status: true, isFirstLogin: true })
|
|
|
|
- }
|
|
|
|
- catch (err) {
|
|
|
|
- error.value = true
|
|
|
|
- }
|
|
|
|
- finally {
|
|
|
|
- isLoading.value = false
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-function handleClose() {
|
|
|
|
- closeLoginModal({ status: false, error: '用户取消登录' })
|
|
|
|
-}
|
|
|
|
|
|
+// async function handleLogin() {
|
|
|
|
+// error.value = false
|
|
|
|
+// isLoading.value = true
|
|
|
|
+// try {
|
|
|
|
+// await login(loginForm.value)
|
|
|
|
+// closeLoginModal({ status: true, isFirstLogin: true })
|
|
|
|
+// }
|
|
|
|
+// catch (err) {
|
|
|
|
+// error.value = true
|
|
|
|
+// }
|
|
|
|
+// finally {
|
|
|
|
+// isLoading.value = false
|
|
|
|
+// }
|
|
|
|
+// }
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<template>
|
|
<template>
|
|
<el-dialog
|
|
<el-dialog
|
|
v-model="isLoginModalOpen"
|
|
v-model="isLoginModalOpen"
|
|
:append-to-body="true"
|
|
:append-to-body="true"
|
|
- width="580"
|
|
|
|
- @close="handleClose"
|
|
|
|
|
|
+ :close-on-click-modal="false"
|
|
|
|
+ :close-on-press-escape="false"
|
|
|
|
+ width="880"
|
|
>
|
|
>
|
|
- <div class="p-24px pt-26px text-center ">
|
|
|
|
- <h2 class="fw-500 text-20px text-#333">
|
|
|
|
- Shop Quality Wholesale Online
|
|
|
|
- </h2>
|
|
|
|
- <div class="mt-10px mb-30px text-#666666 text-14px">
|
|
|
|
- Slgn in to wholesale from over 2,000+ premium brands!
|
|
|
|
- </div>
|
|
|
|
- <el-form :model="loginForm">
|
|
|
|
- <el-form-item label="" class="!mb-20px">
|
|
|
|
- <el-input v-model.trim="loginForm.email" class="!h-50px !text-18px" placeholder="Email" />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="">
|
|
|
|
- <el-input v-model.trim="loginForm.password" :show-password="true" class="!h-50px !text-18px" type="password" placeholder="Password" @press-enter="handleLogin" />
|
|
|
|
- </el-form-item>
|
|
|
|
-
|
|
|
|
- <div class="flex justify-between mt-10px mb-30px text-18px">
|
|
|
|
- <div v-if="error" class="text-#D2161F text-16px">
|
|
|
|
- Username or password is incorrect
|
|
|
|
- </div>
|
|
|
|
- <div v-else />
|
|
|
|
- <div class="hover:underline text-14px">
|
|
|
|
- <nuxt-link to="/forgot">
|
|
|
|
- Forget Password?
|
|
|
|
- </nuxt-link>
|
|
|
|
- </div>
|
|
|
|
|
|
+ <img src="@/assets/images/login_close_icon.png" alt="" class="w-32px h-32px bg-#F4F4F4 cursor-pointer p-8px b-rd-50% pos-absolute top-24px right-24px" @click="isLoginModalOpen = false">
|
|
|
|
+ <div class="flex">
|
|
|
|
+ <div class="pt-110px pb-45px px-45px pos-relative bg-#D7C4FF w-375px">
|
|
|
|
+ <img src="@/assets/images/login_icon01.png" alt="" class="w-110px h-110px pos-absolute top-0 left-0">
|
|
|
|
+ <div class="custom-title-font text-24px fw-800 text-#333">
|
|
|
|
+ Welcome to EJET Spark!
|
|
</div>
|
|
</div>
|
|
-
|
|
|
|
- <el-button :disabled="!(loginForm.email && loginForm.password)" class="!bg-#292F36 !text-#fff !b-#292F36 !w-full !h-50px !text-16px !fw-500 !b-rd-6px" @click="handleLogin">
|
|
|
|
- LOG IN
|
|
|
|
- </el-button>
|
|
|
|
- <el-button class="!bg-#CC9879 !text-#fff !w-full !h-50px !text-16px !fw-500 !b-rd-6px !ml-0 mt-16px">
|
|
|
|
- <nuxt-link to="/register">
|
|
|
|
- No account? SIGN UP
|
|
|
|
- </nuxt-link>
|
|
|
|
- </el-button>
|
|
|
|
- </el-form>
|
|
|
|
|
|
+ <img src="@/assets/images/login_img01.png" alt="" class="my-20px w-276px h-225px mx-auto">
|
|
|
|
+ <div class="mb-10px custom-title-font text-18px fw-800 text-#333">
|
|
|
|
+ EJET Spark Intro
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text-14px text-#333 lh-22px">
|
|
|
|
+ EJET Spark catalog description, spark the trend, ignate sales. EJET Spark catalog description, spark the trend, ignate sales.
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="flex-1 b-rd-10px bg-#fff px-70px pt-100px">
|
|
|
|
+ <AccountList v-if="emailStep === 0 && accountList.length && loginType === 'account'" />
|
|
|
|
+ <Choice v-if="emailStep === 0 && loginType === 'choice'" />
|
|
|
|
+ <Mail v-if="emailStep === 1 && !selectedAccount" />
|
|
|
|
+ <Mail v-if="emailStep === 1 && selectedAccount" />
|
|
|
|
+ <Code v-if="emailStep === 2 && !isEmailGoogle " />
|
|
|
|
+ <Google v-if="emailStep === 2 && isEmailGoogle === 'google'" />
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
</template>
|
|
</template>
|
|
@@ -90,7 +93,10 @@ function handleClose() {
|
|
<style lang="less">
|
|
<style lang="less">
|
|
.el-dialog {
|
|
.el-dialog {
|
|
border-radius: 10px;
|
|
border-radius: 10px;
|
|
|
|
+ padding: 0;
|
|
|
|
+ overflow: hidden;
|
|
.el-dialog__header{
|
|
.el-dialog__header{
|
|
|
|
+ display: none;
|
|
&.show-close{
|
|
&.show-close{
|
|
.el-dialog__headerbtn{
|
|
.el-dialog__headerbtn{
|
|
width: 60px;
|
|
width: 60px;
|