newRedrankvue.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. // dependency : newCommon
  2. var RedRankTable = new Module("#table-rank", "fcBiWorkerDaily");
  3. RedRankTable.slideLen = 16;
  4. RedRankTable.slides = 0;
  5. RedRankTable.parts = 4;
  6. RedRankTable.partLen = 4;
  7. RedRankTable.curSlide = 0;
  8. RedRankTable.drawData = function (data) {
  9. // showSlide
  10. this.showSlide(this.curSlide, data);
  11. };
  12. RedRankTable.showSlide = function (slide, data) {
  13. for(var part = 0; part < this.parts; part++){
  14. this.showPart(slide, part, data);
  15. }
  16. };
  17. RedRankTable.showPart = function(slide, part, data){
  18. var lpos = slide * this.slideLen + (part * this.partLen);
  19. var rpos = slide * this.slideLen + ((part+1) * this.partLen);
  20. var partList = [];
  21. for (var i = lpos; i < rpos; i++) {
  22. var one = data.getSorted(i);
  23. if(one == null || one === undefined) {
  24. partList[partList.length] = {passNum : 0, failNum: 0, failRate: 0, workerId: 0, fcDay: new Date().toLocaleDateString()};
  25. } else {
  26. partList[partList.length] = one.jsonObj;
  27. partList[partList.length - 1].failRate = partList[partList.length - 1].failRate/100.0;
  28. }
  29. partList[partList.length - 1].workerName = getUserName(partList[partList.length - 1].workerId);
  30. if("[用户:"+0+"]" === partList[partList.length - 1].workerName){
  31. partList[partList.length - 1].workerName = "-";
  32. }
  33. partList[partList.length - 1].color = true;
  34. }
  35. let k = newRedrankvue.parting[part].length;
  36. for(let i = 0; i < k; i++){
  37. newRedrankvue.parting[part].pop();
  38. }
  39. for(let i = 0; i < partList.length; i++){
  40. newRedrankvue.parting[part].push(partList[i]);
  41. }
  42. };
  43. RedRankTable.tickInterval = 1000;
  44. RedRankTable.tick = function(){
  45. var totalDataLen = this.activeData != null ? this.activeData.len() : 0;
  46. if(this.slides !== Math.ceil(totalDataLen / this.slideLen)){
  47. this.slides = Math.ceil(totalDataLen / this.slideLen);
  48. this.curSlide = 0;
  49. } else {
  50. this.curSlide = (this.curSlide + 1) % this.slides;
  51. }
  52. };
  53. RedRankTable.init();
  54. var newRedrankvue = new Vue({
  55. el: '#redrank',
  56. data: {
  57. parting:[[{},{},{},{}], [{},{},{},{}], [{},{},{},{}], [{},{},{},{}]],
  58. title: '本厂今日生产能手榜'
  59. },
  60. methods: {
  61. clicktitle: function () {
  62. alert("Hello! This is Title");
  63. },
  64. useId: function () {
  65. this.useSort("Id");
  66. },
  67. usePass: function () {
  68. this.useSort("Pass");
  69. },
  70. useFail: function () {
  71. this.useSort("Fail");
  72. },
  73. useRate: function () {
  74. this.useSort("Rate");
  75. },
  76. useSort: function (column) {
  77. let sorter = function () {};
  78. switch (column) {
  79. case "Pass":
  80. return RedRankTablePlugin.sortPass;
  81. case "Fail":
  82. return RedRankTablePlugin.sortFail;
  83. case "Rate":
  84. return RedRankTablePlugin.sortRate;
  85. case "Id":
  86. return RedRankTablePlugin.sortId;
  87. }
  88. RedRankTablePlugin.workerDailyService.list.sortBy(sorter);
  89. console.warn(column);
  90. }
  91. }
  92. });
  93. var RedRankTablePlugin = new (function() {
  94. this.workerDailyService = new DataObjectService("fcBiWorkerDaily", ONDEMAND | AUTO | FAST, "?type=1");
  95. this.tick = function(obj){
  96. RedRankTable.setData(RedRankTablePlugin.workerDailyService.getList());
  97. };
  98. this.sortPass = function (l, r){
  99. var q = {};
  100. checkNull(l, r, q);
  101. if(q.out !== -2) return q.out;
  102. var t = calcCompare(l.jsonObj.passNum, r.jsonObj.passNum, q);
  103. return t;
  104. };
  105. this.sortFail = function (l, r){
  106. var q = {};
  107. checkNull(l, r, q);
  108. if(q.out !== -2) return q.out;
  109. var t = calcCompare(l.jsonObj.failNum, r.jsonObj.failNum, q);
  110. return t;
  111. };
  112. function checkNull(l, r, q) {
  113. if (l.jsonObj == null || l.jsonObj === undefined) {
  114. if (r.jsonObj == null || r.jsonObj === undefined) {
  115. q.out = 0;
  116. return;
  117. }
  118. q.out = -1;
  119. return;
  120. }
  121. if (r.jsonObj == null || r.jsonObj === undefined) {
  122. q.out = 1;
  123. return;
  124. }
  125. if(r.jsonObj == null || r.jsonObj === undefined){
  126. q = 1;
  127. return;
  128. }
  129. q.out = -2;
  130. }
  131. function calcCompare(l, r, q) {
  132. if (l > r) {
  133. q = 1;
  134. } else if (l === r) {
  135. q = 0;
  136. } else if (l < r) {
  137. q = -1;
  138. } else {
  139. console.error("login error");
  140. q = 0;
  141. }
  142. return q;
  143. }
  144. this.sortRate = function (l, r){
  145. var q = {};
  146. checkNull(l, r, q);
  147. if(q.out !== -2) return q.out;
  148. q = calcCompare(l.jsonObj.failRate, r.jsonObj.failRate, q);
  149. };
  150. this.sortId = function (l, r){
  151. var q = {};
  152. checkNull(l, r, q);
  153. if(q.out !== -2) return q.out;
  154. var t = calcCompare(l.jsonObj.workerId, r.jsonObj.workerId, q);
  155. return t;
  156. };
  157. this.setup = function(obj){
  158. setInterval(obj.tick, 1000, obj);
  159. };
  160. this.setup(this);
  161. })();
  162. (function() {
  163. setInterval(RedRankTablePlugin.tick, 1000);
  164. })();