element calendar+popover使用

该博客介绍了如何利用Element UI的<el-calendar>组件,结合Vue.js实现日期单元格上的动态数据展示和编辑。通过在日期单元格内嵌入弹窗popover,展示了如何绑定任务信息、填报时间和执行状态,并提供了保存和取消功能。在关闭popover时,通过ref属性和特定日期来区分并关闭对应弹窗。示例代码中包含了日期点击事件处理函数和数据对比方法,用于更新和获取数据。
摘要由CSDN通过智能技术生成

最近项目向做这个效果:

 

 上代码:

<el-calendar>
            <!-- 这里使用的是 2.5 slot 语法,对于新项目请使用 2.6 slot 语法-->
            <template slot="dateCell" slot-scope="{date, data}">
                <el-popover popper-class="popoverBackB" placement="top" width="300" trigger="click"
                    :ref="'popoverRef-' + data.day">
                    <el-form ref="form" :model="form" label-width="70px">
                        <el-form-item label="任务工作">
                            <el-input v-model="form.workArrangeName" :disabled="true"></el-input>
                        </el-form-item>
                        <el-form-item label="填报时间">
                            <el-input v-model="form.fillDate" :disabled="true">
                            </el-input>
                        </el-form-item>
                        <el-form-item label="执行状态">
                            <el-radio-group v-model="form.finishStatus">
                                <el-radio v-for="dict in finishStatusOptions" :key="dict.dictValue"
                                    :label="dict.dictValue">
                                    {{ dict.dictLabel }}</el-radio>
                            </el-radio-group>
                        </el-form-item>
                        <el-form-item>
                            <el-button icon="el-icon-check" type="primary" @click="onSubmit">保存</el-button>
                            <el-button @click="close(data.day)">取消</el-button>
                        </el-form-item>
                    </el-form>
                    <div slot="reference" class="calendar-item"
                        @click="calendarOnClick(data.day, dealMyDate(data.day))">
                        <span>{{ data.day.split('-').slice(1).join('-') }}</span>
                        <div title="正常" class="cirle normal" v-if="dealMyDate(data.day).finishStatus == 0">
                        </div>
                        <div title="预警" class="cirle warning" v-if="dealMyDate(data.day).finishStatus == 1">
                        </div>
                        <div title="超期" class="cirle outday" v-if="dealMyDate(data.day).finishStatus == 2">
                        </div>
                        <div title="已完成" class="cirle finished" v-if="dealMyDate(data.day).finishStatus == 3">
                        </div>
                    </div>
                </el-popover>
            </template>
        </el-calendar>
//日期点击事件 
calendarOnClick(date, obj) {
            this.form.fillDate = date;
            if (obj.id != undefined) {
                this.form.id = obj.id;
                this.form.finishStatus = obj.finishStatus + "";
            } else {
                this.form.id = null;
                this.form.finishStatus = null;
            }
        },
//和业务数据比对,与日历上具体日期绑定
        dealMyDate(day) {
            let res = '';
            for (let index = 0; index < this.finishArr.length; index++) {
                var date = this.dayjs(this.finishArr[index].fillDate).format("YYYY-MM-DD");
                if (date == day) {
                    res = this.finishArr[index];
                    break;
                }
            }
            return res;
        },

遇到一个麻烦就是popover内部取消按钮,不知怎么关闭,于是发现日期可以在ref区分开,所以这么写了:

 <el-popover popper-class="popoverBackB" placement="top" width="300" trigger="click"
                    :ref="'popoverRef-' + data.day">

关闭方法:

 close(date) {
            this.$refs['popoverRef-' + date].doClose();
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值