Просмотр исходного кода

添加 vercel 配置和更新本地设置

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
csk 1 месяц назад
Родитель
Сommit
40ef1b361b

+ 2 - 1
.claude/settings.local.json

@@ -23,7 +23,8 @@
       "Bash(grep -rohE '\\\\$message\\\\.|\\\\$confirm|\\\\$alert|\\\\$prompt|\\\\$msgbox|\\\\$notify' .)",
       "Bash(lark-cli auth *)",
       "Bash(wait)",
-      "Bash(perl *)"
+      "Bash(perl *)",
+      "Bash(git pull *)"
     ],
     "additionalDirectories": []
   }

BIN
diagrams/2026-06-02T212350/diagram.png


+ 492 - 0
diagrams/2026-06-02T212350/diagram.svg

@@ -0,0 +1,492 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 3500 1650">
+  <!-- Background -->
+  <rect x="0" y="0" width="3500" height="1650" fill="#FAFAFA"/>
+
+  <!-- Title Bar -->
+  <rect x="0" y="0" width="3500" height="52" fill="#2C3E50" rx="0"/>
+  <text x="1750" y="34" text-anchor="middle" font-size="20" fill="#FFFFFF" font-weight="bold">汇丰银行权益中台业务流程图</text>
+
+  <!-- Column Headers -->
+  <rect x="65" y="52" width="3435" height="40" fill="#34495E"/>
+  <line x1="65" y1="52" x2="65" y2="92" stroke="#7F8C8D" stroke-width="1"/>
+  <text x="280" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">规则管理</text>
+  <text x="670" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">人群圈选</text>
+  <text x="1100" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">权益管理</text>
+  <text x="1550" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">券码导入</text>
+  <text x="2060" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">发放计划(测试和正式流程相同)</text>
+  <text x="2950" y="78" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">页面管理</text>
+
+  <!-- Column Dividers -->
+  <line x1="490" y1="92" x2="490" y2="1650" stroke="#BDC3C7" stroke-width="1" stroke-dasharray="6,4"/>
+  <line x1="870" y1="92" x2="870" y2="1650" stroke="#BDC3C7" stroke-width="1" stroke-dasharray="6,4"/>
+  <line x1="1330" y1="92" x2="1330" y2="1650" stroke="#BDC3C7" stroke-width="1" stroke-dasharray="6,4"/>
+  <line x1="1780" y1="92" x2="1780" y2="1650" stroke="#BDC3C7" stroke-width="1" stroke-dasharray="6,4"/>
+  <line x1="2350" y1="92" x2="2350" y2="1650" stroke="#2980B9" stroke-width="1.5" stroke-dasharray="8,4"/>
+
+  <!-- Row Divider (Maker/Checker) -->
+  <line x1="0" y1="1100" x2="3500" y2="1100" stroke="#2C3E50" stroke-width="2"/>
+
+  <!-- Row Labels -->
+  <rect x="0" y="92" width="65" height="1008" fill="#ECF0F1"/>
+  <text x="32" y="600" text-anchor="middle" font-size="16" fill="#2C3E50" font-weight="bold" transform="rotate(-90,32,600)">Maker</text>
+  <rect x="0" y="1100" width="65" height="550" fill="#ECF0F1"/>
+  <text x="32" y="1375" text-anchor="middle" font-size="16" fill="#2C3E50" font-weight="bold" transform="rotate(-90,32,1375)">Checker</text>
+
+  <!-- Outer border -->
+  <rect x="0" y="0" width="3500" height="1650" fill="none" stroke="#2C3E50" stroke-width="2" rx="0"/>
+
+  <!-- ==================== MAKER ROW ==================== -->
+
+  <!-- === Column 1: 规则管理 (Maker) === -->
+  <g id="maker-rules">
+    <rect x="125" y="120" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="190" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">新建规则组</text>
+
+    <rect x="310" y="120" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="375" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">规则组上线</text>
+
+    <!-- Arrow: 新建规则组 → 规则组上线 -->
+    <line x1="255" y1="141" x2="306" y2="141" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="306,137 314,141 306,145" fill="#2C3E50"/>
+
+    <!-- Arrow down from 新建规则组 -->
+    <line x1="190" y1="162" x2="190" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="186,200 190,208 194,200" fill="#2C3E50"/>
+
+    <rect x="125" y="210" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="190" y="236" text-anchor="middle" font-size="12" fill="#2C3E50">完成创建</text>
+
+    <!-- Arrow down -->
+    <line x1="190" y1="252" x2="190" y2="290" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="186,290 190,298 194,290" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否存在相同规则组 -->
+    <polygon points="190,300 270,345 190,390 110,345" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="190" y="340" text-anchor="middle" font-size="10" fill="#2C3E50">是否存在相同</text>
+    <text x="190" y="355" text-anchor="middle" font-size="10" fill="#2C3E50">规则组</text>
+
+    <!-- 是 branch (left-down) -->
+    <text x="100" y="340" text-anchor="middle" font-size="11" fill="#E74C3C" font-weight="bold">是</text>
+    <line x1="110" y1="345" x2="85" y2="345" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="85" y1="345" x2="85" y2="440" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="81,440 85,448 89,440" fill="#2C3E50"/>
+
+    <!-- 否 branch (down) -->
+    <text x="200" y="398" text-anchor="middle" font-size="11" fill="#27AE60" font-weight="bold">否</text>
+    <line x1="190" y1="390" x2="190" y2="440" stroke="#2C3E50" stroke-width="1.2"/>
+
+    <rect x="85" y="450" width="120" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="145" y="476" text-anchor="middle" font-size="12" fill="#2C3E50">规则组修改</text>
+
+    <rect x="250" y="450" width="140" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="320" y="476" text-anchor="middle" font-size="12" fill="#2C3E50">规则组提交审核</text>
+
+    <!-- Arrow: 规则组修改 → 规则组提交审核 -->
+    <line x1="205" y1="471" x2="246" y2="471" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="246,467 254,471 246,475" fill="#2C3E50"/>
+  </g>
+
+  <!-- === Column 2: 人群圈选 (Maker) === -->
+  <g id="maker-crowd">
+    <rect x="510" y="120" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="138" text-anchor="middle" font-size="11" fill="#2C3E50">新增/修改自动</text>
+    <text x="585" y="152" text-anchor="middle" font-size="11" fill="#2C3E50">圈选规则</text>
+
+    <rect x="700" y="120" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="765" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">手动圈选人群</text>
+
+    <!-- Arrow down from 新增/修改 -->
+    <line x1="585" y1="162" x2="585" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,200 585,208 589,200" fill="#2C3E50"/>
+
+    <rect x="510" y="210" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="236" text-anchor="middle" font-size="12" fill="#2C3E50">运行圈选规则</text>
+
+    <!-- Arrow down -->
+    <line x1="585" y1="252" x2="585" y2="290" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,290 585,298 589,290" fill="#2C3E50"/>
+
+    <rect x="505" y="300" width="160" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="318" text-anchor="middle" font-size="11" fill="#2C3E50">验证count、</text>
+    <text x="585" y="332" text-anchor="middle" font-size="11" fill="#2C3E50">sample数据</text>
+
+    <!-- Arrow down -->
+    <line x1="585" y1="342" x2="585" y2="380" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,380 585,388 589,380" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否验证通过 -->
+    <polygon points="585,390 660,430 585,470 510,430" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="434" text-anchor="middle" font-size="10" fill="#2C3E50">是否验证通过</text>
+
+    <!-- 否 branch (left, loops back up) -->
+    <text x="500" y="425" text-anchor="middle" font-size="11" fill="#E74C3C" font-weight="bold">否</text>
+    <line x1="510" y1="430" x2="495" y2="430" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="495" y1="430" x2="495" y2="141" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="495" y1="141" x2="506" y2="141" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="506,137 514,141 506,145" fill="#2C3E50"/>
+
+    <!-- 是 branch (down) -->
+    <text x="596" y="478" text-anchor="middle" font-size="11" fill="#27AE60" font-weight="bold">是</text>
+    <line x1="585" y1="470" x2="585" y2="510" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,510 585,518 589,510" fill="#2C3E50"/>
+
+    <rect x="520" y="520" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="546" text-anchor="middle" font-size="12" fill="#2C3E50">提交审核</text>
+
+    <!-- Arrow down -->
+    <line x1="585" y1="562" x2="585" y2="600" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,600 585,608 589,600" fill="#2C3E50"/>
+
+    <rect x="510" y="610" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="636" text-anchor="middle" font-size="12" fill="#2C3E50">上线圈选规则</text>
+
+    <!-- Arrow down -->
+    <line x1="585" y1="652" x2="585" y2="690" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="581,690 585,698 589,690" fill="#2C3E50"/>
+
+    <rect x="490" y="700" width="190" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="585" y="726" text-anchor="middle" font-size="12" fill="#2C3E50">上送fulllist给行内</text>
+  </g>
+
+  <!-- === Column 3: 权益管理 (Maker) === -->
+  <g id="maker-equity">
+    <rect x="900" y="120" width="160" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="980" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">填写权益商品信息</text>
+
+    <!-- Arrow down -->
+    <line x1="980" y1="162" x2="980" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="976,200 980,208 984,200" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否权益平台兑换 -->
+    <polygon points="980,210 1075,260 980,310 885,260" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="980" y="255" text-anchor="middle" font-size="10" fill="#2C3E50">是否权益平台</text>
+    <text x="980" y="268" text-anchor="middle" font-size="10" fill="#2C3E50">兑换</text>
+
+    <!-- 否 branch (left) -->
+    <text x="880" y="252" text-anchor="end" font-size="11" fill="#E74C3C" font-weight="bold">否</text>
+    <line x1="885" y1="260" x2="835" y2="260" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="835" y1="260" x2="835" y2="340" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="831,340 835,348 839,340" fill="#2C3E50"/>
+
+    <!-- Red bordered box for 否 path -->
+    <rect x="770" y="350" width="130" height="50" rx="5" fill="#FFF5F5" stroke="#E74C3C" stroke-width="1.8"/>
+    <text x="835" y="372" text-anchor="middle" font-size="11" fill="#2C3E50">填写外部</text>
+    <text x="835" y="386" text-anchor="middle" font-size="11" fill="#2C3E50">权益链接</text>
+
+    <!-- 是 branch (right) -->
+    <text x="1085" y="252" text-anchor="start" font-size="11" fill="#27AE60" font-weight="bold">是</text>
+    <line x1="1075" y1="260" x2="1125" y2="260" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1125" y1="260" x2="1125" y2="340" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1121,340 1125,348 1129,340" fill="#2C3E50"/>
+
+    <!-- Red bordered box for 是 path -->
+    <rect x="1050" y="350" width="150" height="50" rx="5" fill="#FFF5F5" stroke="#E74C3C" stroke-width="1.8"/>
+    <text x="1125" y="372" text-anchor="middle" font-size="11" fill="#2C3E50">选商品类型</text>
+    <text x="1125" y="386" text-anchor="middle" font-size="11" fill="#2C3E50">(券码/立减金)</text>
+
+    <!-- Both paths merge down -->
+    <line x1="835" y1="400" x2="835" y2="445" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="835" y1="445" x2="980" y2="445" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1125" y1="400" x2="1125" y2="445" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1125" y1="445" x2="980" y2="445" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="980" y1="445" x2="980" y2="480" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="976,480 980,488 984,480" fill="#2C3E50"/>
+
+    <rect x="890" y="490" width="180" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="980" y="516" text-anchor="middle" font-size="12" fill="#2C3E50">设置权益商品规则</text>
+
+    <!-- Arrow down -->
+    <line x1="980" y1="532" x2="980" y2="570" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="976,570 980,578 984,570" fill="#2C3E50"/>
+
+    <rect x="890" y="580" width="180" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="980" y="606" text-anchor="middle" font-size="12" fill="#2C3E50">提交权益商品信息</text>
+  </g>
+
+  <!-- === Column 4: 券码导入 (Maker) === -->
+  <g id="maker-coupon">
+    <rect x="1370" y="120" width="190" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1465" y="138" text-anchor="middle" font-size="11" fill="#2C3E50">新增券码信息(券码、</text>
+    <text x="1465" y="152" text-anchor="middle" font-size="11" fill="#2C3E50">生效时间、过期时间等)</text>
+
+    <!-- Arrow down -->
+    <line x1="1465" y1="162" x2="1465" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1461,200 1465,208 1469,200" fill="#2C3E50"/>
+
+    <rect x="1390" y="210" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1465" y="236" text-anchor="middle" font-size="12" fill="#2C3E50">上传券码文件</text>
+
+    <!-- Arrow down -->
+    <line x1="1465" y1="252" x2="1465" y2="290" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1461,290 1465,298 1469,290" fill="#2C3E50"/>
+
+    <rect x="1390" y="300" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1465" y="326" text-anchor="middle" font-size="12" fill="#2C3E50">提交券码信息</text>
+
+    <!-- Arrow down -->
+    <line x1="1465" y1="342" x2="1465" y2="380" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1461,380 1465,388 1469,380" fill="#2C3E50"/>
+
+    <rect x="1400" y="390" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1465" y="416" text-anchor="middle" font-size="12" fill="#2C3E50">校验券码</text>
+
+    <!-- Arrow down to diamond -->
+    <line x1="1465" y1="432" x2="1465" y2="460" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1461,460 1465,468 1469,460" fill="#2C3E50"/>
+
+    <!-- Diamond: 校验结果 -->
+    <polygon points="1465,470 1545,510 1465,550 1385,510" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1465" y="514" text-anchor="middle" font-size="10" fill="#2C3E50">全部校验成功</text>
+
+    <!-- 全部失败 branch (left) -->
+    <text x="1375" y="500" text-anchor="end" font-size="10" fill="#E74C3C">全部失败</text>
+    <line x1="1385" y1="510" x2="1350" y2="510" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1350" y1="510" x2="1350" y2="600" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1346,600 1350,608 1354,600" fill="#2C3E50"/>
+
+    <rect x="1340" y="610" width="120" height="42" rx="5" fill="#FFFFFF" stroke="#E74C3C" stroke-width="1.5"/>
+    <text x="1400" y="636" text-anchor="middle" font-size="11" fill="#2C3E50">全部不入库</text>
+
+    <!-- 部分失败 branch (middle-left) -->
+    <text x="1460" y="558" text-anchor="middle" font-size="10" fill="#E67E22">部分失败</text>
+    <line x1="1465" y1="550" x2="1465" y2="600" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1461,600 1465,608 1469,600" fill="#2C3E50"/>
+
+    <rect x="1470" y="610" width="140" height="42" rx="5" fill="#FFFFFF" stroke="#E67E22" stroke-width="1.5"/>
+    <text x="1540" y="628" text-anchor="middle" font-size="10" fill="#2C3E50">校验成功的</text>
+    <text x="1540" y="642" text-anchor="middle" font-size="10" fill="#2C3E50">入库</text>
+
+    <!-- 全部成功 branch (right) -->
+    <text x="1555" y="500" text-anchor="start" font-size="10" fill="#27AE60">全部成功</text>
+    <line x1="1545" y1="510" x2="1620" y2="510" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1620" y1="510" x2="1620" y2="600" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1616,600 1620,608 1624,600" fill="#2C3E50"/>
+
+    <rect x="1620" y="610" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#27AE60" stroke-width="1.5"/>
+    <text x="1685" y="636" text-anchor="middle" font-size="12" fill="#2C3E50">券码入库</text>
+
+    <!-- 下载失败明细 (from 全部不入库 and 校验成功的入库) -->
+    <line x1="1400" y1="652" x2="1400" y2="700" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1400" y1="700" x2="1500" y2="700" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1540" y1="652" x2="1540" y2="700" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1540" y1="700" x2="1500" y2="700" stroke="#2C3E50" stroke-width="1.2"/>
+    <line x1="1500" y1="700" x2="1500" y2="730" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1496,730 1500,738 1504,730" fill="#2C3E50"/>
+
+    <rect x="1400" y="740" width="170" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1485" y="766" text-anchor="middle" font-size="12" fill="#2C3E50">下载失败明细文件</text>
+  </g>
+
+  <!-- === Column 5: 发放计划 (Maker) === -->
+  <g id="maker-plan">
+    <rect x="1830" y="120" width="160" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">新建发放计划</text>
+
+    <!-- Arrow down -->
+    <line x1="1910" y1="162" x2="1910" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1906,200 1910,208 1914,200" fill="#2C3E50"/>
+
+    <rect x="1810" y="210" width="200" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="228" text-anchor="middle" font-size="11" fill="#2C3E50">填写发放信息,选</text>
+    <text x="1910" y="242" text-anchor="middle" font-size="11" fill="#2C3E50">择客群、权益</text>
+
+    <!-- Arrow down -->
+    <line x1="1910" y1="252" x2="1910" y2="290" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1906,290 1910,298 1914,290" fill="#2C3E50"/>
+
+    <rect x="1840" y="300" width="140" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="326" text-anchor="middle" font-size="12" fill="#2C3E50">提交审核</text>
+  </g>
+
+  <!-- === Column 6: 页面管理 (Maker) === -->
+  <g id="maker-page">
+    <!-- Sub-column 1: 介绍页/首页 -->
+    <rect x="2400" y="120" width="170" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2485" y="138" text-anchor="middle" font-size="11" fill="#2C3E50">编辑权益介绍页、</text>
+    <text x="2485" y="152" text-anchor="middle" font-size="11" fill="#2C3E50">权益首页</text>
+
+    <!-- Sub-column 2: 新建组装页 -->
+    <rect x="2620" y="120" width="170" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2705" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">新建权益组装页</text>
+
+    <!-- Sub-column 3: 编辑组装页 -->
+    <rect x="2840" y="120" width="170" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2925" y="146" text-anchor="middle" font-size="12" fill="#2C3E50">编辑权益组装页</text>
+
+    <!-- Arrow down from 新建组装页 -->
+    <line x1="2705" y1="162" x2="2705" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2701,200 2705,208 2709,200" fill="#2C3E50"/>
+
+    <rect x="2600" y="210" width="210" height="50" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2705" y="232" text-anchor="middle" font-size="11" fill="#2C3E50">配置页面组件</text>
+    <text x="2705" y="248" text-anchor="middle" font-size="11" fill="#2C3E50">(图片、文案、按钮、模块)</text>
+
+    <!-- Arrow right from 编辑组装页 -->
+    <line x1="2925" y1="162" x2="2925" y2="200" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2921,200 2925,208 2929,200" fill="#2C3E50"/>
+
+    <rect x="2850" y="210" width="180" height="50" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2940" y="232" text-anchor="middle" font-size="11" fill="#2C3E50">更改权益组装页</text>
+    <text x="2940" y="248" text-anchor="middle" font-size="11" fill="#2C3E50">基础信息</text>
+
+    <!-- Arrow down from 配置页面组件 -->
+    <line x1="2705" y1="260" x2="2705" y2="300" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2701,300 2705,308 2709,300" fill="#2C3E50"/>
+
+    <!-- Arrow from 更改基础信息 to right -->
+    <line x1="2940" y1="260" x2="2940" y2="300" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2936,300 2940,308 2944,300" fill="#2C3E50"/>
+
+    <rect x="2830" y="310" width="200" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2930" y="336" text-anchor="middle" font-size="11" fill="#2C3E50">调整权益商品展示顺序</text>
+
+    <!-- Arrow down -->
+    <line x1="2705" y1="310" x2="2705" y2="400" stroke="#2C3E50" stroke-width="1.2"/>
+
+    <rect x="2640" y="400" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2705" y="426" text-anchor="middle" font-size="12" fill="#2C3E50">保存草稿</text>
+
+    <!-- Arrow down -->
+    <line x1="2705" y1="442" x2="2705" y2="480" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2701,480 2705,488 2709,480" fill="#2C3E50"/>
+
+    <rect x="2630" y="490" width="150" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2705" y="516" text-anchor="middle" font-size="12" fill="#2C3E50">生成预览链接</text>
+
+    <!-- 组装页不符合预期 feedback -->
+    <text x="3150" y="400" text-anchor="middle" font-size="11" fill="#E74C3C">组装页不符合预期</text>
+    <line x1="3150" y1="410" x2="3150" y2="310" stroke="#E74C3C" stroke-width="1.2" stroke-dasharray="4,3"/>
+    <line x1="3150" y1="310" x2="3040" y2="310" stroke="#E74C3C" stroke-width="1.2" stroke-dasharray="4,3"/>
+    <polygon points="3040,306 3032,310 3040,314" fill="#E74C3C"/>
+  </g>
+
+  <!-- ==================== CHECKER ROW ==================== -->
+
+  <!-- === Column 1: 规则管理 (Checker) === -->
+  <g id="checker-rules">
+    <rect x="125" y="1160" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="190" y="1186" text-anchor="middle" font-size="12" fill="#2C3E50">审核规则组</text>
+
+    <!-- Arrow down -->
+    <line x1="190" y1="1202" x2="190" y2="1240" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="186,1240 190,1248 194,1240" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否通过 -->
+    <polygon points="190,1250 255,1290 190,1330 125,1290" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="190" y="1294" text-anchor="middle" font-size="10" fill="#2C3E50">是否通过</text>
+
+    <text x="118" y="1285" text-anchor="end" font-size="11" fill="#E74C3C" font-weight="bold">否</text>
+  </g>
+
+  <!-- === Column 2: 人群圈选 (Checker) — 无 === -->
+
+  <!-- === Column 3: 权益管理 (Checker) === -->
+  <g id="checker-equity">
+    <!-- Yellow highlight region -->
+    <rect x="880" y="1130" width="430" height="400" rx="8" fill="none" stroke="#F1C40F" stroke-width="2" stroke-dasharray="8,4"/>
+
+    <rect x="920" y="1160" width="170" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1005" y="1178" text-anchor="middle" font-size="11" fill="#2C3E50">审核权益商品</text>
+    <text x="1005" y="1192" text-anchor="middle" font-size="11" fill="#2C3E50">信息</text>
+
+    <!-- Arrow down -->
+    <line x1="1005" y1="1202" x2="1005" y2="1240" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1001,1240 1005,1248 1009,1240" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否通过 -->
+    <polygon points="1005,1250 1080,1290 1005,1330 930,1290" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1005" y="1294" text-anchor="middle" font-size="10" fill="#2C3E50">是否通过</text>
+
+    <text x="920" y="1285" text-anchor="end" font-size="11" fill="#E74C3C" font-weight="bold">否</text>
+  </g>
+
+  <!-- === Column 5: 发放计划 (Checker) === -->
+  <g id="checker-plan">
+    <rect x="1830" y="1160" width="160" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="1186" text-anchor="middle" font-size="12" fill="#2C3E50">审核发放计划</text>
+
+    <!-- Arrow down -->
+    <line x1="1910" y1="1202" x2="1910" y2="1240" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1906,1240 1910,1248 1914,1240" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否通过 -->
+    <polygon points="1910,1250 1990,1290 1910,1330 1830,1290" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="1294" text-anchor="middle" font-size="10" fill="#2C3E50">是否通过</text>
+
+    <text x="1822" y="1285" text-anchor="end" font-size="11" fill="#E74C3C" font-weight="bold">否</text>
+
+    <!-- 是 branch (down) -->
+    <text x="1920" y="1340" text-anchor="start" font-size="11" fill="#27AE60" font-weight="bold">是</text>
+    <line x1="1910" y1="1330" x2="1910" y2="1380" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="1906,1380 1910,1388 1914,1380" fill="#2C3E50"/>
+
+    <rect x="1830" y="1390" width="160" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="1910" y="1416" text-anchor="middle" font-size="12" fill="#2C3E50">发放计划生效</text>
+
+    <!-- Arrow right: to 页面管理 check -->
+    <line x1="1990" y1="1290" x2="2100" y2="1290" stroke="#2C3E50" stroke-width="1.2"/>
+
+    <!-- Diamond: 介绍页/首页是否符合预期 -->
+    <polygon points="2200,1250 2310,1290 2200,1330 2090,1290" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2200" y="1284" text-anchor="middle" font-size="9" fill="#2C3E50">介绍页/首页</text>
+    <text x="2200" y="1298" text-anchor="middle" font-size="9" fill="#2C3E50">是否符合预期</text>
+
+    <!-- 不符合 (up, back to page management) -->
+    <text x="2200" y="1245" text-anchor="middle" font-size="10" fill="#E74C3C">不符合预期</text>
+    <line x1="2200" y1="1250" x2="2200" y2="1100" stroke="#E74C3C" stroke-width="1.2" stroke-dasharray="4,3"/>
+    <polygon points="2196,1100 2200,1092 2204,1100" fill="#E74C3C"/>
+  </g>
+
+  <!-- === Column 6: 页面管理 (Checker) === -->
+  <g id="checker-page">
+    <!-- Yellow highlight region -->
+    <rect x="2380" y="1130" width="1080" height="470" rx="8" fill="none" stroke="#F1C40F" stroke-width="2" stroke-dasharray="8,4"/>
+
+    <rect x="2600" y="1160" width="130" height="42" rx="5" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2665" y="1186" text-anchor="middle" font-size="12" fill="#2C3E50">预览页面</text>
+
+    <!-- Arrow right -->
+    <line x1="2730" y1="1181" x2="2780" y2="1181" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="2780,1177 2788,1181 2780,1185" fill="#2C3E50"/>
+
+    <!-- Diamond: 是否符合预期 -->
+    <polygon points="2890,1145 2990,1181 2890,1217 2790,1181" fill="#FFFFFF" stroke="#2C3E50" stroke-width="1.5"/>
+    <text x="2890" y="1176" text-anchor="middle" font-size="9" fill="#2C3E50">是否符合预期</text>
+    <text x="2890" y="1190" text-anchor="middle" font-size="9" fill="#2C3E50">(组装页)</text>
+
+    <!-- 不符合 branch (up) -->
+    <text x="2890" y="1138" text-anchor="middle" font-size="10" fill="#E74C3C">组装页不符合预期</text>
+    <line x1="2890" y1="1145" x2="2890" y2="1100" stroke="#E74C3C" stroke-width="1.2" stroke-dasharray="4,3"/>
+    <polygon points="2886,1100 2890,1092 2894,1100" fill="#E74C3C"/>
+
+    <!-- 符合 branch (right) -->
+    <text x="3010" y="1175" text-anchor="start" font-size="11" fill="#27AE60" font-weight="bold">符合</text>
+    <line x1="2990" y1="1181" x2="3060" y2="1181" stroke="#2C3E50" stroke-width="1.2"/>
+    <polygon points="3060,1177 3068,1181 3060,1185" fill="#2C3E50"/>
+
+    <!-- Arrow down -->
+    <line x1="3120" y1="1181" x2="3200" y2="1181" stroke="#2C3E50" stroke-width="1.2"/>
+
+    <rect x="3070" y="1160" width="130" height="42" rx="5" fill="#27AE60" stroke="#1E8449" stroke-width="1.5"/>
+    <text x="3135" y="1186" text-anchor="middle" font-size="13" fill="#FFFFFF" font-weight="bold">发布上线</text>
+  </g>
+
+  <!-- ==================== CROSS-ROW CONNECTIONS ==================== -->
+
+  <!-- Maker 规则组提交审核 → Checker 审核规则组 -->
+  <line x1="320" y1="492" x2="320" y2="1100" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <line x1="320" y1="1100" x2="190" y2="1100" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <line x1="190" y1="1100" x2="190" y2="1156" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <polygon points="186,1156 190,1164 194,1156" fill="#7F8C8D"/>
+
+  <!-- Maker 提交权益商品信息 → Checker 审核权益商品信息 -->
+  <line x1="980" y1="622" x2="980" y2="1100" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <line x1="980" y1="1100" x2="1005" y2="1100" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <line x1="1005" y1="1100" x2="1005" y2="1156" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <polygon points="1001,1156 1005,1164 1009,1156" fill="#7F8C8D"/>
+
+  <!-- Maker 提交审核(发放) → Checker 审核发放计划 -->
+  <line x1="1910" y1="342" x2="1910" y2="1100" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <line x1="1910" y1="1100" x2="1910" y2="1156" stroke="#7F8C8D" stroke-width="1" stroke-dasharray="4,3"/>
+  <polygon points="1906,1156 1910,1164 1914,1156" fill="#7F8C8D"/>
+</svg>

+ 6 - 0
vercel.json

@@ -0,0 +1,6 @@
+{
+  "buildCommand": "cd 工作空间/产研/权益/汇丰全行/产品原型/pc-demo && npm run build",
+  "outputDirectory": "工作空间/产研/权益/汇丰全行/产品原型/pc-demo/dist",
+  "installCommand": "cd 工作空间/产研/权益/汇丰全行/产品原型/pc-demo && npm install",
+  "framework": "vite"
+}