|
@@ -1,17 +1,5 @@
|
|
import OHeader from '@/components/o-header'
|
|
import OHeader from '@/components/o-header'
|
|
-import OSticky from '@/components/o-sticky'
|
|
|
|
-import {
|
|
|
|
- CellGroup,
|
|
|
|
- Cell,
|
|
|
|
- Button,
|
|
|
|
- Popup,
|
|
|
|
- DatePicker,
|
|
|
|
- DatePickerColumnType,
|
|
|
|
- TimePicker,
|
|
|
|
- TimePickerColumnType,
|
|
|
|
- ActionSheet,
|
|
|
|
- showToast
|
|
|
|
-} from 'vant'
|
|
|
|
|
|
+import { CellGroup, Cell, Button, showToast } from 'vant'
|
|
import { defineComponent, reactive, ref, onMounted } from 'vue'
|
|
import { defineComponent, reactive, ref, onMounted } from 'vue'
|
|
import { postMessage } from '@/helpers/native-message'
|
|
import { postMessage } from '@/helpers/native-message'
|
|
import styles from './course-adjust.module.less'
|
|
import styles from './course-adjust.module.less'
|
|
@@ -19,15 +7,13 @@ import { useRouter, useRoute } from 'vue-router'
|
|
import request from '@/helpers/request'
|
|
import request from '@/helpers/request'
|
|
import dayjs from 'dayjs'
|
|
import dayjs from 'dayjs'
|
|
import { courseEmnu } from '@/constant'
|
|
import { courseEmnu } from '@/constant'
|
|
-import { state as globalState } from '@/state'
|
|
|
|
import { browser } from '@/helpers/utils'
|
|
import { browser } from '@/helpers/utils'
|
|
-const columnsType = ref<DatePickerColumnType[]>(['year', 'month', 'day'])
|
|
|
|
-const columnsTypeTime = ref<TimePickerColumnType[]>(['hour', 'minute'])
|
|
|
|
-const schoolId = (globalState.user.data.schoolInfos || [])
|
|
|
|
- .map((item: any) => {
|
|
|
|
- return item.id
|
|
|
|
- })
|
|
|
|
- .join(',')
|
|
|
|
|
|
+import { state as baseState } from '@/state'
|
|
|
|
+import OPopup from '@/components/o-popup'
|
|
|
|
+import Calendar from '../train-planning/modal/calendar'
|
|
|
|
+import Timer from '../train-planning/modal/timer'
|
|
|
|
+import TeacherList from '../orchestra/modal/teacher-list'
|
|
|
|
+
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'course-adjust',
|
|
name: 'course-adjust',
|
|
setup() {
|
|
setup() {
|
|
@@ -35,15 +21,24 @@ export default defineComponent({
|
|
const route = useRoute()
|
|
const route = useRoute()
|
|
const state = reactive({
|
|
const state = reactive({
|
|
id: route.query.id,
|
|
id: route.query.id,
|
|
|
|
+ cacheId: route.query.cacheId,
|
|
showPopoverTime: false,
|
|
showPopoverTime: false,
|
|
showPopoverCourseTime: false,
|
|
showPopoverCourseTime: false,
|
|
showPopoverTeacher: false,
|
|
showPopoverTeacher: false,
|
|
currentDate: [] as any,
|
|
currentDate: [] as any,
|
|
currentCourseDate: [] as any,
|
|
currentCourseDate: [] as any,
|
|
- teachers: [] as any
|
|
|
|
|
|
+ teachers: [] as any,
|
|
|
|
+ calendarList: [] as any,
|
|
|
|
+ calendarDate: null as any,
|
|
|
|
+ trainStartTime: null, // 开始时间
|
|
|
|
+ timerList: {} as any, // 可选和不可选时间段
|
|
|
|
+ trainTimer: 0,
|
|
|
|
+ selectItem: {} as any,
|
|
|
|
+ arrangeType: 'STANDARD' // 标准排课还是加课
|
|
})
|
|
})
|
|
const forms = reactive({
|
|
const forms = reactive({
|
|
classDate: '',
|
|
classDate: '',
|
|
|
|
+ teacherName: '',
|
|
teacherId: '',
|
|
teacherId: '',
|
|
courseScheduleId: '',
|
|
courseScheduleId: '',
|
|
startTime: '',
|
|
startTime: '',
|
|
@@ -51,74 +46,89 @@ export default defineComponent({
|
|
})
|
|
})
|
|
const courseDetail = ref({} as any)
|
|
const courseDetail = ref({} as any)
|
|
const getDetail = async () => {
|
|
const getDetail = async () => {
|
|
- const { data } = await request.get(`/api-school/courseSchedule/detail/${route.query.id}`, {})
|
|
|
|
- courseDetail.value = { ...data }
|
|
|
|
- state.currentDate = [
|
|
|
|
- dayjs(courseDetail.value.classDate).format('YYYY'),
|
|
|
|
- dayjs(courseDetail.value.classDate).format('MM'),
|
|
|
|
- dayjs(courseDetail.value.classDate).format('DD')
|
|
|
|
- ]
|
|
|
|
|
|
+ if (state.cacheId) {
|
|
|
|
+ const { data } = await request.get('/api-school/courseSchedule/detailCache', {
|
|
|
|
+ params: {
|
|
|
|
+ courseScheduleId: state.id,
|
|
|
|
+ cacheId: state.cacheId
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ courseDetail.value = { ...data }
|
|
|
|
+ state.arrangeType = data.arrangeType || 'STANDARD'
|
|
|
|
|
|
- state.currentCourseDate = [
|
|
|
|
- dayjs(courseDetail.value.startTime).format('hh'),
|
|
|
|
- dayjs(courseDetail.value.startTime).format('mm')
|
|
|
|
- ]
|
|
|
|
|
|
+ forms.classDate = data.classDate
|
|
|
|
+ forms.teacherName = data.teacherName
|
|
|
|
+ forms.teacherId = data.teacherId
|
|
|
|
+ forms.courseScheduleId = data.id
|
|
|
|
+ forms.startTime = data.startTime
|
|
|
|
+ forms.endTime = data.endTime
|
|
|
|
+ // 时间
|
|
|
|
+ state.calendarDate = data.classDate
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ const { data } = await request.get(`/api-school/courseSchedule/detail/${state.id}`, {})
|
|
|
|
+ courseDetail.value = { ...data }
|
|
forms.classDate = courseDetail.value.classDate
|
|
forms.classDate = courseDetail.value.classDate
|
|
forms.teacherId = courseDetail.value.teacherId
|
|
forms.teacherId = courseDetail.value.teacherId
|
|
|
|
+ forms.teacherName = courseDetail.value.teacherName
|
|
forms.courseScheduleId = courseDetail.value.id
|
|
forms.courseScheduleId = courseDetail.value.id
|
|
forms.startTime = courseDetail.value.startTime
|
|
forms.startTime = courseDetail.value.startTime
|
|
forms.endTime = courseDetail.value.endTime
|
|
forms.endTime = courseDetail.value.endTime
|
|
- /**
|
|
|
|
- * classDate: '',
|
|
|
|
- teacherId: '',
|
|
|
|
- courseScheduleId: '',
|
|
|
|
- startTime: '',
|
|
|
|
- endTime: ''
|
|
|
|
- */
|
|
|
|
|
|
+ // 时间
|
|
|
|
+ state.calendarDate = data.classDate
|
|
}
|
|
}
|
|
|
|
|
|
- const getTeacherList = async () => {
|
|
|
|
|
|
+ // 获取排课空闲时间
|
|
|
|
+ const getList = async (date?: any) => {
|
|
try {
|
|
try {
|
|
- const { data } = await request.post(`/api-school/teacher/page`, {
|
|
|
|
|
|
+ const { data } = await request.post('/api-school/orchestra/trainingPlanTime', {
|
|
data: {
|
|
data: {
|
|
- schoolId,
|
|
|
|
- page: 1,
|
|
|
|
- rows: 99999
|
|
|
|
|
|
+ schoolId: baseState.user.data.school.id,
|
|
|
|
+ type: state.arrangeType,
|
|
|
|
+ skipHoliday: false,
|
|
|
|
+ calendarDate: dayjs(date).format('YYYY-MM-DD')
|
|
}
|
|
}
|
|
})
|
|
})
|
|
- state.teachers = data.rows.map((item) => {
|
|
|
|
- return {
|
|
|
|
- name: item.nickname,
|
|
|
|
- value: item.id as string
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- } catch (e: any) {
|
|
|
|
- showToast(e.message)
|
|
|
|
|
|
+ // console.log(data)
|
|
|
|
+ state.calendarList = data || []
|
|
|
|
+ } catch {
|
|
|
|
+ //
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- const checkTeacher = (val: any) => {
|
|
|
|
- console.log(val)
|
|
|
|
- courseDetail.value.teacherName = val.name
|
|
|
|
- forms.teacherId = val.id
|
|
|
|
- }
|
|
|
|
- onMounted(() => {
|
|
|
|
- getDetail()
|
|
|
|
- getTeacherList()
|
|
|
|
|
|
+ onMounted(async () => {
|
|
|
|
+ await getDetail()
|
|
|
|
+ await getList()
|
|
})
|
|
})
|
|
- const reset = () => {
|
|
|
|
- getDetail()
|
|
|
|
|
|
+ const reset = async () => {
|
|
|
|
+ // await getDetail()
|
|
|
|
+ // await getList()
|
|
|
|
+ if (browser().iPhone && !state.cacheId) {
|
|
|
|
+ postMessage({ api: 'back' })
|
|
|
|
+ } else {
|
|
|
|
+ router.back()
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
const submit = async () => {
|
|
const submit = async () => {
|
|
console.log(forms)
|
|
console.log(forms)
|
|
try {
|
|
try {
|
|
- const { data } = await request.post(`/api-school/courseSchedule/adjust`, {
|
|
|
|
|
|
+ if (!forms.classDate) {
|
|
|
|
+ showToast('请选择课程开始日期')
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (!forms.startTime) {
|
|
|
|
+ showToast('请选择课程开始时间')
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ await request.post(`/api-school/courseSchedule/adjust`, {
|
|
data: {
|
|
data: {
|
|
- ...forms
|
|
|
|
|
|
+ ...forms,
|
|
|
|
+ cacheId: state.cacheId
|
|
}
|
|
}
|
|
})
|
|
})
|
|
- if (browser().iPhone) {
|
|
|
|
|
|
+ if (browser().iPhone && !state.cacheId) {
|
|
postMessage({ api: 'back' })
|
|
postMessage({ api: 'back' })
|
|
} else {
|
|
} else {
|
|
router.back()
|
|
router.back()
|
|
@@ -129,26 +139,6 @@ export default defineComponent({
|
|
}
|
|
}
|
|
console.log('课程调整')
|
|
console.log('课程调整')
|
|
}
|
|
}
|
|
- const checkTimer = (val: any) => {
|
|
|
|
- // forms.practiceMonth = val.selectedValues[0] + val.selectedValues[1]
|
|
|
|
- // forms.practiceMonthName = val.selectedValues[0] + '年' + val.selectedValues[1] + '月'
|
|
|
|
- forms.classDate =
|
|
|
|
- val.selectedValues[0] + '-' + val.selectedValues[1] + '-' + val.selectedValues[2]
|
|
|
|
- courseDetail.value.classDate =
|
|
|
|
- val.selectedValues[0] + '-' + val.selectedValues[1] + '-' + val.selectedValues[2]
|
|
|
|
- state.showPopoverTime = false
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- const checkCourseTimer = (val: any) => {
|
|
|
|
- forms.startTime =
|
|
|
|
- forms.classDate + ' ' + val.selectedValues[0] + ':' + val.selectedValues[1] + ':00'
|
|
|
|
- forms.endTime = dayjs(forms.startTime)
|
|
|
|
- .add(courseDetail.value.singleCourseTime, 'minute')
|
|
|
|
- .format('YYYY-MM-DD hh:mm:ss')
|
|
|
|
-
|
|
|
|
- courseDetail.value.startTime = forms.startTime
|
|
|
|
- state.showPopoverCourseTime = false
|
|
|
|
- }
|
|
|
|
|
|
|
|
return () => (
|
|
return () => (
|
|
<>
|
|
<>
|
|
@@ -159,28 +149,29 @@ export default defineComponent({
|
|
<Cell title="乐团名称" value={courseDetail.value.orchestraName} />
|
|
<Cell title="乐团名称" value={courseDetail.value.orchestraName} />
|
|
<Cell title="课程类型" value={courseEmnu[courseDetail.value.type]} />
|
|
<Cell title="课程类型" value={courseEmnu[courseDetail.value.type]} />
|
|
<Cell
|
|
<Cell
|
|
|
|
+ title="授课老师"
|
|
|
|
+ value={forms.teacherName}
|
|
|
|
+ onClick={() => {
|
|
|
|
+ state.showPopoverTeacher = true
|
|
|
|
+ }}
|
|
|
|
+ is-link
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <Cell
|
|
title="课程开始日期"
|
|
title="课程开始日期"
|
|
- value={dayjs(courseDetail.value.classDate).format('YYYY-MM-DD')}
|
|
|
|
|
|
+ value={forms.classDate ? dayjs(forms.classDate).format('YYYY-MM-DD') : ''}
|
|
is-link
|
|
is-link
|
|
onClick={() => (state.showPopoverTime = true)}
|
|
onClick={() => (state.showPopoverTime = true)}
|
|
/>
|
|
/>
|
|
<Cell
|
|
<Cell
|
|
title="课程开始时间"
|
|
title="课程开始时间"
|
|
- value={dayjs(courseDetail.value.startTime).format('hh:mm')}
|
|
|
|
|
|
+ value={forms.startTime ? dayjs(forms.startTime).format('hh:mm') : ''}
|
|
is-link
|
|
is-link
|
|
onClick={() => {
|
|
onClick={() => {
|
|
state.showPopoverCourseTime = true
|
|
state.showPopoverCourseTime = true
|
|
}}
|
|
}}
|
|
/>
|
|
/>
|
|
- <Cell title="课程时长" value={courseDetail.value.singleCourseTime + '分钟'} />
|
|
|
|
- <Cell
|
|
|
|
- title="授课老师"
|
|
|
|
- value={courseDetail.value.teacherName}
|
|
|
|
- onClick={() => {
|
|
|
|
- state.showPopoverTeacher = true
|
|
|
|
- }}
|
|
|
|
- is-link
|
|
|
|
- />
|
|
|
|
|
|
+ <Cell title="课程时长" value={(courseDetail.value.singleCourseTime || 0) + '分钟'} />
|
|
</CellGroup>
|
|
</CellGroup>
|
|
</div>
|
|
</div>
|
|
<div class={styles.wall}></div>
|
|
<div class={styles.wall}></div>
|
|
@@ -192,41 +183,65 @@ export default defineComponent({
|
|
确认调整
|
|
确认调整
|
|
</Button>
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
- <Popup v-model:show={state.showPopoverTime} position="bottom" style="{ height: '30%' }">
|
|
|
|
- <DatePicker
|
|
|
|
- onCancel={() => {
|
|
|
|
|
|
+
|
|
|
|
+ {/* 选择训练开始日期 */}
|
|
|
|
+ <OPopup v-model:modelValue={state.showPopoverTime} position="bottom">
|
|
|
|
+ <Calendar
|
|
|
|
+ list={state.calendarList}
|
|
|
|
+ nextMonth={(date: Date) => getList(date)}
|
|
|
|
+ prevMonth={(date: Date) => getList(date)}
|
|
|
|
+ onSelect={(date: any) => {
|
|
state.showPopoverTime = false
|
|
state.showPopoverTime = false
|
|
|
|
+ forms.classDate = dayjs(date).format('YYYY-MM-DD')
|
|
|
|
+ state.calendarList.forEach((item: any) => {
|
|
|
|
+ if (dayjs(item.calendarDate).isSame(date)) {
|
|
|
|
+ state.timerList = { ...item }
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ state.showPopoverCourseTime = true
|
|
|
|
+ }, 100)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
}}
|
|
}}
|
|
- onConfirm={checkTimer}
|
|
|
|
- v-model={state.currentDate}
|
|
|
|
- title="选择年月日"
|
|
|
|
- columnsType={columnsType.value}
|
|
|
|
|
|
+ v-model:calendarDate={state.calendarDate}
|
|
/>
|
|
/>
|
|
- </Popup>
|
|
|
|
|
|
+ </OPopup>
|
|
|
|
|
|
- <Popup
|
|
|
|
- v-model:show={state.showPopoverCourseTime}
|
|
|
|
|
|
+ {/* 选择开始时间 */}
|
|
|
|
+ <OPopup
|
|
|
|
+ v-model:modelValue={state.showPopoverCourseTime}
|
|
position="bottom"
|
|
position="bottom"
|
|
- style="{ height: '30%' }"
|
|
|
|
|
|
+ style={{ background: '#F6F6F6' }}
|
|
|
|
+ destroy
|
|
>
|
|
>
|
|
- <TimePicker
|
|
|
|
- onCancel={() => {
|
|
|
|
- state.showPopoverCourseTime = false
|
|
|
|
|
|
+ <Timer
|
|
|
|
+ timerList={state.timerList}
|
|
|
|
+ times={state.trainTimer}
|
|
|
|
+ onClose={() => (state.showPopoverCourseTime = false)}
|
|
|
|
+ onConfirm={(val: any) => {
|
|
|
|
+ forms.startTime = dayjs(val).format('YYYY-MM-DD HH:mm:ss')
|
|
|
|
+ forms.endTime = dayjs(val)
|
|
|
|
+ .add(courseDetail.value.singleCourseTime, 'minute')
|
|
|
|
+ .format('YYYY-MM-DD HH:mm:ss')
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ </OPopup>
|
|
|
|
+
|
|
|
|
+ <OPopup v-model:modelValue={state.showPopoverTeacher} position="bottom">
|
|
|
|
+ <TeacherList
|
|
|
|
+ subjectId={courseDetail.value.subjectIds}
|
|
|
|
+ onClose={() => (state.showPopoverTeacher = false)}
|
|
|
|
+ onSelect={(val: any) => {
|
|
|
|
+ // 换老师之后重置数据
|
|
|
|
+ if (forms.teacherId !== val.id) {
|
|
|
|
+ forms.classDate = ''
|
|
|
|
+ forms.startTime = ''
|
|
|
|
+ forms.endTime = ''
|
|
|
|
+ }
|
|
|
|
+ forms.teacherId = val.id
|
|
|
|
+ forms.teacherName = val.nickname
|
|
}}
|
|
}}
|
|
- onConfirm={checkCourseTimer}
|
|
|
|
- v-model={state.currentCourseDate}
|
|
|
|
- title="选择开课时间"
|
|
|
|
- columnsType={columnsTypeTime.value}
|
|
|
|
/>
|
|
/>
|
|
- </Popup>
|
|
|
|
- <ActionSheet
|
|
|
|
- style={{ height: '40%' }}
|
|
|
|
- close-on-click-action
|
|
|
|
- v-model:show={state.showPopoverTeacher}
|
|
|
|
- title="选择老师"
|
|
|
|
- actions={state.teachers}
|
|
|
|
- onSelect={checkTeacher}
|
|
|
|
- ></ActionSheet>
|
|
|
|
|
|
+ </OPopup>
|
|
</div>
|
|
</div>
|
|
</>
|
|
</>
|
|
)
|
|
)
|