import { Checkbox, Input, Popconfirm, Space, Typography } from 'antd'; import { ConfigProvider, Table } from 'antd5'; import { cloneDeep } from 'lodash'; import { memo, useMemo } from 'react'; import { FormattedMessage } from 'umi'; import CityModal from '../../CityModal'; import ExpandIcon from '../../ExpandIcon'; import PermissionParentShow from '../../PermissionParentShow'; import { leafBuildTree, tree2FlatArray } from '../../utils/array'; import { requestBatchUnbind } from '../api'; import style from './index.less'; const { Text } = Typography; export interface Feature { isOptShow?: boolean; DataSensitiveMap?: any; DataSensitiveLevelMap?: any; setOpenObj?: any; params?: any; setParams?: any; setExpandedAll?: any; expandedAll?: any; formatMessage?: any; moment?: any; appId?: any; setRenewalParams?: any; currentUser?: any; batchParams?: any; setBatchParams?: any; data?: any; permission?: any; run?: any; showSelected?: boolean; } const FeatureTable = (props: Feature) => { const { isOptShow, DataSensitiveMap, DataSensitiveLevelMap, setOpenObj, params, setParams, setExpandedAll, expandedAll, formatMessage, moment, appId, setRenewalParams, currentUser, batchParams, setBatchParams, data, permission, run, showSelected, } = props; const { featureTree, featureCityIds } = data || {}; const { featureTree: filterFeatureTree } = permission || {}; const featureTreeColumn = [ { title: , dataIndex: 'name', width: 300, // ellipsis: true, render: (__: any, record: any) => { const { id, isAllowApply, isBind, name, isReport, type } = record; const { cityIds } = featureCityIds?.find((v: any) => v.featureId === id) ?? {}; return ( <> {isAllowApply == 0 && isBind == false ? formatMessage({ id: 'component.PermissionParentShow.unapprovalapply' }) : name}    {isReport === 1 && type === 3 && Array.isArray(cityIds) && Boolean(cityIds.length) && ( String(k))} view /> )} ); }, }, { title: , dataIndex: 'dataSensitive', ellipsis: true, render: (__: any, record: any) => { return ( {DataSensitiveLevelMap[record?.dataSensitive]?.text} ); }, }, { title: , dataIndex: 'sensitiveLevel', ellipsis: true, render: (__: any, record: any) => { return ( {DataSensitiveMap[record.sensitiveLevel]?.text} ); }, }, { title: , dataIndex: 'expiredAt', ellipsis: true, render: (__: any, record: any) => { return record.hasOwnProperty('expiredAt') ? ( {record.expiredAt == 0 ? formatMessage({ id: 'pages.setting.base.defaultExpirationTime.forever' }) : record.expiredAt < 0 ? '-' : moment().valueOf() < record.expiredAt * 1000 ? moment(record.expiredAt * 1000).format('YYYY-MM-DD HH:mm:ss') : `${moment(record.expiredAt * 1000).format('YYYY-MM-DD HH:mm:ss')}(${formatMessage({ id: 'base.expiredAted', })})`} ) : null; }, }, { title: (
), dataIndex: 'permissionOption', fixed: 'right', hidden: !isOptShow, render: (__: any, record: any) => [ <> {record?.isBind ? ( { try { const allSettledPromise = requestBatchUnbind( { featureTree: [record.id] }, currentUser, appId, formatMessage, ); if (allSettledPromise) { allSettledPromise.then(() => { run(); }); } } catch (error) {} }} > ) : null} {record?.expiredAt < 0 || record?.isAllowApply === 0 || !record?.isBind ? null : ( { setRenewalParams({ featureTree: [record.id] }); setOpenObj({ open: true, reload: false }); }} > )} , ], }, ]; const dataSource = useMemo(() => { const list = filterFeatureTree ?? featureTree ?? []; if (!showSelected) return list; const leaf = tree2FlatArray(list) ?.filter((v: any) => v.isBind) .map((v: any) => v.id); return leafBuildTree(leaf, list); }, [featureTree, filterFeatureTree, showSelected]); if (!data?.featureTree?.length) return null; return (
{Boolean(isOptShow) && ( { setParams({ ...params, featureTree: val.target.value }); }} style={{ width: 200 }} /> { setExpandedAll({ ...expandedAll, featureTreeKey: true }); }} > {formatMessage({ id: 'base.expandedall.true' })} { setExpandedAll({ ...expandedAll, featureTreeKey: false }); }} > {formatMessage({ id: 'base.expandedall.false' })} )} { setBatchParams((key) => { return { ...key, featureTree: rowKey }; }); }, getCheckboxProps: (record: any) => ({ disabled: record?.expiredAt < 0 || record?.isAllowApply === 0 || !record?.isBind, }), } : { columnWidth: 50, hideSelectAll: true, renderCell: (checked, record: any) => { return ; }, } } columns={featureTreeColumn as any} pagination={false} expandable={{ expandIcon: (p) => , expandedRowKeys: expandedAll?.featureTree ?? [], onExpand: (expanded, record) => { const temp = cloneDeep(expandedAll?.featureTree) ?? []; if (!expanded) { const arr = temp?.filter((key) => record.id !== key); setExpandedAll({ ...expandedAll, featureTree: arr }); } else { temp?.push(record.id); setExpandedAll({ ...expandedAll, featureTree: temp }); } }, }} dataSource={dataSource} /> ); }; export default memo(FeatureTable);