cart.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <template>
  2. <div class="cart" v-loading="loading">
  3. <template v-if="cartList.length || invalidGoods.length">
  4. <nav>
  5. <li>
  6. <el-checkbox v-model="checkAll" @change="allElection"></el-checkbox>
  7. </li>
  8. <li>商品信息</li>
  9. <li>价格</li>
  10. <li>数量</li>
  11. <li>小计</li>
  12. <li>操作</li>
  13. </nav>
  14. <div class="list" v-for="(siteItem, siteIndex) in cartList" :key="siteIndex">
  15. <div class="item">
  16. <!-- <div class="head">
  17. <el-checkbox v-model="siteItem.checked" @change="siteAllElection(siteIndex)"></el-checkbox>
  18. <router-link to="/shop" target="_blank">{{ siteItem.siteName }}</router-link>
  19. <el-tag size="small" v-if="siteItem.cartList[0].is_own == 1">自营</el-tag>
  20. </div> -->
  21. <ul v-for="(item, cartIndex) in siteItem.cartList" :key="cartIndex">
  22. <li>
  23. <el-checkbox v-model="item.checked" @change="singleElection(siteIndex, cartIndex)"></el-checkbox>
  24. </li>
  25. <li class="goods-info-wrap" @click="$util.pushToTab({ path: '/sku/' + item.sku_id })">
  26. <div class="img-wrap"><img class="img-thumbnail" :src="$img(item.sku_image, { size: 'mid' })" @error="imageError(siteIndex, cartIndex)" /></div>
  27. <div class="info-wrap">
  28. <h5>{{ item.sku_name }}</h5>
  29. <template v-if="item.sku_spec_format">
  30. <span v-for="(x, i) in item.sku_spec_format" :key="i">
  31. {{ x.spec_name }}:{{ x.spec_value_name }} {{ i < item.sku_spec_format.length - 1 ? ';' : '' }}
  32. </span>
  33. </template>
  34. </div>
  35. </li>
  36. <li>
  37. <span>¥{{ item.discount_price }}</span>
  38. </li>
  39. <li>
  40. <el-input-number v-model="item.num" :step="modifyNum" size="mini" :min="1" :max="item.stock" @change="cartNumChange($event, { siteIndex, cartIndex })"></el-input-number>
  41. </li>
  42. <li>
  43. <strong class="subtotal ns-text-color" v-if="item.discount_price * item.num">¥{{ $util.filterPrice(item.discount_price * item.num) }}</strong>
  44. <strong class="subtotal ns-text-color" v-else>¥0</strong>
  45. </li>
  46. <li>
  47. <el-button type="text" @click="deleteCart(siteIndex, cartIndex)">删除</el-button>
  48. </li>
  49. </ul>
  50. </div>
  51. </div>
  52. <div class="lose-list" v-if="invalidGoods.length">
  53. <div class="head">
  54. 失效商品
  55. <span class="ns-text-color">{{ invalidGoods.length }}</span>
  56. </div>
  57. <ul v-for="(goodsItem, goodsIndex) in invalidGoods" :key="goodsIndex">
  58. <li>
  59. <el-tag size="small" type="info">失效</el-tag>
  60. </li>
  61. <li class="goods-info-wrap">
  62. <div class="img-wrap"><img class="img-thumbnail" :src="$img(goodsItem.sku_image, { size: 'mid' })" @error="imageErrorInvalid(goodsIndex)" /></div>
  63. <div class="info-wrap">
  64. <h5>{{ goodsItem.sku_name }}</h5>
  65. <template v-if="goodsItem.sku_spec_format">
  66. <span v-for="(x, i) in goodsItem.sku_spec_format" :key="i">
  67. {{ x.spec_name }}:{{ x.spec_value_name }}{{ i < goodsItem.sku_spec_format.length - 1 ? ';' : '' }}
  68. </span>
  69. </template>
  70. </div>
  71. </li>
  72. <li>
  73. <span>¥{{ goodsItem.discount_price }}</span>
  74. </li>
  75. <li>{{ goodsItem.num }}</li>
  76. <li>
  77. <strong class="subtotal">¥{{ $util.filterPrice(goodsItem.discount_price * goodsItem.num) }}</strong>
  78. </li>
  79. </ul>
  80. </div>
  81. <footer>
  82. <el-checkbox v-model="checkAll" @change="allElection">全选</el-checkbox>
  83. <ul class="operation">
  84. <li>
  85. <el-button type="text" @click="deleteCartSelected">删除</el-button>
  86. </li>
  87. <li>
  88. <el-button type="text" @click="clearInvalidGoods" v-if="invalidGoods.length!=0">清除失效宝贝</el-button>
  89. </li>
  90. </ul>
  91. <div class="sum-wrap">
  92. <div class="selected-sum">
  93. <span>已选商品</span>
  94. <em class="total-count">{{ totalCount }}</em>
  95. <span>件</span>
  96. </div>
  97. <div class="price-wrap">
  98. <span>合计(不含运费):</span>
  99. <strong class="ns-text-color">¥{{ totalPrice }}</strong>
  100. </div>
  101. <el-button type="primary" v-if="totalCount != 0" @click="settlement">结算</el-button>
  102. <el-button type="info" v-else disabled @click="settlement">结算</el-button>
  103. </div>
  104. </footer>
  105. </template>
  106. <div class="empty-wrap" v-else-if="!loading && (!cartList.length || !invalidGoods.length)">
  107. <img src="~assets/images/goods_empty.png" >
  108. <router-link to="/">您的购物车是空的,赶快去逛逛,挑选商品吧!</router-link>
  109. </div>
  110. </div>
  111. </template>
  112. <script>
  113. import cart from '@/assets/js/goods/cart';
  114. export default {
  115. name: 'cart',
  116. mixins: [cart]
  117. };
  118. </script>
  119. <style lang="scss" scoped>
  120. @import '@/assets/css/goods/cart.scss';
  121. </style>