使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换

需求:

  1. 日历区分交易日、非交易日
  2. 可以切换面板查看整年交易日信息
  3. 可以在手动调整交易日、非交易日

演示实例

序——使用软件及框架版本

  1. vue 2.6.11
  2. ant-design-vue 1.7.1
  3. moment.js(日期转换依赖)

设计思路

  1. 使用组件库的a-calendar标签可以实现一个日历的基本框架
  2. 每日模块实现交易日、非交易日的区分显示
  3. 以及过期和当日的日期灰色显示,且不能切换交易状态
  4. 将来的日期可以点击使用a-popconfirm标签来切换交易状态,或者使用右键点击切换

具体代码过程

1. template模板区域

<template>
<div style="margin: 0 auto">
<h1 style="text-align: center">日历组件</h1>
<a-row class="calendarContent" style="margin: 0 auto; width: 100%">
<div class="calendarBox">
<a-calendar :value="value" @panelChange="panelChange" @select="selectDate">
<ul slot="dateCellRender" slot-scope="value" class="events">
<li v-for="item in getListData(value)" :key="item.date">
<a-tooltip
v-if="item.date<nowDate || item.date == nowDate"
>
<template slot="title">
<span>只能在下个交易日才可设置</span>
</template>
<div class="cellBlockOld" v-if="item.date < nowDate">
<span v-if="item.workFlag=='0'">交易日</span>
<span v-if="item.workFlag=='1' && item.date !=next">非交易日</span>
</div>
<div class="cellBlockNow" v-if="item.date == nowDate">
<span v-if="item.workFlag=='0' && item.date == nowDate">交易日</span>
<span v-if="item.workFlag=='1' && item.date == nowDate">非交易日</span>
</div>
</a-tooltip>
<a-popconfirm
v-if="item.workFlag == '1' && item.date>nowDate"
title="设为交易日"
@confirm="setDate(0)"
@cancel="cancel"
>
<div class="cellBlockNext1">
<span v-if="item.workFlag== '1'">非交易日
</span>
</div>
</a-popconfirm>
<a-popconfirm
v-if="item.workFlag == '0' && item.date>nowDate"
title="设为非交易日"
@confirm="setDate(1)"
@cancel="cancel"
>
<div class="cellBlockNext0">
<span v-if="item.workFlag== '0' && item.date != next">交易日</span>
<span v-if="item.workFlag== '0' && item.date == next">下一交易日
</span>
</div>
</a-popconfirm>
</li>
</ul>
</a-calendar>
</div>
</a-row>
</div>
</template>

注意事项与难点:

  1. a-calendar标签的数据绑定,与数据遍历逻辑,这里数据绑定在a- calendar标签上,日期面板的切换和选中日期的事件都在绑定在此;内层嵌套插槽渲染以一周7天渲染日期,绑定数据几乎不用变化,可以直接拿来用。

     <a-calendar :value="value" @panelChange="panelChange" @select="selectDate">
    <ul slot="dateCellRender" slot-scope="value" class="events">
    <li v-for="item in getListData(value)" :key="item.date">
    </li>
    </ul>
    </a-calendar>
  2. 交易状态与样式的控制,在模板区域添加多个判断条件区分

  3. 嵌入a-popconfirm来通过气泡事件修改交易状态

2. js区域

<script>
import moment from 'moment' export default {
name: '',
components: {},
watch: {},
data () {
return {
value: moment(new Date()),
dataList: [
{
date: '20210228',
workFlag: '1'
},
{
date: '20210301',
workFlag: '0'
}
// 此处省略造的数据,大家可以使用mock或者在data中造一些数据,此案例简单造了一个月的数据用与演示
],
now: new Date(),
selectDateValue: ''
}
},
methods: {
moment,
panelChange (value) {
console.log('面板中点击、切换事件')
console.log(value)
this.value = value
},
selectDate (value) {
console.log('选中日期事件')
console.log(value)
this.selectDateValue = value.format('YYYYMMDD')
},
// 切换交易日与非交易日方法,切换交易状态的同时面板交易状态改变,同时向后台发送请求(自行添加请求)
setDate (val) {
console.log(val)
var newDataList = []
// 此处大家可以思考一下,forEach和map两种方法对数组的操作
this.dataList.forEach(e => {
if (e.date === this.selectDateValue) {
e.workFlag = val
newDataList.push(e)
} else {
newDataList.push(e)
}
})
this.dataList = newDataList
console.log(this.dataList)
},
cancel () { },
getListData (value) {
var listData = []
// 注意事项1:通过比对日期确定将每日的交易状态与日历日期匹配
this.dataList.forEach(e => {
// 让数组与日历日期匹配
if (e.date === value.format('YYYYMMDD')) {
listData.push(e)
}
})
return listData
}
},
computed: {
nowDate: function () {
const nowDate = moment(this.now).format('YYYYMMDD')
return nowDate
},
next: function () {
var next
var nextDate = new Date(this.now - 0 + 86400000)
next = moment(nextDate).format('YYYYMMDD')
return next
}
},
created () {
},
mounted () {
}
}
</script>

注意事项与难点:

  1. 通过比对日期确定每日的交易状态与日历日期匹配
  2. 修改交易状态的方法

总结

一个简单的日历组件就算搭建这样就基本完成了,具体代码可以到下面gitee里面看,如果有错误和改进的地方,欢迎大家指正交流。

Find me

Gitee:https://gitee.com/heyhaiyon/ant-vue-admin.git

微信公众号:heyhaiyang

掘金:heyhaiyang

博客园:heyhaiyang

头条号:heyhaiyang

使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换的更多相关文章

  1. Ant Design Vue select下拉列表设置默认值

    在项目中需要为Ant Design Vue 的 select 组件设置一个默认值,如下图所示的状态下拉选择框,默认选择全部 代码如下: <a-select v-model="query ...

  2. Ant Design Vue Pro 项目实战-项目初始化(一)

    写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ...

  3. 基于Ant Design Vue封装一个表单控件

    开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...

  4. Vue3学习(二)之集成Ant Design Vue

    一.集成Ant Design Vue npm install ant-design-vue@2.0.0-rc.3 --save 兼容性 Ant Design Vue 2.x 支持所有的现代浏览器. 如 ...

  5. Vue自定义日历组件

    今天给大家介绍Vue的日历组件,可自定义样式.日历类型及支持扩展,可自定义事件回调.Props数据传输. 线上demo效果 示例 Template: <Calendar :sundayStart ...

  6. 使用npm安装 Ant Design Vue 时报错—ant-design-vue@latest(sha1-qsf / gCIFcRYxyGmOKgx7TmHf1z4 =)seems to be corrupted.

    安装 Ant Design Vue 时报错: npm install ant-design-vue --save ant-design-vue @ latest(sha1-qsf / gCIFcRYx ...

  7. 实现Ant Design 自定义表单组件

    Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...

  8. 一个vue的日历组件

    说明: 1.基于element-ui开发的vue日历组件. 地址 更新: 1.增加value-format指定返回值的格式2.增加头部插槽自定义头部 <ele-calendar > < ...

  9. vue.js 创建组件 子父通信 父子通信 非父子通信

    1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

随机推荐

  1. how to measure function performance in javascript

    how to measure function performance in javascript Performance API Performance Timeline API Navigatio ...

  2. css effect all in one

    css effect all in one CSS 特效汇总 / 前端特效汇总 图片滑动对比 https://www.fika.io/ https://chrome.google.com/websto ...

  3. Web SQL& IndexedDB

    Web SQL& IndexedDB https://developer.mozilla.org/en/docs/Web/API/IndexedDB_API https://mdn.githu ...

  4. js trigger click event & dispatchEvent & svg element

    js trigger click event & dispatchEvent & svg element but svg element not support trigger cli ...

  5. 宝塔部署Nestjs

    1. 在宝塔上下载pm2 2. 打包你的服务端代码 "npm run build && cp ./package.json ./dist/" 3. 在宝塔文件&qu ...

  6. DeFi里的灰度?每月获得高收益?BGV代币初探

    2020年已经接近了尾声,但是DeFi市场的热闹场面并没有停止,或者说,一直在延续.资本市场不断将大批的资金投入到DeFi市场中,以求在这波热潮中赚得一波又一波红利. 美国时间12月21日,Bacca ...

  7. NGK公链:通用型存储网络

    NGK公链,是一条发展中的通用型存储网络. NGK的运用归结与存储场景.NGK通证的运用归结于支付场景.个人数据被中心化服务商买卖.被大数据服务商使用.被无数的商务及销售人员窃取.那么NGK的运用场景 ...

  8. Redis常用数据类型及其存储结构(源码篇)

    一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...

  9. 小公举comm,快速比较两个排序文件

    前言 我们经常会有需求比较一个文件里的内容是否在另一个文件存在.假如我有一份监控列表的IP写入在了file1,我所有的机器IP写入在了file2,我要找出还有哪些机器没有在监控列表.以前的做法是写个两 ...

  10. CSS元素层级的概念及性质

    元素的层级的介绍 什么是元素的层级 通过z-index可以改变开启定位元素的层级 父元素的层级再高也不会遮盖住子元素 元素的层级的介绍 什么是元素的层级 当元素开启定位后就会是元素提升一个层级,网页是 ...