consult.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <script lang='ts' setup>
  2. // import { useUserStore } from '@/stores/modules/user'
  3. import { submitSubscribeApi } from '~/api/model/common'
  4. // const userStore = useUserStore()
  5. // const { isLogin } = storeToRefs(userStore)
  6. const form = ref<any>({
  7. mail: '',
  8. })
  9. async function submitSubscribe() {
  10. try {
  11. await submitSubscribeApi(form.value)
  12. ElMessage.success(`You've subscribed successfully.`)
  13. form.value.mail = ''
  14. }
  15. catch (error) {
  16. console.log(error)
  17. }
  18. }
  19. const validateEmail = computed(() => {
  20. const emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/
  21. if (!form.value.mail)
  22. return true
  23. return emailReg.test(form.value.mail)
  24. })
  25. </script>
  26. <template>
  27. <div class="p-40px pb-0 pt-58px mb-216px pr-150px w-1400px mx-auto bg-#F8F5F3">
  28. <div class="flex justify-between pos-relative">
  29. <div class="w-620px">
  30. <div class="text-#999999 mb-10px">
  31. QUALITY WHOLESALE
  32. </div>
  33. <h2 class="text-40px fw-600 lh-56px text-#333 !mb-30px custom-title-font">
  34. Subscribe for Exclusive Wholesale Offers and Updates!
  35. </h2>
  36. <div class="pos-relative w-500px">
  37. <el-input v-model.trim="form.mail" class="custom-input h-50px " placeholder="Enter your email here" />
  38. <el-button :disabled="!validateEmail || !form.mail" type="primary" class="!bg-#fff pos-absolute top-50% transform-translate-y--50% right-10px w-140px !h-40px !text-16px !b-rd-150px" @click="submitSubscribe">
  39. Subscribe
  40. </el-button>
  41. </div>
  42. <div v-if="!validateEmail" class="text-red mt-4px">
  43. Please enter a valid email address.
  44. </div>
  45. </div>
  46. <div class="flex items-end">
  47. <img src="@/assets/images/footer_consult.png" class="w-450px h-250px" alt="" srcset="">
  48. </div>
  49. </div>
  50. </div>
  51. </template>
  52. <style lang='less' scoped>
  53. .consult-item{
  54. &::before{
  55. position: absolute;
  56. content: "";
  57. bottom: 10%;
  58. top: 10%;
  59. right: 0px;
  60. width: 1px;
  61. background: #5B463E;
  62. }
  63. &:last-child::before{
  64. display: none;
  65. }
  66. }
  67. ::v-deep(.custom-input){
  68. .el-input__wrapper{
  69. border-radius:4px!important;
  70. padding-left: 20px!important;
  71. color: #999;
  72. font-size: 16px;
  73. box-shadow: unset!important;
  74. }
  75. }
  76. </style>