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>
 | 
						|
 |