Skip to content

nax-date-strip ​

当前版本:0.2.1

nax-ui 日期横条(uni-app x / uvue)。以横向滚动条方式展示一段连续日期,支持单选、多选与范围选择。

安装 ​

text
uni_modules/nax-date-strip

easycom 自动生效,页面直接使用 <nax-date-strip /> 即可。

建议同时安装主题包 uni_modules/nax-ui-theme 并在 App.uvue 引入主题变量,详见 主题接入。

代码示例 ​

基础用法
html
<nax-date-strip v-model="value" @change="onChange"></nax-date-strip>

value 为 Date | null。

类型
html
<!-- 多选 -->
<nax-date-strip v-model="multipleValue" type="multiple"></nax-date-strip>
<!-- 范围选择 -->
<nax-date-strip v-model="rangeValue" type="range"></nax-date-strip>

多选与范围的 v-model 为 Date[];范围选中后为 [开始, 结束]。

范围 / 最大天数
html
<nax-date-strip
  v-model="rangeValue"
  type="range"
  :min="new Date(2024, 0, 1)"
  :max="new Date(2024, 0, 20)"
  :max-days="5"
  :over-max-days="onOverMaxDays"
  :allow-same-day="false"
></nax-date-strip>

min / max 默认分别为当前周上一周的周一与下一周的周日;不传时默认展示以当前周为中心的三周。

禁用与过滤
html
<!-- 禁用周末 -->
<nax-date-strip v-model="value" :min="minDate" :max="maxDate" :disabled-date="disabledWeekend"></nax-date-strip>

<!-- 仅展示工作日 -->
<nax-date-strip v-model="value" :min="minDate" :max="maxDate" :filter="onlyWorkday"></nax-date-strip>

disabledDate(date) 返回 true 禁选;filter(date) 返回 true 才展示该日期。

格式化日期
html
<nax-date-strip v-model="value" :formatter="formatter"></nax-date-strip>
ts
const formatter = (day: any) => {
  if (day.date.getDay() == 0 || day.date.getDay() == 6) {
    day.bottom = '休'
    if (day.type != 'selected') {
      day.style = 'background-color:#fdf3e4;color:#c97c10;border-color:#fcefda;'
    }
  }
}

formatter 接收 CalendarDay 对象,可改写:

  • day.top:第一行文案(默认显示周几)
  • day.bottom:第三行文案(默认显示范围标记或农历)
  • day.style:内联样式字符串,应用到格子与日期数字
  • day.className:附加 class

CalendarDay 结构:

字段说明
dateDate 日期对象
text / dayText日期数字
typenormal / today / disabled / selected / start / end / middle
top / bottom上下行文案
style / className自定义样式 / class
keyYYYY-MM-DD
展示农历
html
<nax-date-strip v-model="value" :min="minDate" :max="maxDate" show-lunar></nax-date-strip>
值格式化

默认绑定值为 Date 对象;设置 value-format 后绑定字符串:

html
<nax-date-strip v-model="strValue" value-format="YYYY-MM-DD"></nax-date-strip>

支持标记:YYYY YY MM M DD D HH H mm ss。

自定义颜色(全端生效)

选中(含起止)、今天文字与范围中间底色可用 props 直接指定,内联字面量渲染,不依赖 CSS 变量解析:

html
<nax-date-strip
  v-model="value"
  selected-color="#f0a020"
  today-color="#f0a020"
  middle-color="#fcefda"
></nax-date-strip>
属性说明默认
selected-color选中 / 起止格子背景色空(跟随主题)
today-color「今天」文字色空(跟随主题)
middle-color范围中间格子背景色空(跟随主题)

formatter 改写的 day.style 优先保留,颜色 props 追加覆盖段(后写优先级高)。

主题 ​

通过 CSS 变量覆盖:

Token用途默认
--nax-date-strip-column-gap格子间距16rpx
--nax-date-strip-item-width格子宽度128rpx
--nax-date-strip-item-padding-y / -x格子内边距18rpx / 12rpx
--nax-date-strip-item-border-radius格子圆角--nax-radius-md
--nax-date-strip-item-border-color格子边框色transparent
--nax-date-strip-item-bg格子背景transparent
--nax-date-strip-item-week-font-size / -color / -order周几行12px / 次要色 / 1
--nax-date-strip-item-day-font-size / -color / -order日期数字行16px / 主文字 / 2
--nax-date-strip-item-info-font-size / -color / -order信息行12px / 次要色 / 3
--nax-date-strip-item-selected-color / -bg选中文字 / 背景反白 / 主色
--nax-date-strip-item-middle-bg范围中间底色--nax-color-primary-secondary
--nax-date-strip-item-today-color今天文字色--nax-color-primary

示例:通过 order 变量把周几移到日期下方,去掉间距改成直角:

html
<nax-date-strip
  v-model="value"
  style="--nax-date-strip-column-gap:0px;--nax-date-strip-item-border-radius:0px;--nax-date-strip-item-week-order:3;"
></nax-date-strip>

Props ​

属性类型默认值说明
modelValue[Object, Array, String]nullv-model 绑定值;单选为单个 Date/string,多选/范围为数组;空值传 null/[]
typestring'single'single | multiple | range,默认 single
min[Object, String]null可选最小日期;默认上一周周一
max[Object, String]null可选最大日期;默认下周周日
disabledDatefunctionnull(date) => boolean,返回 true 禁选
filterfunctionnull(date) => boolean,返回 true 才展示该日期
maxDaysnumber9007199254740991多选/范围最多可选天数,默认不限
overMaxDaysfunctionnull超出最多可选天数时回调
formatterfunctionnull(day) => void,可改写 day.top / day.bottom / day.style / day.className
allowSameDaybooleanfalse范围是否允许起止同一天,默认 false
valueFormatstring''绑定值格式;为空绑定 Date 对象,如 'YYYY-MM-DD' 则绑定字符串
startDateTextstring'开始'开始日期文字,默认「开始」
endDateTextstring'结束'结束日期文字,默认「结束」
sameDateTextstring'开始/结束'同一天文字,默认「开始/结束」
showLunarbooleanfalse是否显示农历,默认 false
selectedColorstring''选中/起止格子背景色(内联字面量,全端生效)
todayColorstring''「今天」文字色(同上)
middleColorstring''范围中间格子背景色(同上)
customClassstring''根节点扩展 class

Events ​

事件说明
update:modelValue选中变化
change选中变化(参数同 update:modelValue)

注意 ​

  • 农历计算覆盖 1900 - 2100 年。
  • 组件默认展示以当前周为中心的 3 周(min/max 可自定义)。
  • 蒸汽模式仅组合式 API;样式仅 class 选择器。