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.
309 lines
14 KiB
309 lines
14 KiB
@@master_page.html |
|
<link href="css/page_interface_detail.css?v=1" rel="stylesheet" /> |
|
<div id="app"> |
|
<div v-if="data"> |
|
<h1> |
|
{{data.Name}} <button @click="changeTag" type="button" class="btn btn-danger" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="Tooltip on bottom"><i class="mdi-toggle-switch mdi"></i>切换模式</button> |
|
</h1> |
|
<div class="url"> |
|
{{ data.HttpMethod }}: {{data.Url}} |
|
</div> |
|
<div :class="{'hidden': !toggle}" > |
|
<div class="parameter" v-if="data.DataModel.DefaultParameters && data.DataModel.DefaultParameters.length > 0"> |
|
<div class="form-group" v-for="param in data.DataModel.DefaultParameters" :key="param.Name"> |
|
<label class="control-label" :style="{ display: param.ValueIsReadOnly ? 'none' : 'block' }">{{param.Description}} [ {{ param.Name }} {{param.FieldOperatorString}}]:</label> |
|
|
|
<div v-if="param.ValueType=='Byte[]'"> |
|
<input @change="handleFileChange($event, param)" class="form-control" type="file" :placeholder="param.ValueType"> |
|
</div> |
|
<div v-else-if="param.ValueIsReadOnly==false"> |
|
<input v-model="param.Value" type="text" class="form-control" :placeholder="param.ValueType"> |
|
</div> |
|
<div v-else-if="param.ValueIsReadOnly==true" :style="{ display: param.ValueIsReadOnly ? 'none' : 'block' }"> |
|
<input v-model="param.Value" type="text" class="readonly form-control" readonly="readonly" placeholder=""> |
|
</div> |
|
</div> |
|
</div> |
|
<div class="parameter" v-if="data.DataModel.OrderDynamicParemters"> |
|
<label> |
|
排序: |
|
</label> |
|
<textarea id="txtOrderDynamicParemters" placeholder="格式:[{FieldName:FieldName,OrderByType:0}] ,其中: 0 升序, 1 倒序,FieldName是列表中的列"> </textarea> |
|
</div> |
|
<div class="parameter" v-if="!data.DataModel.OrderDynamicParemters"> |
|
<input id="txtOrderDynamicParemters" type="hidden" /> |
|
</div> |
|
<div class="form-group"> |
|
<button class="btn btn-primary m-r-10" v-on:click="submitRequest"><i class="mdi mdi-check-circle-outline"></i>提交</button> |
|
<button class="btn btn-info m-r-10" v-on:click="saveParameters"><i class="mdi-content-save mdi"></i> 保存参数</button> |
|
<button class="btn btn btn-pink m-r-10" v-on:click="loadParameters"><i class="mdi-autorenew mdi"></i>加载参数</button> |
|
<button class="btn btn btn-secondary m-r-10" v-on:click="submitClose"><i class="mdi-close mdi"></i>关闭页面</button> |
|
</div> |
|
<div> |
|
<code>{{message}}</code> |
|
</div> |
|
</div> |
|
<div :class="{'hidden': toggle}"> |
|
<div class="form-group"> |
|
<label class="control-label"> |
|
Json参数: |
|
</label> |
|
<div id="editorJson" class="m-t-10" style="padding:10px;width: 100%; height: 300px;"></div> |
|
</div> |
|
<div class="form-group"> |
|
<button class="btn btn-primary m-r-10" v-on:click="submitRequestJson"><i class="mdi mdi-check-circle-outline"></i>提交</button> |
|
<button class="btn btn-info m-r-10" v-on:click="saveParametersJson"><i class="mdi-content-save mdi"></i> 保存参数</button> |
|
<button class="btn btn btn-pink m-r-10" v-on:click="loadParametersJson"><i class="mdi-autorenew mdi"></i>加载参数</button> |
|
<button class="btn btn btn-secondary m-r-10" v-on:click="submitClose"><i class="mdi-close mdi"></i>关闭页面</button> |
|
</div> |
|
<div> |
|
<code>{{message}}</code> |
|
</div> |
|
</div> |
|
</div> |
|
<div v-else> |
|
<!-- 处理 data 为 null 的情况,可以显示加载中或错误信息 --> |
|
<p>Loading...</p> |
|
</div> |
|
<div id="editor" class="m-t-10" style="padding:10px;width: 100%; height: 300px;"></div> |
|
|
|
<div v-if="responseUrl" class="alert alert-success m-t-10 m-b-10"> |
|
<div class="m-b-10" v-if="data.HttpMethod=='Post'">Post同时支持Raw、表单和url参数</div> |
|
<div class="m-b-10" v-if="data.HttpMethod=='All'">Get Post 都支持,可以是Url参数、表单参数或者Raw</div> |
|
{{responseUrl}} |
|
</div> |
|
|
|
</div> |
|
<script src="js/ace/src-min/ace.js"></script> |
|
<script> |
|
var vueObj = new Vue({ |
|
el: '#app', |
|
data: { |
|
data: null, |
|
error: null, |
|
response: "", |
|
responseUrl: null, |
|
toggle:true, |
|
message: "注意:如果找不到表需要到【菜单:实体表维护】点按钮【同步】建表" |
|
}, |
|
mounted() { |
|
// 在组件加载时触发数据获取 |
|
this.fetchData(); |
|
var th = this; |
|
th.setEditorValue("{}"); |
|
setTimeout(function () { |
|
var value = th.transformJsonArrayToObject(th.data.DataModel.DefaultParameters); |
|
th.setEditorJsonValue(JSON.stringify(value,null,4)); |
|
},2000); |
|
|
|
}, |
|
methods: { |
|
submitClose: function () { |
|
window.close(); |
|
}, |
|
submitRequestJson: function () { |
|
var vm = this; |
|
var json = vm.data; // Uncomment this line |
|
// 构造请求 |
|
var fullUrl = json.Url; |
|
var json = ace.edit("editorJson").getValue(); |
|
try { |
|
json = JSON.parse(json); |
|
if (Array.isArray(json)) |
|
{ |
|
json = { data: json }; |
|
} |
|
} catch (e) { |
|
var editor = ace.edit("editor") |
|
editor.setValue(JSON.stringify({ message: "json格式不标准" },null,4)); |
|
return; |
|
} |
|
var isUrlParameters = this.isUrlParameters(fullUrl); |
|
if (isUrlParameters) |
|
{ |
|
fullUrl = this.getUrlByUrlParameters(fullUrl); |
|
} |
|
// 发送 POST 请求 |
|
axios.post(fullUrl, json , jwHeader) |
|
.then(function (response) { |
|
// 更新响应 |
|
vm.response = JSON.stringify(response.data, null, 4); |
|
this.setEditorValue(vm.response); |
|
this.setResponseUrl(fullUrl, json, isUrlParameters); |
|
|
|
}.bind(vm)) |
|
.catch(function (error) { |
|
// 处理错误 |
|
vm.response = "网络错误"; |
|
}.bind(vm)); |
|
}, |
|
submitRequest: function () { |
|
|
|
var vm = this; |
|
var json = vm.data; // Uncomment this line |
|
// 构造请求 |
|
var fullUrl = json.Url; |
|
var postData = {}; |
|
if (json.DataModel.DefaultParameters) { |
|
json.DataModel.DefaultParameters.forEach(function (param) { |
|
postData[param.Name] = param.Value; |
|
}); |
|
} |
|
if (txtOrderDynamicParemters.value) { |
|
postData["OrderDynamicParemters"] = txtOrderDynamicParemters.value; |
|
} |
|
var isUrlParameters = this.isUrlParameters(fullUrl); |
|
if (isUrlParameters) { |
|
fullUrl = this.getUrlByUrlParameters(fullUrl); |
|
} |
|
// 发送 POST 请求 |
|
axios.post(fullUrl, postData, jwHeader) |
|
.then(function (response) { |
|
// 更新响应 |
|
vm.response = JSON.stringify(response.data, null, 4); |
|
this.setEditorValue(vm.response); |
|
this.setResponseUrl(fullUrl, postData, isUrlParameters); |
|
|
|
}.bind(vm)) |
|
.catch(function (error) { |
|
// 处理错误 |
|
vm.response = "网络错误"; |
|
}.bind(vm)); |
|
}, |
|
fetchData: function () { |
|
var urlParams = new URLSearchParams(window.location.search); |
|
var idFromUrl = urlParams.get('id'); |
|
// 发送 GET 请求 |
|
axios.get('/PrivateReZeroRoute/100003/GetInternalDetail?id=' + idFromUrl, jwHeader) |
|
.then(function (response) { |
|
this.data = response.data; |
|
this.error = null; |
|
document.body.classList.add("lyear-layout-sidebar-close"); |
|
}.bind(this)) |
|
.catch(function (error) { |
|
// 处理错误 |
|
this.error = error.message; |
|
this.data = null; |
|
}.bind(this)); |
|
}, |
|
handleFileChange: function (event, param) { |
|
// Handle the file change event |
|
var file = event.target.files[0]; |
|
// Assuming you want to read the file as base64 for upload |
|
var reader = new FileReader(); |
|
reader.onload = function () { |
|
// Update the param value with the file content |
|
param.Value = reader.result; |
|
}; |
|
reader.readAsDataURL(file); |
|
}, |
|
setEditorValue: function (formattedJson) { |
|
var editor = ace.edit("editor"); |
|
editor.setTheme("ace/theme/twilight"); |
|
editor.setOption("showPrintMargin", false); |
|
editor.session.setMode("ace/mode/json5"); |
|
editor.setValue(formattedJson); |
|
editor.selection.clearSelection(); |
|
editor.resize(); |
|
|
|
}, |
|
setEditorJsonValue: function (formattedJson) { |
|
var editor = ace.edit("editorJson"); |
|
editor.setTheme("ace/theme/twilight"); |
|
editor.setOption("showPrintMargin", false); |
|
editor.session.setMode("ace/mode/json5"); |
|
editor.setValue(formattedJson); |
|
editor.selection.clearSelection(); |
|
editor.resize(); |
|
|
|
}, |
|
saveParameters: function () { |
|
this.message = ("保存成功,点加载可以还原参数"); |
|
localStorage.setItem("Parameters:" + this.data.Url, JSON.stringify(vueObj.$data.data.DataModel.DefaultParameters)); |
|
}, |
|
loadParameters: function () { |
|
this.message = ("加载成功,修改后可以保存"); |
|
var key = "Parameters:" + this.data.Url; |
|
if (localStorage.getItem(key)) { |
|
var items = JSON.parse(localStorage.getItem(key)); |
|
vueObj.data.DataModel.DefaultParameters = []; // 清空数组 |
|
items.forEach(function (item) { |
|
vueObj.data.DataModel.DefaultParameters.push(item); // 向数组中添加元素 |
|
}); |
|
} |
|
else { |
|
this.message = ("浏览器没有找到保存,请先保存"); |
|
} |
|
}, |
|
saveParametersJson: function () { |
|
this.message = ("保存成功,点加载可以还原参数"); |
|
var editor = ace.edit("editorJson"); |
|
localStorage.setItem("ParametersJson:" + this.data.Url, editor.getValue() ); |
|
}, |
|
loadParametersJson: function () { |
|
this.message = ("加载成功,修改后可以保存"); |
|
var key = "ParametersJson:" + this.data.Url; |
|
if (localStorage.getItem(key)) { |
|
var editor = ace.edit("editorJson"); |
|
editor.setValue(localStorage.getItem(key)); |
|
editor.selection.clearSelection(); |
|
} |
|
else { |
|
this.message = ("浏览器没有找到保存,请先保存"); |
|
} |
|
}, |
|
changeTag: function () |
|
{ |
|
this.toggle = !this.toggle; |
|
}, |
|
transformJsonArrayToObject: function (jsonArray) { |
|
let result = {}; |
|
if (jsonArray) { |
|
jsonArray.forEach(item => { |
|
if ('Name' in item) { |
|
result[item.Name] = null; |
|
} |
|
}); |
|
} |
|
return result; |
|
}, |
|
setResponseUrl: function (fullUrl,json,isUrlParameters) |
|
{ |
|
|
|
|
|
// 定义HTTP方法和原始URL |
|
var httpMethod = this.data.HttpMethod; |
|
var baseUrl = window.location.origin + fullUrl; |
|
|
|
|
|
if (isUrlParameters) |
|
{ |
|
this.responseUrl = `${httpMethod} : ${baseUrl}`; |
|
return; |
|
} |
|
|
|
// 将postData转换为URL参数 |
|
var queryParams = tools.jsonToUrl(json); |
|
if (queryParams) |
|
queryParams = "?" + queryParams; |
|
// 使用模板字符串构建完整的响应URL |
|
this.responseUrl = `${httpMethod} : ${baseUrl}${queryParams}`; |
|
}, |
|
isUrlParameters: function (fullUrl) |
|
{ |
|
var isUrlParameters = (fullUrl + "").indexOf("/{") > 0 && (fullUrl + "").indexOf("}") > 0; |
|
return isUrlParameters; |
|
}, |
|
getUrlByUrlParameters: function (fullUrl) { |
|
var url = fullUrl; |
|
if (this.data.DataModel.DefaultParameters) { |
|
this.data.DataModel.DefaultParameters.forEach(function (param) { |
|
var regex = new RegExp("{" + param.Name + "}", "g"); |
|
url = url.replace(regex, param.Value); |
|
}); |
|
} |
|
return url; |
|
} |
|
} |
|
}); |
|
</script>
|
|
|