Skip to content

Commit f35b044

Browse files
committed
fix(groups): feed 组按开关显隐与命令准入补齐(REQ-201)
1 parent e3c14af commit f35b044

3 files changed

Lines changed: 9 additions & 9 deletions

File tree

‎app/src-tauri/src/commands_fragments.rs‎

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,7 @@ pub async fn capture_fragment(
6161
source: Option<String>,
6262
) -> Result<Fragment, String> {
6363
// 开关准入(后端不信前端隐藏——v4 §11.3 默认关纪律)
64-
{
65-
let guard = state.feature_flags.lock().map_err(|e| format!("开关锁失败: {}", e))?;
66-
if !guard.feed_capture {
67-
return Err("碎片捕获未启用(请在设置中开启 feed 捕获开关)".to_string());
68-
}
69-
}
64+
require_feed_enabled(&state)?;
7065
let text: String = text.trim().chars().take(FRAGMENT_TEXT_MAX).collect();
7166
let has_image = image_b64.as_deref().map(|s| !s.trim().is_empty()).unwrap_or(false);
7267
if text.is_empty() && !has_image {
@@ -201,6 +196,8 @@ pub fn resolve_fragment_image(
201196
state: State<'_, AppState>,
202197
fragment_id: i64,
203198
) -> Result<Option<String>, String> {
199+
// 开关准入(与 delete/移组对称——feed 能力默认关纪律,防绕过 UI 直调)
200+
require_feed_enabled(&state)?;
204201
if fragment_id <= 0 {
205202
return Err("无效的碎片 id".to_string());
206203
}

‎app/src/components/FeedFragmentList.tsx‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ function FragmentThumb({ fragment }: { fragment: Fragment }) {
3535
return () => {
3636
disposed = true;
3737
};
38-
}, [fragment]);
38+
// 依赖收窄到稳定基元(对象引用每次 load 都变,会触发无谓重新 resolve)
39+
}, [fragment.id, fragment.imagePath]);
3940
if (!url) return null;
4041
return (
4142
<img

‎app/src/components/NoteGroupPanel.tsx‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,15 @@ export default function NoteGroupPanel({ groupFilter, onGroupFilterChange, selec
9090
const load = useCallback(async () => {
9191
try {
9292
const list = await invoke<NoteGroup[]>("list_note_groups", { terrain: null });
93-
setGroups(list);
93+
// v4 §11.3 默认关纪律:feed 组仅开关开启时显示(开关关闭时碎片
94+
// 操作面整体不可见——命令层另有二次校验,防绕过 UI 直调)
95+
setGroups(feedCaptureOn ? list : list.filter((g) => g.terrain !== "feed"));
9496
const due = await invoke<number>("count_due_cards", { groupId: null });
9597
setDueTotal(due);
9698
} catch (e) {
9799
setStatus(`组加载失败: ${e}`);
98100
}
99-
}, []);
101+
}, [feedCaptureOn]);
100102

101103
useEffect(() => {
102104
void load();

0 commit comments

Comments
 (0)