UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

1 lines 4.17 kB
{"version":3,"file":"index2.mjs","sources":["../../../../../src/components/ivue-relative-time/index.vue"],"sourcesContent":["<template>\r\n <span :class=\"prefixCls\">{{ date }}</span>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, onBeforeUnmount, onMounted, ref, watch } from 'vue';\r\n\r\n// utils\r\nimport { oneOf } from '../../utils/assist';\r\n\r\nimport { getRelativeTime, getDate } from './time';\r\n\r\n// type\r\nimport { Props } from './types/relative-time';\r\n\r\nconst prefixCls = 'ivue-relative-time';\r\n\r\nexport default defineComponent({\r\n name: prefixCls,\r\n props: {\r\n /**\r\n * 需要对比的时间,可以是时间戳或 Date 类型\r\n *\r\n * @type {Number | Date | String}\r\n */\r\n time: {\r\n type: [Number, Date, String],\r\n required: true,\r\n },\r\n /**\r\n * 类型,可选值为 相对时间、日期 或 日期时间\r\n *\r\n * @type {String}\r\n */\r\n type: {\r\n type: String,\r\n validator(value: string) {\r\n return oneOf(value, ['relative', 'date', 'datetime']);\r\n },\r\n default: 'relative',\r\n },\r\n /**\r\n * 语言\r\n *\r\n * @type {String}\r\n *\r\n * before?: string\r\n after?: string\r\n just?: string\r\n seconds?: string\r\n minutes?: string\r\n hours?: string\r\n days?: string\r\n */\r\n locale: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n /**\r\n * 月份格式开始类型\r\n *\r\n * @type {String}\r\n */\r\n dateStartType: {\r\n type: String,\r\n validator(value: string) {\r\n return oneOf(value, ['month', 'year']);\r\n },\r\n },\r\n /**\r\n * 自动更新的间隔,单位:秒\r\n *\r\n * @type {Number}\r\n */\r\n interval: {\r\n type: Number,\r\n default: 60,\r\n },\r\n /**\r\n * 自定义日期方法\r\n *\r\n * @type {Function}\r\n */\r\n dateFunction: {\r\n type: Function,\r\n },\r\n },\r\n setup(props: Props) {\r\n // 时间\r\n const date = ref<string>('');\r\n // 计时器\r\n const timer = ref<ReturnType<typeof setInterval> | null>(null);\r\n\r\n // methods\r\n\r\n // 设置时间\r\n const setTime = () => {\r\n // 类型\r\n const _typeof = typeof props.time;\r\n\r\n // 时间\r\n let time: number;\r\n\r\n // 时间搓\r\n if (_typeof === 'number') {\r\n const timestamp =\r\n Number(props.time) > 10 ? props.time : props.time * 1000;\r\n\r\n time = new Date(timestamp).getTime();\r\n }\r\n // Date\r\n else if (_typeof === 'object') {\r\n time = props.time.getTime();\r\n }\r\n // 日期\r\n else if (_typeof === 'string') {\r\n time = new Date(props.time).getTime();\r\n }\r\n\r\n // 相对时间\r\n if (props.type === 'relative') {\r\n date.value = getRelativeTime(\r\n time,\r\n props.locale,\r\n props.dateStartType,\r\n props.dateFunction\r\n );\r\n }\r\n // 其他类型\r\n else {\r\n date.value = getDate(time, props.type);\r\n }\r\n };\r\n\r\n // watch\r\n\r\n // 监听时间变化\r\n watch(\r\n () => props.time,\r\n () => {\r\n setTime();\r\n }\r\n );\r\n\r\n // onMounted\r\n onMounted(() => {\r\n setTime();\r\n\r\n timer.value = setInterval(() => {\r\n setTime();\r\n }, 1000 * props.interval);\r\n });\r\n\r\n // onBeforeUnmount\r\n onBeforeUnmount(() => {\r\n if (timer.value) {\r\n clearInterval(timer.value);\r\n }\r\n });\r\n\r\n return {\r\n prefixCls,\r\n\r\n // data\r\n date,\r\n };\r\n },\r\n});\r\n</script>\r\n"],"names":["_createElementBlock","_normalizeClass"],"mappings":";;;;AACc,SAAA,YAAA,IAAE,EAAA,MAAA,EAAS,MAAA,EAAA,MAAA,EAAA,OAAA,QAAA,EAAA;oBAAK,EAAAA,kBAAA,CAAI,MAAA,EAAA;AAAA,IAAA,KAAA,EAAAC,cAAA,CAAA,IAAA,CAAA,SAAA,CAAA;AAAA;;;;;;"}