绿满眶商城微信小程序-uniapp
peng
2025-06-25 fb187e6acc0c9e908da313bf267e4681e9e78ee6
update 商户端查看订单
2个文件已修改
2个文件已添加
682 ■■■■■ 已修改文件
pages.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/supplier/suppler-order/suppler-order.vue 666 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/tabbar/user/utils/tool.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/mine/order.png 补丁 | 查看 | 原始文档 | blame | 历史
pages.json
@@ -1447,7 +1447,18 @@
                    "navigationBarTitleText": "厨神"
                }
            }]
        },
        {
            "root": "pages/supplier",
            "pages": [{
                "path" : "suppler-order/suppler-order",
                "style" :
                {
                    "navigationBarTitleText" : ""
                }
            }]
        }
        // ,
        // {
        //     "root": "pages/commodity-square",
pages/supplier/suppler-order/suppler-order.vue
New file
@@ -0,0 +1,666 @@
<template>
  <view class="content">
    <view class="navbar">
      <view
        v-for="(item, index) in navList"
        :key="index"
        class="nav-item"
        :class="{ current: tabCurrentIndex === index }"
        @click="tabClick(index)"
        >{{ item.text }}</view
      >
    </view>
    <swiper
      :current="tabCurrentIndex"
      class="swiper-box"
      duration="300"
      @change="changeTab"
    >
      <swiper-item
        class="tab-content"
        v-for="(tabItem, tabIndex) in navList"
        :key="tabIndex"
      >
        <scroll-view
          class="list-scroll-content"
          scroll-y
          @scrolltolower="loadData(tabIndex)"
        >
          <!-- 空白页 -->
          <u-empty
            text="暂无订单"
            mode="list"
            v-if="tabItem.loaded === true && tabItem.orderList.length === 0"
          ></u-empty>
          <!-- 订单列表 -->
          <view
            class="seller-view"
            :key="oderIndex"
            v-for="(order, oderIndex) in tabItem.orderList"
          >
            <!-- 店铺名称 -->
            <view class="seller-info u-flex u-row-between">
              <view class="seller-name wes" >
                <view class="name wes">{{ order.storeName }}</view>
              </view>
              <view class="order-sn">{{
                order.orderStatus | orderStatusList
              }}</view>
            </view>
            <view>
              <view>
                <view
                  class="goods-item-view"
                >
                  <view
                    class="goods-img"
                    v-for="(goods, goodsIndex) in order.orderItems"
                    :key="goodsIndex"
                  >
                    <u-image
                      border-radius="6"
                      width="100%"
                      height="100%"
                      :src="goods.image"
                    ></u-image>
                  </view>
                  <view class="goods-info">
                    <view
                      v-if="order.orderItems.length <= 1"
                      class="goods-title u-line-2"
                      >{{ order.groupName }}</view
                    >
                    <view
                      v-if="order.orderItems.length <= 1"
                      class="goods-price"
                    >
                      ¥{{ order.flowPrice | unitPrice }}
                    </view>
                  </view>
                  <view v-if="order.orderItems.length <= 1" class="goods-num">
                    <view>x{{ order.groupNum }}</view>
                  </view>
                </view>
              </view>
              <view class="btn-view u-flex u-row-between">
                <view class="description">
                  <!-- 等待付款 -->
                  <div v-if="order.payStatus === 'PAID'">已付金额:</div>
                  <div v-else>应付金额:</div>
                  <div class="price">¥{{ order.flowPrice | unitPrice }}</div>
                </view>
                <view class="goods-btn flex flex-a-c">
                  <!-- 全部 -->
                  <view
                    ripple
                    class="rebuy-btn"
                    shape="circle"
                    size="mini"
                    v-if="order.allowOperationVO.pay"
                    @click="selectPhone(order.sn)"
                    >查看联系方式</view
                  >
                  <view
                    ripple
                    class="rebuy-btn"
                    shape="circle"
                    size="mini"
                    v-if="order.orderStatus==='UNDELIVERED'"
                    >发货</view
                  >
                  <!-- 等待收货 -->
                  <view
                    ripple
                    shape="circle"
                    class="rebuy-btn"
                    size="mini"
                    v-if="order.allowOperationVO.showLogistics"
                    @click="navigateToLogistics(order)"
                  >
                    查看物流
                  </view>
                </view>
              </view>
            </view>
          </view>
          <uni-load-more :status="tabItem.loadStatus"></uni-load-more>
        </scroll-view>
      </swiper-item>
    </swiper>
    </uni-popup>
  </view>
</template>
<script>
import '@/components/uview-components/uview-ui';
import { getOrderXcxList, cancelOrder, confirmReceipt ,getOrderDetail} from "@/api/order.js";
import { getClearReason } from "@/api/after-sale.js";
import LiLiWXPay from "@/js_sdk/lili-pay/wx-pay.js";
export default {
  data() {
    return {
      lightColor: this.$lightColor,
      tabCurrentIndex: 0, //导航栏索引
      userInfo:{
          name:'',
          phone:'',
          address:''
      },
      navList: [
        //导航栏list
        // {
        //   state: 0,
        //   text: "全部",
        //   loadStatus: "more",
        //   orderList: [],
        //   pageNumber: 1,
        // },
        {
          state: 1,
          text: "待付款",
          loadStatus: "more",
          orderList: [],
          pageNumber: 1,
        },
        {
          state: 2,
          text: "待发货",
          loadStatus: "more",
          orderList: [],
          pageNumber: 1,
        },
        {
          state: 3,
          text: "已发货",
          loadStatus: "more",
          orderList: [],
          pageNumber: 1,
        },
        // {
        //   state: 4,
        //   text: "已完成",
        //   loadStatus: "more",
        //   orderList: [],
        //   pageNumber: 1,
        // },
        // {
        //   state: 5,
        //   text: "已取消",
        //   loadStatus: "more",
        //   orderList: [],
        //   pageNumber: 1,
        // },
      ],
      status: "", //接收导航栏状态
      params: {
        pageNumber: 1,
        pageSize: 10,
        tag: "WAIT_PAY",
      },
      orderStatus: [
        //订单状态
        // {
        //   orderStatus: "ALL", //全部
        // },
        {
          orderStatus: "WAIT_PAY", //代付款
        },
        {
          orderStatus: "WAIT_SHIP",
        },
        {
          orderStatus: "WAIT_ROG", //待收货
        },
        // {
        //   orderStatus: "COMPLETE", //已完成
        // },
        // {
        //   orderStatus: "CANCELLED", //已取消
        // },
        // {
        //   orderStatus: "STAY_PICKED_UP", //待自提
        // },
      ],
      cancelShow: false, //是否显示取消
      orderSn: "", //ordersn
      reason: "", //取消原因
      cancelList: "", //取消列表
      rogShow: false, //显示是否收货
    };
  },
  /**
   * 跳转到个人中心
   */
  onBackPress(e) {
    if (e.from == "backbutton") {
      uni.switchTab({
        url: "/pages/tabbar/user/my",
      });
      return true; //阻止默认返回行为
    }
  },
  onPullDownRefresh() {
    if (this.tabCurrentIndex) {
      this.initData(this.tabCurrentIndex);
    } else {
      this.initData(0);
    }
    // this.loadData(this.status);
  },
  onShow() {
    if(this.$options.filters.tipsToLogin()){
      if (!this.tabCurrentIndex) {
        this.initData(0);
      }
    }
    // this.loadData(this.status);
  },
  onLoad(options) {
    /**
     * 修复app端点击除全部订单外的按钮进入时不加载数据的问题
     * 替换onLoad下代码即可
     */
    let status = Number(options.status);
    this.status = status;
    this.tabCurrentIndex = status;
    // if (status == 0) {
    //   this.loadData(status);
    // }
  },
  watch: {
    /**监听更改请求数据 */
    tabCurrentIndex(val) {
      this.params.tag = this.orderStatus[val].orderStatus;
      //切换标签页将所有的页数都重置为1
      this.navList.forEach((res) => {
        res.pageNumber = 1;
        res.loadStatus = "more";
        res.orderList = [];
      });
      this.loadData(val);
    },
  },
  methods: {
     async selectPhone(sn){
     const orderInfo =    await getOrderDetail(sn)
     console.log('----------------->',orderInfo)
     this.userInfo = {};
     this.userInfo.name = orderInfo.data.result.order.consigneeName
     this.userInfo.phone =orderInfo.data.result.order.consigneeMobile
     this.userInfo.address = orderInfo.data.result.order.consigneeAddressPath
    uni.showModal({
        title:"用户联系电话",
        content:orderInfo.data.result.order.consigneeMobile
    })
      },
    /**
     * 初始化数据
     */
    initData(index) {
      this.navList[index].pageNumber = 1;
      this.navList[index].loadStatus = "more";
      this.navList[index].orderList = [];
      this.loadData(index);
    },
    /**
     * 获取订单列表
     */
    loadData(index) {
      this.params.pageNumber = this.navList[index].pageNumber;
      // this.params.tag = this.orderStatus[index].orderStatus;
      getOrderXcxList(this.params).then((res) => {
        uni.stopPullDownRefresh();
        if (!res.data.success) {
          this.navList[index].loadStatus = "noMore";
          return false;
        }
        let orderList = res.data.result.records;
        if (orderList.length == 0) {
          this.navList[index].loadStatus = "noMore";
        } else if (orderList.length < 10) {
          this.navList[index].loadStatus = "noMore";
        }
        if (orderList.length > 0) {
          this.navList[index].orderList =
            this.navList[index].orderList.concat(orderList);
          this.navList[index].pageNumber += 1;
        }
      });
    },
    //swiper 切换监听
    changeTab(e) {
      this.tabCurrentIndex = e.target.current;
    },
    //顶部tab点击
    tabClick(index) {
      this.tabCurrentIndex = index;
    },
    //订单状态文字和颜色
    orderStateExp(state) {
      let stateTip = "",
        stateTipColor = this.$lightColor;
      switch (+state) {
        case 1:
          stateTip = "待付款";
          break;
        case 2:
          stateTip = "待发货";
          break;
        case 9:
          stateTip = "订单已关闭";
          stateTipColor = "#909399";
          break;
        //更多自定义
      }
      return {
        stateTip,
        stateTipColor,
      };
    },
    /**
     * 选择取消原因
     */
    reasonChange(reason) {
      this.reason = reason;
    },
    /**
     * 提交取消订单(未付款)
     */
    submitCancel() {
      cancelOrder(this.orderSn, { reason: this.reason }).then((res) => {
        if (res.data.success) {
          uni.showToast({
            title: "订单已取消",
            duration: 2000,
            icon: "none",
          });
          this.initData(this.tabCurrentIndex);
          this.cancelShow = false;
        } else {
          uni.showToast({
            title: res.data.message,
            duration: 2000,
            icon: "none",
          });
          this.cancelShow = false;
        }
      });
    },
    /**
     * 确认收货显示
     */
    onRog(sn) {
      this.orderSn = sn;
      this.rogShow = true;
    },
    /**
     * 点击确认收货
     */
    confirmRog() {
      confirmReceipt(this.orderSn).then((res) => {
        if (res.data.code == 200) {
          uni.showToast({
            title: "已确认收货",
            duration: 2000,
            icon: "none",
          });
          this.initData(this.tabCurrentIndex);
          this.rogShow = false;
        }
      });
    },
    /**
     * 评价商品
     */
    onComment(sn) {
      uni.navigateTo({
        url: "./evaluate/myEvaluate",
      });
    },
    /**
     * 重新购买
     */
    reBuy(order) {
      console.log(order);
      return;
      uni.navigateTo({
        url:
          "/pages/product/goods?id=" + order.id + "&goodsId=" + order.goodsId,
      });
    },
    /**
     * 查看物流
     */
    navigateToLogistics(order) {
      uni.navigateTo({
        url:
          "/pages/mine/msgTips/packageMsg/logisticsDetail?order_sn=" + order.sn,
      });
    },
  },
};
</script>
<style lang="scss" scoped>
page,
.content {
  background: $page-color-base;
  height: 100%;
}
.swiper-box {
  height: calc(100vh - 40px);
  // #ifdef H5
  height: calc(100vh - 40px - 44px);
  // #endif
}
.list-scroll-content {
  height: 100%;
}
.navbar {
  display: flex;
  height: 40px;
  padding: 0 5px;
  background: #fff;
  box-shadow: 0 1px 5px rgba(0, 0, 0, 0.06);
  position: relative;
  z-index: 10;
  .nav-item {
    flex: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
    font-size: 26rpx;
    color: $font-color-light;
    position: relative;
    &.current {
      color: $main-color;
      &:after {
        content: "";
        position: absolute;
        left: 50%;
        bottom: 0;
        transform: translateX(-50%);
        width: 44px;
        height: 0;
        border-bottom: 2px solid $main-color;
      }
    }
  }
}
.uni-swiper-item {
  height: auto;
}
.seller-view {
  border-radius: 20rpx;
  background-color: #fff;
  margin: 20rpx 0rpx;
  .seller-info {
    height: 70rpx;
    padding: 0 20rpx;
    .seller-name {
      flex:10;
      font-size: 28rpx;
      font-weight: 600;
      display: flex;
      flex-direction: row;
      .name {
        margin-left: 15rpx;
        margin-top: -2rpx;
      }
    }
    .order-sn {
      flex:2;
      width:120rpx;
      text-align: center;
      color: $aider-light-color;
      font-size: 26rpx;
    }
  }
  .goods-item-view {
    display: flex;
    flex-wrap: wrap;
    flex-direction: row;
    padding: 10rpx 20rpx;
    .goods-img {
      width: 131rpx;
      height: 131rpx;
      margin-right: 10rpx;
      margin-bottom: 10rpx;
    }
    .goods-info {
      padding-left: 30rpx;
      flex: 1;
      .goods-title {
        margin-bottom: 10rpx;
        color: #333333;
      }
      .goods-specs {
        font-size: 24rpx;
        margin-bottom: 10rpx;
        color: #cccccc;
      }
      .goods-price {
        font-size: 28rpx;
        margin-bottom: 10rpx;
        color: $aider-light-color;
      }
    }
    .goods-num {
      width: 60rpx;
      color: $main-color;
    }
  }
  .btn-view {
    padding: 25rpx 30rpx;
    font-size: 26rpx;
    .description {
      display: flex;
      color: #909399;
      size: 24rpx;
      flex: 1;
      .price {
        color: $main-color;
      }
    }
  }
}
.cancel-popup {
  .header {
    display: flex;
    flex-direction: row;
    justify-content: center;
    margin: 15rpx 0rpx;
  }
  .body {
    padding: 30rpx;
    .title {
      font-weight: 600;
    }
    .value {
      display: flex;
      flex-direction: column;
      margin: 20rpx 0;
      .radio-view {
        margin: 20rpx 0rpx;
      }
    }
  }
  .footer {
    text-align: center;
  }
}
.goods-btn{
  display: flex;
}
.cancel-btn,.pay-btn,.rebuy-btn{
  text-align: center;
  margin-left: 15rpx;
  font-size: 24rpx;
  padding: 14rpx 20rpx;
  border-radius: 100px;
}
.cancel-btn {
  color: #333639 !important;
  background: rgba(46, 51, 56, .05) !important;
}
.pay-btn {
  background-color: $light-color !important;
  color: #ffffff !important;
}
.rebuy-btn {
  color: $light-color !important;
  border-color: $light-color !important;
  background-color: #ffffff !important;
}
</style>
pages/tabbar/user/utils/tool.vue
@@ -127,7 +127,10 @@
                        <image src="/static/mine/setting.png" mode=""></image>
                        <view>商品管理</view>
                    </view>
                    <view class="interact-item" @click="navigateTo('/pages/goods-manager/goodsList/goodsList')">
                        <image src="/static/mine/order.png" mode=""></image>
                        <view>商户订单管理</view>
                    </view>
                </view>
            </div>
static/mine/order.png