import dayjs from 'dayjs' import isSameOrBefore from 'dayjs/plugin/isSameOrBefore' import customParseFormat from 'dayjs/plugin/customParseFormat' dayjs.extend(customParseFormat) dayjs.extend(isSameOrBefore) import { ElButton, ElCol, ElRow } from 'element-plus' import { defineComponent } from 'vue' import styles from './index.module.less' export default defineComponent({ name: 'practice-timer', props: { timerObject: { // 传入的数据 type: Object, default: {} }, onClose: { type: Function, default: () => {} }, 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: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], weekType: [ 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday' ] } }, mounted() { this.list = this.timerInit( this.startSetting, this.endSetting, this.courseMinutes + this.freeMinutes || 30 ) console.log(this.endSetting) }, 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) 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) }) const tempList = this._initData(list) return tempList }, _initData(list: Array) { // 回显数据 const weekType = this.weekType const timerObject = this.timerObject list.forEach((item: any) => { item.forEach((slot: any, slotIndex: number) => { const dayList = timerObject[weekType[slotIndex]] const startTime = dayjs(slot.startTime, 'HH:mm').format('HH:mm:ss') const isExist = dayList?.some( (course: any) => course.startTime === startTime ) isExist && (slot.status = true) }) }) 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 = this.weekType 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') .subtract(this.freeMinutes, 'minute') .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')) } > 全选 ))}
{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} ))} ))}
{/* */}
{ this.onClose() }} > 取消 保存设置
{/*
*/}
) } })