mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-11-09 13:53:38 +08:00
feat(storage): add new storage (#48)
* feat(storage): add new storage,新增 database 和 cookie 存储 * fix(storage): 区分用户,获取当前存储路径时,应该获取当前用户,用来区分用户 * fix: ts alias mapping * chore: remove lodash * fix(storage): replace lodash with lodash-es * fix(storage): initialization,Initialization failed, unable to write
This commit is contained in:
53
src/utils/storage/cookie.ts
Normal file
53
src/utils/storage/cookie.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { loadEnv } from "@build/utils";
|
||||
import { merge } from "lodash-es";
|
||||
import tsCookies from "typescript-cookie/dist/src/compat";
|
||||
|
||||
class Cookies {
|
||||
private static env = loadEnv();
|
||||
constructor() {}
|
||||
/**
|
||||
* 存储 cookie 值
|
||||
* @param name
|
||||
* @param value
|
||||
* @param cookieSetting
|
||||
*/
|
||||
set(name = "default", value = "", cookieSetting = {}) {
|
||||
const currentCookieSetting = {
|
||||
expires: 1
|
||||
};
|
||||
merge(currentCookieSetting, cookieSetting);
|
||||
tsCookies.set(
|
||||
`${Cookies.env.VITE_TITLE}-${Cookies.env.VITE_VERSION}-${name}`,
|
||||
value,
|
||||
currentCookieSetting
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 拿到 cookie 值
|
||||
* @param name
|
||||
* @returns
|
||||
*/
|
||||
get(name = "default"): any {
|
||||
return tsCookies.get(
|
||||
`${Cookies.env.VITE_TITLE}-${Cookies.env.VITE_VERSION}-${name}`
|
||||
);
|
||||
}
|
||||
/**
|
||||
* 拿到 cookie 全部的值
|
||||
* @returns
|
||||
*/
|
||||
getAll(): any {
|
||||
return tsCookies.get();
|
||||
}
|
||||
/**
|
||||
* 删除 cookie
|
||||
* @param name
|
||||
*/
|
||||
remove(name = "default") {
|
||||
tsCookies.remove(
|
||||
`${Cookies.env.VITE_TITLE}-${Cookies.env.VITE_VERSION}-${name}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export const cookies = new Cookies();
|
||||
87
src/utils/storage/db.ts
Normal file
87
src/utils/storage/db.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { loadEnv } from "@build/utils";
|
||||
import { LocalStorage, LowSync } from "lowdb";
|
||||
import { chain, cloneDeep } from "lodash-es";
|
||||
import { storageLocal } from ".";
|
||||
import { cookies } from "./cookie";
|
||||
type Data = {
|
||||
database: {};
|
||||
sys: {};
|
||||
};
|
||||
/**
|
||||
* db 数据存储,采用 LocalStorage存储
|
||||
*/
|
||||
class DB {
|
||||
private db: LowSync<Data>;
|
||||
private static env = loadEnv();
|
||||
constructor() {
|
||||
this.db = new LowSync<Data>(
|
||||
new LocalStorage<Data>(`${DB.env.VITE_TITLE}-${DB.env.VITE_VERSION}`)
|
||||
);
|
||||
this.initialization();
|
||||
this.db.chain = chain(this.db.data);
|
||||
}
|
||||
private initialization() {
|
||||
this.db.data = storageLocal.getItem(
|
||||
`${DB.env.VITE_TITLE}-${DB.env.VITE_VERSION}`
|
||||
) || { database: {}, sys: {} };
|
||||
this.db.write();
|
||||
}
|
||||
/**
|
||||
* 检查路径是否存在 不存在的话初始化
|
||||
* @param param0
|
||||
* @returns path
|
||||
*/
|
||||
pathInit({
|
||||
dbName = "database",
|
||||
path = "",
|
||||
user = true,
|
||||
validator = () => true,
|
||||
defaultValue = ""
|
||||
}): string {
|
||||
const uuid = cookies.get("uuid") || "ghost-uuid";
|
||||
const currentPath = `${dbName}.${user ? `user.${uuid}` : "public"}${
|
||||
path ? `.${path}` : ""
|
||||
}`;
|
||||
const value = this.db.chain.get(currentPath).value();
|
||||
if (!(value !== undefined && validator(value))) {
|
||||
this.db.chain.set(currentPath, defaultValue).value();
|
||||
this.db.write();
|
||||
}
|
||||
return currentPath;
|
||||
}
|
||||
/**
|
||||
*将数据存储到指定位置 | 路径不存在会自动初始化
|
||||
*
|
||||
* 效果类似于取值 dbName.path = value
|
||||
* @param param0
|
||||
*/
|
||||
dbSet({ dbName = "database", path = "", value = "", user = false }): void {
|
||||
const currentPath = this.pathInit({
|
||||
dbName,
|
||||
path,
|
||||
user
|
||||
});
|
||||
this.db.chain.set(currentPath, value).value();
|
||||
this.db.write();
|
||||
}
|
||||
/**
|
||||
* 获取数据
|
||||
*
|
||||
* 效果类似于取值 dbName.path || defaultValue
|
||||
* @param param0
|
||||
* @returns
|
||||
*/
|
||||
dbGet({
|
||||
dbName = "database",
|
||||
path = "",
|
||||
defaultValue = "",
|
||||
user = false
|
||||
}): any {
|
||||
const values = this.db.chain
|
||||
.get(this.pathInit({ dbName, path, user, defaultValue }))
|
||||
.value();
|
||||
return cloneDeep(values);
|
||||
}
|
||||
}
|
||||
|
||||
export const db = new DB();
|
||||
Reference in New Issue
Block a user