table.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id">
  3. <el-table-column type="selection" width="50" fixed="left"></el-table-column>
  4. <el-table-column label="订单编号" width="260" fixed="left" prop="goods_id">
  5. <template #default="scope">
  6. <div class="order-name">
  7. <span>{{ scope.row.order_sn }}</span>
  8. <span class="dec">系统单号:{{ scope.row.out_order_no }}</span>
  9. </div>
  10. </template>
  11. </el-table-column>
  12. <el-table-column label="商品类型" prop="types" width="100">
  13. <template #default="scope">
  14. {{ scope.row.product?scope.row.product.types:'-' }}
  15. </template>
  16. </el-table-column>
  17. <el-table-column label="商品信息" width="340" prop="name">
  18. <template #default="scope">
  19. <div class="goods-img">
  20. <div class="img">
  21. <el-image
  22. style="width: 54px; height: 54px"
  23. :src="scope.row.img"
  24. :zoom-rate="1.2"
  25. :max-scale="7"
  26. :min-scale="0.2"
  27. :preview-src-list="[scope.row.img]"
  28. preview-teleported
  29. z-index="999"
  30. fit="cover"></el-image>
  31. </div>
  32. <div class="name">
  33. <span>{{ scope.row.product.product_name }}</span>
  34. <span class="dec">商品编码:{{ scope.row.product.product_id }}</span>
  35. </div>
  36. </div>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="商品售价" prop="types" width="120" align="right">
  40. <template #default="scope">
  41. <div class="order-name">
  42. <span>{{ scope.row.price?$TOOL.money(scope.row.price):'-' }}</span>
  43. <span class="dec">{{ scope.row.number }}份</span>
  44. </div>
  45. </template>
  46. </el-table-column>
  47. <el-table-column label="顾客支付" prop="types" width="120" align="right">
  48. <template #default="scope">
  49. {{ scope.row.pay_money?$TOOL.money(scope.row.pay_money):'-' }}
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="订单状态" prop="types" width="160" align="left">
  53. <template #default="scope">
  54. <div class="order-name" v-if="scope.row.status == 0">
  55. <span>待支付</span>
  56. <span class="dec" v-if="scope.row.end_time.min == 0 && scope.row.end_time.sec == 0">已超时,取消支付</span>
  57. <span class="dec" v-else>剩余{{ scope.row.end_time.min }}:{{ scope.row.end_time.sec }}</span>
  58. </div>
  59. <div class="order-name" v-if="scope.row.status == 1">
  60. <span>待使用</span>
  61. </div>
  62. <div class="order-name" v-if="scope.row.status == 2">
  63. <span>已完成</span>
  64. </div>
  65. <div class="order-name" v-if="scope.row.status == 3">
  66. <span>已退款</span>
  67. <span class="dec">款项已原路退回</span>
  68. </div>
  69. <div class="order-name" v-if="scope.row.status == 4">
  70. <span>退款中</span>
  71. <span class="dec">款项已原路退回</span>
  72. </div>
  73. <div class="order-name" v-if="scope.row.status == 5">
  74. <span>已关闭</span>
  75. <span class="dec">用户已取消</span>
  76. </div>
  77. </template>
  78. </el-table-column>
  79. <el-table-column label="下单时间" prop="create_at" width="160"></el-table-column>
  80. <el-table-column label="支付时间" prop="pay_at" width="160">
  81. <template #default="scope">
  82. {{ scope.row.pay_at?scope.row.pay_at:'未支付' }}
  83. </template>
  84. </el-table-column>
  85. <el-table-column label="操作" width="140" align="left" fixed="right">
  86. <template #default="scope">
  87. <el-button-group>
  88. <el-button size="small" text @click="table_view(scope.row)">详情</el-button>
  89. </el-button-group>
  90. </template>
  91. </el-table-column>
  92. </scTable>
  93. <orderDetail ref="orderDetail" @success="orderSuccess"></orderDetail>
  94. </template>
  95. <script>
  96. import orderDetail from "@/components/imFloat/order";
  97. export default {
  98. components:{
  99. orderDetail
  100. },
  101. data(){
  102. return {
  103. list: {
  104. apiObj: this.$API.merOrder.list
  105. },
  106. dataSelect:[],
  107. dataSelectFull:[],
  108. searchKey:{}
  109. }
  110. },
  111. methods: {
  112. table_view(data){
  113. this.$nextTick(() => {
  114. data.order = data.out_order_no
  115. this.$refs.orderDetail.open("edit").setData(data)
  116. })
  117. },
  118. table_del(data){
  119. },
  120. refresh(){
  121. this.$refs.table.refresh()
  122. },
  123. upData(data){
  124. this.$refs.table.upData(data)
  125. },
  126. handleSuccess(){
  127. this.$refs.table.refresh()
  128. },
  129. sortChange(event){
  130. if (event.order) {
  131. var data = {
  132. "field":event.prop,
  133. "order":event.order
  134. }
  135. this.$refs.table.upData(data)
  136. } else {
  137. this.$refs.table.reload(this.searchKey)
  138. }
  139. return ;
  140. },
  141. selectionChange(event){
  142. this.dataSelect = [];
  143. var arr = [];
  144. var arrCompany = [];
  145. event.forEach(function(val,index){
  146. arr[index] = val.id;
  147. arrCompany[index] = val;
  148. });
  149. this.dataSelectFull = arrCompany;
  150. this.dataSelect = arr;
  151. this.$emit("success",this.dataSelect);
  152. this.$emit("successFull",this.dataSelectFull);
  153. },
  154. }
  155. }
  156. </script>
  157. <style>
  158. .order-name span{display: block;}
  159. .order-name span.dec{color: #999;font-size: 12px;}
  160. .goods-img{display: flex;gap: 5px;}
  161. .goods-img .name span{display: block;}
  162. .goods-img .name span.dec{color: #999;font-size: 12px;}
  163. .goods-price,.price{display: flex;align-items: center;gap: 5px;font-size: 14px;}
  164. .goods-price .del{text-decoration: line-through;}
  165. .goods-price span{background-color: #fff !important;
  166. border: 1px solid #d3d9e0 !important;
  167. border-radius: 4px;
  168. box-sizing: border-box;
  169. color: #6c737a !important;
  170. display: inline-flex;
  171. flex: none;
  172. font-size: 12px;
  173. line-height: 18px !important;
  174. padding: 1px 6px !important;text-decoration: none;}
  175. </style>