mirror of
https://github.com/YMFE/yapi.git
synced 2025-03-13 14:26:50 +08:00
Merge branch 'doc' of gitlab.corp.qunar.com:mfe/yapi into doc
This commit is contained in:
commit
96f7c523c8
BIN
doc/images/usage/manage_intro_group.png
Normal file
BIN
doc/images/usage/manage_intro_group.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 217 KiB |
@ -4,11 +4,13 @@ YApi 将扁平化管理模式的思想引入到产品的权限管理中,`超
|
||||
|
||||
## 认识组长
|
||||
|
||||
组长分为 `分组组长` 与 `项目组长`,组长对分组或项目负责,拥有分组或项目下的所有权限,二者区别如下:
|
||||
组长分为 `分组组长` 与 `项目组长`,他们的关系就是 一个分组内有若干 `分组组长` ,这些 `分组组长` 在创建项目时就可以指定 `项目组长`。因此他们在职责上的区别就在于 `分组组长` 对分组负责 `项目组长` 对项目负责,二者其他具体区别如下:
|
||||
|
||||
`分组组长` 有权限修改分组、删除分组,可以创建分组下的项目。一般来说,组长只需要对项目负责,将项目的操作任务安排给项目组长处理即可。
|
||||
<img src="./images/usage/manage_intro_group.png" />
|
||||
|
||||
`项目组长` 无法操作分组,但拥有项目的全部权限,`项目组长` 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。
|
||||
`分组组长` 的权限包括修改分组、删除分组、创建分组下的项目。一般来说,`分组组长` 只需要对项目负责,将项目的操作任务安排给 `项目组长` 处理即可。
|
||||
|
||||
`项目组长` 只属于某一个项目因此它无法操作项目所属分组,但拥有项目的全部权限,`项目组长` 是 YApi 的基层管理者,承担了 YApi 绝大部分的日常管理工作。
|
||||
|
||||
## 创建分组
|
||||
只有 `超级管理员` 有权限创建分组
|
||||
|
15699
package-lock.json
generated
Normal file
15699
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
BIN
static/doc/images/usage/manage_intro_group.png
Normal file
BIN
static/doc/images/usage/manage_intro_group.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 217 KiB |
@ -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>
|
||||
|
@ -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 Definition,DPD)</a></p>
|
||||
<p><span id = "DTD"></span></p>
|
||||
<h3 class="subject" id="数据模板定义规范(Data_Template_Definition,DTD)">数据模板定义规范(Data Template Definition,DTD) <a class="hashlink" href="#数据模板定义规范(Data_Template_Definition,DTD)">#</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
|
||||
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user