You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

671 lines
14 KiB

<template>
<view class="content">
<view class="b-relative center">
<view style="width: 118rpx;height: 118rpx;overflow: hidden;border-radius: 50%;">
<image style="width: 118rpx;" :src="userInfo.image" mode="widthFix"></image>
</view>
<view>
<view class="font-m">{{ userInfo.title }}欢迎您</view>
<view class="font-n" v-if="userInfo.realOk == 'Y'">已完成实名认证</view>
</view>
<view :class="{'Top-line' : true, online : userInfo.bookable == 'Y'}"
@click="clickTopLine(userInfo.bookable == 'Y' ? 'N' : 'Y')">
{{ userInfo.bookable == 'Y' ? '在线' : '离线' }}
</view>
</view>
<view style="width: 710rpx; margin: 40rpx auto 20rpx;">
<view class="b-relative">
<!-- <image src="/static/ms/settled.png" style="width: 710rpx;height: 310rpx;"></image>
<view class="banner-font-1">
<image style="width: 380rpx;height: 98rpx;" src="/static/ms/fontjszm.png" />
</view>
<view class="banner-font-2">打造专业的技术服务</view>
<view class="banner-button">立即联系我们>></view> -->
<van-swipe class="my-swipe" :autoplay="3000" indicator-color="white">
<van-swipe-item v-for="item in bannerList" :key="item.id">
<image class="banner-image" :src="item.image" mode="widthFix"></image>
</van-swipe-item>
</van-swipe>
</view>
<view v-if="step === 1">
<view class="card-1 b-relative">
<span>订单待处理事项</span>
<span> {{ total }}</span>
<view class="button-1" @click="step=2">去处理</view>
</view>
<view class="card-2 b-relative ">
<view>本月订单统计</view>
<view class="flex-wrap">
<view @click="toOrder" :class="{'card-item' : true, [cardColor[item.status || 0]] : true}"
v-for="(item, index) in statistics">
<view class="font-n0">{{ item.size }}</view>
<view class="font-n1">{{ item.name }}</view>
</view>
<!-- <view class="card-item item-b">
<view class="font-n0">292</view>
<view class="font-n1">完成订单</view>
</view>
<view class="card-item item-c">
<view class="font-n0">292</view>
<view class="font-n1">完成订单</view>
</view>
<view class="card-item item-d">
<view class="font-n0">292</view>
<view class="font-n1">完成订单</view>
</view> -->
</view>
</view>
</view>
<view v-if="step === 2">
<view class="flex rr" style="align-items: center;">
<uni-icons type="sound" size="50rpx" color="#FBA54F"></uni-icons>
<view class="xx" v-html="notice">
</view>
<!-- 长沙市刘师傅在服务过程中客户投诉“服务过程中有不文明的行为”,扣信用分5分罚款500元,公布三日望引以为戒! -->
</view>
<view class="flex" style="position: relative;">
<view class="button-1" style="top : 0;" @click="step=1">查看统计</view>
</view>
<view class="flex">
<view style="width: 8rpx;height: 34rpx;background: #60bda2;border-radius: 4rpx;margin: 8rpx 0;" />
<view class="tt">待确认订单</view>
</view>
<view v-if="orderList.length > 0" class="mt20">
<view class="item" v-for="(item, index) in orderList">
<view class="flex-sb">
<view class="item-time">30分钟内到达</view>
<view class="item-price">¥ {{ item.money }}</view>
</view>
<view class="flex item-font1" style="margin: 24rpx 0 12rpx;border-radius: 10rpx;">
<image :src="item.image"
style="width: 134rpx;height: 134rpx;background: #ccc;margin-right: 20rpx;border-radius: 10rpx;"
mode="aspectFill"></image>
<view style="width: 452rpx;padding: 10rpx;background: #f8f8f8;border-radius: 8px;">
<view class="item-font4">{{ '韵享推拿' }}</view>
<view class="item-font3 flex-sb">
<view>¥ {{ item.money }}</view>
</view>
<view class="flex-sb item-font2">
<view>服务时间:{{item.serviceDate}} {{item.serviceTime}}服务{{item.useTime}}分钟</view>
<view>{{ item.createTime }}</view>
</view>
</view>
</view>
<view class="flex-sb item-font1 name">
<view>客户姓名:{{ item.name }}</view>
<view>{{ item.phone }}</view>
</view>
<view class="item-font1 address">
<span>下单地址:{{item.address}}{{item.addressDetails || ''}}</span>
</view>
<view class="flex">
<!-- <view class="item-button">拒绝(32s)</view> -->
<view class="item-button" @click.stop="confirmVipOrder(item, getOrderList)">确认</view>
</view>
</view>
</view>
<van-empty v-else image="/static/empty/order.png" image-size="400rpx" description="暂无待确认订单"/>
</view>
</view>
</view>
</template>
<script>
import orderMixins from '@/mixins/order.js'
export default {
mixins: [orderMixins],
data() {
return {
step: 1,
queryParams: {
pageNo: 1,
pageSize: 10
},
total: 0,
orderList: [],
userInfo: {},
bannerList: [],
statistics: [],
cardColor: ['item-a', 'item-b', 'item-c', 'item-d'],
config: [],
notice: ''
}
},
onShow() {
this.getOrderList()
this.getUserInfo()
this.getBanner()
this.getTenOrderStatistics()
this.getConfig()
this.initData()
},
methods: {
getUserInfo() {
this.$api('giveTenInfo', {}, res => {
if (res.code == 200) {
this.userInfo = res.result.msgTen;
this.refreshOnLine()
}
})
},
//获取订单列表
getOrderList(state) {
this.$api('getTenOrderList', this.queryParams, res => {
if (res.code == 200) {
if (res.code == 200) {
this.orderList = res.result.records;
this.total = res.result.total
} else {
this.finished = true
}
if (this.queryParams.pageSize > this.orderList.length) {
this.finished = true
}
this.loading = false
}
})
},
getConfig() {
this.vid = uni.getStorageSync("ivcode");
this.$api('getConfig', {}, res => {
if (res.code == 200) {
res.result.forEach(n => {
if (n.keyValue == 'notice') {
this.notice = n.content
}
})
this.config = res.result
}
})
},
//获取banner
getBanner() {
this.$api('getBanner', {}, res => {
this.bannerList = res.result;
})
},
getTenOrderStatistics() {
this.$api('getTenOrderStatistics', {}, res => {
if (res.code == 200) {
this.statistics = res.result
}
})
},
clickTopLine(isY) {
let self = this;
let is = isY == 'Y'
uni.showModal({
content: is ? '确认上线吗?你将开始接单!' : '确认下线吗?',
confirmText : '确认',
cancelText : '取消',
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: is ? '上线中...' : '下线中...'
});
self.$utils.getLocation(loca => {
self.$api('tenOnline', {
bookable: isY, //是否上线
...loca,
}, res => {
if (res.code == 200) {
uni.hideLoading();
self.getUserInfo();
uni.showToast({
title: is ? '已上线' : '已下线',
icon: 'none'
})
}
})
})
} else if (res.cancel) {
}
}
});
},
clickBanner() {
uni.navigateTo({
url: '/pages/login/login'
})
},
clickNotice() {
uni.navigateTo({
url: '/pages/index/notice'
})
},
clickFillin() {
uni.navigateTo({
url: '/pages/index/fillin'
})
},
clickSpring() {
uni.navigateTo({
url: '/pages/spring/vote'
})
},
clickSpRank() {
uni.navigateTo({
url: '/pages/spring/rank'
})
},
clickMore() {
uni.navigateTo({
url: '/pages/index/infor'
})
},
clickStar() {
uni.navigateTo({
url: '/pages/star/index'
})
},
clickVote() {
uni.switchTab({
url: '/pages/star/vote'
})
},
clickRank() {
uni.switchTab({
url: '/pages/index/rank'
})
},
clickInfo(id) {
uni.navigateTo({
url: `/pages/index/infod?id=${id}`
})
},
refreshOnLine() { //刷新用户位置
let isY = this.userInfo.bookable == 'Y' ? 'Y' : 'N'
this.$utils.getLocation(loca => {
this.$api('tenOnline', {
bookable: isY, //是否上线
...loca,
}, res => {})
})
},
initData() { //初始化时间项目数据
this.$api('initTerTime', {}, res => {})
this.$api('initTerProject', {}, res => {})
},
//跳转订单页面
toOrder() {
uni.switchTab({
url: '/pages/index/order'
})
}
}
}
</script>
<style scoped lang="scss">
body {
background-color: #f3f3f3;
}
.center {
width: calc(100vw - 72rpx);
height: 194rpx;
display: flex;
padding: 0 36rpx 0;
align-items: center;
background-color: #FFF;
}
.my-swipe {
width: 100%;
height: 334rpx;
margin: 0px auto;
border-radius: 15rpx;
overflow: hidden;
.banner-image {
width: 100%;
vertical-align: middle;
}
}
// .center image {
// width: 58rpx;
// height: 58rpx;
// margin-right: 20rpx;
// }
.font-m {
line-height: 58rpx;
font-family: PingFang SC, PingFang SC-Heavy;
font-weight: 800;
text-align: left;
color: #292421;
}
.font-n {
height: 42rpx;
line-height: 42rpx;
font-size: 20rpx;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
text-align: center;
color: #fdfaf8;
width: 168rpx;
background: #4eed78;
border-radius: 8px;
margin-top: 5rpx;
margin-left: 20rpx;
}
.banner-font-1 {
width: 292rpx;
height: 142rpx;
font-size: 72rpx;
line-height: 66rpx;
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
font-weight: 400;
text-align: left;
color: #ffffff;
letter-spacing: -1;
text-shadow: 0px 6px 6px 0px rgba(0, 165, 141, 0.70);
position: absolute;
left: 52rpx;
top: 34rpx;
}
.banner-font-2 {
height: 28rpx;
line-height: 28rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #ffffff;
text-shadow: 0 4rpx 6rpx 0 rgba(0, 165, 141, 0.70);
position: absolute;
left: 52rpx;
top: 138rpx;
}
.banner-button {
width: 240rpx;
height: 56rpx;
line-height: 56rpx;
background: #ffdb75;
border-radius: 24rpx;
box-shadow: 0 6rpx 6rpx 0 rgba(17, 106, 93, 0.23);
position: absolute;
left: 52rpx;
top: 220rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #26c591;
}
.card-1 {
height: 100rpx;
line-height: 100rpx;
background: #ffffff;
border-radius: 16rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
padding: 0 20rpx;
margin: 20rpx 0;
}
.button-1 {
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #e25851;
width: 148rpx;
line-height: 54rpx;
height: 54rpx;
background: #fdd5d3;
border: 2rpx solid #e98986;
border-radius: 30rpx;
position: absolute;
right: 20rpx;
top: 23rpx;
}
.card-2 {
height: 420rpx;
background: #ffffff;
border-radius: 16rpx;
line-height: 80rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
padding: 0 20rpx;
}
.card-item {
width: 322rpx;
height: 140rpx;
background: linear-gradient(174deg, #f07a77 5%, #e58988 96%);
border-radius: 12rpx;
margin-bottom: 20rpx;
}
.font-n0 {
height: 80rpx;
line-height: 80rpx;
font-size: 44rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #ffffff;
}
.font-n1 {
height: 34rpx;
line-height: 34rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: center;
color: #ffffff;
}
.item-a {
background: linear-gradient(174deg, #f07a77 5%, #e58988 96%);
}
.item-b {
background: linear-gradient(174deg, #fc8048 5%, #ed9555 96%);
}
.item-c {
background: linear-gradient(174deg, #4fd3bc 5%, #74e5d1 96%);
}
.item-d {
background: linear-gradient(174deg, #68d9eb 5%, #78c9e6 96%);
}
.rr {
height: 52rpx;
background: #fbecdd;
border-radius: 16rpx;
width: calc(710rpx - 40rpx);
padding: 20rpx;
margin: 20rpx 0;
}
.xx {
width: 602rpx;
height: 56rpx;
font-size: 20rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #323232;
display: flex;
align-items: center;
}
.tt {
line-height: 48rpx;
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
padding-left: 14rpx;
}
.item {
width: 630rpx;
height: 452rpx;
background: #ffffff;
border-radius: 16rpx;
padding: 40rpx;
margin-bottom: 20rpx;
}
.item-time {
font-size: 32rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #fe8a3b;
}
.item-price {
font-size: 32rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: right;
color: #f32713;
}
.item-button {
width: 100%;
height: 72rpx;
line-height: 72rpx;
border: 2rpx solid #c7c7c7;
border-radius: 8rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: center;
color: #333333;
margin: 0 auto;
}
.item-font1 {
line-height: 44rpx;
font-size: 32rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
margin-bottom: 12rpx;
}
.item-font2 {
font-size: 20rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 400;
text-align: left;
color: #717171;
}
.item-font3 {
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
line-height: 44rpx;
}
.item-font4 {
font-size: 28rpx;
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #333333;
}
.Top-line {
height: 60rpx;
line-height: 60rpx;
font-size: 20rpx;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
text-align: center;
border-radius: 8px;
padding: 0 20rpx;
position: absolute;
right: 30rpx;
color: #fdfaf8;
background-color: #292421;
}
.Top-line.online {
color: #fdfaf8;
background: #4eed78;
}
.name,
.address {
font-size: 28rpx;
font-weight: normal;
}
.address {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>