zlpms.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. /// <reference path="plugins/layui/layui.js" />
  2. /// <reference path="jquery.min.js" />
  3. $(function () {
  4. history.pushState(null, null, document.URL);
  5. window.addEventListener('popstate', function () {
  6. history.pushState(null, null, document.URL);
  7. });
  8. layui.use(['layer', 'form'], function () { //独立版的layer无需执行这一句
  9. var $ = layui.jquery, layer = layui.layer, form = layui.form; //独立版的layer无需执行这一句
  10. //layer.config({
  11. // skin: 'layui-layer-lan' //一旦设定,所有弹层风格都采用此主题。
  12. //});
  13. });
  14. });
  15. var ZLPMS = {
  16. //弹出窗口的回调函数
  17. callback: new Dictionary(),
  18. //打开窗口
  19. //opts
  20. //data:参数内容(这是自定义的参数内容)
  21. //title:标题
  22. //url:打开地址
  23. //type: 0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
  24. //area: 窗口的宽高
  25. //btn: ['按钮1', '按钮2', '按钮3', …]按钮1的回调是yes,而从按钮2开始,则回调为btn2: function(){}
  26. //yes: 确定后的回调用方法
  27. //success:窗口打开成功后调用事件
  28. //return 返回弹出窗口的index
  29. OpenWindow: function (opts) {
  30. var defaultOpts = { title: '弹出窗口', url: '', type: 2, area: ['60%', '60%'], offset: 'auto', closeBtn: 1, btn: ['确定', '关闭'], yes: function (index, layero) { }, cancel: function (index, layero) { }, success: function () { }, end: function () { }, maxmin: false, scrollbar: true, shade: [0.2, '#393D49'] };
  31. $.extend(defaultOpts, opts);//合并参数
  32. return layer.open({
  33. type: 2
  34. , title: defaultOpts.title
  35. , area: defaultOpts.area
  36. , shade: defaultOpts.shade
  37. , maxmin: defaultOpts.maxmin
  38. , resize: false
  39. , content: defaultOpts.url
  40. , btn: defaultOpts.btn
  41. , yes: defaultOpts.yes
  42. , btn2: function (index, layero) {
  43. layer.close(index);
  44. }
  45. , zIndex: layer.zIndex
  46. , success: function (layero) {
  47. layer.setTop(layero);//设置为顶层
  48. }
  49. });
  50. },
  51. //打开窗口包含成功回调
  52. //opts
  53. //data:参数内容(这是自定义的参数内容)
  54. //title:标题
  55. //url:打开地址
  56. //type: 0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
  57. //area: 窗口的宽高
  58. //btn: ['按钮1', '按钮2', '按钮3', …]按钮1的回调是yes,而从按钮2开始,则回调为btn2: function(){}
  59. //yes: 确定后的回调用方法
  60. //success:窗口打开成功后调用事件
  61. //return 返回弹出窗口的index
  62. OpenWindowSuccess: function (opts) {
  63. var defaultOpts = { title: '弹出窗口', url: '', type: 2, area: ['60%', '60%'], offset: 'auto', closeBtn: 1, btn: ['确定', '关闭'], yes: function (index, layero) { }, cancel: function (index, layero) { }, success: function () { }, end: function () { }, maxmin: false, scrollbar: true, shade: [0.2, '#393D49'] };
  64. $.extend(defaultOpts, opts);//合并参数
  65. return layer.open({
  66. type: 2
  67. , title: defaultOpts.title
  68. , area: defaultOpts.area
  69. , shade: defaultOpts.shade
  70. , maxmin: defaultOpts.maxmin
  71. , resize: false
  72. , content: defaultOpts.url
  73. , btn: defaultOpts.btn
  74. , yes: defaultOpts.yes
  75. , btn2: function (index, layero) {
  76. layer.close(index);
  77. }
  78. , zIndex: layer.zIndex
  79. , success: function (layero) {
  80. layer.setTop(layero);//设置为顶层
  81. //开放打开成功完成事件
  82. if (defaultOpts.success) {
  83. defaultOpts.success(layero);
  84. }
  85. }
  86. });
  87. },
  88. //打开一个新窗口,没有回调,没有按钮,所有关闭与提交在窗口内部实现
  89. //title:标题
  90. //url:打开地址,
  91. //width:宽度,允许使用60%,或600px进行设置
  92. //height:高度
  93. //return:返回弹出窗口的index
  94. OpenNewWindow: function (title, url, width, height, callback, endcallback) {
  95. var that = this;
  96. var defaultOpts = { title: title, url: url, type: 2, area: [width, height], offset: 'auto', closeBtn: 1, btn: null, maxmin: true, scrollbar: true, shade: [0.2, '#393D49'] };
  97. var index = layer.open({
  98. type: 2
  99. , title: defaultOpts.title
  100. , area: defaultOpts.area
  101. , shade: defaultOpts.shade
  102. , maxmin: defaultOpts.maxmin
  103. , resize: true
  104. , content: defaultOpts.url
  105. , btn: defaultOpts.btn
  106. , yes: defaultOpts.yes
  107. , btn2: function (index, layero) {
  108. layer.close(index);
  109. }
  110. , zIndex: layer.zIndex
  111. , success: function (layero) {
  112. layer.setTop(layero);//设置为顶层
  113. }, end: endcallback
  114. });
  115. //添加到字典中
  116. that.callback.add(index, callback);
  117. },
  118. //关闭窗口
  119. //指定关闭层
  120. CloseWindow: function (index) {
  121. layer.close(index);
  122. },
  123. //关闭layer的弹出层(调用时不能使用top调用,否则无法关闭窗口)
  124. CloseTopWindow: function (iscallback, data) {
  125. var that = this;
  126. var win = this.getTopmostWinodow();
  127. var wIndex = win.layer.getFrameIndex(window.name);
  128. win.layer.close(wIndex);
  129. if (win.ZLPMS.callback && iscallback) {
  130. //执行回调
  131. var callback = win.ZLPMS.callback.find(wIndex);
  132. if (callback) {//执行回调
  133. callback();
  134. //移除字典中的内容
  135. win.ZLPMS.callback.remove(wIndex);
  136. }
  137. }
  138. },
  139. //加载窗口
  140. //text:加载的文本
  141. //time:自动关闭时间(ms),0表示 不关闭
  142. //返回值为index,后面关闭需要使用到
  143. Loading: function (text, time) {
  144. return layer.open({
  145. type: 3,
  146. content: text,
  147. shade: [0.7, '#393D49'],
  148. time: time,
  149. zIndex: layer.zIndex,
  150. success: function (layero) {
  151. layer.setTop(layero);//设置为顶层
  152. }
  153. });
  154. },
  155. //显示加载窗口不关闭
  156. //返回窗口的index
  157. Loading2: function (text) {
  158. return layer.msg(text, {
  159. icon: 16, shade: 0.1, zIndex: layer.zIndex
  160. });
  161. },
  162. //加载动画(t:0-2)
  163. Loading3: function (t) {
  164. return layer.load(t);
  165. },
  166. //关闭窗口
  167. //指定索引
  168. UnLoading: function (index) {
  169. layer.close(index);
  170. },
  171. //弹出警告消息
  172. //text:文本内容,icon:图标:0-10
  173. Alert: function (text, icon) {
  174. layer.alert(text, { icon: icon, zIndex: layer.zIndex }, function (index) {
  175. layer.close(index);
  176. });
  177. },
  178. //确定的对话框
  179. //text内容,callback的回调用方法,cancel的回调用方法
  180. //icon:0-10,3为?号
  181. Confirm: function (text, icon, callback) {
  182. return layer.confirm(text, {
  183. icon: icon, title: '提示', zIndex: layer.zIndex,
  184. success: function (layero, index) {
  185. $("*").blur();
  186. this.enterEsc = function (event) {
  187. if (event.keyCode === 13) {
  188. layero.find(".layui-layer-btn0").click();
  189. return false; //阻止系统默认回车事件
  190. }
  191. };
  192. $(document).on('keydown', this.enterEsc); //监听键盘事件,关闭层
  193. },
  194. end: function () {
  195. $(document).off('keydown', this.enterEsc); //解除键盘关闭事件
  196. }
  197. },
  198. callback, function (index) {
  199. layer.close(index);
  200. });
  201. },
  202. //消息提示
  203. //text:文本内容,time,如果不写是3s关闭
  204. //icon:0-10
  205. Msg: function (text, icon, time, callback) {
  206. layer.msg(text, {
  207. icon: icon
  208. , time: 2000 //2秒关闭(如果不配置,默认是3秒)
  209. , zIndex: layer.zIndex
  210. }, callback)
  211. },
  212. //指定元素提示
  213. //text,内容,elementid:元素id
  214. //opts:tips: [3, '#0FA6D8'], //设置tips方向和颜色 类型:Number/Array,默认:2 tips层的私有参数。支持上右下左四个方向,通过1-4进行方向设定。如tips: 3则表示在元素的下面出现。有时你还可能会定义一些颜色,可以设定tips: [1, '#c00']
  215. Tips: function (text, elementid, opts) {
  216. var obj = $('#' + elementid);
  217. layer.tips(text, obj, opts);
  218. },
  219. //输入框简单值
  220. //msg:显示的文本,type://输入框类型,支持0(文本)默认1(密码)2(多行文本),callback(text);
  221. Prompt: function (msg, type, callback) {
  222. layer.prompt({ title: msg, formType: type }, function (text, index) {
  223. layer.close(index);
  224. callback(text);
  225. });
  226. },
  227. //获取已打开的窗口Dom对象
  228. GetChildFrame: function (layero) {
  229. return top.window[layero.find('iframe')[0]['name']];
  230. },
  231. //表单数据转化为对象。参数:表单id
  232. FormToObject: function (formId) {
  233. var array = $("#" + formId).serializeArray();
  234. var rs = new Object();
  235. for (var i = 0; i < array.length; i++) {
  236. //重复就在后面加上
  237. if (rs[array[i].name]) {
  238. rs[array[i].name] = rs[array[i].name] + "," + array[i].value;
  239. }
  240. else {
  241. rs[array[i].name] = array[i].value;
  242. }
  243. }
  244. return rs;
  245. },
  246. //设置表单值
  247. SetFormVal: function (id, data) {
  248. layui.use(['form'], function () {
  249. var form = layui.form;
  250. form.val(id, data);
  251. });
  252. },
  253. //通过ajax执行Get调用
  254. //url:调用地址, data: 数据包, callback :回调函数function(data){}
  255. GetAjax: function (url, data, callback) {
  256. var that = this;
  257. var idx = that.Loading2('数据提交中,请稍候...');
  258. $.ajax({
  259. url: url,
  260. data: data,
  261. method: 'get',
  262. cache: false,
  263. success: callback, //成功后回调函数
  264. error: function (err) {//显示错误消息(直接显示 系统对话框)
  265. //alert(err.responseText);
  266. that.Alert(err.responseText, 0);
  267. },
  268. complete: function () {//完成执行(无论对错)
  269. that.CloseWindow(idx);
  270. }
  271. });
  272. },//end GetAjax
  273. //通过ajax执行Post提交
  274. PostAjax: function (url, data, callback) {
  275. var that = this;
  276. var idx = that.Loading2('数据提交中,请稍候...');
  277. $.ajax({
  278. url: url,
  279. data: data,
  280. method: 'post',
  281. cache: false,
  282. success: callback, //成功后回调函数
  283. error: function (err) {//显示错误消息
  284. that.Alert(err.responseText, 0);
  285. },
  286. complete: function () {//完成执行(无论对错)
  287. that.CloseWindow(idx);
  288. }
  289. });
  290. },//end post ajax
  291. //获取父级顶级窗口
  292. getTopmostWinodow: function () {
  293. var win = window;
  294. while (win.frameElement) {
  295. win = win.parent;
  296. }
  297. return win;
  298. },
  299. //设置启用与禁用图标,value:1启用,其它禁用
  300. SetIsActiveIcon: function (value) {
  301. if (value == 1) {
  302. return "<i class=\"fa fa-3x fa-toggle-on\" style=\"color:#8583fc;\"></i>";
  303. } else {
  304. return "<i class=\"fa fa-toggle-off\"></i>";
  305. }
  306. },
  307. //设置显示图标
  308. SetIcons: function (icons, color) {
  309. return "<i class='" + icons + "' style=\"color:" + color + "\"></i>";
  310. },
  311. //设置工具栏的按钮
  312. SetToolbarButtons: function (buttons, groupname) {
  313. if (buttons.length > 0) {
  314. //读取所有按钮
  315. for (var i = 0; i < buttons.length; i++) {
  316. var button = buttons[i];
  317. var id = button.标识;
  318. var name = button.名称;
  319. var icons = button.图标;
  320. var colors = button.颜色;
  321. var iconhtml = "<i class=\"" + icons + "\" style=\"color:" + colors + "\">" + "<i style='font-size:14px;color:#000'> " + name + "<i></i>"
  322. var html = "<a href='#' id='" + id + "' class='easyui-linkbutton' data-options=\"plain:true\">" + iconhtml + "</a>";
  323. $('#' + groupname).append(html);
  324. }//end for
  325. } else {
  326. $('#' + groupname).append("<p>该用户角色没有对当前模块任何的操作权限,或请检查该模块是否分配按钮</p>");
  327. }
  328. },
  329. /**
  330. * 绑定layui下拉框
  331. * @param {any} option
  332. * {
  333. "url":"",
  334. "method": "Get",
  335. "key":"",
  336. "text":"",
  337. "filter":"",
  338. "form":null
  339. }
  340. */
  341. BindLayUiSelect: function (option) {
  342. $.ajax({
  343. url: option.url,
  344. method: 'get',
  345. async: false, // 同步执行
  346. success: function (data) {
  347. if (option.dom && Array.isArray(data) && data.length > 0) {
  348. let html = '<option value=""></option>';
  349. html += $.map(data, item => {
  350. return `<option value="${item[option.key]}">${item[option.text]}</option>`
  351. }).join("");
  352. option.dom.html(html);
  353. } else {
  354. option.dom.html('<option value=""></option>')
  355. }
  356. }, //成功后回调函数
  357. error: function (err) {//显示错误消息
  358. option.dom.html('<option value=""></option>')
  359. },
  360. complete: function () {
  361. option.form.render(option.dom);
  362. }
  363. });
  364. },
  365. GetAPi(url) {
  366. let ret = null;
  367. $.ajax({
  368. url: url,
  369. method: 'get',
  370. async: false, // 同步执行
  371. success: function (data) {
  372. ret = data;
  373. }, //成功后回调函数
  374. error: function (err) {//显示错误消息
  375. console.error(err);
  376. }
  377. });
  378. return ret;
  379. },
  380. PostAPi(url, data) {
  381. let ret = null;
  382. $.ajax({
  383. url: url,
  384. data: JSON.stringify(data),
  385. method: 'post',
  386. async: false, // 同步执行
  387. success: function (data) {
  388. ret = data;
  389. }, //成功后回调函数
  390. error: function (err) {//显示错误消息
  391. console.error(err);
  392. }
  393. });
  394. return ret;
  395. },
  396. formatterData: function (value, rowData, index) {
  397. if (value === "0001-01-01 00:00:00") {
  398. return "";
  399. }
  400. return value;
  401. },
  402. //时间比较
  403. compareTime: function (start, end, textTip) {
  404. var startTime = new Date(start.replace("-", "/").replace("-", "/"));
  405. var endTime = new Date(end.replace("-", "/").replace("-", "/"));
  406. if (startTime > endTime) {
  407. top.ZLPMS.Msg(textTip);
  408. return false;
  409. }
  410. return true
  411. }
  412. };
  413. //获取url中的参数
  414. function getQueryString(name) {
  415. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  416. var r = window.location.search.substr(1).match(reg);
  417. if (r != null) return unescape(r[2]);
  418. return null;
  419. }
  420. /*字典 Dictionary类,使用方法
  421. var pbook = new Dictionary();
  422. pbook.add("Mike", "723");
  423. pbook.add("Jennifer", "987");
  424. pbook.add("Jonathan", "666");
  425. pbook.showAll();//Mike -> 723; Jennifer -> 987; Jonathan -> 666;
  426. pbook.count();//3
  427. pbook.remove("Jennifer");
  428. */
  429. function Dictionary() {
  430. //字典数组
  431. this.datastore = new Array();
  432. //添加字典
  433. this.add = function (key, value) {
  434. this.datastore[key] = value;
  435. };
  436. //查找字典
  437. this.find = function (key) {
  438. return this.datastore[key];
  439. };
  440. //移除内容
  441. this.remove = function (key) {
  442. delete this.datastore[key];
  443. };
  444. //在控制台显示打印所有字典内容
  445. this.showAll = function () {
  446. var str = "";
  447. for (var key in this.datastore) {
  448. str += key + " -> " + this.datastore[key] + "; "
  449. }
  450. console.log(str);
  451. };
  452. //总数量
  453. this.count = function () {
  454. var n = 0;
  455. for (var key in Object.keys(this.datastore)) {
  456. ++n;
  457. }
  458. return n;
  459. };
  460. //清空内容
  461. this.clear = function () {
  462. for (var key in this.datastore) {
  463. delete this.datastore[key];
  464. }
  465. };
  466. }