react antd EditableProTable - 可编辑表格

与编辑表格外的内容联动
value	同 dataSource,传入一个数组,是 table 渲染的元数据	T[]	undefined
onChange	dataSource 修改时触发,删除和修改都会触发,如果设置了 value,Table 会成为一个受控组件。	(value:T[])=>void	undefined
recordCreatorProps	新建一行数据的相关配置	RecordCreatorProps & ButtonProps	-
maxLength	最大的行数,到达最大行数新建按钮会自动消失	number	-
editable	可编辑表格的相关配置	TableRowEditable	-
controlled	是否受控, 如果受控每次编辑都会触发 onChange,并且会修改 dataSource	boolean	false
editableFormRef	table 所有的 form,带了一些表格特有的操作	React.Ref<EditableFormInstance<T>>	undefined

在这里插入图片描述

import type {ActionType,EditableFormInstance,ProColumns,ProFormInstance,
} from '@ant-design/pro-components';
import {EditableProTable,ProCard,ProForm,ProFormDependency,ProFormDigit,
} from '@ant-design/pro-components';
import React, { useRef, useState } from 'react';type DataSourceType = {id: React.Key;associate?: string;questionsNum?: number;type?: string;fraction?: number;scoringMethod?: string;
};const defaultData: DataSourceType[] = [{id: 624748504,associate: '题库名称一',questionsNum: 10,type: 'multiple',scoringMethod: 'continuous',fraction: 20,},{id: 624691229,associate: '题库名称二',questionsNum: 10,scoringMethod: 'continuous',type: 'radio',fraction: 20,},{id: 624748503,associate: '题库名称三',questionsNum: 10,type: 'judge',scoringMethod: 'continuous',fraction: 20,},{id: 624691220,associate: '题库名称四',questionsNum: 10,scoringMethod: 'continuous',type: 'vacant',fraction: 20,},
];export default () => {const [editableKeys, setEditableRowKeys] = useState<React.Key[]>(() => []);const formRef = useRef<ProFormInstance<any>>();const actionRef = useRef<ActionType>();const editableFormRef = useRef<EditableFormInstance>();const columns: ProColumns<DataSourceType>[] = [{title: '关联题库',dataIndex: 'associate',valueType: 'text',ellipsis: true,},{title: '题型',key: 'type',dataIndex: 'type',valueType: 'select',valueEnum: {multiple: { text: '多选题', status: 'Default' },radio: { text: '单选题', status: 'Warning' },vacant: {text: '填空题',status: 'Error',},judge: {text: '判断题',status: 'Success',},},},{title: '题数',dataIndex: 'questionsNum',valueType: 'digit',},{title: '计分方式',dataIndex: 'scoringMethod',valueType: 'select',request: async () => [{value: 'discrete',label: '离散型',},{value: 'continuous',label: '连续型',},],fieldProps: (_, { rowIndex }) => {return {onSelect: () => {// 每次选中重置参数editableFormRef.current?.setRowData?.(rowIndex, { fraction: [] });},};},},{title: '分值',width: 150,dataIndex: 'fraction',valueType: (record) => {const scoringMethod = record?.scoringMethod;if (scoringMethod === 'discrete') return 'select';return 'digit';},fieldProps: {mode: 'multiple',},request: async () =>['A', 'B', 'D', 'E', 'F'].map((item, index) => ({label: item,value: index,})),},{title: '操作',valueType: 'option',render: (_, row) => [<akey="delete"onClick={() => {const tableDataSource = formRef.current?.getFieldValue('table',) as DataSourceType[];formRef.current?.setFieldsValue({table: tableDataSource.filter((item) => item.id !== row?.id),});}}>移除</a>,<akey="edit"onClick={() => {actionRef.current?.startEditable(row.id);}}>编辑</a>,],},];return (<ProCard><divstyle={{maxWidth: 800,margin: 'auto',}}><ProForm<{table: DataSourceType[];}>formRef={formRef}initialValues={{table: defaultData,}}><ProFormDependency name={['table']}>{({ table }) => {const info = (table as DataSourceType[]).reduce((pre, item) => {return {totalScore:pre.totalScore +parseInt((item?.fraction || 0).toString(), 10),questions:pre.questions +parseInt((item?.questionsNum || 0).toString(), 10),};},{ totalScore: 0, questions: 0 },);return (<divstyle={{display: 'flex',alignItems: 'center',gap: 16,paddingBlockEnd: 16,}}><div style={{ flex: 1 }}>总分:{info.totalScore}</div><div style={{ flex: 1 }}>题数:{info.questions}</div><div style={{ flex: 2 }}><ProFormDigit label="及格分" /></div><div style={{ flex: 2 }}><ProFormDigit label="考试时间(分钟)" /></div></div>);}}</ProFormDependency><EditableProTable<DataSourceType>rowKey="id"scroll={{x: true,}}editableFormRef={editableFormRef}controlledactionRef={actionRef}formItemProps={{label: '题库编辑',rules: [{validator: async (_, value) => {if (value.length < 1) {throw new Error('请至少添加一个题库');}if (value.length > 5) {throw new Error('最多可以设置五个题库');}},},],}}maxLength={10}name="table"columns={columns}recordCreatorProps={{record: (index) => {return { id: index + 1 };},}}editable={{type: 'multiple',editableKeys,onChange: setEditableRowKeys,}}/></ProForm></div></ProCard>);
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意&#xff1a;共有俩钱包&#xff0c;每回合从其中一个钱包中拿走一块钱&#xff0c;谁拿走最后一块钱谁赢。 思路&#xff1a;奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…

BERT 模型是什么

科学突破很少发生在真空中。相反&#xff0c;它们往往是建立在积累的人类知识之上的阶梯的倒数第二步。要了解 ChatGPT 和 Google Bart 等大型语言模型 &#xff08;LLM&#xff09; 的成功&#xff0c;我们需要回到过去并谈论 BERT。 BERT 由 Google 研究人员于 2018 年开发&…

用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

大型语言模型&#xff08;LLM&#xff09;的出现带火了Agent。利用LLM理解人类意图、生成复杂计划并且能够自主行动的能力。Agent具有无与伦比的能力&#xff0c;能够做出类似于人类复杂性的决策和完成一些复杂的工作。 目前市面上已经出现非常多得Agent框架&#xff1a;XAgen…

MongoDB复制集原理

复制集高可用 复制集选举 MongoDB 的复制集选举使用 Raft 算法&#xff08;https://raft.github.io/&#xff09;来实现&#xff0c;选举成功的必要条件是大多数投票节点存活。在具体的实现中&#xff0c;MongoDB 对 raft 协议添加了一些自己的扩展&#xff0c;这包括&#x…

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景&#xff1a;查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化&#xff0c; 不然饭碗不保......&#x1f4a6; 下面就分享一下解决这个优化问题的过程和思路&#xff0c;并总结一下&#xff0c;在以后不要在踩同样的坑…

[算法]使用aes进行数据加密

一、需求 有一段信息需要进行安全加密。 二、方案 对称加密和非对称加密两种方案&#xff0c;其中由于公钥密钥的管理还未形成规范&#xff0c;因此考虑使用对称加密。其中&#xff0c;对称加密算法使用openssl中&#xff0c;关于aes的部分&#xff0c;输出结果为128位数据。…

oracle-undo

tips&#xff1a;串行化隔离级别&#xff1a;事务开始后&#xff0c;对一张表不会被别人影响&#xff0c;对于审计工作比较有用&#xff0c;避免了幻读。 undo表空间&#xff1a;自动生成段&#xff0c;自动生成区&#xff0c;自动维护的&#xff0c;不像一般的表空间&#xff…

独立式键盘控制的4级变速流水灯

#include<reg51.h> // 包含51单片机寄存器定义的头文件 unsigned char speed; //储存流水灯的流动速度 sbit S1P1^4; //位定义S1为P1.4 sbit S2P1^5; //位定义S2为P1.5 sbit S3P1^6; //位定义S3为P1.6 sbit S4P1^7; //位…

泽攸科技完全自主研制的电子束光刻机取得阶段性成果

国产电子束光刻机实现自主可控&#xff0c;是实现我国集成电路产业链自主可控的重要一环。近日&#xff0c;泽攸科技联合松山湖材料实验室开展的全自主电子束光刻机整机的开发与产业化项目取得重大进展&#xff0c;成功研制出电子束光刻系统&#xff0c;实现了电子束光刻机整机…

rime中州韵小狼毫 生字注音滤镜 汉字注音滤镜

在中文环境下&#xff0c;多音字是比较常见的现象。对于一些不常见的生僻字&#xff0c;或者一些用于地名&#xff0c;人名中的常见字的冷门读音&#xff0c;如果不能正确的阅读&#xff0c;例如把 荥阳 读成了 miāo yng&#xff0c;则会怡笑大方。 今天我们在rime中州韵小狼…

python自动化运维管理拓扑

目录 1、简介 2、实验环境 3、拓扑图 4、需求及其代码 4.1、测试连通性 4.2、远程登陆 4.3、配置loopback 4.4、监控内存使用率 4.5、自动化巡检内存使用率 4.6、自动化配置snmp服务 4.7、提取分析字符串 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业…

网络流量分析与故障分析

1.网络流量实时分析 网络监控 也snmp协议 交换机和服务器打开 snmp就ok了 MRTG或者是prgt 用于对网络流量进行实时监测&#xff0c;可以及时了解服务器和交换机的流量&#xff0c;防止因流量过大而导致服务器瘫痪或网络拥塞。 原理 通过snmp监控 是一个…

外汇网站主要业务逻辑梳理

上图为工行ICBC的外汇保证金交易界面。 当需要买入帐户欧元&#xff08;欧元人民币&#xff09;时&#xff0c;买入100欧元&#xff0c;因为没有杠杆&#xff0c;虽然欧元中间价是782.34&#xff0c;但实际需要支付783.14元人民币的保证金&#xff0c;这个兑换不是真实的外汇兑…

2.8 EXERCISES

如果我们想使用每个线程来计算向量加法的一个输出元素&#xff0c;那么将线程/块索引映射到数据索引的表达式是什么&#xff1f; 答&#xff1a;C 假设我们想用每个线程来计算向量加法的两个&#xff08;相邻&#xff09;元素。将线程/块索引映射到i&#xff08;由线程处理的…

[MySQL] 数据库的主从复制和读写分离

一、mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。…

Windows11下载安装nacos(2.3.0)详解

一、环境要求 windows7以上 jdk8及以上版本&#xff0c;并且配置了JAVA_HOME环境变量 二、nacos下载解压 release版本地址:Releases alibaba/nacos GitHub 下载后解压即可&#xff0c;上面的tar.gz是linux版本 解压后如下 nacos自己内置有数据库derby&#xff0c;我用的是…

使用 matlab 求解最小二乘问题

有约束线性最小二乘 其标准形式为&#xff1a; min ⁡ x 1 2 ∥ C x − d ∥ 2 2 \mathop {\min }\limits_x \quad \frac{1}{2}\left\| Cx-d \right\|_2^2 xmin​21​∥Cx−d∥22​ 约束条件为&#xff1a; A ⋅ x ≤ b A e q ⋅ x b e q l b ≤ x ≤ u b \begin{aligned} …

RAG 全链路评测工具 —— Ragas

RAG是目前比较火热的一个概念。对应的应用如雨后春笋般涌出。我们在实际的探索中&#xff0c;可能会有各种各样的优化方案。但是优化是否有用呢&#xff1f;模型影响会有多大呢&#xff1f; 我们需要一把尺子&#xff0c;来做全链路的衡量。才能够得出&#xff0c;到底应该朝哪…

光纤知识总结

1光纤概念&#xff1a; 光导纤维&#xff08;英语&#xff1a;Optical fiber&#xff09;&#xff0c;简称光纤&#xff0c;是一种由玻璃或塑料制成的纤维&#xff0c;利用光在这些纤维中以全内反射原理传输的光传导工具。 微细的光纤封装在塑料护套中&#xff0c;使得它能够…

程序猿的时间管理和生产力

文章目录 为什么时间管理很重要&#xff1f;如何管理时间&#xff1f;心理维度生理维度技术尺寸 时间管理技巧每周计划基于目标的规划番茄钟为什么是25分钟&#xff1f;番茄钟为什么有效&#xff1f;艾森豪威尔矩阵这一切都是从开发者的角度来看的 也许我从开始学习或从事软件开…