Jimu Assistance

Jimu expires assistance

  1. // ==UserScript==
  2. // @name Jimu Assistance
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.5
  5. // @description Jimu expires assistance
  6. // @author zgldh
  7. // @match https://box.jimu.com/Account/CreditAssign/Owned
  8. // @match https://box.jimu.com/CreditAssign/Init/*
  9. // @grant none
  10. // 1. 本插件仅提供逾期数据显示,使用者自行甄别数据真假。
  11. // 2. 本插件不对数据的及时性和真实性负责。不对使用者做出的任何投资决断负责。
  12. // 如您无法接受以上两点,请立即卸载此脚本。
  13. // ==/UserScript==
  14.  
  15. (function() {
  16. 'use strict';
  17.  
  18. // Your code here...
  19.  
  20. var titles = null;
  21. var eventAttached = false;
  22.  
  23. runTimer();
  24.  
  25. function runTimer()
  26. {
  27. var timer = setInterval(function(){
  28. if(typeof(window.$)== 'function')
  29. {
  30. titles = $('#ownedListContainer tr td.title,.table.table-responsive tr td');
  31. if(titles.length>=1 && titles.text() !== '正在加载中')
  32. {
  33. clearInterval(timer);
  34. start();
  35.  
  36. if(eventAttached === false)
  37. {
  38. attachEvent();
  39. eventAttached = true;
  40. }
  41. }
  42. }
  43. },1000);
  44. }
  45.  
  46. function start()
  47. {
  48. var projectNumbers = [];
  49. $('#ownedListContainer tr').css('position','relative');
  50. titles.css('position','relative');
  51. titles.each(function(index){
  52. var title = $(this);
  53. var projectNumber = getProjectNumber(title.find('span a').text().trim());
  54. if(projectNumber)
  55. {
  56. projectNumbers.push(projectNumber);
  57. var expiresDiv = $('<div class="project-'+projectNumber+' expires-assistance">Loading...</div>');
  58. expiresDiv.css({
  59. position: 'relative',
  60. width: '100%'
  61. });
  62. title.append(expiresDiv);
  63. }
  64. });
  65.  
  66. $.get('https://jimu-assistance.zgldh.com/expires?'+encodeProjectNumbers(projectNumbers))
  67. .then(function(results){
  68. for(var index in projectNumbers)
  69. {
  70. var projectNumber = projectNumbers[index];
  71. setupProjectExpires(projectNumber,results[projectNumber]);
  72. }
  73. });
  74. }
  75.  
  76. function getProjectNumber(str)
  77. {
  78. var pattern = /.*\s([\d-]*)/;
  79. var result = pattern.exec(str);
  80. if(result && result.length>=2)
  81. {
  82. return result[1];
  83. }
  84. return null;
  85. }
  86.  
  87. function encodeProjectNumbers(projectNumbers)
  88. {
  89. $.unique(projectNumbers);
  90. var numbers = [].concat(projectNumbers);
  91. for(var index in numbers)
  92. {
  93. numbers[index] = 'n[]='+numbers[index];
  94. }
  95. var str = numbers.join('&');
  96. return str;
  97. }
  98.  
  99. function setupProjectExpires(projectNumber, expires)
  100. {
  101. var expiresDiv = $('.project-'+projectNumber).empty();
  102. if(!expires || expires.length === 0)
  103. {
  104. expiresDiv.append('<span style="color: green">没有逾期记录</span>');
  105. return true;
  106. }
  107. expires.sort((a,b)=>a>b);
  108. var expireSpan = null;
  109. var expireDate = null;
  110. for(var index in expires)
  111. {
  112. expireDate = expires[index];
  113. expireSpan = $('<span class="expire-date" title="'+expireDate+'"></span>');
  114. expireSpan.css({
  115. display: 'inline-block',
  116. width: '20px',
  117. height: '20px',
  118. background: 'red',
  119. color: 'white',
  120. 'border-radius': '10px',
  121. 'margin-right': '5px'
  122. });
  123. expiresDiv.append(expireSpan);
  124. }
  125. if(expireSpan)
  126. {
  127. expireSpan.text(expireDate).css({
  128. 'font-size': '12px',
  129. 'padding': '0 5px',
  130. 'width': 'auto'
  131. });
  132. var def = ( new Date() - Date.parse(expireDate)) / 1000 / 60 / 60 / 24 ;
  133. if(def >= 60)
  134. {
  135. expiresDiv.find('.expire-date').css({
  136. background: 'green'
  137. });
  138. }
  139. }
  140. }
  141.  
  142. function attachEvent()
  143. {
  144. ajaxSend(window.XMLHttpRequest, function(method, url, data){
  145. if(url.indexOf('/Account/CreditAssign/OwnedInvest') !== -1)
  146. {
  147. runTimer();
  148. }
  149. });
  150. }
  151.  
  152. function ajaxSend(objectOfXMLHttpRequest, callback) {
  153. // http://stackoverflow.com/questions/3596583/javascript-detect-an-ajax-event
  154. if(!callback){
  155. return;
  156. }
  157.  
  158. var s_ajaxListener = {};
  159. s_ajaxListener.tempOpen = objectOfXMLHttpRequest.prototype.open;
  160. s_ajaxListener.tempSend = objectOfXMLHttpRequest.prototype.send;
  161. s_ajaxListener.callback = function () {
  162. // this.method :the ajax method used
  163. // this.url :the url of the requested script (including query string, if any) (urlencoded)
  164. // this.data :the data sent, if any ex: foo=bar&a=b (urlencoded)
  165. callback(this.method, this.url, this.data);
  166. };
  167.  
  168. objectOfXMLHttpRequest.prototype.open = function(a,b) {
  169. if (!a) a='';
  170. if (!b) b='';
  171. s_ajaxListener.tempOpen.apply(this, arguments);
  172. s_ajaxListener.method = a;
  173. s_ajaxListener.url = b;
  174. if (a.toLowerCase() == 'get') {
  175. s_ajaxListener.data = b.split('?');
  176. s_ajaxListener.data = s_ajaxListener.data[1];
  177. }
  178. };
  179.  
  180. objectOfXMLHttpRequest.prototype.send = function(a,b) {
  181. if (!a) var a='';
  182. if (!b) var b='';
  183. s_ajaxListener.tempSend.apply(this, arguments);
  184. if(s_ajaxListener.method.toLowerCase() == 'post') {
  185. s_ajaxListener.data = a;
  186. }
  187. s_ajaxListener.callback();
  188. };
  189. }
  190.  
  191. })();