文档完善和逻辑优化

This commit is contained in:
暮光:城中城
2018-12-15 16:53:16 +08:00
parent 72d7f64cd6
commit 6362728bed
16 changed files with 257 additions and 528 deletions

View File

@@ -1,16 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.mapper;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public interface ZyplayerStorageMapper extends BaseMapper<ZyplayerStorage> {
}

View File

@@ -1,16 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.mapper;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public interface ZyplayerStorageMapper extends BaseMapper<ZyplayerStorage> {
}

View File

@@ -1,67 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public class ZyplayerStorage implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String docKey;
private String docValue;
private Date creationTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDocKey() {
return docKey;
}
public void setDocKey(String docKey) {
this.docKey = docKey;
}
public String getDocValue() {
return docValue;
}
public void setDocValue(String docValue) {
this.docValue = docValue;
}
public Date getCreationTime() {
return creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
@Override
public String toString() {
return "ZyplayerStorage{" +
"id=" + id +
", docKey=" + docKey +
", docValue=" + docValue +
", creationTime=" + creationTime +
"}";
}
}

View File

@@ -1,67 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
/**
* <p>
*
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public class ZyplayerStorage implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
private String docKey;
private String docValue;
private Date creationTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDocKey() {
return docKey;
}
public void setDocKey(String docKey) {
this.docKey = docKey;
}
public String getDocValue() {
return docValue;
}
public void setDocValue(String docValue) {
this.docValue = docValue;
}
public Date getCreationTime() {
return creationTime;
}
public void setCreationTime(Date creationTime) {
this.creationTime = creationTime;
}
@Override
public String toString() {
return "ZyplayerStorage{" +
"id=" + id +
", docKey=" + docKey +
", docValue=" + docValue +
", creationTime=" + creationTime +
"}";
}
}

View File

@@ -1,16 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.service;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public interface ZyplayerStorageService extends IService<ZyplayerStorage> {
}

View File

@@ -1,16 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.service;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
public interface ZyplayerStorageService extends IService<ZyplayerStorage> {
}

View File

@@ -1,20 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.service.impl;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.zyplayer.doc.manage.repository.support.plus.manage.mapper.ZyplayerStorageMapper;
import com.zyplayer.doc.manage.repository.support.plus.manage.service.ZyplayerStorageService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
@Service
public class ZyplayerStorageServiceImpl extends ServiceImpl<ZyplayerStorageMapper, ZyplayerStorage> implements ZyplayerStorageService {
}

View File

@@ -1,20 +0,0 @@
package com.zyplayer.doc.manage.repository.support.plus.manage.service.impl;
import com.zyplayer.doc.manage.repository.support.plus.manage.entity.ZyplayerStorage;
import com.zyplayer.doc.manage.repository.support.plus.manage.mapper.ZyplayerStorageMapper;
import com.zyplayer.doc.manage.repository.support.plus.manage.service.ZyplayerStorageService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author 暮光:城中城
* @since 2018-11-27
*/
@Service
public class ZyplayerStorageServiceImpl extends ServiceImpl<ZyplayerStorageMapper, ZyplayerStorage> implements ZyplayerStorageService {
}

View File

@@ -6,6 +6,11 @@ import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerF
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
/**
* 自定义错误页面
* @author 暮光:城中城
* @since 2018年11月11日
*/
@Configuration @Configuration
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

View File

@@ -84,7 +84,7 @@ public class MgStorageServiceImpl implements MgStorageService {
@Override @Override
public void remove(String key) { public void remove(String key) {
UpdateWrapper<ZyplayerStorage> queryWrapper = new UpdateWrapper<>(); UpdateWrapper<ZyplayerStorage> queryWrapper = new UpdateWrapper<>();
queryWrapper.eq(true, "doc_key", key); queryWrapper.eq("doc_key", key);
zyplayerStorageService.remove(queryWrapper); zyplayerStorageService.remove(queryWrapper);
} }

View File

@@ -16,13 +16,13 @@ import org.springframework.beans.factory.annotation.Autowired;
import com.zyplayer.doc.swagger.framework.service.MgStorageService; import com.zyplayer.doc.swagger.framework.service.MgStorageService;
/** /**
* 有需要此拦截器的请自行拷贝至自身项目,不再开启@Component<br> * 有需要此拦截器的请自行拷贝至自身项目,需要使过滤器生效,文档不再开启@Component<br>
* 判断是否是模拟请求,功能需求:<br> * 判断是否是模拟请求,功能需求:<br>
* 很多时候后端定义好了接口,但还未实现,这时前端已经需要数据调试了,这时就需要用到这个过滤器了!<br> * 很多时候后端定义好了接口,但还未实现,这时前端已经需要数据调试了,这时就需要用到这个过滤器了!<br>
* 在页面上先配置好模拟返回的数据然后在url上加入参数mgUiTestFlag=1<br> * 在页面上先配置好模拟返回的数据然后在url上加入参数mgUiTestFlag=1<br>
* 例http://192.168.0.249:8082/openApi/case/info?mgUiTestFlag=1<br> * 例http://192.168.0.249:8082/openApi/case/info?mgUiTestFlag=1<br>
* 本过滤器就直接返回了之前配置的模拟数据,而不用等到后端必须把接口实现之后才能调试,或者在前端写一大段测试数据。<br> * 本过滤器就直接返回了之前配置的模拟数据,而不用等到后端必须把接口实现之后才能调试,或者在前端写一大段测试数据。<br>
* * <p>
* 例笔者的公司后端人较少一个需求需要10个接口需求分析完后首先就把接口、参数、返回值定义好然后一个个的去实现。 * 例笔者的公司后端人较少一个需求需要10个接口需求分析完后首先就把接口、参数、返回值定义好然后一个个的去实现。
* 也许需要10天才能写完但前端两天就写好了急需数据看效果这时就让他们自己去设置模拟值加上参数自己测试好。 * 也许需要10天才能写完但前端两天就写好了急需数据看效果这时就让他们自己去设置模拟值加上参数自己测试好。
* 而不是一味的催后台,把各种锅丢给后端,然后玩自己的去了,浪费各环节等待时间。 * 而不是一味的催后台,把各种锅丢给后端,然后玩自己的去了,浪费各环节等待时间。
@@ -30,7 +30,7 @@ import com.zyplayer.doc.swagger.framework.service.MgStorageService;
//@Component //@Component
public class MgUiTestFilter implements Filter { public class MgUiTestFilter implements Filter {
@Autowired(required = false) @Autowired
private MgStorageService mgStorageService; private MgStorageService mgStorageService;
@Override @Override
@@ -39,19 +39,30 @@ public class MgUiTestFilter implements Filter {
} }
@Override @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
throws IOException, ServletException { // 需要使用模拟值返回的标记
String mockTestFlag = request.getParameter("mgUiTestFlag"); String mockTestFlag = request.getParameter("mgUiTestFlag");
if (!"1".equals(mockTestFlag)) { if (!"1".equals(mockTestFlag)) {
// 未开启直接跳过
chain.doFilter(request, response); chain.doFilter(request, response);
return; return;
} }
// 如果是模拟请求则直接返回模拟值 // 如果是模拟请求则直接返回模拟值
HttpServletRequest httpServletRequest = (HttpServletRequest) request; HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestUrl = httpServletRequest.getRequestURI(); String requestUrl = httpServletRequest.getRequestURI();
// 文档页面存,这里取,就这么简单。。。
// 存取位置和文档的一致,"p-simulation-response-" + requestUrl 不能修改,因为存就是这样存的
String cacheResult = mgStorageService.get("p-simulation-response-" + requestUrl); String cacheResult = mgStorageService.get("p-simulation-response-" + requestUrl);
if (cacheResult != null) { if (cacheResult != null) {
responseWrite(cacheResult, (HttpServletResponse) response); HttpServletResponse servletResponse = (HttpServletResponse) response;
servletResponse.setStatus(200);
// response.setContentType("application/json");
// 模拟返回支持跨域访问,正式对接需要自己协调怎么处理跨域问题
servletResponse.addHeader("Access-Control-Allow-Origin", "*");
servletResponse.setContentType("text/html");
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setHeader("Cache-Control", "no-cache, must-revalidate");
servletResponse.getWriter().write(cacheResult);
} }
} }
@@ -60,15 +71,4 @@ public class MgUiTestFilter implements Filter {
} }
private static void responseWrite(String params, HttpServletResponse response) throws IOException {
response.setStatus(200);
// response.setContentType("application/json");
// 模拟返回支持跨域访问,正式对接需要自己协调怎么处理跨域问题
response.addHeader("Access-Control-Allow-Origin", "*");
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.getWriter().write(params);
}
} }

View File

@@ -297,13 +297,21 @@
</div> </div>
<div class="tab-pane tab-document-pane" id="tabSimulationResult"> <div class="tab-pane tab-document-pane" id="tabSimulationResult">
<table class="table table-bordered doc-table"> <table class="table table-bordered doc-table">
<tr>
<td class="info">功能说明</td>
<td>
访问接口时增加参数mgUiTestFlag=1即可返回下面提交的模拟返回值<br/>
需要被访问项目增加<a href="https://gitee.com/zyplayer/zyplayer-doc/blob/master/zyplayer-doc-swagger/src/main/java/com/zyplayer/doc/swagger/framework/filter/MgUiTestFilter.java" target="_blank"> MgUiTestFilter.java</a>
过滤器才能使用,里面逻辑很简单,一看就懂~
</td>
</tr>
<tr> <tr>
<td class="info">接口地址</td> <td class="info">接口地址</td>
<td><span id="simulationResultUrl" class="label label-warning"></span></td> <td><span id="simulationResultUrl" class="label label-warning"></span></td>
</tr> </tr>
<tr> <tr>
<td class="info">测试地址</td> <td class="info">测试地址</td>
<td><a id="simulationResultUrlTest" href="" target="_blank"></a> <i class="icon icon-info-sign" title='需要被访问项目导入zyplayer-doc包才能使用'></i></td> <td><a id="simulationResultUrlTest" href="" target="_blank"></a></td>
</tr> </tr>
<tr> <tr>
<td class="info">返回内容</td> <td class="info">返回内容</td>

View File

@@ -1,3 +1,6 @@
/**
* 页面中所有使用到的缓存key必须定义在这里
*/
var cacheKeys = { var cacheKeys = {
userSettings: 'userSettings', userSettings: 'userSettings',
swaggerResourcesList: 'swagger-resources-list', swaggerResourcesList: 'swagger-resources-list',

View File

@@ -1,3 +1,7 @@
/**
* 所有需要iframe页面调用的接口必须定义在这里
* 通过getExport()来吊起父页面的这些接口
*/
var exports = { var exports = {
regeneratePathTree: function(){ regeneratePathTree: function(){
// 定义在mg-ui.js用于重新生成文档树目录 // 定义在mg-ui.js用于重新生成文档树目录

View File

@@ -1,8 +1,8 @@
/** /**
* zyplayer-doc-swagger是swagger-ui的一个前端实现,使用简单、解析速度快、走心的设计 * zyplayer-doc-swagger是swagger的一个前端实现使用简单、解析速度快、走心的设计
* 支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。 * 支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。
* 使用中您有任何的意见和建议都可到源码地址处反馈哦! * 使用中您有任何的意见和建议都可到源码地址处反馈哦!
* git地址https://gitee.com/zyplayer/zyplayer-doc-swagger * git地址https://gitee.com/zyplayer/zyplayer-doc
* @author 暮光:城中城 * @author 暮光:城中城
* @since 2018年5月20日 * @since 2018年5月20日
*/ */
@@ -35,20 +35,8 @@ var defaultUserSettings = {
prevWNow : 360 prevWNow : 360
}; };
var swaggerApiDocsArr = [];
var requestParamObj = {}; var requestParamObj = {};
// 模板示例 // 文档管理的tables
var requestParamObjTemp = {
taskId: {
value: 1,// 参数值
paramType: 'string',// 参数类型string int boolean
required: true,// 是否必填
paramIn: 'body',// 参数位置body query header
paramDesc: '参数说明'
}
};
var rightContentTabs; var rightContentTabs;
/** /**
@@ -169,6 +157,7 @@ $("#searchDocInput").keyup(function(e) {
searchDoc(); searchDoc();
} }
}); });
/** /**
* 搜索按钮点击 * 搜索按钮点击
*/ */
@@ -177,7 +166,7 @@ $("#searchDocBt").click(function(){
}); });
/** /**
* 导出文档 * 导出文档-子页面调用-文档地址管理
*/ */
function exportDocument(){ function exportDocument(){
// 清空 // 清空
@@ -195,6 +184,9 @@ function exportDocument(){
$('#exportDocumentModal').modal('ajustPosition', 'fit'); $('#exportDocumentModal').modal('ajustPosition', 'fit');
} }
/**
* 确认导出
*/
$("#doExportBtn").click(function(){ $("#doExportBtn").click(function(){
var jsonStrAll = ""; var jsonStrAll = "";
var mgUiDataArr = "var mgUiDataArr = ["; var mgUiDataArr = "var mgUiDataArr = [";
@@ -268,22 +260,6 @@ $("#choiseDocBtn").click(function(){
$('#choiseDocModal').modal('hide'); $('#choiseDocModal').modal('hide');
}); });
/**
* 增加文档的保存按钮
*/
$("#addNewDocumentBtn").click(function(){
var addNewDocumentInput = $("#addNewDocumentInput").val();
if(isEmpty(addNewDocumentInput)) {
Toast.error("地址不可以为空");return;
}
projectLoadingIndex = 1;
ajaxTemp("swagger-mg-ui/document/addSwaggerResources", "post", "json", {resourcesUrl: addNewDocumentInput}, function(json){
if(validateResult(json)) {
document.location.reload();
}
});
});
/** /**
* 主页li点击事件展示主页 * 主页li点击事件展示主页
*/ */
@@ -578,7 +554,10 @@ function searchDoc() {
// } // }
} }
// 重新生成文档 /**
* 重新生成文档
*/
function regeneratePathTree(keywords){ function regeneratePathTree(keywords){
projectTreeIdIndex = 1; projectTreeIdIndex = 1;
treePathDataMap = new Map(); treePathDataMap = new Map();
@@ -909,39 +888,7 @@ function documentLoadFinish() {
globalLoadingMessager.hide(); globalLoadingMessager.hide();
}, 1000); }, 1000);
$('#apiPathTree .projects').tree(); $('#apiPathTree .projects').tree();
$('#homePageDashboard').dashboard({draggable: false, $('#homePageDashboard').dashboard({draggable: false});
// 修改排序
afterOrdered:function(newOrders){
/*//console.log(newOrders);
var tempProjects = [], nowIndex = 0, settingTableIndex = 1;
Object.keys(newOrders).forEach(function(key){
if(key == 1) {
settingTableIndex = newOrders[key];
return;
}
var subCount = (newOrders[key] > settingTableIndex) ? 2 : 1;
tempProjects[newOrders[key] - subCount] = key;
});
userSettings.projects = tempProjects;
storeUserSettings();
*/
// 应该是控件问题,拖动之后单选项被值空了,需要重新设置选中,而且还必须等一会设置才有效果。。
setTimeout("updateUserSettingsUi();", 500);
},
// 修改大小
onResize:function(){
},
// 被移除
afterPanelRemoved:function(id){
//console.log(id);
ajaxTemp("swagger-mg-ui/document/deleteSwaggerDoc", "post", "json", {docUrl: id}, function(json){
if(validateResult(json)) {
document.location.reload();
}
});
},
});
} }
/** /**

View File

@@ -4,37 +4,37 @@
* @since 2017年5月7日 * @since 2017年5月7日
*/ */
var Toast = { var Toast = {
notOpen:function(){ notOpen: function () {
var data = { var data = {
message:"该功能暂未开放,敬请期待!", message: "该功能暂未开放,敬请期待!",
icon: 'exclamation-sign',type:"warning", icon: 'exclamation-sign', type: "warning",
}; };
this.show(data); this.show(data);
}, },
success:function(msg, time){ success: function (msg, time) {
var data = { var data = {
message:msg,time:time, message: msg, time: time,
icon: 'check-circle-o',type:'success', icon: 'check-circle-o', type: 'success',
}; };
this.show(data); this.show(data);
}, },
warn:function(msg, time){ warn: function (msg, time) {
var data = { var data = {
message:msg,time:time, message: msg, time: time,
icon: 'exclamation-sign',type:'warning', icon: 'exclamation-sign', type: 'warning',
}; };
this.show(data); this.show(data);
}, },
error:function(msg, time){ error: function (msg, time) {
var data = { var data = {
message:msg,time:time, message: msg, time: time,
icon: 'exclamation-sign',type:'danger', icon: 'exclamation-sign', type: 'danger',
}; };
this.show(data); this.show(data);
}, },
show:function(data){ show: function (data) {
data.time = isEmpty(data.time)?2000:data.time; data.time = isEmpty(data.time) ? 2000 : data.time;
data.placement = isEmpty(data.placement)?'top':data.placement; data.placement = isEmpty(data.placement) ? 'top' : data.placement;
new $.zui.Messager(data.message, data).show(); new $.zui.Messager(data.message, data).show();
} }
} }