import type { ActionType, ProColumns } from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table'; import { message, Button, Space, Popconfirm, Input, Tag, Select } from 'antd'; import React, { useRef, useState, useEffect } from 'react'; import type { Dispatch } from 'umi'; import { connect } from 'umi'; import type { StateType } from '../model'; import { StatusEnum } from '../enum'; import { SENSITIVE_LEVEL_ENUM, SENSITIVE_LEVEL_OPTIONS, TAG_DEFINE_TYPE } from '../constant'; import { getModelList, getDimensionList, deleteDimension, batchUpdateDimensionStatus, batchCreateTag, } from '../service'; import DimensionInfoModal from './DimensionInfoModal'; import DimensionValueSettingModal from './DimensionValueSettingModal'; import { ISemantic, IDataSource } from '../data'; import TableHeaderFilter from './TableHeaderFilter'; import moment from 'moment'; import BatchCtrlDropDownButton from '@/components/BatchCtrlDropDownButton'; import { ColumnsConfig } from './TableColumnRender'; import styles from './style.less'; type Props = { dispatch: Dispatch; domainManger: StateType; }; const ClassDimensionTable: React.FC = ({ domainManger, dispatch }) => { const { selectModelId: modelId, selectDomainId: domainId } = domainManger; const [createModalVisible, setCreateModalVisible] = useState(false); const [dimensionItem, setDimensionItem] = useState(); const [dataSourceList, setDataSourceList] = useState([]); const [tableData, setTableData] = useState([]); const [filterParams, setFilterParams] = useState>({}); const [loading, setLoading] = useState(false); const [selectedRowKeys, setSelectedRowKeys] = useState([]); const [dimensionValueSettingList, setDimensionValueSettingList] = useState< ISemantic.IDimensionValueSettingItem[] >([]); const [dimensionValueSettingModalVisible, setDimensionValueSettingModalVisible] = useState(false); const defaultPagination = { current: 1, pageSize: 20, total: 0, }; const [pagination, setPagination] = useState(defaultPagination); const actionRef = useRef(); const queryDimensionList = async (params: any) => { setLoading(true); const { code, data, msg } = await getDimensionList({ ...pagination, ...params, modelId, }); setLoading(false); const { list, pageSize, pageNum, total } = data || {}; if (code === 200) { setPagination({ ...pagination, pageSize: Math.min(pageSize, 100), current: pageNum, total, }); setTableData(list); } else { message.error(msg); setTableData([]); } }; const queryDataSourceList = async () => { const { code, data, msg } = await getModelList(domainId); if (code === 200) { setDataSourceList(data); } else { message.error(msg); } }; useEffect(() => { queryDimensionList({ ...filterParams, ...defaultPagination }); }, [filterParams]); useEffect(() => { queryDataSourceList(); }, [modelId]); const queryBatchUpdateStatus = async (ids: React.Key[], status: StatusEnum) => { if (Array.isArray(ids) && ids.length === 0) { return; } setLoading(true); const { code, msg } = await batchUpdateDimensionStatus({ ids, status, }); setLoading(false); if (code === 200) { queryDimensionList({ ...filterParams, ...pagination }); dispatch({ type: 'domainManger/queryDimensionList', payload: { modelId, }, }); return; } message.error(msg); }; const queryBatchExportTag = async (ids: React.Key[]) => { if (Array.isArray(ids) && ids.length === 0) { return; } setLoading(true); const { code, msg } = await batchCreateTag( ids.map((id) => { return { itemId: id, tagDefineType: TAG_DEFINE_TYPE.DIMENSION, }; }), ); setLoading(false); if (code === 200) { queryDimensionList({ ...filterParams, ...pagination }); dispatch({ type: 'domainManger/queryDimensionList', payload: { modelId, }, }); return; } message.error(msg); }; const columnsConfig = ColumnsConfig(); const columns: ProColumns[] = [ { dataIndex: 'id', title: 'ID', fixed: 'left', width: 80, order: 100, search: false, }, { dataIndex: 'key', title: '维度搜索', hideInTable: true, }, { dataIndex: 'name', title: '维度', fixed: 'left', // width: 280, render: columnsConfig.dimensionInfo.render, search: false, }, { dataIndex: 'sensitiveLevel', title: '敏感度', // width: 100, valueEnum: SENSITIVE_LEVEL_ENUM, render: columnsConfig.sensitiveLevel.render, }, { dataIndex: 'isTag', title: '是否标签', // width: 90, render: (isTag) => { switch (isTag) { case 0: return '否'; case 1: return ; default: return 未知; } }, }, { dataIndex: 'status', title: '状态', // width: 100, search: false, render: columnsConfig.state.render, }, { dataIndex: 'description', title: '描述', width: 300, search: false, render: columnsConfig.description.render, }, { ...columnsConfig.createInfo, }, { title: '操作', dataIndex: 'x', valueType: 'option', fixed: 'right', width: 250, render: (_, record) => { return ( {record.status === StatusEnum.ONLINE ? ( ) : ( )} { const { code, msg } = await deleteDimension(record.id); if (code === 200) { setDimensionItem(undefined); queryDimensionList({ ...filterParams, ...defaultPagination }); } else { message.error(msg); } }} > ); }, }, ]; const rowSelection = { onChange: (selectedRowKeys: React.Key[]) => { setSelectedRowKeys(selectedRowKeys); }, }; const onMenuClick = (key: string) => { switch (key) { case 'batchStart': queryBatchUpdateStatus(selectedRowKeys, StatusEnum.ONLINE); break; case 'batchStop': queryBatchUpdateStatus(selectedRowKeys, StatusEnum.OFFLINE); break; case 'exportTagButton': queryBatchExportTag(selectedRowKeys); break; default: break; } }; return ( <> { setFilterParams((preState) => { return { ...preState, key: value, }; }); }} /> ), }, { label: '敏感度', component: ( { setFilterParams((preState) => { return { ...preState, isTag: value, }; }); }} options={[ { value: 1, label: '是' }, { value: 0, label: '否' }, ]} /> ), }, ]} /> } search={false} // search={{ // optionRender: false, // collapsed: false, // }} rowSelection={{ type: 'checkbox', ...rowSelection, }} dataSource={tableData} pagination={pagination} tableAlertRender={() => { return false; }} size="large" scroll={{ x: 1500 }} options={{ reload: false, density: false, fullScreen: false }} onChange={(data: any) => { const { current, pageSize, total } = data; const currentPagin = { current, pageSize, total, }; setPagination(currentPagin); queryDimensionList({ ...filterParams, ...currentPagin }); }} toolBarRender={() => [ , { queryBatchUpdateStatus(selectedRowKeys, StatusEnum.DELETED); }} hiddenList={['batchDownload']} onMenuClick={onMenuClick} />, ]} /> {createModalVisible && ( { setCreateModalVisible(false); queryDimensionList({ ...filterParams, ...defaultPagination }); dispatch({ type: 'domainManger/queryDimensionList', payload: { modelId, }, }); return; }} onCancel={() => { setCreateModalVisible(false); }} /> )} {dimensionValueSettingModalVisible && ( { dispatch({ type: 'domainManger/queryDimensionList', payload: { modelId, }, }); setDimensionValueSettingModalVisible(false); }} onSubmit={() => { queryDimensionList({ ...filterParams, ...defaultPagination }); dispatch({ type: 'domainManger/queryDimensionList', payload: { modelId, }, }); setDimensionValueSettingModalVisible(false); }} /> )} ); }; export default connect(({ domainManger }: { domainManger: StateType }) => ({ domainManger, }))(ClassDimensionTable);