learn-ajax接口文档.html 99 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670
  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. <meta name="version" content="For Json viewer">
  7. <title>ApiPost接口文档</title>
  8. <link href="https://img.cdn.apipost.cn/v6/docs/img/doc_favicon.ico" rel="shortcut icon" type="image/x-icon">
  9. <link rel="stylesheet" type="text/css" href="https://img.cdn.apipost.cn/docs/css/reset.css">
  10. <link rel="stylesheet" type="text/css" href="https://img.cdn.apipost.cn/docs/css/font-awesome-4.7.0/css/font-awesome.css">
  11. <link rel="stylesheet" href="https://img.cdn.apipost.cn/docs/css/github.css">
  12. <script type="text/javascript"></script>
  13. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/jquery-3.4.1.min.js"></script>
  14. <script src="https://img.cdn.apipost.cn/docs/js/colResizable-1.6.min.js"></script>
  15. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/marked.min.js"></script>
  16. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/template-web.js"></script>
  17. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/highlight.js"></script>
  18. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/clipboard.min.js"></script>
  19. <script type="text/javascript" src="https://img.cdn.apipost.cn/statics/libs/crypto-js/crypto-js.min.js" charset="utf-8"></script>
  20. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/json5.min.js"></script>
  21. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/js/enc.min.js"></script>
  22. <script type="text/javascript" src="https://img.cdn.apipost.cn/docs/json-viewer/json-viewer.min.js"></script>
  23. <script src="https://img.cdn.apipost.cn/docs/js/indent.js"></script>
  24. <script>
  25. Date.prototype.format = function (fmt) {
  26. var o = {
  27. "M+": this.getMonth() + 1, //月份
  28. "d+": this.getDate(), //日
  29. "h+": this.getHours(), //小时
  30. "m+": this.getMinutes(), //分
  31. "s+": this.getSeconds(), //秒
  32. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  33. "S": this.getMilliseconds() //毫秒
  34. };
  35. if (/(y+)/.test(fmt)) {
  36. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  37. }
  38. for (var k in o) {
  39. if (new RegExp("(" + k + ")").test(fmt)) {
  40. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
  41. }
  42. }
  43. return fmt;
  44. }
  45. </script>
  46. <style type="text/css">
  47. .preview-markdown table td {
  48. position: relative;
  49. }
  50. .indent-fold {
  51. border: 0;
  52. background: transparent;
  53. position: absolute;
  54. left: -25px;
  55. top: 10px;
  56. font-size: 24px;
  57. color: #999;
  58. cursor: pointer;
  59. text-align: center;
  60. width: 15px;
  61. height: 15px;
  62. padding: 0;
  63. }
  64. .indent-fold img {
  65. position: static !important;
  66. transform: translateY(0);
  67. }
  68. .indent-fold.right img {
  69. transform: rotate(0);
  70. }
  71. .indent-fold.down img {
  72. transform: rotate(-90deg);
  73. }
  74. </style>
  75. <link rel="stylesheet" href="https://img.cdn.apipost.cn/docs/css/docs.css">
  76. <link rel="stylesheet" href="https://img.cdn.apipost.cn/docs/css/v6.css">
  77. <link rel="stylesheet" href="https://img.cdn.apipost.cn/docs/css/jsonview.css">
  78. <style>
  79. .body .box{
  80. height: calc(100vh - 60px);
  81. }
  82. .JCLRgrip .JColResizer {
  83. cursor: col-resize;
  84. }
  85. table tr td,
  86. th {
  87. text-indent: 8px;
  88. }
  89. .JColResizer>tbody>tr>td,
  90. .JColResizer>tbody>tr>th {
  91. overflow: visible !important;
  92. }
  93. </style>
  94. </head>
  95. <body>
  96. <!-- <body> -->
  97. <div class="body">
  98. <div class="doc-head">
  99. <div class="left">
  100. <a href="https://www.apipost.cn/" target="_blank" title="ApiPost接口与文档管理系统">
  101. <img src="https://img.cdn.apipost.cn/v6/docs/img/logov6.svg" alt="ApiPost接口与文档管理系统">
  102. </a>
  103. </div>
  104. <div class="container">
  105. </div>
  106. </div>
  107. <div class="box">
  108. <div class="box-first" style="display: flex; flex-direction: column;justify-content: flex-end;">
  109. <div class="sreachInput">
  110. <img src="https://img.cdn.apipost.cn/v6/docs/img/search.svg" alt="">
  111. <input type="text" class="search" placeholder="搜索目录/接口">
  112. </div>
  113. <div class="title">
  114. </div>
  115. <div class="target top" data-target_id="001">
  116. <div class="globals_select"></div>
  117. 全局参数
  118. </div>
  119. <div class="new">
  120. </div>
  121. <!-- <a href="https://www.toutiao.com/i6960487351701275149/" id = "advertise" target="_blank" style="display: inline-block; width: 300px;height: 70px;background: url('https://img.cdn.apipost.cn/cdn/images/a-long-letter.svg?0424') no-repeat left"></a> -->
  122. <div class="bar"></div>
  123. <script type="text/html" id="template-target-sidebar-list-tpl">
  124. {{each list value}}
  125. <div>
  126. <div class="target {{value.target_type == 'folder' ? 'folder':'api'}}"
  127. data-type="{{value.target_type}}"
  128. data-target_id="{{value.local_target_id}}">
  129. {{if value.target_type == 'folder'}}
  130. <span>
  131. <span class="control">
  132. {{if value.children}}
  133. <div class="folder_select">
  134. </div>
  135. {{/if}}
  136. </span>
  137. <span>
  138. <div class="img">
  139. </div>
  140. {{value.name}}
  141. </span>
  142. </span>
  143. {{else}}
  144. <span>
  145. <em class="{{((value.target_type == 'doc') || (value.target_type == 'example' && value.is_doc == 1)) ? 'DOC' : value.target_type != 'example' ? value.method : value.method}}">{{(value.target_type == 'doc' || (value.target_type == 'example' && value.is_doc == '1')) ? '文本' : value.method == 'OPTIONS' ? 'OPT' : value.method == 'DELETE' ? 'DEL' : value.method == 'UNLINK' ? 'UNLNK' : value.method == 'UNLOCK' ? 'UNLCK' : value.method == 'PROPFIND' ? 'PROP' : value.method}}</em>
  146. <span>{{value.name}}</span>
  147. </span>
  148. <span></span>
  149. {{/if}}
  150. </div>
  151. {{if value.children!=null}}
  152. {{each value.children data}}
  153. {{set a=data["index"]=3}}
  154. {{include 'list1' data}}
  155. {{/each}}
  156. {{/if}}
  157. </div>
  158. {{/each}}
  159. </script>
  160. <script type="text/html" id="list1">
  161. <div>
  162. <div class="target {{target_type == 'folder' ? 'folder':'api'}}" data-type="{{target_type}}"
  163. data-target_id="{{local_target_id}}"
  164. style="padding-left:{{index * 15}}px">
  165. {{if target_type == 'folder'}}
  166. <span>
  167. <span class="control">
  168. {{if children}}
  169. <div class="folder_select">
  170. </div>
  171. {{/if}}
  172. </span>
  173. <span>
  174. <div class="img">
  175. </div>
  176. {{name}}
  177. </span>
  178. </span>
  179. {{else}}
  180. <span>
  181. <em class="{{((target_type == 'doc') || (target_type == 'example' && is_doc == 1)) ? 'DOC' : target_type != 'example' ? method : method}}">{{(target_type == 'doc' || (target_type == 'example' && is_doc == '1')) ? '文本' : method == 'OPTIONS' ? 'OPT' : method == 'DELETE' ? 'DEL' : method == 'UNLINK' ? 'UNLNK' : method == 'UNLOCK' ? 'UNLCK' : method == 'PROPFIND' ? 'PROP' : method}}</em>
  182. <span>{{name}}</span>
  183. </span>
  184. <span></span>
  185. {{/if}}
  186. </div>
  187. {{if children!=null}}
  188. {{each children data}}
  189. {{if index}}
  190. {{set b=data.index=index+1}}
  191. {{else}}
  192. {{set c=data["index"] = 3}}
  193. {{/if}}
  194. {{include 'list1' data}}
  195. {{/each}}
  196. {{/if}}
  197. </div>
  198. </script>
  199. </div>
  200. <div class="box-third">
  201. <div class=" preview-markdown">
  202. </div>
  203. <div style="width: 100%;">
  204. </div>
  205. <div class="box-nav" style="background: #fff;">
  206. <ul class="api template-nav-menu">
  207. <script type="text/html" id="template-nav-menu-tpl">
  208. <!-- {{if target_type == "api" || target_type == "folder" || (target_type == "example" && is_doc == 0) }}-->
  209. {{if request.description}}
  210. <li class="cur nav-btn" data-id="0" style="display: block"><a href="javascript:;">
  211. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  212. 接口说明</a></li>
  213. <li class="nav-btn" data-id="1"><a href="javascript:;">
  214. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  215. 基本信息</a></li>
  216. {{else}}
  217. <li class="nav-btn" data-id="0" style="display: none"><a href="javascript:;">
  218. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  219. 接口说明</a></li>
  220. <li class="cur nav-btn" data-id="1"><a href="javascript:;">
  221. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  222. 基本信息</a></li>
  223. {{/if}}
  224. <!-- {{/if}}-->
  225. {{if request.header.parameter.length > 0 || request.query.parameter.length > 0 ||
  226. request.resful.parameter.length > 0 || request.body.parameter.length>0 || request.body.raw !=''}}
  227. <li class="nav-btn" data-id="2" style="display: block"><a href="javascript:;">
  228. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  229. 请求参数</a></li>
  230. {{else}}
  231. <li class="nav-btn" data-id="2" style="display: none"><a href="javascript:;">
  232. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  233. 请求参数</a></li>
  234. {{/if}}
  235. <ul>
  236. {{if request.header.parameter.length > 0}}
  237. <li class="nav-btn" data-id="3" style="display: block"><a href="javascript:;">
  238. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  239. header参数及说明</a></li>
  240. {{else}}
  241. <li class="nav-btn" data-id="3" style="display: none"><a href="javascript:;">
  242. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  243. header参数及说明</a></li>
  244. {{/if}}
  245. {{if request.query.parameter.length > 0}}
  246. <li class="nav-btn" data-id="4" style="display: block"><a href="javascript:;">
  247. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  248. query参数及说明</a></li>
  249. {{else}}
  250. <li class="nav-btn" data-id="4" style="display: none"><a href="javascript:;">
  251. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  252. query参数及说明</a></li>
  253. {{/if}}
  254. {{if request.resful.parameter.length > 0}}
  255. <li class="nav-btn" data-id="5" style="display: block"><a href="javascript:;">
  256. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  257. 路径参数及说明</a></li>
  258. {{else}}
  259. <li class="nav-btn" data-id="5" style="display: none"><a href="javascript:;">
  260. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  261. 路径参数及说明</a></li>
  262. {{/if}}
  263. {{if request?.auth?.type && request?.auth?.type != 'noauth'}}
  264. <li class="nav-btn" data-id="6" style="display: block"><a href="javascript:;">
  265. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  266. 认证及说明</a></li>
  267. {{else}}
  268. <li class="nav-btn" data-id="6" style="display: none"><a href="javascript:;">
  269. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  270. 认证及说明</a></li>
  271. {{/if}}
  272. {{if request.body.parameter.length>0 || request.body.raw !='' }}
  273. <li class="nav-btn" data-id="7" style="display: block"><a href="javascript:;">
  274. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  275. body参数及说明</a></li>
  276. {{else}}
  277. <li class="nav-btn" data-id="7" style="display: none"><a href="javascript:;">
  278. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  279. body参数及说明</a></li>
  280. {{/if}}
  281. <!-- <li class="nav-btn" data-id="6"><a href="javascript:;">预执行脚本</a></li>-->
  282. <!-- <li class="nav-btn" data-id="7"><a href="javascript:;">后执行脚本</a></li>-->
  283. </ul>
  284. {{if response.success.raw || response.success.parameter.length > 0 || response.error.raw ||
  285. response.error.parameter.length > 0}}
  286. <li class="nav-btn" data-id="8" style="display: block"><a href="javascript:;">
  287. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  288. 响应示例</a></li>
  289. {{else}}
  290. <li class="nav-btn" data-id="8" style="display:none"><a href="javascript:;">
  291. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  292. 响应示例</a></li>
  293. <!-- <ul>-->
  294. <!-- {{if response.success.raw || response.success.parameter.length > 0}}-->
  295. <!-- <li class="nav-btn" data-id="9"><a href="javascript:;">成功响应示例</a></li>-->
  296. <!-- {{/if}}-->
  297. <!---->
  298. <!-- {{if response.error.raw || response.error.parameter.length > 0}}-->
  299. <!-- <li class="nav-btn" data-id="10"><a href="javascript:;">失败响应示例</a></li>-->
  300. <!-- {{/if}}-->
  301. <!-- </ul> -->
  302. {{/if}}
  303. </script>
  304. </ul>
  305. <ul class="folder">
  306. <li class="cur nav-folder-btn" data-id="0"><a href="javascript:;">
  307. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  308. 目录说明</a></li>
  309. <li class="nav-folder-btn" data-id="1"><a href="javascript:;">
  310. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  311. 公共参数</a></li>
  312. <ul>
  313. <li class="nav-folder-btn" data-id="2"><a href="javascript:;">
  314. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  315. header参数及说明</a></li>
  316. <li class="nav-folder-btn" data-id="3"><a href="javascript:;">
  317. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  318. query参数及说明</a></li>
  319. <li class="nav-folder-btn" data-id="4"><a href="javascript:;">
  320. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  321. body参数及说明</a></li>
  322. <li class="nav-folder-btn" data-id="5"><a href="javascript:;">
  323. <img src="https://img.cdn.apipost.cn/v6/docs/img/arrow.svg" alt="">
  324. 认证及说明</a></li>
  325. <!-- <li class="nav-folder-btn" data-id="4"><a href="javascript:;">预执行脚本</a></li>-->
  326. <!-- <li class="nav-folder-btn" data-id="5"><a href="javascript:;">后执行脚本</a></li>-->
  327. </ul>
  328. </ul>
  329. </div>
  330. <script type="text/html" id="template-example-doc-tpl">
  331. <h2 class="top" style="display: block">
  332. <div style="display: flex;align-items: center;">
  333. <span>{{name}}</span>
  334. {{if target_type != 'folder'}}
  335. <!-- <button title="复制当前文档/接口数据到剪贴板" class="CopyCurrentData" data-clipboard-action="copy" data-clipboard-text="" data-target_id="{{local_target_id}}">
  336. <img src="https://img.cdn.apipost.cn/v6/docs/img/copy.svg" alt="" style="margin-right:2px">
  337. 复制接口
  338. <a style="margin-left:2px" href="https://wiki.apipost.cn/document/00091641-1e36-490d-9caf-3e47cd38bcde/0b622ce8-68c0-4a00-88ba-287bdae336ad" target="_blank" rel="noopener noreferrer">
  339. <img style="cursor: pointer;" src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  340. </a>
  341. </button> -->
  342. <!-- <button class="opneApis" data-target_id="{{local_target_id}}">
  343. <img src="https://img.cdn.apipost.cn/v6/docs/img/open.svg" alt="">
  344. 在工作台打开
  345. </button> -->
  346. <!-- <a href="https://wiki.apipost.cn/document/00091641-1e36-490d-9caf-3e47cd38bcde/0b622ce8-68c0-4a00-88ba-287bdae336ad" title="什么是复制接口?" target="_blank"><i class="fa fa-question-circle-o" aria-hidden="true"></i></a> -->
  347. {{/if}}
  348. </div>
  349. <span class="metadata">创建人:{{create_users.create_user}} &nbsp;&nbsp;&nbsp;&nbsp; 最后更新:{{create_users.update_user}} &nbsp;&nbsp;&nbsp;&nbsp;更新时间:{{@dateFormat(update_dtime * 1000,'yyyy-MM-dd hh:mm:ss')}}</span>
  350. </h2>
  351. {{if target_type == 'folder'}}
  352. <h3 class="title" style="{{request.description ? 'visibility: visible;':'visibility:hidden;height:0;margin:0;'}}" ><a href="javascript:;" class="maodian">
  353. <img src="https://img.cdn.apipost.cn/v6/docs/img/book.svg" alt="">
  354. </a> 目录说明 <i class="fa fa-angle-down"></i></h3>
  355. {{if request.description}}
  356. <div class="editor-preview desc markdown-section">
  357. {{@marked(request.description)}}
  358. </div>
  359. {{/if}}
  360. {{else}}
  361. <h3 class="title" style="{{request.description ? 'visibility: visible;':'visibility:hidden;height:0;margin:0;'}}" ><a href="javascript:;" class="maodian">
  362. <img src="https://img.cdn.apipost.cn/v6/docs/img/book.svg" alt="">
  363. </a> 接口说明 <i class="fa fa-angle-down"></i></h3>
  364. {{if request.description}}
  365. <div class="editor-preview desc markdown-section">
  366. {{@marked(request.description)}}
  367. </div>
  368. {{/if}}
  369. {{/if}}
  370. {{if (target_type == 'example' && is_doc == '0') || target_type == 'api'}}
  371. <h3 class="title"><a href="javascript:;" class="maodian">
  372. <img src="https://img.cdn.apipost.cn/v6/docs/img/info.svg" alt="">
  373. </a> 基本信息 <i class="fa fa-angle-down"></i></h3>
  374. <ul class="editor-preview-info">
  375. <li><strong>接口状态:</strong> <code class="span" style="color: {{markColor}};">{{markName}}</code></li>
  376. <li><strong>接口URL:</strong> <code class="span">{{request.url ? request.url : 'url为空...'}}</code>
  377. </li>
  378. <li><strong>请求方式:</strong> <code class="span">{{method}}</code></li>
  379. <li><strong>Content-Type:</strong> <code class="span">{{request.body.mode}}</code></li>
  380. </ul>
  381. <h3 class="title" style="{{request.header.parameter.length > 0 || request.query.parameter.length > 0 || request.resful.parameter.length > 0 || request.body.parameter.length>0 ||request.body.raw !='' || (request?.auth?.type && request?.auth?.type != 'noauth') ? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian">
  382. <img src="https://img.cdn.apipost.cn/v6/docs/img/globals.svg" alt="">
  383. </a> 请求参数 <i class="fa fa-angle-down"></i></h3>
  384. {{if request.header.parameter.length > 0 || request.query.parameter.length > 0 || request.resful.parameter.length > 0 || request.body.parameter.length>0 ||request.body.raw !='' || (request?.auth?.type && request?.auth?.type != 'noauth')}}
  385. <div class="markdown-request">
  386. <h4 class="title" style="{{request.header.parameter.length > 0? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> Header参数及说明</h4>
  387. {{if request.header.parameter.length > 0}}
  388. <div>
  389. <table>
  390. <tr>
  391. <th>参数名</th>
  392. <th>示例值</th>
  393. <th>参数类型</th>
  394. <th>是否必填</th>
  395. <th>参数描述</th>
  396. </tr>
  397. {{each request.header.parameter item}}
  398. {{if item.key}}
  399. <tr>
  400. <td>
  401. {{if item.key_var}}
  402. {{item.key_var}}
  403. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  404. <div class="vars_title">
  405. 变量{{item.key}} 生成
  406. </div>
  407. {{else}}
  408. {{item.key}}
  409. {{/if}}
  410. </td>
  411. <td>
  412. {{if item.value_var}}
  413. {{item.value_var}}
  414. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  415. <div class="vars_title">
  416. 变量{{item.value}} 生成
  417. </div>
  418. {{else}}
  419. {{item.value == '' ? '-' : item.value }}
  420. {{/if}}
  421. </td>
  422. <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  423. item.field_type}}
  424. </td>
  425. <td>{{item.not_null == "1" ? '是' : '否'}}</td>
  426. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  427. </tr>
  428. {{/if}}
  429. {{/each}}
  430. </table>
  431. </div>
  432. {{/if}}
  433. <h4 class="title" style="{{request.query.parameter.length > 0 ? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> Query参数及说明</h4>
  434. {{if request.query.parameter.length > 0}}
  435. <div>
  436. <table>
  437. <tr>
  438. <th>参数名</th>
  439. <th>示例值</th>
  440. <th>参数类型</th>
  441. <th>是否必填</th>
  442. <th>参数描述</th>
  443. </tr>
  444. {{each request.query.parameter item}}
  445. {{if item.key}}
  446. <tr>
  447. <td>
  448. {{if item.key_var}}
  449. {{item.key_var}}
  450. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  451. <div class="vars_title">
  452. 变量{{item.key}} 生成
  453. </div>
  454. {{else}}
  455. {{item.key}}
  456. {{/if}}
  457. </td>
  458. <td>
  459. {{if item.value_var}}
  460. {{item.value_var}}
  461. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  462. <div class="vars_title">
  463. 变量{{item.value}} 生成
  464. </div>
  465. {{else}}
  466. {{item.value == '' ? '-' : item.value }}
  467. {{/if}}
  468. </td>
  469. <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  470. item.field_type}}
  471. </td>
  472. <td>{{item.not_null == "1" ? '是' : '否'}}</td>
  473. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  474. </tr>
  475. {{/if}}
  476. {{/each}}
  477. </table>
  478. </div>
  479. {{/if}}
  480. <h4 class="title" style="{{request.resful.parameter.length ? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> 路径参数及说明</h4>
  481. {{if request.resful.parameter.length > 0}}
  482. <div>
  483. <table>
  484. <tr>
  485. <th>参数名</th>
  486. <th>示例值</th>
  487. <!--
  488. <th>参数类型</th>
  489. <th>是否必填</th>
  490. -->
  491. <th>参数描述</th>
  492. </tr>
  493. {{each request.resful.parameter item}}
  494. {{if item.key}}
  495. <tr>
  496. <td>
  497. {{if item.key_var}}
  498. {{item.key_var}}
  499. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  500. <div class="vars_title">
  501. 变量{{item.key}} 生成
  502. </div>
  503. {{else}}
  504. {{item.key}}
  505. {{/if}}
  506. </td>
  507. <td>
  508. {{if item.value_var}}
  509. {{item.value_var}}
  510. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  511. <div class="vars_title">
  512. 变量{{item.value}} 生成
  513. </div>
  514. {{else}}
  515. {{item.value == '' ? '-' : item.value }}
  516. {{/if}}
  517. </td>
  518. <!--
  519. <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  520. item.field_type}}
  521. </td>
  522. <td>{{item.not_null == "1" ? '是' : '否'}}</td>
  523. -->
  524. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  525. </tr>
  526. {{/if}}
  527. {{/each}}
  528. </table>
  529. </div>
  530. {{/if}}
  531. <h4 class="title" style="{{ request?.auth.type && request?.auth.type != 'noauth' ? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> 认证及说明</h4>
  532. {{if request?.auth.type && request?.auth.type != 'noauth'}}
  533. <div>
  534. {{if request?.auth?.type == 'kv'}}
  535. <table class="auth">
  536. <tr>
  537. <td>认证类型:私密键值对</td>
  538. <td> 键: {{request?.auth?.kv?.key}}</td>
  539. <td> 值:{{request?.auth?.kv?.value}}</td>
  540. </tr>
  541. </table>
  542. {{/if}}
  543. {{if request.auth.type == 'basic'}}
  544. <table class="auth">
  545. <tr>
  546. <td>认证类型:Basic auth认证</td>
  547. <td>用户名: {{request?.auth?.basic?.username}}</td>
  548. <td>密码: {{request?.auth?.basic?.password}}</td>
  549. </tr>
  550. </table>
  551. {{/if}}
  552. {{if request?.auth?.type == 'bearer'}}
  553. <table class="auth">
  554. <tr>
  555. <td>认证类型:Bearer auth认证</td>
  556. <td>Token:{{request?.auth?.bearer?.key}}</td>
  557. </tr>
  558. </table>
  559. {{/if}}
  560. </div>
  561. {{/if}}
  562. <h4 class="title" style="{{request.body.parameter.length > 0 || request.body.raw !='' ? 'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> body参数及说明</h4>
  563. {{if request.body.parameter.length>0 ||request.body.raw !='' }}
  564. {{if request.body.mode == 'form-data' || request.body.mode == 'multipart/form-data' ||
  565. request.body.mode =='application/x-www-form-urlencoded' || request.body.mode=="urlencoded"}}
  566. <div>
  567. <table>
  568. <tr>
  569. <th>参数名</th>
  570. <th>示例值</th>
  571. <th>参数类型</th>
  572. <th>是否必填</th>
  573. <th>参数描述</th>
  574. </tr>
  575. {{if request.body.parameter.length > 0}}
  576. {{each request.body.parameter item}}
  577. {{if item.key}}
  578. <tr>
  579. <td>
  580. {{if item.key_var}}
  581. {{item.key_var}}
  582. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  583. <div class="vars_title">
  584. 变量{{item.key}} 生成
  585. </div>
  586. {{else}}
  587. {{item.key}}
  588. {{/if}}
  589. </td>
  590. <td>
  591. {{if item.value_var}}
  592. {{item.value_var}}
  593. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  594. <div class="vars_title">
  595. 变量{{item.value}} 生成
  596. </div>
  597. {{else}}
  598. {{item.value == '' ? '-' : item.value }}
  599. {{/if}}
  600. </td>
  601. <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  602. item.field_type}}
  603. </td>
  604. <td>{{item.not_null == "1" ? '是' : '否'}}</td>
  605. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  606. </tr>
  607. {{/if}}
  608. {{/each}}
  609. {{else}}
  610. <tr>
  611. <td colspan="5" style="text-align:center">暂无数据</td>
  612. </tr>
  613. {{/if}}
  614. </table>
  615. </div>
  616. {{else}}
  617. <div class="editor-preview">
  618. <input type="hidden" id="request_body_raw_editor_input" value="{{request.body.raw}}">
  619. <pre id="request_body_raw_editor_json"><code class="hljs json">{{request.body.raw}}</code></pre>
  620. <!-- <pre><code class="hljs json">{{request.body.raw}}</code></pre> -->
  621. </div>
  622. {{if request.body.raw_para.length > 0}}
  623. <h4><a href="javascript:;" class="maodian"></a> 字段描述</h4>
  624. <table>
  625. <tr>
  626. <th>参数名</th>
  627. <th>示例值</th>
  628. <th>参数类型</th>
  629. <!-- <th>是否必填</th> -->
  630. <th>参数描述</th>
  631. </tr>
  632. {{each request.body.raw_para item}}
  633. {{if item.key}}
  634. <tr>
  635. <td>{{@keyFormat(item.key)}}</td>
  636. <td>{{item.value == '' ? '-' : item.value }}</td>
  637. <td>{{item.field_type}}</td>
  638. <!-- <td>{{item.not_null == "1" ? '是' : '否'}}</td> -->
  639. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  640. </tr>
  641. {{/if}}
  642. {{/each}}
  643. </table>
  644. {{/if}}
  645. {{/if}}
  646. <!-- {{if request.event.pre_script != ''}}-->
  647. <!-- <h4 class="title"><a href="javascript:;" class="maodian"></a> 预执行脚本</h4>-->
  648. <!-- <div class="editor-preview">-->
  649. <!-- <pre><code class="hljs">{{request.event.pre_script}}</code></pre>-->
  650. <!-- </div>-->
  651. <!-- {{/if}}-->
  652. <!-- {{if request.event.test != ''}}-->
  653. <!-- <h4 class="title"><a href="javascript:;" class="maodian"></a> 后执行脚本</h4>-->
  654. <!-- <div class="editor-preview">-->
  655. <!-- <pre><code class="hljs">{{request.event.test}}</code></pre>-->
  656. <!-- </div>-->
  657. <!-- {{/if}}-->
  658. {{/if}}
  659. </div>
  660. {{/if}}
  661. <!--respond-->
  662. <h3 class="title" style="{{response.success.raw || response.success.parameter.length > 0 || response.error.raw || response.error.parameter.length > 0 ? 'visibility: visible;':'visibility: hidden'}}"><a href="javascript:;" class="maodian">
  663. <img src="https://img.cdn.apipost.cn/v6/docs/img/globals.svg" alt="">
  664. </a> 响应示例<i class="fa fa-angle-down"></i></h3>
  665. {{if response.success.raw || response.success.parameter.length > 0 || response.error.raw || response.error.parameter.length > 0}}
  666. <div class="markdown-response">
  667. {{if response.success.raw || response.success.parameter.length > 0}}
  668. <h4 ><a href="javascript:;" class="maodian"></a> 成功响应示例</h4>
  669. <div class="editor-preview">
  670. <input type="hidden" id="response_success_editor_input" value="{{response.success.raw}}">
  671. <pre id="response_success_editor_json"><code class=" json">{{response.success.raw}}</code></pre>
  672. </div>
  673. {{if response.success.parameter.length > 0}}
  674. <h4><a href="javascript:;" class="maodian"></a> 字段描述</h4>
  675. <table class="response-parameter">
  676. <tr>
  677. <th>参数名</th>
  678. <th>示例值</th>
  679. <th>参数类型</th>
  680. <th>参数描述</th>
  681. </tr>
  682. {{each response.success.parameter item}}
  683. <tr>
  684. <td>{{@keyFormat(item.key)}}</td>
  685. <td>{{item.value == '' ? '-' : item.value }}</td>
  686. <td>{{item.field_type}}</td>
  687. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  688. </tr>
  689. {{/each}}
  690. </table>
  691. {{/if}}
  692. {{/if}}
  693. {{if response.error.raw || response.error.parameter.length > 0}}
  694. <h4 ><a href="javascript:;" class="maodian"></a> 失败响应示例</h4>
  695. <div class="editor-preview">
  696. <input type="hidden" id="response_error_editor_input" value="{{response.error.raw}}">
  697. <pre id="response_error_editor_json">
  698. <code class="hljs json">{{response.error.raw}}</code>
  699. </pre>
  700. </div>
  701. {{if response.error.parameter.length > 0}}
  702. <h4><a href="javascript:;" class="maodian"></a> 字段描述</h4>
  703. <table class="response-parameter">
  704. <tr>
  705. <th>参数名</th>
  706. <th>示例值</th>
  707. <th>参数类型</th>
  708. <th>参数描述</th>
  709. </tr>
  710. {{each response.error.parameter item}}
  711. <tr>
  712. <td>{{@keyFormat(item.key)}}</td>
  713. <td>{{item.value == '' ? '-' : item.value }}</td>
  714. <td>{{item.field_type}}</td>
  715. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  716. </tr>
  717. {{/each}}
  718. </table>
  719. {{/if}}
  720. {{/if}}
  721. </div>
  722. {{/if}}
  723. {{else if target_type == 'folder'}}
  724. <h3 class="title"><a href="javascript:;" class="maodian">
  725. <img src="https://img.cdn.apipost.cn/v6/docs/img/globals.svg" alt="">
  726. </a>公共参数<i class="fa fa-angle-down"></i></h3>
  727. <div class="markdown-request">
  728. <h4 class="title" style="{{ request.header.length > 0 ?'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> Header参数及说明</h4>
  729. {{if request.header.length > 0}}
  730. <div>
  731. <table class="header">
  732. <tr>
  733. <th>参数名</th>
  734. <th>示例值</th>
  735. <!-- <th>参数类型</th> -->
  736. <th>参数描述</th>
  737. </tr>
  738. {{each request.header item}}
  739. {{if item.key}}
  740. <tr>
  741. <td>
  742. {{if item.key_var}}
  743. {{item.key_var}}
  744. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  745. <div class="vars_title">
  746. 变量{{item.key}} 生成
  747. </div>
  748. {{else}}
  749. {{item.key}}
  750. {{/if}}
  751. </td>
  752. <td>
  753. {{if item.value_var}}
  754. {{item.value_var}}
  755. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  756. <div class="vars_title">
  757. 变量{{item.value}} 生成
  758. </div>
  759. {{else}}
  760. {{item.value == '' ? '-' : item.value}}
  761. {{/if}}
  762. </td>
  763. <!-- <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  764. item.field_type}}
  765. </td> -->
  766. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  767. </tr>
  768. {{/if}}
  769. {{/each}}
  770. </table>
  771. </div>
  772. {{/if}}
  773. <h4 class="title" style="{{ request.query.length > 0 ?'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> Query参数及说明</h4>
  774. {{if request.query.length > 0}}
  775. <div>
  776. <table class="query">
  777. <tr>
  778. <th>参数名</th>
  779. <th>示例值</th>
  780. <!-- <th>参数类型</th> -->
  781. <th>参数描述</th>
  782. </tr>
  783. {{each request.query item}}
  784. {{if item.key}}
  785. <tr>
  786. <td>
  787. {{if item.key_var}}
  788. {{item.key_var}}
  789. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  790. <div class="vars_title">
  791. 变量{{item.key}} 生成
  792. </div>
  793. {{else}}
  794. {{item.key}}
  795. {{/if}}
  796. </td>
  797. <td>
  798. {{if item.value_var}}
  799. {{item.value_var}}
  800. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  801. <div class="vars_title">
  802. 变量{{item.value}} 生成
  803. </div>
  804. {{else}}
  805. {{item.value == '' ? '-' : item.value}}
  806. {{/if}}
  807. </td>
  808. <!-- <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  809. item.field_type}}
  810. </td> -->
  811. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  812. </tr>
  813. {{/if}}
  814. {{/each}}
  815. </table>
  816. </div>
  817. {{/if}}
  818. <h4 class="title" style="{{ request.body.length > 0 ?'visibility:visible':'visibility:hidden;height:0;margin:0;'}}"><a href="javascript:;" class="maodian"></a> Body参数及说明</h4>
  819. {{if request.body.length > 0}}
  820. <div>
  821. <table class="body">
  822. <tr>
  823. <th>参数名</th>
  824. <th>示例值</th>
  825. <!-- <th>参数类型</th> -->
  826. <th>参数描述</th>
  827. </tr>
  828. {{each request.body item}}
  829. {{if item.key}}
  830. <tr>
  831. <td>
  832. {{if item.key_var}}
  833. {{item.key_var}}
  834. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  835. <div class="vars_title">
  836. 变量{{item.key}} 生成
  837. </div>
  838. {{else}}
  839. {{item.key}}
  840. {{/if}}
  841. </td>
  842. <td>
  843. {{if item.value_var}}
  844. {{item.value_var}}
  845. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  846. <div class="vars_title">
  847. 变量{{item.value}} 生成
  848. </div>
  849. {{else}}
  850. {{item.value == '' ? '-' : item.value}}
  851. {{/if}}
  852. </td>
  853. <!-- <td>{{item.field_type == "" || item.field_type == "[]"? (typeof item.value) :
  854. item.field_type}}
  855. </td> -->
  856. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  857. </tr>
  858. {{/if}}
  859. {{/each}}
  860. </table>
  861. </div>
  862. {{/if}}
  863. {{if request?.auth?.type != 'noauth' && request?.auth?.type}}
  864. <h4 class="title">认证及说明</h4>
  865. {{if request?.auth?.type == 'kv'}}
  866. <table class="auth">
  867. <tr>
  868. <td>认证类型:私密键值对</td>
  869. <td>键:{{request?.auth?.kv?.key}}</td>
  870. <td>值:{{request?.auth?.kv?.value}}</td>
  871. </tr>
  872. </table>
  873. {{/if}}
  874. {{if request.auth.type == 'basic'}}
  875. <table class="auth">
  876. <tr>
  877. <td>认证类型:Basic auth认证</td>
  878. <td>用户名:{{request?.auth?.basic?.username}}</td>
  879. <td>密码:{{request?.auth?.basic?.password}}</td>
  880. </tr>
  881. </table>
  882. {{/if}}
  883. {{if request?.auth?.type == 'bearer'}}
  884. <table class="auth">
  885. <tr>
  886. <td>认证类型:Bearer auth认证</td>
  887. <td>Token:{{request?.auth?.bearer?.key}}</td>
  888. </tr>
  889. </table>
  890. {{/if}}
  891. {{/if}}
  892. </div>
  893. <!--respond-->
  894. {{/if}}
  895. <div class="footer" style="text-align: center;margin: 35px 0;height: 50px">本文档由 <a href="https://www.apipost.cn/" target="_blank" style="color:#3a86ff">APIPOST接口调试与管理工具</a> 生成</div>
  896. </script>
  897. </div>
  898. </div>
  899. </div>
  900. <script type="text/html" id="golbal-env-tpl">
  901. <h2 class="top">
  902. <span>全局参数</span>
  903. <span class="metadata">
  904. 创建时间:{{@dateFormat(create_dtime * 1000,'yyyy-MM-dd hh:mm:ss')}}
  905. {{if expire_time != -1}}
  906. <span style="color: #f44336; margin-left: 15px; font-weight: bold;"> 过期时间: {{@dateFormat(expire_time * 1000,'yyyy-MM-dd hh:mm:ss')}}</span>
  907. {{/if}}
  908. </span>
  909. </h2>
  910. <div class="editor-preview desc">
  911. <!-- <p>本文档是郭小侠的私有项目的接口文档,以下为当前项目下的公共参数。</p> -->
  912. </div>
  913. <h3 class="title">
  914. <a href="javascript:;" class="maodian">
  915. <img src="https://img.cdn.apipost.cn/v6/docs/img/globals.svg" alt="">
  916. </a>
  917. 全局参数
  918. {{if vars?.request?.header?.length > 0 || vars?.request?.query?.length > 0 || vars?.request?.body?.length > 0 || vars?.auth?.type != 'noauth'}}
  919. <i class="fa fa-angle-down"></i>
  920. {{/if}}
  921. </h3>
  922. {{if vars?.request?.header?.length > 0 || vars?.request?.query?.length > 0 || vars?.request?.body?.length > 0 || vars?.auth?.type != 'noauth'}}
  923. <div>
  924. {{if vars.request.header.length > 0}}
  925. <h4>Header参数及说明</h4>
  926. <table>
  927. <tr>
  928. <th>参数名</th>
  929. <th>参数值</th>
  930. <th>参数描述</th>
  931. </tr>
  932. {{each vars.request.header item}}
  933. <tr>
  934. <td>
  935. {{if item.key_var}}
  936. {{item.key_var}}
  937. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  938. <div class="vars_title">
  939. 变量{{item.key}} 生成
  940. </div>
  941. {{else}}
  942. {{item.key}}
  943. {{/if}}
  944. </td>
  945. <td>
  946. {{if item.value_var}}
  947. {{item.value_var}}
  948. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  949. <div class="vars_title">
  950. 变量{{item.value}} 生成
  951. </div>
  952. {{else}}
  953. {{item.value == '' ? '-' : item.value }}
  954. {{/if}}
  955. </td>
  956. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  957. </tr>
  958. {{/each}}
  959. </table>
  960. {{/if}}
  961. {{if vars.request.query.length > 0}}
  962. <h4>Query参数及说明</h4>
  963. <table>
  964. <tr>
  965. <th>参数名</th>
  966. <th>参数值</th>
  967. <th>参数描述</th>
  968. </tr>
  969. {{each vars.request.query item}}
  970. <tr>
  971. <td>
  972. {{if item.key_var}}
  973. {{item.key_var}}
  974. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  975. <div class="vars_title">
  976. 变量{{item.key}} 生成
  977. </div>
  978. {{else}}
  979. {{item.key}}
  980. {{/if}}
  981. </td>
  982. <td>
  983. {{if item.value_var}}
  984. {{item.value_var}}
  985. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  986. <div class="vars_title">
  987. 变量{{item.value}} 生成
  988. </div>
  989. {{else}}
  990. {{item.value == '' ? '-' : item.value }}
  991. {{/if}}
  992. </td>
  993. <td>
  994. <pre>{{item.description == '' ? '-' : item.description }}</pre>
  995. </td>
  996. </tr>
  997. {{/each}}
  998. </table>
  999. {{/if}}
  1000. {{if vars?.request?.body?.length > 0}}
  1001. <h4>Body参数及说明</h4>
  1002. <table>
  1003. <tr>
  1004. <th>参数名</th>
  1005. <th>参数值</th>
  1006. <th>参数描述</th>
  1007. </tr>
  1008. {{each vars?.request?.body item}}
  1009. <tr>
  1010. <td>
  1011. {{if item.key_var}}
  1012. {{item.key_var}}
  1013. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  1014. <div class="vars_title">
  1015. 变量{{item.key}} 生成
  1016. </div>
  1017. {{else}}
  1018. {{item.key}}
  1019. {{/if}}
  1020. </td>
  1021. <td>
  1022. {{if item.value_var}}
  1023. {{item.value_var}}
  1024. <img src="https://img.cdn.apipost.cn/v6/docs/img/vars.svg" alt="">
  1025. <div class="vars_title">
  1026. 变量{{item.value}} 生成
  1027. </div>
  1028. {{else}}
  1029. {{item.value == '' ? '-' : item.value }}
  1030. {{/if}}
  1031. </td>
  1032. <td><pre>{{item.description == '' ? '-' : item.description }}</pre></td>
  1033. </tr>
  1034. {{/each}}
  1035. </table>
  1036. {{/if}}
  1037. {{if vars?.auth?.type != 'noauth'}}
  1038. <h4>认证及说明</h4>
  1039. {{if vars?.auth?.type == 'kv'}}
  1040. <table>
  1041. <tr>
  1042. <td>认证类型:私密键值对</td>
  1043. <td>键:{{vars?.auth?.kv?.key}}</td>
  1044. <td>值:{{vars?.auth?.kv?.value}}</td>
  1045. </tr>
  1046. </table>
  1047. {{/if}}
  1048. {{if vars.auth.type == 'basic'}}
  1049. <table>
  1050. <tr>
  1051. <td>认证类型:Basic auth认证</td>
  1052. <td>用户名:{{vars?.auth?.basic?.username}}</td>
  1053. <td>密码:{{vars?.auth?.basic?.password}}</td>
  1054. </tr>
  1055. </table>
  1056. {{/if}}
  1057. {{if vars?.auth?.type == 'bearer'}}
  1058. <table>
  1059. <tr>
  1060. <td>认证类型:Bearer auth认证</td>
  1061. <td>Token:{{vars?.auth?.bearer?.key}}</td>
  1062. </tr>
  1063. </table>
  1064. {{/if}}
  1065. {{/if}}
  1066. <!-- {{if vars.script.pre_script != ""}}-->
  1067. <!-- <h4 class="title"><a href="javascript:;" class="maodian"></a> 预执行脚本</h4>-->
  1068. <!-- <div class="editor-preview">-->
  1069. <!-- <pre><code class="hljs">{{vars.script.pre_script}}</code></pre>-->
  1070. <!-- </div>-->
  1071. <!-- {{/if}}-->
  1072. <!-- {{if vars.script.test != "" }}-->
  1073. <!-- <h4 class="title"><a href="javascript:;" class="maodian"></a> 后执行脚本</h4>-->
  1074. <!-- <div class="editor-preview">-->
  1075. <!-- <pre><code class="hljs">{{vars.script.test}}</code></pre>-->
  1076. <!-- </div>-->
  1077. <!-- {{/if}}-->
  1078. </div>
  1079. {{else}}
  1080. <div style="text-align: center;display: block"><img src="https://img.cdn.apipost.cn/v6/docs/img/emptyglobals.svg" style="width: 100px;margin:20px auto 20px;">暂无参数</div>
  1081. {{/if}}
  1082. <div class="footer" style="text-align: center;margin: 35px 24px;height: 50px;">本文档由 <a href="https://www.apipost.cn/" target="_blank" style="color:#3a86ff">APIPOST接口调试与管理工具</a> 生成</div>
  1083. </script>
  1084. <script type="text/html" id="doc-head-tpl">
  1085. <div class="export">
  1086. </div>
  1087. <div class="user_photo">
  1088. <img src="{{portrait}}"alt="">
  1089. </div>
  1090. </script>
  1091. <script type="text/html" id="project-name-tpl">
  1092. <img src="https://img.cdn.apipost.cn/v6/docs/img/project.svg" alt="">
  1093. {{project_name}}
  1094. </script>
  1095. <script>
  1096. template.defaults.imports.marked = function (md) {
  1097. marked.setOptions({
  1098. renderer: new marked.Renderer(),
  1099. highlight: function (code) {
  1100. return hljs.highlight('javascript', code).value;
  1101. },
  1102. breaks: true,
  1103. sanitize: true
  1104. });
  1105. return marked(md).replace(/<pre>/g, "<pre class='hljs javascript'>");
  1106. }
  1107. function dateFormat(date, format) {
  1108. date = new Date(date);
  1109. var map = {
  1110. "M": date.getMonth() + 1, //月份
  1111. "d": date.getDate(), //日
  1112. "h": date.getHours(), //小时
  1113. "m": date.getMinutes(), //分
  1114. "s": date.getSeconds(), //秒
  1115. "q": Math.floor((date.getMonth() + 3) / 3), //季度
  1116. "S": date.getMilliseconds() //毫秒
  1117. };
  1118. format = format.replace(/([yMdhmsqS])+/g, function (all, t) {
  1119. var v = map[t];
  1120. if (v !== undefined) {
  1121. if (all.length > 1) {
  1122. v = '0' + v;
  1123. v = v.substr(v.length - 2);
  1124. }
  1125. return v;
  1126. } else if (t === 'y') {
  1127. return (date.getFullYear() + '').substr(4 - all.length);
  1128. }
  1129. return all;
  1130. });
  1131. return format;
  1132. };
  1133. template.defaults.imports.dateFormat = dateFormat;
  1134. function dragControllerDiv(resize, left, mid, box) {
  1135. for (let i = 0; i < resize.length; i++) {
  1136. // 鼠标按下事件
  1137. resize[i].onmousedown = function (e) {
  1138. //颜色改变提醒
  1139. resize[i].style.borderColor = "#9d9d9d";
  1140. var startX = e.clientX;
  1141. resize[i].left = resize[i].offsetLeft;
  1142. // 鼠标拖动事件
  1143. document.onmousemove = function (e) {
  1144. var endX = e.clientX;
  1145. var moveLen = resize[i].left + (endX - startX); // (endx-startx)=移动的距离。resize[i].left+移动的距离=左边区域最后的宽度
  1146. var maxT = box[i].clientWidth - resize[i].offsetWidth; // 容器宽度 - 左边区域的宽度 = 右边区域的宽度
  1147. if (moveLen < 300) moveLen = 300; // 左边区域的最小宽度为32px
  1148. if (moveLen > maxT - 150) moveLen = maxT - 150; //右边区域最小宽度为150px
  1149. resize[i].style.left = moveLen; // 设置左侧区域的宽度
  1150. $('.target.title').css({ maxWidth: moveLen + 'px' })
  1151. for (let j = 0; j < left.length; j++) {
  1152. left[j].style.width = moveLen + "px";
  1153. mid[j].style.width = box[i].clientWidth - moveLen - 10 + "px";
  1154. }
  1155. };
  1156. // 鼠标松开事件
  1157. document.onmouseup = function (evt) {
  1158. //颜色恢复
  1159. resize[i].style.borderColor = "#d6d6d6";
  1160. document.onmousemove = null;
  1161. document.onmouseup = null;
  1162. resize[i].releaseCapture && resize[i].releaseCapture(); //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
  1163. };
  1164. resize[i].setCapture && resize[i].setCapture(); //该函数在属于当前线程的指定窗口里设置鼠标捕获
  1165. return false;
  1166. };
  1167. }
  1168. }
  1169. function keyFormat(params) {
  1170. let arr = params.split('.');
  1171. let str = ''
  1172. for (let i = 0; i < arr.length - 1; i++) {
  1173. str += `<span style="color:#999">${arr[i]}.</span>`
  1174. }
  1175. str += arr[arr.length - 1];
  1176. return str;
  1177. }
  1178. template.defaults.imports.keyFormat = keyFormat;
  1179. let timer = null
  1180. let arr = {"id":586352,"project_id":2354823,"name":"learn-ajax","url":"3e701d96de464b32","salt":"6578cf5b7f0e2994","password":"","env_id":"-1","create_time":1660181867,"target_id":28049348,"target_type":"folder","expire_days":-1,"expire_time":-1,"project_name":"郭小侠的私有项目","portrait":"https:\/\/img.cdn.apipost.cn\/user\/default_profile_photo\/Vector-4.png","nick_name":"郭小侠","publisher":"郭小侠","pub_name":"learn-ajax","project":{"vars":{"request":{"header":[{"is_checked":"1","type":"Text","key":"","value":"","description":""}],"query":[{"is_checked":"1","type":"Text","key":"","value":"","description":""}],"cookie":[],"body":[{"is_checked":"1","type":"Text","key":"","value":"","description":""}]},"script":{"pre_script":"","test":""},"variable":[],"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"methods":["POST","GET","PUT","PATCH","DELETE","COPY","HEAD","OPTIONS","LINK","UNLINK","PURGE","LOCK","UNLOCK","PROPFIND","VIEW"],"mark":[{"key":"developing","name":"开发中","color":"#3A86FF"},{"key":"complated","name":"已完成","color":"#2BA58F"},{"key":"modifying","name":"需修改","color":"#EC4646"}]}},"children":[{"local_target_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","local_parent_id":"0","name":"learn-ajax","method":"POST","mark":"developing","is_doc":0,"target_type":"folder","status":1,"sort":0,"create_dtime":1651485740,"update_dtime":1651488119,"target_id":28049348,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"description":"搭建学习ajax的服务端APIs接口服务","header":[],"query":[],"body":[],"auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}}},"script":{"pre_script":"","test":""},"children":[{"local_target_id":"93879563-5f2e-4796-bfd6-0a0966ba9f60","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"用户登录","method":"POST","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":0,"create_dtime":1651485740,"update_dtime":1651548160,"target_id":28049349,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/login","description":"登录接口","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"urlencoded","parameter":[{"is_checked":1,"type":"Text","key":"name","value":"admin","not_null":1,"description":"用户名","field_type":"Text","__DATAKEY__":"85535971-47cd-4443-886c-b13df4874fc4","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"password","value":"123123","not_null":1,"description":"密码","field_type":"Text","__DATAKEY__":"db1df934-f533-4632-a11b-58603c6044f2","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/login"},"response":{"success":{"raw":"{\n\t\"code\": 200,\n\t\"msg\": \"登录成功\",\n\t\"data\": {\n\t\t\"name\": \"admin\",\n\t\t\"password\": \"123123\",\n\t\t\"sex\": \"0\",\n\t\t\"age\": \"18\",\n\t\t\"id\": \"1651481065895\",\n\t\t\"avatar\": \"https:\/\/picsum.photos\/100\"\n\t}\n}","parameter":[{"is_checked":1,"type":"text","key":"code","value":"200","description":"状态码","field_type":"String","static":false,"__DATAKEY__":"bab40dee-0968-4e1c-ab66-8803f16773eb"},{"is_checked":1,"type":"text","key":"msg","value":"成功","description":"返回文字描述","field_type":"String","static":false,"__DATAKEY__":"6a7353a7-4790-44a3-b64d-515891586a88"},{"is_checked":1,"type":"text","key":"data","value":"{}","description":"返回数据","field_type":"Object","static":false,"__DATAKEY__":"e9a561fe-a720-41f4-9501-092cd9daef90"},{"is_checked":-1,"type":"text","key":"","value":"","description":"","field_type":"Text","static":true,"__DATAKEY__":"ef31fc3d-c192-43f2-b726-5bf09b4e6726"}]},"error":{"raw":"{\n\t\"code\": 400,\n\t\"msg\": \"用户名或密码错误\"\n}","parameter":[{"is_checked":1,"type":"text","key":"code","value":"400","description":"状态码","field_type":"Text","static":false,"__DATAKEY__":"30edaab7-b91b-4c61-aeeb-07add5a713f5"},{"is_checked":1,"type":"text","key":"msg","value":"失败","description":"返回文字描述","field_type":"Text","static":false,"__DATAKEY__":"6c0fd878-920c-4d16-ba8d-485ea7b44c4b"},{"is_checked":-1,"type":"text","key":"","value":"","description":"","field_type":"Text","static":true,"__DATAKEY__":"5beca982-1bf5-4243-aa65-afa537334630"}]}}},{"local_target_id":"d00d9c3e-67fb-4943-a436-4f5a7bd372d7","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"用户注册","method":"POST","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":1,"create_dtime":1651486510,"update_dtime":1651548175,"target_id":28049505,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/register","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"urlencoded","parameter":[{"is_checked":1,"type":"Text","key":"name","value":"daxia","not_null":1,"description":"用户名","field_type":"Text","__DATAKEY__":"fa4f7651-f98b-4c11-b5dc-d419b401b6ce","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"password","value":"123456","not_null":1,"description":"密码","field_type":"Text","__DATAKEY__":"77aae67a-a684-4913-acd9-965b82270719","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"sex","value":"1","not_null":1,"description":"性别","field_type":"Text","__DATAKEY__":"b10925d1-235e-4c2c-9ab6-9c74f94deaaf","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"age","value":"20","not_null":1,"description":"年龄","field_type":"Text","__DATAKEY__":"46dba6d2-d4ce-4b51-8148-9afa105356b7","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/register"},"response":{"success":{"raw":"{ \n \"code\": 200, \n \"msg\": \"注册成功\"\n}","parameter":[]},"error":{"raw":"{\n \"code\": 400,\n \"msg\": \"注册失败,请检查网络\"\n}","parameter":[]}}},{"local_target_id":"ce44c449-58f0-4852-a869-5152de0de9db","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"新增用户","method":"POST","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":2,"create_dtime":1651488084,"update_dtime":1651548173,"target_id":28049852,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users\/insert","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"urlencoded","parameter":[{"is_checked":1,"type":"Text","key":"name","value":"ronger","not_null":1,"description":"用户名","field_type":"Text","__DATAKEY__":"cc39d04b-51b0-4612-beb2-3f261835c274","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"password","value":"123123","not_null":1,"description":"密码","field_type":"Text","__DATAKEY__":"ed27c650-ed9a-466e-915f-931d5426858f","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"sex","value":"0","not_null":1,"description":"性别","field_type":"Text","__DATAKEY__":"826b6c3a-1195-4d6d-bf2e-2c497acd2ffe","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"age","value":"18","not_null":1,"description":"年龄","field_type":"Text","__DATAKEY__":"f17f8b19-ec69-46b0-b768-fa3e90ec4278","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users\/insert"},"response":{"success":{"raw":"{\n \"code\": 200,\n \"msg\": \"操作成功\"\n}","parameter":[]},"error":{"raw":"{\n \"code\": 400,\n \"msg\": \"操作失败,请稍后重试\"\n}","parameter":[]}}},{"local_target_id":"baec96ac-470b-45ee-a4f4-7967c2ed7289","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"查询所有用户","method":"GET","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":3,"create_dtime":1651486668,"update_dtime":1651548169,"target_id":28049543,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"none","parameter":[],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users"},"response":{"success":{"raw":"{\n\t\"code\": 200,\n\t\"msg\": \"查询成功\",\n\t\"data\": [\n\t\t{\n\t\t\t\"name\": \"admin\",\n\t\t\t\"password\": \"123123\",\n\t\t\t\"sex\": \"0\",\n\t\t\t\"age\": \"18\",\n\t\t\t\"id\": \"1651481065895\",\n\t\t\t\"avatar\": \"https:\/\/picsum.photos\/100\"\n\t\t}\n\t]\n}","parameter":[]},"error":{"raw":"{\n\t\"code\": 400,\n\t\"msg\": \"查询失败\",\n}","parameter":[]}}},{"local_target_id":"40ea0528-116d-4ced-9a4e-a01a6d6daadb","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"分页获取用户","method":"GET","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":4,"create_dtime":1651487780,"update_dtime":1651540069,"target_id":28049805,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users\/page?page=1&pageSize=5","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"none","parameter":[{"is_checked":"0","type":"Text","key":"page","value":"1","not_null":1,"description":"当前页,分页页码,数字类型","field_type":"Text","__DATAKEY__":"049ce5e6-f722-4a3a-b1dc-d3f43e349602","key_var":"","value_var":""},{"is_checked":"0","type":"Text","key":"pageSize","value":"5","not_null":1,"description":"每页条数","field_type":"Text","__DATAKEY__":"237e3d6d-c7ae-464d-8919-035e2e7b9d20","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[{"is_checked":1,"type":"Text","key":"page","value":"1","not_null":1,"description":"分页页码,数字类型","field_type":"Text","__DATAKEY__":"73fd39d5-f1a4-45fd-963f-5e68c186c3b5","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"pageSize","value":"5","not_null":1,"description":"每页条数","field_type":"Text","__DATAKEY__":"072db67b-06fe-4dbc-9d7a-015a0d321090","key_var":"","value_var":""}]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users\/page?page=1&pageSize=5"},"response":{"success":{"raw":"{\n\t\"code\": 200,\n\t\"msg\": \"操作成功\",\n\t\"data\": {\n\t\t\"list\": [\n\t\t\t{\n\t\t\t\t\"name\": \"admin\",\n\t\t\t\t\"password\": \"123123\",\n\t\t\t\t\"sex\": \"0\",\n\t\t\t\t\"age\": \"18\",\n\t\t\t\t\"id\": \"1651481065895\",\n\t\t\t\t\"avatar\": \"https:\/\/picsum.photos\/100\"\n\t\t\t}\n\t\t],\n\t\t\"page\": {\n\t\t\t\"page\": 1,\n\t\t\t\"pageSize\": 5,\n\t\t\t\"pages\": 1,\n\t\t\t\"total\": 1\n\t\t}\n\t}\n}","parameter":[]},"error":{"raw":"{\n \"code\": 400,\n \"msg\": \"网络异常\"\n}","parameter":[]}}},{"local_target_id":"9a8e19ca-3821-4d92-8a28-7cce35d550ee","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"根据id删除用户","method":"DELETE","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":5,"create_dtime":1651486818,"update_dtime":1651548167,"target_id":28049573,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users\/delete","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"urlencoded","parameter":[{"is_checked":1,"type":"Text","key":"id","value":"1","not_null":1,"description":"用户id","field_type":"Text","__DATAKEY__":"caec8f13-4076-45d2-a9c3-0ffad6d0d795","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users\/delete"},"response":{"success":{"raw":"{\n\t\"code\": 200,\n\t\"msg\": \"删除成功\"\n}","parameter":[]},"error":{"raw":"{\n\t\"code\": 400,\n\t\"msg\": \"删除失败\"\n}","parameter":[]}}},{"local_target_id":"14d829b9-c373-4a9b-8440-10bf6669b061","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"根据id获取用户信息","method":"GET","mark":"developing","is_doc":0,"target_type":"api","status":1,"sort":6,"create_dtime":1651487143,"update_dtime":1651548163,"target_id":28049691,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users\/id?id=1651481065895","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"none","parameter":[],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[{"is_checked":1,"type":"Text","key":"id","value":"1651481065895","not_null":1,"description":"用户id","field_type":"Text","__DATAKEY__":"2b163d58-4947-4b66-992d-b2a7eb765c36","key_var":"","value_var":""}]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users\/id?id=1651481065895"},"response":{"success":{"raw":"{\n\t\"code\": 200,\n\t\"msg\": \"成功\",\n\t\"data\": {\n\t\t\"name\": \"admin\",\n\t\t\"password\": \"123123\",\n\t\t\"sex\": \"0\",\n\t\t\"age\": \"18\",\n\t\t\"id\": \"1651481065895\",\n\t\t\"avatar\": \"https:\/\/picsum.photos\/100\"\n\t}\n}","parameter":[]},"error":{"raw":"{\n \"code\": 400,\n \"msg\": \"用户不存在\"\n}","parameter":[]}}},{"local_target_id":"0c5b86ee-7881-475f-af65-a567931675a5","local_parent_id":"9cc518e2-c931-46f4-a938-9516f2a38ae2","name":"修改用户","method":"POST","mark":"complated","is_doc":0,"target_type":"api","status":1,"sort":7,"create_dtime":1651487399,"update_dtime":1651540126,"target_id":28049730,"create_users":{"create_user":"郭小侠","update_user":"郭小侠"},"request":{"url":"http:\/\/localhost:3000\/users\/update","description":"","auth":{"type":"noauth","kv":{"key":"","value":""},"bearer":{"key":""},"basic":{"username":"","password":""}},"body":{"mode":"urlencoded","parameter":[{"is_checked":1,"type":"Text","key":"name","value":"admin","not_null":1,"description":"用户名","field_type":"Text","__DATAKEY__":"38e8c221-f4cc-4b9f-8c24-7a5c233da91a","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"password","value":"123456","not_null":1,"description":"密码","field_type":"Text","__DATAKEY__":"f17f5a24-964b-4620-a551-183a3f847f65","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"sex","value":"1","not_null":1,"description":"性别","field_type":"Text","__DATAKEY__":"0562193e-1249-44b7-828e-63c040851ec2","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"age","value":"20","not_null":1,"description":"年龄","field_type":"Text","__DATAKEY__":"834f218d-ecdf-4254-a7b9-1cb5bc2f16c7","key_var":"","value_var":""},{"is_checked":1,"type":"Text","key":"id","value":"1651481065895","not_null":1,"description":"用户id","field_type":"Text","__DATAKEY__":"11590a65-a02e-4b46-a26e-2d6653c1681e","key_var":"","value_var":""}],"raw":"","raw_para":[]},"event":{"pre_script":"","test":""},"header":{"parameter":[]},"query":{"parameter":[]},"cookie":{"parameter":[]},"resful":{"parameter":[]},"url_var":"http:\/\/localhost:3000\/users\/update"},"response":{"success":{"raw":"{\n \"code\": 200,\n \"msg\": \"修改成功\"\n}","parameter":[]},"error":{"raw":"{\n \"code\": 200,\n \"msg\": \"修改失败,请检查网络\"\n}","parameter":[]}}}]}]};
  1181. function GetUrlQuery(uri) {
  1182. let url = '';
  1183. if (typeof uri === 'undefined') {
  1184. url = window.location.search;
  1185. } else {
  1186. url = `?${uri.split('?')[1]}`;
  1187. }
  1188. const theRequest = {};
  1189. if (url.indexOf('?') !== -1) {
  1190. const str = url.substr(1);
  1191. const strs = str.split('&');
  1192. for (let i = 0; i < strs.length; i++) {
  1193. theRequest[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1]);
  1194. }
  1195. }
  1196. return theRequest;
  1197. };
  1198. function findFatherDom(el) {
  1199. if (el.parent().parent().children(":first").hasClass('folder')) {
  1200. el.parent().parent().show()
  1201. console.log(el.parent().parent());
  1202. el.parent().parent().children().show()
  1203. el.parent().parent().children(":first").find('.folder_select').removeClass('right').addClass('down')
  1204. el.parent().parent().children(":first").nextAll('.folder').find('folder_select').removeClass('down').addClass('right')
  1205. findFatherDom(el.parent().prev())
  1206. } else {
  1207. el.parent().children().show()
  1208. return
  1209. }
  1210. }
  1211. window.onload = function () {
  1212. // const { url, salt } = GetUrlQuery();
  1213. const head_obj = {
  1214. portrait: arr.portrait,
  1215. }
  1216. let head_html = template('doc-head-tpl', head_obj);
  1217. $('.doc-head .container').html(head_html)
  1218. let _html = template('template-target-sidebar-list-tpl', {
  1219. list: arr.children
  1220. });
  1221. $('.new').html(_html)
  1222. let project_name_html = template('project-name-tpl', {
  1223. project_name: arr.project_name
  1224. });
  1225. $('.box-first .title').html(project_name_html)
  1226. $('.target.folder').find('.folder_select').removeClass('down').addClass('right')
  1227. $('.target.folder').nextAll().hide()
  1228. let urlLink = window.location.href;
  1229. let id = urlLink.split('#')[1] ? urlLink.split('#')[1] : '001'
  1230. if ($(`.target[data-target_id="${id}"]`).length > 0) {
  1231. if (id != '001') {
  1232. findFatherDom($(`.target[data-target_id="${id}"]`))
  1233. }
  1234. $(`.target[data-target_id="${id}"]`).trigger('click')
  1235. } else {
  1236. location.href = urlLink.split('#')[0] + "#001"
  1237. return
  1238. }
  1239. var resize = document.getElementsByClassName("bar");
  1240. var left = document.getElementsByClassName("box-first");
  1241. var mid = document.getElementsByClassName("box-third");
  1242. var box = document.getElementsByClassName("box");
  1243. console.log(123434);
  1244. dragControllerDiv(resize, left, mid, box);
  1245. $('.target.folder').find('.folder_select').removeClass('down').addClass('right')
  1246. $('.target.folder').nextAll().hide()
  1247. }
  1248. $('.body').show()
  1249. $(document).on('click', '.target', function () {
  1250. let _local_target_id = $(this).attr('data-target_id');
  1251. let urlLink = window.location.href.split('#')[0] + '#' + _local_target_id;
  1252. const { url, salt } = GetUrlQuery();
  1253. const token = localStorage.getItem(`token${url}`);
  1254. history.replaceState(null, null, urlLink)
  1255. console.log(url);
  1256. $('.target').each((i, el) => {
  1257. $(el).removeClass('active')
  1258. })
  1259. if ($(this).attr('data-type') == 'folder') {
  1260. $('.box-nav').show()
  1261. $(this).nextAll().show()
  1262. $(this).find('.folder_select').removeClass('right').addClass('down')
  1263. $('.box-nav .folder').show()
  1264. $('.box-nav .api').hide()
  1265. } else if ($(this).attr('data-type') == 'example' || $(this).attr('data-type') == 'api') {
  1266. $('.box-nav').show()
  1267. $('.box-nav .api').show()
  1268. $('.box-nav .folder').hide()
  1269. } else {
  1270. $('.box-nav').hide()
  1271. }
  1272. $(this).addClass('active')
  1273. // if (_local_target_id == 001 || !_local_target_id) {
  1274. // return;
  1275. // }
  1276. let newdata = JSON.parse(JSON.stringify(arr))
  1277. let LevelArr = []
  1278. function levelTree(arr1, newarr) {
  1279. arr1.forEach(item => {
  1280. if (item.children && item.children.length > 0) {
  1281. newarr.push(item)
  1282. levelTree(item.children, newarr)
  1283. } else {
  1284. newarr.push(item)
  1285. }
  1286. })
  1287. }
  1288. levelTree(newdata.children, LevelArr)
  1289. LevelArr.forEach(item => {
  1290. if (item.local_target_id == _local_target_id) {
  1291. if (item.target_type == 'example' || item.target_type == 'api') {
  1292. switch (item.request.body.mode) {
  1293. case "none":
  1294. break;
  1295. case "form-data":
  1296. item.request.body.mode = "multipart/form-data";
  1297. break;
  1298. case "urlencoded":
  1299. item.request.body.mode = "application/x-www-form-urlencoded";
  1300. break;
  1301. case "json":
  1302. item.request.body.mode = "application/json";
  1303. break;
  1304. case "xml":
  1305. item.request.body.mode = "application/xml";
  1306. break;
  1307. case "javascript":
  1308. item.request.body.mode = "application/javascript";
  1309. break;
  1310. case "plain":
  1311. item.request.body.mode = "text/plain";
  1312. break;
  1313. case "html":
  1314. item.request.body.mode = "text/html";
  1315. break;
  1316. }
  1317. $('.template-nav-menu').html(template('template-nav-menu-tpl', item));
  1318. if (item.target_type != 'folder') {
  1319. let _export_data = new ClipboardJS('.CopyCurrentData', {
  1320. text: function (trigger) {
  1321. return trigger.getAttribute('data-clipboard-text');
  1322. }
  1323. });
  1324. console.log(_export_data);
  1325. _export_data.on('success', function (e) {
  1326. $('.CopyCurrentData').text('已复制').addClass('success');
  1327. e.clearSelection();
  1328. });
  1329. _export_data.on('error', function (e) {
  1330. console.log('失败');
  1331. });
  1332. }
  1333. }
  1334. arr?.project?.vars?.mark.forEach((it) => {
  1335. if (it.key == item.mark) {
  1336. if (it.color == '') {
  1337. if (item.mark == 'developing') {
  1338. item.markName = '开发中'
  1339. item.markColor = 'rgb(58, 134, 255)'
  1340. }
  1341. if (item.mark == 'complated') {
  1342. item.markName = '已完成'
  1343. item.markColor = 'rgb(46, 196, 182)'
  1344. }
  1345. if (item.mark == 'modifying') {
  1346. item.markName = '需修改'
  1347. item.markColor = 'rgb(236, 70, 70)'
  1348. }
  1349. } else {
  1350. item.markName = it.name
  1351. item.markColor = it.color
  1352. }
  1353. }
  1354. })
  1355. let _html = template('template-example-doc-tpl', item);
  1356. $('.preview-markdown').html(_html)
  1357. if (item.target_type == 'folder') {
  1358. const folderData = { ...item }
  1359. if (item.target_type == 'folder') {
  1360. folderData?.request?.header?.forEach((it, index) => !it.key && folderData.request?.header.splice(index, 1))
  1361. folderData?.request?.query?.forEach((it, index) => !it.key && folderData.request?.query.splice(index, 1))
  1362. folderData?.request?.body?.forEach((it, index) => !it.key && folderData.request?.body.splice(index, 1))
  1363. }
  1364. let _html = template('template-example-doc-tpl', folderData);
  1365. if ($('table.header tr').length <= 1) {
  1366. $('table.header').parent().hide()
  1367. $('table.header').parent().prev().hide()
  1368. $('.nav-folder-btn[data-id="1"]').hide()
  1369. // $('table.header tr').after('<tr><td colspan="4" style="text-align:center">暂无数据</td></tr>')
  1370. }
  1371. if ($('table.query tr').length <= 1) {
  1372. $('table.query').parent().hide()
  1373. $('table.query').parent().prev().hide()
  1374. $('.nav-folder-btn[data-id="2"]').hide()
  1375. // $('table.query tr').after('<tr><td colspan="4" style="text-align:center">暂无数据</td></tr>')
  1376. }
  1377. if ($('table.body tr').length <= 1) {
  1378. $('table.body').parent().hide()
  1379. $('table.body').parent().prev().hide()
  1380. $('.nav-folder-btn[data-id="3"]').hide()
  1381. // $('table.body tr').after('<tr><td colspan="4" style="text-align:center">暂无数据</td></tr>')
  1382. }
  1383. if ($('table.header tr').length <= 1 && $('table.query tr').length <= 1 && $('table.body tr').length <= 1) {
  1384. $('table.header').parents('.markdown-request').prev().hide()
  1385. $('.box-nav .nav-folder-btn[data-id="0"]').hide()
  1386. $('.preview-markdown .markdown-request').after('<div style="overflow: hidden;text-align: center;height: 100%;"><img src="https://img.cdn.apipost.cn/v6/docs/img/empty.svg" style="width:100px;margin: 70px auto 20px;;">暂无参数</div>')
  1387. }
  1388. hljs.initHighlighting();
  1389. } else {
  1390. let _export_data = new ClipboardJS('.CopyCurrentData', {
  1391. text: function (trigger) {
  1392. return trigger.getAttribute('data-clipboard-text');
  1393. }
  1394. });
  1395. console.log(_export_data);
  1396. _export_data.on('success', function (e) {
  1397. $('.CopyCurrentData').text('已复制').addClass('success');
  1398. e.clearSelection();
  1399. });
  1400. _export_data.on('error', function (e) {
  1401. console.log('失败');
  1402. });
  1403. $('.CopyCurrentData').attr('data-clipboard-text', JSON.stringify(item));
  1404. }
  1405. try {
  1406. let obj = item.request.body.raw_para.map(item => {
  1407. let arr = item.key.split('.')
  1408. item.newKey = arr[arr.length - 1]
  1409. return item
  1410. })
  1411. let editor = new JsonEditor('#request_body_raw_editor_json', JSON5.parse($('#request_body_raw_editor_input').val()), {}, obj).load(JSON5.parse($('#request_body_raw_editor_input').val()), obj)
  1412. } catch (e) {
  1413. console.log(e);
  1414. }
  1415. // 成功响应示例
  1416. try {
  1417. let obj = item.response.success.parameter.map(item => {
  1418. let arr = item.key.split('.')
  1419. item.newKey = arr[arr.length - 1]
  1420. return item
  1421. })
  1422. let editor = new JsonEditor('#response_success_editor_json', JSON5.parse($('#response_success_editor_input').val()), {}, obj).load(JSON5.parse($('#response_success_editor_input').val()), obj)
  1423. } catch (e) { console.log(e); }
  1424. // 失败响应示例
  1425. try {
  1426. let obj = item.response.error.parameter.map(item => {
  1427. let arr = item.key.split('.')
  1428. item.newKey = arr[arr.length - 1]
  1429. return item
  1430. })
  1431. let editor = new JsonEditor('#response_error_editor_json', JSON5.parse($('#response_error_editor_input').val()), {}, obj).load(JSON5.parse($('#response_error_editor_input').val()), obj)
  1432. } catch (e) { console.log(e); }
  1433. aptIndent.init();
  1434. }
  1435. })
  1436. $("table").colResizable({
  1437. liveDrag: true,
  1438. gripInnerHtml: "<div class='grip'></div>",
  1439. draggingClass: "dragging",
  1440. resizeMode: 'fit'
  1441. });
  1442. })
  1443. .on('click', '.control', function (e) {
  1444. e.stopPropagation()
  1445. let type = $(this).find('.folder_select').hasClass('down')
  1446. if (type) {
  1447. $(this).find('.folder_select').removeClass('down').addClass('right')
  1448. } else {
  1449. $(this).find('.folder_select').removeClass('right').addClass('down')
  1450. }
  1451. $(this).parents('.target').nextAll().toggle()
  1452. })
  1453. .on('input', '.search', function (e) {
  1454. if (timer) {
  1455. clearTimeout(timer);
  1456. }
  1457. timer = setTimeout(() => {
  1458. let searchVal = $(this).val().toLocaleLowerCase()
  1459. let TreeData = JSON.parse(JSON.stringify(arr.children))
  1460. let searchArr = []
  1461. let LevelArr = []
  1462. let fatherArr = []
  1463. function openTree(tree, parent_id) {
  1464. tree.forEach((item) => {
  1465. if (item.children && item.children.length > 0) {
  1466. openTree(item.children, item.local_target_id)
  1467. }
  1468. item.parent_id = parent_id
  1469. })
  1470. }
  1471. openTree(TreeData, 0);
  1472. function levelTree(arr, newarr) {
  1473. arr.forEach(item => {
  1474. if (item.children && item.children.length > 0) {
  1475. newarr.push(item)
  1476. levelTree(item.children, newarr)
  1477. } else {
  1478. newarr.push(item)
  1479. }
  1480. })
  1481. }
  1482. levelTree(TreeData, LevelArr)
  1483. if ($.trim(searchVal) != '') {
  1484. LevelArr.forEach(item => {
  1485. if (item.target_type == 'folder') {
  1486. if (item.name.toString().toLocaleLowerCase().indexOf(searchVal) > -1) {
  1487. searchArr.push(item)
  1488. }
  1489. } else {
  1490. if (item.name.toString().toLocaleLowerCase().indexOf(searchVal) > -1 || item.method.toString().toLocaleLowerCase().indexOf(searchVal) > -1) {
  1491. searchArr.push(item)
  1492. }
  1493. }
  1494. })
  1495. searchArr.forEach(item => {
  1496. findFather(fatherArr, LevelArr, item)
  1497. })
  1498. function findFather(tempArr, arr, self) {
  1499. if (self.parent_id != 0) {
  1500. arr.filter(item => {
  1501. if (self.parent_id == item.local_target_id) {
  1502. findFather(tempArr, arr, item);
  1503. if (tempArr.indexOf(item) === -1) {
  1504. tempArr.push(item);
  1505. }
  1506. }
  1507. })
  1508. }
  1509. }
  1510. let finnalArr = searchArr.concat(fatherArr)
  1511. $('.target').hide()
  1512. $('.target[data-target_id="001"]').show()
  1513. finnalArr.forEach(item => {
  1514. $(`.target[data-target_id="${item.local_target_id}"]`).parent().show()
  1515. $(`.target[data-target_id="${item.local_target_id}"]`).show()
  1516. $('.target.folder').find('.folder_select').removeClass('right').addClass('down')
  1517. })
  1518. } else {
  1519. $('.target').parent().show()
  1520. $('.target').show()
  1521. }
  1522. }, 100)
  1523. })
  1524. .on('mouseover', '.target.api', function () {
  1525. // $(this).find('em').css({ visibility: 'visible' })
  1526. })
  1527. .on('mouseleave', '.target.api', function () {
  1528. // $(this).find('em').css({ visibility: 'hidden' })
  1529. })
  1530. .on('click', '.nav-btn', function () {
  1531. let index = parseInt($(this).attr('data-id'))
  1532. $('.nav-btn').removeClass('cur')
  1533. $(this).addClass('cur')
  1534. console.log(index, $('.box-third .title').eq(index)[0]);
  1535. let top = $('.box-third .title').eq(index)[0].offsetTop
  1536. $('.box-third').scrollTop(top)
  1537. })
  1538. .on('click', '.nav-folder-btn', function () {
  1539. let index = parseInt($(this).attr('data-id'))
  1540. $('.nav-folder-btn').removeClass('cur')
  1541. $(this).addClass('cur')
  1542. let top = $('.box-third .title').eq(index)[0].offsetTop
  1543. $('.box-third').scrollTop(top)
  1544. })
  1545. .on('click', '.box-first .top', function () {
  1546. $('.target').removeClass('active')
  1547. $(this).addClass('active')
  1548. const obj = { ...arr?.project }
  1549. obj.create_dtime = arr?.create_time
  1550. obj.expire_time = arr?.expire_time
  1551. obj?.vars?.request?.header?.forEach((it, index) => {
  1552. if (!it.key) {
  1553. obj?.vars?.request?.header?.splice(index, 1)
  1554. }
  1555. })
  1556. obj?.vars?.request?.query?.forEach((it, index) => {
  1557. if (!it.key) {
  1558. obj?.vars?.request?.query?.splice(index, 1)
  1559. }
  1560. })
  1561. obj?.vars?.request?.body?.forEach((it, index) => {
  1562. if (!it.key) {
  1563. obj?.vars?.request?.body?.splice(index, 1)
  1564. }
  1565. })
  1566. let _html = template('golbal-env-tpl', obj);
  1567. $('.preview-markdown').html(_html)
  1568. })
  1569. .on('click', 'h3.title', function () {
  1570. let type = $(this).find('i').hasClass('fa-angle-down')
  1571. if (type) {
  1572. $(this).find('i').removeClass('fa-angle-down').addClass('fa-angle-left')
  1573. } else {
  1574. $(this).find('i').removeClass('fa-angle-left').addClass('fa-angle-down')
  1575. }
  1576. $(this).next().toggle()
  1577. })
  1578. .on('mouseover', '.export', function () {
  1579. $(this).find('.export_panel').show()
  1580. })
  1581. .on('mouseleave', '.export', function () {
  1582. $(this).find('.export_panel').hide()
  1583. })
  1584. $(".box-third").scroll(function () {
  1585. let arr = []
  1586. $('.box-third .title').each((i, el) => {
  1587. arr.push($(el)[0].offsetTop)
  1588. })
  1589. arr.push(arr[arr.length - 1] + 10000)
  1590. let topHeight = $(this).scrollTop();
  1591. if ($('.target.active').hasClass('api')) {
  1592. for (let index = 0; index < arr.length; index++) {
  1593. if (arr[index] < topHeight && topHeight < arr[index + 1]) {
  1594. $('.nav-btn').removeClass('cur')
  1595. $('.nav-btn').eq(index).addClass('cur')
  1596. }
  1597. }
  1598. } else {
  1599. for (let index = 0; index < arr.length; index++) {
  1600. if (arr[index] < topHeight && topHeight < arr[index + 1]) {
  1601. $('.nav-folder-btn').removeClass('cur')
  1602. $('.nav-folder-btn').eq(index).addClass('cur')
  1603. }
  1604. }
  1605. }
  1606. });
  1607. </script>
  1608. </body>
  1609. </html>