update from server
This commit is contained in:
@@ -26,6 +26,23 @@ const removeHTMLTag = (str) => {
|
||||
return str;
|
||||
}
|
||||
|
||||
function groupBy(array, key) {
|
||||
return array.reduce((result, currentItem) => {
|
||||
// 使用 key 函数获取分组的键
|
||||
const groupKey = key(currentItem);
|
||||
// 检查结果对象中是否已经有了这个键
|
||||
const existingGroup = result.find(item => item.key === groupKey);
|
||||
if (existingGroup) {
|
||||
// 如果已存在,则将当前项添加到该组数组中
|
||||
existingGroup.items.push(currentItem);
|
||||
} else {
|
||||
// 如果不存在,则创建新组并添加当前项
|
||||
result.push({ key: groupKey, items: [currentItem] });
|
||||
}
|
||||
return result;
|
||||
}, []);
|
||||
}
|
||||
|
||||
const CREATE_PREVIEW_URL = (val) => {
|
||||
return FILE_STREAM_PREVIEW_ADDRESS + "?id=" + val
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -9,15 +9,15 @@
|
||||
/>
|
||||
<van-number-keyboard safe-area-inset-bottom/>
|
||||
<title></title>
|
||||
<link rel="stylesheet" href="https://cdn.staticfile.org/vant/2.12.5/index.min.css"/>
|
||||
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/index.min.css"/>
|
||||
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/theme.css">
|
||||
<link rel="stylesheet" href="${base!}/assets/mobile/css/main.css">
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/vant/2.12.5/vant.min.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/vant/vant.min.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/vue-loader/httpVueLoader.js"></script>
|
||||
<script src="${base!}/assets/mobile/js/basic.js"></script>
|
||||
<script src="${base!}/assets/mobile/js/basic.js?v=0.0.1"></script>
|
||||
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
|
||||
@@ -48,6 +48,13 @@
|
||||
<script type="text/javascript"
|
||||
src="https://webapi.amap.com/maps?v=2.0&key=6ab3452804ba35050880b5e047436853&plugin=AMap.PolyEditor,AMap.Geolocation"></script>
|
||||
|
||||
<script src="https://cdn-go.cn/cdn/vod-js-sdk-v6/latest/vod-js-sdk-v6.js"></script>
|
||||
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/tcplayer.min.css" rel="stylesheet"/>
|
||||
<!--如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.vx.x.x.min.js 之前引入 hls.min.x.xx.xm.js。-->
|
||||
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/libs/hls.min.0.13.2m.js"></script>
|
||||
<!--播放器脚本文件-->
|
||||
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/tcplayer.v4.3.0.min.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
@@ -19,12 +19,12 @@ layout("/mobile/platform.html"){
|
||||
|
||||
</style>
|
||||
|
||||
<script src="https://cdn-go.cn/cdn/vod-js-sdk-v6/latest/vod-js-sdk-v6.js"></script>
|
||||
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/tcplayer.min.css" rel="stylesheet"/>
|
||||
<!--如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.vx.x.x.min.js 之前引入 hls.min.x.xx.xm.js。-->
|
||||
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/libs/hls.min.0.13.2m.js"></script>
|
||||
<!--播放器脚本文件-->
|
||||
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/tcplayer.v4.3.0.min.js"></script>
|
||||
|
||||
<!--<script src="/assets/platform/plugins/vod/vod-js-sdk-v6.js"></script>-->
|
||||
<!--<link href="/assets/platform/plugins/vod/tcplayer.min.css"/>-->
|
||||
<!--<script src="/assets/platform/plugins/vod/hls.min.0.13.2m.js"></script>-->
|
||||
<!--<script src="/assets/platform/plugins/vod/tcplayer.v4.3.0.min.js"></script>-->
|
||||
|
||||
|
||||
<style>
|
||||
#app {
|
||||
@@ -33,6 +33,7 @@ layout("/mobile/platform.html"){
|
||||
|
||||
.video-container {
|
||||
height: 300px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#player-container-id {
|
||||
@@ -75,7 +76,7 @@ layout("/mobile/platform.html"){
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.myWatchRecord{
|
||||
.myWatchRecord {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@@ -92,19 +93,66 @@ layout("/mobile/platform.html"){
|
||||
></van-nav-bar>
|
||||
|
||||
<div class="video-container">
|
||||
<video v-if="isPlay" id="player-container-id" preload="auto" playsinline
|
||||
<video id="player-container-id" preload="auto"
|
||||
autoplay
|
||||
playsinline
|
||||
webkit-playsinline>
|
||||
</video>
|
||||
|
||||
<van-image
|
||||
v-else
|
||||
style="width: 100%;height: 100%"
|
||||
:src="FILE_DOMAIN+'/fileStreamPreview?id='+albumInfo.cover"
|
||||
></van-image>
|
||||
|
||||
<!-- <div v-if="!isPlay" style=" height: 100%;-->
|
||||
<!-- background: #000;-->
|
||||
<!-- position: absolute;-->
|
||||
<!-- top: 0;-->
|
||||
<!-- left: 0;-->
|
||||
<!-- right: 0;-->
|
||||
<!-- bottom: 0;">-->
|
||||
<!-- <van-image-->
|
||||
<!-- style="width: 90%;-->
|
||||
<!-- height: 100%;-->
|
||||
<!-- z-index: 999;"-->
|
||||
<!-- fit="contain"-->
|
||||
<!-- :src="FILE_DOMAIN+'/fileStreamPreview?id='+albumInfo.cover"-->
|
||||
<!-- ></van-image>-->
|
||||
<!-- <div class="tcp-skin">-->
|
||||
<!-- <div class="vjs-big-play-button">-->
|
||||
<!-- <div class="vjs-button-icon">-->
|
||||
<!-- <svg height="100%" width="100%" viewBox="0 0 484 348">-->
|
||||
<!-- <path class="draw-fill" transform="translate(4 4)"-->
|
||||
<!-- d="M383,124C350-42,122.3-40.5,90.6,123.5c-110.4,18.5-131,185,.6,216.5H381.6C519.7,310.7,494.1,137.8,383,124Z"></path>-->
|
||||
<!-- <path transform="translate(4 4)"-->
|
||||
<!-- d="M200.4,110.2c-9.4-5.8-19.6,2.7-19.4,11.7V256.2c0,8,10.4,16.7,19.4,10.8,2.2-1.4,111.8-65.9,114-67.3,7.4-4,10.1-15.8,0-22.2Z"-->
|
||||
<!-- style="fill:#fff ;"></path>-->
|
||||
<!-- </svg>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
|
||||
<van-tabs v-model="tabIndex" sticky>
|
||||
<!-- <van-tab title="目录">-->
|
||||
<!-- <div style="height: 5px;background-color: #f6f7f9"></div>-->
|
||||
|
||||
<!-- <van-cell-group class="video-list">-->
|
||||
<!-- <van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">-->
|
||||
<!-- <template #title>-->
|
||||
<!-- <van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>-->
|
||||
<!-- <span style="margin-right: 10px">-->
|
||||
<!-- {{i+1}}.-->
|
||||
<!-- </span>-->
|
||||
<!-- <span>-->
|
||||
<!-- {{o.title}}-->
|
||||
<!-- </span>-->
|
||||
<!-- </template>-->
|
||||
<!-- <template #label>-->
|
||||
<!-- <!– {{getWatchStatus(o)}}–>-->
|
||||
<!-- </template>-->
|
||||
<!-- <template>-->
|
||||
|
||||
<!-- </template>-->
|
||||
<!-- </van-cell>-->
|
||||
<!-- </van-cell-group>-->
|
||||
<!-- </van-tab>-->
|
||||
<van-tab title="介绍">
|
||||
<div style="height: 5px;background-color: #f6f7f9"></div>
|
||||
|
||||
@@ -124,33 +172,10 @@ layout("/mobile/platform.html"){
|
||||
</van-cell>
|
||||
|
||||
</van-tab>
|
||||
<van-tab title="目录">
|
||||
<div style="height: 5px;background-color: #f6f7f9"></div>
|
||||
|
||||
<van-cell-group class="video-list">
|
||||
<van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">
|
||||
<template #title>
|
||||
<van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>
|
||||
<span style="margin-right: 10px">
|
||||
{{i+1}}.
|
||||
</span>
|
||||
<span>
|
||||
{{o.title}}
|
||||
</span>
|
||||
</template>
|
||||
<template #label>
|
||||
<!-- {{getWatchStatus(o)}}-->
|
||||
</template>
|
||||
<template>
|
||||
|
||||
</template>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
</van-tab>
|
||||
<van-tab title="学习记录">
|
||||
<div style="height: 5px;background-color: #f6f7f9"></div>
|
||||
<van-cell-group class="video-list">
|
||||
<van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">
|
||||
<van-cell v-for="(o,i) in videoList" :key="o.id">
|
||||
<template #title>
|
||||
<van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>
|
||||
<span style="margin-right: 10px">
|
||||
@@ -161,19 +186,21 @@ layout("/mobile/platform.html"){
|
||||
</span>
|
||||
</template>
|
||||
<template #label>
|
||||
<div v-if="o.everyDayMaxWatchNum && o.everyDayMaxWatchNum>0" style="padding: 10px 0;color: #0a84ff;white-space: normal">
|
||||
<div v-if="o.everyDayMaxWatchNum && o.everyDayMaxWatchNum>0"
|
||||
style="padding: 10px 0;color: #0a84ff;white-space: normal">
|
||||
本视频在活动结束时每天最多只会统计
|
||||
<span style="color: #0a84ff;font-weight: bold">{{o.everyDayMaxWatchNum}}</span>
|
||||
次完整观看记录,您可以无限制的观看。
|
||||
</div>
|
||||
<div v-for="(v,k) in Object.groupBy(watchRecordList,v=>v.watchTime)" :key="k" class="myWatchRecord">
|
||||
<div v-for="(v,index) in groupBy(watchRecordList,v=>v.watchTime)" :key="index"
|
||||
class="myWatchRecord">
|
||||
<div style="display: flex;justify-content: space-between">
|
||||
<div>
|
||||
{{moment(k).format('YYYY年MM月DD日')}}
|
||||
{{moment(v.key).format('YYYY年MM月DD日')}}
|
||||
</div>
|
||||
<div style="color: #000000;">
|
||||
观看次数
|
||||
<span style="font-weight: bold">{{v.length}}</span>
|
||||
<span style="font-weight: bold">{{v.items && v.items.filter(v=>v.finish).length}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -184,9 +211,9 @@ layout("/mobile/platform.html"){
|
||||
</van-tab>
|
||||
</van-tabs>
|
||||
|
||||
<div class="bottom-wrap" v-show="isPlay">
|
||||
<van-button type="info" block @click="endLearn">上传学习记录</van-button>
|
||||
</div>
|
||||
<!-- <div class="bottom-wrap" v-show="isPlay">-->
|
||||
<!-- <van-button type="info" block @click="endLearn">上传学习记录</van-button>-->
|
||||
<!-- </div>-->
|
||||
|
||||
</div>
|
||||
|
||||
@@ -213,6 +240,8 @@ layout("/mobile/platform.html"){
|
||||
|
||||
player: null,
|
||||
|
||||
vvv: []
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
@@ -221,8 +250,8 @@ layout("/mobile/platform.html"){
|
||||
methods: {
|
||||
async getVideoInfo() {
|
||||
const {data} = await $.get('/mobile/trainEducation/getVideoList', {albumId: this.albumId})
|
||||
this.vvv = data
|
||||
this.videoList = data
|
||||
|
||||
},
|
||||
async getAlbumInfo() {
|
||||
const {data} = await $.get('/mobile/trainEducation/getAlbumInfo', {id: this.albumId})
|
||||
@@ -364,7 +393,7 @@ layout("/mobile/platform.html"){
|
||||
if (resp.code === 0) {
|
||||
this.$modal.msgSuccess('上传成功')
|
||||
} else {
|
||||
this.$modal.msgError('上传成功')
|
||||
this.$modal.msgError('上传失败')
|
||||
}
|
||||
}).catch(err => {
|
||||
console.log(err)
|
||||
@@ -373,14 +402,19 @@ layout("/mobile/platform.html"){
|
||||
}
|
||||
|
||||
},
|
||||
created() {
|
||||
async created() {
|
||||
// this.watchPage()
|
||||
const id = this.GetQueryString("id")
|
||||
const id = GetQueryString("id")
|
||||
if (id) {
|
||||
this.albumId = id
|
||||
this.getAlbumInfo()
|
||||
this.getVideoInfo()
|
||||
this.getMyWatchRecord()
|
||||
await this.getAlbumInfo()
|
||||
await this.getVideoInfo()
|
||||
await this.getMyWatchRecord()
|
||||
if (this.videoList && this.videoList.length > 0) {
|
||||
this.playVideo(this.videoList[0])
|
||||
} else {
|
||||
this.$toast('暂无视频学习')
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -46,8 +46,16 @@ layout("/layouts/platform.html"){
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-if="column.prop==='sumDuration'" scope="{row}">
|
||||
{{(row.sumDuration / 60 / 60).toFixed(2) + 'h'}}
|
||||
<!-- <template v-if="column.prop==='sumDuration'" scope="{row}">-->
|
||||
<!-- {{(row.sumDuration / 60 / 60).toFixed(2) + 'h'}}-->
|
||||
<!-- </template>-->
|
||||
<template v-if="column.prop==='isQualified'" scope="{row}">
|
||||
<span v-if="row.watchCount>=row.qualifiedNum" class="text-success">
|
||||
是
|
||||
</span>
|
||||
<span v-else class="text-danger">
|
||||
否
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column align="center" header-align="center" label="操作" width="200">-->
|
||||
@@ -110,7 +118,8 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'unitname', label: '单位'},
|
||||
{prop: 'unionname', label: '分工会'},
|
||||
// {prop: 'studyDuration', label: '观看总时长'},
|
||||
{prop: 'watchCount', label: '学习总次数'}
|
||||
{prop: 'watchCount', label: '学习总次数'},
|
||||
{prop: 'isQualified', label: '是否达标'},
|
||||
],
|
||||
viewTableColumns: [
|
||||
{prop: 'username', label: '姓名'},
|
||||
@@ -118,7 +127,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'unitname', label: '单位'},
|
||||
{prop: 'unionname', label: '分工会'},
|
||||
// {prop: 'studyDuration', label: '观看总时长'},
|
||||
{prop: 'watchCount', label: '学习总次数'}
|
||||
{prop: 'watchCount', label: '学习总次数'},
|
||||
],
|
||||
viewPageForm: {
|
||||
pageNumber: 1,
|
||||
|
||||
@@ -140,6 +140,10 @@ layout("/layouts/platform.html"){
|
||||
<el-input-number :min="1" :max="100" v-model="formData.everyDayMaxWatchNum"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="合格/达标次数" prop="qualifiedNum">
|
||||
<el-input-number :min="1" :max="1000" v-model="formData.qualifiedNum"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否启用" prop="disabled">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
|
||||
Reference in New Issue
Block a user