fix: 解决冲突

This commit is contained in:
zwjamnsss 2017-08-24 10:47:23 +08:00
commit 192514fdc0
52 changed files with 10540 additions and 4008 deletions

View File

@ -22,8 +22,5 @@ module.exports = {
"comma-dangle": ["error", "never"],
"no-console": ["off"],
"import/no-unresolved": ["error"]
},
"globals": {
"ENV_PARAMS": true
}
}

View File

@ -46,6 +46,16 @@ class ErrMsg extends Component {
title = '你还没有关注项目呢';
desc = <span>先去 <a onClick={() => this.props.history.push('/group')}>项目广场</a> , </span>;
break;
case 'noInterface':
title = '该项目还没有接口呢';
desc = '在左侧 “接口列表” 中添加接口';
break;
case 'noMemberInProject':
title = '该项目还没有成员呢';
break;
case 'noMemberInGroup':
title = '该分组还没有成员呢';
break;
case 'noProject':
title = '该分组还没有项目呢';
desc = <span>请点击右上角 <Icon type="plus-circle" /> 按钮新建项目</span>;

View File

@ -3,6 +3,7 @@
font-size: .14rem;
line-height: 2;
margin-bottom: .24rem;
color: rgba(13, 27, 62, 0.43);
.icon {
font-size: .6rem;
margin-bottom: .08rem;

View File

@ -22,7 +22,7 @@
margin-bottom: .08rem;
}
.link {
font-size: .15rem;
font-size: .14rem;
font-weight: 200;
color: #8898aa;
line-height: .3rem;

View File

@ -13,7 +13,8 @@
.logo {
position: relative;
float: left;
line-height: .54rem;
line-height: .56rem;
height: .56rem;
.href {
text-decoration: none;
}

View File

@ -54,8 +54,8 @@ class ProjectCard extends Component {
uid,
projectid: projectData._id,
projectname: projectData.name,
icon: projectData.icon,
color: projectData.color
icon: projectData.icon || constants.PROJECT_ICON[0],
color: projectData.color || constants.PROJECT_COLOR.blue
}
this.props.addFollow(param).then((res) => {
if (res.payload.data.errcode === 0) {

View File

@ -45,7 +45,7 @@
.ant-card-body {
background-color: $color-bg-gray;
border-radius: 4px;
padding-top: .9rem;
padding-top: .24rem + .16rem + 1rem;
box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);
}
.ui-logo {
@ -55,8 +55,8 @@
position: absolute;
left: 50%;
top: 0;
transform: translate(-50%, -20%);
font-size: .4rem;
transform: translate(-50%, .24rem);
font-size: .5rem;
color: #fff;
background-color: #2395f1;
line-height: 1rem;
@ -64,7 +64,6 @@
}
.ui-title {
font-size: .19rem;
margin-bottom: .08rem;
font-weight: normal;
overflow: hidden;
text-overflow:ellipsis;
@ -82,18 +81,45 @@
}
.card-panel-s {
// .card-panel-s {
// .m-card {
// .ant-card-body {
// padding-top: .6rem;
// }
// .ui-logo {
// width: .6rem;
// height: .6rem;
// line-height: .6rem;
// transform: translate(-50%, -20%);
// font-size: .24rem;
// background-color: #2395f1;
// }
// }
// }
@media (max-width: 768px) {
.m-card {
.ant-card-body {
padding-top: .6rem;
padding-top: .24rem + .16rem + .6rem;
}
.ui-logo {
width: .6rem;
height: .6rem;
line-height: .6rem;
transform: translate(-50%, -20%);
font-size: .24rem;
background-color: #2395f1;
font-size: .3rem;
}
}
}
@media (min-width: 768px) and (max-width: 992px) {
.m-card {
.ant-card-body {
padding-top: .24rem + .16rem + .8rem;
}
.ui-logo {
width: .8rem;
height: .8rem;
line-height: .8rem;
font-size: .4rem;
}
}
}

View File

@ -24,6 +24,10 @@ class Subnav extends Component {
className="g-row m-subnav-menu"
>
{this.props.data.map((item, index) => {
// 若导航标题为两个字,则自动在中间加个空格
if (item.name.length === 2) {
item.name = item.name[0] + ' ' + item.name[1];
}
return (
<Menu.Item className="item" key={item.name}>
<Link to={item.path}>{this.props.data[index].name}</Link>

View File

@ -8,6 +8,7 @@
border: none;
.m-subnav-menu {
border: none;
padding: 0 .24rem;
.item {
line-height: .54rem;
padding: 0 .36rem;

View File

@ -25,9 +25,9 @@ export default {
},
PROJECT_COLOR: {
blue: '#2395f1',
green: '#57cf27',
yellow: '#fac200',
red: '#ff561b',
green: '#00a854',
yellow: '#ffbf00',
red: '#f56a00',
pink: '#f5317f',
cyan: '#00a2ae',
gray: '#bfbfbf',

View File

@ -3,7 +3,8 @@ import { createDevTools } from 'redux-devtools';
import LogMonitor from 'redux-devtools-log-monitor';
import DockMonitor from 'redux-devtools-dock-monitor';
export default createDevTools(
module.exports = createDevTools(
<DockMonitor
toggleVisibilityKey="ctrl-h"
changePositionKey="ctrl-q"
@ -11,4 +12,4 @@ export default createDevTools(
>
<LogMonitor />
</DockMonitor>
);
);

View File

@ -60,18 +60,18 @@ export default class GroupList extends Component {
}
async componentWillMount() {
const groupName = this.props.match.params.groupName;
const groupId = !isNaN(this.props.match.params.groupId) ? parseInt(this.props.match.params.groupId) : 0;
await this.props.fetchGroupList();
let currGroup = this.props.groupList[0] || { group_name: '', group_desc: '' };
if(this.props.groupList.length && groupName){
if(this.props.groupList.length && groupId){
for(let i = 0;i<this.props.groupList.length;i++){
if(this.props.groupList[i].group_name === groupName){
if(this.props.groupList[i]._id === groupId){
currGroup = this.props.groupList[i];
}else{
this.props.history.replace(`${currGroup._id}`);
}
}
}else if(!groupName && this.props.groupList.length){
}else if(!groupId && this.props.groupList.length){
this.props.history.push(`/group/${this.props.groupList[0]._id}`);
}
this.setState({groupList: this.props.groupList});

View File

@ -5,6 +5,7 @@ import { Table, Select, Button, Modal, Row, Col, message, Popconfirm } from 'ant
import './MemberList.scss';
import { autobind } from 'core-decorators';
import { fetchGroupMemberList, fetchGroupMsg, addMember, delMember, changeMemberRole } from '../../../reducer/modules/group.js'
import ErrMsg from '../../../components/ErrMsg/ErrMsg.js';
import UsernameAutoComplete from '../../../components/UsernameAutoComplete/UsernameAutoComplete.js';
const Option = Select.Option;
@ -230,7 +231,7 @@ class MemberList extends Component {
</Col>
</Row>
</Modal>
<Table columns={columns} dataSource={this.state.userInfo} pagination={false} />
<Table columns={columns} dataSource={this.state.userInfo} pagination={false} locale={{emptyText: <ErrMsg type="noMemberInGroup"/>}} />
</div>
);
}

View File

@ -3,6 +3,7 @@ import { Table, Card, Badge, Select, Button, Modal, Row, Col, message, Popconfir
import PropTypes from 'prop-types';
import { autobind } from 'core-decorators';
import { connect } from 'react-redux';
import ErrMsg from '../../../../components/ErrMsg/ErrMsg.js';
import { fetchGroupMemberList } from '../../../../reducer/modules/group.js';
import { getProjectMsg, getProjectMemberList, addMember, delMember, changeMemberRole } from '../../../../reducer/modules/project.js';
import UsernameAutoComplete from '../../../../components/UsernameAutoComplete/UsernameAutoComplete.js';
@ -214,9 +215,9 @@ class ProjectMember extends Component {
</Col>
</Row>
</Modal>
<Table columns={columns} dataSource={this.state.projectMemberList} pagination={false} />
<Table columns={columns} dataSource={this.state.projectMemberList} pagination={false} locale={{emptyText: <ErrMsg type="noMemberInProject"/>}} className="setting-project-member"/>
<Card title={this.state.groupName + ' 分组成员 ' + '(' + this.state.groupMemberList.length + ') 人'} noHovering className="setting-group">
{this.state.groupMemberList.map((item, index) => {
{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>
@ -224,7 +225,7 @@ class ProjectMember extends Component {
{item.role === 'owner' ? <p className="item-role">组长</p> : null}
{item.role === 'dev' ? <p className="item-role">开发者</p> : null}
</div>);
})}
}): <ErrMsg type="noMemberInGroup"/>}
</Card>
</div>
)

View File

@ -1,5 +1,5 @@
import React, { Component } from 'react'
import { Form, Input, Icon, Tooltip, Select, Button, Row, Col, message, Card, Radio, Alert, Modal, Popover } from 'antd';
import { Form, Input, Icon, Tooltip, Select, Button, Row, Col, message, Card, Radio, Alert, Modal, Popover, Affix } from 'antd';
import PropTypes from 'prop-types';
import { updateProject, delProject, getProjectMsg, upsetProject } from '../../../../reducer/modules/project';
import { fetchGroupMsg } from '../../../../reducer/modules/group';
@ -93,6 +93,7 @@ class ProjectMessage extends Component {
updateProject(assignValue).then((res) => {
if (res.payload.data.errcode == 0) {
message.success('修改成功! ');
// this.props.history.push('/group');
} else {
message.error(res.payload.data.errmsg);
}
@ -139,22 +140,22 @@ class ProjectMessage extends Component {
showConfirm = () => {
let that = this;
confirm({
title: "确认删除 "+that.props.projectMsg.name+" 分组吗?",
content: <div style={{marginTop:'10px', fontSize: '12px', lineHeight: '25px'}}>
<Alert message="警告:此操作非常危险,会删除该分组下面所有项目和接口,并且无法恢复!" type="warning" banner/>
<div style={{marginTop: '15px'}}>
<p style={{marginBottom: '8px'}}><b>请输入项目名称确认此操作:</b></p>
title: "确认删除 " + that.props.projectMsg.name + " 分组吗?",
content: <div style={{ marginTop: '10px', fontSize: '12px', lineHeight: '25px' }}>
<Alert message="警告:此操作非常危险,会删除该分组下面所有项目和接口,并且无法恢复!" type="warning" banner />
<div style={{ marginTop: '15px' }}>
<p style={{ marginBottom: '8px' }}><b>请输入项目名称确认此操作:</b></p>
<Input id="project_name" size="large" />
</div>
</div>,
onOk() {
let groupName = document.getElementById('project_name').value;
if(that.props.projectMsg.name !== groupName){
if (that.props.projectMsg.name !== groupName) {
message.error('分组名称有误')
return new Promise((resolve, reject)=>{
return new Promise((resolve, reject) => {
reject('error')
})
}else{
} else {
that.props.delProject(that.props.projectId).then((res) => {
if (res.payload.data.errcode == 0) {
message.success('删除成功!');
@ -196,9 +197,10 @@ class ProjectMessage extends Component {
});
}
render () {
render() {
const { getFieldDecorator, getFieldValue } = this.props.form;
const { projectMsg } = this.props;
const mockUrl = location.protocol + '//' + location.hostname + (location.port !== "" ? ":" + location.port : "") + `/mock/${projectMsg._id}${projectMsg.basepath}+$接口请求路径`
let initFormValues = {};
let envMessage = [];
const { name, basepath, desc, env, project_type } = projectMsg;
@ -213,7 +215,7 @@ class ProjectMessage extends Component {
const secondIndex = 'next' + index; // 为保证key的唯一性
return (
<Row key={index} type="flex" justify="space-between" align={index === 0 ? 'middle' : 'top'}>
<Col span={10} offset={2}>
<Col span={11}>
<FormItem
label={index === 0 ? (
<span>环境名称</span>) : ''}
@ -247,7 +249,7 @@ class ProjectMessage extends Component {
)}
</FormItem>
</Col>
<Col span={10}>
<Col span={11}>
<FormItem
label={index === 0 ? (
<span>环境域名</span>) : ''}
@ -260,13 +262,14 @@ class ProjectMessage extends Component {
rules: [{
required: false,
whitespace: true,
message: "请输入环境域名",
validator(rule, value, callback) {
if (value) {
if (value.length === 0) {
callback('请输入环境域名');
} else if (!/\S/.test(value)) {
callback('请输入环境域名');
} else if (!/^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$/.test(value)) {
callback('域名格式错误');
} else {
return callback();
}
@ -309,12 +312,12 @@ class ProjectMessage extends Component {
const colorArr = Object.entries(constants.PROJECT_COLOR);
const colorSelector = (<RadioGroup onChange={this.changeProjectColor} value={projectMsg.color} className="color">
{colorArr.map((item, index) => {
return (<RadioButton key={index} value={item[0]} style={{backgroundColor: item[1], color: '#fff', fontWeight: 'bold'}}>{item[0] === projectMsg.color ? <Icon type="check" /> : null}</RadioButton>);
return (<RadioButton key={index} value={item[0]} style={{ backgroundColor: item[1], color: '#fff', fontWeight: 'bold' }}>{item[0] === projectMsg.color ? <Icon type="check" /> : null}</RadioButton>);
})}
</RadioGroup>);
const iconSelector = (<RadioGroup onChange={this.changeProjectIcon} value={projectMsg.icon} className="icon">
{constants.PROJECT_ICON.map((item) => {
return (<RadioButton key={item} value={item} style={{fontWeight: 'bold'}}><Icon type={item} /></RadioButton>);
return (<RadioButton key={item} value={item} style={{ fontWeight: 'bold' }}><Icon type={item} /></RadioButton>);
})}
</RadioGroup>);
return (
@ -332,6 +335,13 @@ class ProjectMessage extends Component {
</Row>
<hr className="breakline" />
<Form>
<FormItem
{...formItemLayout}
label="项目ID"
>
<span >{this.props.projectMsg._id}</span>
</FormItem>
<FormItem
{...formItemLayout}
label="项目名称"
@ -357,7 +367,7 @@ class ProjectMessage extends Component {
{...formItemLayout}
label={(
<span>
基本路径&nbsp;
接口基本路径&nbsp;
<Tooltip title="基本路径为空表示根路径">
<Icon type="question-circle-o" />
</Tooltip>
@ -367,13 +377,29 @@ class ProjectMessage extends Component {
{getFieldDecorator('basepath', {
initialValue: initFormValues.basepath,
rules: [{
required: false, message: '请输入项目基本路径! '
required: false, message: '请输入基本路径! '
}]
})(
<Input />
)}
</FormItem>
<FormItem
{...formItemLayout}
label={(
<span>
MOCK地址&nbsp;
<Tooltip title="具体使用方法请查看文档">
<Icon type="question-circle-o" />
</Tooltip>
</span>
)}
>
<Input disabled value={mockUrl} onChange={()=>{}} />
</FormItem>
<FormItem
{...formItemLayout}
label="描述"
@ -393,10 +419,7 @@ class ProjectMessage extends Component {
label="环境配置"
>
{envSettingItems}
</FormItem>
<FormItem {...formItemLayout}>
<Button type="dashed" onClick={this.add} style={{ width: '60%' }}>
<Button type="default" onClick={this.add} style={{ width: '50%' }}>
<Icon type="plus" /> 添加环境配置
</Button>
</FormItem>
@ -420,22 +443,19 @@ class ProjectMessage extends Component {
<Icon type="unlock" />公开<br /><span className="radio-desc">任何人都可以索引并查看项目信息</span>
</Radio>
</RadioGroup>
)}
)}
</FormItem>
</Form>
<Row>
<Col sm={{ offset: 6 }} lg={{ offset: 3 }}>
<Button className="m-btn" icon="save" type="primary"
onClick={this.handleOk}
>保存</Button>
</Col>
</Row>
<hr className="breakline" />
<Affix offsetBottom={0}>
<div className="btnwrap-changeproject">
<Button className="m-btn btn-save" icon="save" type="primary" onClick={this.handleOk} > </Button>
</div>
</Affix>
<FormItem
{...formItemLayout}
label="危险操作"
className="danger-container"
>
<Card noHovering={true} className="card-danger">
<div className="card-danger-content">

View File

@ -14,6 +14,7 @@
.ant-card-body {
display: flex;
align-items: center;
padding: .24rem !important;
}
.card-danger-content {
flex: 1;
@ -24,7 +25,14 @@
}
}
.setting-project-member {
border: 1px solid #e9e9e9;
border-radius: 2px;
}
.setting-group {
margin-top: .48rem;
border-radius: 2px;
.ant-card-head {
background-color: #eee;
}
@ -88,6 +96,25 @@
background-color: #2395f1;
line-height: 1rem;
box-shadow: 0 4px 6px rgba(50,50,93,.11), 0 1px 3px rgba(0,0,0,.08);
position: relative;
&:after {
opacity: 0;
content: '点击修改';
display: block;
transition: all .4s;
position: absolute;
left: 0;
top: 0;
border-radius: 50%;
font-size: .14rem;
color: #fff;
width: 100%;
height: 100%;
background-color: rgba(0,0,0, .25);
}
&:hover:after {
opacity: 1;
}
}
}
@ -116,4 +143,55 @@
background-color: #2395f1;
border-radius: 4px;
}
.color {
// .ant-radio-button-wrapper {
// &:first-child {
// border: none;
// }
// }
.ant-radio-button-wrapper-checked {
border-radius: 0;
&:hover {
border: none;
box-shadow: none;
}
}
}
}
.danger-container {
margin-top: .48rem;
}
.btnwrap-changeproject {
text-align: center;
padding: .24rem 0;
margin: 0 -.24rem;
background: #fff;
background-image: linear-gradient(45deg, #d9d9d9 25%, transparent 0),linear-gradient(45deg, transparent 75%, #d9d9d9 0);
background-size: 4px 4px;
.btn-save {
background-color: #32325d;
font-size: .15rem;
font-weight: 200;
letter-spacing: 1px;
border: none;
line-height: .4rem;
height: .4rem;
padding: 0 .24rem;
margin-right: .24rem;
box-shadow: 0 4px 6px rgba(50, 50, 93, 0.11), 0 1px 3px rgba(0, 0, 0, 0.08);
transform: translateY(0);
transition: all .2s;
&:focus {
background-color: #43458b;
}
&:hover {
transform: translateY(-1px);
background-color: #43458b;
}
&:active {
transform: translateY(1px);
background-color: #32325d;
}
}
}

View File

@ -1,120 +0,0 @@
import React, { Component } from 'react'
import { Link } from 'react-router-dom'
import { Row, Col, Menu, AutoComplete, Input, Icon } from 'antd'
import axios from 'axios'
import { connect } from 'react-redux'
import PropTypes from 'prop-types'
import Avatar from './Avatar.js'
const Option = AutoComplete.Option;
@connect(
state => {
console.log(state);
return {
curUid: state.user.uid + '',
curUserName: state.user.userName,
curUserRole: state.user.role
}
}
)
class LeftMenu extends Component {
constructor(props) {
super(props)
this.state = {
dataSource: []
}
this.searchSign = 0;
this._searchSign = 0;
this.interval = null;
}
static propTypes = {
curUid: PropTypes.string,
curUserName: PropTypes.string,
curUserRole: PropTypes.string
}
//延迟搜索
handleSearch = (value) => {
if(!value || value.length < 1) return ;
this.searchSign = this.searchSign + 1;
this.interval && clearInterval(this.interval)
this.interval = setInterval(() => {
if (this.searchSign === this._searchSign) {
this.interval = clearInterval(this.interval)
axios.get('/api/user/search?q=' + value).then((res) => {
if (res.data.errcode === 0) {
this.setState({
dataSource: res.data.data
})
}
})
} else {
this._searchSign = this.searchSign;
}
}, 60)
}
renderOption = (item) => {
return (
<Option key={item.uid} text={item.username} >
<Link to={"/user/profile/" + item.uid} > {item.username} </Link>
</Option>
)
}
render() {
const menus = [{
title: '个人资料',
path: `/user/profile/${this.props.curUid}`
}
]
if(this.props.curUserRole === 'admin'){
menus.push({
title: '用户管理',
path: '/user/list'
})
}
let content = menus.map((menu) => {
return (
<Menu.Item key={'#' + menu.path} >
<Link to={menu.path} >{menu.title}</Link>
</Menu.Item>
)
})
const { dataSource } = this.state;
return (<div className="user-list">
<div className='cur-user'>
<Avatar />
<div className='user-name'><span>用户名 :</span>{`${this.props.curUserName}`}</div>
</div>
<Row type="flex" justify="start" className="search">
<Col span="24">
<div className="certain-category-search-wrapper" style={{ width: "100%" }}>
<AutoComplete
className="certain-category-search"
dropdownClassName="certain-category-search-dropdown"
size="large"
style={{ width: '100%' }}
dataSource={dataSource.map(this.renderOption)}
onSearch={this.handleSearch}
placeholder="搜索用户"
optionLabelProp="text"
>
<Input suffix={<Icon type="search" className="certain-category-icon" />} />
</AutoComplete>
</div>
</Col>
</Row>
<Menu mode='inline' defaultSelectedKeys={[location.hash]} className="user-nav">
{content}
</Menu>
</div>
)
}
}
export default LeftMenu

View File

@ -2,7 +2,6 @@ import './index.scss'
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { Route } from 'react-router-dom'
// import LeftMenu from './LeftMenu.js'
import List from './List.js'
import PropTypes from 'prop-types'
import Profile from './Profile.js'

View File

@ -1,55 +0,0 @@
import './index.scss'
import React, { Component } from 'react'
import { connect } from 'react-redux'
import PropTypes from 'prop-types'
import Header from '../../components/Header/Header.js'
@connect(
state => {
return {
}
},
{
// fetchInterfaceData,
// projectMember,
// closeProjectMember
}
)
class user extends Component {
static propTypes = {
fetchInterfaceData: PropTypes.func,
interfaceData: PropTypes.array,
projectMember: PropTypes.func,
closeProjectMember: PropTypes.func,
modalVisible: PropTypes.bool
}
constructor(props) {
super(props)
}
componentWillMount () {
}
render () {
return (
<div>
<Header />
<section className="user-box">
<InterfaceList projectMember={projectMember} />
<InterfaceMode modalVisible={modalVisible} closeProjectMember={this.props.closeProjectMember} />
<InterfaceTable data={interfaceData} />
</section>
</div>
)
}
}
export default Interface

View File

@ -2,11 +2,7 @@ import Header from '../components/Header/Header.js'
import Home from './Home/Home.js'
import Login from './Login/LoginContainer.js'
import Group from './Group/Group.js'
import Interface from './Interface/Interface.js'
import Project from './Project/Project.js'
import News from './News/News.js'
import AddInterface from './AddInterface/AddInterface.js'
import DevTools from './DevTools/DevTools.js'
import Follows from './Follows/Follows.js'
import AddProject from './AddProject/AddProject.js'
@ -15,11 +11,7 @@ export {
Home,
Login,
Group,
Interface,
Project,
AddInterface,
News,
DevTools,
Follows,
AddProject
}

View File

@ -3,17 +3,28 @@ import ReactDOM from 'react-dom'
import App from './Application'
import { Provider } from 'react-redux'
import createStore from './reducer/create';
import { DevTools } from './containers';
import './styles/theme.less'
const store = createStore();
if (process.env.NODE_ENV === 'production') {
ReactDOM.render(
<Provider store={store}>
<div>
<App />
</div>
</Provider>,
document.getElementById('yapi')
)
} else {
const DevTools = require('./containers/DevTools/DevTools.js')
ReactDOM.render(
<Provider store={store}>
<div>
<App />
<DevTools />
</div>
</Provider>,
document.getElementById('yapi')
)
}
ReactDOM.render(
<Provider store={store}>
<div>
<App />
<DevTools />
</div>
</Provider>,
document.getElementById('yapi')
)

View File

@ -8,15 +8,13 @@ export default function createStore(initialState = {}) {
const middleware = [thunkMiddleware, promiseMiddleware, messageMiddleware];
let finalCreateStore;
if (ENV_PARAMS.development) {
if (process.env.NODE_ENV === 'production') {
finalCreateStore = applyMiddleware(...middleware)(_createStore);
} else {
finalCreateStore = compose(
applyMiddleware(...middleware),
window.devToolsExtension ? window.devToolsExtension() : require('../containers/DevTools/DevTools').default.instrument()
window.devToolsExtension ? window.devToolsExtension() : require('../containers/DevTools/DevTools').instrument()
)(_createStore);
} else {
finalCreateStore = applyMiddleware(...middleware)(_createStore);
}
const store = finalCreateStore(reducer, initialState);

View File

@ -174,6 +174,10 @@
@label-required-color : @highlight-color;
@label-color : @heading-color;
@form-item-margin-bottom : 24px;
// 处理添加环境配置下边距重合的 bug
.ant-form-item > .ant-form-item, .ant-form-item :not(.ant-form) > .ant-form-item {
margin-bottom: 16px;
}
@form-item-trailing-colon : true;
// Input
@ -250,11 +254,11 @@
// Table
// --
@table-header-bg: @background-color-base;
@table-header-bg: #eee;
@table-header-sort-bg: @background-color-active;
@table-row-hover-bg: @primary-1;
@table-selected-row-bg: #fafafa;
@table-padding-vertical: 16px + 2px;
@table-padding-vertical: 16px;
@table-padding-horizontal: 8px + 2px;
// Tag

View File

@ -3,6 +3,8 @@
<p style='text-indent:2em;line-height:1.8em'>yapi的Mock功能可以根据用户的输入接口信息如协议、URL、接口名、请求头、请求参数、mock规则([点击到Mock规则](#mock)生成Mock接口这些接口会自动生成模拟数据创建者可以自由构造需要的数据。而且与常见的Mock方式如将Mock写在代码里和JS拦截等相比yapi的Mock在使用场景和效率和复杂度上是相差甚远的正是由于yapi的Mock是一个第三方平台那么在团队开发时任何人都可以权限许可下创建、修改接口信息等操作这对于团队开发是很有好处的。
**mock地址解析**yapi平台网址+mock+**您的项目id**+**接口实际请求path**
项目id可以在项目设置里查看到
</p>
<img src="./images/mock.jpg" style="width: 50%" />
@ -27,11 +29,14 @@ $.post(prefix+'/baseapi/path', {username: 'xxx'}, function(res){
```` nginx
location /baseapi
{
proxy_pass http://http://yapi.local.qunar.com:3000/mock/2817/;
proxy_pass http://yapi.local.qunar.com:3000/mock/2817/baseapi; #baseapi后面没有"/"
}
````
#### 1.2.2 基于ykit Jerry代理
假设您本地服务器访问地址是: http://xxx.com
<img src="./images/ykit.jpg" />

9668
npm-shrinkwrap.json generated Normal file

File diff suppressed because it is too large Load Diff

3476
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -46,7 +46,7 @@
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-react": "^7.1.0",
"express": "^4.15.3",
"extract-text-webpack-plugin": "^1.0.1",
"extract-text-webpack-plugin": "2.0.0",
"fast-sass-loader": "^1.2.5",
"fs-extra": "^3.0.1",
"gulp": "^3.9.1",
@ -58,6 +58,7 @@
"jsonwebtoken": "^7.4.1",
"koa": "^2.0.0",
"koa-bodyparser": "^3.2.0",
"koa-compress": "^2.0.0",
"koa-logger": "^3.0.0",
"koa-mysql-session": "0.0.2",
"koa-router": "^7.0.1",
@ -83,10 +84,8 @@
"rc-scroll-anim": "^1.0.7",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-monaco-editor": "^0.8.1",
"react-redux": "^5.0.5",
"react-router-dom": "^4.1.1",
"react-router-redux": "^4.0.8",
"react-scripts": "1.0.10",
"redux": "^3.7.1",
"redux-promise": "^0.5.3",
@ -101,9 +100,7 @@
"universal-cookie": "^2.0.8",
"url": "^0.11.0",
"validate-commit-msg": "^2.12.2",
"wangeditor": "^3.0.4",
"ykit-config-antd": "^0.1.3",
"ykit-config-react": "^0.4.4"
"ykit-config-antd": "^0.1.3"
},
"devDependencies": {
"babel-plugin-import": "^1.3.1",

View File

@ -10,6 +10,7 @@ import router from './router.js';
import websockify from 'koa-websocket';
import websocket from './websocket.js'
var compress = require('koa-compress')
yapi.connect = dbModule.connect();
const app = websockify(new Koa());
@ -23,6 +24,11 @@ app.use(router.allowedMethods());
websocket(app);
app.use(compress({
threshold: 50480,
flush: require('zlib').Z_SYNC_FLUSH
}))
app.use( async (ctx, next) => {
if( /^\/(?!api)[a-zA-Z0-9\/\-_]*$/.test(ctx.path) ){
ctx.path = "/"
@ -34,7 +40,7 @@ app.use( async (ctx, next) => {
})
app.use(koaStatic(
yapi.path.join(yapi.WEBROOT, 'static'),
{index: indexFile}
{index: indexFile, gzip: true}
));
app.listen(yapi.WEBCONFIG.port);

View File

@ -158,6 +158,56 @@ class interfaceColController extends baseController{
}
}
/**
* 增加一个接口用例
* @interface /col/up_case
* @method POST
* @category col
* @foldnumber 10
* @param {number} id
* @param {String} casename
* @param {String} domain
* @param {String} path
* @param {String} method
* @param {Object} req_query
* @param {Object} req_headers
* @param {String} req_body_type
* @param {Array} req_body_form
* @param {String} req_body_other
* @returns {Object}
* @example
*/
async upCase(ctx){
try{
let params = ctx.request.body;
params = yapi.commons.handleParams(params, {
id: 'number',
casename: 'string',
domain: 'string',
method: 'string'
});
if (!params.id) {
return ctx.body = yapi.commons.resReturn(null, 400, '用例id不能为空');
}
if(!params.casename){
return ctx.body = yapi.commons.resReturn(null, 400, '用例名称不能为空');
}
params.uid = this.getUid();
let result = await this.caseModel.up(params);
ctx.body = yapi.commons.resReturn(result);
}catch(e){
ctx.body = yapi.commons.resReturn(null, 402, e.message);
}
}
/**
* 获取一个接口用例详情
* @interface /col/case

View File

@ -3,10 +3,12 @@ import yapi from './yapi.js';
import commons from './utils/commons';
import dbModule from './utils/db.js';
import userModel from './models/user.js';
import mongoose from 'mongoose';
yapi.commons = commons;
yapi.connect = dbModule.connect();
function install() {
let exist = yapi.commons.fileExist(yapi.path.join(yapi.WEBROOT_RUNTIME, 'init.lock'));
@ -31,14 +33,109 @@ function setupSql() {
up_time: yapi.commons.time()
});
result.then(function () {
fs.ensureFileSync(yapi.path.join(yapi.WEBROOT_RUNTIME, 'init.lock'));
console.log(`初始化管理员账号 "${yapi.WEBCONFIG.adminAccount}" 成功`); // eslint-disable-line
process.exit(0);
}, function (err) {
console.log(`初始化管理员账号 "${yapi.WEBCONFIG.adminAccount}" 失败, ${err.message}`); // eslint-disable-line
process.exit(0);
});
yapi.connect.then(function () {
let userCol = mongoose.connection.db.collection('user')
userCol.ensureIndex({
username: 1
})
userCol.ensureIndex({
email: 1
}, {
unique: true
})
let projectCol = mongoose.connection.db.collection('project')
projectCol.ensureIndex({
uid: 1
})
projectCol.ensureIndex({
name: 1
})
projectCol.ensureIndex({
group_id: 1
})
let logCol = mongoose.connection.db.collection('log')
logCol.ensureIndex({
uid: 1
})
logCol.ensureIndex({
typeid: 1,
type: 1
})
let interfaceColCol = mongoose.connection.db.collection('interface_col')
interfaceColCol.ensureIndex({
uid: 1
})
interfaceColCol.ensureIndex({
project_id: 1
})
let interfaceCatCol = mongoose.connection.db.collection('interface_cat')
interfaceCatCol.ensureIndex({
uid: 1
})
interfaceCatCol.ensureIndex({
project_id: 1
})
let interfaceCaseCol = mongoose.connection.db.collection('interface_case')
interfaceCaseCol.ensureIndex({
uid: 1
})
interfaceCaseCol.ensureIndex({
col_id: 1
})
interfaceCaseCol.ensureIndex({
project_id: 1
})
let interfaceCol = mongoose.connection.db.collection('interface')
interfaceCol.ensureIndex({
uid: 1
})
interfaceCol.ensureIndex({
path: 1,
method: 1
})
interfaceCol.ensureIndex({
project_id: 1
})
let groupCol = mongoose.connection.db.collection('group')
groupCol.ensureIndex({
uid: 1
})
groupCol.ensureIndex({
group_name: 1
})
let avatarCol = mongoose.connection.db.collection('avatar')
avatarCol.ensureIndex({
uid: 1
})
let followCol = mongoose.connection.db.collection('follow')
followCol.ensureIndex({
uid: 1
})
followCol.ensureIndex({
project_id: 1
})
result.then(function () {
fs.ensureFileSync(yapi.path.join(yapi.WEBROOT_RUNTIME, 'init.lock'));
console.log(`初始化管理员账号 "${yapi.WEBCONFIG.adminAccount}" 成功`); // eslint-disable-line
process.exit(0);
}, function (err) {
console.log(`初始化管理员账号 "${yapi.WEBCONFIG.adminAccount}" 失败, ${err.message}`); // eslint-disable-line
process.exit(0);
});
})
}
install();

View File

@ -15,7 +15,7 @@ class baseModel{
this.schema.plugin(autoIncrement.plugin, {
model: this.name,
field: this.getPrimaryKey(),
startAt: 101,
startAt: 11,
incrementBy: yapi.commons.rand(1, 10)
});
}

View File

@ -312,6 +312,10 @@ const routerConfig = {
action: "addCase",
path: "add_case",
method: "post"
},{
action: "upCase",
path: "up_case",
method: "post"
},{
action: "getCase",
path: "case",

View File

@ -12,7 +12,7 @@ function model(model, schema) {
return yapi.connect.model(model, schema, model);
}
function connect() {
function connect(callback) {
mongoose.Promise = global.Promise;
let config = yapi.WEBCONFIG;
@ -28,6 +28,9 @@ function connect() {
db.then(function () {
yapi.commons.log('mongodb load success...');
if(typeof callback === 'function'){
callback.call(db)
}
}, function (err) {
yapi.commons.log(err, 'Mongo connect error');
});
@ -38,6 +41,7 @@ function connect() {
yapi.db = model;
module.exports = {
model: model,
connect: connect

View File

@ -53,6 +53,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
_yapi2.default.commons = _commons2.default;
var compress = require('koa-compress');
_yapi2.default.connect = _db2.default.connect();
var app = (0, _koaWebsocket2.default)(new _koa2.default());
var indexFile = process.argv[2] === 'dev' ? 'dev.html' : 'index.html';
@ -64,8 +66,13 @@ app.use(_router2.default.allowedMethods());
(0, _websocket2.default)(app);
app.use(compress({
threshold: 50480,
flush: require('zlib').Z_SYNC_FLUSH
}));
app.use(function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx, next) {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
@ -99,7 +106,7 @@ app.use(function () {
return _ref.apply(this, arguments);
};
}());
app.use((0, _koaStatic2.default)(_yapi2.default.path.join(_yapi2.default.WEBROOT, 'static'), { index: indexFile }));
app.use((0, _koaStatic2.default)(_yapi2.default.path.join(_yapi2.default.WEBROOT, 'static'), { index: indexFile, gzip: true }));
app.listen(_yapi2.default.WEBCONFIG.port);
_commons2.default.log('the server is start at port ' + _yapi2.default.WEBCONFIG.port);

View File

@ -59,7 +59,7 @@ var baseController = function () {
(0, _createClass3.default)(baseController, [{
key: 'init',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var ignoreRouter;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -103,7 +103,7 @@ var baseController = function () {
}, {
key: 'checkLogin',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var token, uid, userInst, result, decoded;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -170,7 +170,7 @@ var baseController = function () {
}, {
key: 'getLoginStatus',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var result;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -222,7 +222,7 @@ var baseController = function () {
}, {
key: 'getProjectRole',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(id, type) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(id, type) {
var _this = this;
var result, interfaceInst, interfaceData, projectInst, projectData, memberData, groupInst, groupData, groupMemberData;
@ -379,7 +379,7 @@ var baseController = function () {
}, {
key: 'checkAuth',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(id, type, action) {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(id, type, action) {
var role;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {

View File

@ -69,7 +69,7 @@ var followController = function (_baseController) {
(0, _createClass3.default)(followController, [{
key: 'list',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var uid, page, limit, result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -134,7 +134,7 @@ var followController = function (_baseController) {
}, {
key: 'del',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var params, uid, checkRepeat, result;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -212,7 +212,7 @@ var followController = function (_baseController) {
}, {
key: 'add',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var params, uid, checkRepeat, data, result;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {

View File

@ -88,7 +88,7 @@ var groupController = function (_baseController) {
(0, _createClass3.default)(groupController, [{
key: 'get',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var params, groupInst, result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -160,7 +160,7 @@ var groupController = function (_baseController) {
}, {
key: 'add',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var params, groupUserdata, groupInst, checkRepeat, data, result;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -272,7 +272,7 @@ var groupController = function (_baseController) {
}, {
key: 'getUserdata',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(uid, role) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(uid, role) {
var userInst, userData;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -333,7 +333,7 @@ var groupController = function (_baseController) {
}, {
key: 'addMember',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(ctx) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(ctx) {
var params, groupInst, check, groupUserdata, result;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
@ -446,7 +446,7 @@ var groupController = function (_baseController) {
}, {
key: 'changeMemberRole',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(ctx) {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(ctx) {
var params, groupInst, check, result;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
@ -547,7 +547,7 @@ var groupController = function (_baseController) {
}, {
key: 'getMemberList',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ctx) {
var params, groupInst, group;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
@ -611,7 +611,7 @@ var groupController = function (_baseController) {
}, {
key: 'delMember',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(ctx) {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ctx) {
var params, groupInst, check, result;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
@ -709,7 +709,7 @@ var groupController = function (_baseController) {
}, {
key: 'list',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(ctx) {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx) {
var groupInst, result;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
@ -762,7 +762,7 @@ var groupController = function (_baseController) {
}, {
key: 'del',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx) {
var _this2 = this;
var groupInst, projectInst, interfaceInst, interfaceColInst, interfaceCaseInst, _id, projectList, result;
@ -802,7 +802,7 @@ var groupController = function (_baseController) {
projectList = _context10.sent;
projectList.forEach(function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(p) {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(p) {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
@ -881,7 +881,7 @@ var groupController = function (_baseController) {
}, {
key: 'up',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(ctx) {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx) {
var groupInst, _id2, data, result;
return _regenerator2.default.wrap(function _callee11$(_context11) {

View File

@ -105,7 +105,7 @@ var interfaceController = function (_baseController) {
(0, _createClass3.default)(interfaceController, [{
key: 'add',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var params, checkRepeat, data, result, username, cate;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -259,7 +259,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'get',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -321,7 +321,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'list',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var project_id, result;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -371,7 +371,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'listByCat',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(ctx) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(ctx) {
var catid, result;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
@ -421,7 +421,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'listByMenu',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(ctx) {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(ctx) {
var project_id, result, newResult, i, item, list, j;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
@ -526,7 +526,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'up',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ctx) {
var params, id, interfaceData, checkRepeat, data, result, username, cate, inter;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
@ -728,7 +728,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'del',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(ctx) {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ctx) {
var id, data, inter, result, username, cate;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
@ -822,7 +822,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'solveConflict',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(ctx) {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx) {
var _this2 = this;
var id, result, userInst, userinfo, data;
@ -905,7 +905,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'addCat',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(ctx) {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx) {
var params, result, username;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
@ -986,7 +986,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'upCat',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx) {
var params, result, username, cate;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
@ -1045,7 +1045,7 @@ var interfaceController = function (_baseController) {
}, {
key: 'delCat',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(ctx) {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx) {
var id, catData, auth, cate, result, r, username;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {

View File

@ -74,7 +74,7 @@ var interfaceColController = function (_baseController) {
(0, _createClass3.default)(interfaceColController, [{
key: 'list',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var id, result, i;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -149,7 +149,7 @@ var interfaceColController = function (_baseController) {
}, {
key: 'addCol',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -233,7 +233,7 @@ var interfaceColController = function (_baseController) {
}, {
key: 'getCaseList',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var id, inst, result;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -297,7 +297,7 @@ var interfaceColController = function (_baseController) {
}, {
key: 'addCase',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(ctx) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
@ -376,6 +376,97 @@ var interfaceColController = function (_baseController) {
return addCase;
}()
/**
* 增加一个接口用例
* @interface /col/up_case
* @method POST
* @category col
* @foldnumber 10
* @param {number} id
* @param {String} casename
* @param {String} domain
* @param {String} path
* @param {String} method
* @param {Object} req_query
* @param {Object} req_headers
* @param {String} req_body_type
* @param {Array} req_body_form
* @param {String} req_body_other
* @returns {Object}
* @example
*/
}, {
key: 'upCase',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.prev = 0;
params = ctx.request.body;
params = _yapi2.default.commons.handleParams(params, {
id: 'number',
casename: 'string',
domain: 'string',
method: 'string'
});
if (params.id) {
_context5.next = 5;
break;
}
return _context5.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用例id不能为空'));
case 5:
if (params.casename) {
_context5.next = 7;
break;
}
return _context5.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '用例名称不能为空'));
case 7:
params.uid = this.getUid();
_context5.next = 10;
return this.caseModel.up(params);
case 10:
result = _context5.sent;
ctx.body = _yapi2.default.commons.resReturn(result);
_context5.next = 17;
break;
case 14:
_context5.prev = 14;
_context5.t0 = _context5['catch'](0);
ctx.body = _yapi2.default.commons.resReturn(null, 402, _context5.t0.message);
case 17:
case 'end':
return _context5.stop();
}
}
}, _callee5, this, [[0, 14]]);
}));
function upCase(_x5) {
return _ref5.apply(this, arguments);
}
return upCase;
}()
/**
* 获取一个接口用例详情
* @interface /col/case
@ -390,74 +481,16 @@ var interfaceColController = function (_baseController) {
}, {
key: 'getCase',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(ctx) {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ctx) {
var id, result;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.prev = 0;
id = ctx.query.caseid;
_context5.next = 4;
return this.caseModel.get(id);
case 4:
result = _context5.sent;
ctx.body = _yapi2.default.commons.resReturn(result);
_context5.next = 11;
break;
case 8:
_context5.prev = 8;
_context5.t0 = _context5['catch'](0);
ctx.body = _yapi2.default.commons.resReturn(null, 400, _context5.t0.message);
case 11:
case 'end':
return _context5.stop();
}
}
}, _callee5, this, [[0, 8]]);
}));
function getCase(_x5) {
return _ref5.apply(this, arguments);
}
return getCase;
}()
/**
* 更新一个接口集name或描述
* @interface /col/up_col
* @method POST
* @category col
* @foldnumber 10
* @param {String} name
* @param {String} desc
* @returns {Object}
* @example
*/
}, {
key: 'upCol',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.prev = 0;
params = ctx.request.body;
id = ctx.query.caseid;
_context6.next = 4;
return this.colModel.up(params.col_id, {
name: params.name,
desc: params.desc,
up_time: _yapi2.default.commons.time()
});
return this.caseModel.get(id);
case 4:
result = _context6.sent;
@ -480,10 +513,68 @@ var interfaceColController = function (_baseController) {
}, _callee6, this, [[0, 8]]);
}));
function upCol(_x6) {
function getCase(_x6) {
return _ref6.apply(this, arguments);
}
return getCase;
}()
/**
* 更新一个接口集name或描述
* @interface /col/up_col
* @method POST
* @category col
* @foldnumber 10
* @param {String} name
* @param {String} desc
* @returns {Object}
* @example
*/
}, {
key: 'upCol',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ctx) {
var params, result;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
_context7.prev = 0;
params = ctx.request.body;
_context7.next = 4;
return this.colModel.up(params.col_id, {
name: params.name,
desc: params.desc,
up_time: _yapi2.default.commons.time()
});
case 4:
result = _context7.sent;
ctx.body = _yapi2.default.commons.resReturn(result);
_context7.next = 11;
break;
case 8:
_context7.prev = 8;
_context7.t0 = _context7['catch'](0);
ctx.body = _yapi2.default.commons.resReturn(null, 400, _context7.t0.message);
case 11:
case 'end':
return _context7.stop();
}
}
}, _callee7, this, [[0, 8]]);
}));
function upCol(_x7) {
return _ref7.apply(this, arguments);
}
return upCol;
}()
@ -501,15 +592,15 @@ var interfaceColController = function (_baseController) {
}, {
key: 'upCaseIndex',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(ctx) {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx) {
var _this2 = this;
var params;
return _regenerator2.default.wrap(function _callee7$(_context7) {
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context7.prev = _context7.next) {
switch (_context8.prev = _context8.next) {
case 0:
_context7.prev = 0;
_context8.prev = 0;
params = ctx.request.body;
if (!params || !Array.isArray(params)) {
@ -523,24 +614,24 @@ var interfaceColController = function (_baseController) {
}
});
return _context7.abrupt('return', ctx.body = _yapi2.default.commons.resReturn('success'));
return _context8.abrupt('return', ctx.body = _yapi2.default.commons.resReturn('success'));
case 7:
_context7.prev = 7;
_context7.t0 = _context7['catch'](0);
_context8.prev = 7;
_context8.t0 = _context8['catch'](0);
ctx.body = _yapi2.default.commons.resReturn(null, 400, _context7.t0.message);
ctx.body = _yapi2.default.commons.resReturn(null, 400, _context8.t0.message);
case 10:
case 'end':
return _context7.stop();
return _context8.stop();
}
}
}, _callee7, this, [[0, 7]]);
}, _callee8, this, [[0, 7]]);
}));
function upCaseIndex(_x7) {
return _ref7.apply(this, arguments);
function upCaseIndex(_x8) {
return _ref8.apply(this, arguments);
}
return upCaseIndex;
@ -560,108 +651,31 @@ var interfaceColController = function (_baseController) {
}, {
key: 'delCol',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(ctx) {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx) {
var id, colData, auth, result;
return _regenerator2.default.wrap(function _callee8$(_context8) {
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context8.prev = _context8.next) {
switch (_context9.prev = _context9.next) {
case 0:
_context8.prev = 0;
_context9.prev = 0;
id = ctx.query.col_id;
_context8.next = 4;
_context9.next = 4;
return this.colModel.get(id);
case 4:
colData = _context8.sent;
colData = _context9.sent;
if (!colData) {
ctx.body = _yapi2.default.commons.resReturn(null, 400, "不存在的id");
}
if (!(colData.uid !== this.getUid())) {
_context8.next = 12;
break;
}
_context8.next = 9;
return this.checkAuth(colData.project_id, 'project', 'danger');
case 9:
auth = _context8.sent;
if (auth) {
_context8.next = 12;
break;
}
return _context8.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '没有权限'));
case 12:
_context8.next = 14;
return this.colModel.del(id);
case 14:
result = _context8.sent;
_context8.next = 17;
return this.caseModel.delByCol(id);
case 17:
return _context8.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result));
case 20:
_context8.prev = 20;
_context8.t0 = _context8['catch'](0);
_yapi2.default.commons.resReturn(null, 400, _context8.t0.message);
case 23:
case 'end':
return _context8.stop();
}
}
}, _callee8, this, [[0, 20]]);
}));
function delCol(_x8) {
return _ref8.apply(this, arguments);
}
return delCol;
}()
/**
*
* @param {*} ctx
*/
}, {
key: 'delCase',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(ctx) {
var caseid, caseData, auth, result;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.prev = 0;
caseid = ctx.query.caseid;
_context9.next = 4;
return this.caseModel.get(caseid);
case 4:
caseData = _context9.sent;
if (!caseData) {
ctx.body = _yapi2.default.commons.resReturn(null, 400, "不存在的caseid");
}
if (!(caseData.uid !== this.getUid())) {
_context9.next = 12;
break;
}
_context9.next = 9;
return this.checkAuth(caseData.project_id, 'project', 'danger');
return this.checkAuth(colData.project_id, 'project', 'danger');
case 9:
auth = _context9.sent;
@ -675,30 +689,107 @@ var interfaceColController = function (_baseController) {
case 12:
_context9.next = 14;
return this.caseModel.del(caseid);
return this.colModel.del(id);
case 14:
result = _context9.sent;
_context9.next = 17;
return this.caseModel.delByCol(id);
case 17:
return _context9.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result));
case 18:
_context9.prev = 18;
case 20:
_context9.prev = 20;
_context9.t0 = _context9['catch'](0);
_yapi2.default.commons.resReturn(null, 400, _context9.t0.message);
case 21:
case 23:
case 'end':
return _context9.stop();
}
}
}, _callee9, this, [[0, 18]]);
}, _callee9, this, [[0, 20]]);
}));
function delCase(_x9) {
function delCol(_x9) {
return _ref9.apply(this, arguments);
}
return delCol;
}()
/**
*
* @param {*} ctx
*/
}, {
key: 'delCase',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx) {
var caseid, caseData, auth, result;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_context10.prev = 0;
caseid = ctx.query.caseid;
_context10.next = 4;
return this.caseModel.get(caseid);
case 4:
caseData = _context10.sent;
if (!caseData) {
ctx.body = _yapi2.default.commons.resReturn(null, 400, "不存在的caseid");
}
if (!(caseData.uid !== this.getUid())) {
_context10.next = 12;
break;
}
_context10.next = 9;
return this.checkAuth(caseData.project_id, 'project', 'danger');
case 9:
auth = _context10.sent;
if (auth) {
_context10.next = 12;
break;
}
return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '没有权限'));
case 12:
_context10.next = 14;
return this.caseModel.del(caseid);
case 14:
result = _context10.sent;
return _context10.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result));
case 18:
_context10.prev = 18;
_context10.t0 = _context10['catch'](0);
_yapi2.default.commons.resReturn(null, 400, _context10.t0.message);
case 21:
case 'end':
return _context10.stop();
}
}
}, _callee10, this, [[0, 18]]);
}));
function delCase(_x10) {
return _ref10.apply(this, arguments);
}
return delCase;
}()
}]);

View File

@ -75,7 +75,7 @@ var logController = function (_baseController) {
(0, _createClass3.default)(logController, [{
key: 'list',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var typeid, page, limit, type, result, count;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {

View File

@ -148,7 +148,7 @@ var projectController = function (_baseController) {
}, {
key: 'add',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var params, checkRepeat, data, result, colInst, catInst, username;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -323,7 +323,7 @@ var projectController = function (_baseController) {
}, {
key: 'addMember',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
var params, check, userdata, result, username, project;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
@ -453,7 +453,7 @@ var projectController = function (_baseController) {
}, {
key: 'delMember',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var params, check, result, username, project, member;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -559,7 +559,7 @@ var projectController = function (_baseController) {
}, {
key: 'getUserdata',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(uid, role) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(uid, role) {
var userInst, userData;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
@ -617,7 +617,7 @@ var projectController = function (_baseController) {
}, {
key: 'getMemberList',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(ctx) {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(ctx) {
var params, project;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
@ -679,7 +679,7 @@ var projectController = function (_baseController) {
}, {
key: 'get',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ctx) {
var params, result, catInst, cat;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
@ -764,7 +764,7 @@ var projectController = function (_baseController) {
}, {
key: 'list',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(ctx) {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ctx) {
var group_id, auth, result, follow, uids, _users, users;
return _regenerator2.default.wrap(function _callee7$(_context7) {
@ -864,7 +864,7 @@ var projectController = function (_baseController) {
}, {
key: 'del',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(ctx) {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx) {
var id, interfaceInst, interfaceColInst, interfaceCaseInst, result;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
@ -957,7 +957,7 @@ var projectController = function (_baseController) {
}, {
key: 'changeMemberRole',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(ctx) {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx) {
var params, projectInst, check, result, username, project, member;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
@ -1079,7 +1079,7 @@ var projectController = function (_baseController) {
}, {
key: 'upSet',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx) {
var id, data, result;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
@ -1158,7 +1158,7 @@ var projectController = function (_baseController) {
}, {
key: 'up',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(ctx) {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx) {
var id, params, projectData, checkRepeat, data, result, username;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
@ -1305,7 +1305,7 @@ var projectController = function (_baseController) {
}, {
key: 'upSet',
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12(ctx) {
var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(ctx) {
var id, data, result;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
@ -1378,7 +1378,7 @@ var projectController = function (_baseController) {
}, {
key: 'search',
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13(ctx) {
var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(ctx) {
var q, projectList, groupList, projectRules, groupRules, queryList;
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
@ -1453,7 +1453,7 @@ var projectController = function (_baseController) {
}, {
key: 'download',
value: function () {
var _ref14 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14(ctx) {
var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(ctx) {
var project_id, interfaceInst, count, arr, fileName, res;
return _regenerator2.default.wrap(function _callee14$(_context14) {
while (1) {

View File

@ -99,7 +99,7 @@ var userController = function (_baseController) {
(0, _createClass3.default)(userController, [{
key: 'login',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var userInst, email, password, result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
@ -190,7 +190,7 @@ var userController = function (_baseController) {
}, {
key: 'logout',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(ctx) {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(ctx) {
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
@ -248,7 +248,7 @@ var userController = function (_baseController) {
}, {
key: 'loginByToken',
value: function () {
var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(ctx) {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(ctx) {
var config, token, ret, login;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
@ -300,7 +300,7 @@ var userController = function (_baseController) {
}, {
key: 'handleThirdLogin',
value: function () {
var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(email, username) {
var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(email, username) {
var user, data, passsalt, userInst;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
@ -384,7 +384,7 @@ var userController = function (_baseController) {
}, {
key: 'changePassword',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(ctx) {
var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(ctx) {
var params, userInst, user, passsalt, data, result;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
@ -512,7 +512,7 @@ var userController = function (_baseController) {
}, {
key: 'reg',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(ctx) {
var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(ctx) {
var userInst, params, checkRepeat, passsalt, data, user;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
@ -636,7 +636,7 @@ var userController = function (_baseController) {
}, {
key: 'list',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7(ctx) {
var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(ctx) {
var page, limit, userInst, user, count;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
@ -694,7 +694,7 @@ var userController = function (_baseController) {
}, {
key: 'findById',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(ctx) {
var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(ctx) {
var userInst, id, result;
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
@ -770,7 +770,7 @@ var userController = function (_baseController) {
}, {
key: 'del',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9(ctx) {
var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee9(ctx) {
var userInst, id, result;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
@ -846,7 +846,7 @@ var userController = function (_baseController) {
}, {
key: 'update',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(ctx) {
var _ref10 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee10(ctx) {
var params, userInst, id, data, checkRepeat, result;
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
@ -952,7 +952,7 @@ var userController = function (_baseController) {
}, {
key: 'uploadAvatar',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(ctx) {
var _ref11 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee11(ctx) {
var basecode, pngPrefix, jpegPrefix, type, strLength, avatarInst, result;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
@ -1054,7 +1054,7 @@ var userController = function (_baseController) {
}, {
key: 'avatar',
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee12(ctx) {
var _ref12 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee12(ctx) {
var uid, avatarInst, data, dataBuffer, type;
return _regenerator2.default.wrap(function _callee12$(_context12) {
while (1) {
@ -1118,7 +1118,7 @@ var userController = function (_baseController) {
}, {
key: 'search',
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee13(ctx) {
var _ref13 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee13(ctx) {
var q, queryList, rules, filteredRes;
return _regenerator2.default.wrap(function _callee13$(_context13) {
while (1) {
@ -1190,7 +1190,7 @@ var userController = function (_baseController) {
}, {
key: 'project',
value: function () {
var _ref14 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee14(ctx) {
var _ref14 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee14(ctx) {
var _ctx$request$query, id, type, result, interfaceInst, interfaceData, projectInst, projectData, ownerAuth, devAuth, groupInst, groupData, _ownerAuth, _devAuth;
return _regenerator2.default.wrap(function _callee14$(_context14) {

View File

@ -20,6 +20,10 @@ var _user = require('./models/user.js');
var _user2 = _interopRequireDefault(_user);
var _mongoose = require('mongoose');
var _mongoose2 = _interopRequireDefault(_mongoose);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
_yapi2.default.commons = _commons2.default;
@ -49,13 +53,106 @@ function setupSql() {
up_time: _yapi2.default.commons.time()
});
result.then(function () {
_fsExtra2.default.ensureFileSync(_yapi2.default.path.join(_yapi2.default.WEBROOT_RUNTIME, 'init.lock'));
console.log('\u521D\u59CB\u5316\u7BA1\u7406\u5458\u8D26\u53F7 "' + _yapi2.default.WEBCONFIG.adminAccount + '" \u6210\u529F'); // eslint-disable-line
process.exit(0);
}, function (err) {
console.log('\u521D\u59CB\u5316\u7BA1\u7406\u5458\u8D26\u53F7 "' + _yapi2.default.WEBCONFIG.adminAccount + '" \u5931\u8D25, ' + err.message); // eslint-disable-line
process.exit(0);
_yapi2.default.connect.then(function () {
var userCol = _mongoose2.default.connection.db.collection('user');
userCol.ensureIndex({
username: 1
});
userCol.ensureIndex({
email: 1
}, {
unique: true
});
var projectCol = _mongoose2.default.connection.db.collection('project');
projectCol.ensureIndex({
uid: 1
});
projectCol.ensureIndex({
name: 1
});
projectCol.ensureIndex({
group_id: 1
});
var logCol = _mongoose2.default.connection.db.collection('log');
logCol.ensureIndex({
uid: 1
});
logCol.ensureIndex({
typeid: 1,
type: 1
});
var interfaceColCol = _mongoose2.default.connection.db.collection('interface_col');
interfaceColCol.ensureIndex({
uid: 1
});
interfaceColCol.ensureIndex({
project_id: 1
});
var interfaceCatCol = _mongoose2.default.connection.db.collection('interface_cat');
interfaceCatCol.ensureIndex({
uid: 1
});
interfaceCatCol.ensureIndex({
project_id: 1
});
var interfaceCaseCol = _mongoose2.default.connection.db.collection('interface_case');
interfaceCaseCol.ensureIndex({
uid: 1
});
interfaceCaseCol.ensureIndex({
col_id: 1
});
interfaceCaseCol.ensureIndex({
project_id: 1
});
var interfaceCol = _mongoose2.default.connection.db.collection('interface');
interfaceCol.ensureIndex({
uid: 1
});
interfaceCol.ensureIndex({
path: 1,
method: 1
});
interfaceCol.ensureIndex({
project_id: 1
});
var groupCol = _mongoose2.default.connection.db.collection('group');
groupCol.ensureIndex({
uid: 1
});
groupCol.ensureIndex({
group_name: 1
});
var avatarCol = _mongoose2.default.connection.db.collection('avatar');
avatarCol.ensureIndex({
uid: 1
});
var followCol = _mongoose2.default.connection.db.collection('follow');
followCol.ensureIndex({
uid: 1
});
followCol.ensureIndex({
project_id: 1
});
result.then(function () {
_fsExtra2.default.ensureFileSync(_yapi2.default.path.join(_yapi2.default.WEBROOT_RUNTIME, 'init.lock'));
console.log('\u521D\u59CB\u5316\u7BA1\u7406\u5458\u8D26\u53F7 "' + _yapi2.default.WEBCONFIG.adminAccount + '" \u6210\u529F'); // eslint-disable-line
process.exit(0);
}, function (err) {
console.log('\u521D\u59CB\u5316\u7BA1\u7406\u5458\u8D26\u53F7 "' + _yapi2.default.WEBCONFIG.adminAccount + '" \u5931\u8D25, ' + err.message); // eslint-disable-line
process.exit(0);
});
});
}

View File

@ -47,7 +47,7 @@ function matchApi(apiPath, apiRule) {
}
module.exports = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx, next) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx, next) {
var hostname, config, path, paths, projectId, projectInst, project, interfaceData, newData, newpath, interfaceInst, _newData, findInterface, res;
return _regenerator2.default.wrap(function _callee$(_context) {

View File

@ -37,7 +37,7 @@ var baseModel = function () {
this.schema.plugin(_mongooseAutoIncrement2.default.plugin, {
model: this.name,
field: this.getPrimaryKey(),
startAt: 101,
startAt: 11,
incrementBy: _yapi2.default.commons.rand(1, 10)
});
}

View File

@ -306,6 +306,10 @@ var routerConfig = {
action: "addCase",
path: "add_case",
method: "post"
}, {
action: "upCase",
path: "up_case",
method: "post"
}, {
action: "getCase",
path: "case",
@ -351,7 +355,7 @@ function createAction(controller, action, path, method) {
var _this = this;
router[method]("/api" + INTERFACE_CONFIG[controller].prefix + path, function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var inst;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {

View File

@ -24,7 +24,7 @@ function model(model, schema) {
return _yapi2.default.connect.model(model, schema, model);
}
function connect() {
function connect(callback) {
_mongoose2.default.Promise = global.Promise;
var config = _yapi2.default.WEBCONFIG;
@ -39,6 +39,9 @@ function connect() {
db.then(function () {
_yapi2.default.commons.log('mongodb load success...');
if (typeof callback === 'function') {
callback.call(db);
}
}, function (err) {
_yapi2.default.commons.log(err, 'Mongo connect error');
});

View File

@ -26,7 +26,7 @@ function websocket(app) {
return next(ctx);
});
router.get('/api/interface/solve_conflict', function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(ctx) {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(ctx) {
var inst;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {

View File

@ -4,6 +4,7 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>YAPI-高效、易用、功能强大的api管理平台</title>
<link rel="icon" type="image/png" sizes="192x192" href="/image/favicon.png">
<link rel="stylesheet" href="http://127.0.0.1:4000/yapi/prd/index@dev.css">
</head>
<body>

BIN
static/image/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -4,8 +4,9 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>YAPI-高效、易用、功能强大的api管理平台</title>
<link rel="icon" type="image/png" sizes="192x192" href="/image/favicon.png">
<script>
document.write('<script src="prd/assets.js?v=' + Math.random() + '"><\/script>');
document.write('<script src="/prd/assets.js?v=' + Math.random() + '"><\/script>');
</script>

23
ykit.js
View File

@ -9,19 +9,22 @@ var assetsPluginInstance = new AssetsPlugin({
function handleCommonsChunk(webpackConfig) {
var commonsChunk = {
//filename: 'scripts/[name]@[chunkhash][ext]',
vendors: {
lib: ['react', 'redux',
'redux-thunk',
'react-dom',
'redux-promise',
'react-router',
'react-router-dom',
'prop-types'
],
lib2: [
'prop-types',
'axios',
'moment'
],
lib2: [
'brace',
'mockjs',
'json5'
]
}
},
@ -78,7 +81,7 @@ module.exports = {
"regenerator": true
}]);
defaultQuery.plugins.push('transform-decorators-legacy');
// defaultQuery.plugins.push(["import", { libraryName: "antd", style: "css" }])
defaultQuery.plugins.push(["import", { libraryName: "antd"}])
return defaultQuery;
}
}
@ -93,19 +96,19 @@ module.exports = {
var ENV_PARAMS = {};
switch (this.env) {
case 'local':
ENV_PARAMS = { development: true };
ENV_PARAMS = 'dev';
break;
case 'dev':
ENV_PARAMS = { development: true };
ENV_PARAMS = 'dev';
break;
case 'prd':
ENV_PARAMS = { development: false };
ENV_PARAMS = 'production';
break;
default:
}
baseConfig.plugins.push(new this.webpack.DefinePlugin({
ENV_PARAMS: JSON.stringify(ENV_PARAMS)
'process.env.NODE_ENV': JSON.stringify(ENV_PARAMS)
}))
//初始化配置