hookehuyr

refactor(打卡): 将任务ID字段改为小作业ID字段以支持子任务

统一将task_id字段改为subtask_id字段,支持小作业级别的打卡功能
更新相关API文档说明,增加小作业ID参数
/*
* @Date: 2025-06-06 09:26:16
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-12 14:47:36
* @LastEditTime: 2025-12-12 17:17:31
* @FilePath: /mlaj/src/api/checkin.js
* @Description: 签到模块相关接口
*/
......@@ -27,7 +27,7 @@ const Api = {
/**
* @description: 我的大作业列表
* @param: keyword 搜索作业名称
* @return: data: [{ id 大作业id, cover 作业封面, title 大作业名称, begin_date 开始时间, end_date 结束时间, task_type 任务类型 [checkin=签到 | upload=上传附件 | count=计数], is_gray 作业是否应该置灰, is_finish 作业在当前周期是否已经达标 }]
* @return: data: [{ id 大作业id, cover 作业封面, title 大作业名称, begin_date 开始时间, end_date 结束时间, task_type 任务类型 [checkin=签到 | upload=上传附件 | count=计数], is_gray 作业是否应该置灰, is_finish 作业在当前周期是否已经达标, checkin_subtask_id 签到小作业的ID }]
*/
export const getTaskListAPI = (params) => fn(fetch.get(Api.GET_TASK_LIST, params))
......@@ -51,17 +51,18 @@ export const getSubtaskListAPI = (params) => fn(fetch.get(Api.GET_SUBTASK_LIST,
/**
* @description: 签到打卡
* @param task_id 签到作业ID
* @param subtask_id 小作业ID
* @returns
*/
export const checkinTaskAPI = (params) => fn(fetch.post(Api.TASK_CHECKIN, params))
/**
* @description: 新增上传打卡
* @param task_id 上传作业ID
* @param subtask_id 小作业ID
* @param note 打卡文字
* @param meta_id[] 附件ID列表
* @param file_type 上传附件的类型 image=上传图片,video=视频,audio=音频
* @param makeup_time 补卡时间
* @returns
*/
export const addUploadTaskAPI = (params) => fn(fetch.post(Api.TASK_UPLOAD_ADD, params))
......@@ -69,12 +70,16 @@ export const addUploadTaskAPI = (params) => fn(fetch.post(Api.TASK_UPLOAD_ADD,
/**
* @description: 获取打卡动态列表
* @param task_id 上传作业ID
* @param subtask_id 小作业ID
* @param date 日期
* @param keyword 搜索
* @param order_by_time asc=正序,desc=倒序。默认为倒序
* @param limit
* @param offset
* @returns
* @param limit 条数
* @param offset 页码
* @returns data: [{id 打卡动态ID, status 审批状态 3=待审批,5=审批通过,7=审批不通过, created_by 打卡人ID, username 打卡人昵称
* avatar 打卡人头像, created_time 打卡时间, created_time_desc 打卡时间描述, note 打卡内容, files[{meta_id,name,value,extension}] 附件列表,
* file_type 上传附件的类型 image=上传图片,video=视频,audio=音频, like_count 点赞数, is_my 是不是我的打卡, is_like 我是否已经点赞, is_makeup 是否补卡
* subtask_title 小作业标题}]
*/
export const getUploadTaskListAPI = (params) => fn(fetch.post(Api.TASK_UPLOAD_LIST, params))
......
......@@ -201,7 +201,7 @@ const handle_submit = async () => {
}
submitting.value = true
try {
const { code } = await checkinTaskAPI({ task_id: selected_item.value.id })
const { code } = await checkinTaskAPI({ subtask_id: selected_item.value.checkin_subtask_id })
if (code) {
emit('submit-success')
showToast('打卡成功')
......
<!--
* @Date: 2025-01-25 15:34:17
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-11 15:22:15
* @LastEditTime: 2025-12-11 17:56:07
* @FilePath: /mlaj/src/components/ui/CollapsibleCalendar.vue
* @Description: 可折叠日历组件
-->
......
......@@ -287,7 +287,6 @@ export function useCheckin() {
try {
// 准备提交数据
const submitData = {
task_id: route.query.id,
note: message.value,
file_type: activeType.value,
meta_id: [],
......
......@@ -354,7 +354,7 @@ const handleSubmit = async () => {
}
const extraData = {
task_option: selectedTaskValue.value // 假设字段名为 task_option
subtask_id: selectedTaskValue.value // 小作业ID
}
// 2. 计数打卡特定校验
......
<!--
* @Date: 2025-05-29 15:34:17
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-11 20:58:24
* @LastEditTime: 2025-12-12 17:27:43
* @FilePath: /mlaj/src/views/checkin/IndexCheckInPage.vue
* @Description: 文件描述
-->
......@@ -543,6 +543,7 @@ const onLoad = async (date) => {
limit: limit.value,
page: nextPage,
task_id: route.query.id,
subtask_id: selectedSubtaskId.value,
date: current_date
});
if (res.code) {
......
<!--
* @Date: 2025-11-19 21:00:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2025-12-10 11:32:08
* @LastEditTime: 2025-12-12 17:39:55
* @FilePath: /mlaj/src/views/teacher/taskHomePage.vue
* @Description: 教师端作业主页(头部介绍、统计、日历与学生完成情况;数据Mock)
-->
......@@ -119,6 +119,8 @@ const $route = useRoute()
const $router = useRouter()
useTitle('作业主页')
// TODO: 等正式接口到来的时候, 小作业列表或者大作业详情切换的时候, 在这个页面加一个切换小作业的列表按钮
const themeVars = {
calendarPopupHeight: '60%',
}
......@@ -225,6 +227,10 @@ const today = new Date()
const selected_date = ref(format_date(today))
const user_list = ref([])
const task_type = ref('')
// 小作业ID
const selectedSubtaskId = ref('')
// 小作业列表
const subtask_list = ref([])
/**
* 获取作业详情和学生完成情况
......@@ -233,6 +239,7 @@ async function fetchData() {
try {
const res = await getTeacherTaskDetailAPI({
id: task_id,
subtask_id: selectedSubtaskId.value,
date: selected_date.value
})
......@@ -240,6 +247,8 @@ async function fetchData() {
task_title.value = res.data.title
task_intro.value = res.data.note
task_type.value = res.data.task_type || ''
// 小作业列表
subtask_list.value = res.data.subtask_list || []
// 格式化周期显示
const cycleMap = {
......