style: 移除 store 中无用的 Promise 声明以及优化代码格式 增强部分健壮性

This commit is contained in:
FairyEver
2020-04-22 11:03:48 +08:00
parent d249c86406
commit 98eaba77df
18 changed files with 382 additions and 531 deletions

View File

@@ -1,6 +1,6 @@
import request from '@/plugin/axios' import request from '@/plugin/axios'
export function ComponentsMarkdownBase (url) { export function componentsMarkdownBase (url) {
return request({ return request({
baseURL: process.env.BASE_URL, baseURL: process.env.BASE_URL,
url, url,

View File

@@ -1,6 +1,6 @@
import request from '@/plugin/axios' import request from '@/plugin/axios'
export function BusinessTable1List (params) { export function businessTable1List (params) {
return request({ return request({
url: '/demo/business/table/1/fetch', url: '/demo/business/table/1/fetch',
method: 'get', method: 'get',

View File

@@ -1,6 +1,6 @@
import request from '@/plugin/axios' import request from '@/plugin/axios'
export function PluginMocksAjax () { export function pluginMocksAjax () {
return request({ return request({
url: '/demo/plugins/mock/ajax', url: '/demo/plugins/mock/ajax',
method: 'get' method: 'get'

View File

@@ -1,6 +1,6 @@
import request from '@/plugin/axios' import request from '@/plugin/axios'
export function AccountLogin (data) { export function accountLogin (data) {
return request({ return request({
url: '/login', url: '/login',
method: 'post', method: 'post',

View File

@@ -12,7 +12,7 @@ import marked from 'marked'
import highlight from 'highlight.js' import highlight from 'highlight.js'
import bandupan from './plugin/baidupan' import bandupan from './plugin/baidupan'
import 'github-markdown-css' import 'github-markdown-css'
import { ComponentsMarkdownBase } from '@api/components.markdown' import { componentsMarkdownBase } from '@api/components.markdown'
export default { export default {
name: 'd2-markdown', name: 'd2-markdown',
props: { props: {
@@ -64,7 +64,7 @@ export default {
}, },
// 从 url 加载原始数据 // 从 url 加载原始数据
async getReadme (url) { async getReadme (url) {
const data = await ComponentsMarkdownBase(url) const data = await componentsMarkdownBase(url)
return this.marked(data) return this.marked(data)
}, },
marked (data) { marked (data) {

View File

@@ -1,7 +1,7 @@
import { Message, MessageBox } from 'element-ui' import { Message, MessageBox } from 'element-ui'
import util from '@/libs/util.js' import util from '@/libs/util.js'
import router from '@/router' import router from '@/router'
import { AccountLogin } from '@api/sys.login' import { accountLogin } from '@api/sys.login'
export default { export default {
namespaced: true, namespaced: true,
@@ -13,38 +13,22 @@ export default {
* @param {Object} payload password {String} 密码 * @param {Object} payload password {String} 密码
* @param {Object} payload route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式 * @param {Object} payload route {Object} 登录成功后定向的路由对象 任何 vue-router 支持的格式
*/ */
login ({ dispatch }, { async login ({ dispatch }, {
username = '', username = '',
password = '' password = ''
} = {}) { } = {}) {
return new Promise((resolve, reject) => { const res = await accountLogin({ username, password })
// 开始请求登录接口 // 设置 cookie 一定要存 uuid 和 token 两个 cookie
AccountLogin({ // 整个系统依赖这两个数据进行校验和存储
username, // uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复
password // token 代表用户当前登录状态 建议在网络请求中携带 token
}) // 如有必要 token 需要定时更新,默认保存一天
.then(async res => { util.cookies.set('uuid', res.uuid)
// 设置 cookie 一定要存 uuid 和 token 两个 cookie util.cookies.set('token', res.token)
// 整个系统依赖这两个数据进行校验和存储 // 设置 vuex 用户信息
// uuid 是用户身份唯一标识 用户注册的时候确定 并且不可改变 不可重复 await dispatch('d2admin/user/set', { name: res.name }, { root: true })
// token 代表用户当前登录状态 建议在网络请求中携带 token // 用户登录后从持久化数据加载一系列的设置
// 如有必要 token 需要定时更新,默认保存一天 await dispatch('load')
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)
})
})
}, },
/** /**
* @description 注销用户并返回登录页面 * @description 注销用户并返回登录页面
@@ -62,25 +46,19 @@ export default {
// 清空 vuex 用户信息 // 清空 vuex 用户信息
await dispatch('d2admin/user/set', {}, { root: true }) await dispatch('d2admin/user/set', {}, { root: true })
// 跳转路由 // 跳转路由
router.push({ router.push({ name: 'login' })
name: 'login'
})
} }
// 判断是否需要确认 // 判断是否需要确认
if (confirm) { if (confirm) {
commit('d2admin/gray/set', true, { root: true }) commit('d2admin/gray/set', true, { root: true })
MessageBox.confirm('确定要注销当前用户吗', '注销用户', { MessageBox.confirm('确定要注销当前用户吗', '注销用户', { type: 'warning' })
type: 'warning'
})
.then(() => { .then(() => {
commit('d2admin/gray/set', false, { root: true }) commit('d2admin/gray/set', false, { root: true })
logout() logout()
}) })
.catch(() => { .catch(() => {
commit('d2admin/gray/set', false, { root: true }) commit('d2admin/gray/set', false, { root: true })
Message({ Message({ message: '取消注销操作' })
message: '取消注销操作'
})
}) })
} else { } else {
logout() logout()
@@ -90,25 +68,21 @@ export default {
* @description 用户登录后从持久化数据加载一系列的设置 * @description 用户登录后从持久化数据加载一系列的设置
* @param {Object} context * @param {Object} context
*/ */
load ({ dispatch }) { async load ({ dispatch }) {
return new Promise(async resolve => { // 加载用户名
// DB -> store 加载用户名 await dispatch('d2admin/user/load', null, { root: true })
await dispatch('d2admin/user/load', null, { root: true }) // 加载主题
// DB -> store 加载主题 await dispatch('d2admin/theme/load', null, { root: true })
await dispatch('d2admin/theme/load', null, { root: true }) // 加载页面过渡效果设置
// DB -> store 加载页面过渡效果设置 await dispatch('d2admin/transition/load', null, { root: true })
await dispatch('d2admin/transition/load', null, { root: true }) // 持久化数据加载上次退出时的多页列表
// DB -> store 持久化数据加载上次退出时的多页列表 await dispatch('d2admin/page/openedLoad', null, { root: true })
await dispatch('d2admin/page/openedLoad', null, { root: true }) // 持久化数据加载侧边栏折叠状态
// DB -> store 持久化数据加载侧边栏折叠状态 await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true })
await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) // 持久化数据加载全局尺寸
// DB -> store 持久化数据加载全局尺寸 await dispatch('d2admin/size/load', null, { root: true })
await dispatch('d2admin/size/load', null, { root: true }) // 持久化数据加载颜色设置
// DB -> store 持久化数据加载颜色设置 await dispatch('d2admin/color/load', null, { root: true })
await dispatch('d2admin/color/load', null, { root: true })
// end
resolve()
})
} }
} }
} }

View File

@@ -1,3 +1,4 @@
import { cloneDeep } from 'lodash'
import client from 'webpack-theme-color-replacer/client' import client from 'webpack-theme-color-replacer/client'
import forElementUI from 'webpack-theme-color-replacer/forElementUI' import forElementUI from 'webpack-theme-color-replacer/forElementUI'
@@ -13,50 +14,42 @@ export default {
* @param {Object} context * @param {Object} context
* @param {String} color 尺寸 * @param {String} color 尺寸
*/ */
set ({ state, dispatch, commit }, color) { async set ({ state, dispatch, commit }, color) {
return new Promise(async resolve => { // 记录上个值
// 记录上个值 const old = state.value
const old = state.value // store 赋值
// store 赋值 state.value = color || process.env.VUE_APP_ELEMENT_COLOR
state.value = color || process.env.VUE_APP_ELEMENT_COLOR // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'color.value',
path: 'color.value', value: state.value,
value: state.value, user: true
user: true }, { root: true })
}, { root: true }) // 应用
// 应用 commit('apply', {
commit('apply', { oldColor: old,
oldColor: old, newColor: state.value
newColor: state.value
})
// end
resolve()
}) })
}, },
/** /**
* @description 从持久化数据读取颜色设置 * @description 从持久化数据读取颜色设置
* @param {Object} context * @param {Object} context
*/ */
load ({ state, dispatch, commit }) { async load ({ state, dispatch, commit }) {
return new Promise(async resolve => { // 记录上个值
// 记录上个值 const old = state.value
const old = state.value // store 赋值
// store 赋值 state.value = await dispatch('d2admin/db/get', {
state.value = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'color.value',
path: 'color.value', defaultValue: process.env.VUE_APP_ELEMENT_COLOR,
defaultValue: process.env.VUE_APP_ELEMENT_COLOR, user: true
user: true }, { root: true })
}, { root: true }) // 应用
// 应用 commit('apply', {
commit('apply', { oldColor: old,
oldColor: old, newColor: state.value
newColor: state.value
})
// end
resolve()
}) })
} }
}, },
@@ -69,8 +62,8 @@ export default {
*/ */
apply (state, { oldColor, newColor }) { apply (state, { oldColor, newColor }) {
var options = { var options = {
oldColors: [...forElementUI.getElementUISeries(oldColor)], oldColors: cloneDeep(forElementUI.getElementUISeries(oldColor)),
newColors: [...forElementUI.getElementUISeries(newColor)] newColors: cloneDeep(forElementUI.getElementUISeries(newColor))
} }
client.changer.changeColor(options) client.changer.changeColor(options)
} }

View File

@@ -23,17 +23,13 @@ export default {
* @param {Object} context * @param {Object} context
*/ */
toggle ({ commit }) { toggle ({ commit }) {
return new Promise(resolve => { if (screenfull.isFullscreen) {
if (screenfull.isFullscreen) { screenfull.exit()
screenfull.exit() commit('set', false)
commit('set', false) } else {
} else { screenfull.request()
screenfull.request() commit('set', true)
commit('set', true) }
}
// end
resolve()
})
} }
}, },
mutations: { mutations: {

View File

@@ -17,56 +17,44 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Boolean} collapse is collapse * @param {Boolean} collapse is collapse
*/ */
asideCollapseSet ({ state, dispatch }, collapse) { async asideCollapseSet ({ state, dispatch }, collapse) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.asideCollapse = collapse
state.asideCollapse = collapse // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'menu.asideCollapse',
path: 'menu.asideCollapse', value: state.asideCollapse,
value: state.asideCollapse, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* 切换侧边栏展开和收缩 * 切换侧边栏展开和收缩
* @param {Object} context * @param {Object} context
*/ */
asideCollapseToggle ({ state, dispatch }) { async asideCollapseToggle ({ state, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.asideCollapse = !state.asideCollapse
state.asideCollapse = !state.asideCollapse // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'menu.asideCollapse',
path: 'menu.asideCollapse', value: state.asideCollapse,
value: state.asideCollapse, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* 从持久化数据读取侧边栏展开或者收缩 * 从持久化数据读取侧边栏展开或者收缩
* @param {Object} context * @param {Object} context
*/ */
asideCollapseLoad ({ state, dispatch }) { async asideCollapseLoad ({ state, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.asideCollapse = await dispatch('d2admin/db/get', {
state.asideCollapse = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'menu.asideCollapse',
path: 'menu.asideCollapse', defaultValue: setting.menu.asideCollapse,
defaultValue: setting.menu.asideCollapse, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
} }
}, },
mutations: { mutations: {

View File

@@ -11,7 +11,7 @@ export default {
// 可以在多页 tab 模式下显示的页面 // 可以在多页 tab 模式下显示的页面
pool: [], pool: [],
// 当前显示的多页面列表 // 当前显示的多页面列表
opened: setting.page.opened, opened: get(setting, 'page.opened', []),
// 已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 // 已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201
openedLoaded: false, openedLoaded: false,
// 当前页面 // 当前页面
@@ -28,9 +28,7 @@ export default {
if (state.openedLoaded) return Promise.resolve() if (state.openedLoaded) return Promise.resolve()
return new Promise(resolve => { return new Promise(resolve => {
const timer = setInterval(() => { const timer = setInterval(() => {
if (state.openedLoaded) { if (state.openedLoaded) resolve(clearInterval(timer))
resolve(clearInterval(timer))
}
}, 10) }, 10)
}) })
}, },
@@ -39,22 +37,22 @@ export default {
* @description 从持久化数据载入标签页列表 * @description 从持久化数据载入标签页列表
* @param {Object} context * @param {Object} context
*/ */
openedLoad ({ state, commit, dispatch }) { async openedLoad ({ state, commit, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 const value = await dispatch('d2admin/db/get', {
const value = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'page.opened',
path: 'page.opened', defaultValue: setting.page.opened,
defaultValue: setting.page.opened, user: true
user: true }, { root: true })
}, { root: true }) // 在处理函数中进行数据优化 过滤掉现在已经失效的页签或者已经改变了信息的页签
// 在处理函数中进行数据优化 过滤掉现在已经失效的页签或者已经改变了信息的页签 // 以 fullPath 字段为准
// 以 fullPath 字段为准 // 如果页面过多的话可能需要优化算法
// 如果页面过多的话可能需要优化算法 // valid 有效列表 1, 1, 0, 1 => 有效, 有效, 失效, 有效
// valid 有效列表 1, 1, 0, 1 => 有效, 有效, 失效, 有效 const valid = []
const valid = [] // 处理数据
// 处理数据 state.opened = value
state.opened = value.map(opened => { .map(opened => {
// 忽略首页 // 忽略首页
if (opened.fullPath === '/index') { if (opened.fullPath === '/index') {
valid.push(1) valid.push(1)
@@ -67,31 +65,25 @@ export default {
// 返回合并后的数据 新的覆盖旧的 // 返回合并后的数据 新的覆盖旧的
// 新的数据中一般不会携带 params 和 query, 所以旧的参数会留存 // 新的数据中一般不会携带 params 和 query, 所以旧的参数会留存
return Object.assign({}, opened, find) return Object.assign({}, opened, find)
}).filter((opened, index) => valid[index] === 1) })
// 标记已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201 .filter((opened, index) => valid[index] === 1)
state.openedLoaded = true // 标记已经加载多标签页数据 https://github.com/d2-projects/d2-admin/issues/201
// 根据 opened 数据生成缓存设置 state.openedLoaded = true
commit('keepAliveRefresh') // 根据 opened 数据生成缓存设置
// end commit('keepAliveRefresh')
resolve()
})
}, },
/** /**
* 将 opened 属性赋值并持久化 在这之前请先确保已经更新了 state.opened * 将 opened 属性赋值并持久化 在这之前请先确保已经更新了 state.opened
* @param {Object} context * @param {Object} context
*/ */
opened2db ({ state, dispatch }) { async opened2db ({ state, dispatch }) {
return new Promise(async resolve => { // 设置数据
// 设置数据 dispatch('d2admin/db/set', {
dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'page.opened',
path: 'page.opened', value: state.opened,
value: state.opened, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* @class opened * @class opened
@@ -99,19 +91,15 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { index, params, query, fullPath } 路由信息 * @param {Object} payload { index, params, query, fullPath } 路由信息
*/ */
openedUpdate ({ state, commit, dispatch }, { index, params, query, fullPath }) { async openedUpdate ({ state, commit, dispatch }, { index, params, query, fullPath }) {
return new Promise(async resolve => { // 更新页面列表某一项
// 更新页面列表某一项 let page = state.opened[index]
let page = state.opened[index] page.params = params || page.params
page.params = params || page.params page.query = query || page.query
page.query = query || page.query page.fullPath = fullPath || page.fullPath
page.fullPath = fullPath || page.fullPath state.opened.splice(index, 1, page)
state.opened.splice(index, 1, page) // 持久化
// 持久化 await dispatch('opened2db')
await dispatch('opened2db')
// end
resolve()
})
}, },
/** /**
* @class opened * @class opened
@@ -119,17 +107,13 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { oldIndex, newIndex } 位置信息 * @param {Object} payload { oldIndex, newIndex } 位置信息
*/ */
openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) { async openedSort ({ state, commit, dispatch }, { oldIndex, newIndex }) {
return new Promise(async resolve => { // 重排页面列表某一项
// 重排页面列表某一项 let page = state.opened[oldIndex]
let page = state.opened[oldIndex] state.opened.splice(oldIndex, 1)
state.opened.splice(oldIndex, 1) state.opened.splice(newIndex, 0, page)
state.opened.splice(newIndex, 0, page) // 持久化
// 持久化 await dispatch('opened2db')
await dispatch('opened2db')
// end
resolve()
})
}, },
/** /**
* @class opened * @class opened
@@ -137,24 +121,18 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload new tag info * @param {Object} payload new tag info
*/ */
add ({ state, commit, dispatch }, { tag, params, query, fullPath }) { async add ({ state, commit, dispatch }, { tag, params, query, fullPath }) {
return new Promise(async resolve => { // 设置新的 tag 在新打开一个以前没打开过的页面时使用
// 设置新的 tag 在新打开一个以前没打开过的页面时使用 let newTag = tag
let newTag = tag newTag.params = params || newTag.params
newTag.params = params || newTag.params newTag.query = query || newTag.query
newTag.query = query || newTag.query newTag.fullPath = fullPath || newTag.fullPath
newTag.fullPath = fullPath || newTag.fullPath // 添加进当前显示的页面数组
// 添加进当前显示的页面数组 state.opened.push(newTag)
state.opened.push(newTag) // 如果这个页面需要缓存 将其添加到缓存设置
// 如果这个页面需要缓存 将其添加到缓存设置 if (isKeepAlive(newTag)) commit('keepAlivePush', tag.name)
if (isKeepAlive(newTag)) { // 持久化
commit('keepAlivePush', tag.name) await dispatch('opened2db')
}
// 持久化
await dispatch('opened2db')
// end
resolve()
})
}, },
/** /**
* @class current * @class current
@@ -162,47 +140,41 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload 从路由钩子的 to 对象上获取 { name, params, query, fullPath, meta } 路由信息 * @param {Object} payload 从路由钩子的 to 对象上获取 { name, params, query, fullPath, meta } 路由信息
*/ */
open ({ state, commit, dispatch }, { name, params, query, fullPath, meta }) { async open ({ state, commit, dispatch }, { name, params, query, fullPath, meta }) {
return new Promise(async resolve => { // 已经打开的页面
// 已经打开的页面 let opened = state.opened
let opened = state.opened // 判断此页面是否已经打开 并且记录位置
// 判断此页面是否已经打开 并且记录位置 let pageOpendIndex = 0
let pageOpendIndex = 0 const pageOpend = opened.find((page, index) => {
const pageOpend = opened.find((page, index) => { const same = page.fullPath === fullPath
const same = page.fullPath === fullPath pageOpendIndex = same ? index : pageOpendIndex
pageOpendIndex = same ? index : pageOpendIndex return same
return same })
if (pageOpend) {
// 页面以前打开过
await dispatch('openedUpdate', {
index: pageOpendIndex,
params,
query,
fullPath
}) })
if (pageOpend) { } else {
// 页面以前打开过 // 页面以前没有打开过
await dispatch('openedUpdate', { let page = state.pool.find(t => t.name === name)
index: pageOpendIndex, // 如果这里没有找到 page 代表这个路由虽然在框架内 但是不参与标签页显示
if (page) {
await dispatch('add', {
tag: Object.assign({}, page),
params, params,
query, query,
fullPath 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) if (isKeepAlive({ meta })) commit('keepAlivePush', name)
} // 设置当前的页面
// 设置当前的页面 commit('currentSet', fullPath)
commit('currentSet', fullPath)
// end
resolve()
})
}, },
/** /**
* @class opened * @class opened
@@ -210,49 +182,42 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { tagName: 要关闭的标签名字 } * @param {Object} payload { tagName: 要关闭的标签名字 }
*/ */
close ({ state, commit, dispatch }, { tagName }) { async close ({ state, commit, dispatch }, { tagName }) {
return new Promise(async resolve => { // 下个新的页面
// 下个新的页面 let newPage = state.opened[0]
let newPage = state.opened[0] const isCurrent = state.current === tagName
const isCurrent = state.current === tagName // 如果关闭的页面就是当前显示的页面
// 如果关闭的页面就是当前显示的页面 if (isCurrent) {
if (isCurrent) { // 去找一个新的页面
// 去找一个新的页面 let len = state.opened.length
let len = state.opened.length for (let i = 1; i < len; i++) {
for (let i = 1; i < len; i++) { if (state.opened[i].fullPath === tagName) {
if (state.opened[i].fullPath === tagName) { if (i < len - 1) newPage = state.opened[i + 1]
if (i < len - 1) { else newPage = state.opened[i - 1]
newPage = state.opened[i + 1] break
} else {
newPage = state.opened[i - 1]
}
break
}
} }
} }
// 找到这个页面在已经打开的数据里是第几个 }
const index = state.opened.findIndex(page => page.fullPath === tagName) // 找到这个页面在已经打开的数据里是第几个
if (index >= 0) { const index = state.opened.findIndex(page => page.fullPath === tagName)
// 如果这个页面是缓存的页面 将其在缓存设置中删除 if (index >= 0) {
commit('keepAliveRemove', state.opened[index].name) // 如果这个页面是缓存的页面 将其在缓存设置中删除
// 更新数据 删除关闭的页面 commit('keepAliveRemove', state.opened[index].name)
state.opened.splice(index, 1) // 更新数据 删除关闭的页面
state.opened.splice(index, 1)
}
// 持久化
await dispatch('opened2db')
// 最后需要判断是否需要跳到首页
if (isCurrent) {
const { name = '', params = {}, query = {} } = newPage
let routerObj = {
name,
params,
query
} }
// 持久化 router.push(routerObj)
await dispatch('opened2db') }
// 最后需要判断是否需要跳到首页
if (isCurrent) {
const { name = '', params = {}, query = {} } = newPage
let routerObj = {
name,
params,
query
}
router.push(routerObj)
}
// end
resolve()
})
}, },
/** /**
* @class opened * @class opened
@@ -260,28 +225,20 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { pageSelect: 当前选中的tagName } * @param {Object} payload { pageSelect: 当前选中的tagName }
*/ */
closeLeft ({ state, commit, dispatch }, { pageSelect } = {}) { async closeLeft ({ state, commit, dispatch }, { pageSelect } = {}) {
return new Promise(async resolve => { const pageAim = pageSelect || state.current
const pageAim = pageSelect || state.current let currentIndex = 0
let currentIndex = 0 state.opened.forEach((page, index) => {
state.opened.forEach((page, index) => { if (page.fullPath === pageAim) currentIndex = 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()
}) })
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 * @class opened
@@ -289,27 +246,19 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { pageSelect: 当前选中的tagName } * @param {Object} payload { pageSelect: 当前选中的tagName }
*/ */
closeRight ({ state, commit, dispatch }, { pageSelect } = {}) { async closeRight ({ state, commit, dispatch }, { pageSelect } = {}) {
return new Promise(async resolve => { const pageAim = pageSelect || state.current
const pageAim = pageSelect || state.current let currentIndex = 0
let currentIndex = 0 state.opened.forEach((page, index) => {
state.opened.forEach((page, index) => { if (page.fullPath === pageAim) currentIndex = 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()
}) })
// 删除打开的页面 并在缓存设置中删除
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 * @class opened
@@ -317,53 +266,39 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Object} payload { pageSelect: 当前选中的tagName } * @param {Object} payload { pageSelect: 当前选中的tagName }
*/ */
closeOther ({ state, commit, dispatch }, { pageSelect } = {}) { async closeOther ({ state, commit, dispatch }, { pageSelect } = {}) {
return new Promise(async resolve => { const pageAim = pageSelect || state.current
const pageAim = pageSelect || state.current let currentIndex = 0
let currentIndex = 0 state.opened.forEach((page, index) => {
state.opened.forEach((page, index) => { if (page.fullPath === pageAim) currentIndex = 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()
}) })
// 删除打开的页面数据 并更新缓存设置
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 * @class opened
* @description 关闭所有 tag * @description 关闭所有 tag
* @param {Object} context * @param {Object} context
*/ */
closeAll ({ state, commit, dispatch }) { async closeAll ({ state, commit, dispatch }) {
return new Promise(async resolve => { // 删除打开的页面 并在缓存设置中删除
// 删除打开的页面 并在缓存设置中删除 state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name))
state.opened.splice(1).forEach(({ name }) => commit('keepAliveRemove', name)) // 持久化
// 持久化 await dispatch('opened2db')
await dispatch('opened2db') // 关闭所有的标签页后需要判断一次现在是不是在首页
// 关闭所有的标签页后需要判断一次现在是不是在首页 if (router.app.$route.name !== 'index') {
if (router.app.$route.name !== 'index') { router.push({ name: 'index' })
router.push({ }
name: 'index'
})
}
// end
resolve()
})
} }
}, },
mutations: { mutations: {
@@ -381,9 +316,8 @@ export default {
* @param {String} name name * @param {String} name name
*/ */
keepAliveRemove (state, name) { keepAliveRemove (state, name) {
const list = [ ...state.keepAlive ] const list = cloneDeep(state.keepAlive)
const index = list.findIndex(item => item === name) const index = list.findIndex(item => item === name)
if (index !== -1) { if (index !== -1) {
list.splice(index, 1) list.splice(index, 1)
state.keepAlive = list state.keepAlive = list

View File

@@ -28,9 +28,7 @@ export default {
if (state.value) return Promise.resolve() if (state.value) return Promise.resolve()
return new Promise(resolve => { return new Promise(resolve => {
const timer = setInterval(() => { const timer = setInterval(() => {
if (state.value) { if (state.value) resolve(clearInterval(timer))
resolve(clearInterval(timer))
}
}, 10) }, 10)
}) })
}, },
@@ -39,41 +37,33 @@ export default {
* @param {Object} context * @param {Object} context
* @param {String} size 尺寸 * @param {String} size 尺寸
*/ */
set ({ state, dispatch }, size) { async set ({ state, dispatch }, size) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.value = size
state.value = size // 应用
// 应用 dispatch('apply', true)
dispatch('apply', true) // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'size.value',
path: 'size.value', value: state.value,
value: state.value, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* @description 从持久化数据读取尺寸设置 * @description 从持久化数据读取尺寸设置
* @param {Object} context * @param {Object} context
*/ */
load ({ state, dispatch }) { async load ({ state, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.value = await dispatch('d2admin/db/get', {
state.value = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'size.value',
path: 'size.value', defaultValue: 'default',
defaultValue: 'default', user: true
user: true }, { root: true })
}, { root: true }) // 应用
// 应用 dispatch('apply')
dispatch('apply')
// end
resolve()
})
} }
} }
} }

View File

@@ -1,13 +1,13 @@
// 设置文件 import { get } from 'lodash'
import setting from '@/setting.js' import setting from '@/setting.js'
export default { export default {
namespaced: true, namespaced: true,
state: { 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: { getters: {
/** /**
@@ -23,12 +23,35 @@ export default {
* @description 激活一个主题 * @description 激活一个主题
* @param {String} themeValue 需要激活的主题名称 * @param {String} themeValue 需要激活的主题名称
*/ */
set ({ state, commit, dispatch }, themeName) { async set ({ state, commit, dispatch }, themeName) {
return new Promise(async resolve => { // 检查这个主题在主题列表里是否存在
// 检查这个主题在主题列表里是否存在 state.activeName = state.list.find(e => e.name === themeName) ? themeName : state.list[0].name
state.activeName = state.list.find(e => e.name === themeName) ? themeName : state.list[0].name // 将 vuex 中的主题应用到 dom
// 将 vuex 中的主题应用到 dom commit('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', { await dispatch('d2admin/db/set', {
dbName: 'sys', dbName: 'sys',
@@ -36,40 +59,9 @@ export default {
value: state.activeName, value: state.activeName,
user: true user: true
}, { root: true }) }, { root: true })
// end }
resolve() // 将 vuex 中的主题应用到 dom
}) commit('dom')
},
/**
* @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()
})
} }
}, },
mutations: { mutations: {

View File

@@ -13,37 +13,29 @@ export default {
* @param {Object} context * @param {Object} context
* @param {Boolean} active 新的状态 * @param {Boolean} active 新的状态
*/ */
set ({ state, dispatch }, active) { async set ({ state, dispatch }, active) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.active = active
state.active = active // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'transition.active',
path: 'transition.active', value: state.active,
value: state.active, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* 从数据库读取页面过渡动画设置 * 从数据库读取页面过渡动画设置
* @param {Object} context * @param {Object} context
*/ */
load ({ state, dispatch }) { async load ({ state, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.active = await dispatch('d2admin/db/get', {
state.active = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'transition.active',
path: 'transition.active', defaultValue: setting.transition.active,
defaultValue: setting.transition.active, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
} }
} }
} }

View File

@@ -10,37 +10,29 @@ export default {
* @param {Object} context * @param {Object} context
* @param {*} info info * @param {*} info info
*/ */
set ({ state, dispatch }, info) { async set ({ state, dispatch }, info) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.info = info
state.info = info // 持久化
// 持久化 await dispatch('d2admin/db/set', {
await dispatch('d2admin/db/set', { dbName: 'sys',
dbName: 'sys', path: 'user.info',
path: 'user.info', value: info,
value: info, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
}, },
/** /**
* @description 从数据库取用户数据 * @description 从数据库取用户数据
* @param {Object} context * @param {Object} context
*/ */
load ({ state, dispatch }) { async load ({ state, dispatch }) {
return new Promise(async resolve => { // store 赋值
// store 赋值 state.info = await dispatch('d2admin/db/get', {
state.info = await dispatch('d2admin/db/get', { dbName: 'sys',
dbName: 'sys', path: 'user.info',
path: 'user.info', defaultValue: {},
defaultValue: {}, user: true
user: true }, { root: true })
}, { root: true })
// end
resolve()
})
} }
} }
} }

View File

@@ -17,7 +17,7 @@
</template> </template>
<script> <script>
import { BusinessTable1List } from '@api/demo.business.table.1' import { businessTable1List } from '@api/demo.business.table.1'
export default { export default {
// name 值和本页的 $route.name 一致才可以缓存页面 // name 值和本页的 $route.name 一致才可以缓存页面
name: 'demo-business-table-1', name: 'demo-business-table-1',
@@ -57,7 +57,7 @@ export default {
this.$notify({ this.$notify({
title: '开始请求模拟表格数据' title: '开始请求模拟表格数据'
}) })
BusinessTable1List({ businessTable1List({
...form, ...form,
...this.page ...this.page
}) })

View File

@@ -10,7 +10,7 @@ export default `<template>
</template> </template>
<script> <script>
import { BusinessTable1List } from '@api/demo.business.table.1' import { businessTable1List } from '@api/demo.business.table.1'
export default { export default {
data () { data () {
@@ -57,7 +57,7 @@ export default {
}, },
fetchData () { fetchData () {
this.loading = true this.loading = true
BusinessTable1List({ businessTable1List({
...this.pagination ...this.pagination
}).then(res => { }).then(res => {
this.data = res.list this.data = res.list

View File

@@ -24,7 +24,7 @@
import '../install' import '../install'
import doc from './doc.md' import doc from './doc.md'
import code from './code.js' import code from './code.js'
import { BusinessTable1List } from '@api/demo.business.table.1' import { businessTable1List } from '@api/demo.business.table.1'
export default { export default {
data () { data () {
@@ -73,7 +73,7 @@ export default {
}, },
fetchData () { fetchData () {
this.loading = true this.loading = true
BusinessTable1List({ businessTable1List({
...this.pagination ...this.pagination
}).then(res => { }).then(res => {
this.data = res.list this.data = res.list

View File

@@ -23,7 +23,7 @@
</template> </template>
<script> <script>
import { PluginMocksAjax } from '@api/demo.plugins.mocks.ajax' import { pluginMocksAjax } from '@api/demo.plugins.mocks.ajax'
export default { export default {
name: 'demo-plugins-mock-ajax', name: 'demo-plugins-mock-ajax',
data () { data () {
@@ -39,7 +39,7 @@ export default {
}, },
methods: { methods: {
ajax () { ajax () {
PluginMocksAjax() pluginMocksAjax()
.then(res => { .then(res => {
this.table.columns = Object.keys(res.list[0]).map(e => ({ this.table.columns = Object.keys(res.list[0]).map(e => ({
label: e, label: e,