index.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. const commonStore = useCommonStore()
  16. const { downloadCatalog, accountList, loginType, isCompletedInfo } = storeToRefs(commonStore)
  17. const { emailStep, isEmailGoogle, selectedAccount, setEmailStep } = useLoginAndDownload()
  18. const userStore = useUserStore()
  19. const { isLogin } = storeToRefs(userStore)
  20. const { isLoginAndDownloadOpen } = useLoginAndDownLoadModal()
  21. watch(() => accountList.value, (newVal: any) => {
  22. if (newVal.length > 0)
  23. commonStore.setLoginType('account')
  24. else
  25. commonStore.setLoginType('choice')
  26. }, { immediate: true })
  27. watchEffect(() => {
  28. if (isLogin.value && isCompletedInfo.value)
  29. setEmailStep(4)
  30. else
  31. console.log('watchEffect-------1', isLogin.value, isCompletedInfo.value)
  32. })
  33. onUnmounted(() => {
  34. console.log('组件卸载了', isCompletedInfo.value)
  35. setEmailStep(3)
  36. })
  37. </script>
  38. <template>
  39. <el-dialog
  40. v-model="isLoginAndDownloadOpen"
  41. :append-to-body="true"
  42. :close-on-click-modal="false"
  43. :close-on-press-escape="false"
  44. width="880"
  45. >
  46. <img
  47. src="@/assets/images/login_close_icon.png"
  48. alt=""
  49. class="w-32px h-32px bg-#F4F4F4 cursor-pointer p-8px b-rd-50% pos-absolute top-24px right-24px"
  50. @click="isLoginAndDownloadOpen = false"
  51. >
  52. <div class="flex min-h-550px">
  53. <div class="pt-110px pb-52px px-45px flex flex-col justify-between pos-relative w-375px bg-cover bg-no-repeat" :style="{ backgroundImage: `url(${downloadCatalog.img})` }">
  54. <svgo-spark-logo
  55. class="!w-100px !h-24px text-#fff"
  56. />
  57. <div>
  58. <div class="custom-title-font text-24px fw-800 text-#fff mb-24px">
  59. Download The Catalog
  60. </div>
  61. <div class="mb-10px custom-title-font text-18px fw-800 text-#fff">
  62. {{ downloadCatalog.title }}
  63. </div>
  64. <div class="text-14px text-#fff lh-22px mb-36px">
  65. {{ downloadCatalog.description }}
  66. </div>
  67. <!-- <div
  68. 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"
  69. >
  70. <NuxtLink to="/">
  71. Learn More
  72. </NuxtLink>
  73. </div> -->
  74. </div>
  75. </div>
  76. <div class="flex-1 b-rd-10px bg-#fff px-70px pt-100px">
  77. <div v-if="!isLogin">
  78. <!-- 登陆部分 -->
  79. <AccountList v-if="emailStep === 0 && accountList.length && loginType === 'account'" />
  80. <Choice v-if="emailStep === 0 && loginType === 'choice'" />
  81. <Mail v-if="emailStep === 1 && !selectedAccount" />
  82. <Mail v-if="emailStep === 1 && selectedAccount" />
  83. <Code v-if="emailStep === 2 && !isEmailGoogle " />
  84. <Google v-if="emailStep === 2 && isEmailGoogle === 'google'" />
  85. <!-- 填写信息 -->
  86. <Info v-if="emailStep === 3 && !isCompletedInfo" />
  87. <SubmitRequest v-if="emailStep === 3 && !!isCompletedInfo && downloadCatalog.type === 'request'" />
  88. <Finish v-if="emailStep === 4 && downloadCatalog.type === 'download'" />
  89. <Request v-if="emailStep === 4 && downloadCatalog.type === 'request'" />
  90. </div>
  91. </div>
  92. </div>
  93. </el-dialog>
  94. </template>
  95. <style lang="less">
  96. .el-dialog {
  97. border-radius: 10px;
  98. padding: 0;
  99. overflow: hidden;
  100. .el-dialog__header {
  101. display: none;
  102. &.show-close {
  103. .el-dialog__headerbtn {
  104. width: 60px;
  105. height: 60px;
  106. .el-dialog__close {
  107. font-size: 30px;
  108. color: #000;
  109. }
  110. }
  111. }
  112. }
  113. }
  114. </style>