/* * @Author: code4eat awesomedema@gmail.com * @Date: 2022-12-16 09:42:52 * @LastEditors: code4eat awesomedema@gmail.com * @LastEditTime: 2023-06-29 15:56:47 * @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 { Fragment, Key, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'; import './style.less'; import { Tree, TreeProps, Tabs, Input, Modal, Transfer, Popconfirm, message, Popover, Select } 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, ProColumnType, ProFormDigit, ProFormSelect } from '@ant-design/pro-components'; import { createFromIconfontCN } from '@ant-design/icons'; import { delRequest, getIndicTableData, getBillingItemTableData, getTreeDataRespType, getTreeData, getAllCheckUnit, saveCopyRequest, getAllCheckUnitProjectData, addBillingItemData, editBillingItemData, addIndicItemData, editIndicItemData, getNonCheckTableData, addNonCheckItemData, getCostItemsTableData, addCostItemData, editCostItemData } from './service'; import { TransferItem, TransferProps } from 'antd/es/transfer'; import { getComputeDate } from '@/pages/Home/service'; import 'dayjs/locale/zh-cn'; import React from 'react'; import DirectoryTree from 'antd/es/tree/DirectoryTree'; import { getDeepestTreeData } from '@/utils/tooljs'; import { ColumnsType, TableRowSelection } from 'antd/es/table/interface'; import { difference } from 'lodash'; import { getBillProjectData } from '../bilingProjectMana/service'; import { getIndicProjectTableData } from '../indicProjectMana/service'; import { getNonCheckProjectTableData } from '../nonAssessmentProjectMana/service'; import '../../../../utils/zhongtaiB'; import { getCostProjectTable } from '../costIncomeProjectSet/service'; const IconFont = createFromIconfontCN({ scriptUrl: '', }); const SearchIcon = createFromIconfontCN({ scriptUrl: '', }); export type TableListItem = { key: number; name: string; }; const CheckUnitProjectSet: React.FC = () => { const [treeData, set_treeData] = useState([]); const [tableColumn, set_tableColumn] = useState([]); const [currentSelectedTreeNode, set_currentSelectedTreeNode] = useState(); const [currentSelectedTabKey, set_currentSelectedTabKey] = useState('1'); const [currentComputeDate, set_currentComputeDate] = useState(); const [currentEditRow, set_currentEditRow] = useState(undefined); const [searchKeywords, set_searchKeywords] = useState(''); const [searchParams, set_searchParams] = useState({}); const [expandedKeys, setExpandedKeys] = useState([]); const [searchValue, setSearchValue] = useState(''); const [autoExpandParent, setAutoExpandParent] = useState(true); const [ifEdit, set_ifEdit] = useState(false); const [ifShowModal, set_ifShowModal] = useState(false); const ref = React.createRef<{ save: any; getSelectedKeys: any }>(); const [currentEditCoreFlag, set_currentEditCoreFlag] = useState(0); const [tableSelecterColumn, set_tableSelecterColumn] = useState([]); const [isCopy, set_isCopy] = useState(false); const tableRef = useRef(); const billingTableColumn: ProColumns[] = [ { title: '项目代码', dataIndex: 'itemPointCode', renderText(text, record, index, action) { return {text} }, ellipsis: true }, { title: '项目名称', dataIndex: 'itemName', ellipsis: true }, { title: '项目类别', dataIndex: 'itemType', ellipsis: true }, { title: '点值', width: 120, ellipsis: true, dataIndex: 'orderPointValue', renderText: (text, record, index, action) => { if (ifEdit && currentEditRow?.id == record.id) { return } else { return {text} } }, }, { title: '类型', width: 120, ellipsis: true, dataIndex: 'coreFlagName', renderText: (text, record, index, action) => { if (ifEdit && currentEditRow && currentEditRow?.id == record.id) { return { //console.log('iconsousuo', currentSelectedTabKey, keywords); if (isCopy) { set_tableParams({ ...tableParams, name: keywords }) } }} /> } style={{ marginBottom: 8 }} onChange={(e) => { if (currentSelectedTabKey != '4') { if (e.target.value.length != 0) { const result = datasource.filter(item => item.unitName.indexOf(e.target.value) != -1); set_showList(result); } else { set_showList(datasource); } } if (currentSelectedTabKey == '4') { //set_keywords(e.target.value); const search: any = (data: any, name: string) => { let result = []; for (let i = 0; i < data.length; i++) { const item = data[i]; if (item.name.indexOf(name) != -1) { result.push(item); } if (item.children) { result.push(...search(item.children, name)); } } return result; } if(e.target.value.length>0){ const foundItem = search(datasource,e.target.value); set_showList(foundItem); }else{ set_showList(datasource); } } }} />
set_ifShowModal(false)}>取消 save()}>{`确认(${selectedKeys.length > 0 && selectedKeys.length})`}
) }); const TableTransfer = React.forwardRef(({ leftColumns, rightColumns, ...restProps }: TableTransferProps, ref) => { const [_data, _set_data] = useState(); const [targetKeys, setTargetKeys] = useState([]); const [datasource, set_datasource] = useState([]); const [selectedKeys, setSelectedKeys] = useState([]); const [targetData, set_targetData] = useState([]); const [loading, set_loading] = useState(true); //获取单元 const getFuncList = async () => { if (currentSelectedTabKey == '1') { const resp = await getAllCheckUnitProjectData(); if (resp) { const resp1 = await getBillingItemTableData({ unitCode: currentSelectedTreeNode.code, pageSize: 500, current: 1 }); if (resp1) { let allData = resp; set_targetData(resp1.list); const defaultSelctedkeys = (resp1.list).map((a: any) => a.itemPointCode); set_datasource(allData); setTargetKeys(defaultSelctedkeys); } } } if (currentSelectedTabKey == '2') { const resp = await getIndicProjectTableData({ pageSize: 500, current: 1 }); if (resp) { const resp1 = await getIndicTableData({ unitCode: currentSelectedTreeNode.code, pageSize: 500, current: 1 }); if (resp1) { set_targetData(resp1.list); set_datasource(resp.list.map((a: any) => ({ ...a, itemName: a.indicatorName, itemType: a.indicatorTypeName }))); const defaultSelctedkeys = (resp1.list).map((a: any) => a.indicatorCode); setTargetKeys(defaultSelctedkeys); } } } if (currentSelectedTabKey == '3') { const resp = await getNonCheckProjectTableData({ pageSize: 500, current: 1 }); if (resp) { const resp1 = await getNonCheckTableData({ unitCode: currentSelectedTreeNode.code, pageSize: 1000000, current: 1 }); if (resp1) { set_targetData(resp1.list); set_datasource(resp.list.map((a: any) => ({ ...a, itemName: a.name, itemType: a.distributionTypeName }))); const defaultSelctedkeys = (resp1.list).map((a: any) => a.nonAssessmentCode); setTargetKeys(defaultSelctedkeys); } } } set_loading(false); } const onChange = (nextTargetKeys: string[]) => { setTargetKeys(nextTargetKeys); }; const onSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => { //console.log('sourceSelectedKeys:', sourceSelectedKeys,'targetSelectedKeys:',targetSelectedKeys); setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]); }; useImperativeHandle(ref, () => ({ save: async () => { let flag = false; if (currentSelectedTabKey == '1') { const items = datasource.filter(a => targetKeys.includes(a.code)); //拿到当前的表格数据覆盖全量表格数据 //console.log({items,targetKeys}); const uodatedData = items.map(a => { if (targetData.length > 0) { const result = targetData.filter(b => b.itemPointCode == a.code); if (result.length > 0) { return { ...a, orderPointValue: result[0].orderPointValue, coreFlag: result[0].coreFlag, } } else { return a } } else { return a } }) const result = { unitCode: currentSelectedTreeNode.code, item: uodatedData.map(a => ({ itemPointCode: a.itemCode, itemName: a.itemName, orderPointValue: a.orderPointValue, coreFlag: a.coreFlag })) } const resp = await addBillingItemData(result); if (resp) { flag = true } } if (currentSelectedTabKey == '2') { const items = datasource.filter(a => targetKeys.includes(a.code)); //拿到当前的表格数据覆盖全量表格数据 const uodatedData = items.map(a => { if (targetData.length > 0) { const result = targetData.filter(b => b.indicatorCode == a.code); if (result.length > 0) { return { ...a, orderPointValue: result[0].orderPointValue } } else { return a } } else { return a } }) const commitData = uodatedData.map((a: any) => ({ indicatorCode: a.code, indicatorName: a.indicatorName, orderPointValue: a.orderPointValue, executePointValue: a.executePointValue })) const result = { unitCode: currentSelectedTreeNode.code, indicatorValues: commitData } const resp = await addIndicItemData(result); if (resp) { flag = true } } if (currentSelectedTabKey == '3') { const items = datasource.filter(a => targetKeys.includes(a.code)); const commitData = items.map(a => ({ code: a.code, name: a.name })) const result = { unitCode: currentSelectedTreeNode.code, assessments: commitData } const resp = await addNonCheckItemData(result); if (resp) { flag = true } } if (flag) { message.success('操作成功!'); tableRef.current?.reload(); } } })); useEffect(() => { getFuncList(); }, []) return ( record.code} targetKeys={targetKeys} selectedKeys={selectedKeys} filterOption={(inputValue, item) => { if (item.itemName!.indexOf(inputValue) !== -1) { console.log({ item }); } return item.itemName!.indexOf(inputValue) !== -1 }} > {({ direction, filteredItems, onItemSelectAll, onItemSelect, selectedKeys: listSelectedKeys, disabled: listDisabled, }) => { //console.log({ filteredItems, listSelectedKeys, direction }); const columns = direction === 'left' ? leftColumns : rightColumns; const rowSelection: TableRowSelection = { getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }), onSelectAll(selected, selectedRows) { const treeSelectedKeys = selectedRows.map(({ code }) => code); const diffKeys = selected ? difference(treeSelectedKeys, listSelectedKeys) : difference(listSelectedKeys, treeSelectedKeys); onItemSelectAll(diffKeys as string[], selected); }, onSelect({ code }, selected) { console.log({ code, selected }) onItemSelect(code as string, selected); }, selectedRowKeys: listSelectedKeys, }; return ( false }} tableAlertRender={false} style={{ pointerEvents: listDisabled ? 'none' : undefined }} onRow={({ code, disabled: itemDisabled }) => ({ onClick: () => { if (itemDisabled || listDisabled) return; onItemSelect(code as string, !listSelectedKeys.includes(code as string)); }, })} /> ); }} ) }); //成本项目添加 const addCostProject = () => { set_isCopy(false); set_ifShowModal(true); } const tableSearchHandle = () => { set_searchParams({ name: searchKeywords }) } //编辑按钮操作 const editBtnHandle = async () => { let flag = false; if (ifEdit) { //保存操作 if (currentSelectedTabKey == '1' && currentEditRow) { //收费项目 console.log({ currentEditRow }); const result = { id: currentEditRow.id, unitCode: currentSelectedTreeNode.code, orderPointValue: `${currentEditRow.orderPointValue}`, coreFlag: currentEditCoreFlag } const resp = await editBillingItemData(result); if (resp) flag = true; } if (currentSelectedTabKey == '2' && currentEditRow) { //收费项目 const result = { id: currentEditRow.id, unitCode: currentSelectedTreeNode.code, indicatorCode: currentEditRow.indicatorCode, indicatorName: currentEditRow.indicatorName, orderPointValue: currentEditRow.orderPointValue, executePointValue: currentEditRow.executePointValue } const resp = await editIndicItemData(result); if (resp) flag = true; } if (currentSelectedTabKey == '4' && currentEditRow) { //成本项目 //console.log({ currentEditRow }); const result = { id: currentEditRow.id, ctrlFlag: currentEditRow.ctrlFlag } const resp = await editCostItemData(result); if (resp) flag = true; } } else { //开启编辑模式 set_ifEdit(true); } if (flag) { set_ifEdit(false); message.success('操作成功!'); tableRef.current?.reload(); } } 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.child) { if (node.child.some((item: { code: React.Key; }) => item.code === key)) { parentKey = node.code; } else if (getParentKey(key, node.child)) { parentKey = getParentKey(key, node.child); } } } return parentKey!; }; const onTreeSearchKeyChange = (e: React.ChangeEvent) => { const { value } = e.target; const newExpandedKeys = dataList .map((item) => { if (item.name.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: getTreeDataRespType[]) => { for (let i = 0; i < data.length; i++) { const node = data[i]; const { code, name } = node; dataList.push({ code: code, name: name }); if (node.child) { generateList(node.child); } } }; generateList(treeData as any); const getTreeReqFunc = async (computeDate: string) => { const resp = await getTreeData(computeDate); set_treeData(resp); } const setTableColumn = () => { if (currentSelectedTabKey == '1') { set_tableColumn(billingTableColumn); } if (currentSelectedTabKey == '2') { set_tableColumn(indicTableColumn); } if (currentSelectedTabKey == '3') { set_tableColumn(nonCheckTableColumn); } if (currentSelectedTabKey == '4') { set_tableColumn(costTableColumn); } } useEffect(() => { if (currentComputeDate) { getTreeReqFunc(currentComputeDate); } }, [currentComputeDate]); useEffect(() => { setTableColumn(); }, [ifEdit]); useEffect(() => { tableRef.current?.reload(); }, [currentSelectedTreeNode]); useEffect(() => { setTableColumn(); }, [currentSelectedTabKey]); useEffect(() => { if (!isCopy) { set_tableSelecterColumn(costItemColumns); } else { set_tableSelecterColumn(checkUnitColumns); } }, [isCopy]) useEffect(() => { //初始化左侧树结构数据后 if (treeData?.length > 0) { if (treeData[0].child && treeData[0].child.length > 0) { const [node, nodeParent] = getDeepestTreeData(treeData[0], 'child'); set_currentSelectedTreeNode(node); setExpandedKeys([nodeParent.code]); } } }, [treeData]); useEffect(() => { set_tableColumn(billingTableColumn as ProColumns[]); getCurrentComputeDate(); }, []); return (
[] }} open={ifShowModal} modalProps={{ closable: false, }}>
} />
{ treeData && treeData.length > 0 && currentSelectedTreeNode && ( null} titleRender={ (nodeData: any) => { const strTitle = nodeData.name 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].child[0].code]} treeData={treeData as unknown as DataNode[]} // treeData={treeDataNew} switcherIcon={(props: any) => { const { expanded } = props; return !expanded ? : }} /> ) }
{/*
*/}
{ currentSelectedTabKey == '1' && (
检索: { set_searchKeywords(e.target.value) if (e.target.value.length == 0) { set_searchParams({ ...searchParams, name: e.target.value }) } }} placeholder="请输入项目名称" suffix={ tableSearchHandle()} /> } />
openCopyHandleModal()}>复制 openTransfer()}>添加
{currentSelectedTreeNode && [ { if (!ifEdit) { set_ifEdit(true); set_currentEditRow(record) } if (ifEdit) { editBtnHandle(); } }}>{(ifEdit && currentEditRow?.id == record.id) ? '保存' : '编辑'}, {(ifEdit && currentEditRow?.id == record.id) && set_ifEdit(false)}>取消}, delHandle(record)}> {(currentEditRow?.id != record.id || !ifEdit) && 删除} ], }]} request={(params, sort, filter) => getTableData('BILL', params, sort, filter)} />}
) } { currentSelectedTabKey == '2' && (
检索: { set_searchKeywords(e.target.value); if (e.target.value.length == 0) { set_searchParams({ ...searchParams, name: '' }); } }} suffix={ tableSearchHandle()} /> } />
openCopyHandleModal()}>复制 openTransfer()}>添加
{currentSelectedTreeNode && [ { if (!ifEdit) { set_ifEdit(true); set_currentEditRow(record) } if (ifEdit) { editBtnHandle(); } }}>{(ifEdit && currentEditRow?.id == record.id) ? '保存' : '编辑'}, {(ifEdit && currentEditRow?.id == record.id) && set_ifEdit(false)}>取消}, delHandle(record)}> {(currentEditRow?.id != record.id || !ifEdit) && 删除} ], }]} request={(params, sort, filter) => getTableData('INDIC', params, sort, filter)} />}
) } { currentSelectedTabKey == '3' && (
检索: { set_searchKeywords(e.target.value); if (e.target.value.length == 0) { set_searchParams({ ...searchParams, name: '' }); } }} suffix={ tableSearchHandle()} /> } />
openCopyHandleModal()}>复制 openTransfer()}>添加
{currentSelectedTreeNode && [ delHandle(record)}> {删除} ], }]} request={(params, sort, filter) => getTableData('NONCHECK', params, sort, filter)} />}
) } { currentSelectedTabKey == '4' && (
检索: { set_searchKeywords(e.target.value); if (e.target.value.length == 0) { set_searchParams({ ...searchParams, name: '' }); } }} suffix={ tableSearchHandle()} /> } />
openCopyHandleModal()}>复制 addCostProject()}>添加
{currentSelectedTreeNode && [ { if (!ifEdit) { set_ifEdit(true); set_currentEditRow(record) } if (ifEdit) { editBtnHandle(); } }}>{(ifEdit && currentEditRow?.id == record.id) ? '保存' : '编辑'}, {(ifEdit && currentEditRow?.id == record.id) && set_ifEdit(false)}>取消}, delHandle(record)}> {(currentEditRow?.id != record.id || !ifEdit) && 删除} ], }]} request={(params, sort, filter) => getTableData('COST', params, sort, filter)} />}
) }
); }; export default CheckUnitProjectSet;