index.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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>KnowHub 管理</title>
  7. <script src="https://cdn.tailwindcss.com"></script>
  8. <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  9. </head>
  10. <body class="bg-gray-50">
  11. <div class="container mx-auto px-4 py-8 max-w-7xl">
  12. <div class="flex justify-between items-center mb-8">
  13. <h1 class="text-3xl font-bold text-gray-800">KnowHub 全局知识库</h1>
  14. <div class="flex gap-3">
  15. <button onclick="toggleSelectAll()" id="selectAllBtn" class="bg-gray-500 hover:bg-gray-600 text-white px-4 py-2 rounded-lg">
  16. 全选
  17. </button>
  18. <button onclick="batchDelete()" id="batchDeleteBtn" class="bg-red-600 hover:bg-red-700 text-white px-4 py-2 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed" disabled>
  19. 删除选中 (<span id="selectedCount">0</span>)
  20. </button>
  21. <button onclick="batchVerify()" id="batchVerifyBtn" class="bg-green-600 hover:bg-green-700 text-white px-4 py-2 rounded-lg disabled:opacity-50 disabled:cursor-not-allowed" disabled>
  22. ✓ 批量验证通过 (<span id="verifyCount">0</span>)
  23. </button>
  24. <button onclick="openToolTableModal()" class="bg-indigo-600 hover:bg-indigo-700 text-white px-4 py-2 rounded-lg">
  25. 🔧 工具表
  26. </button>
  27. <button onclick="openAddModal()" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded-lg">
  28. + 新增知识
  29. </button>
  30. </div>
  31. </div>
  32. <!-- 搜索栏 -->
  33. <div class="bg-white rounded-lg shadow p-6 mb-6">
  34. <div class="flex gap-4">
  35. <input type="text" id="searchInput" placeholder="输入任务描述进行语义搜索..."
  36. class="flex-1 border rounded px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500"
  37. onkeypress="if(event.key==='Enter') performSearch()">
  38. <button onclick="performSearch()" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded">
  39. 搜索
  40. </button>
  41. <button onclick="clearSearch()" class="bg-gray-500 hover:bg-gray-600 text-white px-6 py-2 rounded">
  42. 清除
  43. </button>
  44. </div>
  45. <div id="searchStatus" class="mt-2 text-sm text-gray-600 hidden"></div>
  46. </div>
  47. <!-- 筛选栏 -->
  48. <div class="bg-white rounded-lg shadow p-6 mb-6">
  49. <div class="grid grid-cols-1 md:grid-cols-5 gap-4">
  50. <div>
  51. <label class="block text-sm font-medium text-gray-700 mb-2">类型 (Types)</label>
  52. <div class="space-y-2">
  53. <label class="flex items-center"><input type="checkbox" value="strategy" class="mr-2 type-filter"> Strategy</label>
  54. <label class="flex items-center"><input type="checkbox" value="tool" class="mr-2 type-filter"> Tool</label>
  55. <label class="flex items-center"><input type="checkbox" value="user_profile" class="mr-2 type-filter"> User Profile</label>
  56. <label class="flex items-center"><input type="checkbox" value="usecase" class="mr-2 type-filter"> Usecase</label>
  57. <label class="flex items-center"><input type="checkbox" value="definition" class="mr-2 type-filter"> Definition</label>
  58. <label class="flex items-center"><input type="checkbox" value="plan" class="mr-2 type-filter"> Plan</label>
  59. </div>
  60. </div>
  61. <div>
  62. <label class="block text-sm font-medium text-gray-700 mb-2">Tags</label>
  63. <div id="tagsFilterContainer" class="space-y-2 max-h-40 overflow-y-auto">
  64. <p class="text-sm text-gray-500">加载中...</p>
  65. </div>
  66. </div>
  67. <div>
  68. <label class="block text-sm font-medium text-gray-700 mb-2">Owner</label>
  69. <input type="text" id="ownerFilter" placeholder="输入 owner" class="w-full border rounded px-3 py-2">
  70. </div>
  71. <div>
  72. <label class="block text-sm font-medium text-gray-700 mb-2">Scopes</label>
  73. <input type="text" id="scopesFilter" placeholder="输入 scope" class="w-full border rounded px-3 py-2">
  74. </div>
  75. <div>
  76. <label class="block text-sm font-medium text-gray-700 mb-2">Status</label>
  77. <div class="space-y-2">
  78. <label class="flex items-center"><input type="checkbox" value="approved" class="mr-2 status-filter" checked> Approved</label>
  79. <label class="flex items-center"><input type="checkbox" value="checked" class="mr-2 status-filter" checked> Checked</label>
  80. <label class="flex items-center"><input type="checkbox" value="rejected" class="mr-2 status-filter"> Rejected</label>
  81. <label class="flex items-center"><input type="checkbox" value="pending" class="mr-2 status-filter"> Pending</label>
  82. </div>
  83. </div>
  84. </div>
  85. <button onclick="applyFilters()" class="mt-4 bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded">
  86. 应用筛选
  87. </button>
  88. </div>
  89. <!-- 知识列表 -->
  90. <div id="knowledgeList" class="space-y-4"></div>
  91. <!-- 分页控件 -->
  92. <div id="pagination" class="flex justify-center items-center gap-4 mt-6 hidden">
  93. <button onclick="goToPage(currentPage - 1)" id="prevBtn" class="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded disabled:opacity-50 disabled:cursor-not-allowed">
  94. 上一页
  95. </button>
  96. <span id="pageInfo" class="text-gray-700"></span>
  97. <button onclick="goToPage(currentPage + 1)" id="nextBtn" class="bg-gray-600 hover:bg-gray-700 text-white px-4 py-2 rounded disabled:opacity-50 disabled:cursor-not-allowed">
  98. 下一页
  99. </button>
  100. </div>
  101. </div>
  102. <!-- 新增/编辑 Modal -->
  103. <div id="modal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4">
  104. <div class="bg-white rounded-lg max-w-2xl w-full max-h-[90vh] overflow-y-auto p-6">
  105. <h2 id="modalTitle" class="text-2xl font-bold mb-4">新增知识</h2>
  106. <form id="knowledgeForm" class="space-y-4">
  107. <input type="hidden" id="editId">
  108. <div>
  109. <label class="block text-sm font-medium mb-1">Task *</label>
  110. <input type="text" id="taskInput" required class="w-full border rounded px-3 py-2">
  111. </div>
  112. <div>
  113. <label class="block text-sm font-medium mb-1">Content *</label>
  114. <textarea id="contentInput" required rows="6" class="w-full border rounded px-3 py-2"></textarea>
  115. </div>
  116. <div>
  117. <label class="block text-sm font-medium mb-1">Types (多选)</label>
  118. <div class="space-y-1">
  119. <label class="flex items-center"><input type="checkbox" value="strategy" class="mr-2 type-checkbox"> Strategy</label>
  120. <label class="flex items-center"><input type="checkbox" value="tool" class="mr-2 type-checkbox"> Tool</label>
  121. <label class="flex items-center"><input type="checkbox" value="user_profile" class="mr-2 type-checkbox"> User Profile</label>
  122. <label class="flex items-center"><input type="checkbox" value="usecase" class="mr-2 type-checkbox"> Usecase</label>
  123. <label class="flex items-center"><input type="checkbox" value="definition" class="mr-2 type-checkbox"> Definition</label>
  124. <label class="flex items-center"><input type="checkbox" value="plan" class="mr-2 type-checkbox"> Plan</label>
  125. </div>
  126. </div>
  127. <div>
  128. <label class="block text-sm font-medium mb-1">Tags (JSON)</label>
  129. <textarea id="tagsInput" rows="2" placeholder='{"key": "value"}' class="w-full border rounded px-3 py-2"></textarea>
  130. </div>
  131. <div>
  132. <label class="block text-sm font-medium mb-1">Scopes (逗号分隔)</label>
  133. <input type="text" id="scopesInput" placeholder="org:cybertogether" class="w-full border rounded px-3 py-2">
  134. </div>
  135. <div>
  136. <label class="block text-sm font-medium mb-1">Owner</label>
  137. <input type="text" id="ownerInput" class="w-full border rounded px-3 py-2">
  138. </div>
  139. <div id="relationshipsSection" class="hidden">
  140. <label class="block text-sm font-medium text-gray-700 mb-2">关联知识</label>
  141. <div id="relationshipsList" class="space-y-1 text-sm bg-gray-50 rounded p-3"></div>
  142. </div>
  143. <div class="flex gap-2 pt-4">
  144. <button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-2 rounded">保存</button>
  145. <button type="button" onclick="closeModal()" class="bg-gray-300 hover:bg-gray-400 px-6 py-2 rounded">取消</button>
  146. </div>
  147. </form>
  148. </div>
  149. </div>
  150. <!-- 工具表 Modal -->
  151. <div id="toolTableModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50">
  152. <div class="bg-white rounded-xl shadow-xl w-full max-w-5xl max-h-[90vh] flex flex-col">
  153. <div class="flex justify-between items-center p-6 border-b">
  154. <h2 class="text-2xl font-bold">🔧 工具表</h2>
  155. <button onclick="closeToolTableModal()" class="text-gray-400 hover:text-gray-600 text-2xl">✕</button>
  156. </div>
  157. <div id="toolCategoryTabs" class="flex gap-2 px-6 pt-4 flex-wrap border-b pb-4"></div>
  158. <div class="flex flex-1 overflow-hidden">
  159. <div id="toolList" class="w-[250px] border-r overflow-y-auto p-4 space-y-2 bg-gray-50 flex-shrink-0">
  160. <p class="text-sm text-gray-500 text-center mt-4">加载中...</p>
  161. </div>
  162. <div id="toolDetail" class="flex-1 overflow-y-auto p-6 bg-white">
  163. <div class="flex h-full items-center justify-center text-gray-400">
  164. ← 请在左侧选择要查看的工具
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. </div>
  170. <!-- 知识详情弹窗(只读)-->
  171. <div id="knowledgeDetailModal" class="hidden fixed inset-0 bg-black bg-opacity-60 flex items-center justify-center p-4 z-[60]">
  172. <div class="bg-white rounded-xl shadow-xl w-full max-w-2xl max-h-[85vh] flex flex-col">
  173. <div class="flex justify-between items-center p-6 border-b">
  174. <h2 class="text-xl font-bold text-gray-800">知识详情</h2>
  175. <button onclick="closeKnowledgeDetailModal()" class="text-gray-400 hover:text-gray-600 text-2xl">✕</button>
  176. </div>
  177. <div id="knowledgeDetailContent" class="flex-1 overflow-y-auto p-6">
  178. <p class="text-gray-400 text-center animate-pulse">加载中...</p>
  179. </div>
  180. </div>
  181. </div>
  182. <script src="/static/app.js"></script>
  183. </body>
  184. </html>