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,一经查实,立即删除!

相关文章

梨花妖传说

在这个现代都市的喧嚣中&#xff0c;有一座被人们称之为“梨花城”的城市。这里是一个充满了高楼大厦、繁华街道和现代科技的城市&#xff0c;然而&#xff0c;在这个城市的某个角落&#xff0c;隐藏着一个神秘而美丽的存在——梨花妖。 梨花妖的名字叫做梨儿&#xff0c;她拥…

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 年开发&…

docker的安装使用以及优势

前段时间和朋友开发电商分布式项目作为学习&#xff0c;由于远程开发的需要&#xff0c;需要将redis,mysql,mq等一些基础的服务放在阿里云服务器上&#xff0c;并使用docker来安装这些服务&#xff0c;使容器服务化。 1.使用docker的优势 将 Redis 和 MySQL 等数据库直接安装在…

C++合并K个有序链表

本篇博客介绍如何使用C合并k个有序链表&#xff0c;在代码中会用到std::priority_queue&#xff0c;首先需要介绍一下std::priority_queue的用法&#xff0c;介绍完std::priority_queue后将介绍如何使用std::priority_queue来辅助合并k个有序链表。 一、C priority_queue用法介…

RTMO:迈向高性能的单阶段实时多人姿态估计

摘要 https://arxiv.org/pdf/2312.07526.pdf 实时多人姿态估计在平衡速度和精度方面提出了重大挑战。虽然两阶段自上而下的方法随着图像中人数增加而变慢&#xff0c;但现有的单阶段方法往往无法同时提供高精度和实时性能。本文介绍了RTMO&#xff0c;这是一种单阶段姿态估计框…

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

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

make_unique 数组,智能指针

【C14算法】make_unique_c make_unique-CSDN博客 #include <iostream> #include <memory>int main() {std::size_t size 5;std::unique_ptr<int[]> ptr std::make_unique<int[]>(size);for (std::size_t i 0; i < size; i) {ptr[i] i 1;}std:…

MongoDB复制集原理

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

Spring Retry(方法重试、方法重新调用)

Spring Retry——方法重试、方法重新调用 简介&#xff1a;使用1. 配置 2.使用 总结注意 简介&#xff1a; Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况&#xff0c;通过自动重试失败的操作&…

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

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

加油吧! 学习无线电!

pyhackrf2 已经修复 pyhackrf2 修改bw问题-CSDN博客 OOK 已经写出来了 ook 模块 基础测试完成 准备调整参数-CSDN博客 最先后一个程序 关于 wfm解码

C++指南——拷贝构造函数和赋值运算符重载

文章目录 1 举个例子&#xff08;问题由来&#xff09;2 拷贝构造函数与构造函数不同3 默认拷贝构造函数是浅拷贝4 默认赋值运算符是浅拷贝 1 举个例子&#xff08;问题由来&#xff09; 在C中&#xff0c;使用Car car2 car1; 这种形式的语句被称为拷贝构造&#xff08;用一个…

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

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

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xff…

自然语言处理中的语言模型

知乎好文章&#xff0c;建议参考学习语言模型 语言模型&#xff08;Language Model, LM&#xff09;是用于计算或预测一系列词语&#xff08;句子或文本段落&#xff09;出现概率的统计模型。它们能够基于已知的词序列来预测下一个词或者评估一个句子的语言学合理性。 发展历程…

【代码学习】einops,更简单的张量变化

官方教程&#xff1a;https://github.com/arogozhnikov/einops/blob/master/docs/2-einops-for-deep-learning.ipynb 常见操作&#xff1a; 维度变换 rearrange 维度变换 y rearrange(x, b c h w -> b h w c) # 已经 表明 x的每个轴 变量 b c h w guess(y.shape)flatten…

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;实现了电子束光刻机整机…