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

【form校验】3.0项目多层list嵌套

请添加图片描述


const { required, phoneOrMobile } = CjmForm.rules;
export default function detail() {const { query } = getRouterInfo(location);const formRef = useRef(null);const [crumbList, setCrumbList] = useState([{url: "/wenling/Reviewer",name: "审核人员",},{name: query.type == "look" ? "查看" : "编辑",},]);const [form, setForm] = useState({auditNodeConfig: [{nextAuditNode: "农办审批",userList: [{batchAudit: false,phone: "",},],},{nextAuditNode: "农水局审批",userList: [{batchAudit: false,phone: "",},],},{nextAuditNode: "同步财政局审核结果",userList: [{batchAudit: false,phone: "",},],},],});const [loading, setLoading] = useState(false);const [spinning, setSpinning] = useState(false);useEffect(() => {getConfigInfo();}, []);async function getConfigInfo() {setSpinning(true);const res = await configLook({ confId: query.confId });if (res.results && res.state && res.state == 200) {setForm(transformData(res.results));} else {if (query.processCode == "10001002") {setForm({auditNodeConfig: [{nextAuditNode: "农办审批",userList: [{batchAudit: false,phone: "",},],},],});}}setSpinning(false);}const rules = useMemo(() => {let newRule = {};form["auditNodeConfig"].forEach((item, key) => {item["userList"].forEach((record, recordKey) => {newRule[`auditNodeConfig.${key}.userList.${recordKey}.phone`] = [required,phoneOrMobile,];newRule[`auditNodeConfig.${key}.userList.${recordKey}.userId`] = [required,];});});return newRule;}, [form]);const modalForm = useMemo(() => {let newForm = {};form["auditNodeConfig"].forEach((item, key) => {item["userList"].forEach((record, recordKey) => {newForm[`auditNodeConfig.${key}.userList.${recordKey}.phone`] =record["phone"];newForm[`auditNodeConfig.${key}.userList.${recordKey}.userId`] =record["userId"];});});return newForm;}, [form]);const getValue = (eventOrvalue) => {const type = typeof eventOrvalue;if (type === "object" &&eventOrvalue !== null &&eventOrvalue.target &&eventOrvalue.target.value) {return eventOrvalue.target.value;}return eventOrvalue;};const setFormData = (fieldName, index, recordKey) => {return (eventOrvalue) => {let value = getValue(eventOrvalue);if (fieldName == "batchAudit") {value = eventOrvalue.target.checked;}form["auditNodeConfig"][index]["userList"][recordKey][fieldName] = value;setForm(Object.assign({}, form));};};const addHandle = (index) => {const listLen = get(form, `auditNodeConfig[${index}].userList`, []).length;if (listLen >= 4) {Message.warning("最多添加4个审批人员!");} else {form["auditNodeConfig"][index]["userList"].push({batchAudit: false,phone: "",});setForm(Object.assign({}, form));}};const saveHandle = async () => {setLoading(true);const valid = await formRef.current.validate();if (valid) {let data = { ...form };data["confId"] = query.confId;data["processCode"] = query.processCode;const res = await configEdit(transformTree(data));if (res.state && res.state == 200) {Message.success("操作成功");historyBack();} else {Message.error("操作失败,请重试!");}}setLoading(false);};const delHandle = (index, recordKey) => {form["auditNodeConfig"][index]["userList"].splice(recordKey, 1);setForm(Object.assign({}, form));};return (<div className={styles.reviewerBox}><Spin spinning={spinning}><CrumbBar list={crumbList} /><CjmFormlabelWidth="180px"ref={formRef}model={modalForm}rules={rules}><CjmForm.Item label="审批类型:"><CjmInputvalue={query.processName}disabled={true}style={{ width: "380px" }}/></CjmForm.Item>{form &&form.auditNodeConfig.map((item, index) => {return (<div className={styles.auditItem} key={index}><h2 style={{ marginLeft: "24px" }}>{item["nextAuditNode"]}</h2>{item["userList"] &&item["userList"].map((record, recordKey) => {return (<div key={recordKey} className={styles.formItem}><CjmForm.Itemlabel="审批人名称:"prop={`auditNodeConfig.${index}.userList.${recordKey}.userId`}><RemoteSelectstyle={{ width: "380px" }}disabled={query.type == "look" ? true : false}labelKey="userName"valueKey="userId"value={record.userId}label={record.userName}remoteUrl={`${api.reviewer.departmentId}?departmentId=${query.optDeptId}&disableFlag=1`}onChange={{userName: setFormData("userName",index,recordKey),userId: setFormData("userId", index, recordKey),departmentId: setFormData("deptId",index,recordKey),mobileId: setFormData("phone",index,recordKey),}}/></CjmForm.Item><CjmForm.Itemlabel="审批人手机号:"prop={`auditNodeConfig.${index}.userList.${recordKey}.phone`}><CjmInputdisabled={query.type == "look" ? true : false}style={{ width: "380px" }}value={record.phone}onChange={setFormData("phone", index, recordKey)}/></CjmForm.Item><CjmForm.Item label="审批操作:" prop="batchAudit"><Checkboxdisabled={query.type == "look" ? true : false}checked={record.batchAudit}onChange={setFormData("batchAudit",index,recordKey)}>批量通过</Checkbox><span style={{ marginLeft: "24px" }}>默认单个审核,设置批量审核后允许该节点可批量审核</span></CjmForm.Item><Divider className={styles.line} />{recordKey != 0 && (<imgclassName={styles.close}src={deleteImg}onClick={() => delHandle(index, recordKey)}/>)}</div>);})}{query.type !== "look" && index == 0 && (<Buttontype="primary"style={{ marginLeft: "224px" }}onClick={() => addHandle(index)}>+新增(最多添加4个审批人员)</Button>)}</div>);})}</CjmForm><Button className={styles.btnLeave} onClick={() => historyBack()}>返回</Button>{query.type !== "look" && (<Buttontype="primary"className={styles.btnSave}loading={loading}onClick={saveHandle}>保存</Button>)}</Spin></div>);
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JavaWeb课程复习资料——idea创建JDBC
  • 概率论和数理统计(一)概率的基本概念
  • C/S架构的医学影像PACS系统源码,应用于放射、超声、内窥镜、病理等影像科室
  • 不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?
  • [黑马程序员Pandas教程]——Pandas常用计算函数
  • IntersectionObserver的使用
  • JVM类的声明周期
  • Selenium增加Chrome稳定性的参数
  • C++学习---异常处理机制
  • BI数据可视化:不要重复做报表,只需更新数据
  • JSP通用材料收集归档系统eclipse定制开发mysql数据库BS模式java编程jdbc
  • 结合DevOps实践:使用Huawei CodeArts和CCE进行自动化Kubernetes集群部署
  • 3. List
  • 微服务之Eureka
  • 集简云平台助力无代码开发,实现平安银行与电商平台、CRM系统的快速连接
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Bytom交易说明(账户管理模式)
  • Java 网络编程(2):UDP 的使用
  • Javascripit类型转换比较那点事儿,双等号(==)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Spring Boot MyBatis配置多种数据库
  • vue2.0项目引入element-ui
  • Vue2.x学习三:事件处理生命周期钩子
  • 闭包--闭包之tab栏切换(四)
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 开源SQL-on-Hadoop系统一览
  • 面试遇到的一些题
  • 栈实现走出迷宫(C++)
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # Redis 入门到精通(七)-- redis 删除策略
  • #Linux(帮助手册)
  • (145)光线追踪距离场柔和阴影
  • (4)STL算法之比较
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十六)串口UART
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (一)Dubbo快速入门、介绍、使用
  • (正则)提取页面里的img标签
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .ai域名是什么后缀?
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET Core跨平台微服务学习资源
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET 使用 XPath 来读写 XML 文件
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET上SQLite的连接
  • .net项目IIS、VS 附加进程调试
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .Net中的设计模式——Factory Method模式
  • .pop ----remove 删除
  • /boot 内存空间不够