UNPKG

popbean-react

Version:

let me think about something,comming soon...

244 lines (242 loc) 6.78 kB
var React = require('react'); // var DataGrid = require('react-datagrid'); //var grid_style = require('react-datagrid/index-no-normalize.css'); var grid_style = require('../../../node_modules/react-datagrid/dist/index.css'); // var ActionBar = require('../action-bar'); var SearchBox = require('../search-box'); var FormBuilder = require('../form-builder'); // var action_icon_style = require('../../../node_modules/material-design-icons/sprites/css-sprite/sprite-content-black.css'); // var mui = require('material-ui-cssinjs'); // var ThemeManager = new mui.Styles.ThemeManager(); //先不考虑操作的扩展,后续如果要加,就使用merge的方式 // // var mui = require('material-ui-cssinjs'); // var {Checkbox,Dialog,FlatButton} = mui; // // var ListPanel = React.createClass({ contextTypes:{ router:React.PropTypes.func }, getDefaultProps:function(){ return { }; }, getInitialState:function(){ return { model:{ main:{ fields:[] } }, data:[ ], selected:{} }; }, getActions:function(){ var {app,code} = this.context.router.getCurrentParams(); var action_model = [ { code:"add-btn", label:"新增", icon:"glyphicon glyphicon-plus-sign", tip:'新增数据', handler:function(event){ var p = {model:this.state.model}; this.context.router.transitionTo('node-factory-detail',{app:app,code:code},{json:JSON.stringify(p)}); }.bind(this) }, { code:"edit-btn", label:"修改", icon:"glyphicon glyphicon-edit", tip:'修改数据', handler:function(event){ var selected = this._getSelected(); if(!selected || selected.length<1){ return ; } if(selected.length>1){ console.log('别闹了,还是洗洗回家睡吧'); return ; } var p = {model:this.state.model,data:selected[0]}; console.log('edit:-->',p); this.context.router.transitionTo('node-factory-detail',{app:app,code:code},{json:JSON.stringify(p)}); }.bind(this) }, { code:"del-btn", label:"删除", icon:"glyphicon glyphicon-remove", tip:'删除数据', handler:function(event){//FIXME 应该修改模板,将选中的数据贴上去,以便确认 this.refs.del_dlg.show(); }.bind(this) } ]; return action_model; }, /*_buildGridModel:function(fields){ var columns = []; fields.map(function(item){ var inst = { name:item['code'], title:item['label'] }; columns.push(inst); }); return columns; },*/ _loadNodeFactoryModel:function(){ var self = this; var {app,code} = this.context.router.getCurrentParams(); // console.log('url','/service/'+app+'/node-factory/'+code+'/model'); fetch('/service/'+app+'/node-factory/'+code+'/model') .then(function(response){ return response.json(); }) .then(function(json){//获得数据去填充 var data = json.data; data.app = app; data.code = code; if(self.isMounted()){//这是必要的保护 self.setState(data); self.onSearch(); } }).catch(function(ex){ //FIXME 感觉统一处理比较好 console.log('读取数据错误',ex); }); }, componentDidMount:function(){ console.log('did mount'); this._loadNodeFactoryModel(); }, componentWillMount:function(){console.log('will mount');}, componentWillReceiveProps:function(){ var {app,code} = this.context.router.getCurrentParams(); console.log('old app',this.state.app,'old code',this.state.code,'new app',app,'new code',code); if(this.state.app+this.state.code != app+code){ this._loadNodeFactoryModel(); } // console.log('will receive props'); }, componentWillUpdate:function(){ console.log('will update'); }, render:function(){ var columns = FormBuilder.filterByStage(this.state.model.main.fields,'list'); console.log('list columns',columns,this.state.model); // var model = this.getActions(); // /* var customActions = [ <FlatButton key={1} label="取消" secondary={true} onTouchTap={this._onClose}/>, <FlatButton key={2} label="确认" primary={true} onTouchTap={this._onDelete}/> ]; <Dialog ref="del_dlg" title="删除确认" actions={customActions} modal={true}> 你确定要这么干么? </Dialog> */ return ( <div> <SearchBox model={this.state.model.main} onSearch={this.onSearch} ref="sb"/> <ActionBar model={model}/> <DataGrid columns={columns} dataSource={this.state.data} emptyText={'没有数据'} onSelectionChange={this._onSelectionChange} idProperty={this.state.model.main.id} selected={this.state.selected}/> </div> ); }, onSearch:function(){//从界面上获取数据 var param = this.refs.sb.getQueryParam(); var self = this; fetch('/service/cms/content') .then(function(response){ return response.json(); }).then(function(json){ var tmp = json['data']; self.setState({data:tmp}); }).catch(function(ex){ console.log(ex);//FIXME 暂时如此处理,以后可以统一一下调用一个函数 }); console.log('query soso',param); }, _onClose:function(){ this.refs.del_dlg.dismiss(); }, _onDelete:function(){ //获得被选中的数据 var {code} = this.context.router.getCurrentParams(); var selected = this._getSelected(); if(!selected || selected.length<1){ return ; } console.log(selected); var id_list = []; var id_key = this.state.model.main.id; selected.map(function(item){ id_list.push(item[id_key]); }); console.log(selected,id_list,id_key); var p = {}; p[id_key] = id_list; var self = this; //FIXME RemoteCallClient.post(url,param,success_handler,fail_handler) //FIXME 需要注意的是,fetch的post method用静态文件测试,是有问题的 //FIXME url最好改成使用lodash的tpl进行处理 console.log('url:','/service/cms/nodefactory/'+code+'/data/delete/'+id_list.join(',')); fetch('/service/cms/nodefactory/'+code+'/data/delete/'+id_list.join(',')) .then(function(response){ return response.json(); }) .then(function(json){ var msg = json['data']; console.log(msg); self.refs.del_dlg.dismiss(); self.onSearch(); }) .catch(function(ex){ console.log('-->',ex); }); }, _onSelectionChange:function(newSelection){ console.log(newSelection); this.setState({ selected:newSelection }); }, _getSelected:function(){//获得当前的选中行 var selected = this.state.selected; var id = this.state.model.id;//FIXME 本质上这是id_key var tmp = []; var len = 0; var ret = []; var self = this; Object.keys(this.state.selected).forEach(function(id){ len+=1; ret.push(self.state.selected[id]); }); return ret; } }); module.exports = ListPanel;