Compare commits

..

14 Commits
main ... live

Author SHA1 Message Date
fbbe6b9e09 fix(study): 修复视频播放结束逻辑和定时器清理问题
修复视频播放结束判断条件,增加对播放进度的验证
添加定时器清理逻辑防止内存泄漏
2025-08-15 15:53:46 +08:00
4f1f8bd3d1 fix(study): 优化视频定时器处理并添加路由离开清理
确保在组件销毁和路由离开时都清除视频定时器,避免内存泄漏。简化视频当前时间获取逻辑,移除不必要的条件判断。
2025-08-15 14:48:30 +08:00
d904797db3 refactor(study): 移除调试日志并优化视频时间获取逻辑
在ExamTest组件中移除已注释的调试日志
在courseDetail组件中增加视频元素存在性检查,避免潜在错误
2025-08-15 14:08:17 +08:00
b6da6e8e3e 重新yarn install 2025-08-15 12:52:36 +08:00
b20c4dc376 feat(安全): 添加加密解密功能并更新考试组件
- 新增crypto-js依赖用于数据加密解密
- 添加decrypt.js工具文件实现AES解密功能
- 修改Exam.vue组件使用加密接口获取考试数据
- 清理main.js中多余空行并格式化代码
2025-08-15 12:47:21 +08:00
a3823b4735 fix: 修复消息时间格式缩进并启用QNRTC日志级别设置
调整消息时间显示的缩进格式,保持代码风格一致
同时取消QNRTC日志级别设置的注释,避免产生不必要的日志输出
2025-08-14 16:55:43 +08:00
b8070d96e8 fix(liveView): 为视频元素添加自动播放属性
视频播放器需要自动播放功能以提升用户体验,因此添加了autoplay属性
2025-08-13 18:06:41 +08:00
51da660509 feat(liveView): 添加视频播放器控件并优化媒体流处理
- 新增video元素用于统一播放音视频流
- 合并音频和视频轨道到单一媒体流
- 优化播放器控件设置和样式
- 移除冗余代码并简化DOM操作
2025-08-13 17:11:14 +08:00
2103d3fcc1 fix: 将API域名从admins.jiangtang360.com更新为adminssl.jiangtang360.com
更新生产环境和开发环境的API配置,以及相关组件中的API调用地址,使用新的SSL安全域名
2025-08-08 17:54:59 +08:00
0d5a7d6d5d feat: 新增直播功能及相关组件
实现以下功能:
1. 在首页展示直播信息,支持点击进入直播间。
2. 添加获取直播流的API调用,动态更新直播数据。
3. 优化直播视图组件,调整样式以提升用户体验。
4. 代码格式化和注释优化,提升可读性。
2025-08-05 17:36:59 +08:00
d24052d24b chore: 升级项目依赖和构建工具,迁移至Webpack 5.x
主要变更包括:
1. 更新Babel配置,使用@babel/preset-env和@babel/plugin-transform-object-rest-spread。
2. 升级Webpack及相关插件,使用MiniCssExtractPlugin替代ExtractTextPlugin。
3. 更新package-lock.json和package.json,调整依赖版本。
4. 修改README.md,更新项目简介和环境要求。
5. 代码格式优化和错误处理增强,提升构建和开发体验。
2025-08-04 16:35:39 +08:00
926c1ef774 feat: 新增在线课堂直播页面组件及功能实现
实现在线课堂直播页面,包含以下功能:
1. 视频直播展示及控制(全屏、音量调节)
2. 教师摄像头和学生摄像头分屏显示
3. 聊天消息发送与接收
4. 课程信息展示
5. 水印显示及动画效果
6. 状态管理(未开始/直播中/已结束)
7. 响应式布局及样式优化
2025-08-01 18:14:54 +08:00
a2f0392fed fix: 将所有http资源替换为https以提升安全性
refactor: 添加新的直播视图路由路径
style: 格式化代码并优化缩进
2025-08-01 17:54:21 +08:00
2d987351bc fix: 将开发环境API地址更改为HTTPS协议
将BASE_API从HTTP协议更新为HTTPS协议,以提高开发环境下的安全性
2025-08-01 16:00:40 +08:00
18 changed files with 4108 additions and 11418 deletions

View File

@ -4,6 +4,6 @@ const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, { module.exports = merge(prodEnv, {
// BASE_API: '"http://spadmin.jiangtang360.com/api"' // BASE_API: '"http://spadmin.jiangtang360.com/api"'
BASE_API: '"http://admin.jiangtang360.com/api"', BASE_API: '"https://adminssl.jiangtang360.com/api"',
// BASE_API: '"http://zywsadmin.jiangtang360.com/api"' // BASE_API: '"http://zywsadmin.jiangtang360.com/api"'
}) })

View File

@ -12,7 +12,7 @@ module.exports = {
assetsPublicPath: '/', assetsPublicPath: '/',
proxyTable: { proxyTable: {
'/api': { '/api': {
// target: 'http://admin.jiangtang360.com/admin', // target: 'https://adminssl.jiangtang360.com/admin',
target: 'http://sz-test.shengzhevictor.com', //设置调用接口域名和端口号别忘了加http///请求的第三方接口 target: 'http://sz-test.shengzhevictor.com', //设置调用接口域名和端口号别忘了加http///请求的第三方接口
changeOrigin: true,///在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题 changeOrigin: true,///在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
pathRewrite: { pathRewrite: {

View File

@ -1,6 +1,6 @@
'use strict' 'use strict'
module.exports = { module.exports = {
// BASE_API: '"http://spadmin.jiangtang360.com/api"' // BASE_API: '"http://spadmin.jiangtang360.com/api"'
BASE_API: '"http://admin.jiangtang360.com/api"' BASE_API: '"https://adminssl.jiangtang360.com/api"'
// BASE_API: '"http://zywsadmin.jiangtang360.com/api"' // BASE_API: '"http://zywsadmin.jiangtang360.com/api"'
} }

View File

@ -24,6 +24,7 @@
"exif-js": "^2.3.0", "exif-js": "^2.3.0",
"font-awesome": "^4.7.0", "font-awesome": "^4.7.0",
"mint-ui": "^2.2.13", "mint-ui": "^2.2.13",
"qnweb-rtc": "^4.3.1",
"qrcodejs2": "^0.0.2", "qrcodejs2": "^0.0.2",
"regenerator-runtime": "^0.14.1", "regenerator-runtime": "^0.14.1",
"simple-peer": "^9.11.1", "simple-peer": "^9.11.1",

View File

@ -11,6 +11,15 @@
<img src="../../static/lead/8.png" class="img8" v-if="step == 8"/> <img src="../../static/lead/8.png" class="img8" v-if="step == 8"/>
<img src="../../static/lead/9.png" class="img9" v-if="step == 9"/> <img src="../../static/lead/9.png" class="img9" v-if="step == 9"/>
</div> --> </div> -->
<div class="cover" v-if="haveLive">
<div class="live_box" v-for="live in liveData" @click="goLive(live.room)">
<div>{{ live.title }}</div>
<br />
<div class="stream_info">
<p>開始時間{{ live.start_time }}</p>
</div>
</div>
</div>
<common-top></common-top> <common-top></common-top>
<div class="all"> <div class="all">
<div class="top"> <div class="top">
@ -37,7 +46,8 @@
<div class="kecheng"> <div class="kecheng">
<div class="kecheng_biaoti"> <div class="kecheng_biaoti">
<p class="kecheng_biaotiL">课程展示</p> <p class="kecheng_biaotiL">课程展示</p>
<p class="kecheng_biaotiR" @click="goUrl('/courseAll')">查看全部&emsp;<img class="fr" src="../../static/imgs/header_icon_right.svg" alt=""></p> <p class="kecheng_biaotiR" @click="goUrl('/courseAll')">查看全部&emsp;<img class="fr"
src="../../static/imgs/header_icon_right.svg" alt=""></p>
</div> </div>
<div class="kechenginfo" v-for="(item, index) in course" :key="index"> <div class="kechenginfo" v-for="(item, index) in course" :key="index">
@ -46,7 +56,8 @@
<p class="kechenginfoR_bt">{{ item.name }}</p> <p class="kechenginfoR_bt">{{ item.name }}</p>
<p class="kechenginfoR_xbt">{{ item.description }}</p> <p class="kechenginfoR_xbt">{{ item.description }}</p>
<div class="kechenginfoR_bot"> <div class="kechenginfoR_bot">
<div class="kechenginfoR_botL"><img src="../../static/img/yanjing.png" alt="" class="yanjing">{{item.page_view}}</div> <div class="kechenginfoR_botL"><img src="../../static/img/yanjing.png" alt="" class="yanjing">{{
item.page_view }}</div>
<div class="kechenginfoR_botR" @click="goCourseDetail(item.id)">进入课程</div> <div class="kechenginfoR_botR" @click="goCourseDetail(item.id)">进入课程</div>
</div> </div>
</div> </div>
@ -70,7 +81,9 @@
return { return {
company: {}, company: {},
course: [], course: [],
step: 0 step: 0,
haveLive: false,
liveData: [],
} }
}, },
created() { created() {
@ -78,6 +91,7 @@
mounted() { mounted() {
this.getPageData(); this.getPageData();
this.getLiveStreams();
}, },
methods: { methods: {
goCourseDetail(id) { goCourseDetail(id) {
@ -96,7 +110,23 @@
data => { data => {
if (data.code == 1) { if (data.code == 1) {
this.company = data.data.company; this.company = data.data.company;
//https
this.company.banner = this.company.banner.replace(
"http://img",
"https://imgs"
);
this.company.thumbnail = this.company.thumbnail.replace(
"http://img",
"https://imgs"
);
this.course = data.data.course; this.course = data.data.course;
//https
for (let index = 0; index < this.course.length; index++) {
this.course[index].thumbnail = this.course[index].thumbnail.replace(
"http://img",
"https://imgs"
);
}
var courseName = this.course.map(v => { return v.name }) var courseName = this.course.map(v => { return v.name })
//localStorage //localStorage
localStorage.setItem("courseName", JSON.stringify(courseName)); localStorage.setItem("courseName", JSON.stringify(courseName));
@ -106,6 +136,22 @@
}, },
err => { }) err => { })
}, },
getLiveStreams() {
this.getData("/Membervideo/getLiveStreams", { token: getStore("token") }).then(
(data) => {
if (data.code == 1) {
if (data.data.length > 0) {
this.haveLive = true;
this.liveData = data.data;
}
}
},
(err) => {}
);
},
goLive(room) {
this.$router.push({ path: "/liveview?roomName=" + room });
},
nextLead() { nextLead() {
if (this.step == 9) { if (this.step == 9) {
this.step = 0 this.step = 0
@ -123,18 +169,21 @@
.all { .all {
padding: 5rem 0 6.5rem; padding: 5rem 0 6.5rem;
} }
.top { .top {
width: 30rem; width: 30rem;
margin: auto; margin: auto;
height: 18rem; height: 18rem;
display: flex; display: flex;
align-items: center; align-items: center;
img { img {
width: 100%; width: 100%;
height: 15rem; height: 15rem;
object-fit: cover; object-fit: cover;
} }
} }
.daohang { .daohang {
width: 90%; width: 90%;
height: 6rem; height: 6rem;
@ -142,26 +191,32 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.daohang1 { .daohang1 {
width: 25%; width: 25%;
border-right: 1px solid #CCCCCC; border-right: 1px solid #CCCCCC;
font-size: 1.35rem; font-size: 1.35rem;
&:last-child { &:last-child {
border: none; border: none;
} }
} }
.liuyan1 { .liuyan1 {
border-right: none; border-right: none;
} }
.tupian { .tupian {
width: 2.5rem; width: 2.5rem;
height: 2.5rem; height: 2.5rem;
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
} }
.kecheng { .kecheng {
width: 90%; width: 90%;
margin: auto; margin: auto;
.kecheng_biaoti { .kecheng_biaoti {
margin: 1rem 0; margin: 1rem 0;
height: 3rem; height: 3rem;
@ -169,16 +224,19 @@
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.kecheng_biaotiL { .kecheng_biaotiL {
font-size: 1.56rem; font-size: 1.56rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: bold; font-weight: bold;
} }
.kecheng_biaotiR { .kecheng_biaotiR {
font-size: 1.25rem; font-size: 1.25rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: 400; font-weight: 400;
color: #C5C5C5; color: #C5C5C5;
.fr { .fr {
width: 1rem; width: 1rem;
height: 1rem; height: 1rem;
@ -191,6 +249,7 @@
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC;
>img { >img {
width: 13rem; width: 13rem;
height: 10rem; height: 10rem;
@ -198,12 +257,14 @@
margin-right: 0.5rem; margin-right: 0.5rem;
} }
} }
.kechenginfoR { .kechenginfoR {
width: 56%; width: 56%;
height: 10rem; height: 10rem;
text-align: left; text-align: left;
position: relative; position: relative;
} }
.kechenginfoR_bt { .kechenginfoR_bt {
display: block; display: block;
width: 100%; width: 100%;
@ -214,6 +275,7 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.kechenginfoR_xbt { .kechenginfoR_xbt {
display: block; display: block;
width: 100%; width: 100%;
@ -224,6 +286,7 @@
margin: 1rem 0; margin: 1rem 0;
word-wrap: break-word; word-wrap: break-word;
} }
.kechenginfoR_bot { .kechenginfoR_bot {
height: 4rem; height: 4rem;
display: flex; display: flex;
@ -233,6 +296,7 @@
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
.kechenginfoR_botL { .kechenginfoR_botL {
color: #CCCCCC; color: #CCCCCC;
font-size: 1.25rem; font-size: 1.25rem;
@ -240,11 +304,13 @@
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.yanjing { .yanjing {
width: 1.5rem; width: 1.5rem;
height: 1.5rem; height: 1.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
} }
.kechenginfoR_botR { .kechenginfoR_botR {
width: 8rem; width: 8rem;
height: 3rem; height: 3rem;
@ -258,4 +324,24 @@
} }
.cover {
left: 0;
top: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.live_box {
background-color: white;
width: 25rem;
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);
margin: 3rem;
padding: 1rem;
border-radius: 10px;
cursor: pointer;
// display: flex;
// flex-direction: column;
}
</style> </style>

View File

@ -32,7 +32,7 @@
data-vidtype="1" data-vidtype="1"
style="position: relative; z-index: 1; height: 35em; width: 31em" style="position: relative; z-index: 1; height: 35em; width: 31em"
scrolling="no" scrolling="no"
src="http://img.jiangtang360.com/1666599415204.mp4" src="https://imgs.jiangtang360.com/1666599415204.mp4"
allowfullscreen="1" allowfullscreen="1"
frameborder="0" frameborder="0"
></iframe> ></iframe>

View File

@ -30,7 +30,7 @@ export default {
}, },
methods: { methods: {
createQRCode(num) { createQRCode(num) {
axios.get("http://admin.jiangtang360.com/api/Card/getTime").then( axios.get("https://adminssl.jiangtang360.com/api/Card/getTime").then(
(res) => { (res) => {
if (num === 1) { if (num === 1) {
var redirect_uri = encodeURIComponent(this.redirect_uri)+res.data; var redirect_uri = encodeURIComponent(this.redirect_uri)+res.data;

View File

@ -77,7 +77,7 @@ export default {
var params = new URLSearchParams(query); var params = new URLSearchParams(query);
// //
var paramValue = params.get("nowTime"); var paramValue = params.get("nowTime");
axios.get("http://admin.jiangtang360.com/api/Card/getTime").then( axios.get("https://adminssl.jiangtang360.com/api/Card/getTime").then(
(res) => { (res) => {
if ( if (
Number(paramValue) + 1000 * 60 * 5 > res.data && Number(paramValue) + 1000 * 60 * 5 > res.data &&
@ -99,7 +99,7 @@ export default {
getOpenid(code) { getOpenid(code) {
let formData = new FormData(); let formData = new FormData();
formData.append("code", code); formData.append("code", code);
axios.post("http://admin.jiangtang360.com/api/Signin/getOpenId", formData).then( axios.post("https://adminssl.jiangtang360.com/api/Signin/getOpenId", formData).then(
(res) => { (res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
this.openid = res.data.data; this.openid = res.data.data;
@ -120,7 +120,7 @@ export default {
let formData = new FormData(); let formData = new FormData();
formData.append("openid", openid); formData.append("openid", openid);
axios axios
.post("http://admin.jiangtang360.com/api/Signin/isTodaySignedIn", formData) .post("https://adminssl.jiangtang360.com/api/Signin/isTodaySignedIn", formData)
.then( .then(
(res) => { (res) => {
if (res.status == 200) { if (res.status == 200) {
@ -141,7 +141,7 @@ export default {
formData.append("openid", this.openid); formData.append("openid", this.openid);
axios axios
.post( .post(
"http://admin.jiangtang360.com/api/Signin/getLastSubmissionByOpenid", "https://adminssl.jiangtang360.com/api/Signin/getLastSubmissionByOpenid",
formData formData
) )
.then( .then(
@ -169,7 +169,7 @@ export default {
formData.append("openid", this.openid); formData.append("openid", this.openid);
axios axios
.post( .post(
"http://admin.jiangtang360.com/api/Signin/saveUserCheckinInfo", "https://adminssl.jiangtang360.com/api/Signin/saveUserCheckinInfo",
formData formData
) )
.then( .then(

View File

@ -2,12 +2,7 @@
<div class="all"> <div class="all">
<back title="已学课程"></back> <back title="已学课程"></back>
<div class="kecheng"> <div class="kecheng">
<div <div class="kechenginfo" @click="goCourseDetail(item.id)" v-for="(item, index) in course" :key="index">
class="kechenginfo"
@click="goCourseDetail(item.id)"
v-for="(item, index) in course"
:key="index"
>
<img :src="item.thumbnail" alt="" /> <img :src="item.thumbnail" alt="" />
<div class="kechenginfoR"> <div class="kechenginfoR">
<p class="kechenginfoR_bt">{{ item.name }}</p> <p class="kechenginfoR_bt">{{ item.name }}</p>
@ -54,6 +49,12 @@ export default {
(data) => { (data) => {
if (data.code == 1) { if (data.code == 1) {
this.course = data.data; this.course = data.data;
for (let index = 0; index < this.course.length; index++) {
this.course[index].thumbnail = this.course[index].thumbnail.replace(
"http://img",
"https://imgs"
);
}
} else { } else {
Toast(data.msg); Toast(data.msg);
} }
@ -70,45 +71,53 @@ export default {
padding: 5.5rem 0; padding: 5.5rem 0;
width: 90%; width: 90%;
margin: auto; margin: auto;
.kecheng_biaoti { .kecheng_biaoti {
height: 3rem; height: 3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.kecheng_biaotiL { .kecheng_biaotiL {
font-size: 1.56rem; font-size: 1.56rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: bold; font-weight: bold;
} }
.kecheng_biaotiR { .kecheng_biaotiR {
font-size: 1.25rem; font-size: 1.25rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: 400; font-weight: 400;
color: #c5c5c5; color: #c5c5c5;
.fr { .fr {
width: 1rem; width: 1rem;
height: 1rem; height: 1rem;
} }
} }
.kechenginfo { .kechenginfo {
padding: 2rem 0; padding: 2rem 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #cccccc; border-bottom: 1px solid #cccccc;
>img { >img {
width: 11rem; width: 11rem;
height: 15rem; height: 15rem;
object-fit: cover; object-fit: cover;
} }
} }
.kechenginfoR { .kechenginfoR {
width: 56%; width: 56%;
height: 15rem; height: 15rem;
text-align: left; text-align: left;
position: relative; position: relative;
} }
.kechenginfoR_bt { .kechenginfoR_bt {
display: block; display: block;
width: 100%; width: 100%;
@ -119,6 +128,7 @@ export default {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.kechenginfoR_xbt { .kechenginfoR_xbt {
display: block; display: block;
width: 100%; width: 100%;
@ -131,10 +141,12 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
height: 7rem; height: 7rem;
} }
.kechenginfoR_end { .kechenginfoR_end {
font-size: 1rem; font-size: 1rem;
color: #0083ff; color: #0083ff;
} }
.kechenginfoR_bot { .kechenginfoR_bot {
height: 4rem; height: 4rem;
display: flex; display: flex;
@ -144,6 +156,7 @@ export default {
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
.kechenginfoR_botL { .kechenginfoR_botL {
color: #cccccc; color: #cccccc;
font-size: 1.25rem; font-size: 1.25rem;
@ -151,11 +164,13 @@ export default {
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.yanjing { .yanjing {
width: 1.5rem; width: 1.5rem;
height: 1.5rem; height: 1.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
} }
.kechenginfoR_botR { .kechenginfoR_botR {
width: 8rem; width: 8rem;
height: 3rem; height: 3rem;

View File

@ -9,7 +9,8 @@
<p class="kechenginfoR_bt">{{ item.name }}</p> <p class="kechenginfoR_bt">{{ item.name }}</p>
<p class="kechenginfoR_xbt">{{ item.description }}</p> <p class="kechenginfoR_xbt">{{ item.description }}</p>
<div class="kechenginfoR_bot"> <div class="kechenginfoR_bot">
<div class="kechenginfoR_botL"><img src="../../../static/img/yanjing.png" alt="" class="yanjing">{{item.page_view}}</div> <div class="kechenginfoR_botL"><img src="../../../static/img/yanjing.png" alt=""
class="yanjing">{{ item.page_view }}</div>
<div class="kechenginfoR_botR">进入课程</div> <div class="kechenginfoR_botR">进入课程</div>
</div> </div>
</div> </div>
@ -47,6 +48,9 @@
data => { data => {
if (data.code == 1) { if (data.code == 1) {
this.course = data.data; this.course = data.data;
for (let index = 0; index < this.course.length; index++) {
this.course[index].thumbnail = this.course[index].thumbnail.replace('http://img', 'https://imgs');
}
} else { } else {
Toast(data.msg); Toast(data.msg);
} }
@ -62,33 +66,39 @@
padding: 5.5rem 0; padding: 5.5rem 0;
width: 90%; width: 90%;
margin: auto; margin: auto;
.kecheng_biaoti { .kecheng_biaoti {
height: 3rem; height: 3rem;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.kecheng_biaotiL { .kecheng_biaotiL {
font-size: 1.56rem; font-size: 1.56rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: bold; font-weight: bold;
} }
.kecheng_biaotiR { .kecheng_biaotiR {
font-size: 1.25rem; font-size: 1.25rem;
font-family: MicrosoftYaHei; font-family: MicrosoftYaHei;
font-weight: 400; font-weight: 400;
color: #C5C5C5; color: #C5C5C5;
.fr { .fr {
width: 1rem; width: 1rem;
height: 1rem; height: 1rem;
} }
} }
.kechenginfo { .kechenginfo {
padding: 2rem 0; padding: 2rem 0;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
border-bottom: 1px solid #CCCCCC; border-bottom: 1px solid #CCCCCC;
>img { >img {
width: 13rem; width: 13rem;
height: 10rem; height: 10rem;
@ -96,12 +106,14 @@
margin-right: 0.5rem; margin-right: 0.5rem;
} }
} }
.kechenginfoR { .kechenginfoR {
width: 56%; width: 56%;
height: 10rem; height: 10rem;
text-align: left; text-align: left;
position: relative; position: relative;
} }
.kechenginfoR_bt { .kechenginfoR_bt {
display: block; display: block;
width: 100%; width: 100%;
@ -112,6 +124,7 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.kechenginfoR_xbt { .kechenginfoR_xbt {
display: block; display: block;
width: 100%; width: 100%;
@ -122,6 +135,7 @@
margin: 1rem 0; margin: 1rem 0;
word-wrap: break-word; word-wrap: break-word;
} }
.kechenginfoR_bot { .kechenginfoR_bot {
height: 4rem; height: 4rem;
display: flex; display: flex;
@ -131,6 +145,7 @@
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
.kechenginfoR_botL { .kechenginfoR_botL {
color: #CCCCCC; color: #CCCCCC;
font-size: 1.25rem; font-size: 1.25rem;
@ -138,11 +153,13 @@
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.yanjing { .yanjing {
width: 1.5rem; width: 1.5rem;
height: 1.5rem; height: 1.5rem;
margin-right: 0.5rem; margin-right: 0.5rem;
} }
.kechenginfoR_botR { .kechenginfoR_botR {
width: 8rem; width: 8rem;
height: 3rem; height: 3rem;
@ -154,5 +171,4 @@
font-size: 1.25rem; font-size: 1.25rem;
} }
} }
</style> </style>

View File

@ -272,7 +272,21 @@ export default {
(data) => { (data) => {
if (data.code == 1) { if (data.code == 1) {
this.courseData = data.data; this.courseData = data.data;
this.courseData.thumbnail = this.courseData.thumbnail.replace(
"http://img",
"https://imgs"
);
this.section = data.data.section; this.section = data.data.section;
for (let index = 0; index < this.section.length; index++) {
this.section[index].thumbnail = this.section[index].thumbnail.replace(
"http://img",
"https://imgs"
);
this.section[index].video_url = this.section[index].video_url.replace(
"http://img",
"https://imgs"
);
}
this.changeSection(data.data.recent_section); this.changeSection(data.data.recent_section);
} else { } else {
Toast(data.msg); Toast(data.msg);

File diff suppressed because it is too large Load Diff

View File

@ -23,7 +23,7 @@ export default {
mounted() { mounted() {
this.cardphotopath = this.cardphotopath =
"http://admin.jiangtang360.com/static/admin/cards/" + "https://adminssl.jiangtang360.com/static/admin/cards/" +
this.$refs.getValue.value + this.$refs.getValue.value +
".jpg" + ".jpg" +
"?ran=" + "?ran=" +

View File

@ -151,7 +151,7 @@ export default {
axios axios
.post( .post(
// "/uploadcardimage",formData // "/uploadcardimage",formData
"http://admin.jiangtang360.com/api/card/uploadcardimage", "https://adminssl.jiangtang360.com/api/card/uploadcardimage",
formData, formData,
config config
// Qs.stringify(formData) // Qs.stringify(formData)
@ -188,13 +188,13 @@ export default {
mounted() { mounted() {
this.photopath = this.photopath =
"http://admin.jiangtang360.com/static/admin/cards/" + "https://adminssl.jiangtang360.com/static/admin/cards/" +
this.$refs.getValue.value + this.$refs.getValue.value +
".jpg" + ".jpg" +
"?ran=" + "?ran=" +
Math.random(); Math.random();
this.ImgObj.src = this.ImgObj.src =
"http://admin.jiangtang360.com/static/admin/cards/" + "https://adminssl.jiangtang360.com/static/admin/cards/" +
this.$refs.getValue.value + this.$refs.getValue.value +
".jpg" + ".jpg" +
"?ran=" + "?ran=" +

View File

@ -121,6 +121,11 @@ export default new Router({
name:'wxerror', name:'wxerror',
component: resolve => require(['../components/login/wxError.vue'], resolve) component: resolve => require(['../components/login/wxError.vue'], resolve)
}, },
{
path:'/liveview',
name:'liveview',
component: resolve => require(['../components/study/liveView.vue'], resolve)
},
// 用户 // 用户
{ {
path:'/user', path:'/user',

View File

@ -13,6 +13,7 @@ const state={
const mutations={ const mutations={
addInfo(state,loginInfo){ addInfo(state,loginInfo){
state.loginInfo = loginInfo; state.loginInfo = loginInfo;
state.loginInfo.header = state.loginInfo.header.replace('http://img','https://imgs');
} }
} }

File diff suppressed because it is too large Load Diff

4693
yarn.lock

File diff suppressed because it is too large Load Diff