|
@@ -0,0 +1,272 @@
|
|
|
+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')
|
|
|
+
|
|
|
+ // console.log(times.isAfter(f.lastTime), times, f.lastTime)
|
|
|
+ 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 onSubmit = async () => {
|
|
|
+ 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>
|
|
|
+ {/* classType: item,
|
|
|
+ startTime: null as any,
|
|
|
+ trainTimer: null as any,
|
|
|
+ times: null as any,
|
|
|
+ classIdList: [] as any */}
|
|
|
+ <CellGroup inset class={styles.cellGroup}>
|
|
|
+ <Field
|
|
|
+ label="训练时长"
|
|
|
+ placeholder="请输入训练时长"
|
|
|
+ inputAlign="right"
|
|
|
+ v-model={item.trainTimer}
|
|
|
+ formatter={onFormatterInt}
|
|
|
+ maxlength={3}
|
|
|
+ >
|
|
|
+ {{ extra: () => '分钟' }}
|
|
|
+ </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}
|
|
|
+ >
|
|
|
+ {{ extra: () => '课时' }}
|
|
|
+ </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)}
|
|
|
+ onConfirm={(val: any) => {
|
|
|
+ console.log(val, 'val')
|
|
|
+ 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>
|
|
|
+ )
|
|
|
+ }
|
|
|
+})
|