您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
可以自定义开始结束时间查询 银行卡收益,支付宝收益
// ==UserScript== // @name Buff显示支付宝汇总余额 // @namespace http://tampermonkey.net/ // @version 2024-08-08 // @description 可以自定义开始结束时间查询 银行卡收益,支付宝收益 // @author [email protected] // @match https://buff.163.com/user-center/asset/ // @match https://buff.163.com/user-center/asset/recharge/ // @match https://buff.163.com/user-center/asset/withdraw/ // @icon https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQjqFRDuBB24QeFyeIV8LAuabCvoz2d1vIFZD4h15NgIEKPFodEdoxmfxu_cQ&s // @grant GM.xmlHttpRequest // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @license MIT // ==/UserScript== GM_addStyle( `.my-popup{width:200px;display:none;position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background-color:white;padding:20px;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,0.5);z-index:1000;}.my-popup input{display:block;width:100%;margin-bottom:10px;padding:8px 0;border:1px solid #ccc;border-radius:3px;}.my-popup button{padding:8px 16px;background-color:#4CAF50;color:white;border:none;border-radius:3px;cursor:pointer;}` ); (function () { "use strict"; function delay(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } ////增加了支付宝余额和银行卡余额,原来的位置不够了,所以宽度改成自动 let cols = document.querySelectorAll(".user-header .col"); cols.forEach((col) => { col.style.width = "auto"; }); /**创建余额dom */ function createBalanceDom({ title, description, dom_id }) { let div = `<div class=col style=border:0><div class=info><div class=f_12px style=margin-bottom:6px>${title} <a class=j_tips_handler data-content=${description} data-direction=right data-title=设置 href=javascript:; id=${dom_id}_config><i class="icon icon_menu icon_menu_setting"></i></a></div><div style=margin-top:4px><strong class="f_18px f_Strong"id=${dom_id}_amount style=color:#4886ff>加载中...</strong></div></div></div> `; let dom = document.createElement("div"); dom.innerHTML = div; return dom; } function createConfigDialogDom({ tag }) { let popup = document.createElement("div"); popup.classList.add("my-popup"); popup.innerHTML = `开始日期: <input type="date" id="btn_${tag}_config_start" placeholder="开始日期">结束日期: <input type="date" id="btn_${tag}_config_end" placeholder="结束日期"><button id="btn-${tag}-save">保存</button> `; // 点击div显示弹框 document .getElementById(`btn_${tag}_config`) .addEventListener("click", function () { popup.style.display = "block"; }); // 保存按钮点击事件 popup.addEventListener("click", function (event) { if (event.target.id === `btn-${tag}-save`) { // 获取输入框的值 let value1 = document.getElementById(`btn_${tag}_config_start`).value; let value2 = document.getElementById(`btn_${tag}_config_end`).value; // 保存到本地存储 GM_setValue(`btn_${tag}_config_start`, value1 + " 00:00:00"); GM_setValue(`btn_${tag}_config_end`, value2 + " 23:59:59"); // 关闭弹框 popup.style.display = "none"; } }); return popup; } /** 初始化支付宝余额模块 */ function initZFB() { let zfb_dom = createBalanceDom({ title: "余额-支付宝", description: "设置指定时间段的支付宝余额汇总,提示作用", dom_id: "btn_zfb", }); document.querySelector(".user-header > div").appendChild(zfb_dom); function initDialogZfb() { let popup = createConfigDialogDom({ tag: "zfb" }); popup.addEventListener("click", () => { fetchAllPageData(); }); // 将弹框添加到页面 document.body.appendChild(popup); let value1 = GM_getValue("btn_zfb_config_start"); let value2 = GM_getValue("btn_zfb_config_end"); if (value1) { document.getElementById("btn_zfb_config_start").value = value1.replace( " 00:00:00", "" ); } if (value2) { document.getElementById("btn_zfb_config_end").value = value2.replace( " 23:59:59", "" ); } } function fetchAllPageData() { let currentPage = 1; let totalPages = 1; let allData = []; document.getElementById("btn_zfb_amount").innerText = "加载中..."; async function fetchPageData() { let btn_zfb_config_start = GM_getValue("btn_zfb_config_start"); let btn_zfb_config_end = GM_getValue("btn_zfb_config_end"); let params = { page_num: currentPage, pay_category: "alipay_zft", log_category: "sell", start_time: new Date(btn_zfb_config_start).getTime() / 1000, end_time: new Date(btn_zfb_config_end).getTime() / 1000, _: Date.now(), }; try { const response = await new Promise((resolve, reject) => { GM.xmlHttpRequest({ method: "GET", url: `https://buff.163.com/api/asset/settle/log/?page_num=${params.page_num}&pay_category=${params.pay_category}&log_category=${params.log_category}&start_time=${params.start_time}&end_time=${params.end_time}&_=${params._}`, onload: (response) => resolve(response), onerror: (error) => reject(error), }); }); const data = JSON.parse(response.responseText); if (Array.isArray(data?.data?.items)) { data.data.items.forEach((item) => { allData.push(item); }); } totalPages = data?.data?.total_page || 0; if (currentPage < totalPages) { currentPage++; await delay(4000); await fetchPageData(); // 递归调用 } else { // 所有数据获取完成 console.log("所有收入:", allData); const totalAmount = allData.reduce((acc, item) => { return acc + parseFloat(item.amount); }, 0); document.getElementById("btn_zfb_amount").innerText = "¥" + totalAmount.toFixed(2); } } catch (error) { console.error("请求失败:", error); } } fetchPageData(); } initDialogZfb(); fetchAllPageData(); } /** 初始化银行卡余额模块 */ function initBank() { let bank_dom = createBalanceDom({ title: "余额-银行卡", description: "设置指定时间段的银行卡余额汇总,提示作用", dom_id: "btn_bank", }); document.querySelector(".user-header > div").appendChild(bank_dom); function fetchAllPageData() { let currentPage = 1; let totalPages = 1; let allData = []; document.getElementById("btn_bank_amount").innerText = "加载中..."; async function fetchPageData() { let btn_bank_config_start = GM_getValue("btn_bank_config_start"); let btn_bank_config_end = GM_getValue("btn_bank_config_end"); let param = { page_num: currentPage, pay_category: "epay", log_category: "sell", start_time: new Date(btn_bank_config_start).getTime() / 1000, end_time: new Date(btn_bank_config_end).getTime() / 1000, _: Date.now(), }; console.log("buff-银行卡列表接口参数:", param); try { const response = await new Promise((resolve, reject) => { GM.xmlHttpRequest({ method: "GET", url: `https://buff.163.com/api/asset/flow/log/?page_num=${param.page_num}&pay_category=epay&log_category=sell&start_time=${param.start_time}&end_time=${param.end_time}&_=${param._}`, onload: (response) => resolve(response), onerror: (error) => reject(error), }); }); const data = JSON.parse(response.responseText); if (Array.isArray(data?.data?.items)) { data.data.items.forEach((item) => { allData.push(item); }); } totalPages = data?.data?.total_page || 0; if (currentPage < totalPages) { currentPage++; await delay(4000); await fetchPageData(); // 递归调用 } else { // 所有数据获取完成 console.log("所有收入:", allData); const totalAmount = allData.reduce((acc, item) => { return acc + parseFloat(item.cash_amount_diff); }, 0); document.getElementById("btn_bank_amount").innerText = "¥" + totalAmount.toFixed(2); } } catch (error) { console.error("请求失败:", error); } } fetchPageData(); } let popup = createConfigDialogDom({ tag: "bank" }); popup.addEventListener("click", () => { fetchAllPageData(); }); // 将弹框添加到页面 document.body.appendChild(popup); // 将弹框添加到页面 document.body.appendChild(popup); let value1 = GM_getValue("btn_bank_config_start"); let value2 = GM_getValue("btn_bank_config_end"); if (value1) { document.getElementById("btn_bank_config_start").value = value1.replace( " 00:00:00", "" ); } if (value2) { document.getElementById("btn_bank_config_end").value = value2.replace( " 23:59:59", "" ); } fetchAllPageData(); } initZFB(); initBank(); })();