- 覆盖颗粒度只在 3 个入口: router targets / module routes / field registry - 框架内 .vue 之间互相引用全部硬编码静态 import,resolveVue/defineAsyncComponent 退出 .vue 文件 - 修 components/fields/FieldRelativeTime.vue 的 ../VueAdmin → ../../VueAdmin (移动后未跟改)
43 lines
1.3 KiB
Vue
43 lines
1.3 KiB
Vue
<template>
|
|
<template v-if="mode === 'display'">
|
|
<el-tooltip :content="fullTime" placement="top">
|
|
<span>{{ relativeTime }}</span>
|
|
</el-tooltip>
|
|
</template>
|
|
<el-date-picker v-else :model-value="modelValue" @update:model-value="$emit('update:modelValue', $event)" :disabled="disabled" type="datetime" style="width: 100%" />
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { computed } from 'vue'
|
|
import { useI18n } from 'vue-i18n'
|
|
import { vueAdmin } from '../../VueAdmin'
|
|
|
|
const { t } = useI18n()
|
|
|
|
const props = defineProps<{
|
|
field: any
|
|
modelValue: any
|
|
mode: 'display' | 'edit'
|
|
disabled?: boolean
|
|
}>()
|
|
|
|
defineEmits<{
|
|
'update:modelValue': [value: any]
|
|
}>()
|
|
|
|
const fullTime = computed(() => {
|
|
if (!props.modelValue) return '-'
|
|
return new Date(props.modelValue).toLocaleString(vueAdmin.locale === 'en' ? 'en-US' : 'zh-CN')
|
|
})
|
|
|
|
const relativeTime = computed(() => {
|
|
if (!props.modelValue) return '-'
|
|
const diff = Date.now() - props.modelValue
|
|
if (diff < 60000) return t('table.justNow')
|
|
if (diff < 3600000) return t('table.minutesAgo', { n: Math.floor(diff / 60000) })
|
|
if (diff < 86400000) return t('table.hoursAgo', { n: Math.floor(diff / 3600000) })
|
|
if (diff < 2592000000) return t('table.daysAgo', { n: Math.floor(diff / 86400000) })
|
|
return fullTime.value
|
|
})
|
|
</script>
|