<template> <view class="order"> <view class="order-search"> <u-search v-model="queryParams.name" :animation="true" :showAction="false" bgColor="#f6f6f6" placeholder="请输入门店" @confirm="onSearch"></u-search> <view class="order-search-txt" @click.native="onSearch">搜索</view> </view> <view class="order-tab"> <view class="order-tab-item" @click="onTabChange(1)" :class="{'order-tab-active':queryParams.status==1}"> 待配送({{wCount.no_send}})</view> <view class="order-tab-item" @click="onTabChange(2)" :class="{'order-tab-active':queryParams.status==2}"> 已配送({{wCount.send}})</view> </view> <view class="order-list"> <scroll-view style="height: 100%;" :scroll-y="true" @scrolltolower="onScrollToLower"> <view class="order-list-wrap"> <block v-for="(item,indx) in wiriteList" :key="indx"> <view class="order-list-item" @click="onClickToDetail(item)" v-if="queryParams.status == 1"> <view class="order-list-item-order_num">订单编号:{{item.order_id}}</view> <view class="order-list-item-trans"> <view class="order-list-item-trans-right"> <view class="order-type">{{item.shipping_type == 1?'配送订单':'自提订单'}} </view> <view class="order-reciver">收货人:{{item.real_name}}</view> <view class="order-verification-time">商品信息:{{item.goods_list[0].store_name}}</view> </view> <view class="order-list-item-trans-left" @click.stop="onClickToWrite(item)"> <!-- <up-image width="76rpx" height="76rpx" src="../images/scan.png" /> --> <image src="../images/scan.png"></image> </view> </view> </view> <!-- 已经核销 --> <view class="order-list-item" @click="onClickToDetail(item)" v-if="queryParams.status == 2"> <view class="order-list-item-order_num">订单编号:{{item.order_id}}</view> <view class="order-list-item-trans"> <view class="order-list-item-trans-left" @click.stop="onClickToWrite(item)"> <u-image width="76rpx" height="76rpx" src="../images/write_done.jpg" /> </view> <view class="order-list-item-trans-right"> <view class="order-type">{{item.shipping_type == 1?'配送订单':'自提订单'}} </view> <view class="order-reciver">收货人:{{item.real_name}}</view> <view class="order-verification-time">商品信息:{{item.goods_list[0].store_name}}</view> </view> </view> </view> </block> </view> <view class="load-wrap"> <up-loadmore :status="status" /> </view> </scroll-view> <view class="batch-write" @click="onPatchWrite"> <image class="btn-img" src="../images/scan.png"></image> <view class="btn-txt">扫码核销</view> </view> </view> </view> </template> <script setup> import { onLoad, onShow, } from "@dcloudio/uni-app"; import { reactive, ref } from "vue"; import { writeListApi, writeOrderApi, writeCountApi } from "@/api/order.js"; // 搜索条件 const onSearch = () => { queryParams.value.page_no = 1; status.value = ''; wiriteList.value = []; getList(); } // tab切换 const onTabChange = (e) => { queryParams.value.status = e; queryParams.value.page_no = 1; status.value = ''; wiriteList.value = []; getList(); } // 详情页面 const onClickToDetail = (item) => { uni.navigateTo({ url: "/multipleShop/verificationOrder/detail", success(res) { res.eventChannel.emit('transferDataToDetail', item) } }) } // 切换到核销 const onClickToWrite = (item) => { uni.scanCode({ success(resp) { writeOrderApi({ verify_code: resp.result }).then(res => { if (res.code == 1) { uni.showToast({ title: '核销成功', icon: 'none', success() { uni.$u.sleep(1500).then(rrr => { status.value = ''; queryParams.value.page_no = 1; wiriteList.value = []; getList(); }) } }) } else { uni.showToast({ title: '核销失败', icon: 'none' }) } }) } }) } // 输入核销码核销 const onPatchWrite = () => { uni.navigateTo({ url: "/multipleShop/orderVerification/index" }) } // 滚动到底部 const onScrollToLower = (e) => { getList(); } // 核销数量统计 const wCount = ref({ no_send: 0, send: 0 }); const writeCount = () => { writeCountApi(queryParams.value).then(res => { let { no_send, send } = res.data; wCount.value.no_send = no_send; wCount.value.send = send; }) } // 加载状态 const status = ref(''); const wiriteList = ref([]); // 获取列表 const queryParams = ref({ status: 1, name: '', //查询字段 page_no: 1, page_size: 10 }) const getList = () => { if (status.value == 'loading') return; if (status.value == 'nomore') return; status.value = 'loading'; writeListApi(queryParams.value).then(res => { let len = res.data.list; status.value = queryParams.value.page_size > len.length ? 'nomore' : 'loadmore'; wiriteList.value = wiriteList.value.concat(len); if (status.value == 'loadmore') queryParams.value.page_no += 1; }); // 核销记录统计 writeCount(); } onShow(() => { //清空选择 刷新页面 onSearch(); getList(); // 隐藏home键返回主页 uni.hideHomeButton(); }) </script> <style lang="scss"> page { background: #FAFAFA; } .order { padding-bottom: 30rpx; .order-search { position: sticky; top: 0; z-index: 10; display: flex; height: 90rpx; background-color: #fff; padding: 0 24rpx; box-sizing: border-box; .order-search-txt { position: absolute; right: 28rpx; top: 50%; z-index: 10; transform: translateY(-50%); width: 110rpx; height: 52rpx; line-height: 52rpx; text-align: center; background: #FFFFFF; border-radius: 30rpx 30rpx 30rpx 30rpx; font-size: 28rpx; color: #20B128; } } .order-list { position: relative; padding-top: 24rpx; height: calc(100vh - 90rpx - 24rpx - 30rpx); .order-list-item { width: 710rpx; background: #FFFFFF; border-radius: 12rpx; margin: 0 auto 24rpx; padding: 0 30rpx; box-sizing: border-box; .order-list-item-order_num { height: 74rpx; line-height: 74rpx; font-weight: 600; font-size: 26rpx; color: #333333; border-bottom: 2rpx solid #F1F1F1; } .order-list-item-trans { display: flex; justify-content: space-between; padding: 16rpx 0 24rpx 0; .order-list-item-trans-left { display: flex; justify-content: center; align-items: center; margin-right: 38rpx; image { width: 76rpx; height: 76rpx; } } .order-list-item-trans-right { .order-type { margin-bottom: 10rpx; font-weight: 600; font-size: 32rpx; color: #444444; } .order-reciver { margin-bottom: 10rpx; font-size: 26rpx; color: #777777; } .order-verification-time { width: 500rpx; font-size: 26rpx; color: #777777; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } } } } .load-wrap { padding: 20rpx 0 400rpx 0; } .batch-write { display: flex; justify-content: center; align-items: center; position: absolute; bottom: 100rpx; left: 50%; transform: translateX(-50%); width: 670rpx; height: 90rpx; background: #20B128; border-radius: 20rpx; .btn-img { width: 60rpx; height: 60rpx; } .btn-txt { font-size: 32rpx; color: #FFFFFF; margin-left: 8rpx; } } } .order-tab { display: flex; align-items: center; justify-content: space-around; width: 100%; height: 102rpx; background-color: #fff; .order-tab-item { font-size: 32rpx; color: #444444; } .order-tab-active { position: relative; font-weight: bold; font-size: 32rpx; color: #20B128; &::after { content: ""; display: block; position: absolute; width: 52rpx; height: 6rpx; border-radius: 6rpx; background-color: #20B128; bottom: -20rpx; left: 50%; transform: translateX(-50%); } } } } </style>