index.js 2.6 KB

1
  1. import{VantComponent}from'../common/component';import{pickerProps}from'./shared';VantComponent({classes:['active-class','toolbar-class','column-class'],props:Object.assign(Object.assign({},pickerProps),{valueKey:{type:String,value:'text'},toolbarPosition:{type:String,value:'top'},defaultIndex:{type:Number,value:0},columns:{type:Array,value:[],observer(columns=[]){this.simple=columns.length&&!columns[0].values;this.children=this.selectAllComponents('.van-picker__column');if(Array.isArray(this.children)&&this.children.length){this.setColumns().catch(()=>{})}}}}),beforeCreate(){this.children=[]},methods:{noop(){},setColumns(){const{data}=this;const columns=this.simple?[{values:data.columns}]:data.columns;const stack=columns.map((column,index)=>this.setColumnValues(index,column.values));return Promise.all(stack)},emit(event){const{type}=event.currentTarget.dataset;if(this.simple){this.$emit(type,{value:this.getColumnValue(0),index:this.getColumnIndex(0)})}else{this.$emit(type,{value:this.getValues(),index:this.getIndexes()})}},onChange(event){if(this.simple){this.$emit('change',{picker:this,value:this.getColumnValue(0),index:this.getColumnIndex(0)})}else{this.$emit('change',{picker:this,value:this.getValues(),index:event.currentTarget.dataset.index})}},getColumn(index){return this.children[index]},getColumnValue(index){const column=this.getColumn(index);return column&&column.getValue()},setColumnValue(index,value){const column=this.getColumn(index);if(column==null){return Promise.reject(new Error('setColumnValue: 对应列不存在'))}return column.setValue(value)},getColumnIndex(columnIndex){return(this.getColumn(columnIndex)||{}).data.currentIndex},setColumnIndex(columnIndex,optionIndex){const column=this.getColumn(columnIndex);if(column==null){return Promise.reject(new Error('setColumnIndex: 对应列不存在'))}return column.setIndex(optionIndex)},getColumnValues(index){return(this.children[index]||{}).data.options},setColumnValues(index,options,needReset=true){const column=this.children[index];if(column==null){return Promise.reject(new Error('setColumnValues: 对应列不存在'))}const isSame=JSON.stringify(column.data.options)===JSON.stringify(options);if(isSame){return Promise.resolve()}return column.set({options}).then(()=>{if(needReset){column.setIndex(0)}})},getValues(){return this.children.map((child)=>child.getValue())},setValues(values){const stack=values.map((value,index)=>this.setColumnValue(index,value));return Promise.all(stack)},getIndexes(){return this.children.map((child)=>child.data.currentIndex)},setIndexes(indexes){const stack=indexes.map((optionIndex,columnIndex)=>this.setColumnIndex(columnIndex,optionIndex));return Promise.all(stack)}}});