index.html 12 KB

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