index.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <div class="purchase-layout">
  3. <div class="plate01">
  4. <div class="top">
  5. <span @click="$router.push({name:'eight'})">{{langPurchase.top1}}</span>
  6. <span @click="scrollTo('jsgg')">{{langPurchase.top2}}</span>
  7. </div>
  8. <div class="main-layout">
  9. <img class="pro" :src="`${$cdn}images/banner_pro.png`" alt="">
  10. <div class="txt-con">
  11. <img class="p-logo" :src="`${$cdn}images/pro-logo-m.png`" alt="">
  12. <div class="p-label" v-html="langPurchase.dec"></div>
  13. <div class="p-price">{{langPurchase.price}}</div>
  14. </div>
  15. <div class="attr-con">
  16. <div class="attr">{{langPurchase.color.key}}</div>
  17. <div class="box color">
  18. <i class="iconfont icon-yuandian"></i>
  19. {{langPurchase.color.val}}</div>
  20. <div class="attr">{{langPurchase.service.key}}</div>
  21. <div class="box service">
  22. <ul>
  23. <li v-for="(item,i) in langPurchase.service.val1" :key="i" v-html="item"></li>
  24. </ul>
  25. <span class="line"></span>
  26. <ul>
  27. <li v-for="(item,i) in langPurchase.service.val2" :key="i" v-html="item"></li>
  28. </ul>
  29. </div>
  30. <div class="attr">{{langPurchase.gift.key}}</div>
  31. <div class="box zhijia">
  32. <img :src="`${$cdn}images/zhijia.png`" alt>
  33. <span>{{langPurchase.gift.val}}</span>
  34. </div>
  35. <div class="attr">{{langPurchase.count.key}}</div>
  36. <spinner class="count" @count='handleNum' />
  37. <div class="btn" @click="addcart">{{langPurchase.buy}}</div>
  38. <div class="dec">* 付款成功后5个工作日内发货,默认顺丰快递包邮</div>
  39. </div>
  40. </div>
  41. </div>
  42. <div class="plate02" ref="jsgg">
  43. <div class="p2-name">{{langPurchase.parmas.name}}</div>
  44. <div class="p2-pramas">
  45. <div v-for="(item,i) in langPurchase.parmas.detail" :key="i">
  46. <p class="title">{{item.label}}</p>
  47. <div class="name">{{item.name}}</div>
  48. <div class="detail" >
  49. <span v-for="(sub,idx) in item.dec" :key="idx">
  50. <span v-html="sub"></span>
  51. </span>
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. </template>
  58. <script>
  59. import { mapState } from 'vuex'
  60. import spinner from '@/components/spinner'
  61. import { getPosition } from '@/util'
  62. export default {
  63. components: {
  64. spinner
  65. },
  66. computed: {
  67. ...mapState({
  68. token: state => state.user.token,
  69. langPurchase: state => state.language.home.purchase
  70. })
  71. },
  72. data () {
  73. return {
  74. count: 1
  75. }
  76. },
  77. methods: {
  78. handleNum (data) {
  79. this.count = data
  80. },
  81. async addcart () {
  82. if (!this.token) {
  83. return this.$router.push({path: '/login'})
  84. }
  85. let params = {
  86. goodsId: 4,
  87. goodsCount: this.count,
  88. skuSn: 'U15609161635760015'
  89. }
  90. await this.$store.dispatch('addCart', params)
  91. this.$router.push({path: '/cart'})
  92. },
  93. scrollTo (href) {
  94. this.interval = null
  95. let inter = 0
  96. let tag = getPosition(this.$refs[href]).y - 48
  97. let speed = Math.ceil(tag / 40)
  98. this.interval = setInterval(() => {
  99. inter += speed
  100. document.querySelector('#app').scrollTo(0, Math.min(inter, tag))
  101. if ((document.querySelector('#app').scrollTop) >= tag) {
  102. clearInterval(this.interval)
  103. }
  104. })
  105. }
  106. }
  107. }
  108. </script>
  109. <style lang="scss" scoped>
  110. @import './style.scss';
  111. </style>