doum
2025-09-15 a1c569d40b5d1d6571a197467a41fd3421c393ce
small-program/pages/order-details/order-details.vue
@@ -4,22 +4,31 @@
         已取消
      </view> -->
      <view class="order-head" :style="{ backgroundImage: 'url(' + bgImg + ')' }">
         <view class="order-head-status">{{info.statusName || ''}}</view>
         <view class="order-head-info">{{getStatusInfo()}}</view>
         <view class="order-head-status">{{info.statusName || ''}}</view>
         <view class="order-head-info" v-if="isAcceptor && info.isUpdate ==1" style="color: red;">
            订单信息已修改,请及时确认,{{timeInfo}}后将自动同意
         </view>
         <view class="order-head-info" v-if="isPushlishor  && info.type ==2 && info.status ==0" style="color: red;">
            剩余支付时间,{{timeInfo1}}后将自动取消
         </view>
         <view class="order-head-info" v-else >{{getStatusInfo()}}</view>
      </view>
      <view class="order-quxiao">
         <view class="order-quxiao-btn" @click="show = true" v-if="userInfo.id === info.acceptMemberId && info.status ===2">取消订单</view>
         <view class="order-quxiao-btn" @click="show = true" v-if="userInfo.id === info.releaseMemberId && (info.status ===0 ||  info.status ===1|| info.status ===2)">取消订单</view>
         <view class="order-quxiao-btn" @click="show = true" v-if="(isAcceptor && info.status ===2) || (isPushlishor  &&  info.isUpdate!=1 &&  info.status ===2)">取消订单</view>
         <view class="order-quxiao-btn1" v-if="isPushlishor && info.type!=2 &&  info.isUpdate!=1 &&   info.status ===2 " @click="jumpEdit()">修改订单</view>
      </view>
      <view class="order-user"  v-if="userInfo.id === info.releaseMemberId">
      <view class="order-user"  v-if="isPushlishor && info.acceptMemberId">
         <view class="order-user-info">
            <view class="user-info-l">
               <view class="user-info-l-image">
                  <image v-if="info.acceptCoverImage" :src="info.acceptCoverImage" mode="widthFix"></image>
                  <image v-else src="/static/logo.png" mode="widthFix"></image>
                  <image v-else src="/static/icon/img@2x.png" mode="widthFix"></image>
               </view>
               <view class="user-info-l-i">
                  <view class="user-info-l-i-top">{{info.acceptName || '匿名'}}</view>
                  <view class="user-info-l-i-top">
                     <text>{{info.acceptName || ''}}</text>
                     <view class="user-info-l-i-top-jdf">接单方</view>
                  </view>
                  <view class="user-info-l-i-bottom">
                     <view class="user-info-l-i-bottom-item">
                        <text>评分:</text>
@@ -27,12 +36,12 @@
                     </view>
                     <view class="user-info-l-i-bottom-item">
                        <text>单数:</text>
                        <text>{{info.publishNum || 0}}</text>
                        <text>{{info.receiveNum ? info.receiveNum : 0}}</text>
                     </view>
                  </view>
               </view>
            </view>
            <view class="user-info-r" @click="contactPhone(info.acceptPhone)">
            <view class="user-info-r" @click="contactPhone(info.acceptPhone)" v-if="info.status ==2||info.status==3||info.status==5">
               <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
               <text>联系师傅</text>
            </view>
@@ -42,32 +51,36 @@
         <view class="order-info-title">
            <view class="x"></view>
            <text v-if="info.type===0">用工单-{{(info.workType===0?'采摘工':(info.workType===1?'分拣工':'包装工')) }}</text> 
            <text v-if="info.type===1">运货单-{{info.categoryName || ''}}-{{info.carUnit || ''}}</text>
            <text v-if="info.type===1">运货单-{{info.categoryName || ''}}</text>
            <text v-if="info.type===2">订餐单</text>
            
         </view>
         <view v-if="info.type===0" class="order-info-wz">{{info.categoryName || ''}}|{{info.priceNum1 || '' }}斤</view>
         <view v-if="info.type===1" class="order-info-wz">{{info.transportTypeName || ''}}{{' | '}}{{info.transportNum || '' }}{{info.transportUnit||''}}{{' | '}}需{{info.priceNum2 || '' }}辆</view>
         <view class="order-info-address">
         <view v-if="info.type===0" class="order-info-wz">
         {{info.categoryName || ''}}|{{info.priceNum1 || '' }}{{feeFrom.priceParam1.unit}}{{feeFrom.priceParam2.name!=null?(' | '+info.priceNum2+feeFrom.priceParam2.unit):''}}</view>
         <view v-if="info.type===1" class="order-info-wz">{{info.carUnit || ''}}{{' | '}}{{info.transportTypeName || ''}}{{' | '}}{{info.transportNum || '' }}{{info.transportUnit||''}}{{' | '}}需{{info.priceNum2 || '' }}辆</view>
         <view class="order-info-address" v-if="info.type!==1" @click="openAddr({ lat: info.lat, lgt: info.lgt, location: info.location })">
            <image src="/static/icon/order_ic_location@2x.png" mode="widthFix"></image>
            <view class="order-info-address-info">
               <text>{{info.location || '' }}</text>
               <text>{{info.locationRemark || '' }}</text>
            </view>
         </view>
         <view class="order-info-address">
         <view class="order-info-address" v-if="info.type!==1">
            <image src="/static/icon/order_ic_time@2x.png" mode="widthFix"></image>
            <view class="order-info-address-info">
               <text>{{info.startDate || ''}}-{{info.endDate || ''}}({{info.totalDays||0}}天)</text>
               <text>{{info.startDate || ''}}{{' 至 '}}{{info.endDate || ''}}({{info.totalDays||0}}天)</text>
            </view>
         </view>
         <view class="address" v-if="info.type===1 && wayList && wayList.length>0">
            <view class="address-xian"></view>
            <view class="address-row"  v-for="(item,index) in wayList" style="display: block;margin: 10px" :key="'bbb'+index">
            <view class="address-row"  v-for="(item,index) in wayList" style="display: block;margin: 10px" :key="index" @click="openAddr(item)">
               <image v-if="index === 0" src="/static/icon/ic_qidian@2x.png" mode="widthFix"></image>
               <image v-if="index >0 && index < wayList.length-1" src="/static/icon/ic_jingguo@2x.png" mode="widthFix"></image>
               <image v-if="index === wayList.length-1" src="/static/icon/ic_zhongdian@2x.png" mode="widthFix"></image>
               <text>{{item.location || ''}}</text>
               <view class="address-row-info">
                  {{item.location || ''}}
                  <image class="address-row-right" src="/static/icon/ar_address@2x.png" mode="widthFix"></image>
               </view>
            </view>
         </view>
         <view class="order-info-x"></view>
@@ -75,14 +88,22 @@
            <view class="order-info-supplement-title">需求补充:</view>
            <view class="order-info-supplement-val">{{info.supplement || '' }}</view>
            <view class="order-info-supplement-list">
               <view class="order-info-supplement-list-item" v-for="(item,index) in info.multifileList" v-if="info.multifileList && info.multifileList.length>0" :key="item.imgurl">
                  <image v-if="item.fileurlFull"  :src="item.fileurlFull" @click="previemImg(item.fileurlFull)" mode="widthFix"></image>
               <view class="order-info-supplement-list-item" v-for="(item,index) in info.multifileList" v-if="info.multifileList && info.multifileList.length>0" :key="item.imgurl" @click="previemImg(index, info.multifileList)">
                  <image v-if="item.fileurlFull"  :src="item.fileurlFull" mode="widthFix"></image>
               </view>
               <view style="width: 156rpx; height: 0;"></view>
               <view style="width: 156rpx; height: 0;"></view>
            </view>
         </view>
         <view class="order-info-price">
            <view class="price-row" v-if="feeFrom.priceParam1.name">
               <view class="price-row-label">{{feeFrom.priceParam1.name}}</view>
               <view class="price-row-val" >  {{(info.originPriceNum1||0) }}{{feeFrom.priceParam1.unit}} </view>
            </view>
            <view class="price-row" v-if="feeFrom.priceParam2.name">
               <view class="price-row-label">{{feeFrom.priceParam2.name}}</view>
               <view class="price-row-val" >  {{(info.originPriceNum2||0) }}{{feeFrom.priceParam2.unit}} </view>
            </view>
            <view class="price-row">
               <view class="price-row-label">费用标准</view>
               <view class="price-row-val" v-if="info.type !==2">{{((info.price||0)/100).toFixed(2) }}{{info.priceUnit || '' }}</view>
@@ -94,32 +115,81 @@
            </view>
            <view class="price-row">
               <view class="price-row-label">预估总费用(元)</view>
               <view class="price-row-val" style="color: #FF0000;">
                  ¥{{((info.estimatedAccount||0)/100).toFixed(2) }}
               <view class="price-row-val" :style="{color: (!isPushlishor&&info.status!=4&&info.status!=5) || (isPushlishor&&info.type!=2 &&info.status!=4&&info.status!=5) ? '#FF0000' : ''}">
                  ¥{{((info.originEstimatedAccount||0)/100).toFixed(2) }}
               </view>
            </view>
         </view>
         <template v-if="info.type!=2&&(info.status==5|| info.status==4)">
            <view class="order-info-x"></view>
            <view class="order-info-supplement" >
               <view class="order-info-supplement-title">已确认费用</view>
            </view>
            <view class="order-info-price">
               <view class="price-row" v-if="feeFrom.priceParam1.name">
                  <view class="price-row-label">实际{{feeFrom.priceParam1.name}}</view>
                  <view class="price-row-val" > {{(info.priceNum1||0) }}{{feeFrom.priceParam1.unit}} </view>
               </view>
               <view class="price-row" v-if="feeFrom.priceParam2.name">
                  <view class="price-row-label">实际{{feeFrom.priceParam2.name}}</view>
                  <view class="price-row-val" > {{(info.priceNum2||0) }}{{feeFrom.priceParam2.unit}} </view>
               </view>
               <view class="price-row" >
                  <view class="price-row-label">其他费用</view>
                  <view class="price-row-val" >¥{{((info.confirmOtherFee||0)/100).toFixed(2) }} </view>
               </view>
               <view class="price-row">
                  <view class="price-row-label">实际总费用(元)</view>
                  <view class="price-row-val" :style="{color: info.status !=4 ? '#FF0000' : ''}">
                     ¥{{((info.estimatedAccount||0)/100).toFixed(2) }}
                  </view>
               </view>
               <view class="price-row" >
                  <view class="price-row-label">备注</view>
                  <view class="price-row-val" >
                     {{ info.confirmFeeRemark ||'' }}
                  </view>
               </view>
            </view>
         </view>
         </template>
         <template v-if="info.type==2 || info.status==4">
            <view class="order-info-x"></view>
            <view class="order-info-supplement" >
               <view class="order-info-supplement-title">实际费用</view>
            </view>
            <view class="order-info-price">
               <view class="price-row" v-if="isPushlishor">
                  <view class="price-row-label" >实际支付(元)</view>
                  <view class="price-row-val" style="color: #FF0000;">¥{{((info.payAccount||0)/100).toFixed(2) }} </view>
               </view>
               <view class="price-row" v-if="isAcceptor && info.status==4" >
                  <view class="price-row-label">实际到账(元)</view>
                  <view class="price-row-val" style="color: #FF0000;">¥{{((info.receiveAccount||0)/100).toFixed(2) }} </view>
               </view>
            </view>
         </template>
      </view>
      <view class="order-info" v-if="info.commentStatus ===1">
         <view class="order-info-title">
            <text>评价</text>
         </view>
         <u-rate :count="count" activeColor="#FFC331" size="26" v-model="info.commentLevel"></u-rate>
         <u-rate :count="count" readonly activeColor="#FFC331" size="26" v-model="info.commentLevel"></u-rate>
         <view class="order-info-remark">
            {{ info.commentInfo || '-'}}
         </view>
      </view>
      <view class="order-ren" v-if="userInfo.id === info.acceptMemberId">
      <view class="order-ren" v-if="isAcceptor">
         <view class="order-ren-left">
            <view class="order-ren-left-img">
               <image v-if="info.releaseCoverImage" :src="info.releaseCoverImage" mode="widthFix"></image>
               <image v-else src="/static/logo.png" mode="widthFix"></image>
               <image v-else src="/static/icon/img@2x.png" mode="widthFix"></image>
            </view>
            <text>{{info.releaseName || '匿名'}}</text>
            <view class="order-ren-left-tip">发单方</view>
            <text>{{info.releaseName || ''}}</text>
            <view class="order-ren-left-tip">业主</view>
         </view>
         <view class="order-ren-x"></view>
         <view class="order-ren-lx"  @click="contactPhone(info.releasePhone)">
         <view class="order-ren-lx"  v-if="info.status ==2||info.status==3||info.status==5"  @click="contactPhone(info.releasePhone)">
            <image src="/static/icon/ic_call@2x.png" mode="widthFix"></image>
            <text>发单方</text>
         </view>
@@ -129,55 +199,65 @@
            <text>订单信息</text>
         </view>
         <view class="order-info-list">
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.code">
               <text>订单编号:</text>
               <text>{{info.code || ''}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.createTime">
               <text>下单时间:</text>
               <text>{{info.createTime||'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.acceptTime">
               <text>接单时间:</text>
               <text>{{info.acceptTime||'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.workStartTime">
               <text>开始时间:</text>
               <text>{{info.workStartTime||'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.confirmFeeTime">
               <text>费用确认时间:</text>
               <text>{{info.confirmFeeTime||'-'}}</text>
            </view>
            <view class="order-info-list-item" v-if="info.finishTime">
               <text>完成时间:</text>
               <text>{{info.finishTime||'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.payTime">
               <text>支付时间:</text>
               <text>{{info.payTime||'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.payMethod && info.payMethod >= 0">
               <text>支付方式:</text>
               <text>{{info.payMethod==0?'微信支付':'-'}}</text>
            </view>
            <view class="order-info-list-item">
            <view class="order-info-list-item" v-if="info.wxExternalNo">
               <text>交易单号:</text>
               <text>{{info.wxExternalNo || '-'}}</text>
            </view>
         </view>
      </view>
      <view style="width: 100%; height: calc(108rpx + env(safe-area-inset-bottom));"></view>
      <view class="order-footer">
         <view class="order-footer-btn">
            <view class="order-footer-btn-a" @click="show = true" v-if="userInfo.id === info.acceptMemberId && info.status ===2">取消订单</view>
            <view class="order-footer-btn-a" @click="show = true" v-if="userInfo.id === info.releaseMemberId && (info.status ===0 ||  info.status ===1|| info.status ===2)">取消订单</view>
            <view class="order-footer-btn-b" @click="show2=true" v-if="userInfo.id === info.releaseMemberId && (info.status ===4 && info.commentStatus!=1)">去评价</view>
            <view class="order-footer-btn-b" v-if="userInfo.id === info.releaseMemberId &&((info.status ===3 && info.type !==2)|| (info.status ===0 && info.type===2))">去支付</view>
            <view class="order-footer-btn-b" v-if="userInfo.id === info.releaseMemberId && (info.status ===0 ||  info.status ===1|| info.status ===2)">修改订单</view>
            <view class="order-footer-btn-b" v-if="userInfo.id === info.releaseMemberId && (info.isUpdate==1 && info.status ===2)">修改确认</view>
            <view class="order-footer-btn-b" @click="show3 =true" v-if="userInfo.id === info.releaseMemberId && (info.status ===2)">开始作业</view>
            <view class="order-footer-btn-b" v-if="userInfo.id !== info.releaseMemberId && (info.status ===1)">抢单</view>
      <view style="width: 100%; height: calc(108rpx + env(safe-area-inset-bottom));" v-if="![99].includes(info.status)"></view>
      <view class="order-footer" v-if="![99].includes(info.status)">
         <template v-if="isPushlishor && info.isUpdate != 1 && info.status === 2">
            <sunui-mverify v-if="1==2" hint="开始作业" @change="getaccept($event)"></sunui-mverify>
            <view class="order-footer-btn" v-if="comparisonTime(info.startDate)">
               <view class="order-footer-btn-b" @click="show8 = true">开始作业</view>
            </view>
         </template>
         <view class="order-footer-btn" v-else >
            <view class="order-footer-btn-a" @click="show = true" v-if="1==2&& isAcceptor && info.status ===2">取消订单</view>
            <view class="order-footer-btn-a" @click="show = true" v-if="isPushlishor && (info.status ===0 ||  info.status ===1|| info.status ===2)">取消订单</view>
            <view class="order-footer-btn-b" @click="show2=true" v-if="isPushlishor && (info.status ===4 && info.commentStatus!=1)">去评价</view>
            <view class="order-footer-btn-b" v-if="isPushlishor&&((info.status ===5 && info.type !==2)|| (info.status ===0 && info.type===2))" @click="show1 = true">{{info.type === 2 ? '继续支付' : '完成并支付'}}</view>
            <view class="order-footer-btn-b" @click="show7 = true" v-if=" info.type!==2 &&isAcceptor && info.status ===3">确认费用</view>
            <view class="order-footer-btn-b" v-if="isPushlishor && ((info.status ===3 && info.type===2))" @click="payment1">完成作业</view>
            <view class="order-footer-btn-b" v-if="info.type !=2 && info.isUpdate!=1&& isPushlishor && (info.status ===0 ||  info.status ===1|| info.status ===2)" @click="jumpEdit()">修改订单</view>
            <view class="order-footer-btn-b" @click="show5 =true" v-if="isAcceptor&& (info.isUpdate==1 && info.status ===2)">修改确认</view>
            <view class="order-footer-btn-b"  @click="show6 =true" v-if="!isPushlishor && (info.status ===1)">抢单</view>
         </view>
         <view style="width: 100%; height: env(safe-area-inset-bottom);"></view>
      </view>
      <u-modal
         title="温馨提示"
         :show="show"
@@ -194,16 +274,61 @@
      </u-modal>
      <u-modal
         title="温馨提示"
         :show="show3"
         :show="show4"
         closeOnClickOverlay
         showCancelButton
      >
         <view class="slot-content">
            确认开始作业吗?
            确认取消订单吗?
         </view>
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show3 = false">我再想想</view>
            <view class="btn2" @click="beginDo">确认开始</view>
            <view class="btn1" @click="show = false">我再想想</view>
            <view class="btn2" @click="cancelDo">确认取消</view>
         </view>
      </u-modal>
      <u-modal
         title="温馨提示"
         :show="show6"
         closeOnClickOverlay
         showCancelButton
      >
         <view class="slot-content">
            确认抢单吗?
         </view>
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show6 = false">我再想想</view>
            <view class="btn2" @click="acceptDo()">确认接单</view>
         </view>
      </u-modal>
      <u-modal
         title="温馨提示"
         :show="show8"
         closeOnClickOverlay
         showCancelButton
      >
         <view class="slot-content">
            开始作业吗?
         </view>
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show8 = false">我再想想</view>
            <view class="btn2" @click="beginDo()">确认开始</view>
         </view>
      </u-modal>
      <u-modal
         title="温馨提示"
         :show="show5"
         closeOnClickOverlay
         showCancelButton
      >
         <view class="slot-content">
            是否同意订单修改内容?
         </view>
         <view slot="confirmButton" style="display: flex; justify-content: space-between; align-items: center; width: 100%;">
            <view class="btn1" @click="show5=false">我再想想</view>
            <view style="width: 20rpx; height: 100%;"></view>
            <view class="btn2" style="background-color: #f56c6c; color: #ffffff;" @click="confirmUpdDo(1)">不同意</view>
            <view style="width: 20rpx; height: 100%;"></view>
            <view class="btn2" @click="confirmUpdDo(0)">同意</view>
         </view>
      </u-modal>
      <!-- 支付弹窗 -->
@@ -215,19 +340,73 @@
               <image @click="show1 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
            </view>
            <view class="zhifu-c">
               <view class="zhifu-c-info">
                  请确认金额并支付费用给 <text>莲花劳务公司</text>
               <view class="zhifu-c-info" v-if="info.type !== 2">
                  请确认金额并支付费用给 <text>{{info.acceptName}}</text>
               </view>
               <view class="zhifu-c-info1">支付金额:</view>
               <view class="zhifu-c-input">
                  <image src="/static/icon/¥@2x.png" mode="widthFix"></image>
                  <input type="number" placeholder="请输入" />
                  <image src="/static/icon/ic_money@2x.png" mode="widthFix"></image>
                  <input type="number" v-model="amount" :disabled="info.type === 2" placeholder="请输入" />
               </view>
            </view>
            <view class="zhifu-botton">确认支付</view>
            <view class="zhifu-botton" @click="payment">确认支付</view>
         </view>
      </u-popup>
      <!-- 支付弹窗 -->
      <u-popup :show="show7" round="15" mode="bottom">
         <view class="querenfee">
            <view class="querenfee-head">
               <view></view>
               <text>费用确认</text>
               <image @click="show7 = false" src="/static/icon/ic_close@2x.png" mode="widthFix"></image>
            </view>
            <view class="querenfee-c">
               <view class="querenfee-c-info1">费用标准:</view>
               <viem class="money">{{((info.price||0)/100).toFixed(2) }}{{info.priceUnit || '' }}</viem>
            </view>
            <view class="querenfee-c" >
               <view class="querenfee-c-info1"><text style="color: red;">*</text>实际{{feeFrom.priceParam1.name}}:</view>
               <view class="querenfee-c-input">
                  <input type="number" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;" @input="getTotal" v-model="feeFrom.priceNum1"   placeholder="0" />
               </view>
               <text class="querenfee-c-danw">{{feeFrom.priceParam1.unit}}</text>
            </view>
            <view class="querenfee-c" v-if="feeFrom.priceParam2.name !=null">
               <view class="querenfee-c-info1"><text style="color: red;">*</text>实际{{feeFrom.priceParam2.name}}:</view>
               <view class="querenfee-c-input">
                  <input type="number" v-model="feeFrom.priceNum2" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;" @input="getTotal" placeholder="0" />
               </view>
               <text class="querenfee-c-danw" >{{feeFrom.priceParam2.unit}}</text>
            </view>
            <view class="querenfee-c">
               <view class="querenfee-c-info1">其他费用:</view>
               <view class="querenfee-c-input">
                  <input type="digit" v-model="feeFrom.confirmOtherFee" placeholder-style="color: #999999; font-size: 50rpx; font-weight: 500;"  @input="getTotal" placeholder="0" />
               </view>
               <text class="querenfee-c-danw">元</text>
            </view>
            <view class="querenfee-c" style="flex-direction: column;">
               <view class="querenfee-c-info1" style="margin-bottom: 30rpx;">备注信息:</view>
               <view class="querenfee-c-input" style="width: 100%; height: 200rpx; padding: 30rpx; box-sizing: border-box;">
                  <u--textarea placeholder="如需备注,请输入" border="none" v-model="feeFrom.confirmFeeRemark"  ></u--textarea>
               </view>
            </view>
            <view class="querenfee-c">
               <view class="querenfee-c-info1">实际总费用:</view>
               <view class="querenfee-c-price">
                  ¥{{confirmPayFee}}
               </view>
               <!-- <view class="querenfee-c-input">
                  <image src="/static/icon/ic_money@2x.png" mode="widthFix"></image>
                  <text class="querenfee-c-input money">{{confirmPayFee}}</text>
               </view> -->
            </view>
            <view class="querenfee-c" style="margin-top: 12rpx;">
               <view class="querenfee-tips">最终费用由发单方支付,接单方收到的金额将扣除平台手续费用</view>
            </view>
            <view class="querenfee-botton" @click="confirmFee">确认费用</view>
         </view>
      </u-popup>
      <!-- 评价 -->
      <u-popup :show="show2" round="15" mode="bottom">
         <view class="zhifu">
@@ -254,33 +433,232 @@
<script>
   import { mapState } from 'vuex'
   import sunuiMverify from '@/components/sunui-mverify/sunui-mverify.vue';
   export default {
      computed: {
         ...mapState( ['userInfo'])
      },
      data() {
         return {
            isPushlishor:false,//是否发单方
            isAcceptor:false,//是否接单方
            show: false,
            show1: false,
            show2: false,
            count: 5, 
            show3:false,
            timer:null,
            timer1:null,
            show4:false,
            show5:false,
            show6:false,
            show7:false,
            show8:false,
            actionFlag:null,
            timeInfo:'00:00:00',
            timeInfo1:'00:00:00',
            lessTime:null,
            lessTime1:null,
            value:0,
            wayList:[],
            bgImg: require('@/static/image/bg_green@2x.png'),
            id: null,
            loading:false,
            commentInfo:'',
            info: {},
            info: {},
            amount: '',
            confirmPayFee:0.00,
            feeFrom:{
               priceParam1:{
                  name:null,
                  unit:null
               },
               priceParam2:{
                  name:null,
                  unit:null
               },
               priceNum1:null,
               priceNum2:null,
               confirmFeeRemark:null,
               confirmOtherFee:null,
            }
         };
      },
      onLoad(options) {
         console.log(options)
         var id = options.id
         this.id = id
         this.getOrderData()
         this.id = id
         this.actionFla=options.flag
      },
      methods:{
      onShow(options) {
         this.getOrderData()
         console.log(this.comparisonTime('2025-09-13'))
      },
      methods:{
         comparisonTime(start) {
            let startDate = new Date().getTime();
            let endDate = new Date(start).getTime();
            return startDate >= endDate;
         },
         openAddr(e) {
            uni.openLocation({
               latitude: e.lat,
               longitude: e.lgt,
               name: e.location
            })
         },
         beginDo(e) {
            var that = this
            uni.requestSubscribeMessage({
               tmplIds: ['3rOz7DAnawrkKDM8b5_XW4FLivISWYov6d7QSC4ORsg'],
               success(res) {
                  that.startJobs()
               },
               fail(err) {
                  that.startJobs()
               }
            })
         },
         startJobs(e) {
            var that = this
            this.$u.api.begin({ orderId: this.info.id })
               .then(res => {
                  if (res.code === 200) {
                     that.show8=false
                     that.getOrderData()
                  }
               })
         },
         // 修改
         jumpEdit() {
            if (this.info.type === 0 && this.info.workType === 0) {
               uni.navigateTo({
                  url: `/pages/using-workers/using-workers?id=${this.info.id}`
               })
            } else if (this.info.type === 0 && this.info.workType === 1) {
               uni.navigateTo({
                  url: `/pages/sorting/sorting?id=${this.info.id}`
               })
            } else if (this.info.type === 0 && this.info.workType === 2) {
               uni.navigateTo({
                  url: `/pages/packaging-worker/packaging-worker?id=${this.info.id}`
               })
            } else if (this.info.type === 1) {
               uni.navigateTo({
                  url: `/pages/freight/freight?id=${this.info.id}`
               })
            }
         },
         payment1() {
            var that = this
            this.$u.api.doneOrder({
               orderId: this.info.id
            }).then(res => {
               if (res.code === 200) {
                  that.getOrderData()
               }
            })
         },
         getTotal() {
            this.$u.api.getTotal({
               price: this.info.price,
               priceUnit: this.feeFrom.priceParam1.unit,
               priceNum1: this.feeFrom.priceNum1 || 0,
               priceNum2: this.feeFrom.priceNum2 || 0,
               confirmOtherFee:(this.feeFrom.confirmOtherFee||0)*100,
               type: this.info.type,
               carType:this.info.carType ,
               workType: this.info.workType
            }).then(res => {
               if (res.code === 200) {
                  this.confirmPayFee = (res.data / 100) || '0'
               }
            })
         },
         confirmFee(){
            var that =this
            if (!this.feeFrom.priceNum1) {
               return uni.showToast({
                  title: '实际' + this.feeFrom.priceParam1.name + '不能为空',
                  icon: 'none'
               })
            }
            if (this.feeFrom.priceParam2.name && !this.feeFrom.priceNum2) {
               return uni.showToast({
                  title: '实际' + this.feeFrom.priceParam2.name + '不能为空',
                  icon: 'none'
               })
            }
            this.$u.api.confirmFee({
               confirmFeeRemark: this.feeFrom.confirmFeeRemark,
               confirmOtherFee: (this.feeFrom.confirmOtherFee||0)*100,
               orderId: this.info.id,
               priceNum1: this.feeFrom.priceNum1,
               priceNum2: this.feeFrom.priceNum2
            }).then(res => {
               if (res.code === 200) {
                  that.show7 = false
                  uni.showToast({ title: '操作成功', icon: 'success', duration: 2000 });
                  that.getOrderData()
               }
            })
         },
         payment() {
            var that = this
            // 订餐
            if (this.info.type === 2) {
               this.$u.api.reusePay({
                  orderId: this.info.id
               }).then(res => {
                  if (res.code === 200) {
                     wx.requestPayment({
                        timeStamp: res.data.object.timeStamp,
                        nonceStr: res.data.object.nonceStr,
                        package: res.data.object.packageVal,
                        signType: res.data.object.signType,
                        paySign: res.data.object.paySign,
                        success (res1) {
                           if (res1.errMsg = 'requestPayment:ok') {
                              that.show1 = false
                              uni.showToast({ title: '支付成功', icon: 'success', duration: 2000 });
                              that.getOrderData()
                           }
                        },
                        fail(err) {
                           console.log(err)
                        }
                     })
                  }
               })
            } else {
               this.$u.api.doneOrder({
                  orderId: this.info.id,
                  amount: Number(this.amount) * 100
               }).then(res => {
                  if (res.code === 200) {
                     wx.requestPayment({
                        timeStamp: res.data.object.timeStamp,
                        nonceStr: res.data.object.nonceStr,
                        package: res.data.object.packageVal,
                        signType: res.data.object.signType,
                        paySign: res.data.object.paySign,
                        success (res1) {
                           if (res1.errMsg = 'requestPayment:ok') {
                              that.show1 = false
                              uni.showToast({ title: '支付成功', icon: 'success', duration: 2000 });
                              that.getOrderData()
                           }
                        },
                        fail(err) {
                           console.log(err)
                        }
                     })
                  }
               })
            }
         },
         commentDo(){
            var that = this
            var param = { info: that.commentInfo,level:that.value||0,orderId: this.id}
@@ -292,55 +670,71 @@
               }
            }) 
         },
         beginDo(){
         confirmUpdDo(status){
            var that = this
            var param = {orderId: this.id}
            this.$u.api.begin(param).then(res =>{
            var param = {orderId: this.id,status:status}
            this.$u.api.confirmUpd(param).then(res =>{
               if(res.code ===200){
                  that.show3=false
                  uni.showToast({ title: '操作成功', icon: 'error', duration: 2000 });
                  that.getOrderData()
                  that.show5=false
                  uni.showToast({ title: '确认成功', icon: 'error', duration: 2000 });
                  if(status==1){
                     uni.navigateBack({ delta: 1 })
                  }else{
                     that.getOrderData()
                  }
               }
            }) 
         },
         confirmUpdDo(){
            var that = this
            var param = {orderId: this.id}
            this.$u.api.confirmUpdDo(param).then(res =>{
               if(res.code ===200){
                  that.show=false
                  uni.showToast({ title: '操作成功', icon: 'error', duration: 2000 });
                  that.getOrderData()
               }
            })
         },
         acceptDo(){
         acceptDoBiz(){
            var that = this
            var param = {orderId: this.id}
            this.$u.api.accept(param).then(res =>{
               if(res.code ===200){
                  that.show=false
                  that.show6=false
                  uni.showToast({ title: '抢单成功', icon: 'error', duration: 2000 });
                  that.getOrderData()
               }
            }) 
         },
         acceptDo() {
            var that = this;
            uni.requestSubscribeMessage({
               tmplIds: ['AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8','3YSC7gouRlSjHXz4CrWOGFzPmGwEBtFj4snwdfMvKHk','tDpYImlrdv-0d3euTrHbYZ1cEZvjVHTNlqHvV0tpLHg'],
               success(res) {
                  that.acceptDoBiz()
               },
               fail(err) {
                  that.acceptDoBiz()
               }
            })
         },
         cancelDo(){
            var that = this
            var param ={ orderId:that.id}
            this.$u.api.cancelOrder(param).then(res =>{
               if(res.code ===200){
                  that.show=false
                  uni.showToast({ title: '订单取消成功', icon: 'error', duration: 2000 });
                  that.getOrderData()
            uni.requestSubscribeMessage({
               tmplIds: ['AA97cHjvlPiNO4viMkVe4JifCf9TD5b5Eb7s6El3VS8'],
               success(res) {
                  var param ={ orderId:that.id}
                  that.$u.api.cancelOrder(param).then(res =>{
                     if(res.code ===200){
                        that.show=false
                        uni.showToast({ title: '订单取消成功', icon: 'error', duration: 2000 });
                        if(that.userInfo.id !== that.info.releaseMemberId){
                           uni.navigateBack({ delta: 1 })
                        }else{
                           that.getOrderData()
                        }
                     }
                   })
               },
               fail(err) {
                  console.log(err)
               }
             })
            })
         },
         previemImg(src){
            uni.previewImage({
               current: src, // 当前显示图片的http链接
               urls: [src] // 需要预览的图片http链接列表
              });
         previemImg(current, arr) {
            let urls = arr.map(item => item.fileurlFull)
            uni.previewImage({ current, urls });
         },
         contactPhone(phone){
            if(phone !=null && phone!=''){
@@ -351,14 +745,45 @@
         },
         //订单状态:0=待支付 1=待接单;2=已接单;3=进行中;4=已完成;99=已取消
         getStatusInfo(){
            if(this.userInfo.id === this.info.acceptMemberId){
            if(this.isPushlishor){
               //如果是发布方
               if(this.info.status === 0){
                  return '请尽快完成支付,发布订单'
               }else if(this.info.status === 1){
                  return '您订单已经成功发起,请耐心等待接单'
               }else if(this.info.status === 5){
                  return '接单方已确认费用,请支付'
               }else if(this.info.status === 2){
                  if(this.info.isUpdate==1){
                     return '订单已修改,请等待接单方确认'
                  }
                  return '订单已接单,请点击下方“开始作业”按钮'
               }else if(this.info.status === 3){
                  if(this.info.type ==2){
                     return '订单作业进行中,请点击下方“完成”按钮完成作业'
                  }
                  return  '订单正在进行中,等待作业完成接单方确认费用'
               }else if(this.info.status === 5){
                  return  '接单方已确认费用,请点击下方“完成并支付”按钮'
               }else if(this.info.status === 4){
                  return this.info.commentStatus==1?'您的订单已完成,欢迎再次使用': '您的订单已完成,请及时评价'
               }else if(this.info.status === 99){
                  return '订单已取消'
               }
               //如果是接单方
            }else{
               if(this.info.status === 0){
                  return ''
               }else if(this.info.status === 1){
                  return ''
                  return '发单方已成功发起订单,您可以进行接单'
               }else if(this.info.status === 2){
                  if(this.info.isUpdate==1){
                     return ''
                  }
                  return '您已接单,请按时完成订单任务'
               }else if(this.info.status === 5){
                  return '您已确认费用,等待发单方支付'
               }else if(this.info.status === 3){
                  return '订单进行中,请按时完成订单任务'
               }else if(this.info.status === 4){
@@ -366,38 +791,132 @@
               }else if(this.info.status === 99){
                  return '订单已取消'
               }
            }else{
               //如果是发布方
               if(this.info.status === 0){
                  return '请尽快完成支付,发布订单'
               }else if(this.info.status === 1){
                  return '您订单已经成功发起,请耐心等待接单'
               }else if(this.info.status === 2){
                  return '订单开始作业后,请拖动下方“开始作业”按'
               }else if(this.info.status === 3){
                  return this.info.type!=2?'订单完成后请点击下方“完成并支付”按钮':'订单正在进行中'
               }else if(this.info.status === 4){
                  return this.info.commentStatus==1?'您的订单已完成,欢迎再次使用': '您的订单已完成,请及时评价'
               }else if(this.info.status === 99){
                  return '订单已取消'
               }
            }
         },
         updateTimeInfo1(){
            if(this.timer1){
               clearInterval(this.timer1)
            }
            var that =this
            this.lessTime1 = Math.floor( Number(that.info.cancelCountdown || 0)/1000) ;
            if(this.lessTime1>0){
               this.timer1 =  setInterval(function(){
                     let h = Math.floor(that.lessTime1/60/60) ;
                     let m = Math.floor((that.lessTime1 - h*60*60)/60);
                     let s=  Math.floor(that.lessTime1- h*60*60 -m*60);
                     that.timeInfo1 =(h<10?'0':'')+ h+":"+(m<10?'0':'')+m+":"+(s<10?'0':'')+s;
                     that.lessTime1 =that.lessTime1-1;
                     if(that.lessTime1 <=0){
                         that.timeInfo1 ="00:00:00"
                        clearInterval(that.timer1)
                     }
                     // console.log( that.timeInfo)
               },1000)
            }
         },
         updateTimeInfo(){
            if(this.timer){
               clearInterval(this.timer)
            }
            var that =this
            this.lessTime = Math.floor( Number(that.info.confirmCountdown || 0)/1000) ;
            if(this.lessTime>0){
               this.timer =  setInterval(function(){
                     let h = Math.floor(that.lessTime/60/60) ;
                     let m = Math.floor((that.lessTime - h*60*60)/60);
                     let s=  Math.floor(that.lessTime- h*60*60 -m*60);
                     that.timeInfo =(h<10?'0':'')+ h+":"+(m<10?'0':'')+m+":"+(s<10?'0':'')+s;
                     that.lessTime =that.lessTime-1;
                     // console.log( that.timeInfo)
                     if(that.lessTime<=0){
                        that.timeInfo ="00:00:00"
                        clearInterval(that.timer)
                     }
               },1000)
            }
         },
         getOrderData(){
            var that = this
            var param ={ orderId:that.id}
            this.isPushlishor =false
            this.isAcceptor =false
            this.$u.api.getDetail(param).then(res =>{
               if(res.code ===200){
                  if(that.userInfo.id === res.data.releaseMemberId || that.userInfo.id === res.data.acceptMemberId ){
                  if(that.userInfo.id === res.data.releaseMemberId ){
                     //如果是发单方
                     that.isPushlishor =true
                  }else if(that.userInfo.id ===res.data.acceptMemberId ){
                     //如果是接单方
                     that.isAcceptor =true
                  }
                  // if(that.isAcceptor ||that.isPushlishor ){
                     that.info = res.data
                     that.amount = ((that.info.estimatedAccount || 0) / 100).toFixed(2)
                     if(that.info.wayInfo){
                        that.wayList = JSON.parse(that.info.wayInfo)
                     }
                  }else{
                     uni.showToast({ title: '订单信息不存在', icon: 'error', duration: 2000 });
                  }
                     if(res.data.isUpdate == 1){
                        that.updateTimeInfo()
                     }
                     if(res.data.status == 0){
                        that.updateTimeInfo1()
                     }
                     that.initPriceNumParam()
                  // }else{
                  //    uni.showToast({ title: '订单信息不存在', icon: 'error', duration: 2000 });
                  // }
               }
             }) 
         },
         initPriceNumParam(){
            this.feeFrom.priceParam1.name =null
            this.feeFrom.priceParam1.unit =null
            this.feeFrom.priceParam2.name =null
            this.feeFrom.priceParam2.unit =null
            if(this.info.type==0 && this.info.workType==1){
               //分拣工
               this.feeFrom.priceParam1.name ='用工天数'
               this.feeFrom.priceParam1.unit ='天'
               this.feeFrom.priceParam2.name ='用工人数'
               this.feeFrom.priceParam2.unit ='人'
            }else if(this.info.type==0 && this.info.workType==0){
               //采摘工
               this.feeFrom.priceParam1.name ='采摘重量'
               this.feeFrom.priceParam1.unit ='斤'
               this.feeFrom.priceParam2.name =null
               this.feeFrom.priceParam2.unit =null
            }else if(this.info.type==0 && this.info.workType==2){
               //包装工
               if(this.info.carType==0){
                  //按天
                  this.feeFrom.priceParam1.name ='用工天数'
                  this.feeFrom.priceParam1.unit ='天'
                  this.feeFrom.priceParam2.name ='用工人数'
                  this.feeFrom.priceParam2.unit ='人'
               }else if(this.info.carType==1){
                  //按小时
                  this.feeFrom.priceParam1.name ='工作时长'
                  this.feeFrom.priceParam1.unit ='小时'
                  this.feeFrom.priceParam2.name ='用工人数'
                  this.feeFrom.priceParam2.unit ='人'
               }else if(this.info.carType==2){
                  //按重量
                  this.feeFrom.priceParam1.name ='包装重量'
                  this.feeFrom.priceParam1.unit ='斤'
                  this.feeFrom.priceParam2.name ='用工人数'
                  this.feeFrom.priceParam2.unit ='人'
               }
            }else if(this.info.type==1 && this.info.carType==0){
               //运货单 按天数
               this.feeFrom.priceParam1.name ='用车天数'
               this.feeFrom.priceParam1.unit ='天'
            }else if(this.info.type==1 && this.info.carType==1){
               //运货单 按次数
               this.feeFrom.priceParam1.name ='用车次数'
               this.feeFrom.priceParam1.unit ='次'
            }
         }
      }
   }
@@ -425,6 +944,139 @@
<style lang="scss" scoped>
   .order {
      width: 100%;
      .querenfee {
         width: 100%;
         padding: 40rpx 30rpx;
         box-sizing: border-box;
         .querenfee-textarea {
            width: 100%;
            height: 364rpx;
            padding: 30rpx;
            box-sizing: border-box;
            background: #F7F7F7;
            border-radius: 16rpx;
            border: 1rpx solid #EEEEEE;
            margin-top: 48rpx;
            display: flex;
            align-items: start;
            image {
               flex-shrink: 0;
               width: 29rpx;
               height: 29rpx;
               margin-right: 10rpx;
            }
         }
         .querenfee-head {
            width: 100%;
            display: flex;
            align-items: center;
            justify-content: space-between;
            image {
               width: 28rpx;
               height: 28rpx;
            }
            text {
               font-weight: 500;
               font-size: 32rpx;
               color: #222222;
            }
         }
         .querenfee-c {
            width: 100%;
            margin-top: 46rpx;
            display: flex;
            justify-content: space-between;
            .querenfee-c-info {
               align-items: center;
               font-weight: 500;
               font-size: 30rpx;
               color: #222222;
               margin-bottom: 30rpx;
               text {
                  color: #00BC12;
                  margin-left: 10rpx;
               }
            }
            .querenfee-c-danw {
               display: flex;
               align-items: center;
               flex-shrink: 0;
               font-weight: 400;
               font-size: 30rpx;
               color: #333333;
               margin-left: 10rpx;
            }
            .querenfee-c-price {
               font-weight: 600;
               font-size: 44rpx;
               color: #FF0000;
            }
            .querenfee-c-info1 {
               width: 50%;
               display: flex;
               align-items: center;
               font-weight: 600;
               font-size: 32rpx;
               color: #222222;
            }
            .querenfee-tips{
               width: 100%;
               font-weight: 400;
               font-size: 26rpx;
               color: #999999;
               line-height: 36rpx;
            }
            .money{
               width: 50%;
               text-align: right;
               font-weight: 600;
               font-size: 34rpx;
               color: #FF0000 !important;
            }
            .querenfee-c-input {
               width: 260rpx;
               height: 100rpx;
               padding: 10rpx 30rpx;
               box-sizing: border-box;
               background: #F7F7F7;
               border-radius: 10rpx;
               border: 1rpx solid #EEEEEE;
               display: flex;
               align-items: center;
               image {
                  flex-shrink: 0;
                  width: 28rpx;
                  height: 60rpx;
                  margin-right: 24rpx;
               }
               input {
                  flex: 1;
                  height: 100%;
                  font-weight: 500;
                  font-size: 56rpx;
                  color: #222222;
                  text-align: right;
                  .querenfee-c-input-placeholder {
                     font-size: 32rpx !important;
                  }
               }
            }
         }
         .querenfee-botton {
            width: 100%;
            height: 88rpx;
            line-height: 88rpx;
            text-align: center;
            font-weight: 500;
            font-size: 32rpx;
            color: #FFFFFF;
            background: #00BC12;
            border-radius: 44rpx;
            margin-top: 40rpx;
         }
      }
      .zhifu {
         width: 100%;
         padding: 40rpx 30rpx;
@@ -496,6 +1148,9 @@
               font-size: 30rpx;
               color: #666666;
               margin-bottom: 20rpx;
            }
            .money{
               color: red !important;
            }
            .zhifu-c-input {
               width: 100%;
@@ -582,18 +1237,19 @@
            align-items: center;
            justify-content: space-between; 
            .order-footer-btn-a {
               width: 334rpx;
               flex: 1;
               height: 88rpx;
               line-height: 88rpx;
               text-align: center;
               font-weight: 500;
               font-size: 32rpx;
               color: #666666;
               margin-right: 2rpx;
               border-radius: 44rpx;
               border: 1rpx solid #B2B2B2;
            }
            .order-footer-btn-b {
               width: 334rpx;
               flex: 1;
               height: 88rpx;
               line-height: 88rpx;
               text-align: center;
@@ -898,9 +1554,26 @@
                  flex-direction: column;
                  justify-content: space-between;
                  .user-info-l-i-top {
                     font-weight: 400;
                     font-size: 30rpx;
                     color: #222222;
                     width: 100%;
                     display: flex;
                     align-items: center;
                     text {
                        font-weight: 400;
                        font-size: 30rpx;
                        color: #222222;
                     }
                     .user-info-l-i-top-jdf {
                        width: 96rpx;
                        height: 42rpx;
                        line-height: 42rpx;
                        text-align: center;
                        font-weight: 400;
                        font-size: 24rpx;
                        color: #FF7200;
                        border-radius: 8rpx;
                        border: 2rpx solid #FD9E24;
                        margin-left: 10rpx;
                     }
                  }
                  .user-info-l-i-bottom {
                     display: flex;
@@ -965,6 +1638,18 @@
            border-radius: 34rpx;
            border: 1rpx solid #B2B2B2;
         }
         .order-quxiao-btn1 {
            width: 160rpx;
            height: 64rpx;
            line-height: 64rpx;
            text-align: center;
            border-radius: 34rpx;
            font-weight: 400;
            font-size: 28rpx;
            color: #00BC12;
            margin-left: 20rpx;
            border: 1rpx solid #00BC12;
         }
      }
   }
   .address {
@@ -988,8 +1673,7 @@
         z-index: 2;
         width: 100%;
         display: flex !important; 
         align-items: center;
         margin-bottom: 30rpx ;
         margin-bottom: 32rpx ;
         margin-left: 0rpx !important;
         margin-top: 0rpx !important;
         &:last-child { 
@@ -1001,10 +1685,17 @@
            flex-shrink: 0;
            margin-right: 24rpx;
         }
         text {
         .address-row-info {
            width: 100%;
            font-weight: 400;
            font-size: 28rpx;
            color: #333333;
            .address-row-right {
               width: 8rpx;
               height: 16rpx;
               margin-left: 12rpx;
               margin-top: 15rpx;
            }
         }
      }
   }