Files
ttstd-infinite-canvas/assets/prototypes/project-canvas-ui-interactions.drawio
ddcat666 d2fbc413b3 feat: 完成短剧项目空间与结构化资产创作闭环 (#38)
* feat(canvas): 短剧项目空间 - 建立项目章节与画布关联 MVP

* feat(canvas): 短剧项目空间 - 完善项目资产、镜头与流程闭环

Refs #30

* fix(deploy): 本地部署 - 修复前端构建并忽略本地 PostgreSQL 配置

* feat(*): 短剧项目空间 - 完成项目、章节、资产、角色与画布创作闭环

Refs #30

---------

Co-authored-by: ddCat <ddcat666@88.com>
2026-07-27 10:45:11 +08:00

114 lines
34 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<mxfile host="app.diagrams.net" modified="2026-07-24T15:30:00.000Z" agent="Codex" version="24.7.17" type="device">
<diagram id="default" name="01 默认视觉态">
<mxGraphModel dx="1440" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1440" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="d-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#090a0b;strokeColor=none;" vertex="1" parent="1"><mxGeometry width="1440" height="900" as="geometry"/></mxCell>
<mxCell id="d-global" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#101112;strokeColor=#26282b;strokeWidth=1;" vertex="1" parent="1"><mxGeometry width="180" height="900" as="geometry"/></mxCell>
<mxCell id="d-brand" value="∞&amp;nbsp;&amp;nbsp;&lt;b&gt;影策&lt;/b&gt;&amp;nbsp;&amp;nbsp;◧" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f3f4f6;fontSize=14;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1"><mxGeometry y="10" width="174" height="42" as="geometry"/></mxCell>
<mxCell id="d-g1" value="▣&amp;nbsp;&amp;nbsp;项目中心" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#151719;strokeColor=#2b2f35;fontColor=#e2e4e8;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="68" width="166" height="40" as="geometry"/></mxCell>
<mxCell id="d-gbar" value="" style="rounded=1;arcSize=100;whiteSpace=wrap;html=1;fillColor=#7da2ff;strokeColor=none;" vertex="1" parent="1"><mxGeometry x="7" y="78" width="2" height="20" as="geometry"/></mxCell>
<mxCell id="d-g2" value="↗&amp;nbsp;&amp;nbsp;创作画布" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="116" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-g3" value="☷&amp;nbsp;&amp;nbsp;任务中心" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="160" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-g4" value="▧&amp;nbsp;&amp;nbsp;素材库" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="204" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-g5" value="✦&amp;nbsp;&amp;nbsp;技能库" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="248" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-g6" value="◉&amp;nbsp;&amp;nbsp;积分中心" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="292" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-g7" value="☷&amp;nbsp;&amp;nbsp;配置与用户偏好" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="336" width="166" height="38" as="geometry"/></mxCell>
<mxCell id="d-foot" value="◐&amp;nbsp;&amp;nbsp;深色模式&amp;nbsp;&amp;nbsp;&amp;nbsp;●&lt;br&gt;&lt;br&gt;♢&amp;nbsp;&amp;nbsp;系统公告&lt;br&gt;&lt;br&gt;▤&amp;nbsp;&amp;nbsp;更新日志" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#25272a;fontColor=#8d929a;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=14;spacingTop=14;" vertex="1" parent="1"><mxGeometry y="716" width="180" height="132" as="geometry"/></mxCell>
<mxCell id="d-project" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0c0d0f;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="900" as="geometry"/></mxCell>
<mxCell id="d-phead" value="‹&amp;nbsp;&amp;nbsp;▱&amp;nbsp;&amp;nbsp;&lt;b&gt;测试项目 1&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='font-size:9px;color:#7891c7'&gt;● 进行中&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;fontColor=#e8eaee;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=10;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="62" as="geometry"/></mxCell>
<mxCell id="d-p1" value="▥&amp;nbsp;&amp;nbsp;项目概览" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="188" y="82" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="d-p2" value="▤&amp;nbsp;&amp;nbsp;剧情章节" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="188" y="122" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="d-p3" value="▦&amp;nbsp;&amp;nbsp;&lt;b&gt;创作画布&lt;/b&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#162238;strokeColor=#263d67;fontColor=#9dbdff;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="188" y="162" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="d-p4" value="▧&amp;nbsp;&amp;nbsp;项目资产" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="188" y="202" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="d-p5" value="☷&amp;nbsp;&amp;nbsp;项目设置" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="188" y="242" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="d-ratio" value="9:16 · 导入小说" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;fontColor=#5d626b;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="180" y="850" width="160" height="50" as="geometry"/></mxCell>
<mxCell id="d-title" value="&lt;b&gt;创作画布&lt;/b&gt;&lt;br&gt;&lt;span style='font-size:10px;color:#777c85'&gt;1 张画布,可分别关联多个剧情章节&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f2f3f5;fontSize=19;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="370" y="22" width="500" height="60" as="geometry"/></mxCell>
<mxCell id="d-new" value="+&amp;nbsp;&amp;nbsp;&lt;b&gt;新建画布&lt;/b&gt;" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#f4f5f6;strokeColor=#ffffff;fontColor=#111214;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1"><mxGeometry x="1288" y="27" width="126" height="38" as="geometry"/></mxCell>
<mxCell id="d-line" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="370" y="88" width="1044" height="1" as="geometry"/></mxCell>
<mxCell id="d-card" value="" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#121416;strokeColor=#2a2d32;strokeWidth=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="370" y="118" width="346" height="294" as="geometry"/></mxCell>
<mxCell id="d-preview" value="" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#0f1724;strokeColor=#273246;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="380" y="128" width="326" height="176" as="geometry"/></mxCell>
<mxCell id="d-grid1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#273246;dashed=1;opacity=32;" vertex="1" parent="1"><mxGeometry x="380" y="184" width="326" height="1" as="geometry"/></mxCell>
<mxCell id="d-grid2" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#273246;dashed=1;opacity=32;" vertex="1" parent="1"><mxGeometry x="488" y="128" width="1" height="176" as="geometry"/></mxCell>
<mxCell id="d-badge" value="▦&amp;nbsp;&amp;nbsp;画布 01" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#151a22;strokeColor=#2a3445;fontColor=#8792a4;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="392" y="140" width="78" height="24" as="geometry"/></mxCell>
<mxCell id="d-node1" value="文本" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#232936;strokeColor=#374155;fontColor=#bcc5d6;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="420" y="206" width="66" height="38" as="geometry"/></mxCell>
<mxCell id="d-node2" value="分镜" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#193c48;strokeColor=#2e6574;fontColor=#b7e6ef;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="530" y="184" width="74" height="46" as="geometry"/></mxCell>
<mxCell id="d-node3" value="图片" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#4e3b33;strokeColor=#73594d;fontColor=#f4dccd;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="625" y="228" width="58" height="42" as="geometry"/></mxCell>
<mxCell id="d-meta" value="&lt;b&gt;111&lt;/b&gt;&lt;br&gt;&lt;span style='font-size:9px;color:#747a84'&gt;更新于 07/24 22:24&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#eef0f2;fontSize=14;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="390" y="312" width="170" height="48" as="geometry"/></mxCell>
<mxCell id="d-count" value="1 个章节" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#666c75;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=right;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="610" y="322" width="78" height="24" as="geometry"/></mxCell>
<mxCell id="d-chip" value="01 · 第一章&amp;nbsp;&amp;nbsp;×" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#17243c;strokeColor=#2c4778;fontColor=#9dbdff;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="390" y="362" width="108" height="26" as="geometry"/></mxCell>
<mxCell id="d-link" value="+&amp;nbsp;&amp;nbsp;关联章节" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#17191c;strokeColor=#30343a;fontColor=#868c95;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="520" y="362" width="118" height="28" as="geometry"/></mxCell>
<mxCell id="d-more" value="•••" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#17191c;strokeColor=#30343a;fontColor=#8e949d;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="648" y="362" width="40" height="28" as="geometry"/></mxCell>
<mxCell id="d-note" value="布局未变 · 默认态优化:真实节点预览、分层表面、统一描边、单一蓝色交互色、管理动作降噪。" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#111315;strokeColor=#24272b;fontColor=#626873;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="780" y="118" width="510" height="42" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="hover" name="02 卡片悬停态">
<mxGraphModel dx="1440" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1440" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="h-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#090a0b;strokeColor=none;" vertex="1" parent="1"><mxGeometry width="1440" height="900" as="geometry"/></mxCell>
<mxCell id="h-global" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#101112;strokeColor=#26282b;strokeWidth=1;" vertex="1" parent="1"><mxGeometry width="180" height="900" as="geometry"/></mxCell>
<mxCell id="h-brand" value="∞&amp;nbsp;&amp;nbsp;&lt;b&gt;影策&lt;/b&gt;&amp;nbsp;&amp;nbsp;◧" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f3f4f6;fontSize=14;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1"><mxGeometry y="10" width="174" height="42" as="geometry"/></mxCell>
<mxCell id="h-g1" value="▣&amp;nbsp;&amp;nbsp;项目中心" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#151719;strokeColor=#2b2f35;fontColor=#e2e4e8;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="68" width="166" height="40" as="geometry"/></mxCell>
<mxCell id="h-g2" value="↗&amp;nbsp;&amp;nbsp;创作画布&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;任务中心&lt;br&gt;&lt;br&gt;▧&amp;nbsp;&amp;nbsp;素材库&lt;br&gt;&lt;br&gt;✦&amp;nbsp;&amp;nbsp;技能库&lt;br&gt;&lt;br&gt;◉&amp;nbsp;&amp;nbsp;积分中心&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;配置与用户偏好" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=20;spacingTop=12;" vertex="1" parent="1"><mxGeometry x="7" y="114" width="166" height="280" as="geometry"/></mxCell>
<mxCell id="h-project" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0c0d0f;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="900" as="geometry"/></mxCell>
<mxCell id="h-phead" value="‹&amp;nbsp;&amp;nbsp;▱&amp;nbsp;&amp;nbsp;&lt;b&gt;测试项目 1&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='font-size:9px;color:#7891c7'&gt;● 进行中&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;fontColor=#e8eaee;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=10;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="62" as="geometry"/></mxCell>
<mxCell id="h-plist" value="▥&amp;nbsp;&amp;nbsp;项目概览&lt;br&gt;&lt;br&gt;▤&amp;nbsp;&amp;nbsp;剧情章节&lt;br&gt;&lt;br&gt;&lt;span style='color:#9dbdff'&gt;▦&amp;nbsp;&amp;nbsp;&lt;b&gt;创作画布&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;▧&amp;nbsp;&amp;nbsp;项目资产&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;项目设置" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=20;spacingTop=18;" vertex="1" parent="1"><mxGeometry x="180" y="66" width="160" height="240" as="geometry"/></mxCell>
<mxCell id="h-active" value="" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#162238;strokeColor=#263d67;opacity=75;" vertex="1" parent="1"><mxGeometry x="188" y="158" width="144" height="36" as="geometry"/></mxCell>
<mxCell id="h-title" value="&lt;b&gt;创作画布&lt;/b&gt;&lt;br&gt;&lt;span style='font-size:10px;color:#777c85'&gt;1 张画布,可分别关联多个剧情章节&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f2f3f5;fontSize=19;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="370" y="22" width="500" height="60" as="geometry"/></mxCell>
<mxCell id="h-new" value="+&amp;nbsp;&amp;nbsp;&lt;b&gt;新建画布&lt;/b&gt;" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#f4f5f6;strokeColor=#ffffff;fontColor=#111214;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1"><mxGeometry x="1288" y="27" width="126" height="38" as="geometry"/></mxCell>
<mxCell id="h-line" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="370" y="88" width="1044" height="1" as="geometry"/></mxCell>
<mxCell id="h-glow" value="" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#18202d;strokeColor=#547bc4;strokeWidth=2;shadow=1;opacity=75;" vertex="1" parent="1"><mxGeometry x="368" y="116" width="350" height="298" as="geometry"/></mxCell>
<mxCell id="h-card" value="" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#13161a;strokeColor=#7394d1;strokeWidth=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="370" y="118" width="346" height="294" as="geometry"/></mxCell>
<mxCell id="h-preview" value="" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#101a2a;strokeColor=#3c5273;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="380" y="128" width="326" height="176" as="geometry"/></mxCell>
<mxCell id="h-overlay" value="" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#090b0e;strokeColor=none;opacity=28;" vertex="1" parent="1"><mxGeometry x="380" y="128" width="326" height="176" as="geometry"/></mxCell>
<mxCell id="h-tools" value="↗&amp;nbsp;&amp;nbsp;打开&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;✎&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;•••" style="rounded=1;arcSize=18;whiteSpace=wrap;html=1;fillColor=#171a1f;strokeColor=#3b414b;fontColor=#e8ebf0;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1"><mxGeometry x="570" y="140" width="120" height="32" as="geometry"/></mxCell>
<mxCell id="h-open-tip" value="打开画布" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#eff1f4;strokeColor=none;fontColor=#15171a;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;shadow=1;" vertex="1" parent="1"><mxGeometry x="561" y="178" width="76" height="24" as="geometry"/></mxCell>
<mxCell id="h-node1" value="文本" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#293244;strokeColor=#556783;fontColor=#d0d8e7;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;shadow=1;" vertex="1" parent="1"><mxGeometry x="420" y="206" width="66" height="38" as="geometry"/></mxCell>
<mxCell id="h-node2" value="分镜" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#194451;strokeColor=#3a7a8b;fontColor=#c2eef6;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;shadow=1;" vertex="1" parent="1"><mxGeometry x="530" y="184" width="74" height="46" as="geometry"/></mxCell>
<mxCell id="h-node3" value="图片" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#5a4034;strokeColor=#8a6251;fontColor=#ffe2d2;fontSize=8;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;shadow=1;" vertex="1" parent="1"><mxGeometry x="625" y="228" width="58" height="42" as="geometry"/></mxCell>
<mxCell id="h-meta" value="&lt;b&gt;111&lt;/b&gt;&lt;br&gt;&lt;span style='font-size:9px;color:#838995'&gt;更新于 07/24 22:24&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#ffffff;fontSize=14;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="390" y="312" width="170" height="48" as="geometry"/></mxCell>
<mxCell id="h-chip" value="01 · 第一章&amp;nbsp;&amp;nbsp;×" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#1a2c4b;strokeColor=#41649c;fontColor=#b3ccff;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="390" y="362" width="108" height="26" as="geometry"/></mxCell>
<mxCell id="h-link" value="+&amp;nbsp;&amp;nbsp;关联章节" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#1b1e23;strokeColor=#424852;fontColor=#d2d6dd;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="520" y="362" width="118" height="28" as="geometry"/></mxCell>
<mxCell id="h-more" value="•••" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#1b1e23;strokeColor=#424852;fontColor=#d2d6dd;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="648" y="362" width="40" height="28" as="geometry"/></mxCell>
<mxCell id="h-cursor" value="↖" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#ffffff;fontSize=24;fontFamily=Arial;align=center;" vertex="1" parent="1"><mxGeometry x="608" y="166" width="30" height="30" as="geometry"/></mxCell>
<mxCell id="h-note" value="悬停反馈:卡片上移 2px,描边变亮,节点表面增强;快捷工具条 160ms 淡入,离开即消失。" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#111315;strokeColor=#24272b;fontColor=#626873;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="780" y="118" width="510" height="42" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
<diagram id="popover" name="03 章节关联浮层">
<mxGraphModel dx="1440" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1440" pageHeight="900" math="0" shadow="0">
<root>
<mxCell id="0"/><mxCell id="1" parent="0"/>
<mxCell id="p-bg" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#090a0b;strokeColor=none;" vertex="1" parent="1"><mxGeometry width="1440" height="900" as="geometry"/></mxCell>
<mxCell id="p-global" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#101112;strokeColor=#26282b;strokeWidth=1;" vertex="1" parent="1"><mxGeometry width="180" height="900" as="geometry"/></mxCell>
<mxCell id="p-brand" value="∞&amp;nbsp;&amp;nbsp;&lt;b&gt;影策&lt;/b&gt;&amp;nbsp;&amp;nbsp;◧" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f3f4f6;fontSize=14;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=14;" vertex="1" parent="1"><mxGeometry y="10" width="174" height="42" as="geometry"/></mxCell>
<mxCell id="p-g1" value="▣&amp;nbsp;&amp;nbsp;项目中心" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#151719;strokeColor=#2b2f35;fontColor=#e2e4e8;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="7" y="68" width="166" height="40" as="geometry"/></mxCell>
<mxCell id="p-glist" value="↗&amp;nbsp;&amp;nbsp;创作画布&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;任务中心&lt;br&gt;&lt;br&gt;▧&amp;nbsp;&amp;nbsp;素材库&lt;br&gt;&lt;br&gt;✦&amp;nbsp;&amp;nbsp;技能库&lt;br&gt;&lt;br&gt;◉&amp;nbsp;&amp;nbsp;积分中心&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;配置与用户偏好" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#a2a6ad;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=20;spacingTop=12;" vertex="1" parent="1"><mxGeometry x="7" y="114" width="166" height="280" as="geometry"/></mxCell>
<mxCell id="p-project" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0c0d0f;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="900" as="geometry"/></mxCell>
<mxCell id="p-phead" value="‹&amp;nbsp;&amp;nbsp;▱&amp;nbsp;&amp;nbsp;&lt;b&gt;测试项目 1&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style='font-size:9px;color:#7891c7'&gt;● 进行中&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;fontColor=#e8eaee;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;spacingLeft=10;" vertex="1" parent="1"><mxGeometry x="180" width="160" height="62" as="geometry"/></mxCell>
<mxCell id="p-plist" value="▥&amp;nbsp;&amp;nbsp;项目概览&lt;br&gt;&lt;br&gt;▤&amp;nbsp;&amp;nbsp;剧情章节&lt;br&gt;&lt;br&gt;&lt;span style='color:#9dbdff'&gt;▦&amp;nbsp;&amp;nbsp;&lt;b&gt;创作画布&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;▧&amp;nbsp;&amp;nbsp;项目资产&lt;br&gt;&lt;br&gt;☷&amp;nbsp;&amp;nbsp;项目设置" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#8b9098;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=20;spacingTop=18;" vertex="1" parent="1"><mxGeometry x="180" y="66" width="160" height="240" as="geometry"/></mxCell>
<mxCell id="p-title" value="&lt;b&gt;创作画布&lt;/b&gt;&lt;br&gt;&lt;span style='font-size:10px;color:#777c85'&gt;1 张画布,可分别关联多个剧情章节&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#f2f3f5;fontSize=19;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="370" y="22" width="500" height="60" as="geometry"/></mxCell>
<mxCell id="p-new" value="+&amp;nbsp;&amp;nbsp;&lt;b&gt;新建画布&lt;/b&gt;" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#f4f5f6;strokeColor=#ffffff;fontColor=#111214;fontSize=11;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;shadow=1;" vertex="1" parent="1"><mxGeometry x="1288" y="27" width="126" height="38" as="geometry"/></mxCell>
<mxCell id="p-line" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#24262a;strokeWidth=1;" vertex="1" parent="1"><mxGeometry x="370" y="88" width="1044" height="1" as="geometry"/></mxCell>
<mxCell id="p-card" value="" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#121416;strokeColor=#2a2d32;strokeWidth=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="370" y="118" width="346" height="294" as="geometry"/></mxCell>
<mxCell id="p-preview" value="画布 01&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;span style='font-size:14px'&gt;&lt;b&gt;111&lt;/b&gt;&lt;/span&gt;&lt;br&gt;&lt;span style='font-size:9px;color:#7d8490'&gt;更新于 07/24 22:24&lt;/span&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#0f1724;strokeColor=#273246;fontColor=#8390a4;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=top;spacingLeft=14;spacingTop=12;" vertex="1" parent="1"><mxGeometry x="380" y="128" width="326" height="176" as="geometry"/></mxCell>
<mxCell id="p-label" value="关联章节&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 个" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=none;fontColor=#777d86;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="390" y="316" width="296" height="24" as="geometry"/></mxCell>
<mxCell id="p-chip" value="01 · 第一章&amp;nbsp;&amp;nbsp;×" style="rounded=1;arcSize=16;whiteSpace=wrap;html=1;fillColor=#17243c;strokeColor=#2c4778;fontColor=#9dbdff;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="390" y="346" width="108" height="26" as="geometry"/></mxCell>
<mxCell id="p-link" value="+&amp;nbsp;&amp;nbsp;&lt;b&gt;关联章节&lt;/b&gt;" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#1b1e23;strokeColor=#547bc4;fontColor=#c8d8f7;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="520" y="346" width="118" height="28" as="geometry"/></mxCell>
<mxCell id="p-more" value="•••" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#17191c;strokeColor=#30343a;fontColor=#8e949d;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;" vertex="1" parent="1"><mxGeometry x="648" y="346" width="40" height="28" as="geometry"/></mxCell>
<mxCell id="p-pop" value="" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#181a1e;strokeColor=#3b4048;strokeWidth=1;shadow=1;" vertex="1" parent="1"><mxGeometry x="520" y="386" width="310" height="286" as="geometry"/></mxCell>
<mxCell id="p-pophead" value="&lt;b&gt;关联剧情章节&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;×" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;strokeColor=#30343a;fontColor=#eef0f3;fontSize=12;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=14;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="520" y="386" width="310" height="48" as="geometry"/></mxCell>
<mxCell id="p-search" value="⌕&amp;nbsp;&amp;nbsp;搜索章节" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#111316;strokeColor=#373c44;fontColor=#6f7580;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="534" y="448" width="282" height="34" as="geometry"/></mxCell>
<mxCell id="p-row1" value="☑&amp;nbsp;&amp;nbsp;01 · 第一章&amp;nbsp;&amp;nbsp;&lt;span style='font-size:9px;color:#707680'&gt;已关联&lt;/span&gt;" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#162238;strokeColor=#2d4878;fontColor=#b4cbfb;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="534" y="494" width="282" height="36" as="geometry"/></mxCell>
<mxCell id="p-row2" value="☐&amp;nbsp;&amp;nbsp;02 · 城门夜雨" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#181a1e;strokeColor=none;fontColor=#c1c5cc;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="534" y="534" width="282" height="36" as="geometry"/></mxCell>
<mxCell id="p-row3" value="☐&amp;nbsp;&amp;nbsp;03 · 追逐镜头" style="rounded=1;arcSize=10;whiteSpace=wrap;html=1;fillColor=#181a1e;strokeColor=none;fontColor=#c1c5cc;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="534" y="574" width="282" height="36" as="geometry"/></mxCell>
<mxCell id="p-cancel" value="取消" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#1b1d21;strokeColor=#363b43;fontColor=#aeb3bb;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="648" y="626" width="70" height="32" as="geometry"/></mxCell>
<mxCell id="p-save" value="保存关联" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#edf0f4;strokeColor=none;fontColor=#16181b;fontSize=10;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=center;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="728" y="626" width="88" height="32" as="geometry"/></mxCell>
<mxCell id="p-note" value="交互变化:原来的 Select 改成可搜索多选浮层;一次保存多个关联,写操作失败时保留浮层并显示行内错误。" style="rounded=1;arcSize=8;whiteSpace=wrap;html=1;fillColor=#111315;strokeColor=#24272b;fontColor=#626873;fontSize=9;fontFamily=SF Pro Display,PingFang SC,sans-serif;align=left;spacingLeft=12;verticalAlign=middle;" vertex="1" parent="1"><mxGeometry x="870" y="386" width="430" height="54" as="geometry"/></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>