index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. if (isCompletedInfo.value) {
  31. if (downloadCatalog.value.downloadCondition === Condition.DOWNLOAD)
  32. setEmailStep(4)
  33. else
  34. 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. width="880"
  51. >
  52. <img
  53. src="@/assets/images/login_close_icon.png"
  54. alt=""
  55. class="w-32px h-32px bg-#F4F4F4 cursor-pointer p-8px b-rd-50% pos-absolute top-24px right-24px"
  56. @click="isLoginAndDownloadOpen = false"
  57. >
  58. <div class="flex min-h-550px">
  59. <div class="bg-login pos-relative w-375px bg-cover bg-no-repeat" :style="{ backgroundImage: `url(${downloadCatalog.coverImg})` }">
  60. <div class="pt-110px pb-52px px-45px flex flex-col justify-between pos-absolute top-0 left-0 w-100% h-100%">
  61. <svgo-spark-logo
  62. class="!w-100px !h-24px text-#fff"
  63. />
  64. <div>
  65. <div class="custom-title-font text-24px fw-800 text-#fff mb-24px">
  66. Download The Catalog
  67. </div>
  68. <div class="mb-10px custom-title-font text-18px fw-800 text-#fff">
  69. {{ downloadCatalog.title }}
  70. </div>
  71. <div class="text-14px text-#fff lh-22px mb-36px">
  72. {{ downloadCatalog.subhead }}
  73. </div>
  74. <div
  75. v-if="downloadCatalog.blogSlug && (emailStep === 0 || emailStep === 4)"
  76. 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"
  77. @click="isLoginAndDownloadOpen = false"
  78. >
  79. <NuxtLink :to="`/blog/${downloadCatalog.blogSlug}`">
  80. Learn More
  81. </NuxtLink>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. <div class="flex-1 b-rd-10px bg-#fff px-70px pt-100px">
  87. <div v-if="!isLogin">
  88. <!-- 登陆部分 -->
  89. <AccountList v-if="emailStep === 0 && loginedAccountList.length && loginType === 'account'" />
  90. <Choice v-if="emailStep === 0 && loginType === 'choice'" />
  91. <Mail v-if="emailStep === 1" />
  92. <Code v-if="emailStep === 2 && !isEmailGoogle" />
  93. <Google v-if="emailStep === 2 && isEmailGoogle" />
  94. </div>
  95. <!-- 填写信息 -->
  96. <Info v-if="emailStep === 3 && !isCompletedInfo" />
  97. <SubmitRequest v-if="emailStep === 3 && !!isCompletedInfo && downloadCatalog.downloadCondition === Condition.REQUEST" />
  98. <Finish v-if="emailStep === 4 && downloadCatalog.downloadCondition === Condition.DOWNLOAD" />
  99. <Request v-if="emailStep === 4 && downloadCatalog.downloadCondition === Condition.REQUEST" />
  100. </div>
  101. </div>
  102. </el-dialog>
  103. </template>
  104. <style lang="less">
  105. .el-dialog {
  106. border-radius: 10px;
  107. padding: 0;
  108. overflow: hidden;
  109. .el-dialog__header {
  110. display: none;
  111. &.show-close {
  112. .el-dialog__headerbtn {
  113. width: 60px;
  114. height: 60px;
  115. .el-dialog__close {
  116. font-size: 30px;
  117. color: #000;
  118. }
  119. }
  120. }
  121. }
  122. }
  123. .bg-login{
  124. &::before{
  125. content: '';
  126. position: absolute;
  127. top: 0;
  128. left: 0;
  129. width: 100%;
  130. height: 100%;
  131. backdrop-filter: blur(4px);
  132. }
  133. }
  134. </style>