首页 > 其他分享 >vue 自定义季度选择器

vue 自定义季度选择器

时间:2023-04-15 16:34:48浏览次数:35  
标签:vue return 自定义 rem year quarter 选择器 select

1、效果

  • 时间格式:2023-Q1

2、封装

  • quarter-picker.vue
<template>
    <div class="quarter-picker">
        <select class="year-select" v-model="year" @change="updateQuarter">
            <option value="" disabled selected>选择年份</option>
            <option v-for="year in years" :value="year">{{ year }}</option>
        </select>
        <select class="quarter-select" v-model="quarter" @change="updateQuarter">
            <option value="" disabled selected>选择季度</option>
            <option v-for="quarter in quarters" :value="quarter">
                {{ quarter }}
            </option>
        </select>
    </div>
</template>

<script>
export default {
    props: {
        modelValue: {
            type: Object,
            required: true,
        },
    },
    data() {
        return {
            year: this.modelValue.year || '',
            quarter: this.modelValue.quarter || '',
        };
    },
    computed: {
        years() {
            const currentYear = new Date().getFullYear();
            return Array.from({ length: 10 }, (v, i) => currentYear - i);
        },
        quarters() {
            return ['Q1', 'Q2', 'Q3', 'Q4'];
        },
    },
    methods: {
        updateQuarter() {
            this.$emit('update:modelValue', {
                year: this.year,
                quarter: this.quarter,
            });
        },
    },
};
</script>

<style scoped>
.quarter-picker {
    display: inline-block;
    align-items: center;
}

.year-select,
.quarter-select {
    padding: 0.4rem;
    border-radius: 0.25rem;
    border: 1px solid #d1d5db;
    font-size: 0.8rem;
    line-height: 0.5rem;
    margin-right: 0.5rem;
    color: #606266;
}

.year-select:focus,
.quarter-select:focus {
    outline: none;
    box-shadow: 0 0 0 2px rgba(66, 153, 225, 0.5);
}

.year-select {
    width: 7rem;
}

.quarter-select {
    width: 7rem;
}
</style>

3、调用

<template>
	<quarter-picker v-model="quarter"/>
</template>

<script>
    import QuarterPicker from './quarter-picker.vue'
    export default {
        name: "test",
        components: {
            QuarterPicker
        },
        data() {
            return {
                date: '2023-Q1',
            }
        },
        computed: {
            quarter: {
                get() {
                    const [year, quarter] = this.ssParams.date.split('-');
                    return {year: Number(year), quarter: quarter};
                },
                set(value) {
                    this.ssParams.date = `${value.year}-${value.quarter}`;
                },
            },
        },
    } 
</script>

标签:vue,return,自定义,rem,year,quarter,选择器,select
From: https://www.cnblogs.com/pine007/p/17321363.html

相关文章

  • vue 不同版本定义 el-date-picker 日期选择器快捷项
    1、效果2、vue2:picker-options<el-date-picker style="width:350px" v-model="dates" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" end-place......
  • 27-组合逻辑集成电路-数据选择器
    数据选择器1.数据选择器数据选择器:多路信号进来,出去的路只有一条,通过一个开关控制,多路选一路(多选1)数据分配器:一路信号进入,在多路输出中选择一路进行输出二选一,通过一个开关进行控制,书写选择器表达式的时候,表达式的每一项用开关变量组合*信号四选一,用两个控制变量进行控制......
  • vue3+echart5 遇到的坑 Cannot read properties of undefined (reading 'type')(转)
    原文:https://www.cnblogs.com/Bin-x/p/15342949.html1、错误说明vue3中,使用data的方式初始化echart图表exportdefault{data(){return{chart:null,...}},mounted(){this.chart=echarts.init(document.getElementById(this.id))......
  • vue3.2入门
    vue3.2版本开始可以使用语法糖!对于从2.0过来的人我就直接看3.2的语法了helloworld.vue<!--setup语法糖vue3.0的变量需要return出来才可以在template中使用,写法冗余vue3.2在script标签中添加setup解决问题组件只需要引入,不需要注册,属性方法不需要返回,不需要写setup......
  • vue3微信公众号商城项目实战系列(5)页面适配手机屏幕
    上一篇完成了2个页面之间的跳转,在浏览器中也可以正常浏览和跳转,但这2个页面并没有为适配手机屏幕设计,如果我们用chrome浏览器模拟手机屏幕的大小后再看,结果如下图:(注:用chrome模拟手机屏幕只需要在正常情况下按下F12键,然后点击红框2处的小图标就可以了,改变模拟屏幕的大小......
  • vue 代码贴图
    设置请求头tabs组件echarts中x轴显示字数......
  • vue项目在打包时Some chunks are larger than 500 kBs after minification(一些区块在
    https://blog.csdn.net/qq_45284938/article/details/129707796 加上适应的配置项  根目录上vite.config.ts 文件 outDir:BUILD_DIR,//指定打包文件的输出目录emptyOutDir:true,//打包时先清空上一次构建生成的目录 build:{outDir:BUILD_DIR,......
  • (二)vue组件化基础跟脚手架vue-cli/vite
    vue组件化开发思想 组件化的思想:将一个页面的所有的处理逻辑放到一起,处理起来就会非常复杂,而且不利于后续的管理以及扩展;如果,将一个页面拆分为一个个小功能块,每个功能块完成属于自己这部分独立的功能,那么之后整个页面的管理和维护就变得非常容易了;就像搭积木一样来搭建......
  • vue3 父子组件共享响应式对象
    父组件<templatelang=""><div><divclass="greetings">按钮值:{{num}}</div><div><button@click="num++">按钮</button></div><div>iamparent</div&......
  • 论Vue和React的不同之处
    论Vue和React的不同之处Vue和React都是用于构建UI界面的流行框架。它们的哲学也有很多相似的地方,我们可以认为这些特性是流行前端框架的一个趋势。它们是:组件化。将结构、样式、脚本进行耦合,让界面一部分区域能够独立出来,并可以提供复用;声明式。摒弃了JQuery那种手动......