| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | 
							- <template>
 
- 	<view class="w-picker-view">
 
- 		<picker-view class="d-picker-view" :indicator-style="itemHeight" :value="pickVal" @change="handlerChange">
 
- 			<picker-view-column>
 
- 				<view class="w-picker-item" v-for="(item,index) in range" :key="index">{{item[nodeKey]}}</view>
 
- 			</picker-view-column>
 
- 		</picker-view>
 
- 	</view>
 
- </template>
 
- <script>
 
- 	export default {
 
- 		props:{
 
- 			itemHeight:{
 
- 				type:String,
 
- 				default:"44px"
 
- 			},
 
- 			options:{
 
- 				type:[Array,Object],
 
- 				default(){
 
- 					return []
 
- 				}
 
- 			},
 
- 			value:{
 
- 				type:String,
 
- 				default:""
 
- 			},
 
- 			defaultType:{
 
- 				type:String,
 
- 				default:"label"
 
- 			},
 
- 			defaultProps:{
 
- 				type:Object,
 
- 				default(){
 
- 					return{
 
- 						label:"label",
 
- 						value:"value"
 
- 					}
 
- 				}
 
- 			}
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				pickVal:[]
 
- 			};
 
- 		},
 
- 		computed:{
 
- 			nodeKey(){
 
- 				return this.defaultProps.label;
 
- 			},
 
- 			nodeValue(){
 
- 				return this.defaultProps.value;
 
- 			},
 
- 			range(){
 
- 				return this.options
 
- 			}
 
- 		},
 
- 		watch:{
 
- 			value(val){
 
- 				if(this.options.length!=0){
 
- 					this.initData();
 
- 				}
 
- 			},
 
- 			options(val){
 
- 				this.initData();
 
- 			}
 
- 		},
 
- 		created() {
 
- 			if(this.options.length!=0){
 
- 				this.initData();
 
- 			}
 
- 		},
 
- 		methods:{
 
- 			initData(){
 
- 				let dVal=this.value||"";
 
- 				let data=this.range;
 
- 				let pickVal=[0];
 
- 				let cur=null;
 
- 				let label="";
 
- 				let value,idx;
 
- 				if(this.defaultType==this.nodeValue){
 
- 					value=data.find((v)=>v[this.nodeValue]==dVal);
 
- 					idx=data.findIndex((v)=>v[this.nodeValue]==dVal);
 
- 				}else{
 
- 					value=data.find((v)=>v[this.nodeKey]==dVal);
 
- 					idx=data.findIndex((v)=>v[this.nodeKey]==dVal);
 
- 				}
 
- 				pickVal=[idx!=-1?idx:0];
 
- 				this.$nextTick(()=>{
 
- 					this.pickVal=pickVal;
 
- 				});
 
- 				if(this.defaultType==this.nodeValue){
 
- 					this.$emit("change",{
 
- 						result:value?value[this.nodeKey]:data[0][this.nodeKey],
 
- 						value:dVal||data[0][this.nodeKey],
 
- 						obj:value?value:data[0]
 
- 					})
 
- 				}else{
 
- 					this.$emit("change",{
 
- 						result:dVal||data[0][this.nodeKey],
 
- 						value:value?value[this.nodeValue]:data[0][this.nodeValue],
 
- 						obj:value?value:data[0]
 
- 					})
 
- 				}
 
- 				
 
- 			},
 
- 			handlerChange(e){
 
- 				let arr=[...e.detail.value];
 
- 				let pickVal=[arr[0]||0];
 
- 				let data=this.range;
 
- 				let cur=data[arr[0]];
 
- 				let label="";
 
- 				let value="";
 
- 				this.$nextTick(()=>{
 
- 					this.pickVal=pickVal;
 
- 				});
 
- 				this.$emit("change",{
 
- 					result:cur[this.nodeKey],
 
- 					value:cur[this.nodeValue],
 
- 					obj:cur
 
- 				})
 
- 			}
 
- 		}
 
- 	}
 
- </script>
 
- <style lang="scss">
 
- 	@import "./w-picker.css";
 
- </style>
 
 
  |