diff --git a/scripts/load_path.py b/scripts/load_path.py
index 50e27db..5fe6d29 100644
--- a/scripts/load_path.py
+++ b/scripts/load_path.py
@@ -6,6 +6,11 @@ MOD = "pipeline-sdlc"
PATHS_ANY = [
f"/{MOD}/index.ui",
+ # Tree 组件展开/折叠图标(bricks.path 指向 / 时,图标走 /imgs/ 而非 /bricks/imgs/)
+ "/imgs/node-expand.svg",
+ "/imgs/node-collapse.svg",
+ "/imgs/open-folder.svg",
+ "/imgs/close-folder.svg",
]
PATHS_LOGINED = [
diff --git a/wwwroot/api/task_tree.dspy b/wwwroot/api/task_tree.dspy
index c01ca54..77a2dd8 100644
--- a/wwwroot/api/task_tree.dspy
+++ b/wwwroot/api/task_tree.dspy
@@ -108,13 +108,14 @@ async with DBPools().sqlorContext(dbname) as sor:
"label": "🗂 {} [{}] ({})".format(iname, istatus, cnt),
"is_leaf": False,
})
- # 未分配迭代(无 iteration_id 的任务)
+ # 未分配迭代(无 iteration_id 的任务)—— 有未分配任务才显示
none_cnt = sum(1 for t in all_tasks if not _iter_of(t))
- nodes.append({
- "id": "iter:__none__",
- "label": "🗂 未分配迭代 ({})".format(none_cnt),
- "is_leaf": False,
- })
+ if none_cnt > 0:
+ nodes.append({
+ "id": "iter:__none__",
+ "label": "🗂 未分配迭代 ({})".format(none_cnt),
+ "is_leaf": False,
+ })
return json.dumps(nodes, ensure_ascii=False)
if node_id.startswith('iter:'):
diff --git a/wwwroot/imgs/close-folder.svg b/wwwroot/imgs/close-folder.svg
new file mode 100644
index 0000000..c766c0d
--- /dev/null
+++ b/wwwroot/imgs/close-folder.svg
@@ -0,0 +1 @@
+
diff --git a/wwwroot/imgs/node-collapse.svg b/wwwroot/imgs/node-collapse.svg
new file mode 100644
index 0000000..667639b
--- /dev/null
+++ b/wwwroot/imgs/node-collapse.svg
@@ -0,0 +1 @@
+
diff --git a/wwwroot/imgs/node-expand.svg b/wwwroot/imgs/node-expand.svg
new file mode 100644
index 0000000..626b25a
--- /dev/null
+++ b/wwwroot/imgs/node-expand.svg
@@ -0,0 +1 @@
+
diff --git a/wwwroot/imgs/open-folder.svg b/wwwroot/imgs/open-folder.svg
new file mode 100644
index 0000000..245414d
--- /dev/null
+++ b/wwwroot/imgs/open-folder.svg
@@ -0,0 +1 @@
+