block.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form','selectpage'], function ($, undefined, Backend, Table, Form, Selectpage) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'special/block/index?page_id='+Config.page_id,
  8. add_url: 'special/block/add?page_id='+Config.page_id,
  9. edit_url: 'special/block/edit',
  10. del_url: 'special/block/del',
  11. multi_url: 'special/block/multi',
  12. table: 'special_block',
  13. }
  14. });
  15. var table = $("#table");
  16. // 初始化表格
  17. table.bootstrapTable({
  18. url: $.fn.bootstrapTable.defaults.extend.index_url,
  19. pk: 'id',
  20. sortName: 'weigh',
  21. columns: [
  22. [
  23. {checkbox: true},
  24. {field: 'id', title: __('Id'), operate:false},
  25. {field: 'page_id', title: __('Page_id'), operate:false},
  26. {field: 'block_name', title: __('Block_name'), operate:'LIKE %...%'},
  27. {field: 'block_type', title: __('Block_type'), visible:false, searchList: {"1":__('Block_type 1'),"3":__('Block_type 3'),"4":__('Block_type 4'),"5":__('Block_type 5')}},
  28. {field: 'block_type_text', title: __('Block_type'), operate:false},
  29. {field: 'weigh', title: __('Weigh'), operate:false},
  30. {field: 'createtime', title: __('Createtime'), operate:false, addclass:'datetimerange', formatter: Table.api.formatter.datetime},
  31. {field: 'updatetime', title: __('Updatetime'), operate:false, addclass:'datetimerange', formatter: Table.api.formatter.datetime},
  32. {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate}
  33. ]
  34. ],
  35. onPostBody: function () {
  36. $(".btn-dragsort").hide();
  37. }
  38. });
  39. // 为表格绑定事件
  40. Table.api.bindevent(table);
  41. },
  42. add: function () {
  43. window.scene = 'add';
  44. init();
  45. Controller.api.bindevent();
  46. },
  47. edit: function () {
  48. window.scene = 'edit';
  49. setBlockTypeSelect();
  50. init();
  51. Controller.api.bindevent();
  52. },
  53. api: {
  54. bindevent: function () {
  55. $("#add-form, #edit-form").data("validator-options", {
  56. ignore: ':hidden',
  57. beforeSubmit: function (form) {
  58. if (!columnRequired("#c-block_name")) {
  59. return false;
  60. }
  61. console.log(12);
  62. var block_type = $('#c-block_type').find("option:selected").attr('value');
  63. switch (block_type) {
  64. case "1":
  65. //标题模块
  66. if (!columnRequired("#c-title")) {
  67. return false;
  68. }
  69. var title_type = $('#c-title_type').find("option:selected").attr('value');
  70. if (title_type == "4") {
  71. //图片
  72. if (!columnRequired("#c-image")) {
  73. return false;
  74. }
  75. } else {
  76. resetImage();
  77. }
  78. //重置其他没用的字段
  79. resetTextColumn("#c-content, #c-news_color, #c-btn_title, #c-book_id, #c-activity_id, #c-activity_name");
  80. resetSelectColumn("#c-news_type, #c-is_add_book, #c-go_method, #c-is_show_hot");
  81. break;
  82. case "2":
  83. //描述
  84. if (!columnRequired("#c-content")) {
  85. return false;
  86. }
  87. var is_add_book = $('#c-is_add_book').find("option:selected").attr('value');
  88. if (is_add_book == "1") {
  89. //书籍 按钮文案
  90. if (!columnRequired("#c-btn_title, #c-book_id")) {
  91. return false;
  92. }
  93. }
  94. resetImage();
  95. //重置其他没用的字段
  96. resetTextColumn("#c-title, #c-news_color, #c-activity_id, #c-activity_name");
  97. resetSelectColumn("#c-title_type, #c-news_type, #c-is_show_hot");
  98. break;
  99. case "3":
  100. //书籍
  101. if (!columnRequired("#c-book_id, #c-news_color")) {
  102. return false;
  103. }
  104. resetImage();
  105. //重置其他没用的字段
  106. resetTextColumn("#c-title, #c-activity_id, #c-activity_name, #c-content");
  107. resetSelectColumn("#c-title_type, #c-is_add_book");
  108. break;
  109. case "4":
  110. //图片
  111. if (!columnRequired("#c-content")) {
  112. return false;
  113. }
  114. var is_add_book = $('#c-is_add_book').find("option:selected").attr('value');
  115. if (is_add_book == "1") {
  116. //书籍 按钮文案
  117. if (!columnRequired("#c-book_id")) {
  118. return false;
  119. }
  120. }
  121. //重置其他没用的字段
  122. resetTextColumn("#c-news_color, #c-activity_id, #c-activity_name");
  123. resetSelectColumn("#c-title_type, #c-news_type, #c-is_show_hot");
  124. break;
  125. case "5":
  126. if (!columnRequired("#c-image, #c-activity_id")) {
  127. return false;
  128. }
  129. break;
  130. }
  131. }
  132. });
  133. var refreshactkey = function (data) {
  134. Layer.closeAll();
  135. $('#c-activity_id').val(data[0].id);
  136. $('#c-activity_name').val(data[0].name);
  137. };
  138. $(document).on('click', "#select-activity-resources", function () {
  139. parent.Backend.api.open($(this).attr("href") + "?type=0&state=1", __('Select'), {callback: refreshactkey});
  140. return false;
  141. });
  142. Form.api.bindevent($("form[role=form]"));
  143. }
  144. }
  145. };
  146. /**
  147. * 初始化下拉事件
  148. */
  149. function init() {
  150. $(document).on("change", "#c-title_type", function () {
  151. var title_type_val = $(this).val();
  152. chooseTitleType(title_type_val);
  153. });
  154. $(document).on("change", "#c-block_type", function () {
  155. var block_type_val = $(this).val();
  156. chooseBlockType(block_type_val);
  157. });
  158. $(document).on("change", "#c-is_add_book", function () {
  159. var add_book_val = $(this).val();
  160. chooseAddBook(add_book_val);
  161. });
  162. }
  163. /**
  164. * 切换模块类型
  165. * @param val
  166. */
  167. function chooseBlockType(val) {
  168. //重置下拉选项
  169. resetSelectColumn("#c-title_type, #c-news_type, #c-is_add_book, #c-go_method, #c-is_show_hot");
  170. //重置输入框
  171. resetTextColumn("#c-title, #c-content, #c-news_color, #c-btn_title, #c-book_id, #c-activity_id, #c-activity_name");
  172. //重置图片
  173. resetImage();
  174. switch (val) {
  175. case "1":
  176. showColumn(".title, .title_type");
  177. hideColumn(".des-content, .is_add_book, .btn_title, .book_id, .go_method, .activity_name, .news_type, .is_show_hot, .news_color, .image");
  178. break;
  179. case "2":
  180. hideColumn(".title, .title_type, .image, .news_type, .is_show_hot, .go_method, .book_id, .btn_title, .news_color, .activity_name");
  181. showColumn(".des-content, .is_add_book");
  182. break;
  183. case "3":
  184. hideColumn(".title, .title_type, .des-content, .is_add_book, .image, .activity_name");
  185. showColumn(".news_type, .book_id, .is_show_hot, .go_method, .news_color, .btn_title");
  186. break;
  187. case "4":
  188. hideColumn(".title, .title_type, .activity_id, .is_show_hot, .go_method, .news_type, .book_id, .news_color, .activity_name");
  189. showColumn(".des-content, .image, .is_add_book, .btn_title");
  190. break;
  191. case "5":
  192. hideColumn(".title, .title_type, .btn_title, .is_show_hot, .go_method, .news_type, .book_id, .news_color, .des-content, .is_add_book");
  193. showColumn(".image, .activity_name");
  194. break;
  195. }
  196. }
  197. /**
  198. * 切换标题样式
  199. * @param val
  200. */
  201. function chooseTitleType(val) {
  202. hideColumn(".image");
  203. if (window.scene == 'add') {
  204. resetImage();
  205. }
  206. if (val == "4") {
  207. showColumn(".image");
  208. }
  209. }
  210. function chooseAddBook(val) {
  211. if (val == "1") {
  212. var block_type = $('#c-block_type').find("option:selected").attr('value');
  213. if (block_type == "2") {
  214. showColumn(".btn_title");
  215. }
  216. showColumn(".book_id, .go_method");
  217. if (window.scene == 'add') {
  218. resetTextColumn("#c-btn_title, #c-book_id");
  219. resetSelectColumn("#c-go_method");
  220. }
  221. } else {
  222. hideColumn(".btn_title, .book_id, .go_method");
  223. if (window.scene == 'add') {
  224. resetTextColumn("#c-btn_title, #c-book_id");
  225. resetSelectColumn("#c-go_method");
  226. }
  227. }
  228. }
  229. /**
  230. * 清空图片
  231. */
  232. function resetImage() {
  233. $("#c-image").val("");
  234. $("#p-image li").remove();
  235. }
  236. /**
  237. * 重置输入框元素的值
  238. * @param val
  239. */
  240. function resetTextColumn(val) {
  241. var strs = new Array();
  242. strs = val.split(",");
  243. if (strs.length > 0) {
  244. for (i=0; i<strs.length; i++) {
  245. var selector = strs[i];
  246. if ($(selector).hasClass("editor")) {
  247. $(selector).summernote('code', "");
  248. } else {
  249. $(selector).val("");
  250. }
  251. }
  252. }
  253. }
  254. /**
  255. * 重置下拉选项元素的值
  256. * @param val
  257. */
  258. function resetSelectColumn(val) {
  259. var strs = new Array();
  260. strs = val.split(",");
  261. if (strs.length > 0) {
  262. for (i=0; i<strs.length; i++) {
  263. var selector = strs[i];
  264. var firstOptionVal = $(selector).find("option").eq(0).attr("value");
  265. $(selector).val(firstOptionVal);
  266. $(selector).selectpicker('refresh');
  267. }
  268. }
  269. }
  270. /**
  271. * 隐藏模块
  272. * @param val
  273. */
  274. function hideColumn(val) {
  275. var strs = new Array();
  276. strs = val.split(",");
  277. if (strs.length > 0) {
  278. for (i=0; i<strs.length; i++) {
  279. var selector = strs[i];
  280. if (!$(selector).hasClass("hide")) {
  281. $(selector).addClass("hide");
  282. }
  283. }
  284. }
  285. }
  286. /**
  287. * 展示模块
  288. * @param val
  289. */
  290. function showColumn(val) {
  291. var strs = new Array();
  292. strs = val.split(",");
  293. if (strs.length > 0) {
  294. for (i=0; i<strs.length; i++) {
  295. var selector = strs[i];
  296. if ($(selector).hasClass("hide")) {
  297. $(selector).removeClass("hide");
  298. }
  299. }
  300. }
  301. }
  302. /**
  303. * 初始化类别展示项
  304. */
  305. function setBlockTypeSelect() {
  306. var block_type = $('#c-block_type').find("option:selected").attr('value');
  307. $('#c-block_type').prop('disabled', true);
  308. switch (block_type) {
  309. case "1":
  310. showColumn(".title, .title_type");
  311. if ($('#c-title_type').find("option:selected").attr('value') == "4") {
  312. showColumn(".image");
  313. }
  314. break;
  315. case "2":
  316. showColumn(".des-content, .is_add_book");
  317. if ($('#c-is_add_book').find("option:selected").attr('value') == "1") {
  318. showColumn(".btn_title, .book_id, .go_method");
  319. }
  320. break;
  321. case "3":
  322. showColumn(".news_type, .book_id, .is_show_hot, .go_method, .news_color, .btn_title");
  323. break;
  324. case "4":
  325. showColumn(".des-content, .image, .is_add_book, .btn_title");
  326. if ($('#c-is_add_book').find("option:selected").attr('value') == "1") {
  327. showColumn(".book_id, .go_method");
  328. }
  329. break;
  330. case "5":
  331. showColumn(".image, .activity_name");
  332. break;
  333. }
  334. }
  335. /**
  336. * 检测是否为空
  337. * @param val
  338. */
  339. function columnRequired(val) {
  340. var strs = new Array();
  341. strs = val.split(",");
  342. var res = true;
  343. if (strs.length > 0) {
  344. for (i=0; i<strs.length; i++) {
  345. var selector = strs[i];
  346. console.log(selector);
  347. var selector_val = $(selector).val();
  348. if (selector_val.length < 1) {
  349. var tips = $(selector).data('tip');
  350. Toastr.error(tips);
  351. $(selector).focus();
  352. res = false;
  353. break;
  354. }
  355. }
  356. }
  357. return res;
  358. }
  359. return Controller;
  360. });