当前位置:网站首页>APICloud AVM wraps date and time selection components
APICloud AVM wraps date and time selection components
2022-08-08 16:35:00 【InfoQ】
Because there are many in the project
表单
To use the content of date selection and time selection,所以基于
picker
Component that encapsulates date and time selection.

datePicker
The year within the component is an example of the year made100year within the year,It can be expanded or reduced as needed,月份是12fixed monthly,每月的天数,Get based on the selected year and month.The current date is set by default.
<template>
<picker class="picker" id={pickerId} mode="multiSelector" range-key="name" value={dateMltiSelectorValue} onchange={this.dateMultiSelectorChange} oncolumnchange={this.dateMultiSelectorColumnChange}>
<text class="picker-label">{dateDesc}</text>
</picker>
</template>
<script>
export default {
name: 'datePicker',
props:{
label:String,
pickerId:String
},
installed(){
this.getYears();
this.initDateData();
},
data() {
return{
year:[],
month:[1,2,3,4,5,6,7,8,9,10,11,12],
day:[],
yearNow:new Date().getFullYear(),
dateMltiSelectorValue:[0,0,0],
selectYear:new Date().getFullYear(),
selectMoth:1,
selectDay:1,
dateList:[],
dateDesc:''
}
},
methods: {
getYears(){
this.data.year=[];//When a page is used multiple times must be cleared first 否则会出现各种问题
for(i=0;i<100;i++){
this.data.year.push(this.yearNow-i);
}
},
initDateData(){
//Get the number of days in the current month based on the current year and month
this.data.day=[];
var days = new Date(new Date().getFullYear(), new Date().getMonth()+1, 0).getDate();
console.log(days);
for(i=1;i<=days;i++){
this.data.day.push(i);
}
this.data.dateMltiSelectorValue=[0,new Date().getMonth(),new Date().getDate()-1];
this.data.dateList = [this.data.year,this.data.month,this.data.day];
var picker = document.getElementById(this.props.pickerId);
picker.setData({
data: this.data.dateList
});
},
//根据年月获取天数
setDays(){
this.data.day=[];
var days = new Date(this.data.selectYear, this.data.selectMoth, 0).getDate();
for(i=1;i<=days;i++){
this.data.day.push(i);
}
this.data.dateList = [this.data.year,this.data.month,this.data.day];
var picker = document.getElementById(this.props.pickerId);
picker.setData({
data: this.data.dateList
});
},
dateMultiSelectorChange(e){
this.data.dateMltiSelectorValue=[e.detail.value[0],e.detail.value[1],e.detail.value[2]];
var year = this.data.year[e.detail.value[0]];
// var month = this.data.selectMoth>9?this.data.selectMoth:'0'+this.data.selectMoth;
var month = this.data.month[e.detail.value[1]]>9?this.data.month[e.detail.value[1]]:'0'+this.data.month[e.detail.value[1]];
var day = this.data.day[e.detail.value[2]]>9?this.data.day[e.detail.value[2]]:'0'+this.data.day[e.detail.value[2]];
this.data.dateDesc = year+'-'+month+'-'+day;
this.fire('setDate', this.data.dateDesc);
},
dateMultiSelectorColumnChange(e){
var column = e.detail.column;
if (column == this.data.dateList.length-1) {
return;
}
if(column==0){
this.data.selectYear = this.data.year[e.detail.value];
this.data.dateMltiSelectorValue[0]=e.detail.value;
this.setDays();
}
else if(column==1){
this.data.selectMoth = this.data.month[e.detail.value];
this.data.dateMltiSelectorValue[1]=e.detail.value;
this.setDays();
}
}
}
}
</script>
<style>
.picker {
background-color: #ffffff;
}
.picker-label{
font-size: 18px;
}
</style>
timePicker
时、分、Seconds are fixed,The component starts with the default current time.
<template>
<picker class="picker" id={pickerId} mode="multiSelector" range-key="name" value={timeMltiSelectorValue} onchange={this.timeMultiSelectorChange}>
<text class="picker-label">{timeDesc}</text>
</picker>
</template>
<script>
export default {
name: 'timePicker',
props:{
label:String,
pickerId:String
},
installed(){
this.setHours();
this.setMinutes();
this.initDateData();
},
data() {
return{
hour:[],
minute:[],
second:[],
timeList:[],
timeMltiSelectorValue:[0,0,0],
timeDesc:''
}
},
methods: {
setHours(){
for (let index = 0; index < 24; index++) {
this.data.hour.push(index>9?index:'0'+index);
}
},
setMinutes(){
for (let index = 0; index < 60; index++) {
this.data.minute.push(index>9?index:'0'+index);
this.data.second.push(index>9?index:'0'+index);
}
},
initDateData(){
//Initialize to set the current time
this.data.timeMltiSelectorValue=[new Date().getHours(),new Date().getMinutes(),new Date().getSeconds()];
this.data.timeList=[this.data.hour,this.data.minute,this.data.second];
var picker = document.getElementById(this.props.pickerId);
picker.setData({
data: this.data.timeList
});
},
timeMultiSelectorChange(e){
this.data.timeMltiSelectorValue=[e.detail.value[0],e.detail.value[1],e.detail.value[2]];
var hour = this.data.hour[e.detail.value[0]];
var minute = this.data.minute[e.detail.value[1]];
var second = this.data.second[e.detail.value[2]];
this.data.timeDesc = hour+':'+minute+':'+second;
this.fire('setDate', this.data.timeDesc);
},
}
}
</script>
<style>
.picker {
background-color: #ffffff;
}
.picker-label{
font-size: 18px;
}
</style>
组件使用
如果一个页面中,The same component is used multiple times,Be sure to pay attention to the componentsID进行区分.每个组件的IDPass the component through the current page.组件中通过
props
进行接收.
<template>
<scroll-view class="page">
<safe-area></safe-area>
<view class="item">
<text class="item-label">Agenda theme</text>
<input class="item-input" placeholder="输入Agenda theme" v-model="title"/>
</view>
<view class="item">
<text class="item-label">Brief schedule</text>
<textarea class="item-area" placeholder="Enter a brief description of the agenda" v-model="content"/>
</view>
<view class="item">
<text class="item-label">日期</text>
<datePicker onsetDate="setDate" label="" pickerId="datePicker"></datePicker>
</view>
<view class="item">
<text class="item-label">时间</text>
<timePicker onsetDate="setTime" label="" pickerId="timePicker"></timePicker>
</view>
<view class="item">
<text class="item-label">人员</text>
<input class="item-input" placeholder="请选择人员" v-model="title"/>
</view>
<view class="bt-box">
<button class="bt" onclick={this.btnAction}>保存</button>
</view>
</scroll-view>
</template>
<script>
import '../../components/datePicker.stml'
import '../../components/timePicker.stml'
export default {
name: 'adddaily',
apiready(){
},
data() {
return{
date:'',
time:'',
title:'',
content:'',
users:''
}
},
methods: {
setDate(e){
this.data.date = e.detail;
},
setTime(e){
this.data.time = e.detail;
}
}
}
</script>
<style>
.page {
height: 100%;
background-color: #ffffff;
}
.item{
margin: 10px;
border-bottom: 1px solid #ccc;
}
.item-label{
font-size: 13px;
color: #666666;
}
.item-input{
width: auto;
border: 0;
}
.item-area{
border: 0;
height: 50px;
width: auto;
}
.bt-box{
margin: 10px;
}
.bt{
color: #ffffff;
font-size: 18px;
background-color: #035dff;
border-radius: 10px;
}
</style>
效果图


边栏推荐
猜你喜欢
随机推荐
使用 PyGame 的冒泡排序可视化工具
急了,Mysql索引中最不容易记的三个知识点通透了
Acwing第 63 场周赛【未完结】
DASCTF部分复现
【入门PCB】立创eda的学习
NSSCTF部分复现
Web3构架是怎么样的?
jupyter notebook hide & show all output
laravel - query builder 2
抓住时代趋势,网赚新逻辑:平台+个人模式超清晰解读(附产品评测)
MVCC,主要是为了做什么?
Charles MOCK 数据 htpps代理
Kubernetes资源编排系列之四: CRD+Operator篇
Grid 布局介绍
一、搭建django自动化平台(实现一键执行sql)
Teach you how to use uniapp to access chat and IM instant messaging - source code sharing
ImportError: numpy.core.multiarray failed to import [cv2, matplotlib, PyTorch, pyinstaller ]
垃圾账号不胜其烦,设备指纹快速发现
国内部分手机游戏开始显示用户IP属地
iNFTnews | Metaverse brings new ideas for enterprise development