项目重点描述

115 阅读3分钟

长表单解决方案技术解析

  • 设计思路
  1. 我们首先会维护两个数组,1、formStepMap(步骤容器) 2、formInstanceList。 这样的话我们每一个子表单实例我们都能具体访问了。
  2. 再通过全局维护一个current和formData来去管理大表单状态,来实现共享全局数据。这样的话就解藕了每个子表单独立维护校验规则与UI
  3. 后面的话我们就可以通过维护 handleNext,通过current获取当前子表单去做我们想做的操作。
  • 项目亮点

富文本

为什么选择# wangEditor,因为我们设计到一些公式的插入,很多富文本不支持。 维护富文本的话是做了一个自定义校验规则,通过props传入最大数字,自动生成一个自定义的校验规则,来实现富文本的校验。

子表单全局字数限制

因为富文本特殊一些,他是有一些字符串标签的字符串,我们想到的解决方案是他是有一个onchange的钩子,我们在其中去做加一个后缀,新设置一个字段值,通过getText(),专门去管理我们的字数。 formStepData获取当前子表单的值,然后我们就可以拿到这个特殊后缀的值,去做一个计算。

审批流方案技术解析

我们首先会拿到这个列表数据,会带一个审批流的id,我们会通过这个审批id,去请求接口,我们会拿到一个数据,这个数据的话会带当前这个审批流的数据,比如我们当前节点是否有回退,拒绝,通过等按钮,来去做一个条件渲染。

组件库的使用

模块复用

因为我们这个项目的话,还涉及到其他的管理端,比如专家端奖励端管理,这些项目的话也涉及到代办事项、个人中心、登录等模块,然后我们就通过组件库等形式去做的一个跨项目的复用情况。

文件上传

这个我们文件上传下载一般就是通过oss上传,他是调一个公共接口,然后通过一个context传入我们统一apiurl,后续我们直接就通过props调用组件就可以。

项目中有什么难点

国际化问题

因为我们组件库二次封装的话没有全量使用,部分组件的话还是要使用antd组件,后来发现他时间选择器组件国际化的设置没有效果,后面发现是我们使用的antd版本和组件库的版本不一致导致国际化组件不生效,后面统一了版本。

实现了什么自定义hooks

  • 倒计时hooks,文件阅读。
  • useGlobalData,拿全局变量
  • 当时我们加了一个业务逻辑,就是接入历史数据,历史数据与我们当前项目自己的数据他们有区别的,所以直接调接口这个是一个前置条件,区分历史模块,通过pathname去获取当前是否是历史模块,所以我们拿到的这个值之后再去调我们的接口数据,所以就基于这个hooks加了一个ready的概念,就是拿到值之后再setReady为true,再走我们页面的逻辑。