Skip to content

v1.5.0

Latest

Choose a tag to compare

@virtualman333 virtualman333 released this 20 Sep 21:29

v1.5.0

修了什么

vui-calendar 的三个日期属性(modelValue / minDate / maxDate)以前是直接跟格子里的 YYYY-MM-DD 比字符串,而组件自己产出的日期是逐段补零的 —— 两边只有在「宿主也补零」时才可比。实测两种写法都会坏:

  • minDate="2026-9-1":'2026-09-01' < '2026-9-1' 成立(第 6 位 0 < 9),整个月的格子全部 disabled,一天都点不动,页面上没有任何报错;
  • modelValue="2026-9-01":选中项存的是宿主原文,跟格子的补零写法永远不相等,一格都不高亮(点一下之后又会自己「好」—— 最难查的那种)。

现在三个日期入参先解析、再收敛成组件自己的定长写法,边界比较与选中判等只发生在组件自己产出的字符串之间。

同族的三处一并修掉:

  • parseDate 补归一化守卫:越界日期不再静默滚到另一天(2026-02-30 → 3 月 2 日、2026-13-01 → 2027-01-01、2026-00-10 → 2025-12-10),一律返回 null;
  • startWeek 归一到 0~6(JS 里负数取模还是负的):传 -1 时表头只剩 6 个字、第一列空着,而格子按「周六开头」排 —— 表头与格子静默错开一位;13 / -8 这类写法还会算出负偏移把整张网格错位;
  • watch(modelValue) 对非法值不再原样塞进选中项。

测试

check:logic 接进 vui-calendar:78 → 91 条断言(登记 11 个组件),覆盖网格永远整周 / 首格偏移与表头同源 / 补位格跨月跨年 / 边界当天可选 / 禁用格不发事件 / 跨年翻页 / watch 归一化。

另加一条宽扫:拿宿主手写日期串直接跟组件自己产出的日期串比的组件,脚本里必须能看到日期收敛 —— 配判据自证,防宽扫恒假。

安装

npm i vui-uniapp@1.5.0