将菜单的架构改成 MVP,并且进一步优化视图层和模型层的逻辑

This commit is contained in:
2026-04-01 19:42:05 +08:00
parent 0690d6a00e
commit 8b44b84d4c
54 changed files with 5362 additions and 2200 deletions

View File

@@ -0,0 +1,161 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6" pages="6">
<diagram name="显示指定层级菜单项流程" id="etDREPkzm4HehLh3Wzss">
<mxGraphModel dx="752" dy="817" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-1" parent="1" style="swimlane;childLayout=stackLayout;horizontal=1;fillColor=none;horizontalStack=1;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;strokeColor=none;stackBorder=10;stackSpacing=-12;resizable=1;align=center;points=[];whiteSpace=wrap;html=1;" value="显示指定层级菜单项" vertex="1">
<mxGeometry height="100" width="610" x="100" y="560" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-2" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级边框" vertex="1">
<mxGeometry height="57" width="160" x="10" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-3" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="获取该层级选中菜单项" vertex="1">
<mxGeometry height="57" width="182" x="158" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-4" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级下菜单项" vertex="1">
<mxGeometry height="57" width="162" x="328" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-5" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="反显选中项" vertex="1">
<mxGeometry height="57" width="122" x="478" y="33" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="39Z0d1SsfJPrEY7NQ2dw" name="MVP 事件处理流程">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="CHJpIxpMOG3BUcIp9TBN-1" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;外部事件&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="354" y="490" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-3" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Presenter 协同层" vertex="1">
<mxGeometry height="60" width="120" x="354" y="570" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-4" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="View 视图层" vertex="1">
<mxGeometry height="60" width="120" x="284" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-5" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Model 模型层&amp;nbsp;" vertex="1">
<mxGeometry height="60" width="120" x="424" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-6" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-5" style="endArrow=classic;html=1;rounded=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;jumpStyle=arc;startArrow=classic;startFill=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="594" y="630" as="sourcePoint" />
<mxPoint x="644" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-7" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-3" style="endArrow=classic;html=1;rounded=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="CHJpIxpMOG3BUcIp9TBN-4" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="374" y="670" as="sourcePoint" />
<mxPoint x="484" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="X0IBgYVqs8-xy_G4TQXO" name="MVP 架构示意图">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-14" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="300" width="600" x="100" y="300" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-1" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;MVP 架构示意图&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="600" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-2" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="180" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-3" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="207.5" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-4" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="415" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-5" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;View (视图层)&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-6" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Presenter (协调层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-7" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Model (数据层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-8" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责显示内容&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-9" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责流程协调&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-10" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责数据和规则&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-11" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LCD 显示&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LED 指示&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;按键输入&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="80" x="20" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-12" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;接收外部事件&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;调用 Model 处理&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;更新 View 状态&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="230" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-13" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;菜单逻辑计算&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;参数边界检查&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;传感器数据获取&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;数据存储读写&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="440" y="150" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="HxDEZlLnL0qG7Ur4KydZ" name="页面管理器架构设计">
<mxGraphModel dx="1363" dy="1481" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LuWILqjna9OgU5SQR-9t-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;页面管理器(&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;Page Manager&lt;/span&gt;&lt;/font&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="240" width="500" x="130" y="290" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;页面栈 Page Stack&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="130" y="400" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;栈顶页面&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="140" y="460" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;后台页面1&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="380" y="460" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="R1sptnBL6Yvgqzv1JQT0" name="菜单页面架构设计">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;菜单页面&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="164" y="480" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 23px;&quot;&gt;page&lt;/font&gt;" vertex="1">
<mxGeometry height="60" width="120" x="174" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;model&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="294" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;view&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="414" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;presenter&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="534" y="540" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="ae4TW034q6_u2rk01mG-" name="第 6 页">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,506 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6" pages="8">
<diagram name="显示指定层级菜单项流程" id="etDREPkzm4HehLh3Wzss">
<mxGraphModel dx="752" dy="817" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-1" parent="1" style="swimlane;childLayout=stackLayout;horizontal=1;fillColor=none;horizontalStack=1;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;strokeColor=none;stackBorder=10;stackSpacing=-12;resizable=1;align=center;points=[];whiteSpace=wrap;html=1;" value="显示指定层级菜单项" vertex="1">
<mxGeometry height="100" width="610" x="100" y="560" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-2" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级边框" vertex="1">
<mxGeometry height="57" width="160" x="10" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-3" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="获取该层级选中菜单项" vertex="1">
<mxGeometry height="57" width="182" x="158" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-4" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级下菜单项" vertex="1">
<mxGeometry height="57" width="162" x="328" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-5" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="反显选中项" vertex="1">
<mxGeometry height="57" width="122" x="478" y="33" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="39Z0d1SsfJPrEY7NQ2dw" name="MVP 事件处理流程">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="CHJpIxpMOG3BUcIp9TBN-1" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;外部事件&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="354" y="490" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-3" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Presenter 协同层" vertex="1">
<mxGeometry height="60" width="120" x="354" y="570" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-4" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="View 视图层" vertex="1">
<mxGeometry height="60" width="120" x="284" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-5" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Model 模型层&amp;nbsp;" vertex="1">
<mxGeometry height="60" width="120" x="424" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-6" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-5" style="endArrow=classic;html=1;rounded=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;jumpStyle=arc;startArrow=classic;startFill=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="594" y="630" as="sourcePoint" />
<mxPoint x="644" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-7" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-3" style="endArrow=classic;html=1;rounded=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="CHJpIxpMOG3BUcIp9TBN-4" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="374" y="670" as="sourcePoint" />
<mxPoint x="484" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="X0IBgYVqs8-xy_G4TQXO" name="MVP 架构示意图">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-14" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="300" width="600" x="100" y="300" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-1" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;MVP 架构示意图&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="600" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-2" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="180" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-3" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="207.5" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-4" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="415" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-5" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;View (视图层)&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-6" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Presenter (协调层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-7" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Model (数据层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-8" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责显示内容&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-9" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责流程协调&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-10" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责数据和规则&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-11" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LCD 显示&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LED 指示&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;按键输入&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="80" x="20" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-12" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;接收外部事件&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;调用 Model 处理&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;更新 View 状态&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="230" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-13" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;菜单逻辑计算&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;参数边界检查&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;传感器数据获取&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;数据存储读写&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="440" y="150" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="HxDEZlLnL0qG7Ur4KydZ" name="页面管理器架构设计">
<mxGraphModel dx="1363" dy="1481" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LuWILqjna9OgU5SQR-9t-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;页面管理器(&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;Page Manager&lt;/span&gt;&lt;/font&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="240" width="500" x="130" y="290" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;页面栈 Page Stack&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="130" y="400" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;栈顶页面&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="140" y="460" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;后台页面1&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="380" y="460" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="R1sptnBL6Yvgqzv1JQT0" name="菜单页面架构设计">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;菜单页面&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="164" y="480" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 23px;&quot;&gt;page&lt;/font&gt;" vertex="1">
<mxGeometry height="60" width="120" x="174" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;model&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="294" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;view&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="414" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;presenter&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="534" y="540" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="ae4TW034q6_u2rk01mG-" name="菜单树构建逻辑">
<mxGraphModel dx="1224" dy="1192" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="uTcgnOhw-1hiChn4308x-321" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="主菜单(class=0)" vertex="1">
<mxGeometry height="54" width="171" x="36" y="20" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-322" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="参数设置(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="260" y="140" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-323" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="信息查看(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="250" y="276" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-324" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="关于系统(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="250" y="430" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-325" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="定值设置(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="107" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-326" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="开关设置(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="207" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-327" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="运行信息(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="294" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-328" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-321" style="startArrow=none;endArrow=block;entryX=0.64;entryY=0;rounded=0;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-322" value="lower">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="380" y="47" />
</Array>
<mxPoint x="240" y="40" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-329" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0.667;exitY=1.037;entryX=0.72;entryY=0;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="behind">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-330" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.75;exitY=1;entryX=0.75;entryY=0;rounded=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" target="uTcgnOhw-1hiChn4308x-324" value="behind">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-331" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-324" style="startArrow=none;endArrow=block;exitX=0.75;exitY=1;entryX=-0.001;entryY=0.171;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-322" value="behind 回环">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="390" y="520" />
<mxPoint x="110" y="520" />
<mxPoint x="110" y="149" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-332" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0;exitY=0.75;entryX=0.25;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-324" value="before 回环">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="180" y="180" />
<mxPoint x="180" y="500" />
<mxPoint x="297" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-333" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.269;exitY=0.012;entryX=0.33;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="before">
<mxGeometry relative="1" as="geometry">
<mxPoint x="321.79" y="276" as="sourcePoint" />
<mxPoint x="300.00000000000006" y="194" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-334" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-324" style="startArrow=none;endArrow=block;exitX=0.4;exitY=0;entryX=0.399;entryY=0.986;rounded=0;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="before">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-335" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;entryDx=0;entryDy=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="uTcgnOhw-1hiChn4308x-325" value="lower">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-336" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.912;exitY=0.975;entryX=0.91;entryY=0;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-326" value="behind">
<mxGeometry relative="1" x="0.1907" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-337" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0.332;exitY=-0.003;entryX=0.33;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-325" value="behind 回环">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-338" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.669;exitY=0.986;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.673;entryY=-0.017;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-326" value="before 回环">
<mxGeometry relative="1" x="0.1635" y="-6" as="geometry">
<mxPoint as="offset" />
<mxPoint x="647" y="167" as="sourcePoint" />
<mxPoint x="645" y="187" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-339" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0.133;exitY=-0.013;entryX=0.13;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-325" value="before">
<mxGeometry relative="1" x="0.0153" y="9" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-340" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.999;exitY=0.807;entryX=0;entryY=0.5;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-327" value="lower">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-341" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0.21;exitY=0;entryX=0.5;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" target="uTcgnOhw-1hiChn4308x-321" value="higher">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-342" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0;exitY=0.5;entryX=0.26;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-321" value="higher">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="80" y="303" />
<mxPoint x="80" y="276" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-343" edge="1" parent="1" style="startArrow=none;endArrow=block;entryX=0;entryY=0.83;rounded=0;edgeStyle=orthogonalEdgeStyle;" value="higher">
<mxGeometry relative="1" x="0.4125" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="250" y="460" />
<mxPoint x="20" y="460" />
<mxPoint x="20" y="40" />
</Array>
<mxPoint x="250" y="460" as="sourcePoint" />
<mxPoint x="36" y="40.019999999999996" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-344" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.5;exitY=0;entryX=0.905;entryY=0.019;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;entryPerimeter=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-322" value="higher">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="614" y="80" />
<mxPoint x="429" y="80" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-345" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0;exitY=0.5;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;" value="higher">
<mxGeometry relative="1" x="-0.3947" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="420" y="234" />
</Array>
<mxPoint x="420" y="194" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-346" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="startArrow=none;endArrow=block;exitX=0.43;exitY=0;entryX=1.005;entryY=0.163;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="higher">
<mxGeometry relative="1" x="0.4124" y="-3" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="600" y="285" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-347" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="endArrow=classic;html=1;rounded=0;exitX=0.677;exitY=0.972;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.709;entryY=0.015;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" target="uTcgnOhw-1hiChn4308x-327" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="710" y="380" />
<mxPoint x="730" y="330" />
<mxPoint x="730" y="300" />
<mxPoint x="720" y="260" />
</Array>
<mxPoint x="657" y="460" as="sourcePoint" />
<mxPoint x="707" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-348" connectable="0" parent="uTcgnOhw-1hiChn4308x-347" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="before" vertex="1">
<mxGeometry relative="1" x="-0.0353" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-351" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-327" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="750" y="230" />
<mxPoint x="750" y="400" />
<mxPoint x="590" y="390" />
</Array>
<mxPoint x="570" y="484" as="sourcePoint" />
<mxPoint x="620" y="434" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-352" connectable="0" parent="uTcgnOhw-1hiChn4308x-351" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="behind" vertex="1">
<mxGeometry relative="1" x="0.0226" y="-5" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="5RVJ2jwpCgCB7Hji9JxO" name="菜单树判断逻辑">
<mxGraphModel dx="2720" dy="2649" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-1" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass &lt; byNextClass" vertex="1">
<mxGeometry height="54" width="241" x="250" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-2" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="进入子菜单" vertex="1">
<mxGeometry height="54" width="140" x="510" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-3" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="current.lower = next" vertex="1">
<mxGeometry height="54" width="190" x="670" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-4" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.higher = current" vertex="1">
<mxGeometry height="54" width="209" x="891" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-5" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass == byNextClass" vertex="1">
<mxGeometry height="54" width="240" x="250" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-6" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="同层兄弟" vertex="1">
<mxGeometry height="54" width="140" x="511" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-7" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="current.behind = next" vertex="1">
<mxGeometry height="54" width="190" x="670" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-8" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.before = current" vertex="1">
<mxGeometry height="54" width="210" x="890" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-9" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.higher = current.higher" vertex="1">
<mxGeometry height="78" width="260" x="1140" y="472" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-10" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass &gt; byNextClass" vertex="1">
<mxGeometry height="54" width="241" x="250" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-11" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="从深层回退" vertex="1">
<mxGeometry height="54" width="140" x="510" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-12" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.before = ptLast[nextClass]" vertex="1">
<mxGeometry height="54" width="190" x="670" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-27" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="HZ-q9eH6YA3dt1o5nvaf-26" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-13" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="ptLast[nextClass].behind=next" vertex="1">
<mxGeometry height="54" width="190" x="1140" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-14" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-1" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-2" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-15" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-2" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-3" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-16" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-3" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-4" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-17" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-5" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-6" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-18" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-6" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-7" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-19" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-7" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-20" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-8" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-9" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-21" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-10" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-11" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-22" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-11" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-12" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-23" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-12" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;rounded=0;exitDx=0;exitDy=0;" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="890" y="618" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-25" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="HZ-q9eH6YA3dt1o5nvaf-13" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-24" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.behind=ptLast[nextClass].higher" vertex="1">
<mxGeometry height="54" width="209" x="891" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-26" parent="1" style="whiteSpace=wrap;html=1;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=2;" value="形成回环" vertex="1">
<mxGeometry height="55" width="69" x="1351" y="591" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="zG06bic9s9vmrHAmIL5z" name="模型层初始化顺序">
<mxGraphModel dx="628" dy="611" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="4pC_cjyCFYns3d6entyY-21" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="4pC_cjyCFYns3d6entyY-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-1" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);rounded=1;" value="开始" vertex="1">
<mxGeometry height="24" width="210" x="320" y="120" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-3" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算菜单个数 maxItem " vertex="1">
<mxGeometry height="30" width="210" x="320" y="171" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-5" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="统计 0 级菜单数量 by0LevelNum " vertex="1">
<mxGeometry height="30" width="210" x="320" y="225" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-6" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="构建菜单树链路" vertex="1">
<mxGeometry height="30" width="210" x="320" y="279" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-7" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="补充带子菜单项的右侧箭头》" vertex="1">
<mxGeometry height="40" width="210" x="320" y="328" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-8" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算各节点 wPos 与 wNum" vertex="1">
<mxGeometry height="30" width="210" x="320" y="387" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-9" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算整棵菜单树的显示位置" vertex="1">
<mxGeometry height="30" width="210" x="320" y="441" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-10" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);rounded=1;" value="函数结束" vertex="1">
<mxGeometry height="20" width="210" x="320" y="500" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-13" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-3" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;entryDx=0;entryDy=0;" target="4pC_cjyCFYns3d6entyY-5" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="426" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-15" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-5" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-6" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-16" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-6" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-7" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-17" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-7" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-18" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-8" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-9" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-19" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-9" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-10" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,506 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/29.6.6 Chrome/144.0.7559.236 Electron/40.8.4 Safari/537.36" version="29.6.6" pages="8">
<diagram name="显示指定层级菜单项流程" id="etDREPkzm4HehLh3Wzss">
<mxGraphModel dx="752" dy="817" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-1" parent="1" style="swimlane;childLayout=stackLayout;horizontal=1;fillColor=none;horizontalStack=1;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;strokeColor=none;stackBorder=10;stackSpacing=-12;resizable=1;align=center;points=[];whiteSpace=wrap;html=1;" value="显示指定层级菜单项" vertex="1">
<mxGeometry height="100" width="610" x="100" y="560" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-2" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级边框" vertex="1">
<mxGeometry height="57" width="160" x="10" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-3" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="获取该层级选中菜单项" vertex="1">
<mxGeometry height="57" width="182" x="158" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-4" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="绘制该层级下菜单项" vertex="1">
<mxGeometry height="57" width="162" x="328" y="33" as="geometry" />
</mxCell>
<mxCell id="Dq_V7AeBsTtqcCJDGkD4-5" parent="Dq_V7AeBsTtqcCJDGkD4-1" style="shape=step;perimeter=stepPerimeter;fixedSize=1;points=[];whiteSpace=wrap;html=1;" value="反显选中项" vertex="1">
<mxGeometry height="57" width="122" x="478" y="33" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="39Z0d1SsfJPrEY7NQ2dw" name="MVP 事件处理流程">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="CHJpIxpMOG3BUcIp9TBN-1" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;text-wrap-mode: nowrap;&quot;&gt;外部事件&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="354" y="490" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-3" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Presenter 协同层" vertex="1">
<mxGeometry height="60" width="120" x="354" y="570" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-4" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="View 视图层" vertex="1">
<mxGeometry height="60" width="120" x="284" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-5" parent="1" style="whiteSpace=wrap;html=1;rounded=0;" value="Model 模型层&amp;nbsp;" vertex="1">
<mxGeometry height="60" width="120" x="424" y="680" as="geometry" />
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-6" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-5" style="endArrow=classic;html=1;rounded=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;jumpStyle=arc;startArrow=classic;startFill=1;" target="CHJpIxpMOG3BUcIp9TBN-3" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="594" y="630" as="sourcePoint" />
<mxPoint x="644" y="580" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="CHJpIxpMOG3BUcIp9TBN-7" edge="1" parent="1" source="CHJpIxpMOG3BUcIp9TBN-3" style="endArrow=classic;html=1;rounded=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="CHJpIxpMOG3BUcIp9TBN-4" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<mxPoint x="374" y="670" as="sourcePoint" />
<mxPoint x="484" y="660" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="X0IBgYVqs8-xy_G4TQXO" name="MVP 架构示意图">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-14" connectable="0" parent="1" style="group" value="" vertex="1">
<mxGeometry height="300" width="600" x="100" y="300" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-1" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 21px;&quot;&gt;&lt;b&gt;MVP 架构示意图&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="50" width="600" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-2" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="180" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-3" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="207.5" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-4" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="" vertex="1">
<mxGeometry height="240" width="185" x="415" y="60" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-5" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;View (视图层)&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-6" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Presenter (协调层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-7" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;b style=&quot;font-size: 16px;&quot;&gt;Model (数据层)&lt;/b&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="70" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-8" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责显示内容&lt;/b&gt;&lt;/span&gt;" vertex="1">
<mxGeometry height="40" width="160" x="10" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-9" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责流程协调&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="220" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-10" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="rounded=1;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;b&gt;负责数据和规则&lt;/b&gt;&lt;/font&gt;" vertex="1">
<mxGeometry height="40" width="160" x="430" y="250" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-11" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LCD 显示&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;LED 指示&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;按键输入&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="80" x="20" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-12" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;接收外部事件&lt;/font&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;调用 Model 处理&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;更新 View 状态&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="230" y="150" as="geometry" />
</mxCell>
<mxCell id="wkRVSMCZ4WoaQlwrK3vp-13" parent="wkRVSMCZ4WoaQlwrK3vp-14" style="text;html=1;whiteSpace=wrap;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;rounded=0;" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;菜单逻辑计算&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;div&gt;&lt;b&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;参数边界检查&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;传感器数据获取&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;b&gt;数据存储读写&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="60" width="120" x="440" y="150" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="HxDEZlLnL0qG7Ur4KydZ" name="页面管理器架构设计">
<mxGraphModel dx="1363" dy="1481" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="LuWILqjna9OgU5SQR-9t-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;页面管理器(&lt;span style=&quot;background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));&quot;&gt;Page Manager&lt;/span&gt;&lt;/font&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="240" width="500" x="130" y="290" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;页面栈 Page Stack&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="130" y="400" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;栈顶页面&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="140" y="460" as="geometry" />
</mxCell>
<mxCell id="LuWILqjna9OgU5SQR-9t-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;后台页面1&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="240" x="380" y="460" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="R1sptnBL6Yvgqzv1JQT0" name="菜单页面架构设计">
<mxGraphModel dx="1090" dy="1185" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 29px;&quot;&gt;菜单页面&lt;/font&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 29px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;" vertex="1">
<mxGeometry height="130" width="500" x="164" y="480" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-2" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;font style=&quot;font-size: 23px;&quot;&gt;page&lt;/font&gt;" vertex="1">
<mxGeometry height="60" width="120" x="174" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-3" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;model&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="294" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;view&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="414" y="540" as="geometry" />
</mxCell>
<mxCell id="_v9aWsQiSdQDmT4Fcf7S-5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;" value="&lt;span style=&quot;font-size: 23px;&quot;&gt;presenter&lt;/span&gt;" vertex="1">
<mxGeometry height="60" width="120" x="534" y="540" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="ae4TW034q6_u2rk01mG-" name="菜单树构建逻辑">
<mxGraphModel dx="1224" dy="1192" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="uTcgnOhw-1hiChn4308x-321" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="主菜单(class=0)" vertex="1">
<mxGeometry height="54" width="171" x="36" y="20" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-322" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="参数设置(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="260" y="140" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-323" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="信息查看(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="250" y="276" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-324" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="关于系统(class=1)" vertex="1">
<mxGeometry height="54" width="187" x="250" y="430" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-325" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="定值设置(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="107" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-326" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="开关设置(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="207" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-327" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="运行信息(class=2)" vertex="1">
<mxGeometry height="54" width="187" x="520" y="294" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-328" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-321" style="startArrow=none;endArrow=block;entryX=0.64;entryY=0;rounded=0;edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-322" value="lower">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="380" y="47" />
</Array>
<mxPoint x="240" y="40" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-329" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0.667;exitY=1.037;entryX=0.72;entryY=0;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="behind">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-330" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.75;exitY=1;entryX=0.75;entryY=0;rounded=0;exitDx=0;exitDy=0;entryDx=0;entryDy=0;" target="uTcgnOhw-1hiChn4308x-324" value="behind">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-331" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-324" style="startArrow=none;endArrow=block;exitX=0.75;exitY=1;entryX=-0.001;entryY=0.171;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-322" value="behind 回环">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="390" y="520" />
<mxPoint x="110" y="520" />
<mxPoint x="110" y="149" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-332" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0;exitY=0.75;entryX=0.25;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-324" value="before 回环">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="180" y="180" />
<mxPoint x="180" y="500" />
<mxPoint x="297" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-333" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.269;exitY=0.012;entryX=0.33;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" value="before">
<mxGeometry relative="1" as="geometry">
<mxPoint x="321.79" y="276" as="sourcePoint" />
<mxPoint x="300.00000000000006" y="194" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-334" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-324" style="startArrow=none;endArrow=block;exitX=0.4;exitY=0;entryX=0.399;entryY=0.986;rounded=0;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="before">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-335" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;entryDx=0;entryDy=0;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;" target="uTcgnOhw-1hiChn4308x-325" value="lower">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-336" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.912;exitY=0.975;entryX=0.91;entryY=0;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-326" value="behind">
<mxGeometry relative="1" x="0.1907" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-337" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0.332;exitY=-0.003;entryX=0.33;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-325" value="behind 回环">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-338" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.669;exitY=0.986;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.673;entryY=-0.017;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-326" value="before 回环">
<mxGeometry relative="1" x="0.1635" y="-6" as="geometry">
<mxPoint as="offset" />
<mxPoint x="647" y="167" as="sourcePoint" />
<mxPoint x="645" y="187" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-339" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0.133;exitY=-0.013;entryX=0.13;entryY=1;rounded=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-325" value="before">
<mxGeometry relative="1" x="0.0153" y="9" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-340" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0.999;exitY=0.807;entryX=0;entryY=0.5;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;exitDx=0;exitDy=0;exitPerimeter=0;" target="uTcgnOhw-1hiChn4308x-327" value="lower">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-341" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-322" style="startArrow=none;endArrow=block;exitX=0.21;exitY=0;entryX=0.5;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" target="uTcgnOhw-1hiChn4308x-321" value="higher">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-342" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-323" style="startArrow=none;endArrow=block;exitX=0;exitY=0.5;entryX=0.26;entryY=1;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-321" value="higher">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="80" y="303" />
<mxPoint x="80" y="276" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-343" edge="1" parent="1" style="startArrow=none;endArrow=block;entryX=0;entryY=0.83;rounded=0;edgeStyle=orthogonalEdgeStyle;" value="higher">
<mxGeometry relative="1" x="0.4125" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="250" y="460" />
<mxPoint x="20" y="460" />
<mxPoint x="20" y="40" />
</Array>
<mxPoint x="250" y="460" as="sourcePoint" />
<mxPoint x="36" y="40.019999999999996" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-344" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-325" style="startArrow=none;endArrow=block;exitX=0.5;exitY=0;entryX=0.905;entryY=0.019;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;entryPerimeter=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-322" value="higher">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="614" y="80" />
<mxPoint x="429" y="80" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-345" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-326" style="startArrow=none;endArrow=block;exitX=0;exitY=0.5;rounded=0;edgeStyle=orthogonalEdgeStyle;exitDx=0;exitDy=0;" value="higher">
<mxGeometry relative="1" x="-0.3947" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="420" y="234" />
</Array>
<mxPoint x="420" y="194" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-346" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="startArrow=none;endArrow=block;exitX=0.43;exitY=0;entryX=1.005;entryY=0.163;rounded=0;edgeStyle=orthogonalEdgeStyle;entryDx=0;entryDy=0;entryPerimeter=0;" target="uTcgnOhw-1hiChn4308x-323" value="higher">
<mxGeometry relative="1" x="0.4124" y="-3" as="geometry">
<mxPoint as="offset" />
<Array as="points">
<mxPoint x="600" y="285" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-347" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="endArrow=classic;html=1;rounded=0;exitX=0.677;exitY=0.972;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.709;entryY=0.015;entryDx=0;entryDy=0;entryPerimeter=0;curved=1;" target="uTcgnOhw-1hiChn4308x-327" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="710" y="380" />
<mxPoint x="730" y="330" />
<mxPoint x="730" y="300" />
<mxPoint x="720" y="260" />
</Array>
<mxPoint x="657" y="460" as="sourcePoint" />
<mxPoint x="707" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-348" connectable="0" parent="uTcgnOhw-1hiChn4308x-347" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="before" vertex="1">
<mxGeometry relative="1" x="-0.0353" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-351" edge="1" parent="1" source="uTcgnOhw-1hiChn4308x-327" style="curved=1;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" target="uTcgnOhw-1hiChn4308x-327" value="">
<mxGeometry height="50" relative="1" width="50" as="geometry">
<Array as="points">
<mxPoint x="750" y="230" />
<mxPoint x="750" y="400" />
<mxPoint x="590" y="390" />
</Array>
<mxPoint x="570" y="484" as="sourcePoint" />
<mxPoint x="620" y="434" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="uTcgnOhw-1hiChn4308x-352" connectable="0" parent="uTcgnOhw-1hiChn4308x-351" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" value="behind" vertex="1">
<mxGeometry relative="1" x="0.0226" y="-5" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="5RVJ2jwpCgCB7Hji9JxO" name="菜单树判断逻辑">
<mxGraphModel dx="2720" dy="2649" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-1" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass &lt; byNextClass" vertex="1">
<mxGeometry height="54" width="241" x="250" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-2" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="进入子菜单" vertex="1">
<mxGeometry height="54" width="140" x="510" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-3" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="current.lower = next" vertex="1">
<mxGeometry height="54" width="190" x="670" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-4" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.higher = current" vertex="1">
<mxGeometry height="54" width="209" x="891" y="380" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-5" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass == byNextClass" vertex="1">
<mxGeometry height="54" width="240" x="250" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-6" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="同层兄弟" vertex="1">
<mxGeometry height="54" width="140" x="511" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-7" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="current.behind = next" vertex="1">
<mxGeometry height="54" width="190" x="670" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-8" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.before = current" vertex="1">
<mxGeometry height="54" width="210" x="890" y="484" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-9" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.higher = current.higher" vertex="1">
<mxGeometry height="78" width="260" x="1140" y="472" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-10" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="byCurClass &gt; byNextClass" vertex="1">
<mxGeometry height="54" width="241" x="250" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-11" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="从深层回退" vertex="1">
<mxGeometry height="54" width="140" x="510" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-12" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.before = ptLast[nextClass]" vertex="1">
<mxGeometry height="54" width="190" x="670" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-27" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="HZ-q9eH6YA3dt1o5nvaf-26" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-13" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="ptLast[nextClass].behind=next" vertex="1">
<mxGeometry height="54" width="190" x="1140" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-14" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-1" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-2" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-15" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-2" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-3" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-16" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-3" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-4" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-17" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-5" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-6" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-18" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-6" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-7" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-19" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-7" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-20" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-8" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-9" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-21" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-10" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-11" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-22" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-11" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;rounded=0;" target="HZ-q9eH6YA3dt1o5nvaf-12" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-23" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-12" style="curved=1;startArrow=none;endArrow=block;exitX=1;exitY=0.5;rounded=0;exitDx=0;exitDy=0;" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="890" y="618" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-25" edge="1" parent="1" source="HZ-q9eH6YA3dt1o5nvaf-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" target="HZ-q9eH6YA3dt1o5nvaf-13" value="">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-24" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="next.behind=ptLast[nextClass].higher" vertex="1">
<mxGeometry height="54" width="209" x="891" y="591" as="geometry" />
</mxCell>
<mxCell id="HZ-q9eH6YA3dt1o5nvaf-26" parent="1" style="whiteSpace=wrap;html=1;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);strokeWidth=2;" value="形成回环" vertex="1">
<mxGeometry height="55" width="69" x="1351" y="591" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="zG06bic9s9vmrHAmIL5z" name="第 8 页">
<mxGraphModel dx="628" dy="611" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="4pC_cjyCFYns3d6entyY-21" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" target="4pC_cjyCFYns3d6entyY-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-1" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);rounded=1;" value="开始" vertex="1">
<mxGeometry height="24" width="210" x="320" y="120" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-3" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算菜单个数 maxItem " vertex="1">
<mxGeometry height="30" width="210" x="320" y="171" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-5" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="统计 0 级菜单数量 by0LevelNum " vertex="1">
<mxGeometry height="30" width="210" x="320" y="225" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-6" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="构建菜单树链路" vertex="1">
<mxGeometry height="30" width="210" x="320" y="279" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-7" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="补充带子菜单项的右侧箭头》" vertex="1">
<mxGeometry height="40" width="210" x="320" y="328" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-8" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算各节点 wPos 与 wNum" vertex="1">
<mxGeometry height="30" width="210" x="320" y="387" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-9" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);" value="计算整棵菜单树的显示位置" vertex="1">
<mxGeometry height="30" width="210" x="320" y="441" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-10" parent="1" style="whiteSpace=wrap;strokeWidth=2;fillColor=light-dark(#eeeeee,#1f2020);strokeColor=light-dark(#999999,#cccccc);fontColor=light-dark(#333333,#cccccc);rounded=1;" value="函数结束" vertex="1">
<mxGeometry height="20" width="210" x="320" y="500" as="geometry" />
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-13" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-3" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;entryDx=0;entryDy=0;" target="4pC_cjyCFYns3d6entyY-5" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
<mxPoint x="426" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-15" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-5" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-6" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-16" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-6" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-7" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-17" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-7" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-8" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-18" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-8" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-9" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="4pC_cjyCFYns3d6entyY-19" edge="1" parent="1" source="4pC_cjyCFYns3d6entyY-9" style="curved=1;startArrow=none;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;rounded=0;" target="4pC_cjyCFYns3d6entyY-10" value="">
<mxGeometry relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>