465 lines
14 KiB
JavaScript
465 lines
14 KiB
JavaScript
|
|
import React from 'react'
|
|||
|
|
import {inject,observer} from 'mobx-react';
|
|||
|
|
import {WeaAlertPage} from 'ecCom'
|
|||
|
|
import isEmpty from 'lodash/isEmpty'
|
|||
|
|
import debounce from 'lodash/debounce'
|
|||
|
|
import {
|
|||
|
|
WeaReportGroup,
|
|||
|
|
WeaTop,
|
|||
|
|
WeaTab,
|
|||
|
|
WeaRightMenu,
|
|||
|
|
WeaDialog,
|
|||
|
|
WeaInput,
|
|||
|
|
WeaFormItem,
|
|||
|
|
WeaTools} from 'ecCom'
|
|||
|
|
import {Tabs,Button,Spin} from 'antd'
|
|||
|
|
import * as mobx from 'mobx';
|
|||
|
|
import { toJS } from 'mobx';
|
|||
|
|
import {WeaTableNew} from 'comsMobx';
|
|||
|
|
import '../../style/constrpsubsearch.less';
|
|||
|
|
import {routerShape} from 'react-router';
|
|||
|
|
import {i18n} from '../../public/i18n';
|
|||
|
|
const WeaTable = WeaTableNew.WeaTable;
|
|||
|
|
|
|||
|
|
@inject('hrmConstRpSubSearch')
|
|||
|
|
@observer
|
|||
|
|
class Main extends React.Component{
|
|||
|
|
static contextTypes = {
|
|||
|
|
router: routerShape
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
constructor(props) {
|
|||
|
|
super(props);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentDidMount() {
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { isCustom } = this.props.location.query;
|
|||
|
|
hrmConstRpSubSearch.scopeId = this.props.params.scopeId || '';
|
|||
|
|
hrmConstRpSubSearch.isCustom = isCustom || '';
|
|||
|
|
this.init();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
componentWillReceiveProps(nextProps) {
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { isCustom } = nextProps.location.query;
|
|||
|
|
hrmConstRpSubSearch.scopeId = nextProps.params.scopeId || '';
|
|||
|
|
hrmConstRpSubSearch.isCustom = isCustom || '';
|
|||
|
|
if(this.props.location.key !== nextProps.location.key ||
|
|||
|
|
this.props.params.scopeId !== nextProps.params.scopeId) {
|
|||
|
|
this.init();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
init(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
hrmConstRpSubSearch.visible=false;
|
|||
|
|
hrmConstRpSubSearch.templeteValue='';
|
|||
|
|
hrmConstRpSubSearch.templateid = '0';
|
|||
|
|
hrmConstRpSubSearch.getTabInfo({},()=>{
|
|||
|
|
hrmConstRpSubSearch.getCondition();
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
reset(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
this.refs.report.reset();
|
|||
|
|
hrmConstRpSubSearch.reset();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
formatData(){
|
|||
|
|
let fieldParams = this.refs.report.get();
|
|||
|
|
let params = {};
|
|||
|
|
let fieldnames = [];
|
|||
|
|
let checkshows = []
|
|||
|
|
for(let key in fieldParams) {
|
|||
|
|
let fieldparam = fieldParams[key]
|
|||
|
|
if(!fieldparam.disabled){
|
|||
|
|
if(fieldparam.checkRow){
|
|||
|
|
checkshows.push(key);
|
|||
|
|
params["con"+key+"_colname"]=key;
|
|||
|
|
params["con"+key+"_fieldlabel"]=fieldparam.label;
|
|||
|
|
params["show"+key+"_sn"]=fieldparam.index;
|
|||
|
|
}
|
|||
|
|
if(fieldparam.checked){
|
|||
|
|
fieldnames.push(key);
|
|||
|
|
params["con"+key+"_colname"]=key;
|
|||
|
|
let arrConditionType = fieldparam.conditionType.split("_");
|
|||
|
|
params["con"+key+"_htmltype"]=arrConditionType[0];
|
|||
|
|
params["con"+key+"_type"]=arrConditionType[1];
|
|||
|
|
if(fieldparam.value){
|
|||
|
|
params["con"+key+"_opt"]=fieldparam.value.opt||'';
|
|||
|
|
params["con"+key+"_opt1"]=fieldparam.value.opt1||'';
|
|||
|
|
// 司龄、工龄、身高、体重,不输入默认传0上去
|
|||
|
|
if(fieldparam.conditionType == "1_3"){
|
|||
|
|
params["con"+key+"_value"]=fieldparam.value.optvalue||fieldparam.value[key]||'0';
|
|||
|
|
params["con"+key+"_value1"]=fieldparam.value.opt1value||fieldparam.value[key]||'';
|
|||
|
|
}else{
|
|||
|
|
params["con"+key+"_value"]=fieldparam.value.optvalue||fieldparam.value[key]||'';
|
|||
|
|
params["con"+key+"_value1"]=fieldparam.value.opt1value||fieldparam.value[key]||'';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
params.check_show=checkshows;
|
|||
|
|
params.check_con=fieldnames;
|
|||
|
|
return params;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
doSearch(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
let params = this.formatData();
|
|||
|
|
hrmConstRpSubSearch.doSearch(params);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
saveTemplete(params = {}){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
let tmpTabKey = hrmConstRpSubSearch.tabkey;
|
|||
|
|
let formParams = this.formatData();
|
|||
|
|
params.scopeId = hrmConstRpSubSearch.scopeId;
|
|||
|
|
if(hrmConstRpSubSearch.isCustom=='1'){
|
|||
|
|
params.scopeCmd = '0';
|
|||
|
|
}else{
|
|||
|
|
if(tmpTabKey&& tmpTabKey.split("_").length==3){
|
|||
|
|
let tmpValue = tmpTabKey.split("_");
|
|||
|
|
params.scopeCmd = tmpValue[1];
|
|||
|
|
}else{
|
|||
|
|
params.scopeCmd = tmpTabKey;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
hrmConstRpSubSearch.saveTemplete({...params,...formParams});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
doSave(){
|
|||
|
|
let params = {};
|
|||
|
|
params.doSave=true;
|
|||
|
|
this.saveTemplete(params);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
reSave(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
hrmConstRpSubSearch.isReSave = true;
|
|||
|
|
hrmConstRpSubSearch.updateVisible(true);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
doDel(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { templateid } = hrmConstRpSubSearch;
|
|||
|
|
if(templateid!='0'){
|
|||
|
|
hrmConstRpSubSearch.deleteTabs();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getRightMenu(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { showResult,templateid } = hrmConstRpSubSearch;
|
|||
|
|
|
|||
|
|
let btns =[];
|
|||
|
|
const btnDoSearch = {
|
|||
|
|
icon: <i className='icon-coms-search'/>,
|
|||
|
|
content: i18n.button.search()
|
|||
|
|
};
|
|||
|
|
const btnSave = {
|
|||
|
|
icon: <i className='icon-coms-common'/>,
|
|||
|
|
content: i18n.button.save()
|
|||
|
|
};
|
|||
|
|
const btnDel = {
|
|||
|
|
icon: <i className='icon-coms-common'/>,
|
|||
|
|
content: i18n.button.delete()
|
|||
|
|
};
|
|||
|
|
const btnReSearch = {
|
|||
|
|
icon: <i className='icon-coms-go-back'/>,
|
|||
|
|
content:i18n.button.research()
|
|||
|
|
};
|
|||
|
|
const btnReSet = {
|
|||
|
|
icon: <i className='icon-coms-Return'/>,
|
|||
|
|
content:i18n.button.reset()
|
|||
|
|
};
|
|||
|
|
const btnSaveTemplete = {
|
|||
|
|
icon: <i className='icon-coms-content-o'/>,
|
|||
|
|
content:i18n.button.saveAsTemplate()
|
|||
|
|
};
|
|||
|
|
const btnReSaveTemplete = {
|
|||
|
|
icon: <i className='icon-coms-content-o'/>,
|
|||
|
|
content:i18n.button.saveAs()
|
|||
|
|
};
|
|||
|
|
const btnImportExcel = {
|
|||
|
|
icon: <i className='icon-coms-export'/>,
|
|||
|
|
content:i18n.button.export()
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
if(showResult){
|
|||
|
|
btns.push(btnReSearch);
|
|||
|
|
btns.push(btnImportExcel);
|
|||
|
|
}else{
|
|||
|
|
if(templateid == '0'){
|
|||
|
|
btns.push(btnDoSearch);
|
|||
|
|
btns.push(btnReSet);
|
|||
|
|
btns.push(btnSaveTemplete);
|
|||
|
|
}else{
|
|||
|
|
btns.push(btnDoSearch);
|
|||
|
|
btns.push(btnSave);
|
|||
|
|
btns.push(btnDel);
|
|||
|
|
btns.push(btnReSaveTemplete);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
onRightMenuClick(key){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { showResult,templateid } = hrmConstRpSubSearch;
|
|||
|
|
|
|||
|
|
if(showResult){
|
|||
|
|
switch(key){
|
|||
|
|
case '0':
|
|||
|
|
hrmConstRpSubSearch.reSearch();
|
|||
|
|
break;
|
|||
|
|
case '1':
|
|||
|
|
hrmConstRpSubSearch.importExcel();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
if(templateid=='0'){
|
|||
|
|
switch(key){
|
|||
|
|
case '0':
|
|||
|
|
this.doSearch();
|
|||
|
|
break;
|
|||
|
|
case '1':
|
|||
|
|
this.reset();
|
|||
|
|
break;
|
|||
|
|
case '2':
|
|||
|
|
hrmConstRpSubSearch.updateVisible(true);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}else{
|
|||
|
|
switch(key){
|
|||
|
|
case '0':
|
|||
|
|
this.doSearch();
|
|||
|
|
break;
|
|||
|
|
case '1':
|
|||
|
|
this.doSave();
|
|||
|
|
break;
|
|||
|
|
case '2':
|
|||
|
|
this.doDel();
|
|||
|
|
break;
|
|||
|
|
case '3':
|
|||
|
|
this.reSave();
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getTopButtons() {
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { showResult, templateid} = hrmConstRpSubSearch;
|
|||
|
|
let btns =[];
|
|||
|
|
const btnDoSearch = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>this.doSearch()} >{i18n.button.search()}</Button>;
|
|||
|
|
const btnDoSave = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>this.doSave()} >{i18n.button.save()}</Button>;
|
|||
|
|
const btnDoDel= <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>this.doDel()} >{i18n.button.delete()}</Button>;
|
|||
|
|
const btnReSearch = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>hrmConstRpSubSearch.reSearch()} >{i18n.button.research()}</Button>;
|
|||
|
|
const btnReSet = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>this.reset()} >{i18n.button.reset()}</Button>;
|
|||
|
|
const btnSaveTemplete = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>hrmConstRpSubSearch.updateVisible(true)} >{i18n.button.saveAsTemplate()}</Button>;
|
|||
|
|
const btnReSaveTemplete = <Button type="primary" className='wea-hrm-top-buttons' onClick={()=>this.reSave()} >{i18n.button.saveAs()}</Button>;
|
|||
|
|
const btnImportExcel = <Button type="primary" onClick={debounce(()=>hrmConstRpSubSearch.importExcel(),1000)} >{i18n.button.export()}</Button>;
|
|||
|
|
if(showResult){
|
|||
|
|
btns.push(btnReSearch);
|
|||
|
|
btns.push(btnImportExcel);
|
|||
|
|
}else{
|
|||
|
|
if(templateid=='0'){
|
|||
|
|
btns.push(btnDoSearch);
|
|||
|
|
btns.push(btnReSet);
|
|||
|
|
btns.push(btnSaveTemplete);
|
|||
|
|
}else{
|
|||
|
|
btns.push(btnDoSearch);
|
|||
|
|
btns.push(btnDoSave);
|
|||
|
|
btns.push(btnDoDel);
|
|||
|
|
btns.push(btnReSaveTemplete);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getDialogBtns() {
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const btns = [<Button type='primary' onClick={() => {
|
|||
|
|
this.saveTemplete();
|
|||
|
|
}}
|
|||
|
|
>{i18n.button.save()}</Button>];
|
|||
|
|
return btns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getTabChildren(){
|
|||
|
|
const {hrmConstRpSubSearch} = this.props;
|
|||
|
|
let {topTabkey,tabkey,tabDatas} = hrmConstRpSubSearch;
|
|||
|
|
let tabChildren;
|
|||
|
|
tabDatas = toJS(tabDatas);
|
|||
|
|
tabDatas && tabDatas.map((t,i)=>{
|
|||
|
|
if (topTabkey === t.key) {
|
|||
|
|
tabChildren=<WeaTab
|
|||
|
|
type='card'
|
|||
|
|
selectedKey={tabkey}
|
|||
|
|
datas={toJS(t.tabinfo)}
|
|||
|
|
keyParam='key'
|
|||
|
|
onChange={(key)=>{this.refs.report && this.refs.report.reset();hrmConstRpSubSearch.changeTab(key)}}
|
|||
|
|
/>
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
return tabChildren;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getCustomTabChildren(){
|
|||
|
|
const {hrmConstRpSubSearch} = this.props;
|
|||
|
|
let {tabkey,tabDatas} = hrmConstRpSubSearch;
|
|||
|
|
let tabChildren;
|
|||
|
|
tabDatas = toJS(tabDatas);
|
|||
|
|
tabDatas && tabDatas.map((t,i)=>{
|
|||
|
|
tabChildren = <WeaTab
|
|||
|
|
type='card'
|
|||
|
|
selectedKey={tabkey}
|
|||
|
|
datas={toJS(t.tabinfo)}
|
|||
|
|
keyParam='key'
|
|||
|
|
onChange={(key)=>{this.refs.report && this.refs.report.reset();hrmConstRpSubSearch.changeTab(key)}}
|
|||
|
|
/>
|
|||
|
|
})
|
|||
|
|
return tabChildren;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getTableWidth(columns){
|
|||
|
|
const columnLength = columns.filter((col)=>col.display === 'true').length;
|
|||
|
|
if(columnLength>10){
|
|||
|
|
return columnLength*160;
|
|||
|
|
}else{
|
|||
|
|
return '100%'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
getBreadcrumb() {
|
|||
|
|
let {router} = this.context;
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
const { title,isCustom } = hrmConstRpSubSearch;
|
|||
|
|
const arr = [];
|
|||
|
|
if(isCustom=='1'){
|
|||
|
|
arr.push({
|
|||
|
|
name: i18n.label.customerInfo(),
|
|||
|
|
onClick: () => {
|
|||
|
|
if (router) {
|
|||
|
|
router.push({
|
|||
|
|
pathname: `/main/hrm/rpsubsearch`
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
arr.push({
|
|||
|
|
name: title,
|
|||
|
|
onClick: () => {},
|
|||
|
|
});
|
|||
|
|
}else{
|
|||
|
|
arr.push({
|
|||
|
|
name: title,
|
|||
|
|
onClick: () => {},
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
return arr;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
tabsOnChange(key){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
this.refs.report && this.refs.report.reset();
|
|||
|
|
hrmConstRpSubSearch.changeTopTab(key);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
render(){
|
|||
|
|
const { hrmConstRpSubSearch } = this.props;
|
|||
|
|
let { verified, hasRight, title,form,table,config,showResult,tabDatas,topTabkey,visible,templeteValue, isCustom} = hrmConstRpSubSearch;
|
|||
|
|
config = toJS(config)
|
|||
|
|
if (verified && hasRight) {
|
|||
|
|
return( <div className='wea-hrm-const_rpsubsearch'>
|
|||
|
|
<WeaDialog
|
|||
|
|
visible={visible}
|
|||
|
|
onCancel={()=>hrmConstRpSubSearch.updateVisible(false)}
|
|||
|
|
closable
|
|||
|
|
style={{width: 500, height: 120}}
|
|||
|
|
title = {i18n.button.saveAsTemplate()}
|
|||
|
|
icon="icon-coms-hrm"
|
|||
|
|
iconBgcolor='#217346'
|
|||
|
|
buttons = {this.getDialogBtns()}
|
|||
|
|
>
|
|||
|
|
<div style={{padding: 20}}>
|
|||
|
|
<WeaFormItem
|
|||
|
|
label={i18n.label.templateName()}
|
|||
|
|
labelCol={{span: 6}}
|
|||
|
|
wrapperCol={{span: 14}}>
|
|||
|
|
<WeaInput viewAttr="3" value={templeteValue} onChange={(v)=> hrmConstRpSubSearch.updateTempleteValue(v)}/>
|
|||
|
|
</WeaFormItem>
|
|||
|
|
</div>
|
|||
|
|
</WeaDialog>
|
|||
|
|
<WeaRightMenu datas={this.getRightMenu()} onClick={this.onRightMenuClick.bind(this)}>
|
|||
|
|
<WeaTop
|
|||
|
|
//title={title}
|
|||
|
|
breadcrumb={ this.getBreadcrumb() }
|
|||
|
|
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='wea-hrm-detialtabinfo'>
|
|||
|
|
{
|
|||
|
|
isCustom == '1' && <div className='wea-hrm-cus_detialtabinfo'>{this.getCustomTabChildren()}</div>
|
|||
|
|
}
|
|||
|
|
{
|
|||
|
|
isCustom != '1' && <div>
|
|||
|
|
<WeaTab
|
|||
|
|
type='editable-inline'
|
|||
|
|
keyParam='key'
|
|||
|
|
datas={toJS(tabDatas)}
|
|||
|
|
selectedKey={topTabkey}
|
|||
|
|
onChange={ v => {
|
|||
|
|
this.tabsOnChange(v);
|
|||
|
|
}}
|
|||
|
|
/>
|
|||
|
|
{this.getTabChildren()}
|
|||
|
|
</div>
|
|||
|
|
}
|
|||
|
|
</div>
|
|||
|
|
{
|
|||
|
|
!showResult && !isEmpty(config) && <WeaReportGroup ref="report" config={config} hasIndex/>
|
|||
|
|
}
|
|||
|
|
{
|
|||
|
|
showResult && <div>
|
|||
|
|
<WeaTable
|
|||
|
|
comsWeaTableStore={table}
|
|||
|
|
hasOrder={true}
|
|||
|
|
needScroll={true}
|
|||
|
|
tableWidth={(columns)=>this.getTableWidth(columns)}
|
|||
|
|
//getColumns={c=>this.reRenderColumns(c)}
|
|||
|
|
rowKey={(record,index)=> index}
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
}
|
|||
|
|
</WeaTop>
|
|||
|
|
</WeaRightMenu>
|
|||
|
|
</div> );
|
|||
|
|
}
|
|||
|
|
if (verified && !hasRight) {
|
|||
|
|
return (<WeaAlertPage >
|
|||
|
|
<div style={{color : '#000'}}>
|
|||
|
|
{i18n.message.authFailed()}
|
|||
|
|
</div>
|
|||
|
|
</WeaAlertPage>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
return (
|
|||
|
|
<div></div>
|
|||
|
|
)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
export default Main
|