巴青农资商城

OrderGoodsRow.vue 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <view class="order-goods-row" @click="emit('click')">
  3. <image-preview class="order-goods-row__pic" :src="item.goodsImage || item.mainPic" />
  4. <view class="order-goods-row__main" :class="{ 'order-goods-row__main--compact': reviewAction }">
  5. <text class="order-goods-row__name">{{ item.goodsName }}</text>
  6. <view v-if="item.specList && item.specList.length" class="order-goods-row__specs">
  7. <text
  8. v-for="(spec, index) in item.specList"
  9. :key="index"
  10. class="order-goods-row__spec"
  11. >{{ spec }}</text>
  12. </view>
  13. <text v-if="item.serviceDesc" class="order-goods-row__service">{{ item.serviceDesc }}</text>
  14. <view class="order-goods-row__bottom">
  15. <text class="order-goods-row__price">¥{{ item.priceText }}</text>
  16. <text class="order-goods-row__qty">×{{ item.quantity }}</text>
  17. </view>
  18. <text v-if="showSubtotal && item.lineAmountText" class="order-goods-row__subtotal">
  19. 小计 ¥{{ item.lineAmountText }}
  20. </text>
  21. <text v-if="item.buyerRemark" class="order-goods-row__remark">备注:{{ item.buyerRemark }}</text>
  22. </view>
  23. <button
  24. v-if="reviewAction"
  25. class="order-goods-row__review-btn"
  26. @click.stop="emit('review', reviewAction.code)"
  27. >
  28. {{ reviewAction.label }}
  29. </button>
  30. </view>
  31. </template>
  32. <script setup>
  33. defineProps({
  34. item: {
  35. type: Object,
  36. required: true
  37. },
  38. showSubtotal: {
  39. type: Boolean,
  40. default: false
  41. },
  42. /** { code, label } 交易成功时商品行评价按钮 */
  43. reviewAction: {
  44. type: Object,
  45. default: null
  46. }
  47. })
  48. const emit = defineEmits(['click', 'review'])
  49. </script>
  50. <style lang="scss" scoped>
  51. .order-goods-row {
  52. display: flex;
  53. align-items: flex-start;
  54. padding: 16rpx 0;
  55. }
  56. .order-goods-row__main--compact {
  57. padding-right: 8rpx;
  58. }
  59. .order-goods-row__pic {
  60. width: 140rpx;
  61. height: 140rpx;
  62. border-radius: 8rpx;
  63. background: #eee;
  64. flex-shrink: 0;
  65. }
  66. .order-goods-row__main {
  67. flex: 1;
  68. margin-left: 16rpx;
  69. min-width: 0;
  70. }
  71. .order-goods-row__name {
  72. font-size: 28rpx;
  73. color: #333;
  74. line-height: 1.4;
  75. }
  76. .order-goods-row__specs {
  77. margin-top: 6rpx;
  78. display: flex;
  79. flex-direction: column;
  80. gap: 4rpx;
  81. }
  82. .order-goods-row__spec {
  83. font-size: 24rpx;
  84. color: #999;
  85. }
  86. .order-goods-row__service {
  87. display: block;
  88. margin-top: 6rpx;
  89. font-size: 22rpx;
  90. color: #2e7d32;
  91. }
  92. .order-goods-row__bottom {
  93. margin-top: 10rpx;
  94. display: flex;
  95. align-items: center;
  96. justify-content: space-between;
  97. }
  98. .order-goods-row__price {
  99. font-size: 28rpx;
  100. color: #e53935;
  101. font-weight: 600;
  102. }
  103. .order-goods-row__qty {
  104. font-size: 24rpx;
  105. color: #999;
  106. }
  107. .order-goods-row__subtotal {
  108. display: block;
  109. margin-top: 6rpx;
  110. font-size: 24rpx;
  111. color: #666;
  112. text-align: right;
  113. }
  114. .order-goods-row__remark {
  115. display: block;
  116. margin-top: 6rpx;
  117. font-size: 22rpx;
  118. color: #999;
  119. }
  120. .order-goods-row__review-btn {
  121. flex-shrink: 0;
  122. margin: 24rpx 0 0 8rpx;
  123. min-width: 128rpx;
  124. height: 52rpx;
  125. line-height: 52rpx;
  126. padding: 0 16rpx;
  127. font-size: 24rpx;
  128. color: #2e7d32;
  129. background: #fff;
  130. border: 1rpx solid #2e7d32;
  131. border-radius: 26rpx;
  132. }
  133. </style>