index.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>OpenClaw 对话任务看板</title>
  7. <link rel="stylesheet" href="./styles.css">
  8. </head>
  9. <body>
  10. <div class="app-shell">
  11. <header class="top-bar">
  12. <div class="brand-block">
  13. <h1>OpenClaw 对话任务看板</h1>
  14. <p>每次对话为主节点,向后发散子节点,像思维导图一样持续延展。</p>
  15. </div>
  16. <form id="rootForm" class="root-form">
  17. <label for="rootNameInput">新建主对话</label>
  18. <div class="inline-group">
  19. <input
  20. id="rootNameInput"
  21. name="rootName"
  22. type="text"
  23. maxlength="120"
  24. placeholder="例如:发布版本 v2.1"
  25. required
  26. >
  27. <button type="submit" class="btn btn-primary">新增主节点</button>
  28. </div>
  29. </form>
  30. <div class="toolbar-actions">
  31. <button id="fitViewBtn" type="button" class="btn">适配视图</button>
  32. <button id="resetViewBtn" type="button" class="btn">重置缩放</button>
  33. <button id="exportJsonBtn" type="button" class="btn">导出 JSON</button>
  34. <button id="exportSvgBtn" type="button" class="btn">导出 SVG</button>
  35. </div>
  36. </header>
  37. <main class="board-layout">
  38. <aside class="side-panel">
  39. <section class="panel-card">
  40. <h2>状态说明</h2>
  41. <ul class="legend-list">
  42. <li><span class="legend-dot pending"></span>待开始</li>
  43. <li><span class="legend-dot in-progress"></span>执行中</li>
  44. <li><span class="legend-dot completed"></span>已完成</li>
  45. <li><span class="legend-dot bug"></span>Bug 终止</li>
  46. </ul>
  47. </section>
  48. <section class="panel-card">
  49. <h2>统计</h2>
  50. <dl id="statsPanel" class="stats-list">
  51. <div><dt>主对话</dt><dd id="statRoots">0</dd></div>
  52. <div><dt>总节点</dt><dd id="statTotal">0</dd></div>
  53. <div><dt>执行中</dt><dd id="statRunning">0</dd></div>
  54. <div><dt>有 Bug</dt><dd id="statBug">0</dd></div>
  55. </dl>
  56. </section>
  57. <section class="panel-card hint-card">
  58. <h2>交互提示</h2>
  59. <p>拖动画布可平移,滚轮可缩放,点击节点可查看完整卡片信息并编辑。</p>
  60. </section>
  61. </aside>
  62. <section class="canvas-panel">
  63. <div class="canvas-wrapper" id="canvasWrapper">
  64. <svg id="mindmapSvg" viewBox="0 0 1800 1100" role="img" aria-label="OpenClaw 任务导图">
  65. <g id="viewportGroup">
  66. <g id="linksLayer"></g>
  67. <g id="nodesLayer"></g>
  68. </g>
  69. </svg>
  70. </div>
  71. </section>
  72. </main>
  73. </div>
  74. <div id="nodeModal" class="modal hidden" aria-hidden="true">
  75. <div class="modal-mask" data-close="true"></div>
  76. <div class="modal-card" role="dialog" aria-modal="true">
  77. <button id="closeModalBtn" class="modal-close" type="button" aria-label="关闭详情">×</button>
  78. <h2>节点详情</h2>
  79. <form id="nodeForm" class="node-form">
  80. <input id="nodeIdInput" name="nodeId" type="hidden">
  81. <label>
  82. 节点标题
  83. <input id="nameInput" name="name" type="text" maxlength="120" required>
  84. </label>
  85. <label>
  86. 状态
  87. <select id="statusInput" name="status" required>
  88. <option value="pending">待开始</option>
  89. <option value="in-progress">执行中</option>
  90. <option value="completed">已完成</option>
  91. <option value="bug">Bug 终止</option>
  92. </select>
  93. </label>
  94. <div class="time-grid">
  95. <label>
  96. 开始时间
  97. <input id="startTimeInput" name="startTime" type="datetime-local">
  98. </label>
  99. <label>
  100. 结束时间
  101. <input id="endTimeInput" name="endTime" type="datetime-local">
  102. </label>
  103. </div>
  104. <label>
  105. 准备如何进行
  106. <textarea id="planInput" name="plannedApproach" rows="4" maxlength="2000" placeholder="写下执行策略、预期路径"></textarea>
  107. </label>
  108. <label>
  109. 遇到什么 Bug 而终止
  110. <textarea id="bugInput" name="bugDetails" rows="4" maxlength="2000" placeholder="记录触发条件、报错、临时结论"></textarea>
  111. </label>
  112. <label>
  113. 补充说明
  114. <textarea id="notesInput" name="notes" rows="3" maxlength="3000" placeholder="可写检查结果、风险、后续动作"></textarea>
  115. </label>
  116. <div class="meta-row">
  117. <span id="createdAtInfo">创建时间:-</span>
  118. <span id="updatedAtInfo">更新时间:-</span>
  119. </div>
  120. <div class="child-create">
  121. <input id="childNameInput" type="text" maxlength="120" placeholder="新增子节点标题">
  122. <button id="addChildBtn" type="button" class="btn">新增子节点</button>
  123. </div>
  124. <div class="modal-actions">
  125. <button id="deleteNodeBtn" type="button" class="btn btn-danger">删除该节点</button>
  126. <button type="submit" class="btn btn-primary">保存变更</button>
  127. </div>
  128. </form>
  129. </div>
  130. </div>
  131. <script src="./app.js"></script>
  132. </body>
  133. </html>