统一管理父窗口方法,全局参数配置保存

This commit is contained in:
暮光:城中城
2018-12-10 23:10:10 +08:00
parent 8dae6962a6
commit 452062e967
8 changed files with 1141 additions and 1035 deletions

View File

@@ -1,314 +1,322 @@
/**
* 一些公用方法
* @author 暮光:城中城
* @since 2017年5月7日
*/
function serialize(value) {
if (typeof value === 'string') {
return value;
}
return JSON.stringify(value);
}
function deserialize(value) {
if (typeof value !== 'string' || isEmpty(value)) {
return undefined;
}
try {
return JSON.parse(value);
} catch (e) {
try {
return eval('(' + value + ')');// 处理变态的单双引号共存字符串
} catch (e) {
return value || undefined;
}
}
}
function validateResult(result) {
if(result.errCode == 200) {
return true;
} else {
Toast.error(result.errMsg);
}
return false;
}
function getNowDate() {
var date = new Date();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + "-" + month + "-" + strDate;
return currentdate;
}
function getNowTime() {
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
if (hours >= 1 && hours <= 9) {
hours = "0" + hours;
}
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
var currentdate = hours + ":" + minutes + ":" + seconds;
return currentdate;
}
function getNowDateTime() {
var currentdate = getNowDate() + " " + getNowTime();
return currentdate;
}
/**
* 返回不为空的字符串为空返回def
*/
function getNotEmptyStr(str, def) {
if (isEmpty(str)) {
return isEmpty(def) ? "" : def;
}
return str;
}
/**
* 是否是空对象
* @param obj
* @returns
*/
function isEmptyObject(obj){
return $.isEmptyObject(obj);
}
/**
* 是否是空字符串
* @param str
* @returns
*/
function isEmpty(str){
return (str == "" || str == null || str == undefined);
}
/**
* 是否不是空字符串
* @param str
* @returns
*/
function isNotEmpty(str){
return !isEmpty(str);
}
/**
* 数组转字符串,使用空格分隔
* @param array
* @returns
*/
function arrToString(array){
var temStr = "";
if(isEmpty(array)){
return temStr;
}
array.forEach(function(e){
if(isNotEmpty(temStr)) {
temStr += " ";
}
temStr += e;
});
return temStr;
}
/**
* 数组array中是否包含str字符串
* @param array
* @param str
* @returns
*/
function haveString(array, str){
if(isEmpty(array)) {
return false;
}
for (var i = 0; i < array.length; i++) {
if(array[i] == str) {
return true;
}
}
return false;
}
/**
* 直接返回对象的第一个属性
* @param data
* @returns
*/
function getObjectFirstAttribute(data) {
for ( var key in data) {
return data[key];
}
}
/**
* 如果对象只有一个属性则返回第一个属性否则返回null
* @param data
* @returns
*/
function getObjectFirstAttributeIfOnly(data) {
var len = 0, value = "";
for ( var key in data) {
if (++len > 1) {
return null;
}
value = data[key];
}
return value;
}
/**
* ajax处理事件模板
*
* @url 后台处理的url即action
* @dataSentType 数据发送的方式有postget方式
* @dataReceiveType 数据接收格式有html json text等
* @paramsStr 传入后台的参数
* @successFunction ajax成功后执行的函数名 ajaxTemp("", "GET", "html", {}, function(){},
* function(){}, "");
*/
function ajaxTemp(url, dataSentType, dataReceiveType, paramsStr, successFunction, errorFunction, completeFunction, id) {
$.ajax({
url : url, // 后台处理程序
sync : false,
type : dataSentType, // 数据发送方式
dataType : dataReceiveType, // 接受数据格式
data : eval(paramsStr),
contentType : "application/x-www-form-urlencoded; charset=UTF-8",
success : function(msg) {
if(typeof successFunction == "function") {
successFunction(msg,id);
}
},
beforeSend : function() {
},
complete : function(msg) {
if(typeof completeFunction == "function") {
completeFunction(msg,id);
}
},
error : function(msg) {
if(typeof errorFunction == "function") {
errorFunction(msg,id);
}
}
});
}
/**
* 获取cookie
* @param name
* @returns
*/
function getCookie(name) {
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}
return null;
}
/**
* 字符串格式化
*/
String.prototype.format = function(args) {
if (arguments.length > 0) {
var result = this;
if (arguments.length == 1 && typeof (args) == "object") {
for ( var key in args) {
var reg = new RegExp("({" + key + "})", "g");
result = result.replace(reg, args[key]);
}
} else {
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] == undefined) {
return "";
} else {
var reg = new RegExp("({[" + i + "]})", "g");
result = result.replace(reg, arguments[i]);
}
}
}
return result;
} else {
return this;
}
}
String.prototype.endWith = function(str) {
if (str == null || str == "" || this.length == 0 || str.length > this.length) {
return false;
}
return (this.substring(this.length - str.length) == str);
};
String.prototype.startWith = function(str) {
if (str == null || str == "" || this.length == 0 || str.length > this.length) {
return false;
}
return (this.substr(0, str.length) == str);
};
/**
* 获取数据,异步的操作
*/
function getStorage(key, success, fail) {
var start = (typeof urlBase === 'string') ? urlBase : '';
ajaxTemp(start + "swagger-mg-ui/storage/data", "get", "json", {key: key}, function(json){
if(json.errCode == 200) {
if(typeof success == "function") {
var result = deserialize(json.data);
success(result);
}
} else {
if(typeof fail == "function") {
fail();
}
}
}, function(msg){
if(typeof fail == "function") {
fail();
}
});
}
/**
* 存储数据,异步的操作
*/
function setStorage(key, value, success, fail) {
value = $.zui.store.serialize(value);
var start = (typeof urlBase === 'string') ? urlBase : '';
ajaxTemp(start + "swagger-mg-ui/storage/data", "post", "json", {key: key, value: value}, function(json){
if(json.errCode == 200) {
if(typeof success == "function") {
success();
}
} else {
if(typeof fail == "function") {
fail(getNotEmptyStr(json.errMsg));
}
}
}, function(msg){
if(typeof fail == "function") {
fail("");
}
console.log("存储数据到服务器失败,请检查");
});
/**
* 一些公用方法
* @author 暮光:城中城
* @since 2017年5月7日
*/
function serialize(value) {
if (typeof value === 'string') {
return value;
}
return JSON.stringify(value);
}
function deserialize(value) {
if (typeof value !== 'string' || isEmpty(value)) {
return undefined;
}
try {
return JSON.parse(value);
} catch (e) {
try {
return eval('(' + value + ')');// 处理变态的单双引号共存字符串
} catch (e) {
return value || undefined;
}
}
}
function validateResult(result) {
if(result.errCode == 200) {
return true;
} else {
Toast.error(result.errMsg);
}
return false;
}
function getNowDate() {
var date = new Date();
var month = date.getMonth() + 1;
var strDate = date.getDate();
if (month >= 1 && month <= 9) {
month = "0" + month;
}
if (strDate >= 0 && strDate <= 9) {
strDate = "0" + strDate;
}
var currentdate = date.getFullYear() + "-" + month + "-" + strDate;
return currentdate;
}
function getNowTime() {
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
if (hours >= 1 && hours <= 9) {
hours = "0" + hours;
}
if (minutes >= 0 && minutes <= 9) {
minutes = "0" + minutes;
}
if (seconds >= 0 && seconds <= 9) {
seconds = "0" + seconds;
}
var currentdate = hours + ":" + minutes + ":" + seconds;
return currentdate;
}
function getNowDateTime() {
var currentdate = getNowDate() + " " + getNowTime();
return currentdate;
}
/**
* 返回不为空的字符串为空返回def
*/
function getNotEmptyStr(str, def) {
if (isEmpty(str)) {
return isEmpty(def) ? "" : def;
}
return str;
}
/**
* 是否是空对象
* @param obj
* @returns
*/
function isEmptyObject(obj){
return $.isEmptyObject(obj);
}
/**
* 是否是空字符串
* @param str
* @returns
*/
function isEmpty(str){
return (str == "" || str == null || str == undefined);
}
/**
* 是否不是空字符串
* @param str
* @returns
*/
function isNotEmpty(str){
return !isEmpty(str);
}
/**
* 数组转字符串,使用空格分隔
* @param array
* @returns
*/
function arrToString(array){
var temStr = "";
if(isEmpty(array)){
return temStr;
}
array.forEach(function(e){
if(isNotEmpty(temStr)) {
temStr += " ";
}
temStr += e;
});
return temStr;
}
/**
* 数组array中是否包含str字符串
* @param array
* @param str
* @returns
*/
function haveString(array, str){
if(isEmpty(array)) {
return false;
}
for (var i = 0; i < array.length; i++) {
if(array[i] == str) {
return true;
}
}
return false;
}
/**
* 直接返回对象的第一个属性
* @param data
* @returns
*/
function getObjectFirstAttribute(data) {
for ( var key in data) {
return data[key];
}
}
/**
* 如果对象只有一个属性则返回第一个属性否则返回null
* @param data
* @returns
*/
function getObjectFirstAttributeIfOnly(data) {
var len = 0, value = "";
for ( var key in data) {
if (++len > 1) {
return null;
}
value = data[key];
}
return value;
}
/**
* ajax处理事件模板
*
* @url 后台处理的url即action
* @dataSentType 数据发送的方式有postget方式
* @dataReceiveType 数据接收格式有html json text等
* @paramsStr 传入后台的参数
* @successFunction ajax成功后执行的函数名 ajaxTemp("", "GET", "html", {}, function(){},
* function(){}, "");
*/
function ajaxTemp(url, dataSentType, dataReceiveType, paramsStr, successFunction, errorFunction, completeFunction, id) {
$.ajax({
url : url, // 后台处理程序
sync : false,
type : dataSentType, // 数据发送方式
dataType : dataReceiveType, // 接受数据格式
data : eval(paramsStr),
contentType : "application/x-www-form-urlencoded; charset=UTF-8",
success : function(msg) {
if(typeof successFunction == "function") {
successFunction(msg,id);
}
},
beforeSend : function() {
},
complete : function(msg) {
if(typeof completeFunction == "function") {
completeFunction(msg,id);
}
},
error : function(msg) {
if(typeof errorFunction == "function") {
errorFunction(msg,id);
}
}
});
}
/**
* 获取cookie
* @param name
* @returns
*/
function getCookie(name) {
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}
return null;
}
/**
* 字符串格式化
*/
String.prototype.format = function(args) {
if (arguments.length > 0) {
var result = this;
if (arguments.length == 1 && typeof (args) == "object") {
for ( var key in args) {
var reg = new RegExp("({" + key + "})", "g");
result = result.replace(reg, args[key]);
}
} else {
for (var i = 0; i < arguments.length; i++) {
if (arguments[i] == undefined) {
return "";
} else {
var reg = new RegExp("({[" + i + "]})", "g");
result = result.replace(reg, arguments[i]);
}
}
}
return result;
} else {
return this;
}
}
String.prototype.endWith = function(str) {
if (str == null || str == "" || this.length == 0 || str.length > this.length) {
return false;
}
return (this.substring(this.length - str.length) == str);
};
String.prototype.startWith = function(str) {
if (str == null || str == "" || this.length == 0 || str.length > this.length) {
return false;
}
return (this.substr(0, str.length) == str);
};
/**
* 获取数据,异步的操作
*/
function getStorage(key, success, fail) {
var start = (typeof urlBase === 'string') ? urlBase : '';
ajaxTemp(start + "swagger-mg-ui/storage/data", "get", "json", {key: key}, function(json){
if(json.errCode == 200) {
if(typeof success == "function") {
var result = deserialize(json.data);
success(result);
}
} else {
if(typeof fail == "function") {
fail();
}
}
}, function(msg){
if(typeof fail == "function") {
fail();
}
});
}
/**
* 存储数据,异步的操作
*/
function setStorage(key, value, success, fail) {
value = $.zui.store.serialize(value);
var start = (typeof urlBase === 'string') ? urlBase : '';
ajaxTemp(start + "swagger-mg-ui/storage/data", "post", "json", {key: key, value: value}, function(json){
if(json.errCode == 200) {
if(typeof success == "function") {
success();
}
} else {
if(typeof fail == "function") {
fail(getNotEmptyStr(json.errMsg));
}
}
}, function(msg){
if(typeof fail == "function") {
fail("");
}
console.log("存储数据到服务器失败,请检查");
});
}
/**
* 获取父窗口的exports
* @returns
*/
function getExport(){
return window.parent.window.exports;
}

View File

@@ -0,0 +1,5 @@
var cacheKeys = {
userSettings: 'userSettings',
swaggerResourcesList: 'swagger-resources-list',
globalParamList: 'zyplayer-doc-global-param-list',
}

View File

@@ -0,0 +1,14 @@
var exports = {
regeneratePathTree: function(){
// 定义在mg-ui.js用于重新生成文档树目录
regeneratePathTree();
},
updateUserSettings: function(setting){
// 定义在mg-ui.js用于更新用户设置
updateUserSettings(setting);
},
exportDocument: function(){
// 定义在mg-ui.js用于打开导出文档框
exportDocument();
}
};

View File

@@ -1,139 +1,140 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文档展示配置</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
<table class="table table-bordered setting-table">
<thead>
<tr>
<td style="width: 150px;">参数名</td>
<td style="width: 300px;">参数值</td>
<td>说明</td>
</tr>
</thead>
<tbody>
<tr>
<td class="info">目录展示方式</td>
<td>
<label><input type="radio" name="catalogShowType" value="1" v-model="catalogShowType">分路径展示</label>
<label><input type="radio" name="catalogShowType" value="2" v-model="catalogShowType">分标签展示</label>
</td>
<td>分路径:/api/data/getDataList 分标签:/api└/data└/getDateList└post└get</td>
</tr>
<tr>
<td class="info">树形菜单展示方式</td>
<td>
<label><input type="radio" name="treeShowType" value="1" v-model="treeShowType">直角</label>
<label><input type="radio" name="treeShowType" value="2" v-model="treeShowType">导航</label>
<label><input type="radio" name="treeShowType" value="3" v-model="treeShowType">加减</label>
<label><input type="radio" name="treeShowType" value="4" v-model="treeShowType">文件夹</label>
<label><input type="radio" name="treeShowType" value="5" v-model="treeShowType">V型</label>
</td>
<td>请自行修改体验</td>
</tr>
<tr>
<td class="info">是否展示字段的类型</td>
<td>
<label><input type="radio" name="showParamType" value="1" v-model="showParamType"></label>
<label><input type="radio" name="showParamType" value="0" v-model="showParamType"></label>
</td>
<td>文档中是否展示类型:"reference": "(boolean)"</td>
</tr>
<tr>
<td class="info">仅使用上次请求参数</td>
<td>
<label><input type="radio" name="onlyUseLastParam" value="1" v-model="onlyUseLastParam"></label>
<label><input type="radio" name="onlyUseLastParam" value="0" v-model="onlyUseLastParam"></label>
</td>
<td>每个接口都使用最后一次请求的header、form、body参数参数列表有但上一次请求没有使用的则不会展示在请求参数里面从未请求过则展示所有参数</td>
</tr>
<tr>
<td class="info">自动填充请求参数</td>
<td>
<label><input type="radio" name="autoFillParam" value="0" v-model="autoFillParam"></label>
<label><input type="radio" name="autoFillParam" value="1" v-model="autoFillParam">智能填充</label>
<label><input type="radio" name="autoFillParam" value="2" v-model="autoFillParam">全部填充</label>
</td>
<td>不填充智能填充只填充flag、time等后缀的参数全部填充对应不上类型的使用“我是默认字符串”填充</td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/common.js"></script>
<script src="../vue/vue.js"></script>
<script>
var urlBase = "../../";
var app = new Vue({
el: '#app',
data: {
catalogShowType: '',
treeShowType: '',
showParamType:'',
onlyUseLastParam: '',
autoFillParam: '',
userSettings: {}
},
methods: {
},
mounted: function(){
getStorage('userSettings', function(data){
app.userSettings = data;
app.catalogShowType = data.catalogShowType;
app.treeShowType = data.treeShowType;
app.showParamType = data.showParamType;
app.onlyUseLastParam = data.onlyUseLastParam;
app.autoFillParam = data.autoFillParam;
});
},
watch: {
catalogShowType: function(newVal, oldval){
app.userSettings.catalogShowType = newVal;
storeUserSettings();
window.parent.window.regeneratePathTree();
},
treeShowType: function(newVal, oldval){
app.userSettings.treeShowType = newVal;
storeUserSettings();
window.parent.window.updateTreeShowType();
},
showParamType: function(newVal, oldval){
app.userSettings.showParamType = newVal;
storeUserSettings();
},
onlyUseLastParam: function(newVal, oldval){
app.userSettings.onlyUseLastParam = newVal;
storeUserSettings();
},
autoFillParam: function(newVal, oldval){
app.userSettings.autoFillParam = newVal;
storeUserSettings();
},
}
});
// 存储用户的配置信息
function storeUserSettings(){
setStorage('userSettings', app.userSettings, function(){
window.parent.window.updateUserSettings(app.userSettings);
});
}
</script>
<style>
#app{padding-top: 10px;}
</style>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文档展示配置</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
<table class="table table-bordered setting-table">
<thead>
<tr>
<td style="width: 150px;">参数名</td>
<td style="width: 300px;">参数值</td>
<td>说明</td>
</tr>
</thead>
<tbody>
<tr>
<td class="info">目录展示方式</td>
<td>
<label><input type="radio" name="catalogShowType" value="1" v-model="catalogShowType">分路径展示</label>
<label><input type="radio" name="catalogShowType" value="2" v-model="catalogShowType">分标签展示</label>
</td>
<td>分路径:/api/data/getDataList 分标签:/api└/data└/getDateList└post└get</td>
</tr>
<tr>
<td class="info">树形菜单展示方式</td>
<td>
<label><input type="radio" name="treeShowType" value="1" v-model="treeShowType">直角</label>
<label><input type="radio" name="treeShowType" value="2" v-model="treeShowType">导航</label>
<label><input type="radio" name="treeShowType" value="3" v-model="treeShowType">加减</label>
<label><input type="radio" name="treeShowType" value="4" v-model="treeShowType">文件夹</label>
<label><input type="radio" name="treeShowType" value="5" v-model="treeShowType">V型</label>
</td>
<td>请自行修改体验</td>
</tr>
<tr>
<td class="info">是否展示字段的类型</td>
<td>
<label><input type="radio" name="showParamType" value="1" v-model="showParamType"></label>
<label><input type="radio" name="showParamType" value="0" v-model="showParamType"></label>
</td>
<td>文档中是否展示类型:"reference": "(boolean)"</td>
</tr>
<tr>
<td class="info">仅使用上次请求参数</td>
<td>
<label><input type="radio" name="onlyUseLastParam" value="1" v-model="onlyUseLastParam"></label>
<label><input type="radio" name="onlyUseLastParam" value="0" v-model="onlyUseLastParam"></label>
</td>
<td>每个接口都使用最后一次请求的header、form、body参数参数列表有但上一次请求没有使用的则不会展示在请求参数里面从未请求过则展示所有参数</td>
</tr>
<tr>
<td class="info">自动填充请求参数</td>
<td>
<label><input type="radio" name="autoFillParam" value="0" v-model="autoFillParam"></label>
<label><input type="radio" name="autoFillParam" value="1" v-model="autoFillParam">智能填充</label>
<label><input type="radio" name="autoFillParam" value="2" v-model="autoFillParam">全部填充</label>
</td>
<td>不填充智能填充只填充flag、time等后缀的参数全部填充对应不上类型的使用“我是默认字符串”填充</td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/common.js"></script>
<script src="../mg-ui/js/mg-ui-cache-keys.js"></script>
<script src="../vue/vue.js"></script>
<script>
var urlBase = "../../";
var app = new Vue({
el: '#app',
data: {
catalogShowType: '',
treeShowType: '',
showParamType:'',
onlyUseLastParam: '',
autoFillParam: '',
userSettings: {}
},
methods: {
},
mounted: function(){
getStorage(cacheKeys.userSettings, function(data){
app.userSettings = data;
app.catalogShowType = data.catalogShowType;
app.treeShowType = data.treeShowType;
app.showParamType = data.showParamType;
app.onlyUseLastParam = data.onlyUseLastParam;
app.autoFillParam = data.autoFillParam;
});
},
watch: {
catalogShowType: function(newVal, oldval){
app.userSettings.catalogShowType = newVal;
storeUserSettings();
getExport().regeneratePathTree();
},
treeShowType: function(newVal, oldval){
app.userSettings.treeShowType = newVal;
storeUserSettings();
window.parent.window.updateTreeShowType();
},
showParamType: function(newVal, oldval){
app.userSettings.showParamType = newVal;
storeUserSettings();
},
onlyUseLastParam: function(newVal, oldval){
app.userSettings.onlyUseLastParam = newVal;
storeUserSettings();
},
autoFillParam: function(newVal, oldval){
app.userSettings.autoFillParam = newVal;
storeUserSettings();
},
}
});
// 存储用户的配置信息
function storeUserSettings(){
setStorage(cacheKeys.userSettings, app.userSettings, function(){
getExport().updateUserSettings(app.userSettings);
});
}
</script>
<style>
#app{padding-top: 10px;}
</style>
</html>

View File

@@ -1,140 +1,136 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文档地址管理</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
<table class="table table-bordered setting-table">
<thead>
<tr>
<td style="width: 50px;">序号</td>
<td>地址</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in swaggerResourcesList" :key="item.id" :data-id="item.id" :data-index="index" >
<td>{{index+1}}</td>
<td>{{item}}</td>
<td>
<button class="btn btn-danger" type="button" v-on:click="deleteDocUrl($event)">删除</button>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<button class="btn" type="button" v-on:click="btnRefreshList"> 刷新 </button>
<button class="btn btn-info" type="button" v-on:click="exportDocument">导出文档</button>
<button class="btn btn-primary" type="button" v-on:click="addNewDocument">增加文档</button>
</td>
</tr>
</tbody>
</table>
<!-- 增加文档弹出框 -->
<div class="modal fade" id="addNewDocumentModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span><span class="sr-only">关闭</span>
</button>
<h4 class="modal-title">输入文档地址</h4>
</div>
<div class="modal-body">
<input v-model="addNewDocumentInput" type="text" class="form-control" placeholder="例http://192.168.0.172/swagger-resources">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" v-on:click="addNewDocumentBtn">保存</button>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/common.js"></script>
<script src="../vue/vue.js"></script>
<script src="../mg-ui/js/toast.js"></script>
<script>
var urlBase = "../../";
var app = new Vue({
el: '#app',
data: {
swaggerResourcesList: [],
addNewDocumentInput: ''
},
methods: {
btnRefreshList: function(){
this.refreshList();
Toast.success("刷新成功!");
},
refreshList: function(){
getStorage('swagger-resources-list', function(data){
//console.log(data);
app.swaggerResourcesList = data;
});
},
addNewDocument: function(){
app.addNewDocumentInput = '';
$('#addNewDocumentModal').modal({moveable:true});
},
addNewDocumentBtn: function(){
var addNewDocumentInput = app.addNewDocumentInput;
if(isEmpty(addNewDocumentInput)) {
Toast.error("地址不可以为空");return;
}
ajaxTemp(urlBase + "swagger-mg-ui/document/addSwaggerResources", "post", "json", {resourcesUrl: addNewDocumentInput}, function(json){
if(validateResult(json)) {
//window.parent.document.location.reload();
app.swaggerResourcesList.push(addNewDocumentInput);
$('#addNewDocumentModal').modal('hide');
Toast.success("保存成功,刷新后生效!");
}
});
},
exportDocument: function(){
window.parent.window.exportDocument();
},
deleteDocUrl: function(event){
if(!confirm("确定要删除吗?")) {
return;
}
var tr = $(event.currentTarget).parents("tr");
var index = tr.data("index");
var newDocList = [];
for(var i=0;i<app.swaggerResourcesList.length;i++){
if(i != index) {
newDocList.push(app.swaggerResourcesList[i]);
}
}
setStorage('swagger-resources-list', newDocList, function(data){
app.swaggerResourcesList = newDocList;
});
}
},
mounted: function(){
this.refreshList();
},
watch: {
catalogShowType: function(newVal, oldval){
app.userSettings.catalogShowType = newVal;
storeUserSettings();
window.parent.window.regeneratePathTree();
}
}
});
</script>
<style>
#app{padding-top: 10px;}
</style>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文档地址管理</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
<table class="table table-bordered setting-table">
<thead>
<tr>
<td style="width: 50px;">序号</td>
<td>地址</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in swaggerResourcesList" :key="item.id" :data-id="item.id" :data-index="index" >
<td>{{index+1}}</td>
<td>{{item}}</td>
<td>
<button class="btn btn-danger" type="button" v-on:click="deleteDocUrl($event)">删除</button>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<button class="btn" type="button" v-on:click="btnRefreshList"> 刷新 </button>
<button class="btn btn-info" type="button" v-on:click="exportDocument">导出文档</button>
<button class="btn btn-primary" type="button" v-on:click="addNewDocument">增加文档</button>
</td>
</tr>
</tbody>
</table>
<!-- 增加文档弹出框 -->
<div class="modal fade" id="addNewDocumentModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">×</span><span class="sr-only">关闭</span>
</button>
<h4 class="modal-title">输入文档地址</h4>
</div>
<div class="modal-body">
<input v-model="addNewDocumentInput" type="text" class="form-control" placeholder="例http://192.168.0.172/swagger-resources">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" v-on:click="addNewDocumentBtn">保存</button>
</div>
</div>
</div>
</div>
</div>
</body>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/common.js"></script>
<script src="../mg-ui/js/mg-ui-cache-keys.js"></script>
<script src="../vue/vue.js"></script>
<script src="../mg-ui/js/toast.js"></script>
<script>
var urlBase = "../../";
var app = new Vue({
el: '#app',
data: {
swaggerResourcesList: [],
addNewDocumentInput: ''
},
methods: {
btnRefreshList: function(){
this.refreshList();
Toast.success("刷新成功!");
},
refreshList: function(){
getStorage(cacheKeys.swaggerResourcesList, function(data){
//console.log(data);
app.swaggerResourcesList = data;
});
},
addNewDocument: function(){
app.addNewDocumentInput = '';
$('#addNewDocumentModal').modal({moveable:true});
},
addNewDocumentBtn: function(){
var addNewDocumentInput = app.addNewDocumentInput;
if(isEmpty(addNewDocumentInput)) {
Toast.error("地址不可以为空");return;
}
ajaxTemp(urlBase + "swagger-mg-ui/document/addSwaggerResources", "post", "json", {resourcesUrl: addNewDocumentInput}, function(json){
if(validateResult(json)) {
//window.parent.document.location.reload();
app.swaggerResourcesList.push(addNewDocumentInput);
$('#addNewDocumentModal').modal('hide');
Toast.success("保存成功,刷新后生效!");
}
});
},
exportDocument: function(){
getExport().exportDocument();
},
deleteDocUrl: function(event){
if(!confirm("确定要删除吗?")) {
return;
}
var tr = $(event.currentTarget).parents("tr");
var index = tr.data("index");
var newDocList = [];
for(var i=0;i<app.swaggerResourcesList.length;i++){
if(i != index) {
newDocList.push(app.swaggerResourcesList[i]);
}
}
setStorage(cacheKeys.swaggerResourcesList, newDocList, function(){
app.swaggerResourcesList = newDocList;
});
}
},
mounted: function(){
this.refreshList();
},
watch: {
}
});
</script>
<style>
#app{padding-top: 10px;}
</style>
</html>

View File

@@ -1,37 +1,112 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>全局参数管理</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
全局参数管理
</div>
</body>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../vue/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
userId: "",
},
methods: {
}
});
</script>
<style>
</style>
</html>
<!doctype html>
<html xmlns:v-on="http://www.w3.org/1999/xhtml" xmlns:v-model="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>全局参数管理</title>
<link rel="stylesheet" type="text/css" href="../zui/css/zui.min.css">
</head>
<body>
<div id="app">
<div class="alert alert-primary">
<div class="content">Tips所有接口的在线调试页面都将展示本页面配置的参数和值可统一配置会话等数据</div>
</div>
<table class="table table-bordered setting-table">
<thead>
<tr>
<td>参数位置</td>
<td>参数名</td>
<td>参数值</td>
<td>操作</td>
</tr>
</thead>
<tbody>
<tr v-for="(item,index) in globalParamList" :key="item.id" :data-id="item.id" :data-index="index">
<td>
<select class="form-control" v-model:value="item.position">
<option value="header">header</option>
<option value="form">form</option>
</select>
</td>
<td><input type="text" class="form-control" name="paramName" v-model:value="item.key" placeholder=""></td>
<td><input type="text" class="form-control" name="paramName" v-model:value="item.value" placeholder=""></td>
<td>
<button class="btn btn-danger" type="button" v-on:click="deleteParam($event)">删除</button>
</td>
</tr>
<tr>
<td colspan="3" align="center">
<button class="btn" type="button" v-on:click="btnRefreshList"> 刷新 </button>
<button class="btn btn-success" type="button" v-on:click="addGlobalParamLine()"> 新增 </button>
<button class="btn btn-info" type="button" v-on:click="saveAllGlobalParam">全部保存</button>
</td>
</tr>
</tbody>
</table>
</div>
</body>
<script src="../mg-ui/js/jquery-3.1.0.min.js"></script>
<script src="../zui/js/zui.min.js"></script>
<script src="../mg-ui/js/common.js"></script>
<script src="../mg-ui/js/mg-ui-cache-keys.js"></script>
<script src="../vue/vue.js"></script>
<script src="../mg-ui/js/toast.js"></script>
<script>
var urlBase = "../../";
var app = new Vue({
el: '#app',
data: {
globalParamList: []
},
methods: {
btnRefreshList: function () {
this.refreshList();
Toast.success("刷新成功!");
},
deleteParam: function (event) {
if (!confirm("确定要删除吗?")) {
return;
}
var tr = $(event.currentTarget).parents("tr");
var index = tr.data("index");
var newParamList = [];
for (var i = 0; i < app.globalParamList.length; i++) {
if (i != index) {
newParamList.push(app.globalParamList[i]);
}
}
app.globalParamList = newParamList;
},
addGlobalParamLine: function () {
app.globalParamList.push({
position: 'header', key: '', value: ''
});
},
saveAllGlobalParam: function () {
setStorage(cacheKeys.globalParamList, app.globalParamList, function(){
Toast.success("保存成功!");
});
},
refreshList: function(){
getStorage(cacheKeys.globalParamList, function(data){
app.globalParamList = data || [];
});
},
},
mounted: function () {
this.refreshList();
}
});
</script>
<style>
#app {
padding-top: 10px;
}
</style>
</html>