feat: enhance Druid integration and improve user management features
This commit is contained in:
@@ -23,10 +23,11 @@ const handleAdd = async (fields: API.System.Dept) => {
|
||||
hide();
|
||||
if (resp.code === 200) {
|
||||
message.success('添加成功');
|
||||
return true;
|
||||
} else {
|
||||
message.error(resp.msg);
|
||||
message.error(resp.msg || '添加失败');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
hide();
|
||||
message.error('添加失败请重试!');
|
||||
@@ -46,10 +47,11 @@ const handleUpdate = async (fields: API.System.Dept) => {
|
||||
hide();
|
||||
if (resp.code === 200) {
|
||||
message.success('更新成功');
|
||||
return true;
|
||||
} else {
|
||||
message.error(resp.msg);
|
||||
message.error(resp.msg || '更新失败');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
hide();
|
||||
message.error('配置失败请重试!');
|
||||
@@ -70,10 +72,11 @@ const handleRemove = async (selectedRows: API.System.Dept[]) => {
|
||||
hide();
|
||||
if (resp.code === 200) {
|
||||
message.success('删除成功,即将刷新');
|
||||
return true;
|
||||
} else {
|
||||
message.error(resp.msg);
|
||||
message.error(resp.msg || '删除失败');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
hide();
|
||||
message.error('删除失败,请重试');
|
||||
@@ -90,10 +93,11 @@ const handleRemoveOne = async (selectedRow: API.System.Dept) => {
|
||||
hide();
|
||||
if (resp.code === 200) {
|
||||
message.success('删除成功,即将刷新');
|
||||
return true;
|
||||
} else {
|
||||
message.error(resp.msg);
|
||||
message.error(resp.msg || '删除失败');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
hide();
|
||||
message.error('删除失败,请重试');
|
||||
@@ -101,6 +105,16 @@ const handleRemoveOne = async (selectedRow: API.System.Dept) => {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* 获取树表格中所有有下级部门的节点,确保异步加载后能够展开到任意层级。
|
||||
*/
|
||||
const getExpandableRowKeys = (nodes: any[]): React.Key[] =>
|
||||
nodes.flatMap((node) => {
|
||||
if (!Array.isArray(node.children) || node.children.length === 0) {
|
||||
return [];
|
||||
}
|
||||
return [node.deptId, ...getExpandableRowKeys(node.children)];
|
||||
});
|
||||
|
||||
const DeptTableList: React.FC = () => {
|
||||
const formTableRef = useRef<FormInstance>();
|
||||
@@ -110,6 +124,7 @@ const DeptTableList: React.FC = () => {
|
||||
const actionRef = useRef<ActionType>();
|
||||
const [currentRow, setCurrentRow] = useState<API.System.Dept>();
|
||||
const [selectedRows, setSelectedRows] = useState<API.System.Dept[]>([]);
|
||||
const [expandedRowKeys, setExpandedRowKeys] = useState<React.Key[]>([]);
|
||||
|
||||
const [deptTree, setDeptTree] = useState<any>([]);
|
||||
const [statusOptions, setStatusOptions] = useState<any>([]);
|
||||
@@ -125,6 +140,22 @@ const DeptTableList: React.FC = () => {
|
||||
});
|
||||
}, []);
|
||||
|
||||
const openAddModal = async (parentId?: number) => {
|
||||
const res = await getDeptList();
|
||||
if (res.code !== 200) {
|
||||
message.warning(res.msg || '部门列表加载失败');
|
||||
return;
|
||||
}
|
||||
|
||||
setDeptTree(buildTreeData(res.data, 'deptId', 'deptName', '', '', ''));
|
||||
setCurrentRow(
|
||||
parentId === undefined
|
||||
? undefined
|
||||
: ({ parentId, orderNum: 1, status: '0' } as API.System.Dept),
|
||||
);
|
||||
setModalVisible(true);
|
||||
};
|
||||
|
||||
const columns: ProColumns<API.System.Dept>[] = [
|
||||
{
|
||||
title: <FormattedMessage id="system.dept.dept_name" defaultMessage="部门名称" />,
|
||||
@@ -148,14 +179,14 @@ const DeptTableList: React.FC = () => {
|
||||
{
|
||||
title: <FormattedMessage id="pages.searchTable.titleOption" defaultMessage="操作" />,
|
||||
dataIndex: 'option',
|
||||
width: '220px',
|
||||
width: '300px',
|
||||
valueType: 'option',
|
||||
render: (_, record) => [
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
key="edit"
|
||||
hidden={!access.hasPerms('system:dept:edit.tsx')}
|
||||
hidden={!access.hasPerms('system:dept:edit')}
|
||||
onClick={() => {
|
||||
getDeptListExcludeChild(record.deptId).then((res) => {
|
||||
if (res.code === 200) {
|
||||
@@ -174,6 +205,15 @@ const DeptTableList: React.FC = () => {
|
||||
>
|
||||
编辑
|
||||
</Button>,
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
key="addChild"
|
||||
hidden={!access.hasPerms('system:dept:add')}
|
||||
onClick={() => openAddModal(record.deptId)}
|
||||
>
|
||||
<PlusOutlined /> 新增下级
|
||||
</Button>,
|
||||
<Button
|
||||
type="link"
|
||||
size="small"
|
||||
@@ -218,22 +258,16 @@ const DeptTableList: React.FC = () => {
|
||||
search={{
|
||||
labelWidth: 120,
|
||||
}}
|
||||
expandable={{
|
||||
expandedRowKeys,
|
||||
onExpandedRowsChange: (keys) => setExpandedRowKeys(keys),
|
||||
}}
|
||||
toolBarRender={() => [
|
||||
<Button
|
||||
type="primary"
|
||||
key="add"
|
||||
hidden={!access.hasPerms('system:dept:add')}
|
||||
onClick={async () => {
|
||||
getDeptList().then((res) => {
|
||||
if (res.code === 200) {
|
||||
setDeptTree(buildTreeData(res.data, 'deptId', 'deptName', '', '', ''));
|
||||
setCurrentRow(undefined);
|
||||
setModalVisible(true);
|
||||
} else {
|
||||
message.warning(res.msg);
|
||||
}
|
||||
});
|
||||
}}
|
||||
onClick={() => openAddModal()}
|
||||
>
|
||||
<PlusOutlined /> <FormattedMessage id="pages.searchTable.new" defaultMessage="新建" />
|
||||
</Button>,
|
||||
@@ -264,8 +298,10 @@ const DeptTableList: React.FC = () => {
|
||||
]}
|
||||
request={(params) =>
|
||||
getDeptList({ ...params } as API.System.DeptListParams).then((res) => {
|
||||
const treeData = buildTreeData(res.data, 'deptId', 'deptName', '', '', '');
|
||||
setExpandedRowKeys(getExpandableRowKeys(treeData));
|
||||
const result = {
|
||||
data: buildTreeData(res.data, 'deptId', '', '', '', ''),
|
||||
data: treeData,
|
||||
total: res.data.length,
|
||||
success: true,
|
||||
};
|
||||
@@ -293,7 +329,7 @@ const DeptTableList: React.FC = () => {
|
||||
<Button
|
||||
key="remove"
|
||||
danger
|
||||
hidden={!access.hasPerms('system:dept:del')}
|
||||
hidden={!access.hasPerms('system:dept:remove')}
|
||||
onClick={async () => {
|
||||
Modal.confirm({
|
||||
title: '删除',
|
||||
|
||||
Reference in New Issue
Block a user