define(['jquery', 'bootstrap', 'backend', 'table', 'form', 'template'], function ($, undefined, Backend, Table, Form, Template) { var Controller = { index: function () { // 初始化表格参数配置 Table.api.init({ extend: { index_url: 'manystore/command/index', add_url: 'manystore/command/add', edit_url: '', del_url: 'manystore/command/del', multi_url: 'manystore/command/multi', table: 'manystore_command', } }); var table = $("#table"); // 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, pk: 'id', sortName: 'id', columns: [ [ {checkbox: true}, {field: 'id', title: __('Id')}, {field: 'type', title: __('Type'), formatter: Table.api.formatter.search}, {field: 'type_text', title: __('Type')}, { field: 'command', title: __('Command'), formatter: function (value, row, index) { return ''; } }, { field: 'executetime', title: __('Executetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime }, { field: 'createtime', title: __('Createtime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime }, { field: 'updatetime', title: __('Updatetime'), operate: 'RANGE', addclass: 'datetimerange', formatter: Table.api.formatter.datetime }, { field: 'status', title: __('Status'), table: table, custom: {"successed": 'success', "failured": 'danger'}, searchList: {"successed": __('Successed'), "failured": __('Failured')}, formatter: Table.api.formatter.status }, { field: 'operate', title: __('Operate'), buttons: [ { name: 'execute', title: __('Execute again'), text: __('Execute again'), url: 'manystore/command/execute', icon: 'fa fa-repeat', classname: 'btn btn-success btn-xs btn-execute btn-ajax', success: function (data) { Layer.alert("", { title: __("执行结果"), shadeClose: true }); table.bootstrapTable('refresh'); return false; } }, { name: 'execute', title: __('Detail'), text: __('Detail'), url: 'manystore/command/detail', icon: 'fa fa-list', classname: 'btn btn-info btn-xs btn-execute btn-dialog' } ], table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate } ] ] }); // 为表格绑定事件 Table.api.bindevent(table); }, add: function () { require(['bootstrap-select', 'bootstrap-select-lang']); var mainfields = []; var relationfields = {}; var maintable = []; var relationtable = []; var relationmode = ["belongsto", "hasone"]; var renderselect = function (select, data) { var html = []; for (var i = 0; i < data.length; i++) { html.push(""); } $(select).html(html.join("")); select.trigger("change"); if (select.data("selectpicker")) { select.selectpicker('refresh'); } return select; }; $("select[name=table] option").each(function () { maintable.push($(this).val()); }); $(document).on('change', "input[name='isrelation']", function () { $("#relation-zone").toggleClass("hide", !$(this).prop("checked")); }); $(document).on('change', "select[name='table']", function () { var that = this; Fast.api.ajax({ url: "manystore/command/get_field_list", data: {table: $(that).val()}, }, function (data, ret) { mainfields = data.fieldlist; $("#relation-zone .relation-item").remove(); renderselect($("#fields"), mainfields); return false; }); return false; }); $(document).on('click', "a.btn-newrelation", function () { var that = this; var index = parseInt($(that).data("index")) + 1; var content = Template("relationtpl", {index: index}); content = $(content.replace(/\[index\]/, index)); $(this).data("index", index); $(content).insertBefore($(that).closest(".row")); $('select', content).selectpicker(); var exists = [$("select[name='table']").val()]; $("select.relationtable").each(function () { exists.push($(this).val()); }); relationtable = []; $.each(maintable, function (i, j) { if ($.inArray(j, exists) < 0) { relationtable.push(j); } }); renderselect($("select.relationtable", content), relationtable); $("select.relationtable", content).trigger("change"); }); $(document).on('click', "a.btn-removerelation", function () { $(this).closest(".row").remove(); }); $(document).on('change', "#relation-zone select.relationmode", function () { var table = $("select.relationtable", $(this).closest(".row")).val(); var that = this; Fast.api.ajax({ url: "manystore/command/get_field_list", data: {table: table}, }, function (data, ret) { renderselect($(that).closest(".row").find("select.relationprimarykey"), $(that).val() == 'belongsto' ? data.fieldlist : mainfields); renderselect($(that).closest(".row").find("select.relationforeignkey"), $(that).val() == 'hasone' ? data.fieldlist : mainfields); return false; }); }); $(document).on('change', "#relation-zone select.relationtable", function () { var that = this; Fast.api.ajax({ url: "manystore/command/get_field_list", data: {table: $(that).val()}, }, function (data, ret) { renderselect($(that).closest(".row").find("select.relationmode"), relationmode); renderselect($(that).closest(".row").find("select.relationfields"), mainfields) renderselect($(that).closest(".row").find("select.relationforeignkey"), data.fieldlist) renderselect($(that).closest(".row").find("select.relationfields"), data.fieldlist) return false; }); }); $(document).on('click', ".btn-command", function () { var form = $(this).closest("form"); var textarea = $("textarea[rel=command]", form); textarea.val(''); Fast.api.ajax({ url: "manystore/command/command/action/command", data: form.serialize(), }, function (data, ret) { textarea.val(data.command); return false; }); }); $(document).on('click', ".btn-execute", function () { var form = $(this).closest("form"); var textarea = $("textarea[rel=result]", form); textarea.val(''); Fast.api.ajax({ url: "manystore/command/command/action/execute", data: form.serialize(), }, function (data, ret) { textarea.val(data.result); window.parent.$(".toolbar .btn-refresh").trigger('click'); top.window.Fast.api.refreshmenu(); return false; }, function () { window.parent.$(".toolbar .btn-refresh").trigger('click'); }); }); $("select[name='table']").trigger("change"); Controller.api.bindevent(); }, edit: function () { Controller.api.bindevent(); }, api: { bindevent: function () { Form.api.bindevent($("form[role=form]")); } } }; return Controller; });