|
|
@@ -1,1530 +1,916 @@
|
|
|
<template>
|
|
|
- <view class="details">
|
|
|
- <view class="content">
|
|
|
- <view class="order_status">
|
|
|
- <view class="status_center">
|
|
|
- <view class="status">
|
|
|
- 订单{{details.statusName}}
|
|
|
- <text class="money">
|
|
|
- ¥<text>{{details.dTotalMoney}}</text>
|
|
|
- </text>
|
|
|
- </view>
|
|
|
- <view class="time" v-if="details.nStatus == -3">
|
|
|
- 拒绝原因: {{details.reasonRefusal}}
|
|
|
- </view>
|
|
|
- <view class="time" v-else>
|
|
|
- 上门时间:{{details.reachTime}}
|
|
|
- </view>
|
|
|
- <view class="merchant">
|
|
|
- 服务商家:{{details.js.cNickName}}<br />
|
|
|
- <text>商家电话:{{details.jsPhone}}</text>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="order-detail-page">
|
|
|
+
|
|
|
+ <!-- 高风险区域提示 isHighRiskArea-->
|
|
|
+ <view v-if="orderDetail.isHighRiskArea" class="risk-tip">
|
|
|
+ <view style="width: 28rpx;margin-top: -5rpx;margin-right: 8rpx;">
|
|
|
+ <image src="/static/workbench/warringIcon.png" style="width: 28rpx;height: 28rpx;" mode="widthFill" />
|
|
|
</view>
|
|
|
- <view class="orderinfo">
|
|
|
- <view class="order_box">
|
|
|
- <view class="title"><text></text> 服务项目</view>
|
|
|
- <view class="project" v-for="(item,index) in details.cGoods" :key="index">
|
|
|
- <view class="project_left">
|
|
|
- <img :src="$globalData.publicUrl + item.cCover" alt="" />
|
|
|
- </view>
|
|
|
- <view class="project_right">
|
|
|
- <text class="name">项目名称:{{item.cTitle}}</text>
|
|
|
- <text class="price"> 项目单价:{{item.dPrice}}</text>
|
|
|
- <view class="total">
|
|
|
- 数量:{{item.number}}
|
|
|
- <span class="total_price">¥{{details.totalPrice}}</span>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+
|
|
|
+ <view class="risk-text">{{ orderDetail.fenceIntro }}</view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 待接单状态卡片 -->
|
|
|
+ <view class="status-card">
|
|
|
+ <view class="status-title">
|
|
|
+ <image v-if="orderDetail.orderStatus == 5" src="/static/workbench/finishIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <image v-if="orderDetail.orderStatus == 4" src="/static/workbench/serviceingIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <view v-if="orderDetail.orderStatus == 3" style="display: flex;align-items: center;">
|
|
|
+ <image v-if="orderDetail.execStatus === 0" src="/static/workbench/noGoIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <image v-if="orderDetail.execStatus === 0" src="/static/workbench/noSignIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <image v-if="orderDetail.execStatus === 1" src="/static/workbench/goedIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <image v-if="orderDetail.execStatus === 2" src="/static/workbench/arriveIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+ <image v-if="orderDetail.execStatus === 2" src="/static/workbench/signIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+
|
|
|
</view>
|
|
|
+ <image v-if="orderDetail.orderStatus == 2" src="/static/workbench/orderIcon.png"
|
|
|
+ style="width: 48rpx;height: 48rpx;margin-right: 8rpx;" mode="aspectFill" />
|
|
|
+
|
|
|
|
|
|
- <!-- <view v-for="(item,index) in details.cGoods" :key="index" class="items">
|
|
|
- <view class="img">
|
|
|
- <image :src="$globalData.publicUrl + item.cCover" mode=""></image>
|
|
|
+ <view class="status-text">
|
|
|
+ <view v-if="orderDetail.orderStatus == 2" style="color: #FF531C;">待接单</view>
|
|
|
+
|
|
|
+ <!-- 3:待服务 待出发\待签到\已出发\已到达\已签到 -->
|
|
|
+ <view v-if="orderDetail.orderStatus == 3">
|
|
|
+ <view v-if="orderDetail.execStatus === 0">待出发/待签到</view>
|
|
|
+ <view v-if="orderDetail.execStatus === 1">已出发</view>
|
|
|
+ <view v-if="orderDetail.execStatus === 2">已到达/已签到</view>
|
|
|
</view>
|
|
|
- <view class="right">
|
|
|
- <view class="">
|
|
|
- 项目名称:{{item.cTitle}}
|
|
|
- </view>
|
|
|
- <view class="">
|
|
|
- 项目单价:{{item.dPrice}}
|
|
|
- </view>
|
|
|
- <view class="">
|
|
|
- 数量:{{item.number}}
|
|
|
- </view>
|
|
|
+ <view v-if="orderDetail.orderStatus == 4">服务中</view>
|
|
|
+ <view v-if="orderDetail.orderStatus == 5">已完成</view>
|
|
|
+ <view v-if="orderDetail.orderStatus == 9">
|
|
|
+ <view>售后</view>
|
|
|
+
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view class="conts">合计:{{details.totalPrice}}</view> -->
|
|
|
</view>
|
|
|
- <!-- <view class="box1">
|
|
|
- <view class="imgs">
|
|
|
- <image src="/static/order/deimg.jpg" mode="widthFix" />
|
|
|
- </view>
|
|
|
- <view class="box1cont">
|
|
|
- <view class="title">订单{{details.statusName}}</view>
|
|
|
- <view class="moneytime" v-if="!details.reasonRefusal == ''">
|
|
|
- 拒绝原因: {{details.reasonRefusal}}
|
|
|
- </view>
|
|
|
- <view class="moneytime">
|
|
|
- <view class="time">下单日期: {{dtCreateTime}}</view>
|
|
|
- <view class="money">¥{{details.dTotalMoney}}</view>
|
|
|
+ <view class="count-down" v-if="orderDetail.orderStatus == 5">订单服务已完成,请联系客户给出好评</view>
|
|
|
+ <view v-else class="count-down">倒计时<span class="red-text">1小时59分</span></view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 订单已退金额 -->
|
|
|
+ <view v-if="orderDetail.actualRefundAmount" class="refund-amount" @click="goMoneyRecord">
|
|
|
+ 订单已退金额
|
|
|
+ <view class="refund-amount-text">
|
|
|
+ <view>¥{{ orderDetail.actualRefundAmount }}</view>
|
|
|
+ <image src="/static/workbench/rightIcon.png" style="width: 24rpx;height: 24rpx;" mode="aspectFill" />
|
|
|
+
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 用户信息模块 -->
|
|
|
+ <view class="user-info">
|
|
|
+ <view class="row2">
|
|
|
+ <view style="display: flex;align-items: center;">
|
|
|
+ <image src="/static/workbench/peopleIcon1.png"
|
|
|
+ style="width: 32rpx;height: 32rpx;margin-right: 16rpx;" mode="aspectFill" />
|
|
|
+ <view>
|
|
|
+ {{ orderDetail.contactPersonName }} {{ orderDetail.contactPhoneNumber }}
|
|
|
</view>
|
|
|
+
|
|
|
</view>
|
|
|
- </view> -->
|
|
|
- <view class="orderinfo">
|
|
|
- <view class="order_box order_detail">
|
|
|
- <view class="title"><text></text> 订单信息</view>
|
|
|
- <view class="cont"><text class="left_title">客户姓名:</text>
|
|
|
- <text>{{details.cName}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont">
|
|
|
- <text class="left_title">客户电话:</text>
|
|
|
- <text class="right_content" @click="dial(details.cPhone)">{{details.cPhone}}
|
|
|
- </text>
|
|
|
- </view>
|
|
|
- <view class="cont"><text class="left_title">服务商家:</text> <text
|
|
|
- class="right_content">{{details.js.cNickName}}</text></view>
|
|
|
- <view class="cont" v-if="!dtCreateTime1 == ''"><text class="left_title">下单时间:</text>
|
|
|
- <text>{{dtCreateTime1}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont" v-if="!acceptanceTime == ''"><text class="left_title">接单时间:</text>
|
|
|
- <text>{{acceptanceTime}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont" v-if="!reachTime == ''"><text class="left_title">到达时间:</text> <text>{{reachTime}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont" v-if="!startTime == ''"><text class="left_title">开始服务时间:</text> <text>{{startTime}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont" v-if="!endTime == ''"><text class="left_title">完成订单时间:</text> <text>{{endTime}}</text>
|
|
|
- </view>
|
|
|
- <view class="cont"><text class="left_title">车费详情:</text> <text>{{details.fare || 0}}元</text></view>
|
|
|
- <view class="cont"><text class="left_title">服务地址:</text> <text> {{details.address}}</text></view>
|
|
|
+ <view class="phone-icon">
|
|
|
+ <image src="/static/workbench/phoneIcon.png" style="width: 21.49rpx;height: 21.53rpx;"
|
|
|
+ mode="aspectFill" />
|
|
|
</view>
|
|
|
</view>
|
|
|
-<!-- 暂时注释,无用代码 xueyh-->
|
|
|
-<!-- <view class="sub_box">-->
|
|
|
-<!-- <view class="cancel">-->
|
|
|
-<!-- 取消订单-->
|
|
|
-<!-- </view>-->
|
|
|
-<!-- <!– <view class="edit_time">-->
|
|
|
-<!-- 修改上门时间-->
|
|
|
-<!-- </view> –>-->
|
|
|
-<!-- </view>-->
|
|
|
- <view class="orderinfo" v-if="name == '商户订单'">
|
|
|
- <view class="title">客户标签</view>
|
|
|
- <view class="comment_box">
|
|
|
- <view class="comment" v-for="(item,index) in userCommentList" :key="index">
|
|
|
- {{item.text}}
|
|
|
- </view>
|
|
|
+ <view class="row1" @click="goDetails(item.cId)">
|
|
|
+ <view style="display: flex;align-items: center;">
|
|
|
+ <image src="/static/workbench/clockIcon2.png"
|
|
|
+ style="width: 32rpx;height: 32rpx;margin-right: 16rpx;" mode="aspectFill" />
|
|
|
+ {{ orderDetail.appointmentTimeRange }}
|
|
|
</view>
|
|
|
+
|
|
|
</view>
|
|
|
|
|
|
- <!-- <view style="height: 300rpx;"></view> -->
|
|
|
+
|
|
|
+ <view class="row3">
|
|
|
+ <image src="/static/workbench/localIcon3.png" style="width: 32rpx;height: 32rpx;margin-right: 16rpx;"
|
|
|
+ mode="aspectFill" />
|
|
|
+
|
|
|
+ {{ orderDetail.contactAddressInfo }}
|
|
|
+ <text class="cont">{{ orderDetail.distanceKm }}km</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
- <view v-if="name == '商户订单'">
|
|
|
- <view class="btnbox" v-if="details.nStatus === 0">
|
|
|
- <!-- <view @click="scheduling((details.cId))">了解客户</view> -->
|
|
|
- <view @click="scheduling((details.cId))">接单</view>
|
|
|
- <view @click="refuse((details.cId))">拒绝接单</view>
|
|
|
+
|
|
|
+ <!-- 服务项目卡片 -->
|
|
|
+ <view class="row4">
|
|
|
+ <view>
|
|
|
+ <image :src="orderDetail.projectCover" mode="aspectFill"
|
|
|
+ style="border: 1px solid red;width: 96rpx;height: 96rpx;border-radius: 8rpx;" />
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 1">
|
|
|
- <view @click="depart(details.cId,details.orderNo)">出发</view>
|
|
|
+ <view
|
|
|
+ style="display: flex;flex-direction: column;flex: 1;justify-content: space-between;margin-left: 24rpx;">
|
|
|
+ <view style="display: flex; justify-content: space-between;">
|
|
|
+ <view class="title">{{ orderDetail.projectName }}({{ orderDetail.projectDuration }}分钟)</view>
|
|
|
+ <view class="cont">
|
|
|
+ <view style="font-size: 20rpx;">¥</view>
|
|
|
+ {{ orderDetail.finalAmount }}
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view v-if="orderDetail.orderStatus == 9">
|
|
|
+ <view v-if="orderDetail.afterSalesServiceStatus == '退款中'" class="refundStatus1">退款中
|
|
|
+ </view>
|
|
|
+ <view class="refundStatus2">{{ orderDetail.afterSalesServiceStatus }}
|
|
|
+ </view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 6">
|
|
|
- <view @click="arriveOderLocation(details.cId,details.orderNo)">到达</view>
|
|
|
+
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 费用明细 -->
|
|
|
+ <view class="price-card">
|
|
|
+ <view class="title">
|
|
|
+ <view>订单金额</view>
|
|
|
+ <view style="font-size: 32rpx;font-weight: bold;">¥{{ orderDetail.basePrice }}</view>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 2">
|
|
|
- <view @click="enterService(details.cId,details.orderNo)">开始服务</view>
|
|
|
+ <view class="title">订单总金额 <view class="cont">¥{{ orderDetail.finalAmount }}</view>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 3">
|
|
|
- <view @click="complete(details.cId,details.orderNo)">完成订单</view>
|
|
|
+ <view class="title" v-if="orderDetail.trafficFee">交通费 <view class="cont">¥{{ orderDetail.trafficFee }}
|
|
|
+ </view>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 4">
|
|
|
- <view @click="appraise(details,details.cId,details.orderNo)">评价顾客</view>
|
|
|
+ <view class="title" v-if="orderDetail.couponPrice">优惠券 <view class="cont">¥{{ orderDetail.couponPrice }}
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view v-else>
|
|
|
- <view class="btnbox" v-if="details.nStatus === -1">
|
|
|
- <!-- <view @click="nowYuyue(details.cId,details.dTotalMoney)">支付订单</view> -->
|
|
|
+
|
|
|
+ <!-- 订单基础信息 -->
|
|
|
+ <view class="order-info-card">
|
|
|
+ <view class="info-title">订单信息</view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">订单编号</text>
|
|
|
+ <view class="info-value">
|
|
|
+ <text>{{ orderDetail.orderNo }} </text>
|
|
|
+ <view style="width: 0;height: 24rpx;border: 0.5rpx solid #86909C;margin: 0 8rpx;"></view>
|
|
|
+ <u-icon name="复制" size="12" color="#18BE8D" @click="copyOrderNo"></u-icon>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === -2">
|
|
|
- <view @click="deleteOrder(details.cId)">删除订单</view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">下单时间</text>
|
|
|
+ <text class="info-value">{{ orderDetail.createTime }}</text>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 4">
|
|
|
- <view @click="commentOrder(details.orderNo,details.cJsId,details.cId,details.js.cNickName)">评价订单</view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">付款时间</text>
|
|
|
+ <text class="info-value">{{ orderDetail.paidTime }}</text>
|
|
|
</view>
|
|
|
- <view class="btnbox" v-if="details.nStatus === 3">
|
|
|
- <view @click="bookNow(typelevel,details.cJsId)">升级</view>
|
|
|
- <view @click="bookNow(typeTime,details.cJsId)">加钟</view>
|
|
|
+ <view class="info-row">
|
|
|
+ <text class="info-label">完成时间</text>
|
|
|
+ <text class="info-value">{{ orderDetail.completedTime }}</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <!-- 录音弹框 -->
|
|
|
- <view class="recording" v-if="recordShow">
|
|
|
- <view class="recording_content">
|
|
|
- <view class="btn">
|
|
|
- <view @click="cancle">取消</view>
|
|
|
- <view @click="saveRecord">保存</view>
|
|
|
- </view>
|
|
|
- <view class="content">
|
|
|
- <view class="time">{{recordTime}}</view>
|
|
|
- <view class="Playparse" @click="pauseRecord" v-if="isRecording">
|
|
|
- <image src="/static/identify/rec1.png" mode="" />
|
|
|
- </view>
|
|
|
- <view class="Playparse" @click="startRecord" v-else>
|
|
|
- <image src="/static/identify/rec2.png" mode="" />
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+
|
|
|
+ <!-- 底部占位,避开安全区 -->
|
|
|
+ <view class="footer-placeholder"></view>
|
|
|
+
|
|
|
+ <!-- 底部操作按钮栏 -->
|
|
|
+ <view class="bottom-btn-group" v-if="orderDetail.orderStatus != 5 && orderDetail.orderStatus != 9">
|
|
|
+ <!-- v-if="[0, 1, 2, 3, 6].includes(item.nStatus)" -->
|
|
|
+ <view class="pay" v-if="orderDetail.orderStatus == 2" @click.stop="rejectOrder(orderDetail)">拒接</view>
|
|
|
+ <view class="pay" v-if="[2, 3,].includes(orderDetail.orderStatus)"
|
|
|
+ @click.stop="contactCustomer(orderDetail)">
|
|
|
+ 联系客户</view>
|
|
|
+ <view class="pay main" v-if="orderDetail.orderStatus == 2" @click.stop="acceptOrder(orderDetail)">立即接单
|
|
|
</view>
|
|
|
- </view>
|
|
|
- <!-- 加单弹框 -->
|
|
|
- <view class="dialog" v-if="dialogShow && projects.length>0">
|
|
|
- <view class="closebox" @click="closeDialog"></view>
|
|
|
- <view class="dialog_content">
|
|
|
- <view class="lists" v-for="(item,index) in projects" :key="index">
|
|
|
- <view class="imgs">
|
|
|
- <image :src="$globalData.publicUrl + item.cCover" mode="" />
|
|
|
- </view>
|
|
|
- <view class="right">
|
|
|
- <view class="list_title">
|
|
|
- <view class="title">{{item.cTitle}}</view>
|
|
|
- <view class="time">{{item.nMinute}}分钟</view>
|
|
|
- </view>
|
|
|
- <view class="price">
|
|
|
- <view class="money">¥{{item.dPrice}}</view>
|
|
|
- <view class="counter">
|
|
|
- <view @click="decrease(index)">-</view>
|
|
|
- <text>{{ item.number }}</text>
|
|
|
- <view @click="increase(index)">+</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+
|
|
|
+ <view class="pay" v-if="[4, 3,].includes(orderDetail.orderStatus)" @click.stop="cancelOrder(orderDetail)">
|
|
|
+ 取消订单
|
|
|
</view>
|
|
|
- <view class="now" @click="nowYuyue(details.orderNo,details.cJsId)" ><text>立即预约</text></view>
|
|
|
- </view>
|
|
|
- <view class="refuse_popup" v-if="isRefuse">
|
|
|
- <view class="histroy">
|
|
|
- <view class="title">
|
|
|
- 请输入拒绝接单原因
|
|
|
- </view>
|
|
|
- <view class="center">
|
|
|
- <input type="text" maxlength="10" v-model="reasonRefusal" placeholder="请输入拒绝原因,最多10个" />
|
|
|
- </view>
|
|
|
- <view class="btn_box">
|
|
|
- <view class="btn" @click="cancel">
|
|
|
- 取消
|
|
|
- </view>
|
|
|
- <view class="btn success" @click="refuseSubmit">
|
|
|
- 提交
|
|
|
- </view>
|
|
|
- </view>
|
|
|
+ <view class="pay main main1" v-if="orderDetail.orderStatus == 3 && orderDetail.execStatus == 0"
|
|
|
+ @click.stop="startGoOut(orderDetail)">我已出发/签到</view>
|
|
|
+ <view class="pay main" v-if="orderDetail.orderStatus == 3 && orderDetail.execStatus == 1"
|
|
|
+ @click.stop="arriveSign(orderDetail)">已到达</view>
|
|
|
+ <view class="pay main" v-if="orderDetail.orderStatus == 3 && orderDetail.execStatus == 2"
|
|
|
+ @click.stop="startService(orderDetail)">开始服务</view>
|
|
|
+
|
|
|
+ <view class="pay" v-if="orderDetail.orderStatus == 4" @click.stop="cancelOrder2(orderDetail)">提前结束</view>
|
|
|
+ <view class="pay main" v-if="orderDetail.orderStatus == 4" @click.stop="finishService(orderDetail)">服务完成
|
|
|
</view>
|
|
|
+
|
|
|
</view>
|
|
|
- <view class="arrive" v-if="isArrive">
|
|
|
- <view class="photo_box">
|
|
|
- <view class="title">
|
|
|
- 到达地点
|
|
|
- </view>
|
|
|
- <view class="photo">
|
|
|
- <view class="small_title">
|
|
|
- 请拍摄到达地点主要建筑物
|
|
|
- </view>
|
|
|
- <view class="upload_box">
|
|
|
- <Upload
|
|
|
- :maxCount="1"
|
|
|
- @fileList="onUpload($event, 'arrivalPhoto')"
|
|
|
- />
|
|
|
- </view>
|
|
|
+ <!-- 服务完成弹窗 -->
|
|
|
+ <u-popup :show="showModal2" mode="center" :round="16" :mask-close-able="false">
|
|
|
+ <view class="modal-wrap">
|
|
|
+ <!-- 标题居中 -->
|
|
|
+ <view class="title">提示</view>
|
|
|
+ <!-- 正文 -->
|
|
|
+ <view class="content">
|
|
|
+ 距离服务时间还剩{{ diff }}分钟,确认提前结束订单吗?
|
|
|
</view>
|
|
|
- <view class="btn_box">
|
|
|
- <view class="cancel" @click="isArrive = false">
|
|
|
- 取 消
|
|
|
- </view>
|
|
|
- <view class="btn" @click="arrive">
|
|
|
- 提 交
|
|
|
- </view>
|
|
|
+ <!-- 底部双按钮(必显示) -->
|
|
|
+ <view class="btn-box">
|
|
|
+ <view class="btn left" @click="showModal2 = false">我再想想</view>
|
|
|
+ <view class="btn right" @click="finishService1(orderDetail)">确认结束</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
- <view class="arrive" v-if="isSchedule">
|
|
|
- <view class="photo_box">
|
|
|
- <view class="title">
|
|
|
- 结束原因
|
|
|
+ </u-popup>
|
|
|
+ <!-- 线下签到弹窗 -->
|
|
|
+ <u-popup :show="showSignPopup" :closeOnClickOverlay="true" mode="center" :round="16"
|
|
|
+ @close="showSignPopup = false">
|
|
|
+ <view class="sign-wrap">
|
|
|
+ <view class="sign-title">输入用户手机后4位完成线下签到</view>
|
|
|
+ <view class="sign-input-wrap">
|
|
|
+ <Code ref="codeInput" :maxlength="4" :width="494" type="block" inputType="number"
|
|
|
+ @onChange="onPhoneInput" @onComplete="onSignComplete" />
|
|
|
</view>
|
|
|
- <view class="photo">
|
|
|
- <view class="small_title">
|
|
|
- 提前结束,请填写原因
|
|
|
- </view>
|
|
|
- <!-- <input type="text" placeholder="请输入提前结束原因" v-model="timeoutCause" /> -->
|
|
|
- <view class="textarea">
|
|
|
-
|
|
|
- <textarea placeholder="请输入提前结束原因" type="textarea" v-model="timeoutCause"
|
|
|
- style="width: 100%;height: 100%;font-size: 26rpx;" id="" cols="30" rows="10"></textarea>
|
|
|
- </view>
|
|
|
+ <view v-if="signError" class="sign-error">手机号验证错误,请重试</view>
|
|
|
|
|
|
- </view>
|
|
|
- <view class="btn_box">
|
|
|
- <view class=" cancel" @click="isSchedule = false">
|
|
|
- 取 消
|
|
|
- </view>
|
|
|
- <view class="btn" @click="reasonSubmit">
|
|
|
- 提 交
|
|
|
- </view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
- </view>
|
|
|
+ </u-popup>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
- import {
|
|
|
- getInfo,
|
|
|
- alertOrder,
|
|
|
- engineerDetails,
|
|
|
- addOrder,
|
|
|
- arriveOderLocation,
|
|
|
- updateOrder,
|
|
|
- project,
|
|
|
- enterService,
|
|
|
- depart,
|
|
|
- userComment,
|
|
|
- reach,
|
|
|
- confirm
|
|
|
- } from '@/api/index.js'
|
|
|
- import {
|
|
|
- delOrder,
|
|
|
- takeOrder,
|
|
|
- speedOrder,
|
|
|
- refuseOrder,
|
|
|
- confirmOrder,
|
|
|
- orderDeatails,
|
|
|
- } from '@/api/order.js';
|
|
|
- import Upload from '@/components/upload/index.vue';
|
|
|
- export default {
|
|
|
- components: {
|
|
|
- Upload
|
|
|
+//execStatus
|
|
|
+//'履约状态:0=待出发/待签到,1=已出发,2=已到达/已签到'
|
|
|
+import { orderDetail, acceptOrder, rejectOrder, cancelOrder, arriveSign, startService, finishService, startGoOut, getCustomerPhone } from '@/api/order.js'
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ showSignPopup: false,
|
|
|
+ phoneInputValue: '',
|
|
|
+ signError: '',
|
|
|
+ diff: 0,
|
|
|
+ id: '',
|
|
|
+ orderDetail: {},
|
|
|
+ showModal2: false,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ onLoad(options) {
|
|
|
+ console.log(options.id)
|
|
|
+ this.id = options.id
|
|
|
+ this.getOrderDetail()
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 订单详情
|
|
|
+ getOrderDetail() {
|
|
|
+ orderDetail({
|
|
|
+ orderId: this.id
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.orderDetail = res.data.data
|
|
|
+ // this.orderDetail.orderStatus = 9 //guo
|
|
|
+ // this.orderDetail.execStatus = 0
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
- data() {
|
|
|
- return {
|
|
|
- cAddress: '',
|
|
|
- id: '',
|
|
|
- details: {
|
|
|
- js: {
|
|
|
- cNickName: ''
|
|
|
- }
|
|
|
- },
|
|
|
- dtCreateTime: '',
|
|
|
- dtCreateTime1: '',
|
|
|
- acceptanceTime: '',
|
|
|
- reachTime: '',
|
|
|
- startTime: '',
|
|
|
- endTime: '',
|
|
|
- dTotalMoney: 0,
|
|
|
- money: 0,
|
|
|
- name: '',
|
|
|
- orderShow: true,
|
|
|
- // 录音
|
|
|
- hours: 0, // 小时
|
|
|
- minute: 0, // 分钟
|
|
|
- second: 0, // 秒钟
|
|
|
- recorderManager: null,
|
|
|
- recordTime: '00:00:00',
|
|
|
- isRecording: false,
|
|
|
- isPaused: false,
|
|
|
- audioFilePath: '',
|
|
|
- timer: null,
|
|
|
- recordShow: false,
|
|
|
- // 加单
|
|
|
- dialogShow: false,
|
|
|
- projects: [],
|
|
|
- soundFile: '',
|
|
|
- ifOnceClick: true,
|
|
|
- ordertype: null,
|
|
|
- typelevel: 2, //升级
|
|
|
- typeTime: 1, //加钟
|
|
|
- isRefuse: false,
|
|
|
- reasonRefusal: '', //拒单原因
|
|
|
- refusecId: '',
|
|
|
- userCommentList: [],
|
|
|
- form: {},
|
|
|
- isArrive: false,
|
|
|
- isSchedule: false,
|
|
|
- timeoutCause: ''
|
|
|
- }
|
|
|
+ // 去钱款去向记录
|
|
|
+ goMoneyRecord() {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/order/moneyRecord?id=' + this.id
|
|
|
+ })
|
|
|
},
|
|
|
- onLoad(options) {
|
|
|
- this.id = options.cid
|
|
|
- this.name = options.name
|
|
|
- this.getDetails()
|
|
|
- this.token = uni.getStorageSync('access-token'); // 假设token保存在本地缓存中
|
|
|
-
|
|
|
+ // 立即接单
|
|
|
+ acceptOrder(item) {
|
|
|
+ acceptOrder({
|
|
|
+ id: item.orderId
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.getOrderDetail()
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+ }
|
|
|
+ })
|
|
|
},
|
|
|
- methods: {
|
|
|
- userComment(cOpenId) {
|
|
|
- let data = {}
|
|
|
- data.openId = cOpenId
|
|
|
- userComment(data).then(res => {
|
|
|
- if (res.data.code == 200){
|
|
|
- this.userCommentList = res.data.data.records
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- dial(cPhone) {
|
|
|
- uni.makePhoneCall({
|
|
|
- phoneNumber: cPhone //仅为示例
|
|
|
- })
|
|
|
- },
|
|
|
- deleteOrder(cId) {
|
|
|
- var that = this
|
|
|
- var id = {
|
|
|
- cId: e
|
|
|
- }
|
|
|
- uni.showModal({
|
|
|
- title: '提示',
|
|
|
- content: '确定删除订单吗?',
|
|
|
- showCancel: true, // 是否显示取消按钮
|
|
|
- success(res) {
|
|
|
- if (res.confirm) {
|
|
|
- delOrder(id).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- // that.getList()
|
|
|
- that.$router.go(0)
|
|
|
- uni.showToast({
|
|
|
- title: '删除订单成功!',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- // setTimeout(() => {
|
|
|
- // this.list = []
|
|
|
- // this.getList()
|
|
|
- // }, 100)
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- arriveOderLocation(cId, orderNo) {
|
|
|
- console.log('+++++')
|
|
|
- this.isArrive = true
|
|
|
- this.form.cId = cId
|
|
|
- this.form.orderNo = orderNo
|
|
|
- let that = this
|
|
|
- uni.getLocation({
|
|
|
- type: 'wgs84',
|
|
|
- isHighAccuracy: true,
|
|
|
- accuracy: 'best',
|
|
|
- success: (res) => {
|
|
|
- that.form.arrivalLatitude = res.latitude
|
|
|
- that.form.arrivalLongitude = res.longitude
|
|
|
- },
|
|
|
- fail: (res) => {}
|
|
|
- });
|
|
|
- },
|
|
|
- // upload事件
|
|
|
- onUpload(e, t) {
|
|
|
- this.form[t] = e.map(item => item.url).join();
|
|
|
- },
|
|
|
- //提交到达拍照
|
|
|
- arrive() {
|
|
|
- if (!this.form.arrivalPhoto) {
|
|
|
- uni.showToast({
|
|
|
- title: '请上传到达照片',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- return
|
|
|
- } else {
|
|
|
- reach(this.form).then(res => {
|
|
|
- this.isArrive = false
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.showToast({
|
|
|
- title: '已到达',
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- // this.getList()
|
|
|
- this.$router.go(0)
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- scheduling(cId) {
|
|
|
- var data = {
|
|
|
- cId: cId
|
|
|
- }
|
|
|
- takeOrder(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.showToast({
|
|
|
- title: '已接单',
|
|
|
- })
|
|
|
- this.$router.go()
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- //拒单
|
|
|
- refuse(cId) {
|
|
|
- this.isRefuse = true
|
|
|
- this.refusecId = cId
|
|
|
- },
|
|
|
- refuseSubmit() {
|
|
|
- var data = {
|
|
|
- cId: this.refusecId,
|
|
|
- reasonRefusal: this.reasonRefusal.trim()
|
|
|
- }
|
|
|
- if (data.reasonRefusal == '') {
|
|
|
- uni.showToast({
|
|
|
- title: '拒绝原因不能为空',
|
|
|
- })
|
|
|
- return
|
|
|
- }
|
|
|
- refuseOrder(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.list = []
|
|
|
- uni.showToast({
|
|
|
- title: '已拒绝',
|
|
|
- })
|
|
|
- // this.getList()
|
|
|
- this.isRefuse = false,
|
|
|
- this.reasonRefusal = ''
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- cancel() {
|
|
|
- this.isRefuse = false
|
|
|
- this.reasonRefusal = ''
|
|
|
- },
|
|
|
- //出发
|
|
|
- depart(cId, orderNo) {
|
|
|
- let that = this
|
|
|
- uni.getLocation({
|
|
|
- type: 'wgs84',
|
|
|
- isHighAccuracy: true,
|
|
|
- accuracy: 'best',
|
|
|
- success: (res) => {
|
|
|
- let data = {
|
|
|
- cId: cId,
|
|
|
- departLatitude: res.latitude,
|
|
|
- departLongitude: res.longitude
|
|
|
- }
|
|
|
- depart(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.showToast({
|
|
|
- title: '已出发',
|
|
|
- })
|
|
|
- that.getList()
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- })
|
|
|
- that.getList()
|
|
|
+ // 拒绝订单
|
|
|
+ rejectOrder(item) {
|
|
|
+ uni.showModal({
|
|
|
+ title: '确认拒绝',
|
|
|
+ content: '确定要拒绝该订单吗?',
|
|
|
+ success: (res) => {
|
|
|
+ if (res.confirm) {
|
|
|
+ rejectOrder({
|
|
|
+ id: item.orderId
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.getOrderDetail()
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
}
|
|
|
})
|
|
|
- },
|
|
|
- fail: (res) => {}
|
|
|
- });
|
|
|
- },
|
|
|
- // complete(cId, orderNo) {
|
|
|
- // var id = {
|
|
|
- // cId: cId,
|
|
|
- // orderNo: orderNo
|
|
|
- // }
|
|
|
- // let that = this
|
|
|
- // uni.showModal({
|
|
|
- // title: '提示',
|
|
|
- // content: '确认服务完成?',
|
|
|
- // success: function(res) {
|
|
|
- // if (res.confirm) {
|
|
|
-
|
|
|
- // confirmOrder(id).then(res => {
|
|
|
- // if (res.data.code == 200) {
|
|
|
- // this.$router.go(0)
|
|
|
- // // that.list =[]
|
|
|
- // uni.showToast({
|
|
|
- // title: '已完成',
|
|
|
- // })
|
|
|
- // uni.navigateTo({
|
|
|
- // url: '/pages/my/js_order'
|
|
|
- // })
|
|
|
- // that.getList()
|
|
|
- // } else {
|
|
|
- // uni.showToast({
|
|
|
- // title: res.data.msg,
|
|
|
- // })
|
|
|
- // }
|
|
|
- // })
|
|
|
-
|
|
|
- // // this.list = []
|
|
|
- // // this.getList();
|
|
|
-
|
|
|
- // }
|
|
|
- // }
|
|
|
- // });
|
|
|
- // },
|
|
|
- //完成订单
|
|
|
- complete(cId, orderNo) {
|
|
|
- console.log(this.details)
|
|
|
- this.cId = cId
|
|
|
- this.orderNo = orderNo
|
|
|
- const now = new Date(+new Date() + 8 * 3600 * 1000);
|
|
|
- const isoDateTime = now.toISOString(); // ISO 8601 格式
|
|
|
- let nowtime = new Date(isoDateTime.slice(0, 19))
|
|
|
- let starttime = new Date(this.details.startTime) //开始时间
|
|
|
- let differenceInMs = nowtime - starttime //剩余时间
|
|
|
- let differenceInMinutes = differenceInMs / (1000 * 60);
|
|
|
- if (differenceInMinutes > this.details.cGoods[0].nMinute) {
|
|
|
- var id = {
|
|
|
- cId: cId,
|
|
|
- orderNo: orderNo
|
|
|
}
|
|
|
- let that = this
|
|
|
- uni.showModal({
|
|
|
- title: '提示',
|
|
|
- content: '确认服务完成?',
|
|
|
- success: function(res) {
|
|
|
- if (res.confirm) {
|
|
|
- confirmOrder(id).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- // this.list =[]
|
|
|
- uni.showToast({
|
|
|
- title: '已完成',
|
|
|
- })
|
|
|
- // location.reload(true);
|
|
|
- that.$router.go(0)
|
|
|
- // this.getList()
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- })
|
|
|
- // location.reload(true);
|
|
|
- // that.$router.go(0)
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- this.isSchedule = true
|
|
|
}
|
|
|
- },
|
|
|
- //填写提前结束原因
|
|
|
- reasonSubmit() {
|
|
|
- let data = {}
|
|
|
- data.cId = this.cId
|
|
|
- data.orderNo = this.orderNo
|
|
|
- data.timeoutCause = this.timeoutCause
|
|
|
- if (data.timeoutCause == '') {
|
|
|
- uni.showToast({
|
|
|
- icon: 'none',
|
|
|
- title: '请填写提前完成原因',
|
|
|
- })
|
|
|
- return
|
|
|
- } else {
|
|
|
+ });
|
|
|
|
|
|
- confirm(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.showToast({
|
|
|
- title: '已完成',
|
|
|
- })
|
|
|
- location.reload(true);
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- enterService(cId, orderNo) {
|
|
|
- var data = {
|
|
|
- cId: cId
|
|
|
- }
|
|
|
- enterService(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- // this.list = []
|
|
|
- // this.getList()
|
|
|
- this.getDetails()
|
|
|
- uni.showToast({
|
|
|
- title: '服务已开始',
|
|
|
- })
|
|
|
- this.$router.go(0)
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- //报警
|
|
|
- alert(orderNo) {
|
|
|
- var data = {
|
|
|
- orderNo: orderNo
|
|
|
- }
|
|
|
- alertOrder(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.showToast({
|
|
|
- title: '已报警!',
|
|
|
- })
|
|
|
- this.getDetails()
|
|
|
- } else {
|
|
|
- uni.showToast({
|
|
|
- title: res.data.msg,
|
|
|
- icon: 'none'
|
|
|
- })
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- commentOrder(orderNo, cJsId, cId, cName) {
|
|
|
- uni.navigateTo({
|
|
|
- url: './comment?orderNo=' + orderNo + '&cJsId=' + cJsId + '&cId=' + cId + '&cName=' + cName
|
|
|
- })
|
|
|
- },
|
|
|
- //获取订单详情
|
|
|
- getDetails() {
|
|
|
- var id = {
|
|
|
- cId: this.id
|
|
|
+ },
|
|
|
+ // 联系客户
|
|
|
+ contactCustomer(item) {
|
|
|
+ getCustomerPhone({
|
|
|
+ orderId: item.orderId,
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+ } else {
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
}
|
|
|
- orderDeatails(id).then(res => {
|
|
|
- var charToRemove = "T";
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.details = res.data.data.records[0],
|
|
|
- this.userComment(this.details.cOpenId)
|
|
|
- this.dtCreateTime = res.data.data.records[0].dtCreateTime.slice(0, 10),
|
|
|
- this.dtCreateTime1 = res.data.data.records[0].dtCreateTime.replace(charToRemove, ' '),
|
|
|
-
|
|
|
- // let acceptancetime = res.data.data.records[0].dtCreateTime.slice(0, 10)
|
|
|
- this.acceptanceTime = this.details.acceptanceTime ? this.details.acceptanceTime.replace(charToRemove, ' ') : ''
|
|
|
-
|
|
|
- this.reachTime = this.details.reachTime ? this.details.reachTime.replace(charToRemove, ' ') : ''
|
|
|
- this.startTime = this.details.startTime ? this.details.startTime.replace(charToRemove, ' ') : ''
|
|
|
- this.endTime = this.details.endTime ? this.details.endTime.replace(charToRemove, ' ') : ''
|
|
|
- if(this.details.cAddress){
|
|
|
- this.cAddress = JSON.parse(this.details.cAddress).address + '(' + JSON.parse(this.details.cAddress).address + ')' + this.details.atlasAdd
|
|
|
- }
|
|
|
- var status = this.details.nStatus ? this.details.nStatus : 0
|
|
|
- if (status == 2 || status == 3) {
|
|
|
- // this.setData({
|
|
|
- this.orderShow = true
|
|
|
- // })
|
|
|
- } else {
|
|
|
- // this.setData({
|
|
|
- this.orderShow = false
|
|
|
- // })
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
- bookNow(type, id) {
|
|
|
- this.ordertype = type
|
|
|
- this.projects = []
|
|
|
- var id = {
|
|
|
- id: id
|
|
|
+ }).catch(err => {
|
|
|
+ console.log(err)
|
|
|
+ })
|
|
|
+ //uni.showToast({ title: '联系客户', icon: 'none' });
|
|
|
+ },
|
|
|
+ // 取消订单
|
|
|
+ cancelOrder(item) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/order/cancelOrder?orderId=' + item.orderId + '&orderStatus=' + item.orderStatus
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
+ // 我已出发/签到
|
|
|
+ startGoOut(item) {
|
|
|
+ startGoOut({
|
|
|
+ orderId: item.orderId,
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.$refs.paging.reload();
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+ } else {
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
}
|
|
|
- engineerDetails(id).then(res => {
|
|
|
- res.data.data.projects.forEach(element => {
|
|
|
- if ((this.details.dTotalMoney < element.dPrice) && type == 2) {
|
|
|
- element.number = 0
|
|
|
- this.projects.push(element)
|
|
|
- }else if(type == 1){
|
|
|
- element.number = 0
|
|
|
- this.projects.push(element)
|
|
|
- }
|
|
|
- });
|
|
|
- if(this.projects.length == 0){
|
|
|
- uni.showToast({
|
|
|
- icon:'none',
|
|
|
- title:'暂无可升级订单'
|
|
|
- })
|
|
|
- }
|
|
|
- // details:res.data.data,
|
|
|
- // this.projects = res.data.data.projects,
|
|
|
- console.log(this.projects)
|
|
|
- this.dialogShow = true,
|
|
|
- this.orderId = res.data.data.cId
|
|
|
- })
|
|
|
- },
|
|
|
- //升级订单+1
|
|
|
- increase(idx) {
|
|
|
- this.projects[idx].number++;
|
|
|
- },
|
|
|
- decrease(idx) {
|
|
|
- this.projects[idx].number--;
|
|
|
- },
|
|
|
- nowYuyue(orderNo, cJsId) {
|
|
|
- var that = this
|
|
|
- // if()
|
|
|
- const allCountsZero = this.projects.every(item => item.number === 0);
|
|
|
- if (allCountsZero) {
|
|
|
- wx.showToast({
|
|
|
- title: '请先选择项目!',
|
|
|
- duration: 1000,
|
|
|
- icon: 'none',
|
|
|
- })
|
|
|
- return
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 我已到
|
|
|
+ arriveSign() {
|
|
|
+ this.showSignPopup = true;
|
|
|
+ this.phoneInputValue = '';
|
|
|
+ this.signError = '';
|
|
|
+ // 清空验证码输入
|
|
|
+ this.$nextTick(() => {
|
|
|
+ if (this.$refs.codeInput) {
|
|
|
+ this.$refs.codeInput.clear();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 监听输入(yi-code组件触发)
|
|
|
+ onPhoneInput(e) {
|
|
|
+ // 兼容不同调用方式
|
|
|
+ const value = e.detail ? e.detail.value : e;
|
|
|
+ // 过滤非数字字符
|
|
|
+ const filteredValue = String(value || '').replace(/[^0-9]/g, '');
|
|
|
+ this.phoneInputValue = filteredValue;
|
|
|
+ this.signError = '';
|
|
|
+ },
|
|
|
+ // 输入完成
|
|
|
+ onSignComplete(value) {
|
|
|
+ this.phoneInputValue = value;
|
|
|
+ arriveSign({
|
|
|
+ orderId: this.orderDetail.orderId,
|
|
|
+ phoneTail: this.phoneInputValue,//手机号后4位
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.showSignPopup = false;
|
|
|
+ this.$refs.paging.reload();
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
} else {
|
|
|
- // console.log(this.data.projects,"project")
|
|
|
- var list = []
|
|
|
- this.projects.forEach(element => {
|
|
|
- if (element.number > 0) {
|
|
|
- element.sum = element.number * element.dPrice
|
|
|
- list.push(element)
|
|
|
- }
|
|
|
- });
|
|
|
- var total = 0
|
|
|
- for (let i = 0; i < list.length; i++) {
|
|
|
- total += list[i].sum;
|
|
|
- }
|
|
|
- var data = {
|
|
|
- orderType: this.ordertype,
|
|
|
- cJsId: cJsId,
|
|
|
- cGoods: list,
|
|
|
- cOpenId: uni.getStorageSync('wx_copenid'),
|
|
|
- dTotalMoney: total,
|
|
|
- parentNo: orderNo
|
|
|
- }
|
|
|
- speedOrder(data).then(res => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- uni.navigateTo({
|
|
|
- url: '../identify/pay_order?orderNo=' + res.data.data.orderNo,
|
|
|
- })
|
|
|
- } else {}
|
|
|
- })
|
|
|
+ this.signError = res.data.msg;
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+
|
|
|
}
|
|
|
- },
|
|
|
- closeDialog() {
|
|
|
- this.dialogShow = false
|
|
|
- },
|
|
|
- appraise(details, cId, orderNo) {
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 开始服务
|
|
|
+ startService(item) {
|
|
|
+ if (item.projectType == 1) {
|
|
|
uni.navigateTo({
|
|
|
- url: './comment?orderNo=' + orderNo + '&cJsId=' + details.cJsId + '&name=' + details.js.cName + '&cId=' +
|
|
|
- details.cId + '&title=' + '商户' + '&cOpenId=' + details.cOpenId
|
|
|
+ url: '/pages/order/businessFormal?orderId=' + item.orderId
|
|
|
})
|
|
|
+ return
|
|
|
}
|
|
|
- }
|
|
|
- }
|
|
|
-</script>
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
- .details {
|
|
|
- position: relative;
|
|
|
- height: 100vh;
|
|
|
- overflow: hidden;
|
|
|
- background: #F7FFFF;
|
|
|
-
|
|
|
- .content {
|
|
|
- height: 100vh;
|
|
|
- overflow-y: scroll;
|
|
|
-
|
|
|
- .order_status {
|
|
|
- width: 100%;
|
|
|
- height: 364rpx;
|
|
|
- background: linear-gradient(90deg, #91F5F0 0%, #13E4DA 100%);
|
|
|
- padding: 28rpx 32rpx 24rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .status_center {
|
|
|
- width: 100%;
|
|
|
- background: #E5FDFB;
|
|
|
- box-shadow: 0px 4rpx 12rpx 0px rgba(88, 209, 187, 0.1);
|
|
|
- border-radius: 16rpx;
|
|
|
- border: 2rpx solid #BCE7E5;
|
|
|
- padding: 24rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .status {
|
|
|
- font-weight: 700;
|
|
|
- font-size: 38rpx;
|
|
|
- color: #2F3437;
|
|
|
- line-height: 45rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
-
|
|
|
- .money {
|
|
|
- font-weight: 400;
|
|
|
- font-size: 28rpx;
|
|
|
- color: #F53E54;
|
|
|
- // line-height: 24rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- text {
|
|
|
- font-weight: 700;
|
|
|
- font-size: 44rpx;
|
|
|
- color: #F53E54;
|
|
|
- // line-height: 24rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .time {
|
|
|
- width: 100%;
|
|
|
- margin-top: 12rpx;
|
|
|
- font-size: 30rpx;
|
|
|
- color: #069E96;
|
|
|
- line-height: 35rpx;
|
|
|
- margin-bottom: 20rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .merchant {
|
|
|
- width: 100%;
|
|
|
- height: 136rpx;
|
|
|
- background: #FFFFFF;
|
|
|
- box-shadow: 0px 4rpx 12rpx 0px rgba(88, 209, 187, 0.1);
|
|
|
- border-radius: 16rpx;
|
|
|
- padding: 20rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- font-size: 28rpx;
|
|
|
- color: #333333;
|
|
|
-
|
|
|
- text {
|
|
|
- display: inline-block;
|
|
|
- margin-top: 16rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //陪玩开始服务
|
|
|
+ startService({
|
|
|
+ orderId: item.orderId,
|
|
|
+ imageUrls: []
|
|
|
+ }).then(res => {
|
|
|
+ console.log(res)
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.getOrderDetail()
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 服务完成
|
|
|
+ finishService(item) {
|
|
|
+
|
|
|
+ const diff = new Date(item.appointmentEndTime).getTime() - new Date().getTime();
|
|
|
+ this.diff = Math.floor(diff / (1000 * 60));
|
|
|
+ if (this.diff > 6) {
|
|
|
+ this.selectOrderDetail = item
|
|
|
+ this.showModal2 = true
|
|
|
+ return
|
|
|
}
|
|
|
+ this.finishService1(item)
|
|
|
|
|
|
- .box1 {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- padding: 30rpx;
|
|
|
- border-bottom: 20rpx solid #fcfcfc;
|
|
|
-
|
|
|
- .imgs {
|
|
|
- border-radius: 10rpx;
|
|
|
- height: 180rpx;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- image {
|
|
|
- width: 280rpx;
|
|
|
- height: 180rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .box1cont {
|
|
|
- flex: 1;
|
|
|
- padding-left: 30rpx;
|
|
|
-
|
|
|
- .title {
|
|
|
- font-size: 36rpx;
|
|
|
- font-weight: bold;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
-
|
|
|
- .moneytime {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- padding-top: 40rpx;
|
|
|
- color: #808080;
|
|
|
-
|
|
|
- .money {
|
|
|
- font-size: 32rpx;
|
|
|
- color: #ff0000;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
-
|
|
|
- .time {
|
|
|
- // color: #333;
|
|
|
- font-size: 26rpx;
|
|
|
- }
|
|
|
+ },
|
|
|
+ // 确认提前结束订单
|
|
|
+ finishService1(item) {
|
|
|
+ finishService({
|
|
|
+ orderId: item.orderId,
|
|
|
+ }).then(res => {
|
|
|
+ if (res.data.code === 200) {
|
|
|
+ this.getOrderDetail()
|
|
|
+ uni.showToast({ title: res.data.msg, icon: 'none' });
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 提前结束
|
|
|
+ cancelOrder2(item) {
|
|
|
+ uni.showModal({
|
|
|
+ title: '提示',
|
|
|
+ content: '确定要提前结束该订单吗?',
|
|
|
+ success: (res) => {
|
|
|
+ if (res.confirm) {
|
|
|
+ this.finishService(item)
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- .orderinfo {
|
|
|
- width: 100%;
|
|
|
- margin-top: 28rpx;
|
|
|
- padding: 0px 32rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .order_box {
|
|
|
- width: 100%;
|
|
|
- background: linear-gradient(35deg, #FFFFFF 0%, #E4FFFD 100%);
|
|
|
- box-shadow: 0px 4rpx 12rpx 0px rgba(88, 209, 187, 0.1);
|
|
|
- border-radius: 16rpx;
|
|
|
- padding: 24rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .title {
|
|
|
- font-size: 32rpx;
|
|
|
- font-weight: bold;
|
|
|
- color: #2F3437;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- text {
|
|
|
- display: inline-block;
|
|
|
- width: 6rpx;
|
|
|
- height: 34rpx;
|
|
|
- background-color: #20CBC2;
|
|
|
- margin-right: 12rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .project {
|
|
|
- height: 160rpx;
|
|
|
- margin-top: 24rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
-
|
|
|
- .project_left {
|
|
|
- margin-right: 40rpx;
|
|
|
-
|
|
|
- img {
|
|
|
- width: 160rpx;
|
|
|
- height: 160rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .project_right {
|
|
|
- flex: 1;
|
|
|
- height: 100%;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: space-between;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 复制订单号
|
|
|
+ copyOrderNo() {
|
|
|
+ uni.setClipboardData({
|
|
|
+ data: '5017036467099547354',
|
|
|
+ success: () => {
|
|
|
+ uni.showToast({ title: '复制成功' });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
|
|
|
- text {
|
|
|
- display: block;
|
|
|
- }
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
|
|
|
- .name {
|
|
|
- font-weight: 700;
|
|
|
- font-size: 28rpx;
|
|
|
- color: #333333;
|
|
|
- line-height: 33rpx;
|
|
|
- }
|
|
|
+<style scoped lang="scss">
|
|
|
+// 线下签到弹窗
|
|
|
+.sign-wrap {
|
|
|
+ width: 650rpx;
|
|
|
+ background: #fff;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 48rpx;
|
|
|
+
|
|
|
+ .sign-error {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #F53F3F;
|
|
|
+ }
|
|
|
|
|
|
- .price {
|
|
|
- font-size: 28rpx;
|
|
|
- color: #666666;
|
|
|
- line-height: 33rpx;
|
|
|
- margin: 16rpx 0px;
|
|
|
- }
|
|
|
|
|
|
- .total {
|
|
|
- width: 100%;
|
|
|
- font-size: 28rpx;
|
|
|
- color: #666666;
|
|
|
- line-height: 33rpx;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
-
|
|
|
- .total_price {
|
|
|
- display: inline-block;
|
|
|
- font-weight: 700;
|
|
|
- font-size: 32rpx;
|
|
|
- color: #333333;
|
|
|
- line-height: 38rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- .order_detail {
|
|
|
- background: #fff;
|
|
|
- }
|
|
|
+ .sign-title {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 30rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ text-align: left;
|
|
|
+ margin-bottom: 32rpx;
|
|
|
+ }
|
|
|
|
|
|
- .orderA {
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
- align-items: center;
|
|
|
- padding-top: 30rpx;
|
|
|
+ .sign-input-wrap {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.user-info {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+
|
|
|
+ .row1 {
|
|
|
+ margin-top: 16rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
+ text-align: left;
|
|
|
+
|
|
|
+
|
|
|
+ .status {
|
|
|
+ background: #FFF0ED;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
+
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #FF531C;
|
|
|
+ line-height: 34rpx;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
|
|
|
- view {
|
|
|
- font-size: 32rpx;
|
|
|
+ .status1 {
|
|
|
+ background: #FFF7E7;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
|
|
|
- image {
|
|
|
- width: 80rpx;
|
|
|
- height: 80rpx;
|
|
|
- margin-right: 30rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #FF7D00;
|
|
|
+ line-height: 34rpx;
|
|
|
|
|
|
+ }
|
|
|
|
|
|
+ .status2 {
|
|
|
+ background: #E8FFEA;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
|
|
|
- .conts_price {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- }
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #00B42A;
|
|
|
+ line-height: 34rpx;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
|
|
|
- .cont {
|
|
|
- font-size: 28rpx;
|
|
|
- line-height: 40rpx;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- margin-top: 20rpx;
|
|
|
|
|
|
- .left_title {
|
|
|
- width: 170rpx;
|
|
|
- font-size: 28rpx;
|
|
|
- }
|
|
|
+ .status3 {
|
|
|
+ background: #F7F8FA;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
|
|
|
- text {
|
|
|
- // width: 498rpx;
|
|
|
- // color: #dddbdb;
|
|
|
- padding-left: 20rpx;
|
|
|
- // font-size: 32rpx;
|
|
|
- }
|
|
|
- }
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #4E5969;
|
|
|
+ line-height: 34rpx;
|
|
|
+ text-align: center;
|
|
|
+ }
|
|
|
|
|
|
- .items {
|
|
|
- border-bottom: 1px solid #f9f9f9;
|
|
|
- padding: 20rpx 0;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
-
|
|
|
- .img {
|
|
|
- width: 250rpx;
|
|
|
- height: 200rpx;
|
|
|
- border-radius: 20rpx;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- image {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- .right {
|
|
|
- height: 200rpx;
|
|
|
- flex: 1;
|
|
|
- padding-left: 50rpx;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: space-between;
|
|
|
- }
|
|
|
- }
|
|
|
+ .row2 {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
|
|
|
- .conts {
|
|
|
- font-size: 36rpx;
|
|
|
- color: #ff0000;
|
|
|
- font-weight: bold;
|
|
|
- padding: 30rpx 0;
|
|
|
- text-align: right;
|
|
|
- }
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
+ text-align: left;
|
|
|
|
|
|
- .comment_box {
|
|
|
- display: flex;
|
|
|
- padding: 10rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .comment {
|
|
|
- background-color: #ccc;
|
|
|
- margin-right: 10px;
|
|
|
- padding: 10rpx;
|
|
|
- border-radius: 10rpx;
|
|
|
- font-size: 30rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .phone-icon {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ width: 40rpx;
|
|
|
+ height: 40rpx;
|
|
|
+ border-radius: 40rpx 40rpx 40rpx 40rpx;
|
|
|
+ border: 1rpx solid #86909C;
|
|
|
}
|
|
|
|
|
|
- .btnbox {
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- left: 0;
|
|
|
- width: 100%;
|
|
|
- height: 120rpx;
|
|
|
- background-color: #fff;
|
|
|
- border-top: 1px solid #fdfdfd;
|
|
|
- // padding-top: 20rpx;
|
|
|
+ .type {
|
|
|
+ margin-left: 16rpx;
|
|
|
display: flex;
|
|
|
- justify-content: space-around;
|
|
|
align-items: center;
|
|
|
-
|
|
|
- view {
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- font-size: 30rpx;
|
|
|
- background-color: #2ebdd9;
|
|
|
- color: #fff;
|
|
|
- // width: 47%;
|
|
|
- height: 50%;
|
|
|
- // margin:0 auto;
|
|
|
- padding: 15rpx 30px;
|
|
|
- border-radius: 50px;
|
|
|
- }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- .recording {
|
|
|
- background-color: rgba(0, 0, 0, .5);
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
-
|
|
|
- .recording_content {
|
|
|
- width: 100%;
|
|
|
- height: 60%;
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- background-color: #fff;
|
|
|
-
|
|
|
- .btn {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- padding: 20rpx 30rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .time {
|
|
|
- font-size: 70rpx;
|
|
|
- font-weight: bold;
|
|
|
- text-align: center;
|
|
|
- padding: 200rpx 0;
|
|
|
- }
|
|
|
-
|
|
|
- .Playparse {
|
|
|
- text-align: center;
|
|
|
-
|
|
|
- image {
|
|
|
- width: 80rpx;
|
|
|
- height: 80rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ .row3 {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-top: 16rpx;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+
|
|
|
+ .cont {
|
|
|
+ margin-left: 40rpx;
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #1D2129;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- .dialog {
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- background: rgba(0, 0, 0, .5);
|
|
|
- z-index: 10;
|
|
|
- transition: transform 0.3s ease-out;
|
|
|
-
|
|
|
- .closebox {
|
|
|
- height: calc(50vh - 60rpx);
|
|
|
- width: 100%;
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- .now {
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- left: 0;
|
|
|
- width: 100%;
|
|
|
- text-align: center;
|
|
|
- height: 100rpx;
|
|
|
- background-color: #f7f8fa;
|
|
|
- padding-top: 10rpx;
|
|
|
-
|
|
|
- text {
|
|
|
- display: inline-block;
|
|
|
- height: 80rpx;
|
|
|
- line-height: 80rpx;
|
|
|
- width: 90%;
|
|
|
- background-color: #2cb8d4;
|
|
|
- color: #fff;
|
|
|
- border-radius: 50rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- .dialog_content {
|
|
|
- background-color: #fff;
|
|
|
- position: absolute;
|
|
|
- bottom: 0;
|
|
|
- width: calc(100% - 60rpx);
|
|
|
- height: 50vh;
|
|
|
- overflow-y: scroll;
|
|
|
- border-top-left-radius: 20rpx;
|
|
|
- border-top-right-radius: 20rpx;
|
|
|
- padding: 30rpx;
|
|
|
- background-color: #f3f3f3;
|
|
|
- padding-bottom: 100rpx;
|
|
|
-
|
|
|
- .lists {
|
|
|
- background-color: #fff;
|
|
|
- margin-bottom: 20rpx;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- padding: 20rpx 10rpx;
|
|
|
- border-radius: 10rpx;
|
|
|
-
|
|
|
- .imgs {
|
|
|
- width: 240rpx;
|
|
|
- height: 160rpx;
|
|
|
- border-radius: 20rpx;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- image {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- }
|
|
|
- }
|
|
|
+.row4 {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+ display: flex;
|
|
|
+ height: 160rpx;
|
|
|
|
|
|
- .right {
|
|
|
- flex: 1;
|
|
|
- padding-left: 30rpx;
|
|
|
+ .title {
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 30rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ }
|
|
|
|
|
|
- .list_title {
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
- align-items: center;
|
|
|
+ .cont {
|
|
|
+ display: flex;
|
|
|
+ align-items: baseline;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.refundStatus1 {
|
|
|
+ margin-top: 16rpx;
|
|
|
+ width: 96rpx;
|
|
|
+ height: 36rpx;
|
|
|
+ background: #FFF2E5;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
+ border: 1rpx solid #FF7D00;
|
|
|
+
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #FF7D00;
|
|
|
+ text-align: center;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+.refundStatus2 {
|
|
|
+ width: 96rpx;
|
|
|
+ height: 36rpx;
|
|
|
+ background: #FFF2E5;
|
|
|
+ border-radius: 4rpx 4rpx 4rpx 4rpx;
|
|
|
+ border: 1rpx solid #F53F3F;
|
|
|
+
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #F53F3F;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+.order-detail-page {
|
|
|
+ background-color: #f5f5f5;
|
|
|
+ min-height: 100vh;
|
|
|
+}
|
|
|
+
|
|
|
+// 风险提示栏
|
|
|
+.risk-tip {
|
|
|
+ padding: 26rpx 32rpx;
|
|
|
+ background: #FFF8EC;
|
|
|
+ border-radius: 0rpx 0rpx 0rpx 0rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: flex-start;
|
|
|
+
|
|
|
+ .risk-text {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #FF7D00;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 待接单状态卡片
|
|
|
+.status-card {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+
|
|
|
+ .status-title {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+
|
|
|
+ .status-text {
|
|
|
+ font-size: 40rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- .title {
|
|
|
- font-size: 34rpx;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
+ .count-down {
|
|
|
+ margin-top: 16rpx;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #86909C;
|
|
|
|
|
|
- .time {
|
|
|
- font-size: 24rpx;
|
|
|
- }
|
|
|
- }
|
|
|
+ .red-text {
|
|
|
+ color: #F53F3F;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 订单已退金额
|
|
|
+.refund-amount {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
+
|
|
|
+ .refund-amount-text {
|
|
|
+ font-weight: bold;
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ line-height: 24rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
|
|
|
- .price {
|
|
|
- padding-top: 50rpx;
|
|
|
- display: flex;
|
|
|
- justify-content: space-between;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 用户信息卡片
|
|
|
+.user-info-card {
|
|
|
+ background: #fff;
|
|
|
+ margin: 0 20rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 24rpx;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20rpx;
|
|
|
+
|
|
|
+ .user-row,
|
|
|
+ .time-row,
|
|
|
+ .address-row {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 12rpx;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
|
|
|
- .money {
|
|
|
- font-size: 42rpx;
|
|
|
- color: #e61b1b;
|
|
|
- font-weight: bold;
|
|
|
- }
|
|
|
+ .address-text {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
|
|
|
- .counter {
|
|
|
- display: flex;
|
|
|
-
|
|
|
- view {
|
|
|
- width: 60rpx;
|
|
|
- height: 60rpx;
|
|
|
- line-height: 60rpx;
|
|
|
- background-color: #f7f8fa;
|
|
|
- text-align: center;
|
|
|
- border-radius: 60rpx;
|
|
|
- font-size: 50rpx;
|
|
|
- }
|
|
|
-
|
|
|
- text {
|
|
|
- width: 100rpx;
|
|
|
- text-align: center;
|
|
|
- line-height: 60rpx;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .distance {
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 服务项目卡片
|
|
|
+.service-card {
|
|
|
+ background: #fff;
|
|
|
+ margin: 20rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ padding: 24rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ .service-left {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 20rpx;
|
|
|
+
|
|
|
+ .service-img {
|
|
|
+ width: 120rpx;
|
|
|
+ height: 120rpx;
|
|
|
+ border-radius: 8rpx;
|
|
|
}
|
|
|
|
|
|
- .refuse_popup {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- left: 0;
|
|
|
- background-color: rgba(0, 0, 0, 0.5);
|
|
|
+ .service-info {
|
|
|
display: flex;
|
|
|
- justify-content: center;
|
|
|
-
|
|
|
- .histroy {
|
|
|
- width: 70%;
|
|
|
- height: 160px;
|
|
|
- margin-top: 500rpx;
|
|
|
- background-color: #fff;
|
|
|
- border-radius: 10px;
|
|
|
- padding: 20px;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .title {
|
|
|
- width: 100%;
|
|
|
- // padding: 10px ;
|
|
|
- text-align: center;
|
|
|
- box-sizing: border-box;
|
|
|
- margin-bottom: 50rpx;
|
|
|
- }
|
|
|
-
|
|
|
- .center {
|
|
|
- margin-bottom: 20px;
|
|
|
-
|
|
|
- input {
|
|
|
- display: block;
|
|
|
- border-bottom: 1px solid #ccc;
|
|
|
- }
|
|
|
- }
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 8rpx;
|
|
|
|
|
|
- .btn_box {
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- justify-content: space-around;
|
|
|
-
|
|
|
- .btn {
|
|
|
- width: 30%;
|
|
|
- height: 30px;
|
|
|
- background-color: #c8c9cc;
|
|
|
- text-align: center;
|
|
|
- line-height: 30px;
|
|
|
- border-radius: 5px;
|
|
|
- }
|
|
|
-
|
|
|
- .success {
|
|
|
- background: linear-gradient(to right, #35c99d, #27aea7);
|
|
|
- color: #fff;
|
|
|
- }
|
|
|
- }
|
|
|
+ .service-name {
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- .arrive {
|
|
|
- width: 100%;
|
|
|
- height: 100%;
|
|
|
- background-color: rgba(0, 0, 0, 0.5);
|
|
|
- position: fixed;
|
|
|
- top: 0;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
+ .service-price {
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 费用明细
|
|
|
+.price-card {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
+
|
|
|
+
|
|
|
+ .title {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 16rpx;
|
|
|
+ }
|
|
|
|
|
|
- .photo_box {
|
|
|
- width: 630rpx;
|
|
|
- // height: 652rpx;
|
|
|
- background-color: #fff;
|
|
|
- // padding: 50rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- border-radius: 24rpx;
|
|
|
- overflow: hidden;
|
|
|
-
|
|
|
- .title {
|
|
|
- width: 100%;
|
|
|
- height: 92rpx;
|
|
|
- background: #E6F8F7;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
+ .title:last-child {
|
|
|
+ margin-bottom: 0;
|
|
|
+ }
|
|
|
|
|
|
- .photo {
|
|
|
- width: 100%;
|
|
|
- flex: 1;
|
|
|
- overflow: hidden;
|
|
|
- padding: 40rpx 32rpx;
|
|
|
- box-sizing: border-box;
|
|
|
-
|
|
|
- .small_title {
|
|
|
- width: 100%;
|
|
|
- font-size: 28rpx;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
+ .cont {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #FF4C12;
|
|
|
+ }
|
|
|
|
|
|
- .textarea {
|
|
|
- width: 566rpx;
|
|
|
- height: 292rpx;
|
|
|
- background: #F8F8F8;
|
|
|
- border-radius: 16rpx;
|
|
|
- padding: 20rpx 24rpx;
|
|
|
- box-sizing: border-box;
|
|
|
- margin-top: 32rpx;
|
|
|
- font-size: 26rpx;
|
|
|
- }
|
|
|
+}
|
|
|
|
|
|
- .upload_box {
|
|
|
- width: 100%;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- margin-top: 32rpx;
|
|
|
- // margin-bottom: 40rpx;
|
|
|
- }
|
|
|
- }
|
|
|
+// 订单信息卡片
|
|
|
+.order-info-card {
|
|
|
+ background: #fff;
|
|
|
+ margin: 16rpx 32rpx 0 32rpx;
|
|
|
+ border-radius: 16rpx;
|
|
|
+ padding: 32rpx;
|
|
|
|
|
|
- .btn_box {
|
|
|
- width: 100%;
|
|
|
- height: 116rpx;
|
|
|
- background: #FFFFFF;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-around;
|
|
|
- border-top: 2rpx solid #EEEEEE;
|
|
|
-
|
|
|
- .btn {
|
|
|
- width: 225rpx;
|
|
|
- height: 68rpx;
|
|
|
- // height: 100%;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- background: linear-gradient(90deg, #1AD7CE 0%, #21C9C1 100%);
|
|
|
- border-radius: 44rpx;
|
|
|
- color: #fff;
|
|
|
- }
|
|
|
+ .info-title {
|
|
|
+ font-weight: 500;
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ }
|
|
|
|
|
|
- .cancel {
|
|
|
- width: 225rpx;
|
|
|
- height: 68rpx;
|
|
|
- border-radius: 106rpx;
|
|
|
- border: 2rpx solid #BBBBBB;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ .info-row {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ font-size: 28rpx;
|
|
|
+ margin-top: 24rpx;
|
|
|
+
|
|
|
+ .info-label {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #4E5969;
|
|
|
}
|
|
|
|
|
|
- .sub_box {
|
|
|
- width: 100%;
|
|
|
- height: 116rpx;
|
|
|
- padding: 20rpx 40rpx;
|
|
|
- box-sizing: border-box;
|
|
|
+ .info-value {
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 28rpx;
|
|
|
+ color: #1D2129;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- justify-content: center;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 底部占位,防止按钮遮挡内容
|
|
|
+.footer-placeholder {
|
|
|
+ height: 160rpx;
|
|
|
+}
|
|
|
+
|
|
|
+// 底部按钮组
|
|
|
+.bottom-btn-group {
|
|
|
+ position: fixed;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ background: #fff;
|
|
|
+ padding: 0 48rpx;
|
|
|
+ padding-bottom: calc(20rpx + var(--safe-area-inset-bottom));
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ // display: flex;
|
|
|
+ // align-items: center;
|
|
|
+ // justify-content: flex-end;
|
|
|
+
|
|
|
+ .pay {
|
|
|
+ margin-bottom: 24rpx;
|
|
|
+ margin-top: 24rpx;
|
|
|
+ // display: flex;
|
|
|
+ // align-items: center;
|
|
|
+ // justify-content: center;
|
|
|
+ width: 196.67rpx;
|
|
|
+ height: 88rpx;
|
|
|
+ line-height: 88rpx;
|
|
|
+ background: rgba(51, 51, 53, 0.05);
|
|
|
+ border-radius: 60rpx;
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+ font-weight: 400;
|
|
|
+ font-size: 32rpx;
|
|
|
+ color: #1D2129;
|
|
|
+ }
|
|
|
|
|
|
- position: fixed;
|
|
|
- bottom: 0;
|
|
|
-
|
|
|
- .cancel {
|
|
|
- width: 315rpx;
|
|
|
- height: 76rpx;
|
|
|
- border-radius: 106rpx;
|
|
|
- border: 2rpx solid #BBBBBB;
|
|
|
- font-size: 32rpx;
|
|
|
- color: #999999;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- }
|
|
|
+ .alarm {
|
|
|
+ background-color: #F53F3F;
|
|
|
+ color: #FFFFFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .main {
|
|
|
+ background-color: #333335;
|
|
|
+ color: #FFFFFF;
|
|
|
+ }
|
|
|
+
|
|
|
+ .main1 {
|
|
|
+ width: 250rpx;
|
|
|
|
|
|
- .edit_time {
|
|
|
- width: 315rpx;
|
|
|
- height: 76rpx;
|
|
|
- border-radius: 106rpx;
|
|
|
- border: 2rpx solid #00B8B0;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- justify-content: center;
|
|
|
- color: #00B8B0;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
+}
|
|
|
</style>
|