多条件选择器梳理

894 阅读2分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

写在前面

这是几个月前开发的一个有点复杂的组件,主要是用来拼接多层筛选条件,之前做的时候比较匆忙,现在梳理一下。效果如图:

c11.gif

分析

复杂的内容简单化首先是要做拆分。略微观察可见:选中某个变量 + 某个逻辑条件 + 某个具体值 + 该条件操作按钮四者组成了条件的最小单元。也正好是添加的【单条件】。 【单条件】如下所示: image.png
【单条件】内部逻辑相对独立,故先忽略内部逻辑作为一个考虑。

【条件组】即为:某个共有逻辑条件 + 多个【单条件】 + 条件组操作按钮。
【最外层】即为:某个共有逻辑条件 + 多个【单条件】或者【条件组】。

外层整体逻辑:

  • 每层内部循环判断是【单条件】还是【条件组】,条件组内部有二次循环。
  • 判断当前层是否为最外层或者最内层,这两层没有整体删除操作按钮。
  • 底部的两个按钮(添加条件 和 添加条件组)外加条件组删除按钮,均是数组的操作,不难实现。
  • 留意内层清空,对应外层也要随之清空。
    现在产品只要求最多三层,【条件组】不需要内嵌【条件组】两层循环也能实现。为了保险起见(万一后续紧急改需求),此处还是使用递归组件实现。多一个判断,最多 N 层,到第 N 层不用继续循环且该层不可内嵌【条件组】。

内层逻辑:

  • 所选变量类型决定可选逻辑条件范围。若变量类型是数组,请求具体值可选项,并在全局存一份。
  • 所选逻辑条件决定后续输入具体值类型(文本输入,数字输入,日期输入,范围输入,下拉选项单选多选)及具体值校验内容。
    这一步非常繁琐,规则清楚后(让需求写清楚规则文档后)分别对象取值或写一个函数去处理的过程。
  • 内部增减按钮仅为对上一层数组操作,不难实现。
  • 每个【单条件】内部分别校验,若有问题给不同 class。整体校验通过该 class 有无判断。各种区间类型校验想办法转换成数学表达式就好处理了。
果然是写之前压力山大,写完后,就这,不值一提。可能时间都花在和产品和后台同步内层逻辑的规则上去了吧。

看完本文不知你有没有更好的想法,欢迎评论区留言讨论!😝😝😝