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

需求:
- 日历区分交易日、非交易日
- 可以切换面板查看整年交易日信息
- 可以在手动调整交易日、非交易日
演示实例

序——使用软件及框架版本
- vue 2.6.11
- ant-design-vue 1.7.1
- moment.js(日期转换依赖)
设计思路
- 使用组件库的a-calendar标签可以实现一个日历的基本框架
- 每日模块实现交易日、非交易日的区分显示
- 以及过期和当日的日期灰色显示,且不能切换交易状态
- 将来的日期可以点击使用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>
注意事项与难点:
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>
交易状态与样式的控制,在模板区域添加多个判断条件区分
嵌入
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>
注意事项与难点:
- 通过比对日期确定每日的交易状态与日历日期匹配
- 修改交易状态的方法
总结
一个简单的日历组件就算搭建这样就基本完成了,具体代码可以到下面gitee里面看,如果有错误和改进的地方,欢迎大家指正交流。
Find me
Gitee:https://gitee.com/heyhaiyon/ant-vue-admin.git
微信公众号:heyhaiyang
掘金:heyhaiyang
博客园:heyhaiyang
头条号:heyhaiyang
使用ant design vue的日历组件,实现一个简单交易日与非交易日的切换的更多相关文章
- Ant Design Vue select下拉列表设置默认值
在项目中需要为Ant Design Vue 的 select 组件设置一个默认值,如下图所示的状态下拉选择框,默认选择全部 代码如下: <a-select v-model="query ...
- Ant Design Vue Pro 项目实战-项目初始化(一)
写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ...
- 基于Ant Design Vue封装一个表单控件
开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ...
- Vue3学习(二)之集成Ant Design Vue
一.集成Ant Design Vue npm install ant-design-vue@2.0.0-rc.3 --save 兼容性 Ant Design Vue 2.x 支持所有的现代浏览器. 如 ...
- Vue自定义日历组件
今天给大家介绍Vue的日历组件,可自定义样式.日历类型及支持扩展,可自定义事件回调.Props数据传输. 线上demo效果 示例 Template: <Calendar :sundayStart ...
- 使用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 ...
- 实现Ant Design 自定义表单组件
Ant Design 组件提供了Input,InputNumber,Radio,Select,uplod等表单组件,但实际开发中这是不能满足需求,同时我们希望可以继续使用Form提供的验证和提示等方法 ...
- 一个vue的日历组件
说明: 1.基于element-ui开发的vue日历组件. 地址 更新: 1.增加value-format指定返回值的格式2.增加头部插槽自定义头部 <ele-calendar > < ...
- vue.js 创建组件 子父通信 父子通信 非父子通信
1.创建组件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
随机推荐
- how to measure function performance in javascript
how to measure function performance in javascript Performance API Performance Timeline API Navigatio ...
- css effect all in one
css effect all in one CSS 特效汇总 / 前端特效汇总 图片滑动对比 https://www.fika.io/ https://chrome.google.com/websto ...
- Web SQL& IndexedDB
Web SQL& IndexedDB https://developer.mozilla.org/en/docs/Web/API/IndexedDB_API https://mdn.githu ...
- js trigger click event & dispatchEvent & svg element
js trigger click event & dispatchEvent & svg element but svg element not support trigger cli ...
- 宝塔部署Nestjs
1. 在宝塔上下载pm2 2. 打包你的服务端代码 "npm run build && cp ./package.json ./dist/" 3. 在宝塔文件&qu ...
- DeFi里的灰度?每月获得高收益?BGV代币初探
2020年已经接近了尾声,但是DeFi市场的热闹场面并没有停止,或者说,一直在延续.资本市场不断将大批的资金投入到DeFi市场中,以求在这波热潮中赚得一波又一波红利. 美国时间12月21日,Bacca ...
- NGK公链:通用型存储网络
NGK公链,是一条发展中的通用型存储网络. NGK的运用归结与存储场景.NGK通证的运用归结于支付场景.个人数据被中心化服务商买卖.被大数据服务商使用.被无数的商务及销售人员窃取.那么NGK的运用场景 ...
- Redis常用数据类型及其存储结构(源码篇)
一.SDS 1,SDS源码解读 sds (Simple Dynamic String),Simple的意思是简单,Dynamic即动态,意味着其具有动态增加空间的能力,扩容不需要使用者关心.Strin ...
- 小公举comm,快速比较两个排序文件
前言 我们经常会有需求比较一个文件里的内容是否在另一个文件存在.假如我有一份监控列表的IP写入在了file1,我所有的机器IP写入在了file2,我要找出还有哪些机器没有在监控列表.以前的做法是写个两 ...
- CSS元素层级的概念及性质
元素的层级的介绍 什么是元素的层级 通过z-index可以改变开启定位元素的层级 父元素的层级再高也不会遮盖住子元素 元素的层级的介绍 什么是元素的层级 当元素开启定位后就会是元素提升一个层级,网页是 ...