index.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <!-- @format -->
  2. <script setup lang="ts">
  3. import Choice from './comp/choice.vue'
  4. import Mail from './comp/email/index.vue'
  5. import Code from './comp/email/code.vue'
  6. import Google from './comp/email/google.vue'
  7. import AccountList from './comp/account/list.vue'
  8. import Info from './comp/info/index.vue'
  9. import Finish from './comp/info/finish.vue'
  10. import SubmitRequest from './comp/info/submitRequest.vue'
  11. import Request from './comp/info/request.vue'
  12. import useLoginAndDownload from './useLoginAndDownload'
  13. import { useUserStore } from '@/stores/modules/user'
  14. import { useCommonStore } from '@/stores/modules/common'
  15. import { Condition } from '@/enums/const-enums'
  16. const commonStore = useCommonStore()
  17. const { downloadCatalog, loginedAccountList, loginType } = storeToRefs(commonStore)
  18. const { emailStep, isEmailGoogle, setEmailStep, loginForm } = useLoginAndDownload()
  19. const userStore = useUserStore()
  20. const { isLogin, isCompletedInfo } = storeToRefs(userStore)
  21. const { isLoginAndDownloadOpen } = useLoginAndDownLoadModal()
  22. watch(() => loginedAccountList.value, (newVal: any) => {
  23. if (newVal.length > 0)
  24. commonStore.setLoginType('account')
  25. else
  26. commonStore.setLoginType('choice')
  27. }, { immediate: true })
  28. watchEffect(() => {
  29. if (isLogin.value) {
  30. console.log('isCompletedInfo.value', isCompletedInfo.value)
  31. if (isCompletedInfo.value) {
  32. if (downloadCatalog.value.downloadCondition === Condition.DOWNLOAD)
  33. setEmailStep(4)
  34. else setEmailStep(3)
  35. }
  36. else { setEmailStep(3) }
  37. }
  38. })
  39. onUnmounted(() => {
  40. console.log('组件卸载了', loginForm.value)
  41. loginForm.value.captcha = ''
  42. })
  43. </script>
  44. <template>
  45. <el-dialog
  46. v-model="isLoginAndDownloadOpen"
  47. :append-to-body="true"
  48. :close-on-click-modal="false"
  49. :close-on-press-escape="false"
  50. :z-index="2000"
  51. width="880"
  52. >
  53. <img
  54. src="@/assets/images/login_close_icon.png"
  55. alt=""
  56. class="w-32px h-32px bg-#F4F4F4 cursor-pointer p-8px b-rd-50% pos-absolute top-24px right-24px"
  57. @click="isLoginAndDownloadOpen = false"
  58. >
  59. <div class="flex min-h-550px">
  60. <div class="bg-login pos-relative w-375px bg-cover bg-no-repeat" :style="{ backgroundImage: `url(${downloadCatalog.coverImg})` }">
  61. <div class="pt-110px pb-52px px-45px flex flex-col justify-between pos-absolute top-0 left-0 w-100% h-100%">
  62. <svgo-spark-logo
  63. class="!w-100px !h-24px text-#fff"
  64. />
  65. <div>
  66. <div class="custom-title-font text-24px fw-800 text-#fff mb-24px">
  67. Download The Catalog
  68. </div>
  69. <div class="mb-10px custom-title-font text-18px fw-800 text-#fff">
  70. {{ downloadCatalog.title }}
  71. </div>
  72. <div class="text-14px text-#fff lh-22px mb-36px">
  73. {{ downloadCatalog.subhead }}
  74. </div>
  75. <div
  76. v-if="downloadCatalog.blogSlug && (emailStep === 0 || emailStep === 4)"
  77. class="w-110px h-32px lh-32px text-center b-rd-6px text-14px text-#9B6CFF fw-bold b-solid b-1px b-#9B6CFF cursor-pointer hover:bg-#9B6CFF hover:text-#fff"
  78. @click="isLoginAndDownloadOpen = false"
  79. >
  80. <NuxtLink :to="`/blog/${downloadCatalog.blogSlug}`">
  81. Learn More
  82. </NuxtLink>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="flex-1 b-rd-10px bg-#fff px-70px pt-100px">
  88. <div v-if="!isLogin">
  89. <!-- 登陆部分 -->
  90. <AccountList v-if="emailStep === 0 && loginedAccountList.length && loginType === 'account'" />
  91. <Choice v-if="emailStep === 0 && loginType === 'choice'" />
  92. <Mail v-if="emailStep === 1" />
  93. <Code v-if="emailStep === 2 && !isEmailGoogle" />
  94. <Google v-if="emailStep === 2 && isEmailGoogle" />
  95. </div>
  96. <!-- 填写信息 -->
  97. <Info v-if="emailStep === 3 && !isCompletedInfo" />
  98. <SubmitRequest v-if="emailStep === 3 && !!isCompletedInfo && downloadCatalog.downloadCondition === Condition.REQUEST" />
  99. <Finish v-if="emailStep === 4 && downloadCatalog.downloadCondition === Condition.DOWNLOAD" />
  100. <Request v-if="emailStep === 4 && downloadCatalog.downloadCondition === Condition.REQUEST" />
  101. </div>
  102. </div>
  103. </el-dialog>
  104. </template>
  105. <style lang="less">
  106. .el-dialog {
  107. border-radius: 10px;
  108. padding: 0;
  109. overflow: hidden;
  110. .el-dialog__header {
  111. display: none;
  112. &.show-close {
  113. .el-dialog__headerbtn {
  114. width: 60px;
  115. height: 60px;
  116. .el-dialog__close {
  117. font-size: 30px;
  118. color: #000;
  119. }
  120. }
  121. }
  122. }
  123. }
  124. .bg-login{
  125. &::before{
  126. content: '';
  127. position: absolute;
  128. top: 0;
  129. left: 0;
  130. width: 100%;
  131. height: 100%;
  132. backdrop-filter: blur(1px);
  133. background-color: rgba(0, 0, 0, 0.5);
  134. }
  135. }
  136. </style>