您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
此脚本为简化她的工作流程而设计。
// ==UserScript== // @name cpcapi // @namespace https://bbs.tampermonkey.net.cn/ // @version 10 // @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: "审核补录" }, { 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: '0689501c809041dbb937771e90140f48', textContent: '理论宣讲' }, { value: '1747b3642cea45caa28ef38da41e70de', textContent: '理论宣传' }, { value: '9da78dfafb934cdeab788e5f83b6da43', textContent: '乡村振兴' }, { value: '8c0bcd11a9c54ac88c714d4d417b5beb', textContent: '亲子互动' }, { value: '7bd3b95bdcd24f34aaacb7e556a37c7b', textContent: '劳动实践' }, { value: '4a233184bb8949329d2eac3a8c62aad5', textContent: '红色研学' }, { value: '0cbf4b4397154c6ab34d400739d49437', 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, 1000)); } catch (err) { console.error(`第 ${i + 1} 次审核成员时出错:`, err); } } }, 100) }) navBar.appendChild(startDiv) } 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) } if (mode === "定向补录") { // 创建控制面板 createControlPanel(); function createControlPanel() { // 主容器 const panel = document.createElement('div'); panel.style.cssText = ` position: fixed; top: 20px; right: 20px; width: 350px; background: white; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 9999; padding: 15px; font-family: Arial, sans-serif; `; // 标题 const title = document.createElement('h3'); title.textContent = '志愿者批量添加工具'; title.style.cssText = 'margin-top: 0; color: #333; border-bottom: 1px solid #eee; padding-bottom: 10px;'; panel.appendChild(title); // 姓名输入区域 const namesLabel = document.createElement('label'); namesLabel.textContent = '志愿者姓名列表(每行一个)'; namesLabel.style.cssText = 'display: block; margin-bottom: 5px; font-weight: bold;'; panel.appendChild(namesLabel); const namesTextarea = document.createElement('textarea'); namesTextarea.id = 'volunteerNames'; namesTextarea.style.cssText = 'width: 100%; height: 120px; margin-bottom: 15px; padding: 8px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box;'; panel.appendChild(namesTextarea); // 活动代码输入 const activityLabel = document.createElement('label'); activityLabel.textContent = '活动代码'; activityLabel.style.cssText = 'display: block; margin-bottom: 5px; font-weight: bold;'; panel.appendChild(activityLabel); const activityInput = document.createElement('input'); activityInput.id = 'activityCode'; activityInput.type = 'text'; activityInput.style.cssText = 'width: 100%; margin-bottom: 15px; padding: 8px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box;'; panel.appendChild(activityInput); // 状态显示区域 const statusDiv = document.createElement('div'); statusDiv.id = 'statusDisplay'; statusDiv.style.cssText = 'margin: 10px 0; min-height: 30px; color: #666;'; panel.appendChild(statusDiv); // 按钮区域 const buttonContainer = document.createElement('div'); buttonContainer.style.cssText = 'display: flex; gap: 10px;'; const startButton = document.createElement('button'); startButton.textContent = '开始处理'; startButton.style.cssText = 'flex: 1; padding: 8px 15px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer;'; startButton.addEventListener('click', processVolunteers); buttonContainer.appendChild(startButton); const closeButton = document.createElement('button'); closeButton.textContent = '关闭'; closeButton.style.cssText = 'flex: 0 0 60px; padding: 8px 15px; background-color: #f44336; color: white; border: none; border-radius: 4px; cursor: pointer;'; closeButton.addEventListener('click', () => panel.remove()); buttonContainer.appendChild(closeButton); panel.appendChild(buttonContainer); // 添加到页面 document.body.appendChild(panel); } async function processVolunteers() { const namesText = document.getElementById('volunteerNames').value.trim(); const activityCode = document.getElementById('activityCode').value.trim(); const statusDisplay = document.getElementById('statusDisplay'); // 验证输入 if (!namesText) { showMessage('请输入志愿者姓名列表'); return; } if (!activityCode) { showMessage('请输入活动代码'); return; } const namesToSearch = namesText.split('\n').map(name => name.trim()).filter(name => name); if (namesToSearch.length === 0) { showMessage('没有有效的志愿者姓名'); return; } // 更新状态 statusDisplay.innerHTML = `准备处理 <strong>${namesToSearch.length}</strong> 名志愿者...`; // 固定参数 const areaCode = "49bc0e0716b54a60b693e790b56c472b"; const captchaToken = ""; const userToken = ""; // 基础URL const baseUrl = "https://cpcapi.cbg.cn/manageapi"; // 生成时间戳参数 function getTimestampParam() { return `_t=${Math.floor(Date.now() / 1000)}`; } // 搜索志愿者 async function searchVolunteer(name) { updateStatus(`正在搜索: ${name}`); const url = `${baseUrl}/volunteerUser/all?${getTimestampParam()}&name=${encodeURIComponent(name)}&status=20&areaCode=${areaCode}`; try { const response = await fetch(url, { 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", "captchatoken": captchaToken, "pragma": "no-cache", "sec-ch-ua": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Microsoft Edge\";v=\"138\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Linux\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "usertoken": userToken }, 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(`HTTP error! status: ${response.status}`); } const data = await response.json(); if (data.code === 1000 && data.data && data.data.length > 0) { return data.data[0]; } showMessage(`未找到名为 ${name} 的志愿者`); return null; } catch (error) { console.error(`搜索志愿者 ${name} 时出错:`, error); showMessage(`搜索志愿者 ${name} 时出错: ${error.message}`); return null; } } // 批量添加志愿者到活动 async function batchAddVolunteers(volunteerCodes) { updateStatus(`准备添加 ${volunteerCodes.length} 名志愿者到活动`); const url = `${baseUrl}/volunteerActivityUser/batchAdd?${getTimestampParam()}`; try { const response = await fetch(url, { 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", "captchatoken": captchaToken, "content-type": "application/json", "pragma": "no-cache", "sec-ch-ua": "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Microsoft Edge\";v=\"138\"", "sec-ch-ua-mobile": "?0", "sec-ch-ua-platform": "\"Linux\"", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "usertoken": userToken }, referrer: "https://cpcapi.cbg.cn/newEraPlatform/", referrerPolicy: "strict-origin-when-cross-origin", body: JSON.stringify({ "activityCode": activityCode, "volunteerUsers": volunteerCodes }), method: "POST", mode: "cors", credentials: "omit" }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); if (data.code === 1000) { showMessage(`成功添加 ${volunteerCodes.length} 名志愿者到活动`); return data; } else { showMessage(`添加志愿者失败: ${data.msg}`); return null; } } catch (error) { console.error("批量添加志愿者时出错:", error); showMessage(`批量添加志愿者时出错: ${error.message}`); return null; } } function updateStatus(message) { statusDisplay.innerHTML += `<div>${message}</div>`; // 滚动到底部 statusDisplay.scrollTop = statusDisplay.scrollHeight; } // 主处理逻辑 const validVolunteers = []; // 逐个搜索志愿者 for (const name of namesToSearch) { const volunteer = await searchVolunteer(name); if (volunteer) { updateStatus(`找到志愿者: ${volunteer.name}, 志愿者编号: ${volunteer.volunteerCode}`); validVolunteers.push(volunteer); } } if (validVolunteers.length > 0) { // 提取志愿者编号 const volunteerCodes = validVolunteers.map(v => v.volunteerCode); // 批量添加到活动 await batchAddVolunteers(volunteerCodes); } else { showMessage("没有找到任何有效的志愿者"); } } } 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或关注我们的公众号极客氢云获取最新地址