builder.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  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.query($("#query-form"));
  56. this.api.bindevent();
  57. },
  58. config: function (form) {
  59. form.on("click", ".config-list a", function () {
  60. $(".config-list a").removeClass("btn-info active");
  61. $(this).addClass("btn-info active");
  62. if ($(this).data("type") == "array") {
  63. if ($("#func", form).val().indexOf("json_encode") == -1) {
  64. $("#func", form).val("json_encode");
  65. }
  66. } else {
  67. if ($("#func", form).val().indexOf("json_encode") > -1) {
  68. $("#func", form).val("");
  69. }
  70. }
  71. $(".btn-command", form).trigger("click");
  72. return false;
  73. });
  74. form.on("click", ".btn-command", function () {
  75. if ($(".config-list a.active").size() == 0) {
  76. Layer.msg("请选择")
  77. return false;
  78. }
  79. var data = $(".config-list a.active").data();
  80. data.defaultvalue = $("#defaultvalue", form).val() ? "|default='" + $("#defaultvalue", form).val() + "'" : "";
  81. data.func = $("#func", form).val() ? "|" + $("#func", form).val() : "";
  82. output.val(Template("configtpl", data));
  83. flash(output);
  84. });
  85. },
  86. arclist: function (form) {
  87. var model = $("#model", form);
  88. var channel = $("#channel", form);
  89. var channeltype = $("#channeltype", form);
  90. var field = $("#field", form);
  91. var addon = $("#addon", form);
  92. var channelfield = $("#channelfield", form);
  93. var userfield = $("#userfield", form);
  94. form.on("click", ".btn-command", function () {
  95. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'channel', 'type', 'with', 'field', 'addon'];
  96. var data = {attrs: []};
  97. $(form.serializeArray()).each(function (i, j) {
  98. if (j.name == 'id' && j.value == '') {
  99. j.value = 'item';
  100. }
  101. if (j.name == 'field' || j.name == 'addon' || j.name == 'with' || j.name == 'channel') {
  102. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  103. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  104. }), function (j) {
  105. return $(j).attr("value");
  106. }).join(",");
  107. }
  108. if (typeof data[j.name] == 'undefined') {
  109. data[j.name] = j.value;
  110. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  111. data.attrs.push(j.name + '="' + j.value + '"');
  112. }
  113. }
  114. });
  115. var tips = check(data);
  116. if (tips) {
  117. Layer.msg(tips);
  118. return;
  119. }
  120. var columns = [];
  121. if (field.find("option[value!='']:selected").size() > 0) {
  122. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  123. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  124. });
  125. }
  126. if (addon.find("option[value='']:selected").size() == 0) {
  127. $(addon.find("option" + (addon.find("option[value='true']:selected").size() > 0 ? "[value!=''][value!='true']" : ":selected"))).each(function (i, j) {
  128. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  129. });
  130. }
  131. if (channelfield.find("option:selected").size() > 0) {
  132. $(channelfield.find("option:selected")).each(function (i, j) {
  133. columns.push("{$" + data.id + ".channel." + $(j).attr("value") + "}");
  134. });
  135. }
  136. if (userfield.find("option:selected").size() > 0) {
  137. $(userfield.find("option:selected")).each(function (i, j) {
  138. columns.push("{$" + data.id + ".user." + $(j).attr("value") + "}");
  139. });
  140. }
  141. if (columns.length == 0) {
  142. columns.push("{//你可以从左侧主表字段、副表字段、栏目字段、会员字段中选择需要显示的字段信息}");
  143. columns.push("{//你也可以直接在循环体内添加文字、标签或判断}");
  144. }
  145. data.attrs = data.attrs.join(" ");
  146. data.columns = columns;
  147. output.val(Template("arclisttpl", data));
  148. flash(output);
  149. return false;
  150. });
  151. form.on("change", "#model", function () {
  152. $("option", channel).prop("disabled", false).prop("selected", false);
  153. addon.find("option").prop("selected", false);
  154. var id = $(this).val();
  155. if (!id) {
  156. $("option[data-type='link']", channel).prop("disabled", true);
  157. } else {
  158. $("option[data-model!='" + id + "']", channel).prop("disabled", true);
  159. }
  160. addon.prop("disabled", false);
  161. refresh(channel);
  162. refresh(addon);
  163. return false;
  164. });
  165. form.on("change", "#channel", function () {
  166. var modelIds = [];
  167. $("option:selected", channel).each(function () {
  168. if (modelIds.indexOf($(this).data("model")) == -1) {
  169. modelIds.push($(this).data("model"));
  170. }
  171. });
  172. if (modelIds.length > 1) {
  173. addon.prop("disabled", true).html("");
  174. addon.data("id", currentId[name]);
  175. } else {
  176. addon.prop("disabled", false);
  177. }
  178. refresh(addon);
  179. return false;
  180. });
  181. var currentId = {channel: '', model: ''};
  182. form.on("change", "#channel,#model", function () {
  183. var orderby = $("#orderby", form);
  184. var name = $(this).attr("name");
  185. currentId[name] = name == "model" ? $(this).val() : $("option:selected", this).data("model");
  186. if (currentId[name]) {
  187. if (addon.data("id") != currentId[name]) {
  188. $("optgroup", orderby).remove();
  189. Fast.api.ajax({
  190. url: "cms/builder/get_model_fields",
  191. data: {"id": currentId[name]}
  192. }, function (data, ret) {
  193. var fields = data.fields;
  194. fields.unshift({name: "", title: "无"}, {name: "true", title: "全部"});
  195. var html = [];
  196. for (var i = 0; i < fields.length; i++) {
  197. html.push("<option value='" + fields[i].name + "' data-subtext='" + fields[i].title + "'>" + fields[i].name + "</option>");
  198. }
  199. addon.html(html.join(""));
  200. addon.data("id", currentId[name]);
  201. orderby.append("<optgroup label='副表'>" + html.slice(2).join("") + "</optgroup>");
  202. refresh(addon);
  203. refresh(orderby);
  204. return false;
  205. });
  206. }
  207. } else {
  208. $("optgroup", orderby).remove();
  209. addon.data("id", currentId[name]);
  210. refresh(addon);
  211. refresh(orderby);
  212. }
  213. return false;
  214. });
  215. var oldFieldValue = [];
  216. form.on("change", "#field", function () {
  217. var value = $(this).val();
  218. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  219. field.find("option").prop("selected", false);
  220. field.find("option[value='']").prop("selected", true);
  221. } else {
  222. field.find("option[value='']").prop("selected", false);
  223. field.find("option[value='id'],option[value='user_id'],option[value='channel_id'],option[value='title'],option[value='diyname']").prop("selected", true);
  224. }
  225. refresh(field);
  226. oldFieldValue = field.val();
  227. });
  228. form.on("change", "#addon", function () {
  229. var value = $(this).val();
  230. if (value.indexOf("") > -1 || value.indexOf("true") > -1) {
  231. var selected = value.indexOf("true") > -1 ? "true" : "";
  232. addon.find("option").prop("selected", false);
  233. addon.find("option[value='" + selected + "']").prop("selected", true);
  234. refresh(addon);
  235. }
  236. });
  237. },
  238. channellist: function (form) {
  239. var model = $("[name='model']", form);
  240. var channel = $("[name='typeid']", form);
  241. var field = $("[name='field']", form);
  242. form.on("click", ".btn-command", function () {
  243. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'typeid', 'type', 'with', 'field'];
  244. var data = {attrs: []};
  245. $(form.serializeArray()).each(function (i, j) {
  246. if (j.name == 'id' && j.value == '') {
  247. j.value = 'item';
  248. }
  249. if (j.name == 'field' || j.name == 'typeid') {
  250. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  251. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  252. }), function (j) {
  253. return $(j).attr("value");
  254. }).join(",");
  255. }
  256. if (typeof data[j.name] == 'undefined') {
  257. data[j.name] = j.value;
  258. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  259. data.attrs.push(j.name + '="' + j.value + '"');
  260. }
  261. }
  262. });
  263. var tips = check(data);
  264. if (tips) {
  265. Layer.msg(tips);
  266. return;
  267. }
  268. var columns = [];
  269. if (field.find("option[value!='']:selected").size() > 0) {
  270. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  271. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  272. });
  273. }
  274. if (columns.length == 0) {
  275. columns.push("{//你可以从左侧主表字段、中选择需要显示的字段信息}");
  276. }
  277. data.attrs = data.attrs.join(" ");
  278. data.columns = columns;
  279. output.val(Template("channellisttpl", data));
  280. flash(output);
  281. return false;
  282. });
  283. model.on("change", function () {
  284. $("option", channel).prop("disabled", false).prop("selected", false);
  285. var id = $(this).val();
  286. if (!id) {
  287. $("option[data-type='link']", channel).prop("disabled", true);
  288. } else {
  289. $("option[data-model!='" + id + "']", channel).prop("disabled", true);
  290. }
  291. refresh(channel);
  292. return false;
  293. });
  294. var oldFieldValue = [];
  295. field.on("change", function () {
  296. var value = $(this).val();
  297. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  298. field.find("option").prop("selected", false);
  299. field.find("option[value='']").prop("selected", true);
  300. } else {
  301. field.find("option[value='']").prop("selected", false);
  302. field.find("option[value='id'],option[value='name'],option[value='diyname']").prop("selected", true);
  303. }
  304. refresh(field);
  305. oldFieldValue = field.val();
  306. });
  307. },
  308. spagelist: function (form) {
  309. var model = $("[name='model']", form);
  310. var channel = $("[name='typeid']", form);
  311. var field = $("[name='field']", form);
  312. form.on("click", ".btn-command", function () {
  313. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  314. var data = {attrs: []};
  315. $(form.serializeArray()).each(function (i, j) {
  316. if (j.name == 'id' && j.value == '') {
  317. j.value = 'item';
  318. }
  319. if (j.name == 'field' || j.name == 'type') {
  320. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  321. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  322. }), function (j) {
  323. return $(j).attr("value");
  324. }).join(",");
  325. }
  326. if (typeof data[j.name] == 'undefined') {
  327. data[j.name] = j.value;
  328. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  329. data.attrs.push(j.name + '="' + j.value + '"');
  330. }
  331. }
  332. });
  333. var tips = check(data);
  334. if (tips) {
  335. Layer.msg(tips);
  336. return;
  337. }
  338. var columns = [];
  339. if (field.find("option[value!='']:selected").size() > 0) {
  340. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  341. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  342. });
  343. }
  344. if (columns.length == 0) {
  345. columns.push("{//你可以从左侧主表字段、中选择需要显示的字段信息}");
  346. }
  347. data.attrs = data.attrs.join(" ");
  348. data.columns = columns;
  349. output.val(Template("spagelisttpl", data));
  350. flash(output);
  351. return false;
  352. });
  353. var oldFieldValue = [];
  354. field.on("change", function () {
  355. var value = $(this).val();
  356. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  357. field.find("option").prop("selected", false);
  358. field.find("option[value='']").prop("selected", true);
  359. } else {
  360. field.find("option[value='']").prop("selected", false);
  361. field.find("option[value='id'],option[value='title'],option[value='diyname']").prop("selected", true);
  362. }
  363. refresh(field);
  364. oldFieldValue = field.val();
  365. });
  366. },
  367. speciallist: function (form) {
  368. var model = $("[name='model']", form);
  369. var channel = $("[name='typeid']", form);
  370. var field = $("[name='field']", form);
  371. form.on("click", ".btn-command", function () {
  372. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  373. var data = {attrs: []};
  374. $(form.serializeArray()).each(function (i, j) {
  375. if (j.name == 'id' && j.value == '') {
  376. j.value = 'item';
  377. }
  378. if (j.name == 'field' || j.name == 'type') {
  379. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  380. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  381. }), function (j) {
  382. return $(j).attr("value");
  383. }).join(",");
  384. }
  385. if (typeof data[j.name] == 'undefined') {
  386. data[j.name] = j.value;
  387. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  388. data.attrs.push(j.name + '="' + j.value + '"');
  389. }
  390. }
  391. });
  392. var tips = check(data);
  393. if (tips) {
  394. Layer.msg(tips);
  395. return;
  396. }
  397. var columns = [];
  398. if (field.find("option[value!='']:selected").size() > 0) {
  399. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  400. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  401. });
  402. }
  403. if (columns.length == 0) {
  404. columns.push("{//你可以从左侧主表字段、中选择需要显示的字段信息}");
  405. }
  406. data.attrs = data.attrs.join(" ");
  407. data.columns = columns;
  408. output.val(Template("speciallisttpl", data));
  409. flash(output);
  410. return false;
  411. });
  412. var oldFieldValue = [];
  413. field.on("change", function () {
  414. var value = $(this).val();
  415. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  416. field.find("option").prop("selected", false);
  417. field.find("option[value='']").prop("selected", true);
  418. } else {
  419. field.find("option[value='']").prop("selected", false);
  420. field.find("option[value='id'],option[value='title'],option[value='image'],option[value='diyname']").prop("selected", true);
  421. }
  422. refresh(field);
  423. oldFieldValue = field.val();
  424. });
  425. },
  426. blocklist: function (form) {
  427. var field = $("[name='field']", form);
  428. form.on("click", ".btn-command", function () {
  429. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'name', 'with', 'field'];
  430. var data = {attrs: []};
  431. $(form.serializeArray()).each(function (i, j) {
  432. if (j.name == 'id' && j.value == '') {
  433. j.value = 'item';
  434. }
  435. if (j.name == 'field' || j.name == 'type' || j.name == 'name') {
  436. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  437. return ["imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  438. }), function (j) {
  439. return $(j).attr("value");
  440. }).join(",");
  441. }
  442. if (typeof data[j.name] == 'undefined') {
  443. data[j.name] = j.value;
  444. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  445. data.attrs.push(j.name + '="' + j.value + '"');
  446. }
  447. }
  448. });
  449. var tips = check(data);
  450. if (tips) {
  451. Layer.msg(tips);
  452. return;
  453. }
  454. var columns = [];
  455. if (field.find("option[value!='']:selected").size() > 0) {
  456. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  457. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  458. });
  459. }
  460. if (columns.length == 0) {
  461. columns.push("{//你可以从左侧主表字段、中选择需要显示的字段信息}");
  462. }
  463. data.attrs = data.attrs.join(" ");
  464. data.columns = columns;
  465. output.val(Template("blocklisttpl", data));
  466. flash(output);
  467. return false;
  468. });
  469. var oldFieldValue = [];
  470. field.on("change", function () {
  471. var value = $(this).val();
  472. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  473. field.find("option").prop("selected", false);
  474. field.find("option[value='']").prop("selected", true);
  475. } else {
  476. field.find("option[value='']").prop("selected", false);
  477. field.find("option[value='id'],option[value='title'],option[value='url'],option[value='image'],option[value='begintime'],option[value='endtime']").prop("selected", true);
  478. }
  479. refresh(field);
  480. oldFieldValue = field.val();
  481. });
  482. },
  483. userlist: function (form) {
  484. var field = $("[name='field']", form);
  485. form.on("click", ".btn-command", function () {
  486. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'orderby', 'orderway', 'offset', 'limit', 'cache', 'model', 'type', 'with', 'field'];
  487. var data = {attrs: []};
  488. $(form.serializeArray()).each(function (i, j) {
  489. if (j.name == 'id' && j.value == '') {
  490. j.value = 'item';
  491. }
  492. if (j.name == 'field' || j.name == 'type') {
  493. j.value = $.map($("#" + j.name + " option:selected", form).filter(function (key, value) {
  494. return ["url", "fullurl", "imglink", "textlink", "img"].indexOf($(value).attr("value")) == -1;
  495. }), function (j) {
  496. return $(j).attr("value");
  497. }).join(",");
  498. }
  499. if (typeof data[j.name] == 'undefined') {
  500. data[j.name] = j.value;
  501. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  502. data.attrs.push(j.name + '="' + j.value + '"');
  503. }
  504. }
  505. });
  506. var tips = check(data);
  507. if (tips) {
  508. Layer.msg(tips);
  509. return;
  510. }
  511. var columns = [];
  512. if (field.find("option[value!='']:selected").size() > 0) {
  513. $("option" + (field.find("option:selected").size() ? ":selected" : "") + "[value!='']", field).each(function (i, j) {
  514. columns.push("{$" + data.id + "." + $(j).attr("value") + "}");
  515. });
  516. }
  517. if (columns.length == 0) {
  518. columns.push("{//你可以从左侧主表字段、中选择需要显示的字段信息}");
  519. }
  520. data.attrs = data.attrs.join(" ");
  521. data.columns = columns;
  522. output.val(Template("userlisttpl", data));
  523. flash(output);
  524. return false;
  525. });
  526. var oldFieldValue = [];
  527. field.on("change", function () {
  528. var value = $(this).val();
  529. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  530. field.find("option").prop("selected", false);
  531. field.find("option[value='']").prop("selected", true);
  532. } else {
  533. field.find("option[value='']").prop("selected", false);
  534. field.find("option[value='id'],option[value='avatar'],option[value='nickname']").prop("selected", true);
  535. }
  536. refresh(field);
  537. oldFieldValue = field.val();
  538. });
  539. },
  540. query: function (form) {
  541. var field = $("[name='field']", form);
  542. form.on("click", ".btn-command", function () {
  543. var attrs = ['id', 'empty', 'key', 'mod', 'row', 'sql', 'bind'];
  544. var data = {attrs: []};
  545. $(form.serializeArray()).each(function (i, j) {
  546. if (j.name == 'id' && j.value == '') {
  547. j.value = 'item';
  548. }
  549. if (typeof data[j.name] == 'undefined') {
  550. data[j.name] = j.value;
  551. if (attrs.indexOf(j.name) > -1 && j.value != '') {
  552. data.attrs.push(j.name + '="' + j.value + '"');
  553. }
  554. }
  555. });
  556. var tips = check(data);
  557. if (tips) {
  558. Layer.msg(tips);
  559. return;
  560. }
  561. data.attrs = data.attrs.join(" ");
  562. output.val(Template("querytpl", data));
  563. flash(output);
  564. return false;
  565. });
  566. var oldFieldValue = [];
  567. field.on("change", function () {
  568. var value = $(this).val();
  569. if (value.indexOf("") > -1 && oldFieldValue.indexOf("") == -1) {
  570. field.find("option").prop("selected", false);
  571. field.find("option[value='']").prop("selected", true);
  572. } else {
  573. field.find("option[value='']").prop("selected", false);
  574. field.find("option[value='id'],option[value='avatar'],option[value='nickname']").prop("selected", true);
  575. }
  576. refresh(field);
  577. oldFieldValue = field.val();
  578. });
  579. },
  580. api: {
  581. bindevent: function () {
  582. Form.api.bindevent($("form[role=form]"));
  583. //点击复制
  584. var clipboard = new ClipboardJS('.btn-copy', {
  585. text: function () {
  586. return output.val();
  587. }
  588. });
  589. clipboard.on('success', function (e) {
  590. Layer.msg("复制成功");
  591. e.clearSelection();
  592. });
  593. }
  594. }
  595. };
  596. return Controller;
  597. });