datatable = { }; (function () { function schemabuild(fid) { var tableconfig = { }; tableconfig.type = 1; // 1 创建; 2 编辑; 3 恢复 var queryUrl=''; // var succUrl =''; // var fieldsData = null; // function $$(id) { return $('#' + fid + '_' + id); } function GetFieldsConfig() { var fields = {}; $$('fieldconfig_table tbody tr').each(function() { var fielddef = $(this).data('fielddef'); if (fielddef == null || fielddef == undefined || fielddef.name == undefined) return; fields[fielddef.name] = fielddef; }); return fields; } function showError(errmsg, error) { errmsg = "提交失败, 错误信息: " + errmsg + "。"; var title = { table_id : "数据表id", title : "标题", host : "数据库地址", port : "数据库端口", username : "数据库用户名", passwd : "数据库密码", dbname : "数据库名", tablename: "数据表名", description: "详细说明", readers : "读权限用户", writers : "写权限用户", keyfield : "主键字段名", sortfield: "默认排序字段名", groupfield:"分组字段名", fields : "字段配置" }; if (error) { var i = 0; for (var name in error) { i++; errmsg += i + ". " + title[name] + ": " + error[name] + ";"; } } $$('submit_msg').text(errmsg).css('display', 'inline'); } // 提交数据 function Submit() { $$('submit_msg').hide(); var bu = $$('button_submit').ladda(); var config = { table_id : $$('table_id').val(), title : $.trim($$('title').val()), host : $.trim($$('host').val()), port : $.trim($$('port').val()), username : $.trim($$('username').val()), passwd : $.trim($$('passwd').val()), dbname : $.trim($$('dbname').val()), tablename: $.trim($$('tablename').val()), description: $.trim($$('description').val()), readers : $$('readers').val(), writers : $$('writers').val(), keyfield : $$('keyfield').val(), sortfield: $$('sortfield').val(), groupfield:$$('groupfield').val(), fields : GetFieldsConfig() }; if (config.readers == null) config.readers = []; if (config.writers == null) config.writers = []; if (config.keyfield == null) config.keyfield = []; if (config.sortfield == null) config.sortfield = []; if (config.groupfield == null) config.groupfield = []; bu.ladda('start'); var url = ''; if (tableconfig.type == 1) { // new url = '/api/dbmanager/create/0'; } else if (tableconfig.type == 2) { // update url = '/api/dbmanager/update/0'; } else if (tableconfig.type == 3) { url = '/api/dbmanager/rollback/0' } $.ajax({ type: "POST", url: url, data: { data: JSON.stringify(config) }, dataType: 'json', success: function (data) { if (data.errcode !== null && data.errcode !== undefined && data.errcode != 0) { showError(data.errmsg, data.error); return; } $$('submit_msg').text("提交成功!"); $$('submit_msg').css('display', 'inline'); if (tableconfig.success) tableconfig.success(); setTimeout(function(){ tableconfig.Reset(); bu.prev().trigger("click"); }, 1500); }, error: function () { $$('submit_msg').text("提交失败,请重试!"); $$('submit_msg').css('display', 'inline'); }, complete: function () { bu.ladda('stop'); } }); }; function UpdateFieldOptions(fields) { var html = ''; for (var fname in fields) { html += '<option value="' + fname + '">' + fname + '</option>'; } var kval = $$('keyfield').val(); $$('keyfield').html(html).val(kval).trigger('chosen:updated'); var sval = $$('sortfield').val(); $$('sortfield').html(html).val(sval).trigger('chosen:updated'); var gval = $$('groupfield').val(); $$('groupfield').html(html).val(gval).trigger('chosen:updated'); $$('fieldconfig_name').html(html).val(''); var fielddefs = GetFieldsConfig(); $$('fieldconfig_name option').each(function () { var val = $(this).val(); if (fielddefs[val] != undefined && fielddefs[val].name == val) { $(this).attr('style', 'display:none'); } }); } function UpdateFieldBySelect(id, fields) { var html = ''; for (var i = 0; i < fields.length; i++) html += '<option value="' + fields[i] + '">' + fields[i] + '</option>'; $$(id).html(html).val(fields).trigger('chosen:updated'); } function GetTableSchemaByConfig(host, port, user, passwd, dbname, tablename) { var url = host + ':' + port + ':' + user + ':' + passwd + ':' + dbname + ':' + tablename; if (url == queryUrl || url == succUrl) return; queryUrl = url; $.ajax({ url : '/api/dbmanager/schema', data: {host:host,port:port,user:user,passwd:passwd,dbname:dbname,table:tablename}, dataType: "json", success: function (data) { var host = $.trim($$('host').val()); var port = $.trim($$('port').val()); var user = $.trim($$('username').val()); var passwd = $.trim($$('passwd').val()); var dbname = $.trim($$('dbname').val()); var tablename = $.trim($$('tablename').val()); if (host != data.host || port != data.port || user != data.user || passwd != data.passwd || dbname != data.dbname || tablename != data.table) { return; } succUrl = host + ':' + port + ':' + user + ':' + passwd + ':' + dbname + ':' + tablename; if (data.errcode !== undefined && data.errcode !== null && data.errcode != 0) { toastr['error'](data.errmsg, '数据库配置错误'); fieldsData = null; return; } UpdateFieldOptions(data.fields); fieldsData = data.fields; }, complete: function() { queryUrl = ''; } }); } // 获取数据表的schema function GetTableSchema() { var host = $.trim($$('host').val()); var port = $.trim($$('port').val()); var user = $.trim($$('username').val()); var passwd = $.trim($$('passwd').val()); var dbname = $.trim($$('dbname').val()); var tablename = $.trim($$('tablename').val()); if (host.length < 2 || port.length < 3 || user.length < 2 || passwd.length < 2 || dbname.length < 2 || tablename.length < 2) return; GetTableSchemaByConfig(host, port, user, passwd, dbname, tablename); } function FieldSelectName() { var name = $$('fieldconfig_name').val(); if (name == null || name == undefined || name.length <= 0) return; if (fieldsData == null || Object.getOwnPropertyNames(fieldsData).length <= 0) return; var el = 0; var order = 0; for (el in fieldsData) { order++; if (fieldsData[el].name != name) continue; break; } var field = fieldsData[el]; $$('fieldconfig_def').val(field.default_val); $$('fieldconfig_order').val(order); $$('fieldconfig_desc').val(field.comment); if (field.type == 'int') { if (field.extra == 'auto_increment') $$('fieldconfig_type').val("10"); else $$('fieldconfig_type').val("11"); } else if (field.type == 'string') { $$('fieldconfig_type').val("30"); } else if (field.type == 'date') { $$('fieldconfig_type').val("20"); } else if (field.type == 'datetime') { $$('fieldconfig_type').val("21"); } else if (field.type == 'float') { $$('fieldconfig_type').val("13"); } else { $$('fieldconfig_type').val("30"); } } function Reset() { queryUrl = ''; succUrl =''; fieldsData = null; // 基本配置清除 $$('table_id').val("").parent().parent().hide(); $$('title').val(""); $$('host').val(""); $$('port').val(""); $$('username').val(""); $$('passwd').val(""); $$('dbname').val(""); $$('tablename').val(""); $$('readers').val([]).trigger("chosen:updated"); $$('writers').val([]).trigger("chosen:updated"); $$('keyfield').val("").html('<option value=""></option>').trigger("chosen:updated"); $$('sortfield').val("").html('<option value=""></option>').trigger("chosen:updated"); $$('groupfield').val("").html('<option value=""></option>').trigger("chosen:updated"); // tableconfig清除 $$('fieldconfig_table tbody').html(""); $$('fieldconfig_table').trigger('footable_initialize'); $$('fieldconfig_table').parent().parent().hide(); $$('fieldconfig_label').text($$('fieldconfig_label').attr('data-label')); $$('description').val(""); // tableconfig表单重置 $$('fieldconfig_name').html('<option disabled="disabled">请先填写数据库配置</option>').val(""); $$('fieldconfig_title').val(""); $$('fieldconfig_order').val(""); $$('fieldconfig_type').val("0"); $$('fieldconfig_hide').prop('checked', false); $$('fieldconfig_islist').prop('checked', false); $$('fieldconfig_need').prop('checked', false); $$('fieldconfig_def').val(""); $$('fieldconfig_desc').val(""); $$('fieldconfig_extend').hide(); $$('fieldconfig_int_extend').hide(); $$('fieldconfig_min').val(""); $$('fieldconfig_max').val(""); $$('fieldconfig_str_extend').hide(); $$('fieldconfig_minlen').val(""); $$('fieldconfig_maxlen').val(""); $$('fieldconfig_remoteurl').val("").hide(); $$('fieldconfig_dict_key').val(""); $$('fieldconfig_dict_name').val(""); $$('fieldconfig_dict').append(""); $$('fieldconfig_dict').data('dict', []); $$('fieldconfig_dict').parent().parent().parent().hide(); $$('fieldconfig_dict_lable').text($$('fieldconfig_dict_lable').attr('data-label')); $$('submit_msg').hide(); } tableconfig.Init = function() { // 设置提交按钮的事件 $$('button_submit').ladda().click(Submit); $$('button_close').click(Reset); $$('keyfield').chosen({ no_results_text: "请先填写数据库配置", placeholder_text_multiple: " ", width:"100%" }); $$('sortfield').chosen({ no_results_text: "请先填写数据库配置", placeholder_text_multiple: " ", width:"100%" }); $$('groupfield').chosen({ no_results_text: "请先填写数据库配置", placeholder_text_multiple: " ", width:"100%" }); $$('fieldconfig_show').chosen({ placeholder_text_multiple: " ", width:"100%" }); $$('writers').ajaxChosen({ dataType: 'json', type: 'GET', url:'/api/user/search' }, { loadingImg: 'js/plugins/chosen-ajax-addition/loading.gif', }, { no_results_text: "找不到对应用户", placeholder_text_multiple: " ", width:"644px" }); $$('readers').ajaxChosen({ dataType: 'json', type: 'GET', url:'/api/user/search' }, { loadingImg: 'js/plugins/chosen-ajax-addition/loading.gif', }, { no_results_text: "找不到对应用户", placeholder_text_multiple: " ", width:"644px" }); $$('fieldconfig_name').val(""); toastr.options = { closeButton: true, debug: false, progressBar: false, preventDuplicates: false, positionClass: 'toast-top-right', onclick: null, showDuration: "400", hideDuration: "1000", timeOut: "7000", extendedTimeOut: "1000", showEasing: 'swing', hideMethod: 'fadeOut', escapeHtml: true, hideEasing: 'linear', showMethod: 'fadeIn', hideMethod: 'fadeOut' }; $$('host').blur(GetTableSchema); $$('port').blur(GetTableSchema); $$('username').blur(GetTableSchema); $$('passwd').blur(GetTableSchema); $$('dbname').blur(GetTableSchema); $$('tablename').blur(GetTableSchema); $$('keyfield_chosen input').focus(GetTableSchema); $$('fieldconfig_name').focus(GetTableSchema); $$('tableconfig').validate(); $$('fieldconfig_table').footable(); $$('fieldconfig_name').change(FieldSelectName); $$('fieldconfig_add_dict').click(function () { tableconfig.AddDict(); }); $$('fieldconfig_add_fieldrow').click(function () { tableconfig.AddFieldRow(); }); }; function DelFieldRow($tr) { var fielddef = $tr.data('fielddef'); $$('fieldconfig_name option').each(function() { var $this = $(this); if ($this.val() == fielddef.name) $this.attr('style', ''); }); $next = $tr.next(); if ($next.hasClass('footable-row-detail')) $next.remove(); $tr.remove(); var $table = $$('fieldconfig_table'); $table.trigger('footable_initialize'); if ($($table.children('tbody')[0]).children('tr').length == 0) { $table.parent().parent().hide(); $$('fieldconfig_label').text($$('fieldconfig_label').attr('data-label')); } } function EditFieldRow($tr) { var fielddef = $tr.data('fielddef'); $$('fieldconfig_name').val(fielddef.name); $$('fieldconfig_title').val(fielddef.title); $$('fieldconfig_order').val(fielddef.order); $$('fieldconfig_def').val(fielddef.def); $$('fieldconfig_desc').val(fielddef.desc); $$('fieldconfig_hide').prop('checked', fielddef.ishide); $$('fieldconfig_islist').prop('checked', fielddef.islist); $$('fieldconfig_need').prop('checked', fielddef.need); var dict = fielddef.dict; if (fielddef.dict) { for (var i = 0; i < dict.length; i++) { var $li = $('<li class="search-choice">'); $li.data('dict', {key:dict[i].key, name:dict[i].name}); var $span = $('<span></span>'); $span.text(dict[i].key + ":" + dict[i].name); $li.append($span); var $a = $('<a class="search-choice-close"></a>'); $a.click(function() { var val = $li.data('dict'); var dict = $$('fieldconfig_dict').data('dict'); var newdict = []; for (var i = 0; i < dict.length; i++) { if (dict[i].key != val.key) newdict.push(dict[i]); } $$('fieldconfig_dict').data('dict', newdict); $li.remove(); }); $li.append($a); $$('fieldconfig_dict').append($li); } if (fielddef.dict.length > 0) $$('fieldconfig_dict').parent().parent().parent().show(); $$('fieldconfig_dict').data('dict', fielddef.dict); } $$('fieldconfig_type').val(fielddef.type); DelFieldRow($tr); } function AddFieldRowByContext(fielddef) { var $tr = $('<tr></tr>'); $tr.data('fielddef', fielddef); $tr.append('<td>' + fielddef.order + '</td>'); var $name = $('<td></td>'); $name.text(fielddef.name); $tr.append($name); var $title = $('<td></td>'); $title.text(fielddef.title); $tr.append($title); var $type = $('<td></td>'); var $typename = $('<span class="label label-primary"></span>'); $typename.text(GetTypename(fielddef.type)); $type.append($typename); if (fielddef.ishide) { var $hide = $('<span class="label label-danger">隐藏</span>'); $type.append($hide); } if (fielddef.islist) { var $list = $('<span class="label label-warning">列表</span>'); $type.append($list); } if (fielddef.need) { var $list = $('<span class="label label-warning">必填</span>'); $type.append($list); } $tr.append($type); var $def = $('<td></td>'); $def.text(fielddef.def); $tr.append($def); var $extend = $('<td></td>'); $tr.append($extend); var $dict = $('<td></td>'); if (fielddef.dict && fielddef.dict.length > 0) { var $dictdiv = $('<div class="chosen-container chosen-container-multi"></div>'); var $dictul = $('<ul class="chosen-choices" style="border-width:0px;"></ul>'); for (var i = 0; i < fielddef.dict.length; i++) { var $vli = $('<li class="search-choice">'); var $vspan = $('<span></span>'); $vspan.text(fielddef.dict[i].key + ":" + fielddef.dict[i].name); $vli.append($vspan); $dictul.append($vli); } $dictdiv.append($dictul); $dict.append($dictdiv); } $tr.append($dict); var $desc = $('<td></td>'); $desc.text(fielddef.desc); $tr.append($desc); var $opt = $('<td></td>'); var $delb = $('<a class="btn btn-xs btn-danger"><strong>删除</strong></a>'); $delb.click(function () { DelFieldRow($tr); }); $opt.append($delb); var $editb = $('<a class ="btn btn-xs btn-primary"><strong>编辑</strong></a>'); $editb.click(function () { EditFieldRow($tr); }); $opt.append($editb); $tr.append($opt); $$('fieldconfig_table tbody').prepend($tr); } function FieldTableReset() { $$('fieldconfig_name').val(""); $$('fieldconfig_title').val(""); $$('fieldconfig_order').val(""); $$('fieldconfig_def').val(""); $$('fieldconfig_desc').val(""); $$('fieldconfig_type').val(""); $$('fieldconfig_hide').prop('checked', false); $$('fieldconfig_islist').prop('checked', false); $$('fieldconfig_need').prop('checked', false); $$('fieldconfig_extend').hide(); $$('fieldconfig_int_extend').hide(); $$('fieldconfig_min').val(""); $$('fieldconfig_max').val(""); $$('fieldconfig_str_extend').hide(); $$('fieldconfig_minlen').val(""); $$('fieldconfig_maxlen').val(""); $$('fieldconfig_remoteurl').val("").hide(); $$('fieldconfig_dict_key').val(""); $$('fieldconfig_dict_name').val(""); $$('fieldconfig_dict').html(""); $$('fieldconfig_dict').data('dict', []); $$('fieldconfig_dict').parent().parent().parent().hide(); $$('fieldconfig_dict_lable').text($$('fieldconfig_dict_lable').attr('data-label')); } function BuildFieldTable(fielddefs) { $$('fieldconfig_table').parent().parent().show(0, function () { $$('fieldconfig_label').text(""); for (var i in fielddefs) { AddFieldRowByContext(fielddefs[i]); $$('fieldconfig_name option').each(function() { if ($(this).val() == fielddefs[i].name) { $(this).attr('style', 'display:none'); } }); } $$('fieldconfig_table').trigger('footable_initialize'); FieldTableReset(); }); } function GetTypename(typeid) { var typename = ""; $$('fieldconfig_type option').each(function () { if ($(this).attr("value") == typeid) typename = $(this).text(); }); return typename; } tableconfig.AddFieldRow = function () { var fielddef = { name : $$('fieldconfig_name').val(), title : $.trim($$('fieldconfig_title').val()), order : $.trim($$('fieldconfig_order').val()), def : $.trim($$('fieldconfig_def').val()), desc : $.trim($$('fieldconfig_desc').val()), ishide: $$('fieldconfig_hide').is(':checked'), islist: $$('fieldconfig_islist').is(':checked'), need : $$('fieldconfig_need').is(':checked'), dict : $$('fieldconfig_dict').data('dict'), type : $$('fieldconfig_type').val(), }; // var list = $$('fieldconfig_listvalue').manifest('values'); if (fielddef.name == null || fielddef.name == undefined || fielddef.name.length <= 0) return; if (fielddef.order.match(/^[0-9]+$/) == null) return; $$('fieldconfig_table').parent().parent().show(0, function () { $$('fieldconfig_label').text(""); AddFieldRowByContext(fielddef); $$('fieldconfig_name option').each(function() { if ($(this).val() == fielddef.name) { $(this).attr('style', 'display:none'); } }); $$('fieldconfig_table').trigger('footable_initialize'); FieldTableReset(); }); } tableconfig.AddDict = function() { var key = $.trim($$('fieldconfig_dict_key').val()); var name= $.trim($$('fieldconfig_dict_name').val()); var dict= $$('fieldconfig_dict').data('dict'); if (dict == null || dict == undefined || !$.isArray(dict)) { dict = []; $$('fieldconfig_dict').data('dict', dict); } if (key == null || key == undefined || name == null || name == undefined) return; if (key.length == 0 || name.length == 0) return; for (var i = 0; i < dict.length; i++) { if (dict[i].key == key) { dict[i].name = name; $$('fieldconfig_dict li').each(function() { $this = $(this); if ($this.data('dict').key == key) $this.children('span').text(key + ":" + name); }); $$('fieldconfig_dict_key').val(""); $$('fieldconfig_dict_name').val(""); return; } } var $li = $('<li class="search-choice">'); $li.data('dict', {key:key, name:name}); var $span = $('<span></span>'); $span.text(key + ":" + name); $li.append($span); var $a = $('<a class="search-choice-close"></a>'); $a.click(function() { var val = $li.data('dict'); var dict = $$('fieldconfig_dict').data('dict'); var newdict = []; for (var i = 0; i < dict.length; i++) { if (dict[i].key != val.key) newdict.push(dict[i]); } $$('fieldconfig_dict').data('dict', newdict); $li.remove(); if (newdict.length == 0) { $$('fieldconfig_dict').parent().parent().parent().hide(); $$('fieldconfig_dict_lable').text($$('fieldconfig_dict_lable').attr('data-label')); } }); $li.append($a); $$('fieldconfig_dict').parent().parent().parent().show(); $$('fieldconfig_dict_lable').text(""); $$('fieldconfig_dict').append($li); $$('fieldconfig_dict_key').val(""); $$('fieldconfig_dict_name').val(""); dict.push({key:key, name:name}); } // 重置整个表单 tableconfig.Reset = Reset; function SetConfig(config) { $$('title').val(config.title); $$('host').val(config.host); $$('port').val(config.port); $$('username').val(config.username); $$('passwd').val(config.passwd); $$('dbname').val(config.dbname); $$('tablename').val(config.tablename); $$('description').val(config.description); if (config.readers != undefined && config.readers != null) { $$('readers').html(""); for (var i = 0; i < config.readers.length; i++) { var $opt = $('<option></option>'); $opt.attr("value", config.readers[i]); $opt.text(config.readers[i]); $$('readers').append($opt); } $$('readers').val(config.readers).trigger("chosen:updated"); } if (config.writers != undefined && config.writers != null) { $$('writers').html(""); for (var i = 0; i < config.writers.length; i++) { var $opt = $('<option></option>'); $opt.attr("value", config.writers[i]); $opt.text(config.writers[i]); $$('writers').append($opt); } $$('writers').val(config.writers).trigger("chosen:updated"); } if (config.keyfield != undefined && config.keyfield != null) UpdateFieldBySelect('keyfield', config.keyfield); if (config.sortfield != undefined && config.sortfield!= null) UpdateFieldBySelect('sortfield', config.sortfield); if (config.groupfield != undefined && config.groupfield != null) UpdateFieldBySelect('groupfield', config.groupfield); GetTableSchemaByConfig(config.host, config.port, config.username, config.passwd, config.dbname, config.tablename); BuildFieldTable(config.fields); } tableconfig.Edit = function (config, readonly) { if (config.table_id == null || config.table_id == undefined) return false; tableconfig.type = 2; Reset(); $$('table_id').parent().parent().show(); $$('table_id').val(config.table_id); SetConfig(config); if (readonly) $('#' + tableconfig.ModalId() + ' button.ladda-button').hide(); setTimeout(function(){ $(window).trigger("resize"); }, 100) } tableconfig.RollBack = function (config, readonly) { tableconfig.Edit(config, readonly); tableconfig.type = 3; $$('button_submit .ladda-label').text('回滚配置'); } tableconfig.Clone = function (config) { tableconfig.type = 1; Reset(); SetConfig(config); setTimeout(function(){ $(window).trigger("resize"); }, 100) } tableconfig.ModalId = function() { return fid + '_modal'; } tableconfig.Create = function() { tableconfig.type = 1; Reset(); setTimeout(function(){ $(window).trigger("resize"); }, 100) } var modalid = tableconfig.ModalId(); var modalobj = document.getElementById(modalid); if (!modalobj) { var obj = $('#tableconfig_div').clone(); obj.find('[id]').each(function () { var $this = $(this); var id = $this.attr('id'); $this.attr('id', fid + '_' + id); }); obj.attr('id', modalid); obj.css('display', 'none'); $('body').append(obj); tableconfig.Init(); } return tableconfig; } function formbuild(id, def) { var obj = { }; var formid = id; var fielddef = def; obj.type = 1; // 1 创建; 2 编辑; 3 恢复 function BuildSelect(dict) { var $select = $('<select class="form-control"></select>'); for (var i = 0; i < dict.length; i++) { var $opt = $('<option></option>'); $opt.attr("value", dict[i].key); $opt.text(dict[i].name); $select.append($opt); } return $select; } function ResetItem(prop) { var id = '#' + formid + '_' + prop.name; if (prop.dict !== undefined && prop.dict != null && prop.dict.length > 0) { $(id).val("").trigger('chosen:updated'); } else if (prop.islist && prop.type != 40 && prop.type != 50) { $(id).val("").manifest('remove'); } else if (prop.type == 10) { // 自增量 $(id).val(""); } else if (prop.type == 11) { // 整数 $(id).val(""); } else if (prop.type == 12) { // 无符号整数 $(id).val(""); } else if (prop.type == 13) { // 浮点数 $(id).val(""); } else if (prop.type == 20) { // 日期 $(id).val(""); } else if (prop.type == 21) { // 日期时间 $(id).val(""); } else if (prop.type == 22) { // 时间戳 $(id).val(""); } else if (prop.type == 23) { // 修改时间 $(id).val(""); } else if (prop.type == 24) { // 创建时间 $(id).val(""); } else if (prop.type == 30) { // 字符串 $(id).val(""); } else if (prop.type == 31) { // Json $(id).val(""); } else if (prop.type == 32) { // 长文本 $(id).val(""); } else if (prop.type == 40) { // 用户名 $(id).val([]).trigger('chosen:updated'); } else if (prop.type == 41) { // 修改者 $(id).val(""); } else if (prop.type == 42) { // 创建者 $(id).val(""); } else if (prop.type == 50) { // 自动补全 $(id).val([]).trigger('chosen:updated'); } else { // 未知 return null; } } function CreateChosenOptions($obj, values) { if (!values) return; $obj.html(""); if ($.isArray(values)) { for (var i = 0; i < values.length; i++) { var $opt = $('<option></option>').attr("value", values[i]).text(values[i]); $obj.append($opt); } } else { $obj.append($('<option></option>').attr("value", values).text(values)); } $obj.val(values).trigger('chosen:updated'); } function SetItemValue(prop, value) { var id = '#' + formid + '_' + prop.name; if (prop.dict !== undefined && prop.dict != null && prop.dict.length > 0) { $(id).val(value).trigger('chosen:updated'); } else if (prop.islist && prop.type != 40 && prop.type != 50) { $(id).manifest('remove').manifest('add', value); } else if (prop.type == 10) { // 自增量 $(id).val(value); } else if (prop.type == 11) { // 整数 $(id).val(value); } else if (prop.type == 12) { // 无符号整数 $(id).val(value); } else if (prop.type == 13) { // 浮点数 $(id).val(value); } else if (prop.type == 20) { // 日期 $(id).val(value); } else if (prop.type == 21) { // 日期时间 $(id).val(value); } else if (prop.type == 22) { // 时间戳 $(id).val(value); } else if (prop.type == 23) { // 修改时间 $(id).val(value); } else if (prop.type == 24) { // 创建时间 $(id).val(value); } else if (prop.type == 30) { // 字符串 $(id).val(value); } else if (prop.type == 31) { // Json $(id).data('jsoneditor').set(value); } else if (prop.type == 32) { // 长文本 $(id).val(value); } else if (prop.type == 40) { // 用户名 CreateChosenOptions($(id), value); } else if (prop.type == 41) { // 修改者 $(id).val(value); } else if (prop.type == 42) { // 创建者 $(id).val(value); } else if (prop.type == 50) { // 自动补全 CreateChosenOptions($(id), value); } else { // 未知 return null; } } function GetItemValue(prop) { var id = '#' + formid + '_' + prop.name; if (prop.dict !== undefined && prop.dict != null && prop.dict.length > 0) { return $(id).val(); } else if (prop.islist && prop.type != 40 && prop.type != 50) { var ret = $(id).manifest('values'); return ret ? ret : []; } else if (prop.type == 10) { // 自增量 return $(id).val(); } else if (prop.type == 11) { // 整数 return $(id).val(); } else if (prop.type == 12) { // 无符号整数 return $(id).val(); } else if (prop.type == 13) { // 浮点数 return $(id).val(); } else if (prop.type == 20) { // 日期 return $(id).val(); } else if (prop.type == 21) { // 日期时间 return $(id).val(); } else if (prop.type == 22) { // 时间戳 return $(id).val(); } else if (prop.type == 23) { // 修改时间 return $(id).val(); } else if (prop.type == 24) { // 创建时间 return $(id).val(); } else if (prop.type == 30) { // 字符串 return $(id).val(); } else if (prop.type == 31) { // Json var ret = null; try { ret = $(id).data('jsoneditor').get(); } catch (e) { ret = null; } return ret; } else if (prop.type == 32) { // 长文本 return $(id).val(); } else if (prop.type == 40) { // 用户名 return $(id).val(); } else if (prop.type == 41) { // 修改者 return $(id).val(); } else if (prop.type == 42) { // 创建者 return $(id).val(); } else if (prop.type == 50) { // 自动补全 return $(id).val(); } else { // 未知 return null; } } function AddItemEvent(prop) { var id = '#' + formid + '_' + prop.name; if (prop.dict !== undefined && prop.dict != null && prop.dict.length > 0) { $(id).chosen({placeholder_text_multiple:" ", placeholder_text:" ", width: "100%"}); } else if (prop.islist && prop.type != 40 && prop.type != 50) { $(id).manifest({separator: ' '}).focus(function() { $(id).manifest('container').addClass('mf_container_focus'); }).blur(function () { $(id).manifest('container').removeClass('mf_container_focus'); }); } else if (prop.type == 10) { // 自增量 } else if (prop.type == 11) { // 整数 } else if (prop.type == 12) { // 无符号整数 } else if (prop.type == 13) { // 浮点数 } else if (prop.type == 20) { // 日期 $(id).inputmask({mask:'9999-99-99'}); } else if (prop.type == 21) { // 日期时间 $(id).inputmask({mask:'9999-99-99 99:99:99'}); } else if (prop.type == 22) { // 时间戳 $(id).inputmask({mask:'9999-99-99 99:99:99'}); } else if (prop.type == 23) { // 修改时间 $(id).inputmask({mask:'9999-99-99 99:99:99'}); } else if (prop.type == 24) { // 创建时间 $(id).inputmask({mask:'9999-99-99 99:99:99'}); } else if (prop.type == 30) { // 字符串 } else if (prop.type == 31) { // Json var obj = document.getElementById(formid + '_' + prop.name); var editor = new JSONEditor(obj, {hideMenu: true, mode: 'code'}); $(obj).data("jsoneditor", editor); editor.setText("{}"); } else if (prop.type == 32) { // 长文本 } else if (prop.type == 40) { // 用户名 $(id).val([]).ajaxChosen( {dataType:'json',type:'GET',url:'/api/user/search'}, {loadingImg: 'js/plugins/chosen-ajax-addition/loading.gif'}, {no_results_text:"找不到对应用户",placeholder_text_multiple:" ",placeholder_text:" ",width:"100%"} ); } else if (prop.type == 41) { // 修改者 } else if (prop.type == 42) { // 创建者 } else if (prop.type == 50) { // 自动补全 $(id).val([]).ajaxChosen( {dataType:'json',type:'GET',url:'/api/user/search'}, {loadingImg: 'js/plugins/chosen-ajax-addition/loading.gif'}, {no_results_text:"找不到对应用户",placeholder_text_multiple:" ",placeholder_text:" ",width:"100%"} ); } else { // 未知 return null; } } function CreateItem(prop) { var itemid = formid + '_' + prop.name; var $div = $('<div class="form-group"></div>'); var $label = $('<label class="col-sm-2 control-label"></label>'); $label.text(prop.title); $div.append($label); var $input_div = $('<div class="col-sm-9"></div>'); var $input_obj = null; if (prop.dict !== undefined && prop.dict != null && prop.dict.length > 0) { $input_obj = BuildSelect(prop.dict); } else if (prop.islist && prop.type != 40 && prop.type != 50) { $input_obj = $('<input type="text">'); } else if (prop.type == 10) { // 自增量 $input_obj = $('<input type="text" class="form-control" disabled placeholder="系统自动分配">'); } else if (prop.type == 11) { // 整数 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 12) { // 正整数 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 13) { // 浮点数 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 20) { // 日期 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 21) { // 日期时间 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 22) { // 时间戳 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 23) { // 修改时间 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 24) { // 创建时间 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 30) { // 字符串 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 31) { // Json $input_obj = $('<div style="width:100%;height:300px;"></div>'); } else if (prop.type == 32) { // 长文本 $input_obj = $('<textarea class="form-control" rows="4" style="max-width:100%;"></textarea>'); } else if (prop.type == 40) { // 用户名 $input_obj = $('<select class="form-control"><option></option></select>'); } else if (prop.type == 41) { // 修改者 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 42) { // 创建者 $input_obj = $('<input type="text" class="form-control">'); } else if (prop.type == 50) { // 自动补全 $input_obj = $('<select class="form-control"><option></option></select>'); } else { // 未知 return null; } if (prop.islist && $input_obj.is("select")) $input_obj.attr("multiple", "multiple"); $input_obj.attr("id", itemid); $input_div.append($input_obj); if (prop.desc != undefined && prop.desc != null && prop.desc.length > 0) $input_div.append($('<span class="help-block m-b-none"></span>').text(prop.desc)); $div.append($input_div); return $div; } function showError(errmsg, error) { errmsg = "提交失败, 错误信息: " + errmsg + "。"; if (error) { var i = 0; for (var name in error) { i++; errmsg += i + ". " + fielddef.fields[name].name + ": " + error[name] + ";"; } } $('#' + formid + "_submitmsg").text(errmsg).css('display', 'inline'); } // 提交数据 function Submit() { var url = ''; $('#' + formid + "_submitmsg").hide(); var bu = $('#' + formid + "_submitbutton").ladda(); if (obj.type == 1) { // new url = '/api/dbmanager/create/' + schema.table_id; } else if (obj.type == 2) { url = '/api/dbmanager/update/' + schema.table_id; } else if (obj.type == 3) { url = '/api/dbmanager/rollback/' + schema.real_schema.table_id; } bu.ladda('start'); $.ajax({ type: "POST", url: url, data: { data: JSON.stringify(obj.values()) }, dataType: 'json', success: function (data) { if (data.errcode !== null && data.errcode !== undefined && data.errcode != 0) { showError(data.errmsg, data.error); return; } $('#' + formid + "_submitmsg").text("提失成功!").css('display', 'inline'); if (obj.success) obj.success(); setTimeout(function(){ obj.Reset(); bu.prev().trigger("click"); }, 1500); }, error: function () { $('#' + formid + "_submitmsg").text("提交失败,请重试!").css('display', 'inline'); }, complete: function () { bu.ladda('stop'); } }); }; function BuildForm() { var fields = fielddef.fields; var $form = $('<form class="form-horizontal"></form>'); $form.attr("id", formid); for (var i in fields) { var $obj = CreateItem(fields[i]); if ($obj) $form.append($obj); } $form.append('<div class="hr-line-dashed"></div>'); var $subdiv = $('<div class="col-sm-10 col-sm-offset-2"></div>'); var $button_close = $('<button type="button" class="btn btn-white" data-dismiss="modal">关闭</button>'); $button_close.attr("id", formid + "_closbutton"); $subdiv.append($button_close); var $button_submit = $('<button class="ladda-button btn btn-primary" data-style="slide-left"></button>'); $button_submit.attr("id", formid + "_submitbutton"); $button_submit.append('<span class="ladda-label">提交</span>'); $button_submit.append('<span class="ladda-spinner"></span>'); $button_submit.append('<div class="ladda-progress" style="width: 0px;"></div>'); $subdiv.append($button_submit); var $msg = $('<p class="text-danger" style="display:none;"></p>'); $msg.attr("id", formid + "_submitmsg"); $subdiv.append($msg); $button_submit.click(Submit); $form.append($subdiv); return $form; } obj.ModalId = function () { return formid + '_modal'; } function BuildModal() { var modalid = obj.ModalId(); var modalobj = document.getElementById(modalid); if (modalobj) return $(modalobj); var $modal = $('<div class="modal inmodal" tabindex="-1" role="dialog" aria-hidden="true"></div>'); $modal.attr("id", formid + "_modal"); var $mod_content = $('<div class="modal-dialog modal-lg"></div>'); var $content = $('<div class="modal-content"></div>'); $mod_content.append($content); var $header = $('<div class="modal-header" style="padding-bottom:0px;"></div>'); $header.append('<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>'); var $title = $('<h2 style="text-align:left;"></h2>'); $title.text(fielddef.title); $header.append($title); $content.append($header); var $footer = $('<div class="modal-footer" style="text-align:left;"></div>'); var $inbox = $('<div class="ibox"></div>'); $inbox.append(BuildForm()); $inbox.append('<div style="min-height:60px;"></div>'); $footer.append($inbox); $content.append($footer); $modal.append($mod_content); $('body').append($modal); for (var i in fielddef.fields) AddItemEvent(fielddef.fields[i]); return $modal; } obj.build = function (id, def) { formid = id; fielddef = def; return BuildModal(); } obj.Reset = function () { var model = BuildModal(); for (var i in fielddef.fields) ResetItem(fielddef.fields[i]); return model; } obj.Edit = function (values, readonly) { var model = BuildModal(); for (var i in fielddef.fields) SetItemValue(fielddef.fields[i], values[fielddef.fields[i].name]); if (fielddef.keyfield) { for (var i = 0; i < fielddef.keyfield.length; i++) { var id = '#' + formid + '_' + fielddef.keyfield[i]; $(id).attr('disabled', 'disabled'); } } obj.type = 2; if (readonly) $('#' + obj.ModalId() + ' button.ladda-button').hide(); return model; } obj.RollBack = function (config, readonly) { obj.Edit(config, readonly); obj.type = 3; $('#' + formid + '_' + 'submitbutton .ladda-label').text('回滚配置'); } obj.Clone = function (values) { var model = BuildModal(); for (var i in fielddef.fields) { if (fielddef.fields[i].type == 10) continue; SetItemValue(fielddef.fields[i], values[fielddef.fields[i].name]); } obj.type = 1; return model; } obj.values = function () { var values = { }; for (var i in fielddef.fields) { var val = GetItemValue(fielddef.fields[i]); values[fielddef.fields[i].name] = val; } return values; } BuildModal(); return obj; } var schema = null; // schema的配置 var reqseq = 0; var totalnum = 0; var currPage = 1; var args = ""; var totalPage = 1; var datalist = null; var options = { pagecount:25, options:[], orderby:"", desc:"", }; var LoadPageByNo = null; function UserRight(data) { if (schema.table_id != 0 && schema.table_id != 1) data = schema; if (!data) return 0; if (data.creater == window.login_user) return 2; if (data.writers && data.writers.length > 0) { for (var i = 0; i < data.writers.length; i++) { if (data.writers[i] == 'ALL' || data.writers[i] == window.login_user) return 2; } } if (data.readers && data.readers.length > 0) { for (var i = 0; i < data.readers.length; i++) { if (data.readers[i] == 'ALL' || data.readers[i] == window.login_user) return 1; } } return 0; } function BuildPagination(curr) { var max = curr + 2; var min = curr - 2; if (min <= 1) { min = 1; max = min + 4; } if (max > totalPage) { max = totalPage; min = (max - 4) <= 0 ? 1 : max - 4; } var $ul = $('#datalist_pagination'); $ul.html(""); var $prev = $('<li class="paginate_button previous"></li>'); if (curr == 1) $prev.addClass('disabled'); var $prev_a = $('<a><i class="fa fa-chevron-left"></i></a>'); $prev_a.click(LoadPrevPage); $prev.append($prev_a); $ul.append($prev); for (; min <= max; min++) { var $li = $('<li class="paginate_button"></li>'); if (min == curr) $li.addClass('active'); var $a = $('<a></a>'); $a.text(min); $a.attr('href', '#' + min); $a.data('pageno', "" + min); $a.click(function () { var pageNo = $(this).data('pageno'); var $ul = $('#datalist_pagination').children().each(function() { var $this = $(this); if ($this.hasClass('previous')) { if (pageNo > 1) $this.removeClass('disabled'); if (pageNo <= 1) $this.addClass('disabled'); } if ($this.hasClass('next')) { if (pageNo < totalPage) $this.removeClass('disabled'); if (pageNo >= totalPage) $this.addClass('disabled'); } $(this).removeClass('active'); }); LoadPageByNo(pageNo, true, false); $(this).parent().addClass('active'); }); $li.append($a); $ul.append($li); } var $next = $('<li class="paginate_button next"></li>'); if (curr == totalPage) $next.addClass('disabled'); var $next_a = $('<a><i class="fa fa-chevron-right"></i></a>'); $next_a.click(LoadNextPage); $next.append($next_a); $ul.append($next); } function BuildTable() { var $table = $('#datalist_table'); $table.html(""); var $thead = $('<thead></thead>'); var $tr = $('<tr></tr>'); var first = true; for (var i in schema.fields) { var prop = schema.fields[i]; var $th = $('<th></th>'); $th.text(prop.title && prop.title.length > 0 ? prop.title : prop.name); if (!prop.ishide && first) { $th.attr('data-toggle', "true"); first = false; } if (prop.ishide) { $th.attr("data-hide", "all"); } else { var found = false; if (schema.keyfield) { for (var j = 0; j < schema.keyfield.length; j++) { if (schema.keyfield[j] == prop.name) { found = true; break; } } } if (!found) $th.attr("data-breakpoints", "xs sm") } $tr.append($th); } $tr.append('<th>操作</th>'); $thead.append($tr); $table.append($thead); $table.append('<tbody></tbody>'); $table.append('<tfoot><tr><td colspan="100" class="footable-visible"></td></tr></tfoot>'); $table.footable().on('footable_row_expanded', function (e) { var funcs = $(e.row).data('trigger_functions'); if (funcs != undefined && funcs != null) { for (var i = 0; i < funcs.length; i++) funcs[i](); // $(e.row).data('trigger_functions', null); } }); BuildPagination(1); } function SetNum(total, beg, end) { $('#datalist_databeg').text(beg); $('#datalist_dataend').text(end); $('#datalist_datatotal').text(total); } function ConverValue(dict, value, type) { if (dict !== undefined && dict != null && dict.length > 0) { for (var i = 0; i < dict.length; i++) { if (dict[i].key == value) return dict[i].name; } } if (type == 22 && value) { var d = new Date(parseInt(value) * 1000); return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(); } return value; } function historyKey(data) { var key = data[schema.keyfield[0]]; for (var i = 1; i < schema.keyfield.length; i++) key += ":" + data[schema.keyfield[i]]; return key; } function BuildHistoryAction(index, $opt, data) { var real = schema.real_schema; var right = UserRight(real); var $editb = $('<a class="btn btn-xs btn-outline btn-primary"><strong>修改前</strong></a>'); $editb.click(function () { var modal = null; if (real.table_id == 0) { modal = schemabuild('tableconfig_edit_old_' + data.__his_old_content.table_id); } else { modal = formbuild('tableconfig_edit_old_' + reqseq + '_' + index, real); } modal.success = function () { LoadPageByNo(currPage, false, true); }; modal.RollBack(data.__his_old_content, right != 2); $('#' + modal.ModalId()).modal('show'); }); if (data.__his_old_content) $opt.append($editb); $editb = $('<a class="btn btn-xs btn-outline btn-danger"><strong>修改后</strong></a>'); $editb.click(function () { var modal = null; if (real.table_id == 0) { modal = schemabuild('tableconfig_edit_new_' + data.__his_new_content.table_id); } else { modal = formbuild('tableconfig_edit_new_' + reqseq + '_' + index, real); } modal.success = function () { LoadPageByNo(currPage, false, true); }; modal.RollBack(data.__his_new_content, right != 2); $('#' + modal.ModalId()).modal('show'); }); if (data.__his_new_content) $opt.append($editb); } function BuildAction(index, $opt, data) { var $del_c= $('<div class="dropdown" style="display:inline"></div>'); var $delb = $('<a class="btn btn-xs btn-outline btn-danger" data-toggle="dropdown" aria-expanded="false"><strong>删除</strong></a>'); $del_c.append($delb); var $delu = $('<ul class="dropdown-menu dropdown-user"style="padding-top:10px;padding-bottom:10px;"></ul>'); var $deln = $('<li style="display:inline"><a style="display:inline;">取消</a></li>'); $delu.append($deln); var $dely = $('<li style="display:inline"></li>') var $delyb= $('<a style="display:inline;"><span class="text-danger">确认</span></a>'); $dely.append($delyb); $delu.append($dely); $del_c.append($delu); $delyb.click(function () { $.ajax({ type: "POST", url: '/api/dbmanager/delete/' + schema.table_id, data: { data: JSON.stringify(data) }, dataType: 'json', success: function (data) { if (data.errcode !== null && data.errcode !== undefined && data.errcode != 0) { toastr['error']('删除失败', data.errmsg); return; } toastr['success']('', '删除成功'); LoadPageByNo(currPage, false, true); $('#datalist_table').data('footable').removeRow($tr); }, error: function (xhr, errcode, errmsg) { toastr['error']('删除失败', errmsg); }, complete: function () { } }); }); var right = UserRight(data); if (right == 2) $opt.append($del_c); var $cloneb = $('<a class="btn btn-xs btn-outline btn-warning"><strong>复制</strong></a>'); $cloneb.click(function () { var modal = null; if (schema.table_id == 0) { modal = schemabuild('tableconfig_clone_' + data.table_id); } else { modal = formbuild('tableconfig_clone_' + reqseq + '_' + index, schema); } modal.Clone(data); modal.success = function () { LoadPageByNo(currPage, false, true); }; $('#' + modal.ModalId()).modal('show'); }); if ((right == 2 || right == 1) && schema.table_id != 1) $opt.append($cloneb); var title = (right == 2) ? "编辑" : "查看"; var $editb = $('<a class="btn btn-xs btn-outline btn-primary"><strong>' + title + '</strong></a>'); $editb.click(function () { var modal = null; if (schema.table_id == 0) { modal = schemabuild('tableconfig_edit_' + data.table_id); } else { modal = formbuild('tableconfig_edit_' + reqseq + '_' + index, schema); } modal.success = function () { LoadPageByNo(currPage, false, true); }; modal.Edit(data, right == 2 ? false : true); $('#' + modal.ModalId()).modal('show'); }); if (right == 2 || right == 1) $opt.append($editb); if (schema.table_id != 1 && schema.keyfield && schema.keyfield.length > 0) { var $infob = $('<a class="btn btn-xs btn-outline btn-success"><strong>日志</strong></a>'); $infob.attr("href", '/database/history/' + schema.table_id + '/' + historyKey(data)); if (right == 2 || right == 1) $opt.append($infob); } if (schema.table_id == 0) { var $infob = $('<a class="btn btn-xs btn-outline btn-success"><strong>数据</strong></a>'); $infob.attr("href", '/database/' + data.table_id); if (right == 2 || right == 1) $opt.append($infob); } if (right == 2 && schema.table_id == 2) { var $setting = $('<a class="btn btn-xs btn-outline btn-success"><strong>配置</strong></a>'); $setting.attr("href", "/setting/" + data.config_id); $opt.append($setting); } } function BuildDataRow(index, data) { var $tr = $('<tr></tr>'); var funcs = []; for (var i in schema.fields) { var prop = schema.fields[i]; var $td = $('<td></td>'); if (prop.islist) { if (data[prop.name] && data[prop.name].length > 0) { for (var j = 0; j < data[prop.name].length; j++) $td.append($('<span class="label"></span>').text(ConverValue(prop.dict, data[prop.name][j], prop.type))); } } else if (prop.type == 10) { // 自增量 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 11) { // 整数 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 12) { // 无符号整数 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 13) { // 浮点数 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 20) { // 日期 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 21) { // 日期时间 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 22) { // 时间戳 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 23) { // 修改时间 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 24) { // 创建时间 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 30) { // 字符串 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 31) { // Json var id = 'datalist_row_' + reqseq + '_' + index + '_' + prop.name; var $div = $('<div></div>'); $div.addClass(id); funcs.push((function(json, id) { return function () { if ($(id).children().length != 0) return; console.log("new " + id); var newjf = new JsonFormater({ dom: id, singleTab: " ", tabSize: 1, imgCollapsed: "/img/Collapsed.gif", imgExpanded: "/img/Expanded.gif", quoteKeys:false }); newjf.doFormat(json); newjf.collapseLevel(2); }; })(data[prop.name], '#datalist_table .footable-row-detail .' + id)); $td.append($div); } else if (prop.type == 32) { // 长文本 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 40) { // 用户名 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 41) { // 修改者 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 42) { // 创建者 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else if (prop.type == 50) { // 自动补全 $td.text(ConverValue(prop.dict, data[prop.name], prop.type)); } else { // 未知 $td.text(ConverValue(prop.dict, data[prop.name], -1)); } $tr.append($td); if (funcs.length > 0) $tr.data('trigger_functions', funcs); } var $opt = $('<td></td>'); if (schema.table_id != 1) { BuildAction(index, $opt, data); } else { BuildHistoryAction(index, $opt, data); } $tr.append($opt); $tr.data('dbdata', data); return $tr; } function BuildTableData() { if (datalist.total != undefined) { totalnum = datalist.total; totalPage = Math.ceil(totalnum / options.pagecount); } var beg = parseInt(datalist.offset) + 1; var end = parseInt(datalist.offset) + datalist.list.length; if (end > totalnum) end = totalnum; if (beg > end) beg = end; SetNum(totalnum, beg, end); var $tbody = $($('#datalist_table tbody')[0]); $tbody.html(""); var now = (new Date).getTime(); for (var i = 0; i < datalist.list.length; i++) { $tbody.append(BuildDataRow(i, datalist.list[i])); } console.log("append end: " + (new Date).getTime() + "spend " + ((new Date).getTime() - now)); $('#datalist_table').trigger('footable_initialize'); } LoadPageByNo = function (page, noflushpage, force, func) { var pageno = page; if (pageno > totalPage) pageno = totalPage; if (pageno < 1) pageno = 1; var offset = (pageno - 1) * options.pagecount; var params = { offset: offset, count: options.pagecount, options: options.options, orderby: options.orderby, desc: options.desc, gettotal: (pageno == 1 ? 1 : 0) }; var paramstr = JSON.stringify(params); if (paramstr == args && force == false) // 是当前页; 不需要请求了 return; console.log("load page " + pageno); currPage = parseInt(pageno); args = paramstr; reqseq++; var seq = reqseq; $.ajax({ url: '/api/dbmanager/get/' + schema.table_id, type: 'GET', dataType: 'json', data: { offset: offset, count: options.pagecount, options: options.options, orderby: options.orderby, desc: options.desc, gettotal: (pageno == 1 ? 1 : 0) }, success: function (data) { if (seq != reqseq) { return; } if ((data.errcode != null || data.errcode != undefined) && data.errcode != 0) { // 发生了错误 toastr['error']("请求接口错误", data.errmsg); return; } datalist = data; BuildTableData(); if (!noflushpage) BuildPagination(pageno); }, error: function (xhr, status, err) { toastr['error']("请求接口错误", err); }, complete: function() { if (func) func(); console.log("currpage " + currPage); } }); if (!noflushpage) BuildPagination(pageno); } function LoadNextPage() { if (currPage >= totalPage) return; console.log("2: currPage " + currPage + 1); return LoadPageByNo(currPage + 1, false, false); } function LoadPrevPage() { if (currPage == 0) return; return LoadPageByNo(currPage - 1); } function BuildFieldSelect(id, fields) { var $select = $('#' + id); $select.html(""); for (var i in fields) { var $opt = $('<option></option>'); $opt.attr("value", fields[i].name); $opt.text(fields[i].title && fields[i].title.length > 0 ? fields[i].title : fields[i].name); $select.append($opt); } } function AddFilter() { var field = $('#adv_search_field').val(); var title = $('#adv_search_field option:selected').text(); var op = $('#adv_search_op').val(); var opname= $('#adv_search_op option:selected').text(); var val = $.trim($('#adv_search_value').val()); if (title.length == 0 || opname.length == 0 || val.length == 0) return; var $li = $('<li></li>'); $li.append($('<span class="label label-primary"></span>').text(title)); $li.append($('<span class="label label-warning"></span>').text(opname)); $li.append($('<span class="label"></span>').text(val)); var $bu = $('<button class="btn btn-danger btn-xs">删除</button>'); $bu.click(function () { $li.remove(); }); $li.append($bu); $li.data('filteroption', {name: field, op: op, value: val}); $('#adv_search_filters').append($li); $('#adv_search_value').val(""); } function SetFilter() { var opts = []; $('#adv_search_filters li').each(function () { var opt = $(this).data('filteroption'); if (opt) opts.push(opt); }); options.options = opts; options.desc = $('#adv_search_order').val(); options.orderby = $('#adv_search_order_field').val(); } datatable.Init = function (config, firstpage, opts) { schema = config; options.options = opts; $('#datalist_search_field').focus(function() { $('#datalist_search_value').addClass('form-control_focus'); }).blur(function() { $('#datalist_search_value').removeClass('form-control_focus'); }); $('#datalist_search_value').focus(function() { $('#datalist_search_field').addClass('form-control_focus'); }).blur(function() { $('#datalist_search_field').removeClass('form-control_focus'); }); // 修改一页大小配置 $('#datalist_pageno').change(function() { options.pagecount = $('#datalist_pageno').val(); LoadPageByNo(1, false, false); }).val(options.pagecount); // 按页码跳转按钮 $('#datalist_go_button').click(function() { var pageno = $('#datalist_go_pageno').val(); if (pageno.match(/^[0-9]+$/) == null) { $('#datalist_go_pageno').val(""); return; } LoadPageByNo(pageno, false, false); }); // 搜索按钮 $('#datalist_search_button').click(function () { var field = $('#datalist_search_field').val(); var value = $.trim($('#datalist_search_value').val()); var op = null; if (field.length != 0 && value.length != 0) { for (var i in config.fields) { if (config.fields[i].name == field) { op = "LIKE"; break; } } } options.options = []; if (op) options.options = [ { name:field, op: op, value: value } ]; LoadPageByNo(1, false, false); }); // 重置按钮 $('#datalist_search_reset').click(function () { options.options = [], options.orderby = "", options.desc = "", options.pagecount = 25; $('#datalist_pageno').val(25); $('#datalist_search_value').val(""); LoadPageByNo(1, false, false); }); // 创建字段列表下拉框 BuildFieldSelect('datalist_search_field', config.fields); BuildFieldSelect('adv_search_field', config.fields); BuildFieldSelect('adv_search_order_field', config.fields); // 高级搜索配置 // 清空按钮 $('#adv_search_clear').click(function () { $('#adv_search_value').val(""); $('#adv_search_filters').html(""); $('#adv_search_order').val(""); $('#adv_search_order_field').val(""); }); // 搜索按钮 $('#adv_search_button').click(function () { SetFilter(); LoadPageByNo(1, false, false); $('#adv_search_close').trigger('click'); }); // 添加搜索条件按钮 $('#adv_search_add').click(function () { AddFilter(); }); $('#adv_search_field').val(""); $('#adv_search_op').val(""); $('#adv_search_value').val(""); BuildTable(); if (firstpage) { currPage = 1; datalist = firstpage; options.pagecount = datalist.count; $('#datalist_pageno').val(datalist.count); BuildTableData(); BuildPagination(1); } else { LoadPageByNo(1, false, false, init); } var newmodal = null; $('#datalist_creater').click(function () { if (schema.table_id != 0 && UserRight() != 2) return; if (newmodal == null) { if (schema.table_id == 0) { newmodal = schemabuild('tableconfig_new_' + schema.table_id); } else { newmodal = formbuild('tableconfig_new_' + schema.table_id, schema); } } newmodal.success = function () { LoadPageByNo(currPage, false, true); }; $('#' + newmodal.ModalId()).modal('show'); }); if (schema.table_id != 0 && UserRight() != 2) { $('#datalist_creater').attr("disabled", "disabled").css("opacity", "0").css("width", "0px"); } if (schema.table_id == 0 || schema.table_id == 2 || UserRight() != 2) { $('#datalist_modify_schema').hide(); } else { var editmodal = null; $('#datalist_modify_schema').click(function () { if (editmodal == null) { editmodal = schemabuild('tableconfig_modify_' + schema.table_id); editmodal.Edit(schema); editmodal.success = function () { location.reload(); }; } editmodal.success = function () { LoadPageByNo(currPage, false, true); }; $('#' + editmodal.ModalId()).modal('show'); }).show(); } if (schema.table_id == 1 && options) // 隐藏选项 $('.ibox-title').hide(); } })(); $(document).ready(function () { if (window.tableschema && window.firstpage) { datatable.Init(window.tableschema, window.firstpage, window.options); } });