You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
190 lines
7.9 KiB
190 lines
7.9 KiB
@@master_page.html |
|
<link href="css/page_interface.css?v=2" rel="stylesheet" /> |
|
<div id="apibox"> |
|
<div class="form-group row"> |
|
<form id="frmSearch" onsubmit="return false;"> |
|
<div class="row "> |
|
<div class="col-md-2"> </div> |
|
<div class="col-md-6"> |
|
<input class="form-control" type="text" id="txtSearch" name="example-text-input" placeholder="Url or name"> |
|
</div> |
|
<div class="col-md-4"> |
|
<button @click="onSearch()" id="btnSearch" class="btn btn-success" type="submit"><i class="mdi mdi-magnify"></i>搜索</button> |
|
<button onclick="frmSearch.reset()" id="btnSearch" class="btn btn-close" type="submit">清空</button> |
|
<div class="btn-group"> |
|
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
数据库 <span class="caret"></span> |
|
</button> |
|
<ul class="dropdown-menu"> |
|
<li v-for="item in database"><a :href="getDynamicApiDocUrlByDatabase(item)">{{item.Name}}</a></li> |
|
</ul> |
|
</div> |
|
<div class="btn-group m-l-10"> |
|
<button type="button" class="btn btn-info dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
|
分类 <span class="caret"></span> |
|
</button> |
|
<ul class="dropdown-menu"> |
|
<li v-for="item in interfaceCategroyList"><a :href="getDynamicApiDocUrl(item)">{{item.Name}}</a></li> |
|
</ul> |
|
</div> |
|
</div> |
|
</div> |
|
</form> |
|
</div> |
|
<div class="data" v-for="masterItem in data" :key="masterItem.Key"> |
|
<h2>{{ masterItem.Key }} </h2> |
|
<section v-for="item in masterItem.Value" :key="item.Id"> |
|
<div :class="getEndpointType(item)"> |
|
<p class="p" @click="toggleEndpoint"> |
|
<span class="method">{{ item.HttpMethod }}</span> |
|
<span class="url"> {{item.Url}} {{item.Name}}</span> |
|
<span class="openapi">+</span> |
|
</p> |
|
<p>{{ item.Description }}</p> |
|
<div class="parameter-title" style="display:none"> |
|
Parameters: |
|
<div class="try-out"> |
|
<button class="btn try-out__btn" @click="tryItOut(item)">Try it out </button> |
|
</div> |
|
</div> |
|
<div class="parameter" style="display:none" v-if="item.DataModel.DefaultParameters && item.DataModel.DefaultParameters.length > 0"> |
|
<ul> |
|
<li v-for="param in item.DataModel.DefaultParameters.filter(p => !p.ValueIsReadOnly && p.Value !== undefined && p.Value !== '')" :key="param.Name"> |
|
<code>{{ param.ValueIsReadOnly ? 'Readonly:':''}}{{ param.Name }}</code> ({{ param.ValueType }}) - {{param.Type}} {{ param.Description }} {{ param.Value ? ' ['+param.Name +' = ' + param.Value+']' : ''}} |
|
</li> |
|
<li v-if="item.DataModel.OrderDynamicParemters"> |
|
<code>OrderBy:[{FieldName:"FieldName",OrderByType:0}] 0 Asc, 1 Desc </code> |
|
</li> |
|
</ul> |
|
</div> |
|
</div> |
|
</section> |
|
</div> |
|
<!-- 添加这个div来显示“还没有数据”当data为空时 --> |
|
<div v-if="data==null||data.length === 0" class="no-data-message"> |
|
<div class="alert alert-warning" role="alert"> |
|
<p> 没有创建接口:1、先创建实体,2、点同步创建表,3、创建接口</p> |
|
<p> 创建了没显示: 菜单:【系统配置-接口授权】 给用户授权可以访问的接口 或者 清空所有接口授权</p> |
|
</div> |
|
</div> |
|
</div> |
|
<script> |
|
new Vue({ |
|
el: '#apibox', |
|
data: { |
|
data: null, |
|
error: null, |
|
interfaceCategroyList: [], |
|
database: [], |
|
}, |
|
mounted() { |
|
// 在组件加载时触发数据获取 |
|
this.fetchData(null); |
|
this.bindInterfaceCategroySelect(); |
|
this.bindDatabaseSelect(); |
|
}, |
|
methods: { |
|
fetchData(name) { |
|
var urlParams = new URLSearchParams(window.location.search); |
|
var idFromUrl = urlParams.get('InterfaceCategoryId'); |
|
var databaseIdFromUrl = urlParams.get('DatabaseId'); |
|
var url = url = '/PrivateReZeroRoute/100003/GetInternalInterfaceList?IsInitialized=0'; |
|
var urlParameters = "&" + tools.objectToQueryString({ |
|
Name: txtSearch.value, |
|
InterfaceCategoryId: idFromUrl, |
|
DatabaseId: databaseIdFromUrl |
|
}); |
|
url = url + urlParameters; |
|
axios.get(url, jwHeader) |
|
.then(response => { |
|
this.data = response.data; |
|
this.error = null; |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
}, |
|
tryItOut(item) { |
|
var urlParams = new URLSearchParams(window.location.search); |
|
var token = urlParams.get('token'); |
|
window.open('/rezero/try_api.html?id=' + item.Id + "&token=" + token, '_blank'); |
|
}, |
|
onSearch: function () { |
|
this.fetchData(txtSearch.value); |
|
}, |
|
toggleEndpoint(event) { |
|
var $currentTarget = $(event.currentTarget); |
|
var $parent = $currentTarget.parent(); |
|
var $parameterElements = $parent.find(".parameter-title, .parameter"); |
|
var $textEle = $currentTarget.find(".openapi"); |
|
var isTextPlus = $textEle.text() === "+"; |
|
$parameterElements.toggle(100); |
|
$textEle.text(isTextPlus ? "-" : "+").toggleClass("reduction", isTextPlus); |
|
}, |
|
bindInterfaceCategroySelect: function () { |
|
axios.get("/PrivateReZeroRoute/100004/GetDynamicInterfaceCategoryList", jwHeader) |
|
.then(response => { |
|
this.interfaceCategroyList = response.data; |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
}, |
|
bindDatabaseSelect: function () { |
|
axios.get("/PrivateReZeroRoute/100004/GetDatabaseInfoAllList", jwHeader) |
|
.then(response => { |
|
this.database = response.data; |
|
this.databaseId = this.database[0].Id; |
|
var th = this; |
|
setTimeout(function () { |
|
th.onSearch(); |
|
}, 50); |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
}, |
|
getEndpointType(item) { |
|
var actionType = item.DataModel.ActionType; |
|
if (item.HttpMethod == "Get") { |
|
return 'endpoint endpointGet'; |
|
} else if (item.HttpMethod == "Post") { |
|
return 'endpoint endpointPost'; |
|
} else if (item.HttpMethod == "Delete") { |
|
return 'endpoint endpointDelete'; |
|
} else if (item.HttpMethod == "Put") { |
|
return 'endpoint endpointPut'; |
|
} else if (actionType.startsWith('1')) { |
|
return 'endpoint endpointGet'; |
|
} else if (actionType.startsWith('2')) { |
|
return 'endpoint endpointPost'; |
|
} else if (actionType.startsWith('6')) { |
|
return 'endpoint endpointPost'; |
|
} else if (actionType.startsWith('3')) { |
|
return 'endpoint endpointDelete'; |
|
} else if (actionType.startsWith('4')) { |
|
return 'endpoint endpointPut'; |
|
} else if (actionType.startsWith('9')) { |
|
return 'endpoint endpointSql'; |
|
} else { |
|
return 'endpoint endpointOther'; |
|
} |
|
}, |
|
getDynamicApiDocUrl: function (item) { |
|
var urlParams = new URLSearchParams(window.location.search); |
|
var token = urlParams.get('token'); |
|
var model = urlParams.get('model'); |
|
return "/rezero/dynamic_interface.html?InterfaceCategoryId=" + item.Id + "&model=" + model + "&token=" + token; |
|
}, |
|
getDynamicApiDocUrlByDatabase: function (item) { |
|
var urlParams = new URLSearchParams(window.location.search); |
|
var token = urlParams.get('token'); |
|
var model = urlParams.get('model'); |
|
return "/rezero/dynamic_interface.html?DatabaseId=" + item.Id + "&model=" + model + "&token=" + token; |
|
} |
|
} |
|
}); |
|
</script>
|
|
|