From 98eaba77dfe79c273e72bc0ab5b15654b53de614 Mon Sep 17 00:00:00 2001 From: FairyEver <1711467488@qq.com> Date: Wed, 22 Apr 2020 11:03:48 +0800 Subject: [PATCH] =?UTF-8?q?style:=20=E7=A7=BB=E9=99=A4=20store=20=E4=B8=AD?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E7=9A=84=20Promise=20=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=20=E5=A2=9E=E5=BC=BA=E9=83=A8=E5=88=86=E5=81=A5?= =?UTF-8?q?=E5=A3=AE=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/components.markdown.js | 2 +- src/api/demo.business.table.1.js | 2 +- src/api/demo.plugins.mocks.ajax.js | 2 +- src/api/sys.login.js | 2 +- src/components/d2-markdown/index.vue | 4 +- src/store/modules/d2admin/modules/account.js | 90 ++-- src/store/modules/d2admin/modules/color.js | 73 ++- .../modules/d2admin/modules/fullscreen.js | 18 +- src/store/modules/d2admin/modules/menu.js | 68 ++- src/store/modules/d2admin/modules/page.js | 414 ++++++++---------- src/store/modules/d2admin/modules/size.js | 56 +-- src/store/modules/d2admin/modules/theme.js | 78 ++-- .../modules/d2admin/modules/transition.js | 44 +- src/store/modules/d2admin/modules/user.js | 44 +- src/views/demo/business/table/1/index.vue | 4 +- src/views/demo/d2-crud/demo29/code.js | 4 +- src/views/demo/d2-crud/demo29/index.vue | 4 +- src/views/demo/plugins/mock/ajax.vue | 4 +- 18 files changed, 382 insertions(+), 531 deletions(-) diff --git a/src/api/components.markdown.js b/src/api/components.markdown.js index 8769a0b0..338a1e22 100644 --- a/src/api/components.markdown.js +++ b/src/api/components.markdown.js @@ -1,6 +1,6 @@ import request from '@/plugin/axios' -export function ComponentsMarkdownBase (url) { +export function componentsMarkdownBase (url) { return request({ baseURL: process.env.BASE_URL, url, diff --git a/src/api/demo.business.table.1.js b/src/api/demo.business.table.1.js index 3c1b94af..0e47dbca 100644 --- a/src/api/demo.business.table.1.js +++ b/src/api/demo.business.table.1.js @@ -1,6 +1,6 @@ import request from '@/plugin/axios' -export function BusinessTable1List (params) { +export function businessTable1List (params) { return request({ url: '/demo/business/table/1/fetch', method: 'get', diff --git a/src/api/demo.plugins.mocks.ajax.js b/src/api/demo.plugins.mocks.ajax.js index a7ec00cc..3e98ed94 100644 --- a/src/api/demo.plugins.mocks.ajax.js +++ b/src/api/demo.plugins.mocks.ajax.js @@ -1,6 +1,6 @@ import request from '@/plugin/axios' -export function PluginMocksAjax () { +export function pluginMocksAjax () { return request({ url: '/demo/plugins/mock/ajax', method: 'get' diff --git a/src/api/sys.login.js b/src/api/sys.login.js index 882292e3..5ce25638 100644 --- a/src/api/sys.login.js +++ b/src/api/sys.login.js @@ -1,6 +1,6 @@ import request from '@/plugin/axios' -export function AccountLogin (data) { +export function accountLogin (data) { return request({ url: '/login', method: 'post', diff --git a/src/components/d2-markdown/index.vue b/src/components/d2-markdown/index.vue index 109d522e..2fc0f672 100644 --- a/src/components/d2-markdown/index.vue +++ b/src/components/d2-markdown/index.vue @@ -12,7 +12,7 @@ import marked from 'marked' import highlight from 'highlight.js' import bandupan from './plugin/baidupan' import 'github-markdown-css' -import { ComponentsMarkdownBase } from '@api/components.markdown' +import { componentsMarkdownBase } from '@api/components.markdown' export default { name: 'd2-markdown', props: { @@ -64,7 +64,7 @@ export default { }, // 从 url 加载原始数据 async getReadme (url) { - const data = await ComponentsMarkdownBase(url) + const data = await componentsMarkdownBase(url) return this.marked(data) }, marked (data) { diff --git a/src/store/modules/d2admin/modules/account.js b/src/store/modules/d2admin/modules/account.js index 7cef316c..4e5d3e59 100644 --- a/src/store/modules/d2admin/modules/account.js +++ b/src/store/modules/d2admin/modules/account.js @@ -1,7 +1,7 @@ import { Message, MessageBox } from 'element-ui' import util from '@/libs/util.js' import router from '@/router' -import { AccountLogin } from '@api/sys.login' +import { accountLogin } from '@api/sys.login' export default { namespaced: true, @@ -13,38 +13,22 @@ export default { * @param {Object} payload password {String} 密码 * @param {Object} payload route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式 */ - login ({ dispatch }, { + async login ({ dispatch }, { username = '', password = '' } = {}) { - return new Promise((resolve, reject) => { - // 开始请求登录接口 - AccountLogin({ - username, - password - }) - .then(async res => { - // 设置 cookie 一定要存 uuid 和 token 两个 cookie - // 整个系统依赖这两个数据进行校验和存储 - // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 - // token 代表用户当前登录状态 建议在网络请求中携带 token - // 如有必要 token 需要定时更新,默认保存一天 - util.cookies.set('uuid', res.uuid) - util.cookies.set('token', res.token) - // 设置 vuex 用户信息 - await dispatch('d2admin/user/set', { - name: res.name - }, { root: true }) - // 用户登录后从持久化数据加载一系列的设置 - await dispatch('load') - // 结束 - resolve() - }) - .catch(err => { - console.log('err: ', err) - reject(err) - }) - }) + const res = await accountLogin({ username, password }) + // 设置 cookie 一定要存 uuid 和 token 两个 cookie + // 整个系统依赖这两个数据进行校验和存储 + // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 + // token 代表用户当前登录状态 建议在网络请求中携带 token + // 如有必要 token 需要定时更新,默认保存一天 + util.cookies.set('uuid', res.uuid) + util.cookies.set('token', res.token) + // 设置 vuex 用户信息 + await dispatch('d2admin/user/set', { name: res.name }, { root: true }) + // 用户登录后从持久化数据加载一系列的设置 + await dispatch('load') }, /** * @description 注销用户并返回登录页面 @@ -62,25 +46,19 @@ export default { // 清空 vuex 用户信息 await dispatch('d2admin/user/set', {}, { root: true }) // 跳转路由 - router.push({ - name: 'login' - }) + router.push({ name: 'login' }) } // 判断是否需要确认 if (confirm) { commit('d2admin/gray/set', true, { root: true }) - MessageBox.confirm('确定要注销当前用户吗', '注销用户', { - type: 'warning' - }) + MessageBox.confirm('确定要注销当前用户吗', '注销用户', { type: 'warning' }) .then(() => { commit('d2admin/gray/set', false, { root: true }) logout() }) .catch(() => { commit('d2admin/gray/set', false, { root: true }) - Message({ - message: '取消注销操作' - }) + Message({ message: '取消注销操作' }) }) } else { logout() @@ -90,25 +68,21 @@ export default { * @description 用户登录后从持久化数据加载一系列的设置 * @param {Object} context */ - load ({ dispatch }) { - return new Promise(async resolve => { - // DB -> store 加载用户名 - await dispatch('d2admin/user/load', null, { root: true }) - // DB -> store 加载主题 - await dispatch('d2admin/theme/load', null, { root: true }) - // DB -> store 加载页面过渡效果设置 - await dispatch('d2admin/transition/load', null, { root: true }) - // DB -> store 持久化数据加载上次退出时的多页列表 - await dispatch('d2admin/page/openedLoad', null, { root: true }) - // DB -> store 持久化数据加载侧边栏折叠状态 - await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) - // DB -> store 持久化数据加载全局尺寸 - await dispatch('d2admin/size/load', null, { root: true }) - // DB -> store 持久化数据加载颜色设置 - await dispatch('d2admin/color/load', null, { root: true }) - // end - resolve() - }) + async load ({ dispatch }) { + // 加载用户名 + await dispatch('d2admin/user/load', null, { root: true }) + // 加载主题 + await dispatch('d2admin/theme/load', null, { root: true }) + // 加载页面过渡效果设置 + await dispatch('d2admin/transition/load', null, { root: true }) + // 持久化数据加载上次退出时的多页列表 + await dispatch('d2admin/page/openedLoad', null, { root: true }) + // 持久化数据加载侧边栏折叠状态 + await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) + // 持久化数据加载全局尺寸 + await dispatch('d2admin/size/load', null, { root: true }) + // 持久化数据加载颜色设置 + await dispatch('d2admin/color/load', null, { root: true }) } } } diff --git a/src/store/modules/d2admin/modules/color.js b/src/store/modules/d2admin/modules/color.js index 0b22cbad..a217e81d 100644 --- a/src/store/modules/d2admin/modules/color.js +++ b/src/store/modules/d2admin/modules/color.js @@ -1,3 +1,4 @@ +import { cloneDeep } from 'lodash' import client from 'webpack-theme-color-replacer/client' import forElementUI from 'webpack-theme-color-replacer/forElementUI' @@ -13,50 +14,42 @@ export default { * @param {Object} context * @param {String} color 尺寸 */ - set ({ state, dispatch, commit }, color) { - return new Promise(async resolve => { - // 记录上个值 - const old = state.value - // store 赋值 - state.value = color || process.env.VUE_APP_ELEMENT_COLOR - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'color.value', - value: state.value, - user: true - }, { root: true }) - // 应用 - commit('apply', { - oldColor: old, - newColor: state.value - }) - // end - resolve() + async set ({ state, dispatch, commit }, color) { + // 记录上个值 + const old = state.value + // store 赋值 + state.value = color || process.env.VUE_APP_ELEMENT_COLOR + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'color.value', + value: state.value, + user: true + }, { root: true }) + // 应用 + commit('apply', { + oldColor: old, + newColor: state.value }) }, /** * @description 从持久化数据读取颜色设置 * @param {Object} context */ - load ({ state, dispatch, commit }) { - return new Promise(async resolve => { - // 记录上个值 - const old = state.value - // store 赋值 - state.value = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'color.value', - defaultValue: process.env.VUE_APP_ELEMENT_COLOR, - user: true - }, { root: true }) - // 应用 - commit('apply', { - oldColor: old, - newColor: state.value - }) - // end - resolve() + async load ({ state, dispatch, commit }) { + // 记录上个值 + const old = state.value + // store 赋值 + state.value = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'color.value', + defaultValue: process.env.VUE_APP_ELEMENT_COLOR, + user: true + }, { root: true }) + // 应用 + commit('apply', { + oldColor: old, + newColor: state.value }) } }, @@ -69,8 +62,8 @@ export default { */ apply (state, { oldColor, newColor }) { var options = { - oldColors: [...forElementUI.getElementUISeries(oldColor)], - newColors: [...forElementUI.getElementUISeries(newColor)] + oldColors: cloneDeep(forElementUI.getElementUISeries(oldColor)), + newColors: cloneDeep(forElementUI.getElementUISeries(newColor)) } client.changer.changeColor(options) } diff --git a/src/store/modules/d2admin/modules/fullscreen.js b/src/store/modules/d2admin/modules/fullscreen.js index bfa8ceb0..da3391bf 100644 --- a/src/store/modules/d2admin/modules/fullscreen.js +++ b/src/store/modules/d2admin/modules/fullscreen.js @@ -23,17 +23,13 @@ export default { * @param {Object} context */ toggle ({ commit }) { - return new Promise(resolve => { - if (screenfull.isFullscreen) { - screenfull.exit() - commit('set', false) - } else { - screenfull.request() - commit('set', true) - } - // end - resolve() - }) + if (screenfull.isFullscreen) { + screenfull.exit() + commit('set', false) + } else { + screenfull.request() + commit('set', true) + } } }, mutations: { diff --git a/src/store/modules/d2admin/modules/menu.js b/src/store/modules/d2admin/modules/menu.js index 8c967561..d2337080 100644 --- a/src/store/modules/d2admin/modules/menu.js +++ b/src/store/modules/d2admin/modules/menu.js @@ -17,56 +17,44 @@ export default { * @param {Object} context * @param {Boolean} collapse is collapse */ - asideCollapseSet ({ state, dispatch }, collapse) { - return new Promise(async resolve => { - // store 赋值 - state.asideCollapse = collapse - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'menu.asideCollapse', - value: state.asideCollapse, - user: true - }, { root: true }) - // end - resolve() - }) + async asideCollapseSet ({ state, dispatch }, collapse) { + // store 赋值 + state.asideCollapse = collapse + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'menu.asideCollapse', + value: state.asideCollapse, + user: true + }, { root: true }) }, /** * 切换侧边栏展开和收缩 * @param {Object} context */ - asideCollapseToggle ({ state, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - state.asideCollapse = !state.asideCollapse - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'menu.asideCollapse', - value: state.asideCollapse, - user: true - }, { root: true }) - // end - resolve() - }) + async asideCollapseToggle ({ state, dispatch }) { + // store 赋值 + state.asideCollapse = !state.asideCollapse + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'menu.asideCollapse', + value: state.asideCollapse, + user: true + }, { root: true }) }, /** * 从持久化数据读取侧边栏展开或者收缩 * @param {Object} context */ - asideCollapseLoad ({ state, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - state.asideCollapse = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'menu.asideCollapse', - defaultValue: setting.menu.asideCollapse, - user: true - }, { root: true }) - // end - resolve() - }) + async asideCollapseLoad ({ state, dispatch }) { + // store 赋值 + state.asideCollapse = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'menu.asideCollapse', + defaultValue: setting.menu.asideCollapse, + user: true + }, { root: true }) } }, mutations: { diff --git a/src/store/modules/d2admin/modules/page.js b/src/store/modules/d2admin/modules/page.js index 70bc0da0..10b6aaa6 100644 --- a/src/store/modules/d2admin/modules/page.js +++ b/src/store/modules/d2admin/modules/page.js @@ -11,7 +11,7 @@ export default { // 可以在多页 tab 模式下显示的页面 pool: [], // 当前显示的多页面列表 - opened: setting.page.opened, + opened: get(setting, 'page.opened', []), // 已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 openedLoaded: false, // 当前页面 @@ -28,9 +28,7 @@ export default { if (state.openedLoaded) return Promise.resolve() return new Promise(resolve => { const timer = setInterval(() => { - if (state.openedLoaded) { - resolve(clearInterval(timer)) - } + if (state.openedLoaded) resolve(clearInterval(timer)) }, 10) }) }, @@ -39,22 +37,22 @@ export default { * @description 从持久化数据载入标签页列表 * @param {Object} context */ - openedLoad ({ state, commit, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - const value = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'page.opened', - defaultValue: setting.page.opened, - user: true - }, { root: true }) - // 在处理函数中进行数据优化 过滤掉现在已经失效的页签或者已经改变了信息的页签 - // 以 fullPath 字段为准 - // 如果页面过多的话可能需要优化算法 - // valid 有效列表 1, 1, 0, 1 => 有效, 有效, 失效, 有效 - const valid = [] - // 处理数据 - state.opened = value.map(opened => { + async openedLoad ({ state, commit, dispatch }) { + // store 赋值 + const value = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'page.opened', + defaultValue: setting.page.opened, + user: true + }, { root: true }) + // 在处理函数中进行数据优化 过滤掉现在已经失效的页签或者已经改变了信息的页签 + // 以 fullPath 字段为准 + // 如果页面过多的话可能需要优化算法 + // valid 有效列表 1, 1, 0, 1 => 有效, 有效, 失效, 有效 + const valid = [] + // 处理数据 + state.opened = value + .map(opened => { // 忽略首页 if (opened.fullPath === '/index') { valid.push(1) @@ -67,31 +65,25 @@ export default { // 返回合并后的数据 新的覆盖旧的 // 新的数据中一般不会携带 params 和 query, 所以旧的参数会留存 return Object.assign({}, opened, find) - }).filter((opened, index) => valid[index] === 1) - // 标记已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 - state.openedLoaded = true - // 根据 opened 数据生成缓存设置 - commit('keepAliveRefresh') - // end - resolve() - }) + }) + .filter((opened, index) => valid[index] === 1) + // 标记已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 + state.openedLoaded = true + // 根据 opened 数据生成缓存设置 + commit('keepAliveRefresh') }, /** * 将 opened 属性赋值并持久化 在这之前请先确保已经更新了 state.opened * @param {Object} context */ - opened2db ({ state, dispatch }) { - return new Promise(async resolve => { - // 设置数据 - dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'page.opened', - value: state.opened, - user: true - }, { root: true }) - // end - resolve() - }) + async opened2db ({ state, dispatch }) { + // 设置数据 + dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'page.opened', + value: state.opened, + user: true + }, { root: true }) }, /** * @class opened @@ -99,19 +91,15 @@ export default { * @param {Object} context * @param {Object} payload { index, params, query, fullPath } 路由信息 */ - openedUpdate ({ state, commit, dispatch }, { index, params, query, fullPath }) { - return new Promise(async resolve => { - // 更新页面列表某一项 - let page = state.opened[index] - page.params = params || page.params - page.query = query || page.query - page.fullPath = fullPath || page.fullPath - state.opened.splice(index, 1, page) - // 持久化 - await dispatch('opened2db') - // end - resolve() - }) + async openedUpdate ({ state, commit, dispatch }, { index, params, query, fullPath }) { + // 更新页面列表某一项 + let page = state.opened[index] + page.params = params || page.params + page.query = query || page.query + page.fullPath = fullPath || page.fullPath + state.opened.splice(index, 1, page) + // 持久化 + await dispatch('opened2db') }, /** * @class opened @@ -119,17 +107,13 @@ export default { * @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() - }) + async openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) { + // 重排页面列表某一项 + let page = state.opened[oldIndex] + state.opened.splice(oldIndex, 1) + state.opened.splice(newIndex, 0, page) + // 持久化 + await dispatch('opened2db') }, /** * @class opened @@ -137,24 +121,18 @@ export default { * @param {Object} context * @param {Object} payload new tag info */ - add ({ state, commit, dispatch }, { tag, params, query, fullPath }) { - return new Promise(async resolve => { - // 设置新的 tag 在新打开一个以前没打开过的页面时使用 - let newTag = tag - newTag.params = params || newTag.params - newTag.query = query || newTag.query - newTag.fullPath = fullPath || newTag.fullPath - // 添加进当前显示的页面数组 - state.opened.push(newTag) - // 如果这个页面需要缓存 将其添加到缓存设置 - if (isKeepAlive(newTag)) { - commit('keepAlivePush', tag.name) - } - // 持久化 - await dispatch('opened2db') - // end - resolve() - }) + async add ({ state, commit, dispatch }, { tag, params, query, fullPath }) { + // 设置新的 tag 在新打开一个以前没打开过的页面时使用 + let newTag = tag + newTag.params = params || newTag.params + newTag.query = query || newTag.query + newTag.fullPath = fullPath || newTag.fullPath + // 添加进当前显示的页面数组 + state.opened.push(newTag) + // 如果这个页面需要缓存 将其添加到缓存设置 + if (isKeepAlive(newTag)) commit('keepAlivePush', tag.name) + // 持久化 + await dispatch('opened2db') }, /** * @class current @@ -162,47 +140,41 @@ export default { * @param {Object} context * @param {Object} payload 从路由钩子的 to 对象上获取 { name, params, query, fullPath, meta } 路由信息 */ - open ({ state, commit, dispatch }, { name, params, query, fullPath, meta }) { - return new Promise(async resolve => { - // 已经打开的页面 - let opened = state.opened - // 判断此页面是否已经打开 并且记录位置 - let pageOpendIndex = 0 - const pageOpend = opened.find((page, index) => { - const same = page.fullPath === fullPath - pageOpendIndex = same ? index : pageOpendIndex - return same + async open ({ state, commit, dispatch }, { name, params, query, fullPath, meta }) { + // 已经打开的页面 + let opened = state.opened + // 判断此页面是否已经打开 并且记录位置 + let pageOpendIndex = 0 + const pageOpend = opened.find((page, index) => { + const same = page.fullPath === fullPath + pageOpendIndex = same ? index : pageOpendIndex + return same + }) + if (pageOpend) { + // 页面以前打开过 + await dispatch('openedUpdate', { + index: pageOpendIndex, + params, + query, + fullPath }) - if (pageOpend) { - // 页面以前打开过 - await dispatch('openedUpdate', { - index: pageOpendIndex, + } else { + // 页面以前没有打开过 + let page = state.pool.find(t => t.name === name) + // 如果这里没有找到 page 代表这个路由虽然在框架内 但是不参与标签页显示 + if (page) { + await dispatch('add', { + tag: Object.assign({}, page), params, query, fullPath }) - } else { - // 页面以前没有打开过 - let page = state.pool.find(t => t.name === name) - // 如果这里没有找到 page 代表这个路由虽然在框架内 但是不参与标签页显示 - if (page) { - await dispatch('add', { - tag: Object.assign({}, page), - params, - query, - fullPath - }) - } } - // 如果这个页面需要缓存 将其添加到缓存设置 - if (isKeepAlive({ meta })) { - commit('keepAlivePush', name) - } - // 设置当前的页面 - commit('currentSet', fullPath) - // end - resolve() - }) + } + // 如果这个页面需要缓存 将其添加到缓存设置 + if (isKeepAlive({ meta })) commit('keepAlivePush', name) + // 设置当前的页面 + commit('currentSet', fullPath) }, /** * @class opened @@ -210,49 +182,42 @@ export default { * @param {Object} context * @param {Object} payload { tagName: 要关闭的标签名字 } */ - close ({ state, commit, dispatch }, { tagName }) { - return new Promise(async resolve => { - // 下个新的页面 - let newPage = state.opened[0] - const isCurrent = state.current === tagName - // 如果关闭的页面就是当前显示的页面 - if (isCurrent) { - // 去找一个新的页面 - let len = state.opened.length - for (let i = 1; i < len; i++) { - if (state.opened[i].fullPath === tagName) { - if (i < len - 1) { - newPage = state.opened[i + 1] - } else { - newPage = state.opened[i - 1] - } - break - } + async close ({ state, commit, dispatch }, { tagName }) { + // 下个新的页面 + let newPage = state.opened[0] + const isCurrent = state.current === tagName + // 如果关闭的页面就是当前显示的页面 + if (isCurrent) { + // 去找一个新的页面 + let len = state.opened.length + for (let i = 1; i < len; i++) { + if (state.opened[i].fullPath === tagName) { + if (i < len - 1) newPage = state.opened[i + 1] + else newPage = state.opened[i - 1] + break } } - // 找到这个页面在已经打开的数据里是第几个 - const index = state.opened.findIndex(page => page.fullPath === tagName) - if (index >= 0) { - // 如果这个页面是缓存的页面 将其在缓存设置中删除 - commit('keepAliveRemove', state.opened[index].name) - // 更新数据 删除关闭的页面 - state.opened.splice(index, 1) + } + // 找到这个页面在已经打开的数据里是第几个 + const index = state.opened.findIndex(page => page.fullPath === tagName) + if (index >= 0) { + // 如果这个页面是缓存的页面 将其在缓存设置中删除 + commit('keepAliveRemove', state.opened[index].name) + // 更新数据 删除关闭的页面 + state.opened.splice(index, 1) + } + // 持久化 + await dispatch('opened2db') + // 最后需要判断是否需要跳到首页 + if (isCurrent) { + const { name = '', params = {}, query = {} } = newPage + let routerObj = { + name, + params, + query } - // 持久化 - await dispatch('opened2db') - // 最后需要判断是否需要跳到首页 - if (isCurrent) { - const { name = '', params = {}, query = {} } = newPage - let routerObj = { - name, - params, - query - } - router.push(routerObj) - } - // end - resolve() - }) + router.push(routerObj) + } }, /** * @class opened @@ -260,28 +225,20 @@ export default { * @param {Object} context * @param {Object} payload { pageSelect: 当前选中的tagName } */ - closeLeft ({ state, commit, dispatch }, { pageSelect } = {}) { - return new Promise(async resolve => { - const pageAim = pageSelect || state.current - let currentIndex = 0 - state.opened.forEach((page, index) => { - if (page.fullPath === pageAim) { - currentIndex = index - } - }) - if (currentIndex > 0) { - // 删除打开的页面 并在缓存设置中删除 - state.opened.splice(1, currentIndex - 1).forEach(({ name }) => commit('keepAliveRemove', name)) - } - state.current = pageAim - if (router.app.$route.fullPath !== pageAim) { - router.push(pageAim) - } - // 持久化 - await dispatch('opened2db') - // end - resolve() + async closeLeft ({ state, commit, dispatch }, { pageSelect } = {}) { + const pageAim = pageSelect || state.current + let currentIndex = 0 + state.opened.forEach((page, index) => { + if (page.fullPath === pageAim) currentIndex = index }) + if (currentIndex > 0) { + // 删除打开的页面 并在缓存设置中删除 + state.opened.splice(1, currentIndex - 1).forEach(({ name }) => commit('keepAliveRemove', name)) + } + state.current = pageAim + if (router.app.$route.fullPath !== pageAim) router.push(pageAim) + // 持久化 + await dispatch('opened2db') }, /** * @class opened @@ -289,27 +246,19 @@ export default { * @param {Object} context * @param {Object} payload { pageSelect: 当前选中的tagName } */ - closeRight ({ state, commit, dispatch }, { pageSelect } = {}) { - return new Promise(async resolve => { - const pageAim = pageSelect || state.current - let currentIndex = 0 - state.opened.forEach((page, index) => { - if (page.fullPath === pageAim) { - currentIndex = index - } - }) - // 删除打开的页面 并在缓存设置中删除 - state.opened.splice(currentIndex + 1).forEach(({ name }) => commit('keepAliveRemove', name)) - // 设置当前的页面 - state.current = pageAim - if (router.app.$route.fullPath !== pageAim) { - router.push(pageAim) - } - // 持久化 - await dispatch('opened2db') - // end - resolve() + async closeRight ({ state, commit, dispatch }, { pageSelect } = {}) { + const pageAim = pageSelect || state.current + let currentIndex = 0 + state.opened.forEach((page, index) => { + if (page.fullPath === pageAim) currentIndex = index }) + // 删除打开的页面 并在缓存设置中删除 + state.opened.splice(currentIndex + 1).forEach(({ name }) => commit('keepAliveRemove', name)) + // 设置当前的页面 + state.current = pageAim + if (router.app.$route.fullPath !== pageAim) router.push(pageAim) + // 持久化 + await dispatch('opened2db') }, /** * @class opened @@ -317,53 +266,39 @@ export default { * @param {Object} context * @param {Object} payload { pageSelect: 当前选中的tagName } */ - closeOther ({ state, commit, dispatch }, { pageSelect } = {}) { - return new Promise(async resolve => { - const pageAim = pageSelect || state.current - let currentIndex = 0 - state.opened.forEach((page, index) => { - if (page.fullPath === pageAim) { - currentIndex = index - } - }) - // 删除打开的页面数据 并更新缓存设置 - if (currentIndex === 0) { - state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name)) - } else { - state.opened.splice(currentIndex + 1).forEach(({ name }) => commit('keepAliveRemove', name)) - state.opened.splice(1, currentIndex - 1).forEach(({ name }) => commit('keepAliveRemove', name)) - } - // 设置新的页面 - state.current = pageAim - if (router.app.$route.fullPath !== pageAim) { - router.push(pageAim) - } - // 持久化 - await dispatch('opened2db') - // end - resolve() + async closeOther ({ state, commit, dispatch }, { pageSelect } = {}) { + const pageAim = pageSelect || state.current + let currentIndex = 0 + state.opened.forEach((page, index) => { + if (page.fullPath === pageAim) currentIndex = index }) + // 删除打开的页面数据 并更新缓存设置 + if (currentIndex === 0) { + state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name)) + } else { + state.opened.splice(currentIndex + 1).forEach(({ name }) => commit('keepAliveRemove', name)) + state.opened.splice(1, currentIndex - 1).forEach(({ name }) => commit('keepAliveRemove', name)) + } + // 设置新的页面 + state.current = pageAim + if (router.app.$route.fullPath !== pageAim) router.push(pageAim) + // 持久化 + await dispatch('opened2db') }, /** * @class opened * @description 关闭所有 tag * @param {Object} context */ - closeAll ({ state, commit, dispatch }) { - return new Promise(async resolve => { - // 删除打开的页面 并在缓存设置中删除 - state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name)) - // 持久化 - await dispatch('opened2db') - // 关闭所有的标签页后需要判断一次现在是不是在首页 - if (router.app.$route.name !== 'index') { - router.push({ - name: 'index' - }) - } - // end - resolve() - }) + async closeAll ({ state, commit, dispatch }) { + // 删除打开的页面 并在缓存设置中删除 + state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name)) + // 持久化 + await dispatch('opened2db') + // 关闭所有的标签页后需要判断一次现在是不是在首页 + if (router.app.$route.name !== 'index') { + router.push({ name: 'index' }) + } } }, mutations: { @@ -381,9 +316,8 @@ export default { * @param {String} name name */ keepAliveRemove (state, name) { - const list = [ ...state.keepAlive ] + const list = cloneDeep(state.keepAlive) const index = list.findIndex(item => item === name) - if (index !== -1) { list.splice(index, 1) state.keepAlive = list diff --git a/src/store/modules/d2admin/modules/size.js b/src/store/modules/d2admin/modules/size.js index 539e6d41..265ea700 100644 --- a/src/store/modules/d2admin/modules/size.js +++ b/src/store/modules/d2admin/modules/size.js @@ -28,9 +28,7 @@ export default { if (state.value) return Promise.resolve() return new Promise(resolve => { const timer = setInterval(() => { - if (state.value) { - resolve(clearInterval(timer)) - } + if (state.value) resolve(clearInterval(timer)) }, 10) }) }, @@ -39,41 +37,33 @@ export default { * @param {Object} context * @param {String} size 尺寸 */ - set ({ state, dispatch }, size) { - return new Promise(async resolve => { - // store 赋值 - state.value = size - // 应用 - dispatch('apply', true) - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'size.value', - value: state.value, - user: true - }, { root: true }) - // end - resolve() - }) + async set ({ state, dispatch }, size) { + // store 赋值 + state.value = size + // 应用 + dispatch('apply', true) + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'size.value', + value: state.value, + user: true + }, { root: true }) }, /** * @description 从持久化数据读取尺寸设置 * @param {Object} context */ - load ({ state, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - state.value = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'size.value', - defaultValue: 'default', - user: true - }, { root: true }) - // 应用 - dispatch('apply') - // end - resolve() - }) + async load ({ state, dispatch }) { + // store 赋值 + state.value = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'size.value', + defaultValue: 'default', + user: true + }, { root: true }) + // 应用 + dispatch('apply') } } } diff --git a/src/store/modules/d2admin/modules/theme.js b/src/store/modules/d2admin/modules/theme.js index 93f1c23e..df2d9a23 100644 --- a/src/store/modules/d2admin/modules/theme.js +++ b/src/store/modules/d2admin/modules/theme.js @@ -1,13 +1,13 @@ -// 设置文件 +import { get } from 'lodash' import setting from '@/setting.js' export default { namespaced: true, state: { // 主题 - list: setting.theme.list, + list: get(setting, 'theme.list', []), // 现在激活的主题 这应该是一个名字 不是对象 - activeName: setting.theme.list[0].name + activeName: get(setting, 'theme.list[0].name', 'd2') }, getters: { /** @@ -23,12 +23,35 @@ export default { * @description 激活一个主题 * @param {String} themeValue 需要激活的主题名称 */ - set ({ state, commit, dispatch }, themeName) { - return new Promise(async resolve => { - // 检查这个主题在主题列表里是否存在 - state.activeName = state.list.find(e => e.name === themeName) ? themeName : state.list[0].name - // 将 vuex 中的主题应用到 dom - commit('dom') + async set ({ state, commit, dispatch }, themeName) { + // 检查这个主题在主题列表里是否存在 + state.activeName = state.list.find(e => e.name === themeName) ? themeName : state.list[0].name + // 将 vuex 中的主题应用到 dom + commit('dom') + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'theme.activeName', + value: state.activeName, + user: true + }, { root: true }) + }, + /** + * @description 从持久化数据加载主题设置 * @param {Object} context + */ + async load ({ state, commit, dispatch }) { + // store 赋值 + let activeName = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'theme.activeName', + defaultValue: state.list[0].name, + user: true + }, { root: true }) + // 检查这个主题在主题列表里是否存在 + if (state.list.find(e => e.name === activeName)) { + state.activeName = activeName + } else { + state.activeName = state.list[0].name // 持久化 await dispatch('d2admin/db/set', { dbName: 'sys', @@ -36,40 +59,9 @@ export default { value: state.activeName, user: true }, { root: true }) - // end - resolve() - }) - }, - /** - * @description 从持久化数据加载主题设置 * @param {Object} context - */ - load ({ state, commit, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - let activeName = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'theme.activeName', - defaultValue: state.list[0].name, - user: true - }, { root: true }) - // 检查这个主题在主题列表里是否存在 - if (state.list.find(e => e.name === activeName)) { - state.activeName = activeName - } else { - state.activeName = state.list[0].name - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'theme.activeName', - value: state.activeName, - user: true - }, { root: true }) - } - // 将 vuex 中的主题应用到 dom - commit('dom') - // end - resolve() - }) + } + // 将 vuex 中的主题应用到 dom + commit('dom') } }, mutations: { diff --git a/src/store/modules/d2admin/modules/transition.js b/src/store/modules/d2admin/modules/transition.js index 38494648..edb7c123 100644 --- a/src/store/modules/d2admin/modules/transition.js +++ b/src/store/modules/d2admin/modules/transition.js @@ -13,37 +13,29 @@ export default { * @param {Object} context * @param {Boolean} active 新的状态 */ - set ({ state, dispatch }, active) { - return new Promise(async resolve => { - // store 赋值 - state.active = active - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'transition.active', - value: state.active, - user: true - }, { root: true }) - // end - resolve() - }) + async set ({ state, dispatch }, active) { + // store 赋值 + state.active = active + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'transition.active', + value: state.active, + user: true + }, { root: true }) }, /** * 从数据库读取页面过渡动画设置 * @param {Object} context */ - load ({ state, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - state.active = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'transition.active', - defaultValue: setting.transition.active, - user: true - }, { root: true }) - // end - resolve() - }) + async load ({ state, dispatch }) { + // store 赋值 + state.active = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'transition.active', + defaultValue: setting.transition.active, + user: true + }, { root: true }) } } } diff --git a/src/store/modules/d2admin/modules/user.js b/src/store/modules/d2admin/modules/user.js index 1a552462..13c9fc3d 100644 --- a/src/store/modules/d2admin/modules/user.js +++ b/src/store/modules/d2admin/modules/user.js @@ -10,37 +10,29 @@ export default { * @param {Object} context * @param {*} info info */ - set ({ state, dispatch }, info) { - return new Promise(async resolve => { - // store 赋值 - state.info = info - // 持久化 - await dispatch('d2admin/db/set', { - dbName: 'sys', - path: 'user.info', - value: info, - user: true - }, { root: true }) - // end - resolve() - }) + async set ({ state, dispatch }, info) { + // store 赋值 + state.info = info + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'user.info', + value: info, + user: true + }, { root: true }) }, /** * @description 从数据库取用户数据 * @param {Object} context */ - load ({ state, dispatch }) { - return new Promise(async resolve => { - // store 赋值 - state.info = await dispatch('d2admin/db/get', { - dbName: 'sys', - path: 'user.info', - defaultValue: {}, - user: true - }, { root: true }) - // end - resolve() - }) + async load ({ state, dispatch }) { + // store 赋值 + state.info = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'user.info', + defaultValue: {}, + user: true + }, { root: true }) } } } diff --git a/src/views/demo/business/table/1/index.vue b/src/views/demo/business/table/1/index.vue index 97ea2803..610e3744 100644 --- a/src/views/demo/business/table/1/index.vue +++ b/src/views/demo/business/table/1/index.vue @@ -17,7 +17,7 @@