2024年Day206,事件分发机制面试题

文末

篇幅有限没有列举更多的前端面试题,小编把整理的前端大厂面试题PDF分享出来,一共有269页

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 给之前的课程分类导入成功后添加路由跳转

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HO4qrp8-1614521104163)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228152927077.png)]


【课程管理】模块需求

====================================================================

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a0W6ZyKK-1614521104164)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228154335051.png)]


【课程管理】–添加课程–基本信息功能

============================================================================

一、设计数据库


下面的edu_teacheredu_subject已经在上面的流程创建过了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R7T15UfV-1614521104165)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228155632696.png)]

  • edu_course_description课程简介表

存储课程简介信息

CREATE TABLE edu_course_description (

id char(19) NOT NULL COMMENT ‘课程ID’,

description text COMMENT ‘课程简介’,

gmt_create datetime NOT NULL COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL COMMENT ‘更新时间’,

PRIMARY KEY (id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘课程简介’;

Data for table “edu_course_description”

INSERT INTO edu_course_description VALUES (‘1104870479077879809’,‘

11

’,‘2019-03-11 06:23:44’,‘2019-03-11 06:23:44’),(‘1192252213659774977’,‘

测试

’,‘2019-11-07 09:27:33’,‘2019-11-13 16:21:28’),(‘14’,‘’,‘2019-03-13 06:04:43’,‘2019-03-13 06:05:33’),(‘15’,‘’,‘2019-03-13 06:03:33’,‘2019-03-13 06:04:22’),(‘18’,‘

本套Java视频完全针对零基础学员,课堂实录,自发布以来,好评如潮!Java视频中注重与学生互动,讲授幽默诙谐、细致入微,覆盖Java基础所有核心知识点,同类Java视频中也是代码量大、案例多、实战性强的。同时,本Java视频教程注重技术原理剖析,深入JDK源码,辅以代码实战贯穿始终,用实践驱动理论,并辅以必要的代码练习。

\n

------------------------------------

\n

视频特点:

\n

通过学习本Java视频教程,大家能够真正将Java基础知识学以致用、活学活用,构架Java编程思想,牢牢掌握"源码级"的Javase核心技术,并为后续JavaWeb等技术的学习奠定扎实基础。

1.通俗易懂,细致入微:每个知识点高屋建瓴,深入浅出,简洁明了的说明问题
2.具实战性:全程真正代码实战,涵盖上百个企业应用案例及练习
3.深入:源码分析,更有 Java 反射、动态代理的实际应用等
4.登录尚硅谷官网,技术讲师免费在线答疑

’,‘2019-03-06 18:06:36’,‘2019-10-30 19:58:36’);
  • edu_video课程小节表

存储章节里面小节信息

CREATE TABLE edu_video (

id char(19) NOT NULL COMMENT ‘视频ID’,

course_id char(19) NOT NULL COMMENT ‘课程ID’,

chapter_id char(19) NOT NULL COMMENT ‘章节ID’,

title varchar(50) NOT NULL COMMENT ‘节点名称’,

video_source_id varchar(100) DEFAULT NULL COMMENT ‘云端视频资源’,

video_original_name varchar(100) DEFAULT NULL COMMENT ‘原始文件名称’,

sort int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘排序字段’,

play_count bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘播放次数’,

is_free tinyint(1) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘是否可以试听:0收费 1免费’,

duration float NOT NULL DEFAULT ‘0’ COMMENT ‘视频时长(秒)’,

status varchar(20) NOT NULL DEFAULT ‘Empty’ COMMENT ‘Empty未上传 Transcoding转码中 Normal正常’,

size bigint(20) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘视频源文件大小(字节)’,

version bigint(20) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘乐观锁’,

gmt_create datetime NOT NULL COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL COMMENT ‘更新时间’,

PRIMARY KEY (id),

KEY idx_course_id (course_id),

KEY idx_chapter_id (chapter_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT=‘课程视频’;

Data for table “edu_video”

INSERT INTO edu_video VALUES (‘1182499307429339137’,‘18’,‘32’,‘第一节’,‘’,‘’,0,0,0,0,‘’,0,1,‘2019-10-11 11:32:59’,‘2019-10-11 11:57:38’),(‘1185312444399071234’,‘14’,‘1’,‘12’,‘’,‘’,0,0,0,0,‘Empty’,0,1,‘2019-10-19 05:51:23’,‘2019-10-19 05:51:33’),(‘1189434737808990210’,‘18’,‘44’,‘测试’,‘’,‘’,1,0,0,0,‘Empty’,0,1,‘2019-10-30 14:51:55’,‘2019-10-30 14:51:55’),(‘1189471423678939138’,‘18’,‘1181729226915577857’,‘test’,‘2b887dc9584d4dc68908780ec57cd3b9’,‘视频’,1,0,0,0,‘Empty’,0,1,‘2019-10-30 17:17:41’,‘2019-10-30 17:17:41’),(‘1189476403626409986’,‘18’,‘1181729226915577857’,‘22’,‘5155c73dc112475cbbddccf4723f7cef’,‘视频.mp4’,0,0,0,0,‘Empty’,0,1,‘2019-10-30 17:37:29’,‘2019-10-30 17:37:29’),(‘1192252824606289921’,‘1192252213659774977’,‘1192252428399751169’,‘第一课时’,‘756cf06db9cb4f30be85a9758b19c645’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,0,0,0,0,‘Empty’,0,1,‘2019-11-07 09:29:59’,‘2019-11-07 09:29:59’),(‘1192628092797730818’,‘1192252213659774977’,‘1192252428399751169’,‘第二课时’,‘2a02d726622f4c7089d44cb993c531e1’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,0,0,1,0,‘Empty’,0,1,‘2019-11-08 10:21:10’,‘2019-11-08 10:21:22’),(‘1192632495013380097’,‘1192252213659774977’,‘1192252428399751169’,‘第三课时’,‘4e560c892fdf4fa2b42e0671aa42fa9d’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,0,0,1,0,‘Empty’,0,1,‘2019-11-08 10:38:40’,‘2019-11-08 10:38:40’),(‘1194117638832111617’,‘1192252213659774977’,‘1192252428399751169’,‘第四课时’,‘4e560c892fdf4fa2b42e0671aa42fa9d’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,0,0,0,0,‘Empty’,0,1,‘2019-11-12 13:00:05’,‘2019-11-12 13:00:05’),(‘1196263770832023554’,‘1192252213659774977’,‘1192252428399751169’,‘第五课时’,‘27d21158b0834cb5a8d50710937de330’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,5,0,0,0,‘Empty’,0,1,‘2019-11-18 11:08:03’,‘2019-11-18 11:08:03’),(‘17’,‘18’,‘15’,‘第一节:Java简介’,‘196116a6fee742e1ba9f6c18f65bd8c1’,‘1’,1,1000,1,100,‘Draft’,0,1,‘2019-01-01 13:08:57’,‘2019-10-11 11:26:39’),(‘18’,‘18’,‘15’,‘第二节:表达式和赋值语句’,‘2d99b08ca0214909899910c9ba042d47’,'7 - How Do I Find Time for My ',2,999,1,100,‘Draft’,0,1,‘2019-01-01 13:09:02’,‘2019-03-08 03:30:27’),(‘19’,‘18’,‘15’,‘第三节:String类’,‘51120d59ddfd424cb5ab08b44fc8b23a’,‘eae2b847ef8503b81f5d5593d769dde2.mp4’,3,888,0,100,‘Draft’,0,1,‘2019-01-01 13:09:05’,‘2019-11-12 12:50:45’),(‘20’,‘18’,‘15’,‘第四节:程序风格’,‘2a38988892d84df598752226c50f3fa3’,‘00-day10总结.avi’,4,666,0,100,‘Draft’,0,1,‘2019-01-01 13:09:05’,‘2019-10-11 09:20:09’);

  • edu_course课程基本信息

存储课程基本信息

CREATE TABLE edu_course (

id char(19) NOT NULL COMMENT ‘课程ID’,

teacher_id char(19) NOT NULL COMMENT ‘课程讲师ID’,

subject_id char(19) NOT NULL COMMENT ‘课程专业ID’,

subject_parent_id char(19) NOT NULL COMMENT ‘课程专业父级ID’,

title varchar(50) NOT NULL COMMENT ‘课程标题’,

price decimal(10,2) unsigned NOT NULL DEFAULT ‘0.00’ COMMENT ‘课程销售价格,设置为0则可免费观看’,

lesson_num int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘总课时’,

cover varchar(255) CHARACTER SET utf8 NOT NULL COMMENT ‘课程封面图片路径’,

buy_count bigint(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘销售数量’,

view_count bigint(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘浏览数量’,

version bigint(20) unsigned NOT NULL DEFAULT ‘1’ COMMENT ‘乐观锁’,

status varchar(10) NOT NULL DEFAULT ‘Draft’ COMMENT ‘课程状态 Draft未发布 Normal已发布’,

is_deleted tinyint(3) DEFAULT NULL COMMENT ‘逻辑删除 1(true)已删除, 0(false)未删除’,

gmt_create datetime NOT NULL COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL COMMENT ‘更新时间’,

PRIMARY KEY (id),

KEY idx_title (title),

KEY idx_subject_id (subject_id),

KEY idx_teacher_id (teacher_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT=‘课程’;

Data for table “edu_course”

INSERT INTO edu_course VALUES (‘1192252213659774977’,‘1189389726308478977’,‘1178214681139539969’,‘1178214681118568449’,‘java基础课程:test’,0.01,2,‘https://guli-file-190513.oss-cn-beijing.aliyuncs.com/cover/default.gif’,4,387,1,‘Normal’,0,‘2019-11-07 09:27:33’,‘2019-11-18 13:35:03’),(‘14’,‘1189389726308478977’,‘1101348944971091969’,‘1101348944920760321’,‘XHTML CSS2 JS整站制作教程课程学习’,0.00,3,‘http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/d0086eb0-f2dc-45f7-bba1-744d95e5be0f.jpg’,3,44,15,‘Normal’,0,‘2018-04-02 18:33:34’,‘2019-11-16 21:21:45’),(‘15’,‘1189389726308478977’,‘1101348944971091969’,‘1101348944920760321’,‘HTML5入门课程学习’,0.00,23,‘http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/13/22997b8e-3606-4d2e-9b4f-09f48418b6e4.jpg’,0,51,17,‘Normal’,0,‘2018-04-02 18:34:32’,‘2019-11-12 10:19:20’),(‘18’,‘1189389726308478977’,‘1178214681139539969’,‘1178214681118568449’,‘Java精品课程’,0.01,20,‘http://guli-file.oss-cn-beijing.aliyuncs.com/cover/2019/03/06/866e9aca-b530-4f71-a690-72d4a4bfd1e7.jpg’,151,737,6,‘Normal’,0,‘2018-04-02 21:28:46’,‘2019-11-18 11:14:52’);

  • edu_chapter课程章节表

存储课程章节信息

CREATE TABLE edu_chapter (

id char(19) NOT NULL COMMENT ‘章节ID’,

course_id char(19) NOT NULL COMMENT ‘课程ID’,

title varchar(50) NOT NULL COMMENT ‘章节名称’,

sort int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘显示排序’,

gmt_create datetime NOT NULL COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL COMMENT ‘更新时间’,

PRIMARY KEY (id),

KEY idx_course_id (course_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT=‘课程’;

Data for table “edu_chapter”

INSERT INTO edu_chapter VALUES (‘1’,‘14’,‘第一章:HTML’,0,‘2019-01-01 12:27:40’,‘2019-01-01 12:55:30’),(‘1181729226915577857’,‘18’,‘第七章:I/O流’,70,‘2019-10-09 08:32:58’,‘2019-10-09 08:33:20’),(‘1192252428399751169’,‘1192252213659774977’,‘第一章节’,0,‘2019-11-07 09:28:25’,‘2019-11-07 09:28:25’),(‘15’,‘18’,‘第一章:Java入门’,0,‘2019-01-01 12:27:40’,‘2019-10-09 09:13:19’),(‘3’,‘14’,‘第二章:CSS’,0,‘2019-01-01 12:55:35’,‘2019-01-01 12:27:40’),(‘32’,‘18’,‘第二章:控制台输入和输出’,0,‘2019-01-01 12:27:40’,‘2019-01-01 12:27:40’),(‘44’,‘18’,‘第三章:控制流’,0,‘2019-01-01 12:27:40’,‘2019-01-01 12:27:40’),(‘48’,‘18’,‘第四章:类的定义’,0,‘2019-01-01 12:27:40’,‘2019-01-01 12:27:40’),(‘63’,‘18’,‘第五章:数组’,0,‘2019-01-01 12:27:40’,‘2019-01-01 12:27:40’),(‘64’,‘18’,‘第六章:继承’,61,‘2019-01-01 12:27:40’,‘2019-10-09 08:32:47’);


二、各表之间的关系


表与表之间的关系分:一对一、一对多、多对多

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yHVw6x1-1614521104167)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228160716083.png)]

三、添加课程分析


添加课程–编辑课程基本信息功能细节分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8S2mxf2f-1614521104170)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228162510592.png)]

四、使用代码生成器生成课程相关代码


@Test

public void run() {

// 1、创建代码生成器

AutoGenerator mpg = new AutoGenerator();

// 2、全局配置

GlobalConfig gc = new GlobalConfig();

String projectPath = System.getProperty(“user.dir”);

gc.setOutputDir(“D:\JavaStudy\gulixueyuan\guli_parent\service\service_edu” + “/src/main/java”); //输出目录

gc.setAuthor(“achang”); //作者名

gc.setOpen(false); //生成后是否打开资源管理器

gc.setFileOverride(false); //重新生成时文件是否覆盖

gc.setServiceName(“%sService”); //去掉Service接口的首字母I

gc.setIdType(IdType.ID_WORKER_STR); //主键策略

gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型

gc.setSwagger2(true);//开启Swagger2模式

mpg.setGlobalConfig(gc);

// 3、数据源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setUrl(“jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8”);

dsc.setDriverName(“com.mysql.cj.jdbc.Driver”);

dsc.setUsername(“root”);

dsc.setPassword(“00000”);

dsc.setDbType(DbType.MYSQL);

mpg.setDataSource(dsc);

// 4、包配置

PackageConfig pc = new PackageConfig();

//生成包:com.achang.eduservice

pc.setModuleName(“eduservice”); //模块名

pc.setParent(“com.achang”);

//生成包:com.achang.oss.controller

pc.setController(“controller”);

pc.setEntity(“entity”);

pc.setService(“service”);

pc.setMapper(“mapper”);

mpg.setPackageInfo(pc);

// 5、策略配置

StrategyConfig strategy = new StrategyConfig();

strategy.setInclude(“edu_course”,“edu_chapter”,“edu_course_description”,“edu_video”);//根据数据库哪张表生成,有多张表就加逗号继续填写

strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略

strategy.setTablePrefix(pc.getModuleName() + “_”); //生成实体时去掉表前缀

strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略

strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

strategy.setRestControllerStyle(true); //restful api风格控制器

strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符

mpg.setStrategy(strategy);

// 6、执行

mpg.execute();

}

也在service_edu模块中

所以只需要修改对应的数据库表:

"edu_course","edu_chapter","edu_course_description","edu_video"

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gfGvQ5Y8-1614521104172)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228161302821.png)]

因为课程简介是依赖于课程的,所以删掉EduCourseDescriptionController


五、【添加课程信息】—后端实现


1、创建vo类封装表单提交数据

@ApiModel(value = “课程基本信息”, description = “编辑课程基本信息的表单对象”)

@Data

public class CourseInfoForm implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = “课程ID”)

private String id;

@ApiModelProperty(value = “课程讲师ID”)

private String teacherId;

@ApiModelProperty(value = “课程专业ID”)

private String subjectId;

@ApiModelProperty(value = “课程标题”)

private String title;

@ApiModelProperty(value = “课程销售价格,设置为0则可免费观看”)

private BigDecimal price;

@ApiModelProperty(value = “总课时”)

private Integer lessonNum;

@ApiModelProperty(value = “课程封面图片路径”)

private String cover;

@ApiModelProperty(value = “课程简介”)

private String description;

}


2、编写controller和service部分

  • controller

@RestController

@RequestMapping(“/eduservice/edu-course”)

@CrossOrigin //解决跨域问题

public class EduCourseController {

@Autowired

private EduCourseService eduCourseService;

//添加课程基本信息方法

@PostMapping(“/addCourseInfo”)

public R addCourseInfo(@RequestBody CourseInfoForm courseInfoForm){

eduCourseService.saveCourseInfo(courseInfoForm);

return R.ok();

}

}

  • service接口

public interface EduCourseService extends IService {

//添加课程基本信息方法

void saveCourseInfo(CourseInfoForm courseInfoForm);

}

  • serviceImpl

@Service

public class EduCourseServiceImpl extends ServiceImpl<EduCourseMapper, EduCourse> implements EduCourseService {

//课程描述注入

@Autowired

private EduCourseDescriptionService eduCourseDescriptionService;

@Override

public void saveCourseInfo(CourseInfoForm courseInfoForm) {

//向课程表里面添加课程基本信息

//CourseInfoForm对象 转换成 EduCourse对象

EduCourse eduCourse = new EduCourse();

BeanUtils.copyProperties(courseInfoForm,eduCourse);

int result = baseMapper.insert(eduCourse);

if (result<=0){//表示添加失败

throw new AchangException(20001,“添加课程信息失败”);

}

//想课程简介表里面添加课程简介

EduCourseDescription eduCourseDescription = new EduCourseDescription();

eduCourseDescription.setDescription(courseInfoForm.getDescription());

eduCourseDescriptionService.save(eduCourseDescription);

}

}

3、测试

注意Entity中EduCourse和EduCourseDescription加入:不然报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ocOjYqcE-1614521104176)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170546398.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LCXYSvL0-1614521104178)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228165923194.png)]

  • 这里测试需要先将edu_course/subject_parent_id设置为可为null先

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BzAYpFb6-1614521104185)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170208232.png)]

  • 测试

启动8001,访问:http://localhost:8001/swagger-ui.html

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FWXdaY8a-1614521104186)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170626464.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-THO7MIxQ-1614521104188)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170630312.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdf10wQ4-1614521104189)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170710154.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wqSCPX6Q-1614521104190)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228170743651.png)]

  • 上面两个表中出现一个问题,就是课程描述和课程信息没有关联

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwFcr8pw-1614521104192)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228171022467.png)]

  • 修改serviceImpl代码

@Service

public class EduCourseServiceImpl extends ServiceImpl<EduCourseMapper, EduCourse> implements EduCourseService {

//课程描述注入

@Autowired

private EduCourseDescriptionService eduCourseDescriptionService;

@Override

public String saveCourseInfo(CourseInfoForm courseInfoForm) {

//向课程表里面添加课程基本信息

//CourseInfoForm对象 转换成 EduCourse对象

EduCourse eduCourse = new EduCourse();

BeanUtils.copyProperties(courseInfoForm,eduCourse);

int result = baseMapper.insert(eduCourse);

if (result<=0){//表示添加失败

throw new AchangException(20001,“添加课程信息失败”);

}

//获取添加之后课程信息的id

String cid = eduCourse.getId();

//想课程简介表里面添加课程简介

EduCourseDescription eduCourseDescription = new EduCourseDescription();

eduCourseDescription.setDescription(courseInfoForm.getDescription());

//手动设置描述课程表的id,与上面的课程信息表id关联

eduCourseDescription.setId(cid);

eduCourseDescriptionService.save(eduCourseDescription);

return cid;

}

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tbjda6S8-1614521104194)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228171408111.png)]

  • 修改EduCourseDescription的id生成策略,设置为手动输入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FMs2YpxV-1614521104196)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228171500851.png)]

  • 修改controller,添加返回课程id

@RestController

@RequestMapping(“/eduservice/edu-course”)

@CrossOrigin //解决跨域问题

public class EduCourseController {

@Autowired

private EduCourseService eduCourseService;

//添加课程基本信息方法

@PostMapping(“/addCourseInfo”)

public R addCourseInfo(@RequestBody CourseInfoForm courseInfoForm){

//返回添加之后课程id,为了后面添加大纲使用

String id = eduCourseService.saveCourseInfo(courseInfoForm);

return R.ok().data(“courseId”,id);

}

}

  • 修改service,返回String

public interface EduCourseService extends IService {

//添加课程基本信息方法

String saveCourseInfo(CourseInfoForm courseInfoForm);

}

  • 重启8001,再次测试

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fm3hABag-1614521104202)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228171810291.png)]


六、【添加课程信息】—前端实现


1、配置路由

1)、添加路由

//课程信息管理

{

path: ‘/course’,

component: Layout,

redirect: ‘/course/list’,

name: ‘课程管理’,

meta: { title: ‘课程管理’, icon: ‘nested’ },

children: [

{

path: ‘list’,

name: ‘课程列表’,

component: () => import(‘@/views/edu/course/list.vue’),

meta: { title: ‘课程列表’, icon: ‘table’ }

},

{

path: ‘info’,

name: ‘添加课程’,

component: () => import(‘@/views/edu/course/info.vue’),

meta: { title: ‘添加课程’, icon: ‘nested’ }

},

{

path: ‘info/:id’,

name: ‘EduCourseInfoEdit’,

component: () => import(‘@/views/edu/course/info.vue’),

meta: { title: ‘编辑课程基本信息’, noCache: true },

hidden: true

},

{

path: ‘chapter/:id’,

name: ‘EduCourseChapterEdit’,

component: () => import(‘@/views/edu/course/chapter.vue’),

meta: { title: ‘编辑课程大纲’, noCache: true },

hidden: true

},

{

path: ‘publish/:id’,

name: ‘EduCoursePublishEdit’,

component: () => import(‘@/views/edu/course/publish.vue’),

meta: { title: ‘发布课程’, noCache: true },

hidden: true

}

]

},


2)、添加vue组件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1N6EEr0K-1614521104204)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228175140462.png)]


2、整合步骤条组件–步骤导航流程

参考http://element-cn.eleme.io/#/zh-CN/component/steps

1)、课程信息页面

info.vue

.

发布新课程

<el-steps

:active=“1”

process-status=“wait”

align-center

style="margin-

bottom: 40px;"

<el-button :disabled=“saveBtnDisabled” type=“primary” @click=“next”

保 存并下一步</el-button

2)、课程大纲页面

chapter.vue

.

发布新课程

<el-steps

:active=“2”

process-status=“wait”

align-center

style="margin-

bottom: 40px;"

<el-button @click=“previous”>上一步

<el-button :disabled=“saveBtnDisabled” type=“primary” @click=“next”

下 一步</el-button

3)、课程发布页面

publish.vue

.

发布新课程

<el-steps

:active=“3”

process-status=“wait”

align-center

style="margin-

bottom: 40px;"

<el-button @click=“previous”>返回修改

<el-button :disabled=“saveBtnDisabled” type=“primary” @click=“publish”

发布课程</el-button

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-42ZGOSFE-1614521104208)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228182621053.png)]


七、添加课程信息—编辑课程基本信息


1、前端实现

1)、定义api

import request from ‘@/utils/request’ //引入已经封装好的axios 和 拦截器

export default{

//添加课程信息功能

addCourseInfo(courseInfo){

return request({

url:“/eduservice/edu-course/addCourseInfo”,

method: ‘post’,

data: courseInfo,

})

}

}

2)、组件模板

.

发布新课程

<el-steps

:active=“1”

process-status=“wait”

align-center

style="margin-

bottom: 40px;"

<el-input

v-model=“courseInfo.title”

placeholder=" 示例:机器学习项目课:从基础到搭建项目视频课程。专业名称注意大小写"

/>

<el-input-number

:min=“0”

v-model=“courseInfo.lessonNum”

controls-position=“right”

placeholder=“请填写课程的总课时数”

/>

<el-input-number

:min=“0”

v-model=“courseInfo.price”

controls-position=“right”

placeholder=“免费课程请设置为0元”

/>

<el-button

:disabled=“saveBtnDisabled”

type=“primary”

@click=“saveOrUpdate”

保存并下一步</el-button

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTQCWBtC-1614521104210)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228194435687.png)]


2、讲师下拉列表显示

1)、组件模板

guli-admin\src\views\edu\course\info.vue

<el-option

v-for=“teacher in teacherLists”

:key=“teacher.id”

:label=“teacher.name”

:value=“teacher.id”

2)、定义api

src\api\teacher\course.js

//查询所有讲师

getAllTeacher(){

return request({

url:“/eduservice/edu-teacher/findAll”,

method: ‘get’,

})

}

总结

我在成长过程中也是一路摸爬滚打,没有任何人的指点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

image
image

ver: “”,

price: 0,

},

};

},

methods: {

saveOrUpdate() {

course.addCourseInfo(this.courseInfo).then(resp => {

this.$message({

message: “添加课程信息成功”,

type: “success”,

})

//跳转到第二步,并带着这个课程生成的id

this.$router.push({ path: “/course/chapter/”+resp.data.courseId });

});

},

},

created() {},

};

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTQCWBtC-1614521104210)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210228194435687.png)]


2、讲师下拉列表显示

1)、组件模板

guli-admin\src\views\edu\course\info.vue

<el-option

v-for=“teacher in teacherLists”

:key=“teacher.id”

:label=“teacher.name”

:value=“teacher.id”

2)、定义api

src\api\teacher\course.js

//查询所有讲师

getAllTeacher(){

return request({

url:“/eduservice/edu-teacher/findAll”,

method: ‘get’,

})

}

总结

我在成长过程中也是一路摸爬滚打,没有任何人的指点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-htRHVb6Q-1714814479984)]
[外链图片转存中…(img-AlokmF3l-1714814479984)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值