Jimu Assistance

Jimu expires assistance

目前為 2017-02-22 提交的版本,檢視 最新版本

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