diff --git a/spug_web/src/pages/config/environment/store.js b/spug_web/src/pages/config/environment/store.js index d69261c..946c022 100644 --- a/spug_web/src/pages/config/environment/store.js +++ b/spug_web/src/pages/config/environment/store.js @@ -11,7 +11,7 @@ class Store { fetchRecords = () => { this.isFetching = true; - http.get('/api/config/environment/') + return http.get('/api/config/environment/') .then(res => this.records = res) .finally(() => this.isFetching = false) }; diff --git a/spug_web/src/pages/config/routes.js b/spug_web/src/pages/config/routes.js index 904d647..e315ebb 100644 --- a/spug_web/src/pages/config/routes.js +++ b/spug_web/src/pages/config/routes.js @@ -1,9 +1,11 @@ import { makeRoute } from 'libs/router'; import Environment from './environment'; import Service from './service'; +import Setting from './setting'; export default [ makeRoute('/environment', Environment), makeRoute('/service', Service), + makeRoute('/setting/:type/:id', Setting), ] \ No newline at end of file diff --git a/spug_web/src/pages/config/service/Table.js b/spug_web/src/pages/config/service/Table.js index aaa2fc7..549a523 100644 --- a/spug_web/src/pages/config/service/Table.js +++ b/spug_web/src/pages/config/service/Table.js @@ -1,5 +1,6 @@ import React from 'react'; import { observer } from 'mobx-react'; +import { Link } from 'react-router-dom'; import { Table, Divider, Modal, message } from 'antd'; import ComForm from './Form'; import http from 'libs/http'; @@ -34,6 +35,8 @@ class ComTable extends React.Component { store.showForm(info)}>编辑 this.handleDelete(info)}>删除 + + 配置 ) }]; diff --git a/spug_web/src/pages/config/setting/Form.js b/spug_web/src/pages/config/setting/Form.js new file mode 100644 index 0000000..f160889 --- /dev/null +++ b/spug_web/src/pages/config/setting/Form.js @@ -0,0 +1,105 @@ +import React from 'react'; +import { observer } from 'mobx-react'; +import { Modal, Form, Input, Checkbox, Row, Col, message } from 'antd'; +import http from 'libs/http'; +import store from './store'; +import envStore from '../environment/store' +import lds from 'lodash'; + +@observer +class ComForm extends React.Component { + constructor(props) { + super(props); + this.isModify = store.record.id !== undefined; + this.state = { + loading: false, + envs: this.isModify ? [store.env.id] : [] + } + } + + handleSubmit = () => { + this.setState({loading: true}); + const formData = this.props.form.getFieldsValue(); + let request; + if (this.isModify) { + formData['id'] = store.record.id; + request = http.patch('/api/config/', formData) + } else { + formData['type'] = store.type; + formData['o_id'] = store.id; + formData['envs'] = this.state.envs; + formData['is_public'] = true; + request = http.post('/api/config/', formData) + } + request.then(res => { + message.success('操作成功'); + store.formVisible = false; + store.fetchRecords() + }, () => this.setState({loading: false})) + }; + + handleEnvCheck = (id) => { + if (!this.isModify) { + const index = this.state.envs.indexOf(id); + if (index !== -1) { + this.state.envs.splice(index, 1); + } else { + this.state.envs.push(id); + } + this.setState({envs: this.state.envs}) + } + }; + + render() { + const info = store.record; + const {envs} = this.state; + const {getFieldDecorator} = this.props.form; + const itemLayout = { + labelCol: {span: 6}, + wrapperCol: {span: 14} + }; + return ( + store.formVisible = false} + confirmLoading={this.state.loading} + onOk={this.handleSubmit}> +
+ + {getFieldDecorator('key', {initialValue: info['key']})( + + )} + + + {getFieldDecorator('value', {initialValue: info['value']})( + + )} + + + {getFieldDecorator('desc', {initialValue: info['desc']})( + + )} + + + {envStore.records.map((item, index) => ( + this.handleEnvCheck(item.id)} + style={{cursor: 'pointer', borderTop: index ? '1px solid #e8e8e8' : ''}}> + + {item.key} + {item.name} + {item.desc} + + ))} + +
+
+ ) + } +} + +export default Form.create()(ComForm) \ No newline at end of file diff --git a/spug_web/src/pages/config/setting/Table.js b/spug_web/src/pages/config/setting/Table.js new file mode 100644 index 0000000..f527715 --- /dev/null +++ b/spug_web/src/pages/config/setting/Table.js @@ -0,0 +1,61 @@ +import React from 'react'; +import { observer } from 'mobx-react'; +import { Table, Divider, Modal, message } from 'antd'; +import { LinkButton } from 'components'; +import ComForm from './Form'; +import http from 'libs/http'; +import store from './store'; +import lds from 'lodash'; + +@observer +class ComTable extends React.Component { + columns = [{ + title: 'Key', + dataIndex: 'key', + }, { + title: 'Value', + dataIndex: 'value', + }, { + title: '描述信息', + dataIndex: 'desc', + ellipsis: true + }, { + title: '操作', + render: info => ( + + store.showForm(info)}>编辑 + + this.handleDelete(info)}>删除 + + ) + }]; + + handleDelete = (text) => { + Modal.confirm({ + title: '删除确认', + content: `确定要删除【${store.env.name}】环境下的配置【${text['key']}】?`, + onOk: () => { + return http.delete('/api/config/', {params: {id: text.id}}) + .then(() => { + message.success('删除成功'); + store.fetchRecords() + }) + } + }) + }; + + render() { + let data = store.records; + if (store.f_name) { + data = data.filter(item => item['key'].toLowerCase().includes(store.f_name.toLowerCase())) + } + return ( + + + {store.formVisible && } + + ) + } +} + +export default ComTable \ No newline at end of file diff --git a/spug_web/src/pages/config/setting/index.js b/spug_web/src/pages/config/setting/index.js new file mode 100644 index 0000000..a441012 --- /dev/null +++ b/spug_web/src/pages/config/setting/index.js @@ -0,0 +1,72 @@ +import React from 'react'; +import { observer } from 'mobx-react'; +import { Menu, Input, Button } from 'antd'; +import envStore from '../environment/store'; +import styles from './index.module.css'; +import { SearchForm } from 'components'; +import ComTable from './Table'; +import store from './store'; + +@observer +class Index extends React.Component { + constructor(props) { + super(props); + this.state = { + // envId: 0 + } + } + + componentDidMount() { + const {type, id} = this.props.match.params; + store.type = type; + store.id = id; + if (envStore.records.length === 0) { + envStore.fetchRecords().then(() => this.updateEnv()) + } else { + this.updateEnv() + } + } + + updateEnv = (env) => { + store.env = env || envStore.records[0]; + store.fetchRecords() + }; + + render() { + return ( +
+
+ this.updateEnv(item.props.env)}> + {envStore.records.map(item => ( + {item.name} ({item.key}) + ))} + +
+
+ + + store.f_name = e.target.value} placeholder="请输入"/> + + + + + + + + + + + + +
+
+ ) + } +} + +export default Index \ No newline at end of file diff --git a/spug_web/src/pages/config/setting/index.module.css b/spug_web/src/pages/config/setting/index.module.css new file mode 100644 index 0000000..0f0a127 --- /dev/null +++ b/spug_web/src/pages/config/setting/index.module.css @@ -0,0 +1,25 @@ +.container { + display: flex; + background-color: #fff; + padding: 16px 0; +} +.left { + flex: 2; + border-right: 1px solid #e8e8e8; +} +.right { + flex: 7; + padding: 8px 40px; +} + +.title { + margin-bottom: 12px; + color: rgba(0, 0, 0, .85); + font-weight: 500; + font-size: 20px; + line-height: 28px; +} + +.form { + max-width: 320px; +} \ No newline at end of file diff --git a/spug_web/src/pages/config/setting/store.js b/spug_web/src/pages/config/setting/store.js new file mode 100644 index 0000000..837283c --- /dev/null +++ b/spug_web/src/pages/config/setting/store.js @@ -0,0 +1,29 @@ +import { observable } from "mobx"; +import http from 'libs/http'; + +class Store { + @observable records = []; + @observable record = {}; + @observable env = {}; + @observable type; + @observable id; + @observable isFetching = false; + @observable formVisible = false; + + @observable f_name; + + fetchRecords = () => { + const params = {type: this.type, id: this.id, env_id: this.env.id}; + this.isFetching = true; + http.get('/api/config/', {params}) + .then(res => this.records = res) + .finally(() => this.isFetching = false) + }; + + showForm = (info) => { + this.formVisible = true; + this.record = info || {}; + } +} + +export default new Store() \ No newline at end of file