import styles from './index.less'; import React, { useEffect, useState } from 'react'; import { OrgChartComponent } from '@/components/orgChart'; import * as d3 from 'd3'; import { TopBar } from '../components/topBar'; import ToolBar from '../components/toolBar'; import moment from 'moment'; import qs from 'qs'; import { message } from 'antd'; import jsPDF from 'jspdf'; let active = 'top'; export default function userPage() { const [data, setData] = useState(null); const [topBarSearchRequest, setTpBarSearchRequest] = useState(null); const [requestRes, setRequestRes] = useState({ date: moment(new Date()).format('YYYY-MM-DD'), fclass: '0', root: '0', level: '3', fisvitual: '0', }); const [progressTop, setProgressTop] = useState(50); let addNodeChildFunc = null; let orgChart = null; let progressBtnRef = null; const [hasRight, setHasRight] = useState(''); // 点击节点 function onNodeClick(nodeId) { // alert('clicked ' + nodeId); } function onButtonClick(event, d) { if (d.children) { let idsList = []; d.children.forEach((item) => { if (item.data.hasChildren && !item._children) { idsList.push(item.data.id); } }); if (idsList.length == 0) { return; } let idsStr = idsList.join(','); let api = ''; if (topBarSearchRequest) { let request = { ...topBarSearchRequest, ids: idsStr }; api = '/api/bs/hrmorganization/orgchart/asyncUserData' + qs.stringify(request, { addQueryPrefix: true }); } else { api = '/api/bs/hrmorganization/orgchart/asyncUserData?fclass=0&root=0&date=' + moment(new Date()).format('YYYY-MM-DD') + '&ids=' + idsStr; } fetch(api) .then((res) => res.json()) .then((data) => { if (data.data) { data.data.forEach((item) => { window.chart.addNode(item); }); } }); } } // 获取部门图片 function getDepartmentImage() { let index = Math.floor(Math.random() * 8) + 1; return `./img/department/${index}.png`; } // 获取部门图片 function getSubcompanyImage() { let index = Math.floor(Math.random() * 3) + 1; return `./img/subcompany/${index}.png`; } // 获取数据 useEffect(() => { document.cookie = 'Webstorm-3d4d3ad4=b8ca5bef-a131-4c2b-81da-6f8595481dc2; ecology_JSessionid=aaadYmKjyxMd8_cZAZkuy; JSESSIONID=aaadYmKjyxMd8_cZAZkuy; loginidweaver=1; languageidweaver=7; loginuuids=1; __randcode__=092aa42b-2879-41a3-81e9-7e50b58aa689'; d3.json( // "/user/data" '/api/bs/hrmorganization/orgchart/userData?fclass=0&root=0&date=' + moment(new Date()).format('YYYY-MM-DD'), ).then((data) => { setData(data.data); setHasRight(data?.hasRight); }); }, [true]); // ButtonContent渲染 const buttonContentRender = ({ node, state }) => { return `
`; }; // 节点宽度渲染 const nodeWidthRender = (d) => { return 280; }; const nodeHeightRender = (d) => { return 160; }; // tool bar start const handleTopLayoutClick = (progressBtn) => { progressBtn.current.style.top = 50 + 'px'; orgChart && orgChart .setCentered(orgChart.getChartState().root.id) .layout('top') .render(); active = 'top'; }; const handleLeftLayoutClick = (progressBtn) => { progressBtn.current.style.top = 50 + 'px'; orgChart && orgChart .layout('left') .setCentered(orgChart.getChartState().root.id) .render(); active = 'left'; }; const handleZoomIn = (progressBtn) => { if (progressBtn) { let top = parseInt(progressBtn.current.style.top) - 10; if (top >= 0) { progressBtn.current.style.top = top + 'px'; } else { return; } } orgChart && orgChart.zoomIn(); }; const handleZoomOut = (progressBtn) => { if (progressBtn) { let top = parseInt(progressBtn.current.style.top) + 10; if (top <= 100) { progressBtn.current.style.top = top + 'px'; } else { return; } } orgChart && orgChart.zoomOut(); }; // tool bar end // top bar start function downloadPdf(chart) { chart.exportImg({ save: false, full: true, onLoad: (base64) => { var pdf = new jsPDF(); var img = new Image(); img.src = base64; img.onload = function () { pdf.addImage( img, 'JPEG', 5, 5, 595 / 3, ((img.height / img.width) * 595) / 3, ); pdf.save('chart.pdf'); }; }, }); } const handleExport = (type) => { if (type == 'png') { orgChart && orgChart.exportImg({ full: true }); } else { orgChart && downloadPdf(orgChart); } }; const handleSearch = (requestData) => { setTpBarSearchRequest(requestData); let api = '/api/bs/hrmorganization/orgchart/userData' + qs.stringify(requestData, { addQueryPrefix: true }); fetch(api) .then((res) => res.json()) .then((data) => { if (data.data) { if (!data.data.length) { setData([{}]); message.warning('暂无数据'); } else { setData(data?.data); } } }); }; const handleSynchronous = (requestData) => { let api = '/api/bs/hrmorganization/orgchart/synchronousData'; fetch(api) .then((res) => res.json()) .then((data) => { message.success('同步成功'); this.handleSearch(requestData); }); }; useEffect(() => { if (active == 'left') { orgChart && orgChart .setCentered(orgChart.getChartState().root.id) .layout('left') .render(); } else { orgChart && orgChart .setCentered(orgChart.getChartState().root.id) .layout('top') .render(); } }, [data]); // top bar end const nodeContentRender = (d, i, arr, state) => { // 集团地址 let companyUrl = '/spa/organization/static/index.html#/main/organization/group'; // 分部地址 let subcompanyUrl = `/spa/organization/static/index.html#/main/organization/companyExtend/${d.data.fobjid}`; // 部门地址 let departmentUrl = `/spa/organization/static/index.html#/main/organization/departmentExtend/${d.data.fobjid}`; // 岗位地址 let jobtitleUrl = `/spa/organization/static/index.html#/main/organization/jobExtend/${d.data.fobjid}`; // 人员地址 let userUrl = `/spa/organization/static/index.html#/main/organization/resourceCard/${d.data.fleader}`; // 岗位人员地址 let postUserUrl = `/spa/organization/static/index.html#/main/organization/resourceCard/${d.data.fobjid}`; //集团通讯录 let addressBookGroupUrl = `/spa/organization/static/index.html#/main/organization/resource/?virtualtype=0`; // 分部通讯录 let addressBookUrl = `/spa/organization/static/index.html#/main/organization/resource/?companyId=${d.data.fobjid}`; // 部门通讯录 let addressBookDepartmentUrl = `/spa/organization/static/index.html#/main/organization/resource/?departmentId=${d.data.fobjid}`; // 岗位通讯录 let addressBookPostUrl = `/spa/organization/static/index.html#/main/organization/resource/?jobTitle=${d.data.fobjid}`; if (d.data.ftype == 0 || d.data.ftype == 1 || d.data.ftype == 2) { return `
${d.data.fname}
${d.data.fleadername}
${d.data.fname}${ d.data.fleaderjob ? `/${d.data.fleaderjob}` : '' }
编制: ${ d.data.fplan }
在岗: ${d.data.fonjob}
`; } else if (d.data.ftype == 3) { return `
${ d.data.fname }
${ d.data.fname }
编制:${d.data.fplan} 在岗:${ d.data.fonjob }
`; } else if (d.data.ftype == 4) { return `
${d.data.fname}
${ d.data.fleaderst ? d.data.fleaderlv ? `(${d.data.fleaderst}/` : `(${d.data.fleaderst})` : '' }${d.data.fleaderlv ? `${d.data.fleaderlv})` : ''}
${d.data.department ? d.data.department + ' / ' : ''}${ d.data.fleaderjob }
`; } }; if (hasRight === false) { return (

对不起,您暂时没有权限!

); } return ( hasRight && (
{ handleExport(type); }} onSearch={(requestData) => { setRequestRes(requestData); handleSearch(requestData); }} onSynchronous={(requestData) => { handleSynchronous(requestData); }} type="user" url="/api/bs/hrmorganization/orgchart/getCondition?type=user" /> handleZoomOut(progressBtn)} onZoomIn={(progressBtn) => handleZoomIn(progressBtn)} /> (orgChart = chart)} setClick={(click) => (addNodeChildFunc = click)} onNodeClick={onNodeClick} onButtonClick={onButtonClick} data={data} buttonContent={buttonContentRender} nodeWidth={nodeWidthRender} nodeHeight={nodeHeightRender} nodeContent={nodeContentRender} requestRes={requestRes} />
) ); }