mirror of
https://github.com/YMFE/yapi.git
synced 2024-12-15 05:10:47 +08:00
Merge branch 'dev' of gitlab.corp.qunar.com:mfe/yapi into dev
This commit is contained in:
commit
5a9241b497
@ -9,7 +9,7 @@ import { changeMenuItem } from '../../reducer/modules/menu'
|
||||
import { withRouter } from 'react-router';
|
||||
import Srch from './Search/Search'
|
||||
const { Header } = Layout;
|
||||
import { logoSVG } from '../../common.js';
|
||||
import { logoSVG, betaSVG } from '../../common.js';
|
||||
|
||||
const MenuUser = (props) => (
|
||||
<Menu className="user-menu" >
|
||||
@ -167,7 +167,7 @@ export default class HeaderCom extends Component {
|
||||
<div className="content g-row">
|
||||
<div className="logo">
|
||||
<Link to="/group" onClick={this.relieveLink} className="href">
|
||||
<span className="img">{logoSVG('32px')}</span><span className="logo-name">YAPI<span className="ui-badge"></span></span>
|
||||
<span className="img">{logoSVG('32px')}</span><span className="logo-name">YAPI<span className="ui-badge">{betaSVG}</span></span>
|
||||
</Link>
|
||||
</div>
|
||||
<div className="user-toolbar">
|
||||
|
@ -32,12 +32,13 @@
|
||||
}
|
||||
.ui-badge {
|
||||
position: absolute;
|
||||
right: -20px;
|
||||
top: 10px;
|
||||
right: -18px;
|
||||
top: 6px;
|
||||
width: 30px;
|
||||
height: 21px;
|
||||
background-size: 240px 21px;
|
||||
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IuWbvuWxgl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDgwMCA3MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDcwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4uc3Qwe2ZpbGw6I0Y4NTg2MDt9LnN0MXtmaWxsOiNGRkZGRkY7fS5zdDJ7Zm9udC1mYW1pbHk6J0ZaTFRaSEstLUdCSzEtMCc7fS5zdDN7Zm9udC1zaXplOjI0cHg7fTwvc3R5bGU+PGcgaWQ9IuWbvuWxgl8xXzFfIj48ZyBpZD0i5Zu+5bGCXzIiPjxnPjxyZWN0IHg9IjkiIHk9IjQiIGNsYXNzPSJzdDAiIHdpZHRoPSI4MyIgaGVpZ2h0PSI0NCIvPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTkyLDQ4YzAsMC01NSw1LjktNjUuNCw1LjlTMTA5LDQ4LDEwOSw0OFY0YzAsMCw5LjQsOC4yLDE5LjgsOC4yUzE5Miw0LDE5Miw0VjQ4eiIvPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjkyLDQ4YzAsMC0zMS4xLDUuOS00MS41LDUuOVMyMDksNDgsMjA5LDQ4VjRjMCwwLDMxLjEsOS4zLDQxLjUsOS4zUzI5Miw0LDI5Miw0VjQ4eiIvPjwvZz48Zz48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMzkyLDQ4YzAsMC0yLjgsNC40LTEzLjIsNC40UzMwOSw0OCwzMDksNDhWNGMwLDAsNTcuNiw2LjcsNjgsNi43UzM5Miw0LDM5Miw0VjQ4eiIvPjwvZz48Zz48cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjQ5Miw1Mi40IDQwOSw0OCA0MDksNCA0OTIsMTEuMSAiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTU5Miw1Mi40YzAsMC01MC45LTMtNjItNS40Yy0xMC4xLTIuMi0yMSwxLTIxLDFWNGMwLDAsNi44LTIsMTcsMGMxMSwyLjIsNjYsMTAsNjYsMTBWNTIuNHoiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTY4OSw0OGMwLDAtMjIuOSwyLjQtMzQsMGMtMTAuMS0yLjItNDYsMC00NiwwVjRjMCwwLDMxLjgtMiw0MiwwYzExLDIuMiw0MS43LDEwLjQsNDEuNywxMC40TDY4OSw0OHoiLz48L2c+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTc5Miw0OWMwLDAtOS45LDEuNC0yMS0xYy0xMC4xLTIuMi02MiwwLTYyLDBWNGMwLDAsNDcuOC0zLDU4LTFjMTEsMi4yLDI1LDkuOSwyNSw5LjlWNDl6Ii8+PC9nPjwvZz48L2c+PGcgaWQ9IuWbvuWxgl8yXzFfIj48dGV4dCB0cmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAxIDEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMTEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMjEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgMzEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgNDEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgNTEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgNjEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIDEgNzEzLjk4NDQgMzUpIiBjbGFzcz0ic3QxIHN0MiBzdDMiPkFscGhhPC90ZXh0PjwvZz48L3N2Zz4=);
|
||||
background-size: 236px 21px;
|
||||
background-repeat: no-repeat;
|
||||
background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjM2IiBoZWlnaHQ9IjE2IiB2aWV3Qm94PSIwIDAgMjM2IDE2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5hPC90aXRsZT48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxnIGZpbGwtcnVsZT0ibm9uemVybyIgZmlsbD0iI0Y4NTg2MCI+PHBhdGggZD0iTTAgLjYxM2gyNS40NFYxNC4xSDB6TTU1LjQ0IDE0LjFzLTE2Ljg1OCAxLjgwOC0yMC4wNDUgMS44MDhDMzIuMjA3IDE1LjkwOCAzMCAxNC4xIDMwIDE0LjFWLjYxM3MyLjg4IDIuNTEzIDYuMDcgMi41MTNjMy4xODcgMCAxOS4zNy0yLjUxMyAxOS4zNy0yLjUxM1YxNC4xek04NS40NCAxNC4xcy05LjUzMiAxLjgwOC0xMi43MiAxLjgwOEM2OS41MzMgMTUuOTA4IDYwIDE0LjEgNjAgMTQuMVYuNjEzczkuNTMzIDIuODUgMTIuNzIgMi44NWMzLjE4OCAwIDEyLjcyLTIuODUgMTIuNzItMi44NVYxNC4xek0xMTUuNDQgMTQuMXMtLjg1OCAxLjM0OC00LjA0NSAxLjM0OEMxMDguMjA3IDE1LjQ0OCA5MCAxNC4xIDkwIDE0LjFWLjYxM3MxNy42NTUgMi4wNTQgMjAuODQzIDIuMDU0YzMuMTg4IDAgNC41OTgtMi4wNTQgNC41OTgtMi4wNTRWMTQuMXpNMTQ1LjQ0IDE1LjQ0OEwxMjAgMTQuMVYuNjEzbDI1LjQ0IDIuMTc2TTE3NS40NCAxNS40NDhzLTE1LjYtLjkyLTE5LjAwMy0xLjY1NUMxNTMuMzQgMTMuMTIgMTUwIDE0LjEgMTUwIDE0LjFWLjYxM3MyLjA4NC0uNjEzIDUuMjEgMGMzLjM3Mi42NzQgMjAuMjMgMy4wNjUgMjAuMjMgMy4wNjV2MTEuNzd6TTIwNC41MiAxNC4xcy03LjAxOC43MzUtMTAuNDIgMGMtMy4wOTYtLjY3NS0xNC4xIDAtMTQuMSAwVi42MTNzOS43NDctLjYxMyAxMi44NzQgMGMzLjM3LjY3NCAxMi43OCAzLjE4OCAxMi43OCAzLjE4OGwtMS4xMzMgMTAuM3pNMjM1LjQ0IDE0LjQwNnMtMy4wMzQuNDMtNi40MzYtLjMwNmMtMy4wOTYtLjY3NS0xOS4wMDQgMC0xOS4wMDQgMFYuNjEzczE0LjY1LS45MiAxNy43NzgtLjMwNmMzLjM3LjY3NCA3LjY2MyAzLjAzNCA3LjY2MyAzLjAzNHYxMS4wNjZ6Ii8+PC9nPjxnIGZvbnQtc2l6ZT0iMTAiIGZvbnQtZmFtaWx5PSJIZWx2ZXRpY2EiIGZpbGw9IiNGRkYiPjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMSkiPjx0c3BhbiB4PSIwIiB5PSIxMCI+QmV0YTwvdHNwYW4+PC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMSkiPjx0c3BhbiB4PSIzMCIgeT0iMTAiPkJldGE8L3RzcGFuPjwvdGV4dD48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDEpIj48dHNwYW4geD0iNjAiIHk9IjEwIj5CZXRhPC90c3Bhbj48L3RleHQ+PHRleHQgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAxKSI+PHRzcGFuIHg9IjkwIiB5PSIxMCI+QmV0YTwvdHNwYW4+PC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMSkiPjx0c3BhbiB4PSIxMjAiIHk9IjEwIj5CZXRhPC90c3Bhbj48L3RleHQ+PHRleHQgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAxKSI+PHRzcGFuIHg9IjE1MCIgeT0iMTAiPkJldGE8L3RzcGFuPjwvdGV4dD48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDEpIj48dHNwYW4geD0iMTgwIiB5PSIxMCI+QmV0YTwvdHNwYW4+PC90ZXh0Pjx0ZXh0IHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMSkiPjx0c3BhbiB4PSIyMTAiIHk9IjEwIj5CZXRhPC90c3Bhbj48L3RleHQ+PC9nPjwvZz48L3N2Zz4=);
|
||||
animation: flag .8s steps(8) infinite;
|
||||
}
|
||||
@keyframes flag {
|
||||
|
@ -406,7 +406,7 @@ export default class Run extends Component {
|
||||
|
||||
const { method, domains, pathParam, pathname, query, headers, bodyForm, currDomain, bodyType, resHeader } = this.state;
|
||||
const hasPlugin = this.hasCrossRequestPlugin();
|
||||
const isResJson = resHeader['content-type'] && resHeader['content-type'].indexOf('application/json') !== -1
|
||||
const isResJson = resHeader && resHeader['content-type'] && resHeader['content-type'].indexOf('application/json') !== -1
|
||||
let path = pathname;
|
||||
pathParam.forEach(item => {
|
||||
path = path.replace(`:${item.name}`, item.value || `:${item.name}`);
|
||||
@ -421,11 +421,23 @@ export default class Run extends Component {
|
||||
<Alert
|
||||
message={
|
||||
<div>
|
||||
温馨提示:当前正在使用接口测试服务,请安装我们为您免费提供的
|
||||
<a
|
||||
target="blank"
|
||||
href="https://chrome.google.com/webstore/detail/cross-request/cmnlfmgbjmaciiopcgodlhpiklaghbok?hl=en-US"
|
||||
>测试增强插件 [点击获取]!</a>
|
||||
温馨提示:当前正在使用接口测试服务,请安装我们为您免费提供的测试增强插件
|
||||
<div>
|
||||
<a
|
||||
target="blank"
|
||||
href="https://chrome.google.com/webstore/detail/cross-request/cmnlfmgbjmaciiopcgodlhpiklaghbok?hl=en-US"
|
||||
> [Google 商店获取(需翻墙)]</a>
|
||||
</div>
|
||||
<div>
|
||||
<a
|
||||
target="blank"
|
||||
href="/attachment/cross-request.crx"
|
||||
> [手动下载安装] </a>
|
||||
<a
|
||||
target="blank"
|
||||
href="http://www.jianshu.com/p/12ca04c61fc6"
|
||||
> [安装教程] </a>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
type="warning"
|
||||
@ -478,7 +490,7 @@ export default class Run extends Component {
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button type="primary" icon="plus" onClick={this.addPathParam}>Add path parameter</Button>
|
||||
<Button type="primary" icon="plus" onClick={this.addPathParam}>添加Path参数</Button>
|
||||
</Panel>
|
||||
<Panel header="QUERY PARAMETERS" key="1">
|
||||
{
|
||||
@ -493,7 +505,7 @@ export default class Run extends Component {
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button type="primary" icon="plus" onClick={this.addQuery}>Add query parameter</Button>
|
||||
<Button type="primary" icon="plus" onClick={this.addQuery}>添加Query参数</Button>
|
||||
</Panel>
|
||||
<Panel header="HEADERS" key="2" >
|
||||
{
|
||||
@ -508,7 +520,7 @@ export default class Run extends Component {
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button type="primary" icon="plus" onClick={this.addHeader}>Add header</Button>
|
||||
<Button type="primary" icon="plus" onClick={this.addHeader}>添加Header</Button>
|
||||
</Panel>
|
||||
<Panel
|
||||
header={
|
||||
@ -559,7 +571,7 @@ export default class Run extends Component {
|
||||
)
|
||||
})
|
||||
}
|
||||
<Button type="primary" icon="plus" onClick={this.addBody}>Add form parameter</Button>
|
||||
<Button type="primary" icon="plus" onClick={this.addBody}>添加Form参数</Button>
|
||||
</div>
|
||||
}
|
||||
{
|
||||
|
@ -67,9 +67,10 @@ class ProjectCard extends Component {
|
||||
|
||||
render() {
|
||||
const { projectData, inFollowPage } = this.props;
|
||||
console.log(projectData);
|
||||
return (
|
||||
<div className="card-container">
|
||||
<Card bordered={false} className="m-card" onClick={() => this.props.history.push('/project/' + projectData._id)}>
|
||||
<Card bordered={false} className="m-card" onClick={() => this.props.history.push('/project/' + (projectData.projectid || projectData._id))}>
|
||||
<Icon type={projectData.icon || 'star-o'} className="ui-logo" style={{ backgroundColor: constants.PROJECT_COLOR[projectData.color] || constants.PROJECT_COLOR.blue }} />
|
||||
<h4 className="ui-title">{projectData.name || projectData.projectname}</h4>
|
||||
</Card>
|
||||
|
@ -33,7 +33,6 @@ class Follows extends Component {
|
||||
}
|
||||
|
||||
receiveRes = () => {
|
||||
console.log('receive res!');
|
||||
this.props.getFollowList(this.props.uid).then((res) => {
|
||||
console.log(res);
|
||||
if (res.payload.data.errcode === 0) {
|
||||
|
@ -246,6 +246,7 @@ class View extends Component {
|
||||
}
|
||||
}
|
||||
methodColor = methodColor[this.props.curData.method?this.props.curData.method.toLowerCase():"get"];
|
||||
if(!methodColor) methodColor = "get";
|
||||
let res = <div className="caseContainer">
|
||||
<div className="colName">
|
||||
<span className="colKey">接口名:</span>
|
||||
@ -253,7 +254,7 @@ class View extends Component {
|
||||
</div>
|
||||
<div className="colMethod">
|
||||
<span className="colKey">请求方法:</span>
|
||||
<span style={{color:methodColor.color,backgroundColor:methodColor.bac}} className="colValue">{this.props.curData.method}</span>
|
||||
<span style={{color:methodColor,backgroundColor:methodColor.bac}} className="colValue">{this.props.curData.method}</span>
|
||||
</div>
|
||||
<div className="colPath">
|
||||
<span className="colKey">接口路径:</span>
|
||||
|
@ -218,8 +218,7 @@ class ProjectMember extends Component {
|
||||
{this.state.groupMemberList.length ? this.state.groupMemberList.map((item, index) => {
|
||||
return (<div key={index} className="card-item">
|
||||
<img src={location.protocol + '//' + location.host + '/api/user/avatar?uid=' + item.uid} className="item-img" />
|
||||
<p className="item-name">{item.username}</p>
|
||||
{item.uid === this.props.uid ? <Badge count={'我'} style={{ backgroundColor: '#689bd0', marginLeft: '8px', borderRadius: '4px' }} /> : null}
|
||||
<p className="item-name">{item.username}{item.uid === this.props.uid ? <Badge count={'我'} style={{ backgroundColor: '#689bd0', fontSize: '12px', marginLeft: '8px', borderRadius: '4px' }} /> : null}</p>
|
||||
{item.role === 'owner' ? <p className="item-role">组长</p> : null}
|
||||
{item.role === 'dev' ? <p className="item-role">开发者</p> : null}
|
||||
</div>);
|
||||
|
55
index.html
Normal file
55
index.html
Normal file
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title></title>
|
||||
<style media="screen">
|
||||
.test {
|
||||
width: 400px;
|
||||
position: relative;
|
||||
min-height: 240px;
|
||||
background-color: #2395f1;
|
||||
overflow: hidden;
|
||||
}
|
||||
.test:before, .test:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
min-width: 800px;
|
||||
min-height: 800px;
|
||||
background-color: #fff;
|
||||
animation-name: rotate;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
}
|
||||
.test:before {
|
||||
bottom: 180px;
|
||||
border-radius: 45%;
|
||||
animation-duration: 10s;
|
||||
}
|
||||
.test:after {
|
||||
top: 180px;
|
||||
opacity: .5;
|
||||
border-radius: 47%;
|
||||
animation-duration: 10s;
|
||||
}
|
||||
|
||||
@keyframes rotate {
|
||||
0% {
|
||||
transform: translate(-50%, 0) rotateZ(0deg);
|
||||
}
|
||||
50% {
|
||||
transform: translate(-50%, -2%) rotateZ(180deg);
|
||||
}
|
||||
100% {
|
||||
transform: translate(-50%, 0%) rotateZ(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="test">
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user