dateChose.vue 选择时间组件
<template>
<div class="search clearfix">
<template>
<el-form v-if="type === 1">
<el-form-item label="时间选择" style="float: left;">
<el-date-picker v-model="value" type="date" placeholder="选择日期" value-format="yyyy-MM-dd" @change="choseDay" />
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="eroDay" style="margin-left: 20px;">上一天</el-button>
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="nextDay" style="margin-left: 5px;">下一天</el-button>
</el-form-item>
</el-form>
</template>
<template v-if="type === 2">
<el-form>
<el-form-item label="时间选择" style="float: left;">
<el-date-picker v-model="value" type="month" placeholder="选择月" value-format="yyyy-MM" @change="choseMouth" />
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="eroMouth" style="margin-left: 20px;">上一月</el-button>
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="nextMouth" style="margin-left: 5px;">下一月</el-button>
</el-form-item>
</el-form>
</template>
<template v-if="type === 3">
<el-form>
<el-form-item label="时间选择" style="float: left;">
<el-date-picker v-model="value" type="year" placeholder="选择年" value-format="yyyy" @change="choseYear" />
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="eroYear" style="margin-left: 20px;">上一年</el-button>
</el-form-item>
<el-form-item style="float: left;">
<el-button @click="nextYear" style="margin-left: 5px;">下一年</el-button>
</el-form-item>
</el-form>
</template>
</div>
</template>
<script>
export default {
props: {
type: { // 显示选择时间类型
type: Number, // 类型
default: 1// 默认值
}
},
data() {
return {
value: '',
startTime: null,
endTime: null
};
},
created() {
this.initPage();
},
mounted() {
},
methods: {
// 初始化
initPage() {
switch (this.type) {
case 1: {
const now = new Date();
const yy = now.getFullYear() + '-';
const mm = (now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1) + '-';
const dd = (now.getDate() < 10 ? '0' + now.getDate() : now.getDate());
this.value = yy + mm + dd;
this.choseDay();
break;
}
case 2: {
const now = new Date();
const yy = now.getFullYear() + '-';
const mm = (now.getMonth() + 1 < 10 ? '0' + (now.getMonth() + 1) : now.getMonth() + 1);
this.value = yy + mm;
this.choseMouth();
break;
}
case 3: {
const now = new Date();
const yy = now.getFullYear();
this.value = String(yy);
this.choseYear();
break;
}
}
},
// 选择日
choseDay() {
// console.log(this.value)
const time = ' 08:00:00';
const end = ' 23:59:59';
const endTime = this.value + end;
this.startTime = this.value + time;
const ende = Date.parse(new Date(endTime)) + 1000;
var datechange = new Date(ende);
const yy = datechange.getFullYear() + '-';
const mm = (datechange.getMonth() + 1 < 10 ? '0' + (datechange.getMonth() + 1) : datechange.getMonth() + 1) + '-';
const dd = (datechange.getDate() < 10 ? '0' + datechange.getDate() : datechange.getDate());
this.endTime = yy + mm + dd + time;
this.$emit('getStartDate', this.startTime);
this.$emit('getEndDate', this.endTime);
// console.log(this.startTime)
// console.log(this.endTime)
},
// 选择月
choseMouth() {
// console.log(this.value)
const time = '-01 08:00:00';
this.startTime = this.value + time;
const ende = Date.parse(new Date(this.startTime));
var datechange = new Date(ende);
let yy = datechange.getFullYear();
let mm = (datechange.getMonth() + 1 < 10 ? '0' + (datechange.getMonth() + 1) : datechange.getMonth() + 1);
// debugger
if (Number(mm) === 12) {
mm = '01';
const NumberY = Number(yy) + 1;
yy = String(NumberY) + '-';
this.endTime = yy + mm + time;
} else {
const NumberM = Number(mm) + 1;
mm = String(NumberM) < 10 ? '0' + String(NumberM) : String(NumberM);
this.endTime = yy + '-' + mm + time;
}
this.$emit('getStartDate', this.startTime);
this.$emit('getEndDate', this.endTime);
},
// 选择年
choseYear() {
const time = '-01-01 08:00:00';
this.startTime = this.value + time;
const ende = Date.parse(new Date(this.startTime));
var datechange = new Date(ende);
const yy = datechange.getFullYear() + 1;
this.endTime = yy + time;
this.$emit('getStartDate', this.startTime);
this.$emit('getEndDate', this.endTime);
},
// 上一天
eroDay() {
let selectDate2 = this.value
let date2 = new Date(selectDate2).getTime() - 3600 * 1000 * 24;
selectDate2 = this.timestampToTime(date2).substring(0, 10);
this.value = selectDate2
this.choseDay();
},
// 下一天
nextDay() {
let selectDate2 = this.value
let date4 = new Date(selectDate2).getTime() + 3600 * 1000 * 24;
selectDate2 = this.timestampToTime(date4).substring(0, 10);
this.value = selectDate2
this.choseDay();
},
// 上一月
eroMouth() {
let selectDate2 = this.value
let str = selectDate2.split('-')
if (Number(str[1]) === 1) {
this.value = (Number(str[0]) - 1) + '-' + '12'
} else {
this.value = str[0] + '-' + ((Number(str[1]) - 1) < 10 ? '0' + (Number(str[1]) - 1) : (Number(str[1]) - 1))
}
this.choseMouth();
},
// 下一月
nextMouth() {
let selectDate2 = this.value
let str = selectDate2.split('-')
if (Number(str[1]) === 12) {
this.value = (Number(str[0]) + 1) + '-' + '01'
} else {
// debugger
this.value = str[0] + '-' + ((Number(str[1]) + 1) < 10 ? '0' + (Number(str[1]) + 1) : (Number(str[1]) + 1))
}
this.choseMouth();
},
// 上一年
eroYear() {
let selectDate2 = Number(this.value) - 1;
this.value = String(selectDate2);
this.choseYear();
},
// 下一年
nextYear() {
let selectDate2 = Number(this.value) + 1;
this.value = String(selectDate2);
this.choseYear();
},
//将10位或者13位时间戳转化为日期格式
timestampToTime(timestamp) {
if (String(timestamp).length == 10) {
var unixtimestamp = new Date(timestamp * 1000);
var year = 1900 + unixtimestamp.getYear();
var month = "0" + (unixtimestamp.getMonth() + 1);
var date = "0" + unixtimestamp.getDate();
var hour = "0" + unixtimestamp.getHours();
var minute = "0" + unixtimestamp.getMinutes();
var second = "0" + unixtimestamp.getSeconds();
return (
year +
"-" +
month.substring(month.length - 2, month.length) +
"-" +
date.substring(date.length - 2, date.length) +
" " +
hour.substring(hour.length - 2, hour.length) +
":" +
minute.substring(minute.length - 2, minute.length) +
":" +
second.substring(second.length - 2, second.length)
);
} else {
let currentTime = new Date(timestamp);
let year = currentTime.getFullYear(),
month = currentTime.getMonth() + 1,
day = currentTime.getDate(),
hour = currentTime.getHours(),
minute = currentTime.getMinutes(),
second = currentTime.getSeconds(),
millSeconds = currentTime.getMilliseconds();
let months = month < 10 ? "0" + month : month,
days = day < 10 ? "0" + day : day,
hours = hour < 10 ? "0" + hour : hour,
minutes = minute < 10 ? "0" + minute : minute,
seconds = second < 10 ? "0" + second : second,
millSecondss =
millSeconds < 10
? "00" + millSeconds
: millSeconds < 100
? "0" + millSeconds
: millSeconds;
return (
year +
"-" +
months +
"-" +
days +
" " +
hours +
":" +
minutes +
":" +
seconds +
"." +
millSecondss
);
}
},
}
};
</script>
<style>
.search {
padding: 25px 0;
float: left;
}
.card {
float: left;
height: 100%;
}
</style>
---------------------------------------------------------分割线----------------------------------------------------------
periodTime.vue 选择时段组件
<template>
<div class="period clearfix">
<el-form v-if="type === 1">
<el-form-item label="时段选择">
<el-select v-model="valueOne" placeholder="请选择时段" @change="typeOneChange">
<el-option v-for="item in typeOne" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-form>
<el-form v-if="type === 2">
<el-form-item label="时段选择">
<el-select v-model="valueTwo" placeholder="请选择时段" @change="typeTwoChange">
<el-option v-for="item in typeTwo" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
props: {
type: { // 显示选择时间类型
type: Number, // 类型
default: 1// 默认值
}
},
data() {
return {
typeOne: [{
value: '15',
label: '15分钟'
}, {
value: '30',
label: '30分钟'
}, {
value: '60',
label: '60分钟'
}],
valueOne: '15',
// -------------------------------------
typeTwo: [{
value: 'ten',
label: '10分钟'
}, {
value: 'thirty',
label: '30分钟'
}, {
value: 'sixty',
label: '60分钟'
}],
valueTwo: 'ten'
};
},
mounted() {
this.initPage();
},
methods: {
initPage() {
switch (this.type) {
case 1: {
this.$emit('postPeriodTime', this.valueOne);
break;
}
case 2: {
this.$emit('postPeriodTime', this.valueTwo);
break;
}
}
},
typeOneChange() {
this.$emit('postPeriodTime', this.valueOne);
},
typeTwoChange() {
this.$emit('postPeriodTime', this.valueTwo);
}
}
};
</script>
<style>
.period {
padding: 25px 0;
float: left;
}
</style>
-----------------------------------------------------------分割线-------------------------------------------------------------
index.vue 主页
<template>
<div>
<div class="topSearch clearfix">
<date-chose :type="dateType" @getStartDate="startDate" @getEndDate="endDate" />
<period-time :type="periodType" @postPeriodTime="getPeriodTime" />
<el-button @click="search" style="margin-left: 20px;margin-top:20px;" type="primary">查询</el-button>
</div>
</div>
</template>
<script>
import dateChose from '@/views/reportSys/dateChose';
import periodTime from '@/views/reportSys/periodTime';
export default {
components: { dateChose, periodTime },
directives: {},
filters: {
},
data() {
return {
dateType: 1, // 日期类型 1-年月日 2-年月 3-年
periodType: 2, // 1-15min/30min/60min 2-10min/30min/60min
startTime: null, // 开始时间
endTime: null, // 结束时间
periodTime: null// 时段
};
},
created() {
},
mounted() {
console.log(this.periodTime);
console.log(this.startTime);
},
methods: {
search() {
},
//获取时间组件 开始时间
startDate(data) {
this.startTime = data;
},
//获取时间组件 结束时间
endDate(data) {
this.endTime = data;
},
//获取时段组件 时段
getPeriodTime(data) {
this.periodTime = data;
}
}
};
</script>
<style>
</style>
---------------------------------------------------------------------------------------------------------------------------------