Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qjclaw-dmg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
AI-甘富林
qjclaw-dmg
Commits
8645a0f7
Commit
8645a0f7
authored
May 15, 2026
by
edy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(ui): refine task workbench output panel
parent
d60ecae9
Pipeline
#18461
failed
Changes
5
Pipelines
1
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
507 additions
and
448 deletions
+507
-448
AppSidebar.tsx
apps/ui/src/features/shell/AppSidebar.tsx
+1
-1
TaskPanelView.tsx
apps/ui/src/features/tasks/TaskPanelView.tsx
+156
-250
taskPanelData.ts
apps/ui/src/features/tasks/taskPanelData.ts
+66
-9
tasks.css
apps/ui/src/styles/tasks.css
+280
-188
index.ts
packages/shared-types/src/index.ts
+4
-0
No files found.
apps/ui/src/features/shell/AppSidebar.tsx
View file @
8645a0f7
...
@@ -70,7 +70,7 @@ export function AppSidebar({
...
@@ -70,7 +70,7 @@ export function AppSidebar({
<
nav
className=
"nav-list"
aria
-
label=
"主导航"
>
<
nav
className=
"nav-list"
aria
-
label=
"主导航"
>
{
[
{
[
{
id
:
"chat"
as
const
,
label
:
"对话"
},
{
id
:
"chat"
as
const
,
label
:
"对话"
},
{
id
:
"tasks"
as
const
,
label
:
"
任务面板
"
},
{
id
:
"tasks"
as
const
,
label
:
"
工作台
"
},
{
id
:
"knowledge"
as
const
,
label
:
ui
.
knowledge
},
{
id
:
"knowledge"
as
const
,
label
:
ui
.
knowledge
},
{
id
:
"plugins"
as
const
,
label
:
ui
.
plugins
},
{
id
:
"plugins"
as
const
,
label
:
ui
.
plugins
},
{
id
:
"settings"
as
const
,
label
:
ui
.
settings
}
{
id
:
"settings"
as
const
,
label
:
ui
.
settings
}
...
...
apps/ui/src/features/tasks/TaskPanelView.tsx
View file @
8645a0f7
This diff is collapsed.
Click to expand it.
apps/ui/src/features/tasks/taskPanelData.ts
View file @
8645a0f7
import
type
{
TaskPanelItem
}
from
"@qjclaw/shared-types"
import
type
{
TaskPanelItem
}
from
"@qjclaw/shared-types"
export
interface
TaskPanelSummary
{
creditsUsed
:
number
messageCount
:
number
artifactCount
:
number
employeeCount
:
number
}
function
toDateInputValue
(
date
:
Date
)
{
function
toDateInputValue
(
date
:
Date
)
{
const
year
=
date
.
getFullYear
()
const
year
=
date
.
getFullYear
()
const
month
=
String
(
date
.
getMonth
()
+
1
).
padStart
(
2
,
"0"
)
const
month
=
String
(
date
.
getMonth
()
+
1
).
padStart
(
2
,
"0"
)
...
@@ -25,12 +32,15 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -25,12 +32,15 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"整理本周选题方向与发布节奏"
,
taskTitle
:
"整理本周选题方向与发布节奏"
,
status
:
"running"
,
status
:
"running"
,
statusDetail
:
"正在汇总账号定位、目标人群和栏目节奏"
,
statusDetail
:
"正在汇总账号定位、目标人群和栏目节奏"
,
creditsUsed
:
1280
,
messageCount
:
36
,
updatedAt
:
"10:42"
,
artifacts
:
[
artifacts
:
[
{
id
:
"artifact-content-outline"
,
name
:
"选题规划草稿.md"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/选题规划草稿.md"
},
{
id
:
"artifact-content-outline"
,
name
:
"选题规划草稿.md"
,
kind
:
"文档"
,
summary
:
"本周内容主线、栏目节奏与素材需求草案。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/选题规划草稿.md"
},
{
id
:
"artifact-content-calendar"
,
name
:
"发布日历.xlsx"
,
kind
:
"表格"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/发布日历.xlsx"
},
{
id
:
"artifact-content-calendar"
,
name
:
"发布日历.xlsx"
,
kind
:
"表格"
,
summary
:
"按平台拆分的发布排期与负责人视图。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/发布日历.xlsx"
},
{
id
:
"artifact-content-persona"
,
name
:
"目标人群画像.md"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/目标人群画像.md"
},
{
id
:
"artifact-content-persona"
,
name
:
"目标人群画像.md"
,
kind
:
"文档"
,
summary
:
"核心受众痛点、决策因素与内容偏好。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/目标人群画像.md"
},
{
id
:
"artifact-content-topics"
,
name
:
"栏目选题池.csv"
,
kind
:
"表格"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/栏目选题池.csv"
},
{
id
:
"artifact-content-topics"
,
name
:
"栏目选题池.csv"
,
kind
:
"表格"
,
summary
:
"可复用选题、关键词和参考链接集合。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/栏目选题池.csv"
},
{
id
:
"artifact-content-brief"
,
name
:
"账号定位简报.pdf"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/账号定位简报.pdf"
}
{
id
:
"artifact-content-brief"
,
name
:
"账号定位简报.pdf"
,
kind
:
"文档"
,
summary
:
"账号定位、差异化表达和近期目标摘要。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/账号定位简报.pdf"
}
]
]
},
},
{
{
...
@@ -40,8 +50,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -40,8 +50,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"复盘昨日内容表现"
,
taskTitle
:
"复盘昨日内容表现"
,
status
:
"completed"
,
status
:
"completed"
,
statusDetail
:
"已完成互动数据摘要与优化建议"
,
statusDetail
:
"已完成互动数据摘要与优化建议"
,
creditsUsed
:
640
,
messageCount
:
18
,
updatedAt
:
"09:18"
,
artifacts
:
[
artifacts
:
[
{
id
:
"artifact-content-review"
,
name
:
"昨日内容复盘与下轮优化建议.md"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/昨日内容复盘与下轮优化建议.md"
}
{
id
:
"artifact-content-review"
,
name
:
"昨日内容复盘与下轮优化建议.md"
,
kind
:
"文档"
,
summary
:
"互动、转化和评论反馈的复盘结论。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/content/昨日内容复盘与下轮优化建议.md"
}
]
]
},
},
{
{
...
@@ -51,8 +64,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -51,8 +64,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"生成知乎回答结构"
,
taskTitle
:
"生成知乎回答结构"
,
status
:
"completed"
,
status
:
"completed"
,
statusDetail
:
"已完成回答大纲与首版正文"
,
statusDetail
:
"已完成回答大纲与首版正文"
,
creditsUsed
:
920
,
messageCount
:
24
,
updatedAt
:
"11:05"
,
artifacts
:
[
artifacts
:
[
{
id
:
"artifact-zhihu-answer"
,
name
:
"知乎回答初稿.md"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/zhihu/知乎回答初稿.md"
}
{
id
:
"artifact-zhihu-answer"
,
name
:
"知乎回答初稿.md"
,
kind
:
"文档"
,
summary
:
"问题拆解、回答结构和首版正文内容。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/zhihu/知乎回答初稿.md"
}
]
]
},
},
{
{
...
@@ -62,8 +78,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -62,8 +78,11 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"整理竞品问答素材"
,
taskTitle
:
"整理竞品问答素材"
,
status
:
"running"
,
status
:
"running"
,
statusDetail
:
"正在提取高赞回答结构和关键词"
,
statusDetail
:
"正在提取高赞回答结构和关键词"
,
creditsUsed
:
760
,
messageCount
:
21
,
updatedAt
:
"11:36"
,
artifacts
:
[
artifacts
:
[
{
id
:
"artifact-zhihu-research"
,
name
:
"竞品问答素材汇总-长文件名用于验证省略显示效果.xlsx"
,
kind
:
"表格"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/zhihu/竞品问答素材汇总-长文件名用于验证省略显示效果.xlsx"
}
{
id
:
"artifact-zhihu-research"
,
name
:
"竞品问答素材汇总-长文件名用于验证省略显示效果.xlsx"
,
kind
:
"表格"
,
summary
:
"高赞回答结构、关键词和引用素材汇总。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/zhihu/竞品问答素材汇总-长文件名用于验证省略显示效果.xlsx"
}
]
]
},
},
{
{
...
@@ -73,6 +92,9 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -73,6 +92,9 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"筛选高意向线索名单"
,
taskTitle
:
"筛选高意向线索名单"
,
status
:
"pending"
,
status
:
"pending"
,
statusDetail
:
"等待线索表上传后开始处理"
,
statusDetail
:
"等待线索表上传后开始处理"
,
creditsUsed
:
0
,
messageCount
:
4
,
updatedAt
:
"12:10"
,
artifacts
:
[]
artifacts
:
[]
},
},
{
{
...
@@ -82,12 +104,47 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
...
@@ -82,12 +104,47 @@ export const mockTaskPanelItems: TaskPanelItem[] = [
taskTitle
:
"生成活动海报文案"
,
taskTitle
:
"生成活动海报文案"
,
status
:
"failed"
,
status
:
"failed"
,
statusDetail
:
"素材包缺少主视觉图片"
,
statusDetail
:
"素材包缺少主视觉图片"
,
creditsUsed
:
360
,
messageCount
:
12
,
updatedAt
:
"18:22"
,
artifacts
:
[
{
id
:
"artifact-poster-brief"
,
name
:
"活动海报文案草稿.txt"
,
kind
:
"文档"
,
summary
:
"活动主题、主标题和利益点文案草稿。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/poster/活动海报文案草稿.txt"
}
]
},
{
id
:
"mock-task-yesterday-leads"
,
date
:
toDateInputValue
(
addDays
(
new
Date
(),
-
1
)),
expertName
:
"平台精准线索专家"
,
taskTitle
:
"清洗昨日线索表"
,
status
:
"completed"
,
statusDetail
:
"已完成重复线索剔除和等级标注"
,
creditsUsed
:
520
,
messageCount
:
16
,
updatedAt
:
"17:40"
,
artifacts
:
[
artifacts
:
[
{
id
:
"artifact-poster-brief"
,
name
:
"活动海报文案草稿.txt"
,
kind
:
"文档"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/poster/活动海报文案草稿.txt"
}
{
id
:
"artifact-yesterday-leads"
,
name
:
"昨日高意向线索清单.xlsx"
,
kind
:
"表格"
,
summary
:
"线索分级、跟进优先级和备注字段。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/leads/昨日高意向线索清单.xlsx"
},
{
id
:
"artifact-yesterday-followup"
,
name
:
"跟进话术建议.md"
,
kind
:
"文档"
,
summary
:
"按线索来源拆分的首轮沟通建议。"
,
url
:
"/Users/edy/Documents/qianjiangclaw/tasks/leads/跟进话术建议.md"
}
]
]
}
}
]
]
export
function
summarizeTaskPanelItems
(
items
:
TaskPanelItem
[]):
TaskPanelSummary
{
const
employeeCount
=
new
Set
(
items
.
map
((
item
)
=>
item
.
expertName
)).
size
const
summary
=
items
.
reduce
<
TaskPanelSummary
>
((
nextSummary
,
item
)
=>
{
nextSummary
.
creditsUsed
+=
item
.
creditsUsed
??
0
nextSummary
.
messageCount
+=
item
.
messageCount
??
0
nextSummary
.
artifactCount
+=
item
.
artifacts
.
length
return
nextSummary
},
{
creditsUsed
:
0
,
messageCount
:
0
,
artifactCount
:
0
,
employeeCount
})
return
summary
}
export
async
function
loadTaskPanelItems
(
date
:
string
):
Promise
<
TaskPanelItem
[]
>
{
export
async
function
loadTaskPanelItems
(
date
:
string
):
Promise
<
TaskPanelItem
[]
>
{
return
mockTaskPanelItems
.
filter
((
item
)
=>
item
.
date
===
date
)
return
mockTaskPanelItems
.
filter
((
item
)
=>
item
.
date
===
date
)
}
}
apps/ui/src/styles/tasks.css
View file @
8645a0f7
This diff is collapsed.
Click to expand it.
packages/shared-types/src/index.ts
View file @
8645a0f7
...
@@ -861,6 +861,7 @@ export interface TaskPanelArtifact {
...
@@ -861,6 +861,7 @@ export interface TaskPanelArtifact {
id
:
string
;
id
:
string
;
name
:
string
;
name
:
string
;
kind
?:
string
;
kind
?:
string
;
summary
?:
string
;
url
?:
string
;
url
?:
string
;
}
}
...
@@ -871,6 +872,9 @@ export interface TaskPanelItem {
...
@@ -871,6 +872,9 @@ export interface TaskPanelItem {
taskTitle
:
string
;
taskTitle
:
string
;
status
:
TaskPanelStatus
;
status
:
TaskPanelStatus
;
statusDetail
:
string
;
statusDetail
:
string
;
creditsUsed
?:
number
;
messageCount
?:
number
;
updatedAt
?:
string
;
artifacts
:
TaskPanelArtifact
[];
artifacts
:
TaskPanelArtifact
[];
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment