index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <Theme>
  3. <view class="wrap">
  4. <!-- 导航栏 -->
  5. <Navbar fixed leftIconColor="var(--black)" title="店铺订单列表"> </Navbar>
  6. <view class="tab-section">
  7. <Tab :active="currentTab" :tabList="tabList" @confirm="onTabChange" />
  8. </view>
  9. <!-- 订单列表 -->
  10. <view class="content">
  11. <List
  12. ref="listRef"
  13. :defaultParams="defaultParams"
  14. @datas="getList"
  15. :isLoading="false"
  16. url="/seller/seller/order"
  17. >
  18. <template #item="{ item }">
  19. <orderItem
  20. :item="item"
  21. @click="toOrderDetail"
  22. @action="handleOrderAction"
  23. />
  24. </template>
  25. </List>
  26. </view>
  27. </view>
  28. </Theme>
  29. </template>
  30. <script setup>
  31. import { ref, reactive, onMounted } from "vue";
  32. import Navbar from "@/components/navbar";
  33. import Tab from "@/components/tabs";
  34. import List from "@/components/list";
  35. import orderItem from "./components/order_item";
  36. import { t } from "@/locale";
  37. import { Toast } from "@/utils";
  38. import { SELLER_SELLER_GETPAY } from "@/api";
  39. const listRef = ref(null);
  40. // Tab列表
  41. const tabList = ref(["全部", "待发货"]);
  42. // 当前Tab
  43. const currentTab = ref(0);
  44. // 默认参数
  45. const defaultParams = reactive({
  46. status: 0, // 0=>全部 300=>待发货
  47. });
  48. // Tab切换
  49. const onTabChange = (item, index) => {
  50. currentTab.value = index;
  51. const statusMap = [0, 300];
  52. defaultParams.status = statusMap[index];
  53. listRef.value && listRef.value.handleRefresh();
  54. };
  55. // 获取列表数据
  56. const getList = (data) => {
  57. console.log("订单列表数据:", data);
  58. };
  59. // 跳转到订单详情
  60. const toOrderDetail = (order) => {
  61. uni.navigateTo({
  62. url: `/pages/store/detail?id=${order.id}`,
  63. });
  64. };
  65. // 处理订单操作
  66. const handleOrderAction = async (order) => {
  67. console.log("订单操作:", order);
  68. try {
  69. const res = await SELLER_SELLER_GETPAY(order.id);
  70. uni.navigateTo({
  71. url: `/pages/shop/payment?oid=${res.data.sid}&type=sellerpay`,
  72. });
  73. } catch (error) {
  74. Toast(error.msg);
  75. }
  76. };
  77. onMounted(() => {
  78. listRef.value && listRef.value.handleRefresh();
  79. });
  80. </script>
  81. <style lang="less" scoped>
  82. @import url("@/style.less");
  83. .wrap {
  84. min-height: 100vh;
  85. background: var(--bg);
  86. display: flex;
  87. flex-direction: column;
  88. .nav_title {
  89. color: var(--black);
  90. }
  91. .tab-section {
  92. background: var(--light);
  93. border-bottom: 1rpx solid var(--border);
  94. padding: 0 30rpx;
  95. :deep(.u-tabs) {
  96. .u-tabs__wrapper__nav {
  97. padding: 0;
  98. }
  99. .u-tabs__wrapper__nav__item {
  100. padding: 24rpx 16rpx;
  101. font-size: 28rpx;
  102. font-weight: 500;
  103. }
  104. .u-tabs__wrapper__nav__item--active {
  105. font-weight: bold;
  106. }
  107. .u-tabs__wrapper__scroll-view {
  108. height: 80rpx;
  109. }
  110. }
  111. }
  112. .content {
  113. flex: 1;
  114. padding: 20rpx 30rpx;
  115. padding-bottom: calc(90rpx + constant(safe-area-inset-bottom));
  116. padding-bottom: calc(90rpx + env(safe-area-inset-bottom));
  117. // 列表样式
  118. :deep(.list-container) {
  119. display: flex;
  120. flex-direction: column;
  121. gap: 20rpx;
  122. }
  123. }
  124. }
  125. </style>