forked from github/dataease
Merge pull request #4405 from dataease/pr@dev@pages
feat: API数据源支持输入jsonpath
This commit is contained in:
commit
a8d72e9076
@ -164,6 +164,9 @@ public class DatasourceController {
|
|||||||
public ApiDefinition checkApiDatasource(@RequestBody Map<String, String> data) throws Exception {
|
public ApiDefinition checkApiDatasource(@RequestBody Map<String, String> data) throws Exception {
|
||||||
ApiDefinition apiDefinition = new Gson().fromJson(new String(java.util.Base64.getDecoder().decode(data.get("data"))), new TypeToken<ApiDefinition>() {
|
ApiDefinition apiDefinition = new Gson().fromJson(new String(java.util.Base64.getDecoder().decode(data.get("data"))), new TypeToken<ApiDefinition>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
|
if(data.keySet().contains("type") && data.get("type").equals("apiStructure")){
|
||||||
|
apiDefinition.setShowApiStructure(true);
|
||||||
|
}
|
||||||
return datasourceService.checkApiDatasource(apiDefinition);
|
return datasourceService.checkApiDatasource(apiDefinition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,5 +25,6 @@ public class ApiDefinition {
|
|||||||
private int serialNumber;
|
private int serialNumber;
|
||||||
private boolean useJsonPath;
|
private boolean useJsonPath;
|
||||||
private String jsonPath;
|
private String jsonPath;
|
||||||
|
private boolean showApiStructure;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -186,7 +186,7 @@ public class ApiProvider extends Provider {
|
|||||||
throw new Exception("该请求返回数据为空");
|
throw new Exception("该请求返回数据为空");
|
||||||
}
|
}
|
||||||
List<JSONObject> fields = new ArrayList<>();
|
List<JSONObject> fields = new ArrayList<>();
|
||||||
if (apiDefinition.isUseJsonPath()) {
|
if (apiDefinition.isUseJsonPath() && !apiDefinition.isShowApiStructure()) {
|
||||||
List<LinkedHashMap> currentData = new ArrayList<>();
|
List<LinkedHashMap> currentData = new ArrayList<>();
|
||||||
Object object = JsonPath.read(response, apiDefinition.getJsonPath());
|
Object object = JsonPath.read(response, apiDefinition.getJsonPath());
|
||||||
if (object instanceof List) {
|
if (object instanceof List) {
|
||||||
|
@ -587,51 +587,12 @@
|
|||||||
width="255"
|
width="255"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-checkbox
|
|
||||||
:key="scope.row.jsonPath"
|
|
||||||
v-model="scope.row.checked"
|
|
||||||
:disabled="scope.row.disabled"
|
|
||||||
@change="handleCheckAllChange(originFieldItem, scope.row, 'originPlxTable')"
|
|
||||||
>
|
|
||||||
{{ scope.row.originName }}
|
{{ scope.row.originName }}
|
||||||
</el-checkbox>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row-rules" v-show="apiItem.useJsonPath">
|
|
||||||
<span>{{ $t('dataset.data_preview') }}</span>
|
|
||||||
</div>
|
|
||||||
<el-empty
|
|
||||||
v-if="showEmpty && apiItem.useJsonPath"
|
|
||||||
size="125"
|
|
||||||
:image="noneImg"
|
|
||||||
style="margin-top: 24px"
|
|
||||||
:description="$t('暂无数据,请在数据结构勾选字段')"
|
|
||||||
/>
|
|
||||||
<ux-grid
|
|
||||||
v-if="!showEmpty && apiItem.useJsonPath"
|
|
||||||
ref="originPlxTable"
|
|
||||||
size="mini"
|
|
||||||
style="width: 100%"
|
|
||||||
:height="height"
|
|
||||||
:checkbox-config="{ highlight: true }"
|
|
||||||
:width-resize="true"
|
|
||||||
>
|
|
||||||
<ux-table-column
|
|
||||||
v-for="field in originFieldItem.fields"
|
|
||||||
:key="field.name + field.deExtractType"
|
|
||||||
min-width="200px"
|
|
||||||
:field="field.name"
|
|
||||||
:resizable="true"
|
|
||||||
>
|
|
||||||
<template slot="header">
|
|
||||||
<span>{{ field.name }}</span>
|
|
||||||
</template>
|
|
||||||
</ux-table-column>
|
|
||||||
</ux-grid>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row v-show="active === 2">
|
<el-row v-show="active === 2">
|
||||||
@ -1221,7 +1182,7 @@ export default {
|
|||||||
if (valid) {
|
if (valid) {
|
||||||
const data = Base64.encode(JSON.stringify(this.apiItem))
|
const data = Base64.encode(JSON.stringify(this.apiItem))
|
||||||
this.loading = true
|
this.loading = true
|
||||||
checkApiDatasource({'data': data})
|
checkApiDatasource({'data': data, 'type': 'apiStructure'})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
res.data.jsonFields.forEach(((item) => {
|
res.data.jsonFields.forEach(((item) => {
|
||||||
item.checked = false
|
item.checked = false
|
||||||
|
Loading…
Reference in New Issue
Block a user