更新记录

1.0(2026-04-24) 下载此版本

时间段区间选择


平台兼容性

uni-app(3.7.6)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟

其他

多语言 暗黑模式 宽屏模式
× ×

MultiShopTimePicker 使用说明

基于 uni-appVue 2 的按小时(0:00–24:00)区间选择组件。支持 单区间双区间 两种模式,可选 主题色覆盖,底部提供「保存时段」提交。


环境要求

说明
框架 uni-app
Vue Vue 2manifest.jsonvueVersion: "2"
已按小程序/H5 常规写法编写;各端以实际编译为准

引入方式

1. 拷贝组件

将本目录 multi-shop-time-picker.vue 复制到目标工程的组件目录,例如:

components/multi-shop-time-picker/multi-shop-time-picker.vue

2. 配置 easycom(推荐)

pages.json 中增加(路径按你项目调整):

{
  "easycom": {
    "autoscan": true,
    "custom": {
      "^multi-shop-time-picker$": "@/components/multi-shop-time-picker/multi-shop-time-picker.vue"
    }
  }
}

配置完成后,页面里可直接写标签 <multi-shop-time-picker>,无需手动 import

3. 手动引入(可选)

<script>
import MultiShopTimePicker from '@/components/multi-shop-time-picker/multi-shop-time-picker.vue';

export default {
  components: { MultiShopTimePicker }
};
</script>

快速示例

<template>
  <view class="page">
    <multi-shop-time-picker
      :max-ranges="2"
      :default-list="[[10, 14], []]"
      :theme-colors="{}"
      @submit="onTimeSubmit"
    />
  </view>
</template>

<script>
export default {
  methods: {
    onTimeSubmit(e) {
      console.log(e.timeRange);   // 例: ['9:00-14:00'] 或两段字符串数组
      console.log(e.checkList);   // 二维数组,元素为格子对象
      console.log(e.maxRanges);   // 1 或 2
    }
  }
};
</script>

Props

属性 类型 默认值 说明
maxRanges Number 2 1:仅允许一条连续区间;2:最多两条区间(可相邻合并)。非法值会被校验器拒绝。
defaultList Array [[9, 21], []] 初始选中。见下文「defaultList 格式」。当 maxRanges === 1 时只使用第一段slice(0, 1))。
themeColors Object {} 与内置默认主题浅合并,只传需要覆盖的键即可。见「主题色」。
rightnow Boolean true 预留,当前逻辑未依赖。
day Number 4 预留,当前逻辑未依赖。
selected Array [] 预留,当前逻辑未依赖。

defaultList 格式

  • 类型:二维数组,外层表示「第几条区间」,内层为该区间的 端点格子 id1–24,对应 0:00–1:00 … 23:00–24:00)。
  • 组件通过模拟点击这些 id 完成初始选中,因此应传入与交互规则一致的端点序列(通常每条区间两个 id:起点格、终点格)。

示例:

// 双区间模式:第一条约 9:00–14:00(id 含义与当前交互一致时)
[[10, 15], []]

// 单区间模式:只保留外层第一段
[[10, 15]]

修改 defaultListmaxRanges 时会重新同步内部格子状态(deep: true 监听 defaultList)。


主题色 themeColors

与组件内默认对象(青绿系)按 key 合并,常用字段如下:

含义
buttonPrimaryStart / buttonPrimaryEnd 「保存时段」按钮渐变起止色
buttonText 按钮文字颜色
loadingBgStart / loadingBgEnd / loadingText 加载态按钮渐变与文字(当前 loading 多为内部状态,可按需扩展)
deputyRangeBg 选中区间内「中间格」浅背景
slotSelectedBg 选中端点格填充色
summaryText 底部「当前选择」摘要主色

示例(暖色):

<multi-shop-time-picker
  :theme-colors="{
    buttonPrimaryStart: '#fb923c',
    buttonPrimaryEnd: '#c2410c',
    deputyRangeBg: '#ffedd5',
    slotSelectedBg: '#ea580c',
    summaryText: '#9a3412'
  }"
/>

事件

事件名 触发时机 回调参数
submit 用户点击「保存时段」且非 loading { checkList, timeRange, maxRanges }
close 调用组件方法 close() 时(模板中未默认展示关闭入口,需自行对接)

submit 载荷说明

  • timeRangestring[],仅包含有内容的区间文案,例如 ['9:00-14:00'];无选择时可能为空数组。
  • checkListArray[2],每项为对象数组(格子引用),结构含 idstartend 等,用于还原或提交后端。
  • maxRanges:当前 12,便于与 UI 配置对齐。

交互说明(简要)

  • 双区间(maxRanges === 2:先完成第一条连续区间,再在空白格上开始第二条;相邻区间可能合并为一条。
  • 单区间(maxRanges === 1:仅保留一条连续区间;在第一段已选满后再点外侧格,会视为重新从该格起选(不会开第二段)。

具体规则以组件内状态机为准;建议在实际业务页做一次完整点击路径验收。


组件名

  • name: 'MultiShopTimePicker'
  • 模板标签(easycom):multi-shop-time-picker

演示工程

本仓库中可参考页面:pages/demo/demo.vuepages.json 已配置入口时可直接运行),内含:

  • maxRanges 切换示例
  • 多套 themeColors(青瓷 / 杏橘 / 海雾)切换示例

版本与许可

组件版本以仓库 manifest.jsonversionName 或发布说明为准;使用及分发请遵守你项目自身的开源/商用协议。

如有问题,建议在业务仓库中提交 Issue 或内部工单,并附上 uni-app 版本、目标平台(微信/H5/App)及最小复现页面

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议