mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	引入级联选择插件w-picker
This commit is contained in:
		
							
								
								
									
										250
									
								
								yudao-ui-app/components/w-picker/shortterm-picker.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								yudao-ui-app/components/w-picker/shortterm-picker.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,250 @@ | ||||
| <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.dates" :key="index">{{item.label}}</view> | ||||
| 			</picker-view-column> | ||||
| 			<picker-view-column> | ||||
| 				<view class="w-picker-item" v-for="(item,index) in range.hours" :key="index">{{item.label}}时</view> | ||||
| 			</picker-view-column> | ||||
| 			<picker-view-column> | ||||
| 				<view class="w-picker-item" v-for="(item,index) in range.minutes" :key="index">{{item.label}}分</view> | ||||
| 			</picker-view-column> | ||||
| 		</picker-view> | ||||
| 	</view> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| 	export default { | ||||
| 		data() { | ||||
| 			return { | ||||
| 				pickVal:[], | ||||
| 				range:{}, | ||||
| 				checkObj:{} | ||||
| 			}; | ||||
| 		}, | ||||
| 		props:{ | ||||
| 			itemHeight:{ | ||||
| 				type:String, | ||||
| 				default:"44px" | ||||
| 			}, | ||||
| 			value:{ | ||||
| 				type:[String,Array,Number], | ||||
| 				default:"" | ||||
| 			}, | ||||
| 			current:{//是否默认选中当前日期 | ||||
| 				type:Boolean, | ||||
| 				default:false | ||||
| 			}, | ||||
| 			expand:{ | ||||
| 				type:[Number,String], | ||||
| 				default:30 | ||||
| 			} | ||||
| 		}, | ||||
| 		watch:{ | ||||
| 			value(val){ | ||||
| 				this.initData(); | ||||
| 			} | ||||
| 		}, | ||||
| 		created() { | ||||
| 			this.initData(); | ||||
| 		}, | ||||
| 		methods:{ | ||||
| 			formatNum(n){ | ||||
| 				return (Number(n)<10?'0'+Number(n):Number(n)+''); | ||||
| 			}, | ||||
| 			checkValue(value){ | ||||
| 				let strReg=/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}(:\d{2})?$/,example="2019-12-12 18:05:00或者2019-12-12 18:05"; | ||||
| 				if(!strReg.test(value)){ | ||||
| 					console.log(new Error("请传入与mode、fields匹配的value值,例value="+example+"")) | ||||
| 				} | ||||
| 				return strReg.test(value); | ||||
| 			}, | ||||
| 			resetData(year,month,day){ | ||||
| 				let curDate=this.getCurrenDate(); | ||||
| 				let curFlag=this.current; | ||||
| 				let curYear=curDate.curYear; | ||||
| 				let curMonth=curDate.curMonth; | ||||
| 				let curDay=curDate.curDay; | ||||
| 				let curHour=curDate.curHour; | ||||
| 				let months=[],days=[],sections=[]; | ||||
| 				let disabledAfter=this.disabledAfter; | ||||
| 				let monthsLen=disabledAfter?(year*1<curYear?12:curMonth):12; | ||||
| 				let totalDays=new Date(year,month,0).getDate();//计算当月有几天; | ||||
| 				for(let month=1;month<=monthsLen;month++){ | ||||
| 					months.push(this.formatNum(month)); | ||||
| 				}; | ||||
| 				for(let day=1;day<=daysLen;day++){ | ||||
| 					days.push(this.formatNum(day)); | ||||
| 				} | ||||
| 				return{ | ||||
| 					months, | ||||
| 					days, | ||||
| 					sections | ||||
| 				} | ||||
| 			}, | ||||
| 			getData(dVal){ | ||||
| 				//用来处理初始化数据 | ||||
| 				let curFlag=this.current; | ||||
| 				let disabledAfter=this.disabledAfter; | ||||
| 				let dates=[],hours=[],minutes=[]; | ||||
| 				let curDate=new Date(); | ||||
| 				let curYear=curDate.getFullYear(); | ||||
| 				let curMonth=curDate.getMonth(); | ||||
| 				let curDay=curDate.getDate(); | ||||
| 				let aDate=new Date(curYear,curMonth,curDay); | ||||
| 				for(let i=0;i<this.expand*1;i++){ | ||||
| 					aDate=new Date(curYear,curMonth,curDay+i); | ||||
| 					let year=aDate.getFullYear(); | ||||
| 					let month=aDate.getMonth()+1; | ||||
| 					let day=aDate.getDate(); | ||||
| 					let label=year+"-"+this.formatNum(month)+"-"+this.formatNum(day); | ||||
| 					switch(i){ | ||||
| 						case 0: | ||||
| 							label="今天"; | ||||
| 							break; | ||||
| 						case 1: | ||||
| 							label="明天"; | ||||
| 							break; | ||||
| 						case 2: | ||||
| 							label="后天"; | ||||
| 							break | ||||
| 					} | ||||
| 					dates.push({ | ||||
| 						label:label, | ||||
| 						value:year+"-"+this.formatNum(month)+"-"+this.formatNum(day) | ||||
| 					}) | ||||
| 				}; | ||||
| 				for(let i=0;i<24;i++){ | ||||
| 					hours.push({ | ||||
| 						label:this.formatNum(i), | ||||
| 						value:this.formatNum(i) | ||||
| 					}) | ||||
| 				} | ||||
| 				for(let i=0;i<60;i++){ | ||||
| 					minutes.push({ | ||||
| 						label:this.formatNum(i), | ||||
| 						value:this.formatNum(i) | ||||
| 					}) | ||||
| 				} | ||||
| 				return { | ||||
| 					dates, | ||||
| 					hours, | ||||
| 					minutes | ||||
| 				} | ||||
| 			}, | ||||
| 			getDefaultDate(){ | ||||
| 				let value=this.value; | ||||
| 				let reg=/-/g; | ||||
| 				let defaultDate=value?new Date(value.replace(reg,"/")):new Date(); | ||||
| 				let defaultYear=defaultDate.getFullYear(); | ||||
| 				let defaultMonth=defaultDate.getMonth()+1; | ||||
| 				let defaultDay=defaultDate.getDate(); | ||||
| 				let defaultDays=new Date(defaultYear,defaultMonth,0).getDate()*1; | ||||
| 				return{ | ||||
| 					defaultDate, | ||||
| 					defaultYear, | ||||
| 					defaultMonth, | ||||
| 					defaultDay, | ||||
| 					defaultDays | ||||
| 				} | ||||
| 			}, | ||||
| 			getDval(){ | ||||
| 				let value=this.value; | ||||
| 				let dVal=null; | ||||
| 				let aDate=new Date(); | ||||
| 				let year=this.formatNum(aDate.getFullYear()); | ||||
| 				let month=this.formatNum(aDate.getMonth()+1); | ||||
| 				let day=this.formatNum(aDate.getDate()); | ||||
| 				let date=this.formatNum(year)+"-"+this.formatNum(month)+"-"+this.formatNum(day); | ||||
| 				let hour=aDate.getHours(); | ||||
| 				let minute=aDate.getMinutes(); | ||||
| 				if(value){ | ||||
| 					let flag=this.checkValue(value); | ||||
| 					if(!flag){ | ||||
| 						dVal=[date,hour,minute] | ||||
| 					}else{ | ||||
| 						let v=value.split(" "); | ||||
| 						dVal=[v[0],...v[1].split(":")]; | ||||
| 					} | ||||
| 				}else{ | ||||
| 					dVal=[date,hour,minute] | ||||
| 				} | ||||
| 				return dVal; | ||||
| 			}, | ||||
| 			initData(){ | ||||
| 				let startDate,endDate,startYear,endYear,startMonth,endMonth,startDay,endDay; | ||||
| 				let dates=[],hours=[],minutes=[]; | ||||
| 				let dVal=[],pickVal=[]; | ||||
| 				let value=this.value; | ||||
| 				let reg=/-/g; | ||||
| 				let range={}; | ||||
| 				let result="",full="",date,hour,minute,obj={}; | ||||
| 				let defaultDate=this.getDefaultDate(); | ||||
| 				let defaultYear=defaultDate.defaultYear; | ||||
| 				let defaultMonth=defaultDate.defaultMonth; | ||||
| 				let defaultDay=defaultDate.defaultDay; | ||||
| 				let defaultDays=defaultDate.defaultDays; | ||||
| 				let curFlag=this.current; | ||||
| 				let disabledAfter=this.disabledAfter; | ||||
| 				let dateData=[]; | ||||
| 				dVal=this.getDval(); | ||||
| 				dateData=this.getData(dVal); | ||||
| 				dates=dateData.dates; | ||||
| 				hours=dateData.hours; | ||||
| 				minutes=dateData.minutes; | ||||
| 				pickVal=[ | ||||
| 					dates.findIndex(n => n.value == dVal[0])!=-1?dates.findIndex(n => n.value == dVal[0]):0, | ||||
| 					hours.findIndex(n => n.value == dVal[1])!=-1?hours.findIndex(n => n.value == dVal[1]):0, | ||||
| 					minutes.findIndex(n => n.value == dVal[2])!=-1?minutes.findIndex(n => n.value == dVal[2]):0, | ||||
| 				]; | ||||
| 				range={dates,hours,minutes}; | ||||
| 				date=dVal[0]?dVal[0]:dates[0].label; | ||||
| 				hour=dVal[1]?dVal[1]:hours[0].label; | ||||
| 				minute=dVal[2]?dVal[2]:minutes[0].label; | ||||
| 				result=full=`${date+' '+hour+':'+minute}`; | ||||
| 				obj={ | ||||
| 					date, | ||||
| 					hour, | ||||
| 					minute | ||||
| 				} | ||||
| 				this.range=range; | ||||
| 				this.checkObj=obj; | ||||
| 				this.$nextTick(()=>{ | ||||
| 					this.pickVal=pickVal; | ||||
| 				}); | ||||
| 				this.$emit("change",{ | ||||
| 					result:result, | ||||
| 					value:full, | ||||
| 					obj:obj | ||||
| 				}) | ||||
| 			}, | ||||
| 			handlerChange(e){ | ||||
| 				let arr=[...e.detail.value]; | ||||
| 				let data=this.range; | ||||
| 				let date="",hour="",minute=""; | ||||
| 				let result="",full="",obj={}; | ||||
| 				let disabledAfter=this.disabledAfter; | ||||
| 				date=(arr[0]||arr[0]==0)?data.dates[arr[0]]||data.dates[data.dates.length-1]:""; | ||||
| 				hour=(arr[1]||arr[1]==0)?data.hours[arr[1]]||data.hours[data.hours.length-1]:""; | ||||
| 				minute=(arr[2]||arr[2]==0)?data.minutes[arr[2]]||data.minutes[data.minutes.length-1]:""; | ||||
| 				result=full=`${date.label+' '+hour.label+':'+minute.label+':00'}`; | ||||
| 				obj={ | ||||
| 					date, | ||||
| 					hour, | ||||
| 					minute | ||||
| 				} | ||||
| 				this.checkObj=obj; | ||||
| 				this.$emit("change",{ | ||||
| 					result:result, | ||||
| 					value:full, | ||||
| 					obj:obj | ||||
| 				}) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| </script> | ||||
|  | ||||
| <style lang="scss"> | ||||
| 	@import "./w-picker.css"; | ||||
| </style> | ||||
		Reference in New Issue
	
	Block a user
	 sfmind
					sfmind