reserveStatus.js 3.32 KB
/*
channel 预定渠道 1/2/3/4 微信小程序/电话机/安卓手机客户端/C端
is_set_ddate 是否设置到底时间 1/0 是/否
action 默认为0 未发短信 1 已发短信 2已回访
type 0商家 1顾客
status 0:待确认1:已定座2:确认到店(到店)3:用餐完成(离店)4:取消预定 5:C端在线预定(分配包间)6:拒单
ddate_solt 未设置/早市/午市/晚市/夜宵 0/1/2/3/4
*/
import util from './util'
const status=[
  '待确认',//0:待确认
  '已预订',//1:已定座
  '已完成',//2:确认到店(到店)
  '已完成',//3:用餐完成(离店)
  '已取消',//4:取消预定
  '已预订',//5:C端在线预定(分配包间)
  '已拒绝'//6:拒单
];
const soltName=['','早餐','午餐','晚餐','夜宵']
export default {
  reserve(detail){
    detail.hasRunning=this.hasRunningFlag(detail)
    if(!detail.hasRunning){
      detail.hasCancel=detail.status==4;
      detail.hasOvered=detail.status!=0 && detail.status!=6;
    }
    //是否可以修改到店时间
    detail.hasUpdateDate=detail.type==1 && detail.is_set_ddate==0
    console.log('detail.hasUpdateDate',detail.hasUpdateDate)
    detail.getStatusStr='';
    if(detail.status>=0){
      detail.getStatusStr=status[detail.status];
      if(!detail.hasRunning && (detail.status==1 || detail.status==5)){
        detail.getStatusStr=status[3];
      }
    }
    //mask
    if(detail.phone){
      detail.phoneMask=detail.phone.replace(/([\d]{2})([\d]+)([\d]{4})/g,($0,$1,$2,$3)=>{
        return $1+'**'+$3
      })
    }
    //room_demand
    if(detail.room_demand && typeof detail.room_demand=='string'){
      detail.room_demand=JSON.parse(detail.room_demand)
      detail.room_demand_str=detail.room_demand[0].name
      let how=detail.room_demand.length
      if(how>1){
        detail.room_demand_str+=' 等'+how+'间'
      }
    }
    detail.soltName=soltName[detail.ddate_solt]
    return detail;
  },
  hasRunningFlag(detail){//判断订单正在运行
    let ns = new Date() / 1000
    let flag=true;
    if(detail.status==0 || detail.status==6 || detail.status==4) return false//未进行状态
    if(detail.status==3) return false //用餐完成(离店)
    //if(ns > detail.edate) return false//超时
    //console.log('ns > this.getNextTime(detail)',ns , this.getNextTime(detail))
    if(ns > this.getNextTime(detail)) return false//超时
    return flag
  },
  getNextTime(detail){//获取下时段时间
    if(!detail.seller) return detail.edate
    let solt=['','morning','noon','night','ye'];
    let daily=detail.seller.daily
    if(!daily) return detail.edate;
    let solt_index=solt[detail.ddate_solt]
    if(!solt_index) return detail.edate;
    let dur=daily[solt[detail.ddate_solt]]
    if(!dur) return detail.edate;
    let last_time='';
    let hasToday=true
    for(let i=(parseInt(detail.ddate_solt)+1);i<solt.length;i++){
      if(daily[solt[i]]){
        last_time=daily[solt[i]]
        break;
      }
    }
    if(!last_time){//跨天
      for(let i=1;i<solt.length;i++){
        if(daily[solt[i]]){
          hasToday=false
          last_time=daily[solt[i]]
          break;
        }
      }
    }
    if(!last_time) return detail.edate;
    let ns=util.timetouUnix(util.unixtoTime(detail.edate,"YYYY-MM-DD "+last_time.substr(0,5)+':00'))
    if(hasToday) return ns
    return parseInt(ns)+86400
  },
}