|
|
|
@ -21,9 +21,16 @@ const { TextArea } = Input;
|
|
|
|
|
import moment from 'moment';
|
|
|
|
|
import 'moment/locale/zh-cn';
|
|
|
|
|
import locale from 'antd/lib/date-picker/locale/zh_CN';
|
|
|
|
|
import { HomeOutlined } from '@ant-design/icons';
|
|
|
|
|
import { HomeOutlined, FolderOpenOutlined } from '@ant-design/icons';
|
|
|
|
|
moment.locale('zh-cn');
|
|
|
|
|
|
|
|
|
|
const defaultLevelOpt = [
|
|
|
|
|
{ value: '1', label: '全部' },
|
|
|
|
|
{ value: '2', label: '一级' },
|
|
|
|
|
{ value: '3', label: '二级' },
|
|
|
|
|
{ value: '4', label: '三级' },
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
export class TopBar extends React.Component {
|
|
|
|
|
constructor(props) {
|
|
|
|
|
super(props);
|
|
|
|
@ -32,9 +39,11 @@ export class TopBar extends React.Component {
|
|
|
|
|
rootTreeData: [], //根节点异步树
|
|
|
|
|
treeLoadedKeys: [],
|
|
|
|
|
treeExpandedKeys: [],
|
|
|
|
|
deptTreeData: [],
|
|
|
|
|
requestData: {
|
|
|
|
|
fclass: '0',
|
|
|
|
|
root: undefined,
|
|
|
|
|
department: undefined,
|
|
|
|
|
level: '2',
|
|
|
|
|
fisvitual: '0',
|
|
|
|
|
hidedept: '0',
|
|
|
|
@ -42,6 +51,7 @@ export class TopBar extends React.Component {
|
|
|
|
|
open: false,
|
|
|
|
|
confirmLoading: false,
|
|
|
|
|
description: '',
|
|
|
|
|
levelOpt: defaultLevelOpt,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -142,8 +152,58 @@ export class TopBar extends React.Component {
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
onRootChange = (value) => {
|
|
|
|
|
let requestData = { ...this.state.requestData, root: value };
|
|
|
|
|
this.setState({ requestData });
|
|
|
|
|
const { fclass } = this.state.requestData;
|
|
|
|
|
if (fclass != '0') {
|
|
|
|
|
//顺胜项目二开 增加部门节点树
|
|
|
|
|
this.getDeptTreeData(
|
|
|
|
|
`/api/bs/hrmorganization/orgchart/getDepartmentTree?fclass=${fclass}&subcompany=${value}`,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
this.handleFormChange({ department: undefined, root: value });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 部门节点树
|
|
|
|
|
*/
|
|
|
|
|
getDeptTreeData = (url) => {
|
|
|
|
|
fetch(url)
|
|
|
|
|
.then((res) => res.json())
|
|
|
|
|
.then((data) => {
|
|
|
|
|
if (data.api_status) {
|
|
|
|
|
let arr = [...data.departmentTree];
|
|
|
|
|
arr.map((item, index) => {
|
|
|
|
|
item.icon = <FolderOpenOutlined />;
|
|
|
|
|
});
|
|
|
|
|
this.setState({
|
|
|
|
|
deptTreeData: arr,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onDeptChange = (value, label, extra) => {
|
|
|
|
|
var opt = this.buildLevelOpt(0);
|
|
|
|
|
var level = '1';
|
|
|
|
|
if (value != undefined) {
|
|
|
|
|
level = extra.triggerNode.props.level;
|
|
|
|
|
opt = this.buildLevelOpt(level);
|
|
|
|
|
}
|
|
|
|
|
this.handleFormChange({
|
|
|
|
|
department: value,
|
|
|
|
|
level: level === '1' ? level : `${level + 1}`,
|
|
|
|
|
});
|
|
|
|
|
this.setState({ levelOpt: opt });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 虚拟维度部门层级构建
|
|
|
|
|
*/
|
|
|
|
|
buildLevelOpt = (level) => {
|
|
|
|
|
let opt = [{ value: '1', label: '全部' }];
|
|
|
|
|
for (let index = 1; index <= level; index++) {
|
|
|
|
|
opt.push({ value: `${index + 1}`, label: `${index}级` });
|
|
|
|
|
}
|
|
|
|
|
return opt;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onTreeExpand = (expandedKeys) => {
|
|
|
|
@ -188,7 +248,16 @@ export class TopBar extends React.Component {
|
|
|
|
|
|
|
|
|
|
render() {
|
|
|
|
|
const { disabled, type } = this.props;
|
|
|
|
|
const { rootTreeData, open, confirmLoading, treeExpandedKeys } = this.state;
|
|
|
|
|
const {
|
|
|
|
|
rootTreeData,
|
|
|
|
|
open,
|
|
|
|
|
confirmLoading,
|
|
|
|
|
treeExpandedKeys,
|
|
|
|
|
requestData,
|
|
|
|
|
deptTreeData,
|
|
|
|
|
levelOpt,
|
|
|
|
|
} = this.state;
|
|
|
|
|
const { fclass, department } = requestData;
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className={style.topbarWrapper}>
|
|
|
|
@ -198,18 +267,22 @@ export class TopBar extends React.Component {
|
|
|
|
|
<Select
|
|
|
|
|
defaultValue="0"
|
|
|
|
|
style={{ width: 140 }}
|
|
|
|
|
value={this.state.requestData.fclass}
|
|
|
|
|
value={fclass}
|
|
|
|
|
onChange={(value) => {
|
|
|
|
|
const requestData = {
|
|
|
|
|
fclass: value,
|
|
|
|
|
root: undefined,
|
|
|
|
|
level: '2',
|
|
|
|
|
department: undefined,
|
|
|
|
|
level: value == '0' ? '2' : '1',
|
|
|
|
|
fisvitual: '0',
|
|
|
|
|
hidedept: '0',
|
|
|
|
|
};
|
|
|
|
|
this.handleFormChange(requestData);
|
|
|
|
|
this.setState({
|
|
|
|
|
rootTreeData: [],
|
|
|
|
|
deptTreeData: [],
|
|
|
|
|
levelOpt:
|
|
|
|
|
value == '0' ? defaultLevelOpt : this.buildLevelOpt(0),
|
|
|
|
|
});
|
|
|
|
|
this.getNodeTreeNode(
|
|
|
|
|
`/api/bs/hrmorganization/orgchart/getSubCompanyTree?fclass=${value}`,
|
|
|
|
@ -265,15 +338,15 @@ export class TopBar extends React.Component {
|
|
|
|
|
<Col span={6}>
|
|
|
|
|
部门层级:
|
|
|
|
|
<Select
|
|
|
|
|
defaultValue="3"
|
|
|
|
|
style={{ width: 140 }}
|
|
|
|
|
value={this.state.requestData.level}
|
|
|
|
|
onChange={(value) => this.handleFormChange({ level: value })}
|
|
|
|
|
>
|
|
|
|
|
<Option value="1">全部</Option>
|
|
|
|
|
<Option value="2">一级</Option>
|
|
|
|
|
<Option value="3">二级</Option>
|
|
|
|
|
<Option value="4">三级</Option>
|
|
|
|
|
{levelOpt.map((item) => (
|
|
|
|
|
<Option key={item.value} value={item.value}>
|
|
|
|
|
{item.label}
|
|
|
|
|
</Option>
|
|
|
|
|
))}
|
|
|
|
|
</Select>
|
|
|
|
|
</Col>
|
|
|
|
|
</Row>
|
|
|
|
@ -300,7 +373,25 @@ export class TopBar extends React.Component {
|
|
|
|
|
/>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
</Col>
|
|
|
|
|
<Col span={16}>
|
|
|
|
|
{fclass != '0' ? (
|
|
|
|
|
<Col span={8}>
|
|
|
|
|
部门节点:
|
|
|
|
|
<TreeSelect
|
|
|
|
|
treeDataSimpleMode
|
|
|
|
|
allowClear
|
|
|
|
|
style={{ width: '75%' }}
|
|
|
|
|
value={department}
|
|
|
|
|
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
|
|
|
|
|
placeholder="请选择部门节点"
|
|
|
|
|
onChange={this.onDeptChange}
|
|
|
|
|
treeData={deptTreeData}
|
|
|
|
|
treeIcon
|
|
|
|
|
/>
|
|
|
|
|
</Col>
|
|
|
|
|
) : (
|
|
|
|
|
''
|
|
|
|
|
)}
|
|
|
|
|
<Col span={10}>
|
|
|
|
|
<Button
|
|
|
|
|
type="primary"
|
|
|
|
|
style={{ marginRight: '10px' }}
|
|
|
|
@ -310,15 +401,6 @@ export class TopBar extends React.Component {
|
|
|
|
|
>
|
|
|
|
|
查询
|
|
|
|
|
</Button>
|
|
|
|
|
<Button
|
|
|
|
|
type="primary"
|
|
|
|
|
style={{ marginRight: '10px' }}
|
|
|
|
|
onClick={() => {
|
|
|
|
|
window.open('#/statistics', 'blank');
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
人数统计
|
|
|
|
|
</Button>
|
|
|
|
|
<Dropdown overlay={this.menu}>
|
|
|
|
|
<Button type="primary">导出</Button>
|
|
|
|
|
</Dropdown>
|
|
|
|
|