Files
czg_business_wechat/pages/mall/index.vue
2024-03-21 15:38:10 +08:00

872 lines
21 KiB
Vue
Raw Permalink 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 class="content">
<view class="onecontent">
<view class="flex-start">
<view class="onecontent_oen flex-start">
<input class="onecontent_oen_input" type="text" v-model="like" placeholder="搜索订单/商家名/商品名">
<text class="onecontent_oen_text" @click="init_fn">搜索</text>
</view>
</view>
<view class="onecontent_tow flex-between">
<view ref="uTabs" class="onecontent_tow_item flex-colum" v-for="(item,index) in swipercurrentdata"
:key="index" @click="orderswitch(index)">
<view :class="swiperCurrent == index?'onecontent_tow_itemtexts':'onecontent_tow_itemtext'">
{{item.name}}
</view>
</view>
</view>
</view>
<view class="towcontent">
<swiper :current="swiperCurrent" @animationfinish="animationfinish" :style="{height:height}">
<swiper-item v-for="(item,index) in list_" :key="index">
<scroll-view scroll-y style="width: 100%;" :style="{height:height}" @scrolltolower="lower">
<view class="towcontentitem" v-for="(item1,index1) in list_[index].data" :key="index1">
<view class="towcontentitemone flex-between">
<text class="towcontentitemone_one">{{item1.store_title}}</text>
<view class="towcontentitemone_tow flex-start">
<!-- <image class="towcontentitemone_towimage"
:src="item.store_avatar"
mode="">
</image> -->
<text v-if="item1.status == 0">待付款</text>
<text v-if="item1.status == 1">待发货</text>
<text v-if="item1.status == 2">待收货</text>
<text v-if="item1.status == 3">已收货/评价</text>
<text v-if="item1.status == 4">退款中 </text>
<text v-if="item1.status == 5">退款成功</text>
<text v-if="item1.status == 6">取消订单</text>
<text v-if="item1.status == 7">已拒绝</text>
<text v-if="item1.deletetime" style="color: red;">(用户已删除)</text>
</view>
</view>
<view class="towcontentitemtow flex-start" v-for="(item2,index2) in item1.goods"
:key="index2" @click="eeInfo(item2)">
<image class="towcontentitemtow_imge" :src="item2.img" mode=""></image>
<view class="towcontentitemtow_one flex-start">
<text class="towcontentitemtow_one_one">{{item2.title}}</text>
<view class="flex-colum">
<text class="towcontentitemtow_one_tow"><text
style="font-size:24rpx;">¥</text>{{item2.goods_price}}</text>
<text class="towcontentitemtow_one_there">×{{item2.number}}</text>
</view>
</view>
<!-- <view class="towcontentitemtow_tow">
{{item2.number}}
</view> -->
</view>
<view class="towcontentitemthere_text_iitem">
{{item1.number}}件商品 合计:<text>{{item1.goods_total_price}}</text>
</view>
<view class="towcontentitemthere">
<view v-if="item1.status == 2 || item1.status == 0"
class="towcontentitemthereitem towcontentitemthereitem_there"
@click.stop="orderokprebook(item1)">
去发货
</view>
<view v-if="item1.status == 2 || item1.status == 1"
class="towcontentitemthereitem towcontentitemthereitem_tow"
@click.stop="orderrefuseprebook(item1)">
取消订单并退款
</view>
<view v-if="item1.status == 3"
class="towcontentitemthereitem towcontentitemthereitem_tow"
@click.stop="orderordercancel(item1)">
取消订单/并退款
</view>
<view class="towcontentitemthereitem towcontentitemthereitem_there"
v-if="item1.status == 3" @click.stop="orderorderdelete(item1)">
完成服务
</view>
</view>
<u-overlay :show="overlayshow" @click.stop="overlayshow = false" opacity='0.1'>
<view class="warp">
<view class="rect flex-colum" @tap.stop>
<view class="rectone">
确定{{clickoverlayshowtext}}?
</view>
<view class="recttow flex-between">
<view class="recttow_one" @click="cancelOrder(item.status)">
确定
</view>
<view class="recttow_tow" @click="overlayshow = false">
取消
</view>
</view>
</view>
</view>
</u-overlay>
</view>
<view v-if="list_[index].data.length == 0 && list_[index].is_end == true" class="flex-colum">
<image class="" style="margin-top: 100rpx;"
src="https://ointmentweapp.oss-cn-beijing.aliyuncs.com/image/my/order/nothave.png"
mode="">
</image>
</view>
<u-loadmore :status="list_[index].status" />
</scroll-view>
</swiper-item>
</swiper>
</view>
</view>
</template>
<script>
export default {
data() {
return {
height: "",
// 因为内部的滑动机制限制请将tabs组件和swiper组件的current用不同变量赋值
current: 0, // tabs组件的current值表示当前活动的tab选项
swiperCurrent: 0, // swiper组件的current值表示当前那个swiper-item是活动的
overlayshow: false,
list_: {
list0: { //待服务
data: [],
page: 1,
status: 'loadmore',
is_end: false,
},
list1: { //全部
data: [],
page: 1,
status: 'loadmore',
is_end: false,
},
list2: { //代付款
data: [],
page: 1,
status: 'loadmore',
is_end: false,
},
list3: { //待服务
data: [],
page: 1,
status: 'loadmore',
is_end: false,
},
list4: { //待服务
data: [],
page: 1,
status: 'loadmore',
is_end: false,
}
},
like: '', //备注
clickoverlayshowtext: "",
swipercurrentdata: [{
name: '全部'
}, {
name: '待付款'
}, {
name: '待发货'
}, {
name: '待收货'
}, {
name: '已收货/退款售后'
}],
form: {
status: 'loadmore',
},
}
},
onShow() {
if (uni.cache.get('token')) {
uni.setNavigationBarTitle({
title: uni.cache.get('user').nickname
})
this.init_fn();
}
},
mounted() {
var query = uni.createSelectorQuery().in(this).select('.onecontent')
query.boundingClientRect(ele => {
var that = this;
uni.getSystemInfo({
success(res) {
that.height = (res.windowHeight - ele.height) + "px";
that = null;
}
})
}).exec();
},
methods: {
showpickersetTabBar(){
uni.switchTab({
url:'/pages/order/index'
})
},
init_fn() {
this.list_ = {
list0: { //全部
data: [],
page: 1,
status: 'loading',
is_end: false,
},
list1: { //全部
data: [],
page: 1,
status: 'loading',
is_end: false,
},
list2: { //代付款
data: [],
page: 1,
status: 'loading',
is_end: false,
},
list3: { //待服务
data: [],
page: 1,
status: 'loadmore',
is_end: false,
},
list4: { //待服务
data: [],
page: 1,
status: 'loadmore',
is_end: false,
}
}
for (let i = 0; i <= 4; i++) {
this.get_order_list(i);
}
},
async get_order_list(i) {
let page = null; //页数
let order_type = ''
switch (i) {
case 0:
order_type = 10;
page = this.list_.list0.page;
break;
case 1:
order_type = 0;
page = this.list_.list1.page;
break;
case 2:
order_type = 1;
page = this.list_.list2.page;
break;
case 3:
order_type = 2;
page = this.list_.list3.page;
break;
case 4:
order_type = 3;
page = this.list_.list4.page;
break;
}
let resdata = await this.api.shoppinglist({
type: order_type,
page: page,
like: this.like
})
let res = resdata.data
// res.data.forEach(item=>{//计算待支付订单剩余时间
// if(item.order_type==0){
// item.timeDiff=(new Date(item.estimate_close_at).getTime() -new Date().getTime())/1000;
// }
// })
switch (order_type) {
case 10:
this.paging(res, this.list_.list0)
break;
case 0:
this.paging(res, this.list_.list1)
break;
case 1:
this.paging(res, this.list_.list2)
break;
case 2:
this.paging(res, this.list_.list3)
break;
case 3:
this.paging(res, this.list_.list4)
break;
}
uni.hideLoading();
},
paging(res, list) {
if (res.length == 0) {
list.status = 'nomore';
list.is_end = true;
return false;
} else {
list.status = 'loading';
list.page = list.page + 1;
setTimeout(() => {
list.data = [...list.data, ...res];
if (res.length != 10) {
list.is_end = true;
list.status = 'nomore';
} else {
list.status = 'loading';
}
}, 500)
}
this.$forceUpdate();
},
lower() {
switch (this.current) {
case 0:
this.onReachBottom_fn(this.list_.list0)
break;
case 1:
this.onReachBottom_fn(this.list_.list1)
break;
case 2:
this.onReachBottom_fn(this.list_.list2)
break;
case 3:
this.onReachBottom_fn(this.list_.list3)
break;
case 4:
this.onReachBottom_fn(this.list_.list4)
break;
}
},
onReachBottom_fn(list) {
if (!list.is_end) {
this.get_order_list(this.current);
}
},
// tabs通知swiper切换
orderswitch(index) {
try {
switch (index) {
case 0:
if (this.list_list0.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 1:
if (this.list_list1.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 2:
if (this.list_.list2.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 3:
if (this.list_.list3.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 4:
if (this.list_.list4.data.length < 10) {
this.form.status = 'nomore';
}
break;
}
} catch (e) {
//TODO handle the exception
}
this.swiperCurrent = index;
},
// 由于swiper的内部机制问题快速切换swiper不会触发dx的连续变化需要在结束时重置状态 swiper滑动结束分别设置tabs和swiper的状态
animationfinish(e) {
let current = e.detail.current;
try {
switch (current) {
case 0:
if (this.list_list0.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 1:
if (this.list_list1.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 2:
if (this.list_.list2.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 3:
if (this.list_.list3.data.length < 10) {
this.form.status = 'nomore';
}
break;
case 4:
if (this.list_.list4.data.length < 10) {
this.form.status = 'nomore';
}
break;
}
} catch (e) {
//TODO handle the exception
}
this.swiperCurrent = current;
this.current = current;
},
// clickoverlayshow(e) { //切换文字
// switch (e) {
// case 1:
// this.clickoverlayshowtext = '取消订单'
// break;
// case 2:
// this.clickoverlayshowtext = '删除订单'
// break;
// }
// this.overlayshow = true
// },
orderordercancel(item) { //取消订单
var this_ = this
uni.showModal({
content: '确定取消订单吗?',
confirmColor: '#f55850',
cancelColor: '#333333',
async success(resdata) {
if (resdata.confirm) {
let res = await this_.api.orderorderrefund({
order_id: item.order_id
})
if (res.code == 1) {
this_.init_fn()
}
}
}
})
},
async orderokprebook(item) {
uni.pro.navigateTo('mall/ship', {
id: item.id
})
},
async orderrefuseprebook(e) {
var this_ = this
uni.showModal({
content: '确定取消订单吗?',
confirmColor: '#f55850',
cancelColor: '#333333',
async success(resdata) {
if (resdata.confirm) {
let res = await this_.api.shoppingorderrefund({
order_id: e.id,
})
if (res.code == 1) {
uni.showToast({
title: '取消订单并退款成功',
icon: 'none'
});
setTimeout(() => {
this_.init_fn()
}, 500);
}
}
}
})
},
orderordercancelrefund(item) { //取消订单去退款
uni.pro.navigateTo('my/order/refund', {
id: item.order_id
})
},
applylrefund(item) {
uni.pro.navigateTo('my/order/applylrefund', {
id: item.order_id
})
},
orderorderdelete(item) {
var this_ = this
if (item.pay_status == 0) {
uni.showModal({
content: '该笔订单还未付款,是否继续?',
confirmColor: '#f55850',
cancelColor: '#333333',
async success(resdata) {
if (resdata.confirm) {
let res = await this_.api.orderstartsercive({
order_id: item.order_id
})
if (res.code == 1) {
this_.init_fn()
}
}
}
})
} else {
uni.showModal({
content: '确定开始服务吗?',
confirmColor: '#f55850',
cancelColor: '#333333',
async success(resdata) {
if (resdata.confirm) {
let res = await this_.api.orderstartsercive({
order_id: item.order_id
})
if (res.code == 1) {
this_.init_fn()
}
}
}
})
}
},
async cancelOrder(item) { //取消订单
console.log(item)
// let res
// switch (this.clickoverlayshowtext) {
// case '取消订单':
// if (item.status == 0) {
// res = await this.api.orderordercancel({
// order_id: item.order_id
// })
// } else {
// uni.pro.navigateTo('my/order/orderInfo', {
// id: e,
// e: e
// })
// }
// break;
// case '删除订单':
// res = await this.api.orderorderdelete({
// order_id: item.order_id
// })
// break;
// }
// this.overlayshow = false
// this.init_fn()
},
eeInfo(e) { //查看订单详情
uni.pro.navigateTo('mall/orderInfo', {
id: e.order_id
})
},
}
}
</script>
<style lang="scss">
page {
background: #F6F6F6;
}
.content {
.onecontent {
width: 100%;
background: #FFFFFF;
padding: 10rpx 28rpx;
.flex-start {
flex-wrap: nowrap;
.onecontent_oen {
margin: 0 auto;
flex: auto;
height: 70rpx;
border-radius: 14rpx;
border: 2rpx solid #6699FF;
padding-right: 8rpx;
.onecontent_oen_input {
padding-left: 32rpx;
flex: 1;
}
.onecontent_oen_text {
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
text-align: center;
line-height: 56rpx;
width: 80rpx;
height: 56rpx;
background: #6699FF;
border-radius: 14rpx;
}
}
.onecontent_oen_right {
margin-left: 26rpx;
.onecontent_oen_rightimage {
width: 17.9rpx;
height: 19.34rpx;
}
.onecontent_oen_rightimageview {
text-align: center;
width: 140rpx;
margin-left: 10rpx;
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
}
}
.onecontent_tow {
padding: 32rpx 0 32rpx 0;
width: 100%;
.onecontent_tow_item {
position: relative;
.onecontent_tow_itemtexts {
font-size: 32rpx;
font-family: PingFang SC-Bold, PingFang SC;
font-weight: bold;
color: #333333;
}
.onecontent_tow_itemtext {
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
}
.onecontent_tow_itemtexts::after {
content: '';
position: absolute;
bottom: -10rpx;
left: 50%;
transform: translateX(-50%);
width: 19.33rpx;
height: 6.66rpx;
background: url(https://ointmentweapp.oss-cn-beijing.aliyuncs.com/image/my/order/order1.png) no-repeat;
background-size: 100% 100%;
}
}
}
}
.towcontent {
padding: 0 28rpx;
.flex-colum_image {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
text {
margin-top: 30rpx;
font-size: 32rpx;
font-family: PingFang SC-Bold, PingFang SC;
font-weight: bold;
color: #666666;
}
}
.towcontentitem {
margin-top: 32rpx;
padding: 24rpx;
width: 100%;
background: #FFFFFF;
border-radius: 12rpx;
.towcontentitemone {
width: 100%;
padding-bottom: 16rpx;
border-bottom: 1px solid #F6F6F6;
.towcontentitemone_one {
font-size: 28rpx;
width: 60%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-family: PingFang SC-Bold, PingFang SC;
font-weight: bold;
color: #333333;
}
.towcontentitemone_tow {
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
.towcontentitemone_towimage {
margin-right: 10rpx;
width: 24rpx;
height: 24rpx;
}
}
}
.towcontentitemtow {
position: relative;
padding: 22rpx 0;
border-bottom: 1px solid #F6F6F6;
.towcontentitemtow_imge {
width: 144rpx;
height: 144rpx;
background: #666666;
border-radius: 12rpx;
}
.towcontentitemtow_one {
margin-left:40rpx;
flex: auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
position: relative;
.towcontentitemtow_one_one {
flex: auto;
overflow: hidden;
text-overflow: ellipsis;
white-space: break-spaces;
font-size: 28rpx;
font-family: PingFang SC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
.flex-colum {
flex: 1;
margin-left: 10rpx;
.towcontentitemtow_one_there {
font-size: 24rpx;
font-family: SourceHanSansCN-Regular, SourceHanSansCN;
font-weight: 400;
color: #999999;
}
.towcontentitemtow_one_tow {
font-size: 36rpx;
font-family: Helvetica-Bold, Helvetica;
font-weight: bold;
color: #333333;
}
}
}
.towcontentitemtow_tow {
position: absolute;
bottom: 32rpx;
right: 0;
font-size: 28rpx;
font-family: Roboto-Regular, Roboto;
font-weight: 400;
color: #999999;
}
}
.towcontentitemthere_text_iitem {
width: 100%;
margin-top: 16rpx;
font-size: 24rpx;
font-family: Source Han Sans CN-Bold, Source Han Sans CN;
font-weight: 500;
color: #333333;
text {
font-size: 28rpx;
font-family: Source Han Sans CN-Bold, Source Han Sans CN;
font-weight: bold;
color: #333333;
}
}
.towcontentitemthere {
width: 100%;
margin-top: 16rpx;
display: flex;
justify-content: flex-end;
align-items: center;
flex-wrap: wrap;
.towcontentitemthereitem {
margin-left: 24rpx;
padding: 8rpx 32rpx;
font-size: 28rpx;
border-radius: 28rpx;
}
.towcontentitemthereitem_one {
background: linear-gradient(101deg, #FA8E5D 0%, #F45E4D 100%);
font-family: PingFang SC-Bold, PingFang SC;
font-weight: bold;
color: #FFFFFF;
}
.towcontentitemthereitem_tow {
background: #F6F6F6;
font-family: PingFang SC-Bold, PingFang SC;
font-weight: bold;
color: #999999;
}
.towcontentitemthereitem_there {
background: linear-gradient(303deg, #9FC9FF 0%, #6699FF 100%);
font-family: SourceHanSansCN-Regular, SourceHanSansCN;
font-weight: 400;
color: #FFFFFF;
}
}
}
}
.warp {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
.rect {
padding: 40rpx 68rpx;
width: 480rpx;
background: #FFFFFF;
border-radius: 42rpx;
.rectone {
font-size: 32rpx;
font-family: Source Han Sans CN-Bold, Source Han Sans CN;
font-weight: bold;
color: #333333;
}
.recttow {
width: 100%;
margin-top: 32rpx;
.recttow_one {
padding: 8rpx 40rpx;
background: #FFFFFF;
border-radius: 26rpx;
border: 2rpx solid #999999;
font-size: 28rpx;
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
font-weight: 400;
color: #333333;
}
.recttow_tow {
padding: 8rpx 40rpx;
background: #333333;
font-size: 28rpx;
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
font-weight: 500;
color: #FFFFFF;
border-radius: 26rpx;
}
}
}
}
}
</style>