index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. try {
  68. const res = await SELLER_SELLER_GETPAY(order.id);
  69. uni.navigateTo({
  70. url: `/pages/shop/payment?oid=${res.data.sid}&type=sellerpay`,
  71. });
  72. } catch (error) {
  73. Toast(error.msg);
  74. }
  75. };
  76. onMounted(() => {
  77. listRef.value && listRef.value.handleRefresh();
  78. });
  79. </script>
  80. <style lang="less" scoped>
  81. @import url("@/style.less");
  82. .wrap {
  83. min-height: 100vh;
  84. background: var(--bg);
  85. display: flex;
  86. flex-direction: column;
  87. .nav_title {
  88. color: var(--black);
  89. }
  90. .tab-section {
  91. background: var(--light);
  92. border-bottom: 1rpx solid var(--border);
  93. padding: 0 30rpx;
  94. :deep(.u-tabs) {
  95. .u-tabs__wrapper__nav {
  96. padding: 0;
  97. }
  98. .u-tabs__wrapper__nav__item {
  99. padding: 24rpx 16rpx;
  100. font-size: 28rpx;
  101. font-weight: 500;
  102. }
  103. .u-tabs__wrapper__nav__item--active {
  104. font-weight: bold;
  105. }
  106. .u-tabs__wrapper__scroll-view {
  107. height: 80rpx;
  108. }
  109. }
  110. }
  111. .content {
  112. flex: 1;
  113. padding: 20rpx 30rpx;
  114. padding-bottom: calc(90rpx + constant(safe-area-inset-bottom));
  115. padding-bottom: calc(90rpx + env(safe-area-inset-bottom));
  116. // 列表样式
  117. :deep(.list-container) {
  118. display: flex;
  119. flex-direction: column;
  120. gap: 20rpx;
  121. }
  122. }
  123. }
  124. </style>