基于Ant Design of Vue实现时长组件 duration
最近遇到一个需求,需要一个输入时长的组件,在经过一番寻找后没有合适的,最终自己动手写一个(实现了v-model双向绑定),记录一下,也给小伙伴们提供一个方便。
本示例基于ant design of vue实现,如使用其他组件库的可以参照实现,原理大同小异。
<!--本示例仅提供基础方法,如有其他需求可动手实现,也可以通过评论提出-->
<l-duration v-model="value"/>
模板文件部分
<template><a-popover trigger="click" placement="bottom" @visibleChange="handleVisibleChange"><a-input v-model="showValue" read-only :disabled="disabled"/><template #content><a-input-number v-model="hour" :min="0" :precision="0"/>时<a-input-number v-model="minute" :min="0" :precision="0"/>分</template></a-popover>
</template><script>
import {isNumber, minutesToDate, parseCustomDate} from "@/dateUtil";
import arithmetic from "@/arithmetic";export default {name: "LDuration",model: {prop: 'value',event: 'change'},props: {value: {type: Number,default: undefined,},disabled: {type: Boolean,default: false,}},data() {return {showValue: "",hour: undefined,minute: undefined,}},watch: {value(newVal) {if (isNumber(newVal)) {let customDate = minutesToDate(newVal, 'hm')this.showValue = parseCustomDate(customDate)this.hour = customDate.hourthis.minute = customDate.minute} else {this.showValue = ""this.hour = undefinedthis.minute = undefined}}},methods: {handleVisibleChange(visible) {if (!visible) {//计算时长,单位:分钟,延迟一会再算setTimeout(() => {let hour = this.hour, minute = this.minute, value = undefinedif (isNumber(hour) || isNumber(minute)) {value = arithmetic.add(arithmetic.multiply(hour || 0, 60), minute || 0).toNumber()}this.$emit('change', value)}, 100)}},}
}
</script>
公共方法之dateUtil.js
/*** 是否为数字*/
export function isNumber(obj) {return typeof obj === 'number' && !isNaN(obj)
}/*** 分钟转日期格式** @param {Number} minutes 分钟* @param {String} formatter='dhm' 格式 [d:日,h:时,m:分]* @author 乐享生活522* @date 2022/5/17 15:44*/export function minutesToDate(minutes, formatter = 'dhm') {if (!isNumber(minutes)) {return undefined}let day = 0, hour = 0, minute = 0if (formatter === 'dhm') {day = Math.floor(minutes / (60 * 24));hour = Math.floor(minutes / 60 % 24);minute = Math.ceil((minutes % 60));} else if (formatter === 'hm') {hour = Math.floor(minutes / 60);minute = Math.ceil((minutes % 60));} else {minute = minutes;}return {day, hour, minute}
}/*** 解析自定义日期** @param {Object} customDate 自定义日期格式的对象* @param {Number} customDate.day 天* @param {Number} customDate.hour 时* @param {Number} customDate.minute 分* @author 乐享生活522* @date 2022/5/17 16:12*/
export function parseCustomDate(customDate) {let result = ''let {day, hour, minute} = customDateif (day) {result += day + '天';}if (hour) {result += hour + '时';}if (minute) {result += minute + '分';}return result
}
公共方法之arithmetic
//依赖math.js相关方法
import {create, all} from 'mathjs'//使用配置创建一个mathjs实例
const config = {number: 'BigNumber',precision: 64,//默认情况下为64,仅适用于BigNumbers
}
const math = create(all, config)let arithmetic = {//加法add(num1, num2) {return math.add(math.bignumber(num1), math.bignumber(num2));},//减法subtract(num1, num2) {return math.subtract(math.bignumber(num1), math.bignumber(num2));},//乘法multiply(num1, num2) {return math.multiply(math.bignumber(num1), math.bignumber(num2));},// 除法divide(num1, num2, fractionDigits) {let quotient = math.divide(math.bignumber(num1), math.bignumber(num2))if (fractionDigits) {return math.round(quotient, fractionDigits)}return quotient;},//四舍五入round(num, fractionDigits) {return math.round(num, fractionDigits)}}
export default arithmetic;
基于Ant Design of Vue实现时长组件 duration相关推荐
- 使用Ant Design 和Vue,React中后台开发套餐
2019独角兽企业重金招聘Python工程师标准>>> 前言 目前Ant Design 提供 React 和 Vue 两种整合开发框架,开箱即用的中台前端/设计解决方案,可适合中小公 ...
- Vue.js高效前端开发 • 【Ant Design of Vue框架进阶】
全部章节 >>>> 文章目录 一.栅格组件 1.栅格组件介绍 2.栅格组件使用 3.实践练习 二.输入组件 1.输入框组件使用 2.选择器组件使用 3.单选框组件使用 4.实践 ...
- 创建Vue+TS+Ant Design of Vue 项目
创建Vue+TS+Ant Design of Vue 项目 创建项目 选择配置 运行项目 安装 ant-design-vue 安装 babel-plugin-import 使用VS Code打开 配置 ...
- Ant Design of Vue +TS 表单动态增加数据验证卧坑姿势
文章目录 Update 20210601 Update 20210525 原文: 1.a-form的model 2.获取数据 源码 Update 20210601 今天做别的页面的时候发现又取不到数据 ...
- 基于Ant Design和jQuery UI的表单设计器
基于Ant Design 和jQuery UI 的表单设计器 GitHub 地址 概念 Comonent 组件 Layout 布局,一种特殊的Component Component Editor 组件 ...
- ant design pro vue 动态路由 流程详解
ant design pro vue 动态路由 流程详解 前言 流程图 流程1 src/permission.js 流程2 src/store/modules/user.js 流程3 src/perm ...
- React 基于ant design Pro 4 实现的一个分页, 自定义页码颜色
标题目录 代码 样式 前言 这是在 Ant Design Pro 4 中基于 ant design 的 Pagination 分页组件的基础上开发的. 有这么一个需求, 页码的颜色基于该页是否有差异, ...
- 一种基于Gradient Boosting的公交车运行时长预测方法
一种基于Gradient Boosting的公交车运行时长预测方法 赖永炫1,2, 杨旭3, 曹琦4, 曹辉彬1,2, 王田5, 杨帆6 1 厦门大学信息学院,福建 厦门 361005 2 厦门大学深 ...
- ant design of vue分页/layui实现分页
ant design of vue分页 官方文档:https://www.antdv.com/components/pagination-cn/ 结果: 代码: <a-paginationv-i ...
最新文章
- AttributeError: module ‘tensorflow‘ has no attribute ‘applications‘
- 超长整数相加 c语言类,二个超长正整数的相加
- python 视频转场_视频剪辑什么鬼?Python 带你高效创作短视频
- lombok @Builder注解的使用
- 【建议收藏】二叉树的序列化与反序列化
- 管理日志--项目管理科学的产生与发展
- win32 注册表操作
- 戴尔电脑正在准备自动修复_戴尔如何建立社区为开放的未来做准备
- Veeam 9.5U3集中管理Agent详解
- EL表达式中,param和requestScope的区别
- gvim 命令行粘贴_vim-如何在光标所在的行中粘贴?
- gmssl编译linux,linux 编译安装GmSSL记录
- stc15流水灯c语言,STC89C52单片机流水灯
- 2021秋季《数据结构》_EOJ 1086.哥尼斯堡的七桥问题
- 支付宝推出信用租房 醉翁之意不在酒?
- 【工作感悟】职场工作感悟(一)
- 什么是等保三级?等保三级的认证流程有哪些?
- php源码中powerby,小龙源码网 - discuz论坛怎么去掉power by discuz版权
- 计算机专业、物联网工程大一寒假规划必备篇
- 实用工具分享-桌面美化软件Fences
热门文章
- 河南理工大学计算机学院杨合超,模式识别的主要方法及其应用
- 【What if 系列】小世界
- 数据聚合 错误的请求KEY 排除KEY失效
- 分包组包 北斗通信_一种利用北斗短报文实现第三方数据双向传输的方法与流程...
- 大话DFT频谱分析(并不是我的话)
- 国内做SRM系统的公司哪家比较好?如何利用SRM系统管理好供应商?
- 7.features特征
- 爱甲专线分享甲状腺随访大数据多中心平台建设经验,与会专家广泛关注
- homeassistant — 三种卡片在lovelace中显示实体的某个属性值
- 谈谈自己为公司设计的jmeter自动化部署框架