feat: 导航/侧边栏菜单脱敏 + 圆桌会商各步输入框自适应高度
- 菜单标签展示层脱敏:useSidebarMenuItems 直接用 /api/sensitive-words 结果构造脱敏器,覆盖导航栏/三套侧边栏皮肤/三级子导航;菜单管理页用原始树不受影响 - 新增可复用 AutoGrowTextarea(自适应高度多行框),替换圆桌 Step1/2/3 输入框: 多行时自动扩展、到上限框内滚动;Step2 两个单行 input 改多行;统一 Enter 发送/Shift+Enter 换行 - 各步输入框最大展开高度翻倍(Step1 320 / Step2 280 / Step3 224) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
25e4e3dbc9
commit
6746fe4a78
9 files changed
+141
-29
No files matched your search
@@ -89,6 +89,22 @@ export function desensitize(text: string): string {
|
||||
return text.replace(_regex, (matched) => DESENSITIZE_MAP[matched] ?? matched);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用**指定映射**(而非全局 {@link DESENSITIZE_MAP})构造一个脱敏函数。
|
||||
*
|
||||
* 适用于「数据加载完就要立即用其结果脱敏、不能依赖全局 map 的异步回灌时序」的场景
|
||||
* (如侧边栏/导航栏菜单:直接用 `/api/sensitive-words` 查询结果计算标签,避免与
|
||||
* {@link replaceDesensitizeMap} 的 effect 时序竞态)。正则在构造时编译一次,可缓存复用。
|
||||
*
|
||||
* @param map 原始词 → 替换词
|
||||
* @returns `(text) => 脱敏后文本`;map 为空时返回恒等函数
|
||||
*/
|
||||
export function makeDesensitizer(map: Record<string, string>): (text: string) => string {
|
||||
const regex = buildRegex(map);
|
||||
if (!regex) return (text) => text;
|
||||
return (text) => text.replace(regex, (matched) => map[matched] ?? matched);
|
||||
}
|
||||
|
||||
/**
|
||||
* 深度脱敏:递归遍历对象 / 数组,对其中所有字符串值做 {@link desensitize},
|
||||
* 其余类型原样保留。返回**新值**(不修改入参),用于对结构化数据(如大屏 report-json
|
||||
|
||||
Reference in new issue
Block a user