plan-backend-migration-architecture.drawio 23 KB
<mxfile host="app.diagrams.net" modified="2026-02-25T00:00:00.000Z" agent="5.0" version="24.0.0">
  <diagram id="plan-migration" name="计划书后端迁移架构">
    <mxGraphModel dx="1400" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1400" pageHeight="1200" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>

        <mxCell id="title" value="计划书后端迁移架构图" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=24;fontStyle=1" vertex="1" parent="1">
          <mxGeometry x="450" y="20" width="500" height="50" as="geometry"/>
        </mxCell>

        <mxCell id="frontend-title" value="前端架构(当前)" style="swimlane;fontSize=16;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=2;" vertex="1" parent="1">
          <mxGeometry x="60" y="100" width="560" height="680" as="geometry"/>
        </mxCell>

        <mxCell id="config-box" value="配置层 Config" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" vertex="1" parent="frontend-title">
          <mxGeometry y="40" width="560" height="180" as="geometry"/>
        </mxCell>

        <mxCell id="plan-templates" value="plan-templates.js&#xa;产品映射: form_sn → TemplateConfig&#xa;基础 Schema、字段映射" style="align=left;strokeColor=none;fillColor=#d5e8d4;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="config-box">
          <mxGeometry y="40" width="560" height="50" as="geometry"/>
        </mxCell>

        <mxCell id="plan-fields" value="plan-fields.js&#xa;字段类型定义、验证规则、字段分组" style="align=left;strokeColor=none;fillColor=#d5e8d4;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="config-box">
          <mxGeometry y="100" width="560" height="50" as="geometry"/>
        </mxCell>

        <mxCell id="container-box" value="容器层 Container" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" vertex="1" parent="frontend-title">
          <mxGeometry y="220" width="560" height="140" as="geometry"/>
        </mxCell>

        <mxCell id="plan-form-container" value="PlanFormContainer.vue&#xa;1. 根据 form_sn 获取配置&#xa;2. 合并 product.plan_config&#xa;3. 动态加载模板组件" style="align=left;strokeColor=none;fillColor=#e1d5e7;strokeColor=#9673a6;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="container-box">
          <mxGeometry y="40" width="560" height="100" as="geometry"/>
        </mxCell>

        <mxCell id="template-box" value="模板层 Template" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" vertex="1" parent="frontend-title">
          <mxGeometry y="360" width="560" height="180" as="geometry"/>
        </mxCell>

        <mxCell id="life-template" value="LifeInsuranceTemplate&#xa;人寿保险模板" style="align=left;strokeColor=none;fillColor=#f8cecc;strokeColor=#b85450;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="template-box">
          <mxGeometry y="40" width="170" height="50" as="geometry"/>
        </mxCell>

        <mxCell id="critical-template" value="CriticalIllnessTemplate&#xa;重疾保险模板" style="align=left;strokeColor=none;fillColor=#f8cecc;strokeColor=#b85450;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="template-box">
          <mxGeometry y="100" width="170" height="50" as="geometry"/>
        </mxCell>

        <mxCell id="savings-template" value="SavingsTemplate&#xa;储蓄型保险模板" style="align=left;strokeColor=none;fillColor=#f8cecc;strokeColor=#b85450;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="template-box">
          <mxGeometry y="160" width="170" height="20" as="geometry"/>
        </mxCell>

        <mxCell id="fields-box" value="字段组件层 Fields" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;strokeWidth=2;" vertex="1" parent="frontend-title">
          <mxGeometry y="540" width="560" height="100" as="geometry"/>
        </mxCell>

        <mxCell id="field-components" value="NameInput | AmountKeyboard | DatePicker | Radio | Select | AgePicker | PaymentPeriodRadio" style="align=left;strokeColor=none;fillColor=#ffe6cc;strokeColor=#d79b00;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="fields-box">
          <mxGeometry y="40" width="560" height="60" as="geometry"/>
        </mxCell>

        <mxCell id="backend-title" value="后端架构(迁移后)" style="swimlane;fontSize=16;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=2;" vertex="1" parent="1">
          <mxGeometry x="680" y="100" width="560" height="680" as="geometry"/>
        </mxCell>

        <mxCell id="database-box" value="数据存储层" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" vertex="1" parent="backend-title">
          <mxGeometry y="40" width="560" height="140" as="geometry"/>
        </mxCell>

        <mxCell id="product-table" value="product_configs 表&#xa;&#xa;form_sn (PK) | name | component&#xa;config (JSON): currency, form_schema, submit_mapping" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=11;fontFamily=Courier New;rounded=1;" vertex="1" parent="database-box">
          <mxGeometry y="40" width="560" height="100" as="geometry"/>
        </mxCell>

        <mxCell id="api-box" value="API 层" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" vertex="1" parent="backend-title">
          <mxGeometry y="180" width="560" height="240" as="geometry"/>
        </mxCell>

        <mxCell id="api-get" value="GET /api/plan/config/:form_sn" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="api-box">
          <mxGeometry y="40" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="api-batch" value="GET /api/plan/config/batch" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="api-box">
          <mxGeometry y="80" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="api-add" value="POST /srv/?a=proposal&amp;t=add" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="api-box">
          <mxGeometry y="120" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="api-list" value="GET /srv/?a=proposal&amp;t=list" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="api-box">
          <mxGeometry y="160" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="admin-box" value="配置管理后台" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=2;" vertex="1" parent="backend-title">
          <mxGeometry y="420" width="560" height="180" as="geometry"/>
        </mxCell>

        <mxCell id="admin-crud" value="配置 CRUD 操作:创建/编辑/删除/预览" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="admin-box">
          <mxGeometry y="40" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="admin-parser" value="文档解析器集成:AI 智能提取配置" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="admin-box">
          <mxGeometry y="80" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="admin-validator" value="配置验证器:JSON Schema 验证" style="align=left;strokeColor=none;fillColor=#ffffff;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=12;rounded=1;" vertex="1" parent="admin-box">
          <mxGeometry y="120" width="560" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="arrow1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="1" source="plan-templates" target="plan-form-container">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        <mxCell id="arrow1-label" value="getTemplateConfig" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontColor=#666666;fontStyle=1" vertex="1" connectable="0" parent="arrow1">
          <mxGeometry x="-0.1" y="1" relative="1" as="geometry">
            <mxPoint y="-5" as="offset"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="1" source="plan-form-container" target="life-template">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        <mxCell id="arrow2-label" value="动态加载模板" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontColor=#666666;fontStyle=1" vertex="1" connectable="0" parent="arrow2">
          <mxGeometry x="-0.1" y="1" relative="1" as="geometry">
            <mxPoint y="-5" as="offset"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="1" source="life-template" target="field-components">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        <mxCell id="arrow3-label" value="渲染字段组件" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontColor=#666666;fontStyle=1" vertex="1" connectable="0" parent="arrow3">
          <mxGeometry x="-0.1" y="1" relative="1" as="geometry">
            <mxPoint y="-5" as="offset"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=4;strokeColor=#d79b00;dashed=1;dashPattern=8 8;" edge="1" parent="1" source="plan-form-container" target="api-get">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="620" y="340"/>
              <mxPoint x="620" y="270"/>
            </Array>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow4-label" value="GET /api/plan/config (迁移后)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontColor=#d79b00;fontStyle=1" vertex="1" connectable="0" parent="arrow4">
          <mxGeometry x="-0.2" y="1" relative="1" as="geometry">
            <mxPoint y="-10" as="offset"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=4;strokeColor=#82b366;" edge="1" parent="1" source="plan-form-container" target="api-add">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="620" y="380"/>
              <mxPoint x="620" y="320"/>
            </Array>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow5-label" value="提交订单" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontColor=#82b366;fontStyle=1" vertex="1" connectable="0" parent="arrow5">
          <mxGeometry x="-0.15" y="1" relative="1" as="geometry">
            <mxPoint y="-5" as="offset"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="arrow6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="1" source="api-get" target="product-table">
          <mxGeometry relative="1" as="geometry"/>
        </mxCell>

        <mxCell id="arrow7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="1" source="admin-crud" target="product-table">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="1240" y="520"/>
            </Array>
          </mxGeometry>
        </mxCell>

        <mxCell id="solutions-box" value="迁移方案对比" style="swimlane;fontSize=16;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;strokeWidth=2;" vertex="1" parent="1">
          <mxGeometry x="60" y="820" width="1180" height="200" as="geometry"/>
        </mxCell>

        <mxCell id="solution-a" value="方案 A:完全后端化&#xa;优势 前端代码最少 配置集中&#xa;劣势 后端复杂度高 需维护表单引擎&#xa;推荐 3星" style="align=left;strokeColor=none;fillColor=#f8cecc;strokeColor=#b85450;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=11;rounded=1;" vertex="1" parent="solutions-box">
          <mxGeometry y="40" width="360" height="60" as="geometry"/>
        </mxCell>

        <mxCell id="solution-b" value="方案 B:配置 API 化 推荐&#xa;优势 前端保留灵活性 后端只管理配置&#xa;劣势 前端仍需维护模板组件&#xa;推荐 5星" style="align=left;strokeColor=none;fillColor=#d5e8d4;strokeColor=#82b366;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=11;fontStyle=1;rounded=1;" vertex="1" parent="solutions-box">
          <mxGeometry y="100" width="360" height="60" as="geometry"/>
        </mxCell>

        <mxCell id="solution-c" value="方案 C:混合模式&#xa;优势 平衡前后端职责 渐进式迁移&#xa;劣势 架构稍复杂&#xa;推荐 4星" style="align=left;strokeColor=none;fillColor=#fff2cc;strokeColor=#d6b656;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=11;rounded=1;" vertex="1" parent="solutions-box">
          <mxGeometry y="160" width="360" height="40" as="geometry"/>
        </mxCell>

        <mxCell id="migration-steps" value="迁移步骤 4 个阶段&#xa;&#xa;阶段 1 后端配置存储 1-2 周 创建表 迁移配置 CRUD API&#xa;阶段 2 前端 API 集成 1 周 Store 容器 缓存&#xa;阶段 3 配置管理后台 1-2 周 可视化 预览 测试&#xa;阶段 4 文档解析集成 1 周 连接 AI 到配置" style="align=left;strokeColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;spacingLeft=8;spacingRight=8;spacingTop=8;spacingBottom=8;whiteSpace=wrap;html=1;verticalAlign=top;fontSize=11;rounded=1;" vertex="1" parent="solutions-box">
          <mxGeometry x="380" y="40" width="780" height="160" as="geometry"/>
        </mxCell>

        <mxCell id="legend-box" value="图例" style="swimlane;fontSize=14;fontStyle=1;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;fillColor=#f5f5f5;strokeColor=#666666;strokeWidth=2;" vertex="1" parent="1">
          <mxGeometry x="60" y="1050" width="1180" height="100" as="geometry"/>
        </mxCell>

        <mxCell id="legend-config" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=1;" vertex="1" parent="legend-box">
          <mxGeometry x="10" y="45" width="25" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-config-label" value="配置文件" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="45" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-component" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;strokeWidth=1;" vertex="1" parent="legend-box">
          <mxGeometry x="150" y="45" width="25" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-component-label" value="Vue 组件" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="185" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-template" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;strokeWidth=1;" vertex="1" parent="legend-box">
          <mxGeometry x="290" y="45" width="25" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-template-label" value="模板组件" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="325" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-field" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=1;" vertex="1" parent="legend-box">
          <mxGeometry x="430" y="45" width="25" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-field-label" value="字段组件" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="465" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-api" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffffff;strokeColor=#82b366;strokeWidth=1;" vertex="1" parent="legend-box">
          <mxGeometry x="570" y="45" width="25" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-api-label" value="API 接口" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="605" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-arrow-solid" value="" style="endArrow=classic;html=1;strokeWidth=3;strokeColor=#666666;" edge="1" parent="legend-box">
          <mxGeometry width="60" height="40" relative="1" as="geometry">
            <mxPoint x="730" y="55" as="sourcePoint"/>
            <mxPoint x="790" y="55" as="targetPoint"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="legend-arrow-solid-label" value="数据流向" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="800" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-arrow-dashed" value="" style="endArrow=classic;html=1;strokeWidth=3;strokeColor=#d79b00;dashed=1;dashPattern=8 8;" edge="1" parent="legend-box">
          <mxGeometry width="60" height="40" relative="1" as="geometry">
            <mxPoint x="910" y="55" as="sourcePoint"/>
            <mxPoint x="970" y="55" as="targetPoint"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="legend-arrow-dashed-label" value="迁移后 API" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="980" y="45" width="100" height="25" as="geometry"/>
        </mxCell>

        <mxCell id="legend-arrow-green" value="" style="endArrow=classic;html=1;strokeWidth=4;strokeColor=#82b366;" edge="1" parent="legend-box">
          <mxGeometry width="60" height="40" relative="1" as="geometry">
            <mxPoint x="1100" y="55" as="sourcePoint"/>
            <mxPoint x="1160" y="55" as="targetPoint"/>
          </mxGeometry>
        </mxCell>

        <mxCell id="legend-arrow-green-label" value="提交订单" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=12;" vertex="1" parent="legend-box">
          <mxGeometry x="1170" y="45" width="90" height="25" as="geometry"/>
        </mxCell>

      </root>
    </mxGraphModel>
  </diagram>
</mxfile>