mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-04 04:08:43 +08:00 
			
		
		
		
	
		
			
	
	
		
			130 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| 
								 | 
							
								<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>
							 |