index.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <div class="p-fill-order">
  3. <h3 class="ptc-title">Fill Order</h3>
  4. <component :is="Component" @go="go" />
  5. </div>
  6. </template>
  7. <script lang="ts">
  8. import { defineComponent } from 'vue'
  9. import { initProducts } from './store'
  10. export default defineComponent({
  11. name: 'FillOrder',
  12. beforeRouteEnter(to, from, next) {
  13. initProducts().then(next)
  14. },
  15. })
  16. </script>
  17. <script setup lang="ts">
  18. import { ref, computed, watch, onUnmounted } from 'vue'
  19. import { useRoute } from 'vue-router'
  20. import StepOne from './StepOne.vue'
  21. import StepTwo from './StepTwo.vue'
  22. import StepThree from './StepThree.vue'
  23. import { state, resetState, getModelList } from './store'
  24. import { state as rootState, getCurrentOrder } from '@/store'
  25. import { getDiscountInfo } from '@/service/order'
  26. const step = ref(0)
  27. const Component = computed(() => [StepOne, StepTwo, StepThree][step.value])
  28. const { from, invitee, renewal, pid } = useRoute().query as any
  29. state.form.from = from || (renewal ? 'renew' : '')
  30. state.form.invitor = invitee || ''
  31. if (pid && state.productList.some(v => v.id === +pid)) {
  32. state.form.product_id = +pid
  33. }
  34. if (renewal) {
  35. state.form.renewal = +renewal
  36. getCurrentOrder(renewal).then(() => {
  37. const order = rootState.currentOrder
  38. if (state.productList.some(item => item.id === +order.product_id)) {
  39. state.form.product_id = +order.product_id
  40. }
  41. state.form.subscribe_type = +order.subscribe_type === 1 ? 'month' : 'year'
  42. state.form.brand_id = +order.brand_id
  43. state.form.phone_id = +order.phone_id
  44. getModelList()
  45. })
  46. }
  47. const { orders = [], num_order_expired = 0 } = rootState.userInfo || {}
  48. const discountType =
  49. orders.length || num_order_expired > 0
  50. ? '3'
  51. : ({ admin: '1', member: '2', renew: '3' } as any)[state.form.from]
  52. if (discountType) {
  53. getDiscountInfo(discountType).then(
  54. ({ results }) =>
  55. (state.discount = {
  56. name: ['店员折扣', '新人折扣', '多次购买折扣'][discountType - 1],
  57. discount_amount: results.amount,
  58. })
  59. )
  60. }
  61. // 此处不直接传入resetState是有必要的,否则resetState在整个应用生命周期只会执行一次
  62. onUnmounted(() => resetState())
  63. watch(step, () => window.scrollTo(0, 0))
  64. function go(delta = 1) {
  65. step.value += delta
  66. }
  67. </script>
  68. <style lang="scss">
  69. .p-fill-order {
  70. background: #f7f7f7;
  71. .detail {
  72. display: flex;
  73. align-items: flex-end;
  74. .s1,
  75. .s2 {
  76. font-size: 40px;
  77. font-weight: bold;
  78. color: #1a1a1a;
  79. }
  80. .s2 {
  81. margin: 0 20px 0 48px;
  82. }
  83. .s3 {
  84. margin-right: 48px;
  85. font-size: 28px;
  86. color: #1a1a1a;
  87. }
  88. .s4 {
  89. margin-left: auto;
  90. font-size: 32px;
  91. font-weight: bold;
  92. color: $primary-color;
  93. cursor: pointer;
  94. }
  95. }
  96. }
  97. </style>