common.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. $(document).ready(function(){
  2. //使用select2控件
  3. /*
  4. if(!!window.Select2)
  5. $(".select2").prepend('<option value="">--请选择--</option>').select2({allowClear:true})
  6. .on('change', function(){
  7. $(this).closest('form').validate().element($(this));
  8. });
  9. if(!!$.datepicker)
  10. $('.date-picker').datepicker().next().on(ace.click_event, function(){
  11. $(this).prev().focus();
  12. });
  13. //textarea控件根据内容增多扩大
  14. $('textarea[class*=autosize]').autosize({append: "\n"});
  15. if(!!$.validator){
  16. //添加公用验证方法
  17. jQuery.validator.addMethod("mobile", function(value, element) {
  18. var length = value.length;
  19. var mobile = /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/;
  20. return this.optional(element) || (length == 11 && mobile.test(value));
  21. }, "请正确填写您的手机号码");
  22. jQuery.validator.addMethod("phone", function(value, element) {
  23. var phone = /(^(\d{3,4}-)?\d{6,8}$)|(^(\d{3,4}-)?\d{6,8}(-\d{1,5})?$)|(\d{11})/;
  24. return this.optional(element) || (phone.test(value));
  25. }, "请填写正确的电话号码");
  26. jQuery.validator.addMethod("chinese", function(value, element) {
  27. var chinese = /^[\一-\龥]+$/i;
  28. return this.optional(element) || (chinese.test(value));
  29. }, "只能输入汉字");
  30. jQuery.validator.addMethod("idcard", function (value, element) {
  31. return this.optional(element) || isIdCardNo(value);
  32. }, "请正确输入您的身份证号码");
  33. }
  34. if(!!$.ui)
  35. //override dialog's title function to allow for HTML titles
  36. $.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, {
  37. _title: function(title) {
  38. var $title = this.options.title || '&nbsp;'
  39. if( ("title_html" in this.options) && this.options.title_html == true )
  40. title.html($title);
  41. else title.text($title);
  42. }
  43. }));
  44. $.fn.extend({
  45. loading:function(options){
  46. var opts = $.extend({}, $.fn.loading.defaults, options),
  47. $load = $('<div style="text-align: center;display: none;" class="ajax-loading-overlay"><i class="ajax-loading-icon fa fa-spin fa-spinner fa-2x orange"></i> </div>');
  48. return this.each(function(){
  49. $(this).data('load',$load.appendTo(opts.container).show());
  50. });
  51. }
  52. });
  53. $.fn.loading.defaults = {
  54. container: $(document.body)
  55. };
  56. //重载ajax发送请求之前方法
  57. $(document).ajaxSend(function(evt, request, settings){
  58. if(!!settings.loading){
  59. (settings.loading.container||$(document.body)).loading(settings.loading);
  60. }
  61. });
  62. //重载ajax发送请求之后方法
  63. $(document).ajaxComplete(function(evt, request, settings){
  64. if(!!settings.loading)
  65. settings.loading.container.data('load').remove();
  66. });
  67. //初始化平台的一些组件
  68. platform = new Platform();
  69. //设置定级标题为当前功能标题
  70. top.document.title=this.title;
  71. */
  72. });
  73. /**
  74. * 公用表单验证方法
  75. * @param form form表单id需要jquery对象
  76. * @param css 错误css样式
  77. * @param warp 错误容器
  78. */
  79. function formValidate(validForm,css,warp,rules,messages){
  80. return validForm.validate({
  81. errorElement: warp,
  82. errorClass: css,
  83. submitHandler: function(form){
  84. /*$.jBox.tip('正在提交,请稍等...','loading',{opacity:0});*/
  85. form.submit();
  86. },
  87. errorPlacement: function(error, element) {
  88. var forGroup = element.closest('.form-group');
  89. $(warp+"[class='"+css+"']",forGroup).remove();
  90. if(element.is(':checkbox') || element.is(':radio')) {
  91. var controls = element.closest('div[class*="col-"]');
  92. if(controls.find(':checkbox,:radio').length > 1) controls.append(error);
  93. else error.insertAfter(element.nextAll('.lbl:eq(0)').eq(0));
  94. }
  95. else if(element.is('.select2')) {
  96. error.insertAfter(element.siblings('[class*="select2-container"]:eq(0)'));
  97. }
  98. else if(element.is('.chosen-select')) {
  99. error.insertAfter(element.siblings('[class*="chosen-container"]:eq(0)'));
  100. }
  101. else error.appendTo(forGroup);
  102. },
  103. highlight: function (e) {
  104. $(e).closest('.form-group').removeClass('has-success').addClass('has-error');
  105. $(e).closest('.form-group').find('span i').attr("class","icon-remove-sign");
  106. },
  107. success: function (e) {
  108. $(e).closest('.form-group').removeClass('has-error').addClass('has-success');
  109. $(e).closest('.form-group').find('span i').attr("class","ace-icon fa fa-check-circle");
  110. $(e).remove();
  111. },
  112. rules:rules||{},
  113. messages:messages||{}
  114. });
  115. }
  116. function isIdCardNo(num) {
  117. var factorArr = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
  118. var parityBit = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2");
  119. var varArray = new Array();
  120. var intValue;
  121. var lngProduct = 0;
  122. var intCheckDigit;
  123. var intStrLen = num.length;
  124. var idNumber = num;
  125. // initialize
  126. if ((intStrLen != 15) && (intStrLen != 18)) {
  127. return false;
  128. }
  129. // check and set value
  130. for (i = 0; i < intStrLen; i++) {
  131. varArray[i] = idNumber.charAt(i);
  132. if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) {
  133. return false;
  134. } else if (i < 17) {
  135. varArray[i] = varArray[i] * factorArr[i];
  136. }
  137. }
  138. if (intStrLen == 18) {
  139. //check date
  140. var date8 = idNumber.substring(6, 14);
  141. if (isDate8(date8) == false) {
  142. return false;
  143. }
  144. // calculate the sum of the products
  145. for (i = 0; i < 17; i++) {
  146. lngProduct = lngProduct + varArray[i];
  147. }
  148. // calculate the check digit
  149. intCheckDigit = parityBit[lngProduct % 11];
  150. // check last digit
  151. if (varArray[17] != intCheckDigit) {
  152. return false;
  153. }
  154. }
  155. else { //length is 15
  156. //check date
  157. var date6 = idNumber.substring(6, 12);
  158. if (isDate6(date6) == false) {
  159. return false;
  160. }
  161. }
  162. return true;
  163. }
  164. function isDate6(sDate) {
  165. if (!/^[0-9]{6}$/.test(sDate)) {
  166. return false;
  167. }
  168. var year, month, day;
  169. year = sDate.substring(0, 4);
  170. month = sDate.substring(4, 6);
  171. if (year < 1700 || year > 2500) return false
  172. if (month < 1 || month > 12) return false
  173. return true
  174. }
  175. function isDate8(sDate) {
  176. if (!/^[0-9]{8}$/.test(sDate)) {
  177. return false;
  178. }
  179. var year, month, day;
  180. year = sDate.substring(0, 4);
  181. month = sDate.substring(4, 6);
  182. day = sDate.substring(6, 8);
  183. var iaMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  184. if (year < 1700 || year > 2500) return false
  185. if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1] = 29;
  186. if (month < 1 || month > 12) return false
  187. if (day < 1 || day > iaMonthDays[month - 1]) return false
  188. return true
  189. }
  190. /**
  191. * 解析url为js对象
  192. * @param url
  193. * @returns
  194. */
  195. function parse(url)
  196. {
  197. //如果URL为空或不带参数则直接返回null
  198. //if (null == url || url.split("?").length < 2)
  199. if (null == url || url.indexOf("?") == -1)
  200. {
  201. return null;
  202. }
  203. var argsUrl = url.split("?")[1];
  204. //if (argsUrl.split("=").length < 2)
  205. if (argsUrl.indexOf("=") == -1)
  206. {
  207. return null;
  208. }
  209. var properties = argsUrl.replace(/&/g, "',").replace(/=/g, ":'").replace(/-/g, "") + "'";
  210. var obj = null;
  211. var template = "obj = {p}";
  212. eval(template.replace(/p/g, properties));
  213. return obj;
  214. }
  215. function openHref(url){
  216. window.open(url);
  217. }
  218. /**
  219. * 获取从数组当中取出数组的随机数
  220. * @param Arr
  221. * @returns {Number}
  222. */
  223. function randomGetNumFromArray(Arr){
  224. return Math.floor(Math.random() * Arr.length + 1)-1;
  225. }
  226. function bindCheckAllEvent(){
  227. var $tmp = $('[name^="idList"]:checkbox',$('tbody')),
  228. $checkAll = $('input[id^="checkAll"]',$('thead'));
  229. $checkAll.on('click',function(){
  230. $tmp.prop("checked", this.checked );
  231. });
  232. $tmp.on('click',function(event){
  233. $checkAll.prop('checked',$tmp.length==$tmp.filter(':checked').length);
  234. event.stopPropagation();
  235. });
  236. }
  237. function getSomeDate(AddDayCount) {
  238. var dd = new Date();
  239. dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期
  240. var y = dd.getFullYear();
  241. var m = dd.getMonth()+1;//获取当前月份的日期
  242. var d = dd.getDate();
  243. return Date.parseDate(y+"-"+m+"-"+d);
  244. }
  245. /**
  246. * 绑定触发时间
  247. * @param el 容器
  248. * @param event 事件名称
  249. * @param handler 回调函数
  250. */
  251. function autoEvent(el, event, handler){
  252. if (el.addEventListener)
  253. el.addEventListener(event, handler, false);
  254. else if (el.attachEvent)
  255. el.attachEvent("on"+event, handler);
  256. }
  257. /**
  258. * 动态设置元素的高度
  259. */
  260. function setElementHeight(ele, array, wrap, fixHeight){
  261. wrap = wrap || document.body;
  262. ele = typeof ele ==='string'?$(ele,$(wrap)):ele;
  263. if(!!!ele.data('sizeParam')){
  264. ele.data('sizeParam',{'array':array||[],'wrap':wrap,'fixHeight':fixHeight});
  265. //自适应
  266. autoEvent(top.window, "resize", function(){
  267. window.setTimeout(function(){
  268. var sizeParam = ele.data('sizeParam');
  269. if(sizeParam)
  270. setElementHeight(ele, sizeParam['array'], sizeParam['wrap'], sizeParam['fixHeight']);
  271. },200);
  272. });
  273. }
  274. if(!fixHeight)
  275. fixHeight = 0;
  276. for(var i=0; i<array.length; i++){
  277. var item = array[i];
  278. var $item = typeof item==='string'?$(item,$(wrap)):item;
  279. fixHeight += $item.outerHeight();
  280. }
  281. ele.height($(wrap).height() - fixHeight);
  282. }
  283. /****cookie****/
  284. //读取cookies
  285. function getCookie(name){
  286. var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
  287. if(arr=document.cookie.match(reg))
  288. return unescape(arr[2]);
  289. else
  290. return null;
  291. }
  292. //删除cookies
  293. function delCookie(name){
  294. var exp = new Date();
  295. exp.setTime(exp.getTime() - 10000);
  296. var cval=getCookie(name);
  297. if(cval!=null)
  298. document.cookie= (name + "="+cval+";expires="+exp.toGMTString()+"; path=/");
  299. }
  300. function setCookie(name,value,time,handler){
  301. var strsec = getsec(time);
  302. var exp = new Date();
  303. exp.setTime(exp.getTime() + strsec*1);
  304. delCookie(name);
  305. document.cookie = (name + "="+ escape (value) + ";expires=" + exp.toGMTString()+"; path=/");
  306. if(!!handler)handler.call(this);
  307. }
  308. function getsec(str){
  309. var str1=str.substring(1,str.length)*1;
  310. var str2=str.substring(0,1);
  311. if (str2=="s"){
  312. return str1*1000;
  313. }else if (str2=="h"){
  314. return str1*60*60*1000;
  315. }else if (str2=="d"){
  316. return str1*24*60*60*1000;
  317. }
  318. }
  319. /**
  320. * 针对参数取反
  321. * 返回false或者true
  322. * @param param
  323. */
  324. function negatedParam(param){
  325. return !!eval(param);
  326. }
  327. /**
  328. * 获取选中的数据id
  329. * @param single true单选,默认为多选
  330. */
  331. function getTableChecked(single){
  332. var $checked = $('input[name="idList"]:checked'),checkArray = [];
  333. if($checked.size()<=0){
  334. $.jBox.tip('亲!请先选择您要操作的数据!', 'error');
  335. return false;
  336. }
  337. if(!!!single){
  338. $checked.each(function(){
  339. checkArray.push($(this).val());
  340. });
  341. }else{
  342. if($checked.size()>1){
  343. $.jBox.tip('亲!请选择一条数据进行操作!', 'error');
  344. return false;
  345. }
  346. checkArray.push($(this).val());
  347. }
  348. return checkArray.join(',');
  349. }
  350. Date.prototype.format = function(format){
  351. var o = {
  352. "M+" : this.getMonth()+1, //month
  353. "d+" : this.getDate(), //day
  354. "h+" : this.getHours(), //hour
  355. "m+" : this.getMinutes(), //minute
  356. "s+" : this.getSeconds(), //second
  357. "q+" : Math.floor((this.getMonth()+3)/3), //quarter
  358. "S" : this.getMilliseconds() //millisecond
  359. };
  360. if(/(y+)/.test(format)) {
  361. format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  362. }
  363. for(var k in o) {
  364. if(new RegExp("("+ k +")").test(format)) {
  365. format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
  366. }
  367. }
  368. return format;
  369. };
  370. Date.prototype.parseDate = function (sDate) {
  371. if (/\s*(\d{1,4})(-|\/)(\d{1,2})(-|\/)(\d{1,2})/.test(sDate)) {//start with yyyy-mm-dd or yyyy/mm/dd
  372. var m = sDate.match(/\d+/g);
  373. if (m) {
  374. if (m.length > 1) m[1] = parseInt(m[1]) - 1;
  375. return eval('new Date(' + m.join(',') + ')');
  376. }
  377. } else {
  378. var reg = /\s*(\d{4})(\d{2})(\d{2})/
  379. if (reg.test(sDate)) {//start with yyyymmdd
  380. var m = reg.exec(sDate);
  381. if (m) {
  382. if (m.length > 2) m[2] = parseInt(m[2]) - 1;
  383. return eval('new Date(' + m.slice(1).join(',') + ')');
  384. }
  385. } else {
  386. var ms = Date.parse(sDate);
  387. if (ms) {
  388. var d1970 = new Date(1970, 1, 1, 0, 0, 0, 000);
  389. d1970.setTime(ms);
  390. return d1970;
  391. }
  392. }
  393. }
  394. throw new Error();
  395. };
  396. Array.prototype.indexOf = function(val) {
  397. for (var i = 0; i < this.length; i++) {
  398. if (this[i] == val) return i;
  399. }
  400. return -1;
  401. };
  402. Array.prototype.remove = function(val) {
  403. var index = this.indexOf(val);
  404. if (index > -1) {
  405. this.splice(index, 1);
  406. }
  407. };