{% extends "base.html" %}
{% block content %}
<!-- Nav tabs -->
<ul id="nav-tabs" class="nav nav-tabs" role="tablist">
<li id="param_tab" class="active">
<a href="#param_table" role="tab" data-toggle="tab">可修改参数</a>
</li>
<li id="history_tab">
<a href="#history_table" role="tab" data-toggle="tab">修改历史</a>
</li>
<div class="form-inline pull-right">
<div class="form-group ">
<button id="btn_add_param" type="button" class="btn btn-default"
onclick="window.open('/admin/sql/paramtemplate/add/')">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
添加参数
</button>
</div>
<div id="editable-div" style="display: none" class="form-group">
<select id=editable class="form-control selectpicker" data-live-search="true">
<option value="is-empty" disabled="">允许修改</option>
<option value="true" selected="selected">是</option>
<option value=''>否</option>
</select>
</div>
<div class="form-group ">
<select id=instance class="form-control selectpicker" name="instance_list"
title="请选择实例"
data-live-search="true">
<option value="is-empty" disabled="" selected="selected">请选择实例</option>
</select>
</div>
</div>
</ul>
<div id="tab-content" class="tab-content">
<div id="param_table" role="tabpanel" class="tab-pane fade in active table-responsive">
<table id="param-list" data-toggle="table" class="table table-hover"
style="table-layout:fixed;word-break:break-word;overflow:hidden;"></table>
</div>
<div id="history_table" role="tabpanel" class="tab-pane fade table-responsive">
<table id="history-list" data-toggle="table" class="table table-hover"
style="table-layout:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
</table>
</div>
</div>
{% endblock content %}
{% block js %}
{% load static %}
<link href="{% static 'bootstrap-editable/css/bootstrap-editable.css' %}" rel="stylesheet">
<script src="{% static 'bootstrap-table/extensions/editable/bootstrap-table-editable.js' %}"></script>
<script src="{% static 'bootstrap-editable/js/bootstrap-editable.js' %}"></script>
<script src="{% static 'bootstrap-table/js/bootstrap-table-export.min.js' %}"></script>
<script src="{% static 'bootstrap-table/js/tableExport.min.js' %}"></script>
<script src="{% static 'sql-formatter/sql-formatter.min.js' %}"></script>
<script>
function get_param_list() {
$("#editable-div").show();
if ($("#instance").val()) {
//初始化table
$('#param-list').bootstrapTable('destroy').bootstrapTable({
escape: true,
method: 'post',
contentType: "application/x-www-form-urlencoded",
url: "/param/list/",
striped: true, //是否显示行间隔色
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
pagination: true, //是否显示分页(*)
sortable: true, //是否启用排序
sortOrder: "desc", //排序方式
sortName: 'time', //排序字段
sidePagination: "client", //分页方式:client客户端分页,server服务端分页(*)
pageNumber: 1, //初始化加载第一页,默认第一页,并记录
pageSize: 30, //每页的记录行数(*)
pageList: [20, 30, 50, 100, 500], //可供选择的每页的行数(*)
search: true, //是否显示表格搜索
strictSearch: false, //是否全匹配搜索
showColumns: true, //是否显示所有的列(选择显示的列)
showRefresh: true, //是否显示刷新按钮
showExport: true,
exportDataType: "all",
minimumCountColumns: 2, //最少允许的列数
clickToSelect: true, //是否启用点击选中行
showToggle: true, //是否显示详细视图和列表视图的切换按钮
cardView: false, //是否显示详细视图
detailView: true, //是否显示父子表
detailFormatter: function (index, row) {
return row.description
},
locale: 'zh-CN', //本地化
toolbar: "#process-toolbar", //指明自定义的toolbar
queryParamsType: 'limit',
//请求服务数据时所传参数
queryParams: function (params) {
return {
search: params.search,
editable: $("#editable").val(),
instance_id: $("#instance").val()
}
},
onEditableSave: function (field, row, oldValue, $el) {
if (row.editable) {
$.ajax({
type: "post",
url: "/param/edit/",
data: {
instance_id: $("#instance").val(),
variable_name: row.variable_name,
runtime_value: row.runtime_value
},
success: function (data) {
alert(data.msg);
get_param_list()
},
error: function (data) {
alert(data.msg);
get_param_list()
}
});
} else {
alert('请先在参数模板中配置该参数!');
get_param_list()
}
},
columns: [{
title: '参数名',
field: 'variable_name',
formatter: function (value, row, index) {
if (row.id) {
return "<a target=\"_blank\" href=\"/admin/sql/paramtemplate/" + row.id + "/change/\">" + value + "</a>"
} else {
return value
}
}
}, {
title: '运行参数值',
field: 'runtime_value',
editable: {
type: 'text',
title: '修改参数值',
placement: 'bottom',
emptytext: '-',
validate: function (v) {
if (!v) return '参数值不能为空';
}
}
}, {
title: '默认参数值',
field: 'default_value'
}, {
title: '可修改参数值',
field: 'valid_values'
}, {
title: '参数描述',
field: 'description',
visible: false // 默认不显示
}],
onLoadSuccess: function () {
},
onLoadError: onLoadErrorCallback,
onSearch: function (e) {
//传搜索参数给服务器
return {
search: e.search
}
},
responseHandler: function (res) {
//在ajax获取到数据,渲染表格之前,修改数据源
return res;
}
});
}
}
function get_param_edit_history() {
$("#editable-div").hide();
if ($("#instance").val()) {
$('#history-list').bootstrapTable('destroy').bootstrapTable({
escape: true,
method: 'post',
contentType: "application/x-www-form-urlencoded",
url: "/param/history/",
striped: true, //是否显示行间隔色
cache: false, //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
pagination: true, //是否显示分页(*)
sidePagination: "server", //分页方式:client客户端分页,server服务端分页(*)
pageNumber: 1, //初始化加载第一页,默认第一页,并记录
pageSize: 30, //每页的记录行数(*)
pageList: [20, 30, 50, 100], //可供选择的每页的行数(*)
search: true, //是否显示表格搜索
strictSearch: false, //是否全匹配搜索
showColumns: true, //是否显示所有的列(选择显示的列)
showRefresh: true, //是否显示刷新按钮
minimumCountColumns: 2, //最少允许的列数
clickToSelect: true, //是否启用点击选中行
uniqueId: "id", //每一行的唯一标识,一般为主键列
showToggle: true, //是否显示详细视图和列表视图的切换按钮
showExport: true,
exportDataType: "all",
cardView: false, //是否显示详细视图
detailView: false, //是否显示父子表
locale: 'zh-CN', //本地化
toolbar: "#toolbar", //指明自定义的toolbar
queryParamsType: 'limit',
//请求服务数据时所传参数
queryParams: function (params) {
return {
limit: params.limit,
offset: params.offset,
search: params.search,
instance_id: $("#instance").val()
}
},
columns: [{
title: '实例名称',
field: 'instance__instance_name'
}, {
title: '参数名',
field: 'variable_name'
}, {
title: '变更前的参数值',
field: 'old_var'
}, {
title: '变更后的参数值',
field: 'new_var'
}, {
title: '修改人',
field: 'user_display'
}, {
title: '修改时间',
field: 'create_time'
}],
onLoadSuccess: function () {
},
onLoadError: onLoadErrorCallback,
onSearch: function (e) {
//传搜索参数给服务器
return {
search: e.search
}
},
responseHandler: function (res) {
//在ajax获取到数据,渲染表格之前,修改数据源
return res;
}
});
}
}
//如果已选择实例,进入页面自动填充,并且重置激活id
$(document).ready(function () {
//获取用户实例列表
$(function () {
$.ajax({
type: "get",
url: "/group/user_all_instances/",
dataType: "json",
data: {
db_type: ['mysql', 'inception', 'goinception']
},
complete: function () {
//如果已选择实例,进入页面自动填充,并且重置激活id
sessionStorage.setItem('param_active_li_id', 'param_tab');
if (sessionStorage.getItem('instance_id')) {
$("#instance").val(sessionStorage.getItem('instance_id')).trigger("change");
}
get_param_list();
},
success: function (data) {
if (data.status === 0) {
let result = data['data'];
$("#instance").empty();
for (let i = 0; i < result.length; i++) {
let instance = "<option value=\"" + result[i]['id'] + "\">" + result[i]['instance_name'] + "</option>";
$("#instance").append(instance);
}
$('#instance').selectpicker('render');
$('#instance').selectpicker('refresh');
} else {
alert(data.msg);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
}
);
//tab切换,保留当前激活的标签id
$(function () {
$("#nav-tabs").on('shown.bs.tab', "li", function (e) {
var active_li_id = $(e.target).parents().attr('id');
sessionStorage.setItem('param_active_li_id', active_li_id);
//当前激活的标签id
if (active_li_id === 'param_tab') {
get_param_list();
} else if (active_li_id === 'history_tab') {
get_param_edit_history();
}
});
});
//实例变动
$("#instance").change(function () {
flush()
});
//筛选项变动
$("#editable").change(function () {
flush()
});
//刷新页面
function flush() {
sessionStorage.setItem('instance_id', $("#instance").val());
var active_li_id = sessionStorage.getItem('param_active_li_id');
if (active_li_id === 'param_tab') {
get_param_list();
} else if (active_li_id === 'history_tab') {
get_param_edit_history();
}
}
</script>
{% endblock %}