{"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;;;;;;"}