dialog-MY

get data from mengxi

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         dialog-MY
// @namespace    http://tampermonkey.net/
// @version      V0.1
// @description  get data from mengxi
// @author       wei
// @match        https://www.imptc.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        GM_download
// @grant        GM_xmlhttpRequest
// @license      AGPL-3.0
// ==/UserScript==

(function () {
    'use strict';

    function getCookieObject() {
        var cookies = document.cookie.split(';');
        var cookieObj = {};
        for (var i = 0; i < cookies.length; i++) {
            var parts = cookies[i].trim().split('=');
            cookieObj[parts[0]] = parts[1];
        }
        return cookieObj;
    }

    // 随机生成 30 到 60 秒的延迟
    function randomDelay(minDelay = 30000, maxDelay = 60000) {
        return new Promise(resolve => {
            const delayTime = Math.floor(Math.random() * (maxDelay - minDelay  + 1)) + minDelay; // minDelay ~ maxDelay秒
            setTimeout(resolve, delayTime);
        });
    }

    // 输入 '2024-10-01, 2024-10-10', 输出时间序列列表
    function generateDateList(dateRangeStr) {
        let [startDateStr, endDateStr] = dateRangeStr.split(',').map(date => date.trim());
        let startDate = new Date(startDateStr);
        let endDate = new Date(endDateStr);
        let dateList = [];
    
        while (startDate <= endDate) {
            dateList.push(startDate.toISOString().split('T')[0]); // 转为字符串格式
            startDate.setDate(startDate.getDate() + 1); // 日期加1
        }
        return dateList;
    }

    // 输入 '2024-10', 输出 ['2024-10-01', '2024-10-02', '2024-10-03', '2024-10-04', ..., '2024-10-30', '2024-10-31']
    function getDaysInMonth(dateStr) {
        const year = parseInt(dateStr.split('-')[0]);
        const month = parseInt(dateStr.split('-')[1]);
        const daysInMonth = new Date(year, month, 0).getDate();
        const result = [];
        for (let day = 1; day <= daysInMonth; day++) {
            result.push(`${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`);
        }
        return result;
    }

    // 导出 市场情况分析 - 信息对比 中的数据
    function doExportD1Data(startDate, endDate) {
        // console.log('在D1中', startDate, endDate);
        let internalStartDate = startDate;
        let internalEndDate = endDate;
        return new Promise((resolve, reject) => {
            var cookieObject = getCookieObject();
            let authorization = cookieObject["Token"];
            // console.log(internalStartDate, '=============');
            // console.log(internalEndDate, '=============');
    
            // 分别是   电价曲线、负荷预测、东送计划、非市场化曲线、新能源预测
            let urls_nosuffix = [
                'https://www.imptc.com/api/scqkfx/sctjfxyyc/crqwxxfb/getYhcjqjgData/',
                'https://www.imptc.com/api/scqkfx/sctjfxyyc/crqwxxfb/getQwtdfhycscData/',
                'https://www.imptc.com/api/scqkfx/sctjfxyyc/crqwxxfb/getCrdsjhycscData/',
                'https://www.imptc.com/api/scqkfx/sctjfxyyc/crqwxxfb/fsccl/',
                'https://www.imptc.com/api/scqkfx/sctjfxyyc/crqwxxfb/getXnyfdnlycData/'
            ];
    
            let dateList = generateDateList(internalStartDate+ ", " + internalEndDate);
            // console.log(dateList, '----------------');

            // 定义请求名称数组,与 urls 对应
            let requestNames = ['电价曲线', '负荷预测', '东送计划', '非市场化曲线', '新能源预测'];

            // 定义额外信息数组
            let additionalInfo = [
                ['时间', '全网统一出清电价', '呼包东统一出清电价', '呼包西统一出清电价', '日前预出清电能价格'],
                ['时间', '统调负荷预测', '统调负荷实测'],
                ['时间', '东送计划预测', '东送计划实测'],
                ['时间', '非市场出力计划', '非市场出力计划实测'],
                ['时间', '光伏出力预测', '光伏出力实测', '风电出力预测', '风电出力实测', '新能源出力预测', '新能源出力实测'],
            ];
    
            // 后续代码逻辑中,都使用internalStartDate和internalEndDate来代替原来的startDate和endDate
            // 例如在async function processD1Dates里相关判断等操作
            async function processD1Dates() {
                try {
                    for (let cur_date of dateList) {
                        // 用于收集每个日期对应的所有请求的Promise
                        let allRequests = [];
    
                        for (let i = 0; i < urls_nosuffix.length; i++) {
                            let url = urls_nosuffix[i] + cur_date + '/' + cur_date;
                            let index = i; // 保存当前索引值,避免闭包问题

                            console.log(url);
    
                            (async () => {
                                try {
                                    let response = await fetch(url, {
                                        method: 'POST',
                                        headers: {
                                            'accept': 'application/json, text/plain, */*',
                                            'authorization': authorization
                                        },
                                        credentials: 'include'
                                    });
                                    let data = await response.json();
                                    let data_dict = {
                                        "data_class": "d1_data",
                                        "class_name": requestNames[index],
                                        "date": cur_date,
                                        "columns": additionalInfo[index],
                                        "data": data["data"]
                                    };
                                    await GM_xmlhttpRequest({
                                        method: "POST",
                                        url: "https://tradex.mywind.com.cn/tradex",
                                        // url: "http://192.168.0.90:7001/tradex",
                                        headers: {
                                            "Content-Type": "application/json;charset=UTF-8"
                                        },
                                        data: JSON.stringify(data_dict),
                                        onload: function (response) {
                                            console.log("请求成功");
                                            console.log(response.responseText);
                                        },
                                        onerror: function (response) {
                                            console.log("请求失败。。。");
                                            console.log(response.responseText);
                                        }
                                    });
                                } catch (error) {
                                    console.error(`请求 ${url}  发生错误:`, error);
                                }
                            })().then(request => allRequests.push(request));
                        }
    
                        await Promise.all(allRequests);
                        console.log(`D1 已完成日期: ${cur_date}`);
    
                        console.log(`D1 等待完成,继续执行下一个日期`);
                        await randomDelay();
                    }
    
                    console.log("D1 所有日期的请求已完成");
                    resolve(); // 当所有日期的请求都完成后,调用resolve表示成功完成
                } catch (error) {
                    console.error("处理请求时发生错误:", error);
                    reject(error); // 如果出现错误,调用reject传递错误信息
                }
            }
    
            processD1Dates();
        });
    }

    // 导出 交易管理 - 现货交易 - 省内电能量交易 - 次日全网信息 中的数据
    function doExportD3Data(startDate, endDate) {
        let internalStartDate = startDate;
        let internalEndDate = endDate;
        return new Promise((resolve, reject) => {
            var cookieObject = getCookieObject();
            let authorization = cookieObject["Token"];
            console.log(authorization);
    
            let dateList = generateDateList(internalStartDate+", "+internalEndDate);
    
            // 分别是   统调负荷、东送计划、非市场出力、新能源出力, 正负备用容量
            let urls_nosuffix = [
                'https://www.imptc.com/api/sctjfxyyc/crqwxxfb/getQwtdfhycData/',
                'https://www.imptc.com/api/sctjfxyyc/crqwxxfb/getCrdsjhData/',
                'https://www.imptc.com/api/sctjfxyyc/crqwxxfb/fsccl/',
                'https://www.imptc.com/api/sctjfxyyc/crqwxxfb/getXnyfdnlycData/',
                'https://www.imptc.com/api/sctjfxyyc/crqwxxfb/getCrqwbyrlData/'
            ];
    
            // 定义请求名称数组,与 urls 对应
            let requestNames = ['统调负荷', '东送计划', '非市场出力', '新能源出力', '正负备用容量'];
    
            async function processDates() {
                try {
                    for (let cur_date of dateList) {
                        let datePairs = [];
    
                        let dateObj = new Date(cur_date);
                        dateObj.setDate(dateObj.getDate() + 1);
                        let after_date = dateObj.toISOString().split('T')[0];
    
                        datePairs.push(cur_date);
                        datePairs.push(after_date);
    
                        // 用于收集所有日期对对应的所有请求的Promise
                        let allRequests = [];
    
                        for (let date of datePairs) {
                            let requests = urls_nosuffix.map((url, index) => {
                                let options = {
                                    method: 'POST',
                                    headers: {
                                        'accept': 'application/json, text/plain, */*',
                                        'authorization': authorization,
                                    },
                                    credentials: 'include',
                                };
    
                                if (url.includes('getXnyfdnlycData')) {
                                    options.body = JSON.stringify({ 'time': date, 'area': '', 'name': '0' });
                                    options.headers['Content-Type'] = 'application/json';
                                } else {
                                    url += date;
                                }
    
                                return async () => {
                                    try {
                                        let response = await fetch(url, options);
                                        let data = await response.json();
                                        let data_dict = {
                                            "data_class": "d3_data",
                                            "class_name": requestNames[index],
                                            "date": date,
                                            "data": data["data"]
                                        };
                                        return GM_xmlhttpRequest({
                                            method: "POST",
                                            url: "https://tradex.mywind.com.cn/tradex",
                                            // url: "http://192.168.0.90:7001/tradex",
                                            headers: {
                                                "Content-Type": "application/json;charset=UTF-8"
                                            },
                                            data: JSON.stringify(data_dict),
                                            onload: function (response) {
                                                console.log("请求成功");
                                                console.log(response.responseText);
                                            },
                                            onerror: function (response) {
                                                console.log("请求失败");
                                                console.log(response.responseText);
                                            }
                                        });
                                    } catch (error) {
                                        console.error(`请求 ${url}  ${requestNames[index]} 发生错误:`, error);
                                    }
                                };
                            });
    
                            allRequests.push(...requests);
                        }
    
                        // 等待所有日期对对应的所有请求完成
                        await Promise.all(allRequests.map(request => request()));
                        console.log(`已完成日期范围: ${datePairs.join(' - ')}`);
    
                        // 随机延迟后继续执行下一个日期的循环
                        console.log(`等待完成,继续执行下一个日期`);
                        await randomDelay();
                    }
    
                    console.log("所有日期的请求已完成");
                    resolve(); // 所有日期请求完成后,调用resolve表示成功完成
                } catch (error) {
                    console.error("处理请求时发生错误:", error);
                    reject(error); // 如果出现错误,调用reject传递错误信息
                }
            }
    
            processDates();
        });
    }

    // 导出 节点电价数据
    // 信息披露 - 市场运营机构 - 6.52现货市场申报、出清信息 - 实时节点电价
    function doExportNodeData(startDate, endDate) {
        let internalStartDate = startDate;
        let internalEndDate = endDate;
        return new Promise((resolve, reject) => {
            var cookieObject = getCookieObject();
            let authorization = cookieObject["Token"];
            console.log(authorization);
    
            let dateList = generateDateList(internalStartDate+", "+internalEndDate);
            console.log(dateList)
    
            // 'https://www.imptc.com/api/xxpl2024/scyyqywh/getDetials/6.52//2024-12-20/tab7'
            let url_nosuffix = 'https://www.imptc.com/api/xxpl2024/scyyqywh/getDetials/6.52//';
    
            // 定义请求名称
            let requestName = '节点电价';
    
            async function processDates() {
                try {
                    for (let cur_date of dateList) {
                        let fullUrl = url_nosuffix + cur_date + '/tab7';
    
                        let options = {
                            method: 'POST',
                            headers: {
                                'Accept': 'application/json, text/plain, */*',
                                'Authorization': authorization,
                                'Content-Type': 'application/json'
                            }
                        };
    
                        try {
                            let response = await fetch(fullUrl, options);
                            let data = await response.json();
                            let data_dict = {
                                "data_class": "node_price_data",
                                "class_name": requestName,
                                "date": cur_date,
                                "data": data
                            };
    
                            await new Promise((innerResolve, innerReject) => {
                                GM_xmlhttpRequest({
                                    method: "POST",
                                    url: "https://tradex.mywind.com.cn/tradex",
                                    // url: "http://192.168.0.90:7001/tradex",
                                    headers: {
                                        "Content-Type": "application/json;charset=UTF-8"
                                    },
                                    data: JSON.stringify(data_dict),
                                    onload: function (response) {
                                        console.log("请求成功");
                                        console.log(response.responseText);
                                        innerResolve();
                                    },
                                    onerror: function (response) {
                                        console.log("请求失败");
                                        console.log(response.responseText);
                                        innerReject(new Error('GM_xmlhttpRequest failed'));
                                    }
                                });
                            });
    
                            console.log(`节点电价 - 已完成日期: ${cur_date}`);
                        } catch (error) {
                            console.error(`请求 ${fullUrl}  ${requestName} 发生错误:`, error);
                        }
    
                        // 随机延迟后继续执行下一个日期的循环
                        console.log(`等待完成,继续执行下一个日期`);
                        await randomDelay();
                    }
    
                    console.log("所有日期的节点电价请求已完成");
                    resolve(); // 所有日期请求完成后,调用resolve表示成功完成
                } catch (error) {
                    console.error("处理节点电价请求时发生错误:", error);
                    reject(error); // 如果出现错误,调用reject传递错误信息
                }
            }
    
            processDates();
        });
    }

    const functionMap = {
        'D1信息对比数据': doExportD1Data,
        'D3数据': doExportD3Data,
        '节点数据': doExportNodeData
    };

    const layuiCssLink = document.createElement("link");

    layuiCssLink.rel = 'stylesheet';

    layuiCssLink.href = "//unpkg.com/[email protected]/dist/css/layui.css"

    document.head.appendChild(layuiCssLink);

    const layuiScript = document.createElement("script");

    layuiScript.src = "//unpkg.com/[email protected]/dist/layui.js"

    document.head.appendChild(layuiScript);

    console.log("这是测试111......");

    // 创建悬浮按钮
    const floatingButton = document.createElement('button');
    floatingButton.classList.add('floating-button');
    floatingButton.innerHTML = '&#9776;';
    document.body.appendChild(floatingButton);

    // 记录悬浮按钮初始的top值,用于后续计算
    let initialTop = floatingButton.offsetTop;

    // 鼠标按下事件处理函数
    floatingButton.addEventListener('mousedown', (e) => {
        e.preventDefault(); // 阻止默认的鼠标按下行为,比如选中文字等

        // 记录鼠标按下时相对于按钮的偏移量
        let offsetY = e.clientY - floatingButton.getBoundingClientRect().top;

        // 鼠标移动事件处理函数
        const onMouseMove = (e) => {
            e.preventDefault();

            // 根据鼠标移动更新按钮的top值,使其在右侧边缘上下滑动
            let newTop = e.clientY - offsetY;

            // 限制按钮只能在可视区域内滑动,防止滑出屏幕顶部或底部
            let maxTop = window.innerHeight - floatingButton.offsetHeight;
            let minTop = 0;
            newTop = Math.min(maxTop, Math.max(minTop, newTop));

            floatingButton.style.top = `${newTop}px`;
        };

        // 鼠标松开事件处理函数
        const onMouseUp = () => {
            // 移除鼠标移动和松开事件的监听,避免不必要的性能消耗
            document.removeEventListener('mousemove', onMouseMove);
            document.removeEventListener('mouseup', onMouseUp);
        };

        // 添加鼠标移动和松开事件的监听
        document.addEventListener('mousemove', onMouseMove);
        document.addEventListener('mouseup', onMouseUp);
    });

    // 添加 CSS 样式
    const style = document.createElement('style');
    style.textContent = `
        /* 悬浮按钮样式 */
    .floating-button {
        position: absolute; /* 从fixed改为absolute,以便后续能相对父元素定位 */
        right: 0; /* 初始贴紧右侧边缘 */
        top: 50%; /* 初始垂直居中,后续会根据鼠标移动调整 */
        width: 50px;
        height: 50px;
        border-radius: 50%;
        background-color: #0078d4;
        color: white;
        border: none;
        cursor: pointer;
        font-size: 24px;
        display: flex;
        justify-content: center;
        align-items: center;
        box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
        transform: translateY(-50%); /* 初始垂直居中的偏移调整 */
        user-select: none; /* 防止按钮文本被选中,提升用户体验 */
    }
    `;
    document.head.appendChild(style);

    // 定义一个变量来跟踪窗口状态,true表示展开,false表示缩回
    let isWindowOpen = false;

    // 获取当前时间
    const currentTime = new Date().toLocaleString();

    // 定义弹出窗口的宽和高
    const panelWidth = 900
    const panelHeight = 500

    // 获取网页宽高
    let windowWidth = window.innerWidth;
    let windowHeight = window.innerHeight;

    floatingButton.addEventListener('click', () => {
        if (isWindowOpen) {
            // 如果窗口是展开的,关闭窗口
            layer.closeAll('page'); // 关闭所有类型为'page'(即layer.open中type: 1的页面层)的弹出层
            isWindowOpen = false;
        } else {
            const floatingButtonRect = floatingButton.getBoundingClientRect();
            // 计算弹出窗口的偏移量
            let offsetTop = windowWidth - panelWidth - 80
            let offsetRight = floatingButtonRect.y

            // 如果窗口是缩回的,打开窗口
            layui.use(['layer', 'table'], function () {
                var layer = layui.layer;
                var table = layui.table;
                let form = layui.form;
                let laydate = layui.laydate;
                layer.open({
                    type: 1,
                    area: [panelWidth + 'px', panelHeight + 'px'],
                    offset: [offsetRight, offsetTop],
                    resize: false,
                    shadeClose: true,
                    title: 'MXXH工具',
                    shade: 0,
                    content: `  <div class="talbeBox">
                                    <style>
                                        .row {
                                            height: 40px;
                                            display: flex;
                                            justify-content: flex-start;
                                            align-items: center;
                                            margin-bottom: 20px;
                                            padding-left: 20px;
                                        }

                                        .row .formItem {
                                            display: flex;
                                            justify-content: flex-start;
                                            align-items: center;
                                            margin-right: 10px;
                                        }

                                        .row .layui-input {
                                            width: 150px;
                                        }
                                    </style>
                                    </style>
                                    <div class="layui-form" lay-filter="headForm">
                                        <div class="row1 row">
                                            <div class="formItem">
                                                <label>接口名称:</label>
                                                <input class="layui-input" placeholder="输入框" name="APIName">
                                            </div>
                                            <div class="formItem">
                                                <label>接口频率:</label>
                                                <select name="APIRate">
                                                    <option value="">请选择</option>
                                                    <option value="AAA">选项 A</option>
                                                    <option value="BBB">选项 B</option>
                                                    <option value="CCC">选项 C</option>
                                                </select>
                                            </div>
                                            <div class="formItem">
                                                <label>运行状态:</label>
                                                <select name="status">
                                                    <option value="">请选择</option>
                                                    <option value="AAA">未执行</option>
                                                    <option value="BBB">正在执行</option>
                                                    <option value="CCC">已完成</option>
                                                    <option value="DDD">执行报错</option>
                                                </select>
                                            </div>
                                        </div>
                                        <div class="row2 row">
                                            <div class="formItem">
                                                <label>数据类型:</label>
                                                <select name="dataType">
                                                    <option value="AAA">选项 A</option>
                                                    <option value="BBB">选项 B</option>
                                                </select>
                                            </div>
                                            <div class="formItem" id="layui-time">
                                                <label>日期范围:</label>
                                                <input type="text" autocomplete="off" name="startName" id="layui-startTime" class="layui-input"
                                                    placeholder="开始日期">-

                                                <input type="text" autocomplete="off" name="endName" id="layui-endTime" class="layui-input"
                                                    placeholder="结束日期">
                                            </div>
                                            <div class="formItem">
                                                <p>0.323s</p>
                                            </div>
                                            <div class="formItem">
                                                <button type="button" class="layui-btn layui-bg-blue" id="dialog-run">批量运行</button>
                                            </div>

                                        </div>
                                    </div>
                                    <div class="tableBox">
                                        <div id="myTable"></div>
                                    </div>
                                </div>`,

                    success: function () {
                        // 可以在这里进行一些初始化操作,比如表格渲染(如果使用了动态数据加载等情况)

                        // 日期范围 - 左右面板联动选择模式
                        laydate.render({
                            elem: '#layui-time',
                            range: ['#layui-startTime', '#layui-endTime'],
                            rangeLinked: true // 开启日期范围选择时的区间联动标注模式 ---  2.8+ 新增
                        });
                        form.render()

                        function validateDateRange(startDateStr, endDateStr) {
                            if (startDateStr === '') {
                                alert('开始日期未选择,请选择开始日期!');
                                return false;
                            }
                            if (endDateStr === '') {
                                alert('结束日期未选择,请选择结束日期!');
                                return false;
                            }
                            const startDate = new Date(startDateStr);
                            const endDate = new Date(endDateStr);
                            if (startDate > endDate) {
                                alert('开始日期不能大于结束日期,请重新选择!');
                                return false;
                            }
                            return true;
                        }
                        
                        function updateTableRowStatus(tableData, rowIndex, status) {
                            tableData[rowIndex].field5 = status;
                            table.reload('myTable', {
                                data: tableData
                            });
                        }

                        //批量运行点击事件
                        document.getElementById('dialog-run').addEventListener('click', () => {
                            let headForm = form.val('headForm')
                            let tableCheckData = table.checkStatus('myTable')
                            console.log('headForm:', headForm)
                            console.log('tableCheckData:', tableCheckData)

                            // 用于存储所有异步任务(每个函数调用包装成一个Promise)
                            const promises = [];

                            // 获取开始日期和结束日期的值
                            const startDateStr = document.getElementById('layui-startTime').value;
                            const endDateStr = document.getElementById('layui-endTime').value;

                            if (!validateDateRange(startDateStr, endDateStr)) {
                                return;
                            }

                            console.log('开始日期: ', startDateStr, '结束日期: ', endDateStr)

                            // 遍历被选择的行,创建异步任务并添加到promises数组
                            tableCheckData.data.forEach((row, index) => {
                                let rowIndex = tableData.findIndex((item) => item.field1 === row.field1);
                                if (rowIndex!== -1) {
                                    updateTableRowStatus(tableData, rowIndex, '正在执行');
                                    const func = functionMap[row.field1];
                                    tableData[rowIndex].field5 = '正在执行';
                                    table.reload('myTable', {
                                        data: tableData
                                    });
                                    const promise = new Promise((resolve, reject) => {
                                        func(startDateStr, endDateStr).then(() => {
                                            // 函数执行成功后,将该行的field5更新为'已完成'
                                            updateTableRowStatus(tableData, rowIndex, '已完成');
                                            resolve();
                                        }).catch((error) => {
                                            // 如果函数执行出错,更新状态为'执行报错',方便直观查看问题
                                            tableData[rowIndex].field5 = '执行报错';
                                            table.reload('myTable', {
                                                data: tableData
                                            });
                                            console.error(`执行函数 ${func.name} 出错:`, error);
                                            reject(error);
                                        });
                                    });
                                    promises.push(promise);
                                }
                            });

                            // 使用Promise.all同时触发所有异步任务
                            Promise.all(promises).then(() => {

                            }).catch((error) => {
                                // 如果有任何一个函数执行出错,整体捕捉错误并可以进行相应提示等处理
                                console.error('批量运行出现错误:', error);
                                layer.msg('批量运行出现错误,请检查!', { icon: 5, time: 2000 });
                            });

                        })
                        let tableData = [
                            {
                                field1: 'D1信息对比数据',
                                field2: '',
                                field3: '',
                                field4: '',
                                field5: '未运行',
                            },
                            {
                                field1: 'D3数据',
                                field2: '',
                                field3: '',
                                field4: '',
                                field5: '未运行',
                            },
                            {
                                field1: '私有数据',
                                field2: '',
                                field3: '',
                                field4: '',
                                field5: '未运行',
                            },
                            {
                                field1: '节点数据',
                                field2: '',
                                field3: '',
                                field4: '',
                                field5: '未运行',
                            }
                        ]

                        table.render({
                            elem: '#myTable',
                            cols: [[
                                { type: 'checkbox', width: 80, },
                                { field: 'field1', title: '接口名称' },
                                { field: 'field2', title: '频率' },
                                { field: 'field3', title: '周期' },
                                { field: 'field4', title: '运行时间' },
                                { field: 'field5', title: '运行状态' },
                            ]],
                            data: tableData,
                            // height: 'full-35', // 最大高度减去其他容器已占有的高度差
                        })

                        // 输出被选择的行数据
                        // console.log('被选择的行数据:', tableCheckData);

                        // // 遍历被选择的行,将运行状态改为'正在执行'
                        // tableCheckData.data.forEach((row) => {
                        //     let rowIndex = tableData.findIndex((item) => item.field1 === row.field1);
                        //     if (rowIndex!== -1) {
                        //         tableData[rowIndex].field5 = '正在执行';
                        //     }
                        // });
                    },
                    cancel: function () {
                        isWindowOpen = false;
                    },
                });
                isWindowOpen = true;
            });
        }
    });

})();