dubbo参数自动获取
This commit is contained in:
@@ -72,6 +72,10 @@ http://127.0.0.1:8082/zyplayer-doc-manage/static/manage/home.html
|
||||
|
||||
4. 支持文档查找、文档编辑、在线调试接口
|
||||
|
||||
5. 自动获取参数列表需要指定的类存在,所以请在 pom.xml -> dependencies 最后加上服务所在的包,后端才能通过Class.forName("xx");来找到参数列表,减少录入成本
|
||||
|
||||
6. 数组或List参数,调试参数录入格式例:[1,2] ,后端通过JSON工具转成指定类型,有不支持的类型时欢迎反馈
|
||||
|
||||
##### 四、zyplayer-doc-manage
|
||||
1. 整合了上面两个功能到此项目,较少熟悉成本,`git clone`下来即可运行
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<!--无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢-->
|
||||
<meta name="author" content="开发者列表:暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<title>数据库文档</title>
|
||||
<link rel="shortcut icon" href="webjars/doc-db/img/api.ico"/>
|
||||
<link rel="stylesheet" href="webjars/zui/css/zui.min.css" />
|
||||
|
||||
@@ -8,6 +8,8 @@ var pageConfig = {
|
||||
var tableRelationCharts;
|
||||
|
||||
$(document).ready(function(){
|
||||
// 无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢
|
||||
console.log("%c项目信息:\n开发者列表:暮光:城中城\n项目地址:https://gitee.com/zyplayer/zyplayer-doc","color:red");
|
||||
$('select.chosen-select').chosen({
|
||||
no_results_text: '没有找到', // 当检索时没有找到匹配项时显示的提示文本
|
||||
disable_search_threshold: 0, // 10 个以下的选择项则不显示检索框
|
||||
|
||||
@@ -128,6 +128,8 @@
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
<version>1.0.2</version>
|
||||
</dependency>
|
||||
<!-- 业务包 -->
|
||||
|
||||
</dependencies>
|
||||
|
||||
<licenses>
|
||||
|
||||
@@ -26,8 +26,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Type;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.*;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -84,11 +88,48 @@ public class DubboController {
|
||||
dubboNodeInfo.setIp(param.getIp());
|
||||
dubboNodeInfo.setPort(param.getPort());
|
||||
dubboNodeInfo.setInterfaceX(param.getService());
|
||||
String[] paramTypes = Optional.ofNullable(param.getParamTypes()).orElse(new String[]{});
|
||||
Object[] params = Optional.ofNullable(param.getParams()).orElse(new Object[]{});
|
||||
String paramTypeStr = Optional.ofNullable(param.getParamTypes()).orElse("");
|
||||
String paramsStr = Optional.ofNullable(param.getParams()).orElse("");
|
||||
List<String> typeList = JSON.parseArray(paramTypeStr, String.class);
|
||||
List<String> paramList = JSON.parseArray(paramsStr, String.class);
|
||||
List<String> queryTypeList = new LinkedList<>();
|
||||
List<Object> queryParamList = new LinkedList<>();
|
||||
for (int i = 0; i < paramList.size(); i++) {
|
||||
String typeStr = typeList.get(i);
|
||||
String paramStr = paramList.get(i);
|
||||
try {
|
||||
if (typeStr.endsWith("[]")) {
|
||||
String type = typeStr.substring(0, typeStr.length() - 2);
|
||||
Class<?> aClass = Class.forName(type);
|
||||
List<?> objects = JSON.parseArray(paramStr, aClass);
|
||||
queryTypeList.add(typeStr);
|
||||
queryParamList.add(objects);
|
||||
} else if (typeStr.matches("java\\.util\\.List<.+>")) {
|
||||
Pattern pattern = Pattern.compile("java\\.util\\.List<(.+)>");
|
||||
Matcher matcher = pattern.matcher(typeStr);
|
||||
if (matcher.find()) {
|
||||
String group = matcher.group(1);
|
||||
Class<?> aClass = Class.forName(group);
|
||||
List<?> objects = JSON.parseArray(paramStr, aClass);
|
||||
queryParamList.add(objects);
|
||||
queryTypeList.add("java.util.List");
|
||||
}
|
||||
} else {
|
||||
Class<?> aClass = Class.forName(typeStr);
|
||||
Object object = JSON.parseObject(paramStr, aClass);
|
||||
queryParamList.add(object);
|
||||
queryTypeList.add(typeStr);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// 未找到对应类型,请手动引入项目包
|
||||
logger.error("未找到对应类型,请手动引入项目包:{}", typeStr);
|
||||
queryParamList.add(paramStr);
|
||||
queryTypeList.add(typeStr);
|
||||
}
|
||||
}
|
||||
GenericService bean = ReferenceConfigHolder.getBean(dubboNodeInfo);
|
||||
try {
|
||||
Object result = bean.$invoke(param.getMethod(), paramTypes, params);
|
||||
Object result = bean.$invoke(param.getMethod(), queryTypeList.toArray(new String[]{}), queryParamList.toArray());
|
||||
return DocResponseJson.ok(result);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -120,6 +161,57 @@ public class DubboController {
|
||||
return DocResponseJson.ok(dubboInfoVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文档详情,依据类名生成
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2019年2月10日
|
||||
**/
|
||||
@PostMapping(value = "/findDocInfo")
|
||||
public DocResponseJson findDocInfo(DubboRequestParam param) {
|
||||
List<DubboDocInfo.DubboDocParam> paramList = new LinkedList<>();
|
||||
try {
|
||||
Class clazz = Class.forName(param.getService());
|
||||
Method[] methods = clazz.getMethods();
|
||||
for (Method method : methods) {
|
||||
String methodName = method.getName();
|
||||
if (methodName.equals(param.getMethod())) {
|
||||
Type[] parameterTypes = method.getGenericParameterTypes();
|
||||
for (Type clas : parameterTypes) {
|
||||
DubboDocInfo.DubboDocParam docParam = new DubboDocInfo.DubboDocParam();
|
||||
docParam.setParamType(clas.getTypeName());
|
||||
paramList.add(docParam);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
return DocResponseJson.warn("未找到指定类,请引入相关包,类名:" + param.getService());
|
||||
}
|
||||
if (paramList.isEmpty()) {
|
||||
return DocResponseJson.ok();
|
||||
}
|
||||
Map<String, DubboDocInfo> docInfoMap = new HashMap<>();
|
||||
String dubboServiceDoc = mgDubboStorageService.get(StorageKeys.DUBBO_SERVICE_DOC);
|
||||
if (StringUtils.isNotBlank(dubboServiceDoc)) {
|
||||
List<DubboDocInfo> docInfoList = JSON.parseArray(dubboServiceDoc, DubboDocInfo.class);
|
||||
docInfoMap = docInfoList.stream().collect(Collectors.toMap(DubboDocInfo::getFunction, val -> val));
|
||||
}
|
||||
String function = param.getService() + "." + param.getMethod();
|
||||
DubboDocInfo dubboDocInfo = docInfoMap.get(function);
|
||||
if (dubboDocInfo == null) {
|
||||
dubboDocInfo = new DubboDocInfo();
|
||||
dubboDocInfo.setParams(paramList);
|
||||
dubboDocInfo.setFunction(function);
|
||||
dubboDocInfo.setVersion(1);
|
||||
dubboDocInfo.setService(param.getService());
|
||||
dubboDocInfo.setMethod(param.getMethod());
|
||||
docInfoMap.put(function, dubboDocInfo);
|
||||
List<DubboDocInfo> docInfoList = new ArrayList<>(docInfoMap.values());
|
||||
mgDubboStorageService.put(StorageKeys.DUBBO_SERVICE_DOC, JSON.toJSONString(docInfoList));
|
||||
}
|
||||
return DocResponseJson.ok(dubboDocInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存文档
|
||||
*
|
||||
|
||||
@@ -11,14 +11,14 @@ public class DubboRequestParam {
|
||||
private String method;
|
||||
private String ip;
|
||||
private Integer port;
|
||||
private String[] paramTypes;
|
||||
private Object[] params;
|
||||
private String paramTypes;
|
||||
private String params;
|
||||
|
||||
public String[] getParamTypes() {
|
||||
public String getParamTypes() {
|
||||
return paramTypes;
|
||||
}
|
||||
|
||||
public void setParamTypes(String[] paramTypes) {
|
||||
public void setParamTypes(String paramTypes) {
|
||||
this.paramTypes = paramTypes;
|
||||
}
|
||||
|
||||
@@ -54,11 +54,11 @@ public class DubboRequestParam {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public Object[] getParams() {
|
||||
public String getParams() {
|
||||
return params;
|
||||
}
|
||||
|
||||
public void setParams(Object[] params) {
|
||||
public void setParams(String params) {
|
||||
this.params = params;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<!--无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢-->
|
||||
<meta name="author" content="暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<meta name="author" content="开发者列表:暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<title>dubbo文档管理系统</title>
|
||||
<link rel="shortcut icon" href="webjars/doc-dubbo/img/dubbo.ico"/>
|
||||
<link rel="stylesheet" href="webjars/doc-dubbo/css/element-ui.css">
|
||||
@@ -51,7 +51,7 @@
|
||||
<pre>{{dubboInfo.docInfo.explain}}<el-button @click.prevent="dubboInfoExplainShow = false;" style="float: right;">编辑</el-button></pre>
|
||||
</div>
|
||||
<div v-else>
|
||||
<el-input type="textarea" :rows="4" placeholder="请输入说明内容" v-model="docInfoExplainInput"></el-input>
|
||||
<el-input type="textarea" :rows="4" placeholder="维护人员、使用说明、便于搜索的信息" v-model="docInfoExplainInput"></el-input>
|
||||
<el-button @click.prevent="dubboInfoExplainShow = true;" style="float: right;margin: 5px;">取消</el-button>
|
||||
<el-button type="primary" @click.prevent="saveDocInfoExplain" style="float: right;margin: 5px;">保存</el-button>
|
||||
</div>
|
||||
@@ -64,13 +64,13 @@
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
<el-form-item label="参数:">
|
||||
<div slot="label">
|
||||
<el-tooltip placement="top">
|
||||
<div slot="content">1. 顺序必须和参数的顺序一致<br/>2. 参数名意义不大,可不填<br/>3. 类型必填,可手动输入,必须是全类名</div>
|
||||
<i class="el-icon-info" style="color: #aaa;"></i>
|
||||
</el-tooltip>
|
||||
参数:
|
||||
</div>
|
||||
<!--<div slot="label">-->
|
||||
<!--<el-tooltip placement="top">-->
|
||||
<!--<div slot="content">1. 顺序必须和参数的顺序一致<br/>2. 参数名意义不大,可不填</div>-->
|
||||
<!--<i class="el-icon-info" style="color: #aaa;"></i>-->
|
||||
<!--</el-tooltip>-->
|
||||
<!--参数:-->
|
||||
<!--</div>-->
|
||||
<el-table :data="docParamList" border style="width: 100%; margin-bottom: 5px;">
|
||||
<el-table-column label="顺序" width="100">
|
||||
<template slot-scope="scope">{{scope.$index + 1}}</template>
|
||||
@@ -81,11 +81,12 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.paramType" filterable allow-create clearable placeholder="请选择" style="width: 100%;">
|
||||
<el-option v-for="item in paramTypeOptions" :key="item.value" :label="item.value" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template slot-scope="scope">{{scope.row.paramType}}</template>
|
||||
<!--<template slot-scope="scope">-->
|
||||
<!--<el-select v-model="scope.row.paramType" filterable allow-create clearable placeholder="请选择" style="width: 100%;">-->
|
||||
<!--<el-option v-for="item in paramTypeOptions" :key="item.value" :label="item.value" :value="item.value"></el-option>-->
|
||||
<!--</el-select>-->
|
||||
<!--</template>-->
|
||||
</el-table-column>
|
||||
<el-table-column label="说明">
|
||||
<template slot-scope="scope">
|
||||
@@ -94,14 +95,14 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-button @click.prevent="saveDocInfoParam" type="primary" style="float: right;margin: 5px;">保存</el-button>
|
||||
<el-button @click.prevent="addDocParam" style="float: right;margin: 5px;">添加</el-button>
|
||||
<!--<el-button @click.prevent="addDocParam" style="float: right;margin: 5px;">添加</el-button>-->
|
||||
</el-form-item>
|
||||
<el-form-item label="结果:">
|
||||
<div v-if="dubboInfoResultShow">
|
||||
<pre>{{dubboInfo.docInfo.result}}<el-button @click.prevent="dubboInfoResultShow = false;" style="float: right;">编辑</el-button></pre>
|
||||
</div>
|
||||
<div v-else>
|
||||
<el-input type="textarea" :rows="4" placeholder="请输入说明内容" v-model="docInfoResultInput"></el-input>
|
||||
<el-input type="textarea" :rows="4" placeholder="结果集说明等" v-model="docInfoResultInput"></el-input>
|
||||
<el-button @click.prevent="dubboInfoResultShow = true;" style="float: right;margin: 5px;">取消</el-button>
|
||||
<el-button type="primary" @click.prevent="saveDocInfoResult" style="float: right;margin: 5px;">保存</el-button>
|
||||
</div>
|
||||
@@ -128,7 +129,7 @@
|
||||
<el-table-column label="参数名" width="200">
|
||||
<template slot-scope="scope">{{scope.row.paramName}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" width="200">
|
||||
<el-table-column label="类型" width="300">
|
||||
<template slot-scope="scope">{{scope.row.paramType}}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="参数值" width="300">
|
||||
@@ -221,6 +222,8 @@
|
||||
|
||||
},
|
||||
mounted: function () {
|
||||
// 无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢
|
||||
console.log("%c项目信息:\n开发者列表:暮光:城中城\n项目地址:https://gitee.com/zyplayer/zyplayer-doc","color:red");
|
||||
this.doGetServiceList();
|
||||
},
|
||||
methods: {
|
||||
@@ -233,33 +236,52 @@
|
||||
handleNodeClick(data) {
|
||||
if (data.children == null) {
|
||||
var path = data.interface;
|
||||
var dubboInfo = app.treePathDataMap.get(path);
|
||||
dubboInfo.method = data.method;
|
||||
dubboInfo.function = path;
|
||||
dubboInfo.docInfo = app.dubboDocMap[path] || {};
|
||||
// 清空再赋值才会重新渲染
|
||||
app.dubboInfo = {};
|
||||
app.dubboInfo = dubboInfo;
|
||||
app.docInfoExplainInput = dubboInfo.docInfo.explain;
|
||||
app.docParamList = [];
|
||||
app.docParamList = dubboInfo.docInfo.params || [];
|
||||
this.createDocParamRequestList();
|
||||
// 请求相关
|
||||
app.requestResult = "";
|
||||
app.requestHostValue = "";
|
||||
app.requestHostOptions = [];
|
||||
for (var i = 0; i < dubboInfo.nodeList.length; i++) {
|
||||
var item = dubboInfo.nodeList[i];
|
||||
app.requestHostOptions.push({
|
||||
value: item.ip + ":" + item.port
|
||||
var docInfo = app.dubboDocMap[path];
|
||||
if (!!docInfo) {
|
||||
this.createDocInfo(path, data.method);
|
||||
} else {
|
||||
var service = path.substring(0, path.lastIndexOf("."));
|
||||
var method = path.substring(path.lastIndexOf(".") + 1, path.length);
|
||||
var param = {service: service, method: method};
|
||||
ajaxTemp("zyplayer-doc-dubbo/doc-dubbo/findDocInfo", "post", "json", param, function (json) {
|
||||
if (validateResult(json)) {
|
||||
if (!!json.data) {
|
||||
app.dubboDocMap[json.data.function] = json.data;
|
||||
}
|
||||
app.createDocInfo(path, method);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (app.requestHostOptions.length > 0) {
|
||||
app.requestHostValue = app.requestHostOptions[0].value;
|
||||
}
|
||||
//console.log(app.dubboInfo);
|
||||
}
|
||||
},
|
||||
createDocInfo(path, method) {
|
||||
var docInfo = app.dubboDocMap[path];
|
||||
var dubboInfo = app.treePathDataMap.get(path);
|
||||
dubboInfo.method = method;
|
||||
dubboInfo.function = path;
|
||||
dubboInfo.docInfo = docInfo || {};
|
||||
// 清空再赋值才会重新渲染
|
||||
app.dubboInfo = {};
|
||||
app.dubboInfo = dubboInfo;
|
||||
app.docInfoExplainInput = dubboInfo.docInfo.explain;
|
||||
app.docParamList = [];
|
||||
app.docParamList = dubboInfo.docInfo.params || [];
|
||||
this.createDocParamRequestList();
|
||||
// 请求相关
|
||||
app.requestResult = "";
|
||||
app.requestHostValue = "";
|
||||
app.requestHostOptions = [];
|
||||
for (var i = 0; i < dubboInfo.nodeList.length; i++) {
|
||||
var item = dubboInfo.nodeList[i];
|
||||
app.requestHostOptions.push({
|
||||
value: item.ip + ":" + item.port
|
||||
});
|
||||
}
|
||||
if (app.requestHostOptions.length > 0) {
|
||||
app.requestHostValue = app.requestHostOptions[0].value;
|
||||
}
|
||||
},
|
||||
reloadService(){
|
||||
ajaxTemp("zyplayer-doc-dubbo/doc-dubbo/reloadService", "post", "json", {}, function (json) {
|
||||
if (validateResult(json)) {
|
||||
@@ -327,6 +349,7 @@
|
||||
app.dubboInfoResultShow = true;
|
||||
app.docParamList = json.data.params || [];
|
||||
app.createDocParamRequestList();
|
||||
Toast.success("保存成功!");
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -368,8 +391,8 @@
|
||||
method: method,
|
||||
ip: ip,
|
||||
port: port,
|
||||
paramTypes: paramTypes,
|
||||
params: params,
|
||||
paramTypes: JSON.stringify(paramTypes),
|
||||
params: JSON.stringify(params),
|
||||
};
|
||||
app.requestResult = "";
|
||||
app.onlineDebugLoading = true;
|
||||
|
||||
@@ -104,7 +104,7 @@ DROP TABLE IF EXISTS `zyplayer_storage`;
|
||||
CREATE TABLE `zyplayer_storage` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增ID',
|
||||
`doc_key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数名字',
|
||||
`doc_value` varchar(2048) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数值',
|
||||
`doc_value` mediumtext COMMENT '参数值',
|
||||
`creation_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<!--无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢-->
|
||||
<meta name="author" content="开发者列表:暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<title>文档管理系统</title>
|
||||
<link rel="shortcut icon" href="../lib/mg/img/api.ico"/>
|
||||
<link rel="stylesheet" href="../lib/zui/css/zui.min.css" />
|
||||
@@ -83,6 +85,8 @@
|
||||
* 网页加载完毕后的处理
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
// 无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢
|
||||
console.log("%c项目信息:\n开发者列表:暮光:城中城\n项目地址:https://gitee.com/zyplayer/zyplayer-doc","color:red");
|
||||
// 定义配置的标签页
|
||||
var tabsArr = [
|
||||
{id: 'about', url: './about.html', type: 'iframe', icon: 'icon-info-sign', forbidClose: false},
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<!--无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢-->
|
||||
<meta name="author" content="开发者列表:暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<title>接口文档管理系统</title>
|
||||
<link rel="shortcut icon" href="webjars/mg-ui/img/api.ico"/>
|
||||
<link rel="stylesheet" href="webjars/zui/css/zui.min.css" />
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
|
||||
<!--无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢-->
|
||||
<meta name="author" content="开发者列表:暮光:城中城,项目地址:https://gitee.com/zyplayer/zyplayer-doc" />
|
||||
<title>接口文档管理系统</title>
|
||||
<link rel="shortcut icon" href="webjars/open-doc/img/api.ico"/>
|
||||
<link rel="stylesheet" href="webjars/zui/css/zui.min.css" />
|
||||
|
||||
@@ -44,6 +44,8 @@ var rightContentTabs;
|
||||
* 网页加载完毕后的处理
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
// 无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢
|
||||
console.log("%c项目信息:\n开发者列表:暮光:城中城\n项目地址:https://gitee.com/zyplayer/zyplayer-doc","color:red");
|
||||
globalLoadingMessager = new $.zui.Messager({type: 'primary', close: false, time: 0}).show();
|
||||
showGlobalLoadingMessage('检查服务中,请稍候...', true);
|
||||
ajaxTemp("swagger-mg-ui/storage/checkConfig", "post", "json", {
|
||||
|
||||
@@ -44,6 +44,8 @@ var rightContentTabs;
|
||||
* 网页加载完毕后的处理
|
||||
*/
|
||||
$(document).ready(function(){
|
||||
// 无论发布在哪、如何修改源码,请勿删除本行原作者信息,感谢
|
||||
console.log("%c项目信息:\n开发者列表:暮光:城中城\n项目地址:https://gitee.com/zyplayer/zyplayer-doc","color:red");
|
||||
globalLoadingMessager = new $.zui.Messager({type: 'primary', close: false, time: 0}).show();
|
||||
showGlobalLoadingMessage('检查服务中,请稍候...', true);
|
||||
// open-doc:请求地址不同
|
||||
|
||||
Reference in New Issue
Block a user