ext-base.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. function msginfo(info, type, func){
  2. if(!type){
  3. type = "error";
  4. }
  5. swal({
  6. title:"",
  7. text:info,
  8. type: type,
  9. confirmButtonColor: "#27c24c",
  10. confirmButtonText:"确定"
  11. },function(){
  12. if(func){
  13. func();
  14. }
  15. });
  16. }
  17. /**
  18. jquery easyUI 回调函数
  19. */
  20. function fmtdt(value,row,index){
  21. var myDate = new Date(value.time);
  22. return myDate.getFullYear() + "-" + (myDate.getMonth()+1) + "-" + myDate.getDate();
  23. }
  24. function formatDate(dt, fmt){
  25. var date = new Date(dt.time);
  26. var o = {
  27. "M+" : date.getMonth()+1, //月份
  28. "d+" : date.getDate(), //日
  29. "h+" : date.getHours(), //小时
  30. "m+" : date.getMinutes(), //分
  31. "s+" : date.getSeconds(), //秒
  32. "q+" : Math.floor((date.getMonth()+3)/3), //季度
  33. "S" : date.getMilliseconds() //毫秒
  34. };
  35. if(/(y+)/.test(fmt)) {
  36. fmt=fmt.replace(RegExp.$1, (date.getFullYear()+"").substr(4 - RegExp.$1.length));
  37. }
  38. for(var k in o) {
  39. if(new RegExp("("+ k +")").test(fmt)){
  40. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
  41. }
  42. }
  43. return fmt;
  44. }
  45. function __showLoading(){
  46. var sload = $('#loadingdiv');
  47. if(sload.size() == 0){
  48. sload = $('<div id="loadingdiv" class="sk-spinner sk-spinner-three-bounce" style="position:absolute;z-index:9999"><div class="sk-bounce1"></div><div class="sk-bounce2"></div><div class="sk-bounce3"></div></div>').appendTo('body');
  49. window.loadCompCnt = 1;
  50. }else{
  51. window.loadCompCnt = window.loadCompCnt + 1;
  52. }
  53. var doc = $(document);
  54. var win = $(window);
  55. var t = doc.scrollTop() + win.height()/2 - 50;
  56. var l = doc.scrollLeft() + win.width()/2 - 50;
  57. sload.css({'top':t, 'left':l});
  58. sload.show();
  59. }
  60. function __hideLoading(){
  61. window.loadCompCnt = window.loadCompCnt - 1;
  62. if(window.loadCompCnt == 0){
  63. $("#loadingdiv").remove();
  64. delete window.loadCompCnt;
  65. }
  66. }
  67. /**
  68. 配置气泡大小
  69. 转换到 10 到 50
  70. **/
  71. function bubbleSize(maxval, minval, val, targetMax){
  72. if(maxval == minval){
  73. return 40;
  74. }
  75. if(!targetMax){
  76. targetMax = 50;
  77. }
  78. var r = (targetMax-10)/(maxval-minval)*(val-minval)+10;
  79. return r;
  80. }
  81. function formatNumber(num,pattern, shortname){
  82. if(!pattern || pattern.length == 0){
  83. return num;
  84. }
  85. var shortdw;
  86. if(shortname && num > 100000000){
  87. num = num / 100000000;
  88. shortdw = "亿";
  89. }else if(shortname && num > 10000000){
  90. num = num / 10000000;
  91. shortdw = "千万";
  92. }else if(shortname && num > 1000000){
  93. num = num / 1000000;
  94. shortdw = "百万";
  95. }else if(shortname && num > 10000){
  96. num = num / 10000;
  97. shortdw = "万";
  98. }else if(shortname && num > 1000){
  99. num = num / 1000;
  100. shortdw = "千";
  101. }
  102. if(pattern.indexOf("%") <= 0 && shortname){
  103. return (Math.round(num * 10) / 10) + (shortdw?shortdw:"");
  104. }
  105. if(pattern.indexOf("%") > 0){
  106. num = num * 100;
  107. }
  108. var fmtarr = pattern?pattern.split('.'):[''];
  109. var retstr='';
  110. //先对数据做四舍五入
  111. var xsw = 0;
  112. if(fmtarr.length > 1){
  113. xsw = fmtarr[1].length;
  114. }
  115. var bl = 1;
  116. for(i=0; i<xsw; i++){
  117. bl = bl * 10;
  118. }
  119. num = num * bl;
  120. num = Math.round(num);
  121. num = num / bl;
  122. var strarr = num?num.toString().split('.'):['0'];
  123. // 整数部分
  124. var str = strarr[0];
  125. var fmt = fmtarr[0];
  126. var i = str.length-1;
  127. var comma = false;
  128. for(var f=fmt.length-1;f>=0;f--){
  129. switch(fmt.substr(f,1)){
  130. case '#':
  131. if(i>=0 ) retstr = str.substr(i--,1) + retstr;
  132. break;
  133. case '0':
  134. if(i>=0) retstr = str.substr(i--,1) + retstr;
  135. else retstr = '0' + retstr;
  136. break;
  137. case ',':
  138. comma = true;
  139. retstr=','+retstr;
  140. break;
  141. }
  142. }
  143. if(i>=0){
  144. if(comma){
  145. var l = str.length;
  146. for(;i>=0;i--){
  147. retstr = str.substr(i,1) + retstr;
  148. if(i>0 && ((l-i)%3)==0) retstr = ',' + retstr;
  149. }
  150. }
  151. else retstr = str.substr(0,i+1) + retstr;
  152. }
  153. retstr = retstr+'.';
  154. // 处理小数部分
  155. str=strarr.length>1?strarr[1]:'';
  156. fmt=fmtarr.length>1?fmtarr[1]:'';
  157. i=0;
  158. for(var f=0;f<fmt.length;f++){
  159. switch(fmt.substr(f,1)){
  160. case '#':
  161. if(i<str.length) retstr+=str.substr(i++,1);
  162. break;
  163. case '0':
  164. if(i<str.length) retstr+= str.substr(i++,1);
  165. else retstr+='0';
  166. break;
  167. }
  168. }
  169. var r = retstr.replace(/^,+/,'').replace(/\.$/,'');
  170. if(pattern.indexOf("%") > 0){
  171. r = r + "%";
  172. }
  173. if(shortdw){
  174. r = r + shortdw;
  175. }
  176. return r;
  177. }
  178. function getCalendar(divId, dt, minval, maxval){
  179. var url = 'CalendarView.action';
  180. $("#"+divId).load(url, {dt:dt, "max":maxval, "min":minval});
  181. }
  182. /**
  183. 日历提交
  184. **/
  185. function calendarPost(event, ts,value, cb){
  186. $("table.calen td").removeClass("curdt");
  187. $(ts).parent().addClass("curdt");
  188. if(cb){
  189. cb(event, ts, value);
  190. }
  191. }
  192. function selectyearmonth(){
  193. var isopen = $("#selyearmonth").attr("isopen");
  194. if(isopen && "y" == isopen){
  195. $("#selyearmonth").css("display","none").attr("isopen", "n");
  196. }else{
  197. $("#selyearmonth").css("display","block").attr("isopen", "y");
  198. }
  199. }
  200. function postpage(pageObj, servid, method, fromMV, subm, check, confirmState, exportDG, issubmit){
  201. var obj = document.forms[pageObj.formId];
  202. obj.elements[pageObj.sidKey].value = servid;
  203. obj.elements[pageObj.midKey].value = method;
  204. obj.elements[pageObj.fromId].value = fromMV;
  205. obj.elements[pageObj.exportKey].value = exportDG;
  206. obj.method = subm;
  207. if(!check){
  208. obj.onsubmit = null;
  209. }
  210. pageObj.needConfirm = confirmState;
  211. if(issubmit){
  212. //如果需要check 判断 checkRequire 是否返回 true
  213. if(check && checkRequire(obj)){
  214. obj.submit();
  215. }
  216. //如果不需要check, 直接提交
  217. if(!check){
  218. obj.submit();
  219. }
  220. }
  221. }
  222. //分页提交
  223. function gotopage(vf,str,cp,fromId){
  224. var ff = document.forms[vf.formId];
  225. ff.elements[cp].value=str;
  226. ff.elements[vf.sidKey].value = vf.sidValue;
  227. ff.elements[vf.midKey].value = vf.midValue;
  228. ff.elements[vf.fromId].value = fromId;
  229. ff.method = "post";
  230. ff.submit();
  231. }
  232. function keygoto(evt, pinfo, dgId, pageSize, currPage, params, fromMVId){
  233. evt = window.event || evt;
  234. if(evt.keyCode==13){//如果取到的键值是回车
  235. gotobyajax(pinfo, dgId, pageSize, currPage, params, fromMVId);
  236. }
  237. }
  238. function keygoto2(evt, vf,str,cp,fromId){
  239. evt = window.event || evt;
  240. if(evt.keyCode==13){//如果取到的键值是回车
  241. var ff = document.forms[vf.formId];
  242. ff.elements[cp].value=str;
  243. ff.elements[vf.sidKey].value = vf.sidValue;
  244. ff.elements[vf.midKey].value = vf.midValue;
  245. ff.elements[vf.fromId].value = fromId;
  246. ff.method = "post";
  247. //ff.submit();
  248. }
  249. }
  250. function gotobyajax(pinfo,dgId, pageSize, currPage, params, fromMVId){
  251. var url = "";
  252. if(pinfo == null){
  253. url = "../control/extControl?serviceid=ext.sys.fenye.ajax&currPage="+currPage+"&id="+dgId+"&pageSize="+pageSize+"&t_from_id="+fromMVId;
  254. }else{
  255. url = pinfo.resPath + "control/" + pinfo.extAction+"?"+pinfo.sidKey+"=ext.sys.fenye.ajax&currPage="+currPage+"&id="+dgId+"&pageSize="+pageSize+"&"+pinfo.fromId+"="+fromMVId;
  256. }
  257. __showLoading();
  258. jQuery.ajax({
  259. type: "POST",
  260. url: url,
  261. dataType:"html",
  262. data: params,
  263. success: function(resp){
  264. __hideLoading();
  265. jQuery("#" + dgId).html(resp);
  266. },
  267. error:function(resp){
  268. __hideLoading();
  269. jQuery.messager.alert('出错了','系统出错,请联系管理员。','error');
  270. }
  271. });
  272. }
  273. //检查checkBox是否勾选
  274. function checkRadio(ff, targetId, tp){
  275. if (tp == 'radio') {
  276. var obj = ff.elements[targetId];
  277. if (obj == null || obj == undefined) {
  278. return false;
  279. }
  280. if (obj.length == undefined) {
  281. return obj.checked;
  282. }
  283. var isExist = false;
  284. for (i = 0; i < obj.length; i++) {
  285. if (obj[i].checked == true) {
  286. isExist = true;
  287. break;
  288. }
  289. }
  290. return isExist;
  291. }else{
  292. var obj = ff.elements[targetId];
  293. if (obj == null || obj == undefined) {
  294. return false;
  295. }
  296. if(obj.value == ''){
  297. return false;
  298. }
  299. return true;
  300. }
  301. }
  302. /***
  303. * 提交到一个MV
  304. */
  305. function post2MV(config){
  306. for(i=0; i<config.length; i++){
  307. __post2MV(config[i].target, config[i].url, config[i].paramNames, config[i].fname);
  308. }
  309. }
  310. function __post2MV(targetId, url, paramNames, fname){
  311. var parms = "";
  312. for(var i=0; i<paramNames.length; i++){
  313. var tp = paramNames[i].type;
  314. var p = paramNames[i].name;
  315. //采用jQuery方式取值
  316. if(tp == 'radio'){
  317. var val = jQuery('input:radio[name='+p+']:checked').val();
  318. if(!val){
  319. val = "";
  320. }
  321. parms = parms + p + "=" + val + "&";
  322. }else if(tp == 'checkBox'){
  323. $("input[name=\""+p+"\"]:checked").each(function(a, b){
  324. var v = $(b).val();
  325. parms = parms + p + "=" + v + "&";
  326. });
  327. }else{
  328. var val = null;
  329. if(paramNames[i].type == 'mselect'){ //多选需要特殊处理
  330. val = jQuery('#'+p).combobox("getValues");
  331. jQuery('#'+p).combobox("destroy");
  332. }else if(paramNames[i].type == 'tree'){ //tree类型参数特殊处理
  333. val = jQuery('#'+p).combobox("getValue");
  334. //选择完后需要destory组件, 防止以前的HTML在页面堆积
  335. jQuery('#'+p).combobox("destroy");
  336. }else{
  337. val = jQuery('#'+p).val();
  338. }
  339. parms = parms + p + "=" + val + "&";
  340. }
  341. /**
  342. var rets = document.forms[fname].elements[p];
  343. var tp = jQuery(rets).attr('type');
  344. if(tp != 'radio' && tp != 'checkbox'){
  345. parms = parms + p + "=" + rets.value+"&";
  346. }else{
  347. //是checkbox或radio
  348. for(var j=0; j<rets.length; j++){
  349. if(rets[j].checked){
  350. parms = parms + p + "=" + rets[j].value+"&";
  351. }
  352. }
  353. }
  354. **/
  355. }
  356. __showLoading();
  357. jQuery.ajax({
  358. type: "POST",
  359. url: url,
  360. dataType:"html",
  361. data: parms,
  362. success: function(resp){
  363. __hideLoading();
  364. $(document.getElementById(targetId)).html(resp);
  365. },
  366. error:function(resp){
  367. __hideLoading();
  368. $.messager.alert('出错了','系统出错,请联系管理员。','error');
  369. }
  370. });
  371. }
  372. //交叉表的body进行滚动时,header也进行滚动
  373. function tableBodyscroll(id){
  374. $("#"+id+" .lock-dg-body").scroll(function(){
  375. var left = $(this).scrollLeft();
  376. $("#"+id+" .lock-dg-header").css("margin-left", "-"+left+"px");
  377. });
  378. }
  379. /**
  380. * 维度钻取
  381. * @return
  382. */
  383. function fieldDirll(config){
  384. var fields = jQuery('#' + config.table + " td[drillid='"+config.pid+"'] .crossDirll").bind('click', function(e){
  385. var thiz = jQuery(this);
  386. if(thiz.attr('isopen') == 0){
  387. var tabTr = thiz.parent().css('font-weight', 'bold').parents("tr.tr-row1,tr.tr-row2");
  388. //获取内容
  389. __showLoading();
  390. var parms = thiz.attr('parms');
  391. if(config.text != undefined && config.text != ""){
  392. parms = parms + '&text=' + jQuery.fn.toJSON(config.text);
  393. }
  394. jQuery.ajax({url: config.url, data: parms, type:'POST', dataType:'html', success: function(resp){
  395. jQuery(resp).insertAfter(tabTr);
  396. __hideLoading();
  397. }});
  398. thiz.addClass('crossDirll-open');
  399. thiz.attr('isopen', '1');
  400. }else{
  401. __nodeRemove(thiz.parent().css('font-weight', 'normal'), config);
  402. thiz.removeClass('crossDirll-open');
  403. thiz.attr('isopen', '0');
  404. }
  405. });
  406. }
  407. function __nodeRemove(target, config){
  408. var pid = target.children('.crossDirll').attr('pid');
  409. jQuery('#' + config.table+' td[drillid="'+pid+'"]').each(function(a, b){
  410. __nodeRemove(jQuery(b), config);
  411. jQuery(b).parent().remove();
  412. });
  413. }
  414. /**
  415. * 图形,表格连接
  416. **/
  417. function chartComp_Link(x, xval, url, pms, compId, tps, fromId){
  418. if(url == null || url == 'null'){
  419. alert("未定义接收组件。");
  420. return;
  421. }
  422. var tparam = pms;
  423. var box = $("#"+fromId).parents(".ibox-content");
  424. if(box.find(".eventback").size() == 0){ //创建事件返回按钮
  425. $("<div class=\"eventback\"><span class=\"label label-success\"><i class=\"fa fa-arrow-left\"></i>返回</span></div>").prependTo(box).click(function(){
  426. $(this).remove();
  427. var pp = {};
  428. var p = tparam.split("&");
  429. for(i=0; i<p.length; i++){
  430. var tmp = p[i].split("=");
  431. var k = tmp[0];
  432. var v = tmp[1];
  433. pp[k] = v;
  434. }
  435. for(i=0; i<url.length; i++){
  436. var u = url[i];
  437. var d = compId[i];
  438. __showLoading();
  439. jQuery("#"+(tps[i]=="chart"?"p":"")+d).load(u, pp, function(){
  440. __hideLoading();
  441. });
  442. }
  443. });
  444. }
  445. pms = pms + x+"="+xval;
  446. var pp = {};
  447. var p = pms.split("&");
  448. for(i=0; i<p.length; i++){
  449. var tmp = p[i].split("=");
  450. var k = tmp[0];
  451. var v = tmp[1];
  452. pp[k] = v;
  453. }
  454. for(i=0; i<url.length; i++){
  455. var u = url[i];
  456. var d = compId[i];
  457. __showLoading();
  458. jQuery("#"+(tps[i]=="chart"?"p":"")+d).load(u, pp, function(){
  459. __hideLoading();
  460. });
  461. }
  462. }
  463. function rowActionFireTR(config){
  464. var obj = $('#' + config.id);
  465. obj.on('click','.row-link', function(e){
  466. var o = $(this).find("a.lka");
  467. var pms = o.attr("parms");
  468. var name = o.attr("name");
  469. var nameDesc = o.attr("nameDesc");
  470. var value = o.attr("value");
  471. var id = obj.parents(".dashboard-box").attr("id");
  472. config.cb(pms, id, name, nameDesc, value);
  473. });
  474. }
  475. /**
  476. * 通过点击表格更新组件
  477. * @return
  478. */
  479. function tableUpdateComp(config){
  480. var obj = $('#' + config.id);
  481. obj.on('click','.row-link', function(e){
  482. var tz = $(this);
  483. var box = $("#"+config.id).parents(".ibox-content");
  484. if(box.find(".eventback").size() == 0){ //创建事件返回按钮
  485. $("<div class=\"eventback\"><span class=\"label label-success\"><i class=\"fa fa-arrow-left\"></i>返回</span></div>").prependTo(box).click(function(){
  486. $(this).remove();
  487. for(i=0; i<config.url.length; i++){
  488. u = config.url[i].url;
  489. t = config.url[i].target;
  490. tp = config.url[i].type;
  491. var pp = {};
  492. var p = a.attr('parms' + i).split("&");
  493. for(j=0; j<p.length; j++){
  494. var tmp = p[j].split("=");
  495. var k = tmp[0];
  496. var v = tmp[1];
  497. if(k == config.linkParamName){
  498. continue;
  499. }
  500. pp[k] = v;
  501. }
  502. $("#"+(tp=="chart"?"p":"")+t).load(u, pp);
  503. }
  504. });
  505. }
  506. var a = tz.find('a.lka');
  507. if(a.size() > 0){
  508. $('#' + config.id + " .row-link").removeClass('link-selected');
  509. tz.addClass('link-selected');
  510. for(i=0; i<config.url.length; i++){
  511. u = config.url[i].url;
  512. t = config.url[i].target;
  513. tp = config.url[i].type;
  514. var pp = {};
  515. var p = a.attr('parms' + i).split("&");
  516. for(j=0; j<p.length; j++){
  517. var tmp = p[j].split("=");
  518. var k = tmp[0];
  519. var v = tmp[1];
  520. pp[k] = v;
  521. }
  522. $("#"+(tp=="chart"?"p":"")+t).load(u, pp);
  523. }
  524. }
  525. });
  526. }
  527. //全选
  528. function selectAll(ts, cid){
  529. if(ts.checked == true){
  530. $("input[name="+cid+"]").attr("checked",true).prop('checked', true);
  531. }else{
  532. $("input[name="+cid+"]").attr("checked",false);
  533. }
  534. }
  535. //报表清除参数
  536. function clear_params(paramNames){
  537. for(var i=0; i<paramNames.length; i++){
  538. var tp = paramNames[i].type;
  539. var p = paramNames[i].name;
  540. if(paramNames[i].type == 'mselect'){
  541. $('#'+p).combobox("clear");
  542. }else if(paramNames[i].type == 'select'){
  543. $('#'+p).val("");
  544. }else{
  545. $('#'+p).val("");
  546. }
  547. }
  548. };