| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287 |
- <template>
- <mescroll-uni ref="mescrollRef" top="80rpx" @init="mescrollInit" @down="downCallback" @up="upCallback"
- :down="downOption" :up="upOption">
- <view class="sale-list" v-if="type == 'normal'">
- <view v-for="(items, index) in lists" :key="index" class="sale-item bg-white m-t-20">
- <view class="sale-header">
- <shop-title :shop="{name: items.shop_name, id: items.sid}"></shop-title>
- </view>
- <view v-for="(item, index2) in items.order_goods" :key="index2" class="goods-item">
- <view class="sale-content flex row">
- <view class="goods-img">
- <u-image width="160rpx" height="160rpx" border-radius="6rpx" :src="item.image" />
- </view>
- <view class="goods-desc flex-1 m-l-24">
- <view class="goods-name line-2">{{item.goods_name}}</view>
- <view class="m-t-10 line-1 muted">{{item.spec_value_str}}</view>
- <view class="flex row-between m-t-20">
- <price-format class="sm" :first-size="30" :second-size="30" :subscript-size="26"
- :price="item.goods_price" />
- <view>x{{item.goods_num}}</view>
- </view>
- </view>
- </view>
- <view class="sale-footer flex row-right">
- <view class="btn row-center primary br60"
- :class="{'gray-btn': items.after_sale.able_apply == 0}" @tap="applyRefund(items,item)">
- 申请售后
- </view>
- </view>
- </view>
- </view>
- </view>
- <view class="sale-list" v-else-if="type == 'apply'">
- <view v-for="(items, index) in lists" :key="index" class="sale-item bg-white m-t-20">
- <view class="sale-header flex row-between">
- <shop-title :shop="{name: items.shop_name, id: items.sid}"></shop-title>
- <view class="primary flex-none m-l-20">{{items.after_sale.type_text}}</view>
- </view>
- <view v-for="(item, index2) in items.order_goods" :key="index2">
- <router-link :to="{path: '/bundle/pages/after_sales_detail/after_sales_detail',
- query: { id: items.after_sale.after_sale_id,}}">
- <view class="sale-content">
- <view class="flex">
- <view class="goods-img">
- <u-image width="160rpx" height="160rpx" border-radius="6rpx" :src="item.image" />
- </view>
- <view class="goods-desc m-l-24">
- <view class="goods-name line-2">{{item.goods_name}}</view>
- <view class="m-t-10 xs line-1 muted">{{item.spec_value_str}}</view>
- <view class="flex row-between m-t-20">
- <price-format class="sm" :first-size="30" :second-size="30" :subscript-size="26"
- :price="item.goods_price" />
- <view>x{{item.goods_num}}</view>
- </view>
- </view>
- </view>
- <view class="sale-status m-t-20 flex">
- <view class="bold">申请状态</view>
- <view class="m-l-20">{{items.after_sale.desc}}</view>
- </view>
- </view>
- </router-link>
- <view class="sale-footer flex row-right">
- <view class="row-center flex br60 m-r-20 btn black-btn"
- @tap="onShowDialog(items.after_sale.after_sale_id)">
- 撤销申请
- </view>
- <router-link :to="{path: '/bundle/pages/apply_refund/apply_refund',
- query: {
- after_sale_id: items.after_sale.after_sale_id,
- order_id: items.order_id,
- item_id: item.item_id}}" v-if="items.after_sale.status == 4 || items.after_sale.status == 1">
- <view class="row-center flex br60 m-r-20 btn primary">重新申请</view>
- </router-link>
- <router-link
- :to="{path: '/bundle/pages/input_express_info/input_express_info', query: { id: items.after_sale.after_sale_id}}"
- v-if="items.after_sale.status == 2">
- <view class="row-center flex br60 m-r-20 btn black-btn">
- 填写快递单号
- </view>
- </router-link>
- </view>
- </view>
- </view>
- </view>
- <view class="sale-list" v-else>
- <view v-for="(items, index) in lists" :key="index" class="sale-item bg-white m-t-20">
- <view class="sale-header flex row-between">
- <shop-title :shop="{name: items.shop_name, id: items.sid}"></shop-title>
- <view class="primary flex-none m-l-20">{{items.after_sale.type_text}}</view>
- </view>
- <view v-for="(item, index2) in items.order_goods" :key="index2">
- <router-link :to="{path: '/bundle/pages/after_sales_detail/after_sales_detail',
- query: { id: items.after_sale.after_sale_id,}}">
- <view class="sale-content">
- <view class="flex">
- <view class="goods-img">
- <u-image width="160rpx" height="160rpx" border-radius="6rpx" :src="item.image" />
- </view>
- <view class="goods-desc m-l-24">
- <view class="goods-name line-2">{{item.goods_name}}</view>
- <view class="m-t-10 line-1 muted">{{item.spec_value_str}}</view>
- <view class="flex row-between m-t-20">
- <price-format class="sm" :first-size="30" :second-size="30" :subscript-size="26"
- :price="item.goods_price" />
- <view>x{{item.goods_num}}</view>
- </view>
- </view>
- </view>
- <view class="sale-status m-t-20 flex">
- <view class="bold">申请状态</view>
- <view class="m-l-20">{{items.after_sale.desc}}</view>
- </view>
- </view>
- </router-link>
- </view>
- </view>
- </view>
- <u-modal v-model="showDialog" confirm-text="确定" :showCancelButton="true" :confirm-color="colorConfig.primary"
- @confirm="cancelApplyFun">
- <view class="flex-col col-center tips-dialog" style="padding: 30rpx 0;">
- <image class="icon-lg" src="/static/images/icon_warning.png"></image>
- <view class="m-t-30">是否要撤销申请?</view>
- </view>
- </u-modal>
- </mescroll-uni>
- </template>
- <script>
- import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
- import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
- import {
- afterSaleType
- } from "@/utils/type";
- import {
- getAfterSaleList,
- cancelApply,
- afterSaleDetail,
- applyAgain
- } from "@/api/user";
- export default {
- mixins: [MescrollMixin, MescrollMoreItemMixin],
- props: {
- type: {
- type: String,
- default: afterSaleType.NORMAL
- }
- },
- data() {
- return {
- lists: [],
- downOption: {
- auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
- },
- upOption: {
- auto: false, // 不自动加载
- noMoreSize: 4, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
- empty: {
- icon: '/static/images/order_null.png',
- tip: '暂无售后~', // 提示
- fixed: true
- }
- },
- showDialog: false
- };
- },
- created() {
- uni.$on("refreshsale", () => {
- this.downCallback()
- })
- },
- destroyed() {
- uni.$off("refreshsale")
- },
- methods: {
- applyRefund(items, item) {
- const {
- after_sale: {
- able_apply
- },
- order_id
- } = items
- const {
- item_id
- } = item
- if (able_apply != 1) {
- return
- }
- this.$Router.push({
- path: '/bundle/pages/apply_refund/apply_refund',
- query: {
- order_id,
- item_id
- }
- })
- },
- cancelApplyFun() {
- cancelApply({
- id: this.id
- }).then(res => {
- if (res.code == 1) {
- this.$toast({
- title: res.msg
- });
- uni.$emit("refreshsale")
- }
- });
- },
- async upCallback(page) {
- const {
- type,
- } = this;
- const params = {
- page_size: page.size,
- page_no: page.num,
- type
- }
- const {
- data,
- code
- } = await getAfterSaleList(params)
- if (code == 1) {
- const curPageData = data.list;
- const curPageLen = curPageData.length;
- const hasNext = !!data.more;
- if (page.num == 1) this.lists = [];
- this.lists = this.lists.concat(curPageData);
- this.mescroll.endSuccess(curPageLen, hasNext);
- }
- },
- onShowDialog(id) {
- this.id = id;
- this.showDialog = true
- }
- }
- };
- </script>
- <style lang="scss">
- .sale-list {
- overflow: hidden;
- .sale-item {
- .sale-header {
- padding: 0 20rpx;
- }
- .sale-content {
- padding: 20rpx 24rpx;
- .sale-status {
- padding: 20rpx 40rpx;
- background-color: #F6F6F6;
- border-radius: 6rpx;
- }
- .goods-desc {
- min-width: 500rpx;
- }
- }
- .sale-footer {
- padding: 0 24rpx 22rpx;
- .btn {
- padding: 9rpx 34rpx;
- border: 1px solid $-color-primary;
- &.gray-btn {
- border-color: $-color-border;
- color: $-color-muted;
- }
- &.black-btn {
- border-color: $-color-border;
- color: $-color-normal;
- }
- }
- }
- }
- }
- </style>
|