组件封装的代码:
<template>
<div class="time_quarter">
<!-- <div class="time_box"></div> -->
<slot>日期:</slot>
<mark style="position:fixed;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,0);z-index:999;" v-show="showSeason" @click.stop="showSeason=false"></mark>
<!-- <el-input placeholder="请选择季度" size='small' v-model="showValue" style="160px;" @focus="showSeason=true"> -->
<el-input placeholder="请选择季度" size='small' v-model="showValue" style="140px;" class="elWidth" @focus="showSeason=true">
<i slot="prefix" class="el-input__icon el-icon-date"></i>
</el-input>
<!-- <el-card class="box-card" style="322px;padding: 0 3px 20px;margin-top:10px;position:fixed;z-index:9999" v-show="showSeason"> -->
<!-- style="200px;padding: 0 3px 20px;margin-top:10px;position:fixed;z-index:9999" -->
<el-card class="box-card" v-show="showSeason">
<div slot="header" class="clearfix" style="text-align:center;padding:0">
<button type="button" aria-label="前一年" class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left" @click="prev"></button>
<span role="button" class="el-date-picker__header-label">{{year}}年</span>
<button type="button" aria-label="后一年" @click="next" :class="{notallow:year==limitTime}" class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right"></button>
</div>
<div class="text item" style="text-align:center;">
<el-button type="text" size="medium" style="40%;color: #606266;float:left;" @click="selectSeason(0)">第一季度</el-button>
<el-button type="text" size="medium" style="float:right;40%;color: #606266;" @click="selectSeason(1)">第二季度</el-button>
</div>
<div class="text item" style="text-align:center;">
<el-button type="text" size="medium" style="40%;color: #606266;float:left;" @click="selectSeason(2)">第三季度</el-button>
<el-button type="text" size="medium" style="float:right;40%;color: #606266;" @click="selectSeason(3)">第四季度</el-button>
</div>
</el-card>
</div>
</template>
<script>
/**
* @file: View 组件 季节选择控件
* @author: v_zhuchun
* @date: 2019-05-23
* @description: UI组件 可选择季节
* @api: valueArr : 季度value defalut['01-03', '04-06', '07-09', '10-12'] 默认值待设置
*/
export default {
props: {
valueArr: {
default: () => {
return ["12-02", "03-05", "06-08", "09-11"];
},
type: Array,
},
getValue: {
default: () => {},
type: Function,
},
// 传入显示的时间
defaultValue: {
default: "",
type: String,
},
// 限制的时间
limitTime: {
type: String,
default: "",
require: true,
},
},
data() {
return {
showSeason: false,
season: "",
year: new Date().getFullYear(),
showValue: "",
};
},
computed: {},
created() {
if (this.defaultValue) {
let value = this.defaultValue;
let arr = value.split("-");
this.year = arr[0].slice(0, 4);
var myseason = arr[1];
this.showValue = `${this.year}年${this.whitchQuarter(myseason)}季度`;
// this.showValue = `${this.year}年${arrAll.indexOf(str) + 1}季度`;
}
console.log("whitchQuarter", this.whitchQuarter(10));
},
watch: {
defaultValue: function (value, oldValue) {
let arr = value.split("-");
this.year = arr[0].slice(0, 4);
var myseason = arr[1];
// this.showValue = `${this.year}年${arrAll.indexOf(str) + 1}季度`;
this.showValue = `${this.year}年${this.whitchQuarter(myseason)}季度`;
},
},
methods: {
// 根据输入的月份判断是哪一个季节
whitchQuarter(month) {
let quarter = "";
month = Number(month);
switch (month) {
case 12:
case 1:
case 2:
quarter = "4";
break;
case 3:
case 4:
case 5:
quarter = "1";
break;
case 6:
case 7:
case 8:
quarter = "2";
break;
case 9:
case 10:
case 11:
quarter = "3";
break;
default:
console.error("The entered time is incorrect");
}
return quarter;
},
one() {
this.showSeason = false;
},
prev() {
this.year = this.year * 1 - 1;
},
next() {
// 如果有时间限制的话会进行判断
if (this.limitTime == "") {
this.year = this.year * 1 + 1;
} else if (this.limitTime != "" && this.year < this.limitTime) {
this.year = this.year * 1 + 1;
}
},
// 季度时间判定
InitialTime(val) {
let num = "";
val = Number(val);
switch (val) {
case 1:
num = "03";
break;
case 2:
num = "06";
break;
case 3:
num = "09";
break;
case 4:
num = "12";
break;
default:
console.error("时间格式有误!");
}
return num;
},
selectSeason(i) {
let that = this;
that.season = i + 1;
let arr = that.valueArr[i].split("-");
that.getValue(that.year + arr[0] + "-" + that.year + arr[1]);
that.showSeason = false;
this.showValue = `${this.year}年${this.season}季度`;
var formatValue = `${this.year}-${this.InitialTime(this.season)}`;
this.$emit("getTime", formatValue);
},
//
},
};
</script>
<style lang="less">
.notallow {
cursor: not-allowed;
}
.time_box {
position: relative;
}
.box-card {
position: absolute;
top: 40px;
left: 22px;
padding: 0 3px 20px;
z-index: 9999;
}
// .elWidth {
// 120px !important;
// }
.time_quarter {
100%;
.el-input--small .el-input__inner {
82%;
}
}
</style>
封装组件使用:

