|
|
$.views.settings.allowCode(true);
|
|
|
$.views.converters("getResponseModelName", function (val) {
|
|
|
return getResponseModelName(val);
|
|
|
});
|
|
|
|
|
|
var tempBody = $.templates('#temp_body');
|
|
|
var tempBodyRefModel = $.templates('#temp_body_ref_model');
|
|
|
var tempBodyType = $.templates('#temp_body_type');
|
|
|
|
|
|
|
|
|
//获取context path
|
|
|
var contextPath = getContextPath();
|
|
|
|
|
|
function getContextPath() {
|
|
|
/*var pathName = document.location.pathname;
|
|
|
var index = pathName.substr(1).indexOf("/");
|
|
|
var result = pathName.substr(0, index + 1);*/
|
|
|
//return location.host;
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
$(function () {
|
|
|
$.ajax({
|
|
|
url: "/FengHuang/swagger/api/" + new Date().getTime(), //url : "http://petstore.swagger.io/v2/swagger.json",
|
|
|
dataType: "json",
|
|
|
type: "get",
|
|
|
async: false,
|
|
|
success: function (data) {
|
|
|
//layui init
|
|
|
layui.use(['layer', 'jquery', 'element'], function () {
|
|
|
var $ = layui.jquery, layer = layui.layer, element = layui.element;
|
|
|
});
|
|
|
var jsonData = eval(data);
|
|
|
|
|
|
$("#title").html(jsonData.info.title);
|
|
|
$("body").html($("#template").render(jsonData));
|
|
|
|
|
|
$("[name='a_path']").click(function () {
|
|
|
var path = $(this).attr("path");
|
|
|
var method = $(this).attr("method");
|
|
|
var operationId = $(this).attr("operationId");
|
|
|
$.each(jsonData.paths[path], function (i, d) {
|
|
|
if (d.operationId == operationId) {
|
|
|
d.path = path;
|
|
|
d.method = method;
|
|
|
$("#path-body").html(tempBody.render(d));
|
|
|
|
|
|
//如果没有返回值,直接跳过
|
|
|
if(!d.responses["200"].hasOwnProperty("schema")){
|
|
|
// continue
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//基本类型
|
|
|
if(d.responses["200"]["schema"].hasOwnProperty("type")){
|
|
|
var model = {"type":d.responses["200"]["schema"]["type"]};
|
|
|
$("#path-body-response-model").append(tempBodyType.render(model));
|
|
|
// continue
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
//引用类型
|
|
|
var modelName = getRefName(d.responses["200"]["schema"]["$ref"]);
|
|
|
if(d.parameters){
|
|
|
$.each(d.parameters, function (i, p) {
|
|
|
if (p["schema"]) {
|
|
|
var parameterModelName = getRefName(p["schema"]["$ref"]);
|
|
|
renderRefModel("path-body-request-model", jsonData, parameterModelName);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
renderRefModel("path-body-response-model", jsonData, modelName);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
|
|
|
//提交测试按钮
|
|
|
$("[name='btn_submit']").click(function () {
|
|
|
var operationId = $(this).attr("operationId");
|
|
|
var parameterJson = {};
|
|
|
$("input[operationId='" + operationId + "']").each(function (index, domEle) {
|
|
|
var k = $(domEle).attr("name");
|
|
|
var v = $(domEle).val();
|
|
|
parameterJson.push({k: v});
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 渲染ref类型参数
|
|
|
* @param domId 需要添加的domId
|
|
|
* @param jsonData
|
|
|
* @param modelName
|
|
|
*/
|
|
|
function renderRefModel(domId, jsonData, modelName) {
|
|
|
if (modelName) {
|
|
|
var model = jsonData.definitions[modelName];
|
|
|
model.name = modelName;
|
|
|
model.domId = domId;
|
|
|
//修改有嵌套对象的type
|
|
|
$.each(model.properties, function (i, v) {
|
|
|
if (v.items) {
|
|
|
$.each(v.items, function (j, item) {
|
|
|
var typeModel = item.startsWith("#") ? getRefName(item) : item;
|
|
|
model.properties[i].type = "Array[" + typeModel + "]";
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//自定义对象类型(非Array)
|
|
|
if (!v.type) {
|
|
|
model.properties[i].type = getRefName(v["$ref"]);
|
|
|
}
|
|
|
});
|
|
|
//如果该对象没有被渲染到页面,则渲染
|
|
|
if ($("#ref-" + domId + "-" + modelName).length == 0) {
|
|
|
$("#" + domId).append(tempBodyRefModel.render(model));
|
|
|
}
|
|
|
|
|
|
//递归渲染多层对象嵌套
|
|
|
$.each(model.properties, function (i, v) {
|
|
|
//Array
|
|
|
if (v.items) {
|
|
|
$.each(v.items, function (j, item) {
|
|
|
|
|
|
if (item.startsWith("#")) {
|
|
|
renderRefModel(domId, jsonData, getRefName(item));
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
//单个对象引用
|
|
|
if(v.hasOwnProperty("$ref")){
|
|
|
renderRefModel(domId, jsonData, getRefName(v["$ref"]));
|
|
|
}
|
|
|
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//获得模型名字
|
|
|
function getRefName(val) {
|
|
|
if (!val) {
|
|
|
return null;
|
|
|
}
|
|
|
return val.substring(val.lastIndexOf("/") + 1, val.length);
|
|
|
}
|
|
|
|
|
|
//测试按钮,获取数据
|
|
|
function getData(operationId) {
|
|
|
var path = contextPath + $("[m_operationId='" + operationId + "']").attr("path");
|
|
|
//alert(path);
|
|
|
path="/FengHuang"+path;
|
|
|
|
|
|
//path 参数
|
|
|
$("[p_operationId='" + operationId + "'][in='path']").each(function (index, domEle) {
|
|
|
var k = $(domEle).attr("name");
|
|
|
var v = $(domEle).val();
|
|
|
if (v) {
|
|
|
path = path.replace("{" + k + "}", v);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//header参数
|
|
|
var headerJson = {};
|
|
|
$("[p_operationId='" + operationId + "'][in='header']").each(function (index, domEle) {
|
|
|
var k = $(domEle).attr("name");
|
|
|
var v = $(domEle).val();
|
|
|
if (v) {
|
|
|
headerJson[k] = v;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
//请求方式
|
|
|
var parameterType = $("#content_type_" + operationId).val();
|
|
|
|
|
|
//query 参数
|
|
|
var parameterJson = {};
|
|
|
if ("form" == parameterType) {
|
|
|
$("[p_operationId='" + operationId + "'][in='query']").each(function (index, domEle) {
|
|
|
var k = $(domEle).attr("name");
|
|
|
var v = $(domEle).val();
|
|
|
if (v) {
|
|
|
parameterJson[k] = v;
|
|
|
}
|
|
|
});
|
|
|
} else if ("json" == parameterType) {
|
|
|
var str = $("#text_tp_" + operationId).val();
|
|
|
try {
|
|
|
parameterJson = JSON.parse(str);
|
|
|
} catch (error) {
|
|
|
layer.msg("" + error, {icon: 5});
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//发送请求
|
|
|
send(path, operationId, headerJson, parameterJson);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 请求类型
|
|
|
*/
|
|
|
function changeParameterType(el) {
|
|
|
var operationId = $(el).attr("operationId");
|
|
|
var type = $(el).attr("type");
|
|
|
$("#content_type_" + operationId).val(type);
|
|
|
$(el).addClass("layui-btn-normal").removeClass("layui-btn-primary");
|
|
|
if ("form" == type) {
|
|
|
$("#text_tp_" + operationId).hide();
|
|
|
$("#table_tp_" + operationId).show();
|
|
|
$("#pt_json_" + operationId).addClass("layui-btn-primary").removeClass("layui-btn-normal");
|
|
|
} else if ("json" == type) {
|
|
|
$("#text_tp_" + operationId).show();
|
|
|
$("#table_tp_" + operationId).hide();
|
|
|
$("#pt_form_" + operationId).addClass("layui-btn-primary").removeClass("layui-btn-normal");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 发送请求
|
|
|
* @param url 地址
|
|
|
* @param operationId operationId
|
|
|
* @param header header参数
|
|
|
* @param data data数据
|
|
|
*/
|
|
|
function send(url, operationId, header, data) {
|
|
|
|
|
|
var type = $("[m_operationId='" + operationId + "']").attr("method");
|
|
|
|
|
|
//是否有formData类型数据
|
|
|
var hasFormData = $("[p_operationId='" + operationId + "'][in='formData']").length >= 1;
|
|
|
|
|
|
//是否有body类型数据
|
|
|
var hasBody = $("[p_operationId='" + operationId + "'][in='body']").length >= 1;
|
|
|
|
|
|
var options = {withQuotes: true};
|
|
|
|
|
|
//发送请求
|
|
|
if (hasFormData) {
|
|
|
var formData = new FormData($("#form_" + operationId)[0]);
|
|
|
$.ajax({
|
|
|
type: type,
|
|
|
url: url,
|
|
|
headers: header,
|
|
|
data: formData,
|
|
|
dataType: 'json',
|
|
|
cache: false,
|
|
|
processData: false,
|
|
|
contentType: false,
|
|
|
success: function (data) {
|
|
|
$("#json-response").jsonViewer(data, options);
|
|
|
},
|
|
|
error:function(e){
|
|
|
$("#json-response").html("");
|
|
|
layer.msg("" + JSON.stringify(e), {icon: 5});
|
|
|
}
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//querystring ,将参数加在url后面
|
|
|
url = appendParameterToUrl(url,data);
|
|
|
|
|
|
//requestBody 请求
|
|
|
var bodyData ;
|
|
|
if (hasBody) {
|
|
|
var dom = $("[p_operationId='" + operationId + "'][in='body']")[0];
|
|
|
bodyData = $(dom).val();
|
|
|
}
|
|
|
var contentType = $("#consumes_" + operationId).text();
|
|
|
|
|
|
$.ajax({
|
|
|
type: type,
|
|
|
url: url,
|
|
|
headers: header,
|
|
|
data: bodyData,
|
|
|
dataType: 'json',
|
|
|
contentType: contentType,
|
|
|
success: function (data) {
|
|
|
$("#json-response").jsonViewer(data, options);
|
|
|
},
|
|
|
error:function(e){
|
|
|
$("#json-response").html("");
|
|
|
layer.msg("" + JSON.stringify(e), {icon: 5});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 给url拼装参数
|
|
|
* @param url
|
|
|
* @param parameter
|
|
|
*/
|
|
|
function appendParameterToUrl(url, parameter) {
|
|
|
if($.isEmptyObject(parameter)){
|
|
|
return url;
|
|
|
}
|
|
|
$.each(parameter, function (k, v) {
|
|
|
if (url.indexOf("?") == -1) {
|
|
|
url += "?";
|
|
|
}
|
|
|
url += k;
|
|
|
url += "=";
|
|
|
url += v;
|
|
|
url += "&";
|
|
|
});
|
|
|
return url.substring(0, url.length - 1);
|
|
|
} |