import request from '@/helpers/request' import { Button, Cell, CellGroup, DatePicker, DatePickerColumnType, List, Picker, Popup } from 'vant' import { defineComponent, onMounted, reactive, ref } from 'vue' import styles from '../index.module.less' import { state as baseState } from '@/state' import iconOrchestra from '@/views/mine-orchestra/images/icon-or.png' import OEmpty from '@/components/o-empty' import { useRouter } from 'vue-router' import dayjs from 'dayjs' import { formatterDatePicker } from '@/helpers/utils' import OFullRefresh from '@/components/o-full-refresh' export default defineComponent({ name: 'train-list', props: { type: { type: String, default: 'WEEKLY' }, orchestraList: { type: Array, default: () => [] } }, setup(props) { const columnsType = ref(['year', 'month']) const router = useRouter() const state = reactive({ showPopoverTime: false, timeName: dayjs().format('YYYY') + '年' + dayjs().format('MM') + '月', currentDate: [dayjs().format('YYYY'), dayjs().format('MM')], orchestraStatus: false, selectOrchestra: {} as any, isClick: false, list: [] as any, listState: { dataShow: true, // 判断是否有数据 loading: false, finished: false, refreshing: false, height: 0 // 页面头部高度,为了处理下拉刷新用的 }, params: { page: 1, rows: 20 } }) const getList = async () => { try { if (state.isClick) return state.isClick = true const dateRange = dayjs(state.currentDate[0] + '-' + state.currentDate[1] + '01') const startTime = dateRange.startOf('month').format('YYYY-MM-DD') const endTime = dateRange.endOf('month').format('YYYY-MM-DD') const { data } = await request.post('/api-school/orchestraReport/page', { data: { reportType: props.type, page: state.params.page, rows: state.params.rows, orchestraId: state.selectOrchestra.value, startTime, endTime } }) state.listState.loading = false state.listState.refreshing = false // 处理重复请求数据 if (state.list.length > 0 && data.current === 1) { return } state.list = state.list.concat(data.rows || []) state.listState.finished = data.current >= data.pages state.params.page = data.current + 1 state.listState.dataShow = state.list.length > 0 state.isClick = false } catch { state.listState.dataShow = false state.listState.finished = true state.listState.refreshing = false state.isClick = false } } const onRefresh = () => { state.params.page = 1 state.list = [] state.listState.dataShow = true // 判断是否有数据 state.listState.loading = false state.listState.finished = false getList() } const onDetail = (item: any) => { const path = props.type === 'WEEKLY' ? '/train-week-report' : '/train-month-report' router.push({ path, query: { id: item.id } }) } const checkTimer = (val: any) => { state.timeName = val.selectedValues[0] + '年' + val.selectedValues[1] + '月' state.showPopoverTime = false onRefresh() } onMounted(async () => { try { // 判断是否有乐团 if (props.orchestraList.length > 0) { // const orchestraId = sessionStorage.getItem('orchestraStoryId') // if (orchestraId) { // const item = props.orchestraList.find((child: any) => child.value === orchestraId) // state.selectOrchestra = item || props.orchestraList[0] // } else { state.selectOrchestra = props.orchestraList[0] // } } await getList() } catch { // } }) return () => (
{ state.showPopoverTime = true }} > {state.timeName}
{ state.orchestraStatus = true }} > {state.selectOrchestra.text || ' '}
{state.listState.dataShow ? ( {state.list.map((item: any) => ( {{ title: () =>
{item.orchestraName}
, value: () => ( ), label: () => props.type === 'WEEKLY' ? (
{item.startTime}~{item.endTime}
) : (
{item.monthlyTime}
) }}
))}
) : ( )}
{ state.showPopoverTime = false }} onConfirm={checkTimer} v-model={state.currentDate} formatter={formatterDatePicker} columnsType={columnsType.value} /> (state.orchestraStatus = false)} onConfirm={(val: any) => { state.selectOrchestra = val.selectedOptions[0] state.orchestraStatus = false onRefresh() }} />
) } })