Agent 任务系统 v2.1 产品需求文档(PRD)
| 项 | 内容 |
|---|---|
| 文档版本 | v2.1 |
| 产出时间 | 2026-04-24 |
| 产品形态 | Web 管理后台(Next.js 14 + NestJS + PostgreSQL) |
| 文档来源 | 基于高保真原型 agent_task_system_merged.html 反向拆解 |
| 说明 | 本文档按模块编写 PRD,每个模块包含:页面目标、页面结构、数据字段、按钮级操作细节、表单字段、交互规则、提示反馈 |
一、产品概述
1.1 产品定位
企业级 Agent 任务自动化平台,提供基于角色权限的 Skill 调度与管理能力,支持龙虾 Agent + 脚本引擎双执行器架构。
1.2 核心能力
- 权限体系:组织(公司 → 部门 → 小组)→ 角色(部门级)→ 菜单/产品/Skill/账号四维权限
- 产品链路:产品 → 渠道码(内导 + 自然)→ 平台产品账号 → 归属用户
- Skill 中心:龙虾 Agent + 脚本模板双执行器,支持参数映射与测试台
- 任务调度:四步向导创建任务、交集校验、实时执行、定时调度
- 观测能力:任务列表、Skill 调用日志、操作日志、统计报表
- 系统设置:执行器节点管理、脚本模板库、定时任务
1.3 默认账号
- 用户名:
admin/ 密码:admin123 - 登录成功后进入仪表盘
二、系统模块总览
| 编号 | 模块名 | 分组 | 核心职责 |
|---|---|---|---|
| 01 | 登录页 | 入口 | 账号密码 + 验证码登录 |
| 02 | 仪表盘 | 首页 | 系统运行概览、快捷入口、实时数据 |
| 03 | 组织架构 | 权限管理 | 公司/部门/小组三级树 |
| 04 | 角色管理 | 权限管理 | 部门级角色 + 四维权限配置 |
| 05 | 用户管理 | 权限管理 | 用户 CRUD、多角色绑定、跨部门授权 |
| 12 | 菜单管理 | 权限管理 | 菜单树 + 按钮权限维护 |
| 06 | 产品管理 | 产品管理 | 产品 CRUD、渠道码绑定、批量导入 |
| 07 | 渠道码管理 | 产品管理 | 内导/自然渠道码独立管理、产品绑定 |
| 13 | 平台套件 | 产品管理 | 平台 + 产品代号两级关系维护 |
| 08 | 平台产品账号 | 平台账号 | 用户自管平台登录凭据、连通测试 |
| 09 | Skill 管理 | Skill 中心 | 双执行器 Skill 注册、参数映射、测试 |
| 14 | Skill 调用日志 | Skill 中心 | 历史调用审计、详情与日志回放 |
| 10 | 任务创建 | 任务中心 | 四步向导:Skill → 产品 → 参数 → 确认 |
| 11 | 任务列表 | 任务中心 | 任务检索、取消、重试、详情查看 |
| 15 | 操作日志 | 日志 | 系统增删改 + 登录审计 |
| 16 | 统计报表 | 日志 | 多维度可视化统计 |
| 17 | 执行器配置 | 系统设置 | 龙虾/脚本执行器节点配置 |
| 18 | 脚本模板管理 | 系统设置 | Python/Node/Shell 模板库 |
| 19 | 定时任务 | 系统设置 | Cron 调度、执行记录、手动触发 |
三、全局业务规则(RB)
| 编号 | 规则 | 说明 |
|---|---|---|
| RB-01 | 角色归属部门 | 角色分"全局角色"与"部门级角色",部门级角色仅在所属部门内可选 |
| RB-02 | 用户多角色取并集 | 用户可绑定多个角色,有效权限 = ∪ 所有角色的权限 |
| RB-03 | 密码规则 | 至少 6 位;重置后原 Token 失效 |
| RB-04 | 删除用户级联 | 用户删除后,角色绑定与平台产品账号一并清除 |
| RB-06 | 菜单权限 | 角色的菜单权限决定左侧导航可见项 |
| RB-07 | Skill 权限并集 | 任务创建仅展示当前用户所有角色 skill_scope 的并集 |
| RB-08 | 部门切换清空角色 | 用户切换部门时自动清空已选角色(避免权限跨部门带入) |
| RB-09 | 渠道码必填 | 新建产品时 内导渠道码 与 自然渠道码 均必填 |
| RB-12 | 产品范围交集校验 | 任务可选产品 = Skill.product_scope ∩ 用户角色.data_scope |
| RB-13 | 执行器类型二选一 | Skill 的执行器 = 龙虾 Agent 或 脚本模板(互斥);执行器配置仅超级管理员可改 |
四、全局交互规范
4.1 Toast 反馈
- 成功:绿底绿字(
#dcfce7/#166534),文案格式✅ xxx 成功 - 错误:红底红字(
#fee2e2/#991b1b),文案格式❌ xxx或请输入 xxx - 显示时长:2.5 秒自动隐藏,从顶部透明下滑渐现
4.2 Modal 弹窗
- 所有模态框右上角提供
✕关闭 - 点击半透明遮罩关闭弹窗
- 保存按钮通常位于页脚右侧(主按钮紫色
#6366f1),取消按钮左侧(灰色边框) - 删除确认弹窗独立样式:红色主按钮、🗑️ 图标、说明"此操作不可恢复"
4.3 表格通用
- 表头支持批量选择(复选框)
- 行内操作列放在最右:常见为
编辑 / 删除 / 其他 - 搜索 + 下拉筛选均实时触发(
oninput/onchange→filterT()) - 分页栏位于底部:
共 X 条+ 页码
4.4 权限与可见性
- 左侧菜单由当前角色的
menu_scope决定(RB-06) - 按钮级权限由
button_code决定(如product:create) - 超级管理员 (
super_admin) 可见全部模块
五、模块 PRD 详情
01. 登录页
1.1 页面目标
通过账号密码(+ 验证码)验证用户身份,登录成功后签发 JWT Token 并跳转仪表盘。
1.2 页面结构
| 区块 | 内容 |
|---|---|
| 左侧品牌区 | 产品名 🤖 Agent任务系统、Slogan、4 条核心特性 |
| 右侧登录表单 | 标题、欢迎语、用户名 / 密码 / 验证码输入、选项栏、登录按钮、页脚 |
| Toast 反馈区 | 右上角,登录结果提示 |
1.3 表单字段
| 字段 | 类型 | 必填 | 默认 | 校验 |
|---|---|---|---|---|
| 用户名 / 邮箱 | text | 是 | admin |
非空,否则显示"请输入用户名" |
| 密码 | password | 是 | admin123 |
非空,否则显示"请输入密码" |
| 验证码 | text(4 位) | 否(前端未强制) | 空 | 最多 4 位 |
| 记住登录 | checkbox | 否 | 已勾选 | — |
1.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 验证码图片 | A7X2 验证码图 |
点击刷新验证码(随机生成 4 位大写字母数字,排除易混字符) | 始终可用 | 无 |
| 选项栏 | 忘记密码? | Toast:请联系管理员重置密码 |
始终可用 | 无 |
| 表单页脚 | 登 录 |
1. 前端校验用户名/密码非空;2. 置 disabled + loading;3. 1.5s 后:若 admin/admin123 → Toast ✅ 登录成功!正在跳转... + 1s 后 postMessage('login-success') 通知父容器;否则 → Toast ❌ 用户名或密码错误 + 刷新验证码 |
校验通过后 | 无 |
1.5 交互规则
- 登录接口失败时,清空验证码并刷新
- 嵌入 iframe 中时通过
window.parent.postMessage('login-success','*')通知宿主应用展开侧边栏并跳转仪表盘
02. 仪表盘(首页)
2.1 页面目标
系统运行概览 + 实时数据统计 + 快捷入口,提供用户日常首屏视图。
2.2 页面结构
- 面包屑 + 用户信息 顶栏
- 快捷入口区:4 个方块(创建任务 / 管理 Skill / 平台账号 / 任务列表)
- 今日指标卡:6 张卡(今日任务总数 / 成功 / 失败 / 运行中 / 活跃用户 / 已注册 Skill)
- 图表行 1:最近 7 天任务趋势(柱状图)+ 执行器分布(环形 Legend)
- 图表行 2:热门 Skill Top 5 + 部门任务统计(进度条)
- 最新任务动态:任务列表(8 行,ID / Skill / 执行器 / 产品 / 创建人 / 状态 / 耗时 / 时间)
- 系统状态:4 组(龙虾 / 脚本引擎 / 数据库 / 消息队列)
2.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 快捷入口 | ⚡ 创建任务 | 跳转"10. 任务创建" | 始终 | 无 |
| 快捷入口 | 🧩 管理 Skill | 跳转"09. Skill 管理" | 始终 | 无 |
| 快捷入口 | 🔗 平台账号 | 跳转"08. 平台产品账号" | 始终 | 无 |
| 快捷入口 | 📋 任务列表 | 跳转"11. 任务列表" | 始终 | 无 |
| 最新任务动态 | 查看全部 → | 跳转"11. 任务列表" | 始终 | 无 |
| 图表柱子 | 柱子 hover | 高亮对应柱子并展示数值 | 鼠标悬停 | 无 |
2.4 交互规则
- 柱状图进入视图后自带高度缓动动画(100ms 起)
- 每 3 秒模拟一次实时刷新:有 30% 概率
今日任务总数 +1,其中 80% 加到"成功",20% 加到"失败" - 指标卡 hover 显示轻微阴影提升
2.5 提示反馈
- 无负面反馈(只读页面)
03. 组织架构
3.1 页面目标
维护 公司 → 部门 → 小组 三级树形结构,部门节点挂载角色与成员。
3.2 页面结构
- 左栏 · 组织树:搜索框 + 树(含展开/收起、当前选中高亮、新增按钮)
- 右栏 · 详情面板:组织信息(类型 / 成员数 / 下辖组数 / 负责人 / 状态 / 创建时间)+ 编辑/删除按钮
- 部门角色列表:角色名称 / 角色编码 / 成员数 / Skill 数 / 状态
- 部门成员列表:姓名 / 工号 / 所属小组 / 角色 / 入职日期 / 状态 + 导出按钮
- 弹窗:新增/编辑组织、确认删除
3.3 数据字段
- 组织树节点:组织名、图标(🏢 公司 / 🏬 部门 / 👥 小组)、成员数徽章
- 详情:类型(公司/部门/小组)、成员数、下辖组数、负责人、状态、创建时间
- 角色列表列:角色名称、角色编码、成员数、Skill 数、状态
- 成员列表列:姓名、工号、所属小组、角色(多标签)、入职日期、状态
3.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 组织树卡头 | + 新增 | 打开 新增组织 弹窗 |
始终 | 无 |
| 树节点 | ▼/▶ 折叠符 | toggleTree() 切换子节点展开/折叠 |
节点有子项 | 无 |
| 树节点 | 节点行 | selectOrg() 选中该节点、更新右侧详情面板(类型/成员/下辖组/徽章) |
始终 | 无 |
| 详情面板 | 编辑 | 打开 编辑组织 弹窗(标题动态) |
始终 | 无 |
| 详情面板 | 删除 | 打开 ⚠️ 确认删除 弹窗 |
始终 | 有 |
| 成员列表 | 导出 | 导出当前部门成员(CSV) | 始终 | 无 |
| 删除弹窗 | 确认删除 | Toast 已删除,关闭弹窗;子部门/人员自动移至上级 |
始终 | — |
| 新增/编辑弹窗 | 保存 | Toast 保存成功,关闭 |
校验通过 | 无 |
| 新增/编辑弹窗 | 取消 / ✕ | 关闭不保存 | 始终 | 无 |
3.5 表单字段(新增/编辑组织弹窗)
| 字段 | 类型 | 必填 | 默认 | 选项 | 备注 |
|---|---|---|---|---|---|
| 上级组织 | select | 否 | 星辰科技有限公司 | 公司/部门下拉 | 根节点无上级 |
| 组织名称 | input | 是 | — | — | 非空 |
| 组织类型 | select | 是 | — | 公司 / 部门 / 小组 | 必选 |
| 负责人 | select | 否 | — | 用户列表 | — |
| 排序号 | number | 否 | 0 | — | — |
| 状态 | select | 否 | 启用 | 启用 / 禁用 | — |
| 备注 | textarea(2 行) | 否 | — | — | — |
3.6 交互规则
- 删除节点时提示"删除后该组织下的子部门和人员将移至上级组织"
- 树节点高亮通过
.sel类控制 - 搜索框实时过滤树节点(前端)
04. 角色管理
4.1 页面目标
部门级角色管理,通过 4 个维度配置权限(菜单 + 产品范围 + Skill + 平台账号),支持多角色并集。
4.2 页面结构
- 筛选栏:搜索框(角色名/编码)+ 部门下拉 + 状态下拉 +
+ 新增角色按钮 - 角色列表:表格 10 列(含批量 checkbox)
- 新增/编辑弹窗:4 个 Tab
- 业务规则说明卡:RB-01 ~ RB-06
4.3 列表字段
复选框、角色名称、角色编码、所属部门、菜单权限(X 项/全部)、产品范围(X 个/全部)、Skill 数、平台账号(X 个/全部)、成员数、状态、操作
4.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | + 新增角色 | 打开弹窗,标题 新增角色、表单清空 |
始终 | 无 |
| 列表行 | 编辑 | 打开弹窗,标题 编辑角色 — {名},回填 |
每行 | 无 |
| 列表行 | 删除 | 删除(超级管理员行隐藏此按钮) | 每行(非 super_admin) | — |
| 弹窗 Tab | 📋 菜单权限 / 📦 产品范围 / 🧩 Skill 权限 / 🔗 平台账号 | switchRoleTab(i) 切换 |
弹窗打开时 | 无 |
| 菜单权限 Tab | 全选 checkbox | 级联选中所有子菜单 | 始终 | 无 |
| 弹窗 | 取消 / ✕ | 关闭 | 始终 | 无 |
| 弹窗 | 保存 | Toast 保存成功、关闭 |
必填校验通过 | 无 |
| 表头 | 全选 checkbox | 批量勾选所有行 | 始终 | 无 |
4.5 表单字段(弹窗)
基本信息(表单顶部,非 Tab 内)
| 字段 | 类型 | 必填 | 选项 |
|---|---|---|---|
| 角色名称 | input | 是 | — |
| 角色编码 | input | 是 | 唯一 |
| 所属部门 | select | 是 | 投放部 / 运营部 / 技术部 / 产品部 |
| 状态 | select | 否 | 启用 / 禁用 |
| 描述 | textarea | 否 | — |
Tab 0 菜单权限:菜单树 + 全选 checkbox,一级包含:首页、权限管理、产品管理、Skill 中心、任务中心。
Tab 1 产品范围:多选 checkbox,选项 ProductA ~ ProductD。
Tab 2 Skill 权限:多选 checkbox,选项:竞品分析 Agent、数据采集脚本、素材生成 Agent、评论监控脚本、投放优化 Agent、价格监控 Agent。
Tab 3 平台账号:表格(平台 / 账号 / 状态 / 绑定 checkbox)。
4.6 提示反馈
- 成功:
保存成功 - 失败:输入非空校验不通过时显示
请输入角色名称等
05. 用户管理
5.1 页面目标
用户 CRUD、部门-角色联动、跨组协作的额外产品授权、多角色绑定。
5.2 页面结构
- 筛选栏:搜索框 + 部门/角色/状态下拉 + 导出 +
+ 新增用户 - 用户列表:表格(复选框、用户名、工号、所属部门/分组、角色、平台产品账号数、额外授权数、状态、创建时间、操作)
- 新增/编辑用户弹窗
- 重置密码弹窗 / 删除确认弹窗
- 业务规则说明:RB-02、RB-03、RB-04、RB-08
5.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 导出 | 导出用户列表(CSV) | 始终 | 无 |
| 筛选栏 | + 新增用户 | 打开新增弹窗(清空) | 始终 | 无 |
| 列表行 | 编辑 | 打开编辑弹窗(回填) | 每行 | 无 |
| 列表行 | 重置密码 | 打开重置密码弹窗 | 每行 | 是(弹窗内) |
| 列表行 | 删除 | 打开删除确认弹窗 | 每行 | 是(弹窗内) |
| 表头 | 全选 checkbox | 批量选中所有行 | 始终 | 无 |
| 编辑弹窗·部门 | select change | onDeptChange():清空已选角色、刷新角色列表、Toast ⚠️ 已切换部门,角色已清空(RB-08) |
切换部门 | — |
| 编辑弹窗·角色 | 多选框 | 展开下拉,勾选/取消角色 | 已选部门 | 无 |
| 编辑弹窗 | + 添加授权 | addGrant() 追加一行(产品 select + 有效期 date + 删除按钮) |
始终 | 无 |
| 编辑弹窗·授权行 | 删除 | 移除该授权行 | 行存在 | 无 |
| 编辑弹窗 | 取消 | 关闭 | 始终 | 无 |
| 编辑弹窗 | 保存 | 校验后 Toast ✅ 保存成功 |
必填通过 | 无 |
| 重置密码弹窗 | 确认重置 | Toast ✅ 密码已重置;原 Token 失效 |
两次密码一致 | — |
| 删除确认弹窗 | 确认删除 | Toast ✅ 已删除;级联清除角色绑定与账号 |
始终 | — |
5.4 表单字段(新增/编辑)
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
| 用户名 | input | 是 | — | 唯一 |
| 密码 | password | 是(新增时) | — | 至少 6 位(RB-03) |
| 邮箱 | 否 | — | 格式校验 | |
| 手机号 | tel | 否 | — | 格式校验 |
| 所属部门 | select | 是 | — | tf/yy/tech/pm |
| 状态 | select | 否 | 启用 | 启用 / 禁用 |
| 绑定角色 | multi-select | 是 | — | 根据部门动态加载,至少选 1 个 |
| 额外产品授权 | 动态行(产品 select + 有效期 date) | 否 | 空 | 跨部门/小组协作用(RB-02 并集) |
部门-角色联动字典: - tf(投放部)→ 投放主管、投放专员、数据分析师 - yy(运营部)→ 运营主管、运营专员 - tech(技术部)→ 开发工程师、运维工程师、测试工程师 - pm(产品部)→ 产品经理、UI 设计师
5.5 提示反馈
- 保存成功 / 已删除 / 密码已重置(绿色)
请输入用户名/请至少选择一个角色/⚠️ 已切换部门,角色已清空(RB-08)(红色)
06. 产品管理
6.1 页面目标
产品 CRUD、渠道码(内导/自然)必填绑定、CSV 批量导入、多维筛选。
6.2 页面结构
- 统计卡:产品总数 / 启用中 / 已禁用 / 平台数
- 筛选栏:搜索 + 平台/部门/状态下拉 + 导出 + 📤 导入 +
+ 新增产品 - 产品列表:8 列 + 操作
- 新增/编辑弹窗 / 批量导入弹窗 / 删除确认弹窗
6.3 列表字段
复选框、产品名称、产品代号(唯一)、平台、部门/小组、内导渠道码(如 IC001)、自然渠道码(如 NC001)、负责人、状态
6.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 导出 | Toast 📥 导出成功 |
始终 | 无 |
| 筛选栏 | 📤 导入 | 打开 批量导入产品 弹窗 |
始终 | 无 |
| 筛选栏 | + 新增产品 | 打开新增弹窗 | 始终 | 无 |
| 列表行 | 编辑 / 删除 | 同模式 | 每行 | 删除是 |
| 导入弹窗 | 上传区 | fileInput.click() 触发文件选择 |
始终 | 无 |
| 导入弹窗 | 清除文件 | 清空已选文件,禁用 开始导入 |
文件已选 | 无 |
| 导入弹窗 | 📥 下载导入模板 | Toast 📥 模板已下载 |
始终 | 无 |
| 导入弹窗 | 开始导入 | Toast ✅ 成功导入 21 条,覆盖 2 条 |
文件已选 | 无 |
| 导入弹窗 | 取消 | 关闭 | 始终 | 无 |
| 新增/编辑弹窗 | 保存 | 校验渠道码必填(RB-09),Toast ✅ 保存成功 |
校验通过 | 无 |
6.5 表单字段
| 字段 | 类型 | 必填 | 选项 |
|---|---|---|---|
| 产品名称 | input | 是 | — |
| 产品代号 | input | 是(唯一) | — |
| 所属平台 | select | 是 | 小红书 / 抖音 / 微信公众号 / 微博 / Facebook / TikTok |
| 所属部门 | select | 是 | 投放部 / 运营部 / 技术部 |
| 所属小组 | select | 否 | 投放一/二组、内容运营组 等 |
| 负责人 | select | 否 | 用户列表 |
| 内导渠道码 | input | 是(RB-09) | 唯一 |
| 自然渠道码 | input | 是(RB-09) | 唯一 |
| 状态 | select | 否 | 启用 / 禁用 |
6.6 提示反馈
- 成功:
✅ 保存成功/✅ 成功导入 X 条,覆盖 Y 条 - 失败:
内导渠道码必填(RB-09)/自然渠道码必填(RB-09)
07. 渠道码管理
7.1 页面目标
按 Tab 分别管理 内导渠道码 与 自然渠道码,支持与产品的双向绑定。
7.2 页面结构
- 统计卡:渠道码总数 / 内导数 / 自然数 / 关联产品数
- Tab:内导渠道码 | 自然渠道码(互斥显示)
- 每个 Tab 内:搜索 + 状态下拉 +
+ 新增 {类型} 渠道码+ 列表 - 新增/编辑渠道码弹窗 / 绑定产品弹窗 / 删除确认弹窗
7.3 列表字段
渠道码(IC001 代码样式)、渠道名称、类型(内导/自然)、关联产品数、状态、创建时间、操作(编辑 / 绑定 / 删除)
7.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| Tab | 内导 / 自然 | switchTab(i) 切换列表 |
始终 | 无 |
| Tab 头 | + 新增内导/自然渠道码 | 打开新增弹窗(type 预设) | 始终 | 无 |
| 列表行 | 编辑 / 绑定 / 删除 | 分别打开对应弹窗 | 每行 | 删除是 |
| 绑定弹窗 | 解绑(每行) | 移除该产品绑定,Toast 已解绑 |
存在绑定 | 无 |
| 绑定弹窗 | 绑定 | 将下拉选中产品加入已绑定列表,Toast ✅ 绑定成功 |
选中产品 | 无 |
| 绑定弹窗 | 关闭 | 关闭 | 始终 | 无 |
7.5 表单字段(新增/编辑)
| 字段 | 类型 | 必填 | 选项 |
|---|---|---|---|
| 渠道码 | input | 是(唯一) | — |
| 渠道名称 | input | 是 | — |
| 渠道类型 | select | 是 | 内导(internal)/ 自然(natural) |
| 状态 | select | 否 | 启用 / 禁用 |
| 备注 | input | 否 | — |
7.6 提示反馈
✅ 保存成功/✅ 绑定成功/已解绑请输入渠道码/请输入渠道名称
08. 平台产品账号
8.1 页面目标
v2.1 变更:平台产品账号归属 用户(非角色),由用户自行维护各平台登录凭据,支持连通测试。
8.2 页面结构
- 变更说明条(顶部 note)
- 统计卡:我的账号总数 / 启用中 / 已禁用 / 覆盖平台
- 筛选栏:搜索 + 平台/状态下拉 +
+ 添加平台产品账号 - 账号列表:6 行、8 列
- 新增/编辑弹窗(含密码加密显示 + 连通测试)
- 连通测试结果弹窗 / 删除确认弹窗
8.3 列表字段
平台(图标+文字)、平台地址(URL)、产品代号(PROD001)、产品名称、登录账号、登录密码(●●●●●●)、谷歌密钥(●●●●5A2F 部分显示)、状态
8.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | + 添加平台产品账号 | 打开新增弹窗 | 始终 | 无 |
| 列表行 | 编辑 | 打开编辑弹窗,openEdit(plat, code, login) 回填 |
每行 | 无 |
| 列表行 | 测试 | 执行连通测试,打开测试结果弹窗(随机成功/失败) | 每行 | 无 |
| 列表行 | 删除 | 打开删除弹窗(有任务引用的账号禁止删除) | 每行 | 是 |
| 弹窗 | 选择平台(select) | onPlatChange() 自动填充平台名/地址、按平台过滤产品列表 |
始终 | — |
| 弹窗 | 👁️ 显示/隐藏密码 | togglePwd() 切换密码字段 type=password↔text |
始终 | 无 |
| 弹窗 | 🔌 连通测试 | 1.5s 后随机 Toast ✅ 连通成功! 或 连通失败 |
平台/账号已填 | 无 |
| 弹窗 | 保存 / 取消 | 保存后 ✅ 保存成功 |
校验通过 | 无 |
8.5 表单字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 选择平台 | select | 是 | 小红书(xhs) / 抖音(dy) / 微信公众号(wx) / 微博(wb) / Facebook(fb) / TikTok(tt) |
| 平台名称 | input readonly | — | 随平台联动 |
| 平台地址 | input readonly | — | 随平台联动(如 pro.xiaohongshu.com) |
| 产品代号 | select | 是 | 按所选平台 + 用户 data_scope 动态加载 |
| 登录账号 | input | 是 | — |
| 登录密码 | password | 是 | 👁️ 可切换显隐 |
| 谷歌密钥(2FA) | password | 否 | — |
| 状态 | select | 否 | 启用 / 禁用 |
平台信息字典(PLAT_INFO):
- xhs → 小红书 / pro.xiaohongshu.com / 产品 [PROD001, PROD002]
- dy → 抖音 / business.douyin.com / [PROD003, PROD004]
- wx → 微信公众号 / mp.weixin.qq.com / [PROD005]
- wb → 微博 / weibo.com / [PROD008]
- fb → Facebook / business.facebook.com / [PROD006]
- tt → TikTok / ads.tiktok.com / [PROD007]
8.6 提示反馈
✅ 已加载 {平台}平台信息/✅ 保存成功/✅ 已删除✅ 连通成功!/连通失败请选择平台/请选择产品代号
09. Skill 管理
9.1 页面目标
Skill 注册与管理,支持 双执行器(龙虾 Agent / 脚本模板)、产品范围绑定、JSON Schema 参数映射、内置测试台。
9.2 页面结构
- 统计卡:Skill 总数 / 龙虾数 / 脚本数 / 启用中
- 筛选栏:搜索 + 分类/执行器/状态下拉 +
+ 注册 Skill - Skill 列表:6 行、7 列
- 注册/编辑 Skill 弹窗:5 Tab(基本信息 / 执行器配置 / 产品范围 / 参数映射 / 测试台)
- 删除确认弹窗
9.3 列表字段
Skill 名称、分类、执行器(🦞 龙虾 / 📜 脚本)、产品范围(X 个或全部)、调用次数、成功率(带颜色)、状态
9.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | + 注册 Skill | 打开弹窗,标题 注册 Skill |
始终 | 无 |
| 列表行 | 编辑 / 删除 | 弹窗回填 / 删除弹窗 | 每行 | 删除是;已被角色引用需先解除 |
| 弹窗 Tab | 5 Tab 切换 | switchST(i) |
始终 | 无 |
| Tab 0 | 执行器类型 radio(龙虾/脚本) | selExec() 显隐对应配置区(RB-13) |
必选 | — |
| Tab 1 龙虾 | 🔌 测试连通性 | Toast ✅ 龙虾平台连通成功 |
配置完整 | 无 |
| Tab 1 脚本 | 脚本模板 select | onScriptTpl() 联动脚本类型 |
选中模板 | — |
| Tab 1 脚本 | + 添加环境变量 | addEnv() 追加 KV 行 |
脚本模式 | 无 |
| Tab 1 脚本 | 环境变量行·删除 | 移除该行 | 行存在 | 无 |
| Tab 2 | 产品多选框 | 展开下拉,勾选/取消 | 始终 | 无 |
| Tab 3 | inputSchema textarea | 可编辑 JSON Schema | 始终 | 合法 JSON |
| Tab 3 | 参数映射行 | 为每个字段选择「表达式/常量」 | 始终 | — |
| Tab 4 | 测试参数 JSON textarea | 可编辑 | 始终 | 合法 JSON |
| Tab 4 | ▶️ 执行测试 | runTest():每 500ms 追加日志,2.5s 完成 |
始终 | 无 |
| 弹窗 | 保存 | Toast ✅ Skill 已保存 |
校验通过 | 无 |
9.5 表单字段
Tab 0 基本信息
| 字段 | 类型 | 必填 |
|---|---|---|
| Skill 名称 | input | 是 |
| 分类 | select | 否(内容发布 / 数据采集 / 账号运营 / 广告投放 / 数据分析) |
| 描述 | textarea | 否 |
| 执行器类型 | radio | 是(RB-13,二选一) |
Tab 1 执行器配置 · 龙虾模式
| 字段 | 类型 | 必填 | 默认 |
|---|---|---|---|
| API 地址 | url | 是 | https://api.lobster-agent.com/v1 |
| API Key | password | 是 | sk-lobster-xxxx |
| Agent ID | input | 是 | agent_xhs_publish_01 |
Tab 1 执行器配置 · 脚本模式
| 字段 | 类型 | 必填 | 默认 |
|---|---|---|---|
| 脚本模板 | select | 是 | Python-通用HTTP / Python-数据清洗 / Shell-文件处理 / Node.js-API 调用 |
| 环境变量(KV 动态行) | 动态组 | 否 | 预填 1 行 API_KEY |
| 超时时间(秒) | number | 否 | 30 |
| 脚本类型 | input readonly | 否 | 联动自填 python/shell/node |
Tab 2 产品范围:多选 PROD001 ~ PROD006
Tab 3 参数映射:JSON Schema + 逐字段映射(表达式/常量)
Tab 4 测试台:测试参数 JSON + 日志输出区
9.6 提示反馈
✅ 龙虾平台连通成功/✅ Skill 已保存/✅ 已删除- 点击弹窗外关闭所有多选下拉
.ms-drop
10. 任务创建(四步向导)
10.1 页面目标
通过 4 步向导 创建任务:选择 Skill → 选择产品 → 填写参数 → 确认提交,过程包含 RB-07/RB-12 权限与交集校验。
10.2 页面结构
- 步骤条(4 个节点 + 连线)
- Step 1:Skill 卡片列表(搜索 + 选择)+ 规则提示条
- Step 2:产品卡片列表(搜索 + 选择)+ 交集提示条 + 渠道码自动填充提示
- Step 3:参数表单(自动回填 Skill + 产品 + 渠道码)
- Step 4:确认信息预览 + 校验通过条
- 成功弹窗:任务 ID + 基本信息 + "继续创建/查看任务列表"
10.3 关键字段
- Skill 卡:名称、执行器、分类、描述
- 产品卡:名称、代号、平台、投放组
- 参数表单:产品(只读)、发布内容、标签、发布时间、内导渠道码(只读,自动填充)
- 渠道码映射(PROD_CH):
PROD001→IC001/NC001等
10.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| Step 1 搜索框 | 输入 | filterSkills() 实时过滤卡片 |
始终 | 无 |
| Step 1 | Skill 卡 | selSkill() 记录选中,解锁下一步 |
始终 | 无 |
| Step 1 右下 | 下一步 → | goStep(2):当前步骤 done、下一步 active |
已选 Skill | 无 |
| Step 2 搜索框 | 输入 | filterProds() 实时过滤 |
始终 | 无 |
| Step 2 | 产品卡 | selProd() 记录选中 + 显示渠道码填充提示 |
交集内产品 | — |
| Step 2 右下 | 上一步 / 下一步 → | 前后切换 | 下一步需已选产品 | 无 |
| Step 3 | 标签输入 | Enter 键 addTag() 追加标签 |
始终 | 无 |
| Step 3 | 标签 × | 删除该标签 | 标签存在 | 无 |
| Step 3 右下 | 上一步 / 下一步 → | 切换 | 下一步需内容非空 | 无 |
| Step 4 右下 | 🚀 提交任务 | 打开成功弹窗(任务 ID TASK-20260423-001) |
始终 | 无 |
| 成功弹窗 | 继续创建 | resetWizard() 回到 Step 1、清空所有状态 |
始终 | 无 |
| 成功弹窗 | 查看任务列表 | 跳转"11. 任务列表" | 始终 | 无 |
| 成功弹窗 | ✕ | 关闭弹窗 | 始终 | 无 |
10.5 交互规则 / 校验
- Step 1 提示:
📋 仅展示您角色 skill_scope 中的 Skill(RB-07),合并所有角色取并集 - Step 2 提示:
⚠️ 产品范围 = Skill.product_scope ∩ 用户角色.data_scope(RB-12 交集校验) - 渠道码提示:选中产品后出现
✅ 渠道码已自动填充 — 内导: IC001 · 自然: NC001 - Step 4 校验条:
✅ Skill 权限校验通过 · 产品范围交集校验通过 · 参数校验通过 - 步骤切换使用
.step-ct.show类控制显示;步骤节点三态:active / done / pending
10.6 提示反馈
- 成功弹窗文案:
🎉 任务已提交+任务创建成功!+ 任务 ID - 搜索占位:
🔍 搜索 Skill 名称.../🔍 搜索产品...
11. 任务列表
11.1 页面目标
展示所有任务,支持状态/执行器/时间范围筛选,提供详情、取消、重试行内操作。
11.2 页面结构
- 统计卡 × 5:任务总数(1,234)/ 成功(1,089)/ 失败(45)/ 运行中(8)/ 超时(92)
- 筛选栏:搜索(任务 ID/Skill 名)+ 状态/执行器/时间范围下拉 + 导出
- 列表:任务 ID / Skill / 执行器 / 产品 / 创建人 / 状态 / 耗时 / 创建时间 / 操作
- 详情弹窗(4 Tab:基本信息 / 输入参数 / 执行结果 / 执行日志)
- 取消确认弹窗
- 分页
11.3 状态枚举
SUCCEEDED(绿)/ FAILED(红)/ RUNNING(黄,带 ...)/ PENDING(灰)/ TIMEOUT(橙)
11.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 搜索 / 状态 / 执行器 / 时间范围 | filterT() 按 data-q / data-st / data-exec 过滤 |
始终 | 无 |
| 筛选栏 | 导出 | Toast 📥 导出成功 |
始终 | 无 |
| 列表行 | 详情 | 打开 📋 任务详情 弹窗 |
每行 | 无 |
| 列表行 | 取消 | 打开取消确认弹窗 → Toast ✅ 任务已取消 |
仅 RUNNING / PENDING | 是 |
| 列表行 | 重试 | Toast 🔄 已重新提交 |
仅 FAILED / TIMEOUT | 无 |
| 详情弹窗 Tab | 基本信息 / 输入参数 / 执行结果 / 执行日志 | switchDT(i) |
弹窗打开时 | 无 |
| 分页 | 页码 | 切换当前页 | 始终 | 无 |
| 取消弹窗 | 取消 / 确认取消 | 关闭 / 向执行器发停止信号 | 始终 | — |
11.5 详情弹窗内容
- Tab 0 基本信息:任务 ID、Skill、执行器、产品、创建人、状态(带色标签)、创建时间、耗时
- Tab 1 输入参数:JSON 展示(product_id / content / tags / channel_code)
- Tab 2 执行结果:JSON 展示(status / post_id / post_url / published_at)
- Tab 3 执行日志:深色日志盒,带时间戳 + 彩色级别(状态变更用黄色/绿色)
11.6 按钮显示规则
| 状态 | 显示按钮 |
|---|---|
| SUCCEEDED | 详情 |
| FAILED | 详情 + 重试 |
| RUNNING | 详情 + 取消 |
| PENDING | 详情 + 取消 |
| TIMEOUT | 详情 + 重试 |
11.7 提示反馈
📥 导出成功/✅ 任务已取消/🔄 已重新提交- 取消弹窗文案:
⚠️ 取消任务/确定取消运行中的任务?/将向执行器发送停止信号
12. 菜单管理
12.1 页面目标
维护系统菜单树(目录/菜单/外链)+ 每个菜单下的按钮权限码。
12.2 页面结构
- 操作栏:+ 新增菜单 / 全部展开 / 全部收起
- 左侧 菜单树:可展开/收起、行内编辑按钮、点击行切换右侧按钮视图
- 右侧 按钮管理:标题显示当前菜单名、按钮列表表格、+ 新增按钮
- 菜单编辑弹窗 / 按钮编辑弹窗 / 删除确认弹窗
12.3 数据字段
- 菜单树:图标(📁 目录 / 📄 菜单 / 🔗 外链)、菜单名、行内"编辑"链接
- 按钮权限表:按钮名称、权限标识(
product:create)、类型(primary/default/danger/warning)、状态
按钮权限库(BTN_DATA)示例:
- product:新增 / 编辑 / 删除 / 导入 / 导出
- role:新增 / 编辑 / 删除 / 复制
- user:新增 / 编辑 / 删除 / 重置密码
- skill:注册 / 编辑 / 删除 / 测试
- channel:新增 / 编辑 / 绑定
- menu-mgmt:新增菜单 / 编辑菜单 / 新增按钮
12.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 操作栏 | + 新增菜单 | 打开菜单弹窗(清空) | 始终 | 无 |
| 操作栏 | 全部展开 / 全部收起 | expandAll() / collapseAll() 更新树 |
始终 | 无 |
| 菜单树 | ▼/▶ | toggleTree() 局部折叠 |
节点有子项 | 无 |
| 菜单树 | 行点击 | showBtns(key) 更新右侧按钮表 |
始终 | 无 |
| 菜单树 | 编辑(每行) | 打开菜单弹窗(回填) | 每行 | 无 |
| 按钮表 | + 新增按钮 | 打开按钮弹窗(自动填充所属菜单) | 当前已选菜单 | 无 |
| 按钮表 | 编辑(每行) | 打开按钮弹窗(回填) | 每行 | 无 |
| 按钮表 | 删除(每行) | 删除确认弹窗 → Toast ✅ 已删除 |
每行 | 是 |
| 弹窗 | 保存 | Toast ✅ 菜单已保存 / ✅ 按钮已保存 |
校验通过 | 无 |
12.5 表单字段
菜单编辑弹窗
| 字段 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
| 菜单类型 | select | 是 | directory | directory / menu / link;link 时隐藏组件路径与排序 |
| 菜单名称 | input | 是 | — | — |
| 父级菜单 | select | 否 | 顶级 | 顶级 / 权限管理 / 产品管理 / … |
| 路由路径 | input | 是 | — | 形如 /product |
| 图标 | input | 否 | — | — |
| 前端组件路径 | input | 否 | — | link 类型时隐藏 |
| 排序号 | number | 是 | 1 | — |
| 是否可见 | select | 否 | 显示 | 显示/隐藏 |
| 状态 | select | 否 | 启用 | 启用/禁用 |
按钮编辑弹窗
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 所属菜单 | input readonly | — | 自动填充 |
| 按钮名称 | input | 是 | — |
| 权限标识 | input | 是 | 唯一,形如 product:create |
| 按钮类型 | select | 否 | primary / default / danger / warning |
| 状态 | select | 否 | 启用 / 禁用 |
12.6 提示反馈
✅ 菜单已保存/✅ 按钮已保存/✅ 已删除- 删除确认说明:
删除需确保无子菜单、无角色引用
13. 平台套件
13.1 页面目标
维护 平台 + 产品代号 两级关系,为"08 平台产品账号"提供选择源。
13.2 页面结构
- 搜索栏:搜索平台名 +
+ 新增平台 - 平台卡片网格(主视图):5 个平台卡(小红书/抖音/Facebook/TikTok/微信公众号)
- 平台详情(点卡片后进入):← 返回 + 平台名 + 编辑/删除 + 信息块 + 产品代号表
- 平台编辑弹窗 / 产品代号编辑弹窗 / 删除确认弹窗
13.3 数据字段
- 平台卡:图标+名称、平台地址、产品数、账号数、状态
- 详情块:平台地址、状态、关联账号数
- 产品代号表:产品代号(
PROD001)、产品名称、关联账号数、状态
13.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 搜索栏 | 搜索 | filterCards() 按 data-q 过滤 |
始终 | 无 |
| 搜索栏 | + 新增平台 | 打开平台弹窗(清空) | 始终 | 无 |
| 平台卡 | 卡片点击 | showPlatDetail(key) 进入详情视图 |
始终 | 无 |
| 详情 | ← 返回 | hidePlatDetail() 回到列表 |
始终 | 无 |
| 详情 | 编辑平台 | 打开平台弹窗(回填名称/地址) | 始终 | 无 |
| 详情 | 删除平台 | 删除确认弹窗 → Toast ✅ 已删除 |
无关联账号 | 是 |
| 产品代号表 | + 新增产品代号 | 打开产品代号弹窗(自动填充平台) | 始终 | 无 |
| 产品代号表 | 编辑 / 删除(每行) | 弹窗 | 每行 | 删除是 |
| 弹窗 | 保存 | Toast ✅ 平台已保存 / ✅ 产品代号已保存 |
校验通过 | 无 |
13.5 表单字段
平台编辑弹窗
| 字段 | 类型 | 必填 |
|---|---|---|
| 平台名称 | input | 是 |
| 平台地址 | input | 是(https://...) |
| 平台图标 | input | 否(emoji 或 URL) |
| 备注 | textarea | 否 |
| 状态 | select | 否(启用/禁用) |
产品代号编辑弹窗
| 字段 | 类型 | 必填 |
|---|---|---|
| 所属平台 | input readonly | — |
| 产品代号 | input | 是(PROD001 格式) |
| 产品名称 | input | 是 |
| 状态 | select | 否 |
13.6 提示反馈
✅ 平台已保存/✅ 产品代号已保存/✅ 已删除- 删除说明:
已关联账号的平台/产品需先解除
14. Skill 调用日志
14.1 页面目标
展示全部 Skill 调用历史,支持多维筛选、查看详情与日志回放、CSV 导出。
14.2 页面结构
- 统计卡 × 4:总调用(12,456)/ 成功(12,102)/ 失败(354)/ 平均耗时(2.4s)
- 筛选栏:搜索(Skill/调用者)+ 状态/执行器/时间范围下拉 + 导出 CSV
- 列表:调用 ID / Skill / 执行器 / 产品 / 调用者 / 状态 / 耗时 / 时间 / 操作
- 详情弹窗:4 Tab(基本信息 / 请求参数 / 响应结果 / 执行日志)
- 分页
14.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 搜索 / 状态 / 执行器 / 时间范围 | filterT() |
始终 | 无 |
| 筛选栏 | 导出 CSV | Toast 📥 导出成功 |
始终 | 无 |
| 列表行 | 详情 | 打开详情弹窗 | 每行 | 无 |
| 详情弹窗 Tab | 切换 | switchLT(i) |
弹窗打开 | 无 |
14.4 详情弹窗
- 基本信息:调用 ID(
LOG-20260423-001)、Skill、执行器、调用者(含分组)、状态、耗时、时间 - 请求参数:JSON
- 响应结果:JSON(post_id / post_url 等)
- 执行日志:带时间戳、彩色级别的日志盒
14.5 状态枚举
SUCCESS / FAILED / TIMEOUT
14.6 提示反馈
📥 导出成功
15. 操作日志(审计)
15.1 页面目标
记录全局的新增/编辑/删除/登录/导出行为,支持审计追踪与变更对比。
15.2 页面结构
- 筛选栏:搜索(操作人/模块)+ 模块/操作/时间下拉 + 导出
- 列表:日志 ID(
OPLOG-xxx)/ 操作人 / 模块 / 操作 / 描述 / IP / 时间 - 详情弹窗:基本信息 + 请求参数 JSON + 变更 before/after JSON 对比
- 分页
15.3 模块与操作枚举
- 模块:用户管理 / 角色管理 / 产品管理 / Skill 管理 / 任务管理 / 平台产品账号 / 登录
- 操作:新增 / 编辑 / 删除 / 登录 / 导出
15.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 搜索 / 模块 / 操作 | filterT() 过滤 |
始终 | 无 |
| 筛选栏 | 导出 | Toast 📥 导出成功 |
始终 | 无 |
| 列表行 | 详情 | 打开详情弹窗 | 每行 | 无 |
| 详情弹窗 | 关闭 | 关闭弹窗 | 始终 | 无 |
15.5 提示反馈
📥 导出成功
16. 统计报表
16.1 页面目标
多维度可视化展板:任务趋势、执行器分布、状态分布、Skill/产品/用户排行。
16.2 页面结构
- KPI 卡 × 4:任务总数 / 成功率 / 平均耗时 / 活跃 Skill(含环比)
- 图表行 1:任务执行趋势(7 日柱状)+ 执行器分布(饼图 SVG)
- 图表行 2:任务状态分布(柱状)+ Skill 调用 Top 5(排名列表)
- 图表行 3:产品任务量 Top X + 用户活跃 Top X
- 控制栏:时间范围下拉 + 刷新 + 导出 PDF
16.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 控制栏 | 时间范围 select | onchange → refreshCharts() 重绘 |
始终 | 无 |
| 控制栏 | 刷新 | refreshCharts() 所有柱子归零 → 50ms 后恢复(动画) |
始终 | 无 |
| 控制栏 | 导出 PDF | Toast 📥 报表已导出 |
始终 | 无 |
16.4 指标示例
- 任务总数:1,234
- 成功率:96.3%
- 平均耗时:2.4s
- 活跃 Skill:18
- 7 日趋势:
[156, 189, 145, 201, 178, 210, 155] - 执行器分布:龙虾 67% / 脚本 33%
- 状态分布:成功 1089 / 失败 45 / 运行中 8 / 超时 92
- Top 5 Skill:数据清洗脚本 5123、竞品数据采集 3401、小红书笔记发布 1256 …
- 时间范围选项:最近 7 天 / 最近 30 天 / 本月 / 上月
16.5 提示反馈
📥 报表已导出/📊 数据已刷新
17. 执行器配置
17.1 页面目标
管理 龙虾 Agent 与 脚本引擎 两个执行器的节点配置、健康监控、并发/超时/重试策略。
17.2 页面结构
- 权限提示条:
仅超级管理员可修改(RB-13) - 执行器卡片 × 2:龙虾执行器 / 脚本执行器
- 每卡片包含:状态标签、描述、参数块、当前任务占用(n/N)、最近 24 小时健康度(24 个圆点 timeline)、3 个操作按钮
- 龙虾配置弹窗 / 脚本配置弹窗
17.3 卡片字段
龙虾执行器:API 地址 / 超时(30s)/ 重试(3 次)/ 并发上限(10)/ 当前 3/10
脚本执行器:工作目录 / 超时(60s)/ 并发上限(5)/ 沙箱模式 / 当前 1/5
17.4 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 龙虾卡片 | ⚙️ 配置 | 打开龙虾配置弹窗 | 超级管理员 | 无 |
| 龙虾卡片 | 🔌 测试 | Toast ✅ 龙虾平台连通正常 |
始终 | 无 |
| 龙虾卡片 | 🔄 重启 | Toast 🔄 已重启 |
超级管理员 | 无 |
| 脚本卡片 | ⚙️ 配置 / 🔌 测试 / 🔄 重启 | 同上(脚本版) | 同上 | 无 |
| 龙虾弹窗 | 🔌 测试连通性 | Toast ✅ 龙虾平台连通正常 |
始终 | 无 |
| 配置弹窗 | 取消 | 关闭 | 始终 | 无 |
| 配置弹窗 | 保存 | Toast ✅ 配置已保存 |
校验通过 | 无 |
17.5 表单字段
龙虾配置弹窗
| 字段 | 类型 | 必填 | 默认 |
|---|---|---|---|
| API 地址 | text | 是 | 示例值 |
| API Key | password | 是 | 示例值 |
| 超时时间(秒) | number | 否 | 30 |
| 重试次数 | number | 否 | 3 |
| 并发上限 | number | 否 | 10 |
| 轮询间隔(ms) | number | 否 | 2000 |
| 回调 URL | text | 否 | 示例值 |
脚本配置弹窗
| 字段 | 类型 | 必填 | 默认 |
|---|---|---|---|
| 工作目录 | text | 是 | — |
| Python 路径 | text | 否 | /usr/bin/python3 |
| Node 路径 | text | 否 | /usr/bin/node |
| 全局超时(秒) | number | 否 | 60 |
| 并发上限 | number | 否 | 5 |
| 沙箱模式 | select | 否 | Docker 容器 / 本地进程 / 虚拟环境 |
| 日志目录 | text | 否 | — |
17.6 交互规则
initHealth(id)生成 24 个小圆点,随机展示成功/异常状态,悬停显示 tooltip
17.7 提示反馈
✅ 龙虾平台连通正常/✅ 脚本引擎正常/🔄 已重启/✅ 配置已保存
18. 脚本模板管理
18.1 页面目标
维护脚本执行器使用的预置模板,支持 Python/Node.js/Shell 代码编辑 + 环境变量声明 + Skill 引用追踪。
18.2 页面结构
- 筛选栏:搜索(模板名)+ 脚本类型下拉 +
+ 新增模板 - 模板列表:模板名 / 脚本类型 / 环境变量(逗号列表)/ 引用 Skill 数 / 状态 / 更新时间
- 新增/编辑弹窗:表单 + 代码编辑器(
code-area)+ 环境变量动态行 - 删除确认弹窗
18.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 搜索 / 脚本类型 | filterT() |
始终 | 无 |
| 筛选栏 | + 新增模板 | 打开弹窗(清空) | 始终 | 无 |
| 列表行 | 编辑 | 打开弹窗(回填) | 每行 | 无 |
| 列表行 | 删除 | 删除确认弹窗 | 每行 | 是(需先解除 Skill 引用) |
| 弹窗·代码区 | 格式化 | Toast ✅ 代码已格式化 |
始终 | 无 |
| 弹窗·环境变量 | + 添加变量 | 追加变量行 | 始终 | 无 |
| 弹窗 | 取消 / 保存 | 关闭 / Toast ✅ 模板已保存 |
校验通过 | 无 |
18.4 表单字段
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 模板名称 | input | 是 | placeholder 如 通用 HTTP 请求 |
| 脚本类型 | select | 是 | Python / Node.js / Shell(切换时联动示例代码) |
| 描述 | textarea(2 行) | 否 | — |
| 脚本代码 | textarea(大) | 是 | 类型切换时预填示例模板(CODE 字典) |
| 环境变量声明 | 动态表 | 否 | 每行:变量名(只读)/ 描述 / 必填(select 必填/可选) |
| 状态 | select | 否 | 启用 / 禁用 |
18.5 交互规则
- 切换脚本类型 →
onTplType()自动填充示例代码(Python/Node/Shell) - 动态添加环境变量行:
appendChild到envList
18.6 提示反馈
✅ 代码已格式化/✅ 模板已保存/✅ 已删除- 删除前警告:
已被 Skill 引用的模板需先解除关联
19. 定时任务
19.1 页面目标
管理 Cron 定时调度任务,关联 Skill + 产品 + 参数,支持执行记录查看、启停、手动触发。
19.2 页面结构
- 统计卡 × 4:定时任务(8)/ 运行中(6)/ 已暂停(2)/ 7 日成功率(94.2%)
- 筛选栏:搜索 + 状态下拉 +
+ 新增定时任务 - 列表:任务名 / Skill / Cron 表达式 / 产品 / 下次执行 / 最近 7 次(timeline)/ 状态 / 开关
- 新增/编辑弹窗(含 Cron 解析)
- 执行记录弹窗 / 删除确认弹窗
19.3 操作细节
| 位置 | 按钮 | 行为 | 条件 | 二次确认 |
|---|---|---|---|---|
| 筛选栏 | 搜索 / 状态 | filterT() |
始终 | 无 |
| 筛选栏 | + 新增定时任务 | 打开弹窗(清空) | 始终 | 无 |
| 列表行 | 编辑 | 打开弹窗(回填) | 每行 | 无 |
| 列表行 | 记录 | 打开执行记录弹窗(展示最近 5 次) | 每行 | 无 |
| 列表行 | 触发 | Toast ▶️ 手动触发成功 |
每行 | 无 |
| 列表行 | 删除 | 删除确认弹窗 → Toast ✅ 已删除 |
每行 | 是 |
| 列表行 | 开关 toggle | 启用/暂停切换,同步状态标签;Toast ✅ 已启用 / ⏸️ 已暂停 |
每行 | 无 |
| 弹窗 | 保存 | Toast ✅ 定时任务已保存 |
校验通过 | 无 |
19.4 表单字段
| 字段 | 类型 | 必填 | 默认 | 选项/说明 |
|---|---|---|---|---|
| 任务名称 | input | 是 | — | 如 每日竞品数据采集 |
| 关联 Skill | select | 是 | — | 竞品数据采集 / 小红书笔记发布 / 数据清洗脚本 / 抖音视频上传 / Facebook广告投放 |
| 关联产品 | select | 是 | — | PROD001 / PROD002 / PROD003 / 全部产品 |
| Cron 表达式 | input | 是 | 0 8 * * * |
— |
| 帮助文本 | 动态文本 | — | 实时解析 | 下述对照表 |
| 执行参数(JSON) | textarea(3 行) | 否 | 示例 JSON | 必须为合法 JSON |
| 失败重试 | select | 否 | — | 重试 3 次 / 重试 1 次 / 不重试 |
| 超时(秒) | number | 否 | 120 | — |
| 状态 | select | 否 | 启用 | 启用 / 暂停 |
Cron 解析对照:
- 0 8 * * * → 📅 每天 08:00 执行
- 0 */2 * * * → 📅 每 2 小时执行
- 0 9 * * 1 → 📅 每周一 09:00 执行
- 0 0 1 * * → 📅 每月 1 号 00:00 执行
- 30 10 * * * → 📅 每天 10:30 执行
- 0 18 * * 5 → 📅 每周五 18:00 执行
- 0 */4 * * * → 📅 每 4 小时执行
- 其他 → 📅 自定义表达式: {输入值}
19.5 执行记录弹窗
表格:执行时间(YYYY-MM-DD HH:MM:SS)/ 状态(成功/失败 标签)/ 耗时(s)/ 结果文本
19.6 交互规则
- Cron 表达式输入实时解析 →
parseCron(value)更新帮助文本 - 开关 toggle:启用 →
tg tg-ok运行中;暂停 →tg tg-w已暂停;同步更新data-st initTimelines()为每行生成 7 个圆点(近 7 日执行成功/失败)
19.7 提示反馈
✅ 定时任务已保存/▶️ 手动触发成功/✅ 已删除/✅ 已启用/⏸️ 已暂停
六、待完善 / 开发注意事项
| 项 | 说明 |
|---|---|
| 数据权限隔离 | 后端需严格按 RB-07/RB-12 做 Skill 权限并集 + 产品范围交集校验,前端仅展示性过滤 |
| 密码与密钥加密 | 平台账号密码、API Key、谷歌 2FA 密钥需服务端加密存储(AES),仅返回掩码 |
| 删除前置校验 | 用户/Skill/平台/产品/模板/菜单删除前都需检查引用关系,前端原型已提示 |
| 导入文件格式 | 产品批量导入需约定 CSV/Excel 模板字段与校验规则 |
| 日志规模 | 操作日志、Skill 调用日志量级大,需分库或冷热分层存储 |
| 权限按钮码 | button_code 需跟前端按钮统一字典,前后端共享枚举 |
| 执行器选择 | RB-13 执行器类型互斥,后端需校验保存时 executor_type 只能设置一份配置 |
| 时区 | Cron 执行、日志时间建议统一使用服务器本地时区 + UTC 存储,前端按当前用户时区展示 |
| 二次确认统一 | 所有删除/取消类操作都需弹窗确认(本原型已遵循) |
| 响应式支持 | 登录页已做移动端隐藏左栏,其他后台页默认 PC 端 1280+,移动端不在当前版本范围 |
文档结束。 本 PRD 覆盖 19 个原型页面、按钮级操作细节、字段清单与业务规则,可直接用于开发排期、测试用例编写与原型评审。