1.优化地区csv加载机制 2.修复数据库监控无法访问问题 3.增加了登录状态保存 4.针对session存储机制做适配 5.文件扫描机制优化,并行扫描速度更快
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* 地区数据模块级单例缓存。
|
||||
* 首次调用时 fetch /region.csv 并构建 idMap 和 parentMap,
|
||||
* 后续调用直接返回缓存,SPA 生命周期内只加载一次。
|
||||
*/
|
||||
|
||||
interface RegionItem {
|
||||
id: number;
|
||||
parentId: number;
|
||||
level: number;
|
||||
name: string;
|
||||
}
|
||||
|
||||
interface RegionCache {
|
||||
/** id → RegionItem,用于表格列的 id→name 转换 */
|
||||
idMap: Map<number, RegionItem>;
|
||||
/** parentId → children[],用于省/市/区下拉联动 O(1) 查找 */
|
||||
parentMap: Map<number, RegionItem[]>;
|
||||
/** 所有地区平铺数组 */
|
||||
list: RegionItem[];
|
||||
}
|
||||
|
||||
let _cache: RegionCache | null = null;
|
||||
|
||||
function parseCSV(text: string): RegionItem[] {
|
||||
const lines = text.split("\n").filter((l) => l.trim());
|
||||
const headers = lines[0].split(",").map((h) => h.trim());
|
||||
return lines.slice(1).map((line) => {
|
||||
const cols = line.split(",").map((c) => c.trim());
|
||||
const obj: any = {};
|
||||
headers.forEach((h, i) => {
|
||||
obj[h] = h === "name" ? cols[i] : Number(cols[i]);
|
||||
});
|
||||
return obj as RegionItem;
|
||||
});
|
||||
}
|
||||
|
||||
export async function useRegionCache(): Promise<RegionCache> {
|
||||
if (_cache) return _cache;
|
||||
|
||||
const res = await fetch("/region.csv");
|
||||
if (!res.ok) throw new Error("地区数据加载失败");
|
||||
const text = await res.text();
|
||||
const list = parseCSV(text);
|
||||
|
||||
const idMap = new Map<number, RegionItem>();
|
||||
const parentMap = new Map<number, RegionItem[]>();
|
||||
|
||||
for (const item of list) {
|
||||
idMap.set(item.id, item);
|
||||
if (!parentMap.has(item.parentId)) {
|
||||
parentMap.set(item.parentId, []);
|
||||
}
|
||||
parentMap.get(item.parentId)!.push(item);
|
||||
}
|
||||
|
||||
_cache = { idMap, parentMap, list };
|
||||
return _cache;
|
||||
}
|
||||
Reference in New Issue
Block a user