Authored by zhengyouwei

add abtest

... ... @@ -209,10 +209,14 @@ public class HttpUriContants {
public static final String ABTEST_CONFIG_INSERT = "/abtestConfig/insert";
public static final String ABTEST_CONFIG_UPDATE = "/abtestConfig/update";
public static final String ABTEST_CONFIG_DELETE = "/abtestConfig/delete";
public static final String ABTEST_CONFIG_GETALLNAME = "/abtestConfig/getAllNames";
public static final String ABTEST_TOTAL_GETALL = "/abtestTotal/getAll";
public static final String ABTEST_TOTAL_INSERT = "/abtestTotal/insert";
public static final String ABTEST_TOTAL_UPDATE = "/abtestTotal/update";
public static final String ABTEST_TOTAL_DELETE = "/abtestTotal/delete";
public static final String ABTEST_TOTAL_GETBYID= "/abtestTotal/getById";
public static final String ABTEST_TOTAL_GETALLTYPES= "/abtestTotal/getAllTypes";
public static final String ABTEST_TOTAL_FLUSH= "/abtestTotal/flush";
}
... ...
... ... @@ -23,5 +23,8 @@ public class ABTestTotal {
private String appVersion;
private int moduloNumStart;
private int moduloNumEnd;
}
... ...
... ... @@ -33,10 +33,12 @@ public class ABTestConfigCtrl {
@RequestMapping("/toABTestConfig")
@ResponseBody
public ModelAndView toABTets(Model model) {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_GETALLTYPES, null, BaseResponse.class);
model.addAttribute("ABTypes",response.getData() );
List<String> configTypes = new ArrayList<>();
configTypes.add("RESOURCE");
configTypes.add("UI");
configTypes.add("STATIC");
model.addAttribute("configTypes",configTypes );
return new ModelAndView("abtest/abtestConfig");
}
... ... @@ -85,5 +87,15 @@ public class ABTestConfigCtrl {
return response;
}
/**
* 获取
*
* @return
*/
@RequestMapping("/getAllNames")
@ResponseBody
public BaseResponse getAllNames(AbTestReq abTestReq) {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_CONFIG_GETALLNAME, abTestReq, BaseResponse.class);
return response;
}
}
... ...
package com.ui.ctrl.app;
package com.ui.ctrl;
import com.ui.contants.HttpUriContants;
import com.ui.http.HttpRestClient;
... ... @@ -43,7 +43,7 @@ public class ABTestTotalCtrl {
*
* @return
*/
@RequestMapping("/save")
@RequestMapping("/saveTotal")
@ResponseBody
public BaseResponse insert(ABTestTotal abTest) {
if (abTest.getId() == 0) {
... ... @@ -62,7 +62,7 @@ public class ABTestTotalCtrl {
*
* @return
*/
@RequestMapping("/delete")
@RequestMapping("/deleteTotal")
@ResponseBody
public BaseResponse<Integer> delete(int id) {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_DELETE + "?id=" + id, null, BaseResponse.class);
... ... @@ -75,12 +75,30 @@ public class ABTestTotalCtrl {
*
* @return
*/
@RequestMapping("/getall")
@RequestMapping("/getAllTotal")
@ResponseBody
public BaseResponse getall() {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_GETALL,null, BaseResponse.class);
public BaseResponse getAll() {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_GETALL, null, BaseResponse.class);
return response;
}
/**
* 获取
*
* @return
*/
@RequestMapping("/getTotal")
@ResponseBody
public BaseResponse get(int id) {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_GETBYID+"?id="+id, null, BaseResponse.class);
return response;
}
@RequestMapping("/flush")
@ResponseBody
public BaseResponse flush() {
BaseResponse response = httpRestClient.defaultPost(HttpUriContants.ABTEST_TOTAL_FLUSH, null, BaseResponse.class);
return response;
}
}
... ...
... ... @@ -72,7 +72,7 @@
<div class="container-fluid">
<div class="widget-box">
<div class="widget-title">
<h5>标签操作</h5>
<h5>操作</h5>
</div>
<div class="widget-content nopadding">
<div class="widget-title" style="height: 53px;">
... ... @@ -82,7 +82,7 @@
<div class="input-group" style="float: left;">
<span class="input-group-addon">类型:</span>
<select id="ABType" name="ABType" class="form-control">
<select id="ABType" name="ABType" class="form-control" style="width: 150px" onchange="change()">
<option value="all" selected="selected"></option>
<c:forEach items="${ABTypes }" var="ABType">
<option value="${ABType }">${ABType }</option>
... ... @@ -91,7 +91,7 @@
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">配置:</span>
<select id="configType" name="configType" class="form-control">
<select id="configType" name="configType" class="form-control" style="width: 150px" onchange="change()">
<option value="all" selected="selected"></option>
<c:forEach items="${configTypes }" var="configType">
<option value="${configType }">${configType }</option>
... ... @@ -100,10 +100,7 @@
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">名称:</span>
<select id="name" name="name" class="form-control">
<c:forEach items="${names }" var="name">
<option value="${name }">${name }</option>
</c:forEach>
<select id="name" name="name" class="form-control" style="width: 150px">
</select>
</div>
<button id="searchBtn" class="btn btn-primary" style="margin-left: 18px;"
... ... @@ -114,7 +111,8 @@
</div>
&nbsp;&nbsp;
<a href="#" id="addABConfig" class="btn btn-success" style="margin-top: 12px;margin-left: 0px;"
onclick="editConfig(0,0,0,0,0,0)">新增配置</a></div>
onclick="editConfig(0,0,0,0,0,0)">新增配置</a>
</div>
</div>
</div>
<div id="abtestTable">
... ... @@ -174,7 +172,7 @@
<div class="col-sm-8">
<input type="text" class="form-control" id="value-add" name="value-add"
placeholder="值" maxlength="30" size="40"/>
placeholder="值" size="40"/>
</div>
</div>
... ... @@ -183,7 +181,7 @@
<div class="col-sm-8">
<input type="text" class="form-control" id="comment-add" name="comment-add"
placeholder="说明" maxlength="30" size="40"/>
placeholder="说明" maxlength="100" size="40"/>
</div>
</div>
... ... @@ -206,7 +204,7 @@
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script type="text/javascript">
$("#li_abtest").addClass("active open");
$("#li_appConfig").addClass("active open");
$("#li_ABTestConfig").addClass("active");
</script>
... ... @@ -218,7 +216,7 @@
//加载表格
$("#abtestTable").table({
columnAutoWidth: false,
url: contextPath + "/abtest/get",
url: contextPath + "/abtestConfig/get",
striped: true,
title: "配置表",
pagination: true,
... ... @@ -229,18 +227,18 @@
columns: [{
title: "id",
field: "id",
width: "10%"
}, {
title: "名称",
field: "name",
width: "10%"
width: "5%"
}, {
title: "AB类型",
field: "abType",
width: "15%"
width: "5%"
}, {
title: "配置类型",
field: "configType",
width: "10%"
},{
title: "名称",
field: "name",
width: "15%"
}, {
title: "值",
... ... @@ -253,12 +251,12 @@
}, {
title: "更新时间",
field: "updateTime",
width: "10%"
width: "15%"
}, {
title: "操作",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"editConfig(\'" + rowData.id + "\',\'" + rowData.name + "\',\'" + rowData.value + "\')\">").addClass("btn btn-xs btn-success").html("修改").appendTo(div);
$("<button onclick=\"editConfig(\'" + rowData.id + "\',\'" + rowData.name + "\',\'" + rowData.abType + "\',\'" + rowData.configType + "\',\'" + rowData.value + "\',\'" + rowData.comment + "\')\">").addClass("btn btn-xs btn-success").html("修改").appendTo(div);
div.append("&nbsp;");
$("<button onclick=\"deleteConfig(\'" + rowData.id + "\')\">").addClass("btn btn-xs btn-danger").html("删除").appendTo(div);
return div;
... ... @@ -286,6 +284,9 @@
function editConfig(id, name, abType, configType, value, comment) {
$("#configForm #messageAlert").hide();
if (id == 0) {//新增页面
$("input[name='name-add']").attr("readonly",false);
$("#ABType-add").attr("disabled",false);
$("#configType-add").attr("disabled",false);
$("input[name='editId']").val(0);
$("input[name='name-add']").val("");
$("input[name='value-add']").val("");
... ... @@ -293,6 +294,10 @@
$("#myModalLabel").text("新增");
} else {
$("#myModalLabel").text("修改");
$("input[name='name-add']").attr("readonly",true);
$("#ABType-add").attr("disabled",true);
$("#configType-add").attr("disabled",true);
$("input[name='editId']").val(id);
$("input[name='name-add']").val(name);
$("input[name='value-add']").val(value);
... ... @@ -358,7 +363,7 @@
}
$.ajax({
type: 'post',
url: contextPath + "/abtest/save",
url: contextPath + "/abtestConfig/save",
data: param,
dataType: 'json',
success: function (data) {
... ... @@ -394,7 +399,7 @@
onclick: function () {
$(dialog).dialog("hide");
$.ajax({
url: contextPath + "/abtest/delete?id=" + id,
url: contextPath + "/abtestConfig/delete?id=" + id,
type: 'post',
async: false,
dataType: "json",
... ... @@ -410,6 +415,35 @@
});
}
/**
*获取key值
*/
function change(){
var ABType = $("#ABType").val();
var configType = $("#configType").val();
var param = {
"abType":ABType,
"configType":configType
};
$.ajax({
url: contextPath + "/abtestConfig/getAllNames",
type: 'post',
data: param,
dataType: "json",
success: function (data) {
$("#name").empty();
var list = data.data;
$("#name").append("<option value='all'></option>");
for (var i = 0; i < list.length; i++) {
$("#name").append("<option value='" + list[i] + "'>" + list[i] + "</option>");
}
}
});
}
</script>
 
\ No newline at end of file
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="<%=basePath %>css/bootstrap.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-datetimepicker.css"/>
<link href="<%=basePath %>js/bootstrap-plugin/css/bootstrap.table.css" rel="stylesheet" media="screen"/>
<link rel="stylesheet" href="<%=basePath %>css/bootstrap-responsive.min.css"/>
<link rel="stylesheet" href="<%=basePath %>css/fullcalendar.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.main.css"/>
<link rel="stylesheet" href="<%=basePath %>css/unicorn.grey.css"/>
<link rel="stylesheet" href="<%=basePath %>css/jquery-ui.css"/>
<link rel="stylesheet" href="<%=basePath %>css/uniform.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>js/jstree/themes/proton/style.css"/>
<link rel="stylesheet" href="<%=basePath %>css/select2.css"/>
<link rel="stylesheet" href="<%=basePath %>css/yoho.css"/>
<script src="<%=basePath %>js/excanvas.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-1.12.0.min.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jquery-ui.custom.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>/js/bootstrap.min.js"></script>
<script src="<%=basePath %>/js/unicorn.js"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/moment-with-locales.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/datetimepicker/bootstrap-datetimepicker.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/global.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8"
type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/layer/layer.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.select.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/jstree/jstree.min.js"></script>
<script src="<%=basePath %>js/jquery.toaster.js"></script>
<script>
var contextPath = '<%=basePath %>';
</script>
<title>YOHO!运维</title>
</head>
<body>
<!-- 头部 -->
<div id="head">
</div>
<!-- 右侧具体内容 -->
<div id="content">
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">ABTEST配置</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div class="widget-title">
<h5>操作</h5>
</div>
<div class="widget-content nopadding">
<div class="widget-title" style="height: 53px;">
<div>
&nbsp;&nbsp;
<a href="#" id="addABConfig" class="btn btn-success" style="margin-top: 12px;margin-left: 0px;"
onclick="editConfig(0)">新增配置</a>
&nbsp;&nbsp; &nbsp;&nbsp;
<a href="#" id="flushConfig" class="btn btn-success" style="margin-top: 12px;margin-left: 0px;"
onclick="flushConfig()">刷新配置到zookeeper</a></div>
</div>
</div>
<div id="abtestTable">
</div>
</div>
</div>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel"></h4>
</div>
<div class="modal-body">
<form id="configForm" class="form-horizontal">
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>类型:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="type" name="type"
placeholder="A/B/C/D" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>取模开始值:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="moduloNumStart" name="moduloNumStart"
placeholder="udid%100 的值范围" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>取模结束值:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="moduloNumEnd" name="moduloNumEnd"
placeholder="udid%100 的值范围" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>是否使用:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="inUse" name="inUse"
placeholder="1:使用; 0: 禁止" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>适用客户端:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="appType" name="appType"
placeholder="android,ios,pc,h5" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> <span style="color:red">*</span>最低APP版本:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="appVersion" name="appVersion"
placeholder="5.2.0" maxlength="30" size="40"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label"> </label>
<div class="col-sm-8" id="messageAlert"></div>
</div>
<input type="hidden" name="editId"/>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-success" value="Validate" onclick="saveConfig()">提交</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal -->
</div>
<script src="<%=basePath %>script/common/genarate_left_panel.js"></script>
<script type="text/javascript">
$("#li_appConfig").addClass("active open");
$("#li_ABTestTotal").addClass("active");
</script>
</body>
</html>
<script>
$(function () {
//加载表格
$("#abtestTable").table({
columnAutoWidth: false,
url: contextPath + "/abtestTotal/getAllTotal",
striped: true,
title: "配置表",
pagination: false,
loadFilter: function (data) {
return defaultLoadFilter(data);
},
columns: [{
title: "id",
field: "id",
width: "10%"
}, {
title: "类型",
field: "type",
width: "10%"
}, {
title: "最低APP版本",
field: "appVersion",
width: "10%"
}, {
title: "取模开始值",
field: "moduloNumStart",
width: "10%"
}, {
title: "取模结束值",
field: "moduloNumEnd",
width: "10%"
}, {
title: "是否使用",
field: "inUse",
formatter : function(value, rowData, rowIndex) {
if(value == 1){
return '是';
}else{
return '否';
}
},
width: "10%"
},{
title: "APP类型",
field: "appType",
width: "15%"
},{
title: "操作",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
$("<button onclick=\"editConfig(\'" + rowData.id + "\')\">").addClass("btn btn-xs btn-success").html("修改").appendTo(div);
div.append("&nbsp;");
if(rowData.type != 'A'){
$("<button onclick=\"deleteConfig(\'" + rowData.id + "\')\">").addClass("btn btn-xs btn-danger").html("删除").appendTo(div);
}
return div;
}
}]
});
});
//打开新增或修改页面
function editConfig(id) {
$("#configForm #messageAlert").hide();
if (id == 0) {//新增页面
$("input[name='type']").attr("readonly",false);
$("input[name='editId']").val(0);
$("input[name='type']").val("");
$("input[name='moduloNumStart']").val("");
$("input[name='moduloNumEnd']").val("");
$("input[name='inUse']").val("");
$("input[name='appType']").val("");
$("input[name='appVersion']").val("");
$("#myModalLabel").text("新增");
} else {
$("input[name='type']").attr("readonly",true);
$("#myModalLabel").text("修改");
$.ajax({
type: 'post',
url: contextPath + "/abtestTotal/getTotal?id="+id,
dataType: 'json',
success: function (data) {
if (!data || data.code != 200) {
localAlert('获取失败', data.message);
} else {
$("input[name='editId']").val(id);
$("input[name='type']").val(data.data.type);
$("input[name='moduloNumStart']").val(data.data.moduloNumStart);
$("input[name='moduloNumEnd']").val(data.data.moduloNumEnd);
$("input[name='inUse']").val(data.data.inUse);
$("input[name='appType']").val(data.data.appType);
$("input[name='appVersion']").val(data.data.appVersion);
}
},
error: function (data) {
localAlert('系统异常', data.message);
}
});
}
$("#myModal").modal('show');
}
//打开新增或修改页面
function saveConfig() {
var id = $("input[name='editId']").val();
var type = $("#type").val();
var moduloNumStart = $("#moduloNumStart").val();
var moduloNumEnd = $("#moduloNumEnd").val();
var inUse = $("#inUse").val();
var appType = $("#appType").val();
var appVersion = $("#appVersion").val();
if (type == null || type == "") {
$("#configForm #messageAlert").alerts({
content: "请填写AB类型!",
type: "danger"
});
return;
}
if (moduloNumStart == null || moduloNumStart == "") {
$("#configForm #messageAlert").alerts({
content: "请填写取模开始值!",
type: "danger"
});
return;
}
if (moduloNumEnd == null || moduloNumEnd == "") {
$("#configForm #messageAlert").alerts({
content: "请填写取模结束值!",
type: "danger"
});
return;
}
if (inUse == null || inUse == "") {
$("#configForm #messageAlert").alerts({
content: "请填写是否使用!",
type: "danger"
});
return;
}
if (appType == null || appType == "") {
$("#configForm #messageAlert").alerts({
content: "请填写适用客户端!",
type: "danger"
});
return;
}
if (appVersion == null || appVersion == "") {
$("#configForm #messageAlert").alerts({
content: "请填写适用APP最低版本!",
type: "danger"
});
return;
}
var param = {
id: id,
type: type,
inUse: inUse,
appType: appType,
appVersion: appVersion,
moduloNumStart: moduloNumStart,
moduloNumEnd: moduloNumEnd
}
$.ajax({
type: 'post',
url: contextPath + "/abtestTotal/saveTotal",
data: param,
dataType: 'json',
success: function (data) {
if (!data || data.code != 200) {
localAlert('新增失败', data.message);
} else {
$("#myModal").modal('hide');
$("#abtestTable").table("load");
}
},
error: function (data) {
localAlert('系统异常', data.message);
}
});
}
//删除
function deleteConfig(id) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "你确定删除吗",
backdrop: "static",
content: "你确定要删除该配置吗?",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
$(dialog).dialog("hide");
$.ajax({
url: contextPath + "/abtestTotal/deleteTotal?id=" + id,
type: 'post',
async: false,
dataType: "json",
success: function (data) {
if (!data || data.code != 200) {
localAlert('删除失败', data.message);
}
$("#abtestTable").table("load");
}
});
}
}]
});
}
//删除
function flushConfig(id) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title: "confirm",
backdrop: "static",
content: "你确定要刷新zookeeper中的配置吗?",
buttons: [{
text: "否",
className: "btn-danger",
onclick: function () {
$(dialog).dialog("hide");
}
}, {
text: "是",
className: "btn-success",
onclick: function () {
$(dialog).dialog("hide");
$.ajax({
url: contextPath + "/abtestTotal/flush",
type: 'post',
async: false,
dataType: "json",
success: function (data) {
localAlert('刷新结果', '刷新成功');
}
});
}
}]
});
}
</script>
\ No newline at end of file
... ...
... ... @@ -48,9 +48,9 @@ innerHTML += "<li id='li_works'><a id='li_works_a' href=''><i class='icon icon-t
innerHTML += "</ul></li>";
/*ABtest*/
innerHTML += "<li class='submenu' id='li_abtest'><a id='li_abtest_a' href='#'><i class='icon icon-th-list'></i> <span>ABTest</span><span class='label'>2</span></a><ul>";
innerHTML += "<li id='li_ABTestTotal'><a id='li_ABTestTotal_a' href=''><i class='icon icon-th'></i> <span>总体配置</span></a></li>";
innerHTML += "<li id='li_ABTestConfig'><a id='li_ABTestConfig_a' href=''><i class='icon icon-th'></i> <span>基础配置</span></a></li>";
innerHTML += "<li class='submenu' id='li_appConfig'><a id='li_appConfig_a' href='#'><i class='icon icon-th-list'></i> <span>APP配置</span><span class='label'>2</span></a><ul>";
innerHTML += "<li id='li_ABTestTotal'><a id='li_ABTestTotal_a' href=''><i class='icon icon-th'></i> <span>AB总体配置</span></a></li>";
innerHTML += "<li id='li_ABTestConfig'><a id='li_ABTestConfig_a' href=''><i class='icon icon-th'></i> <span>AB基础配置</span></a></li>";
innerHTML += "</ul></li>";
/*配置管理*/
... ...