uniapp/components/after-sales-list/after-sales-list.vue

424 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<view>
<view class="sale-list" v-if="type == 'normal'">
<view
v-for="(items, index) in lists"
:key="index"
class="sale-item bg-white mt20"
>
<!-- <view class="sale-header row">
<view class="store-name nr ml10 normal">成交时间: {{items.time}}</view>
</view> -->
<view
v-for="(item, index2) in items.order_goods"
:key="index2"
class="goods-item"
>
<view class="sale-goods-show row">
<view class="goods-img">
<custom-image
width="100%"
height="100%"
radius="6rpx"
lazy-load
:src="item.image"
/>
</view>
<view class="goods-desc">
<view class="goods-name line2 nr">{{ item.goods_name }}</view>
<view class="row-between mt20">
<price-format
class="sm"
:firstSize="30"
:secondSize="30"
:showSubscript="true"
:subscriptSize="26"
:price="item.goods_price"
/>
<view class="nr">x{{ item.goods_num }}</view>
</view>
</view>
</view>
<view
:class="
'sale-footer row-end ' +
(items.after_sale.able_apply == 1 ? '' : 'bottom-opacity')
"
>
<view
class="btn row-center bd-primary primary br60"
@click="
goPage(
$event,
items.after_sale.able_apply,
'/bundle/pages/apply_refund/apply_refund',
items.order_id,
item.item_id
)
"
>
申请售后
</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 mt20"
>
<view class="sale-header row-between">
<view class="row">
<view class="store-name nr ml10 mr10"
>申请时间: {{ items.time }}</view
>
</view>
<view class="primary nr">{{ items.after_sale.type_text }}</view>
</view>
<navigator
v-for="(item, index2) in items.order_goods"
:key="index2"
hover-class="none"
class="sale-goods-show"
:url="
'/bundle/pages/after_sales_detail/after_sales_detail?afterSaleId=' +
items.after_sale.after_sale_id +
'&order_id=' +
items.order_id
"
>
<view class="row">
<view class="goods-img">
<custom-image
width="100%"
height="100%"
radius="6rpx"
lazy-load
:src="item.image"
/>
</view>
<view class="goods-desc">
<view class="goods-name line2 nr">{{ item.goods_name }}</view>
<view class="row-between mt20">
<view>
<price-format
:firstSize="26"
:price="item.goods_price"
weight="600"
:showSubscript="true"
/>
</view>
<view class="nr">x{{ item.goods_num }}</view>
</view>
<view class="row-between mt20">
<view>
<price-format
:firstSize="26"
:price="items.after_sale.refund_price"
weight="600"
:showSubscript="true"
color="red"
/>
</view>
<view class="nr">退款金额</view>
</view>
</view>
</view>
<view class="sale-status mt20 row">
<view class="nr" style="font-weight: bold">申请状态</view>
<view class="nr ml20">{{ items.after_sale.desc }}</view>
</view>
</navigator>
<view class="sale-footer row-end">
<view
class="row-center normal br60 mr20 grey-btn nr"
@tap="showDialog(items.after_sale.after_sale_id)"
>撤销申请</view
>
<navigator
hover-class="none"
:url="
'/bundle/pages/input_express_info/input_express_info?id=' +
items.after_sale.after_sale_id
"
class="row-center normal br60 grey-btn nr"
:hidden="items.after_sale.status != 2"
>填写快递单号
</navigator>
</view>
</view>
</view>
<view class="sale-list" v-else>
<navigator
v-for="(items, index) in lists"
:key="index"
hover-class="none"
class="sale-item bg-white mt20"
:url="
'/bundle/pages/after_sales_detail/after_sales_detail?afterSaleId=' +
items.after_sale.after_sale_id
"
>
<view class="sale-header row-between">
<view class="row">
<!-- <image style="width: 40rpx;height: 40rpx" src="/images/icon_shop.png"></image> -->
<view class="store-name nr ml10 mr10"
>申请时间: {{ items.time }}</view
>
</view>
<view class="primary nr">{{ items.after_sale.type_text }}</view>
</view>
<view
v-for="(item, index2) in items.order_goods"
:key="index2"
class="sale-goods-show"
>
<view class="row">
<view class="goods-img">
<custom-image
lazy-load
width="100%"
height="100%"
radius="6rpx"
:src="item.image"
/>
</view>
<view class="goods-desc">
<view class="goods-name line2 nr">{{ item.goods_name }}</view>
<view class="row-between mt20 row-between">
<price-format
:firstSize="26"
:price="item.goods_price"
weight="600"
:showSubscript="true"
/>
<view class="nr">x{{ item.goods_num }}</view>
</view>
<view class="row-between mt20">
<view>
<price-format
:firstSize="26"
:price="items.after_sale.refund_price"
weight="600"
:showSubscript="true"
color="red"
/>
</view>
<view class="nr">退款金额</view>
</view>
</view>
</view>
<view class="sale-status mt20 row">
<view class="nr" style="font-weight: bold">申请状态</view>
<view class="nr ml20">{{ items.after_sale.desc }}</view>
</view>
</view>
</navigator>
</view>
<loading-footer :status="loadingStatus" slotEmpty>
<view class="data-null column-center" slot="empty">
<image class="img-null" src="/static/images/order_null.png"></image>
<text class="nr muted">暂无售后数据</text>
</view>
</loading-footer>
</view>
<u-modal
v-model="confirmDialog"
confirm-text="确定"
:showCancelButton="true"
:show-title="false"
confirm-color="#FF2C3C"
@confirm="cancelApplyFun"
@cancel="hideDialog"
>
<view class="column-center tips-dialog" style="padding: 20rpx 0">
<image class="icon-lg" src="/static/images/icon_warning.png"></image>
<view style="margin-top: 30rpx">是否要撤销申请</view>
</view>
</u-modal>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | LikeShop100%开源免费商用电商系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | 开源版本可自由商用,保留版权即可
// | 商业版本务必购买商业授权,以免引起法律纠纷
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | Gitee下载https://gitee.com/likeshop_gitee/likeshop
// | 访问官网https://www.likemarket.net
// | 访问社区https://home.likemarket.net
// | 访问手册http://doc.likemarket.net
// | 微信公众号:好象科技
// | 好象科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: LikeShopTeam
// +----------------------------------------------------------------------
import { AfterSaleType, loadingType } from "@/utils/type";
import {
getAfterSaleList,
cancelApply,
afterSaleDetail,
applyAgain,
} from "@/api/user";
import { loadingFun } from "@/utils/tools";
export default {
data() {
return {
lists: [],
page: 1,
loadingStatus: loadingType.LOADING,
confirmDialog: false,
};
},
components: {},
props: {
type: {
type: String,
default: AfterSaleType.NORMAL,
},
},
created() {
console.log("type", this.type);
uni.$on("refreshsale", () => {
this.reflesh();
});
},
beforeMount() {
this.getAfterSaleListFun();
},
destroyed: function () {
uni.$off("refreshsale");
},
methods: {
cancelApplyFun() {
console.log(this.id, "id");
cancelApply({
id: this.id,
}).then((res) => {
if (res.code == 1) {
this.$toast({
title: res.msg,
});
uni.$emit("refreshsale");
}
});
},
getAfterSaleListFun() {
let { lists, loadingStatus, page } = this;
loadingFun(getAfterSaleList, page, lists, loadingStatus, {
type: this.type,
}).then((res) => {
console.log(res, "res");
if (res) {
this.page = res.page;
this.loadingStatus = res.status;
this.lists = res.dataList;
}
});
},
goPage(e, able_apply, url, order_id, item_id) {
if (able_apply != 1) {
return;
}
url = url + "?order_id=" + order_id + "&item_id=" + item_id;
uni.navigateTo({
url: url,
});
},
reflesh() {
this.page = 1;
this.lists = [];
this.loadingStatus = loadingType.LOADING;
this.getAfterSaleListFun();
},
showDialog(id) {
console.log(id, "showDialog");
this.id = id;
this.confirmDialog = true;
},
hideDialog() {
this.comfirmDialog = false;
},
},
};
</script>
<style lang="scss">
.sale-list {
/* padding: 20rpx 0; */
.sale-item {
.sale-goods-show {
padding: 20rpx 24rpx;
.goods-img {
height: 160rpx;
width: 160rpx;
}
.goods-desc {
margin-left: 24rpx;
flex: 1;
}
.sale-status {
padding: 20rpx 40rpx;
background-color: #f6f6f6;
border-radius: 6rpx;
}
}
.sale-header {
padding: 20rpx 24rpx;
.store-name {
font-family: PingFang SC;
line-height: 40rpx;
}
}
.sale-footer {
padding: 0 24rpx 22rpx;
.btn {
padding: 9rpx 34rpx;
font-family: PingFang SC;
border: 1px solid $color-primary;
}
.grey-btn {
border: 1px solid #cccccc;
padding: 9rpx 34rpx;
font-family: PingFang SC;
}
}
}
}
.bottom-opacity {
opacity: 0.5;
}
.data-null {
padding-top: 150rpx;
}
.tips-dialog {
height: 230rpx;
width: 100%;
}
</style>