From b731548e050c727c4e05db660dfb64eabc94dbdd Mon Sep 17 00:00:00 2001
From: zhangyongtian <1181606322@qq.com>
Date: Fri, 13 Sep 2024 16:35:46 +0800
Subject: [PATCH] fix: bug修改

---
 gz-customerSystem/src/components/SelectObjModal/selectPerson.jsx |  208 +++++++++++++++++++++++++++------------------------
 1 files changed, 111 insertions(+), 97 deletions(-)

diff --git a/gz-customerSystem/src/components/SelectObjModal/selectPerson.jsx b/gz-customerSystem/src/components/SelectObjModal/selectPerson.jsx
index 4a9c2e0..ac564e7 100644
--- a/gz-customerSystem/src/components/SelectObjModal/selectPerson.jsx
+++ b/gz-customerSystem/src/components/SelectObjModal/selectPerson.jsx
@@ -12,13 +12,32 @@
 import { CloseOutlined } from '@ant-design/icons';
 import './index.less';
 import * as $$ from '../../utils/utility';
-import { Modal } from '@arco-design/web-react';
+import { Modal, Spin } from '@arco-design/web-react';
 
 const { Search } = Input;
 
+const txtMap = {
+	dept: '部门',
+	person: '人',
+	unit: '组织'
+}
+
 // 获取人员,组织,部门数据
 function getDataApi(type, searchData) {
-	const url = type === 'person' ? 'ctUser/userChoose' : type === 'unit' ? 'ctUser/unitList' : 'ctUser/deptList';
+	let url
+	switch (type) {
+		case 'dept':
+			url = `ctUnit/unitChoose`
+			break;
+		case 'person':
+			url = 'ctUser/userChoose'
+			break
+		case 'unit':
+			url = 'ctUser/unitList'
+			break
+		default:
+			break;
+	}
 	return $$.ax.request({ url, type: 'get', data: searchData, service: 'cust' });
 }
 
@@ -31,36 +50,38 @@
  * onClose, // 关闭
  * onOk, // 点击确定的回调
  */
-const SelectObjModal = ({ visible = false, checkKeys = [], type = 'person', isCheckbox = false, searchData = {}, onClose, onOk, }) => {
+const SelectObjModal = ({ visible = false, checkKeys = [], type = 'dept', isCheckbox = false, searchData = {}, onClose, onOk, }) => {
+	const nameStr = txtMap[type];
+	// 默认调解员查询'22_00024-4'
+	const searchRole = type === 'person' ? { roleCode: '22_00024-4' } : {};
 	const [data, setData] = useState([]);
-
 	const [checkedKeys, setCheckedKeys] = useState({ keys: [], items: [] });
-
 	const [expandedKeys, setExpandedKeys] = useState([]);
-
 	const [searchValue, setSearchValue] = useState('');
-
 	const [autoExpandParent, setAutoExpandParent] = useState(true);
-
 	const [dataList, setDataList] = useState([]);
+	const [loading, setLoading] = useState(false);
 
-	// tree复选框选择
-	function handleCheck(checkedKeys, e) {
-		if (!isCheckbox && checkedKeys.checked.length > 1) {
-			$$.info({ type: 'warning', content: '当前选择只可单选' });
-			return;
+	useEffect(() => {
+		if (!visible) return;
+		// 获取数据
+		async function getData() {
+			setLoading(true)
+			const res = await getDataApi(type, { ...searchRole, ...searchData });
+			setLoading(false)
+			if (res.type) {
+				setData(res.data || []);
+			}
 		}
-		let checkedNodes = e.checkedNodes;
-		checkedNodes.forEach((x) => delete x.children);
-		setCheckedKeys({ keys: checkedKeys.checked, items: checkedNodes });
-	}
-
-	// 删除选项
-	function handleDelete(t) {
-		checkedKeys.keys.splice(t, 1);
-		checkedKeys.items.splice(t, 1);
-		setCheckedKeys({ ...checkedKeys });
-	}
+		if (checkKeys.length !== 0) {
+			let keys = [];
+			checkKeys.forEach((x) => keys.push(x.value));
+			setCheckedKeys({ keys, items: checkKeys });
+		} else {
+			setCheckedKeys({ keys: [], items: [] });
+		}
+		getData();
+	}, [type, visible]);
 
 	// 搜索
 	useEffect(() => {
@@ -80,35 +101,6 @@
 		setDataList(arr);
 		handleSearch('', arr);
 	}, [data]);
-
-	const getParentKey = (key, tree) => {
-		let parentKey;
-		for (let i = 0; i < tree.length; i++) {
-			const node = tree[i];
-			if (node.children) {
-				if (node.children.some((item) => item.value === key)) {
-					parentKey = node.value;
-				} else if (getParentKey(key, node.children)) {
-					parentKey = getParentKey(key, node.children);
-				}
-			}
-		}
-		return parentKey;
-	};
-
-	function handleSearch(value, dataList) {
-		const newExpandedKeys = dataList
-			.map((item) => {
-				if (item.label.indexOf(value) > -1) {
-					return getParentKey(item.value, data);
-				}
-				return null;
-			})
-			.filter((item, i, self) => item && self.indexOf(item) === i);
-		setExpandedKeys(newExpandedKeys);
-		setSearchValue(value);
-		setAutoExpandParent(true);
-	}
 
 	const treeData = useMemo(() => {
 		const loop = (data) =>
@@ -146,32 +138,52 @@
 		return loop(data);
 	}, [searchValue, data]);
 
-	// 默认调解员查询'22_00024-4'
-	const searchRole = type === 'person' ? { roleCode: '22_00024-4' } : {};
+	// tree复选框选择
+	function handleCheck(checkedKeys, e) {
+		if (!isCheckbox && checkedKeys.checked.length > 1) {
+			$$.info({ type: 'warning', content: '当前选择只可单选' });
+			return;
+		}
+		let checkedNodes = e.checkedNodes;
+		checkedNodes.forEach((x) => delete x.children);
+		setCheckedKeys({ keys: checkedKeys.checked, items: checkedNodes });
+	}
 
-	console.log(checkedKeys.keys,'checkedKeys.keyscheckedKeys.keys')
-	useEffect(() => {
-		if (!visible) return;
-		// 获取数据
-		async function getData() {
-			global.setSpinning(true);
-			const res = await getDataApi(type, { ...searchRole, ...searchData });
-			global.setSpinning(false);
-			if (res.type) {
-				setData(res.data || []);
+	// 删除选项
+	function handleDelete(t) {
+		checkedKeys.keys.splice(t, 1);
+		checkedKeys.items.splice(t, 1);
+		setCheckedKeys({ ...checkedKeys });
+	}
+
+	const getParentKey = (key, tree) => {
+		let parentKey;
+		for (let i = 0; i < tree.length; i++) {
+			const node = tree[i];
+			if (node.children) {
+				if (node.children.some((item) => item.value === key)) {
+					parentKey = node.value;
+				} else if (getParentKey(key, node.children)) {
+					parentKey = getParentKey(key, node.children);
+				}
 			}
 		}
-		if (checkKeys.length !== 0) {
-			let keys = [];
-			checkKeys.forEach((x) => keys.push(x.value));
-			setCheckedKeys({ keys, items: checkKeys });
-		} else {
-			setCheckedKeys({ keys: [], items: [] });
-		}
-		getData();
-	}, [type, visible]);
+		return parentKey;
+	};
 
-	const nameStr = type === 'person' ? '人员' : type === 'unit' ? '组织' : '部门';
+	function handleSearch(value, dataList) {
+		const newExpandedKeys = dataList
+			.map((item) => {
+				if (item.label.indexOf(value) > -1) {
+					return getParentKey(item.value, data);
+				}
+				return null;
+			})
+			.filter((item, i, self) => item && self.indexOf(item) === i);
+		setExpandedKeys(newExpandedKeys);
+		setSearchValue(value);
+		setAutoExpandParent(true);
+	}
 
 	return (
 		<Modal
@@ -189,27 +201,29 @@
 						<Search placeholder={`查询${nameStr}名称`} onChange={(e) => handleSearch(e.target.value, dataList)} />
 					</div>
 					<div className="selectObjModal-left-main">
-						{data.length > 0 ? (
-							<Tree
-								checkable
-								checkStrictly
-								defaultExpandAll
-								onExpand={(newExpandedKeys) => {
-									setExpandedKeys(newExpandedKeys);
-									setAutoExpandParent(false);
-								}}
-								expandedKeys={expandedKeys}
-								autoExpandParent={autoExpandParent}
-								selectable={false}
-								onCheck={(checkedKeys, e) => handleCheck(checkedKeys, e)}
-								checkedKeys={checkedKeys.keys}
-								treeData={treeData}
-								fieldNames={{ title: 'label', key: 'value' }}
-								height={400}
-							/>
-						) : (
-							$$.MyEmpty()
-						)}
+						<Spin loading={loading} style={{ width: '100%', height: '100%' }}>
+							{data.length > 0 ? (
+								<Tree
+									checkable
+									checkStrictly
+									defaultExpandAll
+									onExpand={(newExpandedKeys) => {
+										setExpandedKeys(newExpandedKeys);
+										setAutoExpandParent(false);
+									}}
+									expandedKeys={expandedKeys}
+									autoExpandParent={autoExpandParent}
+									selectable={false}
+									onCheck={(checkedKeys, e) => handleCheck(checkedKeys, e)}
+									checkedKeys={checkedKeys.keys}
+									treeData={treeData}
+									fieldNames={{ title: 'label', key: 'value' }}
+									height={400}
+								/>
+							) : (
+								$$.MyEmpty()
+							)}
+						</Spin>
 					</div>
 				</div>
 				<div className="selectObjModal-right">
@@ -223,7 +237,7 @@
 				</div>
 			</div>
 			<div className="selectObjModal-footer">
-				<div>已选中:{checkedKeys.keys.length}人</div>
+				<div>已选中:{checkedKeys.keys.length}{txtMap[type]}</div>
 				<Space size="middle">
 					<Button onClick={onClose}>取消</Button>
 					<Button type="primary" onClick={() => onOk && onOk(checkedKeys)}>

--
Gitblit v1.8.0