新增 lightblue 主题与外观设置联动,圆桌 Step3 看板/report 统一配色;工作区侧边栏、输入框与轻应用 iframe 主题参数同步更新。 Co-authored-by: Cursor <cursoragent@cursor.com>
87 lines
2.2 KiB
TypeScript
87 lines
2.2 KiB
TypeScript
/**
|
|
* 脱敏词映射表
|
|
* key: 原始词(支持正则特殊字符,会被转义)
|
|
* value: 脱敏后替换词
|
|
*/
|
|
export const DESENSITIZE_MAP: Record<string, string> = {
|
|
态势: "TS",
|
|
滨海作战体系: "第一张网",
|
|
滨海作战部队: "第一张网",
|
|
'Taiwan Air Force Flight Units': "第二张网",
|
|
台海空军飞行部队: "第二张网",
|
|
空军: "KJ",
|
|
海军: "HJ",
|
|
陆军: "LJ",
|
|
陆战队: "LZD",
|
|
海巡: "HX",
|
|
憲兵: "XB",
|
|
資通電軍: "ZTDJ",
|
|
情报: "QB",
|
|
指挥: "ZH",
|
|
信息准备: "XX准备",
|
|
行为体: "XWT",
|
|
驱动因素: "QDYS",
|
|
叙事: "XS",
|
|
前三定: "QSD",
|
|
受众目标: "SZMB",
|
|
作战: "ZZ",
|
|
目的: "MD",
|
|
关键传播节点: "GJCBJD",
|
|
战法: "ZF",
|
|
行动: "XD",
|
|
打击: "DJ",
|
|
目标: "MB",
|
|
战力: "ZL",
|
|
筹划: "COH",
|
|
策划: "CEH",
|
|
模拟: "MN",
|
|
推演: "TY",
|
|
认知: "RZ",
|
|
触及: "CJ",
|
|
军: "J",
|
|
美军: "MJ",
|
|
台军: "TJ",
|
|
|
|
};
|
|
|
|
/**
|
|
* 将 DESENSITIZE_MAP 编译为单个正则,避免多次遍历字符串。
|
|
* 仅在模块首次加载时执行一次。
|
|
*/
|
|
function buildRegex(map: Record<string, string>): RegExp | null {
|
|
const keys = Object.keys(map);
|
|
if (keys.length === 0) return null;
|
|
const pattern = keys.map((k) => k.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|");
|
|
return new RegExp(pattern, "g");
|
|
}
|
|
|
|
let _regex: RegExp | null = buildRegex(DESENSITIZE_MAP);
|
|
|
|
/**
|
|
* 对文本进行脱敏处理,将 DESENSITIZE_MAP 中的词替换为对应脱敏词。
|
|
*
|
|
* @param text 原始文本
|
|
* @returns 脱敏后的文本
|
|
*
|
|
* @example
|
|
* desensitize("当前态势分析") // => "当前TS分析"
|
|
*/
|
|
export function desensitize(text: string): string {
|
|
if (!_regex) return text;
|
|
// 每次 exec 需要重置 lastIndex,使用 replace 更安全
|
|
return text.replace(_regex, (matched) => DESENSITIZE_MAP[matched] ?? matched);
|
|
}
|
|
|
|
/**
|
|
* 运行时动态追加脱敏词,追加后自动重编译正则。
|
|
*
|
|
* @param entries 要追加的词条,格式同 DESENSITIZE_MAP
|
|
*
|
|
* @example
|
|
* addDesensitizeEntries({ 情报: "QB", 指挥: "ZH" });
|
|
*/
|
|
export function addDesensitizeEntries(entries: Record<string, string>): void {
|
|
Object.assign(DESENSITIZE_MAP, entries);
|
|
_regex = buildRegex(DESENSITIZE_MAP);
|
|
}
|