cpcapi

此脚本为简化她的工作流程而设计。

// ==UserScript==
// @name         cpcapi
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      9
// @description  此脚本为简化她的工作流程而设计。
// @author       Zemelee
// @match        https://cpcapi.cbg.cn/newEraPlatform/#/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==


/*
# 专有许可证

版权所有 (C) [2025] Zemelee

本软件受专有许可证保护。未经许可,任何人不得:
- 修改本软件的任何部分。
- 复制、分发或传播本软件。
- 将本软件用于商业用途。

本软件仅供个人查看和学习使用,严禁任何未经授权的行为。

联系信息:
[email protected]
*/
(async function () {
    'use strict';
    let mode = localStorage.getItem("mode");
    if (mode == null || mode == void 0) {
        mode = "新增活动模式"; // 默认新增活动模式
    }
    let header = document.querySelector("#app > section > section > header > div.currentBox")
    let modeSelect = document.createElement("select")
    modeSelect.style.marginLeft = "10px"
    let options = [
        { text: "新增活动模式", value: "新增活动模式" },
        { text: "录入人员模式", value: "录入人员模式" },
        { text: "审核模式", value: "审核模式" },
        { text: "补录模式", value: "补录模式" },
        { text: "审核补录", value: "审核补录" },
    ];
    options.forEach(function (option) {
        let optionElement = document.createElement("option");
        optionElement.textContent = option.text;
        optionElement.value = option.value;
        if (mode === option.value) { //默认 新增活动模式
            optionElement.selected = true;
        }
        modeSelect.appendChild(optionElement);
    });
    modeSelect.addEventListener('change', function () {
        let selectedMode = modeSelect.value;
        localStorage.setItem("mode", selectedMode);
        setTimeout(location.reload(), 1000)
    });
    header.appendChild(modeSelect)


    console.log("mode1:", mode)
    console.log("mode2:", location.href.includes("volunteerActivityUserList"))
    //新增活动模式
    if (mode == "新增活动模式" && window.location.href.includes("volunteerActivityList")) {
        const styles = {
            newDiv: {
                // border: "1px solid red",
                width: "47%",
                height: "auto",
                padding: "0 10px",
                margin: "10px",
                backgroundColor: "white"
            },
            input: {
                width: "300px"
            },
            dateSelect: { //日期选择
                width: "150px",
                margin: "10px"
            },
            serviceSelect: { //服务方向选择
                width: "100px"
            },
            submitButton: {
                className: "btn searchBtn",
                background: "#18b4a3",
                border: "0px",
                color: "#fff",
                cursor: "pointer",
                width: ".4583rem",
                height: ".1667rem",
                marginLeft: "15px"
            }
        };
        function createStyledElement(tagName, styles) {
            const element = document.createElement(tagName);
            Object.assign(element.style, styles); // 将 styles 对象中的属性和值复制到 element.style 对象
            return element;
        }
        const ActivityForm = document.querySelector("#app > section > section > main > div > div.navSelect");
        const newDiv = createStyledElement("div", styles.newDiv);
        // 创建表单元素
        const form = document.createElement("form");
        // 活动名称输入框
        const activityTitleInput = createStyledElement("input", styles.input);
        activityTitleInput.type = "text";
        activityTitleInput.value = "建工村社区开展";
        activityTitleInput.className = "el-input__inner"
        activityTitleInput.name = "activityTitle";
        activityTitleInput.placeholder = "活动名称";
        form.appendChild(activityTitleInput);
        // 活动时间选择器
        let now = new Date();
        const activityStartTimeSelect = createStyledElement("select", styles.dateSelect);
        activityStartTimeSelect.className = "el-input__inner"
        activityStartTimeSelect.name = "activityStartTime";
        activityStartTimeSelect.placeholder = "活动开始时间";
        // 生成当前日期及其前30天的10:00和14:00选项
        for (let i = 0; i <= 30; i++) {
            const date = new Date(now);
            date.setDate(now.getDate() - i);
            const year = date.getFullYear();
            const month = String(date.getMonth() + 1).padStart(2, '0');
            const day = String(date.getDate()).padStart(2, '0');
            const dateStr = `${year}-${month}-${day}`;
            const option1 = document.createElement("option");
            option1.value = `${dateStr} 10:00`;
            option1.textContent = `${dateStr} 10:00`;
            const option2 = document.createElement("option");
            option2.value = `${dateStr} 14:00`;
            option2.textContent = `${dateStr} 14:00`;
            activityStartTimeSelect.appendChild(option1);
            activityStartTimeSelect.appendChild(option2);
        }
        form.appendChild(activityStartTimeSelect);
        // 服务方向
        const activities = [
            { value: '9da78dfafb934cdeab788e5f83b6da43', textContent: '乡村振兴' },
            { value: '8c0bcd11a9c54ac88c714d4d417b5beb', textContent: '亲子互动' },
            { value: '7bd3b95bdcd24f34aaacb7e556a37c7b', textContent: '劳动实践' },
            { value: '4a233184bb8949329d2eac3a8c62aad5', textContent: '红色研学' },
            { value: '0cbf4b4397154c6ab34d400739d49437', textContent: '理论学习' },
            { value: '1747b3642cea45caa28ef38da41e70de', textContent: '理论宣传' },
            { value: '0689501c809041dbb937771e90140f48', textContent: '理论宣讲' },
            { value: 'jiaoyupeixun', textContent: '教育培训' },
            { value: 'huodongceihua', textContent: '活动策划' },
            { value: 'wenhuayishu', textContent: '文化艺术' },
            { value: 'shengtaihuanbao', textContent: '生态环保' },
            { value: 'shequfuwu', textContent: '社区服务' }
        ];
        const serviceContentSelect = createStyledElement("select", styles.serviceSelect);
        serviceContentSelect.className = "el-input__inner"
        serviceContentSelect.name = "serviceContent";
        activities.forEach(activity => {
            const option = document.createElement("option");
            option.value = activity.value;
            option.textContent = activity.textContent;
            serviceContentSelect.appendChild(option);
        });
        form.appendChild(serviceContentSelect);
        // 提交按钮
        const submitButton = createStyledElement("button", styles.submitButton);
        submitButton.type = "submit";
        submitButton.textContent = "提交";
        form.appendChild(submitButton);
        newDiv.appendChild(form);
        ActivityForm.appendChild(newDiv);

        // 监听表单提交事件
        form.addEventListener("submit", function (event) {
            event.preventDefault();
            if (activityTitleInput.value.length <= 7) {
                showMessage("活动名称太短啦~")
                return
            }
            let activityStartTime = activityStartTimeSelect.value;//2024-06-16 10:00
            let activityEndTime = formatTime(activityStartTime, 0, 1);
            const formData = {
                activityTitle: activityTitleInput.value,
                recruitStartTime: getRecruitTime(activityStartTime, 1),
                recruitEndTime: getRecruitTime(activityStartTime, 0),
                activityStartTime: activityStartTime,
                activityEndTime: activityEndTime,
                serviceContent: serviceContentSelect.value,
            };
            // 合并 formData 到 ReqBody
            const ReqBody = {
                ...formData,
                "activityProfile": formData.activityTitle,
                "contactPhone": "65126464",
                "publishOrganization": "c108032b4bf5467a86b7b1ac3ce2ff21",
                "requireUserCount": "40",
                "activityIntegral": "5",
                "activityRequire": "",
                "activityGuarantee": "",
                "activityPicture": "",
                "publishOrganizationType": 20,
                "activityAddress": "重庆市沙坪坝区重庆大学(B区)",
                "joinDistance": 5000,
                "mapCoordinate": "106.468165,29.573403",
                "serviceType": "",
                "status": 10
            };


            // 发送 fetch 请求
            fetch("https://cpcapi.cbg.cn/manageapi/volunteerActivity/add?_t=1719644928", {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                    "usertoken": localStorage.getItem("TOKEN"),
                },
                body: JSON.stringify(ReqBody),
            })
                .then(response => response.json())
                .then(data => {
                    if (data.msg == "成功") {
                        showMessage("提交成功")
                        activityTitleInput.value = ""
                    } else {
                        showMessage("提交失败")
                    }
                })
                .catch(error => {
                    showMessage("提交失败")
                });
        });

    }
    //录入人员模式
    if (mode == "录入人员模式" && window.location.href.includes("volunteerActivityList")) {
        const activitiesContainer = document.createElement("div");
        activitiesContainer.style.margin = "5px";
        activitiesContainer.style.fontSize = "20px";
        activitiesContainer.style.overflowY = "auto";
        activitiesContainer.style.maxHeight = "150px";
        // 请求志愿者未满的活动,并生成多选列表
        let allActivities = await getActivities();  //包含title、code
        allActivities.forEach(activity => {
            const checkbox = document.createElement('input');
            checkbox.type = 'checkbox';
            checkbox.id = `activity_${activity.id}`;
            checkbox.value = activity.activityCode;
            // checkbox.setAttribute('registUserCount', activity.registUserCount);
            // checkbox.setAttribute('requireUserCount', activity.requireUserCount);
            const label = document.createElement('label');
            label.textContent = activity.activityTitle;
            activitiesContainer.appendChild(checkbox);
            activitiesContainer.appendChild(label);
            activitiesContainer.appendChild(document.createElement('br')); // 换行
        });
        // 提交按钮/提示按钮
        const submitButton = document.createElement("button");
        submitButton.type = "submit";
        submitButton.style.height = ".1067rem"
        submitButton.style.background = "#18b4a3"
        submitButton.style.border = "0px"
        submitButton.style.color = "#fff"
        submitButton.style.marginLeft = "15px";
        if (allActivities.length > 0) {
            submitButton.style.width = ".4083rem"
            submitButton.style.cursor = "pointer"
            submitButton.textContent = "提交";
            let allVoluntees = await getAllVoluntees(); //请求所有志愿者信息
            submitButton.addEventListener('click', async () => {
                const selectedItems = [];
                // 收集选中的活动代码
                allActivities.forEach(activity => {
                    const checkbox = document.getElementById(`activity_${activity.id}`);
                    if (checkbox.checked) {
                        selectedItems.push({ "code": activity.activityCode, "need": activity.requireUserCount - activity.registUserCount });
                    }
                });
                selectedItems.forEach(selectedItem => {
                    addVoluntees(selectedItem.code, r40tees(allVoluntees, selectedItem.need)) //每个活动的需要不同的40志愿者
                })
            });
        } else {
            submitButton.style.width = ".6083rem"
            submitButton.textContent = "暂无活动可补录";
        }
        activitiesContainer.appendChild(submitButton)
        const footer = document.querySelector("#app > section > section > main > div > div.pageList")
        footer.style.height = "200px"
        footer.appendChild(activitiesContainer)
    }


    if (mode == "审核模式" && window.location.href.includes("volunteerActivityUserList")) {

        let navBar = document.querySelector(".volunteerList>.navBar")
        let allSelect = document.querySelector("table>thead>tr>th>div>label")
        let batchPass = document.querySelector(".volunteerList>.navBar>div>div:nth-child(1)")
        let batchRefuse = document.querySelector(".volunteerList>.navBar>div>div:nth-child(2)")
        // let confirmBtn = document.querySelector("body > div.el-message-box__wrapper > div > div.el-message-box__btns > button.el-button.el-button--default.el-button--small.el-button--primary")
        let startDiv = document.createElement("button")
        startDiv.className = "itemBtn icon"
        startDiv.style.height = ".3067rem"
        startDiv.style.background = "#18b4a3"
        startDiv.style.color = "#fff"
        startDiv.textContent = "开始审核"
        startDiv.addEventListener("click", function () {
            setTimeout(async () => {
                for (let i = 0; i < 120; i++) {
                    try {
                        await allSelect.click();
                        await new Promise(resolve => setTimeout(resolve, 600));
                        await batchPass.click();
                        // await batchRefuse.click();
                        await new Promise(resolve => setTimeout(resolve, 600));
                        let allButtons = document.querySelectorAll('button');
                        let confirmBtn = Array.from(allButtons).find(btn => btn.textContent.trim() === '确定');
                        confirmBtn.click();
                        await new Promise(resolve => setTimeout(resolve, 2500));
                    } catch (err) {
                        console.error(`第 ${i + 1} 次审核成员时出错:`, err);

                    }
                }
            }, 100)
        })
        navBar.appendChild(startDiv)
        // 搭配python脚本一起使用
        // import pyautogui
        // import time

        // # 设置要点击的屏幕坐标
        // x, y = 1836, 436  # 请根据实际情况修改坐标
        // a, b = 1128, 636

        // time.sleep(2)
        // for i in range(1, 20):  # 连续点击10次
        //     pyautogui.click(x, y)
        //     time.sleep(1.6)
        //     pyautogui.click(a, b)
        //     time.sleep(1)


    }
    if (mode == "补录模式" && window.location.href.includes("volunteerActivityList")) {
        let supplementalBtn = document.createElement("button")
        supplementalBtn.textContent = "一键补录"
        supplementalBtn.type = "submit"
        supplementalBtn.classList.add("item", "btn")
        // 将样式属性应用到按钮上
        supplementalBtn.style.background = "#18b4a3";
        supplementalBtn.style.border = "0px";
        supplementalBtn.style.color = "#fff";
        supplementalBtn.style.cursor = "pointer";
        supplementalBtn.style.width = ".4583rem";
        supplementalBtn.style.height = ".1667rem";
        supplementalBtn.style.marginLeft = "15px";

        supplementalBtn.addEventListener("click", function () {
            lastStep()
        })
        document.querySelector("#app>section>section>main>div>div.navSelect").appendChild(supplementalBtn)
    }

    if (mode == "审核补录" && window.location.href.includes("activityPunchTheClock")){
        let navBar = document.querySelector("div.navBar >div.itemList")
        let allSelect = document.querySelector(".volunteerForm table>thead>tr>th>div>label");
        let batchPass = document.querySelector("div.itemList>div:nth-child(2)");
        let startDiv = document.createElement("button")
        
        startDiv.className = "itemBtn icon"
        let styleText = `
            font-weight: 400;
            text-align: left;
            font-size: 12px;
            font-family: Avenir, Helvetica, Arial, sans-serif;
            -webkit-font-smoothing: antialiased;
            -webkit-box-orient: horizontal;
            -webkit-box-direction: normal;
            flex-direction: row;
            height: 0.2083rem;
            width: 0.5208rem;
            display: flex;
            -webkit-box-align: center;
            align-items: center;
            -webkit-box-pack: center;
            justify-content: center;
            color: rgb(255, 255, 255);
            background-color: rgb(24, 180, 163);
            margin-left: 10px;
            `;
        startDiv.style.cssText = styleText;


        startDiv.textContent = "开始审核"
        startDiv.addEventListener("click", function () {
            setTimeout(async () => {
                for (let i = 0; i < 120; i++) {
                    try {
                        await allSelect.click();
                        await new Promise(resolve => setTimeout(resolve, 600));
                        await batchPass.click();
                        // await batchRefuse.click();
                        await new Promise(resolve => setTimeout(resolve, 600));
                        let allButtons = document.querySelectorAll('button');
                        let confirmBtn = Array.from(allButtons).find(btn => btn.textContent.trim() === '确定');
                        confirmBtn.click();
                        await new Promise(resolve => setTimeout(resolve, 2500));
                    } catch (err) {
                        console.error(`第 ${i + 1} 次审核成员时出错:`, err);
                    }
                }
            }, 100)
        })
        navBar.appendChild(startDiv)

    }

    function waitSeconds(sec = 3) {
        return new Promise(resolve => {
            setTimeout(() => {
                resolve();
            }, sec * 1000);
        });
    }

    // 请求某一活动需要补录的人员信息
    async function getSupplemental(actvtCode) {
        const volunteerCodeParams = {
            _t: Date.now().toString().substring(0, 10),
            activityCode: actvtCode,
            status: 20
        }
        const urlParams = new URLSearchParams(volunteerCodeParams).toString()
        const response = await fetch(`https://cpcapi.cbg.cn/manageapi/volunteerActivityUser/all?${urlParams}`, {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5",
                "cache-control": "no-cache",
                "pragma": "no-cache",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\", \"Microsoft Edge\";v=\"132\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": null,
            "method": "GET",
            "mode": "cors",
            "credentials": "include"
        });
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        let volunteers;
        if (res.code === 1000) {
            volunteers = res.data.map(item => item.volunteerUser)
        } else {
            showMessage("获取志愿者信息失败!")
        }
        return volunteers
    }

    // 请求活动时间信息
    // 返回活动的招募、开始的开始结束时间和活动id
    async function getActivityInfo(actvtCode) {
        const p = {
            _t: Date.now().toString().substring(0, 10),
            activityCode: actvtCode,
            activityStatus: 50,
        }
        let urlp = new URLSearchParams(p).toString()
        const response = await fetch(`https://cpcapi.cbg.cn/manageapi/volunteerActivity/all?${urlp}`, {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5",
                "cache-control": "no-cache",
                "pragma": "no-cache",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\", \"Microsoft Edge\";v=\"132\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": null,
            "method": "GET",
            "mode": "cors",
            "credentials": "include"
        });
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        if (res.code == 1000) {
            return {
                recruitStartTime: res.data[0].recruitStartTime,
                recruitEndTime: res.data[0].recruitEndTime,
                activityStartTime: res.data[0].activityStartTime,
                activityEndTime: res.data[0].activityEndTime,
                activityCode: res.data[0].activityCode
            };
        } else {
            showMessage("请求活动信息失败")
            console.log("请求活动信息失败:", res)
        }
    }
    // 发送补录请求
    async function postSupplemental(actvtCode) {
        // 包含活动时间信息
        let actvtInfo = await getActivityInfo(actvtCode)
        await waitSeconds(3)
        // 包含这个活动的录入志愿者列表
        let vluntrInfo = await getSupplemental(actvtCode)
        const pa = {
            "activityCode": actvtCode,
            "areaCode": "24e61de1dd254f6f821a0cc2217caa4a",
            "integral": 10,
            "joinActivityTime": actvtInfo.recruitStartTime,
            "punchStartTime": actvtInfo.activityStartTime,
            "punchEndTime": actvtInfo.activityEndTime,
            "punchTimeLength": 7200,
            "volunteerUserCode": vluntrInfo
        }
        const response = await fetch("https://cpcapi.cbg.cn/manageapi/volunteerActivitySup/add?_t=1737863006", {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5",
                "cache-control": "no-cache",
                "content-type": "application/json",
                "pragma": "no-cache",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not A(Brand\";v=\"8\", \"Chromium\";v=\"132\", \"Microsoft Edge\";v=\"132\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": JSON.stringify(pa),
            "method": "POST",
            "mode": "cors",
            "credentials": "include"
        });
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        if (res.code == 1000) {
            showMessage("补录成功")
        } else {
            showMessage("补录失败")
            console.log("补录失败", res)
        }
    }

    // 最后一步!批量补录某些活动的志愿者时长
    // async function lastStep() {
    //     // 已经录入完成的活动
    //     // enter=1:获取已经录入完成的活动
    //     let activities = await getActivities(1, 1, 5)
    //     try {
    //         let results = await Promise.all(activities.map(item => postSupplemental(item.activityCode)));
    //         console.log('所有补录请求结束', results);
    //     } catch (error) {
    //         console.error('补录请求过程中发生错误', error);
    //     }
    // }
    // 最后一步!批量补录某些活动的志愿者时长
    async function lastStep() {
        const totalActivities = 30; // 总共需要处理的活动数量
        const pageSize = 5; // 每页大小
        const totalPages = Math.ceil(totalActivities / pageSize); // 计算总页数
        for (let page = 1; page <= totalPages; page++) {
            try {
                let activities = await getActivities(1, page, pageSize);
                if (activities.length === 0) {
                    showMessage(`第 ${page} 页没有更多活动,提前结束`);
                    break;
                }
                let results = await Promise.all(activities.map(item => postSupplemental(item.activityCode)));
                showMessage(`第 ${page} 页补录请求结束`);
                console.log(results)
            } catch (error) {
                showMessage(`第 ${page} 页补录请求过程中发生错误`);
            }
            await waitSeconds(4)
        }
    }



    //请求活动信息:获取录入人员未满的活动code
    async function getActivities(enter = 0, pn = 1, ps = 30) {
        // enter=0:获取已经未录入完成的活动
        // enter=1:获取已经录入完成的活动,用于补录
        // pn,pageNumber,第几页;ps:pageSize,每页大小
        const response = await fetch(`https://cpcapi.cbg.cn/manageapi/volunteerActivity/list?_t=1719818494&pageNumber=${pn}&pageSize=${ps}&status=20`, {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": null,
            "method": "GET",
            "mode": "cors",
            "credentials": "omit"
        })
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        if (res.msg != "成功") {
            showMessage("获取活动信息失败");
            return;
        }
        let allRes = res.data.result;
        if (enter) {
            // 获取已经录入完成的活动,用于补录
            allRes = allRes.filter(item => item.registUserCount == item.requireUserCount);
        } else {
            //默认支线
            allRes = allRes.filter(item => item.registUserCount < item.requireUserCount || !item.registUserCount);
        }
        return allRes;
    }
    //请求志愿者信息
    async function getAllVoluntees() {
        const response = await fetch("https://cpcapi.cbg.cn/manageapi/volunteerTeamUser/list?_t=1719816537&pageNumber=1&pageSize=9999&teamCode=3dabbfb2abc54138bcc3ecc72ba70a02&status=20&areaCode=49bc0e0716b54a60b693e790b56c472b", {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": null,
            "method": "GET",
            "mode": "cors",
            "credentials": "omit"
        })
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        if (res.msg != "成功") {
            showMessage("获取志愿者信息失败")
            return
        }
        return res.data.result
    }
    function r40tees(allVoluntees, need = 40) {
        let randomIndices = new Set();
        while (randomIndices.size < need) {
            let randomIndex = Math.floor(Math.random() * allVoluntees.length);
            randomIndices.add(randomIndex);
        }
        let rIndices = Array.from(randomIndices)
        let volunteerUsers = rIndices.map(index => allVoluntees[index].volunteerUser);  //随机40个志愿者id
        return volunteerUsers;
    }
    //补录志愿者信息
    async function addVoluntees(activityCode, volunteerUsers) {
        let reqBody = {
            "activityCode": activityCode,
            "volunteerUsers": volunteerUsers
        }
        const response = await fetch("https://cpcapi.cbg.cn/manageapi/volunteerActivityUser/batchAdd?_t=1719816951", {
            "headers": {
                "accept": "application/json, text/plain, */*",
                "accept-language": "zh-CN,zh;q=0.9",
                "content-type": "application/json",
                "priority": "u=1, i",
                "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
                "sec-ch-ua-mobile": "?0",
                "sec-ch-ua-platform": "\"Windows\"",
                "sec-fetch-dest": "empty",
                "sec-fetch-mode": "cors",
                "sec-fetch-site": "same-origin",
                "usertoken": localStorage.getItem("TOKEN")
            },
            "referrer": "https://cpcapi.cbg.cn/newEraPlatform/",
            "referrerPolicy": "strict-origin-when-cross-origin",
            "body": JSON.stringify(reqBody),
            "method": "POST",
            "mode": "cors",
            "credentials": "omit"
        });
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        const res = await response.json();
        if (res.msg != "成功") {
            showMessage("志愿者补录失败")
            return
        }
        showMessage("志愿者补录成功")
    }
    function formatTime(AST, day = 0, hour = 0) {
        AST = new Date(AST);
        let resTime;
        if (day) {
            // 增加1天
            let nextDate = new Date(AST.getTime());
            nextDate.setDate(AST.getDate() + 1);
            resTime = `${nextDate.getFullYear()}-${pad(nextDate.getMonth() + 1)}-${pad(nextDate.getDate())} ${pad(AST.getHours())}:${pad(AST.getMinutes())}`;
        } else if (hour) {
            // 增加2小时
            let nextHour = new Date(AST.getTime());
            nextHour.setHours(AST.getHours() + 2);
            resTime = `${nextHour.getFullYear()}-${pad(nextHour.getMonth() + 1)}-${pad(nextHour.getDate())} ${pad(nextHour.getHours())}:${pad(AST.getMinutes())}`;
        } else {
            // 没有增加
            resTime = `${AST.getFullYear()}-${pad(AST.getMonth() + 1)}-${pad(AST.getDate())} ${pad(AST.getHours())}:${pad(AST.getMinutes())}`;
        }
        return resTime;
    }
    function getRecruitTime(AST, start = 0) {
        AST = new Date(AST);
        let resTime = new Date(AST.getTime());
        if (resTime.getHours() == 10) { //上午
            resTime.setHours(9)
        } else { //下午
            resTime.setHours(12)
        }
        if (start) {
            resTime.setDate(resTime.getDate() - 1);//前一天开始招募
        }
        return formatTime(resTime); //招募结束日期即活动日期
    }
    function pad(number) {
        if (number < 10) {
            return '0' + number;
        }
        return number;
    }
    let messageBox = null;
    function showMessage(text) {
        if (messageBox) {
            document.body.removeChild(messageBox);
        }
        messageBox = document.createElement('div');
        messageBox.textContent = text;
        messageBox.style.cssText = `
        position: fixed;
        top: 10px;
        left: 50%;
        transform: translateX(-50%);
        background-color: rgba(0, 0, 0, 0.8);
        color: white;
        padding: 10px 20px;
        border-radius: 5px;
        z-index: 9999;
    `;
        document.body.appendChild(messageBox);
        setTimeout(() => {
            document.body.removeChild(messageBox);
            messageBox = null; // 释放引用,准备下一次使用
        }, 4000); // 4 seconds
    }
})();

QingJ © 2025

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