Common.js 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941
  1. /// <reference path="SysFrame/Zlsoft.UI-1.0.js" />
  2. /*
  3. 说明:公共Js文件,保存公共方法和扩展方法
  4. 创建时间:2016.02.02
  5. 创建人:LMS
  6. 依赖文件:
  7. 1<reference path="/Scripts/jquery-1.12.0.min.js" />
  8. 2 <reference path="/Scripts/plugins/WebPlugins/layer-2.1/layer.js" />
  9. 3 <reference path="/Scripts/plugins/WebPlugins/ArtTemplate/template.js" />
  10. 修改记录:
  11. */
  12. //#region 全局方法
  13. Date.prototype.format = function (format) {
  14. var o =
  15. {
  16. "M+": this.getMonth() + 1, //month
  17. "d+": this.getDate(), //day
  18. "h+": this.getHours(), //hour
  19. "m+": this.getMinutes(), //minute
  20. "s+": this.getSeconds(), //second
  21. "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
  22. "S": this.getMilliseconds() //millisecond
  23. }
  24. if (/(y+)/.test(format))
  25. format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  26. for (var k in o)
  27. if (new RegExp("(" + k + ")").test(format))
  28. format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  29. return format;
  30. }
  31. String.prototype.endWith = function (s) {
  32. if (s == null || s == "" || this.length == 0 || s.length > this.length)
  33. return false;
  34. if (this.substring(this.length - s.length) == s)
  35. return true;
  36. else
  37. return false;
  38. return true;
  39. }
  40. String.prototype.startWith = function (s) {
  41. if (s == null || s == "" || this.length == 0 || s.length > this.length)
  42. return false;
  43. if (this.substr(0, s.length) == s)
  44. return true;
  45. else
  46. return false;
  47. return true;
  48. }
  49. //字符串格式化
  50. //Example: String.format("名称是{0},年龄是{1}", "john", 12)
  51. String.format = function () {
  52. if (arguments.length === 0)
  53. return null;
  54. var str = arguments[0];
  55. for (var i = 1; i < arguments.length; i++) {
  56. var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
  57. str = str.replace(re, arguments[i]);
  58. }
  59. return str;
  60. }
  61. /**字符串截取
  62. * showStartNo=前面显示字数(默认为3)
  63. * showEndNo=后面显示字数(默认为3)
  64. * symbol =分割符号(默认为“***”)
  65. * 不足时返回原字符
  66. */
  67. String.cutString = function (str, showStartNo, showEndNo, symbol) {
  68. var strlength = str.length;
  69. if (strlength <= showStartNo + showEndNo) {
  70. return str;
  71. }
  72. showStartNo = showStartNo || 3;
  73. showEndNo = showEndNo || 3;
  74. symbol = symbol || "***";
  75. return str.substring(0, showStartNo) + symbol + str.substring(strlength - showEndNo, strlength);
  76. }
  77. //diaojian。项目全局公共js方法入口
  78. function MsgError(resultFun) {
  79. // document.write("<script language=javascript src='/Scripts/SysFrame/Zlsoft.UI-1.0.js'></script>");
  80. //var oCss = document.create_rElement("link");
  81. //oCss.setAttribute("rel", "stylesheet");
  82. //oCss.setAttribute("type", "text/css");
  83. //oCss.setAttribute("href", "/Scripts/layer-2.1/skin/layer.css");
  84. //document.getElementsByTagName_r("head")[0].appendChild(oCss);
  85. var TopWin = getTopmostWinodow();
  86. TopWin.jQuery.getScript("/Scripts/layer-2.1/layer.js", function (data, status, jqxhr) {
  87. TopWin.jQuery.getScript("/Scripts/SysFrame/Zlsoft.UI-1.0.js", function (data, status, jqxhr) {
  88. resultFun();
  89. });
  90. });
  91. }
  92. function getTopmostWinodow() {
  93. var win = window;
  94. while (win.frameElement) {
  95. win = win.parent;
  96. }
  97. return win;
  98. }
  99. ; (function ($) {
  100. //#region jq常用方法设置 diaojian
  101. //#region --设置控件高度
  102. $.fn.SetHeightForWin = function (topH) {
  103. var winHeight = $(window).height();
  104. $This = $(this);
  105. $This.height(winHeight - topH);
  106. }
  107. //#endregion
  108. $.fn.getDgPageSize = function () {
  109. $This = $(this);
  110. var h = $This.find("table tr").eq(0).height();
  111. var result = $This.height() / h;
  112. return Math.floor(result) - 1;
  113. }
  114. //将表单序列化为对象
  115. $.fn.serializeJson = function () {
  116. var serializeObj = {};
  117. $(this.serializeArray()).each(function () {
  118. try {
  119. var obj = jQuery.parseJSON(this.value);
  120. if (typeof obj === "number")
  121. obj = this.value;
  122. serializeObj[this.name] = obj;
  123. } catch (e) {
  124. serializeObj[this.name] = this.value;
  125. }
  126. });
  127. return serializeObj;
  128. };
  129. $.fn.createIfr = function () {
  130. var win = window.parent;
  131. console.log(win.DuiFn);
  132. win.DuiFn.createIframe($(this));
  133. };
  134. })(jQuery);
  135. var PublicFun = function () {
  136. jQuery.support.cors = true;
  137. return {
  138. //获取服务器时间
  139. //type:时间格式。true:时间对象,false:时间格式字符串
  140. getServerTime: function (type) {
  141. var win = getTopmostWinodow();
  142. if (win.global_serverTime) {
  143. } else {
  144. //没有服务器时间时。使用客户端时间
  145. //PublicFun.MsgAlert("未获取到服务器时间!", null, "错误", 2);
  146. win.global_serverTime = new Date().FormatDF();
  147. }
  148. if (type) {
  149. return convertToDate(win.global_serverTime);
  150. } else {
  151. return win.global_serverTime;
  152. }
  153. },
  154. //绑定全局变量存取
  155. //存数据:PublicFun.GlobalData("两癌信息",1)
  156. //取数据:PublicFun.GlobalData("两癌信息"); //注意取出数据后,不能再取.
  157. GlobalData: function (key, value, isSave) {
  158. var win = getTopmostWinodow();
  159. var data = win.GLOBALDATAS;
  160. if (!data) {
  161. win.GLOBALDATAS = data = {};
  162. }
  163. if (value || value == 0) { //0也算做参数值进行保存
  164. //放
  165. data[key] = value;
  166. } else { //取
  167. var res = data[key];
  168. if (!isSave) {
  169. data[key] = null;
  170. }
  171. return res;
  172. }
  173. },
  174. //获取顶级窗体
  175. GetTopmostWinodow: getTopmostWinodow,
  176. //方法:Ajax提交表单数据
  177. //参数:
  178. FromAjax: function (url, formId, callBack) {
  179. if (HasUrlParameter(url)) {
  180. url += "&random=" + Math.random();
  181. } else {
  182. url += "?random=" + Math.random();
  183. }
  184. $.ajax({
  185. type: 'post',
  186. url: url,
  187. data: $(formId).serialize(),
  188. dataType: "text",
  189. success: function (data, textStatus) {
  190. callBack(data);
  191. },
  192. error: function (XMLHttpRequest, textStatus, errorThrown) {
  193. //$(page).hideLoading();
  194. var errMsg = XMLHttpRequest.responseText;
  195. if (!errMsg) errMsg = '请求地址不存在!';
  196. PublicFun.MsgAlert("错误:" + errMsg, null, "错误", 2);
  197. },
  198. complete: function (XHR, TS) {
  199. //Loading(0);
  200. }
  201. });
  202. },
  203. /*
  204. 弹层打开新窗口。
  205. option:参数对象。参数内容:
  206. title:窗口标题;
  207. url:弹窗页面路径;
  208. area:弹窗区域尺寸,默认 ['80%', '90%'],也可以写 ['200px', '300px'];
  209. maxWidth:数字类型,弹窗最大宽度;
  210. maxHeight:数字类型,弹窗最大高度;
  211. success:弹层创建好以后的回调;
  212. end:弹层被关闭(销毁)以后的回调,
  213. closeBtn:是否显示关闭按钮,0为关闭。默认1,
  214. closed:关闭时回调传入参数执行的方法,回调参数(data),
  215. maxmin:true/false.弹窗显示最大最小按钮,默认false,
  216. scrollbar :true/false.弹窗是否出现滚动条,默认true,
  217. shade:0.3/0.是否遮罩,0为遮罩,默认0.3
  218. */
  219. OpenWindow: function (option) {
  220. try {
  221. var win = getTopmostWinodow();
  222. //*************扩展OpenWindow方法
  223. if (option && option.closed) {
  224. //兼容success方法,如果存在则做一个存储
  225. var opSuccessCB = option.success;
  226. var opEndCB = option.end;
  227. //重写success方法
  228. option.success = function (layero, index) {
  229. var key = 'iframeeventtransfer-openwindow-' + index;
  230. if (!win.iframeeventtransfercurrentkey) {
  231. win.iframeeventtransfercurrentkey = [];
  232. }
  233. //设置当前弹出窗体的key
  234. win.iframeeventtransfercurrentkey.push(key);
  235. $.iframeEventTransfer.on(key, option.closed);
  236. if (opSuccessCB) {
  237. opSuccessCB(layero, index);
  238. }
  239. }
  240. option.end = function () {
  241. if (win.iframeeventtransfercurrentkey && win.iframeeventtransfercurrentkey.length > 0) {
  242. var key = win.iframeeventtransfercurrentkey.pop();
  243. //去掉事件
  244. $.iframeEventTransfer.unbind(key);
  245. if (opEndCB) {
  246. opEndCB();
  247. }
  248. } else {
  249. console.log("window.iframeeventtransfercurrentkey is null,can not unbind iframeEventTransfer");
  250. }
  251. }
  252. }
  253. //*************END扩展OpenWindow方法
  254. return win.DuiFn.OpenWindow(option);
  255. }
  256. catch (e) {
  257. MsgError(function () {
  258. var win = getTopmostWinodow();
  259. win.DuiFn.OpenWindow(option);
  260. //DuiFn.OpenWindow(option);
  261. });
  262. }
  263. },
  264. //关闭窗体同时执行openwindow中的closewindow回调
  265. DoCloseWindow: function (data) {
  266. //判断运行环境。
  267. if (typeof (CEFAPI) != "undefined") { //BH内打开的页面
  268. //执行BH中关闭窗口的方法
  269. CEFAPI.trigger("关闭窗体", "");
  270. try {
  271. var win = getTopmostWinodow();
  272. var wIndex = win.layer.getFrameIndex(window.name);
  273. //调用回调
  274. var key = 'iframeeventtransfer-openwindow-' + wIndex;
  275. $.iframeEventTransfer.trigger(key, data);
  276. win.layer.close(wIndex);
  277. } catch (e) { }
  278. } else { //公卫项目内
  279. var win = getTopmostWinodow();
  280. var wIndex = win.layer.getFrameIndex(window.name);
  281. //调用回调
  282. var key = 'iframeeventtransfer-openwindow-' + wIndex;
  283. $.iframeEventTransfer.trigger(key, data);
  284. win.layer.close(wIndex);
  285. }
  286. },
  287. //关闭弹窗。在弹窗中调用,关闭自身,option:{on:true,data:{}}
  288. CloseWindow: function () {
  289. //判断运行环境。
  290. if (typeof (CEFAPI) != "undefined") { //BH内打开的页面
  291. //执行BH中关闭窗口的方法
  292. CEFAPI.trigger("关闭窗体", "");
  293. try {
  294. var win = getTopmostWinodow();
  295. var wIndex = win.layer.getFrameIndex(window.name);
  296. win.layer.close(wIndex);
  297. } catch (e) { }
  298. } else { //公卫项目内
  299. var win = getTopmostWinodow();
  300. //win.DuiFn.OpenWindow(option);
  301. var wIndex = win.layer.getFrameIndex(window.name);
  302. win.layer.close(wIndex);
  303. }
  304. },
  305. /*获取url参数*/
  306. getQueryValue: function (url, name) {
  307. name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
  308. var regexS = "[\\?&]" + name + "=([^&#]*)";
  309. var regex = new RegExp(regexS);
  310. var results = regex.exec(url);
  311. if (results == null)
  312. return "";
  313. else
  314. return results[1];
  315. },
  316. /*
  317. 生成时间戳+随机数的字符串
  318. */
  319. CreateRandomNumber: function () {
  320. return new Date().getTime() + '' + Math.floor(Math.random() * 10000);
  321. },
  322. /**
  323. 获取URL参数,
  324. */
  325. GetUrlQueryValue: function (name) {
  326. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  327. var r = window.location.search.substr(1).match(reg);
  328. if (r != null) return r[2]; return null;
  329. },
  330. /* 弹出框
  331. 1个必要参数:
  332. msg:弹出的消息,必要参数;
  333. callback:点击确定按钮的回调;
  334. title:弹出框标题,默认为 "提示消息";
  335. icon:图标,默认为0. 0:叹号;1:勾;2:叉;3:问号;4:锁;5:哭脸;6:笑脸
  336. optionObject:其他配置参数对象,如:{closeBtn:0}隐藏右上角关闭按钮
  337. */
  338. MsgAlert: function (msg, callback, title, icon, optionObject) {
  339. try {
  340. var win = getTopmostWinodow();
  341. win.DuiFn.MsgAlert(msg, callback, title, icon, optionObject);
  342. }
  343. catch (e) {
  344. MsgError(function () {
  345. var win = getTopmostWinodow();
  346. win.DuiFn.MsgAlert(msg, callback, title, icon, optionObject);
  347. });
  348. }
  349. },
  350. /*
  351. 询问层。
  352. 1个必要参数:
  353. msg:弹出的消息,必要参数;;
  354. callbackYes:点击确定按钮的回调;
  355. callbackNo:点击确定按钮的回调;
  356. title:弹出框标题,默认为 "操作提示";
  357. icon:图标,默认为3。0:叹号;1:勾;2:叉;3:问号;4:锁;5:哭脸;6:笑脸
  358. layerOption:layer文档内的其他配置参数对象
  359. */
  360. MsgConfirm: function (msg, callbackYes, callbackNo, title, icon, layerOption) {
  361. try {
  362. var win = getTopmostWinodow();
  363. win.DuiFn.MsgConfirm(msg, icon, title, callbackYes, callbackNo, layerOption);
  364. }
  365. catch (e) {
  366. MsgError(function () {
  367. var win = getTopmostWinodow();
  368. win.DuiFn.MsgConfirm(msg, icon, title, callbackYes, callbackNo, layerOption);
  369. });
  370. }
  371. },
  372. /*
  373. 询问层输入。
  374. 1个必要参数:
  375. msg:弹出的消息,必要参数;;
  376. _formType:1,密码框,2多行文本,3单行文本
  377. callbackYes:点击确定按钮的回调;
  378. layerOption:layer文档内的其他配置参数对象
  379. */
  380. MsgPrompt: function (msg, _formType, callbackYes, layerOption) {
  381. try {
  382. var win = getTopmostWinodow();
  383. win.DuiFn.MsgPrompt(msg, _formType, callbackYes, layerOption);
  384. }
  385. catch (e) {
  386. MsgError(function () {
  387. var win = getTopmostWinodow();
  388. win.DuiFn.MsgPrompt(msg, _formType, callbackYes, layerOption);
  389. });
  390. }
  391. },
  392. /*提示消息,默认3秒后自动关闭
  393. *1个必要参数:msg,消息。必要参数;
  394. time:持续时间,单位ms,默认3000
  395. callback:提示消失以后的回调
  396. */
  397. MsgShow: function (msg, callback, time) {
  398. try {
  399. var win = getTopmostWinodow();
  400. win.DuiFn.MsgShow(msg, callback, time);
  401. }
  402. catch (e) {
  403. MsgError(function () {
  404. var win = getTopmostWinodow();
  405. win.DuiFn.MsgShow(msg, callback, time);
  406. });
  407. }
  408. },
  409. /*使用最外层页面的layer对象。
  410. 参数callback:回调函数。传入的参数为最外层页面的layer对象
  411. */
  412. OriginalLayer: function (callback) {
  413. try {
  414. var win = getTopmostWinodow();
  415. win.DuiFn.OriginalLayer(callback);
  416. }
  417. catch (e) {
  418. MsgError(function () {
  419. var win = getTopmostWinodow();
  420. win.DuiFn.OriginalLayer(callback);
  421. });
  422. }
  423. },
  424. /*
  425. layer的tips方法。参数与原方法完全相同。
  426. 参数1-3:原参数;
  427. 参数4:layer的js和css文件加载完成后的回调。获取
  428. */
  429. Tips: function (content, follow, options, callback) {
  430. var rs;
  431. try {
  432. //tips带有位置信息,需要在本页面调用layer对象
  433. if (window.layer == undefined) {
  434. //加载样式表
  435. $("head").prepend("<link href=\"/Scripts/layer-2.1/skin/layer.css\" rel=\"stylesheet\" />");
  436. //引入js文件
  437. $.getScript("/Scripts/layer-2.1/layer.js", function (data, status, jqxhr) {
  438. if (callback) {
  439. rs = layer.tips(content, follow, options);
  440. callback(rs);
  441. }
  442. });
  443. //这种方式会导致第一次加载时样式出现错误,tips错位
  444. ////加载样式表
  445. //$("head").prepend("<link href=\"/Scripts/layer-2.1/skin/layer.css\" rel=\"stylesheet\" />");
  446. ////引入js文件
  447. //$("head").append("<script src=\"/Scripts/layer-2.1/layer.js\"></script>");
  448. //while (true) {
  449. // if (window.layer) {
  450. // rs = layer.tips(content, follow, options);
  451. // break;
  452. // }
  453. //}
  454. } else {
  455. rs = layer.tips(content, follow, options);
  456. if (callback) {
  457. callback(rs);
  458. } else {
  459. return rs;
  460. }
  461. }
  462. }
  463. catch (e) {
  464. }
  465. return rs;
  466. },
  467. /*
  468. layer的close方法,关闭层。优先使用当前页面的layer对象关闭
  469. 参数:层索引
  470. */
  471. CloseLayer: function (index) {
  472. try {
  473. if (window.layer == undefined) {
  474. //当前页面没有引入js,调用顶级窗口的方法
  475. var TopWin = getTopmostWinodow();
  476. TopWin.DuiFn.MsgShowCloseLayer(index);
  477. } else {
  478. //当前页面有layer,从当前页面关闭
  479. layer.close(index);
  480. }
  481. }
  482. catch (e) {
  483. }
  484. },
  485. //处理2016-03-13T00:00:00格式的字符串,返回正常格式的字符串
  486. HandleDateTimeString: function (dateTimeStr) {
  487. if (dateTimeStr) {
  488. return dateTimeStr.replaceAll("T", " ", 1);
  489. }
  490. },
  491. /*
  492. * 搜索框条件判断
  493. *0:没有任何值
  494. *1:姓名
  495. *2:简码
  496. *3:身份证
  497. *4:电话号码
  498. */
  499. QueryChoose: function (Str) {
  500. if (Str == "" || Str == null) {
  501. return 0;
  502. }
  503. //判断是否包含汉字
  504. var reg = new RegExp("[\\u4E00-\\u9FFF]+", "g");
  505. if (reg.test(Str)) {
  506. return 1;
  507. }
  508. reg = /^[A-Za-z]+$/;
  509. //判断是否全文英文
  510. if (reg.test(Str)) {
  511. return 2;
  512. }
  513. //判断字符串长度确定是否是身份证
  514. if (Str.length >= 12) {
  515. return 3;
  516. }
  517. return 4;
  518. },
  519. /*处理后台Ajax返回结果的公共方法。参数:
  520. returnString:返回的json字符串;
  521. callback:处理结果回调,回调参数是json字符串转化的对象
  522. */
  523. HandleAjaxResult: function (returnString, callback) {
  524. if (!returnString || returnString.length == 0) {
  525. PublicFun.MsgAlert("请求返回空数据");
  526. }
  527. var returnValue; //函数返回值,用于返回回调的返回值
  528. try {
  529. var resultObject;
  530. if (typeof (returnString) == "string") {
  531. resultObject = eval("(" + returnString + ")");
  532. } else {
  533. resultObject = returnString;
  534. }
  535. switch (resultObject.code) {
  536. case 100: //成功
  537. break;
  538. case 201: //登录超时
  539. PublicFun.MsgAlert(resultObject.errormessage, function () {
  540. PublicFun.OpenWindow({
  541. id: 'login20160830',
  542. title: "重新登录",
  543. url: "/Account/OpenLogin?tag=" + resultObject.data,
  544. area: ["500px;", "325px;"],
  545. maxWidth: 1000,
  546. maxHeight: 350,
  547. closeBtn: 0
  548. });
  549. });
  550. break;
  551. default:
  552. break;
  553. }
  554. if (resultObject.code == 201)
  555. return;
  556. if (callback) {
  557. returnValue = callback(resultObject);
  558. }
  559. } catch (e) {
  560. //PublicFun.MsgAlert("公共请求-解析请求结果数据异常:" + e.message);
  561. console.log("公共请求错误:%o", e);
  562. }
  563. return returnValue;
  564. },
  565. //配合HandleAjaxResult使用,在HandleAjaxResult回调中用alert方式显示结果
  566. //参数:result:HandleAjaxResult回调的参数;
  567. //optName:用于提示的操作名称
  568. //callback:提示窗口关闭后的回调.参数为第一个参数(rs)
  569. AlertAjaxResult: function (result, _optName, callback) {
  570. var optName = _optName || "操作";
  571. if (result.code == 100) {
  572. PublicFun.MsgAlert(optName + "成功!", callback, "操作提示", 1);
  573. } else {
  574. PublicFun.MsgAlert(optName + "失败:" + result.errormessage, callback, "操作提示", 2);
  575. }
  576. },
  577. /*发起Ajax请求公共方法。参数对象:
  578. url:必须参数;
  579. //非必须参数:
  580. type:请求方式,默认get;
  581. data:post参数;
  582. timeout:请求超时时间。不使用超时则不需要传这个参数;
  583. loading:是否使用loading效果锁住当前窗口,默认false
  584. success:请求成功回调(默认使用MsgAlert提示成功信息),参数是后台传回的json字符串转化的对象;
  585. error:请求失败回调(默认使用MsgAlert提示错误信息),参数是$.ajax的error回调的参数;
  586. complete:请求完成回调;
  587. async:异/同步 默认异步 true:异步、false:同步;
  588. */
  589. DoAjax: function (option) {
  590. if (!option.url) {
  591. PublicFun.MsgAlert("缺少url参数");
  592. return;
  593. }
  594. var defaultOption = { type: "get", timeout: null, loading: false, dataType: "text", async: true }; //关闭超时
  595. $.extend(defaultOption, option);//合并参数
  596. var url = defaultOption.url;
  597. if (HasUrlParameter(url)) {
  598. url += "&random=" + Math.random();
  599. } else {
  600. url += "?random=" + Math.random();
  601. }
  602. if (defaultOption.loading) { //打开loading效果
  603. Loading(1);
  604. }
  605. $.ajax({
  606. type: defaultOption.type,
  607. url: url,
  608. data: defaultOption.data,
  609. async: defaultOption.async,
  610. dataType: defaultOption.dataType,
  611. success: function (data, textStatus) {
  612. PublicFun.HandleAjaxResult(data, defaultOption.success); //执行回调
  613. },
  614. error: function (XMLHttpRequest, textStatus, errorThrown) {
  615. if (typeof (defaultOption.error) != "undefined") {
  616. defaultOption.error(XMLHttpRequest, textStatus, errorThrown); //执行回调
  617. } else {
  618. PublicFun.HandleAjaxError(XMLHttpRequest, textStatus, errorThrown); //调用公共错误处理方法
  619. }
  620. },
  621. complete: function (XHR, TS) {
  622. if (defaultOption.loading) { //关闭loading效果
  623. Loading(0);
  624. }
  625. if (typeof (defaultOption.complete) != "undefined") { //执行回调
  626. defaultOption.complete();
  627. }
  628. }
  629. //timeout: defaultOption.timeout //取消超时
  630. });
  631. },
  632. //公共方法,处理ajax请求错误时的信息显示,参数与$.ajax的error回调参数相同
  633. HandleAjaxError: function (XMLHttpRequest, textStatus, errorThrown) {
  634. var errMsg = XMLHttpRequest.responseText;
  635. var isShowErrorMessage = true;
  636. switch (textStatus) {
  637. case "timeout": //超时
  638. errMsg = "请求超时";
  639. break;
  640. case "error":
  641. if (XMLHttpRequest.status == 404) {
  642. errMsg = "请求地址不存在!";
  643. }
  644. else if (XMLHttpRequest.status == 0 && errorThrown.length == 0) {
  645. //errMsg = "服务器请求异常!";
  646. //ajax请求完成前关闭窗口,不弹出异常
  647. isShowErrorMessage = false;
  648. }
  649. else {
  650. errMsg = XMLHttpRequest.statusText;
  651. }
  652. break;
  653. case "parsererror": //数据格式错误
  654. errMsg = "数据格式转化错误:" + errorThrown.message;
  655. break;
  656. default:
  657. errMsg = XMLHttpRequest.statusText + "。" + errorThrown;
  658. break;
  659. }
  660. //alert(errorThrown);
  661. if (isShowErrorMessage) {
  662. PublicFun.MsgAlert("请求数据错误:" + errMsg, null, "错误", 2);
  663. }
  664. },
  665. //处理日期控件范围
  666. //必须参数controlID
  667. //非必需参数minTime,maxTime
  668. //参数说明
  669. //controlID :日期控件的ID
  670. //minTime:最小时间 默认1001-01-01
  671. //maxTime:最大时间 不传最大时间则默认不做控制
  672. TimeRange: function (controlID, minTime, maxTime) {
  673. var a = minTime || '1001-01-01';
  674. var b = maxTime || "";
  675. controlID = "#" + controlID;
  676. $(controlID).datebox('calendar').calendar({
  677. validator: function (date) {
  678. //最小时间范围
  679. var minYear = a.substring(0, 4);//范围小 年
  680. var minMonth = a.substring(5, 7);//范围小 月
  681. var minDay = a.substring(8, 10);//范围小 日
  682. //不做最大范围时间控制
  683. if (b == "") {
  684. var MinValiTime = new Date(minYear, minMonth - 1, minDay);
  685. return date >= MinValiTime;
  686. }
  687. else {
  688. //最大时间范围
  689. var maxYear = b.substring(0, 4);//范围大 年
  690. var maxMonth = b.substring(5, 7);//范围大 月
  691. var maxDay = b.substring(8, 10);//范围大 日
  692. //easyui的日期的月份是0-11月,所以月份统一减去1。
  693. var MinValiTime = new Date(minYear, minMonth - 1, minDay);
  694. var MaxValiTime = new Date(maxYear, maxMonth - 1, maxDay);
  695. return MaxValiTime >= date && date >= MinValiTime;
  696. }
  697. }
  698. });
  699. //判断时间范围是否有误 如果有误则清掉
  700. var getvalue = $(controlID).datebox('getValue');
  701. if (getvalue != null && getvalue < minTime) {
  702. $(controlID).datebox('setValue');
  703. }
  704. },
  705. //传入身份证号码返回生日日期和性别的数组,参数身份证号码
  706. IdCardIsSexAndBirthday: function (idCard) {
  707. var birthdayValue;
  708. var sex;
  709. var arr = new Array();
  710. try {
  711. //15位身份证号码
  712. if (idCard.length == 15) {
  713. //出生日期代码,第7—8位数代表年份(年份前面二位数省略),第9—10位数代表月份(月份为l位数的前面加零)。第11一12位数代表日期(日期为1位数的前面加零)。
  714. birthdayValue = idCard.charAt(6) + idCard.charAt(7);
  715. if (parseInt(birthdayValue) < 16) {
  716. birthdayValue = '20' + birthdayValue;
  717. }
  718. else {
  719. birthdayValue = '19' + birthdayValue;
  720. }
  721. //生日
  722. birthdayValue = birthdayValue + '-' + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11);
  723. arr[0] = birthdayValue;
  724. //性别:男
  725. if (parseInt(idCard.charAt(14) / 2) * 2 != idCard.charAt(14)) {
  726. sex = "1";
  727. }
  728. //性别:女
  729. else {
  730. sex = "2";
  731. }
  732. arr[1] = sex;
  733. return arr;
  734. }
  735. //18位身份证号码
  736. else if (idCard.length == 18) {
  737. //生日
  738. birthdayValue = idCard.charAt(6) + idCard.charAt(7) + idCard.charAt(8) + idCard.charAt(9) + '-' + idCard.charAt(10) + idCard.charAt(11) + '-' + idCard.charAt(12) + idCard.charAt(13);
  739. arr[0] = birthdayValue;
  740. //性别:男
  741. if (parseInt(idCard.charAt(16) / 2) * 2 != idCard.charAt(16)) {
  742. sex = "1";
  743. }
  744. //性别:女
  745. else {
  746. sex = "2";
  747. }
  748. arr[1] = sex;
  749. return arr;
  750. }
  751. else {
  752. PublicFun.MsgShow("身份证有误");
  753. }
  754. }
  755. catch (e) {
  756. PublicFun.MsgShow("身份证解析异常");
  757. }
  758. },
  759. //表单数据转化为对象。参数:表单id
  760. FormToObject: function (formId) {
  761. var array = $("#" + formId).serializeArray();
  762. var rs = new Object();
  763. for (var i = 0; i < array.length; i++) {
  764. //重复就在后面加上
  765. if (rs[array[i].name]) {
  766. rs[array[i].name] = rs[array[i].name] + "," + array[i].value;
  767. }
  768. else {
  769. rs[array[i].name] = array[i].value;
  770. }
  771. }
  772. return rs;
  773. },
  774. //获取正则表达式
  775. GetRegex: function (type) {
  776. var regex;
  777. switch (type) {
  778. case "数字字母":
  779. regex = /^[\da-zA-Z]+$/;
  780. break;
  781. case "座机电话":
  782. regex = /^((0\d{2,3}-?\d{7,8})|(\d{7,8})|(1\d{10}))$/;
  783. break;
  784. }
  785. return regex;
  786. },
  787. /*模拟表单提交post请求。用于下载功能等服务器端返回文件流的场景
  788. *参数1:对象option:
  789. *url:请求url
  790. *formId:表单id;
  791. *参数2:表单提交url,使用此参数则第一个参数option为参数对象
  792. */
  793. SendPostRequest: function (option, url) {
  794. var temp = document.createElement("form");
  795. if (url) {
  796. temp.action = url;
  797. temp.method = "post";
  798. temp.style.display = "none";
  799. for (var x in option) {
  800. var opt = document.createElement("textarea");
  801. opt.name = x;
  802. opt.value = option[x];
  803. temp.appendChild(opt);
  804. }
  805. } else {
  806. var defaultOption = { url: "", formId: "" };
  807. $.extend(defaultOption, option);//合并参数
  808. if (defaultOption.url) {
  809. //模拟表单post提交数据
  810. var params = $("#" + defaultOption.formId).serializeArray();
  811. //type参数标识业务类型
  812. temp.action = defaultOption.url;
  813. temp.method = "post";
  814. temp.style.display = "none";
  815. for (var x in params) {
  816. var opt = document.createElement("textarea");
  817. opt.name = params[x].name;
  818. opt.value = params[x].value;
  819. temp.appendChild(opt);
  820. }
  821. }
  822. }
  823. document.body.appendChild(temp);
  824. temp.submit();
  825. },
  826. /*返回字符是否超过指定长度,strByte字符,sum长度
  827. */
  828. Bytecount: function (strByte, sum) {
  829. var oreg = /[\u4e00-\u9fa5]/;
  830. var count = 0;
  831. for (var i = 0; i < strByte.length; i++) {
  832. if (oreg.test(strByte.charAt(i))) {
  833. count += 2;
  834. }
  835. else {
  836. count += 1;
  837. }
  838. }
  839. return sum >= count;
  840. },
  841. //阻止事件冒泡
  842. StopPropagation: function (e) {
  843. if (e && e.stopPropagation)
  844. //因此它支持W3C的stopPropagation()方法
  845. e.stopPropagation();
  846. else
  847. //否则,使用IE的方式来取消事件冒泡
  848. window.event.cancelBubble = true;
  849. },
  850. OpenIfm: function (id) {
  851. var win = getTopmostWinodow();
  852. win.DuiFn.OpenIfm(id);
  853. },
  854. foldupClick: function () {
  855. var TopWin = getTopmostWinodow();
  856. TopWin.DuiFn.colsefold()
  857. },
  858. //批量绑定表单数据
  859. //JYC
  860. //传入json对象
  861. //格式要求
  862. //1.input 添加自定义属性‘data-input='AutoInput' data-name='需要绑定的表字段'’
  863. BandFormVal: function (data) {
  864. //申明一个数组keys
  865. var keys = [];
  866. //循环传入json节点
  867. for (var p1 in data) {
  868. //保存节点 ‘字段名称’
  869. if (data.hasOwnProperty(p1)) {
  870. var arr = { "key": p1, "value": data[p1] };
  871. keys.push(arr);
  872. }
  873. }
  874. //循环前台表单
  875. $("input[data-input='AutoInput']").each(function () {
  876. for (var i = 0; i < keys.length; i++) {
  877. if ($(this).attr("data-name") == keys[i].key) {
  878. //绑定值
  879. $(this).val(keys[i].value);
  880. }
  881. }
  882. });
  883. },
  884. //LMS.2018.07.16
  885. //验证时间字符串是否为有效的时间格式。输入参数为时间字符串
  886. validateDate: function (dateString) {
  887. var rs = false;
  888. //将允许的时间分隔符统一替换为"/"分隔,否则会在ie下解析异常
  889. dateString = dateString.replace(/-/g, "/").replace(/\./g, "/");
  890. //alert(dateString);
  891. var d = new Date(dateString);
  892. if (d != "Invalid Date") {
  893. //被解析为正常的时间对象
  894. //输入纯数字时会被当成时间戳处理,能正常转为时间对象。阻止这种情况
  895. if (/^\d+$/.test(dateString)) {
  896. //由纯数字组成。属于异常情况
  897. } else {
  898. rs = true; //正确的时间格式
  899. }
  900. }
  901. return rs;
  902. }
  903. }
  904. }();