import { Button, Col, Row, Sticky, Tag } from 'vant' import { defineComponent } from 'vue' import styles from './timer.module.less' import dayjs from 'dayjs' import isSameOrBefore from 'dayjs/plugin/isSameOrBefore' import customParseFormat from 'dayjs/plugin/customParseFormat' dayjs.extend(customParseFormat) dayjs.extend(isSameOrBefore) export default defineComponent({ name: 'timer', props: { onChoice: { type: Function, default: (item: any) => {} }, courseMinutes: { type: Number, default: 25 }, freeMinutes: { type: Number, default: 5 }, startSetting: { type: String, default: '08:00' }, endSetting: { type: String, default: '18:00' } }, data() { return { timerList: [], list: [] as any, weekList: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] } }, mounted() { this.list = this.timerInit( this.startSetting, this.endSetting, this.courseMinutes + this.freeMinutes || 30 ) }, methods: { timerInit(startTime: string, endTime: string, space: number) { let start = dayjs(startTime, 'HH:mm') const end = dayjs(endTime, 'HH:mm') const timerList: any = [] while (start.add(space, 'minute').isSameOrBefore(dayjs(end))) { const item = { startTime: start.format('HH:mm'), endTime: start.add(space, 'minute').format('HH:mm'), status: false } // 一周 timerList.push(item) for (let i = 0; i < 7; i++) {} start = start.add(space, 'minute') } const list: any = [] timerList.forEach((item: any) => { const weekList: any = [] for (let i = 0; i < 7; i++) { weekList.push({ ...item }) } list.push(weekList) }) return list }, btnStatus(index: number, type: 'row' | 'col') { if (type === 'row') { return this.list.every((item: any) => { return item[index].status }) } if (type == 'col') { return this.list[index].every((item: any) => item.status) } }, choice(index: number, type: 'row' | 'col', status?: boolean) { if (type === 'row') { this.list.forEach((item: any, i: number) => { const type = !status ? true : false item[index].status = type }) } if (type == 'col') { this.list[index].forEach((item: any, i: number) => { const type = !status ? true : false item.status = type }) } }, onSubmit() { const list = this.list const weekList = { monday: [], tuesday: [], wednesday: [], thursday: [], friday: [], saturday: [], sunday: [] } const weekType = [ 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday' ] let status = false list.forEach((item: any, i: number) => { item.forEach((times: any, j: number) => { if (times.status) { status = true weekList[weekType[j]].push({ startTime: dayjs(times.startTime, 'HH:mm').format('HH:mm:ss'), endTime: dayjs(times.endTime, 'HH:mm').format('HH:mm:ss') }) } }) }) this.onChoice && this.onChoice(weekList, status) } }, render() { return (
请选择陪练开始时间
陪练课单课时时长为 {this.courseMinutes} 分钟
{this.weekList.map((item: any) => ( {item} ))} {this.weekList.map((item: any, index: number) => ( this.choice(index, 'row', this.btnStatus(index, 'row')) } title={item} > 全选 ))} {this.list.map((item: any, index: number) => ( this.choice(index, 'col', this.btnStatus(index, 'col')) } > 全选 {item.map((week: any) => ( (week.status = !week.status)} > {week.startTime} ))} ))}
) } })