el+vue 实战 ⑧ el-calendar日历组件设置点击事件、el-calendar日历组件设置高度、el-calendar日历组件自定义日历内部内容

2023-10-27

一、效果图

日历显示内容变为01,02的形式,点击相应的日期后,有一个弹出框显示当天完成的一些内容。

二、前端代码设置

<el-calendar v-model="value">
          <div
            slot="dateCell"
            slot-scope="{ data }"
            @click="viewDayWork(data)"
            v-popover:popover
          >
            <p>
              {{ data.day.split("-").slice(2).join() }}
            </p>
          </div>
</el-calendar>

① 其中value在script中定义如下:

<script>
export default {
  data() {
    return {
      value: new Date(),
    };
  }, 
};
</script>

② 日历组件的data的结构如下:

 ③     {{ data.day.split("-").slice(2).join() }}对应输出

// 2022-06-09
console.log(data.day);
// ["2022","06","09"]
console.log(data.day.split("-"));
// ["09"]
console.log(data.day.split("-").slice(2));
// 09
console.log(data.day.split("-").slice(2).join());

④ v-popover:popover绑定一个弹出框

弹出框代码如下,ref绑定的名称同上面命名一样即可。

  <el-popover
      placement="bottom"
      ref="popover"
      width="200"
      trigger="manual"
      v-model="visible"
  />

⑤ 调整日历组件的宽高,样式设置

/deep/.el-calendar-table .el-calendar-day {
  height: 50px !important;
}

三、组件整体代码:

<template>
  <div>
    <!--侧边栏-日历部分  -->
    <el-row :span="6" style="margin-top: 1rem">
      <el-card>
        <el-calendar v-model="value">
          <div
            slot="dateCell"
            slot-scope="{ data }"
            @click="viewDayWork(data)"
            v-popover:popover
          >
            <p>
              {{ data.day.split("-").slice(2).join()}}
            </p>
          </div>
        </el-calendar>
      </el-card>
    </el-row>
    <!-- 日历部分弹出框 -->
    <el-popover
      placement="bottom"
      ref="popover"
      width="200"
      trigger="manual"
      v-model="visible"
    >
      <el-card>
        <div>日期:{{ this.timeValue }}</div>
        <div>
          <div>完成任务:</div>
          <div v-if="!this.isCalInput">{{ this.timeNote }}</div>
          <el-input
            v-if="this.isCalInput"
            type="textarea"
            autosize
            placeholder="请输入内容"
            v-model="calText"
          >
          </el-input>
        </div>
        <el-button
          v-if="!this.isCalInput"
          type="primary"
          icon="el-icon-edit"
          circle
          size="mini"
          class="calendar-edit-bth"
          @click="onEditCal"
        />

        <el-button
          v-if="this.isCalInput"
          type="success"
          icon="el-icon-check"
          circle
          size="mini"
          class="calendar-edit-bth"
          @click="handleCalCommit"
        />
        <el-button
          v-if="this.isCalInput"
          type="warning"
          icon="el-icon-refresh-left"
          circle
          size="mini"
          class="calendar-reset-bth"
          @click="handleCalReset"
        />
      </el-card>
    </el-popover>
  </div>
</template>
 
<script>
export default {
  data() {
    return {
      value: new Date(),
      timeValue: "",
      timeNote: "",
      timeId: null,
      visible: false,
      isCalInput: false,
      calText: "",
      updateCal: {
        id: "",
        calendarVal: "",
        calendarNote: "",
      },
    };
  },
  created() {},
  methods: {
    // 日历-时间格式转换【没用到】
    timeFormateChange(value) {
      let time;
      let yy = value.getFullYear();
      let mm = value.getMonth() + 1;
      let dd = value.getDate();
      time = yy + "-" + mm + "-" + dd;
      this.timeValue = time;
    },
    // 日历-处理点击查看日历日期事件
    async viewDayWork(data) {
      // 日历事件和ID清零,日期选择为选择的日期
      this.timeNote = "";
      this.timeValue = data.day;
      this.timeId = null;
      // 点击之前状态为没查看
      if (!this.visible) {
        // 后端url地址
        let url = "后端接口地址";
        // 携带当前日期查询
        const res = await this.$http.get(url, {
          params: {
            calendarVal: this.timeValue,
          },
        });
        // 接取后端返回的当前日期的事件
        if (res.data.data[0] != null) {
          this.timeNote = res.data.data[0].calendarNote;
          this.timeId = res.data.data[0].id;
        }
      }
      // 事件点击状态改变
      this.visible = !this.visible;
      // 如果点击编辑后再点退出,则编辑状态需要回退
      if (this.isCalInput) {
        this.isCalInput = false;
      }
    },
    // 日历-日历点击编辑事件
    onEditCal() {
      // 输入框显示
      this.isCalInput = true;
      // 当前输入框内容和原来日历部分内容相同
      this.calText = this.timeNote;
    },
    // 日历-处理日历编辑事件
    async handleCalCommit() {
      // timeId不为空【数据库中存在这天的数据】,执行更新操作
      if (this.timeId != null) {
        // 处理传入后端的数据
        this.updateCal.calendarVal = this.timeValue;
        this.updateCal.calendarNote = this.calText;
        this.updateCal.id = this.timeId;
        // 后端接口地址
        let url = "后端接口地址";
        // 接收接口返回信息
        const res = await this.$http.post(url, this.updateCal);
        if (res.data.code == 200) {
          this.$message({
            message: "更新任务成功!",
            type: "success",
          });
        }
        // 显示当前日历任务信息
        this.timeNote = res.data.data.calendarNote;
        // 清空传入后端的数据对象
        this.updateCal = this.$options.data().updateCal;
      }
      // timeId为空【数据库中不存在这天的数据】,执行新增操作
      else {
        // 放入待新增的日历日期和任务
        this.updateCal.calendarVal = this.timeValue;
        this.updateCal.calendarNote = this.calText;
        // 后端接口地址
        let url = "后端接口地址";
        // 接收处理后端返回的信息
        const res = await this.$http.post(url, this.updateCal);
        if (res.data.code == 200) {
          this.$message({
            message: "新增任务成功!",
            type: "success",
          });
        }
        // 返回的信息接取
        this.timeNote = res.data.data.calendarNote;
        // 清空传入的数组
        this.updateCal = this.$options.data().updateCal;
        //
        this.timeId = null;
      }
      // 更改正在编辑的状态
      this.isCalInput = false;
    },
    // 处理日历取消编辑事件
    handleCalReset() {
      this.isCalInput = false;
    },
  },
  watch: {},
};
</script>
 
<style scoped lang="less">
/deep/.el-calendar-table .el-calendar-day {
  height: 50px !important;
}
.calendar-edit-bth {
  margin-top: 3px;
  float: right;
  margin-bottom: 2px;
}
.calendar-reset-bth {
  margin-top: 3px;
  float: right;
  margin-bottom: 2px;
  margin-right: 4px;
}
</style>

四、总结

后面这个再慢慢优化吧,前端属实写着比后端有趣,但是后端提升空间大,钱更多

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

el+vue 实战 ⑧ el-calendar日历组件设置点击事件、el-calendar日历组件设置高度、el-calendar日历组件自定义日历内部内容 的相关文章

  • HTMLImageElement 作为 React Child 无效

    我正在尝试异步加载图像 并且仅在加载图像后才将其显示在 React 应用程序中 componentDidMount const img new Image img onload gt this setState originalImage
  • 如何理解 Angular JS 中的控制台错误消息?有什么工具吗?

    我是 Angular JS 的新手 我的第一个问题是如何理解 Angular JS 中控制台的错误消息 我编写了这段用于匹配密码的代码片段 它在控制台上抛出错误 但它工作正常 它是有线的 我无法从这些控制台消息中理解任何内容 谁能指出我为什
  • Twisted 的 Deferred 和 JavaScript 中的 Promise 一样吗?

    我开始在一个需要异步编程的项目中使用 Twisted 并且文档非常好 所以我的问题是 Twisted 中的 Deferred 与 Javascript 中的 Promise 相同吗 如果不是 有什么区别 你的问题的答案是Yes and No
  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 如何向 jQuery Tokeninput 添加占位符?

    如何将占位符添加到 jQuery Tokeninput 字段 一个正常的placeholder属性在这里不起作用 对于这样的输入
  • 为什么 jQuery 点击事件会多次触发

    我这里有这个示例代码http jsfiddle net DBBUL 10 http jsfiddle net DBBUL 10 document ready function creategene click function confir
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 禁用 JavaScript 中的右键单击

    当我尝试禁用右键单击时 它不起作用 我尝试使用下面的代码 document onclick function e console log e button if e button 2 e preventDefault return fals
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • 用数组反向查找对象

    假设我有一个这样的对象 resourceMap a 0 1 2 3 4 5 6 7 8 9 10 b 11 12 c 21 23 d 54 55 56 57 510 确定是否的最佳方法是什么resourceId 21将会 c 我们不知道钥匙
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • Jquery,清除/清空 tbody 元素的所有内容?

    我认为这会相当简单 但似乎空方法无法清除我拥有的 tbody 如果有人知道执行此操作的正确方法 我将不胜感激 我只想删除 tbody 中包含的所有内容 到目前为止我正在尝试 tbodyid empty HTML table tbody tr
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • 用jQuery编写简单的动画效果

    jQuery是一种基于JavaScript库的快速 小型而且特别丰富的JavaScript库 它极大地简化了HTML文档遍历和操作 事件处理 动画效果和AJAX交互等功能 jQuery中的各种动画函数可以让我们轻松地为网页添加各种各样的动画
  • Leetcode 刷题笔记:字符串篇

    结束了忙碌的期末 终于有了一个月的冬假 赶紧利用这段时间集中精力把Leetcode刷起来 1 Leetcode344 反转字符串 题解 难度 这道题目算是比较基础也是很简单的一道题目了 用双指针的方法可以轻松解决 时间复杂度O N 空间复杂
  • ES集成IK分词器

    一 下载IK分词器 注意版本与ES版本保持一致 下载地址 https github com medcl elasticsearch analysis ik releases 二 下载之后解压到ES的plugin目录 注意新建一个ik目录 解
  • 运行jar包时指定jdk的版本

    set JAVA HOME C Program Files Java jdk1 8 0 153 set CLASSPATH JAVA HOME lib dt jar JAVA HOMe lib tools jar set Path JAVA
  • CryptoPP版本验证

    在使用第三方程序库时 可能会遇到程序库的版本不匹配的问题 下面介绍在使用CryptoPP时 如何验证其版本 代码如下 include
  • 字符串转换成整数

    题目描述 输入一个由数字组成的字符串 把它转换成整数并输出 例如 输入字符串 123 输出整数123 给定函数原型int StrToInt const char str 实现字符串转换成整数的功能 不能使用库函数atoi 分析与解法 本题考
  • 问题:WPS文字提示应用程序已存在该快捷键,请另设快捷键

    1 问题描述 WPS文字 对某一字体样式自定义快捷键 结果提示已存在 如何如何查看已设定快捷键 只针对软件内部冲突 不考虑外部软件影响 我遇到过以下两种情况 1 与自己之前定义的冲突 2 与模板文件冲突 这个不太确定 对于模板冲突 自定义样
  • sqlite的下载安装和配置使用(非常详细)

    sqlite下载链接 Sqlite下载官网 1 这个压缩包中有头文件sqlite3 h以及源码 主要是用到头文件 2 看电脑配置的操作系统或者看所需项目是64位还是32位下载对应的压缩包 3 解压得到这两个文件 sqlite3 def文件用
  • TCP三次握手原理,以及为什么不能改成两次握手

    网上 关于 TCP三次握手 的文章有很多 但很多一些部分讲的含糊其辞 所以才重新造了这个轮子 一方面对那些含糊其辞的部分做了解释 另一方面也方便了以后的学习 1 上图的名词解释 SYN 同步序号 它表示建立连接 TCP规定SYN 1时不能携
  • uniapp如何渲染html模板,uni-app 页面样式

    页面样式与布局 尺寸单位 uni app 支持的通用 css 单位包括 px rpxpx 即屏幕像素 rpx 即响应式px 一种根据屏幕宽度自适应的动态单位 以750宽的屏幕为基准 750rpx恰好为屏幕宽度 屏幕变宽 rpx 实际显示效果
  • B站视频下载(含bv快速变回av)

    下载解压JJDown的软件 打开如下应用程序 JiJiDownForWPF打开首页 原本B站中的每个视频有对应的av号但从2020 3起全都变为bv号 所以如何从bv号中查看av号 谷歌浏览器中打开要下载的B站视频 按F12 开发者工具 选
  • Python#Typora-Python笔记

    01 源码安装Python3 一 源码安装 安装依赖软件包 root qfedu com yum groupinstall Development Tools root qfedu com yum y install zlib devel
  • 日语动词的13种变形

    五段动词 一类动词 辞书形 形 形 形 形 意志形 可能形 行 行 行 行 行 行 行 書 書 書 書 書 書 書 買 買 買 買 買 買 買 假定形 被动形 使役形 命令形 禁止形 被役形 行 行 行 行 行 行 書 書 書 書 書 書
  • 【linux】内核组件 [不断补充中...]

    防火墙 netfilter iptables IP 信息包过滤系统 netfilter 内核空间 kernelspace 是内核的一部分 由一些信息包过滤表组成 这些表包含内核用来控制信息包过滤处理的规则集 即 存放内核过滤规则的防火墙 i
  • GridView 使用方法详解

    GridView 跟ListView 很类似 Listview 主要以列表形式显示数据 GridView 则是以网格形式显示数据 掌握ListView 使用方法后 会很轻松的掌握GridView的使用方法 欢迎关注微信公众号 程序员Andr
  • DBeaver导入csv数据到Oracle

    时隔许久 我又回来写博客啦 前段时间太忙了 绝对不是因为懒才没有写的 大实话 今天用到csv存库的问题 踩了点坑 做个笔记 废话不多说我们开始 第一步 打开DBeaver 右键点击要导入数据的表 选择 导入数据 第二步 点击csv 下一步
  • 反射 动态代理 线程池

    反射 动态代理 线程池 反射 动态获取类的字节码文件 并对其进行抽象 通过反射可以获取一个类的全部方法和属性 然后进行调用 反射与类之间抽象的理解 Class 将字节码对象进行抽象 出现了 1 属性 表示字节码文件的属性的属性 privat
  • PDF阅读时如何返回到跳转之前的位置

    方法 同时按下Alt 左箭头
  • 中国航天科技集团公司的各个研究院

    1 航天一院 中国运载火箭技术研究院 导弹运载火箭总体设计生产总装 2 航天四院 航天动力技术研究院 航天固体燃料发动机研制生产实验 3 航天五院 中国空间技术研究院 卫星 飞船 空间站 探月器等航天器研制生产 4 航天六院 航天推进技术研
  • el+vue 实战 ⑧ el-calendar日历组件设置点击事件、el-calendar日历组件设置高度、el-calendar日历组件自定义日历内部内容

    一 效果图 日历显示内容变为01 02的形式 点击相应的日期后 有一个弹出框显示当天完成的一些内容 二 前端代码设置