table.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  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: 'famysql/table/index',
  8. add_url: Config.group ? 'famysql/table/table_add?group=' + Config.group : 'famysql/table/table_add',
  9. },
  10. showExport: false,//导出按钮导出整个表的所有行
  11. showToggle: false,//切换卡片视图和表格视图
  12. showColumns: false,//切换显示隐藏列
  13. search: false,//关闭快速搜索
  14. commonSearch: false,//关闭通用搜索
  15. });
  16. var table = $("#table");
  17. // 初始化表格
  18. table.bootstrapTable({
  19. url: $.fn.bootstrapTable.defaults.extend.index_url,
  20. pk: 'id',
  21. sortName: 'id',
  22. columns: [
  23. [
  24. { field: 'id', title: __('Id') },
  25. { field: 'name', title: __('Name') },
  26. { field: 'engine', title: __('Engine'), width: '80px' },
  27. { field: 'charset', title: __('Charset'), width: '80px' },
  28. { field: 'collation', title: __('Collation'), width: '150px' },
  29. { field: 'comment', title: __('Comment') },
  30. { field: 'rows', title: __('Rows') },
  31. { field: 'createtime', title: __('Create time') },
  32. { field: 'updatetime', title: __('Update time') },
  33. {
  34. field: 'operate', title: __('Table Operate'), width: '400px', table: table, operate: false,
  35. events: {
  36. 'click .btn-copy-1': function (e, value, row) {
  37. Layer.prompt({
  38. title: "请输入你需要新复制的数据表名",
  39. success: function (layero) {
  40. var name = row.name;
  41. var name_arr = name.split("_");
  42. if (row.is_has) {
  43. name_arr.shift()
  44. }
  45. const str = name_arr.join('_');
  46. $("input", layero).prop("placeholder", "例如:test,请不要加前缀").val(str);
  47. }
  48. }, function (value) {
  49. Fast.api.ajax({
  50. url: "famysql/table/copy?name=" + row.name + "&type=1",
  51. data: { table: value },
  52. }, function (data, ret) {
  53. Layer.closeAll();
  54. parent.location.reload();
  55. return false;
  56. });
  57. });
  58. },
  59. 'click .btn-copy-2': function (e, value, row) {
  60. Layer.prompt({
  61. title: "请输入你需要新复制的数据表名",
  62. success: function (layero) {
  63. var name = row.name;
  64. var name_arr = name.split("_");
  65. if (row.is_has) {
  66. name_arr.shift()
  67. }
  68. const str = name_arr.join('_');
  69. $("input", layero).prop("placeholder", "例如:test,请不要加前缀").val(str);
  70. }
  71. }, function (value) {
  72. Fast.api.ajax({
  73. url: "famysql/table/copy?name=" + row.name + "&type=2",
  74. data: { table: value },
  75. }, function (data, ret) {
  76. Layer.closeAll();
  77. parent.location.reload();
  78. return false;
  79. });
  80. });
  81. }
  82. },
  83. buttons: [
  84. {
  85. name: 'copy',
  86. text: __('Copy 1'),
  87. title: __('Copy 1'),
  88. dropdown: __('Copy'),
  89. classname: 'btn btn-xs btn-warning btn-copy-1',
  90. icon: 'fa fa-copy',
  91. },
  92. {
  93. name: 'copy-2',
  94. text: __('Copy 2'),
  95. title: function (row) {
  96. return __('Copy 2') + "(" + row.rows + ")";
  97. },
  98. dropdown: __('Copy'),
  99. classname: 'btn btn-xs btn-warning btn-copy-2',
  100. icon: 'fa fa-copy',
  101. },
  102. {
  103. name: 'truncate',
  104. text: function (row) {
  105. return __('Truncate') + "(" + row.rows + ")";
  106. },
  107. title: function (row) {
  108. return __('Truncate') + "(" + row.rows + ")";
  109. },
  110. dropdown: __('More Table Operate'),
  111. classname: 'btn btn-xs btn-danger btn-truncate',
  112. icon: 'fa fa-minus-circle',
  113. url: function (row) {
  114. return Fast.api.fixurl("famysql/table/truncate?name=" + row.name);
  115. },
  116. classname: 'btn btn-xs btn-danger btn-ajax',
  117. confirm: function (row) {
  118. return '是否确定清空该“' + row.name + '”数据表?';
  119. },
  120. success: function (data, ret) {
  121. $(".btn-refresh").trigger("click"); //刷新数据
  122. },
  123. visible: function (row) {
  124. return row.is_admin !== 0;
  125. },
  126. error: function (data, ret) {
  127. Layer.alert(ret.msg);
  128. return false;
  129. }
  130. },
  131. {
  132. name: 'optimize',
  133. text: __('Optimize'),
  134. title: __('Optimize'),
  135. dropdown: __('More Table Operate'),
  136. classname: 'btn btn-xs btn-danger btn-optimize',
  137. icon: 'fa fa-exclamation-triangle',
  138. url: function (row) {
  139. return Fast.api.fixurl("famysql/table/optimize?name=" + row.name);
  140. },
  141. classname: 'btn btn-xs btn-danger btn-ajax',
  142. confirm: function (row) {
  143. return '是否确定优化该“' + row.name + '”数据表?';
  144. },
  145. success: function (data, ret) {
  146. $(".btn-refresh").trigger("click"); //刷新数据
  147. },
  148. visible: function (row) {
  149. return row.is_admin !== 0;
  150. },
  151. error: function (data, ret) {
  152. Layer.alert(ret.msg);
  153. return false;
  154. }
  155. },
  156. {
  157. name: 'repair',
  158. text: __('Repair'),
  159. title: __('Repair'),
  160. dropdown: __('More Table Operate'),
  161. classname: 'btn btn-xs btn-danger btn-repair',
  162. icon: 'fa fa-check-circle-o',
  163. url: function (row) {
  164. return Fast.api.fixurl("famysql/table/repair?name=" + row.name);
  165. },
  166. classname: 'btn btn-xs btn-danger btn-ajax',
  167. confirm: function (row) {
  168. return '是否确定修复该“' + row.name + '”数据表?';
  169. },
  170. success: function (data, ret) {
  171. $(".btn-refresh").trigger("click"); //刷新数据
  172. },
  173. visible: function (row) {
  174. return row.is_admin !== 0;
  175. },
  176. error: function (data, ret) {
  177. Layer.alert(ret.msg);
  178. return false;
  179. }
  180. },
  181. {
  182. name: 'editone',
  183. icon: 'fa fa-pencil',
  184. text: __('Edit'),
  185. title: __('Edit'),
  186. dropdown: __('More Table Operate'),
  187. extend: 'data-toggle="tooltip"',
  188. url: function (row) {
  189. return Fast.api.fixurl("famysql/table/table_edit?name=" + row.name);
  190. },
  191. visible: function (row) {
  192. return row.is_admin !== 0;
  193. },
  194. classname: 'btn btn-xs btn-success btn-dialog'
  195. },
  196. {
  197. name: 'delone',
  198. icon: 'fa fa-trash',
  199. text: __('Del'),
  200. title: __('Del'),
  201. dropdown: __('More Table Operate'),
  202. extend: 'data-toggle="tooltip"',
  203. url: function (row) {
  204. return Fast.api.fixurl("famysql/table/table_del?name=" + row.name);
  205. },
  206. classname: 'btn btn-xs btn-danger btn-ajax',
  207. confirm: function (row) {
  208. return '是否确定删除该“' + row.name + '”数据表,不可恢复?';
  209. },
  210. success: function (data, ret) {
  211. if (ret.data == 0) {
  212. parent.location.reload();
  213. } else {
  214. $(".btn-refresh").trigger("click"); //刷新数据
  215. }
  216. },
  217. visible: function (row) {
  218. return row.is_admin !== 0;
  219. },
  220. error: function (data, ret) {
  221. Layer.alert(ret.msg);
  222. return false;
  223. }
  224. },
  225. {
  226. name: 'crud',
  227. text: 'CRUD',
  228. title: function (row) {
  229. return "(表" + row.name + ")" + __('CRUD');
  230. },
  231. extend: 'data-area=\'["90%", "90%"]\'',
  232. dropdown: __('More Table Operate'),
  233. classname: 'btn btn-warning btn-xs btn-primary btn-dialog ',
  234. visible: function (row) {
  235. return row.group !== 'system';
  236. },
  237. url: function (row) {
  238. return Fast.api.fixurl('famysql/table/check?addon_name=' + row.group + '&table_name=' + row.name);
  239. },
  240. icon: 'fa fa-terminal',
  241. },
  242. {
  243. name: 'indexs',
  244. title: __('Index manager'),
  245. text: __('Index manager'),
  246. extend: 'data-area=\'["90%", "90%"]\'',
  247. url: function (row) {
  248. return Fast.api.fixurl("famysql/index/indexs?name=" + row.name + "&is_admin=" + row.is_admin);
  249. },
  250. icon: 'fa fa-list-ol',
  251. classname: 'btn btn-xs btn-danger btn-dialog'
  252. },
  253. {
  254. name: 'fields',
  255. title: function (row) {
  256. return "(" + row.name + ")" + __('Field manager');
  257. },
  258. text: function (row) {
  259. return __('Field manager') + "(" + row.field_nums + ")";
  260. },
  261. extend: 'data-area=\'["90%", "90%"]\'',
  262. url: function (row) {
  263. return Fast.api.fixurl("famysql/field/fields?name=" + row.name + "&is_admin=" + row.is_admin);
  264. },
  265. icon: 'fa fa-table',
  266. classname: 'btn btn-success btn-xs btn-execute btn-dialog'
  267. },
  268. ],
  269. formatter: Table.api.formatter.operate
  270. },
  271. ]
  272. ],
  273. //启用固定列
  274. fixedColumns: true,
  275. //固定右侧列数
  276. fixedRightNumber: 1,
  277. queryParams: function (params) {
  278. if (Config.group) {
  279. params.group = Config.group;
  280. }
  281. return params;
  282. },
  283. });
  284. // 绑定TAB事件
  285. $('.panel-heading a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
  286. var value = $(this).data("value");
  287. var options = table.bootstrapTable('getOptions');
  288. options.queryParams = function (params) {
  289. params.group = value;
  290. return params;
  291. };
  292. return false;
  293. });
  294. // 为表格绑定事件
  295. Table.api.bindevent(table);
  296. },
  297. backuplist: function () {
  298. // 初始化表格参数配置
  299. Table.api.init({
  300. extend: {
  301. index_url: 'famysql/table/backuplist'
  302. }
  303. });
  304. var table = $("#table");
  305. table.on('load-success.bs.table', function (e, json) {
  306. if (json && typeof json.rows != 'undefined' && $(".nav-addon li").size() == 1) {
  307. var addons = [];
  308. $.each(json.rows, function (i, j) {
  309. if (addons.indexOf(j.addon) == -1 && j.addon != 'all') {
  310. $(".nav-addon").append("<li><a href='javascript:;' data-value='" + j.addon + "'>" + j.addon_name + "</a></li>");
  311. addons.push(j.addon);
  312. }
  313. });
  314. }
  315. });
  316. // 初始化表格
  317. table.bootstrapTable({
  318. url: $.fn.bootstrapTable.defaults.extend.index_url,
  319. columns: [
  320. [
  321. {
  322. field: 'id', title: __('ID'), operate: false, formatter: function (value, row, index) {
  323. return index + 1;
  324. }
  325. },
  326. { field: 'addon', title: __('Addon'), visible: false },
  327. { field: 'type', title: __('File'), visible: false },
  328. {
  329. field: 'file', title: __('File'), operate: false, formatter: function (value, row, index) {
  330. var url = Fast.api.fixurl("famysql/table/download?file=" + row.file);
  331. return '<a href="' + url + '" data-toggle="tooltip" title="' + __('Download file') + '" target="_blank">' + row.file + '</a>';
  332. }
  333. },
  334. { field: 'size', title: __('Size'), operate: false },
  335. { field: 'date', title: __('Date'), operate: false },
  336. {
  337. field: 'operate', title: __('Operate'), table: table, operate: false,
  338. buttons: [
  339. {
  340. name: 'restore',
  341. text: __('恢复'),
  342. icon: 'fa fa-reply',
  343. classname: 'btn btn-primary btn-restore btn-xs btn-ajax ',
  344. url: function (row) {
  345. return Fast.api.fixurl("famysql/table/restore?action=restore&file=" + row.file);
  346. }
  347. },
  348. {
  349. name: 'delone',
  350. text: __('Del'),
  351. icon: 'fa fa-times',
  352. classname: 'btn btn-danger btn-delete btn-xs btn-ajax',
  353. extend: 'data-toggle="tooltip"',
  354. url: function (row) {
  355. return Fast.api.fixurl("famysql/table/restore?action=delete&file=" + row.file);
  356. },
  357. confirm: function (row) {
  358. return '是否确定删除该“' + row.file + '”备份文件,不可恢复?';
  359. },
  360. refresh: true
  361. },
  362. ],
  363. formatter: Table.api.formatter.buttons
  364. }
  365. ]
  366. ],
  367. commonSearch: true,
  368. search: false,
  369. templateView: false,
  370. clickToSelect: false,
  371. showColumns: false,
  372. showToggle: false,
  373. showExport: false,
  374. showSearch: false,
  375. searchFormVisible: false,
  376. queryParams: function (params) {
  377. if (Config.group) {
  378. //这里可以追加搜索条件
  379. var filter = JSON.parse(params.filter);
  380. var op = JSON.parse(params.op);
  381. filter.addon = Config.group;
  382. op.addon = "=";
  383. params.filter = JSON.stringify(filter);
  384. params.op = JSON.stringify(op);
  385. }
  386. return params;
  387. },
  388. });
  389. // 为表格绑定事件
  390. Table.api.bindevent(table);
  391. // 切换
  392. $(document).on("click", ".btn-switch", function () {
  393. $(".btn-switch").removeClass("active");
  394. $(this).addClass("active");
  395. $("form.form-commonsearch input[name='type']").val($(this).data("type"));
  396. table.bootstrapTable('refresh', { url: $.fn.bootstrapTable.defaults.extend.index_url, pageNumber: 1 });
  397. return false;
  398. });
  399. $(document).on("click", ".nav-addon li a", function () {
  400. $(".nav-addon li").removeClass("active");
  401. $(this).parent().addClass("active");
  402. $("form.form-commonsearch input[name='addon']").val($(this).data("value"));
  403. table.bootstrapTable('refresh', { url: $.fn.bootstrapTable.defaults.extend.index_url, pageNumber: 1 });
  404. return false;
  405. });
  406. //上传完成后刷新
  407. $(".faupload").data("upload-complete", function (files) {
  408. if (files[0].ret.code) {
  409. Toastr.success(files[0].ret.msg);
  410. } else {
  411. Toastr.error(files[0].ret.msg);
  412. }
  413. $(".btn-refresh").trigger("click"); //刷新数据
  414. });
  415. Controller.api.bindevent();
  416. },
  417. backup: function () {
  418. $(document).on("change", "#c-addon", function () {
  419. $("#c-ignore_tables").selectPageRefresh();
  420. });
  421. $("#c-ignore_tables").data("params", function (obj) {
  422. //obj为SelectPage对象
  423. return { custom: { addon: $("#c-addon").val() } };
  424. });
  425. Controller.api.bindevent();
  426. },
  427. table_add: function () {
  428. $(document).on("change", "#c-charset", function () {
  429. $("#c-collation").selectPageRefresh();
  430. });
  431. Controller.api.bindevent();
  432. },
  433. table_batch_add: function () {
  434. $("#c-name").data("params", function (obj) {
  435. //obj为SelectPage对象
  436. return { custom: { addon: $("#c-addon").val() } };
  437. });
  438. Controller.api.bindevent();
  439. },
  440. table_edit: function () {
  441. $(document).on("change", "#c-charset", function () {
  442. $("#c-collation").selectPageRefresh();
  443. });
  444. Controller.api.bindevent();
  445. },
  446. api: {
  447. bindevent: function () {
  448. $("#c-collation").data("params", function (obj) {
  449. //obj为SelectPage对象
  450. return { custom: { charset: $("#c-charset").val() } };
  451. });
  452. $("#c-type").data("params", function (obj) {
  453. //obj为SelectPage对象
  454. if ($("#field-suffix").val() !== "无") {
  455. return { custom: { suffix: $("#field-suffix").val() } };
  456. }
  457. });
  458. Form.api.bindevent($("form[role=form]"));
  459. }
  460. }
  461. };
  462. return Controller;
  463. });