UtilJs.js 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792
  1. var config = {
  2. table: $("#table"),
  3. tableTool: $("#tableTool"),
  4. form: $("#form"),
  5. modal: $("#modal")
  6. };
  7. /********************** bootstrapTable Start **/
  8. function LoadTable(url, options) {
  9. GetSearchList();
  10. var defaultOption = {
  11. table: config.table,
  12. onAll: OnAll,
  13. onClickRow: OnClickRow,
  14. onCheck: OnCheck,
  15. onUncheck:OnUnCheck,
  16. queryParams: QueryParams,
  17. //onLoadSuccess: ICheckTableInit_SingleSelect
  18. onLoadSuccess: OnLoadSuccess,
  19. onPostBody: OnPostBody,
  20. responseHandler: ResponseHandler,
  21. };
  22. if (!options) {
  23. options = !url || typeof(url)==="string" ? {} : url;
  24. }
  25. if (options.hasOwnProperty("url")) {
  26. defaultOption.url = options.url;
  27. } else if (typeof (url) === "string") {
  28. defaultOption.url = url;
  29. }
  30. $.extend(defaultOption, options);
  31. $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales[window.lang]);
  32. defaultOption.table.bootstrapTable(defaultOption );
  33. return defaultOption.table;
  34. }
  35. function RefreshTable(table) {
  36. abp.ui.setBusy();
  37. var $thisTable = config.table;
  38. if (table) {
  39. if (typeof (table) === "string") {
  40. $thisTable = $("#" + table);
  41. } else {
  42. $thisTable = $(table);
  43. }
  44. }
  45. $thisTable.bootstrapTable("refresh", { silent: false});
  46. setTimeout(function () { abp.ui.clearBusy(); _isSearching = false; }, 8 * 1000);
  47. }
  48. function QueryParams(params) { //bootstrapTable自带参数
  49. var sorting = '';
  50. if (params.sort) {
  51. sorting = params.sort;
  52. if (params.order) {
  53. sorting += ' ' + params.order;
  54. }
  55. }
  56. return {
  57. //limit: params.limit, //页面大小
  58. //page: (params.offset / params.limit) + 1, //页码
  59. MaxResultCount: params.limit,
  60. SkipCount: params.offset,
  61. Sorting: sorting, //排序列名
  62. sortOrder: params.order, //排位命令(desc,asc)
  63. SearchList: _searchList
  64. };
  65. }
  66. function ResponseHandler(res) {
  67. if (res.success) {
  68. var data = JSON.parse('{"total":' + res.result.totalCount + ',"rows":' + JSON.stringify(res.result.items) + '}');
  69. console.log(data);
  70. return data;
  71. } else {
  72. console.log("Table load failed");
  73. if (res.error) {
  74. if (res.error.details) {
  75. return abp.message.error(res.error.details, res.error.message);
  76. } else {
  77. if (error.message && error.message.indexOf("登陆超时") >= 0) {
  78. return abp.message.error(error.message).done(function () {
  79. top.location.reload();
  80. });
  81. } else {
  82. return abp.message.error(error.message || abp.ajax.defaultError.message);
  83. }
  84. }
  85. }
  86. }
  87. return JSON.parse('{"total":0,"rows":[]}');
  88. }
  89. function ResponseHandlerNoPage(res) {
  90. if (res.success) {
  91. var data = res.result;
  92. //console.log("data:::"+data);
  93. return data;
  94. } else {
  95. console.log("Table load failed");
  96. if (res.error) {
  97. if (res.error.details) {
  98. return abp.message.error(res.error.details, res.error.message);
  99. } else {
  100. if (error.message && error.message.indexOf("登陆超时") >= 0) {
  101. return abp.message.error(error.message).done(function () {
  102. top.location.reload();
  103. });
  104. } else {
  105. return abp.message.error(error.message || abp.ajax.defaultError.message);
  106. }
  107. }
  108. }
  109. }
  110. return JSON.parse('[]');
  111. }
  112. function OnAll(eName, eData, table) {
  113. //console.log(eName, eData);
  114. var $table = config.table;
  115. if (table) {
  116. if (typeof (table) === "string") {
  117. $table = $("#" + table);
  118. } else {
  119. $table = $(table);
  120. }
  121. }
  122. _isSearching = false;
  123. $table.closest(".table-box").find("#tableTool .btn[data-type^='btn']")
  124. .prop('disabled', $table.bootstrapTable('getSelections').length !== 1);
  125. $table.closest(".table-box").find("#tableTool .btn[data-type^='a_btn']")
  126. .prop('disabled', $table.bootstrapTable('getSelections').length === 0);
  127. }
  128. function OnLoadSuccess(data,table) {
  129. var $table = config.table;
  130. if (table) {
  131. if (typeof (table) === "string") {
  132. $table = $("#" + table);
  133. } else {
  134. $table = $(table);
  135. }
  136. }
  137. $table.find(".bs-checkbox").find("input").addClass("filled-in").after("<label></label");
  138. $table.find("thead th.bs-checkbox").off("click.checkOnTable").on(
  139. "click.checkOnTable",
  140. function () {
  141. $(this).find("input").click();
  142. });
  143. _isSearching = false;
  144. abp.ui.clearBusy();
  145. console.log('endTime:' + new Date());
  146. }
  147. function OnPostBody(data,table) {
  148. var $table = config.table;
  149. if (table) {
  150. if (typeof (table) === "string") {
  151. $table = $("#" + table);
  152. } else {
  153. $table = $(table);
  154. }
  155. }
  156. $table.find('.bootstrap-table tr th').each(function() { $(this).css("text-align", "center") });
  157. $('.bootstrap-table tr td').each(function() {
  158. var text = $(this).text();
  159. $(this).attr("title", text);
  160. //var width = $(this).width();
  161. $(this).css({
  162. //"max-width": width,
  163. "overflow": "hidden",
  164. "text-overflow": "ellipsis",
  165. "white-space": "nowrap"
  166. });
  167. });
  168. }
  169. function OnClickRow(row, $element, field) {
  170. }
  171. function OnCheck(row, $element) {
  172. }
  173. function OnUnCheck(row, $element) {
  174. }
  175. //function UpperJsonKey(jsonObj) {
  176. // if (jsonObj===undefined || jsonObj===null) {
  177. // return [];
  178. // }
  179. // if (jsonObj.length !== undefined) {
  180. // for (var i = 0; i < jsonObj.length; i++) {
  181. // UpperJsonKeyChild(jsonObj[i]);
  182. // //for (var key in jsonObj[i]) {
  183. // //if (jsonObj[i].hasOwnProperty(key)) {
  184. // // jsonObj[i][key.substring(0, 1).toUpperCase() + key.substring(1)] = jsonObj[i][key];
  185. // // delete (jsonObj[i][key]);
  186. // //}
  187. // //}
  188. // }
  189. // } else {
  190. // UpperJsonKeyChild(jsonObj);
  191. // //for (var k in jsonObj) {
  192. // // if (jsonObj.hasOwnProperty(k)) {
  193. // // jsonObj[k.substring(0, 1).toUpperCase() + k.substring(1)] = jsonObj[k];
  194. // // delete (jsonObj[k]);
  195. // // }
  196. // //}
  197. // }
  198. // return jsonObj;
  199. //}
  200. //function UpperJsonKeyChild(jsonObj) {
  201. // for (var k in jsonObj) {
  202. // if (jsonObj.hasOwnProperty(k)) {
  203. // var obj = jsonObj[k];
  204. // if (typeof (obj) === "object" && (Object.prototype.toString.call(obj).toLowerCase() === "[object object]" || Object.prototype.toString.call(obj).toLowerCase() === '[object array]')) {
  205. // jsonObj[k.substring(0, 1).toUpperCase() + k.substring(1)] = UpperJsonKey(obj);
  206. // delete (jsonObj[k]);
  207. // } else {
  208. // jsonObj[k.substring(0, 1).toUpperCase() + k.substring(1)] = jsonObj[k];
  209. // delete (jsonObj[k]);
  210. // }
  211. // }
  212. // }
  213. // return jsonObj;
  214. //}
  215. /** bootstrapTable END **/
  216. /********************** DataCurd Start **/
  217. var funs = {
  218. btnCreate: function (url) { BtnCreate(url); },
  219. btnUpdate: function (url) { BtnUpdate(url); },
  220. btnDelete: function (url) { BtnDelete(url); },
  221. btnSearch: function () { BtnSearch(); },
  222. none: function () {console.log("No type");}
  223. };
  224. config.tableTool.find('.btn').on('click', function () {
  225. var type = $(this).data('type').replace("a_","").replace("_","");
  226. var url = $(this).data('url') || "";
  227. funs[type] ? funs[type].call(this, url) : funs["none"].call(this);
  228. });
  229. function BtnCreate(url, options) {
  230. console.log("Add");
  231. var defaultOption = {
  232. modal: config.modal,
  233. modaltitle: window.opCreate,
  234. url: url,
  235. readonly: "",
  236. disabled: "",
  237. select2: true,
  238. select2tree: false,
  239. save: null,
  240. table: null
  241. };
  242. if (!options) {
  243. options = !url || typeof (url) === "string" ? {} : url;
  244. }
  245. if (options.hasOwnProperty("url")) {
  246. defaultOption.url = options.url;
  247. } else if (typeof (url) === "string") {
  248. defaultOption.url = url;
  249. } else {
  250. defaultOption.url = config.tableTool.find('.btn[data-type=_btnCreate]').data('url');
  251. }
  252. $.extend(defaultOption, options);
  253. OpenModal(defaultOption);
  254. }
  255. function BtnUpdate(url, options) {
  256. console.log("Update");
  257. var $table = config.table;
  258. if (!options) {
  259. options = !url || typeof (url) === "string" ? {} : url;
  260. }
  261. if (options.table) {
  262. $table = options.table;
  263. }
  264. if (typeof ($table) === "string") {
  265. $table = $("#" + $table);
  266. } else {
  267. $table = $($table);
  268. }
  269. var rows = $table.bootstrapTable("getSelections");
  270. if (rows.length === 1) {
  271. var defaultOption = {
  272. modal: config.modal,
  273. modalContent: "",
  274. modaltitle: window.opUpdate,
  275. data: rows[0],
  276. savebtn: null,
  277. form: null,
  278. readonly: "",
  279. disabled: "",
  280. url: "",
  281. select2: true,
  282. select2tree: false,
  283. save: null,
  284. table: null,
  285. isValidate: true
  286. };
  287. if (options.hasOwnProperty("url")) {
  288. defaultOption.url = options.url;
  289. } else if (typeof (url) === "string") {
  290. defaultOption.url = url;
  291. } else {
  292. defaultOption.url = config.tableTool.find('.btn[data-type=btnUpdate]').data('url');
  293. }
  294. $.extend(defaultOption, options);
  295. OpenModal(defaultOption);
  296. } else
  297. abp.message.warn("选择一条记录操作!");
  298. }
  299. function BtnDelete(url,table) {
  300. console.log("Delete");
  301. var $table = config.table;
  302. if (table) {
  303. if (typeof (table) === "string") {
  304. $table = $("#" + table);
  305. } else {
  306. $table = $(table);
  307. }
  308. }
  309. var rows = $table.bootstrapTable("getSelections");
  310. if (rows.length === 1) {
  311. abp.message.confirm(abp.localization.localize("DeleteConfirmMsg"), abp.localization.localize("DeleteConfirmTitle"),function() {
  312. SaveAjax({ url: url, data: { Id: rows[0].id }, isValidate: false, table: $table});
  313. });
  314. } else
  315. abp.message.warn("选择一条记录操作!");
  316. }
  317. var _isSearching = false;
  318. var _searchList = [];
  319. function BtnSearch(isCheck) {
  320. clearTimeout(t);
  321. if (_isSearching) {
  322. return;
  323. }
  324. _isSearching = true;
  325. GetSearchList();
  326. if (!isCheck&&_searchList.length <= 0) {
  327. console.log("Search-Multi-None");
  328. return;
  329. }
  330. var isValidated = FormValidate({ form: $("#SearchForm") });
  331. if (isValidated) {
  332. RefreshTable();
  333. console.log("Search");
  334. } else {
  335. console.log("Search_Validate_Faild");
  336. }
  337. }
  338. function BtnConfirm(message, title, url, rowOrTableId,data) {
  339. var row;
  340. if (rowOrTableId) {
  341. if (typeof rowOrTableId === 'object' && !(rowOrTableId instanceof jQuery)) {
  342. row = rowOrTableId;
  343. } else {
  344. var $table = typeof rowOrTableId === 'string' ? $('#' + rowOrTableId) : $(rowOrTableId);
  345. row = $table.bootstrapTable("getSelections")[0];
  346. }
  347. } else {
  348. row = $("#table").bootstrapTable("getSelections")[0];
  349. }
  350. if (row) {
  351. data = data || { Id: row.id };
  352. MsgConfirm(message, title,function () {
  353. SaveAjax({ url: url, data: data, isValidate: false });
  354. });
  355. } else
  356. abp.message.warn(abp.localization.iwbZero('SelectRecordOperation'));
  357. }
  358. function MsgConfirm(message,title,callback,opt) {
  359. abp.message.confirm(message, title,function (isConfirmed) {
  360. if (isConfirmed&& callback) {
  361. callback(opt);
  362. }
  363. });
  364. }
  365. function GetSearchList() {
  366. var count = $("#SearchForm").find(".KeyWords").length;
  367. _searchList = [];
  368. for (var i = 1; i <= count; i++) {
  369. var keyWords = $("#KeyWords-" + i).val();
  370. if (keyWords) {
  371. var keyField = $("#KeyField-" + i).val();
  372. var fieldType = $("#FieldType-" + i).val();
  373. var expType = $("#ExpType-" + i).val();
  374. _searchList.push({ KeyWords: keyWords, KeyField: keyField, FieldType: fieldType, ExpType: expType });
  375. }
  376. }
  377. }
  378. /** DataCurd END **/
  379. /************************ Modal、Form Start **/
  380. function ShowModal(modal) {
  381. var $modal = typeof (modal) === "string" ? $("#" + modal) : $(modal);
  382. $modal.off('shown.bs.modal').on('shown.bs.modal', function () {
  383. $(this).css('display', 'block');
  384. var topHeight = $(window).height() - $(this).find('.modal-dialog').height() - 50;
  385. if (topHeight < 30) {
  386. topHeight = 30;
  387. }
  388. $(this).find('.modal-dialog').animate({ 'marginTop': topHeight / 2 + "px" });
  389. });
  390. $modal.modal("show", { keyboard: true});
  391. }
  392. var targetDom="";
  393. function ShowQueryModal(modal, pcTargetDom) {
  394. targetDom = !pcTargetDom ? "" : pcTargetDom.indexOf('.') === 0 ? pcTargetDom : pcTargetDom.indexOf('#') === 0 ? pcTargetDom : '#' + pcTargetDom;
  395. ShowModal(modal);
  396. }
  397. function OpenModal(url,options) {
  398. var defaultOption =
  399. {
  400. modal: config.modal,
  401. modalContent: "",
  402. modaltitle: window.opCreate,
  403. modalShown:null,
  404. data: null,
  405. savebtn: null,
  406. form: null,
  407. errorPlacement: function (error, element) {
  408. if (element.is("select")) {
  409. if (!element.next().next().hasClass("error")) {
  410. element.next().after(error);
  411. element.focus();
  412. }
  413. } else {
  414. element.after(error);
  415. element.focus();
  416. }
  417. },
  418. rules: {},
  419. readonly: "",
  420. disabled: "",
  421. success: null,
  422. select2: true,
  423. select2tree: false,
  424. save: null,
  425. table: null,
  426. isValidate: true,
  427. showAfter:null
  428. };
  429. if (!options) {
  430. options = !url || typeof (url) === "string" ? {} : url;
  431. }
  432. if (options.hasOwnProperty("url")) {
  433. defaultOption.url = options.url;
  434. } else if (typeof (url) === "string") {
  435. defaultOption.url = url;
  436. } else {
  437. defaultOption.url = config.tableTool.find('.btn[data-type=btnUpdate]').data('url');
  438. }
  439. $.extend(defaultOption, options);
  440. if (defaultOption.form === null || defaultOption.form.length <= 0 ) {
  441. defaultOption.form = defaultOption.modal.find("form");
  442. }
  443. if (defaultOption.savebtn === null || defaultOption.savebtn.length <= 0) {
  444. defaultOption.savebtn = defaultOption.modal.find("button.save-btn");
  445. if (defaultOption.savebtn.length <= 0) {
  446. defaultOption.savebtn = defaultOption.modal.find("#Save");
  447. }
  448. }
  449. var $modal = defaultOption.modal;
  450. $modal.off('show.bs.modal').on('show.bs.modal', function () {
  451. if (defaultOption.modalContent === "") {
  452. if (defaultOption.modalShown && typeof (defaultOption.modalShown) === "function") {
  453. defaultOption.modalShown();
  454. }
  455. $modal.find("input").val("").prop("readonly", false).prop("disabled", false).removeClass("error valid");
  456. $modal.find("select").val("").prop("readonly", false).prop("disabled", false).removeClass("error valid");
  457. $modal.find("textarea").val("").prop("readonly", false).prop("disabled", false).removeClass("error valid");
  458. $modal.find("label.error").remove();
  459. $modal.find(".modal-title-span").html(defaultOption.modaltitle);
  460. if (defaultOption.readonly !== "") {
  461. var readOnly = defaultOption.readonly.split(',');
  462. for (var i = 0; i < readOnly.length; i++) {
  463. $modal.find('#' + readOnly[i]).prop("readonly", true);
  464. }
  465. }
  466. if (defaultOption.disabled !== "") {
  467. var disabled = defaultOption.disabled.split(',');
  468. for (var j = 0; j < disabled.length; j++) {
  469. $modal.find('#' + disabled[j]).prop("disabled", true);
  470. }
  471. }
  472. if (defaultOption.select2) {
  473. $modal.find("select").select2();
  474. if (defaultOption.select2tree) {
  475. $modal.find('#' +defaultOption.select2tree).select2tree();
  476. }
  477. }
  478. if (defaultOption.data !== null)
  479. formUtil.Deserialize($modal, defaultOption.data);
  480. $modal.find('input[type="file"]').each(function(index, item) {
  481. ClearFile($(item).attr("id"));
  482. });
  483. $modal.find('input:not([type="hidden"]):not([type="disabled"]):first').focus();
  484. Draggable($modal);
  485. //: not([readonly]): not([disabled])
  486. } else {
  487. $modal.find(".modal-body").empty().append(defaultOption.modalContent);
  488. }
  489. $('select').off("change.ff").on("change.ff", function (e) {
  490. $(this).focus();
  491. $(this).next(".error").remove();
  492. $(this).blur();
  493. });
  494. //defaultOption.form.validate({
  495. // errorPlacement: defaultOption.errorPlacement,
  496. // rules: defaultOption.rules
  497. // }).settings.ignore = ":disabled";
  498. if (defaultOption.url !== "")
  499. if (defaultOption.save && typeof (defaultOption.save) ==="function") {
  500. defaultOption.savebtn.off("click.save").on("click.save", function () {
  501. //$(this).prop('disabled', true);
  502. //setTimeout(() => { $(this).prop('disabled', false); }, 2000);
  503. TimeOutDisableDom($(this));
  504. defaultOption.save({
  505. url: defaultOption.url,
  506. success: defaultOption.success === null ? function () { $modal.modal("hide"); RefreshTable(defaultOption.table); } : defaultOption.success,
  507. form: defaultOption.form
  508. })});
  509. } else {
  510. defaultOption.savebtn.off("click.save").on("click.save", function () {
  511. //$(this).prop('disabled', true);
  512. //setTimeout(() => { $(this).prop('disabled', false); }, 2000);
  513. TimeOutDisableDom($(this));
  514. SaveAjax({
  515. url: defaultOption.url,
  516. isValidate: defaultOption.isValidate,
  517. success: defaultOption.success === null ? function () { $modal.modal("hide"); RefreshTable(defaultOption.table); } : defaultOption.success,
  518. form: defaultOption.form
  519. });
  520. });
  521. }
  522. });
  523. $modal.off('shown.bs.modal').on('shown.bs.modal', function() {
  524. $(this).css('display', 'block');
  525. var topHeight = $(window).height() - $(this).find('.modal-dialog').height() - 50;
  526. if (topHeight < 30) {
  527. topHeight = 30;
  528. }
  529. $(this).find('.modal-dialog').animate({ 'marginTop': topHeight / 2 + "px" });
  530. if (defaultOption.showAfter && typeof (defaultOption.showAfter) === "function") {
  531. defaultOption.showAfter();
  532. }
  533. });
  534. $modal.modal("show", { keyboard: true});
  535. }
  536. function Draggable($modal) {
  537. //var $that = this;
  538. //var $modal = $that.getModal();
  539. //console.log('draggable');
  540. $('.modal-header').css('cursor', 'move');
  541. /** 拖拽模态框*/
  542. var dragModal = {
  543. mouseStartPoint: { 'left': 0, 'top': 0 },
  544. mouseEndPoint: { 'left': 0, 'top': 0 },
  545. mouseDragDown: false,
  546. basePoint: { 'left': 0, 'top': 0 },
  547. moveTarget: null,
  548. topleng: 0
  549. };
  550. $modal.off('mousedown.drag').on('mousedown.drag',
  551. '.modal-header',
  552. function(e) {
  553. //webkit内核和火狐禁止文字被选中
  554. $('body').addClass('drag-select');
  555. //ie浏览器禁止文字选中
  556. document.body.onselectstart = document.body.ondrag = function() {
  557. return false;
  558. };
  559. if ($(e.target).hasClass('close')) //点关闭按钮不能移动对话框
  560. return;
  561. dragModal.mouseDragDown = true;
  562. dragModal.moveTargetHeader = $(this);
  563. dragModal.moveTarget = $(this).closest('.modal-content');
  564. dragModal.mouseStartPoint = { 'left': e.clientX, 'top': e.pageY };
  565. dragModal.basePoint = dragModal.moveTarget.offset();
  566. dragModal.topLeng = e.pageY - e.clientY;
  567. });
  568. $modal.off('mouseup.drag').on('mouseup.drag',
  569. function() {
  570. dragModal.mouseDragDown = false;
  571. dragModal.moveTarget = undefined;
  572. dragModal.mouseStartPoint = { 'left': 0, 'top': 0 };
  573. dragModal.basePoint = { 'left': 0, 'top': 0 };
  574. });
  575. $modal.off('mousemove.drag').on('mousemove.drag',
  576. function(e) {
  577. if (!dragModal.mouseDragDown || dragModal.moveTarget === undefined) return;
  578. var mousX = e.clientX;
  579. var mousY = e.pageY;
  580. if (mousX < 0) mousX = 0;
  581. if (mousY < 0) mousY = 25;
  582. dragModal.mouseEndPoint = { 'left': mousX, 'top': mousY };
  583. var width = dragModal.moveTarget.width();
  584. var height = dragModal.moveTargetHeader.height();
  585. var clientWidth = document.body.clientWidth;
  586. var clientHeight = document.body.clientHeight;
  587. if (dragModal.mouseEndPoint.left < dragModal.mouseStartPoint.left - dragModal.basePoint.left) {
  588. dragModal.mouseEndPoint.left = 0;
  589. } else if (dragModal.mouseEndPoint.left >=
  590. clientWidth - width + dragModal.mouseStartPoint.left - dragModal.basePoint.left) {
  591. dragModal.mouseEndPoint.left = clientWidth - width - 38;
  592. } else {
  593. dragModal.mouseEndPoint.left =
  594. dragModal.mouseEndPoint.left -
  595. (dragModal.mouseStartPoint.left - dragModal.basePoint.left); //移动修正,更平滑
  596. }
  597. if (dragModal.mouseEndPoint.top - (dragModal.mouseStartPoint.top - dragModal.basePoint.top) <
  598. dragModal.topLeng) {
  599. dragModal.mouseEndPoint.top = dragModal.topLeng;
  600. } else if (dragModal.mouseEndPoint.top - dragModal.topLeng >
  601. clientHeight - height + dragModal.mouseStartPoint.top - dragModal.basePoint.top) {
  602. dragModal.mouseEndPoint.top = clientHeight - height - 38 + dragModal.topLeng;
  603. } else {
  604. dragModal.mouseEndPoint.top = dragModal.mouseEndPoint.top -
  605. (dragModal.mouseStartPoint.top - dragModal.basePoint.top);
  606. }
  607. dragModal.moveTarget.offset(dragModal.mouseEndPoint);
  608. });
  609. $(document).on('hidden.bs.modal',
  610. '.modal',
  611. function() {
  612. $('.modal-dialog').css({ 'top': '0', 'left': '0' });
  613. $('body').removeClass('drag-select');
  614. document.body.onselectstart = document.body.ondrag = null;
  615. });
  616. };
  617. var FormConvert = function() {};
  618. FormConvert.prototype = {
  619. Deserialize: function (body, array) {
  620. var input = body.find("input");
  621. var tel = body.find("input[type='tel']");
  622. var email = body.find("input[type='email']");
  623. var hidden = body.find("input[type='hidden']");
  624. var textarea = body.find("input[type='textarea']");
  625. var textarea2 = body.find("textarea");
  626. var select = body.find("select");
  627. var checkbox = body.find("input[type='checkbox']");
  628. var radio = body.find("input[type='radio']");
  629. $.merge(input, tel);
  630. $.merge(input, email);
  631. //$.merge(inputArray, checkbox);
  632. //$.merge(inputArray, radio);
  633. $.merge(input, hidden);
  634. $.merge(input, textarea);
  635. $.merge(input, textarea2);
  636. $.merge(input, select);
  637. //console.log(checkbox);
  638. //console.log(radio);
  639. input.each(function () {
  640. var input = $(this);
  641. //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() });
  642. var name = input.attr("name");
  643. if (array[name] !== "") {
  644. input.val(array[name]);
  645. }
  646. });
  647. select.each(function () {
  648. var input = $(this);
  649. //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() });
  650. var name = input.attr("name");
  651. if (typeof array[name] === "boolean") {
  652. array[name] = array[name] + "";
  653. }
  654. //console.log(name, array[name]);
  655. if (array[name] !== "") {
  656. //input.val(array[name]);
  657. //seleect2 赋值
  658. input.val(array[name]).trigger('change');
  659. }
  660. });
  661. checkbox.each(function () {
  662. var input = $(this);
  663. //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() });
  664. var name = input.attr("name");
  665. if (array[name] !== "") {
  666. //console.log(array[name]);
  667. //console.log("---");
  668. input.val(array[name] === "True" || input.val(array[name]) === "1" || input.val(array[name]) === "true");
  669. }
  670. });
  671. radio.each(function () {
  672. var input = $(this);
  673. //var name = input.attr("name").replace(/(\w)/, function (v) { return v.toUpperCase() });
  674. var name = input.attr("name");
  675. if (array[name] !== "") {
  676. //console.log(array[name]);
  677. $("input[name='" + name + "'][value='" + array[name] + "']").prop("checked", true);
  678. $("input[name='" + name + "'][value!='" + array[name] + "']").prop("checked",false);
  679. }
  680. });
  681. },
  682. //将form表单元素的值序列化成对象
  683. Serialize: function (form) {
  684. var disableEle = form.find("[disabled]");
  685. disableEle.each(function(i, e) {
  686. $(e).prop("disabled", false);
  687. });
  688. var o = {};
  689. $.each(form.serializeArray(), function () {
  690. if (o[this['name']]) {
  691. o[this['name']] = o[this['name']] + "," + this['value'];
  692. } else {
  693. o[this['name']] = this['value'];
  694. }
  695. });
  696. disableEle.each(function (i, e) {
  697. $(e).prop("disabled", true);
  698. });
  699. return o;
  700. }
  701. }
  702. var formUtil = new FormConvert();
  703. /** Modal、Form END **/
  704. /************************ Form Submit validate Start **/
  705. function SaveAjax(url, options) {
  706. var defaultOption = {
  707. async: true,
  708. type: "Post",
  709. contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
  710. data: null,
  711. dataType: "json",
  712. success: null,
  713. error: null,
  714. isAlert: true,
  715. isValidate: true,
  716. modal: config.modal,
  717. form: config.form,
  718. errorPlacement: function(error, element) {
  719. element.after(error);
  720. element.focus();
  721. },
  722. rules: {},
  723. blockUI: true,
  724. table: config.table
  725. };
  726. if (!options) {
  727. options = url;
  728. url = options.url;
  729. }
  730. if (!options.form && options.modal) {
  731. defaultOption.form = options.modal.find("form");
  732. }
  733. defaultOption = $.extend(defaultOption, options);
  734. var isValidated = true;
  735. if (defaultOption.isValidate) {
  736. isValidated = FormValidate(defaultOption);
  737. }
  738. if (isValidated) {
  739. //console.log(defaultOption.data)
  740. defaultOption.success =defaultOption.success?defaultOption.success : function() {
  741. RefreshTable(defaultOption.table);
  742. defaultOption.modal.modal('hide');
  743. };
  744. if (defaultOption.isAlert) {
  745. var success= defaultOption.success;
  746. defaultOption.success = function(res) {
  747. abp.message.success(abp.localization.localize("OpSuccess")).done(success(res));
  748. };
  749. }
  750. //var blockUi = defaultOption.blockUi != null
  751. // ? defaultOption.blockUi
  752. // : (defaultOption.modal == undefined || defaultOption.modal == null)
  753. // ? true
  754. // : defaultOption.modal;
  755. var ajaxOption = {
  756. url: url,
  757. async: defaultOption.async,
  758. type: defaultOption.type,
  759. contentType: defaultOption.contentType,
  760. data: defaultOption.data === null ? formUtil.Serialize(defaultOption.form) : defaultOption.data,
  761. dataType: defaultOption.dataType,
  762. success: defaultOption.success,
  763. error: defaultOption.error,
  764. blockUI: defaultOption.blockUI,
  765. unblockUI: defaultOption.blockUI
  766. };
  767. abp.ajax(ajaxOption);
  768. }
  769. }
  770. function FormValidate() {
  771. var defaultOption = {
  772. form: $("#form"),
  773. errorPlacement: function(error, element) {
  774. element.after(error);
  775. element.focus();
  776. },
  777. rules: {}
  778. };
  779. $.extend(defaultOption, arguments[0]);
  780. var form = defaultOption.form;
  781. form.validate({
  782. errorPlacement: defaultOption.errorPlacement,
  783. rules: defaultOption.rules
  784. }).settings.ignore = ":disabled";
  785. return form.valid();
  786. }
  787. function TimeOutDisableDom(that) {
  788. $(that).prop('disabled', true);
  789. setTimeout(() => { $(that).prop('disabled', false); }, 2000);
  790. }
  791. /******************************************** Form validate END **/
  792. /************************ Common script Start **/
  793. $.ajaxSetup({
  794. type: 'Post',
  795. timeout: 1000 * 60 * 2,
  796. contentType: "application/x-www-form-urlencoded;charset=utf-8",
  797. dataType: "json",
  798. //beforeSend:function() {
  799. // var blockUi =
  800. // ' <div id="beforeBlockUi" style="position: absolute; top: 0; left: 0; bottom: 0; right: 0;background:#ccc;"></div>';
  801. // $('body').append(blockUi);
  802. //},
  803. complete: function (xmlHttpRequest, textStatus) {
  804. //console.log("Complete - " + textStatus, xmlHttpRequest);
  805. // $("#beforeBlockUi").remove();
  806. if (textStatus === "timeout") {
  807. abp.message.error("服务器响应超时,请稍后再试。");
  808. console.log("Complete - 操作超时");
  809. } else if(textStatus !== "success") {
  810. console.log("Complete - " + textStatus, xmlHttpRequest.responseJSON);
  811. if (xmlHttpRequest.responseJSON) {
  812. var json = xmlHttpRequest.responseJSON;
  813. //if (!json.Success && !json.UnAuthorizedRequest && json.Error.Message.indexOf("登陆超时")>=0)
  814. // abp.message.error(json.Error.Message).done(function () {
  815. // //top.location.href = "/Account/Login/?ReturnUrl=%2F";
  816. // top.location.reload();
  817. // });
  818. }
  819. //else if (xmlHttpRequest.responseText === "") {
  820. // // top.location.href = "/Account/Login/?ReturnUrl=%2F&1=";
  821. // abp.message.error("服务器出错!请稍后重试。。。").done(function () {
  822. // top.location.href = "/Account/Login/?ReturnUrl=%2F";
  823. // });
  824. //}
  825. }
  826. }
  827. });
  828. /**
  829. * 在页面中任何嵌套层次的窗口中获取顶层窗口
  830. * @@return 当前页面的顶层窗口对象
  831. **/
  832. function GetTopWinow() {
  833. var p = window;
  834. while (p !== p.parent) {
  835. p = p.parent;
  836. }
  837. return p;
  838. }
  839. /**
  840. * 获取浏览器
  841. * @returns {}
  842. */
  843. function MyBrowser() {
  844. var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
  845. if (userAgent.indexOf("Opera") > -1) {
  846. return "Opera";
  847. }; //判断是否Opera浏览器
  848. if (userAgent.indexOf("Firefox") > -1) {
  849. return "FF";
  850. } //判断是否Firefox浏览器
  851. if (userAgent.indexOf("Chrome") > -1) {
  852. return "Chrome";
  853. }
  854. if (userAgent.indexOf("Safari") > -1) {
  855. return "Safari";
  856. } //判断是否Safari浏览器
  857. if (userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 ) {
  858. return "IE";
  859. }; //判断是否IE浏览器
  860. return "";
  861. }
  862. //以下是调用上面的函数
  863. //var mb = MyBrowser();
  864. //if ("IE" === mb) {
  865. // alert("我是 IE");
  866. //}
  867. //if ("FF" === mb) {
  868. // alert("我是 Firefox");
  869. //}
  870. //if ("Chrome" === mb) {
  871. // alert("我是 Chrome");
  872. //}
  873. //if ("Opera" === mb) {
  874. // alert("我是 Opera");
  875. //}
  876. //if ("Safari" === mb) {
  877. // alert("我是 Safari");
  878. //}
  879. /**
  880. * 设置未来(全局)的AJAX请求默认选项
  881. * 主要设置了AJAX请求遇到Session过期的情况
  882. **/
  883. function BeforeSend() {
  884. }
  885. //获取当前时间
  886. function GetNowFormatDate(time) {
  887. time = time || false;
  888. var currentdate;
  889. var seperator1 = "-";
  890. var seperator2 = ":";
  891. var date = new Date();
  892. var month = date.getMonth() + 1;
  893. var strDate = date.getDate();
  894. if (month >= 1 && month <= 9) {
  895. month = "0" + month;
  896. }
  897. if (strDate >= 0 && strDate <= 9) {
  898. strDate = "0" + strDate;
  899. }
  900. if (time) {
  901. currentdate = date.getFullYear() +
  902. seperator1 +
  903. month +
  904. seperator1 +
  905. strDate +
  906. " " +
  907. date.getHours() +
  908. seperator2 +
  909. date.getMinutes() +
  910. seperator2 +
  911. date.getSeconds();
  912. } else {
  913. currentdate = date.getFullYear() +
  914. seperator1 +
  915. month +
  916. seperator1 +
  917. strDate;
  918. }
  919. return currentdate;
  920. }
  921. function FileUpload(that, opt) { $(that).iwbFileUpload(opt); }
  922. function FileShow(that, opt) { $(that).iwbFileShow(opt); }
  923. //打开选择文件窗口
  924. function OpenUploadWindow(that) {
  925. //$(that).find(".showFileName").html("");
  926. $(that).removeClass("file-success").removeClass("file-error");
  927. //$(that).find("input[type='file']")[0].click();
  928. }
  929. //检查文件
  930. function FileInputCheck(that, idStr, isImage, maxSize, callback,checkFileType) {
  931. if (CheckFileSize($(that).attr("id"), maxSize)) {
  932. //var filePath = $(that).val();
  933. var fileName = $(that).val().split("\\").pop();
  934. //$(that).closest('.upload').addClass("file-success").find(".showFileName").html(fileName);
  935. $(that).closest('.custom-file ').addClass("file-success").find("label").text(fileName);
  936. var file = document.getElementById($(that).attr("id")).files[0];
  937. if (checkFileType && typeof (checkFileType) === "function") {
  938. checkFileType(fileName);
  939. }
  940. if (idStr) {
  941. ReadFile(file, idStr, isImage, checkFileType);
  942. }
  943. if (callback && typeof (callback) === "function") {
  944. callback(fileName, file);
  945. }
  946. } else {
  947. // $(that).closest('.upload').addClass("file-error");
  948. $(that).closest('.custom-file ').addClass("file-error");
  949. }
  950. }
  951. function ReadFile(file, idStr, isImage) {
  952. //判断是否是图片类型
  953. //console.log(file.type);
  954. if (isImage && !/image\/\w+/.test(file.type)) {
  955. abp.message.warn("只能选择图片");
  956. return false;
  957. }
  958. var reader = new FileReader();
  959. reader.readAsDataURL(file);
  960. reader.onload = function (e) {
  961. //txshow.src = this.result;
  962. //console.log(this.result);
  963. $("#" + idStr).val(this.result.substring(this.result.indexOf(',') + 1));
  964. };
  965. }
  966. //清空文件域
  967. function ClearFile(idStr) {
  968. var file = $("#" + idStr);
  969. file.closest('.upload').removeClass("file-success").removeClass("file-error").find(".showFileName").html("");
  970. file.after(file.clone().val(""));
  971. file.remove();
  972. }
  973. //检查文件大小
  974. function CheckFileSize(idStr, maxSize) {
  975. maxSize = maxSize || 2;
  976. var maxsize = maxSize * 1024 * 1024;
  977. var errMsg = "上传的附件文件不能超过" + maxSize + "M。";
  978. var tipMsg = "您的浏览器暂不支持计算上传文件的大小,确保上传文件不要超过2M,建议使用IE、FireFox、Chrome浏览器。";
  979. var browserCfg = {};
  980. var ua = window.navigator.userAgent;
  981. if (ua.indexOf("MSIE") >= 1) {
  982. browserCfg.ie = true;
  983. } else if (ua.indexOf("Firefox") >= 1) {
  984. browserCfg.firefox = true;
  985. } else if (ua.indexOf("Chrome") >= 1) {
  986. browserCfg.chrome = true;
  987. }
  988. try {
  989. var objFile = document.getElementById(idStr);
  990. if (objFile.value === "") {
  991. //layer.alert("请先选择上传文件", { icon: 7, title: "提示信息" });
  992. return false;
  993. }
  994. var filesize;
  995. if (browserCfg.firefox || browserCfg.chrome) {
  996. filesize = objFile.files[0].size;
  997. } else if (browserCfg.ie) {
  998. var objImg = document.createElement("img");
  999. objImg.id = "tempImg";
  1000. objImg.style.display = "none";
  1001. document.body.appendChild(objImg);
  1002. objImg.dynsrc = objFile.value;
  1003. filesize = objImg.fileSize;
  1004. } else {
  1005. ClearFile(idStr);
  1006. abp.message.warn(tipMsg);
  1007. return false;
  1008. }
  1009. if (filesize === -1) {
  1010. ClearFile(idStr);
  1011. abp.message.warn(tipMsg);
  1012. return false;
  1013. } else if (filesize > maxsize) {
  1014. ClearFile(idStr);
  1015. abp.message.warn(errMsg);
  1016. return false;
  1017. } else {
  1018. return true;
  1019. }
  1020. } catch (e) {
  1021. ClearFile(idStr);
  1022. abp.message.error(e);
  1023. }
  1024. }
  1025. //打开图片或文件
  1026. function OpenFile(that, type, defaultOption) {
  1027. var url;
  1028. if (typeof (that) === "string") {
  1029. url = that;
  1030. } else {
  1031. url = $(that).data("url");
  1032. if (!url) {
  1033. url = $(that).attr("src");
  1034. }
  1035. type = $(that).data("type");
  1036. }
  1037. if (url.indexOf("/")!==0) {
  1038. url = "/" + url;
  1039. }
  1040. console.log(url);
  1041. if (type === 'img') {
  1042. if ($("#Img-Modal").length > 0) {
  1043. $("#Img-Modal").remove();
  1044. }
  1045. $("body").append(' <ul id="Img-Modal"><li><img src="' + url + '" data-original="' + url + '" alt="Picture" /></li></ul>');
  1046. var $image = $('#Img-Modal');
  1047. /*$image.find("img").error(function () {
  1048. $(this).attr("src", "/Content/images/no-pic.png");
  1049. $(this).attr("data-original", "/Content/images/no-pic.png");
  1050. });*/
  1051. var options = {
  1052. // inline: true,
  1053. url: 'data-original',
  1054. button: true,
  1055. navbar: false,
  1056. title: false,
  1057. toolbar: false,
  1058. ready: function (e) {
  1059. console.log(e.type);
  1060. },
  1061. //show: function (e) {
  1062. // console.log(e.type);
  1063. //},
  1064. //shown: function (e) {
  1065. // console.log(e.type);
  1066. //},
  1067. //hide: function (e) {
  1068. // console.log(e.type);
  1069. //},
  1070. //hidden: function (e) {
  1071. // console.log(e.type);
  1072. //},
  1073. //view: function (e) {
  1074. // console.log(e.type);
  1075. //},
  1076. //viewed: function (e) {
  1077. // console.log(e.type);
  1078. //}
  1079. };
  1080. $image.on({
  1081. //ready: function (e) {
  1082. // console.log(e.type);
  1083. //},
  1084. show: function (e) {
  1085. console.log(e.type);
  1086. },
  1087. //shown: function (e) {
  1088. // console.log(e.type);
  1089. //},
  1090. //hide: function (e) {
  1091. // console.log(e.type);
  1092. //},
  1093. //hidden: function (e) {
  1094. // console.log(e.type);
  1095. //},
  1096. //view: function (e) {
  1097. // console.log(e.type);
  1098. //},
  1099. //viewed: function (e) {
  1100. // console.log(e.type);
  1101. //}
  1102. }).viewer(options);
  1103. $image.viewer("show");
  1104. $image.css("display","none");
  1105. } else {
  1106. FileOpen(url, type, defaultOption);
  1107. //if ($("#File-Modal").length <= 0) {
  1108. // $("body").append(
  1109. // ' <section><div class="modal fade" id="File-Modal" role="dialog" tabindex="-1" aria-labelledby="ModalLabel"aria-hidden="true"><div class="modal-dialog modal-dialog-centered" role="document" style="width: calc(100% - 300px)") ;><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span aria-hidden="true">&times;</span></button><h4 class="modal-title">文件预览</h4></div><div class="modal-body" style="min-height: 500px; overflow: auto"></div><div class="modal-footer" style="text-align: center;"><button type="button" class="btn btn-success waves-effect" data-dismiss="modal" style="min-width: 100px;background: #F0985D;border: 1px solid #DDDDDD;">关闭窗口</button></div></div></div></div></section>');
  1110. // }
  1111. //if (type === "office") {
  1112. // url = 'https://view.officeapps.live.com/op/view.aspx?src=http://' + document.domain + '/' + url;
  1113. //} else {
  1114. // url = '/' + url;
  1115. //}
  1116. //console.log(url);
  1117. //$("#File-Modal").find('.modal-body')
  1118. // .html('<iframe src="' + url + '" width="100%"; style="min-height:500px;" frameborder="0"></iframe>');
  1119. //$("#File-Modal").modal("show");
  1120. }
  1121. }
  1122. function FileOpen(url, type, options) {
  1123. var defaultOption = {
  1124. gapWidth: 300,
  1125. height:500
  1126. };
  1127. $.extend(defaultOption, options);
  1128. if ($("#File-Modal").length <= 0) {
  1129. //$.metPageJs('/Content/Plugins/jquery.media/jquery.media.js', "dy-jquery-media");
  1130. $("body").append(
  1131. ' <section><div class="modal fade" id="File-Modal" role="dialog" tabindex="-1" aria-labelledby="ModalLabel"aria-hidden="true"><div class="modal-dialog modal-dialog-centered" role="document" style="width: calc(100% - ' + defaultOption.gapWidth + 'px)") ;><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span aria-hidden="true">&times;</span></button><h4 class="modal-title">文件预览</h4></div><div class="modal-body" style="min-height: '+ defaultOption.height+'px; overflow: auto"></div><div class="modal-footer" style="text-align: center;"><button type="button" class="btn btn-success waves-effect" data-dismiss="modal" style="min-width: 100px;background: #F0985D;border: 1px solid #DDDDDD;">关闭窗口</button><button id="download" type="button" class="btn btn-success waves-effect" style="min-width: 100px;background-color: #678ceb;border: 1px solid #678ceb;border: 1px solid #DDDDDD;" data-url="" onclick="DownloadFile(this)">下载文件</button></div></div></div></div></section>');
  1132. }
  1133. //url = '/' + url;
  1134. if (url.indexOf("/") !== 0) {
  1135. url = "/" + url;
  1136. }
  1137. var url2;
  1138. if (type === "office") {
  1139. // url = 'https://view.officeapps.live.com/op/view.aspx?src=http://' + document.domain + '/' + url;
  1140. url2 = 'http://ow365.cn/?i=17314&furl=http://' + location.host + url;
  1141. } else {
  1142. url2 = url;
  1143. }
  1144. console.log(url2);
  1145. $("#File-Modal").find('.modal-body')
  1146. //.media({ width: '100%', height: defaultOption.height + "px", autoplay: true, src: url });
  1147. .html('<iframe src="' + url2 + '" width="100%"; style="min-height:' + defaultOption.height +'px;" frameborder="0"></iframe>');
  1148. $("#File-Modal").find('#download').data("url", url);
  1149. $("#File-Modal").modal("show");
  1150. }
  1151. function DownloadFile(that) {
  1152. var url = $(that).data("url");
  1153. var fileName = $(that).val().split("/").pop();
  1154. $("body").append('<a id="tempLink" href="' + url + '" download="' + fileName+'"></a>');
  1155. $("#tempLink")[0].click();
  1156. $("#tempLink").remove();
  1157. }
  1158. function DownLoadFilePath(that) {
  1159. if (typeof (that) === "string") {
  1160. var fileName = that.split("/").pop();
  1161. $("body").append('<a id="tempLink" href="' + that + '" download="' + fileName + '"></a>');
  1162. $("#tempLink")[0].click();
  1163. $("#tempLink").remove();
  1164. }
  1165. }
  1166. var officeFileExt = ['doc', 'docx', 'xls', 'xlsx', 'xlsm', 'ppt', 'pptx'];
  1167. /** Common script END **/
  1168. var t = 0;
  1169. $(function () {
  1170. $('.iwb-date-time').iwbDate({ language: window.lang});
  1171. $('.iwb-date').iwbDate({ language: window.lang });
  1172. $('.modal').on('show.bs.modal', function () {
  1173. // 关键代码,如没将modal设置为 block,则$modala_dialog.height() 为零
  1174. $(this).css('display', 'block');
  1175. var topHeight = $(window).height() - $(this).find('.modal-dialog').height() - 50;
  1176. if (topHeight < 30) {
  1177. topHeight = 30;
  1178. }
  1179. $(this).find('.modal-dialog').animate({ 'marginTop': topHeight / 2 + "px" });
  1180. Draggable($(this));
  1181. });
  1182. document.addEventListener("error", function (e) {
  1183. var elem = e.target;
  1184. if (elem.tagName.toLowerCase() === 'img') {
  1185. //elem.src = "/Content/images/no-pic.png";
  1186. console.log($(elem));
  1187. $(elem).attr("src", "/Content/images/no-pic.png");
  1188. }
  1189. }, true /*指定事件处理函数在捕获阶段执行*/);
  1190. AddSearchEvents();
  1191. // 身份证号码验证
  1192. jQuery.validator.addMethod("isIdCardNo", function(value, element) {
  1193. return this.optional(element) || idCardNoUtil.checkIdCardNo(value);//调用验证的方法
  1194. }, "请正确填写身份证号码");
  1195. document.addEventListener("error", function (e) {
  1196. var elem = e.target;
  1197. if (elem.tagName.toLowerCase() === 'img') {
  1198. //elem.src = "/Content/images/no-pic.png";
  1199. console.log($(elem));
  1200. $(elem).attr("src", "/Content/images/logo.png");
  1201. }
  1202. }, true /*指定事件处理函数在捕获阶段执行*/);
  1203. });
  1204. function AddSearchEvents() {
  1205. $("#SearchForm .KeyWords:not(.multi)").on("keyup", function () {
  1206. clearTimeout(t);
  1207. t = setTimeout(BtnSearch, 1500);
  1208. });
  1209. //$("#SearchForm .KeyWords").on("blur", function () {
  1210. // clearTimeout(t);
  1211. // t = setTimeout(BtnSearch, 1500);
  1212. //});
  1213. $("#SearchForm .KeyWords:not(.multi)").off("change.searching").on("change.searching", function () {
  1214. clearTimeout(t);
  1215. BtnSearch();
  1216. //t = setTimeout(BtnSearch, 2000);
  1217. });
  1218. $("#SearchForm .KeyWords").on("focus", function () {
  1219. clearTimeout(t);
  1220. });
  1221. $("#SearchForm .KeyField").off("change.searching").on("change.searching", function () {
  1222. clearTimeout(t);
  1223. });
  1224. }
  1225. // ReSharper disable once NativeTypePrototypeExtending
  1226. String.prototype.format = function(args) {
  1227. var result = this;
  1228. if (arguments.length > 0) {
  1229. var reg;
  1230. if (arguments.length === 1 && typeof args === "object") {
  1231. for (var key in args) {
  1232. if (args.hasOwnProperty(key)) {
  1233. if (args[key] !== undefined) {
  1234. reg = new RegExp("({" + key + "})", "g");
  1235. result = result.replace(reg, args[key]);
  1236. }
  1237. }
  1238. }
  1239. }
  1240. else {
  1241. for (var i = 0; i < arguments.length; i++) {
  1242. if (arguments[i] !== undefined) {
  1243. reg = new RegExp("({[" + i + "]})", "g");
  1244. result = result.replace(reg, arguments[i]);
  1245. }
  1246. }
  1247. }
  1248. }
  1249. return result;
  1250. };
  1251. String.format = function(str) {
  1252. var args = arguments, re = new RegExp("%([1-" + args.length + "])", "g");
  1253. return String(str).replace(re,function($1, $2) {
  1254. return args[$2];
  1255. }
  1256. );
  1257. };
  1258. //调用方法很简单:
  1259. //element.innerHTML = String.format('<a href="%1" onclick="alert(\’%2\’);">%3</a>', url, msg, text);
  1260. // 对Date的扩展,将 Date 转化为指定格式的String
  1261. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  1262. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  1263. // 例子:
  1264. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  1265. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  1266. // ReSharper disable once NativeTypePrototypeExtending
  1267. Date.prototype.format = function(fmt) {
  1268. var o = {
  1269. "M+": this.getMonth() + 1, //月份
  1270. "d+": this.getDate(), //日
  1271. "h+": this.getHours(), //小时
  1272. "m+": this.getMinutes(), //分
  1273. "s+": this.getSeconds(), //秒
  1274. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  1275. "S": this.getMilliseconds() //毫秒
  1276. };
  1277. if (/(y+)/.test(fmt))
  1278. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  1279. for (var k in o) {
  1280. if (o.hasOwnProperty(k))
  1281. if (new RegExp("(" + k + ")").test(fmt))
  1282. fmt = fmt.replace(RegExp.$1,RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  1283. }
  1284. return fmt;
  1285. };
  1286. //调用方法很简单:
  1287. //element.innerHTML = String.format('<a href="%1" onclick="alert(\’%2\’);">%3</a>', url, msg, text);
  1288. // 对Date的扩展,将 Date 转化为指定格式的String
  1289. // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
  1290. // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  1291. // 例子:
  1292. // (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  1293. // (new Date()).Format("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  1294. // ReSharper disable once NativeTypePrototypeExtending
  1295. Date.prototype.Format = function(fmt) {
  1296. var o = {
  1297. "M+": this.getMonth() + 1, //月份
  1298. "d+": this.getDate(), //日
  1299. "h+": this.getHours(), //小时
  1300. "m+": this.getMinutes(), //分
  1301. "s+": this.getSeconds(), //秒
  1302. "q+": Math.floor((this.getMonth() + 3) / 3), //季度
  1303. "S": this.getMilliseconds() //毫秒
  1304. };
  1305. if (/(y+)/.test(fmt))
  1306. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  1307. for (var k in o) {
  1308. if (o.hasOwnProperty(k))
  1309. if (new RegExp("(" + k + ")").test(fmt))
  1310. fmt = fmt.replace(RegExp.$1,RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
  1311. }
  1312. return fmt;
  1313. };
  1314. function DateFormatter(v,r,i,f) {
  1315. if (!v) {
  1316. return "";
  1317. }
  1318. var date = new Date(v);
  1319. var str = date.format('yyyy-MM-dd');
  1320. r[f] = str;
  1321. return str;
  1322. }
  1323. function DateTimeFormatter(v,r,i,f) {
  1324. if (!v) {
  1325. return "";
  1326. }
  1327. var date = new Date(v);
  1328. var str = date.format('yyyy-MM-dd hh:mm:ss');
  1329. r[f] = str;
  1330. return str;
  1331. }
  1332. //计算时间差的函数
  1333. function DateDiff(sDate1, sDate2,type) { //sDate1和sDate2是2019-3-12格式 type为1:天数 2:小时
  1334. var iValue;
  1335. type = type || 1;
  1336. sDate2 = sDate2 || new Date();
  1337. var spanOff = parseInt(Math.abs(new Date(sDate1).getTime() - new Date(sDate2).getTime()));
  1338. switch (type) {
  1339. case 1:
  1340. default:
  1341. iValue = spanOff/1000/60/60/24;
  1342. break;
  1343. case 2:
  1344. iValue = spanOff/1000/60/60;
  1345. break;
  1346. case 3:
  1347. iValue = spanOff/1000/60;
  1348. break;
  1349. }
  1350. return iValue.toFixed(2);
  1351. }
  1352. //前后时间差
  1353. function DateDiffBeforeToAfter(sDate1, sDate2, type) { //sDate1和sDate2是2019-3-12格式 type为1:天数 2:小时
  1354. var iValue = DateDiff(sDate1, sDate2, type);
  1355. var d1 = new Date(sDate1).getTime();
  1356. var d2 = new Date(sDate2).getTime();
  1357. iValue = d1 > d2 ? iValue : (0 - iValue);
  1358. return iValue.toFixed(2);
  1359. }
  1360. function guid(options) {
  1361. var defaultOption =
  1362. {
  1363. removeBar: true,
  1364. isUpper:false
  1365. };
  1366. $.extend(defaultOption, options);
  1367. var result = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
  1368. var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
  1369. return v.toString(16);
  1370. });
  1371. if (defaultOption.removeBar) {
  1372. result = result.replace(/-/g, '');
  1373. }
  1374. if (defaultOption.isUpper) {
  1375. result = result.toUpperCase();
  1376. }
  1377. console.log(result);
  1378. return result;
  1379. }
  1380. var cnmsg = {
  1381. required: "必填",
  1382. remote: "请修正该字段",
  1383. email: "请输入正确格式的电子邮件",
  1384. url: "请输入合法的网址",
  1385. date: "请输入合法的日期",
  1386. dateISO: "请输入日期(yyyy-MM-dd)",
  1387. number: "请输入合法的数字",
  1388. digits: "请输入合法的整数",
  1389. creditcard: "请输入合法的信用卡号",
  1390. equalTo: "请再次输入相同的值",
  1391. accept: "请输入拥有合法后缀名的字符串",
  1392. //maxlength: jQuery.format("请输入一个长度最多是 {0} 的字符串"),
  1393. //minlength: jquery.format("请输入一个长度最少是 {0} 的字符串"),
  1394. //rangelength: jQuery.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
  1395. //range: jQuery.format("请输入一个介于 {0} 和 {1} 之间的值"),
  1396. //max: jQuery.format("请输入一个最大为 {0} 的值"),
  1397. //min: jQuery.format("请输入一个最小为 {0} 的值")
  1398. };
  1399. jQuery.extend(jQuery.validator.messages, cnmsg);
  1400. var idCardNoUtil = {
  1401. provinceAndCities: {
  1402. 11: "北京",
  1403. 12: "天津",
  1404. 13: "河北",
  1405. 14: "山西",
  1406. 15: "内蒙古",
  1407. 21: "辽宁",
  1408. 22: "吉林",
  1409. 23: "黑龙江",
  1410. 31: "上海",
  1411. 32: "江苏",
  1412. 33: "浙江",
  1413. 34: "安徽",
  1414. 35: "福建",
  1415. 36: "江西",
  1416. 37: "山东",
  1417. 41: "河南",
  1418. 42: "湖北",
  1419. 43: "湖南",
  1420. 44: "广东",
  1421. 45: "广西",
  1422. 46: "海南",
  1423. 50: "重庆",
  1424. 51: "四川",
  1425. 52: "贵州",
  1426. 53: "云南",
  1427. 54: "西藏",
  1428. 61: "陕西",
  1429. 62: "甘肃",
  1430. 63: "青海",
  1431. 64: "宁夏",
  1432. 65: "新疆",
  1433. 71: "台湾",
  1434. 81: "香港",
  1435. 82: "澳门",
  1436. 91: "国外"
  1437. },
  1438. powers: ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"],
  1439. parityBit: ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"],
  1440. genders: { male: "男", female: "女" },
  1441. checkAddressCode: function(addressCode) {
  1442. var check = /^[1-9]\d{5}$/.test(addressCode);
  1443. if (!check) return false;
  1444. if (idCardNoUtil.provinceAndCities[parseInt(addressCode.substring(0, 2))]) {
  1445. return true;
  1446. } else {
  1447. return false;
  1448. }
  1449. },
  1450. checkBirthDayCode: function(birDayCode) {
  1451. var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
  1452. if (!check) return false;
  1453. var yyyy = parseInt(birDayCode.substring(0, 4), 10);
  1454. var mm = parseInt(birDayCode.substring(4, 6), 10);
  1455. var dd = parseInt(birDayCode.substring(6), 10);
  1456. var xdata = new Date(yyyy, mm - 1, dd);
  1457. if (xdata > new Date()) {
  1458. return false; //生日不能大于当前日期
  1459. } else if ((xdata.getFullYear() === yyyy) && (xdata.getMonth() === mm - 1) && (xdata.getDate() === dd)) {
  1460. return true;
  1461. } else {
  1462. return false;
  1463. }
  1464. },
  1465. getParityBit: function(idCardNo) {
  1466. var id17 = idCardNo.substring(0, 17);
  1467. var power = 0;
  1468. for (var i = 0; i < 17; i++) {
  1469. power += parseInt(id17.charAt(i), 10) * parseInt(idCardNoUtil.powers[i]);
  1470. }
  1471. var mod = power % 11;
  1472. return idCardNoUtil.parityBit[mod];
  1473. },
  1474. checkParityBit: function(idCardNo) {
  1475. var parityBit = idCardNo.charAt(17).toUpperCase();
  1476. if (idCardNoUtil.getParityBit(idCardNo) === parityBit) {
  1477. return true;
  1478. } else {
  1479. return false;
  1480. }
  1481. },
  1482. checkIdCardNo: function(idCardNo) {
  1483. //15位和18位身份证号码的基本校验
  1484. var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
  1485. if (!check) return false;
  1486. //判断长度为15位或18位
  1487. if (idCardNo.length === 15) {
  1488. return idCardNoUtil.check15IdCardNo(idCardNo);
  1489. } else if (idCardNo.length === 18) {
  1490. return idCardNoUtil.check18IdCardNo(idCardNo);
  1491. } else {
  1492. return false;
  1493. }
  1494. },
  1495. //校验15位的身份证号码
  1496. check15IdCardNo: function(idCardNo) {
  1497. //15位身份证号码的基本校验
  1498. 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);
  1499. if (!check) return false;
  1500. //校验地址码
  1501. var addressCode = idCardNo.substring(0, 6);
  1502. check = idCardNoUtil.checkAddressCode(addressCode);
  1503. if (!check) return false;
  1504. var birDayCode = '19' + idCardNo.substring(6, 12);
  1505. //校验日期码
  1506. return idCardNoUtil.checkBirthDayCode(birDayCode);
  1507. },
  1508. //校验18位的身份证号码
  1509. check18IdCardNo: function(idCardNo) {
  1510. //18位身份证号码的基本格式校验
  1511. 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);
  1512. if (!check) return false;
  1513. //校验地址码
  1514. var addressCode = idCardNo.substring(0, 6);
  1515. check = idCardNoUtil.checkAddressCode(addressCode);
  1516. if (!check) return false;
  1517. //校验日期码
  1518. var birDayCode = idCardNo.substring(6, 14);
  1519. check = idCardNoUtil.checkBirthDayCode(birDayCode);
  1520. if (!check) return false;
  1521. //验证校检码
  1522. return idCardNoUtil.checkParityBit(idCardNo);
  1523. }
  1524. ,
  1525. formateDateCN: function(day) {
  1526. var yyyy = day.substring(0, 4);
  1527. var mm = day.substring(4, 6);
  1528. var dd = day.substring(6);
  1529. return yyyy + '-' + mm + '-' + dd;
  1530. },
  1531. //获取信息
  1532. getIdCardInfo: function(idCardNo) {
  1533. var idCardInfo = {
  1534. gender: "", //性别
  1535. birthday: "" // 出生日期(yyyy-mm-dd)
  1536. };
  1537. var aday;
  1538. if (idCardNo.length === 15) {
  1539. aday = '19' + idCardNo.substring(6, 12);
  1540. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  1541. if (parseInt(idCardNo.charAt(14)) % 2 === 0) {
  1542. idCardInfo.gender = idCardNoUtil.genders.female;
  1543. } else {
  1544. idCardInfo.gender = idCardNoUtil.genders.male;
  1545. }
  1546. } else if (idCardNo.length === 18) {
  1547. aday = idCardNo.substring(6, 14);
  1548. idCardInfo.birthday = idCardNoUtil.formateDateCN(aday);
  1549. if (parseInt(idCardNo.charAt(16)) % 2 === 0) {
  1550. idCardInfo.gender = idCardNoUtil.genders.female;
  1551. } else {
  1552. idCardInfo.gender = idCardNoUtil.genders.male;
  1553. }
  1554. }
  1555. return idCardInfo;
  1556. },
  1557. getId15: function(idCardNo) {
  1558. if (idCardNo.length === 15) {
  1559. return idCardNo;
  1560. } else if (idCardNo.length === 18) {
  1561. return idCardNo.substring(0, 6) + idCardNo.substring(8, 17);
  1562. } else {
  1563. return null;
  1564. }
  1565. },
  1566. getId18: function(idCardNo) {
  1567. if (idCardNo.length === 15) {
  1568. var id17 = idCardNo.substring(0, 6) + '19' + idCardNo.substring(6);
  1569. var parityBit = idCardNoUtil.getParityBit(id17);
  1570. return id17 + parityBit;
  1571. } else if (idCardNo.length === 18) {
  1572. return idCardNo;
  1573. } else {
  1574. return null;
  1575. }
  1576. }
  1577. }; 
  1578. //除法函数,用来得到精确的除法结果
  1579. //说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
  1580. //调用:accDiv(arg1,arg2)
  1581. //返回值:arg1除以arg2的精确结果
  1582. function accDiv(arg1, arg2) {
  1583. var t1 = 0, t2 = 0, r1, r2;
  1584. try { t1 = arg1.toString().split(".")[1].length } catch (e) { }
  1585. try { t2 = arg2.toString().split(".")[1].length } catch (e) { }
  1586. with (Math) {
  1587. r1 = Number(arg1.toString().replace(".", ""))
  1588. r2 = Number(arg2.toString().replace(".", ""))
  1589. return (r1 / r2) * pow(10, t2 - t1);
  1590. }
  1591. }
  1592. //给Number类型增加一个div方法,调用起来更加 方便。
  1593. Number.prototype.Newdiv = function (arg) {
  1594. return accDiv(this, arg);
  1595. }
  1596. //乘法函数,用来得到精确的乘法结果
  1597. //说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  1598. //调用:accMul(arg1,arg2)
  1599. //返回值:arg1乘以 arg2的精确结果
  1600. function accMul(arg1, arg2) {
  1601. var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  1602. try { m += s1.split(".")[1].length } catch (e) { }
  1603. try { m += s2.split(".")[1].length } catch (e) { }
  1604. return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
  1605. }
  1606. // 给Number类型增加一个mul方法,调用起来更加方便。
  1607. Number.prototype.NewMul = function (arg) {
  1608. return accMul(arg, this);
  1609. }
  1610. //加法函数,用来得到精确的加法结果
  1611. //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
  1612. //调用:accAdd(arg1,arg2)
  1613. // 返回值:arg1加上arg2的精确结果
  1614. function accAdd(arg1, arg2) {
  1615. var r1, r2, m;
  1616. try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
  1617. try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
  1618. m = Math.pow(10, Math.max(r1, r2))
  1619. return (arg1 * m + arg2 * m) / m
  1620. }
  1621. //给Number类型增加一个add方法,调用起来更加方便。
  1622. Number.prototype.NewAdd = function (arg) {
  1623. return accAdd(arg, this);
  1624. }
  1625. /**
  1626. * 金额处理:保留几位小数,不四舍五入(关于金额数值的处理用这个方法,以防金额计算出错)
  1627. * @param num 金额
  1628. * @param decimal 保留位数
  1629. * @returns {string}
  1630. */
  1631. function moneyFormatDecimal (num, decimal){
  1632. num = num.toString()
  1633. let index = num.indexOf('.')
  1634. if (index !== -1) {
  1635. num = num.substring(0, decimal + index + 1)
  1636. } else {
  1637. num = num.substring(0)
  1638. }
  1639. return parseFloat(num).toFixed(decimal)
  1640. }
  1641. /**
  1642. * 四舍五入保留length位小数(不够位数,则用0替补)
  1643. * @param num
  1644. * @returns {string|boolean}
  1645. */
  1646. function keepDecimalFull(num, length=2) {
  1647. let result = parseFloat(num)
  1648. if (isNaN(result)) {
  1649. alert('传递参数错误,请检查')
  1650. return false
  1651. }
  1652. let tc = '1';
  1653. for (let i = 1; i <= length; i++) {
  1654. tc += '0';
  1655. }
  1656. let dt = Number(tc);
  1657. result = Math.round(num * dt) / dt
  1658. let s_x = result.toString()
  1659. let pos_decimal = s_x.indexOf('.')
  1660. if (pos_decimal < 0) {
  1661. pos_decimal = s_x.length
  1662. s_x += '.'
  1663. }
  1664. while (s_x.length <= pos_decimal + length) {
  1665. s_x += '0'
  1666. }
  1667. return s_x
  1668. }
  1669. /***************2023*************************/
  1670. function LoadTableIwbTable(option) {
  1671. if (!option) {
  1672. option = { table: "table" };
  1673. }
  1674. option.table = option.table ? option.table : "table";
  1675. var $table = typeof option.table === 'string' ? $('#' + option.table) : $(option.table);
  1676. if ($table.length < 1) {
  1677. console.log('没有发现表格:', option.table);
  1678. }
  1679. $table.iwbTable(option);
  1680. return $table;
  1681. }
  1682. /***************2023 end*************************/