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

最初的需求

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

  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来求方程的解。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值