mirror of https://github.com/openspug/spug
U web update
parent
fe4e715c31
commit
deed4ed681
|
@ -0,0 +1,94 @@
|
||||||
|
import React from 'react';
|
||||||
|
import {observer} from 'mobx-react';
|
||||||
|
import {Modal, Form, Transfer, message, Tabs, Alert} from 'antd';
|
||||||
|
import http from 'libs/http';
|
||||||
|
import serviceStore from '../service/store';
|
||||||
|
import store from './store';
|
||||||
|
|
||||||
|
@observer
|
||||||
|
class Rel extends React.Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.state = {
|
||||||
|
loading: false,
|
||||||
|
services: [],
|
||||||
|
apps: store.records.filter(x => x.id !== store.record.id).map(x => ({...x, key: x.id, _key: x.key}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
if (serviceStore.records.length === 0) {
|
||||||
|
serviceStore.fetchRecords().then(this._updateRecords)
|
||||||
|
} else {
|
||||||
|
this._updateRecords()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateRecords = () => {
|
||||||
|
const services = serviceStore.records.map(x => {
|
||||||
|
return {...x, key: x.id, _key: x.key}
|
||||||
|
});
|
||||||
|
this.setState({services})
|
||||||
|
};
|
||||||
|
|
||||||
|
handleSubmit = () => {
|
||||||
|
this.setState({loading: true});
|
||||||
|
const {app, service} = store.confRel;
|
||||||
|
http.patch('/api/app/', {id: store.record.id, rel_apps: app, rel_services: service})
|
||||||
|
.then(res => {
|
||||||
|
message.success('操作成功');
|
||||||
|
store.relVisible = false;
|
||||||
|
store.fetchRecords()
|
||||||
|
}, () => this.setState({loading: false}))
|
||||||
|
};
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<Modal
|
||||||
|
visible
|
||||||
|
width={800}
|
||||||
|
maskClosable={false}
|
||||||
|
title="配置依赖关系"
|
||||||
|
onCancel={() => store.relVisible = false}
|
||||||
|
confirmLoading={this.state.loading}
|
||||||
|
onOk={this.handleSubmit}>
|
||||||
|
<Alert
|
||||||
|
closable
|
||||||
|
showIcon
|
||||||
|
type="info"
|
||||||
|
message="小提示"
|
||||||
|
style={{margin: '0 80px 20px'}}
|
||||||
|
description={[
|
||||||
|
<p key={1}>设置依赖的应用仅会获取到其<span style={{color: 'red'}}>公共</span>配置,私有配置并不会被其他应用所获取。</p>,
|
||||||
|
<p key={2}>服务不存在公共和私有配置的概念,所以会获取到依赖服务的所有配置信息。</p>
|
||||||
|
]}/>
|
||||||
|
<Tabs tabPosition="left">
|
||||||
|
<Tabs.TabPane tab="应用依赖" key="app">
|
||||||
|
<Form.Item label="设置依赖的应用">
|
||||||
|
<Transfer
|
||||||
|
listStyle={{width: 280, minHeight: 300}}
|
||||||
|
titles={['所有应用', '已选应用']}
|
||||||
|
dataSource={this.state.apps}
|
||||||
|
targetKeys={store.confRel.app}
|
||||||
|
onChange={keys => store.confRel.app = keys}
|
||||||
|
render={item => `${item.name}(${item._key})`}/>
|
||||||
|
</Form.Item>
|
||||||
|
</Tabs.TabPane>
|
||||||
|
<Tabs.TabPane tab="服务依赖" key="service">
|
||||||
|
<Form.Item label="设置依赖的服务">
|
||||||
|
<Transfer
|
||||||
|
listStyle={{width: 280, minHeight: 300}}
|
||||||
|
titles={['所有服务', '已选服务']}
|
||||||
|
dataSource={this.state.services}
|
||||||
|
targetKeys={store.confRel.service}
|
||||||
|
onChange={keys => store.confRel.service = keys}
|
||||||
|
render={item => `${item.name}(${item._key})`}/>
|
||||||
|
</Form.Item>
|
||||||
|
</Tabs.TabPane>
|
||||||
|
</Tabs>
|
||||||
|
</Modal>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Rel
|
|
@ -1,11 +1,10 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { observer } from 'mobx-react';
|
import {observer} from 'mobx-react';
|
||||||
import { Link } from 'react-router-dom';
|
import {Link} from 'react-router-dom';
|
||||||
import { Table, Divider, Modal, message } from 'antd';
|
import {Table, Divider, Modal, message} from 'antd';
|
||||||
import ComForm from './Form';
|
|
||||||
import http from 'libs/http';
|
import http from 'libs/http';
|
||||||
import store from './store';
|
import store from './store';
|
||||||
import { LinkButton } from "components";
|
import {LinkButton} from "components";
|
||||||
|
|
||||||
@observer
|
@observer
|
||||||
class ComTable extends React.Component {
|
class ComTable extends React.Component {
|
||||||
|
@ -36,6 +35,8 @@ class ComTable extends React.Component {
|
||||||
<Divider type="vertical"/>
|
<Divider type="vertical"/>
|
||||||
<LinkButton onClick={() => this.handleDelete(info)}>删除</LinkButton>
|
<LinkButton onClick={() => this.handleDelete(info)}>删除</LinkButton>
|
||||||
<Divider type="vertical"/>
|
<Divider type="vertical"/>
|
||||||
|
<LinkButton onClick={() => store.showRel(info)}>依赖</LinkButton>
|
||||||
|
<Divider type="vertical"/>
|
||||||
<Link to={`/config/setting/app/${info.id}`}>配置</Link>
|
<Link to={`/config/setting/app/${info.id}`}>配置</Link>
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
|
@ -61,10 +62,7 @@ class ComTable extends React.Component {
|
||||||
data = data.filter(item => item['name'].toLowerCase().includes(store.f_name.toLowerCase()))
|
data = data.filter(item => item['name'].toLowerCase().includes(store.f_name.toLowerCase()))
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<React.Fragment>
|
|
||||||
<Table rowKey="id" loading={store.isFetching} dataSource={data} columns={this.columns}/>
|
<Table rowKey="id" loading={store.isFetching} dataSource={data} columns={this.columns}/>
|
||||||
{store.formVisible && <ComForm/>}
|
|
||||||
</React.Fragment>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ import { observer } from 'mobx-react';
|
||||||
import { Card, Input, Button } from 'antd';
|
import { Card, Input, Button } from 'antd';
|
||||||
import { SearchForm } from 'components';
|
import { SearchForm } from 'components';
|
||||||
import ComTable from './Table';
|
import ComTable from './Table';
|
||||||
|
import ComForm from './Form';
|
||||||
|
import Rel from './Rel';
|
||||||
import store from './store';
|
import store from './store';
|
||||||
|
|
||||||
export default observer(function () {
|
export default observer(function () {
|
||||||
|
@ -20,6 +22,8 @@ export default observer(function () {
|
||||||
<Button type="primary" icon="plus" onClick={() => store.showForm()}>新建</Button>
|
<Button type="primary" icon="plus" onClick={() => store.showForm()}>新建</Button>
|
||||||
</div>
|
</div>
|
||||||
<ComTable/>
|
<ComTable/>
|
||||||
|
{store.formVisible && <ComForm/>}
|
||||||
|
{store.relVisible && <Rel />}
|
||||||
</Card>
|
</Card>
|
||||||
)
|
)
|
||||||
})
|
})
|
|
@ -4,8 +4,10 @@ import http from 'libs/http';
|
||||||
class Store {
|
class Store {
|
||||||
@observable records = [];
|
@observable records = [];
|
||||||
@observable record = {};
|
@observable record = {};
|
||||||
|
@observable confRel = {};
|
||||||
@observable isFetching = false;
|
@observable isFetching = false;
|
||||||
@observable formVisible = false;
|
@observable formVisible = false;
|
||||||
|
@observable relVisible = false;
|
||||||
|
|
||||||
@observable f_name;
|
@observable f_name;
|
||||||
|
|
||||||
|
@ -19,6 +21,15 @@ class Store {
|
||||||
showForm = (info = {}) => {
|
showForm = (info = {}) => {
|
||||||
this.formVisible = true;
|
this.formVisible = true;
|
||||||
this.record = info
|
this.record = info
|
||||||
|
};
|
||||||
|
|
||||||
|
showRel = (info) => {
|
||||||
|
this.relVisible = true;
|
||||||
|
this.record = info;
|
||||||
|
this.confRel = {
|
||||||
|
app: info['rel_apps'],
|
||||||
|
service: info['rel_services']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ class Store {
|
||||||
|
|
||||||
fetchRecords = () => {
|
fetchRecords = () => {
|
||||||
this.isFetching = true;
|
this.isFetching = true;
|
||||||
http.get('/api/config/service/')
|
return http.get('/api/config/service/')
|
||||||
.then(res => this.records = res)
|
.then(res => this.records = res)
|
||||||
.finally(() => this.isFetching = false)
|
.finally(() => this.isFetching = false)
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue