design.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. layui.define(['layer', 'form'], function(exports) {
  2. var layer = layui.layer,
  3. form = layui.form,
  4. $ = layui.$,
  5. key = '',
  6. allJS = '',
  7. allHtml = '';
  8. let module = ["form"];
  9. delHtml()
  10. $('button').on('click', function() {
  11. var _this = $(this),
  12. size = _this.data('size'),
  13. type = _this.data('type'),
  14. html = '';
  15. key = randStrName();
  16. switch (type) {
  17. case 'text':
  18. html = input(type, size)
  19. break;
  20. case 'password':
  21. html = input(type, size)
  22. break;
  23. case 'select':
  24. html = select(size)
  25. break;
  26. case 'checkbox_a':
  27. html = checkbox_a(size)
  28. break;
  29. case 'checkbox_b':
  30. html = checkbox_b(size)
  31. break;
  32. case 'radio':
  33. html = radio(size)
  34. break;
  35. case 'textarea':
  36. html = textarea(size)
  37. break;
  38. case 'icon':
  39. html = icon(size)
  40. $('form').append(html);
  41. form.render();
  42. setHtml(html);
  43. layui.use(['iconPicker'], function() {
  44. layui.iconPicker.render({
  45. elem: "#" + key,
  46. type: "fontClass",
  47. });
  48. });
  49. if (module.indexOf('iconPicker') === -1) module.push('iconPicker');
  50. allJS += ' // 图标选择\n' +
  51. ' layui.iconPicker.render({\n' +
  52. ' elem: "#' + key + '",\n' +
  53. ' type: "fontClass",\n' +
  54. ' });\n';
  55. $('.js-show').text(jscode())
  56. return;
  57. case 'multiSelect':
  58. html = multiSelect(size)
  59. $('form').append(html);
  60. form.render();
  61. setHtml(html);
  62. layui.use(['xmSelect'], function() {
  63. layui.xmSelect.render({
  64. el: "#" + key,
  65. name: key,
  66. data: [{value: 1, name: "深圳"},{value: 2, name: "上海"},{value: 3, name: "广州"}],
  67. });
  68. });
  69. if (module.indexOf('xmSelect') === -1) module.push('xmSelect');
  70. allJS += ' // 下拉多选\n' +
  71. ' layui.xmSelect.render({\n' +
  72. ' el: "#' + key + '",\n' +
  73. ' name: "' + key + '",\n' +
  74. ' data: [{value: 1, name: "深圳"},{value: 2, name: "上海"},{value: 3, name: "广州"}],\n' +
  75. ' });\n';
  76. $('.js-show').text(jscode())
  77. return;
  78. case 'tree':
  79. html = tree(size)
  80. $('form').append(html);
  81. form.render();
  82. setHtml(html);
  83. layui.use(['xmSelect'], function() {
  84. layui.xmSelect.render({
  85. el: "#" + key,
  86. name: key,
  87. tree: {show: true},
  88. data: [{value: 1, name: "广东省", children:[{value: 2, name: "深圳"},{value: 3, name: "广州"}]},{value: 4, name: "福建省", children:[{value: 5, name: "厦门"},{value: 6, name: "福州"}]}],
  89. });
  90. });
  91. if (module.indexOf('xmSelect') === -1) module.push('xmSelect');
  92. allJS += ' // 树多选\n' +
  93. ' layui.xmSelect.render({\n' +
  94. ' el: "#' + key + '",\n' +
  95. ' name: "' + key + '",\n' +
  96. ' tree: {show: true},\n' +
  97. ' data: [{value: 1, name: "广东省", children:[{value: 2, name: "深圳"},{value: 3, name: "广州"}]},{value: 4, name: "福建省", children:[{value: 5, name: "厦门"},{value: 6, name: "福州"}]}],\n' +
  98. ' });\n';
  99. $('.js-show').text(jscode())
  100. return;
  101. case 'treeSelectOne':
  102. html = treeSelectOne(size)
  103. $('form').append(html);
  104. form.render();
  105. setHtml(html);
  106. layui.use(['xmSelect'], function() {
  107. layui.xmSelect.render({
  108. el: "#" + key,
  109. name: key,
  110. model: {"icon":"hidden","label":{"type":"text"}},
  111. clickClose: true,
  112. radio: true,
  113. tree: {show: true, strict: false, clickCheck: true, clickExpand: false},
  114. data: [{value: 1, name: "广东省", children:[{value: 2, name: "深圳"},{value: 3, name: "广州"}]},{value: 4, name: "福建省", children:[{value: 5, name: "厦门"},{value: 6, name: "福州"}]}],
  115. });
  116. });
  117. if (module.indexOf('xmSelect') === -1) module.push('xmSelect');
  118. allJS += ' // 树多选\n' +
  119. ' layui.xmSelect.render({\n' +
  120. ' el: "#' + key + '",\n' +
  121. ' name: "' + key + '",\n' +
  122. ' model: {"icon":"hidden","label":{"type":"text"}},\n' +
  123. ' clickClose: true,\n' +
  124. ' radio: true,\n' +
  125. ' tree: {show: true, strict: false, clickCheck: true, clickExpand: false},\n' +
  126. ' data: [{value: 1, name: "广东省", children:[{value: 2, name: "深圳"},{value: 3, name: "广州"}]},{value: 4, name: "福建省", children:[{value: 5, name: "厦门"},{value: 6, name: "福州"}]}],\n' +
  127. ' });\n';
  128. $('.js-show').text(jscode())
  129. return;
  130. case 'upload':
  131. html = upload(size)
  132. $('form').append(html);
  133. form.render();
  134. setHtml(html);
  135. layui.use(['upload'], function() {
  136. let input = layui.$('#' + key).prev();
  137. input.prev().html(layui.util.escape(input.val()));
  138. layui.$("#attachment-choose-" + key).on('click', function() {
  139. parent.layer.open({
  140. type: 2,
  141. title: "选择附件",
  142. content: "/app/admin/upload/attachment",
  143. area: ["95%", "90%"],
  144. success: function (layero, index) {
  145. parent.layui.$("#layui-layer" + index).data("callback", function (data) {
  146. input.val(data.url).prev().html(layui.util.escape(data.url));
  147. });
  148. }
  149. });
  150. });
  151. layui.upload.render({
  152. elem: "#" + key,
  153. url: "/app/admin/upload/file",
  154. accept: "file",
  155. field: "__file__",
  156. done: function (res) {
  157. this.item.prev().val(res.data.url).prev().html(layui.util.escape(res.data.url));
  158. }
  159. });
  160. });
  161. if (module.indexOf('upload') === -1) module.push('upload');
  162. if (module.indexOf('util') === -1) module.push('util');
  163. allJS += ' // 上传文件\n' +
  164. ' layui.use([\'upload\'], function() {\n' +
  165. ' let input = layui.$("#'+key+'").prev();\n' +
  166. ' input.prev().html(layui.util.escape(input.val()));\n' +
  167. ' layui.$("#attachment-choose-'+key+'").on("click", function() {\n' +
  168. ' parent.layer.open({\n' +
  169. ' type: 2,\n' +
  170. ' title: "选择附件",\n' +
  171. ' content: "/app/admin/upload/attachment",\n' +
  172. ' area: ["95%", "90%"],\n' +
  173. ' success: function (layero, index) {\n' +
  174. ' parent.layui.$("#layui-layer" + index).data("callback", function (data) {\n' +
  175. ' input.val(data.url).prev().html(layui.util.escape(data.url));\n' +
  176. ' });\n' +
  177. ' }\n' +
  178. ' });\n' +
  179. ' });\n' +
  180. ' });\n' +
  181. ' layui.upload.render({\n' +
  182. ' elem: "#' + key + '",\n' +
  183. ' url: "/app/admin/upload/file",\n' +
  184. ' accept: "file",\n' +
  185. ' field: "__file__",\n' +
  186. ' done: function (res) {\n' +
  187. ' this.item.prev().val(res.data.url).prev().html(layui.util.escape(res.data.url));\n' +
  188. ' }\n' +
  189. ' });\n';
  190. $('.js-show').text(jscode())
  191. return;
  192. case 'uploadImg':
  193. html = uploadImg(size)
  194. $('form').append(html);
  195. form.render();
  196. setHtml(html);
  197. layui.use(['upload'], function() {
  198. let input = layui.$('#' + key).prev();
  199. input.prev().attr('src', input.val());
  200. layui.$('#attachment-choose-' + key).on('click', function() {
  201. parent.layer.open({
  202. type: 2,
  203. title: '选择附件',
  204. content: '/app/admin/upload/attachment?ext=jpg,jpeg,png,gif,bmp',
  205. area: ["95%", "90%"],
  206. success: function (layero, index) {
  207. parent.layui.$("#layui-layer" + index).data("callback", function (data) {
  208. input.val(data.url).prev().attr("src", data.url);
  209. });
  210. }
  211. });
  212. });
  213. layui.upload.render({
  214. elem: "#" + key,
  215. url: "/app/admin/upload/image",
  216. acceptMime: "image/gif,image/jpeg,image/jpg,image/png",
  217. field: "__file__",
  218. done: function (res) {
  219. this.item.prev().val(res.data.url).prev().attr('src', res.data.url);
  220. }
  221. });
  222. });
  223. if (module.indexOf('upload') === -1) module.push('upload');
  224. allJS += ' // 上传图片\n' +
  225. ' layui.use([\'upload\'], function() {\n' +
  226. ' let input = layui.$("#'+key+'").prev();\n' +
  227. ' input.prev().attr(\'src\', input.val());\n' +
  228. ' layui.$("#attachment-choose-'+key+'").on("click", function() {\n' +
  229. ' parent.layer.open({\n' +
  230. ' type: 2,\n' +
  231. ' title: "选择附件",\n' +
  232. ' content: "/app/admin/upload/attachment?ext=jpg,jpeg,png,gif,bmp",\n' +
  233. ' area: ["95%", "90%"],\n' +
  234. ' success: function (layero, index) {\n' +
  235. ' parent.layui.$("#layui-layer" + index).data("callback", function (data) {\n' +
  236. ' input.val(data.url).prev().attr("src", data.url);\n' +
  237. ' });\n' +
  238. ' }\n' +
  239. ' });\n' +
  240. ' });\n' +
  241. ' layui.upload.render({\n' +
  242. ' elem: "#' + key + '",\n' +
  243. ' url: "/app/admin/upload/image",\n' +
  244. ' acceptMime: "image/gif,image/jpeg,image/jpg,image/png",\n' +
  245. ' field: "__file__",\n' +
  246. ' done: function (res) {\n' +
  247. ' this.item.prev().val(res.data.url).prev().attr(\'src\', res.data.url);\n' +
  248. ' }\n' +
  249. ' });\n' +
  250. ' });\n';
  251. $('.js-show').text(jscode())
  252. return;
  253. case 'submit':
  254. html = submits(size)
  255. break;
  256. case 'del':
  257. $('form').html("\n")
  258. delHtml()
  259. return false;
  260. default:
  261. layer.msg('类型错误', {
  262. icon: 2
  263. })
  264. }
  265. $('form').append(html);
  266. form.render();
  267. setHtml(html);
  268. $('.js-show').text(jscode())
  269. })
  270. function delHtml() {
  271. allHtml = '';
  272. allJS = '';
  273. $('.code-show').text('');
  274. $('.js-show').text(jscode());
  275. }
  276. function setHtml(html) {
  277. allHtml += html;
  278. $('.code-show').text('<form class="layui-form" action="" onsubmit="return false">\n' + allHtml + '</form>')
  279. }
  280. function icon(size) {
  281. var html = ' <div class="layui-form-item">\n' +
  282. ' <label class="layui-form-label">图标选择</label>\n' +
  283. ' <div class="layui-input-' + size + '">\n' +
  284. ' <input name="'+key+'" id="'+key+'" />\n' +
  285. ' </div>\n' +
  286. ' </div>\n';
  287. return html;
  288. }
  289. function multiSelect(size) {
  290. var html = ' <div class="layui-form-item">\n' +
  291. ' <label class="layui-form-label">下拉多选</label>\n' +
  292. ' <div class="layui-input-' + size + '">\n' +
  293. ' <div name="'+key+'" id="'+key+'" ></div>\n' +
  294. ' </div>\n' +
  295. ' </div>\n';
  296. return html;
  297. }
  298. function tree(size) {
  299. var html = ' <div class="layui-form-item">\n' +
  300. ' <label class="layui-form-label">树多选</label>\n' +
  301. ' <div class="layui-input-' + size + '">\n' +
  302. ' <div name="'+key+'" id="'+key+'" ></div>\n' +
  303. ' </div>\n' +
  304. ' </div>\n';
  305. return html;
  306. }
  307. function treeSelectOne(size) {
  308. var html = ' <div class="layui-form-item">\n' +
  309. ' <label class="layui-form-label">树单选</label>\n' +
  310. ' <div class="layui-input-' + size + '">\n' +
  311. ' <div name="'+key+'" id="'+key+'" ></div>\n' +
  312. ' </div>\n' +
  313. ' </div>\n';
  314. return html;
  315. }
  316. function upload(size) {
  317. let uploadWords = size === "block" ? "上传文件" : "上传";
  318. let selectWords = size === "block" ? "选择文件" : "选择";
  319. var html = ' <div class="layui-form-item">\n' +
  320. ' <label class="layui-form-label">上传文件</label>\n' +
  321. ' <div class="layui-input-' + size + '">\n' +
  322. ' <span></span>\n' +
  323. ' <input type="text" style="display:none" name="'+key+'" value="" />\n' +
  324. ' <button type="button" class="pear-btn pear-btn-primary pear-btn-sm" id="'+key+'" permission="app.admin.upload.file">\n' +
  325. ' <i class="layui-icon layui-icon-upload"></i>'+uploadWords+'\n' +
  326. ' </button>\n' +
  327. ' <button type="button" class="pear-btn pear-btn-primary pear-btn-sm" id="attachment-choose-'+key+'" permission="app.admin.upload.attachment">\n' +
  328. ' <i class="layui-icon layui-icon-align-left"></i>'+selectWords+'\n' +
  329. ' </button>\n' +
  330. ' </div>\n' +
  331. ' </div>\n';
  332. return html;
  333. }
  334. function uploadImg(size) {
  335. let uploadWords = size === "block" ? "上传文件" : "上传";
  336. let selectWords = size === "block" ? "选择图片" : "选择";
  337. var html = ' <div class="layui-form-item">\n' +
  338. ' <label class="layui-form-label">上传图片</label>\n' +
  339. ' <div class="layui-input-' + size + '">\n' +
  340. ' <img class="img-3" src=""/>\n' +
  341. ' <input type="text" style="display:none" name="'+key+'" value="" />\n' +
  342. ' <button type="button" class="pear-btn pear-btn-primary pear-btn-sm" id="'+key+'" permission="app.admin.upload.image">\n' +
  343. ' <i class="layui-icon layui-icon-upload"></i>'+uploadWords+'\n' +
  344. ' </button>\n' +
  345. ' <button type="button" class="pear-btn pear-btn-primary pear-btn-sm" id="attachment-choose-'+key+'" permission="app.admin.upload.attachment">\n' +
  346. ' <i class="layui-icon layui-icon-align-left"></i>'+selectWords+'\n' +
  347. ' </button>\n' +
  348. ' </div>\n' +
  349. ' </div>\n';
  350. return html;
  351. }
  352. function input(type, size) {
  353. var name = type === 'text' ? '输入框' : (type === 'password' ? '密码框' : '');
  354. var html = ' <div class="layui-form-item">\n' +
  355. ' <label class="layui-form-label">' + name + '</label>\n' +
  356. ' <div class="layui-input-' + size + '">\n' +
  357. ' <input type="' + type + '" name="' + key + '" required lay-verify="required" placeholder="请输入' + name +
  358. '内容" autocomplete="off" class="layui-input">\n' +
  359. ' </div>\n' +
  360. ' </div>\n';
  361. return html;
  362. }
  363. function select(size) {
  364. var html = ' <div class="layui-form-item">\n' +
  365. ' <label class="layui-form-label">选择框</label>\n' +
  366. ' <div class="layui-input-' + size + '">\n' +
  367. ' <select name="' + key + '" lay-verify="required" lay-search>\n' +
  368. ' <option value=""></option>\n' +
  369. ' <option value="0">北京</option>\n' +
  370. ' <option value="1">上海</option>\n' +
  371. ' <option value="2">广州</option>\n' +
  372. ' <option value="3">深圳</option>\n' +
  373. ' <option value="4">杭州</option>\n' +
  374. ' </select>\n' +
  375. ' </div>\n' +
  376. ' </div>\n';
  377. return html;
  378. }
  379. function checkbox_a(size) {
  380. var html = ' <div class="layui-form-item">\n' +
  381. ' <label class="layui-form-label">复选框</label>\n' +
  382. ' <div class="layui-input-' + size + '">\n' +
  383. ' <input type="checkbox" name="' + key + '[]" title="写作">\n' +
  384. ' <input type="checkbox" name="' + key + '[]" title="阅读" checked>\n' +
  385. ' <input type="checkbox" name="' + key + '[]" title="发呆">\n' +
  386. ' </div>\n' +
  387. ' </div>\n';
  388. return html;
  389. }
  390. function checkbox_b(size) {
  391. var html = ' <div class="layui-form-item">\n' +
  392. ' <label class="layui-form-label">开关</label>\n' +
  393. ' <div class="layui-input-' + size + '">\n' +
  394. ' <input type="checkbox" name="' + key + '" lay-skin="switch">\n' +
  395. ' </div>\n' +
  396. ' </div>\n';
  397. return html;
  398. }
  399. function radio(size) {
  400. var html = ' <div class="layui-form-item">\n' +
  401. ' <label class="layui-form-label">单选框</label>\n' +
  402. ' <div class="layui-input-' + size + '">\n' +
  403. ' <input type="radio" name="' + key + '" value="男" title="男">\n' +
  404. ' <input type="radio" name="' + key + '" value="女" title="女" checked>\n' +
  405. ' </div>\n' +
  406. ' </div>\n';
  407. return html;
  408. }
  409. function textarea(size) {
  410. var html = ' <div class="layui-form-item layui-form-text">\n' +
  411. ' <label class="layui-form-label">文本域</label>\n' +
  412. ' <div class="layui-input-' + size + '">\n' +
  413. ' <textarea name="' + key + '" placeholder="请输入内容" class="layui-textarea"></textarea>\n' +
  414. ' </div>\n' +
  415. ' </div>\n';
  416. return html;
  417. }
  418. function submits(size) {
  419. var html = ' <div class="layui-form-item">\n' +
  420. ' <div class="layui-input-' + size + '">\n' +
  421. ' <button class="pear-btn pear-btn-primary" lay-submit="" lay-filter="formDemo">立即提交</button>\n' + //变更
  422. ' <button type="reset" class="pear-btn">重置</button>\n' + //变更
  423. ' </div>\n' +
  424. ' </div>\n';
  425. return html;
  426. }
  427. function jscode() {
  428. var html = '<script>\n' +
  429. ' layui.use('+JSON.stringify(module)+', function(){\n' +
  430. ' var form = layui.form;\n' +
  431. ''+ allJS +
  432. ' // 提交表单\n' +
  433. ' form.on(\'submit(formDemo)\', function(data){\n' +
  434. ' layer.msg(JSON.stringify(data.field));\n' +
  435. ' return false;\n' +
  436. ' });\n' +
  437. ' });\n' +
  438. '</script>';
  439. return html;
  440. }
  441. function randStrName() {
  442. return 'a' + Math.random().toString(36).substr(9);
  443. }
  444. form.on('submit(formDemo)', function(data) {
  445. layer.msg(JSON.stringify(data.field));
  446. return false;
  447. });
  448. exports('design', {});
  449. });