yylib-quick-mobile
Version:
yylib-quick-mobile
337 lines (332 loc) • 10.4 kB
JavaScript
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;