chore: remove moment dependency. (halo-dev/console#256)

pull/3445/head
Ryan Wang 2020-09-25 23:07:58 +08:00 committed by GitHub
parent 75cd1476c8
commit ce46fee0bb
11 changed files with 156 additions and 115 deletions

124
package-lock.json generated
View File

@ -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",

View File

@ -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",

36
src/utils/datetime.js Normal file
View File

@ -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 }

View File

@ -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)

View File

@ -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')

View File

@ -74,7 +74,8 @@
<script>
import { mixin, mixinDevice } from '@/utils/mixin.js'
// import { mapGetters } from 'vuex'
import moment from 'moment'
import { datetimeFormat } from '@/utils/datetime'
import PostSettingDrawer from './components/PostSettingDrawer'
import AttachmentDrawer from '../attachment/components/AttachmentDrawer'
import FooterToolBar from '@/components/FooterToolbar'
@ -88,7 +89,7 @@ export default {
PostSettingDrawer,
FooterToolBar,
AttachmentDrawer,
MarkdownEditor
MarkdownEditor,
// RichTextEditor
},
data() {
@ -102,7 +103,7 @@ export default {
contentChanges: 0,
draftSaving: false,
previewSaving: false,
draftSavederrored: false
draftSavederrored: false,
}
},
beforeRouteEnter(to, from, next) {
@ -150,7 +151,7 @@ export default {
},
onCancel() {
next(false)
}
},
})
}
},
@ -171,12 +172,12 @@ export default {
if (newValue) {
this.contentChanges++
}
}
},
},
computed: {
temporaryContent() {
return this.postToStage.originalContent
}
},
// ...mapGetters(['options'])
},
methods: {
@ -184,7 +185,7 @@ export default {
this.$log.debug('Draft only: ' + draftOnly)
this.postToStage.status = 'DRAFT'
if (!this.postToStage.title) {
this.postToStage.title = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss')
this.postToStage.title = datetimeFormat(new Date(), 'YYYY-MM-DD-HH-mm-ss')
}
this.draftSaving = true
if (this.postToStage.id) {
@ -240,7 +241,7 @@ export default {
handlePreview() {
this.postToStage.status = 'DRAFT'
if (!this.postToStage.title) {
this.postToStage.title = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss')
this.postToStage.title = datetimeFormat(new Date(), 'YYYY-MM-DD-HH-mm-ss')
}
this.previewSaving = true
if (this.postToStage.id) {
@ -295,7 +296,7 @@ export default {
},
onRefreshPostMetasFromSetting(metas) {
this.selectedMetas = metas
}
}
},
},
}
</script>

View File

@ -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

View File

@ -69,7 +69,7 @@
<script>
import { mixin, mixinDevice } from '@/utils/mixin.js'
// import { mapGetters } from 'vuex'
import moment from 'moment'
import { datetimeFormat } from '@/utils/datetime'
import SheetSettingDrawer from './components/SheetSettingDrawer'
import AttachmentDrawer from '../attachment/components/AttachmentDrawer'
import FooterToolBar from '@/components/FooterToolbar'
@ -175,7 +175,7 @@ export default {
this.$log.debug('Draft only: ' + draftOnly)
this.sheetToStage.status = 'DRAFT'
if (!this.sheetToStage.title) {
this.sheetToStage.title = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss')
this.sheetToStage.title = datetimeFormat(new Date(), 'YYYY-MM-DD-HH-mm-ss')
}
this.draftSaving = true
if (this.sheetToStage.id) {
@ -229,7 +229,7 @@ export default {
handlePreview() {
this.sheetToStage.status = 'DRAFT'
if (!this.sheetToStage.title) {
this.sheetToStage.title = moment(new Date()).format('YYYY-MM-DD-HH-mm-ss')
this.sheetToStage.title = datetimeFormat(new Date(), 'YYYY-MM-DD-HH-mm-ss')
}
this.previewSaving = true
if (this.sheetToStage.id) {

View File

@ -234,7 +234,7 @@
<script>
// libs
import { mixin, mixinDevice } from '@/utils/mixin.js'
import moment from 'moment'
import { datetimeFormat } from '@/utils/datetime'
import { mapGetters } from 'vuex'
import pinyin from 'tiny-pinyin'
@ -301,9 +301,9 @@ export default {
pickerDefaultValue() {
if (this.selectedSheet.createTime) {
var date = new Date(this.selectedSheet.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 blogUrl = this.options.blog_url

View File

@ -39,7 +39,7 @@
import { codemirror } from 'vue-codemirror-lite'
import 'codemirror/mode/shell/shell.js'
import adminApi from '@/api/admin'
import moment from 'moment'
import { datetimeFormat } from '@/utils/datetime'
export default {
name: 'RuntimeLogs',
components: {
@ -90,7 +90,7 @@ export default {
var downloadElement = document.createElement('a')
var href = window.URL.createObjectURL(blob)
downloadElement.href = href
downloadElement.download = 'halo-log-' + moment(new Date(), 'YYYY-MM-DD-HH-mm-ss') + '.log'
downloadElement.download = 'halo-log-' + datetimeFormat(new Date(), 'YYYY-MM-DD-HH-mm-ss') + '.log'
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement)

View File

@ -1,5 +1,4 @@
const path = require('path')
const webpack = require('webpack')
function resolve(dir) {
return path.join(__dirname, dir)
@ -8,11 +7,6 @@ function resolve(dir) {
// vue.config.js
module.exports = {
publicPath: process.env.PUBLIC_PATH,
configureWebpack: {
plugins: [
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
]
},
chainWebpack: (config) => {
config.resolve.alias