From d0518bce5b1e5fc07c4458ef2cc13110e0357a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:14:26 +0800 Subject: [PATCH 01/10] perf[Mock]: set responseFake to mock-server.js https://github.com/PanJiaChen/vue-element-admin/pull/2966 --- mock/index.js | 16 +--------------- mock/mock-server.js | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/mock/index.js b/mock/index.js index 90e2ffe..aca99f4 100644 --- a/mock/index.js +++ b/mock/index.js @@ -50,18 +50,4 @@ export function mockXHR() { } } -// for mock server -const responseFake = (url, type, respond) => { - return { - url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), - type: type || 'get', - response(req, res) { - console.log('request invoke:' + req.path) - res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) - } - } -} - -export default mocks.map(route => { - return responseFake(route.url, route.type, route.response) -}) +export default mocks diff --git a/mock/mock-server.js b/mock/mock-server.js index 4c4cb2a..806fdac 100644 --- a/mock/mock-server.js +++ b/mock/mock-server.js @@ -2,17 +2,21 @@ const chokidar = require('chokidar') const bodyParser = require('body-parser') const chalk = require('chalk') const path = require('path') +const Mock = require('mockjs') const mockDir = path.join(process.cwd(), 'mock') function registerRoutes(app) { let mockLastIndex const { default: mocks } = require('./index.js') - for (const mock of mocks) { + const mocksForServer = mocks.map(route => { + return responseFake(route.url, route.type, route.response) + }) + for (const mock of mocksForServer) { app[mock.type](mock.url, mock.response) mockLastIndex = app._router.stack.length } - const mockRoutesLength = Object.keys(mocks).length + const mockRoutesLength = Object.keys(mocksForServer).length return { mockRoutesLength: mockRoutesLength, mockStartIndex: mockLastIndex - mockRoutesLength @@ -27,6 +31,18 @@ function unregisterRoutes() { }) } +// for mock server +const responseFake = (url, type, respond) => { + return { + url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), + type: type || 'get', + response(req, res) { + console.log('request invoke:' + req.path) + res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) + } + } +} + module.exports = app => { // es6 polyfill require('@babel/register') From 4502d3ebc728c267cf1d4f3e0d22585204d136c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:15:31 +0800 Subject: [PATCH 02/10] perf: remove script-loader --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 4e6dc90..3357093 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,6 @@ "runjs": "^4.3.2", "sass-loader": "^7.1.0", "script-ext-html-webpack-plugin": "2.1.3", - "script-loader": "0.7.2", "serve-static": "^1.13.2", "svg-sprite-loader": "4.1.3", "svgo": "1.2.2", From 97290e6f49eba1b4c1ede14a2d8c70fb5f363386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:19:22 +0800 Subject: [PATCH 03/10] fix:fixed parseTime bug in ie and safari https://github.com/PanJiaChen/vue-element-admin/commit/776f10e19720039d39593064663b618fbdb0e837 --- src/utils/index.js | 12 ++++++++++-- tests/unit/utils/parseTime.spec.js | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/utils/index.js b/src/utils/index.js index 7e3fc1a..61e7704 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -17,9 +17,17 @@ export function parseTime(time, cFormat) { if (typeof time === 'object') { date = time } else { - if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { - time = parseInt(time) + if ((typeof time === 'string')) { + if ((/^[0-9]+$/.test(time))) { + // support "1548221490638" + time = parseInt(time) + } else { + // support safari + // https://stackoverflow.com/questions/4310953/invalid-date-in-safari + time = time.replace(new RegExp(/-/gm), '/') + } } + if ((typeof time === 'number') && (time.toString().length === 10)) { time = time * 1000 } diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js index 41d1b02..d1ac0d8 100644 --- a/tests/unit/utils/parseTime.spec.js +++ b/tests/unit/utils/parseTime.spec.js @@ -5,6 +5,9 @@ describe('Utils:parseTime', () => { it('timestamp', () => { expect(parseTime(d)).toBe('2018-07-13 17:54:01') }) + it('timestamp string', () => { + expect(parseTime((d + ''))).toBe('2018-07-13 17:54:01') + }) it('ten digits timestamp', () => { expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01') }) From fc7c3f1da492b10501dc1eec823eb4741ba63e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:21:19 +0800 Subject: [PATCH 04/10] docs: add smallsticker --- README-zh.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README-zh.md b/README-zh.md index d248632..5b6f7bd 100644 --- a/README-zh.md +++ b/README-zh.md @@ -79,6 +79,10 @@ npm run lint -- --fix 更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/) +## 购买贴纸 + +你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。 + ## Demo ![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif) From ad02035220d462b26005ea280b122a90a86d47ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:22:05 +0800 Subject: [PATCH 05/10] fix: svg support old broswer https://github.com/PanJiaChen/vue-element-admin/commit/6eccffeb2f9037e873591944e119d0246139ffc7 --- src/components/SvgIcon/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue index 9a3318e..b07ded2 100644 --- a/src/components/SvgIcon/index.vue +++ b/src/components/SvgIcon/index.vue @@ -1,7 +1,7 @@ From 00c68bc5cd80953a72e833bac228d227bdb67ffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:22:40 +0800 Subject: [PATCH 06/10] fix: use vue-cli default source-map https://github.com/PanJiaChen/vue-element-admin/commit/d4405464ceb53513bff7ec6caf07113623e95383 --- vue.config.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/vue.config.js b/vue.config.js index f52964a..1d4713f 100644 --- a/vue.config.js +++ b/vue.config.js @@ -80,12 +80,6 @@ module.exports = { }) .end() - config - // https://webpack.js.org/configuration/devtool/#development - .when(process.env.NODE_ENV === 'development', - config => config.devtool('cheap-source-map') - ) - config .when(process.env.NODE_ENV !== 'development', config => { From aff349a86361efabec4cd705321889dc37e274e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:24:14 +0800 Subject: [PATCH 07/10] fix: compatibility with vetur https://github.com/PanJiaChen/vue-element-admin/commit/fc26c3106fefda7ff80afdc8bcad06f0b1ef2909 --- src/layout/components/Sidebar/Link.vue | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue index eb4dd10..530b3d5 100644 --- a/src/layout/components/Sidebar/Link.vue +++ b/src/layout/components/Sidebar/Link.vue @@ -1,7 +1,5 @@ - @@ -16,19 +14,28 @@ export default { required: true } }, + computed: { + isExternal() { + return isExternal(this.to) + }, + type() { + if (this.isExternal) { + return 'a' + } + return 'router-link' + } + }, methods: { - linkProps(url) { - if (isExternal(url)) { + linkProps(to) { + if (this.isExternal) { return { - is: 'a', - href: url, + href: to, target: '_blank', rel: 'noopener' } } return { - is: 'router-link', - to: url + to: to } } } From 4a822b95d66e0ef6a6754c997e798d3fae6a9ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E5=98=89=E6=99=A8?= Date: Thu, 4 Jun 2020 21:26:13 +0800 Subject: [PATCH 08/10] fix[parseTime]: fixed when pass null https://github.com/PanJiaChen/vue-element-admin/commit/5890499077589db1c04c7a72c4dacaa97a58f87c --- src/utils/index.js | 2 +- tests/unit/utils/parseTime.spec.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils/index.js b/src/utils/index.js index 61e7704..37ae434 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -9,7 +9,7 @@ * @returns {string | null} */ export function parseTime(time, cFormat) { - if (arguments.length === 0) { + if (arguments.length === 0 || !time) { return null } const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' diff --git a/tests/unit/utils/parseTime.spec.js b/tests/unit/utils/parseTime.spec.js index d1ac0d8..56045af 100644 --- a/tests/unit/utils/parseTime.spec.js +++ b/tests/unit/utils/parseTime.spec.js @@ -28,4 +28,8 @@ describe('Utils:parseTime', () => { it('empty argument', () => { expect(parseTime()).toBeNull() }) + + it('null', () => { + expect(parseTime(null)).toBeNull() + }) }) From e1c24e7e85ffa17e020693c3b0ea77204c7bf532 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Tue, 9 Jun 2020 16:00:51 +0800 Subject: [PATCH 09/10] chore: chore: change node-sass to dart-sass --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3357093..3aaabe1 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,8 @@ "eslint-plugin-vue": "5.2.2", "html-webpack-plugin": "3.2.0", "mockjs": "1.0.1-beta3", - "node-sass": "^4.9.0", "runjs": "^4.3.2", + "sass": "^1.26.8", "sass-loader": "^7.1.0", "script-ext-html-webpack-plugin": "2.1.3", "serve-static": "^1.13.2", From 8f2c04e60cfd19465e5a24a7de8dbbacce151f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=B1=E8=A3=A4=E8=A1=A9?= Date: Tue, 9 Jun 2020 16:01:17 +0800 Subject: [PATCH 10/10] [release] 4.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3aaabe1..6f5189d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue-admin-template", - "version": "4.2.1", + "version": "4.3.0", "description": "A vue admin template with Element UI & axios & iconfont & permission control & lint", "author": "Pan ", "license": "MIT",