Skip to content

v1.4.1 —— 三个纯函数组件算错了值

Choose a tag to compare

@virtualman333 virtualman333 released this 18 Sep 19:35
· 9 commits to main since this release

三个纯函数组件算错了值

都是「不影响语法、不影响产物生成、不影响文档登记,只影响用户拿到手的那个数字」的缺陷 ——
此前的校验链(含此前唯一会执行组件代码的 check:markdown)一条都拦不住。

vui-slider

  • 步长网格的锚点从 0 改为 min:min=10 / max=20 / step=3 的合法刻度是 10 / 13 / 16 / 19,
    旧实现按 0 对齐会算出 12 —— 拖出来的每一个值都不是你设的刻度,而且把滑块拖到最左边也拿不到
    min(拖到 0% 得 12、拖到 100% 得 18)。负区间(min=-5 / max=5 / step=2)同理。
  • 精度按 step 的小数位取:此前写死 2 位,step=0.001 时 0.123 被抹成 0.12(刻度直接被抹平);
    step=0.1 时也不会再产出 0.30000000000000004 这类浮点毛刺。
  • 默认 props(min=0)下行为与之前完全一致 —— 这是一次纯修复,不是行为变更。

vui-time-picker

  • min / max 先收成组件自己的精度再比较:边界允许写成 HH:mm 或 HH:mm:ss,而组件的精度由
    showSeconds 决定,直接比字符串会错 —— max="14:30:00" 会让一个不显示秒的组件吐出带秒的值
    (父组件收到的字符串与界面上看到的不是一个精度);min="09:00:30" 同理。
  • 现在不显示秒时上界向下取整、下界向上进位,两个方向都保证「收完之后仍然不越界」。

vui-pagination

  • current 同时收上下界:此前只收下界。条数变少之后(筛选、删掉一行)父组件手里的页码可能比
    总页数大,而页码列表里的页号最大只到 pageCount —— 两边对不上时一页都不会被高亮,
    用户看到的是「一页都没选中」;点「上一页」还会从那个越界值减 1,一次点击直接跳到最后一页。
  • 收窄只影响展示与高亮,update() 抛给父组件的值不变。

新增 check:logic

scripts/check-logic.js(26 条断言,已进 check:all)—— 与 check:markdown 同一套
@vue/compiler-sfc 求值方式,直接调上述三个组件的纯函数入口。脚本里记着两个「探针自己撒谎」的坑:
sliderAt 必须默认 modelValue: null(否则组件里的 if (value === this.modelValue) return
让「拖到 0」一次都不 emit)、pagination 那条必须单开实例(if (target === this.current) return
会把同一个 vm 上的第二次调用挡掉)。

修掉一处「不会响的检查」

check:rules 的 jsdoc-first 此前只判「export default 之前有没有 /**」,而辅助函数的注释同样
满足这个形状 —— 本轮把 decimalsOf 的 /** 排在组件描述之前时它一次都没响过,而产物侧已经印出
辅助函数的第一行(README / API.md 的描述列)且 8 个 prop 全部报「JSDoc 里没有对应的 @property」。
AGENTS.md 第四节本来就写着「首块 JSDoc 必须存在且是 <script> 中第一个 /** */ 块」——
文档没错,是检查只做了前半句。现在拆成两向(jsdoc-first / jsdoc-desc-is-first),
负向注入已验证两条都会红。


自测:npm run check:all 15 条全部通过。未做 H5 / 真机实跑(见 AGENTS.md 第八节末)。