add-time-dur.js 5.46 KB
// pack-book/components/book/time/add-time-dur.js
import util  from'../../../../utils/util.js'
import App from '../../../../utils/api';
import PubSub from '../../../../utils/PubSub';
const timeSort=['morning', 'noon', 'night'];
const timeConfig= {
  'morning':{
    name:'早市',
    defTime:'',
  },
  'noon':{
    name:'午市',
    defTime:'12:00',
  },
  'night': {
    name: '晚市',
    defTime: '18:30'
  },
}
Component({
  /**
   * 组件的属性列表
   */
  properties: {

  },
  lifetimes: {
    attached: function () {
      //event {type: 1, date: "2019-12-31", dur_time: "NaN", dateIndex: 0}
      PubSub.on('add-time-dur',(event)=>{
        console.log('add-time-dur.PubSub',event)
        this.hasManual=false
        this.config=null
        this.ddate_solt=-1
        this.date=event.date
        this.dateIndex=event.dateIndex
        this.dur_time=event.dur_time
        this.type=event.type
        this.initSolt()//初始化solt
      })
    },
    moved: function () { },
    detached: function () {
      PubSub.off('add-time-dur')
    },
  },
  observers:{},
  /**
   * 组件的初始数据
   */
  data: {
    ddate_solt:-1,
    config:[],
  },

  /**
   * 组件的方法列表
   */
  methods: {
    async initSolt(){//初始化solt
      if(this.initSoltIng) return false
      this.initSoltIng=true
      await this.getConfig();//时段配置
      this.initSoltIng=false
    },
    async getConfig(){//时段配置
      let res = await App.Reserve.SellerInfo(util.cache('enter_params'));
      let daily = res.data.daily;
      console.log('add-time-dur.daily',daily)
      this.initUserTime(daily)
      setTimeout(()=>{
        this.trigger();
      },0)
    },
    initUserTime(daily){
      let config=[]
      let datetime=util.unixtoTime(this.dur_time,"YYYY-MM-DD,HH:II").split(',')
      let TODAY=datetime[0]
      let HHII=datetime[1]
      this.ddate_solt=-1
      let ddate_solt_bak=-1;
      timeSort.forEach((en_name,ti)=>{
        let dur=daily[en_name];
        let min='',max='',hasShow=false,hasDisabled=false,hasChecked=false
        if(dur){
          if(ddate_solt_bak==-1){
            ddate_solt_bak=ti
          }
          hasShow=true
          dur=dur.split('-');
          min=dur[0];
          max=dur[1];
          if(HHII<=max && this.ddate_solt==-1){
            hasChecked=true
            this.ddate_solt=ti
          }
          if(HHII>max && this.dateIndex==0 && this.type==1){//灰掉今天过期时间
            hasDisabled=true
          }
        }
        config.push({
          name:timeConfig[en_name].name,
          en_name:en_name,
          hasShow:hasShow,
          min:min,
          max:max,
          hasDisabled:hasDisabled,
          hasChecked:hasChecked,
          defTime:timeConfig[en_name].defTime
        });
      })
      if(this.ddate_solt==-1 && this.dateIndex!=0){
        //不是今天,过了时间,选中第一时段
        this.ddate_solt=ddate_solt_bak
        config[ddate_solt_bak].hasChecked=true
      }
      this.config=config;
      console.log('add-time-dur.initUserTime',this.ddate_solt,this.config)
      this.setData({
        config:this.config,
        ddate_solt:this.ddate_solt,
      })
    },
    selectedValue(e){
      console.log('add-time-dur.selectedValue',e)
      let ddate_solt=util.attr(e,'value')
      if(this.ddate_solt==ddate_solt) return;
      this.ddate_solt=ddate_solt
      this.hasManual=true //手动选择时段
      this.config.forEach((t,ti)=>{
        //t.hasDisabled=false
        t.hasChecked=ti==this.ddate_solt
      })
      this.setData({
        config:this.config,
        ddate_solt:this.ddate_solt,
      })
      this.trigger();
    },
    initTimeSpaceIndex(){//对选中时段进行展开
      if(this.ddate_solt<0) return {list:[],listIndex:-1};
      let min=this.config[this.ddate_solt].min
      let max=this.config[this.ddate_solt].max
      let defTime=this.config[this.ddate_solt].defTime
      let time=this.dur_time
      min=util.timetouUnix(util.unixtoTime(time,"YYYY-MM-DD "+min+":00"))
      max=util.timetouUnix(util.unixtoTime(time,"YYYY-MM-DD "+max+":00"))
      if(defTime && (this.type!=2 || this.hasManual)){//非修改时或手动选择,优先默认时间
        defTime=util.timetouUnix(util.unixtoTime(time,"YYYY-MM-DD "+defTime+":00"))
        if(defTime>time || this.dateIndex>0){
          time=defTime
        }
      }
      console.log('add-time-dur.ttime',defTime,util.unixtoTime(time,"YYYY-MM-DD HH:II:SS"))
      let nowtime=parseInt(new Date()/1000)
      let dur,timeCheckedIndex=-1,list=[];
      for(dur=parseInt(min);dur<=max;dur+=1800){
        let t={
          hasChecked:time<=dur,
          time:dur,
          disabled:this.dateIndex==0 && this.type==1 && nowtime>dur,//新增 &&今天 && 过期 时 disabled
        }
        list.push(t)
        if(dur<=time){
          timeCheckedIndex++
        }
      }
      if(this.dateIndex==0 && this.type==1 && !defTime){//新增 &&今天 无默认时间,+1
        timeCheckedIndex+=1
      }
      timeCheckedIndex=timeCheckedIndex>=list.length?list.length-1:timeCheckedIndex
      console.log('add-time-dur.tindex',list,timeCheckedIndex)
      return {list:list,listIndex:timeCheckedIndex}
    },
    trigger(){
      let timeList=this.initTimeSpaceIndex()
      let data={
        ddate_solt:this.ddate_solt,
        dur_list:timeList.list,
        dur_list_checked:timeList.listIndex,
      }
      //this.triggerEvent('event',data)
      console.log('dur-items.trigger',data)
      PubSub.emit('dur-items',data)
    }
  }
})