element-ui 日期范围选择器动态增加、保存】记忆快捷选项,添加保存,确认操作按钮 ,控制日期选择器窗口显示隐藏,日期选择器窗口插入输入框

效果是这样的:

操作  :文本框输入快捷项的名字后,点击保存,快捷选项列会增加一个保存的快捷选项,

再次打开选择器后 ,会记录增加的快捷选项

第一步 添加 保存、确认按钮

      1   首先要通过CSS改样式,把快捷选择的div 拉高 拉宽

代码如下:

.el-picker-panel__sidebar {
    height: 108%;
    border: 1px solid #e4e4e4;
    width: 100%;
   
}

 改变后 效果是这样的:下边会出现一行空白区域 用来放操作按钮。

 2 增加按钮和操作

    配置 pickerOptions ,后白增加 两项,保存和确认。

pickerOptions: {
                shortcuts: [
                    {
                        text: "最近一周",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    {
                        text: "最近一个月",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    {
                        text: "最近三个月",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    /* {
                      text: "取消",
                      onClick(picker) {
                        const end = new Date();
                        const start = new Date();
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                        picker.$emit("pick", [start, end]);
                      },
                    }, */
                    {
                        text: "保存",
                        onClick(picker) {
                            let name = document.getElementById('hahaha').value
                            if (!name) return that.$message.warning('请输入快捷查询名称')
                            if (!that.value2.length) return that.$message.warning('请选则日期')
                            let shortcuts = localStorage.getItem('shortcuts') ? JSON.parse(localStorage.getItem('shortcuts')) : []
                            shortcuts.push({
                                text: name,
                                start: new Date(that.value2[0]),
                                end: new Date(that.value2[1]),
                                /* onClick(picker) {
                                  picker.$emit("pick", [new Date(that.value2[0]), new Date(that.value2[1])]);
                                }, */
                            })
                            if (shortcuts.length > 5) shortcuts.shift()
                            localStorage.setItem('shortcuts', JSON.stringify(shortcuts))
                            that.$emit('changeDate',that.value2)
                            that.$refs.datePick.pickerVisible = false;
                        },
                    },
                    {
                        text: "确认",
                        onClick(picker) {
                            that.$emit('changeDate',that.value2)
                            that.$refs.datePick.handleClose();
                        },
                    },
                ],
            },

        然后更改按钮的位置和样式,继续在CSS写如下代码,到这里 CSS代码就写完了 。可以复制粘贴了。

.el-picker-panel__sidebar {
    height: 108%;
    border: 1px solid #e4e4e4;
    width: 100%;
    :last-child {
        color: #41acff;
        position: absolute;
        bottom: 5px;
        right: 5px;
        width: 50px;
    }
    :nth-last-child(2) {
        color: #71e41f;
        position: absolute;
        bottom: 5px;
        right: 55px;
        width: 50px;
    }
    :nth-last-child(2):hover {
        color: #71e41f!important;
    }
     :nth-last-child(3) {
        color: #333;
        position: absolute;
        bottom: 5px;
        right: 105px;
        width: 150px;
    } 
}

第二步 加入交互

1 如何控制选择器的显示和隐藏

        通过这个属性:pickerVisible

that.$refs.datePick.pickerVisible = false; 这是一个隐藏属性,在文档里平没有提到这个。

2 如何动态添加和记忆

        原理是添加完成后通过本地缓存记录内容,再次打开选择器后读取缓存的内容

if (localStorage.getItem('shortcuts')) {
                let shortcutsStr = JSON.parse(localStorage.getItem('shortcuts'))
                this.pickerOptions.shortcuts.splice(3, this.pickerOptions.shortcuts.length - 5)
                shortcutsStr.reverse().map((item) => {
                    this.pickerOptions.shortcuts.splice(3, 0, {
                        text: item.text,
                        onClick(picker) {
                            picker.$emit("pick", [new Date(item.start), new Date(item.end)]);
                        },
                    })
                })
                console.log(this.pickerOptions.shortcuts)
            }

3 通过原生js方法添加input框

if (document.getElementById('hahaha')) document.getElementsByClassName('el-picker-panel__sidebar')[0].removeChild(document.getElementById('hahaha'))
            
            var a = document.createElement('input')
            a.setAttribute('id', 'hahaha')
            a.setAttribute('class', 'el-input__inner')
            a.setAttribute('placeholder', '请输入快捷选项名称')
            this.$nextTick(() => {
                document.getElementsByClassName('el-picker-panel__sidebar')[0].insertBefore(a, document.getElementsByClassName('el-picker-panel__shortcut')[document.getElementsByClassName('el-picker-panel__shortcut').length - 2])
            })

第三步 选则完成后 ,通过emit 像父组件发送选中的值

 封装好的组件源码:

或者直接下载组件:https://download.csdn.net/download/AisinGioroGouzi/86814416


<template>
    <el-date-picker @change="changeTime" ref="datePick" v-model="value2" type="daterange" align="right"
        unlink-panels range-separator="至" value-format="yyyy-MM-dd" @focus="focus" @blur="getData()"
        start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions">
    </el-date-picker>
</template>

<script>
export default {
    data() {
        var that = this;
        return {
            pickerOptions: {
                shortcuts: [
                    {
                        text: "最近一周",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    {
                        text: "最近一个月",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    {
                        text: "最近三个月",
                        onClick(picker) {
                            const end = new Date();
                            const start = new Date();
                            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                            picker.$emit("pick", [start, end]);
                        },
                    },
                    /* {
                      text: "取消",
                      onClick(picker) {
                        const end = new Date();
                        const start = new Date();
                        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                        picker.$emit("pick", [start, end]);
                      },
                    }, */
                    {
                        text: "保存",
                        onClick(picker) {
                            let name = document.getElementById('hahaha').value
                            if (!name) return that.$message.warning('请输入快捷查询名称')
                            if (!that.value2.length) return that.$message.warning('请选则日期')
                            let shortcuts = localStorage.getItem('shortcuts') ? JSON.parse(localStorage.getItem('shortcuts')) : []
                            shortcuts.push({
                                text: name,
                                start: new Date(that.value2[0]),
                                end: new Date(that.value2[1]),
                                /* onClick(picker) {
                                  picker.$emit("pick", [new Date(that.value2[0]), new Date(that.value2[1])]);
                                }, */
                            })
                            if (shortcuts.length > 5) shortcuts.shift()
                            localStorage.setItem('shortcuts', JSON.stringify(shortcuts))
                            that.$emit('changeDate',that.value2)
                            that.$refs.datePick.pickerVisible = false;
                        },
                    },
                    {
                        text: "确认",
                        onClick(picker) {
                            that.$emit('changeDate',that.value2)
                            that.$refs.datePick.handleClose();
                        },
                    },
                ],
            },
            value2: [],
        }
    },
    mounted() { },
    methods: {
        focus() {

            if (localStorage.getItem('shortcuts')) {
                let shortcutsStr = JSON.parse(localStorage.getItem('shortcuts'))
                this.pickerOptions.shortcuts.splice(3, this.pickerOptions.shortcuts.length - 5)
                shortcutsStr.reverse().map((item) => {
                    this.pickerOptions.shortcuts.splice(3, 0, {
                        text: item.text,
                        onClick(picker) {
                            picker.$emit("pick", [new Date(item.start), new Date(item.end)]);
                        },
                    })
                })
                console.log(this.pickerOptions.shortcuts)
            }
            if (document.getElementById('hahaha')) document.getElementsByClassName('el-picker-panel__sidebar')[0].removeChild(document.getElementById('hahaha'))
            
            var a = document.createElement('input')
            a.setAttribute('id', 'hahaha')
            a.setAttribute('class', 'el-input__inner')
            a.setAttribute('placeholder', '请输入快捷选项名称')
            this.$nextTick(() => {
                document.getElementsByClassName('el-picker-panel__sidebar')[0].insertBefore(a, document.getElementsByClassName('el-picker-panel__shortcut')[document.getElementsByClassName('el-picker-panel__shortcut').length - 2])
            })
            
        },
        changeTime(e) {
            //保证在选择完时间后,日期弹出框不会消失
            this.value2 = e;
            this.$refs.datePick.pickerVisible = true;
        },
        getData() {
            // document.getElementById('hahaha').value = '';
        },
    }
}
</script>

<style lang="less" scoped>
/deep/
.el-picker-panel__sidebar {
    height: 108%;
    border: 1px solid #e4e4e4;
    width: 100%;
    :last-child {
        color: #41acff;
        position: absolute;
        bottom: 5px;
        right: 5px;
        width: 50px;
    }
    :nth-last-child(2) {
        color: #71e41f;
        position: absolute;
        bottom: 5px;
        right: 55px;
        width: 50px;
    }
    :nth-last-child(2):hover {
        color: #71e41f!important;
    }
     :nth-last-child(3) {
        color: #333;
        position: absolute;
        bottom: 5px;
        right: 105px;
        width: 150px;
    } 
}
</style>

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Element-UI日期选择器是一个常用的组件,可以方便地实现日期的选择功能。根据引用\[1\]中的代码,可以看出该日期选择器是一个周选择器,只能选择本周以及本周之前的日期。通过设置picker-options的disabledDate属性,可以限制选择的日期范围。在这个例子中,disabledDate函数中的逻辑是禁止选择本周日以后的日期。具体实现是通过获取今天的日期和计算今天是周几来确定禁止选择的日期范围。如果今天是周日,则禁止选择今天以后的日期;否则,禁止选择本周日以后的日期。 另外,引用\[2\]中的代码展示了如何在Vue中使用Element-UI日期选择器。通过在Vue实例中定义value1和value2这两个变量,可以实现日期的双向绑定。在HTML中,可以使用el-date-picker标签来创建日期选择器,并通过v-model绑定value1和value2变量。通过设置不同的属性,如type、format、placeholder等,可以自定义日期选择器的样式和功能。 最后,引用\[3\]中的代码展示了在Vue项目中安装和使用dayjs库。dayjs是一个轻量级的日期处理库,可以方便地进行日期的格式化、计算和比较等操作。在Vue项目中,可以通过在main.js中引入dayjs,并将其挂载到Vue的原型上,以便在组件中直接使用dayjs函数来处理日期。 综上所述,Element-UI日期选择器是一个功能强大且易于使用的组件,可以满足各种日期选择的需求。通过合理设置属性和使用相关库,可以实现更加灵活和定制化的日期选择功能。 #### 引用[.reference_title] - *1* *3* [Element UI DatePicker 日期选择器](https://blog.csdn.net/Igiveufireworks/article/details/129047276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【elementUI-日期选择器(两个框 限制选择范围快捷键选择】](https://blog.csdn.net/JUN416326495/article/details/126723033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值