table.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <template>
  2. <scTable ref="table" :apiObj="list.apiObj" :params="searchKey" @selectionChange="selectionChange" row-key="id" :row-class-name="tableRowClassName">
  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 v-if="scope.row.is_error == 1" style="color: #f00;">异常</span>
  64. <span v-else>已完成</span>
  65. </div>
  66. <div class="order-name" v-if="scope.row.status == 3">
  67. <span>已退款</span>
  68. <span class="dec">款项已原路退回</span>
  69. </div>
  70. <div class="order-name" v-if="scope.row.status == 4">
  71. <span>退款中</span>
  72. <span class="dec">款项已原路退回</span>
  73. </div>
  74. <div class="order-name" v-if="scope.row.status == 5">
  75. <span>已关闭</span>
  76. <span class="dec">用户已取消</span>
  77. </div>
  78. <div class="order-name" v-if="scope.row.status == 6">
  79. <span>部分退款</span>
  80. <span class="dec">已退款 <em style="color: #f00;">{{ scope.row.refund_num }}</em> 份</span>
  81. </div>
  82. </template>
  83. </el-table-column>
  84. <el-table-column label="发货状态" prop="types" width="160" align="left">
  85. <template #default="scope">
  86. <div v-if="scope.row.status == 2">
  87. <div class="order-name" v-if="scope.row.express_status == 1">
  88. <span>待发货</span>
  89. </div>
  90. <div class="order-name" v-if="scope.row.express_status == 2">
  91. <span>已发货</span>
  92. </div>
  93. <div class="order-name" v-if="scope.row.express_status == 3">
  94. <span>已签收</span>
  95. </div>
  96. </div>
  97. <div v-else>待订单完成</div>
  98. </template>
  99. </el-table-column>
  100. <el-table-column label="下单时间" prop="create_at" width="160"></el-table-column>
  101. <el-table-column label="支付时间" prop="pay_at" width="160">
  102. <template #default="scope">
  103. {{ scope.row.pay_at?scope.row.pay_at:'未支付' }}
  104. </template>
  105. </el-table-column>
  106. <el-table-column label="操作" width="140" align="left" fixed="right">
  107. <template #default="scope">
  108. <el-button-group>
  109. <el-button size="small" text @click="table_view(scope.row)">详情</el-button>
  110. <el-button type="danger" text size="small" @click="table_del(scope.row)">删除</el-button>
  111. </el-button-group>
  112. </template>
  113. </el-table-column>
  114. </scTable>
  115. <orderDetail ref="orderDetail" @success="orderSuccess"></orderDetail>
  116. </template>
  117. <script>
  118. import orderDetail from "@/components/imFloat/order";
  119. export default {
  120. components:{
  121. orderDetail
  122. },
  123. data(){
  124. return {
  125. list: {
  126. apiObj: this.$API.merOrder.list
  127. },
  128. dataSelect:[],
  129. dataSelectFull:[],
  130. searchKey:{}
  131. }
  132. },
  133. methods: {
  134. tableRowClassName(row, rowIndex) {
  135. if (row.row.is_error === 1) {
  136. return 'error-row';
  137. } else {
  138. return 'success-row';
  139. }
  140. },
  141. orderSuccess(){
  142. this.$refs.table.refresh()
  143. },
  144. table_view(data){
  145. this.$nextTick(() => {
  146. data.order = data.out_order_no
  147. this.$refs.orderDetail.open("edit").setData(data)
  148. })
  149. },
  150. table_del(data){
  151. },
  152. refresh(){
  153. this.$refs.table.refresh()
  154. },
  155. upData(data){
  156. this.$refs.table.upData(data)
  157. },
  158. handleSuccess(){
  159. this.$refs.table.refresh()
  160. },
  161. sortChange(event){
  162. if (event.order) {
  163. var data = {
  164. "field":event.prop,
  165. "order":event.order
  166. }
  167. this.$refs.table.upData(data)
  168. } else {
  169. this.$refs.table.reload(this.searchKey)
  170. }
  171. return ;
  172. },
  173. selectionChange(event){
  174. this.dataSelect = [];
  175. var arr = [];
  176. var arrCompany = [];
  177. event.forEach(function(val,index){
  178. arr[index] = val.id;
  179. arrCompany[index] = val;
  180. });
  181. this.dataSelectFull = arrCompany;
  182. this.dataSelect = arr;
  183. this.$emit("success",this.dataSelect);
  184. this.$emit("successFull",this.dataSelectFull);
  185. },
  186. }
  187. }
  188. </script>
  189. <style>
  190. .order-name span{display: block;}
  191. .order-name span.dec{color: #999;font-size: 12px;}
  192. .goods-img{display: flex;gap: 5px;}
  193. .goods-img .name span{display: block;}
  194. .goods-img .name span.dec{color: #999;font-size: 12px;}
  195. .goods-price,.price{display: flex;align-items: center;gap: 5px;font-size: 14px;}
  196. .goods-price .del{text-decoration: line-through;}
  197. .goods-price span{background-color: #fff !important;
  198. border: 1px solid #d3d9e0 !important;
  199. border-radius: 4px;
  200. box-sizing: border-box;
  201. color: #6c737a !important;
  202. display: inline-flex;
  203. flex: none;
  204. font-size: 12px;
  205. line-height: 18px !important;
  206. padding: 1px 6px !important;text-decoration: none;}
  207. </style>