/* * @Author: code4eat awesomedema@gmail.com * @Date: 2022-12-16 09:42:52 * @LastEditors: code4eat awesomedema@gmail.com * @LastEditTime: 2023-06-06 13:32:54 * @FilePath: /BudgetManaSystem/src/pages/budgetMana/monthlySet/index.tsx * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ import BMSPagecontainer from '@/components/BMSPageContainer'; import { useEffect,useRef, useState } from 'react'; import './style.less'; import { TreeProps, Input,Popconfirm, message } from 'antd'; import { DataNode } from 'antd/es/tree'; import expandedIcon from '../../../../../static/treenode_open.png'; import closeIcon from '../../../../../static/treenode_collapse.png'; import { BMSTable } from '@/components/BMSTable'; import { ActionType, ModalForm, ProColumns, ProFormRadio, ProFormSelect, ProFormText, ProFormTextArea } from '@ant-design/pro-components'; import { createFromIconfontCN } from '@ant-design/icons'; import { addCheckUnit, delTableData, editCheckUnit, getCheckUnitTableDataByUnitClass, getTreeData } from './service'; import 'dayjs/locale/zh-cn'; import React from 'react'; import DirectoryTree from 'antd/es/tree/DirectoryTree'; import { getDeepestTreeData } from '@/utils/tooljs'; import { CheckUnitClassTableDataType } from '../checkUnitClassMana/service'; import { getDataByKeyFromDic, getPubDicData } from '@/services/getDic'; import '../../../../utils/zhongtaiB'; import '../../../../utils/zhongtaiC'; const IconFont = createFromIconfontCN({ scriptUrl: '', }); const SearchIcon = createFromIconfontCN({ scriptUrl: '', }); export type TableListItem = { key: number; name: string; }; const CheckUnitMana: React.FC = () => { const [treeData, set_treeData] = useState([]); const [tableColumn, set_tableColumn] = useState([]); const [currentSelectedTreeNode, set_currentSelectedTreeNode] = useState(); const [tableDataFilterParams, set_tableDataFilterParams] = useState(undefined); const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState(''); const [expandedKeys, setExpandedKeys] = useState([]); const [searchValue, setSearchValue] = useState(''); const [autoExpandParent, setAutoExpandParent] = useState(true); const tableRef = useRef(); const column = [ { title: '核算单元名称', dataIndex: 'unitName' }, { title: '核算单元代码', dataIndex: 'code', }, { title: '职类', dataIndex: 'unitTypeName', }, { title: '特殊单元', dataIndex: 'specialUnit', render: (_: any, record: any) => { return record.specialUnit == 1 ? '是' : '否' } }, { title: '单元分级', dataIndex: 'unitLevelName', // render: (_: any, record: any) => { // return record.specialUnit == 1 ? '是' : '否' // } }, { title: '系数', dataIndex: 'rate', }, { title: '说明', dataIndex: 'description', }, { title: '操作', key: 'option', valueType: 'option', render: (_: any, record: any) => { return [ , delTableDataHanfle(record)} > 删除 ] }, }, ]; const delTableDataHanfle = async (record: any) => { const resp: any = await delTableData(record.id); if (resp) { tableRef.current?.reload(); } } const onSelect: TreeProps['onSelect'] = (selectedKeys, info) => { // console.log('selected', selectedKeys, info); const { node } = info; set_currentSelectedTreeNode(node); }; const updateTable = async (formVal: any, type: 'EDIT' | "ADD") => { if (type == 'ADD') { const resp = await addCheckUnit({ ...formVal, classCode: currentSelectedTreeNode.code, unitType: currentSelectedTreeNode.unitType }); if (resp) { tableRef.current?.reload(); message.success('操作成功!'); } } if (type == 'EDIT') { const resp = await editCheckUnit({ ...formVal }); if (resp) { tableRef.current?.reload(); message.success('操作成功!'); } } return true; } const UpDataActBtn = ({ record, type }: { record: any, type: 'EDIT' | 'ADD' }) => { const [dicData, set_dicData] = useState([]); const getDirecData = async (key?: string) => { const data = await getPubDicData(); if (data) { set_dicData(data); } } useEffect(()=>{ getDirecData(); },[]); return ( 编辑 : 新增 } onFinish={(val) => { return updateTable(type == 'EDIT' ? { ...record, ...val } : { ...val }, type); }} modalProps={{ destroyOnClose: true }} colProps={{ span: 24 }} grid > ) } const getTableData = async (params: any, sort: any, filter: any) => { // console.log({ currentSelectedTreeNode }); // console.log({ params, sort, filter }); if (currentSelectedTreeNode) { const resp = await getCheckUnitTableDataByUnitClass({ ...params, classCode: currentSelectedTreeNode.code, }); if (resp) { return { data: resp.list, success: true, total: resp.totalCount, pageSize: resp.pageSize, totalPage: resp.totalPage, } } return { data: [], success: true } } return [] } const dataList: any[] = []; const getParentKey = (key: React.Key, tree: any[]): React.Key => { let parentKey: React.Key; for (let i = 0; i < tree.length; i++) { const node = tree[i]; if (node.children) { if (node.children.some((item: { code: React.Key; }) => item.code === key)) { parentKey = node.code; } else if (getParentKey(key, node.children)) { parentKey = getParentKey(key, node.children); } } } return parentKey!; }; const onTreeSearchKeyChange = (e: React.ChangeEvent) => { const { value } = e.target; const newExpandedKeys = dataList .map((item) => { if (item.className.indexOf(value) > -1) { return getParentKey(item.code, treeData); } return null; }); const b = newExpandedKeys.filter((item, i, self) => item && self.indexOf(item) === i); setExpandedKeys(newExpandedKeys as React.Key[]); setSearchValue(value); setAutoExpandParent(true); } const onExpand = (newExpandedKeys: React.Key[]) => { setExpandedKeys(newExpandedKeys); setAutoExpandParent(false); }; const generateList = (data: any[]) => { for (let i = 0; i < data.length; i++) { const node = data[i]; const { code, className } = node; dataList.push({ code, className }); if (node.children) { generateList(node.children); } } }; generateList(treeData as any); const getTreeReqFunc = async () => { const resp = await getTreeData(); set_treeData(resp); } const tableDataSearchHandle = (paramName: string) => { set_tableDataFilterParams({ ...tableDataFilterParams, [`${paramName}`]: tableDataSearchKeywords }) } useEffect(() => { tableRef.current?.reload(); }, [currentSelectedTreeNode]); useEffect(() => { //初始化左侧树结构数据后 if (treeData?.length > 0) { if (treeData[0].children && treeData[0].children.length > 0) { const [node, nodeParent] = getDeepestTreeData(treeData[0], 'children'); set_currentSelectedTreeNode(node); setExpandedKeys([nodeParent.code]); } } }, [treeData]); useEffect(() => { set_tableColumn(column as ProColumns[]); getTreeReqFunc(); }, []); return (
} />
{ treeData && treeData.length > 0 && currentSelectedTreeNode && ( null} titleRender={ (nodeData: any) => { const strTitle = nodeData.className as string; const index = strTitle.indexOf(searchValue); const beforeStr = strTitle.substring(0, index); const afterStr = strTitle.slice(index + searchValue.length); const title = index > -1 ? ( {beforeStr} {searchValue} {afterStr} ) : ( {strTitle} ); return
{title}
} } defaultSelectedKeys={[treeData[0].children[0].code]} treeData={treeData as unknown as DataNode[]} // treeData={treeDataNew} switcherIcon={(props: any) => { const { expanded } = props; return !expanded ? : }} /> ) }
{/*
*/}
检索: { set_tableDataSearchKeywords(e.target.value); if (e.target.value.length == 0) { set_tableDataFilterParams({ ...tableDataFilterParams, unitName: '' }); } }} suffix={ tableDataSearchHandle('unitName')} /> } onPressEnter={(e) => { set_tableDataFilterParams({ ...tableDataFilterParams, unitName: (e.target as HTMLInputElement).value }); }} />
{currentSelectedTreeNode && getTableData(params, sort, filter)} />}
); }; export default CheckUnitMana;