Fago 文档 Fago 文档
首页
快速开始
后端手册
前端手册
规划备查
文档维护
首页
快速开始
后端手册
前端手册
规划备查
文档维护
  • 快速开始

    • 简介
    • 功能列表
    • 快速启动(后端)
    • 快速启动(前端)
    • 技术选型
    • 项目结构
    • 接口与错误码
  • 后端手册

    • 配置与环境
    • 登录与会话
    • 功能权限与菜单
    • 数据权限
    • 用户、部门、岗位与角色
    • 租户与安全策略
    • 异常处理与错误码
    • 参数、分页与响应
    • 数据库迁移
    • 日志、脱敏与请求加密
    • 平台租户与套餐
    • fago-cli 常用命令
    • 发布验证与恢复演练
    • 字典与参数配置
    • 文件与对象存储
    • 站内通知与执行恢复
    • 定时任务与运行恢复
    • 可靠消息后端与积压观测
    • 身份客户端与设备会话
    • 会员认证与账号管理
    • 服务账号与 scope
    • OIDC 提供方与外部绑定
    • 原生 SSO 验收客户端
    • 账号认证模式
    • 工作流 API 与运行目录
  • 前端手册

    • 本地启动
    • 菜单与路由
    • 请求合同
    • 页面与按钮权限
    • 浏览器单点登录
    • 审批中心与表单发起
    • 工作流定义与运行管理
  • 规划备查

    • Fago:架构与实施方案
    • 总体架构
    • 身份、权限与租户设计
    • Vben 5 前端与 API 合同
    • 数据库与消息后端适配
    • 纯 Go 通用工作流:文件、文档与业务流程
    • 核心数据模型
    • 分期、工作包与验收
    • 架构决策与风险
    • 参考来源与基线
    • 网络安全等级保护二级合规要求
    • M0 实施与验收
    • M1 身份与导航实施及验收
    • 项目配置、API 内容加密与敏感数据脱敏
    • M2 系统管理实施记录
    • M3 平台与 SaaS 实施记录
    • fago-cli 功能规划
    • 生产传输层 WARN 变更范围(2026-10-23)
    • M4 发布实施与验收
    • M4 加固检查归档(本地工程环境)
    • M5 通用平台与身份实施
    • M6 R3.1 正式工作流核心与基础审批
目录

审批中心与表单发起

# 审批中心与表单发起

# 目的

在真实Vben后台填写标量表单、保存本人草稿、发起固定版本流程,再处理当前任务并查看本人参与历史。 成功保存会显示草稿修订;发起返回“已受理”时后台仍可能处理中,须查询进度或到“我的发起”看当前状态。 本页是首批用户页面,不包含可视化设计器或运行版本管理。后台部署与定义发布仍按工作流API操作。

# 前置条件

业务库须显式迁移至schema v48(四个本人入口自v47发布),API和worker启用同一精确兼容运行版本,平台已登记且流程定义已发布/启用。 按前端启动启动锁定的web-antd应用;生产继续走同域代理和统一JWE,不切换到mock或裸JSON客户端。

租户套餐须包含相应能力,账号已完成改密且会话有效。普通角色还须在“系统管理→角色”的菜单授权中显式选中对应页面;只有权限码不会自动出现菜单。 保留租户管理员也受当前套餐、租户权限上限与实际业务归属约束;平台身份没有这些租户入口。

页面或动作 当前权限
我的待办与投票已办 workflow:task:read
我的发起 workflow:instance:start
我的操作、参与人详情/时间线 workflow:history:read
表单目录、本人草稿/固定表单版 bpm:form:read
保存本人草稿 另需bpm:form:write
发布标量表单合同 另需bpm:form:publish
选择流程并发起 另需workflow:definition:read与workflow:instance:start
同意/拒绝 workflow:task:decide及当前任务资格
查询/继续本人审批命令 原提交者当前workflow:task:decide;不以发起或管理权限替代
领取/转办/委派/归还 对应workflow:task:claim/transfer/delegate/return及当前资格
原提交正文 workflow:history:read与bpm:form:history-read,另需实际参与/原所有者与原字段范围

菜单的路径与组件在本地白名单固定,服务端不能下发远程脚本或把租户组件挂到平台路径:

// 仅说明实际路由;授权仍来自当前主库菜单,不能在浏览器自行添加权限。
const workflowPages = [
  '/workflow/tasks', '/workflow/my-instances', '/workflow/activities', '/workflow/forms',
];

# 步骤与规则

# 1. 填写并保存本人草稿

进入“流程审批→表单与发起”,在表单目录点击“填写新草稿”,页面读取该表单的精确发布版。 表单只有text、integer、boolean标量;可选字段的“填写此字段”区分未提供与空字符串、false、0。 点击“保存本人草稿”后记录返回的id与修订;后续编辑使用该修订CAS,不能覆盖别人的修改。

对应请求如下。实际页面使用随机稳定命令号,同次失败重试保持原命令与原载荷;不需要用户手写命令:

POST /api/admin/v1/workflow/form-instances
Authorization: Bearer <当前租户访问凭据>
Origin: <当前已配置同域Origin>
X-App-Request: admin
Content-Type: application/json

{"id":"","form":{"key":"simple-request","version":1},"expectedVersion":0,"values":{"amount":{"integer":10}},"commandId":"wf-<页面生成>"}

开发/测试明文成功响应与生产解密后的结构相同:

{"code":0,"data":{"id":"<草稿ID>","form":{"key":"simple-request","version":1},"version":1,"values":{"amount":{"integer":10}}},"message":"ok","requestId":"<服务器生成>"}

在“本人草稿”分页中点击“继续填写/发起”可重新进入自己的当前修订。草稿固定formKey/formVersion,换表单版本须新建草稿。 原提交不会被保存草稿改写;页面和列表不提供指定其他owner或tenant的参数。

# 2. 选择精确流程并发起

保存后点击“读取流程目录”,选择精确发布版本。流程必须启用且资源合同与本草稿固定表单版匹配,否则“确认发起”不可用。 “更多流程”沿服务端游标取下一页,不把第一批50项当作完整目录。修改尚未保存时先保存,发起只投影已保存值中的流程声明字段。

若定义包含发起自选节点,逐节点输入操作者确认的账号ID,以逗号分隔;顺序决定串行候选顺序。 当前页面没有人员名称搜索器;不把账号ID转成浮点数,也不自动去重或从角色成员猜人。不存在、跨租户或已停用账号仍由服务端拒绝。

审批用途默认为approval,同资源修订的独立用途由服务端占位保护。发起时固定草稿修订和流程版本,不自动取新版:

POST /api/admin/v1/workflow/instances
Authorization: Bearer <当前租户访问凭据>
Origin: <当前已配置同域Origin>
X-App-Request: admin
Content-Type: application/json

{"key":"example-flow","version":1,"resource":{"type":"form-instance","id":"<已保存草稿ID>","version":"1","contractVersion":"scalar-form-v1","purpose":"approval"},"values":{"amount":{"integer":10}},"selections":{},"commandId":"wf-<页面生成>"}

HTTP 202只表示已受理。页面保留本次命令用于“查询发起进度”,不因未知网络结果自动生成第二次发起。

{"code":0,"data":{"commandId":"wf-<页面生成>","state":"accepted","result":{"id":"<流程ID>","definitionKey":"example-flow","definitionVersion":1,"engineVersion":"<固定运行版本>","state":"running","version":1,"waiting":[],"needsRun":true}},"message":"ok","requestId":"<服务器生成>"}

# 3. 处理当前任务

进入“我的待办与已办→我的待办”,点击“查看/处理”才读取该任务允许的正文。 未领取single任务先领取;当前持有人可按实际权限同意/拒绝、转办或委派,代理只能归还意见,不能代原人终审。 转办/委派输入单个目标账号ID,原因和意见仅在当前窗口内存中保存;转办不提交修改字段,代理归还只提交允许输出。

页面展示原提交与当前值,只有节点可写字段进入审批输出,不从表单全量字段推断写权限。 投票、变更都固定屏幕上任务的activation/task/version;409001不会被自动覆盖重试。任务离开当前列表后旧临时授权不能继续读取正文。

当前正文的 acceptedSignals 省略或false时,页面保持原同步审批请求:

POST /api/admin/v1/workflow/instances/<流程ID>/activations/5/tasks/<任务ID>/decision
Authorization: Bearer <当前租户访问凭据>
Origin: <当前已配置同域Origin>
X-App-Request: admin
Content-Type: application/json

{"taskVersion":3,"decision":"approved","values":{"amount":{"integer":12}},"opinion":"同意","commandId":"wf-<页面生成>"}

当前正文明确返回 acceptedSignals: true 时,页面向同一任务的 /decision-commands 提交相同字段,固定本次命令与入口。 这需要管理员按接口部署说明启用并登记正式v3,旧定义不会自动获得能力。

POST /api/admin/v1/workflow/instances/<流程ID>/activations/5/tasks/<任务ID>/decision-commands
Authorization: Bearer <当前租户访问凭据>
Origin: <当前已配置同域Origin>
X-App-Request: admin
Content-Type: application/json

{"taskVersion":3,"decision":"approved","values":{"amount":{"integer":12}},"opinion":"同意","commandId":"wf-<页面生成>"}

HTTP 202只表示投票与后台检查点已提交。页面清除旧正文、意见和已确认的冻结请求,保留收据并锁定其他任务动作:

{"code":0,"data":{"commandId":"wf-<页面生成>","state":"accepted","result":{"id":"<流程ID>","definitionKey":"example-flow","definitionVersion":1,"engineVersion":"fago-form-approval-v3","state":"running","version":4,"waiting":[],"needsRun":true}},"message":"ok","requestId":"<服务器生成>"}

点击“查询审批进度”只执行 GET /api/admin/v1/workflow/approval-commands/<原命令号>;需要显式继续时点击“继续处理”,向该路径的 /resume POST {}。 查询不投票、不推进执行,继续只恢复已提交的自动后继;均要求原提交者当前审批权限。收据done后刷新列表,即使实例仍running也不会提示整个流程已批准;部分会签可立即done并等待另一位审批人。

没有收到有效响应时页面提示“本次审批结果尚未确认”,保留原载荷、commandId和入口;可查询确认或原样重试,不能修改投票、自动降级到同步入口或创建新命令。 命令号与进度只在当前组件内存,不写URL或浏览器存储。关闭窗口、切换列表/对象或身份授权变化会清理本地进度,迟到响应被忽略;已经提交的投票与后台工作继续存在,重新打开前先刷新实际列表或实例状态。

# 4. 分别查看已办、发起与操作记录

“投票已办”只列本人实际同意/拒绝;“我的操作”保留真实领取/转办/委派/归还,每次实际动作各占一行。 候选、收到指派和管理补分配不冒充已办或过去参与。“我的发起”只看本人发起;管理员也不能借本页列出他人。 列表用上一页/下一页游标,当前任务每页最多100条,其他本人列表最多50条,没有总数或任意排序。

点击“读取流程历史”再读取参与人详情和追加时间线。只有发起人或条目操作者可按按钮读取对应私有条目;生命周期事件没有私有审批条目。 私有意见/原因/字段都作为文本展示,不解释HTML。三个历史来源的ID独立,页面用来源+ID区分,不把任务事件ID当投票ID。

“原提交”只读取固定原提交及原节点白名单;领取/转办/委派不授予原正文。代理归还或投票使用该历史条目完成版本,不能换成当前任务版本。 “读取本人原提交”还须原资源所有者资格。原提交不表示节点当时完整输入、当前变量或最终结果。

# 5. 发布标量表单合同

有发布权限时,在表单页点击“发布标量表单”。填写合法JSON合同和当前最新版本:新key为0,发布新版本须提供当前最新版本。 这只是标量合同发布入口,不是R3.2可视化设计器;未知类型/字段、冲突或绑定失败由后端明确拒绝,不覆盖旧版。

{"schemaVersion":"fago-scalar-form-v1","key":"simple-request","name":"简单申请","fields":[{"name":"amount","type":"integer","required":true}]}

# 参数

浏览器编辑/展示整数必须在[-9007199254740991,9007199254740991]内且为规范整数,拒绝01、-0、小数或近似转换。 后端int64合同不变;相关正文含浏览器不能精确处理的值时,页面拒绝该标量详情,须使用保留完整精度的客户端。 激活/任务/CAS/草稿资源修订同样必须能精确表示,超界在发网前拒绝,不能向上舍入后碰撞相邻新版本。 账号ID与事件ID使用字符串,可精确保留int64;自选账号不能重复,转办/委派仅单人。

菜单和按钮只反映当前授权快照;隐藏不能代替后端复核。关闭窗口、切换账号/realm或授权版本改变会清正文和冻结载荷,迟到响应不能重开旧窗口。 正常access刷新不抹去编辑。网络失败后的重试保留原commandId、对象版本和载荷;编辑被锁定,不把未知结果当作未执行。

# 失败与重试

保存/审批遇到409001应关闭窗口、刷新并核对最新对象后重新编辑,不能盲目覆盖获胜者。 400001/400002修正格式或字段后再提交;403001检查当前权限/角色/套餐与实际资格,404001不区分不存在与不可见。 401002须重新登录;503001先恢复依赖/兼容API与worker,已发送请求只能重试原操作或先查询状态。

HTTP/1.1 409 Conflict
Content-Type: application/json

{"code":409001,"data":null,"message":"记录已变更,请重试","requestId":"<服务器生成>"}

菜单出现而工作流API返回关闭/不可用时,管理员应先核对显式API/worker配置、迁移与精确版本登记,不改用mock。 关闭窗口不会撤销已发送的事务;重新打开前先刷新列表确认结果。失败只显示公开中文提示,不显示内部错误链或私有配置。

# 边界

本批为真实接口页面,组件测试使用真实Vue/Router/Ant,但当前Work设置禁用浏览器,尚无实际浏览器布局或完整端到端验收。 定义发布/准入、平台运行目录、任务补分配与外部动作恢复现有独立管理页面,按各自权限开放。 表单与流程原稿、受控 BPMN 画布已有独立设计页面,不由本页操作。文件/单据的完整资源认证、节点当时完整输入、完整滚动与容量认证仍未结束,M6/R3.1未结项。

# 关联

  • 工作流API与运行目录
  • 功能权限与菜单
  • 迁移与失败恢复
  • M6实施与证据
最后更新: 2026/11/3 09:09:29
浏览器单点登录
工作流定义与运行管理

← 浏览器单点登录 工作流定义与运行管理→

Theme by Vdoing | Copyright © 2026-2026 Fago 项目文档
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式