import OEmpty from '@/components/o-empty' import request from '@/helpers/request' import dayjs from 'dayjs' import isSameOrBefore from 'dayjs/plugin/isSameOrBefore' import isSameOrAfter from 'dayjs/plugin/isSameOrAfter' dayjs.extend(isSameOrBefore, isSameOrAfter) import { ActionSheet, Cell, DatePicker, Icon, Image, List, Popover, Popup } from 'vant' import { computed, defineComponent, onMounted, reactive } from 'vue' import { useRoute } from 'vue-router' import styles from './plan.module.less' import iconTeacher from '@common/images/icon_teacher.png' import OActionSheet from '@/components/o-action-sheet' import { formatterDatePicker } from '@/helpers/utils' export default defineComponent({ name: 'plan', props: { termTimes: { type: Object, default: {} }, height: { type: [String, Number], default: 0 } }, setup(props) { const startTime = computed(() => props.termTimes.start) const endTime = computed(() => props.termTimes.end) const route = useRoute() const state = reactive({ timeShow: false, currentData: [dayjs().year() + ''], showPopover: false, actionText: '上学期', actionType: 'up', actionTerm: [ { name: '上学期', selected: true, value: 'up' }, { name: '下学期', value: 'down' } ], oPopover: false, check: [], checkboxRefs: [] as any, showQrcode: false, isLoading: false, list: [] as any, listState: { dataShow: true, // 判断是否有数据 loading: false, finished: false }, params: { startTime: dayjs(dayjs().year() + startTime.value).format('YYYY-MM-DD HH:mm:ss'), endTime: dayjs(dayjs().year() + endTime.value) .add(1, 'year') .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss'), page: 1, rows: 20 } }) // 选择学期 const onSelect = (val: any) => { state.actionTerm.forEach((item: any) => { item.selected = false }) val.selected = true state.actionText = val.name state.actionType = val.value if (val.value === 'up') { state.params.startTime = dayjs(Number(state.currentData[0]) + startTime.value).format( 'YYYY-MM-DD HH:mm:ss' ) state.params.endTime = dayjs(Number(state.currentData[0]) + endTime.value) .add(1, 'year') .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') } else if (val.value === 'down') { state.params.startTime = dayjs(Number(state.currentData[0]) + endTime.value) .add(1, 'year') .format('YYYY-MM-DD HH:mm:ss') state.params.endTime = dayjs(Number(state.currentData[0]) + startTime.value) .add(1, 'year') .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') } state.oPopover = false onSearch() } const onConfirmDate = (date: any) => { state.currentData = date.selectedValues const year = Number(state.currentData[0]) + 1 if (state.actionType === 'up') { state.params.startTime = dayjs(year + startTime.value).format('YYYY-MM-DD HH:mm:ss') state.params.endTime = dayjs(year + endTime.value) .add(1, 'year') .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') } else if (state.actionType === 'down') { state.params.startTime = dayjs(year + endTime.value).format('YYYY-MM-DD HH:mm:ss') state.params.endTime = dayjs(year + startTime.value) .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') } state.timeShow = false onSearch() } // 班级列表 const getList = async () => { try { if (state.isLoading) return state.isLoading = true const res = await request.post('/api-school/classGroup/page', { data: { ...state.params, orchestraId: route.query.id } }) state.listState.loading = false const result = res.data || {} // 处理重复请求数据 if (state.list.length > 0 && result.current === 1) { return } const rows = result.rows || [] state.list = state.list.concat(rows || []) state.listState.finished = result.current >= result.pages state.params.page = result.current + 1 state.listState.dataShow = state.list.length > 0 state.isLoading = false } catch { state.listState.dataShow = false state.listState.finished = true state.isLoading = false } } const onSearch = () => { state.params.page = 1 state.list = [] state.listState.dataShow = true // 判断是否有数据 state.listState.loading = false state.listState.finished = false getList() } onMounted(async () => { const sysStartTime = dayjs(dayjs().year() + startTime.value).format('YYYY-MM-DD') const sysEndTime = dayjs(dayjs().year() + endTime.value).format('YYYY-MM-DD') const nowTime = dayjs().format('YYYY-MM-DD') console.log(nowTime, sysStartTime) const before = dayjs(nowTime).isBefore(dayjs(sysStartTime)) const after = dayjs(nowTime).isBefore(dayjs(sysEndTime)) const year = dayjs().year() // console.log(before, after, year) if (before && after) { state.currentData = [year - 1 + ''] state.params.startTime = dayjs(year - 1 + startTime.value).format('YYYY-MM-DD HH:mm:ss') state.params.endTime = dayjs(dayjs().year() + endTime.value) .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') // 上学期 } if (!before && !after) { state.params.startTime = dayjs(dayjs().year() + startTime.value).format( 'YYYY-MM-DD HH:mm:ss' ) state.params.endTime = dayjs(dayjs().year() + endTime.value) .add(1, 'year') .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') // 下一年的上学期 } if (before && !after) { state.params.startTime = dayjs(year + endTime.value).format('YYYY-MM-DD HH:mm:ss') state.params.endTime = dayjs(year + startTime.value) .subtract(1, 'day') .format('YYYY-MM-DD HH:mm:ss') // 下学期 state.actionTerm.forEach((item: any) => { if (item.value === 'down') { item.color = 'var(--van-primary-color)' state.actionText = item.text state.actionType = item.value } else { item.color = '' } }) state.currentData = [year - 1 + ''] state.actionText = '下学期' state.actionType = 'up' state.actionTerm.forEach((item: any) => { if (item.value === 'up') { item.selected = true } else { item.selected = false } }) } await getList() }) return () => (