|
|
- <template>
- <view class="content">
-
- <view style="width: 710rpx; margin: 40rpx auto 20rpx;">
-
- <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
- style="width: 670rpx;height: 80rpx;background-color: #fff; border-radius: 16rpx;padding: 15rpx 20rpx;">
- <view class="flex-sb" style="line-height: 40rpx; font-size: 28rpx;">
- <view :class="{'sb-w8' : true, select : item == selectDate}" @click="onSelectDate(item)"
- v-for="(item, index) in dateList">
- <view class="">
- {{ item.format('dddd')[2] }}
- </view>
- <view class="">
- {{ index == 0 ? '今' : index == 1 ? '明' : item.format('DD') }}
- </view>
- </view>
- <!-- <view class="sb-w8" style="border-left: 1rpx solid #999;"><uni-icons type="list" size="34rpx"/></view> -->
- </view>
- <!-- <view class="flex-sb" style="line-height: 48rpx;">
- <view class="sb-w8" v-for="(item, index) in dateList">
- {{ index == 0 ? '今' : index == 1 ? '明' : item.format('DD') }}
- </view> -->
-
- <!-- <view class="sb-w8" style="border-left: 1rpx solid #999;"><uni-icons type="down" size="34rpx"/></view> -->
- <!-- </view> -->
- </view>
-
- <view class="flex-sb" style="margin-top: 20rpx;">
- <view :class="{'status-card' : true, select : queryParams.state == 0}" @click="selectTenState(0)">
- <view>
- <view class="num">{{ completedQuantity }}</view>
- <view>已完成</view>
- </view>
- </view>
- <view :class="{'status-card' : true, select : queryParams.state == 1}" @click="selectTenState(1)">
- <view>
- <view class="num">{{ confirmedQuantity }}</view>
- <view>待确认</view>
- </view>
- </view>
- <view :class="{'status-card' : true, select : queryParams.state == 2}" @click="selectTenState(2)">
- <view>
- <view class="num">{{ numberOfVisits }}</view>
- <view>待上门</view>
- </view>
- </view>
- </view>
-
- <view class="mt20">
-
- <van-list v-if="orderList.length > 0" v-model:loading="loading" :finished="finished" @load="onLoad">
-
- <view class="item" v-for="(item, index) in orderList"
- @click="toOrderDetail(item.id)">
- <view class="top">
- <view class="service">
- <text>{{item.projectId_dictText}}</text>
- <uni-icons type="right" size="15"></uni-icons>
- <text>{{item.type_dictText}}</text>
- </view>
- <view class="status">
- <text> {{item.tenState_dictText}}</text>
- </view>
- </view>
- <view class="content">
- <view class="left">
- <image mode="aspectFill" :src="item.image"></image>
- <view class="tag">
- {{item.technicianId_dictText}}
- </view>
- </view>
- <view class="right">
- <view class="text-hidden-1">
- 客户姓名:{{item.name}}
- </view>
- <view class="text-hidden-1">
- 下单时间:{{item.createTime}}
- </view>
- <view class="text-hidden-1">
- 下单地址:{{item.address}}{{item.addressDetails || ''}}
- </view>
- <view class="text-hidden-1">
- 服务时间:{{item.serviceDate}} {{item.serviceTime}}服务{{item.useTime}}分钟
- </view>
- <view class="price">
- 总价格:<text class="num">{{item.money}}元</text>
- </view>
- </view>
- </view>
- <view v-if="item.state !=4" class="bottom">
- <view class="b2" v-if="item.tenState == 0"
- @click.stop="confirmVipOrder(item, getOrderList)">
- 确认订单
- </view>
- <view class="b2" v-if="item.tenState == 1" @click.stop="startVipOrder(item, getOrderList)">
- 技师出发
- </view>
- <view class="b2" v-if="item.tenState == 2" @click.stop="arriveVipOrder(item, getOrderList)">
- 到达打卡
- </view>
- <view class="b2" v-if="item.tenState == 3"
- @click.stop="startVipService(item, startServiceCallback)">
- 开始服务
- </view>
- <view class="b1" v-if="item.tenState == 4 && !item.isTimeout"
- @click.stop="toCountdown(item)">
- 服务时间
- </view>
- <view class="b2" v-if="item.tenState == 4"
- @click.stop="endVipService(item, toEvaluate, item.id, item.projectId,item.technicianId)">
- 结束服务
- </view>
- <!-- <view class="b1" @click.stop="toEvaluate()" v-if="item.tenState == 5">
- 投诉举报
- </view> -->
- <view class="b2" @click.stop="toEvaluate(item.id,item.projectId,item.technicianId)"
- v-if="item.tenState == 5">
- 立即评价
- </view>
- </view>
- <view v-else class="bottom">
- <view @click.stop="()=>{}" class="b3">
- 用户取消
- </view>
- </view>
- </view>
-
- </van-list>
-
- <van-empty v-else image="/static/empty/order.png" image-size="400rpx" :description="getStatus()" />
-
- </view>
-
- </view>
-
- </view>
- </template>
-
- <script>
- import orderMixins from '@/mixins/order.js'
- export default {
- mixins: [orderMixins],
- data() {
- return {
- dateList: [],
- active: 0,
- queryParams: {
- state: 1,
- pageNo: 1,
- pageSize: 10
- },
- orderList: [], //订单列表数据
- loading: false,
- finished: false,
- tenState: 0,
- selectDate: null,
- config: [],
- notice: '',
- completedQuantity: 0,
- confirmedQuantity: 0,
- numberOfVisits: 0,
- countdownOrder: uni.getStorageSync('countdownOrder') ? JSON.parse(uni.getStorageSync('countdownOrder')) :
- {}
- }
- },
- onShow() {
- this.getOrderList(this.queryParams.state)
- this.getConfig()
-
- this.dateList = []
-
- let today = this.dayjs()
- // this.selectDate = today;
-
- this.dateList.push(today)
-
- for (let i = 1; i < 7; i++) {
- this.dateList.push(today.add(i, 'day'))
- }
- },
- methods: {
- onLoad() {
- this.queryParams.pageSize += 10
- this.getOrderList()
- },
- //获取订单列表
- getOrderList(state, order) {
-
- let params = {
- ...this.queryParams,
- tenstate : this.queryParams.state,
- }
-
- if (this.selectDate) {
- params.serviceDate = this.selectDate.format('YYYY-MM-DD')
- }
-
- this.$api('getTenOrderPageList', params, res => {
- if (res.code == 200) {
- res.result.records.forEach(item => {
- item.isTimeout = true; //是否服务时间已过
- if (item && item.startServiceTime) { //有开始服务时间说明技师已开始服务
- let isTimeout = new Date(item.startServiceTime).valueOf() + item.useTime *
- 1000 * 60
- if (Date.now() <= isTimeout) {
- item.isTimeout = false
- }
- }
- })
- this.orderList = res.result.records;
-
- //统计各种状态订单数量
- let titles = ['completedQuantity', 'confirmedQuantity', 'numberOfVisits']
- let current = titles[state]
- this[current] = res.result.total
-
- //打开倒计时页面
- if (order && order.id) {
- this.orderList.forEach(item => {
- if (item.id == order.id) {
- this.toCountdown(item)
- }
- })
- }
-
- if (this.queryParams.pageSize > this.orderList.length) {
- this.finished = true
- }
- } else {
- this.finished = true
- }
- this.loading = false
- })
- },
- selectTenState(state) {
- this.queryParams.pageSize = 10
- this.queryParams.state = state;
- this.getOrderList(state)
- },
- onSelectDate(selectDate) {
- if (this.selectDate == selectDate) {
- this.selectDate = null
- } else {
- this.selectDate = selectDate
- }
- this.queryParams.pageSize = 10
- this.queryParams.serviceTime = this.dayjs(selectDate).format('YYYY-MM-DD')
- this.getOrderList(this.queryParams.state)
- },
- toEvaluate(id, projectId, terId) {
- uni.navigateTo({
- url : `/pages/order/evaluate?id=${id}&projectId=${projectId}&terId=${terId}`
- })
- },
- toOrderDetail(id) {
- uni.navigateTo({
- url: '/pages/order/orderDetail?id=' + id
- })
- },
- 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
- }
- })
- },
- //获取当前查询订单状态
- getStatus() {
- let titles = ['暂无已完成订单', '暂无待确认订单', '暂无待上门']
- return titles[this.queryParams.state]
- },
- //跳转倒计时
- toCountdown(order) {
- let {
- useTime,
- startServiceTime
- } = order
- let isTimeout = new Date(startServiceTime).valueOf() + useTime * 1000 * 60
- if (Date.now() >= isTimeout) {
- return uni.showToast({
- title: '服务时间已过',
- icon: 'none'
- })
- }
- uni.navigateTo({
- url: `/pages/mine/countdown?time=${useTime}&startTime=${startServiceTime}`
- })
- },
- //开始服务回调
- startServiceCallback(order) {
- this.getOrderList(this.queryParams.state, order)
- }
- }
- }
- </script>
-
- <style scoped lang="scss">
- body {
- background-color: #f3f3f3;
- font-family: PingFang SC;
- }
-
- .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;
- }
-
- .status-card {
- width: 132rpx;
- height: 92rpx;
- background-color: #fff;
- border-radius: 16rpx;
-
- padding: 40rpx;
- text-align: center;
- color: #ccc;
-
- .num {
- color: #0d0d0d;
- font-size: 42rpx;
- }
- }
-
- .status-card.select {
- background-color: var(--van-primary-color);
- color: #eee;
-
- .num {
- color: #fff;
- }
- }
-
- .select {
- color: var(--van-primary-color);
- font-weight: 900;
- }
-
- .item {
- width: calc(100% - 40rpx);
- background-color: #fff;
- margin: 20rpx;
- box-sizing: border-box;
- border-radius: 16rpx;
- padding: 30rpx;
-
- .top {
- display: flex;
- justify-content: space-between;
- align-items: center;
- font-size: 30rpx;
-
- .service {}
-
- .status {
- color: var(--van-primary-color);
- font-size: 26rpx;
- font-weight: 600;
- }
- }
-
- .content {
- display: flex;
- margin: 10rpx 0;
-
- .left {
- width: 150rpx;
- height: 150rpx;
- overflow: hidden;
- border-radius: 10rpx;
-
- image {
- width: 150rpx;
- height: 150rpx;
- }
-
- .tag {
- color: var(--van-primary-color);
- font-size: 24rpx;
- text-align: center;
- width: 100%;
- background-color: #e7fdf7;
- border: 1px solid var(--van-primary-color);
- border-radius: 8rpx;
- padding: 2rpx 0;
- }
- }
-
- .right {
- width: calc(100% - 160rpx);
- color: #777;
- font-size: 24rpx;
- padding-left: 20rpx;
- line-height: 40rpx;
-
- .price {
- font-weight: 900;
- text-align: right;
-
- text {
- color: #ff780099;
- font-size: 30rpx;
- }
- }
- }
- }
-
- .bottom {
- display: flex;
- justify-content: flex-end;
- font-size: 25rpx;
-
- .b1,
- .b3 {
- border: 1px solid #777;
- color: #777;
- box-sizing: border-box;
- }
-
- .b2 {
- background: linear-gradient(178deg, #4FD3BC, #60C285);
- color: #fff;
- }
-
- .b3 {
- background: transparent;
- }
-
- view {
- margin: 12rpx;
- border-radius: 28rpx;
- padding: 8rpx 28rpx;
- margin-bottom: 0;
- }
- }
- }
- </style>
|