Skip to content

TimeSelect 配送时间

介绍

用于配送时间选择

基础用法

vue
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue';

const visible1 = ref(false);
const currentKey1 = ref(0);
const currentTime1 = ref([]);
const times1 = reactive([
  {
    key: 0,
    list: ['9:00-10:00', '10:00-11:00', '11:00-12:00']
  },
  {
    key: 1,
    list: ['9:00-10:00', '10:00-11:00']
  },
]);

const handleChange1 = (pannelKey: number) => {
  currentKey1.value = pannelKey;
  currentTime1.value = [{
    key: currentKey1.value,
    list: []
  }];
};

const handleClick1 = () => {
  visible1.value = true;
};

const selectTime1 = (item: string) => {
  let curTimeIndex = currentTime1.value[0].list.findIndex((time: string) => time === item);
  if(curTimeIndex === -1) {
    currentTime1.value[0].list.push(item);
  } else {
    currentTime1.value[0].list.splice(curTimeIndex, 1);
  }
};

const handleSelected1 = (obj: any) => {
  console.log(`您选择了:${JSON.stringify(obj)}`);
};

onMounted(() => {
  currentTime1.value.push({
    key: currentKey1.value,
    list: []
  });
});
</script>

<template>
  <nut-cell @click="handleClick1">
    <span><label>请选择配送时间</label></span>
  </nut-cell>
  <nut-time-select
    v-model:visible="visible1"
    height="50%"
    :current-key="currentKey1"
    :current-time="currentTime1"
    @select="handleSelected1"
  >
    <template #pannel>
      <nut-time-pannel name="2月23日(今天)" pannel-key="0" @change="handleChange1"></nut-time-pannel>
      <nut-time-pannel name="2月24日(星期三)" pannel-key="1" @change="handleChange1"></nut-time-pannel>
    </template>
    <template #detail>
      <nut-time-detail :times="times1" @select="selectTime1"></nut-time-detail>
    </template>
  </nut-time-select>
</template>

可选择多个日期时间

vue
<script lang="ts" setup>
// ... (省略类似的代码结构)
</script>

<template>
  <!-- ... (省略类似的模板结构) -->
</template>

API

Props

参数说明类型可选值默认值
visible是否显示弹层boolean-false
height弹层的高度string-20%
title弹层标题string-取件时间
current-key唯一标识string / number-0
current-time当前选择的时间Array-[]
lock-scroll背景是否锁定boolean-true
muti是否可以选择多个时间boolean-false

Slots

名称说明
title更改标题
pannel左侧列表
detail右侧详细内容

TimePannel Props

参数说明类型可选值默认值
name显示的名称string--
pannel-key唯一标识string / number-0

TimeDetail Props

参数说明类型可选值默认值
times可选择的时间Array-[]

TimeSelect Events

事件名说明类型
select关闭遮罩之后的回调(key: string / number, list: []) => void

TimePannel Events

事件名说明类型
change点击内容的回调(pannelKey: string / number) => void

TimeDetail Events

事件名说明类型
select点击时间的回调(time: string) => void

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值
--nut-timeselect-title-font-sizevar(--nut-font-size-2)
--nut-timeselect-title-colorvar(--nut-title-color)
--nut-timeselect-title-width100%
--nut-timeselect-title-height50px
--nut-timeselect-title-line-height50px
--nut-timeselect-pannel-bg-color#f6f7f9
--nut-timeselect-timepannel-text-colorvar(--nut-title-color2)
--nut-timeselect-timepannel-font-sizevar(--nut-font-size-2)
--nut-timeselect-timepannel-cur-bg-colorvar(--nut-white)
--nut-timeselect-timepannel-cur-text-color#333333
--nut-timeselect-timepannel-width140px
--nut-timeselect-timepannel-height40px
--nut-timeselect-timepannel-padding15px
--nut-timeselect-timedetail-padding0 5px 50px 13px
--nut-timeselect-timedetail-item-width100px
--nut-timeselect-timedetail-item-height50px
--nut-timeselect-timedetail-item-line-height50px
--nut-timeselect-timedetail-item-bg-color#f6f7f9
--nut-timeselect-timedetail-item-border-radius5px
--nut-timeselect-timedetail-item-text-color#333333
--nut-timeselect-timedetail-item-text-font-sizevar(--nut-font-size-2)
--nut-timeselect-timedetail-item-cur-bg-colorvar(--nut-primary-color)
--nut-timeselect-timedetail-item-cur-bordervar(--nut-primary-color)
--nut-timeselect-timedetail-item-cur-text-colorvar(--nut-primary-color)

MIT Licensed