import { DownOutlined } from '@ant-design/icons'; import React, { useState } from 'react'; import ProForm, { ProFormDigit, ProFormRadio, ProFormSelect, ProFormSwitch, ProFormText, ProFormList, ProFormGroup, ProFormDependency, ProFormTextArea, } from '@ant-design/pro-form'; import type { ProColumnType } from '@ant-design/pro-table'; import ProTable from '@ant-design/pro-table'; import { useDebounceFn } from '@ant-design/pro-utils'; import ProCard from '@ant-design/pro-card'; import { Button } from 'antd'; const valueTypeArray = [ 'password', 'money', 'textarea', 'option', 'date', 'dateWeek', 'dateMonth', 'dateQuarter', 'dateYear', 'dateRange', 'dateTimeRange', 'dateTime', 'time', 'timeRange', 'text', 'select', 'checkbox', 'rate', 'radio', 'radioButton', 'index', 'indexBorder', 'progress', 'percent', 'digit', 'second', 'avatar', 'code', 'switch', 'fromNow', 'image', 'jsonCode', ]; type DataType = { age: number; address: string; name: string; time: number; key: number; description: string; }; const columns: ProColumnType[] = [ { title: 'Name', dataIndex: 'name', }, { title: 'time', dataIndex: 'time', valueType: 'date', }, { title: 'Address', dataIndex: 'address', valueType: 'select', filters: true, onFilter: true, valueEnum: { london: { text: '伦敦', }, 'New York': { text: '纽约', }, }, }, { title: 'Action', key: 'action', sorter: true, valueType: 'option', render: () => [ Delete, More actions , ], }, ]; const genData = (total: number) => { if (total < 1) { return []; } const data: DataType[] = []; for (let i = 1; i <= total; i += 1) { data.push({ key: i, name: 'John Brown', age: i + 10, time: Date.now(), address: i % 2 === 0 ? 'london' : 'New York', description: `My name is John Brown, I am ${i}2 years old, living in New York No. ${i} Lake Park.`, }); } return data; }; const initData = { bordered: true, loading: false, columns, pagination: { show: true, pageSize: 5, current: 1, total: 100, }, size: 'small', expandable: false, headerTitle: '高级表格', tooltip: '高级表格 tooltip', showHeader: true, footer: true, rowSelection: {}, scroll: false, hasData: true, tableLayout: undefined, toolBarRender: true, search: { show: true, span: 12, collapseRender: true, labelWidth: 80, filterType: 'query', layout: 'horizontal', }, options: { show: true, density: true, fullScreen: true, setting: true, }, }; const DynamicSettings = () => { const [config, setConfig] = useState(initData); /** 去抖配置 */ const updateConfig = useDebounceFn(async (state) => { setConfig(state); }, 20); const tableColumns = (config.columns || columns)?.map((item: any) => ({ ...item, ellipsis: config.ellipsis, })); return (

{record.description}

, } } options={config.options?.show ? config.options : false} toolBarRender={ config?.toolBarRender ? () => [] : false } footer={config.footer ? () => 'Here is footer' : false} headerTitle={config.headerTitle} columns={tableColumns} dataSource={genData(config.pagination?.total || 10)} scroll={config.scroll} />
updateConfig.run(values)} > } > } > } > { return (
{action}
{listDom}
); }} > ({ label: value, value, }))} /> {({ valueType, valueEnum }) => { if (valueType !== 'select') { return null; } return ( { return JSON.parse(value); }} label="数据枚举" name="valueEnum" /> ); }}
); }; export default DynamicSettings;