util.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305
  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;
  144. }
  145. if (winH < h) {
  146. h = winH;
  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. ajaxJsonWithoutDisload: function (msg, url, param, callBack, beforeSend, async) {
  555. if (!util.isNull(msg)) {
  556. util.load(msg);
  557. }
  558. var urlParam = util.urlToArr(url);
  559. $.extend(urlParam, param);
  560. $.ajax({
  561. type: "POST",
  562. url: url,
  563. global: true,
  564. data: JSON.stringify(urlParam),
  565. contentType: "application/json;charset=UTF-8",
  566. beforeSend: function (req) {
  567. req.setRequestHeader("agileauthtoken", util.getToken());
  568. if ($.isFunction(beforeSend)) {
  569. beforeSend.call(this, req);
  570. }
  571. },
  572. xhrFields: {
  573. withCredentials: false //跨域session保持
  574. },
  575. async: async == undefined ? true : async,
  576. dataType: "json",
  577. success: function (page) {
  578. //防止取消掉下面ajax的遮罩层
  579. // util.disLoad();
  580. if ($.isFunction(callBack)) {
  581. callBack.call(this, page);
  582. }
  583. },
  584. error: function (xhr, textStatus, errorThrow) {
  585. util.disLoad();
  586. util.closeAll();
  587. util.error("系统异常!");
  588. }
  589. });
  590. },
  591. ajaxFile: function (msg, url, form, succFunc, errorFunc, xhrFunc) {
  592. util.load(msg);
  593. $.ajax({
  594. type: "post",
  595. url: url,
  596. // enctype: "multipart/form-data",
  597. contentType: false,
  598. processData: false,
  599. crossDomain: true,
  600. dataType: "json",
  601. data: form,
  602. beforeSend: function (req) {
  603. req.setRequestHeader("agileauthtoken", util.getToken());
  604. },
  605. xhrFields: {
  606. withCredentials: false //跨域session保持
  607. },
  608. xhr: function () {
  609. var myXhr = $.ajaxSettings.xhr();
  610. if ($.isFunction(xhrFunc)) {
  611. return xhrFunc.call(this, myXhr);
  612. }
  613. return myXhr;
  614. },
  615. success: function (data) {
  616. util.disLoad();
  617. if ($.isFunction(succFunc)) {
  618. return succFunc.call(this, data);
  619. }
  620. },
  621. error: function (data) {
  622. util.disLoad();
  623. util.error("系统异常!");
  624. if ($.isFunction(errorFunc)) {
  625. return errorFunc.call(this, data);
  626. }
  627. }
  628. });
  629. },
  630. getMarginHeight: function (obj) {
  631. return parseInt($(obj).css("margin-top").replace("px", "")) +
  632. parseInt($(obj).css("margin-bottom").replace("px", ""))
  633. },
  634. /**
  635. * 刨除 height属性高度外 所有高度
  636. * @param {Object} obj
  637. */
  638. getRealityOrderHeight: function (obj) {
  639. var height = parseInt($(obj).css("margin-top").replace("px", "")) +
  640. parseInt($(obj).css("margin-bottom").replace("px", "")) +
  641. parseInt($(obj).css("padding-top").replace("px", "")) +
  642. parseInt($(obj).css("padding-bottom").replace("px", ""));
  643. var top = parseInt($(obj).css("border-top-width").replace("px", ""));
  644. var bottom = parseInt($(obj).css("border-bottom-width").replace("px", ""));
  645. return height + (isNaN(top) ? 0 : top) + (isNaN(bottom) ? 0 : bottom);
  646. },
  647. addToken: function (value) {
  648. // var obj = util.getMainWin();
  649. // var auth = $("input[type=hidden][name=agileauthtoken]", obj.$("#top_tabs_box"));
  650. // if (auth.length == 0) {
  651. // obj.$("#top_tabs_box").append("<input type='hidden' name='agileauthtoken' value='' />");
  652. // }
  653. // obj.$("#top_tabs_box").find("input[type=hidden][name=agileauthtoken]").val(util.getToken());
  654. util.setSession("agileauthtoken", value);
  655. },
  656. getToken: function () {
  657. //return util.getMainWin().$("#top_tabs_box").find("input[type=hidden][name=agileauthtoken]").val();
  658. return util.getAndSaveToken();
  659. //return util.getToken();
  660. },
  661. /**
  662. * 小于10的数字前加0
  663. * @param {Object} num
  664. */
  665. formatSmallNum: function (num) {
  666. var newnum = parseInt(num);
  667. if (newnum < 10) { // 调整日小于10时的格式
  668. newnum = 0 + '' + newnum;
  669. }
  670. return newnum
  671. },
  672. setSession: function (key, val) {
  673. sessionStorage.setItem(key, val);
  674. },
  675. getSessoin: function (key) {
  676. return sessionStorage.getItem(key);
  677. },
  678. delSession: function (key) {
  679. sessionStorage.removeItem(key);
  680. },
  681. getAndSaveToken: function () {
  682. var token;
  683. var searchStr = location.search;
  684. if (!util.isNull(searchStr)) {
  685. searchStr = searchStr.substr(1);
  686. var arr = searchStr.split("&");
  687. for (var i = 0; i < arr.length; i++) {
  688. var arr2 = arr[i].split("=");
  689. if (arr2[0] == "agileauthtoken") {
  690. token = arr2[1];
  691. util.setSession("agileauthtoken", token);
  692. break;
  693. }
  694. }
  695. }
  696. if (util.isNull(token)) {
  697. token = util.getSessoin("agileauthtoken");
  698. }
  699. return token.replace(/"/g, '');
  700. },
  701. /**
  702. * 判断ie版本
  703. *
  704. */
  705. IEVersion: function () {
  706. var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  707. var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
  708. var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器
  709. var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
  710. if (isIE) {
  711. var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
  712. reIE.test(userAgent);
  713. var fIEVersion = parseFloat(RegExp["$1"]);
  714. if (fIEVersion == 7) {
  715. return 7;
  716. } else if (fIEVersion == 8) {
  717. return 8;
  718. } else if (fIEVersion == 9) {
  719. return 9;
  720. } else if (fIEVersion == 10) {
  721. return 10;
  722. } else {
  723. return 6; //IE版本<=7
  724. }
  725. } else if (isEdge) {
  726. return -1; //edge
  727. } else if (isIE11) {
  728. return 11; //IE11
  729. } else {
  730. return -1; //不是ie浏览器
  731. }
  732. },
  733. addTodayDate: function (interval, number, d) {
  734. return util.getTime(undefined, util.dateAdd(interval, number, d || new Date()));
  735. },
  736. dateAdd: function (interval, number, date) {
  737. switch (interval) {
  738. case "y":
  739. {
  740. //年
  741. date.setFullYear(date.getFullYear() + number);
  742. return date;
  743. break;
  744. }
  745. case "q":
  746. {
  747. //季度
  748. date.setMonth(date.getMonth() + number * 3);
  749. return date;
  750. break;
  751. }
  752. case "M":
  753. {
  754. //月份
  755. date.setMonth(date.getMonth() + number);
  756. return date;
  757. break;
  758. }
  759. case "w":
  760. {
  761. //周
  762. date.setDate(date.getDate() + number * 7);
  763. return date;
  764. break;
  765. }
  766. case "d":
  767. {
  768. //日
  769. date.setDate(date.getDate() + number);
  770. return date;
  771. break;
  772. }
  773. case "h":
  774. {
  775. //小时
  776. date.setHours(date.getHours() + number);
  777. return date;
  778. break;
  779. }
  780. case "m":
  781. {
  782. //分钟
  783. date.setMinutes(date.getMinutes() + number);
  784. return date;
  785. break;
  786. }
  787. case "s":
  788. {
  789. //秒
  790. date.setSeconds(date.getSeconds() + number);
  791. return date;
  792. break;
  793. }
  794. default:
  795. {
  796. //日
  797. date.setDate(d.getDate() + number);
  798. return date;
  799. break;
  800. }
  801. }
  802. },
  803. //获取随机数
  804. generateMixed: function () {
  805. var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
  806. 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
  807. 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
  808. var res = "";
  809. for (var i = 0; i < 7; i++) {
  810. var id = Math.ceil(Math.random() * 35);
  811. res += chars[id];
  812. }
  813. return res;
  814. },/**
  815. * 获取毫秒数
  816. */
  817. getMSecond: function () {
  818. return new Date().getTime();
  819. },
  820. hasClass: function (elem, c) {
  821. function classReg(className) {
  822. return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
  823. }
  824. return classReg(c).test(elem.className);
  825. },
  826. encode64: function (input) {
  827. var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv"
  828. + "wxyz0123456789+/" + "=";
  829. var output = "";
  830. var chr1, chr2, chr3 = "";
  831. var enc1, enc2, enc3, enc4 = "";
  832. var i = 0;
  833. do {
  834. chr1 = input.charCodeAt(i++);
  835. chr2 = input.charCodeAt(i++);
  836. chr3 = input.charCodeAt(i++);
  837. enc1 = chr1 >> 2;
  838. enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
  839. enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
  840. enc4 = chr3 & 63;
  841. if (isNaN(chr2)) {
  842. enc3 = enc4 = 64;
  843. } else if (isNaN(chr3)) {
  844. enc4 = 64;
  845. }
  846. output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2)
  847. + keyStr.charAt(enc3) + keyStr.charAt(enc4);
  848. chr1 = chr2 = chr3 = "";
  849. enc1 = enc2 = enc3 = enc4 = "";
  850. } while (i < input.length);
  851. return output;
  852. },
  853. Encrypt: function (word, key) {
  854. if (CryptoJS) {
  855. var Encryptkey = CryptoJS.enc.Utf8.parse("o7H8uIM2O5qv65l2");
  856. var srcs = CryptoJS.enc.Utf8.parse(word);
  857. var encrypted = CryptoJS.AES.encrypt(srcs, Encryptkey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 });
  858. return encrypted.toString();
  859. } else {
  860. throw e;
  861. }
  862. },
  863. /**
  864. * 获取表单json格式参数
  865. *
  866. * @param {Object} formId
  867. */
  868. getFormJson: function (form) {
  869. var paramJson = {};
  870. var arr = $(form).find("input[type!=checkbox][name],textarea[name]");
  871. for (var i = 0; i < arr.length; i++) {
  872. paramJson[arr[i].name] = $(arr[i]).val();
  873. }
  874. var arr2 = $(form).find("select[name]");
  875. for (var i = 0; i < arr2.length; i++) {
  876. var key = arr2[i].name;
  877. if (!util.isNull(arr2.attr("ag-parent-code"))) {
  878. key = arr2.attr("ag-parent-code") + "." + key;
  879. }
  880. paramJson[key] = $(arr2[i]).val();
  881. if (!util.isNull(paramJson[key])) {
  882. var nameKey = $(arr2[i]).attr("ag-sel-name");
  883. if (!util.isNull(arr2.attr("ag-parent-code"))) {
  884. nameKey = arr2.attr("ag-parent-code") + "." + nameKey;
  885. }
  886. var text = $(arr2[i]).find("option:selected").text();
  887. paramJson[nameKey] = text;
  888. }
  889. }
  890. //复选框
  891. $(".ag-chkbox").each(function (idx, chkDiv) {
  892. var key = $(chkDiv).attr("ag-chkbox-name");
  893. var chkVal = "";
  894. $("input[name=" + key + "]").each(function (chkIdx, chk) {
  895. if ($(chk)[0].checked) {
  896. chkVal = chkVal + $(chk).attr("customVal") + ",";
  897. }
  898. });
  899. if (!util.isNull(chkVal)) {
  900. chkVal = chkVal.substr(0, chkVal.length - 1);
  901. paramJson[key] = chkVal;
  902. }
  903. });
  904. var agFile = $(form).find("[ag-file-submit-key]");
  905. /**
  906. * 存储附件ID
  907. */
  908. if (agFile.length > 0) {
  909. var key = agFile.eq(0).attr("ag-file-submit-key");
  910. if (!util.isNull(key)) {
  911. var arr = new Array();
  912. $.each(agFile.eq(0).find(".ag-file-item-li"), function (i, item) {
  913. if (!util.isNull($(item).data("ag-file-name-savename"))) {
  914. arr.push($(item).data("ag-file-name-savename"));
  915. }
  916. });
  917. paramJson[key] = arr.join(",");
  918. }
  919. }
  920. var retJson = {};
  921. for (var k in paramJson) {
  922. if (k.indexOf(".") != -1) {
  923. var kArr = k.split(".");
  924. if (retJson[kArr[0]] && typeof (retJson[kArr[0]]) != 'string') {
  925. retJson[kArr[0]][kArr[1]] = paramJson[k];
  926. } else {
  927. var j = {};
  928. j[kArr[1]] = paramJson[k];
  929. retJson[kArr[0]] = j
  930. }
  931. continue;
  932. }
  933. retJson[k] = paramJson[k]
  934. }
  935. return retJson;
  936. }
  937. }
  938. String.prototype.endWith = function (str) {
  939. var reg = new RegExp(str + "$");
  940. return reg.test(this);
  941. }
  942. String.prototype.startWith = function (str) {
  943. var reg = new RegExp("^" + str);
  944. return reg.test(this);
  945. }