categoryList.js 6.15 KB
//categoryList.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    filterData: {},
    filterList: [],
    filterIndex: 0,
    storageKey: '',
    currentFilter: {},
    multiSelect: false,
    selectItemsIds: '',
    selectItemsName: '',
    selectedItems: [],
    allSelect: false,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let key = options.storageKey;
    let start = options.index;
    let that = this;
    wx.getStorage({
      key: key,
      success: function (res) {
        if (res.data.length > 0) {
          let filterData = res.data;
          let currentFilter = filterData.slice(start, parseInt(start) + 1)[0];
          let filterList = currentFilter.allItemList;
          if (!filterList) {
            return;
          }
          that.setData({
            storageKey: key,
            filterIndex: start,
            filterData: filterData,
            currentFilter: currentFilter,
            filterList: filterList,
            multiSelect: currentFilter.multiSelect,
            selectItemsIds: currentFilter.selectItemsIds ? currentFilter.selectItemsIds : '',
            selectItemsName: currentFilter.selectItemsName ? currentFilter.selectItemsName : '',
            selectedItems: currentFilter.selectedItems ? currentFilter.selectedItems : [],
          });
          let selectedItems = that.data.selectedItems;
          //childItem首位添加全部
          filterList.map((filterItem) => {
            filterItem.isExpand = false;
            filterItem.childItems.splice(0, 0, {
              itemId: filterItem.itemId,
              itemName: '全部' + filterItem.itemName,
              isSelected: false
            });
          });
          // 初始状态
          filterList.map((filterItem) => {
            filterItem.childItems && filterItem.childItems.map((childItem, index) => {
              childItem.isSelected = false;
              selectedItems && selectedItems.map((item) => {
                if (item.itemId == childItem.itemId) {
                  childItem.isSelected = true;
                  filterItem.isExpand = true;
                }
              });
            });
          });
          if (selectedItems.length == 0) {
            filterList[0].isExpand = true;
          }
          that.setData({
            filterList,
            allSelect: selectedItems.length == 0
          });
        }
      },
    })
  },

  //选择全部品类(相当于清空)
  clearCategroy: function () {
    this.setData({
      allSelect: true,
      selectedItems: [],
      allSelect: this.data.selectedItems.length == 0
    });

    this.navigateBack();
  },

  //选择品类
  selectItem: function (e) {
    let index = e.currentTarget.dataset.index;
    let filterList = this.data.filterList
    filterList[index].isExpand = !filterList[index].isExpand;
    this.setData({ filterList });
  },

  //选择具体品类
  selectChildItem: function (e) {
    let item = e.currentTarget.dataset.item;
    let selectedItems = this.data.selectedItems;
    let filterList = this.data.filterList;
    let multiSelect = this.data.multiSelect;
    if (multiSelect) { //多选
      if (item.isSelected) {
        let indexs = -1;
        for (let i = 0; i < selectedItems.length; i++) {
          let items = selectedItems[i];
          if (item.itemId == items.itemId) {
            indexs = i;
            break;
          }
        }
        if (indexs > -1) {
          selectedItems.splice(indexs, indexs + 1); //删除
        }
      } else {
        item.isSelected = true;
        selectedItems.push(item); // 添加
      }
      filterList && filterList.map((filterItem) => {
        filterItem.childItems && filterItem.childItems.map((childItem, index) => {
          if (item.itemId == childItem.itemId) {
            childItem.isSelected = !childItem.isSelected;
          }
        });
      });
    } else { //单选
      selectedItems = [];
      if (!item.isSelected) {
        item.isSelected = true;
        selectedItems.push(item);
      }
      filterList && filterList.map((filterItem) => {
        filterItem.childItems && filterItem.childItems.map((childItem, index) => {
          if (item.itemId == childItem.itemId) {
            childItem.isSelected = !childItem.isSelected;
          } else {
            childItem.isSelected = false;
          }
        });
      });
    }
    this.setData({
      filterList,
      selectedItems,
      allSelect: selectedItems.length == 0
    });
    this.navigateBack();
  },

  //返回上一页
  navigateBack: function () {
    let selectItemsIds = '';
    let selectItemsName = '';
    let selectedItems = this.data.selectedItems;
    selectedItems && selectedItems.map((item, index) => {
      selectItemsName = selectItemsName + item.itemName + ',';
      selectItemsIds = selectItemsIds + item.itemId + ',';
    });
    selectItemsIds = selectItemsIds.slice(0, selectItemsIds.length - 1);
    selectItemsName = selectItemsName.slice(0, selectItemsName.length - 1);
    let currentFilter = this.data.currentFilter;
    currentFilter.selectedItems = selectedItems;
    currentFilter.selectItemsIds = selectItemsIds;
    currentFilter.selectItemsName = selectItemsName;

    var filterData = this.data.filterData;
    filterData.splice(this.data.filterIndex, 1, currentFilter);

    this.setData({
      filterData,
      selectItemsIds: selectItemsIds,
      selectItemsName: selectItemsName,
    })

    wx.setStorage({
      key: this.data.storageKey,
      data: filterData
    })

    wx.navigateBack({
      delta: 1
    })
  },

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

  },

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

  },

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

  },

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

  },

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

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})