mirror of
https://github.com/YMFE/yapi.git
synced 2025-02-23 13:59:28 +08:00
Merge branch 'dev' of gitlab.corp.qunar.com:mfe/yapi into dev
This commit is contained in:
commit
eabba79b2e
@ -32,14 +32,14 @@ class News extends Component {
|
||||
getMockUrl: PropTypes.func
|
||||
}
|
||||
componentWillMount(){
|
||||
const that = this;
|
||||
this.props.getMockUrl(2724).then(function(data){
|
||||
const { prd_host, basepath, protocol } = data.payload.data.data;
|
||||
const mockURL = `${protocol}://${prd_host}${basepath}/{path}`;
|
||||
that.setState({
|
||||
mockURL: mockURL
|
||||
})
|
||||
})
|
||||
//const that = this;
|
||||
// this.props.getMockUrl(2724).then(function(data){
|
||||
// const { prd_host, basepath, protocol } = data.payload.data.data;
|
||||
// const mockURL = `${protocol}://${prd_host}${basepath}/{path}`;
|
||||
// that.setState({
|
||||
// mockURL: mockURL
|
||||
// })
|
||||
// })
|
||||
}
|
||||
render () {
|
||||
return (
|
||||
|
@ -31,14 +31,14 @@ class Activity extends Component {
|
||||
match: PropTypes.object
|
||||
}
|
||||
componentWillMount(){
|
||||
const that = this;
|
||||
this.props.getMockUrl(2724).then(function(data){
|
||||
const { prd_host, basepath, protocol } = data.payload.data.data;
|
||||
const mockURL = `${protocol}://${prd_host}${basepath}/{path}`;
|
||||
that.setState({
|
||||
mockURL: mockURL
|
||||
})
|
||||
})
|
||||
//const that = this;
|
||||
// this.props.getMockUrl(2724).then(function(data){
|
||||
// const { prd_host, basepath, protocol } = data.payload.data.data;
|
||||
// const mockURL = `${protocol}://${prd_host}${basepath}/{path}`;
|
||||
// that.setState({
|
||||
// mockURL: mockURL
|
||||
// })
|
||||
// })
|
||||
}
|
||||
render () {
|
||||
return (
|
||||
|
@ -1,7 +1,7 @@
|
||||
import React, { Component } from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { Row, Col, Tabs } from 'antd';
|
||||
import { Route, Switch } from 'react-router-dom';
|
||||
import { Route, Switch, matchPath } from 'react-router-dom';
|
||||
|
||||
import './interface.scss'
|
||||
|
||||
@ -13,14 +13,19 @@ import InterfaceColMenu from './InterfaceCol/InterfaceColMenu.js'
|
||||
import InterfaceColContent from './InterfaceCol/InterfaceColContent.js'
|
||||
import InterfaceCaseContent from './InterfaceCol/InterfaceCaseContent.js'
|
||||
|
||||
const contentRouter = {
|
||||
path: '/project/:id/interface/:action/:actionId',
|
||||
exact: true
|
||||
}
|
||||
|
||||
const InterfaceRoute = (props) => {
|
||||
let C;
|
||||
if (props.match.params.action === 'api') {
|
||||
if(!props.match.params.actionId){
|
||||
if (!props.match.params.actionId) {
|
||||
C = InterfaceList
|
||||
}else if(!isNaN(props.match.params.actionId)){
|
||||
} else if (!isNaN(props.match.params.actionId)) {
|
||||
C = InterfaceContent;
|
||||
}else if(props.match.params.actionId.indexOf('cat_')===0){
|
||||
} else if (props.match.params.actionId.indexOf('cat_') === 0) {
|
||||
C = InterfaceList
|
||||
}
|
||||
} else if (props.match.params.action === 'col') {
|
||||
@ -39,7 +44,8 @@ InterfaceRoute.propTypes = {
|
||||
class Interface extends Component {
|
||||
static propTypes = {
|
||||
match: PropTypes.object,
|
||||
history: PropTypes.object
|
||||
history: PropTypes.object,
|
||||
location: PropTypes.object
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
@ -47,12 +53,11 @@ class Interface extends Component {
|
||||
this.state = {
|
||||
curkey: this.props.match.params.action
|
||||
}
|
||||
console.log(this.props)
|
||||
}
|
||||
|
||||
onChange = (action) => {
|
||||
let params = this.props.match.params;
|
||||
this.props.history.push('/project/'+params.id + '/interface/' + action)
|
||||
this.props.history.push('/project/' + params.id + '/interface/' + action)
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -64,7 +69,7 @@ class Interface extends Component {
|
||||
<div className="left-menu">
|
||||
<Tabs type="card" activeKey={activeKey} onChange={() => this.onChange(action)}>
|
||||
<Tabs.TabPane tab="接口列表" key="api">
|
||||
<InterfaceMenu projectId={this.props.match.params.id} />
|
||||
<InterfaceMenu router={matchPath(this.props.location.pathname, contentRouter)} projectId={this.props.match.params.id} />
|
||||
</Tabs.TabPane>
|
||||
<Tabs.TabPane tab="接口集合" key="colOrCase" >
|
||||
<InterfaceColMenu />
|
||||
@ -78,7 +83,7 @@ class Interface extends Component {
|
||||
<div className="right-content">
|
||||
<Switch>
|
||||
<Route exact path="/project/:id/interface/:action" component={InterfaceRoute} />
|
||||
<Route exact path="/project/:id/interface/:action/:actionId" component={InterfaceRoute} />
|
||||
<Route {...contentRouter} component={InterfaceRoute} />
|
||||
</Switch>
|
||||
</div>
|
||||
</Col>
|
||||
|
@ -0,0 +1,76 @@
|
||||
import React,{Component} from 'react'
|
||||
import PropTypes from 'prop-types'
|
||||
import { Form, Input, Button } from 'antd';
|
||||
const FormItem = Form.Item;
|
||||
function hasErrors(fieldsError) {
|
||||
return Object.keys(fieldsError).some(field => fieldsError[field]);
|
||||
}
|
||||
class AddInterfaceForm extends Component {
|
||||
static propTypes = {
|
||||
form: PropTypes.object,
|
||||
onSubmit: PropTypes.func,
|
||||
onCancel: PropTypes.func,
|
||||
catdata: PropTypes.object
|
||||
}
|
||||
handleSubmit = (e) => {
|
||||
e.preventDefault();
|
||||
this.props.form.validateFields((err, values) => {
|
||||
if (!err) {
|
||||
this.props.onSubmit(values)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
render() {
|
||||
const { getFieldDecorator, getFieldsError } = this.props.form;
|
||||
const formItemLayout = {
|
||||
labelCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 6 }
|
||||
},
|
||||
wrapperCol: {
|
||||
xs: { span: 24 },
|
||||
sm: { span: 14 }
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
|
||||
<Form onSubmit={this.handleSubmit}>
|
||||
<FormItem
|
||||
{...formItemLayout}
|
||||
label="分类名"
|
||||
>
|
||||
{getFieldDecorator('name', {
|
||||
rules: [{
|
||||
required: true, message: '清输入分类名称!'
|
||||
}],
|
||||
initialValue: this.props.catdata? this.props.catdata.name || null: null
|
||||
})(
|
||||
<Input placeholder="分类名称" />
|
||||
)}
|
||||
</FormItem>
|
||||
|
||||
|
||||
<br />
|
||||
<FormItem wrapperCol={{ span: 24, offset: 8 }} >
|
||||
<Button onClick={this.props.onCancel} style={{marginRight: "10px"}} >取消</Button>
|
||||
<Button
|
||||
type="primary"
|
||||
htmlType="submit"
|
||||
disabled={hasErrors(getFieldsError())}
|
||||
>
|
||||
提交
|
||||
</Button>
|
||||
</FormItem>
|
||||
|
||||
</Form>
|
||||
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default Form.create()(AddInterfaceForm);
|
@ -10,12 +10,14 @@ class AddInterfaceForm extends Component {
|
||||
static propTypes = {
|
||||
form: PropTypes.object,
|
||||
onSubmit: PropTypes.func,
|
||||
onCancel: PropTypes.func
|
||||
onCancel: PropTypes.func,
|
||||
catid: PropTypes.number
|
||||
}
|
||||
handleSubmit = (e) => {
|
||||
e.preventDefault();
|
||||
this.props.form.validateFields((err, values) => {
|
||||
if (!err) {
|
||||
values.catid = this.props.catid
|
||||
this.props.onSubmit(values)
|
||||
}
|
||||
});
|
||||
|
@ -35,19 +35,25 @@ class Content extends Component {
|
||||
this.state = {
|
||||
curtab: 'view'
|
||||
}
|
||||
this._actionId = 0;
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.handleRequest(this.props)
|
||||
const params = this.props.match.params;
|
||||
this.actionId = params.actionId;
|
||||
this.handleRequest(this.props);
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const params = nextProps.match.params;
|
||||
if(params.actionId !== this.actionId){
|
||||
this.actionId = params.actionId;
|
||||
this.handleRequest(nextProps)
|
||||
}
|
||||
}
|
||||
|
||||
handleRequest(nextProps) {
|
||||
let matchParams = nextProps.match.params;
|
||||
if (matchParams.actionId && this._actionId !== matchParams.actionId) {
|
||||
this._actionId = matchParams.actionId;
|
||||
this.props.fetchInterfaceData(matchParams.actionId)
|
||||
}
|
||||
const params = nextProps.match.params;
|
||||
this.props.fetchInterfaceData(params.actionId)
|
||||
this.setState({
|
||||
curtab: 'view'
|
||||
})
|
||||
|
@ -1,9 +1,10 @@
|
||||
import React, { Component } from 'react'
|
||||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types'
|
||||
import { fetchInterfaceList, fetchInterfaceData, addInterfaceData, deleteInterfaceData } from '../../../../reducer/modules/interface.js';
|
||||
import { fetchInterfaceList, fetchInterfaceData, deleteInterfaceData, deleteInterfaceCatData, initInterface } from '../../../../reducer/modules/interface.js';
|
||||
import { Menu, Input, Icon, Tag, Modal, message, Tree, Dropdown } from 'antd';
|
||||
import AddInterfaceForm from './AddInterfaceForm';
|
||||
import AddInterfaceCatForm from './AddInterfaceCatForm';
|
||||
import axios from 'axios'
|
||||
import { Link, withRouter } from 'react-router-dom';
|
||||
|
||||
@ -22,8 +23,9 @@ const TreeNode = Tree.TreeNode;
|
||||
{
|
||||
fetchInterfaceList,
|
||||
fetchInterfaceData,
|
||||
addInterfaceData,
|
||||
deleteInterfaceData
|
||||
deleteInterfaceCatData,
|
||||
deleteInterfaceData,
|
||||
initInterface
|
||||
}
|
||||
)
|
||||
class InterfaceMenu extends Component {
|
||||
@ -37,13 +39,19 @@ class InterfaceMenu extends Component {
|
||||
fetchInterfaceData: PropTypes.func,
|
||||
addInterfaceData: PropTypes.func,
|
||||
deleteInterfaceData: PropTypes.func,
|
||||
history: PropTypes.object
|
||||
initInterface: PropTypes.func,
|
||||
history: PropTypes.object,
|
||||
router: PropTypes.object
|
||||
}
|
||||
|
||||
showModal = () => {
|
||||
this.setState({
|
||||
visible: true
|
||||
});
|
||||
/**
|
||||
* @param {String} key
|
||||
*/
|
||||
changeModal = (key, status) => {
|
||||
//visible add_cat_modal_visible change_cat_modal_visible del_cat_modal_visible
|
||||
let newState = {}
|
||||
newState[key] = status
|
||||
this.setState(newState);
|
||||
}
|
||||
|
||||
handleCancel = () => {
|
||||
@ -58,12 +66,16 @@ class InterfaceMenu extends Component {
|
||||
curKey: null,
|
||||
visible: false,
|
||||
delIcon: null,
|
||||
filter: ''
|
||||
curCatid: null,
|
||||
add_cat_modal_visible: false,
|
||||
change_cat_modal_visible: false,
|
||||
del_cat_modal_visible: false,
|
||||
curCatdata: {}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async handleRequest() {
|
||||
this.props.initInterface()
|
||||
await this.props.fetchInterfaceList(this.props.projectId);
|
||||
|
||||
// if(!params.actionId){
|
||||
@ -90,7 +102,7 @@ class InterfaceMenu extends Component {
|
||||
return message.error(res.data.errmsg);
|
||||
}
|
||||
message.success('接口添加成功')
|
||||
this.props.addInterfaceData(res.data.data)
|
||||
this.props.fetchInterfaceList(this.props.projectId)
|
||||
this.setState({
|
||||
visible: false
|
||||
});
|
||||
@ -98,21 +110,65 @@ class InterfaceMenu extends Component {
|
||||
})
|
||||
}
|
||||
|
||||
handleAddInterfaceCat = (data) => {
|
||||
data.project_id = this.props.projectId;
|
||||
axios.post('/api/interface/add_cat', data).then((res) => {
|
||||
if (res.data.errcode !== 0) {
|
||||
return message.error(res.data.errmsg);
|
||||
}
|
||||
message.success('接口分类添加成功')
|
||||
this.props.fetchInterfaceList(this.props.projectId)
|
||||
this.setState({
|
||||
add_cat_modal_visible: false
|
||||
});
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
handleChangeInterfaceCat = (data) => {
|
||||
|
||||
let params = {
|
||||
catid: this.state.curCatdata._id,
|
||||
name: data.name
|
||||
}
|
||||
|
||||
axios.post('/api/interface/up_cat', params).then((res) => {
|
||||
if (res.data.errcode !== 0) {
|
||||
return message.error(res.data.errmsg);
|
||||
}
|
||||
message.success('接口分类更新成功')
|
||||
this.props.fetchInterfaceList(this.props.projectId)
|
||||
this.setState({
|
||||
change_cat_modal_visible: false
|
||||
});
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
showConfirm = (id) => {
|
||||
let that = this;
|
||||
confirm({
|
||||
title: '您确认删除此接口',
|
||||
content: '温馨提示:接口删除后,无法恢复',
|
||||
onOk() {
|
||||
that.props.deleteInterfaceData(id)
|
||||
async onOk() {
|
||||
await that.props.deleteInterfaceData(id, that.props.projectId)
|
||||
await that.props.fetchInterfaceList(that.props.projectId)
|
||||
},
|
||||
onCancel() { }
|
||||
});
|
||||
}
|
||||
|
||||
delInterface = (id) => {
|
||||
|
||||
this.props.deleteInterfaceData(id)
|
||||
showDelCatConfirm = (catid) => {
|
||||
let that = this;
|
||||
confirm({
|
||||
title: '您确认删除此接口分类',
|
||||
content: '温馨提示:该操作会删除该分类下所有接口,接口删除后无法恢复',
|
||||
async onOk() {
|
||||
await that.props.deleteInterfaceCatData(catid, that.props.projectId)
|
||||
await that.props.fetchInterfaceList(that.props.projectId)
|
||||
},
|
||||
onCancel() { }
|
||||
});
|
||||
}
|
||||
|
||||
enterItem = (id) => {
|
||||
@ -129,10 +185,7 @@ class InterfaceMenu extends Component {
|
||||
})
|
||||
}
|
||||
|
||||
handleGroup = (e) => {
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
render() {
|
||||
const matchParams = this.props.match.params;
|
||||
@ -150,7 +203,7 @@ class InterfaceMenu extends Component {
|
||||
default: color = "green";
|
||||
}
|
||||
return <TreeNode
|
||||
title={<div onMouseEnter={() => this.enterItem(item._id)} onMouseLeave={this.leaveItem} >
|
||||
title={<div onMouseEnter={() => this.enterItem(item._id)} onMouseLeave={this.leaveItem} >
|
||||
<Link className="interface-item" to={"/project/" + matchParams.id + "/interface/api/" + item._id} ><Tag color={color} className="btn-http" >{item.method}</Tag>{item.title}</Link>
|
||||
<Icon type='delete' className="interface-delete-icon" onClick={() => { this.showConfirm(item._id) }} style={{ display: this.state.delIcon == item._id ? 'block' : 'none' }} />
|
||||
</div>}
|
||||
@ -158,45 +211,100 @@ class InterfaceMenu extends Component {
|
||||
|
||||
}
|
||||
|
||||
const menu = (
|
||||
<Menu>
|
||||
const menu = (item) => {
|
||||
return <Menu>
|
||||
<Menu.Item>
|
||||
<span onClick={this.showModal}>添加接口</span>
|
||||
<span onClick={() => {
|
||||
this.changeModal('visible', true);
|
||||
this.setState({
|
||||
curCatid: item._id
|
||||
})
|
||||
}}>添加接口</span>
|
||||
</Menu.Item>
|
||||
<Menu.Item>
|
||||
<span >修改分类</span>
|
||||
<span onClick={() => {
|
||||
this.changeModal('change_cat_modal_visible', true);
|
||||
this.setState({
|
||||
curCatdata: item
|
||||
})
|
||||
}}>修改分类</span>
|
||||
</Menu.Item>
|
||||
<Menu.Item>
|
||||
<span onClick={this.showModal}>删除分类</span>
|
||||
<span onClick={() => {
|
||||
this.showDelCatConfirm(item._id)
|
||||
}}>删除分类</span>
|
||||
</Menu.Item>
|
||||
</Menu>
|
||||
);
|
||||
};
|
||||
|
||||
const defaultExpandedKeys = ()=>{
|
||||
const {router, inter, list} = this.props, rNull = {expands: [], selects: []};
|
||||
if(list.length === 0) return rNull;
|
||||
if(router){
|
||||
if(!isNaN(router.params.actionId)){
|
||||
let _actionId = parseInt(router.params.actionId, 10)
|
||||
if(!inter._id || inter._id !== _actionId)return rNull;
|
||||
return {
|
||||
expands: ['group-' + inter.catid],
|
||||
selects: [inter._id+""]
|
||||
}
|
||||
}else{
|
||||
let catid = router.params.actionId.substr(4);
|
||||
return {
|
||||
expands: ['group-' + catid],
|
||||
selects: ['group-' + catid]
|
||||
}
|
||||
}
|
||||
}else{
|
||||
return {
|
||||
expands: ['group-' + list[0]._id],
|
||||
selects: ['root']
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const currentKes = defaultExpandedKeys();
|
||||
|
||||
return <div>
|
||||
<div className="interface-filter">
|
||||
<Input onChange={this.onFilter} value={this.state.filter} placeholder="Filter by name" style={{ width: "70%" }} />
|
||||
<Tag color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" /></Tag>
|
||||
<Tag color="#108ee9" style={{ marginLeft: "15px" }} ><Icon type="plus" onClick={() => this.changeModal('add_cat_modal_visible', true)} /></Tag>
|
||||
<Modal
|
||||
title="添加接口"
|
||||
visible={this.state.visible}
|
||||
onOk={this.handleOk}
|
||||
onCancel={this.handleCancel}
|
||||
footer={null}
|
||||
>
|
||||
<AddInterfaceForm onCancel={this.handleCancel} onSubmit={this.handleAddInterface} />
|
||||
<AddInterfaceForm catid={this.state.curCatid} onCancel={() => this.changeModal('visible', false)} onSubmit={this.handleAddInterface} />
|
||||
</Modal>
|
||||
|
||||
<Modal
|
||||
title="添加分类"
|
||||
visible={this.state.add_cat_modal_visible}
|
||||
footer={null}
|
||||
>
|
||||
<AddInterfaceCatForm onCancel={() => this.changeModal('add_cat_modal_visible', false)} onSubmit={this.handleAddInterfaceCat} />
|
||||
</Modal>
|
||||
|
||||
<Modal
|
||||
title="修改分类"
|
||||
visible={this.state.change_cat_modal_visible}
|
||||
footer={null}
|
||||
>
|
||||
<AddInterfaceCatForm catdata={this.state.curCatdata} onCancel={() => this.changeModal('change_cat_modal_visible', false)} onSubmit={this.handleChangeInterfaceCat} />
|
||||
</Modal>
|
||||
</div>
|
||||
{this.props.list.length > 0 ?
|
||||
<Tree
|
||||
className="interface-list"
|
||||
defaultExpandedKeys={['group-' + this.props.list[0]._id]}
|
||||
defaultExpandedKeys={currentKes.expands}
|
||||
defaultSelectedKeys={currentKes.selects}
|
||||
onSelect={this.onSelect}
|
||||
>
|
||||
<TreeNode title={<Link style={{fontSize: '14px'}} to={"/project/" + matchParams.id + "/interface/api"}><Icon type="folder-open" style={{marginRight: 5}} />全部接口</Link>} key="root" />
|
||||
<TreeNode title={<Link style={{ fontSize: '14px' }} to={"/project/" + matchParams.id + "/interface/api"}><Icon type="folder-open" style={{ marginRight: 5 }} />全部接口</Link>} key="root" />
|
||||
{this.props.list.map((item) => {
|
||||
return <TreeNode title={<div>
|
||||
<Link className="interface-item" to={"/project/" + matchParams.id + "/interface/api/cat_" + item._id} ><Icon type="folder-open" style={{marginRight: 5}} />{item.name}</Link>
|
||||
<Dropdown overlay={menu}>
|
||||
return <TreeNode title={<div>
|
||||
<Link className="interface-item" to={"/project/" + matchParams.id + "/interface/api/cat_" + item._id} ><Icon type="folder-open" style={{ marginRight: 5 }} />{item.name}</Link>
|
||||
<Dropdown overlay={menu(item)}>
|
||||
<Icon type='bars' className="interface-delete-icon" />
|
||||
</Dropdown>
|
||||
</div>} key={'group-' + item._id} >
|
||||
|
@ -1,9 +1,10 @@
|
||||
import axios from 'axios'
|
||||
// Actions
|
||||
const INIT_INTERFACE_DATA = 'yapi/interface/INIT_INTERFACE_DATA';
|
||||
const FETCH_INTERFACE_DATA = 'yapi/interface/FETCH_INTERFACE_DATA';
|
||||
const FETCH_INTERFACE_LIST = 'yapi/interface/FETCH_INTERFACE_LIST';
|
||||
const ADD_INTERFACE_DATA = 'yapi/interface/ADD_INTERFACE_DATA';
|
||||
const DELETE_INTERFACE_DATA = 'yapi/interface/DELETE_INTERFACE_DATA';
|
||||
const DELETE_INTERFACE_CAT_DATA = 'yapi/interface/DELETE_INTERFACE_CAT_DATA';
|
||||
const UPDATE_INTERFACE_DATA = 'yapi/interface/UPDATE_INTERFACE_DATA';
|
||||
// const SAVE_INTERFACE_PROJECT_ID = 'yapi/interface/SAVE_INTERFACE_PROJECT_ID';
|
||||
// const GET_INTERFACE_GROUP_LIST = 'yapi/interface/GET_INTERFACE_GROUP_LIST';
|
||||
@ -16,35 +17,14 @@ const initialState = {
|
||||
|
||||
export default (state = initialState, action) => {
|
||||
switch (action.type) {
|
||||
case INIT_INTERFACE_DATA:
|
||||
return initialState
|
||||
case UPDATE_INTERFACE_DATA:
|
||||
return {
|
||||
...state,
|
||||
curdata: Object.assign({}, state.curdata, action.updata)
|
||||
}
|
||||
case DELETE_INTERFACE_DATA:
|
||||
return (() => {
|
||||
|
||||
let newlist = state.list.filter(data => data._id !== action.payload), curdata;
|
||||
|
||||
if (state.list.length > 0) {
|
||||
curdata = state.list[0]
|
||||
} else if (state.list.length == 0) {
|
||||
curdata = {}
|
||||
}
|
||||
|
||||
return {
|
||||
...state,
|
||||
curdata: curdata,
|
||||
list: newlist
|
||||
}
|
||||
})()
|
||||
|
||||
case ADD_INTERFACE_DATA:
|
||||
return {
|
||||
...state,
|
||||
curdata: action.payload,
|
||||
list: [].concat(state.list, action.payload)
|
||||
}
|
||||
case FETCH_INTERFACE_DATA:
|
||||
return {
|
||||
...state,
|
||||
@ -54,13 +34,19 @@ export default (state = initialState, action) => {
|
||||
return {
|
||||
...state,
|
||||
list: action.payload.data
|
||||
// curdata: {}
|
||||
}
|
||||
default:
|
||||
return state
|
||||
}
|
||||
}
|
||||
|
||||
export function initInterface(){
|
||||
return {
|
||||
type: INIT_INTERFACE_DATA
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export function updateInterfaceData(updata) {
|
||||
|
||||
return {
|
||||
@ -73,10 +59,18 @@ export function updateInterfaceData(updata) {
|
||||
}
|
||||
|
||||
export async function deleteInterfaceData(id) {
|
||||
await axios.post('/api/interface/del', { id: id })
|
||||
let result = await axios.post('/api/interface/del', { id: id })
|
||||
return {
|
||||
type: DELETE_INTERFACE_DATA,
|
||||
payload: true
|
||||
payload: result
|
||||
}
|
||||
}
|
||||
|
||||
export async function deleteInterfaceCatData(id) {
|
||||
let result = await axios.post('/api/interface/del_cat', { catid: id })
|
||||
return {
|
||||
type: DELETE_INTERFACE_CAT_DATA,
|
||||
payload: result
|
||||
}
|
||||
}
|
||||
|
||||
@ -96,11 +90,4 @@ export async function fetchInterfaceList(projectId) {
|
||||
type: FETCH_INTERFACE_LIST,
|
||||
payload: result.data
|
||||
}
|
||||
}
|
||||
|
||||
export async function addInterfaceData(data) {
|
||||
return {
|
||||
type: ADD_INTERFACE_DATA,
|
||||
payload: data
|
||||
}
|
||||
}
|
@ -418,8 +418,8 @@ class interfaceController extends baseController {
|
||||
try {
|
||||
let params = ctx.request.body;
|
||||
let result = await this.catModel.up(params.catid, {
|
||||
name: params.cat_name,
|
||||
desc: params.cat_desc,
|
||||
name: params.name,
|
||||
desc: params.desc,
|
||||
up_time: yapi.commons.time()
|
||||
})
|
||||
ctx.body = yapi.commons.resReturn(result)
|
||||
@ -444,8 +444,8 @@ class interfaceController extends baseController {
|
||||
}
|
||||
|
||||
let result = await this.catModel.del(id);
|
||||
await this.Model.delByCatid(id)
|
||||
return ctx.body = yapi.commons.resReturn(result);
|
||||
let r = await this.Model.delByCatid(id)
|
||||
return ctx.body = yapi.commons.resReturn(r);
|
||||
|
||||
|
||||
} catch (e) {
|
||||
|
@ -288,7 +288,9 @@ class projectController extends baseController {
|
||||
}
|
||||
try {
|
||||
let result = await this.Model.get(params.id);
|
||||
console.log(result)
|
||||
if(!result){
|
||||
return ctx.body = yapi.commons.resReturn(null, 400, '不存在的项目');
|
||||
}
|
||||
result = result.toObject();
|
||||
delete result.members;
|
||||
result.role = await this.getProjectRole(params.id, 'project');
|
||||
|
@ -34,11 +34,7 @@ class projectModel extends baseModel {
|
||||
}
|
||||
|
||||
get(id) {
|
||||
this.model.findOne({
|
||||
_id: id
|
||||
}).select("uid group_name ").exec().then((res) => {
|
||||
console.log(res);
|
||||
})
|
||||
console.log(id)
|
||||
return this.model.findOne({
|
||||
_id: id
|
||||
}).exec();
|
||||
|
@ -908,8 +908,8 @@ var interfaceController = function (_baseController) {
|
||||
params = ctx.request.body;
|
||||
_context10.next = 4;
|
||||
return this.catModel.up(params.catid, {
|
||||
name: params.cat_name,
|
||||
desc: params.cat_desc,
|
||||
name: params.name,
|
||||
desc: params.desc,
|
||||
up_time: _yapi2.default.commons.time()
|
||||
});
|
||||
|
||||
@ -944,7 +944,7 @@ var interfaceController = function (_baseController) {
|
||||
key: 'delCat',
|
||||
value: function () {
|
||||
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(ctx) {
|
||||
var id, catData, auth, result;
|
||||
var id, catData, auth, result, r;
|
||||
return _regenerator2.default.wrap(function _callee11$(_context11) {
|
||||
while (1) {
|
||||
switch (_context11.prev = _context11.next) {
|
||||
@ -989,20 +989,21 @@ var interfaceController = function (_baseController) {
|
||||
return this.Model.delByCatid(id);
|
||||
|
||||
case 17:
|
||||
return _context11.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(result));
|
||||
r = _context11.sent;
|
||||
return _context11.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(r));
|
||||
|
||||
case 20:
|
||||
_context11.prev = 20;
|
||||
case 21:
|
||||
_context11.prev = 21;
|
||||
_context11.t0 = _context11['catch'](0);
|
||||
|
||||
_yapi2.default.commons.resReturn(null, 400, _context11.t0.message);
|
||||
|
||||
case 23:
|
||||
case 24:
|
||||
case 'end':
|
||||
return _context11.stop();
|
||||
}
|
||||
}
|
||||
}, _callee11, this, [[0, 20]]);
|
||||
}, _callee11, this, [[0, 21]]);
|
||||
}));
|
||||
|
||||
function delCat(_x11) {
|
||||
|
@ -658,31 +658,38 @@ var projectController = function (_baseController) {
|
||||
case 6:
|
||||
result = _context6.sent;
|
||||
|
||||
console.log(result);
|
||||
if (result) {
|
||||
_context6.next = 9;
|
||||
break;
|
||||
}
|
||||
|
||||
return _context6.abrupt('return', ctx.body = _yapi2.default.commons.resReturn(null, 400, '不存在的项目'));
|
||||
|
||||
case 9:
|
||||
result = result.toObject();
|
||||
delete result.members;
|
||||
_context6.next = 12;
|
||||
_context6.next = 13;
|
||||
return this.getProjectRole(params.id, 'project');
|
||||
|
||||
case 12:
|
||||
case 13:
|
||||
result.role = _context6.sent;
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(result);
|
||||
_context6.next = 19;
|
||||
_context6.next = 20;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
_context6.prev = 16;
|
||||
case 17:
|
||||
_context6.prev = 17;
|
||||
_context6.t0 = _context6['catch'](3);
|
||||
|
||||
ctx.body = _yapi2.default.commons.resReturn(null, 402, _context6.t0.message);
|
||||
|
||||
case 19:
|
||||
case 20:
|
||||
case 'end':
|
||||
return _context6.stop();
|
||||
}
|
||||
}
|
||||
}, _callee6, this, [[3, 16]]);
|
||||
}, _callee6, this, [[3, 17]]);
|
||||
}));
|
||||
|
||||
function get(_x7) {
|
||||
|
@ -71,11 +71,7 @@ var projectModel = function (_baseModel) {
|
||||
}, {
|
||||
key: 'get',
|
||||
value: function get(id) {
|
||||
this.model.findOne({
|
||||
_id: id
|
||||
}).select("uid group_name ").exec().then(function (res) {
|
||||
console.log(res);
|
||||
});
|
||||
console.log(id);
|
||||
return this.model.findOne({
|
||||
_id: id
|
||||
}).exec();
|
||||
|
@ -14,11 +14,7 @@
|
||||
<script src="http://127.0.0.1:4000/prd/lib@dev.js"></script>
|
||||
<script src="http://127.0.0.1:4000/prd/index@dev.js"></script>
|
||||
|
||||
<script src="/lib/ace-1.2.8.js"></script>
|
||||
<script src="/lib/snippets-json.js"></script>
|
||||
<script src="/lib/ext-language.tools.js"></script>
|
||||
<script src="/lib/mode-json-1.2.8.js"></script>
|
||||
<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script>
|
||||
<script src="/lib/qsso-auth.js"></script>
|
||||
|
||||
|
||||
|
||||
|
@ -34,9 +34,6 @@
|
||||
document.write('<script src="/prd/' + window.WEBPACK_ASSETS['index.js'].js + '"><\/script>');
|
||||
</script>
|
||||
|
||||
<script src="/lib/ace-1.2.8.js"></script>
|
||||
<script src="/lib/ext-language.tools.js"></script>
|
||||
<script src="/lib/mode-json-1.2.8.js"></script>
|
||||
<script src="https://qsso.corp.qunar.com/lib/qsso-auth.js"></script>
|
||||
<script src="/lib/qsso-auth.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
73
static/lib/qsso-auth.js
Normal file
73
static/lib/qsso-auth.js
Normal file
@ -0,0 +1,73 @@
|
||||
// file_id:2D7ABF69-3BC0-4175-98C9-5C3D5CB00158 -- nerver change this !!
|
||||
|
||||
/*
|
||||
* file: qsso-auth.js
|
||||
* URL: https://qsso.corp.qunar.com/lib/qsso-auth.js
|
||||
* written by zhibin.ning
|
||||
* version: 0.1
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
if (!window['QSSO']) {
|
||||
var QSSO = (function () {
|
||||
|
||||
var AUTH_SERVER = 'https://qsso.corp.qunar.com',
|
||||
LOGIN_PAGE = '/login.php',
|
||||
SORRY_PAGE = '/sorry.html';
|
||||
|
||||
if (location.hostname.match(/qunar\.ctripgroup\.com$/i)) {
|
||||
AUTH_SERVER = 'https://qunar.ctripgroup.com/sec/qsso/api';
|
||||
}
|
||||
|
||||
var qualifyURL = function (url, encode) {
|
||||
var url = url || '';
|
||||
var ret = location.protocol + '//' + location.host + (url.substr(0,1) === '/' ? '' : location.pathname.match(/.*\//)) + url;
|
||||
if (encode) {
|
||||
ret = encodeURIComponent(ret);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
|
||||
var URLStringify = function (o) {
|
||||
var ret = [];
|
||||
for (var i in o) {
|
||||
// ret.push( encodeURIComponent(i) + '=' + encodeURIComponent(o[i]) );
|
||||
ret.push(i + '=' + o[i]);
|
||||
}
|
||||
return ret.join('&');
|
||||
};
|
||||
|
||||
return {
|
||||
'auth': function (loginURI, opt_ext) {
|
||||
if (!location.hostname.match(/\.qunar(man|ops)?\.com$|\.qunarman\.com$|qunar\.it$|\.928383\.com$|^928383\.com$|qunar\.ctripgroup\.c(om|n)$|\.ctrip(corp)?\.com$|^opsdata\.me$|\.mofun\.com$/i)) {
|
||||
location = AUTH_SERVER + SORRY_PAGE + '?host=' + qualifyURL('', true);
|
||||
return;
|
||||
}
|
||||
var ret = qualifyURL(loginURI, true);
|
||||
|
||||
var redirectURL = AUTH_SERVER + LOGIN_PAGE + '?ret=' + ret + (opt_ext ? '&ext=' + encodeURIComponent(URLStringify(opt_ext)) : '');
|
||||
// console.log(redirectURL);
|
||||
location = redirectURL;
|
||||
},
|
||||
|
||||
'attach': function (eid, loginURI, opt_ext) {
|
||||
QSSO.login = function() {
|
||||
QSSO.auth(loginURI, opt_ext);
|
||||
|
||||
};
|
||||
document.getElementById(eid).onclick = QSSO.login;
|
||||
if (location.hash.match('qsso-auto-login')) {
|
||||
QSSO.login();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
})();
|
||||
|
||||
|
||||
/* todo add QSSO login UI, frame login, etc */
|
||||
|
||||
|
||||
}
|
@ -1 +0,0 @@
|
||||
define("ace/snippets/json",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="json"})
|
Loading…
Reference in New Issue
Block a user