• 需求是怎么一步一步变态的


    最初的需求

    需求是处理一些数据,数据例子:
    在这里插入图片描述
    而界面要显示的样子:
    在这里插入图片描述
    看起来不太难,可以分解出需求:

    1. 每一列的所有数据要都能参与选择,或者输入
    2. 当一个参数选中之后,比如选中A选中1,则B的选项范围只有3,4,5,6,7;C则只能输入1~16中的一个数

    需求很清楚,需要行和列一一对应。简单的过滤就可以了。

    需求开始变态

    这是后业务说又有些新数据加入进来,他们长这样:

    在这里插入图片描述

    新加入的D参数有些类似C,但是又有点不一样,D依赖于A,不再是单纯的行对应,这里需要计算。
    当然也可以解决,D的初始值,可以根据A的最大值求出来,然后选择的时候,再根据实时的值,实时计算。

    接着变态

    业务又加了参数:
    在这里插入图片描述

    新加的参数E是一个条件式的数据,它依赖于B的值。
    不过也可以搞,变成表达式:

    0<=B<5&&E<=C;5<=B<=16&&E<=C-2;B>16&&E<=C-5

    分号表示或者,&&表示并且。计算初始值时,根据B的值找到C的最大值,然后得到E的最大值,然后取并集,得到所有可能范围,这个范围可能是不连续的多个区间。实时选择时,根据已选中的值,再次计算,仍然可以得到可选的范围。

    进一步变态

    业务又加了三个参数:
    在这里插入图片描述
    F在选择是是不显示的,G和H是要显示的,但是G和H的和要满足G+H<=F。
    这个也可以搞,这个比上面的依赖繁琐一点,多个循环依赖,要检测。
    这里所有参数都有个默认规则,就是肯定是大于等于0的。
    检测的循环的时候,就把其中一个当0处理,然后求一个一元一次方程,根据定义域得到值域。实时选择时,仍然如此。

    没有最变态,只有更变态

    业务遇到新的数据:
    在这里插入图片描述
    一次添加了IJKLMNO。
    以为只是复刻了前面的参数,当然还有要求。
    I的值是JKL

    • 当I选择J的时候,右侧参数只能有J和M
    • 当I选择K的时候,右侧参数只能有K和N
    • 当I选择L的时候,右侧参数只能有L和O

    O还依赖G。

    本来是想重新规划参数,加一下互斥组什么的,业务说我就不,我就要在原有的数据格式上录入。
    没办法,最后折中
    业务想录成这种:
    在这里插入图片描述
    当然这这三条,实际数据业务录入了1000条,头皮发麻。
    硬着头皮搞了,支持参数值为无,当只有无时,不显示这参数。

    实际的变态

    有超级多的表格,每个表格的参数名字不相同,顺序也不同,值的格式也不同,依赖的参数是多个。
    选择的时候要联动更新依赖这个参数的选框,不仅更新值,还要更新范围,更新选项。

    做了好久,差不多做完了,使用了math.js和algebra.js前端库
    没错,计算是在前端计算的。
    https://mathjs.org/index.html
    http://algebra.js.org/

    • 使用math.js来计算表达式的值
    • 使用algebra来求方程的解。
  • 相关阅读:
    【计算机基础知识】字符的编码表示
    Golang - api中生产数据,另一个进程控制并发数去消费api中生产的数据
    [C++][vtk][转载]vtk画六方角椎体
    base64图片的优缺点(雪碧图)
    Spring Boot和Spring有什么区别
    L1-006 连续因子
    神经网络中间层特征图可视化(输入为音频)
    时空数据挖掘二(城市计算)
    网络练习题
    Linux 目录切换命令
  • 原文地址:https://blog.csdn.net/q4444tita/article/details/133147264