Jimu Assistance

Jimu expires assistance

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        Jimu Assistance
// @namespace     http://tampermonkey.net/
// @version      0.5
// @description    Jimu expires assistance
// @author       zgldh
// @match        https://box.jimu.com/Account/CreditAssign/Owned
// @match        https://box.jimu.com/CreditAssign/Init/*
// @grant        none
// 1. 本插件仅提供逾期数据显示,使用者自行甄别数据真假。
// 2. 本插件不对数据的及时性和真实性负责。不对使用者做出的任何投资决断负责。
// 如您无法接受以上两点,请立即卸载此脚本。
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...

    var titles = null;
    var eventAttached = false;

    runTimer();

    function runTimer()
    {
        var timer = setInterval(function(){
            if(typeof(window.$)== 'function')
            {
                titles = $('#ownedListContainer tr td.title,.table.table-responsive tr td');
                if(titles.length>=1 && titles.text() !== '正在加载中')
                {
                    clearInterval(timer);
                    start();

                    if(eventAttached === false)
                    {
                        attachEvent();
                        eventAttached = true;
                    }
                }
            }
        },1000);
    }

    function start()
    {
        var projectNumbers = [];
        $('#ownedListContainer tr').css('position','relative');
        titles.css('position','relative');
        titles.each(function(index){
            var title = $(this);
            var projectNumber = getProjectNumber(title.find('span a').text().trim());
            if(projectNumber)
            {                
                projectNumbers.push(projectNumber);
                var expiresDiv = $('<div class="project-'+projectNumber+' expires-assistance">Loading...</div>');
                expiresDiv.css({
                    position: 'relative',
                    width: '100%'
                });
                title.append(expiresDiv);
            }
        });

        $.get('https://jimu-assistance.zgldh.com/expires?'+encodeProjectNumbers(projectNumbers))
            .then(function(results){
            for(var index in projectNumbers)
            {
                var projectNumber = projectNumbers[index];
                setupProjectExpires(projectNumber,results[projectNumber]);
            }
        });
    }

    function getProjectNumber(str)
    {
        var pattern = /.*\s([\d-]*)/;
        var result = pattern.exec(str);
        if(result && result.length>=2)
        {
            return result[1];
        }
        return null;
    }

    function encodeProjectNumbers(projectNumbers)
    {
        $.unique(projectNumbers);
        var numbers = [].concat(projectNumbers);
        for(var index in numbers)
        {
            numbers[index] = 'n[]='+numbers[index];
        }
        var str = numbers.join('&');
        return str;
    }

    function setupProjectExpires(projectNumber, expires)
    {
        var expiresDiv = $('.project-'+projectNumber).empty();
        if(!expires || expires.length === 0)
        {
            expiresDiv.append('<span style="color: green">没有逾期记录</span>');
            return true;
        }
        expires.sort((a,b)=>a>b);
        var expireSpan = null;
        var expireDate = null;
        for(var index in expires)
        {
            expireDate = expires[index];
            expireSpan = $('<span class="expire-date" title="'+expireDate+'"></span>');
            expireSpan.css({
                display: 'inline-block',
                width: '20px',
                height: '20px',
                background: 'red',
                color: 'white',
                'border-radius': '10px',
                'margin-right': '5px'
            });
            expiresDiv.append(expireSpan);
        }
        if(expireSpan)
        {
            expireSpan.text(expireDate).css({
                'font-size': '12px',
                'padding': '0 5px',
                'width': 'auto'
            });
            var def = ( new Date() - Date.parse(expireDate)) / 1000 / 60 / 60 / 24  ;
            if(def >= 60)
            {
                expiresDiv.find('.expire-date').css({
                    background: 'green'
                });
            }
        }
    }

    function attachEvent()
    {
        ajaxSend(window.XMLHttpRequest, function(method, url, data){
            if(url.indexOf('/Account/CreditAssign/OwnedInvest') !== -1)
            {
                runTimer();
            }
        });
    }

    function ajaxSend(objectOfXMLHttpRequest, callback) {
        // http://stackoverflow.com/questions/3596583/javascript-detect-an-ajax-event
        if(!callback){
            return;
        }

        var s_ajaxListener = {};
        s_ajaxListener.tempOpen = objectOfXMLHttpRequest.prototype.open;
        s_ajaxListener.tempSend = objectOfXMLHttpRequest.prototype.send;
        s_ajaxListener.callback = function () {
            // this.method :the ajax method used
            // this.url :the url of the requested script (including query string, if any) (urlencoded)
            // this.data :the data sent, if any ex: foo=bar&a=b (urlencoded)
            callback(this.method, this.url, this.data);
        };

        objectOfXMLHttpRequest.prototype.open = function(a,b) {
            if (!a)  a='';
            if (!b)  b='';
            s_ajaxListener.tempOpen.apply(this, arguments);
            s_ajaxListener.method = a;
            s_ajaxListener.url = b;
            if (a.toLowerCase() == 'get') {
                s_ajaxListener.data = b.split('?');
                s_ajaxListener.data = s_ajaxListener.data[1];
            }
        };

        objectOfXMLHttpRequest.prototype.send = function(a,b) {
            if (!a) var a='';
            if (!b) var b='';
            s_ajaxListener.tempSend.apply(this, arguments);
            if(s_ajaxListener.method.toLowerCase() == 'post') {
                s_ajaxListener.data = a;
            }
            s_ajaxListener.callback();
        };
    }

})();