|
@@ -42,35 +42,42 @@
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
<template v-else>
|
|
<template v-else>
|
|
|
- <CourseHomeworkTable :columns="columns" :tableData="homeworkList" :role="role"/>
|
|
|
|
|
|
|
+ <CourseHomeworkTable :columns="columns" :tableData="homeworkList" :role="role" :courseId="dataForm.courseId" :isShowNewHomework="showEdit && role == 'teachers'"/>
|
|
|
</template>
|
|
</template>
|
|
|
</el-tab-pane>
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
</el-tabs>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <el-dialog v-model="visible">
|
|
|
|
|
- <el-form :model="dataForm">
|
|
|
|
|
|
|
+ <el-dialog v-model="visible" title="编辑课程">
|
|
|
|
|
+ <el-form :model="newCourseInfo">
|
|
|
|
|
+<!-- <el-form-item label="课程图片">-->
|
|
|
<el-form-item label="课程名称">
|
|
<el-form-item label="课程名称">
|
|
|
- <el-input v-model="dataForm.courseName" placeholder="请输入名称"></el-input>
|
|
|
|
|
|
|
+ <el-input v-model="newCourseInfo.courseName" placeholder="请输入名称"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="面向年级">
|
|
<el-form-item label="面向年级">
|
|
|
- <el-input v-model="dataForm.targetGrade" placeholder="请输入年级"></el-input>
|
|
|
|
|
|
|
+ <el-input v-model="newCourseInfo.targetGrade" placeholder="请输入年级"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="描述">
|
|
<el-form-item label="描述">
|
|
|
- <el-input v-model="dataForm.description" placeholder="请输入描述"></el-input>
|
|
|
|
|
|
|
+ <el-input v-model="newCourseInfo.description" placeholder="请输入描述"></el-input>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="课程图片">
|
|
|
|
|
+ <el-input v-model="newCourseInfo.courseImages[0]" placeholder="请输入图片链接"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="开始时间">
|
|
<el-form-item label="开始时间">
|
|
|
- <el-date-picker v-model="dataForm.startTime" type="datetime" placeholder="截止时间" style="width: 180px"/>
|
|
|
|
|
|
|
+ <el-date-picker v-model="newCourseInfo.startTime" type="datetime" placeholder="截止时间" style="width: 180px"/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="截止时间">
|
|
<el-form-item label="截止时间">
|
|
|
- <el-date-picker v-model="dataForm.endTime" type="datetime" placeholder="截止时间" style="width: 180px"/>
|
|
|
|
|
|
|
+ <el-date-picker v-model="newCourseInfo.endTime" type="datetime" placeholder="截止时间" style="width: 180px"/>
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+ <el-form-item label="选课码">
|
|
|
|
|
+ <el-input v-model="newCourseInfo.enrollCode" placeholder="请输入选课码"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
|
<div class="dialog-footer">
|
|
<div class="dialog-footer">
|
|
|
<el-button @click="visible = false">取消</el-button>
|
|
<el-button @click="visible = false">取消</el-button>
|
|
|
- <el-button type="primary" >确定</el-button>
|
|
|
|
|
|
|
+ <el-button type="primary" @click="handleSubmit">确定</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
@@ -78,7 +85,7 @@
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
import {onMounted, reactive, ref} from 'vue';
|
|
import {onMounted, reactive, ref} from 'vue';
|
|
|
-import {ElTabs, ElTabPane, ElTable, ElTableColumn, ElAvatar, ElMessage} from 'element-plus';
|
|
|
|
|
|
|
+import {ElTabs, ElTabPane, ElTable, ElTableColumn, ElAvatar, ElMessage, ElNotification} from 'element-plus';
|
|
|
import './index.scss'
|
|
import './index.scss'
|
|
|
import type {CourseVO, IAssignment, IAssignmentTableColumn, IAssignmentTableItem} from "@/types/vo";
|
|
import type {CourseVO, IAssignment, IAssignmentTableColumn, IAssignmentTableItem} from "@/types/vo";
|
|
|
import {useRoute} from "vue-router";
|
|
import {useRoute} from "vue-router";
|
|
@@ -86,7 +93,8 @@ import useApis from "@/apis";
|
|
|
import CourseHomeworkTable from "@/views/CourseSquare/component/CourseDetails/component/CourseHomeworkTable.vue";
|
|
import CourseHomeworkTable from "@/views/CourseSquare/component/CourseDetails/component/CourseHomeworkTable.vue";
|
|
|
import type {AssignmentQuery} from "@/types/query";
|
|
import type {AssignmentQuery} from "@/types/query";
|
|
|
import {useStore} from "@/store";
|
|
import {useStore} from "@/store";
|
|
|
-import type {EnrollDTO} from "@/types/dto";
|
|
|
|
|
|
|
+import type {CourseUpdateDTO, EnrollDTO} from "@/types/dto";
|
|
|
|
|
+import {useFormatDate} from "@/hooks/useFormatDate";
|
|
|
|
|
|
|
|
const apis = useApis()
|
|
const apis = useApis()
|
|
|
const store = useStore()
|
|
const store = useStore()
|
|
@@ -104,8 +112,8 @@ let visible = ref(false)
|
|
|
let dataForm = reactive<CourseVO>({
|
|
let dataForm = reactive<CourseVO>({
|
|
|
courseId: null,
|
|
courseId: null,
|
|
|
courseName: '',
|
|
courseName: '',
|
|
|
- teacherIds: null,
|
|
|
|
|
- courseImages: null,
|
|
|
|
|
|
|
+ teacherIds: [],
|
|
|
|
|
+ courseImages: [''],
|
|
|
targetGrade: '',
|
|
targetGrade: '',
|
|
|
startTime: '',
|
|
startTime: '',
|
|
|
endTime: '',
|
|
endTime: '',
|
|
@@ -113,6 +121,17 @@ let dataForm = reactive<CourseVO>({
|
|
|
description: '',
|
|
description: '',
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
+let newCourseInfo = reactive<CourseUpdateDTO>({
|
|
|
|
|
+ courseName: '',
|
|
|
|
|
+ teacherIds: [],
|
|
|
|
|
+ courseImages: [''],
|
|
|
|
|
+ targetGrade: '',
|
|
|
|
|
+ startTime: '',
|
|
|
|
|
+ endTime: '',
|
|
|
|
|
+ description: '',
|
|
|
|
|
+ enrollCode: '',
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
//用于查询课程包含的作业
|
|
//用于查询课程包含的作业
|
|
|
let query = reactive<AssignmentQuery>({
|
|
let query = reactive<AssignmentQuery>({
|
|
|
assignmentId:null,
|
|
assignmentId:null,
|
|
@@ -160,7 +179,7 @@ const getCourse = () => {
|
|
|
.then((res: any) => {
|
|
.then((res: any) => {
|
|
|
let data = res.data.data.records[0]
|
|
let data = res.data.data.records[0]
|
|
|
Object.assign(dataForm, {...data})
|
|
Object.assign(dataForm, {...data})
|
|
|
- console.log(dataForm)
|
|
|
|
|
|
|
+ getNewCourseInfo(dataForm)
|
|
|
})
|
|
})
|
|
|
.catch((err: any) => {
|
|
.catch((err: any) => {
|
|
|
console.error(err);
|
|
console.error(err);
|
|
@@ -168,11 +187,31 @@ const getCourse = () => {
|
|
|
.finally(() => {});
|
|
.finally(() => {});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const getNewCourseInfo = (dataForm: CourseVO) => {
|
|
|
|
|
+ Object.assign(newCourseInfo, {
|
|
|
|
|
+ courseName: dataForm.courseName,
|
|
|
|
|
+ teacherIds: dataForm.teacherIds,
|
|
|
|
|
+ courseImages: dataForm.courseImages,
|
|
|
|
|
+ targetGrade: dataForm.targetGrade,
|
|
|
|
|
+ startTime: dataForm.startTime,
|
|
|
|
|
+ endTime: dataForm.endTime,
|
|
|
|
|
+ description: dataForm.description,
|
|
|
|
|
+ enrollCode: ''
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const getHomeworkList = () => {
|
|
const getHomeworkList = () => {
|
|
|
apis.getAssignmentByQuery(query)
|
|
apis.getAssignmentByQuery(query)
|
|
|
.then((res: any) => {
|
|
.then((res: any) => {
|
|
|
let data = res.data.data.records
|
|
let data = res.data.data.records
|
|
|
homeworkList.value = convertHomeworkList(data)
|
|
homeworkList.value = convertHomeworkList(data)
|
|
|
|
|
+ // TODO
|
|
|
|
|
+ for(let i = 0; i < data.length; i++){
|
|
|
|
|
+ apis.findUserById(data[i].teacherId)
|
|
|
|
|
+ .then((res: any) => {
|
|
|
|
|
+ data[i].teacherId = res.data.data.records[0].name
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
})
|
|
})
|
|
|
.catch((err: any) => {
|
|
.catch((err: any) => {
|
|
|
console.error(err);
|
|
console.error(err);
|
|
@@ -182,7 +221,7 @@ const getHomeworkList = () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- 是否显示选课码输入框选课
|
|
|
|
|
|
|
+ 学生,是否显示选课码输入框选课
|
|
|
*/
|
|
*/
|
|
|
const isShowCode = () => {
|
|
const isShowCode = () => {
|
|
|
apis.getCourseByStudentId(store.user.id)
|
|
apis.getCourseByStudentId(store.user.id)
|
|
@@ -208,7 +247,7 @@ let enrollDTO = reactive<EnrollDTO>({
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- 加入课程
|
|
|
|
|
|
|
+ 学生,加入课程
|
|
|
*/
|
|
*/
|
|
|
const enroll = () => {
|
|
const enroll = () => {
|
|
|
enrollDTO.enrollCode = enrollCode.value
|
|
enrollDTO.enrollCode = enrollCode.value
|
|
@@ -230,7 +269,7 @@ const enroll = () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- 是否显示编辑课程
|
|
|
|
|
|
|
+ 教师,是否显示编辑课程按钮
|
|
|
*/
|
|
*/
|
|
|
const isShowEdit = () => {
|
|
const isShowEdit = () => {
|
|
|
apis.getCourseByTeacherId(store.user.id)
|
|
apis.getCourseByTeacherId(store.user.id)
|
|
@@ -250,7 +289,7 @@ const isShowEdit = () => {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- 将后端传来的数据进行整形,便于前端展示
|
|
|
|
|
|
|
+ 将后端传来的作业数据进行整形,便于前端展示
|
|
|
*/
|
|
*/
|
|
|
const convertHomeworkList = (data:IAssignment[]) => {
|
|
const convertHomeworkList = (data:IAssignment[]) => {
|
|
|
let newHomeworkList: IAssignmentTableItem[] = ([])
|
|
let newHomeworkList: IAssignmentTableItem[] = ([])
|
|
@@ -258,15 +297,54 @@ const convertHomeworkList = (data:IAssignment[]) => {
|
|
|
let item:IAssignmentTableItem = {
|
|
let item:IAssignmentTableItem = {
|
|
|
desc: data[i].assignmentName,
|
|
desc: data[i].assignmentName,
|
|
|
publisher: data[i].teacherId.toString(),
|
|
publisher: data[i].teacherId.toString(),
|
|
|
- startDate: data[i].startTime,
|
|
|
|
|
- endDate: data[i].endTime,
|
|
|
|
|
- assignmentId: data[i].assignmentId
|
|
|
|
|
|
|
+ startDate: formatDate(data[i].startTime),
|
|
|
|
|
+ endDate: formatDate(data[i].endTime),
|
|
|
|
|
+ assignmentId: data[i].assignmentId,
|
|
|
|
|
+ descriptionFile: data[i].descriptionFile != null ? data[i].descriptionFile: null
|
|
|
}
|
|
}
|
|
|
newHomeworkList.push(item)
|
|
newHomeworkList.push(item)
|
|
|
}
|
|
}
|
|
|
return newHomeworkList
|
|
return newHomeworkList
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/*
|
|
|
|
|
+ 时间格式转换方法
|
|
|
|
|
+ */
|
|
|
|
|
+function formatDate(date:string) {
|
|
|
|
|
+ const d = new Date(date);
|
|
|
|
|
+ const year = d.getFullYear();
|
|
|
|
|
+ const month = String(d.getMonth() + 1).padStart(2, '0');
|
|
|
|
|
+ const day = String(d.getDate()).padStart(2, '0');
|
|
|
|
|
+ const hours = String(d.getHours()).padStart(2, '0');
|
|
|
|
|
+ const minutes = String(d.getMinutes()).padStart(2, '0');
|
|
|
|
|
+ const seconds = String(d.getSeconds()).padStart(2, '0');
|
|
|
|
|
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const handleSubmit = () => {
|
|
|
|
|
+ newCourseInfo.endTime = formatDate(newCourseInfo.endTime)
|
|
|
|
|
+ newCourseInfo.startTime = formatDate(newCourseInfo.startTime)
|
|
|
|
|
+ apis.updateCourse(dataForm.courseId, newCourseInfo)
|
|
|
|
|
+ .then((res:any) => {
|
|
|
|
|
+ if(res.data.code===200) {
|
|
|
|
|
+ ElNotification({
|
|
|
|
|
+ title: '修改成功',
|
|
|
|
|
+ type: 'success',
|
|
|
|
|
+ })
|
|
|
|
|
+ visible.value = false
|
|
|
|
|
+ }else {
|
|
|
|
|
+ ElNotification({
|
|
|
|
|
+ title: '修改失败',
|
|
|
|
|
+ type: 'error',
|
|
|
|
|
+ })
|
|
|
|
|
+ visible.value = false
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ .catch((err) => {
|
|
|
|
|
+ console.log(err)
|
|
|
|
|
+ })
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
|
getCourse()
|
|
getCourse()
|
|
|
getHomeworkList()
|
|
getHomeworkList()
|