| | |
| | | // 导åºä¸ºWord (docxæ ¼å¼) |
| | | function exportToWord() { |
| | | const contentFrame = document.getElementById('content-frame'); |
| | | if (contentFrame && contentFrame.contentWindow) { |
| | | if (!contentFrame || !contentFrame.contentWindow) { |
| | | alert('æ æ³è·åå
å®¹æ¡æ¶'); |
| | | return; |
| | | } |
| | | |
| | | const handleMessage = function(event) { |
| | | if (event.data.type === 'apiConfigs') { |
| | | const apiConfigs = event.data.data; |
| | | window.removeEventListener('message', handleMessage); |
| | | generateWordDocument(apiConfigs); |
| | | } |
| | | }; |
| | | |
| | | window.addEventListener('message', handleMessage, { once: true }); |
| | | contentFrame.contentWindow.postMessage({ type: 'getApiConfigs' }, '*'); |
| | | |
| | | setTimeout(() => { |
| | | try { |
| | | console.log('å¼å§å¯¼åºWord'); |
| | | window.removeEventListener('message', handleMessage); |
| | | } catch (e) { |
| | | console.log('çå¬å¨å·²ç§»é¤'); |
| | | } |
| | | }, 5000); |
| | | } |
| | | |
| | | const contentDoc = contentFrame.contentDocument; |
| | | const content = contentDoc.body.innerHTML; |
| | | console.log('è·åå°å
容ï¼é¿åº¦:', content.length); |
| | | function generateWordDocument(apiConfigs) { |
| | | try { |
| | | console.log('å¼å§çæWordææ¡£, APIæ°é:', apiConfigs.length); |
| | | |
| | | // æåæ¥å£æ ¸å¿å
容ï¼è¿æ»¤ææææ é¢åå
ä¿¡æ¯ |
| | | let coreContent = content; |
| | | let apiDetailsHtml = ''; |
| | | apiConfigs.forEach(function(config) { |
| | | const methodClass = config.method.toLowerCase() === 'post' ? 'method-post' : 'method-get'; |
| | | |
| | | // ç§»é¤æ é¢åå
ä¿¡æ¯ |
| | | coreContent = coreContent.replace(/RCSæ¥å£ææ¡£[\s\S]*?æ´æ°æ¶é´ï¼[\s\S]*?\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g, ''); |
| | | coreContent = coreContent.replace(/<h1[^>]*>.*?<\/h1>/g, ''); |
| | | coreContent = coreContent.replace(/<h2[^>]*>.*?<\/h2>/g, ''); |
| | | coreContent = coreContent.replace(/<h3[^>]*>.*?<\/h3>/g, ''); |
| | | coreContent = coreContent.replace(/<h4[^>]*>.*?<\/h4>/g, ''); |
| | | coreContent = coreContent.replace(/<h5[^>]*>.*?<\/h5>/g, ''); |
| | | coreContent = coreContent.replace(/<h6[^>]*>.*?<\/h6>/g, ''); |
| | | coreContent = coreContent.replace(/æ´æ°æ¶é´ï¼.*?<\/p>/g, ''); |
| | | let requestParamsHtml = ''; |
| | | if (config.request && config.request.parameters) { |
| | | config.request.parameters.forEach(function(param) { |
| | | const required = param.required ? 'å¿
å¡«' : 'éå¡«'; |
| | | const defaultVal = param.default !== undefined ? ' (é»è®¤å¼: ' + param.default + ')' : ''; |
| | | requestParamsHtml += '<tr><td>' + param.name + '</td><td>' + param.type + '</td><td>' + required + '</td><td>' + param.description + defaultVal + '</td></tr>'; |
| | | }); |
| | | } |
| | | |
| | | // å建HTMLæ ¼å¼çWordææ¡£ |
| | | const htmlContent = ` |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <title>æ¥å£ææ¡£</title> |
| | | <style> |
| | | body { |
| | | font-family: 'Microsoft YaHei', Arial, sans-serif; |
| | | margin: 40px; |
| | | line-height: 1.6; |
| | | let requestExample = ''; |
| | | if (config.request && config.request.example) { |
| | | requestExample = JSON.stringify(config.request.example, null, 2); |
| | | } |
| | | p { |
| | | margin-bottom: 15px; |
| | | text-align: justify; |
| | | } |
| | | pre { |
| | | background-color: #f8f9fa; |
| | | padding: 15px; |
| | | border-radius: 4px; |
| | | border: 1px solid #e9ecef; |
| | | margin: 20px 0; |
| | | font-family: 'Consolas', 'Monaco', monospace; |
| | | white-space: pre-wrap; |
| | | } |
| | | table { |
| | | border-collapse: collapse; |
| | | width: 100%; |
| | | margin: 20px 0; |
| | | box-shadow: 0 2px 4px rgba(0,0,0,0.1); |
| | | } |
| | | th { |
| | | background-color: #3498db; |
| | | color: white; |
| | | font-weight: bold; |
| | | padding: 12px 15px; |
| | | text-align: left; |
| | | } |
| | | td { |
| | | border: 1px solid #ddd; |
| | | padding: 10px 15px; |
| | | text-align: left; |
| | | } |
| | | tr:nth-child(even) { |
| | | background-color: #f8f9fa; |
| | | } |
| | | ul, ol { |
| | | margin: 15px 0; |
| | | padding-left: 30px; |
| | | } |
| | | li { |
| | | margin-bottom: 8px; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | ${coreContent} |
| | | </body> |
| | | </html> |
| | | `; |
| | | |
| | | // å建Blob对象 |
| | | let responseParamsHtml = ''; |
| | | if (config.response && config.response.parameters) { |
| | | config.response.parameters.forEach(function(param) { |
| | | responseParamsHtml += '<tr><td>' + param.name + '</td><td>' + param.type + '</td><td>' + param.description + '</td></tr>'; |
| | | }); |
| | | } |
| | | |
| | | let responseExample = ''; |
| | | if (config.response && config.response.example) { |
| | | responseExample = JSON.stringify(config.response.example, null, 2); |
| | | } |
| | | |
| | | apiDetailsHtml += |
| | | '<div class="api-info">' + |
| | | '<h3>' + config.name + '</h3>' + |
| | | '<div class="api-method ' + methodClass + '">' + config.method + '</div>' + |
| | | '<div class="api-url">' + config.url + '</div>' + |
| | | '<h4>请æ±åæ°</h4>' + |
| | | '<table><thead><tr><th>åæ°å</th><th>ç±»å</th><th>æ¯å¦å¿
å¡«</th><th>æè¿°</th></tr></thead><tbody>' + requestParamsHtml + '</tbody></table>' + |
| | | '<h4>请æ±ç¤ºä¾</h4>' + |
| | | '<pre>' + requestExample + '</pre>' + |
| | | '<h4>è¿ååæ°</h4>' + |
| | | '<table><thead><tr><th>åæ°å</th><th>ç±»å</th><th>æè¿°</th></tr></thead><tbody>' + responseParamsHtml + '</tbody></table>' + |
| | | '<h4>è¿å示ä¾</h4>' + |
| | | '<pre>' + responseExample + '</pre>' + |
| | | '</div>'; |
| | | }); |
| | | |
| | | const apiContent = '<h1>RCSæ¥å£ææ¡£</h1>' + |
| | | '<div class="intro">' + |
| | | '<p>欢è¿ä½¿ç¨ä¸æ¬RCS弿¾å¹³å°APIãæ¬ææ¡£æä¾äºå®æ´çæ¥å£è¯´æï¼å
å«è¯·æ±åæ°ãè¿åç»æä»¥å示ä¾ä»£ç ãæ¯ä¸ªæ¥å£é½æä¾äºMockåè½ï¼æ¹ä¾¿æ¨å¿«éæµè¯åéæã</p>' + |
| | | '</div>' + |
| | | '<div class="note">' + |
| | | '<div class="note-title">å¿«éå¯¹æ¥æå</div>' + |
| | | '<p><strong>æ¥å£ä¸æ * çä¸ºå¸¸ç¨æ¥å£</strong>ï¼åæ¥å¯¹æ¥æ¶ï¼åªéè¦è°é以䏿¥å£ï¼</p>' + |
| | | '<ul><li>1. çæä»»å¡å</li><li>2. åæ¶ä»»å¡å</li></ul>' + |
| | | '<p><strong>妿ä¸å±ç³»ç»éè¦æ¥æ¶ä»»å¡çæ§è¡ç¶æ</strong>ï¼éè¦æä¾ä»¥ä¸æ¥å£ï¼ä¾è°åº¦ç³»ç»åè°ï¼</p>' + |
| | | '<ul><li>任塿§è¡éç¥æ¥å£</li></ul>' + |
| | | '<p><strong>è¶
æ¶è®¾ç½®ï¼</strong>䏿¬è°åº¦ç³»ç»è°ç¨ä¸å±ç³»ç»çæ¥å£ï¼è·åè¿æ¥è¶
æ¶æ¶é´é»è®¤ä¸º <strong>30ç§</strong>ï¼æ°æ®è¿åè¶
æ¶æ¶é´é»è®¤ä¸º <strong>60ç§</strong>ï¼è¶
æ¶æ
åµä¸ï¼è°åº¦ç³»ç»ä¼è¿åè¿æ¥å¤±è´¥ã</p>' + |
| | | '</div>' + |
| | | '<div class="api-info">' + |
| | | '<h3>对æ¥çº¦å®</h3>' + |
| | | '<ul><li><strong>ç»ä¸æ ¼å¼ï¼</strong>为æ¥å£ç»ä¸å¹¶å
¼å®¹ï¼ææçåæ°é½ä¸ºåç¬¦ä¸²æ ¼å¼ã</li><li><strong>æ¯è¯çº¦å®ï¼</strong>ææ¬æ¶åå°ç AGVãrobotãæºå¨äººæ¯è¯ãCTU为å䏿¯è¯ï¼ä¸è¦æ··æ·ã</li><li><strong>çæ¬å
¼å®¹ï¼</strong>为å
¼å®¹ä»¥åçæ¬ï¼æ¶æ¯ä¸æ¥åæ®µä¼æ¯ååºçåæ®µè¦å¤ï¼ä¸å±å¹³å°æ ¹æ®ä¸å¡æªåéè¦çåæ®µã</li><li><strong>容å¨å®ä¹ï¼</strong>åºç¨äºå车ãCTUç项ç®ä¸ï¼æç®±ãæçãè½½å
·é½å¯ç§°ä¸ºå®¹å¨ã</li></ul>' + |
| | | '</div>' + |
| | | '<section class="api-section">' + |
| | | '<h2>æ¥å£æ¦è§</h2>' + |
| | | '<div class="api-info">' + |
| | | '<h3>åºç¡ä¿¡æ¯</h3>' + |
| | | '<table><tbody><tr><td><strong>åºç¡ URL</strong></td><td><code>http://IP:PORT</code></td></tr><tr><td><strong>è¯·æ±æ ¼å¼</strong></td><td><code>application/json</code></td></tr><tr><td><strong>è¿åæ ¼å¼</strong></td><td><code>application/json</code></td></tr><tr><td><strong>å符ç¼ç </strong></td><td><code>UTF-8</code></td></tr></tbody></table>' + |
| | | '</div>' + |
| | | '<div class="api-info">' + |
| | | '<h3>éç¨è¯·æ±åæ°</h3>' + |
| | | '<p>以ä¸åæ°ä¸ºæææ¥å£çéç¨åæ°ï¼æ¯æ¬¡è°ç¨æ¶éè¦æºå¸¦ï¼</p>' + |
| | | '<table><thead><tr><th>åæ°å</th><th>æ¯å¦å¿
å¡«</th><th>æè¿°</th></tr></thead><tbody><tr><td><code>reqTime</code></td><td>éå¡«</td><td>è¯·æ±æ¶é´æ³ï¼æ ¼å¼: <code>yyyy-MM-dd HH:mm:ss</code>ãç±ä¸å±ç³»ç»è®¾å®ã</td></tr><tr><td><code>tokenCode</code></td><td>éå¡«</td><td>令çå·ï¼ç±è°åº¦ç³»ç»é¢åã妿填åï¼éå
å¨ RCS-2000 ç³»ç»é
ç½®ï¼ä¸å±ç³»ç»è°ç¨æ¶è¿è¡å¡«åã</td></tr></tbody></table>' + |
| | | '</div>' + |
| | | '<div class="api-info">' + |
| | | '<h3>éç¨è¿åå¼å®ä¹</h3>' + |
| | | '<p>æææ¥å£çååºé½éµå¾ªä»¥ä¸ç»ä¸æ ¼å¼ï¼</p>' + |
| | | '<table><thead><tr><th>åæ°å</th><th>æ¯å¦å¿
å¡«</th><th>æè¿°</th></tr></thead><tbody><tr><td><code>code</code></td><td>å¿
å¡«</td><td>è¿åç¼å·ï¼<code>200</code> 表示æåï¼<code>1~N</code> 表示失败</td></tr><tr><td><code>message</code></td><td>å¿
å¡«</td><td>è¿åæ¶æ¯ï¼<code>è¯·æ±æå</code> 表示æåï¼å
容为详ç»çé误æè¿°</td></tr><tr><td><code>data</code></td><td>éå¡«</td><td>è¿åçæ°æ®ç»æï¼å
·ä½å
å®¹æ ¹æ®æ¥å£èå®</td></tr></tbody></table>' + |
| | | '</div>' + |
| | | '</section>' + |
| | | '<section class="api-section">' + |
| | | '<h2>æ¥å£è¯¦æ
</h2>' + |
| | | apiDetailsHtml + |
| | | '</section>' + |
| | | '<section class="api-section">' + |
| | | '<h2>é误ç 说æ</h2>' + |
| | | '<div class="api-info">' + |
| | | '<h3>éç¨é误ç </h3>' + |
| | | '<table><thead><tr><th>é误ç </th><th>说æ</th><th>è§£å³æ¹æ¡</th></tr></thead><tbody><tr><td>200</td><td>æå</td><td>-</td></tr><tr><td>500</td><td>åæ°é误</td><td>æ£æ¥è¯·æ±åæ°æ¯å¦å®æ´åæ£ç¡®</td></tr></tbody></table>' + |
| | | '</div>' + |
| | | '</section>'; |
| | | |
| | | const htmlContent = '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>æ¥å£ææ¡£</title><style>' + |
| | | 'body { font-family: "Microsoft YaHei", Arial, sans-serif; margin: 40px; line-height: 1.6; } ' + |
| | | 'p { margin-bottom: 15px; text-align: justify; } ' + |
| | | 'pre { background-color: #f8f9fa; padding: 15px; border-radius: 4px; border: 1px solid #e9ecef; margin: 20px 0; font-family: "Consolas", "Monaco", monospace; white-space: pre-wrap; } ' + |
| | | 'table { border-collapse: collapse; width: 100%; margin: 20px 0; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } ' + |
| | | 'th { background-color: #3498db; color: white; font-weight: bold; padding: 12px 15px; text-align: left; } ' + |
| | | 'td { border: 1px solid #ddd; padding: 10px 15px; text-align: left; } ' + |
| | | 'tr:nth-child(even) { background-color: #f8f9fa; } ' + |
| | | 'ul, ol { margin: 15px 0; padding-left: 30px; } ' + |
| | | 'li { margin-bottom: 8px; } ' + |
| | | 'h1, h2, h3, h4 { color: #333; margin-top: 20px; margin-bottom: 15px; } ' + |
| | | '.api-method { display: inline-block; padding: 6px 16px; border-radius: 20px; font-weight: 700; margin-right: 12px; font-size: 13px; } ' + |
| | | '.method-post { background: #49cc90; color: #fff; } ' + |
| | | '.method-get { background: #61affe; color: #fff; } ' + |
| | | '.api-url { font-family: "Courier New", "Consolas", monospace; background: #2d3748; color: #48bb78; padding: 14px 18px; margin: 15px 0; border-radius: 8px; font-size: 14px; word-break: break-all; } ' + |
| | | '.note { background: #fff9e6; border-left: 5px solid #ffc107; padding: 20px; margin: 20px 0; border-radius: 12px; } ' + |
| | | '.api-info { background-color: #fff; padding: 25px; margin: 20px 0; border-radius: 12px; border-left: 5px solid #0066cc; } ' + |
| | | '</style></head><body>' + apiContent + '</body></html>'; |
| | | |
| | | const blob = new Blob([htmlContent], { type: 'application/msword' }); |
| | | const url = URL.createObjectURL(blob); |
| | | |
| | | // å建ä¸è½½é¾æ¥ |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ¥å£ææ¡£.doc'; |
| | | link.style.display = 'none'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | |
| | | // éæ¾URL对象 |
| | | setTimeout(() => URL.revokeObjectURL(url), 100); |
| | | console.log('ä¸è½½å®æ'); |
| | | console.log('Wordææ¡£ä¸è½½å®æ'); |
| | | } catch (e) { |
| | | console.error('导åºWord失败:', e); |
| | | console.error('çæWordææ¡£å¤±è´¥:', e); |
| | | alert('导åºWord失败ï¼è¯·éè¯ï¼' + e.message); |
| | | } |
| | | } else { |
| | | console.error('æ æ³è·åå
å®¹æ¡æ¶'); |
| | | alert('导åºWordå¤±è´¥ï¼æ æ³è·åå
å®¹æ¡æ¶'); |
| | | } |
| | | } |
| | | |
| | | // 导åºä¸ºMarkdown |
| | | function exportToMarkdown() { |
| | | const contentFrame = document.getElementById('content-frame'); |
| | | if (contentFrame && contentFrame.contentWindow) { |
| | | try { |
| | | const contentDoc = contentFrame.contentDocument; |
| | | const content = contentDoc.body; |
| | | |
| | | // 转æ¢HTML为Markdown |
| | | let markdown = ''; |
| | | |
| | | // æææ¡£é¡ºåºå¤çææå
ç´ |
| | | const processElement = (element) => { |
| | | // è¿æ»¤æä¸éè¦çå
ç´ |
| | | if (element.textContent.includes('RCSæ¥å£ææ¡£') || |
| | | element.textContent.includes('æ¥å£è¯¦æ
') || |
| | | element.textContent.includes('æ´æ°æ¶é´ï¼') || |
| | | element.textContent.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)) { |
| | | if (!contentFrame || !contentFrame.contentWindow) { |
| | | alert('æ æ³è·åå
å®¹æ¡æ¶'); |
| | | return; |
| | | } |
| | | |
| | | const tagName = element.tagName; |
| | | |
| | | if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(tagName)) { |
| | | // å¤çæ é¢ |
| | | const level = parseInt(tagName.substring(1)); |
| | | const hashes = '#'.repeat(level); |
| | | markdown += `${hashes} ${element.textContent}\n\n`; |
| | | } else if (tagName === 'P') { |
| | | // å¤çæ®µè½ |
| | | markdown += `${element.textContent}\n\n`; |
| | | } else if (tagName === 'PRE') { |
| | | // å¤ç代ç å |
| | | markdown += '```\n'; |
| | | markdown += element.textContent; |
| | | markdown += '\n```\n\n'; |
| | | } else if (tagName === 'UL' || tagName === 'OL') { |
| | | // å¤çå表 |
| | | const items = element.querySelectorAll('li'); |
| | | items.forEach(item => { |
| | | const prefix = tagName === 'UL' ? '- ' : '1. '; |
| | | markdown += `${prefix}${item.textContent}\n`; |
| | | }); |
| | | markdown += '\n'; |
| | | } else if (tagName === 'TABLE') { |
| | | // å¤çè¡¨æ ¼ |
| | | const headers = element.querySelectorAll('th'); |
| | | if (headers.length > 0) { |
| | | markdown += '| '; |
| | | headers.forEach(header => { |
| | | markdown += `${header.textContent} | `; |
| | | }); |
| | | markdown += '\n'; |
| | | |
| | | // åé线 |
| | | markdown += '| '; |
| | | headers.forEach(() => { |
| | | markdown += '--- | '; |
| | | }); |
| | | markdown += '\n'; |
| | | } |
| | | |
| | | // å¤çè¡¨æ ¼è¡ |
| | | const rows = element.querySelectorAll('tr'); |
| | | rows.forEach(row => { |
| | | const cells = row.querySelectorAll('td'); |
| | | if (cells.length > 0) { |
| | | markdown += '| '; |
| | | cells.forEach(cell => { |
| | | markdown += `${cell.textContent} | `; |
| | | }); |
| | | markdown += '\n'; |
| | | } |
| | | }); |
| | | markdown += '\n'; |
| | | } else if (element.children && element.children.length > 0) { |
| | | // å¤ç容å¨å
ç´ ï¼éå½å¤çåå
ç´ |
| | | Array.from(element.children).forEach(child => processElement(child)); |
| | | const handleMessage = function(event) { |
| | | if (event.data.type === 'apiConfigs') { |
| | | const apiConfigs = event.data.data; |
| | | window.removeEventListener('message', handleMessage); |
| | | generateMarkdownDocument(apiConfigs); |
| | | } |
| | | }; |
| | | |
| | | // æé¡ºåºå¤çææåå
ç´ |
| | | Array.from(content.children).forEach(child => processElement(child)); |
| | | window.addEventListener('message', handleMessage, { once: true }); |
| | | contentFrame.contentWindow.postMessage({ type: 'getApiConfigs' }, '*'); |
| | | |
| | | // å建Blob对象 |
| | | const blob = new Blob([markdown], {type: 'text/markdown'}); |
| | | setTimeout(() => { |
| | | try { |
| | | window.removeEventListener('message', handleMessage); |
| | | } catch (e) { |
| | | console.log('çå¬å¨å·²ç§»é¤'); |
| | | } |
| | | }, 5000); |
| | | } |
| | | |
| | | function generateMarkdownDocument(apiConfigs) { |
| | | try { |
| | | console.log('å¼å§çæMarkdownææ¡£, APIæ°é:', apiConfigs.length); |
| | | |
| | | let apiDetailsMd = ''; |
| | | apiConfigs.forEach(function(config) { |
| | | let requestParamsMd = ''; |
| | | if (config.request && config.request.parameters) { |
| | | config.request.parameters.forEach(function(param) { |
| | | const required = param.required ? 'å¿
å¡«' : 'éå¡«'; |
| | | const defaultVal = param.default !== undefined ? ' (é»è®¤å¼: ' + param.default + ')' : ''; |
| | | requestParamsMd += '| ' + param.name + ' | ' + param.type + ' | ' + required + ' | ' + param.description + defaultVal + ' |\n'; |
| | | }); |
| | | } |
| | | |
| | | let requestExample = ''; |
| | | if (config.request && config.request.example) { |
| | | requestExample = JSON.stringify(config.request.example, null, 2); |
| | | } |
| | | |
| | | let responseParamsMd = ''; |
| | | if (config.response && config.response.parameters) { |
| | | config.response.parameters.forEach(function(param) { |
| | | responseParamsMd += '| ' + param.name + ' | ' + param.type + ' | ' + param.description + ' |\n'; |
| | | }); |
| | | } |
| | | |
| | | let responseExample = ''; |
| | | if (config.response && config.response.example) { |
| | | responseExample = JSON.stringify(config.response.example, null, 2); |
| | | } |
| | | |
| | | apiDetailsMd += |
| | | '### ' + config.name + '\n\n' + |
| | | '**' + config.method + '** `' + config.url + '`\n\n' + |
| | | '#### 请æ±åæ°\n\n' + |
| | | '| åæ°å | ç±»å | æ¯å¦å¿
å¡« | æè¿° |\n' + |
| | | '| --- | --- | --- | --- |\n' + |
| | | requestParamsMd + |
| | | '#### 请æ±ç¤ºä¾\n\n' + |
| | | '```json\n' + |
| | | requestExample + '\n' + |
| | | '```\n\n' + |
| | | '#### è¿ååæ°\n\n' + |
| | | '| åæ°å | ç±»å | æè¿° |\n' + |
| | | '| --- | --- | --- |\n' + |
| | | responseParamsMd + |
| | | '#### è¿å示ä¾\n\n' + |
| | | '```json\n' + |
| | | responseExample + '\n' + |
| | | '```\n\n'; |
| | | }); |
| | | |
| | | const markdown = |
| | | '# RCSæ¥å£ææ¡£\n\n' + |
| | | '## å¿«éå¯¹æ¥æå\n\n' + |
| | | '**æ¥å£ä¸æ * çä¸ºå¸¸ç¨æ¥å£**ï¼åæ¥å¯¹æ¥æ¶ï¼åªéè¦è°é以䏿¥å£ï¼\n\n' + |
| | | '- 1. çæä»»å¡å\n' + |
| | | '- 2. åæ¶ä»»å¡å\n\n' + |
| | | '**妿ä¸å±ç³»ç»éè¦æ¥æ¶ä»»å¡çæ§è¡ç¶æ**ï¼éè¦æä¾ä»¥ä¸æ¥å£ï¼ä¾è°åº¦ç³»ç»åè°ï¼\n\n' + |
| | | '- 任塿§è¡éç¥æ¥å£\n\n' + |
| | | '**è¶
æ¶è®¾ç½®ï¼** 䏿¬è°åº¦ç³»ç»è°ç¨ä¸å±ç³»ç»çæ¥å£ï¼è·åè¿æ¥è¶
æ¶æ¶é´é»è®¤ä¸º **30ç§**ï¼æ°æ®è¿åè¶
æ¶æ¶é´é»è®¤ä¸º **60ç§**ï¼è¶
æ¶æ
åµä¸ï¼è°åº¦ç³»ç»ä¼è¿åè¿æ¥å¤±è´¥ã\n\n' + |
| | | '## 对æ¥çº¦å®\n\n' + |
| | | '- **ç»ä¸æ ¼å¼ï¼** 为æ¥å£ç»ä¸å¹¶å
¼å®¹ï¼ææçåæ°é½ä¸ºåç¬¦ä¸²æ ¼å¼ã\n' + |
| | | '- **æ¯è¯çº¦å®ï¼** ææ¬æ¶åå°ç AGVãrobotãæºå¨äººæ¯è¯ãCTU为å䏿¯è¯ï¼ä¸è¦æ··æ·ã\n' + |
| | | '- **çæ¬å
¼å®¹ï¼** 为å
¼å®¹ä»¥åçæ¬ï¼æ¶æ¯ä¸æ¥åæ®µä¼æ¯ååºçåæ®µè¦å¤ï¼ä¸å±å¹³å°æ ¹æ®ä¸å¡æªåéè¦çåæ®µã\n' + |
| | | '- **容å¨å®ä¹ï¼** åºç¨äºå车ãCTUç项ç®ä¸ï¼æç®±ãæçãè½½å
·é½å¯ç§°ä¸ºå®¹å¨ã\n\n' + |
| | | '## æ¥å£æ¦è§\n\n' + |
| | | '### åºç¡ä¿¡æ¯\n\n' + |
| | | '| åæ° | å¼ |\n' + |
| | | '| --- | --- |\n' + |
| | | '| åºç¡ URL | `http://IP:PORT` |\n' + |
| | | '| è¯·æ±æ ¼å¼ | `application/json` |\n' + |
| | | '| è¿åæ ¼å¼ | `application/json` |\n' + |
| | | '| å符ç¼ç | `UTF-8` |\n\n' + |
| | | '### éç¨è¯·æ±åæ°\n\n' + |
| | | '| åæ°å | æ¯å¦å¿
å¡« | æè¿° |\n' + |
| | | '| --- | --- | --- |\n' + |
| | | '| `reqTime` | éå¡« | è¯·æ±æ¶é´æ³ï¼æ ¼å¼: `yyyy-MM-dd HH:mm:ss`ãç±ä¸å±ç³»ç»è®¾å®ã |\n' + |
| | | '| `tokenCode` | éå¡« | 令çå·ï¼ç±è°åº¦ç³»ç»é¢åã妿填åï¼éå
å¨ RCS-2000 ç³»ç»é
ç½®ï¼ä¸å±ç³»ç»è°ç¨æ¶è¿è¡å¡«åã |\n\n' + |
| | | '### éç¨è¿åå¼å®ä¹\n\n' + |
| | | '| åæ°å | æ¯å¦å¿
å¡« | æè¿° |\n' + |
| | | '| --- | --- | --- |\n' + |
| | | '| `code` | å¿
å¡« | è¿åç¼å·ï¼`200` 表示æåï¼`1~N` 表示失败 |\n' + |
| | | '| `message` | å¿
å¡« | è¿åæ¶æ¯ï¼`è¯·æ±æå` 表示æåï¼å
容为详ç»çé误æè¿° |\n' + |
| | | '| `data` | éå¡« | è¿åçæ°æ®ç»æï¼å
·ä½å
å®¹æ ¹æ®æ¥å£èå® |\n\n' + |
| | | '## æ¥å£è¯¦æ
\n\n' + |
| | | apiDetailsMd + |
| | | '## é误ç 说æ\n\n' + |
| | | '### éç¨é误ç \n\n' + |
| | | '| é误ç | 说æ | è§£å³æ¹æ¡ |\n' + |
| | | '| --- | --- | --- |\n' + |
| | | '| 200 | æå | - |\n' + |
| | | '| 500 | åæ°é误 | æ£æ¥è¯·æ±åæ°æ¯å¦å®æ´åæ£ç¡® |\n'; |
| | | |
| | | const blob = new Blob([markdown], { type: 'text/markdown;charset=utf-8' }); |
| | | const url = URL.createObjectURL(blob); |
| | | |
| | | // å建ä¸è½½é¾æ¥ |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ¥å£ææ¡£.md'; |
| | | link.style.display = 'none'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | |
| | | // éæ¾URL对象 |
| | | setTimeout(() => URL.revokeObjectURL(url), 100); |
| | | console.log('Markdownææ¡£ä¸è½½å®æ'); |
| | | } catch (e) { |
| | | console.error('导åºMarkdown失败:', e); |
| | | alert('导åºMarkdown失败ï¼è¯·éè¯'); |
| | | } |
| | | console.error('çæMarkdownææ¡£å¤±è´¥:', e); |
| | | alert('导åºMarkdown失败ï¼è¯·éè¯ï¼' + e.message); |
| | | } |
| | | } |
| | | |