Jimu Assistance

Jimu expires assistance

当前为 2017-02-22 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Jimu Assistance
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  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 projectNumber in results)
  65. {
  66. setupProjectExpires(projectNumber,results[projectNumber]);
  67. }
  68. });
  69. }
  70.  
  71. function getProjectNumber(str)
  72. {
  73. var pattern = /.*\s([\d-]*)/;
  74. var result = pattern.exec(str);
  75. return result[1];
  76. }
  77.  
  78. function encodeProjectNumbers(projectNumbers)
  79. {
  80. $.unique(projectNumbers);
  81. for(var index in projectNumbers)
  82. {
  83. projectNumbers[index] = 'n[]='+projectNumbers[index];
  84. }
  85. var str = projectNumbers.join('&');
  86. return str;
  87. }
  88.  
  89. function setupProjectExpires(projectNumber, expires)
  90. {
  91. var expiresDiv = $('.project-'+projectNumber).empty();
  92. if(!expires || expires.length === 0)
  93. {
  94. expiresDiv.append('<span style="color: green">没有逾期记录</span>');
  95. return true;
  96. }
  97. var expireSpan = null;
  98. var expireDate = null;
  99. for(var index in expires)
  100. {
  101. expireDate = expires[index];
  102. expireSpan = $('<span class="expire-date" title="'+expireDate+'"></span>');
  103. expireSpan.css({
  104. display: 'inline-block',
  105. width: '20px',
  106. height: '20px',
  107. background: 'red',
  108. color: 'white',
  109. 'border-radius': '10px',
  110. 'margin-right': '5px'
  111. });
  112. expiresDiv.append(expireSpan);
  113. }
  114. if(expireSpan)
  115. {
  116. expireSpan.text(expireDate).css({
  117. 'font-size': '12px',
  118. 'padding': '0 5px',
  119. 'width': 'auto'
  120. });
  121. var def = ( new Date() - Date.parse(expireDate)) / 1000 / 60 / 60 / 24 ;
  122. if(def >= 60)
  123. {
  124. expiresDiv.find('.expire-date').css({
  125. background: 'green'
  126. });
  127. }
  128. }
  129. }
  130.  
  131. function attachEvent()
  132. {
  133. ajaxSend(window.XMLHttpRequest, function(method, url, data){
  134. if(url.indexOf('/Account/CreditAssign/OwnedInvest') !== -1)
  135. {
  136. runTimer();
  137. }
  138. });
  139. }
  140.  
  141. function ajaxSend(objectOfXMLHttpRequest, callback) {
  142. // http://stackoverflow.com/questions/3596583/javascript-detect-an-ajax-event
  143. if(!callback){
  144. return;
  145. }
  146.  
  147. var s_ajaxListener = new Object();
  148. s_ajaxListener.tempOpen = objectOfXMLHttpRequest.prototype.open;
  149. s_ajaxListener.tempSend = objectOfXMLHttpRequest.prototype.send;
  150. s_ajaxListener.callback = function () {
  151. // this.method :the ajax method used
  152. // this.url :the url of the requested script (including query string, if any) (urlencoded)
  153. // this.data :the data sent, if any ex: foo=bar&a=b (urlencoded)
  154. callback(this.method, this.url, this.data);
  155. };
  156.  
  157. objectOfXMLHttpRequest.prototype.open = function(a,b) {
  158. if (!a) var a='';
  159. if (!b) var b='';
  160. s_ajaxListener.tempOpen.apply(this, arguments);
  161. s_ajaxListener.method = a;
  162. s_ajaxListener.url = b;
  163. if (a.toLowerCase() == 'get') {
  164. s_ajaxListener.data = b.split('?');
  165. s_ajaxListener.data = s_ajaxListener.data[1];
  166. }
  167. };
  168.  
  169. objectOfXMLHttpRequest.prototype.send = function(a,b) {
  170. if (!a) var a='';
  171. if (!b) var b='';
  172. s_ajaxListener.tempSend.apply(this, arguments);
  173. if(s_ajaxListener.method.toLowerCase() == 'post') {
  174. s_ajaxListener.data = a;
  175. }
  176. s_ajaxListener.callback();
  177. };
  178. }
  179.  
  180. })();