1
zhang
2026-03-02 dcf8384b4a7604e6b4e3b68f2fe76571c0d00d41
open-rcs/pages/½Ó¿ÚÎĵµ.html
@@ -4,6 +4,7 @@
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>中扬RCS开放平台</title>
    <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js"></script>
    <style>
        * {
            margin: 0;
@@ -74,7 +75,6 @@
            border: none;
            display: block;
        }
        /* åº•部 */
@@ -269,6 +269,8 @@
<div class="fixed-nav">
    <div>⊕<br>合作</div>
    <div>📧<br>咨询</div>
    <div onclick="exportToWord()">📄<br>导出Word</div>
    <div onclick="exportToMarkdown()">📝<br>导出MD</div>
    <div onclick="scrollToTop()">↑</div>
</div>
@@ -343,6 +345,218 @@
        });
    }
    // å¯¼å‡ºä¸ºWord (docx格式)
    function exportToWord() {
        const contentFrame = document.getElementById('content-frame');
        if (contentFrame && contentFrame.contentWindow) {
            try {
                console.log('开始导出Word');
                const contentDoc = contentFrame.contentDocument;
                const content = contentDoc.body.innerHTML;
                console.log('获取到内容,长度:', content.length);
                // æå–接口核心内容,过滤掉所有标题和元信息
                let coreContent = content;
                // ç§»é™¤æ ‡é¢˜å’Œå…ƒä¿¡æ¯
                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, '');
                // åˆ›å»º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;
        }
        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对象
                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.click();
                // é‡Šæ”¾URL对象
                setTimeout(() => URL.revokeObjectURL(url), 100);
                console.log('下载完成');
            } catch (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}/)) {
                        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));
                    }
                };
                // æŒ‰é¡ºåºå¤„理所有子元素
                Array.from(content.children).forEach(child => processElement(child));
                // åˆ›å»ºBlob对象
                const blob = new Blob([markdown], {type: 'text/markdown'});
                const url = URL.createObjectURL(blob);
                // åˆ›å»ºä¸‹è½½é“¾æŽ¥
                const link = document.createElement('a');
                link.href = url;
                link.download = '接口文档.md';
                link.click();
                // é‡Šæ”¾URL对象
                setTimeout(() => URL.revokeObjectURL(url), 100);
            } catch (e) {
                console.error('导出Markdown失败:', e);
                alert('导出Markdown失败,请重试');
            }
        }
    }
    // ç›‘听iframe加载完成
    window.addEventListener('load', function () {
        console.log('页面加载完成');