customform.js 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144
  1. /**
  2. *
  3. * 扩展按钮事件处理
  4. *
  5. * @author xiacj
  6. * @version 1.0
  7. * @date 2020-02-16
  8. *
  9. */
  10. layui.use(['element', 'form', 'table', 'checkForm', 'laydate', 'mapChooser', 'miniTab'], function () {
  11. var form = layui.form,
  12. layer = layui.layer,
  13. $ = layui.$;
  14. table = layui.table;
  15. checkForm = layui.checkForm;
  16. laydate = layui.laydate;
  17. mapChooser = layui.mapChooser;
  18. miniTab = layui.miniTab;
  19. //自定义插件
  20. var customPlugins = {};
  21. customPlugins["mapChooser"] = mapChooser;
  22. var $window = $(window);
  23. var file_types = {
  24. "application/pdf": "pdf",
  25. "application/x-zip-compressed": "zip",
  26. "image/gif": "gif",
  27. "image/png": "png",
  28. "image/jpg": "jpg",
  29. "image/bmp": "bmp",
  30. "image/jpeg": "jpg",
  31. "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "doc",
  32. "application/msword": "doc",
  33. "application/vnd.ms-excel": "excel",
  34. "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": "excel",
  35. "application/vnd.openxmlformats-officedocument.presentationml.presentation": "ppt"
  36. };
  37. /**
  38. * 获取表单json格式参数
  39. *
  40. * @param {Object} formId
  41. */
  42. function getFormJson(form) {
  43. return util.getFormJson(form);
  44. };
  45. /**
  46. * 初始化查按钮的点击事件
  47. *
  48. */
  49. function initBtnLsnr() {
  50. $(".ag-btn-query").on("click", queryList);
  51. $(".ag-btn-add").on("click", addInit);
  52. $(".ag-btn-update").on("click", updateInit);
  53. $(".ag-btn-cancel").on("click", cancel);
  54. $(".ag-btn-save").on("click", save);
  55. //用bind方法绑定可能会导致重负提交
  56. $(".ag-btn-del").on("click", del);
  57. $(".ag-btn-reset").on("click", resetForm);
  58. $(".ag-data-tree").on("click", initAgZtree);
  59. };
  60. function resetForm() {
  61. var index = $(this).attr("ag-data-index");
  62. var form = $(".ag-form[ag-data-index=" + index + "]");
  63. $.each(form.find("[name]"), function (i, item) {
  64. $(item).val("");
  65. });
  66. layui.form.render();
  67. }
  68. /**
  69. *
  70. * 处理分页按钮事件,数据加载之后调用
  71. *
  72. */
  73. function addPageLisnr(page, index) {
  74. var pageHtml =
  75. '<a href="#" rel="pre" class="ag-btn-page-pre">&lt; 上一页</a> <a href="#" rel="next" class="ag-btn-page-next">下一页&gt;</a><span id="totalPageSpan"></span>|<span id="totalRecordSpan"></span>|<span id="pageNoSpan"></span>';
  76. $(".ag-area-page").html(pageHtml);
  77. //上一页
  78. $(".ag-btn-page-pre").unbind();
  79. $(".ag-btn-page-pre").bind("click", function () {
  80. var pageNo = parseInt(page.pageNo);
  81. if (pageNo >= 2) {
  82. pageNo = pageNo - 1;
  83. var pageSize = page.pageSize;
  84. var pageJson = {
  85. "pageNo": pageNo,
  86. "pageSize": pageSize
  87. };
  88. var pageJsonStr = JSON.stringify(pageJson);
  89. $("input[name=page]").val(pageJsonStr);
  90. $(".ag-btn-query[ag-data-index=" + index + "]").click();
  91. }
  92. });
  93. //下一页
  94. $(".ag-btn-page-next").unbind();
  95. $(".ag-btn-page-next").bind("click", function () {
  96. var pageNo = parseInt(page.pageNo);
  97. var totalPage = parseInt(page.totalPage);
  98. if ((pageNo + 1) <= totalPage) {
  99. pageNo = pageNo + 1;
  100. var pageSize = page.pageSize;
  101. var pageJson = {
  102. "pageNo": pageNo,
  103. "pageSize": pageSize
  104. };
  105. var pageJsonStr = JSON.stringify(pageJson);
  106. $("input[name=page]").val(pageJsonStr);
  107. $(".ag-btn-query[ag-data-index=" + index + "]").click();
  108. }
  109. });
  110. $("#totalPageSpan").html("总页数:" + page.totalPage);
  111. $("#totalRecordSpan").html("总记录数:" + page.totalRecord);
  112. $("#pageNoSpan").html("当前页:" + page.pageNo);
  113. };
  114. /**
  115. *
  116. * 查询方法
  117. */
  118. function queryList() {
  119. var index = $(this).attr("ag-data-index");
  120. var form = $(".ag-form[ag-data-index=" + index + "]");
  121. var url = $(this).attr("ag-data-url");
  122. var checkRet = checkForm.validateForm(form);
  123. if (!checkRet) {
  124. return false;
  125. }
  126. initPage(index); // 初始化分页dom
  127. // 获取查询条件参数
  128. var param = getFormJson($(".ag-form[ag-data-index=" + index + "]"));
  129. var queryParams = $(this).data("query-params");
  130. if (!util.isNull(queryParams)) {
  131. var queryJson = $.parseJSON(queryParams);
  132. delete queryJson.page;
  133. var checkParam = $.extend({}, param);
  134. delete checkParam.page;
  135. if (JSON.stringify(queryJson) != JSON.stringify(checkParam)) {
  136. $(" input[name=page]", form).val('{"pageNo":"1","pageSize":"20"}');
  137. param.page = '{"pageNo":"1","pageSize":"20"}';
  138. }
  139. }
  140. $(this).data("query-params", JSON.stringify(param));
  141. // 获取地址前缀
  142. var agCtx = util.getAgCtx(this);
  143. url = ctx + "/" + agCtx + url;
  144. util.ajaxJson("查询中,请稍后...", url, param, function (page) {
  145. if (page.retCode == "1") {
  146. util.error(util.isNull(page.retMsg) ? '未知异常' : page.retMsg);
  147. return;
  148. }
  149. var colsStr = $(".ag-table-header[ag-data-index=" + index + "]").html();
  150. // 格式化列表需要的参数
  151. var cols = decorateData(colsStr);
  152. //执行一个 table 实例
  153. table.render({
  154. elem: $(".ag-table[ag-data-index=" + index + "]"),
  155. height: $(".ag-table[ag-data-index=" + index + "]").height() - 35,
  156. data: page.data, //数据接口
  157. title: '用户表',
  158. page: false, //开启分页
  159. totalRow: false, //开启合计行
  160. limit: $.parseJSON(param.page).pageSize,
  161. cols: cols
  162. });
  163. // 分页填数据 page 返回数据 index 查询条件和表格唯一标识
  164. buildPage(page, index);
  165. }, function (req) {
  166. var page = $("input[name=page]").val();
  167. req.setRequestHeader("page", page);
  168. });
  169. };
  170. function initPage(idx) {
  171. // 如果form下没有input则创建一个input
  172. if ($(".ag-form[ag-data-index=" + idx + "] > input[name=page]").length == 0) {
  173. var input = $("<input type='hidden' name='page' value=''>");
  174. $(".ag-form[ag-data-index=" + idx + "]").append(input);
  175. }
  176. // 如果input值为空则赋值页码和当前页
  177. if (util.isNull($(".ag-form[ag-data-index=" + idx + "] > input[name=page]").val())) {
  178. $(".ag-form[ag-data-index=" + idx + "] > input[name=page]").val('{"pageNo":"1","pageSize":"20"}');
  179. }
  180. // 查找当前页面table下分页dom
  181. var pager = $(".ag-table[ag-data-index=" + idx + "] ").siblings(".ag-area-page");
  182. if (pager.length == 0) {
  183. return;
  184. }
  185. if (pager.children(".layui-table-page").length > 0) {
  186. return;
  187. }
  188. // 删除当前元素 ?为什么要删除
  189. pager.empty();
  190. // 获取上面创建元素存储的页码和当前页
  191. var pageSize = $.parseJSON($(".ag-form[ag-data-index=" + idx + "] > input[name=page]").val()).pageSize;
  192. // 分页dom盒子
  193. var pageDiv = $('<div class="layui-table-page"></div>');
  194. // 分页dom元素
  195. var box = $("<div class='layui-box layui-laypage layui-laypage-default'></div>");
  196. // 向左翻页dom
  197. var firstA = $(
  198. '<a href="javascript:;" class="layui-laypage-prev layui-disabled" data-page="1"><i class="layui-icon"></i></a>');
  199. box.append(firstA);
  200. // 向右分页dom
  201. var lastA = $(
  202. '<a href="javascript:;" class="layui-laypage-next layui-disabled" data-page="1"><i class="layui-icon"></i></a>');
  203. box.append(lastA);
  204. // 描述当前分页情况+自定义跳转页码
  205. var search = $(
  206. '<span class="layui-laypage-skip">到第<input type="text" min="1" max = "1" value="1" class="layui-input">页<button type="button" class="layui-laypage-btn">确定</button></span>'
  207. );
  208. box.append(search);
  209. var count = $('<span class="layui-laypage-count">共 0 条</span>');
  210. box.append(count);
  211. // 每页显示多少条选项
  212. var limit = $(
  213. '<span class="layui-laypage-limits"><select class="page-select"><option value="10" >10 条/页</option><option value="20">20 条/页</option><option value="30">30 条/页</option><option value="40">40 条/页</option><option value="50">50 条/页</option><option value="60">60 条/页</option><option value="70">70 条/页</option><option value="80">80 条/页</option><option value="90">90 条/页</option></select></span>'
  214. );
  215. box.append(limit);
  216. pageDiv.append(box);
  217. pager.append(pageDiv);
  218. //赋默认显示多少条
  219. pager.find(".page-select").val(pageSize);
  220. /**
  221. * 上一页、下一页、页码点击事件绑定
  222. */
  223. pager.delegate(".layui-laypage-prev,.layui-laypage-next,.ipage:not(.layui-laypage-curr)", "click", function (e) {
  224. if ($(this).hasClass("layui-disabled")) {
  225. return;
  226. }
  227. var dataPage = $(this).attr("data-page");
  228. // 存储每次切换分页值
  229. var pageInput = $(".ag-form[ag-data-index=" + idx + "] > input[name=page]");
  230. var json = $.parseJSON(pageInput.val());
  231. json.pageNo = dataPage;
  232. pageInput.val(JSON.stringify(json));
  233. // 重新执行click事件 更新数据 分页参数从上面form创建input中区
  234. $(".ag-btn-query").trigger("click");
  235. /**
  236. * 输入页码点击确定事件绑定
  237. */
  238. }).delegate(".layui-laypage-skip .layui-laypage-btn", "click", function () {
  239. var input = $(this).parent().find("input");
  240. var min = input.attr("min");
  241. var max = input.attr("max");
  242. if (isNaN(input.val())) {
  243. util.showDialog("请输入数字!", 0);
  244. return;
  245. }
  246. if (parseInt(input.val()) < min) {
  247. util.showDialog("最小页码:1,请重新输入!", 0);
  248. return;
  249. }
  250. if (parseInt(input.val()) > max) {
  251. util.showDialog("最大页码:" + max + ",请重新输入!", 0);
  252. return;
  253. }
  254. var pageInput = $(".ag-form[ag-data-index=" + idx + "] > input[name=page]");
  255. var json = $.parseJSON(pageInput.val());
  256. json.pageNo = input.val();
  257. pageInput.val(JSON.stringify(json));
  258. $(".ag-btn-query").trigger("click");
  259. }).delegate(".layui-laypage-limits select", "change", function () {
  260. var pageInput = $(".ag-form[ag-data-index=" + idx + "] > input[name=page]");
  261. var json = $.parseJSON(pageInput.val());
  262. json.pageSize = $(this).val();
  263. pageInput.val(JSON.stringify(json));
  264. $(".ag-btn-query").trigger("click");
  265. });
  266. }
  267. function buildPage(data, idx) {
  268. // 获取分页区域
  269. var pager = $(".ag-table[ag-data-index=" + idx + "] ").siblings(".ag-area-page");
  270. if (pager.length == 0) {
  271. return;
  272. }
  273. if (data == undefined) {
  274. data = {};
  275. data.pageNo = 1;
  276. data.totalPage = 1;
  277. data.totalRecord = 0;
  278. }
  279. pager.find(".ipage").remove();
  280. pager.find(".layui-laypage-count").html("共 " + data.totalRecord + " 条");
  281. pager.find(".layui-laypage-skip input").attr("max", data.totalPage);
  282. var prev = pager.find(".layui-laypage-prev");
  283. var next = pager.find(".layui-laypage-next");
  284. prev.removeClass("layui-disabled");
  285. next.removeClass("layui-disabled");
  286. prev.attr("data-page", parseInt(data.pageNo) <= 1 ? "1" : parseInt(data.pageNo) - 1);
  287. next.attr("data-page", parseInt(data.pageNo) >= parseInt(data.totalPage) ? data.totalPage : parseInt(data.pageNo) +
  288. 1);
  289. var endNum = 0;
  290. var startNum = 0;
  291. // 判断上一页按钮是否禁用
  292. if (parseInt(data.pageNo) <= 1) {
  293. endNum = parseInt(data.totalPage) >= 3 ? parseInt(data.pageNo) + 2 : parseInt(data.totalPage);
  294. startNum = 1;
  295. prev.addClass("layui-disabled");
  296. }
  297. // 判断下一页按钮是否禁用
  298. if (parseInt(data.pageNo) >= parseInt(data.totalPage)) {
  299. endNum = parseInt(data.pageNo);
  300. startNum = parseInt(data.totalPage) < 3 ? 1 : parseInt(data.pageNo) - 2;
  301. next.addClass("layui-disabled");
  302. }
  303. if (parseInt(data.pageNo) > 1 && data.pageNo < data.totalPage) {
  304. startNum = parseInt(data.pageNo) - 1;
  305. endNum = parseInt(data.pageNo) + 1;
  306. }
  307. for (var i = startNum; i <= endNum; i++) {
  308. if (i == parseInt(data.pageNo)) {
  309. var currSpan = $('<span class="layui-laypage-curr ipage"><em class="layui-laypage-em"></em><em>' + data.pageNo +
  310. '</em></span>');
  311. next.before(currSpan);
  312. } else {
  313. var a = $('<a href="javascript:;" class="ipage" data-page="' + i + '">' + i + '</a>');
  314. next.before(a);
  315. }
  316. }
  317. }
  318. var btnOpt = {
  319. "ag-data-index": "",
  320. "ag-win-check": "",
  321. "ag-data-url": "",
  322. "ag-data-url-key": "",
  323. "ag-win-id": "0",
  324. "ag-data-pk": "id",
  325. "ag-win-width": "800",
  326. "ag-win-height": "600",
  327. "ag-win-title": "",
  328. "ag-win-title-key": "",
  329. "ag-win-type": "1",
  330. "data": "",
  331. "ag-data-ctx": "sysmgr",
  332. "ag-data-refresh": ""
  333. }
  334. function buildBtnOpt(obj) {
  335. var opt = $.extend({}, btnOpt);
  336. for (var key in btnOpt) {
  337. var val = $(obj).attr(key);
  338. if (!util.isNull(val)) {
  339. opt[key] = val;
  340. }
  341. }
  342. var tableId = $("table[ag-data-index=" + opt["ag-data-index"] + "]").attr("id");
  343. var checkStatus = table.checkStatus(tableId);
  344. opt.data = checkStatus.data; //获取选中行数据
  345. var appendUrl = "";
  346. if (!util.isNull(opt.data) && $.isArray(opt.data) && opt.data.length > 0) {
  347. $.each(opt["ag-data-pk"].split(","), function (i, t) {
  348. appendUrl = appendUrl + t + "=" + opt.data[0][t] + "&";
  349. })
  350. var url = util.isNull(opt["ag-data-url-key"]) ? opt["ag-data-url"] : opt.data[0][opt["ag-data-url-key"]];
  351. var title = util.isNull(opt['ag-win-title-key']) ? opt['ag-win-title'] : opt.data[0][opt["ag-win-title-key"]];
  352. opt['ag-win-title'] = title;
  353. if (!util.isNull(url)) {
  354. if (url.indexOf("?") == -1) {
  355. url = url + "?" + appendUrl;
  356. } else {
  357. url = url + "&" + appendUrl;
  358. }
  359. opt["ag-data-url"] = url;
  360. }
  361. }
  362. return opt;
  363. }
  364. /**
  365. *
  366. * 修改初始化方法
  367. *
  368. ***/
  369. function updateInit() {
  370. var opt = buildBtnOpt(this);
  371. if (opt.data.length == 0) {
  372. util.warning('请选择一条数据库记录!');
  373. return;
  374. }
  375. if (!util.isNull(opt["ag-win-check"]) && !util.call(opt["ag-win-check"], opt)) {
  376. return;
  377. }
  378. util.call(getHrefLsnr(opt["ag-win-type"]), opt);
  379. };
  380. function cancel() {
  381. var url = $('.ag-btn-cancel').data('url')
  382. var title = $('.ag-btn-cancel').data('title')
  383. var tabId = $('.layui-this', window.parent.document).attr('lay-id')
  384. var isparent = $('.ag-btn-cancel').data('isparent')
  385. console.log(isparent)
  386. if (url) {
  387. miniTab.delete(tabId, isparent);
  388. util.addTab(url, title)
  389. }
  390. util.closeWin();
  391. };
  392. /**
  393. *添加初始化方法
  394. *
  395. ***/
  396. function addInit() {
  397. var opt = buildBtnOpt(this);
  398. if (!util.isNull(opt["ag-win-check"]) && !util.call(opt["ag-win-check"], opt)) {
  399. return;
  400. }
  401. util.call(getHrefLsnr(opt["ag-win-type"]), opt);
  402. };
  403. /***
  404. *保存方法-增加或者修改的保存方法
  405. *
  406. **/
  407. function save() {
  408. var index = $(this).attr("ag-data-index");
  409. var form = $(".ag-form[ag-data-index=" + index + "]");
  410. var funcType = $(this).attr("ag-func-type"); // 判断弹窗种类 parent---ifream prop---dom结构
  411. var checkRet = checkForm.validateForm(form);
  412. if (!checkRet) {
  413. return false;
  414. }
  415. var agCtx = util.getAgCtx(this);
  416. var url = ctx + "/" + agCtx + $(this).attr("ag-data-url");
  417. var param = getFormJson(form);
  418. var that = this;
  419. var appendJson = $(this).attr("ag-save-append");
  420. if (!util.isNull(appendJson)) {
  421. $.extend(true, param, $.parseJSON(appendJson));
  422. }
  423. util.ajaxJson("保存中,请稍后....", url, param, function (data) {
  424. var result = data.result;
  425. var desc = data.desc;
  426. if (result == 0) {
  427. util.success(desc);
  428. // var queryBtn = parent.layui.$(".ag-btn-query");
  429. // if (queryBtn.length > 0) {
  430. // $(queryBtn).click();
  431. // //util.closeWin();
  432. // }
  433. $(queryBtn).click();
  434. var func = $(that).attr("ag-back-func");
  435. if (funcType == 'parent') { //
  436. var index = $('.mc-hover-active', parent.document).index()
  437. var date = $('.mc-hover-active', parent.document).data('date')
  438. parent[func]('', index)
  439. parent.getDataType(date) // 获取隐藏内容数据
  440. parent.getMoreData(date) // 获取更多数据
  441. $('.mc-timeline-box').fadeIn(1000)
  442. var displayStatus = $('.mc-timeline-box', parent.document).css('display')
  443. if (displayStatus == 'block') {
  444. $('.mc-close-style', '.mc-hover-active', parent.document).show()
  445. }
  446. $('.mc-hover-active', parent.document).addClass('mc-hover-active').siblings().removeClass('mc-hover-active');
  447. return
  448. }
  449. if (funcType == 'prop') {
  450. $('.mc-select-style', parent.document).val(index)
  451. parent.initMoreList(moreList[index]) // 渲染弹窗list
  452. return
  453. }
  454. if (!util.isNull(func)) {
  455. if (func.indexOf(".") != -1) {
  456. eval(func);
  457. return;
  458. }
  459. window[func](data);
  460. }
  461. } else {
  462. util.error(desc);
  463. }
  464. });
  465. };
  466. function del() {
  467. var opt = buildBtnOpt(this);
  468. if (opt.data.length == 0) {
  469. util.warning('请选择一条数据库记录!');
  470. return;
  471. }
  472. if (!util.isNull(opt["ag-win-check"]) && !util.call(opt["ag-win-check"], opt)) {
  473. return;
  474. }
  475. util.showDialog("您确定要删除选中记录么?", 3, doDel, opt);
  476. }
  477. function doDel(opt) {
  478. var url = ctx + "/" + opt["ag-data-ctx"] + opt["ag-data-url"];
  479. util.ajaxJson("删除中,请稍后!", url, {}, function (data) {
  480. var result = data.result;
  481. var desc = data.desc;
  482. if (result == 0) {
  483. util.success(desc);
  484. var queryBtn = layui.$(".ag-btn-query");
  485. if (queryBtn.length > 0) {
  486. $(queryBtn).click();
  487. }
  488. var func = $(this).attr("ag-back-func");
  489. if (!util.isNull(func)) {
  490. if (func.indexOf(".") != -1) {
  491. eval(func);
  492. return;
  493. }
  494. window[func](data);
  495. }
  496. } else {
  497. util.error(desc);
  498. }
  499. });
  500. }
  501. function createFile() {
  502. var formFile = new Object();
  503. formFile.config = {
  504. "ag-file-multiple": "true",
  505. "ag-file-delete": "true",
  506. "ag-file-add": "true",
  507. "ag-file-down": "true",
  508. "ag-file-max": 99,
  509. "ag-file-iframe-down-url": "/sys/settings/file/download",
  510. "ag-file-iframe-del-url": "/sys/settings/file/delFile",
  511. "ag-file-iframe-add-url": "/sys/settings/file/upload",
  512. "ag-file-iframe-name": "downloadHidenFr",
  513. "ag-data-ctx": "sysmgr"
  514. }
  515. formFile.loadForm = function (obj) {
  516. this.form = $(obj);
  517. /**
  518. * 当存在附件时生成附件dom 并 绑定附件相关事件
  519. */
  520. this.loadFormFiles();
  521. /**
  522. * 绑定事件
  523. */
  524. this.bindLsnr();
  525. }
  526. formFile.bindLsnr = function () {
  527. var that = this;
  528. var width = that.form.width();
  529. that.form.find(".ag-file").width(parseInt(width / 305) * 305 - 120);
  530. window.onresize = function () {
  531. var width = that.form.width();
  532. var num = parseInt(width / 305);
  533. that.form.find(".ag-file").width(num * 305 - 120 - (num == 1 ? 5 : 0));
  534. }
  535. // that.form.delegate(".ag-file .ag-file-header .ag-file-header-button", "click", function() {
  536. // $(this).siblings(".ag-file-header-file").trigger("click");
  537. // });
  538. /**
  539. * 附件添加事件
  540. */
  541. that.form.delegate(".ag-file .ag-file-header .ag-file-header-file", "change", function (e) {
  542. var inputFile = $(this);
  543. var agFile = that.form.find(".ag-file").eq(0);
  544. var items = agFile.find(".ag-file-item-li");
  545. var maxNum = agFile.attr("ag-file-max");
  546. if (parseInt(maxNum) <= items.length) {
  547. util.showDialog("最大添加附件数量:" + maxNum + ",无法继续添加!", 0);
  548. } else {
  549. var IEVersion = util.IEVersion();
  550. if (IEVersion > 0 && IEVersion < 10) {
  551. that.addFileIE(inputFile, inputFile.parent().parent());
  552. } else {
  553. $.each(inputFile[0].files, function (i, file) {
  554. that.addIfile(file, inputFile.parent().parent());
  555. });
  556. inputFile.after(inputFile.clone().val(""));
  557. inputFile.remove();
  558. }
  559. }
  560. });
  561. /*****预览事件****/
  562. that.form.delegate(".ag-file .ag-file-item-li-thumb .ag-file-item-li-thumb-icon", "click", function () {
  563. });
  564. $.each(that.form.find(".ag-file"), function (i, f) {
  565. f = $(f);
  566. if (f.attr("ag-file-down") == "true") {
  567. f.delegate(".ag-file-item-li-thumb-icon", "click", function () {
  568. $(this).parent().parent().parent().find(".ag-file-item-li-title").trigger("click");
  569. });
  570. /*****下载事件****/
  571. f.delegate(".ag-file-item-li .ag-file-item-li-title", "click", function () {
  572. var li = $(this).parents(".ag-file-item-li:first");
  573. var saveName = li.data("ag-file-name-savename");
  574. if (util.isNull(saveName)) {
  575. util.showDialog("未上传,不能下载!", 0);
  576. return;
  577. }
  578. var url = f.data("ag-file-iframe-down-url");
  579. url = ctx + "/" + util.getAgCtx(f) + url;
  580. _listHrefDownloadFile({ "ag-data-url": url + "?saveName=" + saveName + "&fileId=" + saveName });
  581. });
  582. }
  583. if (f.attr("ag-file-delete") == "true") {
  584. /*****删除事件****/
  585. f.delegate(".ag-file-item-li .ag-file-delete .layui-icon.layui-icon-delete", "click", function () {
  586. var li = $(this).parents(".ag-file-item-li:first");
  587. var saveName = li.data("ag-file-name-savename");
  588. var fileThat = $(this);
  589. if (util.isNull(saveName)) {
  590. fileThat.parents(".ag-file-item-li:first").remove();
  591. return;
  592. }
  593. var url = f.data("ag-file-iframe-del-url");
  594. url = ctx + "/" + util.getAgCtx(f) + url;
  595. util.showDialog("您确定要删除选中附件么?", 3, function () {
  596. util.ajaxJson("删除中,请稍后...", url, {
  597. "fileId": saveName
  598. }, function (data) {
  599. if (data.result == "0") {
  600. fileThat.parents(".ag-file-item-li:first").remove();
  601. util.showDialog("删除成功!", 2);
  602. return;
  603. }
  604. util.showDialog("删除失败!", 0);
  605. });
  606. }, {});
  607. });
  608. }
  609. });
  610. }
  611. /**
  612. * 当存在附件类名时,生成附件dom
  613. */
  614. formFile.loadFormFiles = function () {
  615. var that = this;
  616. var fileDiv = that.form.find(".ag-file");
  617. if (fileDiv.length == 0) {
  618. return;
  619. }
  620. var defaultOpt = $.extend({}, that.config);
  621. $.each(fileDiv, function (i, f) {
  622. f = $(f);
  623. for (var key in defaultOpt) {
  624. if (util.isNull(f.attr(key))) {
  625. f.attr(key, defaultOpt[key]);
  626. }
  627. f.data(key, f.attr(key));
  628. }
  629. /**
  630. * 判断是否可新增附件
  631. */
  632. if (f.attr("ag-file-add") == "true") {
  633. that.appendFileHeadeTpl(f);
  634. }
  635. var item = $("<ol class='ag-file-item'></ol>");
  636. f.append(item);
  637. /*********插入下载配置*********/
  638. if ($("[name=" + f.data("ag-file-iframe-name") + "]").length == 0) {
  639. var iframe = $("<iframe name='" + f.data("ag-file-iframe-name") + "' class='layui-hide'></iframe>");
  640. f.append(iframe);
  641. }
  642. });
  643. }
  644. /**
  645. * 追加添加附件区域
  646. */
  647. formFile.appendFileHeadeTpl = function (f) {
  648. var headerDiv = $("<div class='ag-file-header'></div>");
  649. var headerTextDiv = $("<span class='ag-file-header_text'></span>");
  650. var headerIcon = $("<span class='ag-file-header_icon'></span>");
  651. var headerBtn = $("<button type='button' class='ag-file-header-button'> 添加附件.</button>");
  652. var multiple = f.attr("ag-file-multiple");
  653. var headerInput = $("<input class='ag-file-header-file' name='file' type='file' " + (multiple == "true" ? "multiple" : "") +
  654. " />");
  655. headerDiv.append(headerTextDiv);
  656. headerDiv.append(headerIcon);
  657. headerDiv.append(headerBtn);
  658. headerDiv.append(headerInput);
  659. f.append(headerDiv);
  660. }
  661. /**
  662. * 上传事件
  663. */
  664. formFile.uploadFile = function (file, layFilter) {
  665. var that = this;
  666. var form = new FormData();
  667. form.append("file", file);
  668. var moduleName = that.form.find(".ag-file").eq(0).attr("ag-file-module");
  669. $.each(that.form.find("input[name],select[name],textarea[name]"), function () {
  670. if ($(this).attr("name") == "file") {
  671. return true;
  672. }
  673. form.append($(this).attr("name"), $(this).val());
  674. });
  675. form.append('moduleName', moduleName)
  676. var url = that.form.find(".ag-file").eq(0).data("ag-file-iframe-add-url");
  677. url = ctx + "/" + util.getAgCtx(that.form.find(".ag-file").eq(0)) + url;
  678. util.ajaxFile("上传中,请稍后...", url, form, function (data) {
  679. if (data.result != 0) {
  680. that.error(layFilter, data.desc.length > 50 ? "上传失败!" : data.desc);
  681. return;
  682. }
  683. that.succ(layFilter, data.body);
  684. }, function (data) {
  685. var msg = "上传失败...";
  686. try {
  687. var json = $.parseJSON(data.responseText);
  688. if (json.message && json.message.indexOf("Maximum") != -1) {
  689. msg = "附件大小超出服务器限制";
  690. }
  691. } catch (e) {
  692. }
  693. that.error(layFilter, msg);
  694. }, function (myXhr) {
  695. if (myXhr.upload) {
  696. myXhr.upload.addEventListener('progress', function (e) {
  697. var progressRate = parseInt(e.loaded * 100 / e.total) + '%';
  698. layui.element.progress(layFilter, progressRate == "100%" ? "99%" : progressRate);
  699. }, false);
  700. }
  701. return myXhr;
  702. });
  703. }
  704. formFile.error = function error(layFilter, msg) {
  705. var that = this;
  706. $("[lay-filter=" + layFilter + "]", that.form).children().removeClass("layui-bg-green").addClass("layui-bg-red")
  707. .width("100%").text(
  708. msg).css("text-align", "center");
  709. $("[lay-filter=" + layFilter + "]", that.form).parents(".ag-file-item-li:first").data("ag-file-name-savename",
  710. "");
  711. }
  712. formFile.succ = function (layFilter, data) {
  713. var that = this;
  714. layui.element.progress(layFilter, "100%");
  715. $("[lay-filter=" + layFilter + "]", that.form).parents(".ag-file-item-li:first").data("ag-file-name-savename",
  716. data.saveName);
  717. $("[lay-filter=" + layFilter + "]", that.form).children().width("100%").text(
  718. '上传成功!').css({
  719. "text-align": "center",
  720. "color": "white"
  721. });
  722. }
  723. formFile.addFileIE = function (obj, f) {
  724. var that = this;
  725. var moduleName = that.form.find(".ag-file").eq(0).attr("ag-file-module");
  726. var url = that.form.find(".ag-file").eq(0).data("ag-file-iframe-add-url");
  727. var iframeName = that.form.find(".ag-file").eq(0).data("ag-file-iframe-name");
  728. url = ctx + "/" + util.getAgCtx(that.form.find(".ag-file").eq(0)) + url + "IE";
  729. $("form[form_" + iframeName + "]").remove();
  730. var form = $('<form method="post" style="display:none;" name="form_' + iframeName + '" enctype="multipart/form-data" />');
  731. obj.after(obj.clone().val(""));
  732. obj.appendTo(form);
  733. $.each(that.form.find("input[name],select[name],textarea[name]"), function () {
  734. if ($(this).attr("name") == "file") {
  735. return true;
  736. }
  737. form.append($("<input type='hidden' name='" + $(this).attr("name") + "' value='" + $(this).val() + "'/>"));
  738. });
  739. form.append($("<input type='hidden' name='moduleName' value='" + moduleName + "'/>"));
  740. form.append($("<input type='hidden' name='agileauthtoken' value='" + util.getToken() + "'/>"));
  741. $(document.body).append(form);
  742. form.ajaxSubmit({
  743. async: false,
  744. type: "post",
  745. url: url,
  746. dataType: "text/html",
  747. beforeSubmit: function (formData, jqForm, options) {
  748. util.load("附件上传ing..");
  749. },
  750. success: function (data) {
  751. util.disLoad();
  752. data = $.parseJSON(util.decode(data));
  753. if (data.result == "0") {
  754. var body = data.body;
  755. body.fileType = file_types[body.fileType] ? file_types[body.fileType] : "default";
  756. body.fileSize = Math.ceil(body.fileSize / 1024);
  757. var layFilter = that.appendFileItemTpl(body, f);
  758. that.succ(layFilter, body);
  759. return;
  760. }
  761. util.error("上传失败!");
  762. },
  763. error: function (xhr, status, error, form) {
  764. util.disLoad();
  765. util.error("上传失败!");
  766. }
  767. });
  768. }
  769. /**
  770. * 插入附件 obj 可能是file对象 也可能是查询返回的bean
  771. * @param {Object} obj
  772. */
  773. formFile.addIfile = function (obj, f) {
  774. var that = this;
  775. var data = {};
  776. if (obj instanceof File) {
  777. data.fileType = file_types[obj.type] ? file_types[obj.type] : "default";
  778. data.fileName = obj.name;
  779. data.fileSize = Math.ceil(obj.size / 1024);
  780. data.file = obj;
  781. data.opTime = util.getTime();
  782. if (data.fileSize / 1024 > 30) {
  783. util.error("最大上传文件大小20M!");
  784. return;
  785. }
  786. } else {
  787. $.extend(true, data, obj);
  788. data.fileType = file_types[obj.fileType] ? file_types[obj.fileType] : "default";
  789. data.fileSize = Math.ceil(data.fileSize / 1024);
  790. }
  791. /**
  792. * 根据数据追加附件模板 返回进度条唯一标识
  793. */
  794. var layFilter = that.appendFileItemTpl(data, f);
  795. /**
  796. * 如果是附件上传操作则向后台发送请求传输对象
  797. */
  798. if (data.file) {
  799. $("[lay-filter=" + layFilter + "]", that.form).removeClass("layui-hide");
  800. $("[lay-filter=" + layFilter + "]", that.form).children().removeClass("layui-bg-red").removeClass(
  801. "layui-bg-green");
  802. that.uploadFile(obj, layFilter);
  803. }
  804. }
  805. /**
  806. * 追加附件模板到指定区域
  807. * @param {Object} data
  808. */
  809. formFile.appendFileItemTpl = function (data, f) {
  810. var that = this;
  811. var li = $('<li class="ag-file-item-li"></li>');
  812. li.data("ag-file-name-filename", data.fileName);
  813. li.data("ag-file-name-savename", data.saveName);
  814. li.data("ag-file-name-optime", data.opTime);
  815. li.data("ag-file-name-filesize", data.fileSize);
  816. var thumb = $('<div class="ag-file-item-li-thumb"></div>');
  817. var span = $('<span class="ag-file-item-li-thumb-icon ag-form-type-' + data.fileType + '"></span>');
  818. var a = $('<a href="#" title="点击下载:' + data.fileName + '"></a>');
  819. a.append(span);
  820. var random = util.randomWord(false, 32);
  821. var progress = $('<div class="layui-progress layui-progress-big ' + (data.file ? '' : 'layui-hide') + ' " lay-filter="' + random +
  822. '" lay-showPercent="true"> <div class="layui-progress-bar text-white" lay-percent="0%"><span class="layui-progress-text">0%</span></div></div>'
  823. );
  824. var dl = $("<dl></dl>");
  825. var dt = $("<dt></dt>");
  826. var span = $("<span class='ag-file-blender'></span>");
  827. var deleteDiv = $(
  828. "<div class='ag-file-delete' ><a title='删除此附件' href='#' ><span class=' layui-icon layui-icon-delete'></span></a></div>"
  829. );
  830. var downA = $("<a href='#' class='ag-file-item-li-title' title='点击下载:" + data.fileName + "' >" + data.fileName +
  831. "</a>");
  832. var sizeDd = $("<dd class='ag-file-item-li-size' >" + data.fileSize + "kb</dd>");
  833. var timeDd = $("<dd class='ag-file-item-li-date'><time >" + util.timeDiff(data.opTime) + "</time></dd>");
  834. dt.append(span);
  835. if (f.attr("ag-file-delete") == "true" && (data.delFlag == "Y" || util.isNull(data.delFlag))) {
  836. dl.append(deleteDiv);
  837. }
  838. dt.append(downA);
  839. dl.append(dt);
  840. dl.append(sizeDd);
  841. dl.append(timeDd);
  842. thumb.append(a);
  843. thumb.append(progress);
  844. li.append(thumb);
  845. li.append(dl);
  846. that.form.find(".ag-file-item").append(li);
  847. console.log(that.form.find(".ag-file-item").innerWidth())
  848. console.log($('.ag-file-item li').length)
  849. return random;
  850. }
  851. return formFile;
  852. }
  853. /**
  854. * 初始化表单数据-修改表单
  855. *
  856. */
  857. function initForm() {
  858. var param = util.getUrlParam();
  859. hiddenBtn(param);
  860. $(".ag-form").each(function (idx, agForm) {
  861. // $(agForm).find('input[ag-verify]').change(function(){
  862. // checkForm.validateForm(agForm)
  863. // })mc-require
  864. var formFile = createFile();
  865. formFile.loadForm(agForm);
  866. var dataUrl = $(agForm).attr("ag-data-url");
  867. $.each($(agForm).find("[ag-select-func]"), function (i, item) {
  868. form.on("select(" + $(item).attr("lay-filter") + ")", function (data) {
  869. window[$(item).attr("ag-select-func")].call(item, data);
  870. });
  871. });
  872. for (var name in param) {
  873. var val = param[name];
  874. if (!util.isNull(val)) {
  875. $(agForm).find("[name=" + name + "]").val(val);
  876. }
  877. }
  878. var agCallBack = $(agForm).attr("ag-form-callBack");
  879. if (!util.isNull(agCallBack)) {
  880. util.call(agCallBack);
  881. }
  882. if (!util.isNull(dataUrl)) {
  883. var formParam = getFormJson($(agForm));
  884. //加载数据并补充初始化表单
  885. var url = ctx + "/" + util.getAgCtx($(agForm)) + dataUrl;
  886. util.loadShade();
  887. util.ajaxJson("", url, formParam, function (data) {
  888. util.closeAll();
  889. /**
  890. * 复选框
  891. *
  892. */
  893. var chkBoxDivArr = $(agForm).find(".ag-chkbox");
  894. if (chkBoxDivArr.length > 0) {
  895. var chkStr = "";
  896. $(chkBoxDivArr).each(function (idx, chkboxDiv) {
  897. var key = $(chkboxDiv).attr("ag-chkbox-name");
  898. var dataArr = data[key + "ChkBox"];
  899. $(dataArr).each(function (idxData, chkData) {
  900. var checked = 'checked=""';
  901. if (util.isNull(chkData.selected)) {
  902. checked = '';
  903. }
  904. var record = '<input type="checkbox" customVal="' + chkData.optCode + '" value="' + chkData.optCode +
  905. '" name="' + key + '" lay-skin="primary" title="' + chkData.optName + '" ' + checked + '>'
  906. chkStr = chkStr + record;
  907. });
  908. $(chkboxDiv).html(chkStr);
  909. form.render('checkbox');
  910. });
  911. }
  912. /**
  913. * 附件
  914. */
  915. if (formFile.form.find(".ag-file").length > 0) {
  916. var key = formFile.form.find(".ag-file").eq(0).attr("ag-file-key");
  917. if (!util.isNull(data[key]) && data[key].length > 0) {
  918. $.each(data[key], function (ind, file) {
  919. formFile.addIfile(file, formFile.form.find(".ag-file").eq(0));
  920. });
  921. }
  922. }
  923. for (var name in data) {
  924. var val = data[name];
  925. if (!util.isNull(val)) {
  926. $(agForm).find("input[name=" + name + "],textarea[name=" + name + "]").val(val);
  927. }
  928. if (name.endWith("Opt")) {
  929. var optArr = data[name];
  930. optArr = util.isNull(optArr) ? [] : optArr;
  931. var selectStr = "";
  932. var selObj = $("select[name=" + name.substr(0, name.length - 3) + "]");
  933. if (selObj.attr("ag-select-default-val") == "true") {
  934. selectStr += "<option value=''>-请选择-</option>"
  935. }
  936. if (optArr != null) {
  937. for (var i = 0; i < optArr.length; i++) {
  938. var selectedStr = optArr[i].selected;
  939. if (util.isNull(selectedStr)) {
  940. selectedStr = "";
  941. }
  942. var optBean = "<option value='" + optArr[i].optCode + "' " + selectedStr + ">" + optArr[i].optName +
  943. "</option>";
  944. selectStr = selectStr + optBean;
  945. }
  946. }
  947. $(selObj).html(selectStr);
  948. form.render('select');
  949. }
  950. if (name.endWith("Tree")) {
  951. var treeObj = $("[name=" + name.substr(0, name.length - 4) + "]");
  952. treeObj.data("ag-tree-data", data[name]);
  953. }
  954. }
  955. //自定义插件入口
  956. var pluginName = $(agForm).attr("ag-plugin-name");
  957. if (!util.isNull(pluginName)) {
  958. //init参数根据需要在扩展
  959. customPlugins[pluginName].init(data);
  960. }
  961. var agCallBack = $(agForm).attr("ag-form-callBack");
  962. if (!util.isNull(agCallBack)) {
  963. util.call(agCallBack, data);
  964. }
  965. if (data.startTime < util.getTime() && data.id) {
  966. $('.ag-mc-hide').hide()
  967. }
  968. });
  969. };
  970. });
  971. renderForm();
  972. }
  973. //渲染表单-date
  974. function renderForm() {
  975. var agDateArr = $(".ag-date");
  976. $(agDateArr).each(function (idx, input) {
  977. var opt = {
  978. elem: input,
  979. type: $(input).attr("ag-date-type")
  980. }
  981. if (!util.isNull($(input).attr("ag-date-format"))) {
  982. opt.format = $(input).attr("ag-date-format");
  983. }
  984. laydate.render(opt);
  985. });
  986. }
  987. function initFormHeight() {
  988. //目前没有唯一标识判断 先根据查询按钮判断是不是查询页面
  989. //如果是查询页面则返回.
  990. if ($(".ag-btn-query").length > 0) {
  991. return;
  992. }
  993. $(".ag-form").css("overflow-y", "auto");
  994. var ie = util.IEVersion();
  995. if (!isNaN(ie) && ie > 0 && ie < 10) {
  996. $(".ag-form").css("height", $(window).height() - 140 + "px");
  997. return;
  998. }
  999. $(".ag-form").css("height", "calc( 100vh - 140px)");
  1000. }
  1001. function initListHeight() {
  1002. var agTable = $(".ag-table");
  1003. if (agTable.length == 0) {
  1004. return;
  1005. }
  1006. var sibHeight = 0;
  1007. //获取容器父级--父级所有兄弟节点
  1008. var $query = agTable.parent().siblings(":visible").not("script").not("iframe").not(".datagrid-mask,.datagrid-mask-msg");
  1009. for (var i = 0; i < $query.length; i++) {
  1010. if (!$($query[i]).attr("class") || $($query[i]).attr("class").indexOf("layui-layer") != -1) {
  1011. continue;
  1012. }
  1013. sibHeight += ($($query[i]).outerHeight() + util.getMarginHeight($query[i]));
  1014. }
  1015. sibHeight += util.getRealityOrderHeight(agTable.parent());
  1016. var parentDiffHeight = sibHeight;
  1017. //获取容器兄弟节点高度
  1018. $.each(agTable.siblings(":visible").not("script").not("iframe").not(".layui-form.layui-border-box.layui-table-view"),
  1019. function (i, t) {
  1020. sibHeight += ($(t).outerHeight() + util.getMarginHeight($(t)));
  1021. });
  1022. var ie = util.IEVersion();
  1023. agTable.parent().attr("style", "");
  1024. if (!isNaN(ie) && ie > 0 && ie < 10) {
  1025. agTable.parent().css('height', $(window).height() - parentDiffHeight + "px");
  1026. agTable.css('height', $(window).height() - sibHeight + "px");
  1027. return;
  1028. }
  1029. agTable.parent().css('height', 'calc( 100vh - ' + parentDiffHeight + 'px)');
  1030. agTable.css('height', 'calc( 100vh - ' + sibHeight + 'px)');
  1031. }
  1032. function initAgZtree() {
  1033. var id = $(this).attr("id");
  1034. if (util.isNull(id)) {
  1035. id = util.getMSecond();
  1036. $(this).attr("id", id);
  1037. }
  1038. var title = $(this).attr("ag-tree-title");
  1039. if (util.isNull(title)) {
  1040. util.error("请设置ag-tree-title属性");
  1041. return;
  1042. }
  1043. util.openWin("/static/views/ztreeInit.html?id=" + id, title, 800, 600);
  1044. }
  1045. /**
  1046. * 无title属性补丁
  1047. */
  1048. function addTitle() {
  1049. $.each($("[ag-win-title]:not([title])"), function (i, t) {
  1050. $(t).attr("title", $(t).attr("ag-win-title"));
  1051. });
  1052. $(".ag-btn-del:not([title])").attr("title", "删除");
  1053. }
  1054. /**
  1055. * 根据请求参数隐藏显示按钮
  1056. */
  1057. function hiddenBtn(param) {
  1058. if (!util.isNull(param.fqFlag) && param.fqFlag == "Y") {
  1059. $(".custom-fq-false").hide();
  1060. return;
  1061. }
  1062. $(".custom-fq-true").hide();
  1063. }
  1064. $(document).ready(function () {
  1065. initBtnLsnr();
  1066. initForm();
  1067. initListHeight();
  1068. initFormHeight();
  1069. addTitle();
  1070. });
  1071. });
  1072. /**
  1073. * 列表链接,post请求
  1074. *
  1075. * @param {Object} url
  1076. */
  1077. function _listHrefPost(opt) {
  1078. util.showDialog(opt["ag-win-title"], 3, _post, opt);
  1079. }
  1080. function _post(opt) {
  1081. var url = ctx + "/" + (util.isNull(opt["ag-data-ctx"]) ? "" : opt["ag-data-ctx"]) + opt["ag-data-url"];
  1082. util.ajaxJson("处理中...", url, {}, function (data) {
  1083. if (data) {
  1084. if ("0" == data.result) {
  1085. util.success(data.desc ? data.desc : "成功");
  1086. if (!util.isNull(opt["ag-data-refresh"]) && (opt["ag-data-refresh"] == true || opt["ag-data-refresh"] == "true")) {
  1087. $(".ag-btn-query").click();
  1088. }
  1089. } else if ("1" == data.result) {
  1090. util.error(data.desc ? data.desc : "失败");
  1091. }
  1092. }
  1093. }, "json");
  1094. }
  1095. /**
  1096. * 列表链接,下载文件
  1097. *
  1098. * @param {Object} url
  1099. */
  1100. function _listHrefDownloadFile(opt) {
  1101. util.showDialog("确定下载文件么?", 3, "ret=_doRealDownLoad('" + opt["ag-data-url"] + "')");
  1102. }
  1103. function _doRealDownLoad(url) {
  1104. if ($("[name=downloadHidenFr1").length == 0) {
  1105. var iframe = $("<iframe name='downloadHidenFr1' class='layui-hide'></iframe>");
  1106. iframe.appendTo('body');
  1107. }
  1108. url = util.addUrlToken(url);
  1109. var form = $("<form></form>").attr("action", url).attr("method", "post");
  1110. form[0].target = "downloadHidenFr1";
  1111. form.appendTo('body').submit().remove();
  1112. }
  1113. function _listHrefWindow(opt) {
  1114. var opts = {
  1115. "winId": opt["ag-win-id"]
  1116. }
  1117. util.openWin(util.decode(opt["ag-data-url"]), opt["ag-win-title"], opt["ag-win-width"], opt["ag-win-height"], opts);
  1118. }
  1119. function _listHrefTab(opt) {
  1120. util.addTab(opt["ag-data-url"], opt["ag-win-title"]);
  1121. }
  1122. /**
  1123. * 根据列配置信息和数据,装饰数据,加入链接处理
  1124. *
  1125. * @param {Object} colInfo
  1126. * @param {Object} data
  1127. */
  1128. function decorateData(colsStr) {
  1129. var colModel = $.parseJSON(colsStr);
  1130. for (var i = 0; i < colModel.length; i++) {
  1131. for (var k = 0; k < colModel[i].length; k++) {
  1132. if (!colModel[i][k].align) {
  1133. colModel[i][k].align = "center";
  1134. }
  1135. if (colModel[i][k].btns) {
  1136. if (!$.isArray(colModel[i][k].btns)) {
  1137. return;
  1138. }
  1139. var id = "tpl_btns_" + util.randomWord(false, 8);
  1140. colModel[i][k].templet = "#" + id;
  1141. var appendAHtml = "";
  1142. for (var z = 0; z < colModel[i][k].btns.length; z++) {
  1143. var item = colModel[i][k].btns[z];
  1144. var realUrl = decorateTpl(item.url);
  1145. var lsnrStr = getHrefLsnr(item.openType);
  1146. var opts = {
  1147. "ag-data-url": realUrl,
  1148. "ag-win-title": item.openTitle,
  1149. "ag-win-width": item.width,
  1150. "ag-win-height": item.height,
  1151. "ag-data-refresh": item.refresh
  1152. }
  1153. var aFunc = lsnrStr + "(" + JSON.stringify(opts) + ")";
  1154. var a = "<a href='javascript:void(0)' style='padding:0px 5px' class=' layui-table-link " + item.className +
  1155. "' onclick='" + aFunc + " '>" + (item.btnVal ? item.btnVal : "操作") + "</a>";
  1156. appendAHtml += a;
  1157. }
  1158. appendScript(id, appendAHtml);
  1159. }
  1160. }
  1161. }
  1162. return colModel;
  1163. }
  1164. /**
  1165. *根据href的类型获取链接处理函数名称
  1166. *
  1167. * @param {Object} openType
  1168. */
  1169. function getHrefLsnr(openType) {
  1170. var hrefLsnr = {
  1171. "openType0": "_listHrefDownloadFile", // 下载
  1172. "openType1": "_listHrefWindow", // 弹窗
  1173. "openType2": "_listHrefTab", // tab页
  1174. "openType3": "_listHrefPost", // 触发post请求
  1175. };
  1176. var funcName = hrefLsnr["openType" + openType];
  1177. return funcName;
  1178. }
  1179. function appendScript(id, a) {
  1180. if ($("#" + id).length > 0) {
  1181. $("#" + id).remove();
  1182. }
  1183. var scr = $("<script type='text/html' id='" + id + "'>" + a + "</script>");
  1184. scr.appendTo($(document.body));
  1185. }
  1186. /**
  1187. *
  1188. * 根据配置url和参数 转换模板
  1189. *
  1190. */
  1191. function decorateTpl(inUrl, model) {
  1192. var reg = new RegExp("&amp;", "g");
  1193. var url = inUrl.replace(reg, "&");
  1194. url = url.replace("@ctx@", ctx);
  1195. var realUrl = url;
  1196. if (url.indexOf("?") != -1) {
  1197. var tempArr = url.split("?");
  1198. var realParam = "";
  1199. var urlNoParam = tempArr[0];
  1200. var paramStr = tempArr[1];
  1201. var paramArr = paramStr.split("&");
  1202. if (urlNoParam.indexOf("@") != -1) {
  1203. var arr = urlNoParam.match(/@(\S*)@/g);
  1204. arr = arr == null ? [] : arr;
  1205. if (arr != null) {
  1206. for (var i = 0; i < arr.length; i++) {
  1207. urlNoParam = urlNoParam.replace(arr[i], "{{d." + arr[i].substring(1, arr[i].length - 1) + "}}");
  1208. }
  1209. }
  1210. }
  1211. for (var k = 0; k < paramArr.length; k++) {
  1212. var pair = paramArr[k].split("=");
  1213. if (pair.length == 1 || util.isNull(pair[1])) {
  1214. realParam += paramArr[k] + "&";
  1215. continue;
  1216. }
  1217. /**
  1218. * $Query 代表从查询参数获取
  1219. */
  1220. if ("$Query" == pair[1]) {
  1221. if ($("[name=" + pair[0] + "]").length > 0) {
  1222. realParam += pair[0] + "=" + $("[name=" + pair[0] + "]").eq(0).val() + "&";
  1223. } else {
  1224. realParam += pair[0] + "=" + "&";
  1225. }
  1226. continue;
  1227. }
  1228. var arr = pair[1].match(/@(\S*)@/g);
  1229. arr = arr == null ? [] : arr;
  1230. var arr1 = pair[1].match(/#(\S*)#/g);
  1231. arr1 = arr1 == null ? [] : arr1;
  1232. for (var i = 0; i < arr1.length; i++) {
  1233. arr.push(arr1[i]);
  1234. }
  1235. if (arr != null) {
  1236. for (var i = 0; i < arr.length; i++) {
  1237. pair[1] = pair[1].replace(arr[i], "{{d." + arr[i].substring(1, arr[i].length - 1) + "}}");
  1238. }
  1239. realParam += pair[0] + "=" + pair[1] + "&";
  1240. continue;
  1241. }
  1242. realParam += paramArr[k] + "&";
  1243. }
  1244. realUrl = urlNoParam + "?" + realParam;
  1245. }
  1246. return realUrl;
  1247. }