更新记录
1.0(2026-04-24) 下载此版本
时间段区间选择
平台兼容性
uni-app(3.7.6)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| × | × | √ |
MultiShopTimePicker 使用说明
基于 uni-app、Vue 2 的按小时(0:00–24:00)区间选择组件。支持 单区间 与 双区间 两种模式,可选 主题色覆盖,底部提供「保存时段」提交。
环境要求
| 项 | 说明 |
|---|---|
| 框架 | uni-app |
| Vue | Vue 2(manifest.json 中 vueVersion: "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 格式
- 类型:二维数组,外层表示「第几条区间」,内层为该区间的 端点格子 id(1–24,对应 0:00–1:00 … 23:00–24:00)。
- 组件通过模拟点击这些 id 完成初始选中,因此应传入与交互规则一致的端点序列(通常每条区间两个 id:起点格、终点格)。
示例:
// 双区间模式:第一条约 9:00–14:00(id 含义与当前交互一致时)
[[10, 15], []]
// 单区间模式:只保留外层第一段
[[10, 15]]
修改 defaultList 或 maxRanges 时会重新同步内部格子状态(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 载荷说明
timeRange:string[],仅包含有内容的区间文案,例如['9:00-14:00'];无选择时可能为空数组。checkList:Array[2],每项为对象数组(格子引用),结构含id、start、end等,用于还原或提交后端。maxRanges:当前1或2,便于与 UI 配置对齐。
交互说明(简要)
- 双区间(
maxRanges === 2):先完成第一条连续区间,再在空白格上开始第二条;相邻区间可能合并为一条。 - 单区间(
maxRanges === 1):仅保留一条连续区间;在第一段已选满后再点外侧格,会视为重新从该格起选(不会开第二段)。
具体规则以组件内状态机为准;建议在实际业务页做一次完整点击路径验收。
组件名
name: 'MultiShopTimePicker'- 模板标签(easycom):
multi-shop-time-picker
演示工程
本仓库中可参考页面:pages/demo/demo.vue(pages.json 已配置入口时可直接运行),内含:
maxRanges切换示例- 多套
themeColors(青瓷 / 杏橘 / 海雾)切换示例
版本与许可
组件版本以仓库 manifest.json 中 versionName 或发布说明为准;使用及分发请遵守你项目自身的开源/商用协议。
如有问题,建议在业务仓库中提交 Issue 或内部工单,并附上 uni-app 版本、目标平台(微信/H5/App)及最小复现页面。

收藏人数:
下载插件并导入HBuilderX
下载示例项目ZIP
赞赏(0)
下载 4
赞赏 0
下载 11685913
赞赏 1908
赞赏
京公网安备:11010802035340号