util.js 24 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249
  1. /**
  2. *
  3. * 工具类
  4. *
  5. * @author xiacj
  6. * @version 1.0
  7. * @date 2019-01-24
  8. *
  9. */
  10. util = {
  11. generateId: function () {
  12. return Number(Math.random().toString().substr(3, 12) + Date.now()).toString(36);
  13. },
  14. /**
  15. * 判断表单值是否为空
  16. *
  17. * @param 表单
  18. */
  19. isNull: function (val) {
  20. if (val == null || val == undefined || val == "" || val == "undefined" ||
  21. val == "null") {
  22. return true;
  23. } else {
  24. return false;
  25. }
  26. },
  27. //弹出加载层
  28. load: function (msg) {
  29. $("<div class=\"datagrid-mask\"></div>").css({
  30. display: "block",
  31. width: "100%",
  32. position: "absolute",
  33. top: 0,
  34. left: 0,
  35. 'background-color': '#000000',
  36. 'z-index': 19891014,
  37. opacity: 0.4,
  38. height: $(window).height()
  39. }).appendTo("body");
  40. var msgDiv = $("<div class=\"datagrid-mask-msg\"></div>");
  41. var span = $("<span>" + msg + "</span>");
  42. msgDiv.append(span).appendTo("body");
  43. msgDiv.css({
  44. display: "block",
  45. position: "absolute",
  46. left: ($(document.body).outerWidth(true) - span.width()) / 2,
  47. top: ($(window).height() - 45) / 2
  48. });
  49. },
  50. //取消加载层
  51. disLoad: function () {
  52. $(".datagrid-mask").remove();
  53. $(".datagrid-mask-msg").remove();
  54. },
  55. //告警提示
  56. warning: function (msg) {
  57. util.showDialog(msg, 1);
  58. },
  59. //操作成功提示
  60. success: function (msg, closeParent) {
  61. closeParent = closeParent == undefined ? 1 : 0;
  62. var opts = {
  63. "closeParent": closeParent
  64. };
  65. util.showDialog(msg, 2, "no", opts);
  66. },
  67. //操作失败提示
  68. error: function (msg, closeParent) {
  69. closeParent = closeParent == undefined ? 1 : 0;
  70. var opts = {
  71. "closeParent": closeParent
  72. };
  73. util.showDialog(msg, 0, "no", opts);
  74. },
  75. /** 添加选项卡
  76. * @param {Object} href
  77. * @param {Object} title
  78. */
  79. addTab: function (link, title) {
  80. var keyList = []
  81. var href = link.lastIndexOf('&') > -1 ? link.substring(0, link.lastIndexOf('&')) : link
  82. for (var i = 0; i < window.top.$vm.$store.state.tabList.length; i++) {
  83. keyList.push(window.top.$vm.$store.state.tabList[i].name)
  84. }
  85. let set = window.top.$vm.$store.state.tabList
  86. if (keyList.indexOf(title) == -1) {
  87. set.push({ rountPath: href, name: title });
  88. window.top.$vm.$store.commit("setDefaultActive", href);
  89. window.top.$vm.$store.commit("setTabList", set);
  90. window.top.$vm.$router.push(href)
  91. }
  92. window.top.$vm.$store.commit("setDefaultActive", href);
  93. window.top.$vm.$store.commit("setTabList", set);
  94. window.top.$vm.$router.push(href)
  95. // window.open(href)
  96. // var tabId = href.split("?")[0];
  97. // var options = {
  98. // tabId: tabId, href: href, title: title, isIframe: true
  99. // }
  100. // var parentObj = util.getMainWin();
  101. // if (parentObj.miniTab.check(tabId, true)) {
  102. // parentObj.miniTab.delete(tabId);
  103. // }
  104. // href = util.addUrlToken(href);
  105. // parentObj.miniTab.create(options);
  106. // parentObj.miniTab.change(tabId);
  107. },
  108. addUrlToken: function (url) {
  109. if (url.indexOf("agileauthtoken") != -1) {
  110. return url;
  111. }
  112. if (url.indexOf("?") != -1) {
  113. if (url.indexOf("&") != -1) {
  114. var lastIndex = url.substring(url.length - 1);
  115. return url + (lastIndex != '&' ? '&' : '') + "agileauthtoken=" + util.getToken();
  116. }
  117. return url + "agileauthtoken=" + util.getToken();
  118. }
  119. return url + "?agileauthtoken=" + util.getToken();
  120. },
  121. removeTab: function () {
  122. var tabId = window.top.$(".layui-tab-title li.layui-this").attr('lay-id');
  123. util.getMainWin().miniTab.delete(tabId);
  124. },
  125. getMainWin: function (obj) {
  126. var parentObj = obj || parent;
  127. if (parentObj.$(".layui-tab-title").length > 0) {
  128. return parentObj;
  129. }
  130. return util.getMainWin(parentObj.parent); // 最外层可用window.top获取
  131. },
  132. //打开窗口
  133. openWin: function (url, title, w, h, opts, skin) {
  134. var closeBtnOpt = 1;
  135. w = w || 1000;
  136. h = h || 1000;
  137. if (opts != undefined && opts.closeBtn != undefined) {
  138. closeBtnOpt = opts.closeBtn;
  139. }
  140. var winW = $(document).width();
  141. var winH = $(window).height();
  142. if (winW < w) {
  143. w = winW - 60;
  144. }
  145. if (winH < h) {
  146. h = winH - 70;
  147. }
  148. if (h > 700) {
  149. h = 700;
  150. }
  151. var offSetX = (winW - w) / 2;
  152. var offSetY = (winH - h) / 2;
  153. if (title == null || title == '') {
  154. title = false;
  155. };
  156. if (url == null || url == '') {
  157. url = "404.html";
  158. };
  159. //w = 300;
  160. //h = 200;
  161. if (w == null || w == '') {
  162. w = 800;
  163. };
  164. if (h == null || h == '') {
  165. h = ($(window).height() - 50);
  166. };
  167. if (url.indexOf("?") != -1) {
  168. //url = url + "&"+ "_agileauthtoken="+$.getAndSaveToken();
  169. } else {
  170. //url = url +"?_agileauthtoken="+$.getAndSaveToken();
  171. }
  172. $("object.hideObject").hide();
  173. var layIndex = layer.open({
  174. type: 2,
  175. area: [w + 'px', h + 'px'],
  176. fix: false,
  177. maxmin: true,
  178. shade: 0.4,
  179. title: title,
  180. content: url,
  181. skin: 'layui-layer-lan ' + skin,
  182. offset: [offSetY + 'px', offSetX + 'px'],
  183. moveOut: false,
  184. closeBtn: closeBtnOpt,
  185. cancel: function () {
  186. // showObj();
  187. },
  188. full: function () {
  189. },
  190. min: function () {
  191. },
  192. end: function () {
  193. $("object.hideObject").show();
  194. //var body = layer.getChildFrame('body', layIndex);
  195. }
  196. });
  197. return layIndex;
  198. },
  199. /**
  200. *关闭窗口
  201. */
  202. closeWin: function () {
  203. var index = parent.layer.getFrameIndex(window.name);
  204. parent.layer.close(index);
  205. },
  206. /**
  207. *关闭所有窗口
  208. */
  209. closeAll: function () {
  210. layer.closeAll();
  211. },
  212. call: function (func, param) {
  213. var fn = window[func];
  214. return fn.call(null, param)
  215. },
  216. apply: function (func, param) {
  217. var fn = window[func];
  218. return fn.apply(null, param);
  219. },
  220. /**
  221. * @param {Object} retMsg
  222. * @param {Object} type
  223. * @param {Object} callBack
  224. * @param {Object} opts
  225. */
  226. showDialog: function (retMsg, type, callBack, opts) {
  227. util.closeAll();
  228. var winW = $(document).width();
  229. var winH = $(window).height() == 0 ? $(document).height() : $(window).height();
  230. var off = [(winH / 2 - 72) + 'px', (winW / 2 - 181) + 'px'];
  231. $("object.hideObject").hide();
  232. if (type == 2) {
  233. layer.alert(retMsg, {
  234. offset: off,
  235. title: ['\u63d0\u793a\u4fe1\u606f', true],
  236. icon: 1,
  237. closeBtn: 0
  238. }, function (index) {
  239. $("object.hideObject").show();
  240. layer.close(index);
  241. if (opts != undefined && opts.closeParent == 1) {
  242. util.closeWin();
  243. }
  244. if (util.isNull(callBack) || callBack == "no") {
  245. return;
  246. }
  247. if ($.isFunction(callBack)) {
  248. callBack.call(this);
  249. return;
  250. }
  251. if (callBack != "no") {
  252. var arr = callBack.split("=");
  253. eval(arr[1]);
  254. }
  255. });
  256. } else if (type == 1) {
  257. layer.alert(retMsg, {
  258. offset: off,
  259. title: ['\u63d0\u793a\u4fe1\u606f', true],
  260. icon: 0,
  261. closeBtn: 0
  262. }, function (index) {
  263. $("object.hideObject").show();
  264. layer.close(index);
  265. if (util.isNull(callBack) || callBack == "no") {
  266. return;
  267. }
  268. if ($.isFunction(callBack)) {
  269. callBack.call(this);
  270. return;
  271. }
  272. if (callBack != "no") {
  273. var arr = callBack.split("=");
  274. eval(arr[1]);
  275. }
  276. });
  277. } else if (type == 0) {
  278. layer.alert(retMsg, {
  279. offset: off,
  280. title: ['\u63d0\u793a\u4fe1\u606f', true],
  281. icon: 2,
  282. closeBtn: 0
  283. }, function (index) {
  284. $("object.hideObject").show();
  285. layer.close(index);
  286. if (util.isNull(callBack) || callBack == "no") {
  287. return;
  288. }
  289. if ($.isFunction(callBack)) {
  290. callBack.call(this, opts);
  291. return;
  292. }
  293. if (callBack != "no") {
  294. var arr = callBack.split("=");
  295. eval(arr[1]);
  296. }
  297. });
  298. } else if (type == 3) {
  299. layer.confirm(retMsg, {
  300. offset: off,
  301. closeBtn: 0,
  302. title: ['\u63d0\u793a\u4fe1\u606f', true],
  303. yes: function (index) {
  304. $("object.hideObject").show();
  305. layer.close(index);
  306. if (util.isNull(callBack) || callBack == "no") {
  307. return;
  308. }
  309. if ($.isFunction(callBack)) {
  310. callBack.call(this, opts);
  311. return;
  312. }
  313. if (callBack) {
  314. var arr = callBack.split(";")[0];
  315. arr = arr.substring(arr.indexOf("=") + 1);
  316. eval(arr);
  317. }
  318. }
  319. }, function (index) {
  320. $("object.hideObject").show();
  321. layer.close(index);
  322. if (util.isNull(callBack) || callBack == "no") {
  323. return;
  324. }
  325. if (callBack && callBack.split(";").length > 1) {
  326. var arr = callBack.split(";")[0].split("=");
  327. eval(arr[1]);
  328. }
  329. }, function (index) {
  330. $("object.hideObject").show();
  331. layer.close(index);
  332. });
  333. }
  334. },
  335. /**
  336. *获取查询字符串参数
  337. *
  338. */
  339. getUrlParam: function () {
  340. var param = {};
  341. try {
  342. var queryStr = window.location.search.substr(1);
  343. $.each(queryStr.split("&"), function (i, t) {
  344. var arr = t.split("=");
  345. if (!util.isNull(arr[0]) && arr.length == 2) {
  346. param[arr[0]] = util.decode(arr[1]);
  347. }
  348. });
  349. } catch (e) {
  350. console.log(e);
  351. }
  352. return param;
  353. },
  354. encode: function (url) {
  355. return encodeURI(url);
  356. },
  357. decode: function (url) {
  358. return decodeURIComponent(url).replace(/\+/g, " ");
  359. },
  360. getAgCtx: function (obj) {
  361. if (obj == undefined || obj == null) {
  362. return "sysmgr";
  363. }
  364. var ctx = $(obj).attr("ag-data-ctx");
  365. return util.isNull(ctx) ? "sysmgr" : ctx;
  366. },
  367. /*
  368. ** randomWord 产生任意长度随机字母数字组合
  369. ** randomFlag-是否任意长度 min-任意长度最小位[固定位数] max-任意长度最大位
  370. **
  371. */
  372. randomWord: function (randomFlag, min, max) {
  373. var str = "",
  374. range = min,
  375. arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
  376. 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
  377. 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
  378. ];
  379. // 随机产生
  380. if (randomFlag) {
  381. range = Math.round(Math.random() * (max - min)) + min;
  382. }
  383. for (var i = 0; i < range; i++) {
  384. pos = Math.round(Math.random() * (arr.length - 1));
  385. str += arr[pos];
  386. }
  387. return str;
  388. },
  389. randomNum: function (randomFlag, min, max) {
  390. var str = "",
  391. range = min,
  392. arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
  393. // 随机产生
  394. if (randomFlag) {
  395. range = Math.round(Math.random() * (max - min)) + min;
  396. }
  397. for (var i = 0; i < range; i++) {
  398. pos = Math.round(Math.random() * (arr.length - 1));
  399. str += arr[pos];
  400. }
  401. return str;
  402. },
  403. /**
  404. * 时间计算差
  405. *
  406. * @param {Object} timesData
  407. */
  408. timeDiff: function (timesData) {
  409. var dateBegin = new Date(timesData.replace(/-/g, "/")); //将-转化为/,使用new Date
  410. var dateEnd = new Date(); //获取当前时间
  411. var dateDiff = dateEnd.getTime() - dateBegin.getTime(); //时间差的毫秒数
  412. if (dateDiff < 0) {
  413. return "刚刚上传";
  414. }
  415. var dayDiff = parseInt(dateDiff / (24 * 3600 * 1000)); //计算出相差天数
  416. var leave1 = dateDiff % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  417. var hours = parseInt(leave1 / (3600 * 1000)) //计算出小时数
  418. //计算相差分钟数
  419. var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  420. var minutes = parseInt(leave2 / (60 * 1000)) //计算相差分钟数
  421. //计算相差秒数
  422. var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
  423. var seconds = parseInt(leave3 / 1000);
  424. var timesString = '';
  425. if (dayDiff > 0) {
  426. timesString = dayDiff + '天之前';
  427. } else if (dayDiff < 1 && hours > 0) {
  428. timesString = hours + '小时之前';
  429. } else if (dayDiff < 1 && hours < 1 && minutes > 0) {
  430. timesString = minutes + '分钟之前';
  431. } else if (dayDiff < 1 && hours < 1 && minutes < 1) {
  432. timesString = seconds + '秒之前';
  433. }
  434. return timesString;
  435. },
  436. getTime: function (datetime) {
  437. var date = datetime ? new Date(datetime) : new Date();
  438. var y = date.getFullYear() + '-';
  439. var mm = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  440. var d = date.getDate() + ' ';
  441. var h = ((date.getHours() + "").length == 1 ? "0" + date.getHours() : date.getHours()) + ':';
  442. var m = ((date.getMinutes() + "").length == 1 ? "0" + date.getMinutes() : date.getMinutes()) + ':';
  443. var s = ((date.getSeconds() + "").length == 1 ? "0" + date.getSeconds() : date.getSeconds());
  444. return y + mm + d + h + m + s;
  445. },
  446. trans: function (str) {
  447. var retStr = str;
  448. if (!util.isNull(str)) {
  449. retStr = str.replace(/=/g, "_isEqual");
  450. }
  451. return retStr;
  452. },
  453. deTrans: function (str) {
  454. var retStr = str;
  455. if (!util.isNull(str)) {
  456. retStr = str.replace(/_isEqual/g, "=");
  457. }
  458. return retStr;
  459. },
  460. urlToArr: function (url) {
  461. var paramJson = {};
  462. if (!util.isNull(url) && url.indexOf("?") != -1) {
  463. var arr = url.split("?")[1].split("&");
  464. for (var i = 0; i < arr.length; i++) {
  465. var arr2 = arr[i].split("=");
  466. if (arr2.length != 2) {
  467. continue;
  468. }
  469. paramJson[arr2[0]] = util.decode(arr2[1]);
  470. }
  471. }
  472. return paramJson;
  473. },
  474. /**
  475. * 动态加载 css.js
  476. * @param filename
  477. * @param filetype
  478. */
  479. loadJsCssfile: function (filename, filetype) {
  480. var fileref = undefined;
  481. if (filetype == "js") {
  482. fileref = document.createElement('script');
  483. fileref.setAttribute("type", "text/javascript")
  484. fileref.setAttribute("src", filename);
  485. } else if (filetype == "css") {
  486. fileref = document.createElement("link");
  487. fileref.setAttribute("rel", "stylesheet");
  488. fileref.setAttribute("type", "text/css");
  489. fileref.setAttribute("href", filename);
  490. }
  491. if (typeof fileref != "undefined") {
  492. document.getElementsByTagName("head")[0].appendChild(fileref);
  493. }
  494. },
  495. /**
  496. * 移出已经加载过的js/css
  497. * @param fileName
  498. * @param fileType
  499. */
  500. removeJsCssfile: function (filename, filetype) {
  501. var targetelement = (filetype == "js") ? "script" : (filetype == "css") ? "link" : "none";
  502. var targetattr = (filetype == "js") ? "src" : (filetype == "css") ? "href" : "none";
  503. var allsuspects = document.getElementsByTagName(targetelement);
  504. for (var i = allsuspects.length; i >= 0; i--) {
  505. if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) != null) {
  506. if (allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1) {
  507. allsuspects[i].parentNode.removeChild(allsuspects[i]);
  508. }
  509. }
  510. }
  511. },
  512. loadShade: function () {
  513. return layer.load(1, {
  514. shade: [0.1, '#fff'],//0.1透明度的白色背景
  515. time: 0
  516. });
  517. },
  518. ajaxJson: function (msg, url, param, callBack, beforeSend, async) {
  519. if (!util.isNull(msg)) {
  520. util.load(msg);
  521. }
  522. var urlParam = util.urlToArr(url);
  523. $.extend(urlParam, param);
  524. $.ajax({
  525. type: "POST",
  526. url: url,
  527. global: true,
  528. data: JSON.stringify(urlParam),
  529. contentType: "application/json;charset=UTF-8",
  530. beforeSend: function (req) {
  531. req.setRequestHeader("agileauthtoken", util.getToken());
  532. if ($.isFunction(beforeSend)) {
  533. beforeSend.call(this, req);
  534. }
  535. },
  536. xhrFields: {
  537. withCredentials: false //跨域session保持
  538. },
  539. async: async == undefined ? true : async,
  540. dataType: "json",
  541. success: function (page) {
  542. util.disLoad();
  543. if ($.isFunction(callBack)) {
  544. callBack.call(this, page);
  545. }
  546. },
  547. error: function (xhr, textStatus, errorThrow) {
  548. util.disLoad();
  549. util.closeAll();
  550. util.error("系统异常!");
  551. }
  552. });
  553. },
  554. ajaxFile: function (msg, url, form, succFunc, errorFunc, xhrFunc) {
  555. util.load(msg);
  556. $.ajax({
  557. type: "post",
  558. url: url,
  559. // enctype: "multipart/form-data",
  560. contentType: false,
  561. processData: false,
  562. crossDomain: true,
  563. dataType: "json",
  564. data: form,
  565. beforeSend: function (req) {
  566. req.setRequestHeader("agileauthtoken", util.getToken());
  567. },
  568. xhrFields: {
  569. withCredentials: false //跨域session保持
  570. },
  571. xhr: function () {
  572. var myXhr = $.ajaxSettings.xhr();
  573. if ($.isFunction(xhrFunc)) {
  574. return xhrFunc.call(this, myXhr);
  575. }
  576. return myXhr;
  577. },
  578. success: function (data) {
  579. util.disLoad();
  580. if ($.isFunction(succFunc)) {
  581. return succFunc.call(this, data);
  582. }
  583. },
  584. error: function (data) {
  585. util.disLoad();
  586. util.error("系统异常!");
  587. if ($.isFunction(errorFunc)) {
  588. return errorFunc.call(this, data);
  589. }
  590. }
  591. });
  592. },
  593. getMarginHeight: function (obj) {
  594. return parseInt($(obj).css("margin-top").replace("px", "")) +
  595. parseInt($(obj).css("margin-bottom").replace("px", ""))
  596. },
  597. /**
  598. * 刨除 height属性高度外 所有高度
  599. * @param {Object} obj
  600. */
  601. getRealityOrderHeight: function (obj) {
  602. var height = parseInt($(obj).css("margin-top").replace("px", "")) +
  603. parseInt($(obj).css("margin-bottom").replace("px", "")) +
  604. parseInt($(obj).css("padding-top").replace("px", "")) +
  605. parseInt($(obj).css("padding-bottom").replace("px", ""));
  606. var top = parseInt($(obj).css("border-top-width").replace("px", ""));
  607. var bottom = parseInt($(obj).css("border-bottom-width").replace("px", ""));
  608. return height + (isNaN(top) ? 0 : top) + (isNaN(bottom) ? 0 : bottom);
  609. },
  610. addToken: function (value) {
  611. // var obj = util.getMainWin();
  612. // var auth = $("input[type=hidden][name=agileauthtoken]", obj.$("#top_tabs_box"));
  613. // if (auth.length == 0) {
  614. // obj.$("#top_tabs_box").append("<input type='hidden' name='agileauthtoken' value='' />");
  615. // }
  616. // obj.$("#top_tabs_box").find("input[type=hidden][name=agileauthtoken]").val(util.getToken());
  617. util.setSession("agileauthtoken", value);
  618. },
  619. getToken: function () {
  620. //return util.getMainWin().$("#top_tabs_box").find("input[type=hidden][name=agileauthtoken]").val();
  621. return util.getAndSaveToken();
  622. //return util.getToken();
  623. },
  624. /**
  625. * 小于10的数字前加0
  626. * @param {Object} num
  627. */
  628. formatSmallNum: function (num) {
  629. var newnum = parseInt(num);
  630. if (newnum < 10) { // 调整日小于10时的格式
  631. newnum = 0 + '' + newnum;
  632. }
  633. return newnum
  634. },
  635. setSession: function (key, val) {
  636. sessionStorage.setItem(key, val);
  637. },
  638. getSessoin: function (key) {
  639. return sessionStorage.getItem(key);
  640. },
  641. delSession: function (key) {
  642. sessionStorage.removeItem(key);
  643. },
  644. getAndSaveToken: function () {
  645. var token;
  646. var searchStr = location.search;
  647. if (!util.isNull(searchStr)) {
  648. searchStr = searchStr.substr(1);
  649. var arr = searchStr.split("&");
  650. for (var i = 0; i < arr.length; i++) {
  651. var arr2 = arr[i].split("=");
  652. if (arr2[0] == "agileauthtoken") {
  653. token = arr2[1];
  654. util.setSession("agileauthtoken", token);
  655. break;
  656. }
  657. }
  658. }
  659. if (util.isNull(token)) {
  660. token = util.getSessoin("agileauthtoken");
  661. }
  662. return token.replace(/"/g, '');
  663. },
  664. /**
  665. * 判断ie版本
  666. *
  667. */
  668. IEVersion: function () {
  669. var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  670. var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
  671. var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
  672. var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
  673. if (isIE) {
  674. var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
  675. reIE.test(userAgent);
  676. var fIEVersion = parseFloat(RegExp["$1"]);
  677. if (fIEVersion == 7) {
  678. return 7;
  679. } else if (fIEVersion == 8) {
  680. return 8;
  681. } else if (fIEVersion == 9) {
  682. return 9;
  683. } else if (fIEVersion == 10) {
  684. return 10;
  685. } else {
  686. return 6; //IE版本<=7
  687. }
  688. } else if (isEdge) {
  689. return -1; //edge
  690. } else if (isIE11) {
  691. return 11; //IE11
  692. } else {
  693. return -1; //不是ie浏览器
  694. }
  695. },
  696. addTodayDate: function (interval, number, d) {
  697. return util.getTime(undefined, util.dateAdd(interval, number, d || new Date()));
  698. },
  699. dateAdd: function (interval, number, date) {
  700. switch (interval) {
  701. case "y":
  702. {
  703. //年
  704. date.setFullYear(date.getFullYear() + number);
  705. return date;
  706. break;
  707. }
  708. case "q":
  709. {
  710. //季度
  711. date.setMonth(date.getMonth() + number * 3);
  712. return date;
  713. break;
  714. }
  715. case "M":
  716. {
  717. //月份
  718. date.setMonth(date.getMonth() + number);
  719. return date;
  720. break;
  721. }
  722. case "w":
  723. {
  724. //周
  725. date.setDate(date.getDate() + number * 7);
  726. return date;
  727. break;
  728. }
  729. case "d":
  730. {
  731. //日
  732. date.setDate(date.getDate() + number);
  733. return date;
  734. break;
  735. }
  736. case "h":
  737. {
  738. //小时
  739. date.setHours(date.getHours() + number);
  740. return date;
  741. break;
  742. }
  743. case "m":
  744. {
  745. //分钟
  746. date.setMinutes(date.getMinutes() + number);
  747. return date;
  748. break;
  749. }
  750. case "s":
  751. {
  752. //秒
  753. date.setSeconds(date.getSeconds() + number);
  754. return date;
  755. break;
  756. }
  757. default:
  758. {
  759. //日
  760. date.setDate(d.getDate() + number);
  761. return date;
  762. break;
  763. }
  764. }
  765. },
  766. //获取随机数
  767. generateMixed: function () {
  768. var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
  769. 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  770. 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
  771. var res = "";
  772. for (var i = 0; i < 7; i++) {
  773. var id = Math.ceil(Math.random() * 35);
  774. res += chars[id];
  775. }
  776. return res;
  777. },/**
  778. * 获取毫秒数
  779. */
  780. getMSecond: function () {
  781. return new Date().getTime();
  782. },
  783. hasClass: function (elem, c) {
  784. function classReg(className) {
  785. return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
  786. }
  787. return classReg(c).test(elem.className);
  788. },
  789. encode64: function (input) {
  790. var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv"
  791. + "wxyz0123456789+/" + "=";
  792. var output = "";
  793. var chr1, chr2, chr3 = "";
  794. var enc1, enc2, enc3, enc4 = "";
  795. var i = 0;
  796. do {
  797. chr1 = input.charCodeAt(i++);
  798. chr2 = input.charCodeAt(i++);
  799. chr3 = input.charCodeAt(i++);
  800. enc1 = chr1 >> 2;
  801. enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  802. enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  803. enc4 = chr3 & 63;
  804. if (isNaN(chr2)) {
  805. enc3 = enc4 = 64;
  806. } else if (isNaN(chr3)) {
  807. enc4 = 64;
  808. }
  809. output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
  810. + keyStr.charAt(enc3) + keyStr.charAt(enc4);
  811. chr1 = chr2 = chr3 = "";
  812. enc1 = enc2 = enc3 = enc4 = "";
  813. } while (i < input.length);
  814. return output;
  815. },
  816. Encrypt: function (word, key) {
  817. if (CryptoJS) {
  818. var Encryptkey = CryptoJS.enc.Utf8.parse("o7H8uIM2O5qv65l2");
  819. var srcs = CryptoJS.enc.Utf8.parse(word);
  820. var encrypted = CryptoJS.AES.encrypt(srcs, Encryptkey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
  821. return encrypted.toString();
  822. } else {
  823. throw e;
  824. }
  825. },
  826. /**
  827. * 获取表单json格式参数
  828. *
  829. * @param {Object} formId
  830. */
  831. getFormJson: function (form) {
  832. var paramJson = {};
  833. var arr = $(form).find("input[type!=checkbox][name],textarea[name]");
  834. for (var i = 0; i < arr.length; i++) {
  835. paramJson[arr[i].name] = $(arr[i]).val();
  836. }
  837. var arr2 = $(form).find("select[name]");
  838. for (var i = 0; i < arr2.length; i++) {
  839. var key = arr2[i].name;
  840. if (!util.isNull(arr2.attr("ag-parent-code"))) {
  841. key = arr2.attr("ag-parent-code") + "." + key;
  842. }
  843. paramJson[key] = $(arr2[i]).val();
  844. if (!util.isNull(paramJson[key])) {
  845. var nameKey = $(arr2[i]).attr("ag-sel-name");
  846. if (!util.isNull(arr2.attr("ag-parent-code"))) {
  847. nameKey = arr2.attr("ag-parent-code") + "." + nameKey;
  848. }
  849. var text = $(arr2[i]).find("option:selected").text();
  850. paramJson[nameKey] = text;
  851. }
  852. }
  853. //复选框
  854. $(".ag-chkbox").each(function (idx, chkDiv) {
  855. var key = $(chkDiv).attr("ag-chkbox-name");
  856. var chkVal = "";
  857. $("input[name=" + key + "]").each(function (chkIdx, chk) {
  858. if ($(chk)[0].checked) {
  859. chkVal = chkVal + $(chk).attr("customVal") + ",";
  860. }
  861. });
  862. if (!util.isNull(chkVal)) {
  863. chkVal = chkVal.substr(0, chkVal.length - 1);
  864. paramJson[key] = chkVal;
  865. }
  866. });
  867. var agFile = $(form).find("[ag-file-submit-key]");
  868. /**
  869. * 存储附件ID
  870. */
  871. if (agFile.length > 0) {
  872. var key = agFile.eq(0).attr("ag-file-submit-key");
  873. if (!util.isNull(key)) {
  874. var arr = new Array();
  875. $.each(agFile.eq(0).find(".ag-file-item-li"), function (i, item) {
  876. if (!util.isNull($(item).data("ag-file-name-savename"))) {
  877. arr.push($(item).data("ag-file-name-savename"));
  878. }
  879. });
  880. paramJson[key] = arr.join(",");
  881. }
  882. }
  883. var retJson = {};
  884. for (var k in paramJson) {
  885. if (k.indexOf(".") != -1) {
  886. var kArr = k.split(".");
  887. if (retJson[kArr[0]] && typeof (retJson[kArr[0]]) != 'string') {
  888. retJson[kArr[0]][kArr[1]] = paramJson[k];
  889. } else {
  890. var j = {};
  891. j[kArr[1]] = paramJson[k];
  892. retJson[kArr[0]] = j
  893. }
  894. continue;
  895. }
  896. retJson[k] = paramJson[k]
  897. }
  898. return retJson;
  899. }
  900. }
  901. String.prototype.endWith = function (str) {
  902. var reg = new RegExp(str + "$");
  903. return reg.test(this);
  904. }
  905. String.prototype.startWith = function (str) {
  906. var reg = new RegExp("^" + str);
  907. return reg.test(this);
  908. }