UNPKG

yylib-quick-mobile

Version:

yylib-quick-mobile

337 lines (332 loc) 10.4 kB
import React, {Component} from 'react'; import { Modal,Toast,PullToRefresh, List, ListView,InputItem,Icon } from 'antd-mobile'; import YYButton from './../button/YYButton'; import {MODULE_URL,ADDR} from '../../common/RestUrl'; import './../list-view/YYList.less'; import './submit.css' const Item = List.Item; const Brief = Item.Brief; function MyBody(props){ return( <div className="am-list-body my-body"> {props.children} </div> ) } class YYApproveSubmitBtn extends React.Component { constructor(props) { super(props); const dataSource = new ListView.DataSource({ rowHasChanged: (row1, row2) => row1 !== row2, }); this.state = { modalVisible: this.props.modalVisible, dataSource, pageNumber:1, noPagination:false, isLoading: true, refreshing:true, appendData:[], initdata:[] }; } getListData(url,param,callback) { var ajax = window.YYUtils.Ajax; var listData = []; ajax.getText(url, param, function (result) { var resultData = JSON.parse(result); if (resultData&&resultData.success) { listData = resultData['data']; var total = resultData['total']; var page = Math.ceil(total/param.size); var last = false; if (param.page>=page) { last = true; } callback(listData,last); } }); } onBeforeClick() { var _this = this; if (this.props.onBeforeClick) { this.props.onBeforeClick(function(data){ _this.onSubmitBefore(data); }); } else { this.onSubmitBefore(); } } onSubmitBefore(data) { var ajax=window.YYUtils.Ajax; var {subParam} = this.props; var _self = this; var params = { orgId: window.YYUtils.AuthToken.getOrgaId(), billTypeId: subParam.billTypeId, billTypeCode: subParam.billTypeCode, userId: window.YYUtils.AuthToken.getUserId(), billId: subParam.billId, }; var defaultProcInstName = subParam.defaultProcInstName+"_"+subParam.billTypeCode; var url = MODULE_URL.beforeSubmit; ajax.postJSON(url, params, null,function (error) { Toast.fail("网络异常,稍后重试!",1); },(result) => { if (result != null && result.status == 200) { var param = eval("(" + result.text + ")"); if (param != null) { var visible = param.show; if (!visible) { Toast.info(param.msg,1); return; } param.procInstName = param.procInstName?param.procInstName:defaultProcInstName; this.setState({ title: param.procInstName, modalVisible: visible, data:Object.assign({},data,param) }); var getParam = { size: 10, page: 1, userId:window.YYUtils.AuthToken.getUserId(), billTypeId: subParam.billTypeId, orgId: window.YYUtils.AuthToken.getOrgaId(), searchText: "", }; _self.getListData(MODULE_URL.getConfigList,getParam,function(listData,last){ if (!last) { let ds=_self.state.dataSource.cloneWithRows(listData); _self.setState({ pageNumber:2, dataSource:ds, initdata:listData, noPagination:false, isLoading:false, refreshing:false }); } else { _self.setState({ dataSource:ds, initdata:listData, noPagination:true, isLoading:false, refreshing:false }); } }); } } else { Toast.fail(result.msg,1); } }); } /*****点击事件******/ _clickItem(row){ var ajax=window.YYUtils.Ajax; Toast.loading("提交中"); var _self = this; var {subParam} = this.props; let {data} = this.state; var param = {}; if (row) { param.assign = []; param.assignAble = false; param.bill = { companyId: data.companyId, billId: data.id, id: data.id }; param.billCode = data.billCode; param.billName = ''; param.billId = data.id; param.billtypeId = data.billType; param.businessKey =data.id; param.prockey = row.prokey; param.procInstName = this.state.title; param.userId = window.YYUtils.AuthToken.getUserId(); param.formurl = ADDR; param.refUrl = ADDR; param.serUrl = ADDR; param.maurl = ''; } ajax.postText(MODULE_URL.doSubmit,param,(msg)=>{ Toast.hide(); var resultData = JSON.parse(msg); if (resultData['success']) { Toast.success(resultData['msg'],1); _self.setState({ modalVisible:false }); if(_self.props.onlistClick){ _self.props.onlistClick(); } } else { Toast.fail(resultData['msg'],1); _self.setState({ modalVisible:false }); if(_self.props.onlistClick){ _self.props.onlistClick(); } } }); } onRefresh = () => { let _self = this; var {subParam} = this.props; _self.setState({refreshing:true,isLoading:false}); var getParam = { size: 10, page: 1, userId:subParam.userId, billTypeId: subParam.billTypeId, orgId: subParam.orgId, searchText: "", }; _self.getListData(MODULE_URL.getConfigList,getParam,function(listData,last){ if (!last) { let ds=_self.state.dataSource.cloneWithRows(listData); _self.setState({ pageNumber:2, dataSource:ds, initdata:listData, noPagination:false, isLoading:false, refreshing:false }); } else { _self.setState({ dataSource:ds, initdata:listData, noPagination:true, isLoading:false, refreshing:false }); } }); } //上拉加载 onEndReached = (event) => { var _self = this; var {subParam} = this.props; let {initdata}=this.state; this.setState({refreshing:false,isLoading:true}); var getParam = { size: 10, page: this.state.pageNumber, userId:subParam.userId, billTypeId: subParam.billTypeId, orgId: subParam.orgId, searchText: "", }; if (!this.state.noPagination) { this.getListData(MODULE_URL.getConfigList,getParam,function(listData,last){ _self.rData = [...initdata,...listData] if (!last) { _self.setState({ pageNumber:_self.state.pageNumber+1, dataSource:_self.state.dataSource.cloneWithRows(_self.rData), initdata: _self.rData, isLoading: false, noPagination:false }); } else { _self.setState({ dataSource:_self.state.dataSource.cloneWithRows(_self.rData), initdata: _self.rData, noPagination:true, isLoading: false, }); } }); } else { this.setState({isLoading:false}); } } /*****生成一行数据*******/ createRow(rowData, sectionID, rowID, highlightRow){ return ( <Item className="approve_item" align="top" key={rowData.id?rowData.id:rowID} onClick={this._clickItem.bind(this,rowData)} extra={rowData['orgName']} wrap={false}> {rowData['processName']} {<Brief>{rowData['categoryName']}</Brief>} </Item> ); } onClose(){ this.setState({ modalVisible:false }); this.props.onClose&&this.props.onClose(); } componentWillReceiveProps(nextprops) { if (nextprops.modalVisible !== this.state.modalVisible) { this.setState({ modalVisible: nextprops.modalVisible }) } } ThemeChange(value){ this.setState({title:value}) } render() { let {title,dataSource,refreshing, isLoading,modalVisible} = this.state; let {onEndReachedThreshold,disabled,subParam,onBeforeClick,onlistClick,...restProps} = this.props; var height="calc(100% - 40px)"; return ( <div className="submitBtn"> <Modal style={{backgroundColor:"black",height: '100%'}} visible={modalVisible} popup={true} animationType='slide-up' maskClosable={true} onClose={this.onClose.bind(this)}> <InputItem className="submitBtn_input" onChange={this.ThemeChange.bind(this)} value={title}/> <Icon className="close-icon" size="lg" type="cross" onClick={this.onClose.bind(this)} /> <ListView className='yy-list am-list submit-list' key={1} renderBodyComponent={()=> <MyBody/>} renderRow={(rowData, sectionID, rowID, highlightRow)=>this.createRow(rowData, sectionID, rowID, highlightRow)} dataSource={dataSource} style={{height:height,overflow:'auto'}} onScroll={() => {}} scrollRenderAheadDistance={500} onEndReached={this.onEndReached} onEndReachedThreshold={onEndReachedThreshold} pullToRefresh={ <PullToRefresh distanceToRefresh={25} refreshing={refreshing} onRefresh={this.onRefresh}/> }/> </Modal> <YYButton {...restProps} onClick={this.onBeforeClick.bind(this)} disabled={disabled}>提交</YYButton> </div> ); } } YYApproveSubmitBtn.defaultProps = { subParam:{ billId:'',//单据id billTypeId:'',//单据类型 billTypeCode:'',//单据类型编码 defaultProcInstName:''//默认流程主题 }, onEndReachedThreshold: 50, onBeforeClick:null, onlistClick:null } export default YYApproveSubmitBtn;