CNCEC_APP/uni_modules/uview-pro/libs/store/index.ts

89 lines
2.8 KiB
TypeScript
Raw Permalink Normal View History

2026-03-25 14:54:15 +08:00
/**
* name / Pinia store
* @param store Pinia store
* @param params { name: string, value: any }
* name a.b.c
*/
/**
*
* setStoreValue(userStore, { name: 'profile.avatar', value: 'xxx.png' })
* setStoreValueTyped(userStore, 'token', 'xxxx')
* setStoreValues(userStore, [{ name: 'token', value: 'xxx' }, { name: 'profile.avatar', value: 'img.png' }])
* getStoreValue(userStore, 'profile.avatar')
* resetStore(userStore, { token: '', profile: { avatar: '' } })
*/
export function setStoreValue<T extends object>(store: T, params: { name: string; value: any }): void {
const nameArr = params.name.split('.');
let obj: any = store;
if (nameArr.length >= 2) {
for (let i = 0; i < nameArr.length - 1; i++) {
if (!(nameArr[i] in obj)) {
obj[nameArr[i]] = {};
}
obj = obj[nameArr[i]];
}
obj[nameArr[nameArr.length - 1]] = params.value;
} else {
(store as any)[params.name] = params.value;
}
}
/**
*
* @param store Pinia store
* @param path profile.avatar
* @param value
*/
export function setStoreValueTyped<T, K extends keyof T>(store: T, path: K, value: T[K]): void;
export function setStoreValueTyped<T>(store: T, path: string, value: any): void {
const nameArr = path.split('.');
let obj: any = store;
if (nameArr.length >= 2) {
for (let i = 0; i < nameArr.length - 1; i++) {
if (!(nameArr[i] in obj)) {
obj[nameArr[i]] = {};
}
obj = obj[nameArr[i]];
}
obj[nameArr[nameArr.length - 1]] = value;
} else {
(store as any)[path] = value;
}
}
/**
* Pinia store
* @param store Pinia store
* @param values { name: string, value: any }[]
*/
export function setStoreValues<T extends object>(store: T, values: Array<{ name: string; value: any }>): void {
values.forEach(item => setStoreValue(store, item));
}
/**
*
* @param store Pinia store
* @param path profile.avatar
* @returns
*/
export function getStoreValue<T>(store: T, path: string): any {
const nameArr = path.split('.');
let obj: any = store;
for (let i = 0; i < nameArr.length; i++) {
if (obj == null) return undefined;
obj = obj[nameArr[i]];
}
return obj;
}
/**
* Pinia store
* @param store Pinia store
* @param initial
*/
export function resetStore<T extends object>(store: T, initial: Partial<T>): void {
Object.keys(initial).forEach(key => {
(store as any)[key] = (initial as any)[key];
});
}