From 55296465066b79e8f36fbb047817b23d619da4eb Mon Sep 17 00:00:00 2001 From: GoCo Date: Sun, 21 Sep 2025 16:25:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AiolCommentController.java | 29 +++++++ .../controller/AiolDiscussionController.java | 82 +++++++++++++++--- .../controller/AiolHomeworkController.java | 83 +++++++++++++++++-- .../aiol/dto/AiolDiscussionSaveDTO.java | 21 +++++ .../modules/aiol/dto/AiolHomeworkSaveDTO.java | 4 - .../aiol/dto/DiscussionWithSectionDTO.java | 24 ++++++ .../aiol/dto/HomeworkWithDetailsDTO.java | 29 +++++++ .../modules/aiol/entity/AiolHomework.java | 4 + .../aiol/service/IAiolEntityLinkService.java | 19 +++++ .../impl/AiolEntityLinkServiceImpl.java | 28 +++++++ .../src/views/aiol/AiolHomework.data.ts | 33 +++++--- 11 files changed, 324 insertions(+), 32 deletions(-) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolDiscussionSaveDTO.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/DiscussionWithSectionDTO.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/HomeworkWithDetailsDTO.java diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java index 1f6a263f..63386e01 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolCommentController.java @@ -365,4 +365,33 @@ public class AiolCommentController extends JeecgController topComment(@PathVariable("commentId") String commentId) { + try { + // 1. 查询评论是否存在 + AiolComment comment = aiolCommentService.getById(commentId); + if (comment == null) { + return Result.error("评论不存在"); + } + + // 2. 设置置顶状态 + comment.setIzTop(1); + + boolean updated = aiolCommentService.updateById(comment); + if (!updated) { + return Result.error("置顶失败"); + } + + log.info("评论置顶成功: commentId={}", commentId); + return Result.OK("置顶成功!"); + + } catch (Exception e) { + log.error("评论置顶失败: commentId={}, error={}", commentId, e.getMessage(), e); + return Result.error("置顶失败: " + e.getMessage()); + } + } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolDiscussionController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolDiscussionController.java index 4c7ba046..f4bf3704 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolDiscussionController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolDiscussionController.java @@ -16,8 +16,12 @@ import org.jeecg.common.system.query.QueryRuleEnum; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.shiro.IgnoreAuth; import org.jeecg.modules.aiol.entity.AiolDiscussion; +import org.jeecg.modules.aiol.dto.DiscussionWithSectionDTO; +import org.jeecg.modules.aiol.dto.AiolDiscussionSaveDTO; import org.jeecg.modules.aiol.service.IAiolDiscussionService; import org.jeecg.modules.aiol.service.IAiolEntityLinkService; +import org.jeecg.modules.aiol.service.IAiolCourseSectionService; +import org.jeecg.modules.aiol.entity.AiolCourseSection; import org.jeecg.modules.aiol.constant.EntityLinkConst; import org.jeecg.common.system.util.JwtUtil; import org.jeecg.common.system.vo.LoginUser; @@ -61,6 +65,8 @@ public class AiolDiscussionController extends JeecgController add(@RequestBody AiolDiscussion aiolDiscussion, - @RequestParam(value = "sectionId", required = false) String sectionId) { + public Result add(@RequestBody AiolDiscussionSaveDTO aiolDiscussionSaveDTO) { try { + // 创建讨论实体 + AiolDiscussion aiolDiscussion = new AiolDiscussion(); + aiolDiscussion.setTitle(aiolDiscussionSaveDTO.getTitle()); + aiolDiscussion.setDescription(aiolDiscussionSaveDTO.getDescription()); + aiolDiscussion.setCourseId(aiolDiscussionSaveDTO.getCourseId()); + // 保存讨论记录 aiolDiscussionService.save(aiolDiscussion); // 如果传入了sectionId,创建与章节的关联关系 + String sectionId = aiolDiscussionSaveDTO.getSectionId(); if (sectionId != null && !sectionId.trim().isEmpty()) { aiolEntityLinkService.save( EntityLinkConst.SourceType.COURSE_SECTION, @@ -115,7 +126,7 @@ public class AiolDiscussionController extends JeecgController> queryCourseDiscussions(HttpServletRequest request, @RequestParam(value = "courseId") String courseId) { + public Result> queryCourseDiscussions(HttpServletRequest request, @RequestParam(value = "courseId") String courseId) { try { - // 2. 查询课程下的讨论列表 + // 1. 查询课程下的讨论列表 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("course_id", courseId) .orderByDesc("create_time"); List discussionList = aiolDiscussionService.list(queryWrapper); - return Result.OK(discussionList); + // 2. 转换为包含章节信息的DTO列表 + List resultList = discussionList.stream() + .map(this::convertToDiscussionWithSection) + .collect(Collectors.toList()); + + return Result.OK(resultList); } catch (Exception e) { - log.error("查询用户讨论列表失败: error={}", e.getMessage(), e); - return Result.error("查询用户讨论列表失败: " + e.getMessage()); + log.error("查询课程讨论列表失败: error={}", e.getMessage(), e); + return Result.error("查询课程讨论列表失败: " + e.getMessage()); } } + /** + * 将AiolDiscussion转换为包含章节信息的DTO + * @param discussion 讨论实体 + * @return 包含章节ID的DTO + */ + private DiscussionWithSectionDTO convertToDiscussionWithSection(AiolDiscussion discussion) { + DiscussionWithSectionDTO dto = new DiscussionWithSectionDTO(); + + // 复制基本属性 + dto.setId(discussion.getId()); + dto.setTitle(discussion.getTitle()); + dto.setDescription(discussion.getDescription()); + dto.setCourseId(discussion.getCourseId()); + dto.setCreateBy(discussion.getCreateBy()); + dto.setCreateTime(discussion.getCreateTime()); + dto.setUpdateBy(discussion.getUpdateBy()); + dto.setUpdateTime(discussion.getUpdateTime()); + + try { + // 查询关联的章节ID + String sectionId = aiolEntityLinkService.listSourceId( + EntityLinkConst.TargetType.DISCUSSION, + discussion.getId(), + EntityLinkConst.SourceType.COURSE_SECTION + ); + + if (sectionId != null) { + dto.setSectionId(sectionId); + + // 查询章节名称 + AiolCourseSection section = aiolCourseSectionService.getById(sectionId); + if (section != null && section.getName() != null) { + dto.setSectionName(section.getName()); + } + } + + } catch (Exception e) { + log.error("查询讨论关联章节失败: discussionId={}, error={}", discussion.getId(), e.getMessage(), e); + // 即使查询失败,也返回基本的讨论信息 + } + + return dto; + } + } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolHomeworkController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolHomeworkController.java index 8e53d37e..30ceb9c6 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolHomeworkController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/controller/AiolHomeworkController.java @@ -22,10 +22,15 @@ import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.aiol.dto.AiolHomeworkSaveDTO; import org.jeecg.modules.aiol.dto.StudentSubmitHomework; +import org.jeecg.modules.aiol.dto.HomeworkWithDetailsDTO; import org.jeecg.modules.aiol.entity.AiolHomework; import org.jeecg.modules.aiol.entity.AiolHomeworkSubmit; +import org.jeecg.modules.aiol.entity.AiolClass; +import org.jeecg.modules.aiol.entity.AiolCourseSection; import org.jeecg.modules.aiol.service.IAiolHomeworkService; import org.jeecg.modules.aiol.service.IAiolEntityLinkService; +import org.jeecg.modules.aiol.service.IAiolClassService; +import org.jeecg.modules.aiol.service.IAiolCourseSectionService; import org.jeecg.modules.aiol.constant.EntityLinkConst; import org.jeecg.modules.aiol.mapper.AiolClassStudentMapper; import org.jeecg.modules.aiol.mapper.AiolCourseSignupMapper; @@ -162,14 +167,17 @@ public class AiolHomeworkController extends JeecgController queryById(@RequestParam(name = "id", required = true) String id) { + public Result queryById(@RequestParam(name = "id", required = true) String id) { AiolHomework aiolHomework = aiolHomeworkService.getById(id); if (aiolHomework == null) { return Result.error("未找到对应数据"); } - return Result.OK(aiolHomework); + + // 转换为包含详情的DTO + HomeworkWithDetailsDTO result = convertToHomeworkWithDetails(aiolHomework); + return Result.OK(result); } /** @@ -212,6 +220,12 @@ public class AiolHomeworkController extends JeecgController> list(@PathVariable String courseId) { @@ -219,9 +233,9 @@ public class AiolHomeworkController extends JeecgController> teacherList(@RequestParam(value = "courseId") String courseId, HttpServletRequest request) { + public Result> teacherList(@RequestParam(value = "courseId") String courseId, HttpServletRequest request) { try { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("course_id", courseId) @@ -229,7 +243,12 @@ public class AiolHomeworkController extends JeecgController homeworkList = aiolHomeworkService.list(queryWrapper); - return Result.OK(homeworkList); + // 转换为包含详情的DTO列表 + List resultList = homeworkList.stream() + .map(this::convertToHomeworkWithDetails) + .collect(Collectors.toList()); + + return Result.OK(resultList); } catch (Exception e) { log.error("查询教师作业列表失败: error={}", e.getMessage(), e); @@ -422,4 +441,56 @@ public class AiolHomeworkController extends JeecgController classNames = new ArrayList<>(); + String classId = homework.getClassId(); + if (classId != null && !classId.trim().isEmpty()) { + String[] classIds = classId.split(","); + for (String singleClassId : classIds) { + if (singleClassId != null && !singleClassId.trim().isEmpty()) { + singleClassId = singleClassId.trim(); + AiolClass aiolClass = aiolClassService.getById(singleClassId); + if (aiolClass != null && aiolClass.getName() != null) { + classNames.add(aiolClass.getName()); + } + } + } + } + dto.setClassNames(classNames); + + // 2. 查询章节信息 + List sectionIds = entityLinkBizService.listSourceIds( + EntityLinkConst.TargetType.HOMEWORK, + homework.getId(), + EntityLinkConst.SourceType.COURSE_SECTION + ); + + if (!sectionIds.isEmpty()) { + String sectionId = sectionIds.get(0); // 取第一个章节ID + dto.setSectionId(sectionId); + + AiolCourseSection section = aiolCourseSectionService.getById(sectionId); + if (section != null && section.getName() != null) { + dto.setSectionTitle(section.getName()); + } + } + + } catch (Exception e) { + log.error("转换作业详情失败: homeworkId={}, error={}", homework.getId(), e.getMessage(), e); + // 即使转换失败,也返回基本的作业信息 + } + + return dto; + } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolDiscussionSaveDTO.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolDiscussionSaveDTO.java new file mode 100644 index 00000000..6ae94d20 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolDiscussionSaveDTO.java @@ -0,0 +1,21 @@ +package org.jeecg.modules.aiol.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jeecg.modules.aiol.entity.AiolDiscussion; + +/** + * @Description: 讨论保存DTO + * @Author: jeecg-boot + * @Date: 2025-01-16 + * @Version: V1.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "讨论保存DTO") +public class AiolDiscussionSaveDTO extends AiolDiscussion { + + @Schema(description = "关联的章节ID") + private String sectionId; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolHomeworkSaveDTO.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolHomeworkSaveDTO.java index 1569b617..77408e02 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolHomeworkSaveDTO.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/AiolHomeworkSaveDTO.java @@ -11,10 +11,6 @@ import org.jeecg.modules.aiol.entity.AiolHomework; @Data @Schema(description = "作业保存DTO") public class AiolHomeworkSaveDTO extends AiolHomework { - - @Schema(description = "班级ID,多个用逗号分割") - private String classId; - @Schema(description = "章节ID") private String sectionId; } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/DiscussionWithSectionDTO.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/DiscussionWithSectionDTO.java new file mode 100644 index 00000000..92010af6 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/DiscussionWithSectionDTO.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.aiol.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jeecg.modules.aiol.entity.AiolDiscussion; + +/** + * @Description: 讨论详情DTO + * @Author: jeecg-boot + * @Date: 2025-01-16 + * @Version: V1.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "讨论详情") +public class DiscussionWithSectionDTO extends AiolDiscussion { + + @Schema(description = "关联的章节ID") + private String sectionId; + + @Schema(description = "章节名称") + private String sectionName; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/HomeworkWithDetailsDTO.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/HomeworkWithDetailsDTO.java new file mode 100644 index 00000000..fa7420a1 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/dto/HomeworkWithDetailsDTO.java @@ -0,0 +1,29 @@ +package org.jeecg.modules.aiol.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jeecg.modules.aiol.entity.AiolHomework; + +import java.util.List; + +/** + * @Description: 作业详情DTO + * @Author: jeecg-boot + * @Date: 2025-01-16 + * @Version: V1.0 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "作业详情") +public class HomeworkWithDetailsDTO extends AiolHomework { + + @Schema(description = "班级名称列表") + private List classNames; + + @Schema(description = "章节ID") + private String sectionId; + + @Schema(description = "章节标题") + private String sectionTitle; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolHomework.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolHomework.java index d7952bc7..bf99f7e7 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolHomework.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/entity/AiolHomework.java @@ -41,6 +41,10 @@ public class AiolHomework implements Serializable { @Excel(name = "所属课程id", width = 15) @Schema(description = "所属课程id") private java.lang.String courseId; + /**班级id*/ + @Excel(name = "班级id", width = 15) + @Schema(description = "班级id") + private java.lang.String classId; /**标题*/ @Excel(name = "标题", width = 15) @Schema(description = "标题") diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolEntityLinkService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolEntityLinkService.java index e7f5efc4..8b27cb68 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolEntityLinkService.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/IAiolEntityLinkService.java @@ -21,6 +21,15 @@ public interface IAiolEntityLinkService extends IService { */ List listTargetIds(String sourceType, String sourceId, String targetType); + /** + * 根据主体与内容类型查询绑定的 target_id + * @param sourceType 主体类型 + * @param sourceId 主体ID + * @param targetType 内容类型 + * @return target_id + */ + String listTargetId(String sourceType, String sourceId, String targetType); + /** * 根据内容与主体类型查询绑定的 source_id 列表 * @param targetType 内容类型 @@ -30,6 +39,16 @@ public interface IAiolEntityLinkService extends IService { */ List listSourceIds(String targetType, String targetId, String sourceType); + /** + * 根据内容与主体类型查询绑定的 source_id + * @param targetType 内容类型 + * @param targetId 内容ID + * @param sourceType 主体类型 + * @return source_id + */ + String listSourceId(String targetType, String targetId, String sourceType); + + /** * 保存主体与内容类型的绑定关系 * @param sourceType 主体类型 diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolEntityLinkServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolEntityLinkServiceImpl.java index 581b276d..1d636381 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolEntityLinkServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-aiol/src/main/java/org/jeecg/modules/aiol/service/impl/AiolEntityLinkServiceImpl.java @@ -54,4 +54,32 @@ public class AiolEntityLinkServiceImpl extends ServiceImpl qw = new LambdaQueryWrapper<>(); + qw.eq(AiolEntityLink::getTargetType, targetType) + .eq(AiolEntityLink::getTargetId, targetId) + .eq(AiolEntityLink::getSourceType, sourceType) + .select(AiolEntityLink::getSourceId) + .last("LIMIT 1"); + return this.list(qw).stream() + .map(AiolEntityLink::getSourceId) + .findFirst() + .orElse(null); + } + + @Override + public String listTargetId(String sourceType, String sourceId, String targetType) { + LambdaQueryWrapper qw = new LambdaQueryWrapper<>(); + qw.eq(AiolEntityLink::getSourceType, sourceType) + .eq(AiolEntityLink::getSourceId, sourceId) + .eq(AiolEntityLink::getTargetType, targetType) + .select(AiolEntityLink::getTargetId) + .last("LIMIT 1"); + return this.list(qw).stream() + .map(AiolEntityLink::getTargetId) + .findFirst() + .orElse(null); + } } diff --git a/jeecgboot-vue3/src/views/aiol/AiolHomework.data.ts b/jeecgboot-vue3/src/views/aiol/AiolHomework.data.ts index 1cebd1aa..93a8ebab 100644 --- a/jeecgboot-vue3/src/views/aiol/AiolHomework.data.ts +++ b/jeecgboot-vue3/src/views/aiol/AiolHomework.data.ts @@ -10,6 +10,11 @@ export const columns: BasicColumn[] = [ align:"center", dataIndex: 'courseId' }, + { + title: '班级id', + align:"center", + dataIndex: 'classId' + }, { title: '标题', align:"center", @@ -76,6 +81,11 @@ export const formSchema: FormSchema[] = [ field: 'courseId', component: 'Input', }, + { + label: '班级id', + field: 'classId', + component: 'Input', + }, { label: '标题', field: 'title', @@ -161,17 +171,18 @@ export const formSchema: FormSchema[] = [ // 高级查询数据 export const superQuerySchema = { courseId: {title: '所属课程id',order: 0,view: 'text', type: 'string',}, - title: {title: '标题',order: 1,view: 'text', type: 'string',}, - description: {title: '说明',order: 2,view: 'umeditor', type: 'string',}, - attachment: {title: '附件',order: 3,view: 'file', type: 'string',}, - maxScore: {title: '满分',order: 4,view: 'number', type: 'number',}, - passScore: {title: '及格分数',order: 5,view: 'number', type: 'number',}, - startTime: {title: '开始时间',order: 6,view: 'datetime', type: 'string',}, - endTime: {title: '结束时间',order: 7,view: 'datetime', type: 'string',}, - status: {title: '状态',order: 8,view: 'number', type: 'number',dictCode: 'course_status',}, - allowMakeup: {title: '是否允许补交',order: 9,view: 'number', type: 'number',}, - makeupTime: {title: '补交截止时间',order: 10,view: 'datetime', type: 'string',}, - notifyTime: {title: '作业通知时间',order: 11,view: 'number', type: 'number',}, + classId: {title: '班级id',order: 1,view: 'text', type: 'string',}, + title: {title: '标题',order: 2,view: 'text', type: 'string',}, + description: {title: '说明',order: 3,view: 'umeditor', type: 'string',}, + attachment: {title: '附件',order: 4,view: 'file', type: 'string',}, + maxScore: {title: '满分',order: 5,view: 'number', type: 'number',}, + passScore: {title: '及格分数',order: 6,view: 'number', type: 'number',}, + startTime: {title: '开始时间',order: 7,view: 'datetime', type: 'string',}, + endTime: {title: '结束时间',order: 8,view: 'datetime', type: 'string',}, + status: {title: '状态',order: 9,view: 'number', type: 'number',dictCode: 'course_status',}, + allowMakeup: {title: '是否允许补交',order: 10,view: 'number', type: 'number',}, + makeupTime: {title: '补交截止时间',order: 11,view: 'datetime', type: 'string',}, + notifyTime: {title: '作业通知时间',order: 12,view: 'number', type: 'number',}, }; /**