#I4MKKW api接口调试支持文件上传,全局参数控制优化

This commit is contained in:
暮光:城中城
2021-12-15 23:20:17 +08:00
parent c176bd7577
commit e2a8c46afb
16 changed files with 206 additions and 61 deletions

View File

@@ -19,7 +19,7 @@
<a-radio value="form">form-data</a-radio>
<a-radio value="formUrlEncode">x-www-form-urlencoded</a-radio>
<a-radio value="row">row</a-radio>
<!-- <a-radio value="binary">binary</a-radio>-->
<!-- <a-radio value="binary">binary</a-radio>-->
</a-radio-group>
<a-select v-if="bodyParamType === 'row'" v-model:value="consumesParamType" size="small" style="margin-left: 10px;vertical-align: top;width: 100px;">
<a-select-option value="json">JSON</a-select-option>
@@ -98,16 +98,18 @@
setup(props) {
const store = useStore();
let apiDoc = store.state.apiDoc || {};
let globalParam = store.state.globalParam || [];
let openApiDoc = store.state.openApiDoc || {};
let userGlobalParam = store.state.globalParam || [];
let docGlobalParam = store.state.docGlobalParam || [];
let openApiDoc = store.state.openApiDoc || {};
let urlDomain = apiDoc.rewriteDomain || '';
// os取服务地址不一样 todo 多服务地址的情况处理
let servers = openApiDoc.servers || [];
if (!urlDomain && servers.length > 0 && servers[0].url) {
urlDomain = servers[0].url;
}
// os取服务地址不一样 todo 多服务地址的情况处理
let servers = openApiDoc.servers || [];
if (!urlDomain && servers.length > 0 && servers[0].url) {
urlDomain = servers[0].url;
}
let docUrl = ref(urlDomain + props.docInfoShow.url);
let activePage = ref('urlParam');
let globalParam = [].concat(userGlobalParam, docGlobalParam);
// URL参数处理
const urlParamRef = ref();
let urlParamListProp = props.requestParamList.filter(item => item.in === 'query' || item.in === 'path');
@@ -184,6 +186,9 @@
} else if (headerParamListProp.length > 0) {
activePage.value = 'headerParam';
}
const isFileType = record => {
return record.type === 'file' || record.subType === 'file' || record.subType === 'MultipartFile';
};
// 发送请求
let requestResult = ref({});
let requestLoading = ref(false);
@@ -195,11 +200,29 @@
message.error('请输入请求的目标URL地址');
return;
}
// 用于替换URL上的path参数
let formObjData = {};
// 代理请求发送给后端的对象
const formData = new FormData();
const appendData = item => {
if (isFileType(item)) {
// 防止参数重名,加个前缀
let name = '_file_' + item.name;
if (item.type === 'array') {
item.value.forEach(file => formData.append(name, file));
} else {
if (item.value instanceof Array && item.value.length > 0) {
formData.append(name, item.value[0]);
}
}
} else {
formObjData[item.name] = item.value;
formData.append(item.name, item.value);
}
};
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;
appendData(item);
return item.name + '=' + encodeURIComponent(item.value);
}).join('&');
let headerParamSelected = headerParamRef.value.getSelectedRowKeys();
@@ -215,7 +238,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;
appendData(item);
return {code: item.name, value: item.value};
});
}
@@ -224,7 +247,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;
appendData(item);
return {code: item.name, value: item.value};
});
}
@@ -232,9 +255,6 @@
if (bodyParamRef.value) {
bodyParamStr = bodyParamRef.value.getParam();
}
// fileList.value.forEach(file => {
// formData.append('files[]', file);
// });
let url = urlParamStr ? (docUrl.value + '?' + urlParamStr) : docUrl.value;
// 替换path参数
Object.keys(formObjData).forEach((key) => {