季度选择器quarter-picker
实现步骤:
1、季度选择器组件
"display: inline-block;"> <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" >"placeholder" v-model="showValue" v-bind="$attrs" @focus="clickInput" ref="inputText"> "prefix" class="el-input__icon el-icon-date"> card class="box-card" style="width: 322px;padding: 0 30px 20px;margin-top: 10px;position: fixed;z-index: 9999" :style="{top:divTop + 'px'}" v-show="showSeason" ref="card" > class="clearfix" style="text-align: center;padding: 0;" slot="header"> <button class="el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left" type="button" aria-label="前一年" @click="prev" > class="el-date-picker__header-label">{{ year }}年 <button class="el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right" type="button" aria-label="后一年" @click="next" >class="text item" style="text-align: center;">button style="width: 40%;color: #606266;float: left;" type="text" size="medium" @click="selectSeason(0)" >第一季度 button style="width: 40%;color: #606266;float: right;" type="text" size="medium" @click="selectSeason(1)" >第二季度 class="text item" style="text-align: center;">button style="width: 40%;color: #606266;float: left;" type="text" size="medium" @click="selectSeason(2)" >第三季度 button style="width: 40%;color: #606266;float: right;" type="text" size="medium" @click="selectSeason(3)" >第四季度
2、引入季度选择器组件
import QuarterPicker from "../../../components/quarter-picker/index";
3、注册季度选择器组件
components: { QuarterPicker },
4、使用季度选择器组件
"季度" align="center" width="150px"> "scope"> "scope.row.quarter" readonly="readonly" :other-data="scope.row" :change-value="saveQuarter" />
通过other-data属性将scope.row传递到子组件,通过change-value将saveQuarter方法传递到子组件,然后在子组件中调用saveQuarter方法。
其中saveQuarter方法如下:
saveQuarter(value, row) { const data = { id: row.id, start: value[0], // 季度开始日期 end: value[1] // 季度结束日期 }; inAPI.saveOrUpdateQuarter(data).then(response => { if (response.success) { this.$message.success(response.msg); } }); },
后台可以使用NVARCHAR2存储季度,长度为6,格式为:年度-季度,如2022-1,2022-2,2022-3,2022-4
将季度开始时间转化为季度的方法:
private String toQuarter(String start) { String[] arr = start.split("-"); String year = arr[0]; String month = arr[1]; int q = Integer.parseInt(month) / 3 + 1; return year + "-" + q; }
将季度转成季度开始日期和季度结束日期的方法:
private ListtoRange(String quarter) { List result = new ArrayList<>(); String[] arr = quarter.split("-"); String year = arr[0]; String q = arr[1]; switch (q) { case "1": result.add(year + "-01-01"); result.add(year + "-03-31"); break; case "2": result.add(year + "-04-01"); result.add(year + "-06-30"); break; case "3": result.add(year + "-07-01"); result.add(year + "-09-30"); break; case "4": result.add(year + "-10-01"); result.add(year + "-12-31"); break; } return result; }