util.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862
  1. var iwbfuns;
  2. var select2Opt = window.select2DefaultOption || {};
  3. var tableActionIcon = '<i class="fa fa-angle-double-right"></i>';
  4. function GetFuns(ele) {
  5. var $table = typeof ele === 'string' ? $('#' + ele) : $(ele);
  6. return $table.iwbTable('getFuns');
  7. }
  8. function LoadTableBackFun(option) {
  9. if (!option) {
  10. option = { table: "table" };
  11. }
  12. option.table = option.table ? option.table : "table";
  13. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  14. if ($table.length < 1) {
  15. console.log('没有发现表格:', option.table);
  16. }
  17. option.lang = option.lang ? option.lang : window.lang;
  18. $table.iwbTable(option);
  19. var funs = GetFuns($table);
  20. return funs;
  21. }
  22. function LoadTable(option) {
  23. if (!option) {
  24. option = { table: "table" };
  25. }
  26. option.table = option.table ? option.table : "table";
  27. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  28. if ($table.length < 1) {
  29. console.log('没有发现表格:', option.table);
  30. }
  31. $table.iwbTable(option);
  32. window.iwbfuns = GetFuns($table);
  33. return $table;
  34. }
  35. function LoadTreeTable(option) {
  36. var $table = !option.table ? $('#table') : typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  37. if ($table.length < 1) {
  38. console.log('没有发现表格:', option.table);
  39. throw "没有发现表格";
  40. }
  41. $.metPageCss('/Content/Libs/bootstrap-table/extensions/treegrid/jquery.treegrid.min.css', "dy-css-treegrid");
  42. $.metPageJs('/Content/Libs/bootstrap-table/extensions/treegrid/bootstrap-table-treegrid.js', "dy-js-bootstrap-treegrid");
  43. $.metPageJs('/Content/Libs/bootstrap-table/extensions/treegrid/jquery.treegrid.min.js', "dy-js-treegrid");
  44. var defaultOption = {
  45. table: $table,
  46. rootNo: 0,
  47. idField: 'no',
  48. treeShowField: 'name',
  49. parentIdField: 'parentNo',
  50. level: "depth",
  51. customDataField: ['path'],
  52. height: $(window).height() - 200,
  53. onLoadSuccess: function () {
  54. $table.treegrid({
  55. treeColumn: 1,
  56. expanderExpandedClass: 'mr-2 ml-3 fa fa-folder-open',
  57. expanderCollapsedClass: 'mr-2 ml-3 fa fa-folder'
  58. });
  59. $(".level-2").closest("tr").treegrid("collapse");
  60. $("td span.treegrid-expander:not(.fa)").addClass("mr-2 ml-3 fa fa-folder-o");
  61. abp.ui.clearBusy();
  62. $("td").off("dblclick").on("dblclick", function () { $($(this).closest("tr")).treegrid("toggle"); });
  63. }
  64. };
  65. option = $.extend({}, defaultOption, option);
  66. $table.iwbTable(option);
  67. $(".btn-toolbar .btn-group").find(".btn[data-type]").each(function (i, e) {
  68. var btnType = $(e).data("type").replace("_", "");
  69. if (btnType !== "btnRefresh") {
  70. var btnUrl = $(e).data("url") || "";
  71. var btnName = $(e).text();
  72. var btnClass = $(e).attr("class");
  73. var btnIcon = $(e).find("i").attr("class");
  74. actions.push({ type: btnType, name: btnName, "class": btnClass, icon: btnIcon, url: btnUrl });
  75. $(e).remove();
  76. } else {
  77. $(e).prop("disabled", false).attr("onclick", "$.iwbAjax1({url: '" + $(e).data("url") + "'});");
  78. }
  79. });
  80. //$(".btn-toolbar").css("display", "block");
  81. var funs = GetFuns($table);
  82. var getCustomDataStr = function (row) {
  83. var str = "";
  84. if (option.customDataField && option.customDataField.length > 0) {
  85. for (var i = 0; i < option.customDataField.length; i++) {
  86. var key = option.customDataField[i];
  87. str += ',"' + key + '":"' + row[key] + '"';
  88. }
  89. }
  90. return str;
  91. };
  92. funs['btnCreate'] = function (url, id) {
  93. var row;
  94. if (typeof id === "string") {
  95. row = $table.bootstrapTable("getRowByUniqueId", id);
  96. } else {
  97. row = id;
  98. }
  99. if (row) {
  100. var dataStr = '{"' + option.parentIdField + '":"' + row[option.idField] + '","' + option.level + '":"' + (row[option.level] + 1) + '"' + getCustomDataStr(row) + '}';
  101. console.log('create', dataStr);
  102. BtnCreate({
  103. table: $table,
  104. url: url,
  105. data: typeof id === "string"?JSON.parse(dataStr):row,
  106. disabled: option.parentIdField
  107. });
  108. } else
  109. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  110. };
  111. funs['btnUpdate'] = function (url, id ) {
  112. console.log('update', id);
  113. var row;
  114. if (typeof id === "string" && id !== "") {
  115. row = $table.bootstrapTable("getRowByUniqueId", id);
  116. } else {
  117. row = id;
  118. }
  119. if (row) {
  120. BtnUpdate({
  121. table: $table,
  122. url: url,
  123. data: row,
  124. disabled: option.parentIdField + ',' + option.idField
  125. }, row);
  126. } else
  127. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  128. };
  129. funs['btnDelete'] = function (url, id) {
  130. console.log('delete', id);
  131. var row;
  132. if (typeof id === "string" ) {
  133. row = $table.bootstrapTable("getRowByUniqueId", id);
  134. }
  135. if (row) {
  136. BtnDelete({
  137. table: $table,
  138. url: url,
  139. data: row
  140. }, row);
  141. } else
  142. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  143. };
  144. funs['btnMoveUp'] = function (url, id, that) {
  145. console.log("MoveUp", id);
  146. var row;
  147. if (typeof id === "string" && id !== "") {
  148. row = $table.bootstrapTable("getRowByUniqueId", id);
  149. }
  150. if (row) {
  151. var tr = $(that).closest("tr");
  152. var funId = tr.data("uniqueid"), parentNo = tr.data("parent");
  153. var prevs = tr.prevAll().filter("[data-parent='" + parentNo + "']");
  154. if (prevs.length > 0) {
  155. var prevId = prevs.first().data("uniqueid");
  156. //console.log(prevId);
  157. $.iwbAjax1({ url: url, data: { Id: funId, PrevId: prevId } });
  158. } else {
  159. abp.message.warn(abp.localization.iwbZero("RecordAtTop"));
  160. }
  161. } else {
  162. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  163. }
  164. };
  165. funs['btnMoveDown'] = function (url, id, that) {
  166. console.log("MoveDown", id);
  167. var row;
  168. if (typeof id === "string" && id !== "") {
  169. row = $table.bootstrapTable("getRowByUniqueId", id);
  170. }
  171. if (row) {
  172. var tr = $(that).closest("tr");
  173. var funId = $(tr).data("uniqueid"), parentNo = $(tr).data("parent");
  174. var nexts = tr.nextAll().filter("[data-parent='" + parentNo + "']");
  175. if (nexts.length > 0) {
  176. var nextId = nexts.first().data("uniqueid");
  177. //console.log(nextId);
  178. $.iwbAjax1({ url: url, data: { Id: funId, NextId: nextId } });
  179. } else {
  180. abp.message.warn(abp.localization.iwbZero("RecordAtBottom"));
  181. }
  182. } else {
  183. abp.message.warn(abp.localization.iwbZero("SelectRecordOperation"));
  184. }
  185. };
  186. funs['Refresh'] = function (url) {
  187. console.log("Refresh");
  188. $.iwbAjax1({ url: url });
  189. };
  190. return funs;
  191. }
  192. function RefreshTable(ele, isForce) {
  193. ele = ele || "table";
  194. isForce = isForce === undefined;
  195. var $table = typeof ele === 'string' ? $('#' + ele) : $(ele);
  196. if ($table.length < 1) {
  197. console.log('没有发现表格:', ele);
  198. }
  199. try {
  200. $table.iwbTable('refresh', isForce);
  201. } catch (e) {
  202. console.log("RefreshTable", e);
  203. }
  204. }
  205. function BtnCreate(option) {
  206. option = option || {};
  207. option.table = option.table ? option.table : "table";
  208. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  209. var url = option.url || $table.find('.btn-toolbar').find('.btn[data-type="_btnCreate"]').data('url') || $table.find('.btn-toolbar').find('.btn[data-type="btnCreate"]').data('url');
  210. option.type = 'post';
  211. $table.iwbTable('defaultCreate', url, option);
  212. }
  213. function BtnUpdate(option, row) {
  214. option = option || {};
  215. option.table = option.table ? option.table : "table";
  216. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  217. var url = option.url || $table.find('.btn-toolbar').find('.btn[data-type="btnUpdate"]').data('url');
  218. row = row || option.row || $table.bootstrapTable("getSelections")[0];
  219. option.data = option.data || row;
  220. option.type = 'post';
  221. $table.iwbTable('defaultUpdate', url, option, row);
  222. }
  223. function BtnDelete(option, row) {
  224. option = option || {};
  225. option.table = option.table ? option.table : "table";
  226. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  227. var url = option.url || $table.find('.btn-toolbar').find('.btn[data-type="btnDelete"]').data('url');
  228. row = row || option.row || $table.bootstrapTable("getSelections")[0];
  229. option.type = 'post';
  230. $table.iwbTable('defaultDelete', url, option, row);
  231. }
  232. function BtnConfirm(message, title, url, rowOrTableId, data) {
  233. var row;
  234. if (rowOrTableId) {
  235. if (typeof rowOrTableId === 'object' && !(rowOrTableId instanceof jQuery)) {
  236. row = rowOrTableId;
  237. } else {
  238. var $table = typeof rowOrTableId === 'string' ? $('#' + rowOrTableId) : $(rowOrTableId);
  239. row = $table.bootstrapTable("getSelections")[0];
  240. }
  241. } else {
  242. row = $("#table").bootstrapTable("getSelections")[0];
  243. }
  244. if (row) {
  245. data = data || { Id: row.id };
  246. MsgConfirm(message, title, function () {
  247. $.iwbAjax({ url: url, data: data, isValidate: false });
  248. });
  249. } else
  250. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  251. }
  252. function MsgConfirm(message, title, callback, opt) {
  253. abp.message.confirm(message, title, function (isConfirmed) {
  254. if (isConfirmed && callback) {
  255. callback(opt);
  256. }
  257. });
  258. }
  259. function OpenModal(opt) {
  260. opt = opt || {};
  261. var ele = opt.modal ? opt.modal : "modal";
  262. var $modal = typeof ele === 'string' ? $('#' + ele) : $(ele);
  263. if ($modal.length < 1) {
  264. console.log('没有发现模态框:', ele);
  265. }
  266. try {
  267. $modal.iwbModal(opt);
  268. } catch (e) {
  269. console.log("OpenModal", e);
  270. }
  271. }
  272. function ShowModal(ele) {
  273. ele = ele || "modal";
  274. var $modal = typeof ele === 'string' ? $('#' + ele) : $(ele);
  275. if ($modal.length < 1) {
  276. console.log('没有发现模态框:', ele);
  277. }
  278. try {
  279. $modal.iwbModal('show');
  280. } catch (e) {
  281. console.log("ShowModal", e);
  282. }
  283. }
  284. var queryModalTarget = '';
  285. function ShowQueryModal(ele, target) {
  286. ele = ele || "modal";
  287. queryModalTarget = !target ? '' : target.indexOf('.') === 0 ? target : target.indexOf('#') === 0 ? target : '#' + target;
  288. var $modal = typeof ele === 'string' ? $('#' + ele) : $(ele);
  289. if ($modal.length < 1) {
  290. console.log('没有发现模态框:', ele);
  291. }
  292. try {
  293. $modal.iwbModal('show2');
  294. } catch (e) {
  295. console.log("ShowModal", e);
  296. }
  297. }
  298. function ClearSearchValue(target,clear,that) {
  299. var $target = $(!target ? $(that) : target.indexOf('.') === 0 ? target : target.indexOf('#') === 0 ? target : '#' + target);
  300. var arr = clear.split(",");
  301. arr.forEach(function (v) {
  302. if (v) {
  303. var vStr = v.indexOf('.') === 0 ? v : v.indexOf('#') === 0 ? v : '#' + v;
  304. var $t = $target.find(vStr);
  305. $t.val('');
  306. if ($t.is("select")) {
  307. $t.trigger('change');
  308. }
  309. }
  310. });
  311. }
  312. function FileUpload(that, opt) { $(that).iwbFileUpload(opt); }
  313. function FileClear(that) { $(that).iwbFileUpload('clearFile'); }
  314. function FileShow(that, opt) { $(that).iwbFileShow(opt); }
  315. function AddDynamicBox(that) {
  316. var $that = $(that).closest('.iwb-dynamic-box'), html = $that.clone().prop("outerHTML");
  317. html = html.replace('btn-add', 'btn-delete');
  318. html = html.replace('AddDynamicBox', 'DeleteDynamicBox');
  319. html = html.replace('>增加</button', '>删除</button');
  320. html = html.replace(new RegExp('data-select2-id="[0-9]*"', "g"), '');
  321. var $html = $(html).addClass('iwb-dynamic-box-delete').removeAttr('data-select2-id');
  322. $html.find('.select2').remove();
  323. $html.find('select').val('').trigger('change');
  324. $html.find('input').val('');
  325. $that.parent().append($html);
  326. return $html;
  327. }
  328. function DeleteDynamicBox(that) {
  329. var $that = $(that).closest('.iwb-dynamic-box');
  330. $that.remove();
  331. }
  332. function OverlayScrollbar(that, opt) {
  333. var option = $.extend(true,
  334. {},
  335. {
  336. className: "os-theme-thin-dark",
  337. resize: "n", //[ "none", "both", "horizontal", "vertical" ]shorthand: [ "n", "b", "h", "v" ]
  338. normalizeRTL: true, //是否应规范化RTL滚动。
  339. sizeAutoCapable: true,
  340. clipAlways: true,
  341. paddingAbsolute: false,
  342. overflowBehavior: {
  343. x: "v-h", //[ "hidden", "scroll", "visible-hidden", "visible-scroll" ]shorthand: [ "h", "s", "v-h", "v-s" ]
  344. y: "s"
  345. },
  346. scrollbars: {
  347. dragScrolling: true,
  348. clickScrolling: true,
  349. visibility: "a", //[ "visible", "hidden", "auto" ]shorthand: [ "v", "h", "a" ]
  350. autoHide: "n", //[ "never", "scroll", "leave", "move" ]shorthand: [ "n", "s", "l", "m" ]
  351. autoHideDelay: 800
  352. }
  353. },
  354. opt || {});
  355. $(that).overlayScrollbars(option);
  356. }
  357. /*ajax全局设置*/
  358. $.ajaxSetup({
  359. type: 'Post',
  360. timeout: 1000 * 60 * 2,
  361. //contentType: "application/x-www-form-urlencoded;charset=utf-8",
  362. contentType: "application/json",
  363. dataType: "json",
  364. error: function () {
  365. abp.ui.clearBusy();
  366. },
  367. complete: function (xmlHttpRequest, textStatus) {
  368. //console.log("Complete - " + textStatus, xmlHttpRequest);
  369. abp.ui.clearBusy();
  370. if (textStatus === "timeout") {
  371. abp.message.error(abp.localization.iwbZero('OpTimeout'));
  372. console.log("Complete - 操作超时");
  373. } else if (textStatus !== "success") {
  374. console.log("Complete - " + textStatus, xmlHttpRequest.responseJSON);
  375. if (xmlHttpRequest.responseJSON) {
  376. //var json = xmlHttpRequest.responseJSON;
  377. } else if (xmlHttpRequest.responseText === "") {
  378. abp.message.error(abp.localization.iwbZero('OpServerError')).done(function () {
  379. top.location.reload();
  380. //top.location.href = "/Account/Login/?ReturnUrl=%2F";
  381. });
  382. }
  383. } else {
  384. var result = xmlHttpRequest.responseJSON;
  385. if (result && !result.success && result.error && result.error.message.indexOf('登陆超时') > -1) {
  386. top.location.reload();
  387. }
  388. }
  389. }
  390. });
  391. // ReSharper disable once NativeTypePrototypeExtending
  392. String.prototype.format = function (args) {
  393. var result = this;
  394. if (arguments.length > 0) {
  395. var reg;
  396. if (arguments.length === 1 && typeof args === "object") {
  397. for (var key in args) {
  398. if (args.hasOwnProperty(key)) {
  399. if (args[key] !== undefined) {
  400. reg = new RegExp("({" + key + "})", "g");
  401. result = result.replace(reg, args[key]);
  402. }
  403. }
  404. }
  405. }
  406. else {
  407. for (var i = 0; i < arguments.length; i++) {
  408. if (arguments[i] !== undefined) {
  409. reg = new RegExp("({[" + i + "]})", "g");
  410. result = result.replace(reg, arguments[i]);
  411. }
  412. }
  413. }
  414. }
  415. return result;
  416. };
  417. String.format = function (str) {
  418. var args = arguments, re = new RegExp("%([1-" + args.length + "])", "g");
  419. return String(str).replace(re, function ($1, $2) {
  420. return args[$2];
  421. }
  422. );
  423. };
  424. //调用方法很简单:
  425. //element.innerHTML = String.format('<a href="%1" onclick="alert(\’%2\’);">%3</a>', url, msg, text);
  426. // 对Date的扩展,将 Date 转化为指定格式的String
  427. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  428. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  429. // 例子:
  430. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  431. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  432. // ReSharper disable once NativeTypePrototypeExtending
  433. Date.prototype.format = function (fmt) {
  434. var o = {
  435. "M+": this.getMonth() + 1, //月份
  436. "d+": this.getDate(), //日
  437. "h+": this.getHours(), //小时
  438. "m+": this.getMinutes(), //分
  439. "s+": this.getSeconds(), //秒
  440. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  441. "S": this.getMilliseconds() //毫秒
  442. };
  443. if (/(y+)/.test(fmt))
  444. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  445. for (var k in o) {
  446. if (o.hasOwnProperty(k))
  447. if (new RegExp("(" + k + ")").test(fmt))
  448. fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  449. }
  450. return fmt;
  451. };
  452. Date.prototype.diff = function (diffType,endDate) {
  453. return GetDateDiff(this, endDate, diffType);
  454. }
  455. function DateFormatter(v, r, i, f) {
  456. if (!v) {
  457. return "";
  458. }
  459. var date = new Date(v);
  460. var str = date.format('yyyy-MM-dd');
  461. r[f] = str;
  462. return str;
  463. }
  464. function DateTimeFormatter(v, r, i, f) {
  465. if (!v) {
  466. return "";
  467. }
  468. var date = new Date(v);
  469. var str = date.format('yyyy-MM-dd hh:mm:ss');
  470. r[f] = str;
  471. return str;
  472. }
  473. /*
  474. * 获得时间差,时间格式为 年-月-日 小时:分钟:秒 或者 年/月/日 小时:分钟:秒
  475. * 其中,年月日为全格式,例如 : 2010-10-12 01:00:00
  476. * 返回精度为:秒,分,小时,天
  477. */
  478. function GetDateDiff(startTime, endTime, diffType) {
  479. //startTime = startTime.replace(/-/g, "/");
  480. //endTime = endTime.replace(/-/g, "/");
  481. diffType = diffType.toLowerCase();
  482. var sTime = typeof startTime === 'string' ? new Date(startTime) : startTime; //开始时间
  483. var eTime = typeof endTime === 'string' ? new Date(endTime) : endTime; //结束时间
  484. //作为除数的数字
  485. var divNum = 1;
  486. switch (diffType) {
  487. case "second":
  488. case "s":
  489. divNum = 1000;
  490. break;
  491. case "minute":
  492. case "m":
  493. divNum = 1000 * 60;
  494. break;
  495. case "hour":
  496. case "h":
  497. divNum = 1000 * 3600;
  498. break;
  499. case "day":
  500. case "d":
  501. divNum = 1000 * 3600 * 24;
  502. break;
  503. default:
  504. break;
  505. }
  506. return parseInt((eTime.getTime() - sTime.getTime()) / parseInt(divNum)); //
  507. }
  508. $(function () {
  509. //Configure blockUI
  510. if ($.blockUI) {
  511. $.blockUI.defaults.baseZ = 20000;
  512. }
  513. $('select:not(.ajax-select)').select2();
  514. $('select.ajax-select').each(function() {
  515. var $this = $(this);
  516. var tKey = function() { return $this.data('table-key') },
  517. cKey = function() { return $this.data('column-key') },
  518. take = function() { return $this.data('take-count') },
  519. funResultTemplate = function() { return $this.data('fun-result-template-name') };
  520. console.log("ajax-select", tKey(), cKey(), take(), funResultTemplate());
  521. $this.select2({
  522. ajax: {
  523. url: abp.appUrl + "Query/AcInfos",
  524. type: "post",
  525. dataType: 'json',
  526. delay: 250,
  527. data: function(params) {
  528. //console.log(params);
  529. var page = params.page || 1;
  530. var queryParam = {
  531. TableKey: tKey(),
  532. ColumnKey: cKey(),
  533. NameKey: params.term, // search term
  534. Skip: (page - 1) * take(),
  535. Take: take()
  536. };
  537. return queryParam;
  538. },
  539. processResults: function(data, params) {
  540. console.log(data, params);
  541. params.page = params.page || 1;
  542. var result = {
  543. results: data.items.map(function(v) {
  544. v.id = v.valueKey;
  545. v.text = v.nameKey;
  546. return v;
  547. }),
  548. pagination: {
  549. more: (params.page * 10) < data.totalCount
  550. }
  551. };
  552. //console.log(data, params);
  553. return result;
  554. },
  555. transport: function(params, success, failure) {
  556. //console.log("1", params);
  557. params = params || {};
  558. params.success = success;
  559. params.error = failure;
  560. var $request = $.iwbAjax41(params);
  561. return $request;
  562. },
  563. cache: true
  564. },
  565. cache: true,
  566. minimumInputLength: 0,
  567. templateResult: function(res) {
  568. if (res.loading) {
  569. return res.text;
  570. }
  571. var funR = window[funResultTemplate()];
  572. if (funR && $.isFunction(funR)) {
  573. return funR(res);
  574. } else {
  575. return '{0}'.format(res.text);
  576. }
  577. },
  578. templateSelection: function(res) {
  579. return res.text;
  580. }
  581. });
  582. });
  583. $('.iwb-date-time').iwbDate({ language: window.lang });
  584. $('.iwb-date').iwbDate({ language: window.lang });
  585. });
  586. function ChangAjaxSelectValue($this, val, name) {
  587. if (name && val) {
  588. var option = new Option(name, val);
  589. $this.html(option).trigger('change');
  590. } else if(val){
  591. var tKey = $this.data('table-key'), cKey = $this.data('column-key');
  592. $.iwbAjax41({
  593. url: abp.appUrl + "Query/AcInfo",
  594. data: {
  595. TableKey: tKey,
  596. ColumnKey: cKey,
  597. ValueKey: val
  598. },
  599. success: function (res) {
  600. if (res) {
  601. var option = new Option(res.nameKey, res.valueKey);
  602. $this.html(option).trigger('change');
  603. }
  604. }
  605. });
  606. }
  607. }
  608. var cnMsg = {
  609. required: "必填",
  610. remote: "请修正该字段",
  611. email: "请输入正确格式的电子邮件",
  612. url: "请输入合法的网址",
  613. date: "请输入合法的日期",
  614. dateISO: "请输入日期(yyyy-MM-dd)",
  615. number: "请输入合法的数字",
  616. digits: "请输入合法的整数",
  617. creditcard: "请输入合法的信用卡号",
  618. equalTo: "请再次输入相同的值",
  619. accept: "请输入拥有合法后缀名的字符串",
  620. //maxlength: jQuery.format("请输入一个长度最多是 {0} 的字符串"),
  621. //minlength: jquery.format("请输入一个长度最少是 {0} 的字符串"),
  622. //rangelength: jQuery.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
  623. //range: jQuery.format("请输入一个介于 {0} 和 {1} 之间的值"),
  624. //max: jQuery.format("请输入一个最大为 {0} 的值"),
  625. //min: jQuery.format("请输入一个最小为 {0} 的值")
  626. };
  627. jQuery.extend(jQuery.validator.messages, cnMsg);
  628. // 身份证号码验证
  629. jQuery.validator.addMethod("isIdCardNo", function (value, element) {
  630. return this.optional(element) || idCardNoUtil.checkIdCardNo(value);//调用验证的方法
  631. }, "请正确填写身份证号码");
  632. var idCardNoUtil = {
  633. provinceAndCities: {
  634. 11: "北京",
  635. 12: "天津",
  636. 13: "河北",
  637. 14: "山西",
  638. 15: "内蒙古",
  639. 21: "辽宁",
  640. 22: "吉林",
  641. 23: "黑龙江",
  642. 31: "上海",
  643. 32: "江苏",
  644. 33: "浙江",
  645. 34: "安徽",
  646. 35: "福建",
  647. 36: "江西",
  648. 37: "山东",
  649. 41: "河南",
  650. 42: "湖北",
  651. 43: "湖南",
  652. 44: "广东",
  653. 45: "广西",
  654. 46: "海南",
  655. 50: "重庆",
  656. 51: "四川",
  657. 52: "贵州",
  658. 53: "云南",
  659. 54: "西藏",
  660. 61: "陕西",
  661. 62: "甘肃",
  662. 63: "青海",
  663. 64: "宁夏",
  664. 65: "新疆",
  665. 71: "台湾",
  666. 81: "香港",
  667. 82: "澳门",
  668. 91: "国外"
  669. },
  670. powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],
  671. parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],
  672. genders: { male: "男", female: "女" },
  673. checkAddressCode: function (addressCode) {
  674. var check = /^[1-9]\d{5}$/.test(addressCode);
  675. if (!check) return false;
  676. if (idCardNoUtil.provinceAndCities[parseInt(addressCode.substring(0, 2))]) {
  677. return true;
  678. } else {
  679. return false;
  680. }
  681. },
  682. checkBirthDayCode: function (birDayCode) {
  683. var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
  684. if (!check) return false;
  685. var yyyy = parseInt(birDayCode.substring(0, 4), 10);
  686. var mm = parseInt(birDayCode.substring(4, 6), 10);
  687. var dd = parseInt(birDayCode.substring(6), 10);
  688. var xdata = new Date(yyyy, mm - 1, dd);
  689. if (xdata > new Date()) {
  690. return false; //生日不能大于当前日期
  691. } else if ((xdata.getFullYear() === yyyy) && (xdata.getMonth() === mm - 1) && (xdata.getDate() === dd)) {
  692. return true;
  693. } else {
  694. return false;
  695. }
  696. },
  697. getParityBit: function (idCardNo) {
  698. var id17 = idCardNo.substring(0, 17);
  699. var power = 0;
  700. for (var i = 0; i < 17; i++) {
  701. power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
  702. }
  703. var mod = power % 11;
  704. return idCardNoUtil.parityBit[mod];
  705. },
  706. checkParityBit: function (idCardNo) {
  707. var parityBit = idCardNo.charAt(17).toUpperCase();
  708. if (idCardNoUtil.getParityBit(idCardNo) === parityBit) {
  709. return true;
  710. } else {
  711. return false;
  712. }
  713. },
  714. checkIdCardNo: function (idCardNo) {
  715. //15位和18位身份证号码的基本校验
  716. var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
  717. if (!check) return false;
  718. //判断长度为15位或18位
  719. if (idCardNo.length === 15) {
  720. return idCardNoUtil.check15IdCardNo(idCardNo);
  721. } else if (idCardNo.length === 18) {
  722. return idCardNoUtil.check18IdCardNo(idCardNo);
  723. } else {
  724. return false;
  725. }
  726. },
  727. //校验15位的身份证号码
  728. check15IdCardNo: function (idCardNo) {
  729. //15位身份证号码的基本校验
  730. var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
  731. if (!check) return false;
  732. //校验地址码
  733. var addressCode = idCardNo.substring(0, 6);
  734. check = idCardNoUtil.checkAddressCode(addressCode);
  735. if (!check) return false;
  736. var birDayCode = '19' + idCardNo.substring(6, 12);
  737. //校验日期码
  738. return idCardNoUtil.checkBirthDayCode(birDayCode);
  739. },
  740. //校验18位的身份证号码
  741. check18IdCardNo: function (idCardNo) {
  742. //18位身份证号码的基本格式校验
  743. var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
  744. if (!check) return false;
  745. //校验地址码
  746. var addressCode = idCardNo.substring(0, 6);
  747. check = idCardNoUtil.checkAddressCode(addressCode);
  748. if (!check) return false;
  749. //校验日期码
  750. var birDayCode = idCardNo.substring(6, 14);
  751. check = idCardNoUtil.checkBirthDayCode(birDayCode);
  752. if (!check) return false;
  753. //验证校检码
  754. return idCardNoUtil.checkParityBit(idCardNo);
  755. }
  756. ,
  757. formateDateCN: function (day) {
  758. var yyyy = day.substring(0, 4);
  759. var mm = day.substring(4, 6);
  760. var dd = day.substring(6);
  761. return yyyy + '-' + mm + '-' + dd;
  762. },
  763. //获取信息
  764. getIdCardInfo: function (idCardNo) {
  765. var idCardInfo = {
  766. gender: "", //性别
  767. birthday: "" // 出生日期(yyyy-mm-dd)
  768. };
  769. var aday;
  770. if (idCardNo.length === 15) {
  771. aday = '19' + idCardNo.substring(6, 12);
  772. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  773. if (parseInt(idCardNo.charAt(14)) % 2 === 0) {
  774. idCardInfo.gender = idCardNoUtil.genders.female;
  775. } else {
  776. idCardInfo.gender = idCardNoUtil.genders.male;
  777. }
  778. } else if (idCardNo.length === 18) {
  779. aday = idCardNo.substring(6, 14);
  780. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  781. if (parseInt(idCardNo.charAt(16)) % 2 === 0) {
  782. idCardInfo.gender = idCardNoUtil.genders.female;
  783. } else {
  784. idCardInfo.gender = idCardNoUtil.genders.male;
  785. }
  786. }
  787. return idCardInfo;
  788. },
  789. getId15: function (idCardNo) {
  790. if (idCardNo.length === 15) {
  791. return idCardNo;
  792. } else if (idCardNo.length === 18) {
  793. return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
  794. } else {
  795. return null;
  796. }
  797. },
  798. getId18: function (idCardNo) {
  799. if (idCardNo.length === 15) {
  800. var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
  801. var parityBit = idCardNoUtil.getParityBit(id17);
  802. return id17 + parityBit;
  803. } else if (idCardNo.length === 18) {
  804. return idCardNo;
  805. } else {
  806. return null;
  807. }
  808. }
  809. };