diff --git a/frontend-web/src/assets/position-roundtable/edit-task.svg b/frontend-web/src/assets/position-roundtable/edit-task.svg
new file mode 100644
index 00000000..ab6762a2
--- /dev/null
+++ b/frontend-web/src/assets/position-roundtable/edit-task.svg
@@ -0,0 +1 @@
+
diff --git a/frontend-web/src/position-roundtable/demo/position-roundtable-demo.ts b/frontend-web/src/position-roundtable/demo/position-roundtable-demo.ts
index f4bd57b4..ebd81e9f 100644
--- a/frontend-web/src/position-roundtable/demo/position-roundtable-demo.ts
+++ b/frontend-web/src/position-roundtable/demo/position-roundtable-demo.ts
@@ -97,6 +97,7 @@ export function getPositionDemoTask(): PositionTask {
direction: String(task.direction ?? ""),
source: String(task.source ?? "演示数据"),
issuedAt: String(task.issuedAt ?? ""),
+ priority: String(task.priority ?? "紧急"),
};
}
diff --git a/frontend-web/src/position-roundtable/lib/mock-task-source.ts b/frontend-web/src/position-roundtable/lib/mock-task-source.ts
index 206084a5..cc7f0d7c 100644
--- a/frontend-web/src/position-roundtable/lib/mock-task-source.ts
+++ b/frontend-web/src/position-roundtable/lib/mock-task-source.ts
@@ -13,6 +13,7 @@ export interface PositionTask {
direction: string;
source: string;
issuedAt: string;
+ priority?: string;
}
export const MOCK_POSITION_TASKS: readonly PositionTask[] = [
@@ -53,6 +54,7 @@ export function taskFromPositionSnapshot(
title: value(["title", "taskName", "name"], fallback.title),
description: value(["description", "taskContent", "overview", "content"], fallback.description),
direction: value(["direction", "taskDirection", "category"], fallback.direction),
+ priority: value(["priority", "level", "urgency"], fallback.priority ?? "紧急"),
source: (() => {
const source = value(["source", "taskSource", "sourceName"], fallback.source);
return source === "mock" ? "本系统创建" : source;
diff --git a/frontend-web/src/position-roundtable/pages/PositionRoundtablePage.tsx b/frontend-web/src/position-roundtable/pages/PositionRoundtablePage.tsx
index df40752e..41d491c1 100644
--- a/frontend-web/src/position-roundtable/pages/PositionRoundtablePage.tsx
+++ b/frontend-web/src/position-roundtable/pages/PositionRoundtablePage.tsx
@@ -74,6 +74,7 @@ import { textOfMessage } from "@/core/threads/utils";
import { desensitize } from "@/lib/desensitize";
import { cn } from "@/lib/utils";
import expandLogo from "@/assets/position-roundtable/expand-logo.svg";
+import editTaskIcon from "@/assets/position-roundtable/edit-task.svg";
import { listChains } from "@/roundtable-planning/api/chains";
import { Step1Panel } from "@/roundtable-planning/components/Step1Panel";
import { PositionIntentInput } from "@/position-roundtable/components/PositionIntentInput";
@@ -1071,6 +1072,7 @@ export default function PositionRoundtablePage({
const nextTask: PositionTask = {
...task,
title,
+ priority: taskDraft.priority?.trim() || task.priority || "紧急",
description: taskDraft.description.trim(),
direction: taskDraft.direction.trim() || task.direction,
source: taskDraft.source.trim() || task.source,
@@ -2594,34 +2596,33 @@ export default function PositionRoundtablePage({
{leftSidebarHidden && (
@@ -3878,6 +3879,82 @@ function TaskAnalysisPanel({
);
}
+function PositionRoundtableEntrySidebar({
+ task,
+ editable,
+ onEditTask,
+ chains,
+ loading,
+ value,
+ onChange,
+ onConfigure,
+}: {
+ task: PositionTask;
+ editable: boolean;
+ onEditTask: () => void;
+ chains: BusinessChain[];
+ loading: boolean;
+ value: string;
+ onChange: (value: string) => void;
+ onConfigure: (chainId: string) => void;
+}) {
+ const displayDescription =
+ task.id === DEFAULT_MOCK_POSITION_TASK_ID
+ ? "围绕暑期活动的游泳夏令营开展宣传,结合线上线下渠道吸引目标人群参与,持续提升活动影响力。"
+ : desensitize(task.description);
+
+ return (
+
+
+ {editable && (
+
+ )}
+ {desensitize(task.title)}
+
+ {desensitize(task.priority || "紧急")}
+ {desensitize(task.source)}
+ {desensitize(task.direction)}
+
+ {desensitize(task.description)}
+
+
+
+
+
+ 作业链条选择
+ {chains.length}
+
+
+ {loading ? (
+
正在加载作业链条…
+ ) : chains.length === 0 ? (
+
暂无可用作业链条
+ ) : (
+ chains.map((chain) => {
+ const selected = chain.id === value;
+ return (
+
+
+
+
+ );
+ })
+ )}
+
+
+
+ );
+}
+
function TaskInformationCard({
task,
editable,
@@ -3892,8 +3969,34 @@ function TaskInformationCard({
onCollapsedChange: (collapsed: boolean) => void;
}) {
return (
-
-
+
+
+
+ {desensitize(task.title)}
+
+
+ 紧急
+ {desensitize(task.source)}
+ {desensitize(task.direction)}
+
+
+ {desensitize(task.description)}
+
+
+
@@ -3973,6 +4077,20 @@ function TaskInformationEditDialog({
编辑任务信息
+
+
+
+
+