1// å·¥å ·æ¹æ³ 2 3if (!window.FUtil) { 4 window.FUtil = {}; 5} 6$.extend(window.FUtil, { 7 /** 8 * è·åæ°ç»ä¸æå®å±æ§çæå¤§å¼ 9 * @param {Array} arr æ°ç» 10 * @param {String} key æå®å±æ§ 11 * @returns {Number} æå¤§æ°å¼ 12 * @example [{key:166},{key:200},{key:33}]=>getMax(arr,'key);=>200 13 */ 14 getMax: function(arr, key) { 15 var max = 0, 16 len = arr.length; 17 for (var i = 0; i < len; i++) { 18 var item = arr[i][key]; 19 if (max < item) max = item; 20 } 21 return max; 22 }, 23 /** 24 * è·åæ°ç»ä¸æå®å±æ§çæå°å¼ 25 * @param {Array} arr æ°ç» 26 * @param {String} key æå®å±æ§ 27 * @returns {Number} æå°å¼ 28 * @example [{key:166},{key:200},{key:33}]=>getMax(arr,'key);=>33 29 */ 30 getMin: function(arr, key) { 31 if (arr.length === 0) return; 32 var min = arr[0][key], 33 len = arr.length; 34 for (var i = 1; i < len; i++) { 35 var item = arr[i][key]; 36 if (min > item) min = item; 37 } 38 return min; 39 }, 40 /** 41 * è·åæ°ç»æå®å±æ§çå 42 * @param {Array} arr æ°ç» 43 * @param {String} key æå®å±æ§ 44 * @returns {Number} å 45 * @example [{key:166},{key:200},{key:33}]=>getSum(arr,'key);=>399 46 */ 47 getSum: function(arr, key) { 48 var sum = 0, 49 len = arr.length; 50 for (var i = 0; i < len; i++) { 51 sum += arr[i][key]; 52 } 53 return sum; 54 }, 55 /** 56 * è·åæ°ç»ä¸æå®å±æ§çæ°ç» 57 * @param {Array} arr æºæ°ç» 58 * @param {String} key æå®å±æ§ 59 * @returns {Array} ç®æ æ°ç» 60 * @example [{key:166},{key:200},{key:33}]=>getValArr(arr,'key);=>[166,200,33] 61 */ 62 getValArr: function(arr, key) { 63 var val = [], 64 len = arr.length; 65 for (var i = 0; i < len; i++) { 66 val.push(arr[i][key]); 67 } 68 return val; 69 }, 70 /** 71 * å¿«éæ¸²ææ°å 72 * @param {String} space å½åç©ºé´ 73 * @param {Object} data æ°æ® 74 * @param {Function} filterFn è¿æ»¤å½æ°ï¼å¤ç渲æç»æï¼æ¯å¦å åä½ 75 */ 76 renderNum: function(space, data, filterFn) { 77 for (var i in data) { 78 if (Object.prototype.hasOwnProperty.call(data, i)) { 79 var $dom = $('#' + space + '-' + i); 80 if ($dom.length > 0) { 81 $dom.text(filterFn ? filterFn(data[i]) : data[i]); 82 } 83 } 84 } 85 }, 86 /** 87 * è·åç¾åæ¯ 88 * @param {Number} max æ»æ° 89 * @param {Number} data æ°æ® 90 * @param {Number} fixed 精确å°å°æ°ç¹ä½æ°ï¼å¯ä¸ä¼ ï¼é»è®¤ä¸º0 91 * @param {Number} unit é ç½®åä½ï¼å¯ä¸ä¼ ï¼é»è®¤%ï¼ä¸è¦ç¾åå·ä¼ "" 92 */ 93 getPercent: function(max, data, fixed, unit) { 94 var _fixed = fixed || 0, 95 unit = unit == "" ? "" : (unit || '%'); 96 return max == 0 ? percent = 0 + unit : (data / max * 100).toFixed(_fixed) + unit; 97 }, 98 /** 99 * å¾è¡¨èªå¨åæ¢å±ç¤ºtooltip 100 * @param {Object} chart å¾è¡¨å®ä¾ 101 * @param {Number} length å¾è¡¨æ°æ®é 102 * @param {Number} interval 忢é´éï¼åä½ms 103 */ 104 showTooltip: function(chart, length, interval) { 105 chart.dataLength = length; 106 chart.currentIndex = 0; 107 clearInterval(chart.timer); 108 chart.interval = interval || 3000; 109 chart.timer = setInterval(function() { 110 if (chart.currentIndex === chart.dataLength) { 111 chart.currentIndex = 0; 112 } 113 chart.dispatchAction({ 114 type: 'showTip', 115 seriesIndex: 0, 116 dataIndex: chart.currentIndex 117 }); 118 chart.currentIndex++; 119 }, chart.interval); 120 }, 121 // é¼ æ æ¬æµ®å°å¾è¡¨ï¼åæ¢showTooltip 122 chartHover: function(chart, length, interval) { 123 chart.on('mouseover', function() { 124 clearInterval(chart.timer); 125 }); 126 chart.on('mouseout', function() { 127 FUtil.showTooltip(chart, length, interval); 128 }); 129 }, 130 /** 131 * èªå®ä¹é«äº®ï¼å¯é ç½®é«äº®è§¦åè¡ä¸ºãé«äº®ç±»åãåè°çã 132 * @param {Object} $ct è¢«å§æjqå®¹å¨ 133 * @param {String} target å§æçå¬ç®æ éæ©å¨å符串 134 * @param {Function} successFn æååè° 135 * @param {String} event 触åè¡ä¸ºï¼å¯ä¸ä¼ ï¼é»è®¤çå¬clickäºä»¶ 136 * @param {String} activeClass é«äº®ç±»åï¼å¯ä¸ä¼ ï¼é»è®¤active 137 */ 138 activeDom: function($ct, target, successFn, event, activeClass) { 139 var cls = activeClass || 'active'; 140 $ct.on(event || 'click', target, function(e) { 141 var $this = $(this); 142 if ($this.hasClass(cls)) return; 143 $this.addClass(cls).siblings().removeClass(cls); 144 // successFnæ¥æ¶ç¹å»äºä»¶åç¹å»ç®æ çjq对象ä½ä¸ºåæ° 145 successFn(e, $this);
146 // è¿åç¶å®¹å¨jq对象ï¼å¯ä»¥é¾å¼æ§è¡å ¶ä»æä½ 147 return $ct; 148 }); 149 }, 150 // æ°åååä½è½¬æ¢ 151 addCommas: function(n) { 152 if (isNaN(n)) { 153 return '-'; 154 } 155 n = (n + '').split('.'); 156 return n[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + 157 (n.length > 1 ? ('.' + n[1]) : ''); 158 }, 159 // çæéæºæ° 160 randNum: function(m, n) { 161 if (!n) { 162 return Math.floor(Math.random() * m); 163 } else { 164 var c = n - m + 1; 165 return Math.floor(Math.random() * c + m); 166 } 167 }, 168 // echartsèªéåº 169 echartsResize: function() { 170 var echartsResizeTimer = null; 171 return function() { 172 $(window).on('resize', function() { 173 // è·åææecharts容å¨çjQuery对象 174 var $echarts = $('[_echarts_instance_]'); 175 if (echartsResizeTimer) clearTimeout(echartsResizeTimer); 176 echartsResizeTimer = setTimeout(function() { 177 $.each($echarts, function(i, e) { 178 // è°ç¨echartsçapiè·åå¾è¡¨å®ä¾ï¼æ§è¡ç¼©æ¾ 179 var chart = echarts.getInstanceByDom(e); 180 chart.resize(); 181 }); 182 }, 50); 183 }); 184 }; 185 }, 186 /** 187 * 宿¶åæ¢å°å¾é«äº® 188 * @param {Object}chartInstance å¾è¡¨å®ä¾ 189 * @param {Number} length æ°æ®é¿åº¦ 190 */ 191 areaHight: function(chartInstance, length) { 192 chartInstance.dataLen = length; 193 chartInstance.curData = 0; 194 chartInstance.arr = []; 195 // æ°æ®ä¸æ ç»ææ°ç» 196 for (var i = 0; i < chartInstance.dataLen; i++) { 197 chartInstance.arr.push(i); 198 } 199 clearInterval(chartInstance.hightTimer); 200 chartInstance.hightTimer = setInterval(function() { 201 if (chartInstance.curData === chartInstance.dataLen) { 202 chartInstance.curData = 0; 203 } 204 // åæ¶é«äº® 205 chartInstance.dispatchAction({ 206 type: 'downplay', 207 seriesIndex: 0, 208 dataIndex: chartInstance.arr 209 }); 210 // é«äº®å°å¾åºå 211 chartInstance.dispatchAction({ 212 type: 'highlight', 213 seriesIndex: 0, 214 dataIndex: chartInstance.curData 215 }); 216 chartInstance.curData++; 217 }, 3000); 218 }, 219 /** 220 * å°å¾å¾è¡¨ä¸ç¨ï¼é¼ æ æ¬æµ®å°å°å¾ï¼åæ¢showTooltip 221 * @param {Object} chart å¾è¡¨å®ä¾ 222 * @param {Number} length å¾è¡¨æ°æ®é 223 */ 224 mapChartHover: function(chart, length) { 225 chart.on('mouseover', function() { 226 clearInterval(chart.hightTimer); 227 }); 228 chart.on('mouseout', function() { 229 Util.areaHight(chart, length, chart.interval || 3000); 230 }); 231 }, 232 /** 233 * å è½½æ»å¨æ°å 234 * @param {Object} $dom domå®¹å¨ 235 * @param {Number} data æ°å¼ 236 * @param {Number} figure é¿åº¦ 237 */ 238 scrollNum: function($dom, data, figure) { 239 if (!$dom.isScrolled) { 240 $dom.isScrolled = true; 241 $dom.ScrollNumber({ 242 number: data, 243 figure: figure || (data + '').length 244 }); 245 } else { 246 $dom.ScrollNumber('refresh', data); 247 } 248 }, 249 /** 250 * echartsæ¸åè²,éç¨åè²æ¸åï¼å¯æ ¹æ®å®é éæ±æ¹å,æ¹ååæ°å¯ä¸ä¼ ï¼é»è®¤æ°´å¹³æ¹åæ¸å 251 * @param {String} color1 jquery dom对象 252 * @param {String} color2 htmlå符串 253 * @param {Number} x1 æ¸åè²æ¹åèµ·ç¹çxåæ 254 * @param {Number} y1 æ¸åè²æ¹åèµ·ç¹çyåæ 255 * @param {Number} x2 æ¸åè²æ¹åç»ç¹çxåæ 256 * @param {Number} y2 æ¸åè²æ¹åç»ç¹çyåæ 257 */ 258 linearColor: function(color1, color2, x1, y1, x2, y2) { 259 return new echarts.graphic.LinearGradient( 260 ((typeof x1 === 'number') && x1 < 1) ? x1 : 1, 261 ((typeof y1 === 'number') && y1 < 1) ? y1 : 0, 262 ((typeof x2 === 'number') && x2 < 1) ? x2 : 0, 263 ((typeof y2 === 'number') && y2 < 1) ? y2 : 0, [{ 264 offset: 0, 265 color: color1 266 }, { 267 offset: 1, 268 color: color2 269 }] 270 ); 271 }, 272 // æ»å¨å表 273 scrollList: function($dom, htmlStr) { 274 $dom.empty().append(htmlStr); 275 if (!$dom.isScroll) { 276 $dom.isScroll = true; 277 $dom.parent().scrollbox(); 278 } 279 }, 280 // ç¹å»é«äº® 281 act: function($dom, fn) { 282 if ($dom.hasClass('active')) { 283 return; 284 } else { 285 var ctx = this, 286 args = Array.prototype.slice.call(arguments, 2); 287 $dom.addClass('active').siblings().removeClass('active'); 288 args.unshift($dom) 289 fn && fn.apply(ctx, args); 290 } 291 }, 292 /** 293 *å°å符串æç §åºå®çåæ°æªå 294 * @param {String} str éè¦å¤ççå符串 295 * @param {Number} num æªæé´é 296 * @param {Str} split éè¦æå ¥çå符ï¼ä¸ä¼ é»è®¤æ¢è¡ç¬¦ '\n' 297 */ 298 splitStr: function(str, num, split) { 299 var splitStr = split || '\n', 300 reg = new RegExp('(\\S{' + num + '})', 'g'), 301 reg2 = new RegExp('(\\' + splitStr + ')$'), 302 fmtStr = str.replace(reg, '$1' + splitStr);
303 return fmtStr.replace(reg2, ''); 304 }, 305 /** 306 * æ°ç»åç»ï¼ç¨äºå¤é¡µé¢æ¸²æ 307 * @param {Number} num æ¯ç»å ç´ çæ°é 308 * @param {Array} arr éè¦å¤ççæ°ç» 309 */ 310 getArrTrans: function(arr, num) { 311 var resultArr = []; 312 for (var i = 0, len = arr.length; i < len; i++) { 313 var page = Math.floor(i / num); 314 if (!resultArr[page]) { 315 resultArr[page] = []; 316 } 317 resultArr[page].push(arr[i]); 318 } 319 return resultArr; 320 }, 321 /** 322 * æ ¹æ®valueæ¥æ¾key 323 * @param {Object} object éè¦æ¥æ¾ç对象 324 * @param {Function} predicate æ¥è¯¢æ¡ä»¶ 325 */ 326 findKey: function(object, predicate) { 327 var result; 328 if (object == null) { 329 return result; 330 } 331 Object.keys(object).some(function(key) { 332 var value = object[key]; 333 if (predicate(value, key, object)) { 334 335 result = key; 336 return true; 337 } 338 }); 339 return result; 340 }, 341 /** 342 * å¨æè½½å ¥ãæ´æ°æ°åï¼éè¦å¼å ¥æä»¶countUp.js 343 * @param {String} space å½åç©ºé´ 344 * @param {Number} data æ°æ® 345 * @param {Object} options æä»¶èªå®ä¹é ç½®ï¼å¯ä¸ä¼ 346 */ 347 animateRender: function(space, data, options) { 348 for (var i in data) { 349 if (Object.prototype.hasOwnProperty.call(data, i)) { 350 var $dom = $('#' + space + '-' + i), 351 d = data[i] - 0; 352 if ($dom.length > 0) { 353 if (!isNaN(d)) { 354 var dotIdx = String(data[i]).indexOf('.'), //è·åå°æ°ç¹çä½ç½® 355 decimal = 0; // é»è®¤æ´æ° 356 if (dotIdx > -1) { 357 decimal = String(data[i]).length - dotIdx - 1; //è·åå°æ°ç¹åçä¸ªæ° 358 } 359 var countUpOption = $.extend({}, { 360 //å®ä¹æ¯å¦å¼å¯ç¼å¨ 361 useEasing: true, 362 //æ¯å¦å¼å¯åç» 363 useGrouping: false, 364 decimalPlaces: decimal 365 }, options || {}); 366 if (!$dom.data('countUp')) { 367 var num = new CountUp(space + '-' + i, data[i], countUpOption); 368 if (!num.error) { 369 //å¼å¯æ»å¨ 370 num.start(); 371 } else { 372 // eslint-disable-next-line no-console 373 console.log(num.error); 374 } 375 // = num; 376 $dom.data('countUp', num); 377 } else { 378 $dom.data('countUp').update(data[i]); 379 } 380 } else { 381 $dom.text(data[i]); 382 } 383 } 384 } 385 } 386 }, 387 /** 388 * è½½å ¥ç¶æï¼ç±»ä¼¼renderNum 389 * @param {String} space å½åç©ºé´ 390 * @param {Number} data æ°æ® 391 * @param {String} stateCls ç¶æåç§°åç¼ï¼ä¸ä¼ é»è®¤'state' 392 */ 393 renderState: function(space, data, stateCls) { 394 for (var i in data) { 395 if (Object.prototype.hasOwnProperty.call(data, i)) { 396 var $dom = $('#' + space + '-' + i); 397 if ($dom.length > 0) { 398 $dom.attr('data-' + (stateCls || 'state'), data[i]); 399 } 400 } 401 } 402 }, 403 /** 404 * å®ä½è°è¯è¾ 婿¹æ³ 405 * @param {Object} $dom jquery dom对象 406 * @param {Boolean} isCss æ¯å¦è½¬æ¢ä¸ºcss 407 */ 408 getPos: function($dom, isCss) { 409 $dom.on('click', function(e) { 410 var pos = this.getBoundingClientRect(), 411 psdStr = '[' + (e.pageX - pos.x - window.scrollX) + ',' + (e.pageY - pos.y - window.scrollY) + ']'; 412 if (isCss) { 413 psdStr = 'left: ' + (e.pageX - pos.x - window.scrollX) + 'px;top: ' + (e.pageY - pos.y - window.scrollY) + 'px;'; 414 } 415 // eslint-disable-next-line no-console 416 var target = document.createElement('div'); 417 target.id = 'tempTarget'; 418 target.style.opacity = '0'; 419 target.style.position = 'absolute'; 420 target.innerText = psdStr; 421 var range = document.createRange(); 422 var target2 = document.body.appendChild(target); 423 try { 424 range = document.createRange(); 425 range.selectNode(target); 426 window.getSelection().removeAllRanges(); 427 window.getSelection().addRange(range); 428 document.execCommand('copy'); 429 window.getSelection().removeAllRanges(); 430 // eslint-disable-next-line no-catch-shadow 431 } catch (error) {} 432 target.remove(); 433 target2.remove(); 434 }); 435 }, 436 /** 437 * å é¤é¾æ¥ä¸çhtmlåç¼ 438 * @param {String} url éè¦å¤ççurlå符串 439 */ 440 removeHtml: function(url) { 441 if (Config.debugInF9) { 442 return url.replace(/\.html/ig, ''); 443 } 444 return url; 445 }, 446 // 饼å¾èªå¨åæ¢ 447 pieAuto: function(curChart, chartLength, timer) { 448 var mytimer = timer || 3000; 449 var app = { 450 currentIndex: -1 451 }; 452 clearInterval(curChart.timer); 453 curChart.timer = setInterval(function() { 454 var dataLen = chartLength; 455 // åæ¶ä¹åé«äº®çå¾å½¢
456 curChart.dispatchAction({ 457 type: 'downplay', 458 seriesIndex: 0, 459 dataIndex: app.currentIndex 460 }); 461 app.currentIndex = (app.currentIndex + 1) % dataLen; 462 // é«äº®å½åå¾å½¢ 463 curChart.dispatchAction({ 464 type: 'highlight', 465 seriesIndex: 0, 466 dataIndex: app.currentIndex 467 }); 468 // æ¾ç¤º tooltip 469 curChart.dispatchAction({ 470 type: 'showTip', 471 seriesIndex: 0, 472 dataIndex: app.currentIndex 473 }); 474 }, mytimer); 475 }, 476 477 /** 478 * 彿°é²æ 479 * @param func æ§è¡å½æ° 480 * @param delay å»¶è¿æ¶é´ï¼ä¸ä¼ é»è®¤160ms 481 */ 482 debounce: function(func, delay) { 483 var timeout; 484 return function(e) { 485 clearTimeout(timeout); 486 var context = this, 487 args = arguments; 488 timeout = setTimeout(function() { 489 func.apply(context, args); 490 }, delay || 160) 491 }; 492 }, 493 // å»é¤htmlæ ç¾ä¸çæ¢è¡ç¬¦åç©ºæ ¼ 494 clearHtml: function(html) { 495 return html.replace(/(\r\n|\n|\r)/g, "") 496 .replace(/[\t ]+\</g, "<") 497 .replace(/\>[\t ]+\</g, "><") 498 .replace(/\>[\t ]+$/g, ">"); 499 }, 500 /** 501 * ç¾åæ»å¨æ¡ 502 * @param {*} dom æ»å¨æ¡å®¹å¨classæè id 503 * @param {*} subdom ç´æ¥åå ç´ 504 * @param {*} param æ»å¨æ¡é ç½®åæ°ï¼ä¸ä¼ å使ç¨opté»è®¤æ ·å¼ 505 */ 506 niceScroll: function(dom, subdom, param) { 507 var opt = $.extend({ 508 cursorwidth: "6px", 509 cursorborder: 0, 510 cursorcolor: "#c7c7c7", 511 background: "rgba(37,144,235,0)", 512 autohidemode: false 513 }, param); 514 if (subdom != "") { 515 dom.niceScroll(subdom, opt); 516 } else { 517 dom.niceScroll(opt); 518 } 519 }, 520 /** 521 * éç½®æ»å¨æ¡ 522 * @param {*} dom æ»å¨æ¡å®¹å¨classæè id 523 */ 524 resetNiceScroll: function(dom) { 525 dom.getNiceScroll().resize(); 526 }, 527 // layerå¼¹åºå± 528 layer: function(config) { 529 layer.open($.extend(config, { 530 type: 2, 531 title: false, 532 closeBtn: false, 533 shadeClose: false 534 })); 535 }, 536 /** 537 * tab忢 538 * @param {*} dom tab忢dom对象 539 * @param {*} opts é 置项 540 */ 541 tabview: function(dom, opts) { 542 $(dom).each(function(index, el) { 543 new TabView($.extend({ 544 dom: el, 545 activeCls: 'current', 546 triggerEvent: 'click', 547 speed: 50 548 }, opts)); 549 }); 550 }, 551 // 夿æµè§å¨æ¯å¦ä¸ºIE9ä»¥ä¸ 552 isIE9Below: function() { 553 if (navigator.appName === 'Microsoft Internet Explorer') { 554 if (parseInt(navigator.appVersion.split(";")[1].replace(/[ ]/g, "").replace("MSIE", "")) < 9) { 555 return true; 556 } else { 557 return false; 558 } 559 } 560 }, 561 /** 562 * æ¥ææ¯è¾ 563 * @param {*} stime å¼å§æ¥æ 564 * @param {*} etime ç»ææ¥æ 565 */ 566 checkEndTime: function(stime, etime) { 567 var start = new Date(stime.replace("-", "/").replace("-", "/")), 568 end = new Date(etime.replace("-", "/").replace("-", "/")); 569 if (end < start) { 570 return false; 571 } 572 return true; 573 }, 574 /** 575 * å¤è¡çç¥ 576 * @param {*} $dom dom对象 577 * @param {*} rowNumber è¡æ° 578 * @param {*} offset æåä¸è¡åç§»éï¼é»è®¤1ï¼å³å³ä¾§ä¸ç©ºä½ç½® 579 */ 580 multilineEllipsis: function($dom, rowNumber, offset) { 581 var offsetNumer = offset || 1, 582 txt = $.trim($dom.text()), 583 txtFontSize = parseInt($dom.css("fontSize").split("px")[0]), 584 wordsNumber = Math.floor($dom.width() / txtFontSize); 585 if (txt.length > wordsNumber * (rowNumber - offset + 1)) { 586 $dom.text(txt.substring(0, (rowNumber - 1) * wordsNumber + wordsNumber / offsetNumer) + "..."); 587 } 588 },
589 // 页é¢å°ºå¯¸åçååæ¶ 590 pageResize: function(callback, time) { 591 var resizeTimer = null; 592 $(window).on('resize', function() { 593 if (resizeTimer) { 594 clearTimeout(resizeTimer); 595 } 596 resizeTimer = setTimeout(function() { 597 callback(); 598 }, time || 400); 599 }); 600 }, 601 // æç §æ ¼å¼è¾åºæ¥æï¼å¦ï¼yyyy-MM-dd HH:mm:ss 602 dateFormat: function(date, fmt) { 603 var o = { 604 "M+": date.getMonth() + 1, //æä»½ 605 "d+": date.getDate(), //æ¥ 606 "h+": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, //å°æ¶ 607 "H+": date.getHours(), //å°æ¶ 608 "m+": date.getMinutes(), //å 609 "s+": date.getSeconds(), //ç§ 610 "q+": Math.floor((date.getMonth() + 3) / 3), //å£åº¦ 611 "S": date.getMilliseconds() //æ¯«ç§ 612 }; 613 var week = { 614 "0": "\u65e5", 615 "1": "\u4e00", 616 "2": "\u4e8c", 617 "3": "\u4e09", 618 "4": "\u56db", 619 "5": "\u4e94", 620 "6": "\u516d" 621 }; 622 if (/(y+)/.test(fmt)) { 623 fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length)); 624 } 625 if (/(E+)/.test(fmt)) { 626 fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[date.getDay() + ""]); 627 } 628 for (var k in o) { 629 if (new RegExp("(" + k + ")").test(fmt)) { 630 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 631 } 632 } 633 return fmt; 634 }, 635 // è·åurlåæ°å¼ 636 getUrlParams: function(name) { 637 var params = {}, 638 639 query = location.search.substring(1), 640 arr = query.split('&'), 641 rt; 642 643 $.each(arr, function(i, item) { 644 var tmp = item.split('='), 645 key = tmp[0], 646 val = decodeURIComponent(tmp[1]); 647 648 if (typeof params[key] == 'undefined') { 649 params[key] = val; 650 651 } else if (typeof params[key] == 'string') { 652 params[key] = [params[key], val]; 653 654 } else { 655 params[key].push(val); 656 } 657 }); 658 659 rt = name ? params[name] : params; 660 661 return rt; 662 }, 663 // æ¯å¦ä¸ºç§»å¨ç«¯ 664 isMobile: function() { 665 var ua = navigator.userAgent; 666 667 var detect = { 668 // æ¯å¦ä¸ºç§»å¨ç»ç«¯ 669 mobile: !!ua.match(/AppleWebKit.*Mobile.*/), 670 // iosç»ç«¯ 671 ios: !!ua.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), 672 // androidç»ç«¯æè ucæµè§å¨ 673 android: ua.indexOf('Android') > -1 || ua.indexOf('Linux') > -1, 674 // æ¯å¦ä¸ºiPhoneæè QQHDæµè§å¨ 675 iPhone: ua.indexOf('iPhone') > -1, 676 // æ¯å¦iPad 677 iPad: ua.indexOf('iPad') > -1 678 }; 679 680 return (detect.mobile || detect.ios || detect.android || detect.iPhone || detect.iPad); 681 }, 682 /** 683 * 设置左å³çé« 684 * @param {*} left å·¦ä¾§å®¹å¨ 685 * @param {*} right å³ä¾§å®¹å¨ 686 */ 687 setEqualHeight: function(left, right) { 688 var l = $(left).height(), 689 r = $(right).height(); 690 $(left + "," + right).css('height', l > r ? l : r); 691 }, 692 /** 693 * æåº 694 * @param {*} data æ°ç» 695 * @param {*} key æåºå段ï¼é»è®¤"value" 696 * @param {*} order æåºé¡ºåºï¼é»è®¤éåº"0" 697 */ 698 sort: function(data, sortField, order) { 699 var order = order || 0, 700 sortField = sortField || "value"; 701 var compare = function(key) { 702 return function(value1, value2) { 703 var val1 = value1[key]; 704 var val2 = value2[key]; 705 if (order == 0) { 706 return val2 - val1; 707 } else { 708 return val1 - val2; 709 } 710 } 711 } 712 return data.sort(compare(sortField)) 713 }, 714 /** 715 * æåæ»å¨ 716 * @param {*} dom æåæ»å¨çclass 717 * @param {*} config é 置项 718 */ 719 liMarquee: function(dom, config) { 720 var dom = dom || ".text-scroll"; 721 $(dom).liMarquee($.extend({ 722 runshort: false, 723 scrollamount: 20 724 }, config)); 725 }, 726 /** 727 * è¿åº¦æ¡å¨ç» 728 * @param {*} space å½åç©ºé´ 729 * @param {*} speed é度ï¼é»è®¤200 730 * @param {*} callback åè° 731 */ 732 progressBar: function(space, speed, callback) { 733 $("." + space + "-" + "percent").each(function(i, e) { 734 $(this).stop().animate({ 735 "width": $(this).attr("data-width") 736 }, speed || 200, function() { 737 callback 738 }); 739 }); 740 }, 741 /** 742 * @name å¤ææ°æ®æ¯å¦ä¸ºæ°ç» 743 * @param {Object|Array} data 744 * @return {Booleam} è¿åå¼ 745 */ 746 isArray: function(data) { 747 return Object.prototype.toString.call(data) === "[object Array]"; 748 }, 749 /** 750 * mustache æ¨¡æ¿æ¸²æ 751 * @param {*} id 模æ¿id 752 * @param {*} data æ°æ® 753 */ 754 mustache: function(id, data) { 755 var isArray = this.isArray(data); 756 data = isArray ? { 757 items: data 758 } : data; 759 var dom = document.getElementById(id); 760 var tpl = dom ? dom.innerHTML : dom; 761 return Mustache.render(tpl, data); 762 }, 763 /** 764 * @name ä¸ºç¶ææ·»å æå表述 765 * @param {Object|Array} data 766 * @example 767 * var data= [{status:1},{status:2},...] 768 * Util.setStatusText(data,'status','statusText',{ 769 * 1:'å¾ æäº¤', 770 * 2:'æäº¤å®æ' 771 * }) 772 * // [{status:1,statusText:'å¾ æäº¤'},{status:2,statusText:'æäº¤å®æ'},...] 773 */ 774 setStatusText: function(data, key, name, status) { 775 if (Util.isArray(data)) { 776 $(data).each(function() { 777 Util.setStatusText(this, key, name, status); 778 }); 779 } else { 780 for (var k in status) { 781 if (data[key] == k) data[name] = status[k]; 782 } 783 } 784 }, 785 /** 786 * @name æ ¹æ®å ³é®åèªå®ä¹å符串 787 * @param {Object|Array} data æ°æ® 788 * @param {String} value å ³é®å 789 * @param {String} replace èªå®ä¹è§å - {{name}} ä¸ç name 表示éè¦æ¥æ¾çå¼çåæ®µå 790 * @return {array}
790 带æé«äº®çæ°ç» 791 * @example 792 * var data =[{name:'æè¦ç»è¿æ®µè¯ä¸çè¿æ®µè¯æ·»å é«äº®'}] 793 * Util.replaceStrByKey(data,'è¿æ®µè¯','<span style="color:#f00">{{name}}</span>') 794 * // [{name:'æè¦ç»è¿æ®µè¯ä¸çè¿æ®µè¯æ·»å é«äº®',replaceName:"æè¦ç»<span stype="color:#f00">è¿æ®µè¯<span>ä¸ç<span stype="color:#f00">è¿æ®µè¯<span>æ·»å é«äº®"}] 795 */ 796 replaceStrByKey: function(data, key, replace) { 797 var value = key.toString().replace(/\s*/g, ""), 798 regValue = new RegExp(value, "g"), 799 matchName = replace.match(/{{([\s\S]*?)}}/), 800 name = matchName[1].replace(/\s*/g, ""), 801 replaceName = matchName[0], 802 regName = new RegExp(replaceName, "g"); 803 804 if (Util.isArray(data)) { 805 $.each(data, function() { 806 var v = this[name].toString(); 807 this["search" + name] = v.replace(regValue, function(str) { 808 return "<span>" + str + "</span>"; 809 }); 810 }); 811 } else { 812 var v = data[name].toString(); 813 data["replace" + name] = v.replace(regValue, function(str) { 814 return replace.replace(regName, str); 815 }); 816 } 817 818 return data; 819 }, 820 // è·åç®æ çç±»å 821 getType: function(obj) { 822 var s = Object.prototype.toString.call(obj); 823 return s.substring(8, s.length - 1).toLowerCase(); 824 }, 825 /** 826 * 设置å¤Yè½´åæ¥å岿®µæ° 827 * @param {*} chart å¾è¡¨å®ä¾ 828 * @param {*} data å¾è¡¨æ°æ® 829 * @param {*} keyArr valueçkeyå¼['key1','key2',...] 830 * @param {*} segment å岿®µæ°ï¼é»è®¤5 831 */ 832 alignSplitLine: function(chart, data, keyArr, segment) { 833 var option = []; 834 $.each(keyArr, function(i, e) { 835 var max = parseInt(FUtil.getMax(data, e)), 836 maxArr = (max + "").split(""), 837 numlength = maxArr.length, 838 value = 0; 839 if (max < 1000) { 840 value = (parseInt(maxArr[0]) + 1) * Math.pow(10, numlength - 1); 841 } else { 842 value = parseInt(maxArr[0]) * Math.pow(10, numlength - 1) + (parseInt(maxArr[1]) + 1) * Math.pow(10, numlength - 2); 843 } 844 option.push({ 845 max: value, 846 interval: value / (segment || 5) 847 }); 848 }); 849 chart.setOption({ 850 yAxis: option 851 }); 852 }, 853 /** 854 * 读ç§åè®¡æ¶ 855 * @param Kï¼ç§æ°ï¼idï¼å®¹å¨id 856 * @param successcallback 读ç§ç»æåè° 857 */ 858 secondCountDown: function(K, id, successcallback) { 859 document.getElementById(id).innerText = K; 860 K = K - 1; 861 if (K >= 0) { 862 var timer = setTimeout(function() { 863 FUtil.secondCountDown(K, id, successcallback); 864 }, 1000); 865 } else { 866 successcallback(); 867 } 868 }, 869 /** 870 * 页é¢resizeäºä»¶ä¼å 871 * @param {*} callback åè° 872 * @param {*} time ååºæ¶é´ 873 */ 874 pageResize: function(callback, time) { 875 var resizeTimer = null; 876 $(window).on('resize', function() { 877 if (resizeTimer) { 878 clearTimeout(resizeTimer); 879 } 880 resizeTimer = setTimeout(function() { 881 callback(); 882 }, time || 400); 883 }); 884 }, 885 /** 886 * æ¥ææ¯è¾ 887 * @param {*} stime å¼å§æ¥æ 888 * @param {*} etime ç»ææ¥æ 889 */ 890 checkEndTime: function(stime, etime) { 891 var start = new Date(stime.replace("-", "/").replace("-", "/")), 892 end = new Date(etime.replace("-", "/").replace("-", "/")); 893 if (end < start) { 894 return false; 895 } 896 return true; 897 }, 898 /** 899 * layerå¼¹åºå± 900 * @param {*} config é 置项 901 * @param {*} isParent æ¯å¦parentæå¼,é»è®¤false 902 */ 903 layer: function(config, isParent) { 904 var openState = isParent || false; 905 var par = $.extend(config, { 906 type: 2, 907 title: false, 908 closeBtn: false, 909 shadeClose: false 910 }); 911 openState ? parent.layer.open(par) : layer.open(par) 912 }, 913 /** 914 * @name 渲æå页 915 * @param {id} string å页æ ç¾çid 916 * @param {Nubmer} pageindex å½å页 917 * @param {Nubmer} pagesize æ¯é¡µæ¡ç®æ° 918 * @param {Nubmer} total æ»é¡µæ° 919 * @param {Function} fn å页æé®ç¹å»ä¹å触åç彿° 920 */ 921 renderPager: function(id, pageindex, pagesize, total, fn) { 922 var $pager = $(document.getElementById(id)); 923 if ($pager.pagination()) { 924 $pager.pagination("setPageIndex", pageindex); 925 $pager.pagination("setPageSize", pagesize); 926 $pager.pagination("render", total); 927 } else { 928 var pagerConfig = { 929 pageIndex: pageindex, 930 pageSize: pagesize, 931 pageBtnCount: 7, 932 total: total, 933 showInfo: true, 934 showJump:true, 935 infoFormat: "{currentPageIndex}/{allPage} å ± {total}æ¡" 936 }; 937 if (FUtil.isMobile()) { 938 $pager.pagination($.extend(pagerConfig, { 939 pageBtnCount: 3, 940 showFirstLastBtn: false, 941 showInfo: false, 942 showJump:true, 943 showPageSizes: false 944 })); 945 } else { 946 $pager.pagination(pagerConfig); 947 } 948 $pager.on("pageClicked jumpClicked pageSizeChanged", function(e, data) { 949 fn && fn(data.pageIndex, data.pageSize); 950 }); 951 } 952 $pager.toggle(pagesize < total); 953 } 954 955 956});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.