313 lines
8.9 KiB
Vue
313 lines
8.9 KiB
Vue
<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 class="flex row-between m-t-20">
|
||
<view>{{items.order_sn}}</view>
|
||
<view class="bold" @click="onCopy(items.order_sn)">复制</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="sale-footer flex row-right" v-if="items.allow_after_sale == 1">
|
||
<view class="btn row-center primary br60" :class="{'gray-btn': items.after_sale.able_apply == 0}" @tap="applyRefund(items,item)">
|
||
申请售后
|
||
</view>
|
||
</view>
|
||
<view class="kefu">
|
||
<view>因商品质量问题,可联系客服申请售后</view>
|
||
<view class="m-l-10">
|
||
<button open-type="contact" hover-class="none">
|
||
<u-icon name="server-fill" size="40" color="#999"></u-icon>
|
||
</button>
|
||
</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_path + '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_path + '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_path + '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_path + '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="aliOSS + 'uniapp/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";
|
||
import {
|
||
copy
|
||
} from '@/utils/tools'
|
||
|
||
export default {
|
||
mixins: [MescrollMixin, MescrollMoreItemMixin],
|
||
|
||
props: {
|
||
type: {
|
||
type: String,
|
||
default: afterSaleType.NORMAL,
|
||
bundle_path: '/bundle/pages/'
|
||
}
|
||
},
|
||
data() {
|
||
return {
|
||
lists: [],
|
||
downOption: {
|
||
auto: false
|
||
},
|
||
upOption: {
|
||
auto: false,
|
||
noMoreSize: 4,
|
||
empty: {
|
||
icon: `${this.$aliOSS}uniapp/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: this.bundle_path + '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
|
||
},
|
||
|
||
onCopy(order) {
|
||
copy(order)
|
||
}
|
||
}
|
||
};
|
||
</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;
|
||
}
|
||
}
|
||
|
||
.kefu {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
align-items: center;
|
||
padding: 0 24rpx 22rpx;
|
||
}
|
||
|
||
.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>
|