app-form-data.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <view class="app-form-data">
  3. <block v-if="formList && formList.length">
  4. <slot></slot>
  5. <view v-for="(row,idx) in formList" :class="['goods-form', `${idx == 0? 'more':''}`]" :key="idx">
  6. <view v-for="(goods,index) in row" :key="index" v-if="formList.length > 1">
  7. <view class="goods">
  8. <image class="goods-img" :src='goods.goods_info.goods_attr.pic_url ? goods.goods_info.goods_attr.pic_url : goods.goods_info.goods_attr.cover_pic'></image>
  9. <view class='t-omit-two goods-name'>{{goods.goods_info.goods_attr.name}}</view>
  10. <view class="goods-attr t-omit" v-if="goods.goods_type === 'goods'">
  11. <text v-for="attr in goods.attr_list" :key="item.attr_id">{{attr.attr_group_name}}:{{attr.attr_name}}</text>
  12. </view>
  13. <view class="goods-num">x{{goods.num}}</view>
  14. <view class="goods-price">¥{{goods.total_original_price}}</view>
  15. </view>
  16. </view>
  17. <view v-for="(item,index) in row[0]['form_data']" v-if="item.value" :key="index" :class="[ `${item.key !== 'img_upload' ? 'dir-left-nowrap' : ''}`,`price-item`]">
  18. <view class="price-label">{{item.label}}:</view>
  19. <view v-if="item.key === 'img_upload'">
  20. <view v-if="Array.isArray(item.value)">
  21. <block v-for="(img,key) in item.value" :key="key">
  22. <image v-if="img" v-show="!item.loadOver" @load="imageFormLoad(idx,index)" @click='look(img)' class="form-img" :src='img'></image>
  23. </block>
  24. </view>
  25. <view v-else>
  26. <image v-if="item.value" v-show="!item.loadOver" @load="imageFormLoad(idx,index)" @click='look(item.value)' class="form-img" :src='item.value'></image>
  27. </view>
  28. </view>
  29. <view style="word-break: break-all" v-else>{{item.value}}</view>
  30. </view>
  31. </view>
  32. </block>
  33. <view v-if="detail.order_form.length > 0">
  34. <slot></slot>
  35. <view v-for="(item,index) in detail.order_form" v-if="item.value" :key="index" :class="[ `${item.key !== 'img_upload' ? 'dir-left-nowrap' : ''}`,`price-item`]">
  36. <view class="price-label">{{item.label}}:</view>
  37. <view v-if="item.key === 'img_upload'">
  38. <view v-if="Array.isArray(item.value)">
  39. <block v-for="(img,key) in item.value" :key="key">
  40. <image v-if="img" v-show="!item.loadOver" @load="imageLoad(index)" @click.stop='look(img)' class="form-img" :src='img'></image>
  41. </block>
  42. </view>
  43. <view v-else>
  44. <image v-if="item.value" v-show="!item.loadOver" @load="imageLoad(index)" @click.stop='look(item.value)' class="form-img" :src='item.value'></image>
  45. </view>
  46. </view>
  47. <view style="word-break: break-all" v-else>{{item.value}}</view>
  48. </view>
  49. </view>
  50. </view>
  51. </template>
  52. <script>
  53. export default {
  54. props: {
  55. order: {
  56. type: Object,
  57. }
  58. },
  59. data() {
  60. return {
  61. detail: this.order
  62. }
  63. },
  64. computed: {
  65. formList() {
  66. const self = this;
  67. let orderDetail = self.detail.detail;
  68. let newArr = {};
  69. let form_ids = [];
  70. if (orderDetail && orderDetail.length) {
  71. for (let goods of orderDetail) {
  72. if (goods.form_id == '0') {
  73. continue;
  74. }
  75. if (form_ids.indexOf(goods.form_id) === -1) {
  76. form_ids.push(goods.form_id);
  77. newArr[goods.form_id] = [goods];
  78. } else {
  79. newArr[goods.form_id].push(goods);
  80. }
  81. }
  82. }
  83. let list = Object.values(newArr)
  84. this.$emit('show', list);
  85. return list;
  86. }
  87. },
  88. watch: {
  89. order: {
  90. handler (newValue) {
  91. this.detail = newValue
  92. },
  93. deep: true
  94. }
  95. },
  96. methods: {
  97. imageLoad(index) {
  98. this.order.order_form[index].loadOver = false;
  99. },
  100. // 查看图片
  101. look(e) {
  102. uni.previewImage({
  103. current: e, // 当前显示图片的http链接
  104. urls: [e] // 需要预览的图片http链接列表
  105. })
  106. },
  107. imageFormLoad(idx,index) {
  108. this.order.detail[idx].form_data[index].loadOver = false;
  109. },
  110. }
  111. }
  112. </script>
  113. <style lang="scss" scoped>
  114. .app-form-data {
  115. .goods-form {
  116. border-top: #{2rpx solid #e2e2e2};
  117. margin-top: #{20rpx};
  118. &.more {
  119. border-top: 0;
  120. margin-top: #{10rpx};
  121. }
  122. }
  123. .form-img {
  124. height: #{120rpx};
  125. width: #{120rpx};
  126. margin-right: #{10rpx};
  127. margin-top: #{10rpx};
  128. }
  129. .price-label {
  130. color: #999;
  131. margin-right: #{10rpx};
  132. }
  133. .price-item {
  134. margin-bottom: #{10rpx};
  135. font-size: #{24rpx};
  136. color: #353535;
  137. }
  138. .goods {
  139. height: #{160rpx};
  140. margin-top: #{24rpx};
  141. position: relative;
  142. font-size: #{24rpx};
  143. color: #353535;
  144. margin-bottom: #{24rpx};
  145. .goods-img {
  146. height: #{160rpx};
  147. width: #{160rpx};
  148. float: left;
  149. margin-right: #{20rpx};
  150. border-radius: #{4rpx};
  151. }
  152. .goods-attr {
  153. font-size: #{24rpx};
  154. color: #999;
  155. width: 70%;
  156. position: absolute;
  157. width: 70%;
  158. top: #{78rpx};
  159. left: #{180rpx};
  160. text {
  161. margin-right: #{20rpx};
  162. }
  163. }
  164. .goods-num {
  165. font-size: #{24rpx};
  166. color: #999;
  167. position: absolute;
  168. top: #{126rpx};
  169. left: #{180rpx};
  170. }
  171. .goods-price {
  172. font-size: #{24rpx};
  173. color: #353535;
  174. position: absolute;
  175. bottom: 0;
  176. right: 0;
  177. }
  178. }
  179. }
  180. </style>