随笔:让我来限制你的input输入

记录一次为可能不会算数的运维买单的Web前端开发经历╮(╯_╰)╭。

背景:公司内部开发一个简单的监控平台,可以配置URL访问规则。通过定时任务定时调用自己公司的在线运维平台或第三方平台的访问是否正常,出现问题立即告警通过邮件或短信通知给相关人员。

以上为背景,本人负责开发检查告警的对象及规则配置的后台与前端配置页面的开发。其中有一个告警规则与告警级别的对应是这样的:

  • 一个预警规则对应多个预警级别
  • 规则和级别的对应中需要设置一个比例范围,作用是根据不同的级别对应范围,触发不同的预警。如一个规则的黄色预警的配置范围是minVal=20%,maxVal=40%。

因此前端配置页面需要勾选不同的级别对应并设置对应项的分配比例。这就扯出了本文的话题,开始时我仅仅处理勾选和设置,但实际测试时测试人员提出个问题,就是他在眼花缭乱中输入此比例时他弄迷糊了,设置的值之间是重复范围的。就是说比如黄色预警的比例是0.1到0.3、红色的比例是0.2到0.4,导致了多次重复报警,然后就要求输入时进行限制(/(ㄒoㄒ)/这……运维时肯定是制定好的值啊……就不能自己算么!)

但是,有强迫症的我感觉既然有这个需求,那就弄呗。(废话一箩筐后,开启本文的正式内容。)

再谈需求

要做限制的话,有哪些限制,也包括了相关的配置需求:

  1. 配置规则属性时动态载入级别列表(级别存储在数据库中,可手动增删);
  2. 规则新增或修改时必须选择一个级别对应;
  3. 可自由选择多个级别,每个级别都能配置当前规则对应级别的一个比例的最大值和最小值;
  4. 最大值和最小值输入只能为0~1之间的小数(小数点后为两位),包括0和1;
  5. 同级别设置时,最大值必须大于最小值,最小值必须小于最大值;
  6. 已经选择的级别输入中,最大值和最小值的范围不能重复冲突。

因设计样式再增加的需求:

  1. 勾选级别对应后,才能设置对应最大值和最小值;
  2. 取消勾选后,要清除对应设置的最大值和最小值。

页面设计

因为是内部系统,没有产品原型和UI设计,是沿用的公司的其他平台产品的后台界面,另外这个配置页面则是本人自己设计的。

预警规则配置

左侧列表选择要配置的规则,只需注意右下角的预警规则配置。

级别配置

开发环境

JQuery.js(版本低到我不想说,我的心里话你应该懂得……)、

Google Chrome 63(看这个版本你会更懂我对上面的心情!)、

Bootstrap3、sweetalert。

实现历程之最初

未测试前依据设计,开始实现配置页面,依次实现如下:

1、动态加载并显示级别列表

这里流程很明确,依据我的页面设计,可以在页面加载进来后就通过Ajax加载级别列表,然后显示在固定位置。不过还是有几个要点的。

TL;DR

  • 使用了