210 lines
4.7 KiB
JavaScript
210 lines
4.7 KiB
JavaScript
import React from 'react';
|
|
import {Container, Segment, List, Menu, Item, Grid} from 'semantic-ui-react';
|
|
import DeviceList from './DeviceList';
|
|
import ModbusModal from './ModbusModal';
|
|
import IOPanel from './IOPanel';
|
|
import IOModal from './IOModal';
|
|
import AIOModal from './AIOModal';
|
|
|
|
const defIOModalState = {
|
|
open: false,
|
|
data: {},
|
|
type: 0
|
|
}
|
|
const defAIOModalState = {
|
|
open: false,
|
|
list: [],
|
|
iouid: 0
|
|
}
|
|
|
|
class ModbusPage extends React.Component {
|
|
state = {
|
|
mbModal: false,
|
|
mbType: 0,
|
|
mbData: {},
|
|
showDev: "",
|
|
ioModal:{
|
|
...defIOModalState
|
|
},
|
|
aioModal:{
|
|
...defAIOModalState
|
|
}
|
|
}
|
|
|
|
componentDidMount() {
|
|
this.props.getList();
|
|
|
|
this.props.router.setRouteLeaveHook(this.props.route, () => {
|
|
this.props.clearList();
|
|
});
|
|
}
|
|
|
|
componentWillReceiveProps(nprop) {
|
|
if(this.state.aioModal.open) {
|
|
this.openAIOModal(this.state.aioModal.iouid, nprop.list);
|
|
}
|
|
}
|
|
|
|
delModbus = id => {
|
|
if(!id) return ;
|
|
this.props.delModbus({id});
|
|
}
|
|
|
|
openModbusModal = (type, data = {}) => {
|
|
this.setState({
|
|
mbModal: true,
|
|
mbType: type,
|
|
mbData: data
|
|
});
|
|
}
|
|
closeModbusModal = () => {
|
|
this.setState({
|
|
mbModal: false,
|
|
mbData: {}
|
|
})
|
|
}
|
|
submitModbusModal = (type, data = {}) => {
|
|
let {i18n} = this.props;
|
|
if(type == 1 && (!data.id)) return this.props.showDialog(i18n&&i18n.t ? i18n.t('tip.input_empty') : '');
|
|
if(!data.name || !('node' in data) || data.node.length == 0) return this.props.showDialog(i18n&&i18n.t ? i18n.t('tip.input_empty') : '');
|
|
|
|
if(type == 1){
|
|
this.props.editModbus(data);
|
|
}else{
|
|
this.props.addModbus(data);
|
|
}
|
|
this.closeModbusModal();
|
|
}
|
|
selectDevToShow = (uid) => {
|
|
this.setState({
|
|
showDev: uid
|
|
});
|
|
this.props.getMBData({id: uid});
|
|
}
|
|
|
|
openIOModal = (type, data = {}) => {
|
|
this.setState({
|
|
ioModal: {
|
|
open: true,
|
|
type,
|
|
data
|
|
}
|
|
});
|
|
}
|
|
closeIOModal = () =>{
|
|
this.setState({
|
|
ioModal: {
|
|
...defIOModalState
|
|
}
|
|
})
|
|
}
|
|
submitIOModal = (type, data) => {
|
|
let {i18n} = this.props;
|
|
if((type == 1 && !data.id) || !('addr' in data) || !('num' in data) || !('type' in data)) return this.props.showDialog(i18n.t('tip.input_empty'));
|
|
|
|
data.devuid = this.state.showDev;
|
|
if(type == 1){
|
|
this.props.editIOList(data);
|
|
}else{
|
|
data.id = this.state.showDev;
|
|
this.props.addIOList(data);
|
|
}
|
|
this.closeIOModal();
|
|
}
|
|
delIOList = (id) => {
|
|
if(!id) return ;
|
|
this.props.delIOList({id, devuid: this.state.showDev});
|
|
}
|
|
openAIOModal = (id, nlist = []) => {
|
|
if(!id) return ;
|
|
let slist = nlist.length == 0 ? this.props.list : nlist;
|
|
let dev = slist.filter(t => {
|
|
if(t.uid == this.state.showDev) return t;
|
|
});
|
|
if(dev.length == 0) return ;
|
|
let aio = dev[0].aioset || [];
|
|
let list = aio.filter(t => {
|
|
if(t.iouid == id) return t;
|
|
});
|
|
this.setState({
|
|
aioModal:{
|
|
open: true,
|
|
list,
|
|
iouid: id
|
|
}
|
|
});
|
|
}
|
|
closeAIOModal = () => {
|
|
this.setState({
|
|
aioModal:{
|
|
...defAIOModalState
|
|
}
|
|
});
|
|
}
|
|
submitAIO = (type, data) => {
|
|
data.devuid = this.state.showDev;
|
|
if(type == 1){
|
|
this.props.editAIO(data);
|
|
}else{
|
|
this.props.addAIO(data);
|
|
}
|
|
// this.closeAIOModal();
|
|
}
|
|
delAIO = (id) => {
|
|
if(!id) return ;
|
|
this.props.delAIO({id, devuid: this.state.showDev});
|
|
}
|
|
|
|
render() {
|
|
let {i18n, list} = this.props;
|
|
|
|
let dev = list.filter(t => {
|
|
if(t.uid == this.state.showDev) return t;
|
|
});
|
|
|
|
return (
|
|
<Container>
|
|
<Menu>
|
|
<Menu.Menu position="right">
|
|
<Menu.Item name="新增裝置" icon="plus" onClick={()=>{this.openModbusModal(0)}}/>
|
|
</Menu.Menu>
|
|
</Menu>
|
|
<Grid>
|
|
<Grid.Column width={4}>
|
|
<DeviceList i18n={i18n}
|
|
list={list}
|
|
delModbus={this.delModbus}
|
|
editModbus={this.openModbusModal}
|
|
showDev={this.state.showDev}
|
|
selectDevToShow={this.selectDevToShow}/>
|
|
</Grid.Column>
|
|
<Grid.Column width={12}>
|
|
<IOPanel i18n={i18n}
|
|
show={dev.length > 0}
|
|
data={dev[0]}
|
|
ioModal={this.openIOModal}
|
|
delIOList={this.delIOList}
|
|
getStatus={this.props.getMBIOStatus}
|
|
showAIOSet={this.openAIOModal} />
|
|
</Grid.Column>
|
|
</Grid>
|
|
<ModbusModal i18n={i18n} open={this.state.mbModal} data={this.state.mbData} type={this.state.mbType} onSubmit={this.submitModbusModal} onClose={this.closeModbusModal} />
|
|
<IOModal i18n={i18n}
|
|
open={this.state.ioModal.open}
|
|
type={this.state.ioModal.type}
|
|
data={this.state.ioModal.data}
|
|
onClose={this.closeIOModal}
|
|
onSubmit={this.submitIOModal} />
|
|
<AIOModal i18n={i18n}
|
|
open={this.state.aioModal.open}
|
|
iouid={this.state.aioModal.iouid}
|
|
list={this.state.aioModal.list}
|
|
onSubmit={this.submitAIO}
|
|
delAIO={this.delAIO}
|
|
onClose={this.closeAIOModal} />
|
|
</Container>
|
|
)
|
|
}
|
|
}
|
|
|
|
export default ModbusPage; |