builder.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'clipboard'], function ($, undefined, Backend, Table, Form, ClipboardJS) {
  2. var output = $("#output");
  3. var refresh = function (obj) {
  4. if (obj.data("selectpicker")) {
  5. obj.selectpicker('refresh');
  6. }
  7. };
  8. var check = function (data) {
  9. if (data.id && data.key && data.id == data.key) {
  10. return "循环变量id和键名变量key不能相同";
  11. }
  12. if (data.id && data.id.match(/^[0-9]+/)) {
  13. return "循环变量id不能以数字开头";
  14. }
  15. if (data.key && data.key.match(/^[0-9]+/)) {
  16. return "键名变量key不能以数字开头";
  17. }
  18. if (data.limit && !data.limit.match(/^(([0-9]+)|([0-9]+\,[0-9]+))$/)) {
  19. return "偏移值格式不正确";
  20. }
  21. if (data.cache && !data.cache.match(/^(true|false|[0-9]+)$/)) {
  22. return "缓存时长只能是true、false或具体的数字";
  23. }
  24. return '';
  25. };
  26. var flash = function (dom) {
  27. var flashClass = "flash";
  28. dom.addClass(flashClass);
  29. dom.on('animationend', function () {
  30. dom.removeClass(flashClass);
  31. });
  32. };
  33. $(document).on("click", ".btn-result", function () {
  34. Fast.api.ajax({
  35. url: "cms/builder/parse",
  36. data: {"tag": output.val()}
  37. }, function (data, ret) {
  38. data = $.trim(data);
  39. data = data ? data : "未配置循环字段或返回结果为空";
  40. $("#result").val(data);
  41. flash($("#result"));
  42. return false;
  43. }, function (data, ret) {
  44. });
  45. });
  46. var Controller = {
  47. index: function () {
  48. this.config($("#config-form"));
  49. this.arclist($("#arclist-form"));
  50. this.channellist($("#channellist-form"));
  51. this.spagelist($("#spagelist-form"));
  52. this.speciallist($("#speciallist-form"));
  53. this.blocklist($("#blocklist-form"));
  54. this.userlist($("#userlist-form"));
  55. this.diydatalist($("#diydatalist-form"));
  56. this.query($("#query-form"));
  57. this.api.bindevent();
  58. },
  59. config: function (form) {
  60. form.on("click", ".config-list a", function () {
  61. $(".config-list a").removeClass("btn-info active");
  62. $(this).addClass("btn-info active");
  63. if ($(this).data("type") == "array") {
  64. if ($("#func", form).val().indexOf("json_encode") == -1) {
  65. $("#func", form).val("json_encode");
  66. }
  67. } else {
  68. if ($("#func", form).val().indexOf("json_encode") > -1) {
  69. $("#func", form).val("");
  70. }
  71. }
  72. $(".btn-command", form).trigger("click");
  73. return false;
  74. });
  75. form.on("click", ".btn-command", function () {
  76. if ($(".config-list a.active").length == 0) {
  77. Layer.msg("请选择")
  78. return false;
  79. }
  80. var data = $(".config-list a.active").data();
  81. data.defaultvalue = $("#defaultvalue", form).val() ? "|default='" + $("#defaultvalue", form).val() + "'" : "";
  82. data.func = $("#func", form).val() ? "|" + $("#func", form).val() : "";
  83. output.val(Template("configtpl", data));
  84. flash(output);
  85. });
  86. },
  87. arclist: function (form) {
  88. var model = $("#model", form);
  89. var channel = $("#channel", form);
  90. var channeltype = $("#channeltype", form);
  91. var field = $("#field", form);
  92. var addon = $("#addon", form);
  93. var channelfield = $("#channelfield", form);
  94. var userfield = $("#userfield", form);
  95. form.on("click", ".btn-command", function () {
  96. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'channel', 'type', 'with', 'field', 'addon'];
  97. var data = {attrs: []};
  98. $(form.serializeArray()).each(function (i, j) {
  99. if (j.name == 'id' && j.value == '') {
  100. j.value = 'item';
  101. }
  102. if (j.name == 'field' || j.name == 'addon' || j.name == 'with' || j.name == 'channel') {
  103. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  104. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  105. }), function (j) {
  106. return $(j).attr("value");
  107. }).join(",");
  108. }
  109. if (typeof data[j.name] == 'undefined') {
  110. data[j.name] = j.value;
  111. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  112. data.attrs.push(j.name + '="' + j.value + '"');
  113. }
  114. }
  115. });
  116. var tips = check(data);
  117. if (tips) {
  118. Layer.msg(tips);
  119. return;
  120. }
  121. var columns = [];
  122. if (field.find("option[value!='']:selected").length > 0) {
  123. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  124. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  125. });
  126. }
  127. if (addon.find("option[value='']:selected").length == 0) {
  128. $(addon.find("option" + (addon.find("option[value='true']:selected").length > 0 ? "[value!=''][value!='true']" : ":selected"))).each(function (i, j) {
  129. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  130. });
  131. }
  132. if (channelfield.find("option:selected").length > 0) {
  133. $(channelfield.find("option:selected")).each(function (i, j) {
  134. columns.push("{$" + data.id + ".channel." + $(j).attr("value") + "}");
  135. });
  136. }
  137. if (userfield.find("option:selected").length > 0) {
  138. $(userfield.find("option:selected")).each(function (i, j) {
  139. columns.push("{$" + data.id + ".user." + $(j).attr("value") + "}");
  140. });
  141. }
  142. if (columns.length == 0) {
  143. columns.push("{//你可以从左侧主表字段、副表字段、栏目字段、会员字段中选择需要显示的字段信息}");
  144. columns.push("{//你也可以直接在循环体内添加文字、标签或判断}");
  145. }
  146. data.attrs = data.attrs.join(" ");
  147. data.columns = columns;
  148. output.val(Template("arclisttpl", data));
  149. flash(output);
  150. return false;
  151. });
  152. form.on("change", "#model", function () {
  153. $("option", channel).prop("disabled", false).prop("selected", false);
  154. addon.find("option").prop("selected", false);
  155. var id = $(this).val();
  156. if (!id) {
  157. $("option[data-type='link']", channel).prop("disabled", true);
  158. } else {
  159. $("option[data-model!='" + id + "']", channel).prop("disabled", true);
  160. }
  161. addon.prop("disabled", false);
  162. refresh(channel);
  163. refresh(addon);
  164. return false;
  165. });
  166. form.on("change", "#channel", function () {
  167. var modelIds = [];
  168. $("option:selected", channel).each(function () {
  169. if (modelIds.indexOf($(this).data("model")) == -1) {
  170. modelIds.push($(this).data("model"));
  171. }
  172. });
  173. if (modelIds.length > 1) {
  174. addon.prop("disabled", true).html("");
  175. addon.data("id", currentId[name]);
  176. } else {
  177. addon.prop("disabled", false);
  178. }
  179. refresh(addon);
  180. return false;
  181. });
  182. var currentId = {channel: '', model: ''};
  183. form.on("change", "#channel,#model", function () {
  184. var orderby = $("#orderby", form);
  185. var name = $(this).attr("name");
  186. currentId[name] = name == "model" ? $(this).val() : $("option:selected", this).data("model");
  187. if (currentId[name]) {
  188. if (addon.data("id") != currentId[name]) {
  189. $("optgroup", orderby).remove();
  190. Fast.api.ajax({
  191. url: "cms/builder/get_model_fields",
  192. data: {"id": currentId[name]}
  193. }, function (data, ret) {
  194. var fields = data.fields;
  195. fields.unshift({name: "", title: "无"}, {name: "true", title: "全部"});
  196. var html = [];
  197. for (var i = 0; i < fields.length; i++) {
  198. html.push("<option value='" + fields[i].name + "' data-subtext='" + fields[i].title + "'>" + fields[i].name + "</option>");
  199. }
  200. addon.html(html.join(""));
  201. addon.data("id", currentId[name]);
  202. orderby.append("<optgroup label='副表'>" + html.slice(2).join("") + "</optgroup>");
  203. refresh(addon);
  204. refresh(orderby);
  205. return false;
  206. });
  207. }
  208. } else {
  209. $("optgroup", orderby).remove();
  210. addon.data("id", currentId[name]);
  211. refresh(addon);
  212. refresh(orderby);
  213. }
  214. return false;
  215. });
  216. var oldFieldValue = [];
  217. form.on("change", "#field", function () {
  218. var value = $(this).val();
  219. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  220. field.find("option").prop("selected", false);
  221. field.find("option[value='']").prop("selected", true);
  222. } else {
  223. field.find("option[value='']").prop("selected", false);
  224. field.find("option[value='id'],option[value='user_id'],option[value='channel_id'],option[value='title'],option[value='diyname']").prop("selected", true);
  225. }
  226. refresh(field);
  227. oldFieldValue = field.val();
  228. });
  229. form.on("change", "#addon", function () {
  230. var value = $(this).val();
  231. if (value.indexOf("") > -1 || value.indexOf("true") > -1) {
  232. var selected = value.indexOf("true") > -1 ? "true" : "";
  233. addon.find("option").prop("selected", false);
  234. addon.find("option[value='" + selected + "']").prop("selected", true);
  235. refresh(addon);
  236. }
  237. });
  238. },
  239. channellist: function (form) {
  240. var model = $("[name='model']", form);
  241. var channel = $("[name='typeid']", form);
  242. var field = $("[name='field']", form);
  243. form.on("click", ".btn-command", function () {
  244. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'typeid', 'type', 'with', 'field'];
  245. var data = {attrs: []};
  246. $(form.serializeArray()).each(function (i, j) {
  247. if (j.name == 'id' && j.value == '') {
  248. j.value = 'item';
  249. }
  250. if (j.name == 'field' || j.name == 'typeid') {
  251. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  252. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  253. }), function (j) {
  254. return $(j).attr("value");
  255. }).join(",");
  256. }
  257. if (typeof data[j.name] == 'undefined') {
  258. data[j.name] = j.value;
  259. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  260. data.attrs.push(j.name + '="' + j.value + '"');
  261. }
  262. }
  263. });
  264. var tips = check(data);
  265. if (tips) {
  266. Layer.msg(tips);
  267. return;
  268. }
  269. var columns = [];
  270. if (field.find("option[value!='']:selected").length > 0) {
  271. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  272. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  273. });
  274. }
  275. if (columns.length == 0) {
  276. columns.push("{//你可以从左侧主表字段中选择需要显示的字段信息}");
  277. }
  278. data.attrs = data.attrs.join(" ");
  279. data.columns = columns;
  280. output.val(Template("channellisttpl", data));
  281. flash(output);
  282. return false;
  283. });
  284. model.on("change", function () {
  285. $("option", channel).prop("disabled", false).prop("selected", false);
  286. var id = $(this).val();
  287. if (!id) {
  288. $("option[data-type='link']", channel).prop("disabled", true);
  289. } else {
  290. $("option[data-model!='" + id + "']", channel).prop("disabled", true);
  291. }
  292. refresh(channel);
  293. return false;
  294. });
  295. var oldFieldValue = [];
  296. field.on("change", function () {
  297. var value = $(this).val();
  298. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  299. field.find("option").prop("selected", false);
  300. field.find("option[value='']").prop("selected", true);
  301. } else {
  302. field.find("option[value='']").prop("selected", false);
  303. field.find("option[value='id'],option[value='name'],option[value='diyname']").prop("selected", true);
  304. }
  305. refresh(field);
  306. oldFieldValue = field.val();
  307. });
  308. },
  309. spagelist: function (form) {
  310. var model = $("[name='model']", form);
  311. var channel = $("[name='typeid']", form);
  312. var field = $("[name='field']", form);
  313. form.on("click", ".btn-command", function () {
  314. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  315. var data = {attrs: []};
  316. $(form.serializeArray()).each(function (i, j) {
  317. if (j.name == 'id' && j.value == '') {
  318. j.value = 'item';
  319. }
  320. if (j.name == 'field' || j.name == 'type') {
  321. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  322. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  323. }), function (j) {
  324. return $(j).attr("value");
  325. }).join(",");
  326. }
  327. if (typeof data[j.name] == 'undefined') {
  328. data[j.name] = j.value;
  329. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  330. data.attrs.push(j.name + '="' + j.value + '"');
  331. }
  332. }
  333. });
  334. var tips = check(data);
  335. if (tips) {
  336. Layer.msg(tips);
  337. return;
  338. }
  339. var columns = [];
  340. if (field.find("option[value!='']:selected").length > 0) {
  341. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  342. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  343. });
  344. }
  345. if (columns.length == 0) {
  346. columns.push("{//你可以从左侧主表字段中选择需要显示的字段信息}");
  347. }
  348. data.attrs = data.attrs.join(" ");
  349. data.columns = columns;
  350. output.val(Template("spagelisttpl", data));
  351. flash(output);
  352. return false;
  353. });
  354. var oldFieldValue = [];
  355. field.on("change", function () {
  356. var value = $(this).val();
  357. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  358. field.find("option").prop("selected", false);
  359. field.find("option[value='']").prop("selected", true);
  360. } else {
  361. field.find("option[value='']").prop("selected", false);
  362. field.find("option[value='id'],option[value='title'],option[value='diyname']").prop("selected", true);
  363. }
  364. refresh(field);
  365. oldFieldValue = field.val();
  366. });
  367. },
  368. speciallist: function (form) {
  369. var model = $("[name='model']", form);
  370. var channel = $("[name='typeid']", form);
  371. var field = $("[name='field']", form);
  372. form.on("click", ".btn-command", function () {
  373. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  374. var data = {attrs: []};
  375. $(form.serializeArray()).each(function (i, j) {
  376. if (j.name == 'id' && j.value == '') {
  377. j.value = 'item';
  378. }
  379. if (j.name == 'field' || j.name == 'type') {
  380. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  381. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  382. }), function (j) {
  383. return $(j).attr("value");
  384. }).join(",");
  385. }
  386. if (typeof data[j.name] == 'undefined') {
  387. data[j.name] = j.value;
  388. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  389. data.attrs.push(j.name + '="' + j.value + '"');
  390. }
  391. }
  392. });
  393. var tips = check(data);
  394. if (tips) {
  395. Layer.msg(tips);
  396. return;
  397. }
  398. var columns = [];
  399. if (field.find("option[value!='']:selected").length > 0) {
  400. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  401. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  402. });
  403. }
  404. if (columns.length == 0) {
  405. columns.push("{//你可以从左侧主表字段中选择需要显示的字段信息}");
  406. }
  407. data.attrs = data.attrs.join(" ");
  408. data.columns = columns;
  409. output.val(Template("speciallisttpl", data));
  410. flash(output);
  411. return false;
  412. });
  413. var oldFieldValue = [];
  414. field.on("change", function () {
  415. var value = $(this).val();
  416. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  417. field.find("option").prop("selected", false);
  418. field.find("option[value='']").prop("selected", true);
  419. } else {
  420. field.find("option[value='']").prop("selected", false);
  421. field.find("option[value='id'],option[value='title'],option[value='image'],option[value='diyname']").prop("selected", true);
  422. }
  423. refresh(field);
  424. oldFieldValue = field.val();
  425. });
  426. },
  427. blocklist: function (form) {
  428. var field = $("[name='field']", form);
  429. form.on("click", ".btn-command", function () {
  430. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'name', 'with', 'field'];
  431. var data = {attrs: []};
  432. $(form.serializeArray()).each(function (i, j) {
  433. if (j.name == 'id' && j.value == '') {
  434. j.value = 'item';
  435. }
  436. if (j.name == 'field' || j.name == 'type' || j.name == 'name') {
  437. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  438. return ["imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  439. }), function (j) {
  440. return $(j).attr("value");
  441. }).join(",");
  442. }
  443. if (typeof data[j.name] == 'undefined') {
  444. data[j.name] = j.value;
  445. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  446. data.attrs.push(j.name + '="' + j.value + '"');
  447. }
  448. }
  449. });
  450. var tips = check(data);
  451. if (tips) {
  452. Layer.msg(tips);
  453. return;
  454. }
  455. var columns = [];
  456. if (field.find("option[value!='']:selected").length > 0) {
  457. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  458. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  459. });
  460. }
  461. if (columns.length == 0) {
  462. columns.push("{//你可以从左侧主表字段中选择需要显示的字段信息}");
  463. }
  464. data.attrs = data.attrs.join(" ");
  465. data.columns = columns;
  466. output.val(Template("blocklisttpl", data));
  467. flash(output);
  468. return false;
  469. });
  470. var oldFieldValue = [];
  471. field.on("change", function () {
  472. var value = $(this).val();
  473. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  474. field.find("option").prop("selected", false);
  475. field.find("option[value='']").prop("selected", true);
  476. } else {
  477. field.find("option[value='']").prop("selected", false);
  478. field.find("option[value='id'],option[value='title'],option[value='url'],option[value='image'],option[value='begintime'],option[value='endtime']").prop("selected", true);
  479. }
  480. refresh(field);
  481. oldFieldValue = field.val();
  482. });
  483. },
  484. userlist: function (form) {
  485. var field = $("[name='field']", form);
  486. form.on("click", ".btn-command", function () {
  487. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  488. var data = {attrs: []};
  489. $(form.serializeArray()).each(function (i, j) {
  490. if (j.name == 'id' && j.value == '') {
  491. j.value = 'item';
  492. }
  493. if (j.name == 'field' || j.name == 'type') {
  494. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  495. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  496. }), function (j) {
  497. return $(j).attr("value");
  498. }).join(",");
  499. }
  500. if (typeof data[j.name] == 'undefined') {
  501. data[j.name] = j.value;
  502. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  503. data.attrs.push(j.name + '="' + j.value + '"');
  504. }
  505. }
  506. });
  507. var tips = check(data);
  508. if (tips) {
  509. Layer.msg(tips);
  510. return;
  511. }
  512. var columns = [];
  513. if (field.find("option[value!='']:selected").length > 0) {
  514. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  515. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  516. });
  517. }
  518. if (columns.length == 0) {
  519. columns.push("{//你可以从左侧主表字段中选择需要显示的字段信息}");
  520. }
  521. data.attrs = data.attrs.join(" ");
  522. data.columns = columns;
  523. output.val(Template("userlisttpl", data));
  524. flash(output);
  525. return false;
  526. });
  527. var oldFieldValue = [];
  528. field.on("change", function () {
  529. var value = $(this).val();
  530. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  531. field.find("option").prop("selected", false);
  532. field.find("option[value='']").prop("selected", true);
  533. } else {
  534. field.find("option[value='']").prop("selected", false);
  535. field.find("option[value='id'],option[value='avatar'],option[value='nickname']").prop("selected", true);
  536. }
  537. refresh(field);
  538. oldFieldValue = field.val();
  539. });
  540. },
  541. diydatalist: function (form) {
  542. var field = $("[name='field']", form);
  543. form.on("click", ".btn-command", function () {
  544. var diyform_id = $("#diyform_id").val();
  545. if (!diyform_id) {
  546. Layer.msg("请选择自定义表单");
  547. return false;
  548. }
  549. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  550. var data = {attrs: ["diyform" + '="' + diyform_id + '"']};
  551. $(form.serializeArray()).each(function (i, j) {
  552. if (j.name == 'id' && j.value == '') {
  553. j.value = 'item';
  554. }
  555. if (j.name == 'field') {
  556. return true;
  557. }
  558. if (typeof data[j.name] == 'undefined') {
  559. data[j.name] = j.value;
  560. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  561. data.attrs.push(j.name + '="' + j.value + '"');
  562. }
  563. }
  564. });
  565. var tips = check(data);
  566. if (tips) {
  567. Layer.msg(tips);
  568. return;
  569. }
  570. var columns = [];
  571. if (field.find("option[value!='']:selected").length > 0) {
  572. $("option" + (field.find("option:selected").length ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  573. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  574. });
  575. }
  576. if (columns.length == 0) {
  577. columns.push("{//你可以从左侧选择字段中选择需要显示的字段信息}");
  578. }
  579. data.attrs = data.attrs.join(" ");
  580. data.columns = columns;
  581. output.val(Template("diydatalisttpl", data));
  582. flash(output);
  583. return false;
  584. });
  585. var oldFieldValue = [];
  586. field.on("change", function () {
  587. var diyform_id = $("#diyform_id").val();
  588. var value = $(this).val();
  589. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  590. field.find("option").prop("selected", false);
  591. field.find("option[data-id='" + diyform_id + "'][value='']").prop("selected", true);
  592. } else {
  593. field.find("option[value='']").prop("selected", false);
  594. field.find("option[data-id='" + diyform_id + "'][value='id']").prop("selected", true);
  595. }
  596. refresh(field);
  597. oldFieldValue = field.val();
  598. });
  599. form.on("change", "#diyform_id", function () {
  600. var value = $(this).val();
  601. $("select[name='field'] option[data-id],select[name='orderby'] option[data-id]", form).prop("selected", false).prop("disabled", true).addClass("hidden");
  602. $("select[name='field'] option[data-id='" + value + "'],select[name='orderby'] option[data-id='" + value + "']", form).prop("disabled", false).removeClass("hidden");
  603. $("select[name='field'],select[name='orderby']", form).selectpicker("refresh");
  604. });
  605. },
  606. query: function (form) {
  607. var field = $("[name='field']", form);
  608. form.on("click", ".btn-command", function () {
  609. var sql = $("#sql").val();
  610. if (sql == '') {
  611. Layer.msg("请输入SQL语句");
  612. return false;
  613. }
  614. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'sql', 'bind'];
  615. var data = {attrs: []};
  616. $(form.serializeArray()).each(function (i, j) {
  617. if (j.name == 'id' && j.value == '') {
  618. j.value = 'item';
  619. }
  620. if (typeof data[j.name] == 'undefined') {
  621. data[j.name] = j.value;
  622. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  623. data.attrs.push(j.name + '="' + j.value + '"');
  624. }
  625. }
  626. });
  627. var tips = check(data);
  628. if (tips) {
  629. Layer.msg(tips);
  630. return;
  631. }
  632. data.attrs = data.attrs.join(" ");
  633. output.val(Template("querytpl", data));
  634. flash(output);
  635. return false;
  636. });
  637. var oldFieldValue = [];
  638. field.on("change", function () {
  639. var value = $(this).val();
  640. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  641. field.find("option").prop("selected", false);
  642. field.find("option[value='']").prop("selected", true);
  643. } else {
  644. field.find("option[value='']").prop("selected", false);
  645. field.find("option[value='id'],option[value='avatar'],option[value='nickname']").prop("selected", true);
  646. }
  647. refresh(field);
  648. oldFieldValue = field.val();
  649. });
  650. },
  651. api: {
  652. bindevent: function () {
  653. Form.api.bindevent($("form[role=form]"));
  654. //点击复制
  655. var clipboard = new ClipboardJS('.btn-copy', {
  656. text: function () {
  657. return output.val();
  658. }
  659. });
  660. clipboard.on('success', function (e) {
  661. Layer.msg("复制成功");
  662. e.clearSelection();
  663. });
  664. }
  665. }
  666. };
  667. return Controller;
  668. });