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

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

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>

View File

@@ -1,406 +1,407 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>接口文档管理系统 - zyplayer</title>
<link rel="shortcut icon" href="webjars/mg-ui/img/api.ico"/>
<link rel="stylesheet" href="webjars/zui/css/zui.min.css" />
<link rel="stylesheet" href="webjars/zui/lib/dashboard/zui.dashboard.min.css" />
<link rel="stylesheet" href="webjars/zui/lib/tabs/zui.tabs.min.css" />
<link rel="stylesheet" href="webjars/mg-ui/css/mg-ui.css" />
</head>
<body>
<div class="left-body" id="leftContent">
<div class="left-header">
<span class="logo" id="logoText">zyplayer-doc-swagger</span>
<i class="icon icon-bars" id="changeContentWidth"></i>
</div>
<div class="scrollbar-hover left-container">
<!-- 样式类可选tree-menu tree-folders tree-chevrons tree-angles -->
<ul class="tree tree-lines tree-menu projects" data-ride="tree">
<li>
<div class="input-group">
<input type="text" class="form-control" id="searchDocInput">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="searchDocBt">搜索</button>
</span>
</div>
</li>
<li id="homePageLi"><a href="javascript:void(0)" path=""><i class="icon-home"></i> 控制台</a></li>
<li id="tabZpagesNavigationLi">
<a href="#"><i class="icon icon-cogs"></i> 文档管理</a>
<ul>
<li id="onlineDebugLi1" class="local-storage"><a href="javascript:void(0)" path=""><i class="icon-bug"></i> 在线调试管理</a></li>
<li><a href="#" class="page-nav" data-id="docShowConfig" data-href="webjars/zpages/docShowConfig.html" data-icon="icon-cog" data-reload="0"><i class="icon-cog"></i> 文档展示配置</a></li>
<li><a href="#" class="page-nav" data-id="docUrlConfig" data-href="webjars/zpages/docUrlConfig.html" data-icon="icon-list-ul" data-reload="1"><i class="icon-list-ul"></i> 文档地址管理</a></li>
<li><a href="#" class="page-nav" data-id="globalParamConfig" data-href="webjars/zpages/globalParamConfig.html" data-icon="icon-globe" data-reload="1"><i class="icon-globe"></i> 全局参数管理</a></li>
<li><a href="#" class="page-nav" data-id="debugDataConfig" data-href="webjars/zpages/debugDataConfig.html" data-icon="icon-bug" data-reload="1"><i class="icon-bug"></i> 调试数据管理</a></li>
</ul>
</li>
</ul>
<div id="apiPathTree">
<ul class="tree tree-lines projects"></ul>
</div>
</div>
</div>
<div id="resizebleLeftRight" class="ui-resizable-handle mgresizebleW"></div>
<div class="right-container" id="rightContent">
<div class="right-container" id="rightContentMask"></div>
<div class="tab-page tab-home-page">
<div id="homePageDashboard" class="dashboard" data-height="320">
<section class="row">
<div class="col-md-6 col-sm-6">
<div class="panel" data-id="1">
<div class="panel-heading">
<div class="title">工具介绍</div>
</div>
<div class="panel-body">
<div class="content about">
zyplayer-doc-swagger是swagger文档的管理工具使用简单、解析速度快、走心的设计
支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。
本项目是完全从头写的所以有任何属性未解析到、UI上有何建议都能及时处理得到。
使用中您有任何的意见和建议都可到源码地址处反馈哦!<br/>
源码地址:<a target="_blank" href="https://gitee.com/zyplayer/zyplayer-doc">zyplayer-doc-swagger</a>(还有其他很多功能哦),
前端框架:<a target="_blank" href="http://zui.sexy">zui</a>(很不错),
我的网站:<a target="_blank" href="http://kongjianzhou.com">空间轴</a><a target="_blank" href="http://zyplayer.com">自由发挥</a>(都已很久未维护)
</div>
</div>
</div>
</div>
</section>
</div>
</div>
<div class="tab-page tab-zpages hide">
<div class="tabs" id="rightZpages"></div>
</div>
<!-- 在线调试配置 -->
<div class="tab-page tab-online-debug-page hide">
<div class="title-info">
<div class="text">
每次点击在线调试的发送请求后都会默认保存一次请求的form、header、body数据到网页的本地存储中以备下次使用在此页面可以管理这些数据。
一般浏览都有5M左右存储空间如果存储过多有可能会导致部分功能异常请随时清理一下不再使用的。
</div>
<button class="btn btn-primary refresh" type="button"><i class="icon icon-refresh"></i> 刷新</button>
<button class="btn btn-primary expand-all" type="button"><i class="icon icon-expand-full"></i> 全部展开</button>
<button class="btn btn-primary collapse-all" type="button"><i class="icon icon-collapse-full"></i> 全部收起</button>
<button class="btn btn-danger del-all-param" type="button"><i class="icon icon-remove-sign"></i> 全部删除</button>
</div>
<table class="table table-bordered" id="onlineDebugParamTable">
<thead>
<tr><th>接口地址</th><th>参数配置</th><th>操作</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-page tab-document hide">
<ul class="nav nav-tabs">
<li class="active"><a data-tab href="#tabDocInfo">接口说明</a></li>
<li><a data-tab href="#tabOnlineDebug">在线调试</a></li>
<li><a data-tab href="#tabSimulationResult">模拟返回</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-document-pane active" id="tabDocInfo">
<table class="table table-bordered doc-table">
<tr>
<td class="info">接口地址</td>
<td><span id="docUrl" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">说明</td>
<td id="docInfo"></td>
</tr>
<tr>
<td class="info">请求方式</td>
<td><span id="docRequestMethod" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">consumes</td>
<td><span id="docConsumes" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">produces</td>
<td><span id="docProduces" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">test</td>
<td><div id="htmlStrTemp"></div></td>
</tr>
<tr>
<td class="info">请求参数</td>
<td>
<ul class="nav nav-secondary gray">
<li class="active"><a data-tab href="#docRequestParam">说明</a></li>
<li><a data-tab href="#docRequestExample">例子</a></li>
<!-- <i class="icon icon-info-sign" title='例:@ApiModelProperty(value="用户ID", example = "9527")将example填入对象值里面'></i> -->
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="docRequestParam">
<table class="table table-bordered">
<thead>
<tr><th>参数名</th><th>说明</th><th>类型</th><th>参数位置</th><th>是否必填</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-param-type-pane" id="docRequestExample">
<table class="table table-bordered">
<thead>
<tr><th>参数名</th><th>说明</th><th>类型</th><th>参数位置</th><th>是否必填</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</td>
</tr>
<tr>
<td class="info">响应Model</td>
<td>
<ul class="nav nav-secondary gray">
<li class="active"><a data-tab href="#docResponseModel">说明</a></li>
<li><a data-tab href="#docResponseExample">例子</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="docResponseModel">
<table class="table table-bordered">
<thead>
<tr><th>状态码</th><th>说明</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-param-type-pane" id="docResponseExample">
<table class="table table-bordered">
<thead>
<tr><th>状态码</th><th>说明</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</td>
</tr>
</table>
</div>
<div class="tab-pane tab-document-pane" id="tabOnlineDebug">
<div class="post-url-box">
<div class="input-group">
<!-- <div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="options">参数模板</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-left" role="menu">
<li><a href="javascript:void(0)">默认参数</a></li>
<li><a href="javascript:void(0);" class="save-request-template">+保存模板</a></li>
</ul>
</div> -->
<div class="input-group-btn" id="debugRequstType">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="options">GET</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-left" role="menu">
<li><a href="javascript:void(0);">GET</a></li>
<li><a href="javascript:void(0);">POST</a></li>
<li><a href="javascript:void(0);">PUT</a></li>
<li><a href="javascript:void(0);">HEAD</a></li>
<li><a href="javascript:void(0);">PATCH</a></li>
<li><a href="javascript:void(0);">DELETE</a></li>
<li><a href="javascript:void(0);">OPTIONS</a></li>
<li><a href="javascript:void(0);">TRACE</a></li>
</ul>
</div>
<input type="text" class="form-control" id="postUrlInput" placeholder="请求的完整地址">
<span class="input-group-btn">
<button class="btn btn-default send-request" type="button">发送请求 <i class="icon icon-spin icon-spinner-snake hide"></i></button>
</span>
</div>
</div>
<div class="param-response-box">
<div class="param-box">
<div class="panel panel-default">
<div class="panel-heading" id="headingOne">
<h4 class="panel-title">
<a data-toggle="collapse" href="#tabParamHeader">请求头</a>
<label><input type="checkbox" id="bulkEditHeaderCheck" value="1"> 批量编辑</label>
</h4>
</div>
<div id="tabParamHeader" class="panel-collapse collapse in">
<form id="requestHeaderForm">
<table class="table table-bordered param-table">
<tbody>
<tr class="base">
<td><input type="text" class="form-control" name="paramName" placeholder=""></td>
<td><input type="text" class="form-control" name="paramValue" placeholder=""></td>
<td><i class="icon-times"></i></td>
</tr>
</tbody>
</table>
<textarea class="hide form-control" id="bulkEditHeader" rows="6" placeholder="批量编辑请求头,使用英文冒号分隔,例:&#13;&#10;key:value&#13;&#10;key:value"></textarea>
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#tabParamBody">请求参数</a>
</h4>
</div>
<div id="tabParamBody" class="panel-collapse collapse in">
<form id="requestParamForm">
<ul class="nav nav-secondary">
<li class="active"><a data-tab href="#tabParamTypeForm">表单</a></li>
<li><a data-tab href="#tabParamTypeBody">数据流</a></li>
<li class="form-to-url"><label><input type="checkbox" name="formToUrl" value="1"> 参数拼在URL后面发送</label></li>
<li class="form-to-url"><label><input type="checkbox" id="bulkEditFormCheck" value="1"> 批量编辑</label></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="tabParamTypeForm">
<table class="table table-bordered param-table">
<tbody>
<tr class="base">
<td><input type="text" class="form-control" name="paramName" placeholder=""></td>
<td><input type="text" class="form-control" name="paramValue" placeholder=""></td>
<td><i class="icon-times"></i></td>
</tr>
</tbody>
</table>
<textarea class="hide form-control" id="bulkEditForm" rows="6" placeholder="批量编辑表单参数,使用英文冒号分隔,例:&#13;&#10;key:value&#13;&#10;key:value"></textarea>
</div>
<div class="tab-pane tab-param-type-pane" id="tabParamTypeBody">
<textarea class="form-control" name="paramBody" rows="6" placeholder=""></textarea>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="response-box">
<ul class="nav nav-secondary">
<li class="info"><span>结果集</span></li>
<li class="active"><a data-tab href="#tabResponseBody">Body</a></li>
<li class="local-storage"><a data-tab href="#tabResponseCookie">Cookie</a></li>
<li><a data-tab href="#tabResponseHeader">Header</a></li>
<li class="right"><span>状态:<i id="httpRequestStatus">200</i>,耗时:<i id="httpRequestTime">0ms</i></span></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-response-pane active" id="tabResponseBody">
<!-- <textarea class="form-control" id="responseBodyTextArea" rows="20" placeholder=""></textarea> -->
<div id="responseBodyJsonDiv"></div>
</div>
<div class="tab-pane tab-response-pane" id="tabResponseCookie">
<table class="table table-bordered param-table">
<thead>
<tr>
<th>名字</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-response-pane" id="tabResponseHeader">
<table class="table table-bordered param-table">
<thead>
<tr>
<th>名字</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane tab-document-pane" id="tabSimulationResult">
<table class="table table-bordered doc-table">
<tr>
<td class="info">接口地址</td>
<td><span id="simulationResultUrl" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">测试地址</td>
<td><a id="simulationResultUrlTest" href="" target="_blank"></a> <i class="icon icon-info-sign" title='需要被访问项目导入zyplayer-doc包才能使用'></i></td>
</tr>
<tr>
<td class="info">返回内容</td>
<td><textarea id="simulationResultText" class="form-control" rows="10"></textarea></td>
</tr>
<tr>
<td class="info">操作</td>
<td>
<button type="button" class="btn btn-primary" id="simulationResultSubmit">提交模拟返回值</button>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<!-- 导出文档 -->
<div class="modal fade" id="exportDocumentModal">
<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">
<div class="alert alert-danger hidden">
1、请到 <a target="_blank" href="https://gitee.com/zyplayer/zyplayer-doc">源码处下载</a>《对外文档模板.zip》解压<br/>
2、复制以下文本内容覆盖至 /js/mg-ui-data.js 文件内<br/>
3、然后双击打开目录下的document.html 即可看到导出的文档
</div>
<div class="modal-table-box">
<ul id="exportDocumentUl" class="choise"></ul>
<textarea id="exportDocumentText" class="form-control hidden"></textarea>
</div>
<div align="center" class="bottom-box">
<button class="btn btn-primary" type="button" id="doExportBtn">确认导出</button>
</div>
</div>
</div>
</div>
</div>
<!-- 选择展示的项目 -->
<div class="modal fade" id="choiseDocModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">选择需要展示的文档</h4>
</div>
<div class="modal-body">
<div class="alert alert-danger">不选择则展示全部,展示接口过多会影响效率,建议只展示想看的文档</div>
<div class="modal-table-box">
<ul id="choiseDocListUl" class="choise"></ul>
</div>
<div align="center" class="bottom-box">
<button type="button" class="btn btn-primary" id="choiseDocBtn">  确定  </button>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="webjars/mg-ui/js/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="webjars/zui/js/zui.min.js"></script>
<script type="text/javascript" src="webjars/zui/lib/tabs/zui.tabs.min.js"></script>
<script type="text/javascript" src="webjars/zui/lib/dashboard/zui.dashboard.min.js"></script>
<!--
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui.min.js"></script>
-->
<script type="text/javascript" src="webjars/mg-ui/js/formatjson.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/toast.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/common.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mgResizable.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-tree.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-tag.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-debug.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui.js"></script>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang="en">
<head>
<meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>接口文档管理系统 - zyplayer</title>
<link rel="shortcut icon" href="webjars/mg-ui/img/api.ico"/>
<link rel="stylesheet" href="webjars/zui/css/zui.min.css" />
<link rel="stylesheet" href="webjars/zui/lib/dashboard/zui.dashboard.min.css" />
<link rel="stylesheet" href="webjars/zui/lib/tabs/zui.tabs.min.css" />
<link rel="stylesheet" href="webjars/mg-ui/css/mg-ui.css" />
</head>
<body>
<div class="left-body" id="leftContent">
<div class="left-header">
<span class="logo" id="logoText">zyplayer-doc-swagger</span>
<i class="icon icon-bars" id="changeContentWidth"></i>
</div>
<div class="scrollbar-hover left-container">
<!-- 样式类可选tree-menu tree-folders tree-chevrons tree-angles -->
<ul class="tree tree-lines tree-menu projects" data-ride="tree">
<li>
<div class="input-group">
<input type="text" class="form-control" id="searchDocInput">
<span class="input-group-btn">
<button class="btn btn-default" type="button" id="searchDocBt">搜索</button>
</span>
</div>
</li>
<li id="homePageLi"><a href="javascript:void(0)" path=""><i class="icon-home"></i> 控制台</a></li>
<li id="tabZpagesNavigationLi">
<a href="#"><i class="icon icon-cogs"></i> 文档管理</a>
<ul>
<li id="onlineDebugLi1" class="local-storage"><a href="javascript:void(0)" path=""><i class="icon-bug"></i> 在线调试管理</a></li>
<li><a href="#" class="page-nav" data-id="docShowConfig" data-href="webjars/zpages/docShowConfig.html" data-icon="icon-cog" data-reload="0"><i class="icon-cog"></i> 文档展示配置</a></li>
<li><a href="#" class="page-nav" data-id="docUrlConfig" data-href="webjars/zpages/docUrlConfig.html" data-icon="icon-list-ul" data-reload="1"><i class="icon-list-ul"></i> 文档地址管理</a></li>
<li><a href="#" class="page-nav" data-id="globalParamConfig" data-href="webjars/zpages/globalParamConfig.html" data-icon="icon-globe" data-reload="1"><i class="icon-globe"></i> 全局参数管理</a></li>
<li><a href="#" class="page-nav" data-id="debugDataConfig" data-href="webjars/zpages/debugDataConfig.html" data-icon="icon-bug" data-reload="1"><i class="icon-bug"></i> 调试数据管理</a></li>
</ul>
</li>
</ul>
<div id="apiPathTree">
<ul class="tree tree-lines projects"></ul>
</div>
</div>
</div>
<div id="resizebleLeftRight" class="ui-resizable-handle mgresizebleW"></div>
<div class="right-container" id="rightContent">
<div class="right-container" id="rightContentMask"></div>
<div class="tab-page tab-home-page">
<div id="homePageDashboard" class="dashboard" data-height="320">
<section class="row">
<div class="col-md-6 col-sm-6">
<div class="panel" data-id="1">
<div class="panel-heading">
<div class="title">工具介绍</div>
</div>
<div class="panel-body">
<div class="content about">
zyplayer-doc-swagger是swagger文档的管理工具使用简单、解析速度快、走心的设计
支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。
本项目是完全从头写的所以有任何属性未解析到、UI上有何建议都能及时处理得到。
使用中您有任何的意见和建议都可到源码地址处反馈哦!<br/>
源码地址:<a target="_blank" href="https://gitee.com/zyplayer/zyplayer-doc">zyplayer-doc-swagger</a>(还有其他很多功能哦),
前端框架:<a target="_blank" href="http://zui.sexy">zui</a>(很不错),
我的网站:<a target="_blank" href="http://kongjianzhou.com">空间轴</a><a target="_blank" href="http://zyplayer.com">自由发挥</a>(都已很久未维护)
</div>
</div>
</div>
</div>
</section>
</div>
</div>
<div class="tab-page tab-zpages hide">
<div class="tabs" id="rightZpages"></div>
</div>
<!-- 在线调试配置 -->
<div class="tab-page tab-online-debug-page hide">
<div class="title-info">
<div class="text">
每次点击在线调试的发送请求后都会默认保存一次请求的form、header、body数据到网页的本地存储中以备下次使用在此页面可以管理这些数据。
一般浏览都有5M左右存储空间如果存储过多有可能会导致部分功能异常请随时清理一下不再使用的。
</div>
<button class="btn btn-primary refresh" type="button"><i class="icon icon-refresh"></i> 刷新</button>
<button class="btn btn-primary expand-all" type="button"><i class="icon icon-expand-full"></i> 全部展开</button>
<button class="btn btn-primary collapse-all" type="button"><i class="icon icon-collapse-full"></i> 全部收起</button>
<button class="btn btn-danger del-all-param" type="button"><i class="icon icon-remove-sign"></i> 全部删除</button>
</div>
<table class="table table-bordered" id="onlineDebugParamTable">
<thead>
<tr><th>接口地址</th><th>参数配置</th><th>操作</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-page tab-document hide">
<ul class="nav nav-tabs">
<li class="active"><a data-tab href="#tabDocInfo">接口说明</a></li>
<li><a data-tab href="#tabOnlineDebug">在线调试</a></li>
<li><a data-tab href="#tabSimulationResult">模拟返回</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-document-pane active" id="tabDocInfo">
<table class="table table-bordered doc-table">
<tr>
<td class="info">接口地址</td>
<td><span id="docUrl" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">说明</td>
<td id="docInfo"></td>
</tr>
<tr>
<td class="info">请求方式</td>
<td><span id="docRequestMethod" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">consumes</td>
<td><span id="docConsumes" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">produces</td>
<td><span id="docProduces" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">test</td>
<td><div id="htmlStrTemp"></div></td>
</tr>
<tr>
<td class="info">请求参数</td>
<td>
<ul class="nav nav-secondary gray">
<li class="active"><a data-tab href="#docRequestParam">说明</a></li>
<li><a data-tab href="#docRequestExample">例子</a></li>
<!-- <i class="icon icon-info-sign" title='例:@ApiModelProperty(value="用户ID", example = "9527")将example填入对象值里面'></i> -->
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="docRequestParam">
<table class="table table-bordered">
<thead>
<tr><th>参数名</th><th>说明</th><th>类型</th><th>参数位置</th><th>是否必填</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-param-type-pane" id="docRequestExample">
<table class="table table-bordered">
<thead>
<tr><th>参数名</th><th>说明</th><th>类型</th><th>参数位置</th><th>是否必填</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</td>
</tr>
<tr>
<td class="info">响应Model</td>
<td>
<ul class="nav nav-secondary gray">
<li class="active"><a data-tab href="#docResponseModel">说明</a></li>
<li><a data-tab href="#docResponseExample">例子</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="docResponseModel">
<table class="table table-bordered">
<thead>
<tr><th>状态码</th><th>说明</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-param-type-pane" id="docResponseExample">
<table class="table table-bordered">
<thead>
<tr><th>状态码</th><th>说明</th></tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</td>
</tr>
</table>
</div>
<div class="tab-pane tab-document-pane" id="tabOnlineDebug">
<div class="post-url-box">
<div class="input-group">
<!-- <div class="input-group-btn">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="options">参数模板</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-left" role="menu">
<li><a href="javascript:void(0)">默认参数</a></li>
<li><a href="javascript:void(0);" class="save-request-template">+保存模板</a></li>
</ul>
</div> -->
<div class="input-group-btn" id="debugRequstType">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="options">GET</span> <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-left" role="menu">
<li><a href="javascript:void(0);">GET</a></li>
<li><a href="javascript:void(0);">POST</a></li>
<li><a href="javascript:void(0);">PUT</a></li>
<li><a href="javascript:void(0);">HEAD</a></li>
<li><a href="javascript:void(0);">PATCH</a></li>
<li><a href="javascript:void(0);">DELETE</a></li>
<li><a href="javascript:void(0);">OPTIONS</a></li>
<li><a href="javascript:void(0);">TRACE</a></li>
</ul>
</div>
<input type="text" class="form-control" id="postUrlInput" placeholder="请求的完整地址">
<span class="input-group-btn">
<button class="btn btn-default send-request" type="button">发送请求 <i class="icon icon-spin icon-spinner-snake hide"></i></button>
</span>
</div>
</div>
<div class="param-response-box">
<div class="param-box">
<div class="panel panel-default">
<div class="panel-heading" id="headingOne">
<h4 class="panel-title">
<a data-toggle="collapse" href="#tabParamHeader">请求头</a>
<label><input type="checkbox" id="bulkEditHeaderCheck" value="1"> 批量编辑</label>
</h4>
</div>
<div id="tabParamHeader" class="panel-collapse collapse in">
<form id="requestHeaderForm">
<table class="table table-bordered param-table">
<tbody>
<tr class="base">
<td><input type="text" class="form-control" name="paramName" placeholder=""></td>
<td><input type="text" class="form-control" name="paramValue" placeholder=""></td>
<td><i class="icon-times"></i></td>
</tr>
</tbody>
</table>
<textarea class="hide form-control" id="bulkEditHeader" rows="6" placeholder="批量编辑请求头,使用英文冒号分隔,例:&#13;&#10;key:value&#13;&#10;key:value"></textarea>
</form>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" href="#tabParamBody">请求参数</a>
</h4>
</div>
<div id="tabParamBody" class="panel-collapse collapse in">
<form id="requestParamForm">
<ul class="nav nav-secondary">
<li class="active"><a data-tab href="#tabParamTypeForm">表单</a></li>
<li><a data-tab href="#tabParamTypeBody">数据流</a></li>
<li class="form-to-url"><label><input type="checkbox" name="formToUrl" value="1"> 参数拼在URL后面发送</label></li>
<li class="form-to-url"><label><input type="checkbox" id="bulkEditFormCheck" value="1"> 批量编辑</label></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-param-type-pane active" id="tabParamTypeForm">
<table class="table table-bordered param-table">
<tbody>
<tr class="base">
<td><input type="text" class="form-control" name="paramName" placeholder=""></td>
<td><input type="text" class="form-control" name="paramValue" placeholder=""></td>
<td><i class="icon-times"></i></td>
</tr>
</tbody>
</table>
<textarea class="hide form-control" id="bulkEditForm" rows="6" placeholder="批量编辑表单参数,使用英文冒号分隔,例:&#13;&#10;key:value&#13;&#10;key:value"></textarea>
</div>
<div class="tab-pane tab-param-type-pane" id="tabParamTypeBody">
<textarea class="form-control" name="paramBody" rows="6" placeholder=""></textarea>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="response-box">
<ul class="nav nav-secondary">
<li class="info"><span>结果集</span></li>
<li class="active"><a data-tab href="#tabResponseBody">Body</a></li>
<li class="local-storage"><a data-tab href="#tabResponseCookie">Cookie</a></li>
<li><a data-tab href="#tabResponseHeader">Header</a></li>
<li class="right"><span>状态:<i id="httpRequestStatus">200</i>,耗时:<i id="httpRequestTime">0ms</i></span></li>
</ul>
<div class="tab-content">
<div class="tab-pane tab-response-pane active" id="tabResponseBody">
<!-- <textarea class="form-control" id="responseBodyTextArea" rows="20" placeholder=""></textarea> -->
<div id="responseBodyJsonDiv"></div>
</div>
<div class="tab-pane tab-response-pane" id="tabResponseCookie">
<table class="table table-bordered param-table">
<thead>
<tr>
<th>名字</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
<div class="tab-pane tab-response-pane" id="tabResponseHeader">
<table class="table table-bordered param-table">
<thead>
<tr>
<th>名字</th>
<th></th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane tab-document-pane" id="tabSimulationResult">
<table class="table table-bordered doc-table">
<tr>
<td class="info">接口地址</td>
<td><span id="simulationResultUrl" class="label label-warning"></span></td>
</tr>
<tr>
<td class="info">测试地址</td>
<td><a id="simulationResultUrlTest" href="" target="_blank"></a> <i class="icon icon-info-sign" title='需要被访问项目导入zyplayer-doc包才能使用'></i></td>
</tr>
<tr>
<td class="info">返回内容</td>
<td><textarea id="simulationResultText" class="form-control" rows="10"></textarea></td>
</tr>
<tr>
<td class="info">操作</td>
<td>
<button type="button" class="btn btn-primary" id="simulationResultSubmit">提交模拟返回值</button>
</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<!-- 导出文档 -->
<div class="modal fade" id="exportDocumentModal">
<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">
<div class="alert alert-danger hidden">
1、请到 <a target="_blank" href="https://gitee.com/zyplayer/zyplayer-doc">源码处下载</a>《对外文档模板.zip》解压<br/>
2、复制以下文本内容覆盖至 /js/mg-ui-data.js 文件内<br/>
3、然后双击打开目录下的document.html 即可看到导出的文档
</div>
<div class="modal-table-box">
<ul id="exportDocumentUl" class="choise"></ul>
<textarea id="exportDocumentText" class="form-control hidden"></textarea>
</div>
<div align="center" class="bottom-box">
<button class="btn btn-primary" type="button" id="doExportBtn">确认导出</button>
</div>
</div>
</div>
</div>
</div>
<!-- 选择展示的项目 -->
<div class="modal fade" id="choiseDocModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">选择需要展示的文档</h4>
</div>
<div class="modal-body">
<div class="alert alert-danger">不选择则展示全部,展示接口过多会影响效率,建议只展示想看的文档</div>
<div class="modal-table-box">
<ul id="choiseDocListUl" class="choise"></ul>
</div>
<div align="center" class="bottom-box">
<button type="button" class="btn btn-primary" id="choiseDocBtn">  确定  </button>
</div>
</div>
</div>
</div>
</div>
</body>
<script type="text/javascript" src="webjars/mg-ui/js/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="webjars/zui/js/zui.min.js"></script>
<script type="text/javascript" src="webjars/zui/lib/tabs/zui.tabs.min.js"></script>
<script type="text/javascript" src="webjars/zui/lib/dashboard/zui.dashboard.min.js"></script>
<!--
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui.min.js"></script>
-->
<script type="text/javascript" src="webjars/mg-ui/js/formatjson.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/toast.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/common.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mgResizable.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-tree.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-tag.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-debug.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui-export.js"></script>
<script type="text/javascript" src="webjars/mg-ui/js/mg-ui.js"></script>
</html>

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>