课程模块
登录和登出
// 当刷新页面,组件创建成功之后,立刻检测本地储存中是否存在用户对象
this.userDTO=JSON.parse(localStorage.getItem("user")); if(this.userDTO != null) {
this.isLogin = true; // 已登录
}
...
this.isLogin = true; // 更新登录状态
// 将登录成功 的对象信息保存到本地储存中
localStorage.setItem("user", JSON.stringify(this.userDTO));
课程详情
// 将课程对象传递到课程详情组件
this.$router.push({ name: "Course", params: { course: item } });
// 路由获得参数
this.$route.params.course
章节状态
- 用户是否登录 isLogin
- 没有登录,第一张前两节,显示试看;
- 第三节开始 显示加锁;
- 其余章加锁
- 已登录,查询当前用户所有购买的课程,当前课程是否在用户购买的课程中
- 已登录,没有购买,第一张前两节显示 试看;
- 第三节开始 显示加锁;
- 其余章加锁
- 已登录,已购买,显示播放;其余章显示播放
点击播放视频
- 课程信息中查找即将播放课时视频的地址
for (let i = 0; i < this.course.courseSections.length; i++) {
let section = this.course.courseSections[i];
for (let j = 0; j < section.courseLessons.length; j++) {
let lesson = section.courseLessons[j]; // 每节课
if (lesson.courseMedia != null) {
if (this.lessonid == lesson.courseMedia.lessonId) {
console.log("视频地址:" + lesson.courseMedia.fileEdk);
//2.将小节视频的地址 赋值 给播放器,进行播放
this.myvideo.src = lesson.courseMedia.fileEdk;
return;
}
}
}
}
留言模块
点赞后的样式
// 用字符串查找 取代 遍历数组,判断当前用户是否在 点赞的用户列表中
JSON.stringify(comment.favoriteRecords).indexOf( user.content.id ) >= 0"
保存留言中文乱码
web层乱码
username = new String( username.getBytes("ISO-8859-1"),"UTF-8" );
保存数据库乱码
jdbc:mysql://193.112.27.27:3306/edu?serverTimezone=GMT&useUnicode=true&characterEncoding=UTF-8"
用户模块
微信登录
OAuth协议
OAuth与密码区别
- 令牌是短期的
- 令牌可以数据所有者被撤销
- 令牌有权限范围
token字符串转为对象
Token token = JSON.parseObject(tokenString,Token.class);
二维码在谷歌浏览器bug
iframe 未添加sandbox 属性
d.sandbox = "allow-scripts allow-top-navigation allow-same-origin"), // 允许多种请求
订单模块
微信支付
// 待dom更新之后再用二维码渲染其内容
this.$nextTick(function(){ this.createCode(); // 直接调用会报错:TypeError: Cannot read property 'appendChild' of null });
// 生成二维码
createCode(){ // QRCode(存放二维码的dom元素id,二维码的属性参数)
let qrcode = new QRCode('qrcode',{
width:200, // 二维码的宽度
height:200, // 二维码的高度
text:"我爱你中国" // 二维码中包含的信息
});
}
支付流程
- 编写商户信息,写入map中
- 生成数字签名,商户信息转成xml格式
- xml数据post请求发送给微信支付平台,生成订单
- 微信支付平台返回xml格式数据,将响应转换成map返回给前端,生成支付二维码
- 检查支付状态
- 编写商户信息
- 生成数字签名
网友评论