diff --git a/dependencies-cdn.js b/dependencies-cdn.js index 997d8046..30a0df8a 100644 --- a/dependencies-cdn.js +++ b/dependencies-cdn.js @@ -17,5 +17,6 @@ module.exports = [ { name: 'qs', library: 'Qs', js: 'https://cdn.jsdelivr.net/npm/qs@6.9.1/dist/qs.js', css: '' }, { name: 'lowdb', library: 'low', js: 'https://cdn.jsdelivr.net/npm/lowdb@1.0.0/dist/low.min.js', css: '' }, { name: 'lowdb/adapters/LocalStorage', library: 'LocalStorage', js: 'https://cdn.jsdelivr.net/npm/lowdb@1.0.0/dist/LocalStorage.min.js', css: '' }, - { name: 'screenfull', library: 'screenfull', js: 'https://cdn.jsdelivr.net/npm/screenfull@5.0.0/dist/screenfull.min.js', css: '' } + { name: 'screenfull', library: 'screenfull', js: 'https://cdn.jsdelivr.net/npm/screenfull@5.0.0/dist/screenfull.min.js', css: '' }, + { name: 'sortablejs', library: 'Sortable', js: 'https://cdn.jsdelivr.net/npm/sortablejs@1.10.1/Sortable.min.js', css: '' }, ] diff --git a/package-lock.json b/package-lock.json index 2b7a46d0..8c2ab9b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14603,6 +14603,11 @@ "is-plain-obj": "^1.0.0" } }, + "sortablejs": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.1.tgz", + "integrity": "sha512-N6r7GrVmO8RW1rn0cTdvK3JR0BcqecAJ0PmYMCL3ZuqTH3pY+9QyqkmJSkkLyyDvd+AJnwaxTP22Ybr/83V9hQ==" + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", diff --git a/package.json b/package.json index db1af8d9..85d3e3a9 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "quill": "^1.3.6", "screenfull": "^5.0.0", "simplemde": "^1.11.2", + "sortablejs": "^1.10.1", "ua-parser-js": "^0.7.20", "v-charts": "^1.19.0", "v-contextmenu": "^2.9.0", diff --git a/src/layout/header-aside/components/tabs/index.vue b/src/layout/header-aside/components/tabs/index.vue index 2dd7ca8e..1f186284 100644 --- a/src/layout/header-aside/components/tabs/index.vue +++ b/src/layout/header-aside/components/tabs/index.vue @@ -11,7 +11,7 @@ @rowClick="contextmenuClick"/> import { mapState, mapActions } from 'vuex' +import Sortable from 'sortablejs' export default { components: { D2Contextmenu: () => import('../contextmenu'), @@ -94,7 +95,8 @@ export default { 'closeLeft', 'closeRight', 'closeOther', - 'closeAll' + 'closeAll', + 'openedSort' ]), /** * @description 右键菜单功能点击 @@ -172,6 +174,15 @@ export default { }) } } + }, + mounted () { + const el = document.querySelectorAll('.d2-multiple-page-sort .el-tabs__nav')[0] + Sortable.create(el, { + onEnd: (evt) => { + const { oldIndex, newIndex } = evt + this.openedSort({ oldIndex, newIndex }) + } + }) } } diff --git a/src/layout/header-aside/layout.vue b/src/layout/header-aside/layout.vue index a1f0d8ab..67082428 100644 --- a/src/layout/header-aside/layout.vue +++ b/src/layout/header-aside/layout.vue @@ -15,10 +15,10 @@ }" flex-box="0" flex> -
+ -
+
diff --git a/src/router/index.js b/src/router/index.js index 034351d3..50da5de0 100755 --- a/src/router/index.js +++ b/src/router/index.js @@ -14,11 +14,11 @@ import routes from './routes' // fix vue-router NavigationDuplicated const VueRouterPush = VueRouter.prototype.push VueRouter.prototype.push = function push (location) { - return VueRouterPush.call(this, location) + return VueRouterPush.call(this, location).catch(err => err) } const VueRouterReplace = VueRouter.prototype.replace VueRouter.prototype.replace = function replace (location) { - return VueRouterReplace.call(this, location) + return VueRouterReplace.call(this, location).catch(err => err) } Vue.use(VueRouter) diff --git a/src/router/routes.js b/src/router/routes.js index a6b4b023..2adac7e8 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -26,6 +26,7 @@ const frameIn = [ path: 'index', name: 'index', meta: { + title: '首页', auth: true }, component: _import('system/index') diff --git a/src/store/modules/d2admin/modules/page.js b/src/store/modules/d2admin/modules/page.js index 2773390b..5022f593 100644 --- a/src/store/modules/d2admin/modules/page.js +++ b/src/store/modules/d2admin/modules/page.js @@ -113,6 +113,24 @@ export default { resolve() }) }, + /** + * @class opened + * @description 重排页面列表上的某一项 + * @param {Object} context + * @param {Object} payload { oldIndex, newIndex } 位置信息 + */ + openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) { + return new Promise(async resolve => { + // 重排页面列表某一项 + let page = state.opened[oldIndex] + state.opened.splice(oldIndex, 1) + state.opened.splice(newIndex, 0, page) + // 持久化 + await dispatch('opened2db') + // end + resolve() + }) + }, /** * @class opened * @description 新增一个 tag (打开一个页面)