Docs.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <template>
  2. <div class="docs-container">
  3. <aside class="sidebar">
  4. <div class="sidebar-header">
  5. <h2>文档导航</h2>
  6. </div>
  7. <nav class="nav-menu">
  8. <div class="nav-section">
  9. <h3>快速开始</h3>
  10. <ul>
  11. <li :class="{ active: activeDoc === 'intro' }" @click="activeDoc = 'intro'">
  12. 介绍
  13. </li>
  14. <li
  15. :class="{ active: activeDoc === 'installation' }"
  16. @click="activeDoc = 'installation'"
  17. >
  18. 安装部署
  19. </li>
  20. </ul>
  21. </div>
  22. <div class="nav-section">
  23. <h3>核心概念</h3>
  24. <ul>
  25. <li :class="{ active: activeDoc === 'workflow' }" @click="activeDoc = 'workflow'">
  26. 工作流
  27. </li>
  28. <li :class="{ active: activeDoc === 'nodes' }" @click="activeDoc = 'nodes'">节点</li>
  29. <li
  30. :class="{ active: activeDoc === 'credentials' }"
  31. @click="activeDoc = 'credentials'"
  32. >
  33. 凭证管理
  34. </li>
  35. </ul>
  36. </div>
  37. <div class="nav-section">
  38. <h3>节点文档</h3>
  39. <ul>
  40. <li :class="{ active: activeDoc === 'http' }" @click="activeDoc = 'http'">
  41. HTTP 节点
  42. </li>
  43. <li :class="{ active: activeDoc === 'code' }" @click="activeDoc = 'code'">
  44. 代码节点
  45. </li>
  46. <li :class="{ active: activeDoc === 'database' }" @click="activeDoc = 'database'">
  47. 数据库节点
  48. </li>
  49. </ul>
  50. </div>
  51. </nav>
  52. </aside>
  53. <main class="docs-content">
  54. <article class="doc-article">
  55. <h1>{{ docTitle }}</h1>
  56. <div class="doc-body">
  57. <p class="lead">{{ docDescription }}</p>
  58. <section class="doc-section">
  59. <h2>概述</h2>
  60. <p>
  61. AI Agent 是一个强大的自动化工作流平台,允许你创建复杂的自动化流程。通过可视化的工作流编辑器,你可以轻松添加各种节点类型,连接各种服务和应用,实现数据的自动化处理和传输。
  62. </p>
  63. </section>
  64. <section class="doc-section">
  65. <h2>主要特性</h2>
  66. <ul class="feature-list">
  67. <li>
  68. <strong>可视化编辑器</strong> - 直观的工作流设计器,支持开始、结束、HTTP请求、条件分支、代码执行、数据查询等多种节点
  69. </li>
  70. <li>
  71. <strong>丰富的节点库</strong> - 支持 HTTP、数据库、代码执行等多种节点类型
  72. </li>
  73. <li>
  74. <strong>实时调试</strong> - 支持单步执行和断点调试
  75. </li>
  76. <li>
  77. <strong>数据转换</strong> - 强大的数据映射和转换能力
  78. </li>
  79. </ul>
  80. </section>
  81. <section class="doc-section">
  82. <h2>快速示例</h2>
  83. <div class="code-block">
  84. <pre><code>// 在代码节点中处理数据
  85. const data = $input.all();
  86. const result = data.map(item => ({
  87. id: item.json.id,
  88. name: item.json.name.toUpperCase(),
  89. timestamp: new Date().toISOString()
  90. }));
  91. return result;</code></pre>
  92. </div>
  93. </section>
  94. <section class="doc-section">
  95. <h2>下一步</h2>
  96. <div class="next-steps">
  97. <a href="#" class="step-link">
  98. <SvgIcon name="video" />
  99. <span>观看教程视频</span>
  100. </a>
  101. <a href="#" class="step-link">
  102. <SvgIcon name="box" />
  103. <span>浏览示例模板</span>
  104. </a>
  105. </div>
  106. </section>
  107. </div>
  108. </article>
  109. </main>
  110. </div>
  111. </template>
  112. <script setup lang="ts">
  113. import { ref, computed } from 'vue'
  114. const activeDoc = ref('intro')
  115. const docTitle = computed(() => {
  116. const titles: Record<string, string> = {
  117. intro: 'AI Agent 介绍',
  118. installation: '安装与部署',
  119. workflow: '工作流概念',
  120. nodes: '节点系统',
  121. credentials: '凭证管理',
  122. http: 'HTTP 节点',
  123. code: '代码节点',
  124. database: '数据库节点'
  125. }
  126. return titles[activeDoc.value] || 'AI Agent 文档'
  127. })
  128. const docDescription = computed(() => {
  129. const descriptions: Record<string, string> = {
  130. intro: '了解 AI Agent 的核心概念和基本使用方法',
  131. installation: '学习如何在你的环境中安装和配置 AI Agent',
  132. workflow: '深入理解工作流的设计模式和最佳实践',
  133. nodes: '掌握节点系统的工作原理和使用技巧',
  134. credentials: '安全地管理和使用第三方服务凭证',
  135. http: '使用 HTTP 节点与 REST API 进行交互',
  136. code: '编写自定义代码处理复杂的业务逻辑',
  137. database: '连接和操作各种数据库系统'
  138. }
  139. return descriptions[activeDoc.value] || ''
  140. })
  141. </script>
  142. <style lang="less" scoped>
  143. .docs-container {
  144. display: flex;
  145. height: calc(100vh - 32px);
  146. background: #f8f9fa;
  147. .sidebar {
  148. width: 280px;
  149. background: #fff;
  150. border-right: 1px solid #e5e7eb;
  151. overflow-y: auto;
  152. flex-shrink: 0;
  153. .sidebar-header {
  154. padding: 0px 20px;
  155. border-bottom: 1px solid #e5e7eb;
  156. h2 {
  157. font-size: 18px;
  158. font-weight: 600;
  159. color: #333;
  160. }
  161. }
  162. .nav-menu {
  163. padding: 16px 0;
  164. .nav-section {
  165. margin-bottom: 24px;
  166. h3 {
  167. padding: 8px 20px;
  168. font-size: 12px;
  169. font-weight: 600;
  170. color: #999;
  171. text-transform: uppercase;
  172. letter-spacing: 0.5px;
  173. }
  174. ul {
  175. list-style: none;
  176. padding: 0;
  177. margin: 0;
  178. li {
  179. padding: 8px 20px 8px 32px;
  180. font-size: 14px;
  181. color: #666;
  182. cursor: pointer;
  183. transition: all 0.2s;
  184. &:hover {
  185. background: #f8f9fa;
  186. color: #333;
  187. }
  188. &.active {
  189. color: #667eea;
  190. background: #f0f3ff;
  191. border-right: 3px solid #667eea;
  192. font-weight: 500;
  193. }
  194. }
  195. }
  196. }
  197. }
  198. }
  199. .docs-content {
  200. flex: 1;
  201. overflow-y: auto;
  202. padding: 40px;
  203. .doc-article {
  204. max-width: 900px;
  205. margin: 0 auto;
  206. background: #fff;
  207. border-radius: 12px;
  208. padding: 48px;
  209. box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
  210. h1 {
  211. font-size: 36px;
  212. font-weight: 700;
  213. color: #333;
  214. margin-bottom: 16px;
  215. }
  216. .doc-body {
  217. .lead {
  218. font-size: 18px;
  219. color: #666;
  220. margin-bottom: 32px;
  221. line-height: 1.6;
  222. }
  223. .doc-section {
  224. margin-bottom: 40px;
  225. h2 {
  226. font-size: 24px;
  227. font-weight: 600;
  228. color: #333;
  229. margin-bottom: 16px;
  230. padding-bottom: 8px;
  231. border-bottom: 2px solid #f0f0f0;
  232. }
  233. p {
  234. font-size: 15px;
  235. color: #666;
  236. line-height: 1.8;
  237. margin-bottom: 16px;
  238. }
  239. .feature-list {
  240. list-style: none;
  241. padding: 0;
  242. li {
  243. padding: 12px 0;
  244. padding-left: 28px;
  245. position: relative;
  246. color: #666;
  247. line-height: 1.6;
  248. &:before {
  249. content: '✓';
  250. position: absolute;
  251. left: 0;
  252. color: #667eea;
  253. font-weight: 700;
  254. }
  255. strong {
  256. color: #333;
  257. }
  258. }
  259. }
  260. .code-block {
  261. background: #282c34;
  262. border-radius: 8px;
  263. padding: 20px;
  264. overflow-x: auto;
  265. margin: 16px 0;
  266. pre {
  267. margin: 0;
  268. code {
  269. color: #abb2bf;
  270. font-family: 'Courier New', monospace;
  271. font-size: 14px;
  272. line-height: 1.6;
  273. }
  274. }
  275. }
  276. .next-steps {
  277. display: flex;
  278. gap: 16px;
  279. margin-top: 24px;
  280. .step-link {
  281. flex: 1;
  282. display: flex;
  283. align-items: center;
  284. gap: 12px;
  285. padding: 16px 20px;
  286. background: #f8f9fa;
  287. border: 1px solid #e5e7eb;
  288. border-radius: 8px;
  289. text-decoration: none;
  290. color: #333;
  291. transition: all 0.3s;
  292. &:hover {
  293. background: #fff;
  294. border-color: #667eea;
  295. box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
  296. }
  297. svg {
  298. font-size: 24px;
  299. color: #667eea;
  300. }
  301. span {
  302. font-size: 14px;
  303. font-weight: 500;
  304. }
  305. }
  306. }
  307. }
  308. }
  309. }
  310. }
  311. }
  312. </style>