vue+element展示时间面板,显示可选和禁用的时间

    技术2025-02-14  32

    vue+element实现时间选择

    最近有个需求,客户A在预约18号技师时,要根据18号技师的服务时间,自动展示哪些时间段可以预约,哪些时间段18号技师正在服务,而正在服务的时间段,客户A是不能预约的,页面效果如下:(灰色为禁选,白色为可选择,蓝色为选中) 在网上找了半天,也没有找到合适的日期插件,但又要实现这个效果,只能自己造一个了。 我的实现思路: 先将时间段(我的是从8点到夜里0点,每半个小时一个值)放入数组,页面使用button按钮,通过vue的v-for循环显示和赋值,根据条件对每个按钮设置颜色,是否禁用。

    HTML部分
    <div> <span v-for="(item,index) in timeList" :key="index"> <span style="padding-left: 5px"> <el-button size="medium" style="width: 80px" :type="item.type" :disabled="item.flag" @click="selectTime(index,item.time)">{{item.time}}</el-button> </span> <!--每5个一行--> <span v-if="(index+1)%5==0"> <br> </span> </span> </div>
    数据格式

    type:控制按钮样式(element按钮样式,info为禁用状态,primary为选中状态," "为可选状态) time:按钮显示的时间 flag:判断按钮是否禁用

    timeList= [ {'type': '', "time": "8:00", 'flag': false}, {'type': '', "time": "8:30", 'flag': false}, {'type': '', "time": "9:00", 'flag': false}, {'type': 'primary', "time": "9:30", 'flag': false}, {'type': 'info', "time": "10:00", 'flag': true}, ]
    按钮选择事件
    参数为索引,和时间值 selectTime(index, time) { //先查询是否有已经选则的时间,有的话先取消原来的,再赋值新选中的 let oldIndex; //没有时返回-1 oldIndex = this.timeList.findIndex((item) => { return item.type === 'primary'; }); //有已经选中的值,取消 if (oldIndex > -1) { this.timeList[oldIndex].type = ''; } //根据索引和时间对选择的时间修改样式 let obj = {}; obj = this.timeList.find((item) => { return item.time === time; }); this.timeList[index].type = 'primary'; }
    Processed: 0.009, SQL: 9