273 lines
10 KiB
JavaScript
273 lines
10 KiB
JavaScript
|
|
import React from 'react'
|
|||
|
|
import {inject,observer} from 'mobx-react';
|
|||
|
|
import {WeaAlertPage} from 'ecCom'
|
|||
|
|
import {
|
|||
|
|
WeaReportGroup,
|
|||
|
|
WeaTop,
|
|||
|
|
WeaTab,
|
|||
|
|
WeaRightMenu,
|
|||
|
|
WeaDialog,
|
|||
|
|
WeaInput,
|
|||
|
|
WeaFormItem,
|
|||
|
|
WeaTools,
|
|||
|
|
WeaRadioGroup,
|
|||
|
|
WeaNewScroll} from 'ecCom'
|
|||
|
|
import {Tabs,Button,Spin} from 'antd'
|
|||
|
|
import * as mobx from 'mobx';
|
|||
|
|
import { toJS } from 'mobx';
|
|||
|
|
import {WeaTableNew} from 'comsMobx';
|
|||
|
|
import '../../style/schedulediffreport.less';
|
|||
|
|
import {routerShape} from 'react-router';
|
|||
|
|
import debounce from 'lodash/debounce'
|
|||
|
|
const WeaTable = WeaTableNew.WeaTable;
|
|||
|
|
const TabPane = Tabs.TabPane;
|
|||
|
|
import * as Util from '../../util/index';
|
|||
|
|
import {i18n} from '../../public/i18n';
|
|||
|
|
import isEmpty from 'lodash/isEmpty';
|
|||
|
|
|
|||
|
|
@inject('hrmScheduleDiffReport')
|
|||
|
|
@observer
|
|||
|
|
class Main extends React.Component{
|
|||
|
|
static contextTypes = {
|
|||
|
|
router: routerShape
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
constructor(props) {
|
|||
|
|
super(props);
|
|||
|
|
const funcs = ['getReportData'];
|
|||
|
|
funcs.forEach(f=> this[f] = this[f].bind(this));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentDidMount() {
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
this.init();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentWillReceiveProps(nextProps) {
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
if(this.props.location.key !== nextProps.location.key) {
|
|||
|
|
this.init();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
init(){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
hrmScheduleDiffReport.getSearchCondition();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
doSearch(){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
hrmScheduleDiffReport.getData();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getRightMenu(){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let btns =[];
|
|||
|
|
const btnImportExcel = {
|
|||
|
|
icon: <i className='icon-coms-export'/>,
|
|||
|
|
content:i18n.button.export()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
btns.push(btnImportExcel);
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
onRightMenuClick(key){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
switch(key){
|
|||
|
|
case '0':
|
|||
|
|
hrmScheduleDiffReport.exportExcel();
|
|||
|
|
break;
|
|||
|
|
case '1':
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getTopButtons() {
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let btns =[];
|
|||
|
|
const btnExportExcel = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@mvi039`} type="primary" onClick={()=>hrmScheduleDiffReport.exportExcel()} >{i18n.button.export()}</Button>;
|
|||
|
|
btns.push(btnExportExcel);
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getTableRow(){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let {reportdata} = hrmScheduleDiffReport;
|
|||
|
|
reportdata = toJS(reportdata);
|
|||
|
|
let rows =[];
|
|||
|
|
!isEmpty(reportdata.titlerows) && reportdata.titlerows.forEach(row =>{
|
|||
|
|
let cells = [];
|
|||
|
|
!isEmpty(row) && row.forEach( cell => {
|
|||
|
|
cells.push(<td rowspan={cell.rowspan||''} colspan={cell.colspan||''}>{cell.value}</td>);
|
|||
|
|
})
|
|||
|
|
rows.push(<tr>{cells}</tr>);
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
!isEmpty(reportdata.datarows) && reportdata.datarows.forEach(row =>{
|
|||
|
|
let cells = [];
|
|||
|
|
!isEmpty(row) && row.forEach( cell => {
|
|||
|
|
cells.push(<td className="data" rowspan={cell.rowspan||''} colspan={cell.colspan||''}>{cell.value}</td>);
|
|||
|
|
})
|
|||
|
|
rows.push(<tr>{cells}</tr>);
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
return rows;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getBtns() {
|
|||
|
|
return [
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@v5h2ye@1`} onClick={()=>this.getDetial('SIGININ')}>{i18n.label.signInDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@ow43u4@2`} onClick={()=>this.getDetial('SIGINOUT')}>{i18n.label.signOutDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@ctyif4@3`} onClick={()=>this.getDetial('BELATE')}>{i18n.label.lateDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@r96kmf@4`} onClick={()=>this.getDetial('LEAVEEARLY')}>{i18n.label.earlyRetreatDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@0axbot@5`} onClick={()=>this.getDetial('ABSENT')}>{i18n.label.absenteeismDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@setpat@6`} onClick={()=>this.getDetial('NOSIGN')}>{i18n.label.leakageOfSignatureDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@27dre2@7`} onClick={()=>this.getDetial('LEAVE')}>{i18n.label.leaveDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@yiwh81@8`} onClick={()=>this.getDetial('EVECTION')}>{i18n.label.businessTripDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@id7mlt@9`} onClick={()=>this.getDetial('OUTDAYS')}>{i18n.label.publicDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@7s686q@10`} onClick={()=>this.getDetial('OVERTIME')}>{i18n.label.overtimeWorkDetail()}</Button></span>),
|
|||
|
|
(<span className="btn"><Button ecId={`${this && this.props && this.props.ecId || ''}_Button@5o7cew@11`} onClick={()=>this.getDetial('OTHER')}>{i18n.label.attendanceAnomalyDetail()}</Button></span>)
|
|||
|
|
]
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getDetialBtns() {
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let btns =[];
|
|||
|
|
const btnExportExcel = <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@krzb1y`} type="primary" onClick={()=>hrmScheduleDiffReport.exportDetialExcel()} >{i18n.button.export()}</Button>;
|
|||
|
|
btns.push(btnExportExcel);
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getDetailRightMenu = () => {
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let rightMenu = [];
|
|||
|
|
rightMenu.push({
|
|||
|
|
key: '1',
|
|||
|
|
content: i18n.button.export(),
|
|||
|
|
icon: <i className='icon-coms-export'/>,
|
|||
|
|
onClick: ()=>hrmScheduleDiffReport.exportDetialExcel()
|
|||
|
|
});
|
|||
|
|
return rightMenu;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getDetial(stsType){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
hrmScheduleDiffReport.stsType=stsType;
|
|||
|
|
hrmScheduleDiffReport.getTabTableData();
|
|||
|
|
hrmScheduleDiffReport.updateVisible(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getReportData(params){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
hrmScheduleDiffReport.getReportData(params);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
render(){
|
|||
|
|
const { hrmScheduleDiffReport } = this.props;
|
|||
|
|
let { title,form,table, config, loading, reportdata,visible,dialogTitle, lastname,selectedKey,setSelectedKey,topTab} = hrmScheduleDiffReport;
|
|||
|
|
let qSize = reportdata.qSize;
|
|||
|
|
reportdata = toJS(reportdata);
|
|||
|
|
let cols =[];
|
|||
|
|
for(let i=0;i<qSize+13;i++){
|
|||
|
|
let width="6%";
|
|||
|
|
if(i==0||i==1)width="9%";
|
|||
|
|
cols.push(<col style={{width:width}} />);
|
|||
|
|
}
|
|||
|
|
return( <div className='wea-hrm-schedulediffreport'>
|
|||
|
|
<WeaDialog ecId={`${this && this.props && this.props.ecId || ''}_WeaDialog@ck6z5t`}
|
|||
|
|
visible={visible}
|
|||
|
|
onCancel={()=>hrmScheduleDiffReport.updateVisible(false)}
|
|||
|
|
onClo
|
|||
|
|
closable
|
|||
|
|
style={{width: 900, height: window.innerHeight-250>500?500:window.innerHeight-250}}
|
|||
|
|
title = {dialogTitle}
|
|||
|
|
icon="icon-coms-hrm"
|
|||
|
|
iconBgcolor='#217346'
|
|||
|
|
buttons = {this.getDetialBtns()}
|
|||
|
|
moreBtn={{datas: this.getDetailRightMenu()}}
|
|||
|
|
>
|
|||
|
|
{/* <WeaTab
|
|||
|
|
searchType={['base']}
|
|||
|
|
searchsBaseValue={lastname}
|
|||
|
|
onSearch={v => {hrmScheduleDiffReport.getTableData()}}
|
|||
|
|
onSearchChange={v => {
|
|||
|
|
hrmScheduleDiffReport.lastname = v;
|
|||
|
|
}}
|
|||
|
|
/> */}
|
|||
|
|
{!isEmpty(topTab) &&
|
|||
|
|
<WeaTab ecId={`${this && this.props && this.props.ecId || ''}_WeaTab@t9875j`}
|
|||
|
|
datas={topTab}
|
|||
|
|
keyParam="key" //主键
|
|||
|
|
selectedKey={selectedKey}
|
|||
|
|
onChange={key => setSelectedKey(key)}
|
|||
|
|
/>
|
|||
|
|
}
|
|||
|
|
<WeaNewScroll ecId={`${this && this.props && this.props.ecId || ''}_WeaNewScroll@ogbqtr`} height={window.innerHeight-250>500?500:window.innerHeight-250} ref="scrollBar">
|
|||
|
|
<WeaTable ecId={`${this && this.props && this.props.ecId || ''}_WeaTable@hbn1eb`}
|
|||
|
|
comsWeaTableStore={table}
|
|||
|
|
/>
|
|||
|
|
</WeaNewScroll>
|
|||
|
|
</WeaDialog>
|
|||
|
|
<Spin ecId={`${this && this.props && this.props.ecId || ''}_Spin@5tcs7x`} spinning={loading}>
|
|||
|
|
<WeaRightMenu ecId={`${this && this.props && this.props.ecId || ''}_WeaRightMenu@xlbh1j`} datas={this.getRightMenu()} onClick={this.onRightMenuClick.bind(this)}>
|
|||
|
|
<WeaTop ecId={`${this && this.props && this.props.ecId || ''}_WeaTop@jryjcl`}
|
|||
|
|
title={title()}
|
|||
|
|
loading={false}
|
|||
|
|
icon={<i className='icon-coms-hrm' />}
|
|||
|
|
iconBgcolor='#217346'
|
|||
|
|
buttons={this.getTopButtons()}
|
|||
|
|
buttonSpace={10}
|
|||
|
|
showDropIcon={true}
|
|||
|
|
dropMenuDatas={this.getRightMenu()}
|
|||
|
|
onDropMenuClick={this.onRightMenuClick.bind(this)}
|
|||
|
|
>
|
|||
|
|
<div className="content">
|
|||
|
|
<div className='wea-hrm-schedulediffreport-condition'>
|
|||
|
|
{
|
|||
|
|
!isEmpty(config) && <WeaRadioGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaRadioGroup@70narl`} config={config} onChange={debounce(this.getReportData.bind(this),150)}/>
|
|||
|
|
}
|
|||
|
|
</div>
|
|||
|
|
{
|
|||
|
|
!isEmpty(reportdata) &&
|
|||
|
|
<div className='wea-hrm-schedulediffreport-content'>
|
|||
|
|
<table className='wea-hrm-schedulediffreport-table'>
|
|||
|
|
<colgroup>
|
|||
|
|
{cols}
|
|||
|
|
</colgroup>
|
|||
|
|
<tbody>
|
|||
|
|
<tr>
|
|||
|
|
<td className="title" colspan={qSize+13}>{reportdata.title}</td>
|
|||
|
|
</tr>
|
|||
|
|
{this.getTableRow()}
|
|||
|
|
</tbody>
|
|||
|
|
</table>
|
|||
|
|
<table border="0" width="100%">
|
|||
|
|
<tbody>
|
|||
|
|
<tr>
|
|||
|
|
<td align="right" style={{height:50}}>{i18n.label.reportDate()}:{Util.DateFormat(new Date(), "yyyy-MM-dd") }</td>
|
|||
|
|
</tr>
|
|||
|
|
</tbody>
|
|||
|
|
</table>
|
|||
|
|
</div>
|
|||
|
|
}
|
|||
|
|
</div>
|
|||
|
|
{
|
|||
|
|
!isEmpty(reportdata) &&<div className='wea-hrm-schedulediffreport-foot'>
|
|||
|
|
<table className='table-foot' border="0" width="100%">
|
|||
|
|
<tbody>
|
|||
|
|
<tr>
|
|||
|
|
<td>{this.getBtns()}</td>
|
|||
|
|
</tr>
|
|||
|
|
</tbody>
|
|||
|
|
</table>
|
|||
|
|
</div>
|
|||
|
|
}
|
|||
|
|
</WeaTop>
|
|||
|
|
</WeaRightMenu>
|
|||
|
|
</Spin>
|
|||
|
|
</div> );
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
export default Main
|