all files / packages/picker/src/ picker.vue

22.58% Statements 7/31
22.22% Branches 4/18
7.14% Functions 1/14
8% Lines 2/25
1 branch Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150                                                                                                                                                                                                                                                                                                         
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
 
import PickerColumn from './picker-column';
 
const DEFAULT_ITEM_HEIGHT = 44;
 
export default {
  name: 'zan-picker',
 
  components: {
    PickerColumn
  },
 
  props: {
    /**
     * 每一列可见备选元素的个数
     */
    visibileColumnCount: {
      type: Number,
      default: 5
    },
    /**
     * 选中元素区高度
     */
    itemHeight: {
      type: Number,
      default: DEFAULT_ITEM_HEIGHT
    },
    /**
     * 对象数组,配置每一列显示的数据
     */
    columns: {
      type: Array,
      default() {
        return [];
      }
    },
    /**
     * 否在组件顶部显示一个toolbar
     */
    showToolbar: {
      type: Boolean,
      default: true
    }
  },
 
  computed: {
    values() {
      let columns = this.columns || [];
      let values = [];
 
      columns.forEach(column => {
        values.push(column.value || column.values[column.defaultIndex || 0]);
      });
 
      return values;
    }
  },
 
  methods: {
    /**
     * 处理列`change`事件
     */
    columnValueChange() {
      this.$emit('change', this, this.values);
    },
 
    /**
     * 获取对应索引的列的实例
     */
    getColumn(index) {
      let children = this.$children.filter(child => child.$options.name === 'zan-picker-column');
      return children[index];
    },
 
    /**
     * 获取对应列中选中的值
     */
    getColumnValue(index) {
      let column = this.getColumn(index);
      return column && column.values[column.valueIndex];
    },
 
    /**
     * 设置对应列中选中的值
     */
    setColumnValue(index, value) {
      let column = this.getColumn(index);
      if (column) {
        column.currentValue = value;
      }
    },
 
    /**
     * 获取对应列中所有的备选值
     */
    getColumnValues(index) {
      let column = this.getColumn(index);
      return column && column.currentValues;
    },
 
    /**
     * 设置对应列中所有的备选值
     */
    setColumnValues(index, values) {
      let column = this.getColumn(index);
      if (column) {
        column.currentValues = values;
      }
    },
 
    /**
     * 获取所有列中被选中的值,返回一个数组
     */
    getValues() {
      return this.values;
    },
 
    /**
     * `values`为一个数组,设置所有列中被选中的值
     */
    setValues(values) {
      values.forEach((value, index) => {
        this.setColumnValue(index, value);
      });
    }
  }
};