tablemake.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
  2. var Controller = {
  3. index: function () {
  4. // 初始化表格参数配置
  5. Table.api.init({
  6. extend: {
  7. index_url: 'tablemake/index',
  8. add_url: 'tablemake/add',
  9. edit_url: 'tablemake/edit',
  10. del_url: 'tablemake/del',
  11. multi_url: 'tablemake/multi',
  12. table: 'tablemake_tables',
  13. },
  14. showExport: false,//导出按钮导出整个表的所有行
  15. showToggle: false,//切换卡片视图和表格视图
  16. showColumns: false,//切换显示隐藏列
  17. search: true,//关闭快速搜索
  18. commonSearch: false,//关闭通用搜索
  19. pageSize: 25,//设置默认每页显示数量
  20. pageList: [25, 50, 'All'],//可选每页显示数量
  21. });
  22. var table = $("#table");
  23. var dictionary_url = $("#toolbar").attr("data-dictionary-url");
  24. // 初始化表格
  25. table.bootstrapTable({
  26. url: $.fn.bootstrapTable.defaults.extend.index_url,
  27. pk: 'id',
  28. sortName: 'weigh',
  29. columns: [
  30. [
  31. {checkbox: true},
  32. {field: 'id', title: __('Id')},
  33. {field: 'name', title: "自建表名称"},
  34. {
  35. field: 'table', title: "自建表表名", formatter: function (value, row, index) {
  36. return '' + value;
  37. }
  38. },
  39. {field: 'desc', title: "自建表描述"},
  40. {
  41. field: 'createtime',
  42. title: __('Createtime'),
  43. operate: 'RANGE',
  44. addclass: 'datetimerange',
  45. formatter: Table.api.formatter.datetime
  46. },
  47. {
  48. field: 'operate',
  49. title: __('Operate'),
  50. buttons: [
  51. {
  52. name: 'dictionary',
  53. title: "数据字典",
  54. text: "数据字典",
  55. icon: 'fa fa-text-width',
  56. classname: 'btn btn-info btn-xs btn-execute btn-click',
  57. click: function (btn, row) {
  58. window.open(dictionary_url + "#" + row.table);
  59. return false;
  60. },
  61. },
  62. {
  63. name: 'fields',
  64. title: "字段管理",
  65. text: "字段管理",
  66. extend: "data-area='[\"\90%\"\,\"\90%\"\]'",
  67. url: 'tablemake/fields',
  68. icon: 'fa fa-table',
  69. classname: 'btn btn-success btn-xs btn-execute btn-dialog'
  70. },
  71. ],
  72. table: table,
  73. events: Table.api.events.operate,
  74. formatter: Table.api.formatter.operate
  75. }
  76. ]
  77. ]
  78. });
  79. // 绑定TAB事件
  80. $('.panel-heading a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  81. var field = $(this).closest("ul").data("field");
  82. var value = $(this).data("value");
  83. var options = table.bootstrapTable('getOptions');
  84. options.pageNumber = 1;
  85. options.queryParams = function (params) {
  86. var filter = {};
  87. if (value !== '') {
  88. filter[field] = value;
  89. }
  90. params.filter = JSON.stringify(filter);
  91. return params;
  92. };
  93. table.bootstrapTable('refresh', {});
  94. return false;
  95. });
  96. $('.btn-dictionary').on('click', function () {
  97. window.open(dictionary_url);
  98. });
  99. // 为表格绑定事件
  100. Table.api.bindevent(table);
  101. },
  102. add: function () {
  103. Controller.api.bindevent();
  104. },
  105. edit: function () {
  106. Controller.api.bindevent();
  107. },
  108. api: {
  109. bindevent: function () {
  110. Form.api.bindevent($("form[role=form]"));
  111. }
  112. },
  113. fields: function () {
  114. // 初始化表格参数配置
  115. var ids = $("#assign-data-ids").val();
  116. Table.api.init({
  117. extend: {
  118. index_url: 'tablemake/fields/ids/' + ids,
  119. add_url: 'tablemake/field_add/mid/' + ids,
  120. edit_url: 'tablemake/field_edit',
  121. del_url: 'tablemake/field_del',
  122. table: 'tablemake_fields',
  123. },
  124. showExport: false,//导出按钮导出整个表的所有行
  125. showToggle: false,//切换卡片视图和表格视图
  126. showColumns: false,//切换显示隐藏列
  127. search: true,//关闭快速搜索
  128. commonSearch: false,//关闭通用搜索
  129. pageSize: 25,//设置默认每页显示数量
  130. pageList: [25, 50, 'All'],//可选每页显示数量
  131. });
  132. var table = $("#table");
  133. // 初始化表格
  134. table.bootstrapTable({
  135. url: $.fn.bootstrapTable.defaults.extend.index_url,
  136. pk: 'id',
  137. sortName: 'weigh',
  138. columns: [
  139. [
  140. {checkbox: true},
  141. {field: 'id', title: __('Id')},
  142. {field: 'mid', title: '模型ID'},
  143. {field: 'title', title: "字段标题 "},
  144. {field: 'field', title: "字段名称"},
  145. {field: 'type', title: "字段类型"},
  146. {field: 'length', title: "字段长度"},
  147. {field: 'default', title: "默认值"},
  148. {field: 'comment', title: "备注说明"},
  149. {
  150. field: 'createtime',
  151. title: __('Createtime'),
  152. operate: 'RANGE',
  153. addclass: 'datetimerange',
  154. formatter: Table.api.formatter.datetime
  155. },
  156. {
  157. field: 'operate',
  158. title: __('Operate'),
  159. table: table,
  160. events: Table.api.events.operate,
  161. formatter: Table.api.formatter.operate
  162. }
  163. ]
  164. ]
  165. });
  166. // 绑定TAB事件
  167. $('.panel-heading a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  168. var field = $(this).closest("ul").data("field");
  169. var value = $(this).data("value");
  170. var options = table.bootstrapTable('getOptions');
  171. options.pageNumber = 1;
  172. options.queryParams = function (params) {
  173. var filter = {};
  174. if (value !== '') {
  175. filter[field] = value;
  176. }
  177. params.filter = JSON.stringify(filter);
  178. return params;
  179. };
  180. table.bootstrapTable('refresh', {});
  181. return false;
  182. });
  183. // 为表格绑定事件
  184. Table.api.bindevent(table);
  185. },
  186. field_add: function () {
  187. Controller.api.bindevent();
  188. $(".field-category").on("click", function (e) {
  189. var _value = $(this).val();
  190. var required = $(this).attr("data-required");
  191. var required_list = required.split(",");
  192. $("#field-suffix").val("");
  193. $("#field-type").val("");
  194. $(".form-input").hide();
  195. $(".form-input input").attr("disabled", "disabled");
  196. $(".form-input input").attr("readonly", "readonly");
  197. for (let value of required_list) {
  198. $(".form-input-" + value).show();
  199. $(".form-input-" + value + " input").attr("disabled", false);
  200. $(".form-input-" + value + " input").attr("readonly", false);
  201. }
  202. });
  203. $(".form-selection").on("change", function (e) {
  204. var _value = $(this).val();
  205. if (_value == "list-enum" || _value == "list-set" || _value == "data-enum" || _value == "data-set" || _value == "enum" || _value == "set") {
  206. $(".form-input-comment").show();
  207. $(".form-input-comment input").attr("disabled", false);
  208. $(".form-input-comment input").attr("readonly", false);
  209. } else {
  210. $(".form-input-comment").hide();
  211. $(".form-input-comment input").attr("disabled", "disabled");
  212. $(".form-input-comment input").attr("readonly", "readonly");
  213. }
  214. });
  215. $("#c-special").on("change", function (e) {
  216. var _value = $(this).val();
  217. if (_value == "status") {
  218. $(".form-input-comment").show();
  219. $(".form-input-comment input").attr("disabled", false);
  220. $(".form-input-comment input").attr("readonly", false);
  221. } else {
  222. $(".form-input-comment").hide();
  223. $(".form-input-comment input").attr("disabled", "disabled");
  224. $(".form-input-comment input").attr("readonly", "readonly");
  225. }
  226. });
  227. $("#field-suffix").on("change", function (e) {
  228. var _value = $(this).val();
  229. if (_value == "content") {
  230. $("#row-length").attr("disabled", "disabled");
  231. $("#row-default").attr("disabled", "disabled");
  232. } else {
  233. $("#row-length").attr("disabled", false);
  234. $("#row-default").attr("disabled", false);
  235. }
  236. });
  237. $("#field-type").on("change", function (e) {
  238. var _value = $(this).val();
  239. if (_value == "text" || _value == "datetime" || _value == "date" || _value == "year" || _value == "timestamp") {
  240. $("#row-length").attr("disabled", "disabled");
  241. $("#row-default").attr("disabled", "disabled");
  242. } else {
  243. $("#row-length").attr("disabled", false);
  244. $("#row-default").attr("disabled", false);
  245. }
  246. });
  247. $(".field-category:checked").click();
  248. },
  249. field_edit: function () {
  250. Controller.api.bindevent();
  251. $(".field-category").on("click", function (e) {
  252. var _value = $(this).val();
  253. var required = $(this).attr("data-required");
  254. var required_list = required.split(",");
  255. $(".form-input").hide();
  256. $(".form-input input").attr("disabled", "disabled");
  257. $(".form-input input").attr("readonly", "readonly");
  258. for (let value of required_list) {
  259. $(".form-input-" + value).show();
  260. $(".form-input-" + value + " input").attr("disabled", false);
  261. $(".form-input-" + value + " input").attr("readonly", false);
  262. }
  263. //初始化键值对选项
  264. var suffix_value = $("#field-suffix").val();
  265. var type_value = $("#field-type").val();
  266. var special_values = $("#c-special").val();//
  267. if (suffix_value == "list-enum" || suffix_value == "list-set" || suffix_value == "data-enum" || suffix_value == "data-set" || type_value == "enum" || type_value == "set" || special_values == "status") {
  268. $(".form-input-comment").show();
  269. $(".form-input-comment input").attr("disabled", false);
  270. $(".form-input-comment input").attr("readonly", false);
  271. } else {
  272. $(".form-input-comment").hide();
  273. $(".form-input-comment input").attr("disabled", "disabled");
  274. $(".form-input-comment input").attr("readonly", "readonly");
  275. }
  276. //后缀选项
  277. if (suffix_value == "content") {
  278. $("#row-length").attr("disabled", "disabled");
  279. $("#row-default").attr("disabled", "disabled");
  280. } else {
  281. $("#row-length").attr("disabled", false);
  282. $("#row-default").attr("disabled", false);
  283. }
  284. //类型选项
  285. if (type_value == "text" || type_value == "datetime" || type_value == "date" || type_value == "year" || type_value == "timestamp") {
  286. $("#row-length").attr("disabled", "disabled");
  287. $("#row-default").attr("disabled", "disabled");
  288. } else {
  289. $("#row-length").attr("disabled", false);
  290. $("#row-default").attr("disabled", false);
  291. }
  292. });
  293. $(".form-selection").on("change", function (e) {
  294. var _value = $(this).val();
  295. if (_value == "list-enum" || _value == "list-set" || _value == "data-enum" || _value == "data-set" || _value == "enum" || _value == "set") {
  296. $(".form-input-comment").show();
  297. $(".form-input-comment input").attr("disabled", false);
  298. $(".form-input-comment input").attr("readonly", false);
  299. } else {
  300. $(".form-input-comment").hide();
  301. $(".form-input-comment input").attr("disabled", "disabled");
  302. $(".form-input-comment input").attr("readonly", "readonly");
  303. }
  304. });
  305. $("#c-special").on("change", function (e) {
  306. var _value = $(this).val();
  307. if (_value == "status") {
  308. $(".form-input-comment").show();
  309. $(".form-input-comment input").attr("disabled", false);
  310. $(".form-input-comment input").attr("readonly", false);
  311. } else {
  312. $(".form-input-comment").hide();
  313. $(".form-input-comment input").attr("disabled", "disabled");
  314. $(".form-input-comment input").attr("readonly", "readonly");
  315. }
  316. });
  317. $("#field-suffix").on("change", function (e) {
  318. var _value = $(this).val();
  319. if (_value == "content") {
  320. $("#row-length").attr("disabled", "disabled");
  321. $("#row-default").attr("disabled", "disabled");
  322. } else {
  323. $("#row-length").attr("disabled", false);
  324. $("#row-default").attr("disabled", false);
  325. }
  326. });
  327. $("#field-type").on("change", function (e) {
  328. var _value = $(this).val();
  329. if (_value == "text" || _value == "datetime" || _value == "date" || _value == "year" || _value == "timestamp") {
  330. $("#row-length").attr("disabled", "disabled");
  331. $("#row-default").attr("disabled", "disabled");
  332. } else {
  333. $("#row-length").attr("disabled", false);
  334. $("#row-default").attr("disabled", false);
  335. }
  336. });
  337. $(".field-category:checked").click();
  338. },
  339. };
  340. return Controller;
  341. });