import React, { useState } from 'react';import { Table, Input, InputNumber, Row, Popconfirm, Button, Form } from 'antd';const originData = [];const EditableCell = ({ editing, dataIndex, title, inputType, record, index, children, ...restProps }) => { const inputNode = <Input />; return ( <td {...restProps}> {editing ? ( <Form.Item name={dataIndex} style={{ margin: 0, }} rules={[ { required: true, message: `请输出${title}!`, }, ]} > {inputNode} </Form.Item> ) : ( children )} </td> );};const EditableTable = () => { const [form] = Form.useForm(); // 原来的form const [data, setData] = useState(originData); //dataSource const [editingKey, setEditingKey] = useState(''); //正在编辑的行key 唯一性 const isEditing = (record) => record.key === editingKey; const edit = (record) => { console.log('111',record) form.setFieldsValue({ name: '', dim_name: '', dim_value: '', order_no:'', ...record, }); setEditingKey(record.key); }; const cancel = () => { setEditingKey(''); }; const save = async (key) => { try { const row = await form.validateFields(); console.log('row',row) const newData = [...data]; const index = newData.findIndex((item) => key === item.key); if (index > -1) { const item = newData[index]; newData.splice(index, 1, { ...item, ...row }); setData(newData); setEditingKey(''); } else { newData.push(row); setData(newData); setEditingKey(''); } } catch (errInfo) { console.log('Validate Failed:', errInfo); } }; const columns = [ { title: '中文名', dataIndex: 'name', width: '25%', editable: false, }, { title: '标签值', dataIndex: 'dim_name', width: '15%', editable: true, }, { title: '标签存储值', dataIndex: 'dim_value', width: '20%', editable: true, },{ title: '排序', dataIndex: 'order_no', width: '20%', editable: true, }, { title: '操作', dataIndex: 'operation', render: (_, record) => { const editable = isEditing(record); return editable ? ( <Row> <Button type='link' onClick={() => save(record.key)}> 保留 </Button> <Button type='link' onClick={() => cancel()}>勾销</Button> </Row> ) : ( <Row> <Button type='link' disabled={editingKey !== ''} onClick={() => edit(record)}> 编辑 </Button> <Button type='link' danger disabled={editingKey !== ''} onClick={() => handleDelete(record)}> 删除 </Button> </Row> ); }, }, ]; const handleDelete = (record) => { console.log('record',record,data) let newData = [...data]; setData(newData.filter(item=> item.key !== record.key)) } const mergedColumns = columns.map((col) => { if (!col.editable) { return col; } return { ...col, onCell: (record) => ({ record, inputType:'text', dataIndex: col.dataIndex, title: col.title, editing: isEditing(record), }), }; }); const handleAdd = () => { console.log('datra',data) setData([...data,{key:parseInt(Math.random() * 61),name:'111',dim_name:'',dim_value:'',order_no:''}]) } return ( <Form form={form} component={false}> <Button onClick={handleAdd}>增加记录</Button> <Table components={{ body: { cell: EditableCell, }, }} bordered dataSource={data} columns={mergedColumns} rowClassName="editable-row" pagination={false} /> </Form> );};export default EditableTable