您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
try to take over the world!
当前为
// ==UserScript== // @name ACGN-stock營利統計外掛 // @namespace http://tampermonkey.net/ // @version 2.603 // @description try to take over the world! // @author SoftwareSing // @match http://acgn-stock.com/* // @match https://acgn-stock.com/* // @grant none // ==/UserScript== //版本號為'主要版本號 + "." + 次要版本號 + 錯誤修正版本號(兩位),ex 1.801 //修復導致功能失效的錯誤或更新重大功能提升主要或次要版本號 //優化UI,優化效能,優化小錯誤更新錯誤版本號 //兩個錯誤修正版本號防止迫不得已進位到次要版本號 //本腳本修改自 "ACGN股票系統每股營利外掛 2.200 by papago89" var wasCompany, wasStockSummary, wasaccountInfo, wasfoundationPlan, oldUrl; // 程式進入點 (function mainfunction() { //設定狀態 checkSeriousError(); //設定狀態 wasCompany = (document.location.href.search(/company\/detail/) != -1); wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1); wasAccountInfo = (document.location.href.search(/accountInfo/) != -1); wasFoundationPlan = document.location.href.search(/foundation/) != -1; oldUrl = document.location.href; //針對現在的頁面做反應 if(wasCompany) setTimeout(addCompanyEvent, 1000); else if(wasStockSummary) setTimeout(addSSEvent, 1000); // StockSummary else if(wasAccountInfo) setTimeout(addAIEvent, 1000); // AccountInfo else if(wasFoundationPlan) setTimeout(addFPEvent, 1000); // FoundationPlan //全域事件 setTimeout(addEvent, 5000); checkDividendUpdateTime(); setTimeout(checkScriptEvent, 500); setTimeout(addAD, 2000); })(); function addCompanyEvent() { //公司細節頁面 setTimeout(addCompanyClickListener, 1000); } function addAIEvent() { //帳號資訊頁面 setTimeout(addManagerSalaryInfo, 1500); setTimeout(callAddUserProfitInfo, 2500); } function addSSEvent() { //公司總覽頁面 setTimeout(addStockSummaryListener, 1000); } function addFPEvent() { //新創公司頁面 } // 監測main的變化並判斷當前屬於哪個頁面加入正確的事件監聽 function addEvent() { $('#main').bind("DOMNodeInserted DOMNodeRemoved", function(){ // 因AJAX動態生成不斷執行,所以有時候main的變動並不代表換頁,此時無須重新加入事件 if(oldUrl != document.location.href && document.location.href.search(/company\/detail/) != -1) setTimeout(addCompanyEvent, 1000); else if(oldUrl != document.location.href && document.location.href.search(/company\/[0-9]+/) != -1) setTimeout(addSSEvent, 1000); else if(oldUrl != document.location.href && document.location.href.search(/accountInfo/) != -1) setTimeout(addAIEvent, 1000); else if(oldUrl != document.location.href && document.location.href.search(/foundation/) != -1) setTimeout(addFPEvent, 1000); wasCompany = (document.location.href.search(/company\/detail/) != -1); wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1); wasAccountInfo = (document.location.href.search(/accountInfo/) != -1); wasFoundationPlan = document.location.href.search(/foundation/) != -1; oldUrl = document.location.href; }); } function checkSeriousError() { //這個function將會清空所有由本插件控制的localStorage //用於如果上一版發生嚴重錯誤導致localStorage錯亂,以致插件無法正常啟動時 //或是用於當插件更新時,需要重設localStorage var seriousErrorVersion = 2.601; //seriousErrorVersion會輸入有問題的版本號,當發生問題時我會增加本數字,或是於更新需要時亦會增加 //使用者本地的數字紀錄如果小於這個數字將會清空所有localStorage var lastErrorVersion = 0 !== window.localStorage.getItem ("lastErrorVersion") ? Number(JSON.parse(window.localStorage.getItem ("lastErrorVersion"))) : 0; //lastErrorVersion = 0; //你如果覺得現在就有問題 可以把這行的註解取消掉來清空localStorage console.log(Number.isInteger(lastErrorVersion)); console.log(lastErrorVersion); if (Number.isNaN(lastErrorVersion)) { lastErrorVersion = 0; console.log("reset lastErrorVersion as 0"); } else { console.log("localStorage of lastErrorVersion is work"); } if (lastErrorVersion < seriousErrorVersion) { console.log("last version has serious error, start remove all localStorage"); window.localStorage.removeItem ("Dividend_UpdateTime"); window.localStorage.removeItem ("Dividend"); window.localStorage.removeItem ("lastErrorVersion"); lastErrorVersion = seriousErrorVersion; window.localStorage.setItem ("lastErrorVersion", JSON.stringify(lastErrorVersion)); } } function get_abcd1357_JsonObj() { var request = new XMLHttpRequest(); request.open("GET", "https://jsonbin.org/abcd1357/ACGNstock-company", false); // 連線 POST到該連線位址 request.send(); abcd1357_jsonObj = JSON.parse(request.responseText); } function checkDividendUpdateTime() { get_abcd1357_JsonObj(); //window.localStorage.removeItem ("Dividend_UpdateTime"); var Dividend_UpdateTime = null !== window.localStorage.getItem ("Dividend_UpdateTime") ? JSON.parse(window.localStorage.getItem ("Dividend_UpdateTime")) : "null"; if (abcd1357_jsonObj.updateTime === Dividend_UpdateTime) { console.log("dont need update " + Dividend_UpdateTime); } else { console.log("server update time: " + abcd1357_jsonObj.updateTime); console.log("local update time: " + Dividend_UpdateTime); console.log("start update data"); updateDividendData(); } } function updateDividendData() { get_abcd1357_JsonObj(); var Dividends = []; //console.log(abcd1357_jsonObj.companys[0].companyID); //console.log(abcd1357_jsonObj.companys[0].companyDividend); for (var n in abcd1357_jsonObj.companys) { Dividends.push({"companyID": String(abcd1357_jsonObj.companys[n].companyID), "companyDividend": String(abcd1357_jsonObj.companys[n].companyDividend), "companyPrice": String(abcd1357_jsonObj.companys[n].companyPrice), "companyStock": String(abcd1357_jsonObj.companys[n].companyStock) }); //console.log("push success"); } window.localStorage.setItem ("Dividend", JSON.stringify(Dividends)); if (abcd1357_jsonObj.updateTime === null) { window.localStorage.setItem ("Dividend_UpdateTime", JSON.stringify("no data")); } else { window.localStorage.setItem ("Dividend_UpdateTime", JSON.stringify(abcd1357_jsonObj.updateTime)); } console.log("Dividend Cookie Update Success!!"); } /************UpdateScript*************/ function checkScriptEvent() { var myVersion = GM_info.script.version; var oReq = new XMLHttpRequest(); oReq.addEventListener("load", checkScriptVersion); oReq.open("GET", "https://gf.qytechs.cn/scripts/33542.json"); oReq.send(); } function checkScriptVersion() { var obj = JSON.parse(this.responseText); var myVersion = GM_info.script.version; console.log(obj.version.substr(0, 3) + "," + myVersion.substr(0, 3) + "," + (obj.version.substr(0, 3) > myVersion.substr(0, 3))); if(obj.version.substr(0, 3) > myVersion.substr(0, 3)) $('<li class="nav-item"><a class="nav-link btn btn-primary" href="https://gf.qytechs.cn/zh-TW/scripts/33542" id="UpdateDividendScript" target="Blank">' + Dict[lan].updateDividendScript + '</a></li>').insertAfter($('.nav-item')[$('.nav-item').length - 1]); else setTimeout(checkScriptEvent, 600000); } /************UpdateScript*************/ /**************scriptAD***************/ function addAD() { //$('<p class="scriptAD" id="scriptAD-1" Align="Center">支持工程猿創造更優質腳本<a class="scriptAD" id="scriptAD-2" href="/company/detail/TJjNe2Zqk3HyEbSdW">「壞掉妹」</a><a class="scriptAD" id="scriptAD-3" href="/company/detail/wWmCjLxt5HCfeahiX">「雪之下雪乃」</a><a class="scriptAD" id="scriptAD-4">懇請賜予推薦票</a></p>').insertAfter($('.text-danger.float-left')); $('<a class="scriptAD float-left" id="scriptAD-1" Align="Center">★支持工程猿 創造更優質腳本★</a>').insertAfter($('.text-danger.float-left')); $('<a class="scriptAD float-left" id="scriptAD-2" href="/company/detail/TJjNe2Zqk3HyEbSdW">「壞掉妹」</a>').insertAfter($('#scriptAD-1')); $('<a class="scriptAD float-left" id="scriptAD-3" href="/company/detail/wWmCjLxt5HCfeahiX">「雪之下雪乃」</a>').insertAfter($('#scriptAD-2')); $('<a class="scriptAD float-left" id="scriptAD-4">★懇請賜予推薦票★</a>').insertAfter($('#scriptAD-3')); $('<a class="scriptAD float-left" id="scriptAD-0"> </a>').insertAfter($('.text-danger.float-left')); } /**************scriptAD***************/ /************stockSummary*************/ function addStockSummaryListener() { setTimeout(computeProfit, 2100); /*$(".btn.btn-secondary.mr-1")[0].addEventListener("click", ComputeEvt); $(".btn.btn-secondary.mr-1")[1].addEventListener("click", ComputeEvt); var pagesbtn = $(".page-item"); for (var i = 0; i < pagesbtn.length; i++) { pagesbtn[i].addEventListener("click", ComputeEvt); }*/ console.log("Triggered StockSummary"); } function ComputeEvt() { setTimeout(addStockSummaryListener, 2000); } //總獲利計算--加入分紅計算 function computeProfit() { //加入變數 profit為總獲利, ID是公司網址, earnPerShare是每股獲利 var profit = 0, tag, price, hold, classProfit, ID, earnPerShare, index; var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : []; //方格模式 if ($(".col-12.col-md-6.col-lg-4.col-xl-3").length > 0) { for (var i = 0; i < $('.company-card').length; ++i) { price = Number($('.company-card')[i].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]); hold = Number($('.company-card')[i].innerText.match(/([0-9]+).+%.+/)[1]); ID = $('.company-card')[i].innerHTML.match(/<a href="\/company\/detail\/([0-z]+)">/)[1]; console.log("companyID = " + ID); index = Dividends.findIndex(x => x.companyID == ID); if (index == -1) { earnPerShare = 0; } else { earnPerShare = Dividends[index].companyDividend; profit += earnPerShare * hold; } //console.log("companyID = " + ID); console.log("earnPerShare = " + earnPerShare); console.log(""); } console.log("本頁預計分紅: " + profit); classProfit = $("#totalProfitNumber"); if (classProfit.length === 0) { $('<div class="media company-summary-item border-grid-body" id = "totalProfit"><div class="col-6 text-right border-grid" id = "totalProfitTitle"><h2>' + Dict[lan].totalProfitInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "totalProfitNumber"><h2>$ ' + profit.toFixed() + '</h2></div>').insertAfter($('#totalProfitTitle')[0]); } else { $("#totalProfitNumber")[0].innerHTML = "<h2>$ " + profit.toFixed() + "</h2>"; } } /*else { //列表模式 //列表模式暫不開放 //console.log($(".col-8.col-lg-3.text-right.border-grid")); for (var j = 0; j < $('.media-body.row.border-grid-body').length; ++j) { price = Number($('.media-body.row.border-grid-body')[j].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]); hold = Number($('.media-body.row.border-grid-body')[j].innerText.match(/您在該公司持有([0-9]+)數量的股份/)[1]); // 找出持股量 console.log("價= " + price + ",持= " + hold + ",總= " + (price * hold) ); assets += price * hold; } console.log("本頁持股價值: " + assets); classAssets = $("#totalAssetsNumber"); if (classAssets.length === 0) { $('<div class="media company-summary-item border-grid-body" id = "totalAssets"><div class="col-6 text-right border-grid" id = "totalAssetsTitle"><h2>' + Dict[lan].totalAssetsInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "totalAssetsNumber"><h2>$ ' + assets + '</h2></div>').insertAfter($('#totalAssetsTitle')[0]); } else { $("#totalAssetsNumber")[0].innerHTML = "<h2>$ " + assets + "</h2>"; } }*/ //setTimeout(computeAssets,1000); } /************stockSummary*************/ /*************************************/ /**************company****************/ //---------------按鍵區---------------// function addCompanyClickListener() { if ($('.d-block.h4').length === 6) { // 初始化 先看使用者有沒有預設打開資料夾 folderOpenString = "fa-folder-open"; folderCloseString = "12345678"; //chartEvent(); numbersEvent(); //orderEvent(); //productEvent(); //directorEvent(); //logEvent(); folderOpenString = "fa-folder"; folderCloseString = "fa-folder-open"; // 註冊事件 //$('.d-block.h4')[0].addEventListener("click", chartEvent); //股價趨勢 $('.d-block.h4')[1].addEventListener("click", numbersEvent); //數據資訊 //$('.d-block.h4')[2].addEventListener("click", orderEvent); //交易訂單 //$('.d-block.h4')[3].addEventListener("click", productEvent); //產品中心 //$('.d-block.h4')[4].addEventListener("click", directorEvent); //董事會 //$('.d-block.h4')[5].addEventListener("click", logEvent); //所有紀錄 console.log("OnclickListener Registered"); } else { setTimeout(addCompanyClickListener, 500); } console.log("Triggered Company"); } var folderOpenString, folderCloseString; // 數據資訊 function numbersEvent() { var folderstate = $(".d-block.h4 i")[1].classList[1]; if (folderstate === folderOpenString) { //Open Event console.log("Open numbersfolder"); //setTimeout(addSomeInfo, 1000); setTimeout(AddDividendCookie, 1000); //總獲利計算--紀錄分紅 } else if (folderstate === folderCloseString) { //Close Event console.log("close numbersfolder"); } } //總獲利計算--紀錄分紅cookie 09/27 //Dividends規格 //{"companyID": A, "companyDividend": B, "companyPrice": C, "companyStock": D} function AddDividendCookie() { //window.localStorage.removeItem ("Dividend"); var revenue, totalStock, earnPerShare, ID, stockPrice; stockPrice = Number($('.col-8.col-md-4.col-lg-2.text-right.border-grid')[0].innerHTML.match(/[0-9]+/)); revenue = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[3].innerHTML.match(/[0-9]+/); totalStock = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[4].innerHTML.match(/[0-9]+/); earnPerShare = 0.8075 * revenue / totalStock; //name = $('.card-title.text-truncate')[0].innerText; ID = document.location.href.substr(38,99); var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : []; //如果先前紀錄過該公司,則刪除重記 var index = Dividends.findIndex(x => x.companyID == ID); console.log(ID + "---" + earnPerShare + "---" + stockPrice); if (index != -1) { if ((Dividends[index].companyDividend == earnPerShare) && (Dividends[index].companyPrice == stockPrice) && (Dividends[index].companyStock == totalStock)) { console.log("dont need update cookie"); } else { Dividends.splice(index, 1); console.log("AddDividendCookie---splice"); Dividends.push({"companyID": ID, "companyDividend": earnPerShare, "companyPrice": stockPrice, "companyStock": totalStock}); window.localStorage.setItem ("Dividend", JSON.stringify(Dividends)); console.log("Add Dividend Cookie!!"); } } else { Dividends.push({"companyID": ID, "companyDividend": earnPerShare, "companyPrice": stockPrice, "companyStock": totalStock}); window.localStorage.setItem ("Dividend", JSON.stringify(Dividends)); console.log("AddDividendCookie!!"); } } /**************company****************/ /*************************************/ /************accountInfo**************/ var userManage; var managerSalary = 0; function addManagerSalaryInfo() { if ($('.card-title.mb-1').length > 0) { userManage = []; managerSalary = 0; var companyDividend, companyStock, dividendIndex; var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : []; for (var manage = 0 ; manage < $('.text-primary').length ; ++manage) { //console.log("check " + manage); if ($('.text-primary')[manage].innerHTML.match(/是「<a href="\/company\/detail\/([^]+)">/) !== null) { userManage.push($('.text-primary')[manage].innerHTML.match(/是「<a href="\/company\/detail\/([^]+)">/)[1]); //這裡push的是companyID,不是companyName console.log("manage " + manage + " " + userManage[manage]); } } console.log("----------------------------"); console.log("start compute manager salary"); for (var m = 0 ; m < userManage.length ; m++) { companyStock = 0; companyDividend = 0; dividendIndex = Dividends.findIndex(b => b.companyID == userManage[m]); if (dividendIndex != -1) { companyDividend = Number(Dividends[dividendIndex].companyDividend); companyStock = Number(Dividends[dividendIndex].companyStock); } console.log("manage :" + userManage[m] + " salary: " + companyDividend * companyStock / 0.8075 * 0.05); console.log("companyStock: " + companyStock + " companyDividend: " + companyDividend); managerSalary += (((companyDividend * companyStock) / 0.8075) * 0.05); } console.log("managerSalary: " + managerSalary); console.log("compute complete"); console.log("----------------------------"); var classManagerSalaryInfo = $("#managerSalaryInfoNumber"); if(classManagerSalaryInfo.length === 0) { if (managerSalary > 0) { $('<div class="media account-info-item border-grid-body" id = "managerSalaryInfo"><div class="col-6 text-right border-grid" id = "managerSalaryInfoTitle"><h2>' + Dict[lan].managerTotalSalary + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "managerSalaryInfoNumber"><h2>$ ' + managerSalary.toFixed() + '</h2></div>').insertAfter($('#managerSalaryInfoTitle')[0]); } } else { $("#managerSalaryInfoNumber")[0].innerHTML = "<h2>$ " + managerSalary.toFixed() + "</h2>"; } } else { setTimeout(addManagerSalaryInfo, 1000); } } //userStcokInfo的格式: //{"userID": CWgfhqxbrJMxsknrb, "userCompany": [{"companyID": aaa, "userHold": number}, {}], "userManage":[aaa, bbb, ccc]} function callAddUserProfitInfo() { setTimeout(addUserProfitInfo, 1000); console.log("callAddUserProfitInfo"); } function addUserProfitInfo() { if ($('.card-title.mb-1').length > 0) { var classUserProfitInfo, userAssets = 0, userProfit = 0, userCompanyNumber = 0; var cash = 0; var userStockInfo = null !== window.sessionStorage.getItem ("userStockInfo") ? JSON.parse(window.sessionStorage.getItem ("userStockInfo")) : []; var userID = document.location.href.match(/accountInfo\/([0-z]+)/)[1]; var userIndex = userStockInfo.findIndex(a => a.userID == userID); var companyPrice, companyDividend, dividendIndex; cash = Number($('.card-block')[0].innerText.match(/帳號當前餘額:([0-9]+)/)[1]); var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : []; if (userIndex == -1) { console.log("no data in session, make new userInfo"); userStockInfo.push({"userID": userID, "userCompany": [], "userManage": userManage}); userIndex = userStockInfo.findIndex(a => a.userID == userID); } console.log("start compute stock profit"); for (var k in userStockInfo[userIndex].userCompany) { companyPrice = 0; companyDividend = 0; dividendIndex = Dividends.findIndex(b => b.companyID == userStockInfo[userIndex].userCompany[k].companyID); if (dividendIndex != -1) { companyPrice = Number(Dividends[dividendIndex].companyPrice); companyDividend = Number(Dividends[dividendIndex].companyDividend); } userAssets += companyPrice * userStockInfo[userIndex].userCompany[k].userHold; userProfit += companyDividend * userStockInfo[userIndex].userCompany[k].userHold; userCompanyNumber += 1; } console.log("compute complete"); console.log("start compute tax"); computeTax(userAssets + userProfit + managerSalary + cash); tax = Math.ceil(output); console.log("compute complete"); var classUserTaxInfo = $("#userTaxInfoNumber"); if(classUserTaxInfo.length === 0) { $('<div class="media account-info-item border-grid-body" id = "userTaxInfo"><div class="col-6 text-right border-grid" id = "userTaxInfoTitle"><h2>' + Dict[lan].userTotalTax + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "userTaxInfoNumber"><h2>$ ' + tax + '</h2></div>').insertAfter($('#userTaxInfoTitle')[0]); } else { console.log("start update info"); $("#userTaxInfoNumber")[0].innerHTML = "<h2>$ " + tax + "</h2>"; } classUserProfitInfo = $("#userProfitInfoNumber"); if(classUserProfitInfo.length === 0) { console.log("start add info"); $('<div class="media account-info-item border-grid-body" id = "userAssetsInfo"><div class="col-6 text-right border-grid" id = "userAssetsInfoTitle"><h2>' + Dict[lan].userTotalAssets + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "userAssetsInfoNumber"><h2>$ ' + userAssets + '</h2></div>').insertAfter($('#userAssetsInfoTitle')[0]); $('<div class="media account-info-item border-grid-body" id = "userProfitInfo"><div class="col-6 text-right border-grid" id = "userProfitInfoTitle"><h2>' + Dict[lan].userTotalProfit + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "userProfitInfoNumber"><h2>$ ' + userProfit.toFixed() + '</h2></div>').insertAfter($('#userProfitInfoTitle')[0]); $('<div class="media account-info-item border-grid-body" id = "userCompanyNumberInfo"><div class="col-6 text-right border-grid" id = "userCompanyNumberInfoTitle"><h2>' + Dict[lan].userTotalCompanyNumber + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]); $('<div class="col-6 text-right border-grid" id = "userCompanyNumberInfoNumber"><h2> ' + userCompanyNumber + '</h2></div>').insertAfter($('#userCompanyNumberInfoTitle')[0]); setTimeout(checkInfoEvent, 500); } else { console.log("start update info"); $("#userAssetsInfoNumber")[0].innerHTML = "<h2>$ " + userAssets + "</h2>"; $("#userProfitInfoNumber")[0].innerHTML = "<h2>$ " + userProfit.toFixed() + "</h2>"; $("#userCompanyNumberInfoNumber")[0].innerHTML = "<h2> " + userCompanyNumber + "</h2>"; } } else { setTimeout(callAddUserProfitInfo, 1000); } } checkInfoAgain = 0; function checkInfoEvent() { setTimeout(checkUserHoldStock, 500); } //userStcokInfo的格式: //{"userID": CWgfhqxbrJMxsknrb, "userCompany": [{"companyID": aaa, "userHold": number}, {}], "userManage":[aaa, bbb, ccc]} function checkUserHoldStock() { folderOpenString = "fa-folder-open"; folderCloseString = "fa-folder"; var userStockInfo = null !== window.sessionStorage.getItem ("userStockInfo") ? JSON.parse(window.sessionStorage.getItem ("userStockInfo")) : []; var userID = document.location.href.match(/accountInfo\/([0-z]+)/)[1]; var userIndex = userStockInfo.findIndex(a => a.userID == userID); if (userIndex == -1) { userStockInfo.push({"userID": userID, "userCompany": [], "userManage": []}); userIndex = userStockInfo.findIndex(a => a.userID == userID); } var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : []; var folderstate = $(".d-block.h4 i")[1].classList[1]; if (folderstate === folderOpenString) { //console.log("Open"); //Open Event var companyID, i, holdStockElement, hold; //var pageAssets = 0, pageProfit = 0, earnPerShare; for(i = 0; i < 4 && i < $('.col-12.border-grid').length; ++i) { // 持股資訊只有可能在前四個col-12 border-grid中 先找出來 if($('.col-12.border-grid')[i].innerText.match(/擁有.+公司的.+股票/) !== null) break; } var readCompanyNumber = 0; var haveAnyDataChange = 0; holdStockElement = $('.col-12.border-grid')[i]; for(var j = 0; j < holdStockElement.children.length; ++j) { if(holdStockElement.children[j].innerHTML.match(/href="(\/company[^"]+)/) !== null) { companyID = holdStockElement.children[j].innerHTML.match(/<a href="\/company\/detail\/([0-z]+)">/)[1]; var companyIndex = userStockInfo[userIndex].userCompany.findIndex(b => b.companyID == companyID); hold = Number(holdStockElement.children[j].innerText.match(/擁有.+公司的([0-9]+)股股票/)[1]); console.log("-----" + companyID + "-----" + hold + "-----"); if (companyIndex != -1) { if (Number(userStockInfo[userIndex].userCompany[companyIndex].userHold) == hold) { //console.log("dont need update this company"); } else { haveAnyDataChange = 1; userStockInfo[userIndex].userCompany.splice(companyIndex, 1); userStockInfo[userIndex].userCompany.push({"companyID": companyID, "userHold": hold}); } } else { haveAnyDataChange = 1; userStockInfo[userIndex].userCompany.push({"companyID": companyID, "userHold": hold}); } readCompanyNumber += 1; } } console.log("read company number: " + readCompanyNumber); window.sessionStorage.setItem ("userStockInfo", JSON.stringify(userStockInfo)); if ( ((readCompanyNumber < 10) || (haveAnyDataChange == 0)) && (checkInfoAgain < 3)) { checkInfoAgain += 1; setTimeout(checkInfoEvent, 1000); } else { checkInfoAgain = 0; callAddUserProfitInfo(); var pagesBtn = $(".page-item"); for(var k = 0; k < pagesBtn.length; k++) pagesBtn[k].addEventListener("click", checkInfoEvent2); } } else if (folderstate === folderCloseString) { setTimeout(checkInfoEvent, 1000); } } function checkInfoEvent2() { setTimeout(checkUserHoldStock, 1000); } //搬運自papago腳本 const taxlimit = [10000, 100000, 500000, 1000000]; const taxalllimit = 1000000; const taxpecent = 0.03; function computeTax(money) { let input = money; console.log(input); if (!input || 0 === input.length) { console.log("N"); return; } output = 0; let lastlimit = 0; for (let i = 0;; i++) { let limit = taxalllimit; let tax = taxpecent * i; if (i < taxlimit.length) { limit = taxlimit[i] - lastlimit; } if (tax > 0.6) { tax = 0.6; output += input * tax; break; } else { if (input < limit) { output += input * tax; break; } else { output += limit * tax; input -= limit; lastlimit += limit; } } } //$("#output").text("$ " + Math.ceil(output)); } /************accountInfo**************/ /*************************************/ /************foundationPlan***********/ //-----已刪除 /************foundationPlan***********/ /**************aboutMe****************/ // -----已刪除 /**************aboutMe****************/ /*************Language***************/ var lan = ""; lan = null !== window.localStorage.getItem ("PM_language") ? window.localStorage.getItem ("PM_language") : "tw"; /*function ChangeLanguage(l){ if(lan === l)return; lan = l; window.localStorage.setItem ("PM_language",l); window.location.reload(); }*/ var Dict = { tw: { totalProfitInThisPage: "本頁預計分紅:", updateDividendScript: "更新預估分紅腳本", userTotalAssets: "使用者股票總值:", userTotalProfit: "預估股票分紅:", userTotalCompanyNumber: "持有公司總數:", managerTotalSalary: "預估經理薪水:", userTotalTax: "預估本季稅金:", }, en: { totalProfitInThisPage: "Total profit in this page :", updateDividendScript: "Update Dividend Script", userTotalAssets: "使用者股票總值:", userTotalProfit: "預估股票分紅:", userTotalCompanyNumber: "持有公司總數:", managerTotalSalary: "預估經理薪水:", userTotalTax: "預估本季稅金:", }, jp: { totalProfitInThisPage: "本頁預計分紅:", updateDividendScript: "更新預估分紅腳本", userTotalAssets: "使用者股票總值:", userTotalProfit: "預估股票分紅:", userTotalCompanyNumber: "持有公司總數:", managerTotalSalary: "預估經理薪水:", userTotalTax: "預估本季稅金:", }, marstw: { totalProfitInThisPage: "這ㄘ可yee拿ㄉ$$:", updateDividendScript: "有★版", userTotalAssets: "股票ㄉ$$:", userTotalProfit: "這ㄘ會拿ㄉ$$:", userTotalCompanyNumber: "偶ㄐ間公ㄙ:", managerTotalSalary: "雞李ㄉ西水:", userTotalTax: "ㄋ要交ㄉ茄:", } }; /*************Language***************/ /*************Subscribe***************/ // -----已刪除 /*************Subscribe***************/
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址