2018-07-16 22:22:55 +08:00
|
|
|
import low from 'lowdb'
|
|
|
|
|
import LocalStorage from 'lowdb/adapters/LocalStorage'
|
2019-08-13 18:04:09 +08:00
|
|
|
import util from '@/libs/util'
|
2020-11-17 08:32:46 +08:00
|
|
|
import { cloneDeep } from 'lodash-es'
|
2018-07-16 22:22:55 +08:00
|
|
|
|
2018-12-14 11:16:10 +08:00
|
|
|
const adapter = new LocalStorage(`d2admin-${process.env.VUE_APP_VERSION}`)
|
2018-07-16 22:22:55 +08:00
|
|
|
const db = low(adapter)
|
|
|
|
|
|
2018-08-21 23:25:57 +08:00
|
|
|
db
|
|
|
|
|
.defaults({
|
|
|
|
|
sys: {},
|
|
|
|
|
database: {}
|
|
|
|
|
})
|
|
|
|
|
.write()
|
2018-07-16 22:22:55 +08:00
|
|
|
|
|
|
|
|
export default db
|
2019-08-13 18:04:09 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description 检查路径是否存在 不存在的话初始化
|
2019-08-20 22:15:25 +08:00
|
|
|
* @param {Object} payload dbName {String} 数据库名称
|
|
|
|
|
* @param {Object} payload path {String} 路径
|
|
|
|
|
* @param {Object} payload user {Boolean} 区分用户
|
|
|
|
|
* @param {Object} payload validator {Function} 数据校验钩子 返回 true 表示验证通过
|
|
|
|
|
* @param {Object} payload defaultValue {*} 初始化默认值
|
2019-08-13 18:04:09 +08:00
|
|
|
* @returns {String} 可以直接使用的路径
|
|
|
|
|
*/
|
2019-08-19 23:55:11 +08:00
|
|
|
export function pathInit ({
|
2019-08-13 18:04:09 +08:00
|
|
|
dbName = 'database',
|
|
|
|
|
path = '',
|
|
|
|
|
user = true,
|
|
|
|
|
validator = () => true,
|
|
|
|
|
defaultValue = ''
|
|
|
|
|
}) {
|
|
|
|
|
const uuid = util.cookies.get('uuid') || 'ghost-uuid'
|
|
|
|
|
const currentPath = `${dbName}.${user ? `user.${uuid}` : 'public'}${path ? `.${path}` : ''}`
|
|
|
|
|
const value = db.get(currentPath).value()
|
|
|
|
|
if (!(value !== undefined && validator(value))) {
|
|
|
|
|
db
|
|
|
|
|
.set(currentPath, defaultValue)
|
|
|
|
|
.write()
|
|
|
|
|
}
|
|
|
|
|
return currentPath
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description 将数据存储到指定位置 | 路径不存在会自动初始化
|
|
|
|
|
* @description 效果类似于取值 dbName.path = value
|
2019-08-20 22:15:25 +08:00
|
|
|
* @param {Object} payload dbName {String} 数据库名称
|
|
|
|
|
* @param {Object} payload path {String} 存储路径
|
|
|
|
|
* @param {Object} payload value {*} 需要存储的值
|
|
|
|
|
* @param {Object} payload user {Boolean} 是否区分用户
|
2019-08-13 18:04:09 +08:00
|
|
|
*/
|
|
|
|
|
export function dbSet ({
|
|
|
|
|
dbName = 'database',
|
|
|
|
|
path = '',
|
|
|
|
|
value = '',
|
|
|
|
|
user = false
|
|
|
|
|
}) {
|
|
|
|
|
db.set(pathInit({
|
|
|
|
|
dbName,
|
|
|
|
|
path,
|
|
|
|
|
user
|
|
|
|
|
}), value).write()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description 获取数据
|
|
|
|
|
* @description 效果类似于取值 dbName.path || defaultValue
|
2019-08-20 22:15:25 +08:00
|
|
|
* @param {Object} payload dbName {String} 数据库名称
|
|
|
|
|
* @param {Object} payload path {String} 存储路径
|
|
|
|
|
* @param {Object} payload defaultValue {*} 取值失败的默认值
|
|
|
|
|
* @param {Object} payload user {Boolean} 是否区分用户
|
2019-08-13 18:04:09 +08:00
|
|
|
*/
|
|
|
|
|
export function dbGet ({
|
|
|
|
|
dbName = 'database',
|
|
|
|
|
path = '',
|
|
|
|
|
defaultValue = '',
|
|
|
|
|
user = false
|
|
|
|
|
}) {
|
2020-05-06 19:26:19 +08:00
|
|
|
return cloneDeep(db.get(pathInit({
|
|
|
|
|
dbName,
|
|
|
|
|
path,
|
|
|
|
|
user,
|
|
|
|
|
defaultValue
|
|
|
|
|
})).value())
|
2019-08-13 18:04:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @description 获取存储数据库对象
|
2019-08-20 22:15:25 +08:00
|
|
|
* @param {Object} payload user {Boolean} 是否区分用户
|
2019-08-13 18:04:09 +08:00
|
|
|
*/
|
|
|
|
|
export function database ({
|
|
|
|
|
dbName = 'database',
|
|
|
|
|
path = '',
|
|
|
|
|
user = false,
|
|
|
|
|
validator = () => true,
|
|
|
|
|
defaultValue = ''
|
|
|
|
|
} = {}) {
|
2020-05-06 19:26:19 +08:00
|
|
|
return db.get(pathInit({
|
|
|
|
|
dbName, path, user, validator, defaultValue
|
|
|
|
|
}))
|
2019-08-13 18:04:09 +08:00
|
|
|
}
|