/*******************************************************************************
 * Copyright(c) 2024 dongke All rights reserved. / Confidential
 * 类的信息：
 *		1.程序名称：
 *		2.功能描述：查询条件
 * 编辑履历：
 *		作者				日期					版本				修改内容
 *		周兴		  	2024-1-25	  	1.00		   	新建
 *******************************************************************************/

const app = getApp()
const Constants = require('../../../utils/Constants');
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    menuList: { //查询条件数组
      type: Array,
      value: []
    },
    //筛选数组
    pullMenuList: {
      type: Array,
      value: [],
    },
    // 是否开启大查询
    flgSearchText: {
      type: Boolean,
      value: true,
    },
    // 大查询的提示信息
    searchTextPlaceholder: {
      type: String,
    },
    // 结果集
    value: {
      type: String,
      observer: function (newVal) {
        if (newVal) {
          this.setData({
            form: JSON.parse(newVal) || {}
          })

        }
      }
    }
  },
  /**
   * 组件的初始数据
   */
  data: {
    $t: app.globalData.lang,
    // 下拉
    dropDownFlag: false,
    // 筛选
    pickFlag: false,
    // 筛选中的日期组件显示标识
    dropDateFlag: false,
    dropType: null,
    dropCode: null,
    index: null,
    searchType: null,
    // 记录是哪个组件点击出现的日期
    dropDateCode: null,
    // 下拉多选数据源
    pullMSelectMenuList: [],
    // 下拉多选外数据源
    pullOtherMenuList: [],
    // 大查询条件
    searchText: '',
    // 是否是大查询进行的查询
    searchTextFlag: false,
    form: {}
  },
  lifetimes: {
    attached: function () {
      let pullMSelectMenuList = this.data.pullMenuList.filter(it => it.pullType == Constants.pullType.mSelect);
      let pullOtherMenuList = this.data.pullMenuList.filter(it => it.pullType != Constants.pullType.mSelect);
      this.setData({
        pullMSelectMenuList: pullMSelectMenuList,
        pullOtherMenuList: pullOtherMenuList
      })
    },
    detached: function () {
      // 在组件实例被从页面节点树移除时执行
    },
  },
  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * @desc   : 展开下拉
     * @author : 周兴
     * @date   : 2024/1/26 11:46
     */
    openDropdown(e) {
      let item = e.currentTarget.dataset.item;
      if(item.searchType === Constants.searchType.radio){
        return;
      }
      let index = e.currentTarget.dataset.index;
      // 如果点击的不是同一个下拉就清空数据源
      if (this.data.index != index && this.selectComponent('#drop') != null) {
        this.selectComponent('#drop').clearAll();
      }
      if (!item.searchType || item.searchType === Constants.searchType.drop) {
        this.setData({
          dropDownFlag: true,
          dropCode: item.code,
          index: index,
          dropType: item.dropType ? item.dropType : item.code,
          searchType: item.searchType ? item.searchType : Constants.searchType.drop
        })
      }
      // 筛选
      else if (item.searchType === Constants.searchType.pick) {
        this.setData({
          pickFlag: true,
          index: index,
          dropCode: item.dropType ? item.dropType : item.code,
          searchType: item.searchType
        })
      }
      else {
        this.setData({
          index: index,
          dropDownFlag: false,
          pickFlag: false,
          dropCode: null,
          dropType: null
        })
      }
    },
    /**
     * @desc : 修改排序的值
     * @author : 周兴
     * @date : 2024/3/5 12:16
     */
    onChange(e) {
      let item = e.currentTarget.dataset.item;
      let index = e.currentTarget.dataset.index;
      // 排序
      if (item.searchType === 'radio') {
        let code = item.code
        let form = this.data.form
        form[code] = e.detail
        let menuList = this.data.menuList
        if (index || index == 0) {
          if (menuList.length > index) {
            let options = item.options;
            if(options){
              let optionsIndex = options.findIndex(it=>it.value == e.detail);
              menuList[index].title = options[optionsIndex].text;
              menuList[index].value = e.detail;
            }
          }
        }
        console.log('menuList', menuList, e.detail);

        this.setData({
          form: form,
          value: JSON.stringify(form),
          menuList: menuList
        })
        if (!e.detail.initFlag) {
          // 调取查询
          this.doSearch();
        }
        this.selectComponent('#' + item.code).toggle(false);
      }
    },
    /**
     * @desc : 查询条件
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    onSearchText(e) {
      let form = this.data.form
      form.searchText = e.detail
      this.setData({
        form:form,
        value:JSON.stringify(form),
        searchTextFlag: e.detail ? true : false//TOP搜索输入标识
      })
    },
    /**
     * @desc : 执行查询
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    doSearch() {
      let form = null;
      // 大查询
      if (this.data.searchTextFlag) {
        // form = {
        //   searchText: this.data.searchText
        // }
        form = this.data.form
      } else {
        form = this.data.form
        form.searchText = undefined
      }
      console.log('form',form);
      this.setData({
        form: form,
        value: JSON.stringify(form)
      })
      this.triggerEvent('search');
    },
    /**
     * @desc : 日期组件后的回调
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    dateCommit(e) {
      let data = e.detail.date
      let code = e.detail.code
      let form = this.data.form
      form[code + 'Start'] = data[0]
      form[code + 'End'] = data[1]
      console.log('rrr',data[0],typeof data[0],form);
      let menuList = this.data.menuList
      let dateDefault = e.detail.dateDefault
      if (this.data.index || this.data.index == 0) {
        if (menuList.length > this.data.index) {
          menuList[this.data.index].defaultValue = dateDefault.value
          menuList[this.data.index].title = dateDefault.text
        }
      }
      console.log('menuList', menuList, e.detail);

      this.setData({
        form: form,
        value: JSON.stringify(form),
        menuList: menuList
      })
      if (!e.detail.initFlag) {
        // 调取查询
        this.doSearch();
      }
      this.selectComponent('#' + e.detail.code).toggle(false);
    },
    /**
     * @desc : 开关组件后的回调
     * @author : 周兴
     * @date : 2024/2/18 12:16
     */
    switchCommit(e) {
      let code = e.detail.code
      let key = e.detail.key
      let menuList = this.data.menuList
      let form = this.data.form
      console.log("switchCommit",e,form);
      if(key == 'valueList'){
        form[code + 'List'] = e.detail.valueList
      }else{
        form[code + 'List'] = e.detail.values
      }
    
      if (this.data.index || this.data.index == 0) {
        if (menuList.length > this.data.index) {
          menuList[this.data.index].list = e.detail.dataList
        }
      }
      this.setData({
        form: form,
        value: JSON.stringify(form),
        menuList: menuList
      })
      // 调取查询
      this.doSearch();
      this.selectComponent('#' + e.detail.code).toggle(false);
    },
    /**
     * @desc : 下拉多选确定
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    mutiSearchAll(e) {
      let menuList = this.data.menuList
      if (!this.data.pickFlag && menuList.length > this.data.index) {
        menuList[this.data.index].title = e.detail.names;
      }
      let form = this.data.form
      form[this.data.dropCode + 'Ids'] = e.detail.idList
      this.setData({
        form: form,
        value: JSON.stringify(form),
        menuList: menuList,
        dropDownFlag: false,
        pickFlag: false
      })

      this.selectComponent('#' + this.data.dropCode).toggle(false);
      // 调取查询
      this.doSearch();
    },
    /**
     * @desc : 关闭下拉抽屉
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    mutiCloseAll(e) {
      this.setData({
        pickFlag: false
      })
      this.selectComponent('#' + this.data.dropCode).toggle(false);
    },
    /**
     * @desc : 文本框改变事件
     * @author : 周兴
     * @date : 2024/1/26 12:16
     */
    handleFieldChange(e) {
      let key = e.currentTarget.dataset.key
      let form = this.data.form
      form[key] = e.detail
      this.setData({
        form: form,
        value: JSON.stringify(form),
      })
    },
    /**
   * @desc : check点击事件
   * @author : 周兴
   * @date : 2024/1/27 08:59
   */
    onChangeCheck(e){
      console.log(e,"onChangeCheck");
      let key = e.currentTarget.dataset.key
      let checkFlag = e.currentTarget.dataset.value
      let form = this.data.form
      form[key] = !checkFlag
      this.setData({
        form: form,
        value: JSON.stringify(form),
      })
    },
    /**
   * @desc : 筛选数据源组件点击事件
   * @author : 周兴
   * @date : 2024/1/27 08:59
   */
    onClickTag(e) {
      let key = e.detail.key
      let dataList = e.detail.dataList
      let codeList = e.detail.codeList
      let form = this.data.form
      form[key + 'List'] = dataList;
      if (codeList && codeList.length > 0) {
        form[key + 'List'] = codeList;
      }
      this.setData({
        form: form,
        value: JSON.stringify(form)
      })
    },
    /**
   * @desc : 打开筛选中的日期
   * @author : 周兴
   * @date : 2024/1/29 08:59
   */
    onClickDate(e) {
      this.setData({
        dropDateFlag: true,
        dropDateCode: e.currentTarget.dataset.key
      })
    },
    /**
   * @desc : 选择筛选中的日期
   * @author : 周兴
   * @date : 2024/1/29 08:59
   */
    pickDateCommit(e) {
      let form = this.data.form
      let date = e.detail.date[0] + '~' + e.detail.date[1]
      form[this.data.dropDateCode] = date
      form[this.data.dropDateCode + 'Start'] = e.detail.date[0];
      form[this.data.dropDateCode + 'End'] = e.detail.date[1];
      console.log('rre',e.detail.date[0]);
      this.setData({
        form: form,
        value: JSON.stringify(form)
      })
    },
    /**
     * @desc : 筛选重置事件
     * @author : 周兴
     * @date : 2024/1/27 08:59
   */
    clearform() {
      let form = this.data.form;
      let pullMSelectMenuList = this.data.pullMSelectMenuList;
      let pullOtherMenuList = this.data.pullOtherMenuList;
      if (form != null) {
        // 多选下拉
        pullMSelectMenuList.forEach(it => {
          if (form[it.code + 'List']) {
            // 删除form中的属性
            delete form[it.code + 'List'];
            this.selectComponent("#" + it.code).clearForm();
          }
        })
        // 非多选下拉
        pullOtherMenuList.forEach(it => {
          if (form[it.code]) {
            // 删除form中的属性
            delete form[it.code];
          }
          // 如果有日期删除日期
          if (it.dataType == Constants.dataType.date) {
            delete form[it.code + "Start"];
            delete form[it.code + "End"];
          }
        })
        this.setData({
          form: form,
          value: JSON.stringify(form),
          dropDateCode: null
        })
      }
    },
    /**
     * @desc : 获取语言的方法
     * @author : 周兴
     * @date : 2024/1/19
     */
    $t(name) {
      if (this.data.$t[name]) {
        return this.data.$t[name];
      } else {
        return name;
      }
    },
  },
})