index.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <template>
  2. <ele-page flex-table>
  3. <page-search @search="handleSearch" />
  4. <ele-card :body-style="{ padding: '10px' }">
  5. <!-- Tabs -->
  6. <el-tabs v-model="activeTab" @tab-click="handleTabClick">
  7. <el-tab-pane label="全部订单状态" name="all" />
  8. <el-tab-pane label="等待买家付款" name="1" />
  9. <el-tab-pane label="等待卖家发货" name="2" />
  10. <el-tab-pane label="等待买家确认收货" name="3" />
  11. <el-tab-pane label="交易成功" name="4" />
  12. <el-tab-pane label="退款成功" name="5" />
  13. <el-tab-pane label="退款中" name="6" />
  14. <el-tab-pane label="订单取消" name="7" />
  15. <el-tab-pane label="预警订单/催发货" name="warning" />
  16. </el-tabs>
  17. <!-- Custom Table Header -->
  18. <order-table-header />
  19. <!-- Order List -->
  20. <div class="order-list" v-loading="loading">
  21. <order-item v-for="order in list" :key="order.orderId" :order="order" @view-detail="openDetail"
  22. @push-sms="openSms" @refund="openRefund" />
  23. </div>
  24. <!-- Pagination -->
  25. <div class="pagination-wrapper">
  26. <el-pagination v-model:current-page="pageParams.page" v-model:page-size="pageParams.limit"
  27. :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  28. @current-change="handlePageChange" />
  29. </div>
  30. </ele-card>
  31. <!-- Dialogs -->
  32. <order-detail ref="detailRef" />
  33. <push-sms-dialog ref="smsRef" />
  34. <refund-dialog ref="refundRef" />
  35. <add-package-dialog ref="packageRef" />
  36. </ele-page>
  37. </template>
  38. <script setup>
  39. import { ref, reactive } from 'vue';
  40. import PageSearch from './components/page-search.vue';
  41. import OrderDetail from './components/order-detail.vue';
  42. import PushSmsDialog from './components/push-sms-dialog.vue';
  43. import RefundDialog from './components/refund-dialog.vue';
  44. import AddPackageDialog from './components/add-package-dialog.vue';
  45. import OrderTableHeader from './components/order-table-header.vue';
  46. import OrderItem from './components/order-item.vue';
  47. const activeTab = ref('all');
  48. const loading = ref(false);
  49. const total = ref(10);
  50. const pageParams = reactive({
  51. page: 1,
  52. limit: 10
  53. });
  54. const list = ref([
  55. {
  56. orderId: '4066879393210936038',
  57. createTime: '2024-10-04 12:01:09',
  58. payChannel: '微信支付',
  59. source: '微信',
  60. flag: true,
  61. isUrge: false,
  62. checked: false,
  63. buyer: {
  64. avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
  65. name: '用户44541',
  66. phone: '1894984dsaddq'
  67. },
  68. payment: {
  69. total: 2.9,
  70. shipping: 0
  71. },
  72. logistics: {
  73. company: '韵达快递',
  74. no: '46382090456249',
  75. status: '已发货'
  76. },
  77. status: '退款成功',
  78. buyerNote: '',
  79. products: [
  80. {
  81. image: 'https://img14.360buyimg.com/n0/jfs/t1/157997/3/36676/122176/65e975a0F98822998/5023348143493720.jpg',
  82. title: '毛泽东思想和中国特色社会主义理论体系概论(2023年版)',
  83. isbn: '9787040599012',
  84. condition: '中等',
  85. price: 2.9,
  86. qty: 1,
  87. discount: 1,
  88. recycleStatus: '正在回收',
  89. refundStatus: '退款成功'
  90. }
  91. ]
  92. },
  93. {
  94. orderId: '4066879393210936039',
  95. createTime: '2024-10-04 12:06:09',
  96. payChannel: '微信支付',
  97. source: '微信',
  98. flag: false,
  99. isUrge: true,
  100. checked: false,
  101. buyer: {
  102. avatar: 'https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png',
  103. name: '用户44541',
  104. phone: '1894984dsaddq'
  105. },
  106. payment: {
  107. total: 5.8,
  108. shipping: 0
  109. },
  110. logistics: {
  111. company: '韵达快递',
  112. no: '46382090456248',
  113. status: '已发货'
  114. },
  115. status: '等待买家确认收货',
  116. buyerNote: '您好,请确保书籍正版,且无破损、不缺页。请不要随书夹带任何票据,有问题留言不要打电话。请尽快发货,谢谢啦~',
  117. products: [
  118. {
  119. image: 'https://img14.360buyimg.com/n0/jfs/t1/157997/3/36676/122176/65e975a0F98822998/5023348143493720.jpg',
  120. title: '毛泽东思想和中国特色社会主义理论体系概论(2023年版)',
  121. isbn: '9787040599012',
  122. condition: '中等',
  123. price: 2.9,
  124. qty: 1,
  125. discount: 1,
  126. recycleStatus: '正在回收',
  127. refundStatus: ''
  128. },
  129. {
  130. image: 'https://img14.360buyimg.com/n0/jfs/t1/157997/3/36676/122176/65e975a0F98822998/5023348143493720.jpg',
  131. title: '毛泽东思想和中国特色社会主义理论体系概论(2023年版)',
  132. isbn: '9787040599012',
  133. condition: '中等',
  134. price: 2.9,
  135. qty: 2,
  136. discount: 1,
  137. recycleStatus: '正在回收',
  138. refundStatus: '退款取消'
  139. }
  140. ]
  141. }
  142. ]);
  143. const detailRef = ref(null);
  144. const smsRef = ref(null);
  145. const refundRef = ref(null);
  146. const packageRef = ref(null);
  147. const handleSearch = (params) => {
  148. console.log('Search:', params);
  149. // Mock reload
  150. loading.value = true;
  151. setTimeout(() => { loading.value = false; }, 500);
  152. };
  153. const handleTabClick = (tab) => {
  154. console.log('Tab:', tab.props.name);
  155. handleSearch({});
  156. };
  157. const handleSizeChange = (val) => {
  158. pageParams.limit = val;
  159. handleSearch({});
  160. };
  161. const handlePageChange = (val) => {
  162. pageParams.page = val;
  163. handleSearch({});
  164. };
  165. const openDetail = (row) => {
  166. detailRef.value?.handleOpen(row);
  167. };
  168. const openSms = (row) => {
  169. smsRef.value?.handleOpen(row);
  170. };
  171. const openRefund = (row) => {
  172. refundRef.value?.handleOpen(row);
  173. };
  174. </script>
  175. <style lang="scss" scoped>
  176. .pagination-wrapper {
  177. margin-top: 15px;
  178. display: flex;
  179. justify-content: flex-end;
  180. }
  181. </style>