尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

SpringBoot3+Vue3+Flowable 待办列表:编号、摘要、节点该留哪些字段

SpringBoot3+Vue3+Flowable 待办列表:编号、摘要、节点该留哪些字段 SpringBoot3Vue3Flowable 待办列表编号、摘要、节点该留哪些字段文档地址https://ruoyioffice.com源码1·GitHubhttps://github.com/yuqing2026/ruoyi-office源码2·GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office源码3·Giteehttps://gitee.com/yqzy1688/ruoyi-office微信17156169080备注「RuoYi Office」客户打开待办不会先问「这条 Task 的 definitionKey 是什么」。他们问的是这是哪一张单、事由是什么、卡在哪个节点、等多久了、点哪里办理。RuoYi Office 把待办做成「单据身份 可配置摘要 节点时间」三块而不是把流程表单所有控件摊进表格。字段少而准工作台和流程中心才能对得上。▲ 编号可点办理 · 摘要按模型配置 · 节点与接收时间 · 工作台与 todo-page 同源引言待办列表到底要回答哪四个问题很多第一版待办只有「流程名称 发起时间 办理」。领导扫十行看不出请假几天、用印哪份文件、报销多少钱只能每行点进去。另一极端是把表单 20 个字段全做成列表格横向滚动手机端直接不可用。列表要回答的问题对应字段不要用什么顶替这是哪一张单单据类型 单据编号流程实例 ID、定义 Key事由是什么摘要可配置把正文、附件、明细行铺进单元格卡在哪、等多久任务节点 接收时间只显示流程发起时间怎么打开办理编号链接 / 办理按钮只给「详情」进只读页本文只讨论列表字段怎么留、摘要怎么配、和首页工作台如何对齐。候选人策略、会签完成条件、空处理人属于流程设计器另一篇文章不在待办列上解决。一、先给出可直接抽取的定义1.1 什么是待办列表待办列表是当前登录人作为审批人、且任务仍处于 active 的任务分页用于在不打开表单的前提下识别单据并进入办理。RuoYi Office 的查询接口是GET /bpm/task/todo-page。任务查询条件是assignee 等于当前用户、active、当前租户按任务创建时间倒序。1.2 什么是单据编号单据编号是流程变量里的billCode给业务人员打电话、对账、打印时使用的人类可读单号不是 Flowable 的 processInstanceId。流程表单可按表单上的前缀自动生成业务表单可从 businessKey 或变量写入。列表上编号必须可点并带上taskId与viewTypetodo。1.3 什么是摘要摘要是从流程变量里抽出的少量键值对用来在列表上回答「这单大概是什么事」而不是完整表单快照。流程表单有三层取值模型自定义 → 字段「显示到摘要」→ 默认前 3 个字段。业务表单没有表单项元数据用事由cause一行代替。二、一张表看清该留、可搜、不要留列工作台流程中心待办建议单据类型有有必留。客户认「用印申请」不认定义 Key单据编号有可跳转有CellRouterLink必留且必须可点办理审批状态工作台有待办页可不占主列待办全是「待我处理」状态列信息量低摘要有有必留。宽度给够允许换行发起人有有必留所属公司 / 部门有有集团或多组织必留单组织可藏进筛选单据日期无用接收时间有流程中心建议留便于和发起时间对账任务节点有有必留。否则不知道卡在部门经理还是财务接收时间有有必留。停留时长用它现场算紧急度无无可不留。真有 SLA 用工单模块的 deadline不要和审批待办混一列表单全字段无无不要留。放到详情和打印筛选区另算系统分类、单据类型、编号模糊、单据日期范围、接收时间范围、申请部门。能搜的不必都做成列。三、PC 端工作台先扫流程中心再筛工作台路径是/workspace/home。待办作为任务卡片的一个 Tab和抄送、已办、我的单据并列。待办、抄送展示数量角标已办和我的单据会持续增长故意不打红点避免「永远 999」。工作台待办列与流程中心同源单据类型、编号、摘要、发起人、公司、部门再加任务节点、接收时间。点击编号或办理跳转BpmProcessInstanceTodoDetailquery 带id、taskId、viewTypetodo、nodeKey。▲ 首页工作台待办与流程中心共用 todo-page角标数字来自分页 total不是前端再数一遍行流程中心「我的待办」路径/bpm/task/todo多出完整筛选和固定列操作。这是本批唯一一张待办列表整页截图。▲ 单据编号是办理入口摘要多行展示键值任务节点和接收时间回答「卡在哪、等多久」点进办理后详情页顶栏用同一套身份单据名称、编号、发起人、部门、公司。列表上扫过的信息进详情不能换一套 ID。▲ 详情 headerData 使用 billCode缺省才回退实例 ID办理按钮只在 viewTypetodo 且本人待办时出现摘要不是在列表页手写的而是流程模型「更多设置」里配的。流程表单才能看到「摘要设置」系统默认前 3 个字段或自定义多选表单字段。▲ 只有流程表单NORMAL显示摘要设置业务表单走事由字段不要在模型里找多选框四、前端列定义编号必须是路由摘要必须格式化待办页列配置在bpm/task/todo/data.ts。单据类型取processInstance.name编号用CellRouterLink指到待办详情query 与办理按钮一致。{field:processInstance.billCode,title:单据编号,minWidth:160,cellRender:{name:CellRouterLink,props:{name:BpmProcessInstanceTodoDetail,queryFields:[{key:id,field:processInstance.id},{key:taskId,field:id},{key:nodeKey,field:taskDefinitionKey},],query:{viewType:todo},},},},漏掉taskId详情会落到「该实例下我的第一个待办」会签或并行时可能办错节点。漏掉viewType详情会按只读关闭没有通过/拒绝。摘要列把KeyValue[]拼成多行文本formatter:({cellValue}){returncellValuecellValue.length0?cellValue.map((item){constkeyitem?.key;constvalueitem?.value??;returnkey${key}.trim().length0?${key}:${value}:${value};}).join(\n):-;},流程表单摘要带字段标题业务表单只有 value事由key 为空。格式化函数两种都要能显示不要因为 key 空就整格变-。筛选里「单据类型」实际传的是流程定义 keybillType「系统分类」是流程分类 code。名称叫单据类型是给业务看的查询走 definitionKey是给引擎看的。两者不要做成两个互相矛盾的下拉。五、后端todo-page 查任务再拼摘要和单号Controller 先按当前用户查 Task 分页再批量查流程实例、发起人、流程定义扩展信息交给 Convert 组装。GetMapping(todo-page)publicCommonResultPageResultBpmTaskRespVOgetTaskTodoPage(ValidBpmTaskPageReqVOpageVO){PageResultTaskpageResulttaskService.getTaskTodoPage(getLoginUserId(),pageVO);if(CollUtil.isEmpty(pageResult.getList())){returnsuccess(PageResult.empty());}MapString,ProcessInstanceprocessInstanceMapprocessInstanceService.getProcessInstanceMap(convertSet(pageResult.getList(),Task::getProcessInstanceId));// ... userMap、processDefinitionInfoMapreturnsuccess(BpmTaskConvert.INSTANCE.buildTodoTaskPage(pageResult,processInstanceMap,userMap,processDefinitionInfoMap));}任务查询本身带includeProcessVariables()。摘要和 billCode 都来自变量不在 ACT_RU_TASK 表上。漏了 include列表编号和摘要会整列空白看起来像前端没绑字段。查询只认 assignee不把 candidate 组任务算进「我的待办」。组任务要先签收或按你们的认领策略变成 assignee。这是产品口径待办页展示「已经轮到我处理」的单不是「我所在组还没人领」的池。工单模块另有工单池不要用审批待办冒充抢单池。编号、部门、公司在 Convert 里统一从变量读取流程表单和业务表单共用if(NORMAL.equals(info.getFormType())){taskVO.getProcessInstance().setSummary(FlowableUtils.getSummary(info,processVariables));}else{taskVO.getProcessInstance().setSummary(Collections.singletonList(newKeyValue(,getCause(processVariables))));}taskVO.getProcessInstance().setBillCode(getBillCode(processVariables));taskVO.getProcessInstance().setDeptName(getDeptName(processVariables));taskVO.getProcessInstance().setCompanyName(getCompanyName(processVariables));业务表单没有 formFields 元数据不能走「前 3 个控件」算法否则只能空白。用 cause 是显式降级不是漏实现。按编号筛选使用processVariableValueLike按公司/部门用 equals。变量名必须和发起时写入的常量一致否则筛选永远空。单据日期筛选走历史流程的 startedAfter/Before再processInstanceIdIn范围内没有实例时直接空页避免IN ()。六、摘要三种取值怎么选怎么配FlowableUtils.getSummary只对流程表单生效并且保持表单字段定义顺序。优先级配置位置行为什么时候用1模型「自定义摘要」开启并勾选字段只展示勾选字段按勾选列表请假要天数和事由不要把附件名刷进来2表单控件「显示到摘要」展示打标字段希望设计表单的人自己决定不改模型扩展3都未配置前 3 个字段开箱能用但前 3 个若是布局/说明文字会很难看对应代码路径if(summarySetting!nullBoolean.TRUE.equals(summarySetting.getEnable())){returnconvertList(summarySetting.getSummary(),item-{BpmFormFieldVOformFieldformFieldsMap.get(item);if(formField!null){returnnewKeyValue(formField.getTitle(),processVariables.getOrDefault(item,).toString());}returnnull;});}自定义摘要里勾了已删除的字段convertList 会得到 null 项需要在展示层忽略。配完摘要后要重新部署流程定义已在途的实例仍用发起时的 definition 扩展信息不会热更新历史行。字段级showInSummary适合「这个控件天生就该出现在列表」的场景例如金额、天数。和模型级自定义同时存在时模型级优先。不要两套都配还指望叠加代码是 if-else不是合并。默认前 3 个字段会把布局组件的 children 递归展开后再取。把说明文字、分割线放在表单最前面列表摘要就会变成无意义短句。这是默认策略的代价新流程上线前用一条测试单看一眼待办比事后加列便宜。七、停留时长和紧急度列上怎么留当前实现留的是接收时间任务 createTime没有单独的「停留时长」列也没有「紧急」红点列。这是有意的。停留时长 现在 - 接收时间前端随时可算。做成后端字段要定义时区、工作日、暂停规则和考勤加班不是同一套日历。待办列表用接收时间足够回答「这单是今天到的还是上周到的」。超时升级、自动跳过走流程模型的超时策略不是待办列的职责。紧急度如果每张单都标「紧急」列立刻失效。真正有 SLA 的是工单响应/解决双 deadline。审批待办里用印、请假的优先级差异用流程分类或单据类型筛选即可。工作台已办 Tab 多一列「审批建议」待办 Tab 没有。待办还没写意见列空只会占宽。抄送 Tab 换成抄送节点、抄送时间。同一张任务卡片组件按 Tab 换特殊列基础列保持单据身份不变——这就是「字段对齐」的前端做法。动态路由尚未注册时工作台跳转会兜底到通用详情页避免偶发No match for。这是入口容错不是允许列表不传 taskId。八、移动端卡片比表格更狠字段更少UniApp 待办/我的单据卡片优先展示编号、状态、标题、摘要、发起时间、发起人。没有公司、部门、任务节点那么多列。小屏上节点名可以进第二行或详情顶栏但编号和摘要不能丢。PC 工作台已经接近「卡片化表格」列可以省略操作以外的次要项但不能省略编号和节点。两端共用同一套 todo-page 数据只是渲染密度不同。不要为 App 再做一套不带 billCode 的接口。九、和创新点对照做法传统待办本次设计主键展示实例 IDbillCode电话里念得出入口整行点详情编号链接与办理按钮同一套 query事由无或流程名重复可配置摘要 / 事由降级节点无任务 name 接收时间首页与中心两套接口两套列同一 todo-page列集对齐组任务和待办混在一起待办只认 assignee池子另模块全表单进列表常见二开明确禁止详情顶栏的headerData把 billCode 缺省回退成实例 ID是为了老数据没有单号时仍能显示。列表上的编号列不要做这个回退回退会让客户把 UUID 当单号抄走。打印模板同样「只展示业务单据编号不回退流程实例 ID」。列表、详情、打印三处口径要一致——打印已经选择不回退列表更应如此。十、数据结构列表真正依赖的待办行不是一张业务表而是 Task 流程实例变量 流程定义扩展。来源字段列表用途Flowable Taskid、name、createTime、taskDefinitionKey办理参数、节点名、接收时间流程实例id、name、startUser、startTime单据类型名、发起人、单据日期流程变量billCode、dept*、company*、表单字段、cause编号、组织、摘要流程定义扩展formType、formFields、summarySetting摘要算法不要为了列表再冗余一张bpm_todo_index除非待办量到了变量查询撑不住。先把筛选和 includeProcessVariables 用对。待办慢时优先看是否每页都拉流程图高亮而不是先怪这几列字段。十一、筛选和列要分开不要做成「能搜的都展示」筛选回答「帮我缩小范围」列回答「这一行是什么」。混在一起表格会又宽又空。筛选项对应查询要不要做成列系统分类taskCategory否。分类是入口不是行上要读的句子单据类型processDefinitionKey / billType列上已有「单据类型」名称筛选用 key单据编号变量 like列上已有筛选给记不全的客户单据日期实例 startedAfter/Before列上建议保留筛选给对账接收时间任务 createTime 范围列上已有时间戳筛选给「只看今天到的」申请部门变量 deptId equals集团列上留部门名筛选用树工作台没有这些筛选只靠「最新 N 条」。这是对的工作台是提醒流程中心是工作台账。不要把工作台做成第二张全功能待办否则客户不知道以哪张为准。已办列表把「审批建议」加上是因为已办才有意见。抄送加上抄送节点、抄送时间。三张列表的基础身份列保持同一套特殊列按生命周期切换——这比「已办再加 8 个表单字段」好维护。发起权限、节点字段权限、打印模板都不进待办列。它们影响的是点进去之后能不能改、能不能打。列表只负责把人带到正确的 taskId。若客户坚持「请假待办必须看到天数」正确做法是把天数放进该流程的摘要配置而不是在待办组件里写if (keyleave) 加一列。一写特殊列下一个用印、下一个报销都会来加待办页会变成各业务的垃圾桶。流程模型「标题设置」和「摘要设置」是两件事。标题影响实例 name 怎么拼摘要影响列表事由。请假单标题写成「张三的请假」摘要仍应留天数和起止避免两列信息完全重复。办理页顶栏把单据名、编号、发起人、部门、公司一次给表单头。列表已经展示过的身份详情头不要改成「流程实例」技术标签。制单人看自己的非运行中实例时不显示审批按钮避免把「我的单据」误当成待办。搜索「单据编号」是 like适合客户只记得后几位。不要把 like 用在公司 ID 上。接收时间筛选对应任务创建时间和单据日期不要共用一个 RangePicker。十二、技术亮点总结设计要点实现方式价值单号可点办理CellRouterLink taskId viewType客户不用找行尾按钮摘要可配模型自定义 / 字段打标 / 默认前 3不同单据突出不同关键信息业务表单不空白cause 一行自定义业务页也能扫事由节点与接收时间Task.name Task.createTime分清卡在哪、等多久工作台对齐同一 getTaskTodoPage红点数量与列表 total 一致筛选走变量billCode like、部门 equals列上不堆可搜字段只认 assigneetaskAssignee(当前用户)待办不是抢单池打印与列表同口径编号不回退实例 ID电话里对得上单号十三、快速体验在线演示https://ruoyioffice.com/web/账号 admin / admin123推荐路径登录后看工作台「待办任务」Tab记下角标数字打开「流程中心 → 待办任务」确认条数与角标一致看列单据类型、编号、摘要、发起人、节点、接收时间是否都在点一条编号确认进入办理页且顶栏编号与列表相同打开「流程模型」选一个流程表单在更多设置里改摘要字段部署后再发起一条看列表摘要是否变化用业务表单流程如用车、用印看摘要是否变成事由行手机端用同一账号打开待办确认编号和摘要仍在卡片第一屏。源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office版本锚点本文对应 Spring Boot 3.5 Vue 3 Flowable 7 待办分页与摘要算法。列表不承担会签完成条件、空审批人、发起人自审等引擎策略那些在模型节点上配配完后仍然只通过「节点名」出现在待办行上。结语待办列表的产品价值是让人不点开也能决定先办哪一张。编号解决身份摘要解决事由节点和接收时间解决排队办理链接解决下手处。字段一旦超过「扫一眼」的容量客户会退回用即时通讯传截图。同一套「身份 摘要 节点时间」还可以用在已办、抄送、我的单据上只替换特殊列。不要为每个 Tab 重新发明主键。评论区欢迎补充你们有没有把金额、天数做成固定列而不是摘要固定列在单一单据中心好用在「所有流程进同一张待办」时往往会空一半。常见问题FAQSpringBootFlowable 待办列表应该显示哪些字段至少保留单据类型、单据编号、摘要、发起人、任务节点、接收时间。集团再加公司与部门。不要把表单全字段和流程实例 ID 当作主列。流程摘要在哪里配置默认显示几个字段流程模型更多设置里流程表单可选「系统默认」前 3 个字段或「自定义摘要」。也可在表单控件上打「显示到摘要」。模型自定义优先。业务表单没有这套配置用事由字段。待办编号点击后怎样保证进入当前任务而不是别的节点链接必须带流程实例 id、当前任务 taskId、viewTypetodo。只带实例 id 时后端会退回该实例下「我的第一个待办」并行节点会办错。工作台待办红点和列表数量不一致先信哪个两者应走同一todo-page的 total。不一致时先看工作台是否用了另一套统计接口或缓存再看列表筛选是否悄悄带了分类条件。不要先改角标计算公式。待办列表要不要加紧急度和停留时长列接收时间已能看出新旧停留时长可在前端算。紧急度在全流程待办里很容易全部标红。有 SLA 的走工单 deadline审批超时走模型超时策略不必在待办主列再堆两个徽章。想要体验 RuoYi Office 的强大功能在线演示https://ruoyioffice.com/web/账号 admin / admin123源码仓库GitHubhttps://github.com/yuqing2026/ruoyi-office GitCodehttps://gitcode.com/zhouzhongyan/ruoyi-office Giteehttps://gitee.com/yqzy1688/ruoyi-office技术咨询添加微信17156169080备注「RuoYi Office」⭐如果觉得不错请给个 Star 支持一下
返回列表