indexList.js 4.47 KB
// pages/reserve/indexList.js
import util from '../../utils/util';
import App from '../../utils/api';
import DA from './data';
const {regeneratorRuntime} = global
import PubSub from '../../utils/PubSub'
Page({

  /**
   * 页面的初始数据
   */
  data: {
    multiArray: ['全部菜系'],
    multiIndex: [0],
    tags:[
      {id:1,name:'环境好'},
      {id:2,name:'菜品有特色'},
      {id:3,name:'超大包间'},
    ],
    markers:[],
    hasMore:true,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function (options) {
    //lat=34.21719&lng=108.89155&map={"errMsg":"getMapRegion:ok","southwest":{"longitude":108.87545674591064,"latitude":34.204520114013846},"northeast":{"longitude":108.90764325408935,"latitude":34.229857981005225},"scale":15}&multiIndex=1&tags=1,2
    this.options=options;
    let tags=[
      {id:1,name:'环境好'},
      {id:2,name:'菜品有特色'},
      {id:3,name:'超大包间'},
    ];
    if(options.tags){
      let ts=options.tags.split(',');
      tags.forEach(t=>{
        if(ts._indexOf(t.id)>-1){
          t.active=true;
        }
      })
    }
    this.setData({
      multiArray:[['全部菜系'].concat(await DA.getCates())],
      multiIndex:[options.multiIndex],
      tags:tags,
    })
    setTimeout(()=>{this.getList()},0)
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    this.getListMore()
  },
  async getList(){
    let mapParam=this.options
    this.offset=1 //page
    this.size=20 //page size
    //计算视窗中心
    let map=JSON.parse(mapParam.map);
    let lat=map.northeast.latitude-(map.northeast.latitude-map.southwest.latitude)/2;
    let lng=map.northeast.longitude-(map.northeast.longitude-map.southwest.longitude)/2;
    this.param={
      lat:lat,
      lng:lng,
      lat_extend:mapParam.lat,
      lng_extend:mapParam.lng,
      offset:this.offset,
      size:this.size,
      distance:50,
    };
    if(this.data.multiIndex[0]>0){
      this.param.cuisine=await DA.getCatesID(this.data.multiIndex[0]-1);
    }
    let tags=[];
    this.data.tags.forEach(t=>{
      if(t.active){
        tags.push(t.id)
      }
    })
    if(tags.length>0){
      this.param.tags=tags;
    }
    App.Customer.SellerLists(this.param).then(res=>{
      this.setData({
        hasMore:res.data.length==this.size,
        markers:this.sellerFormat(res.data),
      })
      this.triggerEvent('event',{type:'getListEnd',total:res.data.length})
    })
  },
  getListMore(){
    this.param.offset+=1;
    let markers=this.data.markers;
    App.Customer.SellerLists(this.param).then(res=>{
      this.setData({
        hasMore:res.data.length==this.size,
        markers:markers.concat(this.sellerFormat(res.data)),
      })
    })
  },
  caixiShow(){
    this.selectComponent('#caixi').show();
  },
  caixiActive(e){
    this.bindMultiPickerChange({
      detail:{
        value:[e.detail]
      }
    })
    PubSub.emit(
      'searchParam',
      {
        fun:'caixiActive',
        e:e,
      }
    )
  },
  bindMultiPickerChange(e){
    console.log(e);
    let val=util.val(e);
    this.setData({
      multiIndex:val
    })
    setTimeout(()=>{this.getList();},0)
  },
  tagsChange(e){
    let id=util.attr(e,'id');
    let tags=this.data.tags;
    let activeNum=0;
    tags.forEach(t=>{
      if(t.id==id){
        t.active=!t.active
      }
      if(t.active){
        activeNum++
      }
    })
    this.setData({
      tags:tags,
    })
    PubSub.emit(
      'searchParam',
      {
        fun:'tagsChange',
        e:e,
      }
    )
    setTimeout(()=>{this.getList();},0)
  },
  gotoDetail(e){
    wx.navigateTo({
      url:'/pages/reserve/detail?id='+util.attr(e,'sid')
    })
  },
  sellerFormat(sellers){
    sellers.forEach((seller) => {
      if(seller.distance) {
        seller.distance = parseInt(seller.distance);
        if (seller.distance > 1000) {
          seller.distance = (seller.distance / 1000).toFixed(2) + '公里'
        } else {
          seller.distance += '米';
        }
      }
    })
    return sellers;
  }
})