1.2.0
Former-commit-id: eee1f4b4c260bfcbd529e5e7b9bfd851183ab029
This commit is contained in:
@@ -0,0 +1,416 @@
|
||||
import util from '@/libs/util';
|
||||
import db from '@/libs/db';
|
||||
import themeList from '@/assets/style/theme/list';
|
||||
|
||||
// 获取项目信息
|
||||
import packJson from '../../../package.json';
|
||||
|
||||
export default {
|
||||
state: {
|
||||
// 用户名
|
||||
username: '',
|
||||
// 拉取的最新版本信息
|
||||
releases: {},
|
||||
// D2Admin 版本
|
||||
version: packJson.version,
|
||||
// 有更新
|
||||
update: false,
|
||||
// 更新提醒弹窗
|
||||
updateNotify: false,
|
||||
// 全屏
|
||||
isFullScreen: false,
|
||||
// 灰度
|
||||
isGrayMode: false,
|
||||
// 主题
|
||||
themeList,
|
||||
// 现在激活的主题
|
||||
themeActiveName: themeList[0].name, // 这应该是一个名字 不是对象
|
||||
// 可以在多页 tab 模式下显示的页面
|
||||
tagPool: [],
|
||||
// 当前显示的多页面列表
|
||||
pageOpenedList: [
|
||||
{
|
||||
name: 'index',
|
||||
meta: {
|
||||
title: '首页',
|
||||
requiresAuth: false,
|
||||
},
|
||||
},
|
||||
],
|
||||
// 当前页面
|
||||
pageCurrent: '',
|
||||
},
|
||||
getters: {
|
||||
/**
|
||||
* @description 返回当前的主题信息 不是一个名字 而是所有的主题数据
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
themeActiveSetting(state) {
|
||||
return state.themeList.find(theme => theme.name === state.themeActiveName);
|
||||
},
|
||||
},
|
||||
mutations: {
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 将 state 中某一项存储到数据库 如果已经有的话就更新数据 需要 uuid
|
||||
* @param {state} state vuex state
|
||||
* @param {string} key key name
|
||||
*/
|
||||
d2adminVuex2DbByUuid(state, key) {
|
||||
const row = db.get(key).find({ uuid: util.uuid() });
|
||||
if (row.value()) {
|
||||
row.assign({ value: state[key] }).write();
|
||||
} else {
|
||||
db.get(key).push({
|
||||
uuid: util.uuid(),
|
||||
value: state[key],
|
||||
}).write();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 从数据库取值到 vuex 需要 uuid
|
||||
* @param {state} state vuex state
|
||||
* @param {object} param1 key and default value
|
||||
*/
|
||||
d2adminDb2VuexByUuid(state, { key, defaultValue }) {
|
||||
const stateObj = state;
|
||||
const row = db.get(key).find({ uuid: util.uuid() }).value();
|
||||
stateObj[key] = row ? row.value : defaultValue;
|
||||
},
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 删除数据库中对应 vuex 的某一个字段 需要 uuid
|
||||
* @param {state} state vuex state
|
||||
* @param {object} param1 key & empty value
|
||||
*/
|
||||
d2adminDbRemoveByUuid(state, { key, emptyValue }) {
|
||||
const stateObj = state;
|
||||
db.get(key).remove({ uuid: util.uuid() }).write();
|
||||
stateObj[key] = emptyValue;
|
||||
},
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 将 state 中某一项存储到数据库 如果已经有的话就更新数据 不需要 uuid 所有用户共享
|
||||
* @param {state} state vuex state
|
||||
* @param {string} key key name
|
||||
*/
|
||||
d2adminVuex2Db(state, key) {
|
||||
const row = db.get(key).find({ pub: 'pub' });
|
||||
if (row.value()) {
|
||||
row.assign({ value: state[key] }).write();
|
||||
} else {
|
||||
db.get(key).push({
|
||||
pub: 'pub',
|
||||
value: state[key],
|
||||
}).write();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 从数据库取值到 vuex 不需要 uuid 所有用户共享
|
||||
* @param {state} state vuex state
|
||||
* @param {object} param1 key and default value
|
||||
*/
|
||||
d2adminDb2Vuex(state, { key, defaultValue }) {
|
||||
const stateObj = state;
|
||||
const row = db.get(key).find({ pub: 'pub' }).value();
|
||||
stateObj[key] = row ? row.value : defaultValue;
|
||||
},
|
||||
/**
|
||||
* @class 通用工具
|
||||
* @description 删除数据库中对应 vuex 的某一个字段 不需要 uuid 所有用户共享
|
||||
* @param {state} state vuex state
|
||||
* @param {object} param1 key & empty value
|
||||
*/
|
||||
d2adminDbRemove(state, { key, emptyValue }) {
|
||||
const stateObj = state;
|
||||
db.get(key).remove({ pub: 'pub' }).write();
|
||||
stateObj[key] = emptyValue;
|
||||
},
|
||||
/**
|
||||
* @description 设置用户名
|
||||
* @class username
|
||||
* @param {state} state vuex state
|
||||
* @param {string} username username
|
||||
*/
|
||||
d2adminUsernameSet(state, username) {
|
||||
const stateObj = state;
|
||||
stateObj.username = username;
|
||||
this.commit('d2adminVuex2DbByUuid', 'username');
|
||||
},
|
||||
/**
|
||||
* @description 从数据库取用户名
|
||||
* @class username
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminUsernameLoad() {
|
||||
this.commit('d2adminDb2VuexByUuid', {
|
||||
key: 'username',
|
||||
defaultValue: '',
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @description 更新远端的版本信息
|
||||
* @class releases
|
||||
* @param {state} state vuex state
|
||||
* @param {object} releases info
|
||||
*/
|
||||
d2adminReleasesSet(state, releases) {
|
||||
const stateObj = state;
|
||||
stateObj.releases = releases;
|
||||
},
|
||||
/**
|
||||
* @description 设置是否有更新
|
||||
* @class update
|
||||
* @param {state} state vuex state
|
||||
* @param {boolean} update update value
|
||||
*/
|
||||
d2adminUpdateSet(state, update) {
|
||||
const stateObj = state;
|
||||
stateObj.update = update;
|
||||
},
|
||||
/**
|
||||
* @description 是否有更新的时候显示弹窗
|
||||
* @class updateNotify
|
||||
* @param {state} state vuex state
|
||||
* @param {boolean} update updateNotify value
|
||||
*/
|
||||
d2adminUpdateNotifySet(state, updateNotify) {
|
||||
const stateObj = state;
|
||||
stateObj.updateNotify = updateNotify;
|
||||
this.commit('d2adminVuex2Db', 'updateNotify');
|
||||
},
|
||||
/**
|
||||
* @description 是否有更新的时候显示弹窗 <- 从数据库更新这个设置
|
||||
* @class updateNotify
|
||||
* @param {state} state vuex state
|
||||
* @param {boolean} update updateNotify value
|
||||
*/
|
||||
d2adminUpdateNotifyLoad() {
|
||||
this.commit('d2adminDb2Vuex', {
|
||||
key: 'updateNotify',
|
||||
defaultValue: true,
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @class pageCurrent
|
||||
* @description 设置当前激活的页面 name
|
||||
* @param {state} state vuex state
|
||||
* @param {string} name new name
|
||||
*/
|
||||
d2adminPageCurrentSet(state, name) {
|
||||
const stateObj = state;
|
||||
stateObj.pageCurrent = name;
|
||||
},
|
||||
/**
|
||||
* @class tagPool
|
||||
* @description 保存 tagPool (候选池)
|
||||
* @param {state} state vuex state
|
||||
* @param {Array} tagPool tags
|
||||
*/
|
||||
d2adminTagPoolSet(state, tagPool) {
|
||||
const stateObj = state;
|
||||
stateObj.tagPool = tagPool;
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 更新页面列表上的某一项
|
||||
* @param {state} state vuex state
|
||||
* @param {info} param1 new page info
|
||||
*/
|
||||
d2adminPageOpenedListUpdateItem(state, { index, argu, query }) {
|
||||
// 更新页面列表某一项
|
||||
const page = state.pageOpenedList[index];
|
||||
page.argu = argu || page.argu;
|
||||
page.query = query || page.query;
|
||||
state.pageOpenedList.splice(index, 1, page);
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 从数据库载入分页列表
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminPageOpenedListLoad(state) {
|
||||
this.commit('d2adminDb2VuexByUuid', {
|
||||
key: 'pageOpenedList',
|
||||
defaultValue: state.pageOpenedList,
|
||||
});
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 新增一个 tag (打开一个页面)
|
||||
* @param {state} state vuex state
|
||||
* @param {object} param1 new tag info
|
||||
*/
|
||||
d2adminTagIncreate(state, { tag, argu, query }) {
|
||||
// 设置新的 tag 在新打开一个以前没打开过的页面时使用
|
||||
const newPage = tag;
|
||||
newPage.argu = argu || newPage.argu;
|
||||
newPage.query = query || newPage.query;
|
||||
newPage.argu = argu || newPage.argu;
|
||||
// 添加进当前显示的页面数组
|
||||
state.pageOpenedList.push(newPage);
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 关闭一个 tag (关闭一个页面)
|
||||
* @param {state} state vuex state
|
||||
* @param {string} name close tag name
|
||||
*/
|
||||
d2adminTagClose(state, name) {
|
||||
// 找到这个页面在已经打开的数据里是第几个
|
||||
const index = state.pageOpenedList.findIndex(page => page.name === name);
|
||||
if (index >= 0) {
|
||||
state.pageOpenedList.splice(index, 1);
|
||||
}
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 关闭当前标签左边的标签
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminTagCloseLeft(state) {
|
||||
let currentIndex = 0;
|
||||
state.pageOpenedList.forEach((page, index) => {
|
||||
if (page.name === state.pageCurrent) {
|
||||
currentIndex = index;
|
||||
}
|
||||
});
|
||||
if (currentIndex > 0) {
|
||||
state.pageOpenedList.splice(1, currentIndex - 1);
|
||||
}
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 关闭当前标签右边的标签
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminTagCloseRight(state) {
|
||||
let currentIndex = 0;
|
||||
state.pageOpenedList.forEach((page, index) => {
|
||||
if (page.name === state.pageCurrent) {
|
||||
currentIndex = index;
|
||||
}
|
||||
});
|
||||
state.pageOpenedList.splice(currentIndex + 1);
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 关闭当前激活之外的 tag
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminTagCloseOther(state) {
|
||||
let currentIndex = 0;
|
||||
state.pageOpenedList.forEach((page, index) => {
|
||||
if (page.name === state.pageCurrent) {
|
||||
currentIndex = index;
|
||||
}
|
||||
});
|
||||
if (currentIndex === 0) {
|
||||
state.pageOpenedList.splice(1);
|
||||
} else {
|
||||
state.pageOpenedList.splice(currentIndex + 1);
|
||||
state.pageOpenedList.splice(1, currentIndex - 1);
|
||||
}
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class pageOpenedList
|
||||
* @description 关闭所有 tag
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminTagCloseAll(state) {
|
||||
state.pageOpenedList.splice(1);
|
||||
// 更新设置到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'pageOpenedList');
|
||||
},
|
||||
/**
|
||||
* @class isFullScreen
|
||||
* @description 切换全屏
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminFullScreenToggle(state) {
|
||||
const stateObj = state;
|
||||
if (state.isFullScreen) {
|
||||
util.exitFullScreen();
|
||||
stateObj.isFullScreen = false;
|
||||
} else {
|
||||
util.openFullScreen();
|
||||
stateObj.isFullScreen = true;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* @class isGrayMode
|
||||
* @description 切换灰度状态
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminGrayModeToggle(state) {
|
||||
const stateObj = state;
|
||||
stateObj.isGrayMode = !state.isGrayMode;
|
||||
},
|
||||
/**
|
||||
* @class isGrayMode
|
||||
* @description 设置灰度模式
|
||||
* @param {state} state vuex state
|
||||
* @param {boolean} value new value
|
||||
*/
|
||||
d2adminGrayModeSet(state, value) {
|
||||
const stateObj = state;
|
||||
stateObj.isGrayMode = value;
|
||||
},
|
||||
/**
|
||||
* @class themeActiveName
|
||||
* @description 激活一个主题(应用到dom上)
|
||||
* @param {state} state vuex state
|
||||
* @param {string} themeValue 需要激活的主题名称
|
||||
*/
|
||||
d2adminThemeSet(state, themeName) {
|
||||
const stateObj = state;
|
||||
// 检查这个主题在主题列表里是否存在
|
||||
const theme = state.themeList.find(e => e.name === themeName);
|
||||
if (theme) {
|
||||
// 设置 state
|
||||
stateObj.themeActiveName = themeName;
|
||||
} else {
|
||||
// 设置为列表第一个主题
|
||||
stateObj.themeActiveName = stateObj.themeList[0].name;
|
||||
}
|
||||
// 将 vuex 中的主题应用到 dom
|
||||
this.commit('d2adminTheme2dom');
|
||||
// 保存到数据库
|
||||
this.commit('d2adminVuex2DbByUuid', 'themeActiveName');
|
||||
},
|
||||
/**
|
||||
* @class themeActiveName
|
||||
* @description 将 vuex 中的主题应用到 dom
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminTheme2dom(state) {
|
||||
document.body.className = `theme-${state.themeActiveName}`;
|
||||
},
|
||||
/**
|
||||
* @class themeActiveName
|
||||
* @description 从数据库加载主题设置
|
||||
* @param {state} state vuex state
|
||||
*/
|
||||
d2adminThemeLoad(state) {
|
||||
this.commit('d2adminDb2VuexByUuid', {
|
||||
key: 'themeActiveName',
|
||||
defaultValue: state.themeList[0].name,
|
||||
});
|
||||
this.commit('d2adminTheme2dom');
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user