用友流程图 draw.io 生成技能
一、技能维护边界(最高优先级)
本技能是「画流程图的工具」,只沉淀通用的画图方法论与版式规范,绝不收录某一个具体流程图 / 项目交付物的内容性细节(如某张具体审批流程的节点文案)。具体节点文字属于交付物本身,由每次任务按用户描述生成。
只收录(通用方法论):
- 工具选型结论(为什么用 draw.io 而非 Visio);
- 版式规范(形状 / 颜色 / 字体 / 编号 / 连线 / 布局);
- draw.io XML 生成模板与技术坑;
- 几何合规的客观自检方法;
- 用户反复纠错的易错点清单与通用工作法。
> 本规则优先级高于下方所有章节。红线只在此声明一次。深细节见 references/:format.md(完整版式规范 + XML 技术坑)、faq.md(按症状排查)、scenario-examples.md(不同流程结构 XML 示例)。本文件是能力总览与决策路径。
二、技能定位与触发条件
- 用途:把用友实施交付中的业务 / 审批 / 判断流程,生成可二次编辑的 draw.io 格式流程图(
.drawio),版式对齐用户确认的 Visio 图例迁移版。 - 触发:用户要求「画 / 生成 / 重做 / 更新 流程图、泳道图、审批判断流程、XX 业务流程」等时调用。
- 产出:
.drawio源文件(XML)+ 同名.svg矢量图(默认双交付物,见第九节「交付物范围与同步」)。用户用 app.diagrams.net 打开 .drawio 二次编辑;SVG 直接插入 Word;另可一键导出 Visio(.vsdx) / PNG / PDF。
三、核心能力
- A. 标准流程图生成:产出可二次编辑
.drawio;版式对齐用户确认的 Visio 图例迁移版(绿开始 / 红结束、10/20/30 编号、菱形不带问号、左右对称汇合、黑连线、框内自动换行、只画流程骨架不入细节)。 - B. 几何合规客观自检:用脚本解析 XML,量化报告 5 类问题,不靠目测——框重叠 / 线穿框 / 线线重合 / 单据跨道 / 连线两端落边。
- C. 泳道图:按业务模块切分,纯 XML 矩形模拟免容器坑;泳道头逐字竖排 + 宽度约定;泳道内上下 V=40、左右边距相等。
- D. 约定值驱动布局:对反复出现的布局参数先定约定值再批量核查,而非被动逐个改。
- E. 通用工作法:把用户反复强调的纠错习惯固化(见第四章)。
四、通用工作法(最高优先,生成 / 修正任何图前先带入)
- 发现一类问题 → 全量排查同类:用户指出某条连线 / 某处布局有问题时,先用客观诊断脚本把「同类元素」全部扫一遍(每条连线、每个单据、每条泳道的高度 / 边距),确认是否存在普遍同类隐患一并修复,不要只改点名处。
- 先定约定值再批量核查:对反复出现的布局参数(泳道上下边距、头宽、左右边距等),先与用户定一个约定值,再写脚本量化核查全部同类元素一次性修正;严禁「发现一个改一个」被动修补。
五、版式规范(用户确认版)
- 字体:仿宋(
fontFamily=FangSong)。 - 开始 / 结束:
terminator(圆角 stadium)形状;开始填充绿#85ca39、黑字;结束填充红#e10000、白字;边框#404040。终端不带序号。 - 内容节点:
rectangle;白底#FFFFFF、边框#404040、黑字,带 10/20/30 编号。 - 判断节点:
rhombus(菱形);白底黑框,统一菱形不分系统内 / 外;文字写判断条件(提炼名词短语),绝不可把选项写进框——选项(是 / 否、可以 / 不可以)一律写在连线上作分支标签。 - 连线:
block箭头,颜色统一黑色#404040。 - 形状语义对照(节点类型 → draw.io 形状):
| 节点类型 | draw.io 形状 | 样式要点 |
|---|---|---|
| 业务单据 | shape=document; |
卷边文档形,白底黑框;仅用于真实单据 / 凭证实体 |
| 相关业务流程 | shape=mxgraph.flowchart.predefined_process; |
两侧双竖线矩形,白底黑框 |
| 业务操作 | rounded=0; |
普通矩形,白底黑框,带 10/20/30 编号 |
| 判断 | rhombus; |
白底黑框,统一菱形;文字写判断条件不写选项 |
| 开始 / 结束 | shape=terminator; |
圆角 stadium;开始绿 / 结束红;终端不带编号 |
> 前四种为 draw.io 内置标准形状;判断合并为单一菱形(不再做系统内 / 外实心区分)。开始 / 结束沿用本技能既有约定,不另起样式。
- 业务单据(document)只标真实单据实体:shape=document 仅用于客观存在的单据 / 凭证(如「XX 单据」「XX 申请」);创建动作属于业务操作 / 相关业务流程,画成矩形节点,不要把「创建动作」当成单据画成独立环节。判断口诀:是「一张单 / 凭证」用 document,是「一个动作」用矩形。
- 动作 + 产物单据组合:节点描述「生成 / 推生 / 查找某单据」时,在动作节点右下并列一个 document 节点作补充标注。单据是「补充」不是「替代」——动作节点完整描述原样保留,绝不因有单据就缩短动作文字。不存在独立「输入单据」类别,单据一律贴动作右下。
- 泳道版叠加形状语义:只改节点形状样式(document / predefined_process / rounded / rhombus / terminator),绝不动 x/y/几何尺寸、绝不动泳道与已确认的对称汇合布局;若改形状致高度变化,仅微调该节点自身 y 居中。不要把形状语义优化做成重画。
六、内容导向红线(生成前逐条自检)
> 以下红线均由用户反复纠错沉淀;流程图只表达「流程骨架」不承载细节,生成前逐条过,漏一条就返工。版式类(1–8)+ 几何类(9–14,含自检)+ 泳道类(15–16)。
- 只画流程骨架:节点文字只写动作 / 判断本身,确认口径、配置项、SQL、取数逻辑等细节移到【流程说明】章节;菜单 / 按钮类操作在流程图节点中也只写概述,【】标注留给【流程说明】。
- 标题只写业务主题:禁止「流程图 / 泳道图 / 示意图 / 框图」等图类型字眼;diagram
name与文件名同遵守。 - 菱形不带问号:菱形即表示「判断」,文字写条件即可。
- 连线全部黑色(
#404040),除非用户明确要求强调色。 - 编号必带 + 方位合规:内容节点必须带
10./20./30.…前缀;终端(开始 / 结束)不带;分支方位须符合第七章「编号方位约定」(左小右大、上小下大、不回跳),生成后跑scripts/check_flow.py核验。 - 框等宽 + 自动换行:矩形框统一宽度(建议 200),靠
whiteSpace=wrap自动换行,不手动插
。 - 分支汇合到中轴线:两条出路最终汇合到中轴进入结束框顶部正中,不能偏到两侧。
- 不收具体项目内容:技能内一律用
XX流程/XX判断占位,不写死具体客户名、项目名、业务术语。 - 框与框不重叠(含单据):任意两个节点 / 单据包围盒不得实质性重叠,必须留 ≥10px 间隙(节点与节点、节点与单据、单据与单据都要算)。
- 线不穿框:连线除连到自身源 / 目标外,不得穿过任何其它节点 / 单据包围盒。跨泳道竖线必须按 x 列做碰撞检查——竖线途经的每条泳道里,若该 x 落在某个节点的 x 区间内就绕开或改走其它 x 列。
- 线之间不重合:除「同源分支的共有短桩」「同汇合点的共有入桩」这两种必然共用外,两条连线不得占用同一段线段。
- 单据不跨泳道边界:document 节点整体须落在所属动作节点同一条泳道内,不可越出泳道上下边界;单据贴动作下方(上边框 = 动作下边框)自身又有约 50px 高,泳道须给这一列留足高度。
- 任何重排坐标后必须重做几何自检:转泳道 / 下移腾位 / 整链平移 / x·y 重排之后,不得凭肉眼判「差不多」——必须按 9–12 逐条复核,可用几何自检脚本客观核验。
- 连线两端必须落在框边(基准校验,最高优先):任意两框相连时,线起点(源框 exit)与终点(目标框 entry)都必须落在框四条边上,绝不能是框中心
exitX=0.5;exitY=0.5;entryX=0.5;entryY=0.5(中心连中心会让线从盒中钻出又插进下一盒)。判定:源端落点 = 源框(x+exitX·w, y+exitY·h),目标端落点 = 目标框(x+entryX·w, y+entryY·h),两点须分别落在各自框周长上。编排按两框相对方位选边:目标在下方→源出底(entry 顶)、目标在上方→源出顶(entry 底)、目标在右→源出右(entry 左)、目标在左→源出左(entry 右);菱形顶点即其上下左右边界,exit/entry 取(0.5,1)/(0.5,0)/(1,0.5)/(0,0.5)即落在顶点。可用_fix_edges.py式脚本批量校验「每条线两端是否都在框边上」,0 不合格才算过。 - 泳道头文字竖向(正立、从上到下):泳道头文字必须正立、逐字竖排、从上往下读(每个字一行)。禁止
horizontal=0——该属性是把整段文字旋转 90°(侧躺、从下往上读),方向错误。正确做法:value 里用<br>把每个字拆成独立一行(单元格须带html=1),配合align=center;verticalAlign=middle居中于窄条。 - 泳道头宽度 & 泳道内左右边距约定:① 头宽 = 文字块宽 + 30px(左右各留 15px,绝不用 130~140 宽条);② 泳道内流程图左右边距相等(以泳道左 / 右边界为锚),即
内容最左x − 泳道左边界 == 泳道右边界 − 内容最右(x+宽),整体平移使两边距一致;标题居中于泳道池水平中线。
七、编号 / 坐标 / 模板
编号规则(易错):用户口述的 1/2/3 只是「先后顺序提示」非最终编号;终端无编号,内容节点用 10/20/30… 十进制;绝不可遗漏编号前缀。
编号方位约定(用户 2026-09-28 明确):编号递增方向必须与视觉阅读方向一致——
① 同层看左右:同一判断框分出的多个分支,越靠左的分支首节点序号越小,越靠右越大;
② 跨层看上下:上层节点序号小于下层;分支汇合后的第一个节点序号大于两侧分支末节点,取两侧较大者 +10(不跳号、不逆序);
③ 整体不回跳:顺 10→20→…→80 读下来视线只往下往右,不出现"读 40 时视线往左上跳"。
三路以上并存的分支(如 通过 / 退回 / 取消),自左向右依次递增,"其他"类兜底分支放最右、序号最大。
布局受篇幅所限时按"尽可能"处理(脚本报 WARN 不报 FAIL),但主链方向不得逆转。
坐标约定(以中轴 x=400 为例):中轴线 x=400,开始 / 结束 / 主链节点中心对齐 400;左右分支中心对称(左支中心 210 / 右支中心 590,距中轴各 190);分支汇合先各自向下到同一横线 y、再水平收到 x=400、最后垂直进入结束框顶部正中;标题居中 x = 400 − w/2(如 w=450 → x=175)。
draw.io 模板:完整可复制的 XML 骨架按流程复杂度分三份放在 references/scenario-examples.md——示例一(线性无分支)/ 示例二(带判断分支、左右对称,即本技能主用结构)/ 示例三(三路以上多分支汇合)。生成时直接复制示例二整段再替换文案与坐标,不要凭记忆手写 XML。
骨架必记(其余照抄示例即可):
- 根结构三层:
<mxGraphModel>→<root>→ 先<mxCell id="0" />、再<mxCell id="1" parent="0" />,其后所有节点 / 连线一律parent="1"。 - 节点:
vertex="1";连线:edge="1"且source/target指向已存在的节点 id。 - 坐标按上面的坐标约定算(中轴 400、左右支 210/590、汇合收到 400、标题
x = 400 − w/2)。 - 配色 / 字号 / 形状按第五章;技术坑(document 短连线、菱形尺寸等)见
references/format.md第六节。
出图前必跑:scripts/check_flow.py(机械门禁,替代肉眼判合规;同时覆盖「编号方位」与「分支汇合对齐」两类):
python scripts/check_flow.py <文件名.drawio> # 单个
python scripts/check_flow.py <目录> # 批量,目录下 *.drawio 全检
FAIL(必须返工):
- 编号方位:同一判断框的分支按目标中心 x 升序后编号非严格递增(左分支编号 ≥ 右分支);分支首节点编号 ≤ 判断框自身编号(视线回跳)。
- 分支汇合:同一判断框分出的多条分支汇入同一节点时,各自下到的横线 y 不一致(会画成岔开的错层汇合,违反本节「坐标约定」)。
WARN(条件性,不阻断):分支节点缺十进制编号前缀;同层两分支编号重复;连线无水平入汇段、无法判定对齐。
- 退出码 0=无 FAIL,1=有 FAIL;WARN 不阻断。
- 输出逐条给出「判断框/汇合节点 + offending 连线的 x/y 与编号」,便于直接定位要改哪个节点。
> 区分「扇入」与「分支汇合」:顶部源单排等多路各自转进主节点属扇入,入线高度本就各异,门禁不判齐;只有同一判断框分出的多条分支最终汇合,才要求落在同一横线 y 上。
> 模板中 value 为示意文案,请按实际流程替换;坐标已按中轴 400、左右对称(210/590)、汇合居中排好,可直接复用或按比例平移。
八、泳道图(可选扩展)
当用户要求「泳道图 / 跨角色 / 按部门模块切分(仿 Visio 泳道)」时在普通流程图基础上叠加:
- 先确认维度与方向:用
AskUserQuestion与用户确认——维度(按角色 / 部门 / 功能模块)与方向(横向:条带自上而下 / 纵向:列自左向右),勿臆测。 - 维度必须落在「业务模块」上,绝不可自定义功能标签:泳道划分唯一权威来源是单据 / 凭证所属业务模块。禁止用「财务 / 系统」「供应链」「开票」这类拍脑袋功能标签当泳道名。判定每个节点归哪条道:看它产生或引用的单据属于哪个模块。节点一旦归错道,同模块节点被拆散到不同泳道,连线只能在泳道间乱窜、交叉缠绕——这正是「连接非常乱」的根因。
- 「财务」泳道只放涉「账务处理(总账 / 核算)」的环节:不涉账务的操作(如红冲 / 线下冲销,只是作废原单据不生成凭证)按其源业务模块归道,不要因名字带「财务」就丢进财务泳道——否则会凭空多出一条几乎空着的财务泳道,破坏模块内聚。
- 实现用纯 XML 矩形模拟:不依赖 draw.io 的 pool/lane 容器(坐标易乱),用三层矩形——外层框(无填充仅边框)、每条泳道(通栏淡色 tint 矩形)、每条泳道头(左侧窄条:宽度与文字竖排规则见第六章红线 15、16①,同色系饱和色 + 白字加粗)。泳道头永远只留左侧窄条,绝不同宽覆盖整条泳道。
- 版式纪律不变:编号前缀、菱形不带问号、菱形写判断条件、连线选项标签、终端绿 / 红、仿宋——全部沿用第五章。
- 叠加铁律:加泳道只重排 y 把节点分配到对应泳道,x 坐标一律复用已确认的非泳道版,保逐菱形对称不被破坏;
开始/结束归属一致(都在泳道内,首 / 末泳道各一);末端汇合横线在结束框上方、箭头朝下;末泳道底边拉满外框无缝隙。 - 布局约定值:高度 V=40(每泳道最上元素顶边距上边框 = 40、最下元素底边距下边框 = 40,相邻泳道首尾相接,泳道池高 = 各泳道高之和);头宽与左右边距按第六章红线 16。
- 交付前自检:① 逐菱形
|左支中心x−菱形中心x| == |右支中心x−菱形中心x|;② 开始 / 结束都在泳道内、归属一致;③ 汇合横线在结束框上方、箭头不反向;④ 末泳道底边与外框对齐无缝隙;⑤ 几何红线(9–12)全过 + 红线 14 两端落边 + 布局约定值(V=40 / 头宽 / 左右边距),重排 y 后必须重做。
九、生成与交付步骤
- 与用户确认流程步骤、判断条件、分支走向。
- 按规范定坐标(见第七章),确保中轴对齐、分支对称、汇合居中。
- 直接
Write一个.drawio文件(XML 结构见第七章模板);用python scripts/gen_svg.py <同名.drawio>生成同名.svg矢量图(viewBox 自动紧包内容、左右等距,见本章「交付物范围与同步」;勿手画 SVG 以免复现偏左坑)。 - 跑
scripts/check_flow.py核验:编号方位 + 分支汇合对齐,FAIL 项返工后重跑至 0。 present_files同时交付.drawio与同名.svg;并提示用户用 app.diagrams.net 打开 .drawio 二次编辑 / 导出。改过任意一处后须按本章「同步红线」同步两文件再交付。
文件命名与输出规范:
- 文件名一律带
【待确认】后缀,便于与用户正式文档区分;用户确认无误后去掉后缀另存终版(不覆盖草稿)。 - 绝不覆盖用户原文件——已有同名文件时新建带后缀的新文件。
- 输出目录 = 当前工作空间绝对路径,严禁放桌面 / 下载 / Documents 等个人敏感目录。
- 命名格式:
业务主题【待确认】.drawio(如XX审批判断【待确认】.drawio);只用业务描述,图的类型字眼禁则见第六章红线 2。 - 客户名 / 项目名不写死:未指定时用
XX流程/XX判断占位。
交付物范围与同步(默认双交付物):
- 默认同时交付两个文件,同名同目录、仅扩展名不同:①
业务主题【待确认】.drawio(可二次编辑源文件);②业务主题【待确认】.svg(手绘矢量图,直接插入 Word / 365 矢量使用)。 - SVG 生成口径(标准脚本,勿手画):由
python scripts/gen_svg.py <输入.drawio>从源文件生成同名.svg——版式严格对齐第五章(仿宋 / 绿开始 #85ca39 / 红结束 #e10000 / 黑字黑线 #404040 / block 箭头 / 菱形写条件 / 10–70 编号),viewBox在脚本内按节点包围盒自动算、左右等距,从机制上杜绝「偏左坑」(见 FAQ「Q4.1 / Q4.2」)。Word 文档已自带标题时,加--no-title去掉 draw.io 标题节点、只留正文。无 Inkscape / LibreOffice 环境也能出矢量;EMF / VSDX / PNG / PDF 仍按需由用户在 draw.io 内「文件 → 导出为」获取。 - 同步红线(必守 · 往期坑):凡改动
.drawio,必须同步更新同名.svg,二者不得漂移。只改源文件、忘改矢量图会导致 Word 里呈现的图与源不一致——这是已踩过的坑,严禁复发。 - 衍生格式(EMF / VSDX / PNG / PDF)不主动产出,属用户侧在 draw.io 内「文件 → 导出为」的动作;用户额外要时再导出。
十、依赖与前置条件
- 核心无脚本依赖:纯 draw.io XML 生成,由 AI 直接
Write一个.drawio文件即可,无需 Python / Node 环境即能产出。 - 可选:几何合规自检脚本(强烈建议用于复杂图):当图含多分支 / 泳道 / 大量连线时,用 Python 脚本做客观核验,避免「目测差不多」漏掉 框重叠 / 线穿框 / 线线重合 / 单据跨道 / 连线两端落边 五类问题(如
_drawio_selfcheck.py/_fix_edges.py/_diag.py)。脚本属工作区工具,不随技能打包分发;通常由生成器在输出目录生成或复用,用法为脚本内FILENAME常量指向目标.drawio后python <脚本>运行。 - 打开 / 编辑(免安装):对方用 https://app.diagrams.net 网页版 → 文件 → 打开 → 选
.drawio即可拖拽编辑;桌面版(免费,可选装)同理。 - 导出其它格式:draw.io 内「文件 → 导出为」可一键导出 Visio(.vsdx) / PNG / SVG / PDF。
- 字体:生成 XML 时显式写
fontFamily=FangSong,对方机器需有仿宋字体(中文 Windows 默认自带);无仿宋时浏览器会降级显示,不影响结构编辑。 - 降级方案(无网络环境):draw.io 网页版需联网,无网络时可安装 draw.io 桌面版(免费离线);字体缺失不影响 XML 结构编辑,仅显示降级。
- 安装方式(分享给同事):将技能文件夹解压到
~/.workbuddy/skills/yonyou-js-djw-drawio/后重启 WorkBuddy 即生效;或同机直接拷贝 skills 目录下的技能文件夹。
文件清单
yonyou-js-djw-drawio/
├── SKILL.md 本文件:维护边界 / 定位触发 / 核心能力 / 通用工作法 / 版式规范 / 内容红线 / 编号坐标模板 / 泳道图 / 交付步骤 / 依赖前置
├── scripts/
│ ├── check_flow.py 出图前机械门禁:编号方位(左小右大/不回跳)+ 分支汇合横线对齐
│ └── gen_svg.py 从 .drawio 生成插入 Word 的 SVG 矢量图(viewBox 自动紧包内容,根治偏左坑)
└── references/
├── format.md 完整版式规范 + draw.io XML 技术坑详解
├── faq.md 常见问题排查(按症状找答案)
└── scenario-examples.md 不同流程结构示例(线性 / 判断分支 / 多分支汇合)
> 出问题先查 references/faq.md(按症状找答案);要对照不同流程结构的 XML 写法看 references/scenario-examples.md。