From 92bc32f8190054816e1570dec12fc0e174da3ef4 Mon Sep 17 00:00:00 2001 From: liyang <1711467488@qq.com> Date: Sat, 6 Apr 2019 18:25:40 +0800 Subject: [PATCH] =?UTF-8?q?dayjs=20=E8=BF=87=E6=BB=A4=E5=99=A8=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=E5=88=B0=20packages=20=E6=96=87=E4=BB=B6=E4=BB=B6?= =?UTF-8?q?=E5=86=85=EF=BC=8C=E4=BF=9D=E6=8C=81=E5=8D=95=E7=8B=AC=E5=8F=91?= =?UTF-8?q?=E5=B8=83=EF=BC=8C=E4=BD=86=E6=98=AF=E6=94=B9=E5=8F=98=E5=8C=85?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Former-commit-id: 8edae44b33f18375c30f4da997e379135f9b852e [formerly 8edae44b33f18375c30f4da997e379135f9b852e [formerly 8edae44b33f18375c30f4da997e379135f9b852e [formerly 8edae44b33f18375c30f4da997e379135f9b852e [formerly a7623919d3baa987461b56a6b602c3967815c876 [formerly ad295a79a720c7dc124c6ad5b6d0004e3ad9dc02]]]]] Former-commit-id: e89a5be7f8ff9fa1c079e16f543dc5e87f884f4c Former-commit-id: cf6b44d1f2ca78cde4ec4de1e5f1309eb4c8c7b4 Former-commit-id: 832c549904c0ee4957b18e965793a6797c08b6bf [formerly 259b681de4c28f48656ec65adba0216b8a8a06dd] Former-commit-id: e097b8dfe785f08ae133b9bda63e080e18baf887 Former-commit-id: a2bdb2a55fead0e81dedb31b8145f65b246cd29e Former-commit-id: a6a3d0d9b7ab436a01d89b5bf255d12babb8be61 Former-commit-id: 564403ed9b8fbada916c0b21684268740912270b Former-commit-id: 351f7454b858df065d947dab7f5bf26f619c11dd --- package-lock.json.REMOVED.git-id | 2 +- package.json | 2 +- packages/filters-date/package-lock.json | 13 ++++ packages/filters-date/package.json | 12 ++++ packages/filters-date/src/filters.js | 86 +++++++++++++++++++++++++ packages/filters-date/src/index.js | 15 +++++ src/main.js | 4 +- 7 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 packages/filters-date/package-lock.json create mode 100644 packages/filters-date/package.json create mode 100644 packages/filters-date/src/filters.js create mode 100644 packages/filters-date/src/index.js diff --git a/package-lock.json.REMOVED.git-id b/package-lock.json.REMOVED.git-id index 9005df8e..695b49a8 100644 --- a/package-lock.json.REMOVED.git-id +++ b/package-lock.json.REMOVED.git-id @@ -1 +1 @@ -43c1678132bcf45bc978f14f60cb37c6e7d7888d \ No newline at end of file +960de087bff8ff9a89ede0b1f2ecec67b2c39257 \ No newline at end of file diff --git a/package.json b/package.json index e31b5706..e278c0ba 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@babel/runtime": "^7.2.0", + "@d2-admin/filters-dayjs": "^1.0.1", "@d2-projects/d2-crud": "^2.0.3", - "@d2-projects/vue-filters-date": "^1.0.2", "@d2-projects/vue-table-export": "^1.0.1", "@d2-projects/vue-table-import": "^1.0.0", "axios": "^0.17.1", diff --git a/packages/filters-date/package-lock.json b/packages/filters-date/package-lock.json new file mode 100644 index 00000000..9e4ec42d --- /dev/null +++ b/packages/filters-date/package-lock.json @@ -0,0 +1,13 @@ +{ + "name": "@d2-admin/filters-dayjs", + "version": "1.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "dayjs": { + "version": "1.8.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.12.tgz", + "integrity": "sha512-7keChCzzjU68sYJpk7kEI1Q9qbJyscyiW0STwEhqDFt+2js9pA/BSzmYE4PRxcMMoUMxNeY0TEMZHqV/JBR4OA==" + } + } +} diff --git a/packages/filters-date/package.json b/packages/filters-date/package.json new file mode 100644 index 00000000..57baf61e --- /dev/null +++ b/packages/filters-date/package.json @@ -0,0 +1,12 @@ +{ + "name": "@d2-admin/filters-dayjs", + "version": "1.0.1", + "description": "dayjs to vue filters", + "main": "src/index.js", + "scripts": {}, + "author": "", + "license": "ISC", + "dependencies": { + "dayjs": "^1.8.12" + } +} diff --git a/packages/filters-date/src/filters.js b/packages/filters-date/src/filters.js new file mode 100644 index 00000000..50e7d1c3 --- /dev/null +++ b/packages/filters-date/src/filters.js @@ -0,0 +1,86 @@ +// 日期时间相关 filter +// https://github.com/iamkun/dayjs/blob/master/docs/zh-cn/API-reference.md + +import dayjs from 'dayjs' + +// 对象代理 +const P = Day => { + return new Proxy(Day, { + get (target, key) { + if (dayjs.isDayjs(target)) { + // 是 Dayjs 对象,正常返回 + return target[key] + } else { + // 不是 Dayjs 对象 + if (dayjs(target).isValid()) { + // 尝试帮用户解析成 Dayjs 对象 + return dayjs(target)[key] + } else { + // 无法解析 + return function () { + return '无效日期' + } + } + } + }, + set (target, key, value) { + target[key] = value + } + }) +} + +export default { + // ---------- [ dayjs 解析 ] ---------- + // 时间字符串 | Date 对象 | Unix 时间戳 (毫秒) + day: value => dayjs(value), + // Unix 时间戳 (秒) + date_unix: value => dayjs.unix(value), + // ---------- [ 获取 ] ---------- + date_year: Day => P(Day).year(), + date_month: Day => P(Day).month(), + date_date: Day => P(Day).date(), + date_day: Day => P(Day).day(), + date_hour: Day => P(Day).hour(), + date_minute: Day => P(Day).minute(), + date_second: Day => P(Day).second(), + date_millisecond: Day => P(Day).millisecond(), + // ---------- [ 设置 ] ---------- + // date | day | month | year | hour | minute | second | millisecond + // 对大小写不敏感 + date_set: (Day, unit, value) => P(Day).set(unit, value), + // ---------- [ 操作 ] ---------- + // 增加 + date_add: (Day, value, unit) => P(Day).add(value, unit), + // 减少 + date_subtract: (Day, value, unit) => P(Day).subtract(value, unit), + // 开头时间 + date_startof: (Day, unit) => P(Day).startOf(unit), + // 末尾时间 + date_endof: (Day, unit) => P(Day).endOf(unit), + // ---------- [ 显示 ] ---------- + // 格式化 + date_format: (Day, setting = 'YYYY-MM-DD HH:mm:ss') => P(Day).format(setting), + // 时间差 + date_diff: (Day, Day2 = '', unit = 'millisecond', accurate = false) => P(Day).diff(dayjs(Day2), unit, accurate), + // Unix 时间戳 (毫秒) + date_value_millisecond: Day => P(Day).valueOf(), + // Unix 时间戳 (秒) + date_value_second: Day => P(Day).unix(), + // 月份的天数 + date_days_in_month: Day => P(Day).daysInMonth(), + // Date 对象 + date_to_date: Day => P(Day).toDate(), + // JSON + date_to_json: Day => P(Day).toJSON(), + // ISO8601 格式 + date_to_iso: Day => P(Day).toISOString(), + // 字符 + date_to_string: Day => P(Day).toString(), + // ---------- [ 查询 ] ---------- + // 是否之前 + date_is_before: (Day, Day2, unit = 'millisecond') => P(Day).isBefore(dayjs(Day2), unit), + // 是否之后 + date_is_after: (Day, Day2, unit = 'millisecond') => P(Day).isAfter(dayjs(Day2), unit), + // 是否相同 + date_is_same: (Day, Day2, unit = 'millisecond') => P(Day).isSame(dayjs(Day2), unit) +} diff --git a/packages/filters-date/src/index.js b/packages/filters-date/src/index.js new file mode 100644 index 00000000..9ce24973 --- /dev/null +++ b/packages/filters-date/src/index.js @@ -0,0 +1,15 @@ +import filters from './filters' + +const vueFiltersDate = { + install: function (Vue, options) { + Object.keys(filters).forEach(name => { + Vue.filter(name, filters[name]) + }) + } +} + +if (typeof window !== 'undefined' && window.Vue) { + window.Vue.use(vueFiltersDate) +} + +export default vueFiltersDate diff --git a/src/main.js b/src/main.js index 088a81e0..bfc59bac 100644 --- a/src/main.js +++ b/src/main.js @@ -27,7 +27,7 @@ import VueUeditorWrap from 'vue-ueditor-wrap' import pluginExport from '@d2-projects/vue-table-export' import pluginImport from '@d2-projects/vue-table-import' // [ 可选过滤器 ] 日期相关过滤器 -import d2VueFiltersDate from '@d2-projects/vue-filters-date' +import d2VueFiltersDayjs from '@d2-admin/filters-dayjs' // 菜单和路由设置 import router from './router' @@ -44,7 +44,7 @@ Vue.use(contentmenu) Vue.use(vueJsonTreeView) Vue.use(pluginExport) Vue.use(pluginImport) -Vue.use(d2VueFiltersDate) +Vue.use(d2VueFiltersDayjs) Vue.component('d2-grid-layout', GridLayout) Vue.component('d2-grid-item', GridItem) Vue.component('SplitPane', SplitPane)