123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- import OHeader from '@/components/o-header'
- import OPopup from '@/components/o-popup'
- import OSticky from '@/components/o-sticky'
- import { trainCourseEmnu } from '@/constant'
- import request from '@/helpers/request'
- import { verifiyNumberInteger } from '@/helpers/toolsValidate'
- import { state } from '@/state'
- import dayjs from 'dayjs'
- import { Button, Cell, CellGroup, Field, Popup, showToast, TimePicker } from 'vant'
- import { defineComponent, onMounted, reactive } from 'vue'
- import { useRouter } from 'vue-router'
- import { forms } from '../../create'
- import PracticeClass from '../../modal/practice-class'
- import styles from './index.module.less'
- export default defineComponent({
- name: 'practice-detail',
- setup() {
- const router = useRouter()
- const f = reactive({
- selectItem: {} as any,
- currentTime: [] as any,
- minHour: 0,
- minMinute: 0,
- maxHour: 24,
- maxMinute: 60,
- firstTime: null as any,
- lastTime: null as any
- })
- const configParams = async () => {
- // 获取基础数据
- const { data } = await request.get('/api-school/sysParamConfig/queryByParamNameList', {
- params: {
- paramNames: 'course_start_time,course_end_time'
- }
- })
- const tempData = data || []
- tempData.forEach((item: any) => {
- console.log(item.paramValue, 'paramValue')
- const day = dayjs(forms.trainStartDate).format('YYYY-MM-DD')
- if (item.paramName === 'course_start_time') {
- const firstTime = dayjs(day + ' ' + item.paramValue)
- f.minHour = Number(firstTime.format('HH'))
- f.minMinute = Number(firstTime.format('mm'))
- f.firstTime = firstTime
- } else if (item.paramName === 'course_end_time') {
- const lastTime = dayjs(day + ' ' + item.paramValue)
- f.maxHour = Number(lastTime.format('HH'))
- f.lastTime = lastTime
- }
- })
- }
- const onChange = (val: any) => {
- // 判断是否选择小时
- if (val.columnIndex === 1) return
- // 选择时间
- const selectHour = Number(val.selectedValues[0])
- if (selectHour === f.minHour) {
- f.minMinute = Number(f.firstTime.format('mm'))
- f.maxMinute = 60
- } else if (selectHour === f.maxHour) {
- console.log(selectHour, 'hour')
- f.minMinute = 0
- f.maxMinute = Number(f.lastTime.format('mm'))
- } else {
- f.minMinute = 0
- f.maxMinute = 60
- }
- }
- // 选择日期
- const onConfirmTimer = (item: any) => {
- const times = dayjs(
- dayjs(f.lastTime).format('YYYY-MM-DD') + ' ' + item.selectedValues.join(':') + ':00'
- ).add(f.selectItem.trainTimer, 'minute')
- if (times.isAfter(f.lastTime)) {
- showToast('开始时间超过可选时间范围')
- return
- }
- f.selectItem.startTime = dayjs(
- dayjs(f.lastTime).format('YYYY-MM-DD') + ' ' + item.selectedValues.join(':') + ':00'
- ).format('YYYY-MM-DD HH:mm:ss')
- f.selectItem.endTime = times.format('YYYY-MM-DD HH:mm:ss')
- forms.timerStatus = false
- }
- const checkForms = () => {
- const list = forms.classPracticeList
- let status = false
- let message = ''
- list.forEach((item: any) => {
- console.log(item)
- if (!status && !item.trainTimer) {
- status = true
- message = '请输入训练时长'
- }
- if (!status && !item.startTime) {
- status = true
- message = '请选择开始时间'
- }
- if (!status && !item.times) {
- status = true
- message = '请输入课时数'
- }
- if (!status && item.classIdList.length <= 0) {
- status = true
- message = '请选择训练班级'
- }
- })
- if (status) {
- showToast(message)
- }
- return status
- }
- const onSubmit = async () => {
- if (checkForms()) return
- try {
- const list = forms.classPracticeList
- const trainingPlanClassList: any = []
- list.forEach((item: any) => {
- trainingPlanClassList.push({
- classGroupIdList: item.classIdList,
- courseNum: item.times,
- startTime: dayjs(item.startTime).format('HH:mm:ss'),
- endTime: dayjs(item.endTime).format('HH:mm:ss'),
- singleCourseTime: item.trainTimer
- })
- })
- const params = {
- week: forms.week,
- schoolId: state.user.data.school.id,
- skipHoliday: forms.skipHoliday ? true : false,
- type: 'PRACTISE',
- startDate: dayjs(forms.trainStartDate).format('YYYY-MM-DD'),
- trainingPlanClassList
- }
- console.log(params)
- const { data } = await request.post('/api-school/orchestra/trainingPlanList', {
- data: {
- ...params
- }
- })
- // 初始化 课程预览时选中的乐团编号 课程预览时选中的课程组编号
- forms.selectOrchestraId = null
- forms.selectClassGroupId = null
- forms.planList = {
- orchestra: [] as any, // 所有的乐团
- classes: {} as any, // 所有的班级
- course: {} as any // 所有的课程
- }
- console.log(data, 'date')
- router.push({
- path: '/course-preview',
- query: {
- cacheId: data
- }
- })
- } catch {
- //
- }
- }
- const onFormatterInt = (val: any) => {
- if (val && val >= 1) {
- return verifiyNumberInteger(val)
- } else {
- return ''
- }
- }
- onMounted(() => {
- configParams()
- })
- return () => (
- <div class={styles.practiceDetail}>
- <OHeader />
- {forms.classPracticeList.map((item: any) => (
- <>
- <div class={styles.title}>
- <i></i>
- {trainCourseEmnu[item.classType]}
- </div>
- <CellGroup inset class={styles.cellGroup}>
- <Field
- label="训练时长"
- placeholder="请输入训练时长"
- inputAlign="right"
- v-model={item.trainTimer}
- formatter={onFormatterInt}
- maxlength={3}
- type="tel"
- onUpdate:modelValue={(val: any) => {
- console.log(val)
- item.startTime = null
- }}
- >
- {{ extra: () => <span style={{ paddingLeft: '6px' }}>分钟</span> }}
- </Field>
- <Field
- label="开始时间"
- placeholder="请选择开始时间"
- inputAlign="right"
- readonly
- isLink
- modelValue={item.startTime ? dayjs(item.startTime).format('HH:mm') : ''}
- onClick={() => {
- if (!item.trainTimer) {
- showToast('请输入训练时长')
- return
- }
- f.selectItem = item
- forms.timerStatus = true
- }}
- />
- <Field
- label="课时数"
- placeholder="请输入课时数"
- inputAlign="right"
- v-model={item.times}
- formatter={onFormatterInt}
- maxlength={2}
- type="tel"
- >
- {{ extra: () => <span style={{ paddingLeft: '6px' }}>课时</span> }}
- </Field>
- <Cell
- title="训练班级"
- isLink
- onClick={() => {
- f.selectItem = item
- forms.classStatus = true
- }}
- >
- {{
- value: () => (
- <div class={styles.value}>
- {item.classIdList.length <= 0 ? (
- <div class={styles.tips}>请选择训练班级</div>
- ) : (
- <div>
- 已选<span style={{ padding: '0 4px' }}>{item.classIdList.length}</span>
- 个班级
- </div>
- )}
- </div>
- )
- }}
- </Cell>
- </CellGroup>
- </>
- ))}
- <OSticky position="bottom">
- <div class={'btnGroup'}>
- <Button type="primary" block round onClick={onSubmit}>
- 下一步
- </Button>
- </div>
- </OSticky>
- <OPopup
- v-model:modelValue={forms.classStatus}
- position="bottom"
- style={{ background: '#f6f6f6' }}
- destroy
- >
- <PracticeClass
- onClose={() => (forms.classStatus = false)}
- classType={f.selectItem.classType}
- selectItem={f.selectItem.classIdList}
- onConfirm={(val: any) => {
- f.selectItem.classIdList = val
- }}
- />
- </OPopup>
- <Popup v-model:show={forms.timerStatus} position="bottom" round>
- <TimePicker
- v-model={f.currentTime}
- minHour={f.minHour}
- minMinute={f.minMinute}
- maxHour={f.maxHour}
- maxMinute={f.maxMinute}
- onChange={onChange}
- onCancel={() => (forms.timerStatus = false)}
- onConfirm={(val: any) => onConfirmTimer(val)}
- />
- </Popup>
- </div>
- )
- }
- })
|