product.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <script lang="ts" setup>
  2. import { publish } from '../../../../core/libs/svgs'
  3. import { addBlack } from '@designer-hub/assets/src/assets/svgs'
  4. import { useRouter } from '../../../../core/utils/router'
  5. import { PropType } from 'vue'
  6. import { requestToast } from '../../../../core/utils/common'
  7. import { createProductItemBuy } from '../../../../core/libs/requests'
  8. import { useUserStore } from '../../../../store'
  9. import { storeToRefs } from 'pinia'
  10. const props = defineProps({
  11. options: {
  12. type: Object as PropType<any>,
  13. default: () => {},
  14. },
  15. })
  16. const userStore = useUserStore()
  17. const { userInfo } = storeToRefs(userStore)
  18. const router = useRouter()
  19. const handleAddToCart = async () => {
  20. await requestToast(() =>
  21. createProductItemBuy({
  22. doList: [
  23. {
  24. userId: userInfo.value.userId,
  25. productId: props.options?.productId || '',
  26. },
  27. ],
  28. }),
  29. )
  30. }
  31. </script>
  32. <template>
  33. <div
  34. class="w-full flex flex-col gap-2.5"
  35. @click="router.push(`/pages/home/mall/detail/index?id=${options.productId}`)"
  36. >
  37. <div class="bg-[#f6f6f6] rounded-2xl w-full aspect-square overflow-hidden">
  38. <wd-img
  39. width="100%"
  40. height="100%"
  41. :src="options.productCoverImgUrl"
  42. mode="aspectFill"
  43. custom-class="aspect-square"
  44. ></wd-img>
  45. </div>
  46. <div class="flex">
  47. <div class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-normal">
  48. <!-- 阿芙佳朵 -->
  49. {{ options.prodcutName }}
  50. </div>
  51. <div class="flex-1"></div>
  52. <div
  53. class="w-[26px] text-black/30 text-xs font-normal font-['PingFang_SC'] line-through leading-normal"
  54. >
  55. <!-- ¥60 -->
  56. ¥{{ options.productPrice }}
  57. </div>
  58. </div>
  59. <div class="flex items-center mb-6">
  60. <div class="flex items-end gap-1">
  61. <div class="text-[#ef4343] text-[22px] font-normal font-['D-DIN Exp'] leading-5.5">
  62. <!-- 1000 -->
  63. {{ options.points }}
  64. </div>
  65. <div class="text-black/60 text-sm font-normal font-['PingFang_SC']">积分</div>
  66. </div>
  67. <div class="flex-1"></div>
  68. <div class="" @click.stop="handleAddToCart">
  69. <wd-img width="24" height="24" :src="addBlack"></wd-img>
  70. </div>
  71. </div>
  72. </div>
  73. </template>