支持path参数
This commit is contained in:
2348
zyplayer-doc-ui/swagger-ui/package-lock.json
generated
2348
zyplayer-doc-ui/swagger-ui/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,6 @@
|
||||
"ant-design-vue": "^3.0.0-alpha.8",
|
||||
"axios": "^0.19.2",
|
||||
"brace": "^0.11.1",
|
||||
"element-plus": "^1.0.2-beta.71",
|
||||
"highlight.js": "^11.3.1",
|
||||
"jsontoxml": "^1.0.1",
|
||||
"less": "^2.7.3",
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
<template>
|
||||
<el-config-provider :locale="localeEl">
|
||||
<a-config-provider :locale="locale">
|
||||
<router-view></router-view>
|
||||
</a-config-provider>
|
||||
</el-config-provider>
|
||||
<a-config-provider :locale="locale">
|
||||
<router-view></router-view>
|
||||
</a-config-provider>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import zhCN from 'ant-design-vue/es/locale/zh_CN';
|
||||
import zhCnEl from 'element-plus/lib/locale/lang/zh-cn';
|
||||
import 'moment/dist/locale/zh-cn';
|
||||
export default {
|
||||
name: 'app',
|
||||
@@ -17,7 +14,6 @@
|
||||
data() {
|
||||
return {
|
||||
locale: zhCN,
|
||||
localeEl: zhCnEl,
|
||||
};
|
||||
},
|
||||
methods: {}
|
||||
|
||||
@@ -1,228 +0,0 @@
|
||||
import formatjson from '../../assets/utils/formatjson'
|
||||
|
||||
/**
|
||||
* 参数解析
|
||||
* @author 暮光:城中城
|
||||
* @since 2017年5月7日
|
||||
*/
|
||||
export default {
|
||||
getRequestParamList(parameters, definitionsDataMap) {
|
||||
if (!parameters) {
|
||||
return [];
|
||||
}
|
||||
formatjson.annotationObject = {};
|
||||
let requestParamList = [], requestParamExample = [];
|
||||
Object.keys(parameters).forEach(key => {
|
||||
let tempParameters = parameters[key];
|
||||
let htmlStr = "", htmlStrExample = "";
|
||||
let responsesJson = [];
|
||||
let responsesExample = [];
|
||||
let required = tempParameters.required;
|
||||
let paramName = tempParameters.name || '';
|
||||
let paramType = tempParameters.type || '';
|
||||
let paramDesc = tempParameters.description || '';
|
||||
let paramIn = tempParameters.in || '';
|
||||
let example = tempParameters.example || tempParameters.default || '';
|
||||
if (tempParameters.items) {
|
||||
htmlStr = paramName + "[0]";
|
||||
htmlStrExample = paramName + "[0]";
|
||||
} else if (tempParameters.schema) {
|
||||
if ("array" === tempParameters.schema.type) {
|
||||
let responsesObj = definitionsDataMap[tempParameters.schema.items.$ref];
|
||||
if (responsesObj != null) {
|
||||
responsesJson[0] = this.getResponsesJson(responsesObj, "", false, 1, definitionsDataMap);
|
||||
responsesExample[0] = this.getResponsesJson(responsesObj, "", true, 1, definitionsDataMap);
|
||||
} else {
|
||||
responsesJson = [""];
|
||||
responsesExample = [""];
|
||||
if (tempParameters.schema.items.type === "boolean") {
|
||||
responsesJson = [true];
|
||||
responsesExample = [true];
|
||||
} else if (tempParameters.schema.items.type === "integer") {
|
||||
responsesJson = [0];
|
||||
responsesExample = [0];
|
||||
}
|
||||
}
|
||||
if (tempParameters.schema.$ref) {
|
||||
let arrTmp = tempParameters.schema.$ref.split("/");
|
||||
paramType = arrTmp[arrTmp.length - 1];
|
||||
}
|
||||
htmlStr = formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
|
||||
htmlStrExample = formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
|
||||
} else if (tempParameters.schema.$ref) {
|
||||
let responsesObj = definitionsDataMap[tempParameters.schema.$ref];
|
||||
if (tempParameters.schema.$ref) {
|
||||
let arrTmp = tempParameters.schema.$ref.split("/");
|
||||
paramType = arrTmp[arrTmp.length - 1];
|
||||
}
|
||||
if (responsesObj) {
|
||||
responsesJson = this.getResponsesJson(responsesObj, "", false, 1, definitionsDataMap);
|
||||
responsesExample = this.getResponsesJson(responsesObj, "", true, 1, definitionsDataMap);
|
||||
htmlStr = formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
|
||||
htmlStrExample = formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
|
||||
} else {
|
||||
htmlStr = paramName;
|
||||
htmlStrExample = paramName;
|
||||
}
|
||||
} else if ("string" === tempParameters.schema.type) {
|
||||
htmlStr = paramName;
|
||||
htmlStrExample = paramName;
|
||||
} else {
|
||||
htmlStr = paramName;
|
||||
htmlStrExample = paramName;
|
||||
}
|
||||
} else {
|
||||
htmlStr = paramName;
|
||||
htmlStrExample = paramName;
|
||||
}
|
||||
requestParamList.push({htmlStr, paramDesc, paramType, paramIn, required});
|
||||
requestParamExample.push({htmlStrExample, paramDesc, paramType, paramIn, required});
|
||||
});
|
||||
console.log(requestParamList);
|
||||
console.log(requestParamExample);
|
||||
return requestParamList;
|
||||
},
|
||||
getResponsesJson(responsesObj, prevRef, isExample, recursiveCount, definitionsDataMap) {
|
||||
let responsesJson = {};
|
||||
recursiveCount++;// 多层递归,最多递归10层,防止无限递归
|
||||
if (!responsesObj || !responsesObj.properties || recursiveCount > 10) {
|
||||
return responsesJson;
|
||||
}
|
||||
let requiredArr = responsesObj.required;
|
||||
Object.keys(responsesObj.properties).forEach(prop => {
|
||||
let tmpData = responsesObj.properties[prop];
|
||||
if ("array" === tmpData.type) {// 数组
|
||||
formatjson.annotationObject[prop] = tmpData.description || '';
|
||||
if (prevRef !== tmpData.items.$ref) {
|
||||
let tempObj = definitionsDataMap[tmpData.items.$ref];
|
||||
if (tempObj != null) {
|
||||
let tempArr = responsesJson[prop] = [];
|
||||
tempArr[0] = this.getResponsesJson(tempObj, tmpData.items.$ref, isExample, recursiveCount, definitionsDataMap);
|
||||
} else {
|
||||
let responsesJsonSub = [];
|
||||
let bodyFor = responsesJsonSub;
|
||||
let items = tmpData.items;
|
||||
for (let i = 0; i < 10; i++) {
|
||||
if ("array" === items.type) {
|
||||
bodyFor = bodyFor[0] = [];
|
||||
items = items.items;
|
||||
} else {
|
||||
tempObj = definitionsDataMap[items.$ref];
|
||||
if (tempObj != null) {
|
||||
bodyFor[0] = this.getResponsesJson(tempObj, items.$ref, isExample, recursiveCount, definitionsDataMap);
|
||||
} else {
|
||||
if (items.type === "boolean") {
|
||||
bodyFor[0] = true;
|
||||
} else if (items.type === "integer") {
|
||||
bodyFor[0] = 0;
|
||||
} else {
|
||||
bodyFor[0] = "";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
responsesJson[prop] = responsesJsonSub;
|
||||
}
|
||||
} else {
|
||||
responsesJson[prop] = "{}" + (tmpData.description || '');
|
||||
}
|
||||
} else if (tmpData.$ref) {// 对象
|
||||
formatjson.annotationObject[prop] = tmpData.description || '';
|
||||
if (prevRef !== tmpData.$ref) {
|
||||
let tempObj = definitionsDataMap[tmpData.$ref];
|
||||
responsesJson[prop] = this.getResponsesJson(tempObj, tmpData.$ref, isExample, recursiveCount, definitionsDataMap);
|
||||
} else {
|
||||
responsesJson[prop] = "{}" + (tmpData.description || '');
|
||||
}
|
||||
} else {// 字段
|
||||
let enumExample = "";
|
||||
let enumObj = tmpData["enum"];
|
||||
if (enumObj && enumObj.length > 0) {
|
||||
enumExample = "枚举值:";
|
||||
for (let i = 0; i < enumObj.length; i++) {
|
||||
if (i > 0) {
|
||||
enumExample += "、";
|
||||
}
|
||||
enumExample += enumObj[i];
|
||||
}
|
||||
}
|
||||
let typeStr = tmpData.format || tmpData.type || '';
|
||||
if (isExample) {
|
||||
let tempVal = tmpData.example || '';
|
||||
if (tempVal && enumExample) {
|
||||
tempVal = tempVal + "," + enumExample;
|
||||
}
|
||||
responsesJson[prop] = tempVal;
|
||||
} else {
|
||||
if (requiredArr && requiredArr.indexOf(prop) >= 0) {
|
||||
typeStr = (typeStr ? typeStr + "," : "") + "required";
|
||||
}
|
||||
if (typeStr) {
|
||||
typeStr = "(" + typeStr + ")";
|
||||
}
|
||||
let descriptionStr = typeStr + tmpData.description || '';
|
||||
if (descriptionStr && enumExample) {
|
||||
descriptionStr = descriptionStr + "," + enumExample;
|
||||
}
|
||||
responsesJson[prop] = descriptionStr;
|
||||
}
|
||||
}
|
||||
});
|
||||
return responsesJson;
|
||||
},
|
||||
getResponseParamList(responses, definitionsDataMap) {
|
||||
if (!responses) {
|
||||
return [];
|
||||
}
|
||||
let responsesList = [];
|
||||
formatjson.annotationObject = {};
|
||||
Object.keys(responses).forEach(key => {
|
||||
let tempRespones = responses[key];
|
||||
if (tempRespones.schema) {
|
||||
let responsesJson, responsesExample;
|
||||
if ("array" === tempRespones.schema.type) {
|
||||
responsesJson = [];
|
||||
responsesExample = [];
|
||||
let responsesObj = definitionsDataMap[tempRespones.schema.items.$ref];
|
||||
if (responsesObj != null) {
|
||||
responsesJson[0] = this.getResponsesJson(responsesObj, "", false, 1, definitionsDataMap);
|
||||
responsesExample[0] = this.getResponsesJson(responsesObj, "", true, 1, definitionsDataMap);
|
||||
} else {
|
||||
responsesJson = [""];
|
||||
responsesExample = [""];
|
||||
if (tempRespones.schema.items.type === "boolean") {
|
||||
responsesJson = [true];
|
||||
responsesExample = [true];
|
||||
} else if (tempRespones.schema.items.type === "integer") {
|
||||
responsesJson = [0];
|
||||
responsesExample = [0];
|
||||
}
|
||||
}
|
||||
} else if (tempRespones.schema.$ref) {
|
||||
let responsesObj = definitionsDataMap[tempRespones.schema.$ref];
|
||||
if (!responsesObj) {
|
||||
let arrTmp = tempRespones.schema.$ref.split("/");
|
||||
let lastObjName = arrTmp[arrTmp.length - 1];
|
||||
responsesJson = lastObjName;
|
||||
responsesExample = lastObjName;
|
||||
} else {
|
||||
responsesJson = this.getResponsesJson(responsesObj, "", false, 1, definitionsDataMap);
|
||||
responsesExample = this.getResponsesJson(responsesObj, "", true, 1, definitionsDataMap);
|
||||
}
|
||||
} else {
|
||||
responsesJson = "";
|
||||
responsesExample = "";
|
||||
}
|
||||
if (!responsesJson) {
|
||||
return;
|
||||
}
|
||||
let htmlStr = formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
|
||||
responsesList.push({code: key, desc: htmlStr});
|
||||
htmlStr = formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
|
||||
}
|
||||
});
|
||||
return responsesList;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ export default {
|
||||
let type = definition.type;
|
||||
let properties = definition.properties;
|
||||
let indexSub = 1;
|
||||
if (type === 'object') {
|
||||
if (type === 'object' && properties) {
|
||||
let currentLevelTypes = {};
|
||||
Object.keys(properties).forEach(key => {
|
||||
let parameter = properties[key];
|
||||
|
||||
@@ -1,125 +0,0 @@
|
||||
|
||||
/**
|
||||
* 将对象处理成json格式化和着色的html
|
||||
* @author 暮光:城中城
|
||||
* @since 2017年5月7日
|
||||
*/
|
||||
export default {
|
||||
// 需要在对象或列表后面添加注释的对象,例:{userList: "用户列表"}
|
||||
// 那么在名字为userList的对象或列表后面都会加上:“用户列表” 这个注释
|
||||
annotationObject: {},
|
||||
tabStr: " ",
|
||||
isArray: function(obj) {
|
||||
return obj && typeof obj === 'object' && typeof obj.length === 'number'
|
||||
&& !(obj.propertyIsEnumerable('length'));
|
||||
},
|
||||
processObjectToHtmlPre: function(obj, indent, addComma, isArray, isPropertyContent, showAnnotation) {
|
||||
let htmlStr = this.processObject(obj, "", indent, addComma, isArray, isPropertyContent, showAnnotation);
|
||||
htmlStr = '<pre class="json">' + htmlStr + '</pre>';
|
||||
return htmlStr;
|
||||
},
|
||||
processObject: function(obj, keyName, indent, addComma, isArray, isPropertyContent, showAnnotation) {
|
||||
let html = "";
|
||||
let comma = (addComma) ? "<span class='comma'>,</span> " : "";
|
||||
let type = typeof obj;
|
||||
if (this.isArray(obj)) {
|
||||
if (obj.length === 0) {
|
||||
html += this.getRow(indent, "<span class='array-brace'>[ ]</span>" + comma, isPropertyContent);
|
||||
} else {
|
||||
let clpsHtml = '<span><img class="option-img" src="webjars/mg-ui/img/expanded.png" onClick="Formatjson.expImgClicked(this);" /></span><span class="collapsible">';
|
||||
let annotation = '';
|
||||
if(showAnnotation && keyName && this.annotationObject[keyName]) {
|
||||
annotation = '<span class="annotation">// '+this.annotationObject[keyName]+'</span>';
|
||||
}
|
||||
html += this.getRow(indent, "<span class='array-brace'>[</span>"+clpsHtml+annotation, isPropertyContent);
|
||||
for (let i = 0; i < obj.length; i++) {
|
||||
html += this.processObject(obj[i], "", indent + 1, i < (obj.length - 1), true, false, showAnnotation);
|
||||
}
|
||||
clpsHtml = "</span>";
|
||||
html += this.getRow(indent, clpsHtml + "<span class='array-brace'>]</span>" + comma);
|
||||
}
|
||||
} else if (type === 'object' && obj == null) {
|
||||
html += this.formatLiteral("null", "", comma, indent, isArray, "null");
|
||||
} else if (type === 'object') {
|
||||
let numProps = 0;
|
||||
for ( let prop in obj) {
|
||||
numProps++;
|
||||
}
|
||||
if (numProps === 0) {
|
||||
html += this.getRow(indent, "<span class='object-brace'>{ }</span>" + comma, isPropertyContent);
|
||||
} else {
|
||||
let clpsHtml = '<span><img class="option-img" src="webjars/mg-ui/img/expanded.png" onClick="Formatjson.expImgClicked(this);" /></span><span class="collapsible">';
|
||||
let annotation = '';
|
||||
if(showAnnotation && keyName && this.annotationObject[keyName]) {
|
||||
annotation = '<span class="annotation">// '+this.annotationObject[keyName]+'</span>';
|
||||
}
|
||||
html += this.getRow(indent, "<span class='object-brace'>{</span>"+clpsHtml+annotation, isPropertyContent);
|
||||
let j = 0;
|
||||
for ( let prop in obj) {
|
||||
let processStr = '<span class="property-name">"' + prop + '"</span>: ' + this.processObject(obj[prop], prop, indent + 1, ++j < numProps, false, true, showAnnotation);
|
||||
html += this.getRow(indent + 1, processStr);
|
||||
}
|
||||
clpsHtml = "</span>";
|
||||
html += this.getRow(indent, clpsHtml + "<span class='object-brace'>}</span>" + comma);
|
||||
}
|
||||
} else if (type === 'number') {
|
||||
html += this.formatLiteral(obj, "", comma, indent, isArray, "number");
|
||||
} else if (type === 'boolean') {
|
||||
html += this.formatLiteral(obj, "", comma, indent, isArray, "boolean");
|
||||
} else if (type === 'function') {
|
||||
obj = this.formatFunction(indent, obj);
|
||||
html += this.formatLiteral(obj, "", comma, indent, isArray, "function");
|
||||
} else if (type === 'undefined') {
|
||||
html += this.formatLiteral("undefined", "", comma, indent, isArray, "null");
|
||||
} else {
|
||||
html += this.formatLiteral(obj, "\"", comma, indent, isArray, "string");
|
||||
}
|
||||
return html;
|
||||
},
|
||||
expImgClicked: function(img){
|
||||
let container = img.parentNode.nextSibling;
|
||||
if(!container) return;
|
||||
let disp = "none";
|
||||
let src = "webjars/mg-ui/img/collapsed.png";
|
||||
if(container.style.display === "none"){
|
||||
disp = "inline";
|
||||
src = "webjars/mg-ui/img/expanded.png";
|
||||
}
|
||||
container.style.display = disp;
|
||||
img.src = src;
|
||||
},
|
||||
formatLiteral: function(literal, quote, comma, indent, isArray, style) {
|
||||
if (typeof literal == 'string') {
|
||||
literal = literal.split("<").join("<").split(">").join(">");
|
||||
}
|
||||
let str = "<span class='" + style + "'>" + quote + literal + quote + comma + "</span>";
|
||||
if (isArray) {
|
||||
str = this.getRow(indent, str);
|
||||
}
|
||||
return str;
|
||||
},
|
||||
formatFunction: function(indent, obj) {
|
||||
let tabs = "";
|
||||
for (let i = 0; i < indent; i++) {
|
||||
tabs += this.tabStr;
|
||||
}
|
||||
let funcStrArray = obj.toString().split("\n");
|
||||
let str = "";
|
||||
for (let i = 0; i < funcStrArray.length; i++) {
|
||||
str += ((i === 0) ? "" : tabs) + funcStrArray[i] + "\n";
|
||||
}
|
||||
return str;
|
||||
},
|
||||
getRow: function(indent, data, isPropertyContent) {
|
||||
let tabs = "";
|
||||
for (let i = 0; i < indent && !isPropertyContent; i++) {
|
||||
tabs += this.tabStr;
|
||||
}
|
||||
if (data != null && data.length > 0 && data.charAt(data.length - 1) !== "\n") {
|
||||
data = data + "\n";
|
||||
}
|
||||
return tabs + data;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,8 +6,6 @@ import Antd from 'ant-design-vue';
|
||||
import 'ant-design-vue/dist/antd.css';
|
||||
import routes from './routes'
|
||||
import store from './store/index'
|
||||
import { ElConfigProvider, ElCascader, ElCascaderPanel } from 'element-plus';
|
||||
import 'element-plus/lib/theme-chalk/base.css'
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
@@ -18,9 +16,6 @@ app.config.productionTip = false;
|
||||
app.use(Antd);
|
||||
app.use(router);
|
||||
app.use(store);
|
||||
app.component(ElCascader.name, ElCascader);
|
||||
app.component(ElCascaderPanel.name, ElCascaderPanel);
|
||||
app.component(ElConfigProvider.name, ElConfigProvider);
|
||||
app.mount('#app');
|
||||
|
||||
// 注册一个全局自定义指令
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
let activePage = ref('urlParam');
|
||||
// URL参数处理
|
||||
const urlParamRef = ref();
|
||||
let urlParamListProp = props.requestParamList.filter(item => item.in === 'query');
|
||||
let urlParamListProp = props.requestParamList.filter(item => item.in === 'query' || item.in === 'path');
|
||||
let urlParamList = ref([]);
|
||||
// Header参数处理
|
||||
const headerParamRef = ref();
|
||||
@@ -190,9 +190,11 @@
|
||||
message.error('请输入请求的目标URL地址');
|
||||
return;
|
||||
}
|
||||
let formObjData = {};
|
||||
const formData = new FormData();
|
||||
let urlParamSelected = urlParamRef.value.getSelectedRowKeys();
|
||||
let urlParamStr = urlParamList.value.filter(item => urlParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||
formObjData[item.name] = item.value;
|
||||
return item.name + '=' + encodeURIComponent(item.value);
|
||||
}).join('&');
|
||||
let headerParamSelected = headerParamRef.value.getSelectedRowKeys();
|
||||
@@ -208,6 +210,7 @@
|
||||
let formParamSelected = formParamRef.value.getSelectedRowKeys();
|
||||
formParamArr = formParamList.value.filter(item => formParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||
// todo 判断处理文件格式
|
||||
formObjData[item.name] = item.value;
|
||||
return {code: item.name, value: item.value};
|
||||
});
|
||||
}
|
||||
@@ -216,6 +219,7 @@
|
||||
let formEncodeParamSelected = formEncodeParamRef.value.getSelectedRowKeys();
|
||||
formEncodeParamArr = formEncodeParamList.value.filter(item => formEncodeParamSelected.indexOf(item.key) >= 0 && item.name && item.value).map(item => {
|
||||
// todo 判断处理文件格式
|
||||
formObjData[item.name] = item.value;
|
||||
return {code: item.name, value: item.value};
|
||||
});
|
||||
}
|
||||
@@ -227,6 +231,10 @@
|
||||
// formData.append('files[]', file);
|
||||
// });
|
||||
let url = urlParamStr ? (docUrl.value + '?' + urlParamStr) : docUrl.value;
|
||||
// 替换path参数
|
||||
Object.keys(formObjData).forEach((key) => {
|
||||
url = url.replace("{" + key + "}", formObjData[key]);
|
||||
});
|
||||
// 下载请求
|
||||
if (isDownloadRequest) {
|
||||
downloadFormParam.value.param = {
|
||||
|
||||
@@ -13,22 +13,6 @@ export default defineConfig({
|
||||
base: '',
|
||||
plugins: [
|
||||
vue(),
|
||||
styleImport({
|
||||
libs: [
|
||||
// 使用element-plus的一些组件
|
||||
{
|
||||
libraryName: 'element-plus',
|
||||
esModule: true,
|
||||
ensureStyleFile: true,
|
||||
resolveStyle: (name) => {
|
||||
return `element-plus/lib/theme-chalk/${name}.css`;
|
||||
},
|
||||
resolveComponent: (name) => {
|
||||
return `element-plus/lib/${name}`;
|
||||
},
|
||||
}
|
||||
]
|
||||
})
|
||||
],
|
||||
build: {
|
||||
emptyOutDir: true,
|
||||
|
||||
Reference in New Issue
Block a user