CartModal.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <a-drawer
  3. :open="open"
  4. title="购物车列表"
  5. width="620px"
  6. placement="right"
  7. @close="emits('close')"
  8. >
  9. <div class="drawer-box" style="height: 100%;">
  10. <CartList
  11. v-if="mainData.stepNum == 1"
  12. key="1"
  13. :user-id="userId"
  14. :storage-id="storageId"
  15. @next-step="handleNext"
  16. />
  17. <SubmitCart
  18. v-if="mainData.stepNum == 2"
  19. key="2"
  20. :user-id="userId"
  21. :storage-id="storageId"
  22. :buy-goods="mainData.buyGoods"
  23. @prev-step="handlePrev"
  24. @finish="emits('close')"
  25. />
  26. </div>
  27. </a-drawer>
  28. </template>
  29. <script setup lang="js">
  30. import CartList from './CartList.vue';
  31. import SubmitCart from './SubmitCart.vue';
  32. import { reactive, nextTick, watch } from 'vue'
  33. const props = defineProps({
  34. open: {
  35. type: Boolean,
  36. default: false
  37. },
  38. userId: {
  39. type: String,
  40. default: ''
  41. },
  42. storageId: {
  43. type: String,
  44. default: ''
  45. }
  46. })
  47. const emits = defineEmits(['close']);
  48. const mainData = reactive({
  49. stepNum: 1,
  50. buyGoods: []
  51. })
  52. const handleNext = (selectedList = []) => {
  53. mainData.stepNum += 1;
  54. mainData.buyGoods = selectedList;
  55. }
  56. const handlePrev = () => {
  57. mainData.buyGoods = [];
  58. mainData.stepNum -= 1;
  59. }
  60. watch(() => props.open, newVal => {
  61. if (newVal) {
  62. mainData.buyGoods = [];
  63. mainData.stepNum = -1;
  64. nextTick(() => {
  65. mainData.stepNum = 1;
  66. })
  67. }
  68. })
  69. </script>