import OHeader from '@/components/o-header' import OSticky from '@/components/o-sticky' import OEmpty from '@/components/o-empty' import dayjs from 'dayjs' import isBetween from 'dayjs/plugin/isBetween' dayjs.extend(isBetween) import { Cell, Icon, List, showToast, Image, DropdownMenu, DropdownItem, Button, Calendar, CellGroup } from 'vant' import OFullRefresh from '@/components/o-full-refresh' import { defineComponent, reactive, ref, onMounted, nextTick } from 'vue' import { state as globalState } from '@/state' import { useRouter } from 'vue-router' import styles from './index.module.less' import request from '@/helpers/request' import iconTeacher from '@common/images/icon_teacher.png' import { courseEmnu } from '@/constant' export default defineComponent({ name: 'exercise-record', setup() { const platformApi = ref(globalState.platformApi) const router = useRouter() const state = reactive({ showSearchStatus: true, showPopoverTime: false, actions: [] as any, subjects: [] as any }) const forms = reactive({ startTime: dayjs().day(1).format('YYYY-MM-DD'), endTime: dayjs().day(7).format('YYYY-MM-DD'), orchestraId: '', orchestraName: '', courseType: '', courseTypeName: '', coursewareErr: null, coursewareErrName: '', keyword: '', page: 1, rows: 20 }) const refreshing = ref(false) const loading = ref(false) const finished = ref(false) const showContact = ref(true) const list = ref([]) const getList = async () => { try { if (refreshing.value) { forms.page = 1 list.value = [] refreshing.value = false } const { endTime, startTime, ...re } = forms const res = await request.post(`${platformApi.value}/courseSchedule/coursewareErrPage`, { data: { ...re, endTime: endTime + ' 23:59:59', startTime: startTime + ' 00:00:00' } }) if (list.value.length > 0 && res.data.pages === 1) { return } list.value = list.value.concat(res.data.rows || []) finished.value = res.data.current >= res.data.pages showContact.value = list.value.length > 0 forms.page = res.data.current + 1 // console.log(showContact.value, ' showContact.value ') loading.value = false } catch (e: any) { // console.log(e, 'e') const message = e.message showToast(message) showContact.value = false finished.value = true } } onMounted(() => { getList() getOrchestraList() // getSubjects() }) const onBack = () => { router.go(-1) } const checkSort = (val: any) => { console.log(val, 'val') forms.coursewareErr = val.value forms.coursewareErrName = val.name } const checkOrchestra = (val: any) => { forms.orchestraId = val.value forms.orchestraName = val.name } const checkSubject = (val: any) => { forms.courseType = val.value forms.courseTypeName = val.name } const getOrchestraList = async () => { try { const res = await request.post(`${platformApi.value}/orchestra/page`, { data: { page: 1, rows: 9999, status: 'DONE' } }) state.actions = res.data.rows.map((item: any) => { return { name: item.name, value: item.id as string } }) } catch (e: any) { const message = e.message showToast(message) } } // const getSubjects = async () => { // try { // const res = await request.post(`${platformApi.value}/subjectBasicConfig/page`, { // data: { page: 1, rows: 9999 } // }) // state.subjects = res.data.rows.map((item) => { // return { // name: item.courseTypeName, // value: item.courseType as string // } // }) // } catch (e: any) { // const message = e.message // showToast(message) // } // } const onRefresh = () => { finished.value = false // 重新加载数据 // 将 loading 设置为 true,表示处于加载状态 loading.value = true getList() } // 名称 const formatLength = (name: string) => { if (name.length > 11) { const fristName = name.substring(0, 6) const lastName = name.substring(name.length - 5, name.length) return fristName + '...' + lastName } else { return name } } const formatTime2Mins = (second: number) => { if (second) { const first = Math.floor(second / 60) const last = second % 60 return (first >= 10 ? first : '0' + first) + ':' + (last >= 10 ? last : '0' + last) } else { return '00:00' } } const dropdownMenuRef = ref() const dropdownItemRef = ref() // 重置 const onSearchReset = () => { forms.startTime = dayjs().day(1).format('YYYY-MM-DD') forms.endTime = dayjs().day(7).format('YYYY-MM-DD') forms.orchestraId = '' forms.orchestraName = '' forms.courseType = '' forms.courseTypeName = '' forms.coursewareErr = null forms.coursewareErrName = '' dropdownItemRef.value?.toggle() refreshing.value = true getList() } // 搜索 const onSearchConfirm = () => { dropdownItemRef.value?.toggle() refreshing.value = true getList() } return () => (
{ document.documentElement.style.setProperty('--header-height', height + 'px') }} > {{ right: () => (
{state.actions.length > 0 && ( <>
乐团
{state.actions.map((item: any) => (
checkOrchestra(item)} > {formatLength(item.name)}
))}
)}
时间段
(state.showPopoverTime = true)} > {forms.startTime}
(state.showPopoverTime = true)} >
(state.showPopoverTime = true)} > {forms.endTime}
课程类型
{Object.keys(courseEmnu).map((subject: any) => (
{ checkSubject({ name: courseEmnu[subject], value: subject }) }} > {courseEmnu[subject]}
))}
课件使用状态
{[ { name: '正常', value: false }, { name: '异常', value: true } ].map((item: any) => (
checkSort(item)} > {item.name}
))}
) }}
{ dropdownItemRef.value?.toggle() nextTick(() => { ;(document.querySelectorAll('.van-dropdown-item--down')[0] as any).style.top = 'var(--van-nav-bar-height)' }) }} > {forms.startTime}~{forms.endTime}
{forms.orchestraId && (
{formatLength(forms.orchestraName)} { forms.orchestraId = '' forms.orchestraName = '' e.stopPropagation() refreshing.value = true getList() }} />
)} {forms.courseType && (
{forms.courseTypeName} { forms.courseType = '' forms.courseTypeName = '' e.stopPropagation() refreshing.value = true getList() }} />
)} {forms.coursewareErr != null && (
{forms.coursewareErrName} { forms.coursewareErr = null forms.coursewareErrName = '' e.stopPropagation() refreshing.value = true getList() }} />
)}
{showContact.value ? ( {list.value.map((item: any) => ( {{ title: () => ( <> {dayjs(item.startTime).format('YYYY-MM-DD HH:mm')}~ {dayjs(item.endTime).format('HH:mm')} ), value: () => <>{formatLength(item.orchestraName)} }} {{ icon: () => ( ), title: () => (

{item.teacherName}

{['INSTRUMENTAL_ENSEMBLE', 'EUPHONIUM_SINGLE'].includes(item.type) ? courseEmnu[item.type] : courseEmnu[item.type] + '单技课'}

), value: () => (

= item.adviseStudyTimeSecond ? '#333' : '#f44541' }} > {formatTime2Mins(item.coursewarePlayTime)} /{formatTime2Mins(item.adviseStudyTimeSecond)}

使用时长/标准时长

) }}
))}
) : ( )} { forms.startTime = '' forms.endTime = '' // console.log( // item, // dayjs(item[0]).format('YYYY-MM-DD'), // 'item', // dayjs(item[0]).day(0).format('YYYY-MM-DD'), // dayjs(item[0]).day(), // dayjs(item[0]).subtract(6, 'day').format('YYYY-MM-DD') // ) if (!dayjs(item[0]).isBetween(dayjs(forms.startTime), dayjs(forms.endTime))) { const week = dayjs(item[0]).day() if (week === 0) { // 星期天 forms.startTime = dayjs(item[0]).subtract(6, 'day').format('YYYY-MM-DD') forms.endTime = dayjs(item[0]).format('YYYY-MM-DD') } else if (week === 1) { // 星期一 forms.startTime = dayjs(item[0]).format('YYYY-MM-DD') forms.endTime = dayjs(item[0]).add(6, 'day').format('YYYY-MM-DD') } else { forms.startTime = dayjs(item[0]) .subtract(week - 1, 'day') .format('YYYY-MM-DD') forms.endTime = dayjs(item[0]) .add(7 - week, 'day') .format('YYYY-MM-DD') } } state.showPopoverTime = false }} />
) } })