From ce46fee0bbe379b7bd0346c09e2a320c4f9a642b Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Fri, 25 Sep 2020 23:07:58 +0800 Subject: [PATCH] chore: remove moment dependency. (halo-dev/console#256) --- package-lock.json | 124 ++++++++++++------ package.json | 2 +- src/utils/datetime.js | 36 +++++ src/utils/filter.js | 22 ++-- src/utils/util.js | 37 +----- src/views/post/PostEdit.vue | 21 +-- .../post/components/PostSettingDrawer.vue | 7 +- src/views/sheet/SheetEdit.vue | 6 +- .../sheet/components/SheetSettingDrawer.vue | 6 +- .../system/developer/tabs/RuntimeLogs.vue | 4 +- vue.config.js | 6 - 11 files changed, 156 insertions(+), 115 deletions(-) create mode 100644 src/utils/datetime.js diff --git a/package-lock.json b/package-lock.json index 6d11f4208..388c36a34 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2462,18 +2462,6 @@ "supports-color": "^7.0.0" } }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "optional": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -2603,31 +2591,6 @@ "webpack-sources": "^1.4.3" } }, - "vue-loader-v16": { - "version": "npm:vue-loader@16.0.0-beta.8", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz", - "integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==", - "dev": true, - "optional": true, - "requires": { - "chalk": "^4.1.0", - "hash-sum": "^2.0.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -6083,6 +6046,11 @@ } } }, + "dayjs": { + "version": "1.8.36", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", + "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==" + }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", @@ -16154,6 +16122,88 @@ } } }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.0.0-beta.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz", + "integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "optional": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "vue-ls": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/vue-ls/-/vue-ls-3.2.1.tgz", diff --git a/package.json b/package.json index 4dd79c73a..9bfdf28e0 100644 --- a/package.json +++ b/package.json @@ -22,13 +22,13 @@ "dependencies": { "ant-design-vue": "^1.6.5", "axios": "^0.19.2", + "dayjs": "^1.8.36", "enquire.js": "^2.1.6", "filepond": "^4.20.1", "filepond-plugin-image-preview": "^4.6.4", "flv.js": "^1.5.0", "halo-editor": "^2.8.2", "marked": "^1.1.1", - "moment": "^2.27.0", "tiny-pinyin": "^1.3.0", "verte": "^0.0.12", "vue": "^2.6.12", diff --git a/src/utils/datetime.js b/src/utils/datetime.js new file mode 100644 index 000000000..d0d5fd5d8 --- /dev/null +++ b/src/utils/datetime.js @@ -0,0 +1,36 @@ +import dayjs from 'dayjs' +import 'dayjs/locale/zh-cn' +dayjs.locale('zh-cn') + +function datetimeFormat(datetime = new Date(), pattern = 'YYYY-MM-DD HH:mm') { + return dayjs(datetime).format(pattern) +} + +function timeAgo(datetime) { + var currentTime = new Date().getTime() + var between = currentTime - datetime + var days = Math.floor(between / (24 * 3600 * 1000)) + if (days === 0) { + var leave1 = between % (24 * 3600 * 1000) + var hours = Math.floor(leave1 / (3600 * 1000)) + if (hours === 0) { + var leave2 = leave1 % (3600 * 1000) + var minutes = Math.floor(leave2 / (60 * 1000)) + if (minutes === 0) { + var leave3 = leave2 % (60 * 1000) + var seconds = Math.round(leave3 / 1000) + return seconds + ' 秒前' + } + return minutes + ' 分钟前' + } + return hours + ' 小时前' + } + if (days < 0) return '刚刚' + if (days < 5) { + return days + ' 天前' + } else { + return dayjs(datetime).format('YYYY-MM-DD HH:mm') + } +} + +export { datetimeFormat, timeAgo } diff --git a/src/utils/filter.js b/src/utils/filter.js index a669d4b3f..5c2a7a1f6 100644 --- a/src/utils/filter.js +++ b/src/utils/filter.js @@ -1,10 +1,10 @@ import Vue from 'vue' -import moment from 'moment' -import 'moment/locale/zh-cn' -import { - timeAgo -} from '@/utils/util' -moment.locale('zh-cn') + +import dayjs from 'dayjs' +import 'dayjs/locale/zh-cn' + +import { timeAgo } from '@/utils/datetime' +dayjs.locale('zh-cn') Vue.filter('NumberFormat', function(value) { if (!value) { @@ -14,20 +14,16 @@ Vue.filter('NumberFormat', function(value) { return intPartFormat }) -Vue.filter('dayjs', function(dataStr, pattern = 'YYYY-MM-DD HH:mm') { - return moment(dataStr).format(pattern) -}) - Vue.filter('moment', function(dataStr, pattern = 'YYYY-MM-DD HH:mm') { - return moment(dataStr).format(pattern) + return dayjs(dataStr).format(pattern) }) Vue.filter('moment_post_date', function(dataStr, pattern = '/YYYY/MM/') { - return moment(dataStr).format(pattern) + return dayjs(dataStr).format(pattern) }) Vue.filter('moment_post_day', function(dataStr, pattern = '/YYYY/MM/DD/') { - return moment(dataStr).format(pattern) + return dayjs(dataStr).format(pattern) }) Vue.filter('timeAgo', timeAgo) diff --git a/src/utils/util.js b/src/utils/util.js index 90c6ac0ab..546390352 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -1,8 +1,4 @@ -import moment from 'moment' -import 'moment/locale/zh-cn' -/** - * 触发 window.resize - */ + export function triggerWindowResizeEvent() { const event = document.createEvent('HTMLEvents') event.initEvent('resize', true, true) @@ -10,41 +6,10 @@ export function triggerWindowResizeEvent() { window.dispatchEvent(event) } -export function timeAgo(time) { - var currentTime = new Date().getTime() - var between = currentTime - time - var days = Math.floor(between / (24 * 3600 * 1000)) - if (days === 0) { - var leave1 = between % (24 * 3600 * 1000) - var hours = Math.floor(leave1 / (3600 * 1000)) - if (hours === 0) { - var leave2 = leave1 % (3600 * 1000) - var minutes = Math.floor(leave2 / (60 * 1000)) - if (minutes === 0) { - var leave3 = leave2 % (60 * 1000) - var seconds = Math.round(leave3 / 1000) - return seconds + ' 秒前' - } - return minutes + ' 分钟前' - } - return hours + ' 小时前' - } - if (days < 0) return '刚刚' - if (days < 5) { - return days + ' 天前' - } else { - return moment(time).format('YYYY-MM-DD HH:mm') - } -} - export function isObject(value) { return value && typeof value === 'object' && value.constructor === Object } -export function datetimeFormat(value, pattern = 'YYYY-MM-DD HH:mm') { - return moment(value).format(pattern) -} - // decode html tag export function decodeHTML(html) { let elem = document.createElement('div') diff --git a/src/views/post/PostEdit.vue b/src/views/post/PostEdit.vue index c05afcf0c..7963a1bb0 100644 --- a/src/views/post/PostEdit.vue +++ b/src/views/post/PostEdit.vue @@ -74,7 +74,8 @@ diff --git a/src/views/post/components/PostSettingDrawer.vue b/src/views/post/components/PostSettingDrawer.vue index 459386bf8..f9588554d 100644 --- a/src/views/post/components/PostSettingDrawer.vue +++ b/src/views/post/components/PostSettingDrawer.vue @@ -322,10 +322,9 @@ import TagSelect from './TagSelect' // libs import { mixin, mixinDevice } from '@/utils/mixin.js' -import moment from 'moment' +import { datetimeFormat } from '@/utils/datetime' import pinyin from 'tiny-pinyin' import { mapGetters } from 'vuex' -import { datetimeFormat } from '@/utils/util' // apis import categoryApi from '@/api/category' @@ -421,9 +420,9 @@ export default { pickerDefaultValue() { if (this.selectedPost.createTime) { var date = new Date(this.selectedPost.createTime) - return moment(date, 'YYYY-MM-DD HH:mm:ss') + return datetimeFormat(date, 'YYYY-MM-DD HH:mm:ss') } - return moment(new Date(), 'YYYY-MM-DD HH:mm:ss') + return datetimeFormat(new Date(), 'YYYY-MM-DD HH:mm:ss') }, fullPath() { const permalinkType = this.options.post_permalink_type diff --git a/src/views/sheet/SheetEdit.vue b/src/views/sheet/SheetEdit.vue index c61e0a2ac..d9b27beae 100644 --- a/src/views/sheet/SheetEdit.vue +++ b/src/views/sheet/SheetEdit.vue @@ -69,7 +69,7 @@