|
|
<!-- 售后列表 --><template> <s-layout title="售后列表"> <!-- tab --> <su-sticky bgColor="#fff"> <su-tabs :list="tabMaps" :scrollable="false" @change="onTabsChange" :current="state.currentTab" /> </su-sticky> <s-empty v-if="state.pagination.total === 0" icon="/static/data-empty.png" text="暂无数据" /> <!-- 列表 --> <view v-if="state.pagination.total > 0"> <view class="list-box ss-m-y-20" v-for="order in state.pagination.list" :key="order.id" @tap="sheep.$router.go('/pages/order/aftersale/detail', { id: order.id })" > <view class="order-head ss-flex ss-col-center ss-row-between"> <text class="no">服务单号:{{ order.no }}</text> <text class="state">{{ formatAfterSaleStatus(order) }}</text> </view> <s-goods-item :img="order.picUrl" :title="order.spuName" :skuText="order.properties.map((property) => property.valueName).join(' ')" :price="order.refundPrice" /> <view class="apply-box ss-flex ss-col-center ss-row-between border-bottom ss-p-x-20"> <view class="ss-flex ss-col-center"> <view class="title ss-m-r-20">{{ order.way === 10 ? '仅退款' : '退款退货' }}</view> <view class="value">{{ formatAfterSaleStatusDescription(order) }}</view> </view> <text class="_icon-forward"></text> </view> <view class="tool-btn-box ss-flex ss-col-center ss-row-right ss-p-r-20"> <view> <button class="ss-reset-button tool-btn" @tap.stop="onApply(order.id)" v-if="order?.buttons.includes('cancel')" > 取消申请 </button> </view> </view> </view> </view> <uni-load-more v-if="state.pagination.total > 0" :status="state.loadStatus" :content-text="{ contentdown: '上拉加载更多', }" @tap="loadMore" /> </s-layout></template>
<script setup> import sheep from '@/sheep'; import { onLoad, onReachBottom } from '@dcloudio/uni-app'; import { reactive } from 'vue'; import _ from 'lodash-es'; import { formatAfterSaleStatus, formatAfterSaleStatusDescription, handleAfterSaleButtons, } from '@/sheep/hooks/useGoods'; import AfterSaleApi from '@/sheep/api/trade/afterSale'; import { resetPagination } from '@/sheep/util';
const state = reactive({ currentTab: 0, showApply: false, pagination: { list: [], total: 0, pageNo: 1, pageSize: 10, }, loadStatus: '', });
// TODO 芋艿:优化点,增加筛选
const tabMaps = [ { name: '全部', value: 'all', }, // {
// name: '申请中',
// value: 'nooper',
// },
// {
// name: '处理中',
// value: 'ing',
// },
// {
// name: '已完成',
// value: 'completed',
// },
// {
// name: '已拒绝',
// value: 'refuse',
// },
];
// 切换选项卡
function onTabsChange(e) { resetPagination(state.pagination); state.currentTab = e.index; getOrderList(); }
// 获取售后列表
async function getOrderList() { state.loadStatus = 'loading'; let { data, code } = await AfterSaleApi.getAfterSalePage({ // type: tabMaps[state.currentTab].value,
pageNo: state.pagination.pageNo, pageSize: state.pagination.pageSize, }); if (code !== 0) { return; } data.list.forEach((order) => handleAfterSaleButtons(order)); state.pagination.list = _.concat(state.pagination.list, data.list); state.pagination.total = data.total; state.loadStatus = state.pagination.list.length < state.pagination.total ? 'more' : 'noMore'; }
function onApply(orderId) { uni.showModal({ title: '提示', content: '确定要取消此申请吗?', success: async function (res) { if (!res.confirm) { return; } const { code } = await AfterSaleApi.cancelAfterSale(orderId); if (code === 0) { resetPagination(state.pagination); await getOrderList(); } }, }); }
onLoad(async (options) => { if (options.type) { state.currentTab = options.type; } await getOrderList(); });
// 加载更多
function loadMore() { if (state.loadStatus === 'noMore') { return; } state.pagination.pageNo++; getOrderList(); }
// 上拉加载更多
onReachBottom(() => { loadMore(); });</script>
<style lang="scss" scoped> .list-box { background-color: #fff;
.order-head { padding: 0 25rpx; height: 77rpx; }
.apply-box { height: 82rpx;
.title { font-size: 24rpx; }
.value { font-size: 22rpx; color: $dark-6; } }
.tool-btn-box { height: 100rpx;
.tool-btn { width: 160rpx; height: 60rpx; background: #f6f6f6; border-radius: 30rpx; font-size: 26rpx; font-weight: 400; } } }</style>
|