当前位置: 首页 > news >正文

复杂的编辑表格

需求描述

表格可以整体编辑;也可以单行弹框编辑;且整体编辑的时候,依然可以单行编辑
编辑只能给某一列(这里是参数运行值)修改,且根据数据内容的参数范围来判断展示不同的形式:input/数字输入/单选/多选
依据判断的参数范围内容:正则:xxx / 数字范围:[1,99] / 单选:[0,1] / 多选:[‘a’,‘b’,‘cc’]

在这里插入图片描述

在这里插入图片描述

// ConfigModalEdit.tsximport {ModalForm,ProFormText,
} from '@ant-design/pro-components';
import { Button, Form, message } from 'antd';const waitTime = (time: number = 100) => {return new Promise((resolve) => {setTimeout(() => {resolve(true);}, time);});
};export default (props) => {const { modalConfig, onCancel } = propsconst { visible, data } = modalConfigconst [form] = Form.useForm<{ name: string; company: string }>();return (<ModalFormtitle="修改"open={visible}form={form}autoFocusFirstInputmodalProps={{destroyOnClose: true,onCancel: () => console.log('run'),}}submitTimeout={2000}onFinish={async (values) => {await waitTime(2000);console.log(values.name);message.success('提交成功');return true;}}><ProFormText width="sm" name="id" label="对应的select或者text类型" /></ModalForm>);
};
// index.tsximport { EditableProTable } from '@ant-design/pro-components';
import { Button, Form, Input, InputNumber, Radio, Select } from 'antd';
import React, { useEffect, useRef, useState } from 'react';
import ConfigModalEdit from './ConfigModalEdit';const mockDefaultData: any[] = new Array(8).fill(1).map((_, index) => {return {id: index,name: `主题-${index}`,value: index,name2: `fq-${index}`,created_at: 1590486176000,type: index === 0 ? 'input' : index === 2 ? 'radio' : index === 3 ? 'select' :index ===4 ? 'input' : 'multiple_select'}
});
const EditTable: React.FC = () => {const [defaultData, setDefaultData] = useState<any[]>()const [dataSource, setDataSource] = useState<any[]>();const [editableKeys, setEditableKeys] = useState<React.Key[]>([]);const editableRowData= useRef();const [isEditable, setIsEditable] = useState(false);const [modalConfig, setModalConfig] = useState<any>({visible: false,recordParams: {data: {}},});const [editForm] = Form.useForm()const validator = (value, row) => {console.log('value11==', value, 'row=11=', row);}const columns = [{title: '参数',dataIndex: 'name',editable: false,},{title: '',dataIndex: 'type',hideInTable: true,renderFormItem:()=>''},{title: '参数运行值',dataIndex: 'value',renderFormItem: (_, { record }) => {// console.log('record==', record);const type = record?.type;// 判断数据类型并返回相应的DOM元素if (type === 'input') {return <Input />;} else if (type === 'multiple_select') {return <Select mode="multiple" />;} else if (type === 'select') {return <Select />;}else if (type === 'select') {return <InputNumber />;} else {return <Radio.Group value={record?.value}><Radio value={1}>A</Radio><Radio value={2}>B</Radio><Radio value={3}>C</Radio><Radio value={4}>D</Radio></Radio.Group>}},formItemProps:{rules: [{validator: validator,}]}},{title: '参数默认值',dataIndex: 'name2',editable: false,},{title: '参数范围',dataIndex: 'name',editable: false,},{title: '重启生效',dataIndex: 'name',editable: false,},{title: '操作',valueType: 'option',render: (_: any, record: any) => {return [<Buttontype="link"key="EditPassword"onClick={() => {setModalConfig({visible: true,data: record});}}>修改</Button>,];},},]useEffect(() => {setDefaultData(mockDefaultData)setDataSource(() => mockDefaultData)}, []);const handleEdit = () => {setDataSource(defaultData);setIsEditable(true);setEditableKeys([...defaultData?.map(item => item.id)]);};const handleCancel = () => {// 清除可编辑的行键setEditableKeys([]);// 将当前正在编辑的数据设置回原始数据setDataSource(() => defaultData);setIsEditable(false);};const toolBarRender = () => {return isEditable ? [<Buttonkey="save"// onClick={handleSave}>保存数据</Button>,<Button key="cancel" onClick={handleCancel}>取消</Button>,] : [<Button key="edit" type="primary" onClick={handleEdit}>编辑</Button>,];};return (<><EditableProTableheaderTitle=""columns={columns}rowKey="id"// name='editableData'value={dataSource}onChange={setDataSource}recordCreatorProps={false}toolBarRender={toolBarRender}editable={{type: 'multiple',editableKeys,form: editForm,actionRender: (row)=>[<Buttontype="link"key="EditPassword"onClick={() => {setModalConfig({visible: true,data: row});}}>修改</Button>],onValuesChange: (record, recordList) => {setDataSource(recordList);},onChange: setEditableKeys,}}/><ConfigModalEditmodalConfig={modalConfig}onCancel={() => {setModalConfig({visible: false,data: {},});}}/></>)};
export default EditTable;

相关文章:

  • Oracle SQL - 合并重叠的期间
  • 如何选择最佳路线?
  • sql盲注python脚本学习 (基于bWAPP靶场)
  • 谈谈hash算法
  • Leetcode-day31-01背包问题
  • 《Programming from the Ground Up》阅读笔记:p103-p116
  • Linux内核定时器
  • Java--Zuul网关中的过滤器
  • AIGC深度学习教程:Transformer模型中的Position Embedding实现与应用
  • IO与进程
  • 通信系统收发原理冷知识
  • Datawhale X 李宏毅苹果书 AI夏令营(深度学习入门)taks2
  • 跟《经济学人》学英文:2024年08月24日这期 What to make of America’s topsy-turvy economy
  • centos7安装Kafka单节点环境部署三-安装Logstash
  • MURF860AC-ASEMI智能AI专用MURF860AC
  • Google 是如何开发 Web 框架的
  • ECMAScript入门(七)--Module语法
  • HomeBrew常规使用教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JAVA多线程机制解析-volatilesynchronized
  • Linux Process Manage
  • Lucene解析 - 基本概念
  • Nodejs和JavaWeb协助开发
  • Python连接Oracle
  • SpringBoot 实战 (三) | 配置文件详解
  • vue-router 实现分析
  • yii2中session跨域名的问题
  • 普通函数和构造函数的区别
  • 前端性能优化——回流与重绘
  • 如何利用MongoDB打造TOP榜小程序
  • 用Visual Studio开发以太坊智能合约
  • Prometheus VS InfluxDB
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​补​充​经​纬​恒​润​一​面​
  • ​用户画像从0到100的构建思路
  • #### go map 底层结构 ####
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • .NET Framework杂记
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET 常见的偏门问题
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET单元测试
  • .net反编译的九款神器
  • .NET下的多线程编程—1-线程机制概述
  • .ui文件相关
  • /proc/stat文件详解(翻译)
  • @PreAuthorize注解
  • @vue/cli 3.x+引入jQuery
  • @在php中起什么作用?
  • [Android Pro] AndroidX重构和映射
  • [Android] Android ActivityManager
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C++] 轻熟类和对象
  • [CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~