Merge branch 'doc' of gitlab.corp.qunar.com:mfe/yapi into doc

This commit is contained in:
suxiaoxin 2017-10-13 20:37:42 +08:00
commit 96f7c523c8
9 changed files with 15771 additions and 72 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

View File

@ -4,11 +4,13 @@ YApi 将扁平化管理模式的思想引入到产品的权限管理中,`超
## 认识组长
组长分为 `分组组长``项目组长`组长对分组或项目负责,拥有分组或项目下的所有权限,二者区别如下:
组长分为 `分组组长``项目组长`他们的关系就是 一个分组内有若干 `分组组长` ,这些 `分组组长` 在创建项目时就可以指定 `项目组长`。因此他们在职责上的区别就在于 `分组组长` 对分组负责 `项目组长` 对项目负责,二者其他具体区别如下:
`分组组长` 有权限修改分组、删除分组,可以创建分组下的项目。一般来说,组长只需要对项目负责,将项目的操作任务安排给项目组长处理即可。
<img src="./images/usage/manage_intro_group.png" />
`项目组长` 无法操作分组,但拥有项目的全部权限,`项目组长` 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。
`分组组长` 的权限包括修改分组、删除分组、创建分组下的项目。一般来说,`分组组长` 只需要对项目负责,将项目的操作任务安排给 `项目组长` 处理即可。
`项目组长` 只属于某一个项目因此它无法操作项目所属分组,但拥有项目的全部权限,`项目组长` 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。
## 创建分组
只有 `超级管理员` 有权限创建分组

15699
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

View File

@ -168,9 +168,10 @@
<p>接口管理的逻辑较为复杂,操作频率高,层层审批将严重拖慢生产效率,因此传统的金字塔管理模式并不适用。</p>
<p>YApi 将扁平化管理模式的思想引入到产品的权限管理中,<code>超级管理员</code> 拥有最高的权限,并将权限分配给若干 <code>组长</code><code>超级管理员</code> 只需管理<code>组长</code> 即可实际上管理YAPI各大分组与项目的是“<code>组长</code>”。<code>组长</code>对分组或项目负责一般由BU负责人/项目负责人担任。</p>
<h2 class="subject" id="认识组长">认识组长 <a class="hashlink" href="#认识组长">#</a></h2><p>组长分为 <code>分组组长</code><code>项目组长</code>,组长对分组或项目负责,拥有分组或项目下的所有权限,二者区别如下:</p>
<p><code>分组组长</code> 有权限修改分组、删除分组,可以创建分组下的项目。一般来说,组长只需要对项目负责,将项目的操作任务安排给项目组长处理即可。</p>
<p><code>项目组长</code> 无法操作分组,但拥有项目的全部权限,<code>项目组长</code> 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。</p>
<h2 class="subject" id="认识组长">认识组长 <a class="hashlink" href="#认识组长">#</a></h2><p>组长分为 <code>分组组长</code><code>项目组长</code>,他们的关系就是 一个分组内有若干 <code>分组组长</code> ,这些 <code>分组组长</code> 在创建项目时就可以指定 <code>项目组长</code>。因此他们在职责上的区别就在于 <code>分组组长</code> 对分组负责 <code>项目组长</code> 对项目负责,二者其他具体区别如下:</p>
<p><img src="./images/usage/manage_intro_group.png" /></p>
<p><code>分组组长</code> 的权限包括修改分组、删除分组、创建分组下的项目。一般来说,<code>分组组长</code> 只需要对项目负责,将项目的操作任务安排给 <code>项目组长</code> 处理即可。</p>
<p><code>项目组长</code> 只属于某一个项目因此它无法操作项目所属分组,但拥有项目的全部权限,<code>项目组长</code> 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。</p>
<h2 class="subject" id="创建分组">创建分组 <a class="hashlink" href="#创建分组">#</a></h2><p>只有 <code>超级管理员</code> 有权限创建分组</p>
<ul>
<li>联系超级管理员<code>(Qtalk: wenbo.dong; wenxiong.su; wenjie.zhang.)</code>,说明要创建的分组名称和自己的用户名。</li><li>分组一般以 BU 作为维度。</li></ul>

View File

@ -180,14 +180,14 @@
<pre><code>mockd地址 http<span class="token operator">:</span>//yapi.corp.qunar.com/mock/<span class="token number">29</span>/api/hackathon/login
</code></pre><p>项目id可以在项目设置里查看到</p>
<h2 class="subject" id="定义mock数据示例">定义mock数据示例 <a class="hashlink" href="#定义mock数据示例">#</a></h2><pre><code><span class="token punctuation">{</span>
"status|<span class="token number">0</span>-<span class="token number">1</span>"<span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span> //接口状态
<span class="token property">"status|0-1"</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span> //接口状态
<span class="token property">"message"</span><span class="token operator">:</span> <span class="token string">"请求完成"</span><span class="token punctuation">,</span> //消息提示
<span class="token property">"data"</span><span class="token operator">:</span> <span class="token punctuation">{</span>
<span class="token property">"counts"</span><span class="token operator">:</span><span class="token string">"@integer"</span><span class="token punctuation">,</span> //统计数量
"totalSubjectType|<span class="token number">4</span>-<span class="token number">10</span>"<span class="token operator">:</span> <span class="token punctuation">[</span> //<span class="token number">4</span>-<span class="token number">10</span>意味着可以随机生成<span class="token number">4</span>-<span class="token number">10</span>组数据
<span class="token property">"totalSubjectType|4-10"</span><span class="token operator">:</span> <span class="token punctuation">[</span> //<span class="token number">4</span>-<span class="token number">10</span>意味着可以随机生成<span class="token number">4</span>-<span class="token number">10</span>组数据
<span class="token punctuation">{</span>
"subjectName|regexp"<span class="token operator">:</span> "大数据|机器学习|工具<span class="token string">", //主题名
"</span>subjectType|+<span class="token number">1</span>"<span class="token operator">:</span> <span class="token number">1</span> //类型
<span class="token property">"subjectName|regexp"</span><span class="token operator">:</span> <span class="token string">"大数据|机器学习|工具"</span><span class="token punctuation">,</span> //主题名
<span class="token property">"subjectType|+1"</span><span class="token operator">:</span> <span class="token number">1</span> //类型
<span class="token punctuation">}</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token property">"data"</span><span class="token operator">:</span><span class="token punctuation">[</span>
@ -200,8 +200,8 @@
<span class="token punctuation">}</span>
</code></pre><h2 class="subject" id="YApi_Mock_跟_mockjs_区别">YApi Mock 跟 mockjs 区别 <a class="hashlink" href="#YApi_Mock_跟_mockjs_区别">#</a></h2><p>1 因为 yapi 基于 json 定义 mock ,无法使用 mockjs 原有的函数功能,正则表达式需要基于 rule 书写,示例如下:</p>
<pre><code><span class="token punctuation">{</span>
"name|regexp"<span class="token operator">:</span> <span class="token string">"[a-z0-9_]+?"</span><span class="token punctuation">,</span>
"type|regexp"<span class="token operator">:</span> "json|text|xml" //枚举数据类型可这样实现
<span class="token property">"name|regexp"</span><span class="token operator">:</span> <span class="token string">"[a-z0-9_]+?"</span><span class="token punctuation">,</span>
<span class="token property">"type|regexp"</span><span class="token operator">:</span> <span class="token string">"json|text|xml"</span> //枚举数据类型可这样实现
<span class="token punctuation">}</span>
</code></pre><p>2 支持替换请求的query,body参数</p>
<pre><code><span class="token punctuation">{</span>
@ -245,9 +245,9 @@ $<span class="token punctuation">.</span><span class="token function">post</span
<p><a href="#DPD">2. 数据占位符定义规范Data Placeholder DefinitionDPD</a></p>
<p><span id = "DTD"></span></p>
<h3 class="subject" id="数据模板定义规范Data_Template_DefinitionDTD">数据模板定义规范Data Template DefinitionDTD <a class="hashlink" href="#数据模板定义规范Data_Template_DefinitionDTD">#</a></h3><p>数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:</p>
<pre><code>// 属性名 name (与生成规则之间用 "|<span class="token string">" 隔开)
// 生成规则 rule生成规则有7种详见下面的生成规则
// 属性值 value可以含有 "</span>@占位符" 同时也指定了最终值的初始值和类型)
<pre><code>// 属性名 name (与生成规则之间用 <span class="token string">"|"</span> 隔开)
// 生成规则 rule生成规则有<span class="token number">7</span>种详见下面的生成规则)
// 属性值 value可以含有 <span class="token string">"@占位符"</span> 同时也指定了最终值的初始值和类型)
'name|rule'<span class="token operator">:</span> value

View File

@ -1,6 +1,3 @@
var EXAMPLE_MAX_HEIGHT = 98,
DEFAULT_SHOW_PARAMS = 5;
$(document).ready(function() {
// 移动端导航
var $openPanel = $('.open-panel');
@ -11,7 +8,6 @@ $(document).ready(function() {
var $versionSelector = $('.version-selector');
var $versionMask = $('.m-version-mask');
var isPanelHide = true;
var winWidth = $(window).width();
var h2 = $('.content-right').find('h2');
var h3 = $('.content-right').find('h3');
var a = $('.content-left').find('a');
@ -125,7 +121,6 @@ $(document).ready(function() {
})
$versionSelector.click(function(e) {
$versionMask.show();
console.log('e');
});
$('.markdown-body pre').map(function(i, item) {
@ -133,59 +128,61 @@ $(document).ready(function() {
$(item).children('code').addClass('js-code-'+i);
});
var winHeight = $(window).height() - 44,
sidebar = $('.docs-sidebar');
var docSideNav = $('.docs-sidenav');
if (winWidth > 767) {
docSideNav.width($contentLeftWidth);
}
if (sidebar.height() > winHeight) {
sidebar.css('max-height', winHeight + 'px');
$('.docs-sidenav').css('max-height', winHeight + 'px');
if (winWidth < 768) {
$('.docs-sidenav').css({
'overflow-x': 'hidden'
});
}
var activeMenu,
barScroll = false;
// var winHeight = $(window).height() - 44,
// sidebar = $('.docs-sidebar');
sidebar.on('mouseover', function() {
barScroll = true;
});
sidebar.on('mouseout', function() {
barScroll = false;
});
};
// var docSideNav = $('.docs-sidenav');
// if (winWidth > 767) {
// docSideNav.width($contentLeftWidth);
// }
$(window).on('scroll', function(e) {
if ($(this).scrollTop() > ($('.footer').offset().top - $(window).height())) {
winHeight = $(window).height() - $('.footer').outerHeight() - 44;
sidebar.css('max-height', winHeight + 'px');
$('.docs-sidenav').css('max-height', winHeight + 'px');
} else {
winHeight = $(window).height() - 44;
sidebar.css('max-height', winHeight + 'px');
$('.docs-sidenav').css('max-height', winHeight + 'px');
}
// if (sidebar.height() > winHeight) {
// sidebar.css('max-height', winHeight + 'px');
// $('.docs-sidenav').css('max-height', winHeight + 'px');
// if (winWidth < 768) {
// $('.docs-sidenav').css({
// 'overflow-x': 'hidden'
// });
// }
// var activeMenu,
// barScroll = false;
//
// sidebar.on('mouseover', function() {
// barScroll = true;
// });
// sidebar.on('mouseout', function() {
// barScroll = false;
// });
// };
if (!barScroll) {
var activeItem = $('.docs-sidebar li.active a');
if (activeItem.length) {
if (!activeMenu || (activeMenu.attr('href') != activeItem.attr('href'))) {
activeMenu = activeItem;
var top = activeMenu.offset().top - sidebar.offset().top;
if (top < 0) {
//sidebar.scrollTop(sidebar.scrollTop() + top);
$('.docs-sidenav').scrollTop($('.docs-sidenav').scrollTop() + top);
} else if (top > winHeight - 88) {
//sidebar.scrollTop(sidebar.scrollTop() + top - winHeight + 44);
$('.docs-sidenav').scrollTop($('.docs-sidenav').scrollTop() + top - winHeight + 88);
}
}
}
}
});
// $(window).on('scroll', function(e) {
// if ($(this).scrollTop() > ($('.footer').offset().top - $(window).height())) {
// winHeight = $(window).height() - $('.footer').outerHeight() - 44;
// sidebar.css('max-height', winHeight + 'px');
// $('.docs-sidenav').css('max-height', winHeight + 'px');
// } else {
// winHeight = $(window).height() - 44;
// sidebar.css('max-height', winHeight + 'px');
// $('.docs-sidenav').css('max-height', winHeight + 'px');
// }
//
// if (!barScroll) {
// var activeItem = $('.docs-sidebar li.active a');
// if (activeItem.length) {
// if (!activeMenu || (activeMenu.attr('href') != activeItem.attr('href'))) {
// activeMenu = activeItem;
// var top = activeMenu.offset().top - sidebar.offset().top;
// if (top < 0) {
// //sidebar.scrollTop(sidebar.scrollTop() + top);
// $('.docs-sidenav').scrollTop($('.docs-sidenav').scrollTop() + top);
// } else if (top > winHeight - 88) {
// //sidebar.scrollTop(sidebar.scrollTop() + top - winHeight + 44);
// $('.docs-sidenav').scrollTop($('.docs-sidenav').scrollTop() + top - winHeight + 88);
// }
// }
// }
// }
// });
// 退出全屏浏览器窗口大小改变不触发resize
$(window).on('resize', function(e) {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long