From 57cc610174a77b89f7cb6fbd8396ecb35f4bbef4 Mon Sep 17 00:00:00 2001
From: Chengliang <1546584672@qq.com>
Date: Mon, 8 Aug 2022 17:19:47 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BB=84=E7=BB=87=E9=80=8F=E8=A7=86=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D=E5=AF=BC=E5=87=BA=E5=9B=BE=E7=89=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.umirc.ts | 27 ++-
src/pages/user.jsx | 459 ++++++++++++++++++++++++---------------------
2 files changed, 267 insertions(+), 219 deletions(-)
diff --git a/.umirc.ts b/.umirc.ts
index e54955f..36b62ad 100644
--- a/.umirc.ts
+++ b/.umirc.ts
@@ -1,9 +1,17 @@
+/*
+ * @Author: Chengliang 1546584672@qq.com
+ * @Date: 2022-08-04 10:22:55
+ * @LastEditors: Chengliang 1546584672@qq.com
+ * @LastEditTime: 2022-08-08 16:31:31
+ * @FilePath: /org-chart-frant/.umirc.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
import { defineConfig } from 'umi';
export default defineConfig({
hash: true,
- history: { type: 'hash'},
- base: "/spa/orgChart/",
+ history: { type: 'hash' },
+ base: '/spa/orgChart/',
// exportStatic: {},
publicPath: './',
nodeModulesTransform: {
@@ -11,15 +19,16 @@ export default defineConfig({
},
routes: [
{ path: '/user', component: '@/pages/user' },
- { path: '/company', component: '@/pages/company' }
+ { path: '/company', component: '@/pages/company' },
],
fastRefresh: {},
antd: {},
proxy: {
- "/api": { // 标识需要进行转换的请求的url
- "target": "http://localhost:18089/api", // 服务端域名
- "changeOrigin": true, // 允许域名进行转换
- "pathRewrite": { "^/api": ''} // 将请求url里的ci去掉
- }
- }
+ '/api': {
+ // 标识需要进行转换的请求的url
+ target: 'http://localhost:8686/api', // 服务端域名
+ changeOrigin: true, // 允许域名进行转换
+ pathRewrite: { '^/api': '' }, // 将请求url里的ci去掉
+ },
+ },
});
diff --git a/src/pages/user.jsx b/src/pages/user.jsx
index 5f0c6c1..2542c1e 100644
--- a/src/pages/user.jsx
+++ b/src/pages/user.jsx
@@ -1,206 +1,217 @@
import styles from './index.less';
-import React, { useEffect, useState } from "react";
-import {OrgChartComponent} from '@/components/orgChart'
+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 moment from 'moment';
import qs from 'qs';
-import { message } from 'antd';
-
+import { message } from 'antd';
export default function userPage() {
- const [data, setData] = useState(null);
- const [progressTop, setProgressTop] = useState(50);
- let addNodeChildFunc = null;
- let orgChart = null;
- let progressBtnRef = null;
- let topBarSearchRequest = null;
-
-
- // 点击节点
- function onNodeClick(nodeId) {
- // alert('clicked ' + nodeId);
- }
+ const [data, setData] = useState(null);
+ const [progressTop, setProgressTop] = useState(50);
+ let addNodeChildFunc = null;
+ let orgChart = null;
+ let progressBtnRef = null;
+ let topBarSearchRequest = null;
- function onButtonClick(event, d) {
-
- if(d.children) {
- let idsList = []
- d.children.forEach(item => {
- if(item.data.hasChildren && !item._children) {
- idsList.push(item.data.id);
- }
- })
+ // 点击节点
+ function onNodeClick(nodeId) {
+ // alert('clicked ' + nodeId);
+ }
- if(idsList.length == 0) {
- return
+ function onButtonClick(event, d) {
+ if (d.children) {
+ let idsList = [];
+ d.children.forEach((item) => {
+ if (item.data.hasChildren && !item._children) {
+ idsList.push(item.data.id);
}
+ });
- let idsStr = idsList.join(",")
+ if (idsList.length == 0) {
+ return;
+ }
- console.log("idsStr", idsStr);
-
- 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
- }
+ let idsStr = idsList.join(',');
- fetch(api).then(res => res.json()).then(data => {
- if(data.data) {
- data.data.forEach(item => {
- window.chart.addNode(item)
- })
- }
- })
+ console.log('idsStr', idsStr);
+
+ 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;
}
- }
- // 获取部门图片
- function getDepartmentImage() {
- let index = Math.floor(Math.random() * 8) + 1
- return `./img/department/${index}.png`
+ fetch(api)
+ .then((res) => res.json())
+ .then((data) => {
+ if (data.data) {
+ data.data.forEach((item) => {
+ window.chart.addNode(item);
+ });
+ }
+ });
}
+ }
- // 获取部门图片
- function getSubcompanyImage() {
- let index = Math.floor(Math.random() * 3) + 1
- return `./img/subcompany/${index}.png`
- }
-
- // 获取数据
- useEffect(() => {
- 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);
- });
- }, [true]);
+ // 获取部门图片
+ function getDepartmentImage() {
+ let index = Math.floor(Math.random() * 8) + 1;
+ return `./img/department/${index}.png`;
+ }
- // ButtonContent渲染
- const buttonContentRender = ({ node, state }) => {
- return `
+ // 获取部门图片
+ function getSubcompanyImage() {
+ let index = Math.floor(Math.random() * 3) + 1;
+ return `./img/subcompany/${index}.png`;
+ }
+
+ // 获取数据
+ useEffect(() => {
+ 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);
+ });
+ }, [true]);
+
+ // ButtonContent渲染
+ const buttonContentRender = ({ node, state }) => {
+ return `
- `
- }
+ `;
+ };
- // 节点宽度渲染
- const nodeWidthRender = d =>
- {
- return 280;
- }
+ // 节点宽度渲染
+ const nodeWidthRender = (d) => {
+ return 280;
+ };
- const nodeHeightRender = d => {
- return 160;
- }
+ const nodeHeightRender = (d) => {
+ return 160;
+ };
- // tool bar start
- const handleTopLayoutClick = (progressBtn) => {
- progressBtn.current.style.top= 50 + "px";
- orgChart && orgChart.layout('top').render()
- }
+ // tool bar start
+ const handleTopLayoutClick = (progressBtn) => {
+ progressBtn.current.style.top = 50 + 'px';
+ orgChart && orgChart.layout('top').render();
+ };
- const handleLeftLayoutClick = (progressBtn) => {
- progressBtn.current.style.top= 50 + "px";
- orgChart && orgChart.layout('left').render()
- }
+ const handleLeftLayoutClick = (progressBtn) => {
+ progressBtn.current.style.top = 50 + 'px';
+ orgChart && orgChart.layout('left').render();
+ };
- const handleZoomIn = (progressBtn) => {
- if(progressBtn) {
- let top = (parseInt(progressBtn.current.style.top) - 10)
- if(top <= 0) {
- top = 30;
- }
- progressBtn.current.style.top = top + "px";
+ const handleZoomIn = (progressBtn) => {
+ if (progressBtn) {
+ let top = parseInt(progressBtn.current.style.top) - 10;
+ if (top <= 0) {
+ top = 30;
}
- orgChart && orgChart.zoomIn();
+ progressBtn.current.style.top = top + 'px';
}
+ orgChart && orgChart.zoomIn();
+ };
- const handleZoomOut = (progressBtn) => {
- if(progressBtn) {
- let top = (parseInt(progressBtn.current.style.top) + 10)
- if(top >= 100) {
- top = 70;
- }
- progressBtn.current.style.top = top + "px";
+ const handleZoomOut = (progressBtn) => {
+ if (progressBtn) {
+ let top = parseInt(progressBtn.current.style.top) + 10;
+ if (top >= 100) {
+ top = 70;
}
- orgChart && orgChart.zoomOut();
+ progressBtn.current.style.top = top + 'px';
}
+ orgChart && orgChart.zoomOut();
+ };
- // tool bar end
-
+ // tool bar end
- // top bar start
+ // top bar start
- function downloadPdf(chart) {
- chart.exportImg({
- save: false,
- 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');
- };
- },
- });
- }
+ function downloadPdf(chart) {
+ chart.exportImg({
+ save: false,
+ 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 handleExport = (type) => {
+ if (type == 'png') {
+ orgChart && orgChart.exportImg({ full: true });
+ } else {
+ orgChart && downloadPdf(orgChart);
}
+ };
- const handleSearch = (requestData) => {
- topBarSearchRequest = requestData
- let api = "/api/bs/hrmorganization/orgchart/userData" + qs.stringify(requestData, {addQueryPrefix: true})
- fetch(api).then(res => res.json()).then(data => {
- if(data.data && data.data.length > 0) {
- setData(data.data)
+ const handleSearch = (requestData) => {
+ topBarSearchRequest = requestData;
+ let api =
+ '/api/bs/hrmorganization/orgchart/userData' +
+ qs.stringify(requestData, { addQueryPrefix: true });
+ fetch(api)
+ .then((res) => res.json())
+ .then((data) => {
+ if (data.data && data.data.length > 0) {
+ setData(data.data);
} else {
- message.warning("暂无数据");
+ message.warning('暂无数据');
}
- })
- }
+ });
+ };
- // top bar end
+ // 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/"
- // 部门地址
- let departmentUrl = "/spa/organization/static/index.html#/main/organization/departmentExtend/"
- // 岗位地址
- let jobtitleUrl = "/spa/organization/static/index.html#/main/organization/jobExtend/";
+ 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/';
+ // 部门地址
+ let departmentUrl =
+ '/spa/organization/static/index.html#/main/organization/departmentExtend/';
+ // 岗位地址
+ let jobtitleUrl =
+ '/spa/organization/static/index.html#/main/organization/jobExtend/';
- // 人员地址
- let userUrl = "/spa/hrm/index_mobx.html#/main/hrm/card/cardInfo/";
+ // 人员地址
+ let userUrl = '/spa/hrm/index_mobx.html#/main/hrm/card/cardInfo/';
- // 通讯录
- let addressBookUrl = "/spa/hrm/index_mobx.html#/main/hrm/addressBook";
+ // 通讯录
+ let addressBookUrl = '/spa/hrm/index_mobx.html#/main/hrm/addressBook';
- if(d.data.ftype == 0 || d.data.ftype == 1 || d.data.ftype == 2) {
- return `
+ if (d.data.ftype == 0 || d.data.ftype == 1 || d.data.ftype == 2) {
+ return `
${d.data.fname}
+ " onclick="window.open('${
+ d.data.ftype == 0
+ ? companyUrl
+ : d.data.ftype == 1
+ ? subcompanyUrl + d.data.fnumber
+ : d.data.ftype == 2
+ ? departmentUrl + d.data.fnumber
+ : ''
+ }', '_blank')">${d.data.fname}
-
-
-

+
+
+
${d.data.fname} / ${d.data.fleaderjob}
-
编制: ${d.data.fplan}
-
在岗: ${d.data.fonjob}
+
编制: ${
+ d.data.fplan
+ }
+
在岗: ${
+ d.data.fonjob
+ }
-
`
- } else if(d.data.ftype == 3) {
- return `
+
`;
+ } else if (d.data.ftype == 3) {
+ return `
${d.data.fname}
@@ -280,7 +309,7 @@ export default function userPage() {
color: #333333;
margin-bottom: 23px;
" onclick="window.open('${
- jobtitleUrl + d.data.fnumber
+ jobtitleUrl + d.data.fnumber
}', '_blank')">${d.data.fname}
+
`;
+ } else if (d.data.ftype == 4) {
+ return `
+
@@ -305,7 +336,11 @@ export default function userPage() {
-

+
${d.data.department ? d.data.department + " / " : ""}${d.data.fleaderjob}
+ ">${d.data.department ? d.data.department + ' / ' : ''}${
+ d.data.fleaderjob
+ }
${d.data.mobile ? d.data.mobile : ""}
+ ">${d.data.mobile ? d.data.mobile : ''}
${d.data.address ? "地址:" + d.data.address : ""}
+ ">${d.data.address ? '地址:' + d.data.address : ''}
-
`
- }
+
`;
}
+ };
- return (
-
- {handleExport()}}
- onSearch={(requestData) => {handleSearch(requestData)}}
- url="/api/bs/hrmorganization/orgchart/getCondition?type=user"
- />
- handleTopLayoutClick(progressBtn)}
- onLeftLayoutClick={(progressBtn) => handleLeftLayoutClick(progressBtn)}
- onZoomOut={(progressBtn) => 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}
- />
-
- );
+ return (
+
+ {
+ handleExport(type);
+ }}
+ onSearch={(requestData) => {
+ handleSearch(requestData);
+ }}
+ url="/api/bs/hrmorganization/orgchart/getCondition?type=user"
+ />
+ handleTopLayoutClick(progressBtn)}
+ onLeftLayoutClick={(progressBtn) => handleLeftLayoutClick(progressBtn)}
+ onZoomOut={(progressBtn) => 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}
+ />
+
+ );
}