dabanke-历史数据

导出文一科技历史交易数据到Markdown

// ==UserScript==
// @name         dabanke-历史数据
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  导出文一科技历史交易数据到Markdown
// @author       YourName
// @match        *://www.dabanke.com/hangqing-*.html
// @grant        none
// @license MIT
// ==/UserScript==
(function() {
    'use strict';

    // 创建卡片内按钮
    const btn = document.createElement('button');
    btn.innerHTML = '<i class="bi bi-file-earmark-code"></i> 生成Markdown';
    btn.className = 'btn btn-sm btn-outline-danger ms-3';
    btn.style.verticalAlign = 'middle';

    // 创建增强版弹窗
    const modal = `
    <div class="modal fade" id="dataModal" tabindex="-1">
        <div class="modal-dialog modal-xl">
            <div class="modal-content">
                <div class="modal-header bg-light">
                    <h5 class="modal-title text-danger">数据预览 - 文一科技</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
                </div>
                <div class="modal-body p-0">
                    <div class="d-flex">
                        <!-- 预览区域 -->
                        <div class="flex-grow-1 p-3 border-end" id="previewArea"
                             style="max-height: 600px; overflow-y: auto;">
                        </div>
                        <!-- 源码区域 -->
                        <textarea id="markdownSource" class="d-none"></textarea>
                    </div>
                </div>
                <div class="modal-footer bg-light">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">关闭</button>
                    <button type="button" class="btn btn-success" id="copyBtn">
                        <i class="bi bi-clipboard"></i> 复制Markdown源码
                    </button>
                </div>
            </div>
        </div>
    </div>`;

    // 添加点击事件
    btn.addEventListener('click', () => {
        // 获取标题
        const header = document.querySelector('.card-header').innerText;

        // 获取表格数据
        const table = document.querySelector('.table');
        const headers = Array.from(table.querySelectorAll('th')).map(th => th.textContent.trim());
        const rows = Array.from(table.querySelectorAll('tbody tr')).map(row =>
            Array.from(row.querySelectorAll('td')).map(td => td.textContent.trim())
        );

        // 生成Markdown
        let markdown = `# ${header}\n\n`;
        markdown += `| ${headers.join(' | ')} |\n`;
        markdown += `| ${headers.map(() => '---').join(' | ')} |\n`;
        rows.forEach(row => {
            markdown += `| ${row.join(' | ')} |\n`;
        });

        // 插入内容到弹窗
        const tempDiv = document.createElement('div');
        tempDiv.innerHTML = modal;
        document.body.appendChild(tempDiv);

        // 填充数据
        document.getElementById('markdownSource').value = markdown;

        // 生成预览HTML
        const previewArea = document.getElementById('previewArea');
        previewArea.innerHTML = `
            <h3 class="text-center mb-3">${header}</h3>
            <table class="table table-bordered table-hover">
                <thead class="table-light">
                    <tr>${headers.map(h => `<th>${h}</th>`).join('')}</tr>
                </thead>
                <tbody>
                    ${rows.map(row =>
                        `<tr>${row.map(cell => `<td>${cell}</td>`).join('')}</tr>`
                    ).join('')}
                </tbody>
            </table>
        `;

        // 初始化模态框
        const myModal = new bootstrap.Modal(document.getElementById('dataModal'));
        myModal.show();

        // 复制按钮事件
        document.getElementById('copyBtn').addEventListener('click', () => {
            const source = document.getElementById('markdownSource').value;
            navigator.clipboard.writeText(source)
                .then(() => {
                    const originalHTML = btn.innerHTML;
                    btn.innerHTML = '<i class="bi bi-check-circle-fill"></i> 复制成功!';
                    setTimeout(() => btn.innerHTML = originalHTML, 2000);
                })
                .catch(err => console.error('复制失败:', err));
        });
    });

    // 将按钮添加到数据卡片
    const dataCard = document.querySelector('.card.mt-3.mb-3');
    if (dataCard) {
        const cardHeader = dataCard.querySelector('.card-header');
        if (cardHeader) {
            // 创建按钮容器
            const btnGroup = document.createElement('div');
            btnGroup.className = 'd-inline-block float-end';
            btnGroup.appendChild(btn);
            // 插入到标题文字后面
            cardHeader.appendChild(btnGroup);
        }
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址