<template>
	<div class="{{cssName}}">
	</div>
</template>

<script>
  import emitter from 'element-ui/src/mixins/emitter';
  export default {
    name: "{{fileName}}",
    mixins: [emitter],
		props:{
      defaultValue: {
        type: Array,
        default() {
          return []
        },
      },

      maps: {
        type: Object | null,
        default() {
          return null
        },
      },

      setting: {
        type: Object,
        default() {
          return {
            // fullUnit: '元',
            // cutUnit: '元',
            // fullName: '金额满',
            // cutName: '运费减'
						//todo 插件配置表（外面传入）
					}
        },
      },

      disabled: {
        type: Boolean,
        default: false,
      },

      size: {
        type: String,
        default: 'medium', //medium / small / mini
      },

      placeholder: {
        type: Object,
        default() {
          return {
            //todo
            // fullPlaceholder: '请输入金额',
            // cutPlaceholder: '请输入金额',
            //todo 插件文本框所使用提示（外面传入）
          }
        },
      },

      required: {
        type: Boolean,
        default: false,
      },

      //是否启用自定义校验器
      useCustomRules: {
        type: Boolean,
        default: false,
      },

      //数字字符串 转 数字
      isNumber: {
        type: Boolean,
        default: true,
      },

      //自定义方法
      handleCustom: {
        type: Function || null,
        default: null
      },
			
		},
		data(){
      return {
        //todo 插件使用参数

        //默认map关系显示
        defaultMap: {
          //todo 插件涉及到到变量map关系值
          // full_price: 'full_price',
          // cut_price: 'cut_price'
        }
			}
		},
		
		created(){
      //设置默认值为空时候处理
      if (this.defaultValue === null || this.defaultValue.length === 0) {
				//todo 初始化插件所使用到绑定值
      }
      //非空处理
      else {
        this.handleMapToList();
      }

      //绑定数据
      this.update();
		},
		
		methods: {

      /**
       * @description 返回映射关系对象数据（需要自己实现）
			 * 把内部数据转化为返回数据格式
       */
      handleListToMap() {
        //todo 返回绑定值
      },

      /**
       * @description 初始化映射关系到数据列表(需要自己实现)
			 * 把默认数据转化为内部数据
       */
      handleMapToList() {
        //todo 把传入中转化绑定值列表
      },

      //插件系统方法///////////////////////////////////////
      /**
       * @description 获取Maps中键与值
       * @param type {boolean} 返回值类型  true=>获取键  false=>值
       * @param keyword {string} 查找关键字
       * @return {null|string} null=>未找到  string=>找到
       */
      getMap(keyword, type) {
        let maps = null;
        let value = null;
        if (this.maps !== null && !this.$xdHelper.isEmpty(this.maps)) {
          maps = this.$xdHelper.cloneDeep(this.maps);
        }

        //先默认maps关系中找
        Object.keys(this.defaultMap).map(ky => {
          //获取键
          if (type) {
            if (this.defaultMap[ky] === keyword) {
              value = ky;
            }
          } else {
            if (this.defaultMap[keyword]) value = this.defaultMap[keyword];
          }
        });

        //无外部map关系并且在默认关系表中无键
        if (value === null && maps === null) {
          //console.log('1')
          return null;
        }

        //无外部map关系并且在默认关系表中键
        if (value !== null && maps === null) {
          //console.log('2', value)
          return value;
        }

        //有外部map关系进行查找
        Object.keys(maps).map(ky => {
          //获取键
          if (type) {
            if (maps[ky] === keyword) {
              value = ky;
            }
          } else {
            if (this.maps[keyword]) value = this.maps[keyword];
          }
        });
        //console.log('3')
        return value;

      },
			

      /**
			 * @description 需要校验检查参数是正确处理方法
       */
			checkParams(){
        if (!this.required) return this.handleListToMap();
        //过滤条件需要自己实现

        //todo 对返回进行数据加工处理并付给temp
        let temp = this.list.filter(item => {
          
          return true
        });

        //todo 使用自定义校验器
        if (this.useCustomRules && temp.length > 0) return this.handleListToMap();
        
        //todo 使用简单校验器
        if (temp.length > 0) return [];
        
        //校验成功
        return this.handleListToMap();
			},
			
			/**
			 * @description 数据改变事件
			 */
			change(){
			  this.$emit('onChange', this.checkParams())
			},


      /**
			 * @description 双向绑定数据处理
       */
			update(){
        this.$emit('input', this.checkParams());
        if (this.$parent.$options['componentName'] === 'ElFormItem') {
          this.dispatch('ElFormItem', 'el.form.change', [this.checkParams()]);
          this.dispatch('ElFormItem', 'el.form.blur', [this.checkParams()])
        }
			},
			
			
		}
  }
</script>

<style scoped lang="scss">
	.{{cssName}} {
	
	}
	
	@media screen and (max-width: 768px) {
		.{{cssName}} {
		}
	}
</style>
