|
@@ -1,7 +1,33 @@
|
|
import request from '@/helpers/request'
|
|
import request from '@/helpers/request'
|
|
import { state } from '@/state'
|
|
import { state } from '@/state'
|
|
-import { Button, Cell, CellGroup, Dialog, Icon, showConfirmDialog } from 'vant'
|
|
|
|
-import { defineComponent, onMounted, reactive, onUnmounted, TransitionGroup } from 'vue'
|
|
|
|
|
|
+import {
|
|
|
|
+ Button,
|
|
|
|
+ Cell,
|
|
|
|
+ CellGroup,
|
|
|
|
+ Dialog,
|
|
|
|
+ Empty,
|
|
|
|
+ Grid,
|
|
|
|
+ GridItem,
|
|
|
|
+ Icon,
|
|
|
|
+ Image,
|
|
|
|
+ Loading,
|
|
|
|
+ Popup,
|
|
|
|
+ showConfirmDialog,
|
|
|
|
+ showLoadingToast,
|
|
|
|
+ showToast,
|
|
|
|
+ Skeleton,
|
|
|
|
+ SkeletonImage,
|
|
|
|
+ Space
|
|
|
|
+} from 'vant'
|
|
|
|
+import {
|
|
|
|
+ defineComponent,
|
|
|
|
+ onMounted,
|
|
|
|
+ reactive,
|
|
|
|
+ onUnmounted,
|
|
|
|
+ nextTick,
|
|
|
|
+ Transition,
|
|
|
|
+ TransitionGroup
|
|
|
|
+} from 'vue'
|
|
import styles from './index.module.less'
|
|
import styles from './index.module.less'
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
import {
|
|
import {
|
|
@@ -11,6 +37,7 @@ import {
|
|
removeListenerMessage
|
|
removeListenerMessage
|
|
} from '@/helpers/native-message'
|
|
} from '@/helpers/native-message'
|
|
import iconLook from './image/look.svg'
|
|
import iconLook from './image/look.svg'
|
|
|
|
+import iconCachePoint from './image/icon-cache-point.png'
|
|
import iconCourse from './image/icon-course.png'
|
|
import iconCourse from './image/icon-course.png'
|
|
import iconCourseLock from './image/icon-course-lock.png'
|
|
import iconCourseLock from './image/icon-course-lock.png'
|
|
import iconTip from './image/iconTip.png'
|
|
import iconTip from './image/iconTip.png'
|
|
@@ -39,7 +66,8 @@ export default defineComponent({
|
|
name: '',
|
|
name: '',
|
|
des: ''
|
|
des: ''
|
|
},
|
|
},
|
|
- list: [] as any
|
|
|
|
|
|
+ list: [] as any,
|
|
|
|
+ isDownloading: false // 是否在下载资源
|
|
})
|
|
})
|
|
|
|
|
|
/** 获取课件详情 */
|
|
/** 获取课件详情 */
|
|
@@ -154,6 +182,19 @@ export default defineComponent({
|
|
|
|
|
|
// 下载中不提示
|
|
// 下载中不提示
|
|
if (item.downloadStatus == 1) {
|
|
if (item.downloadStatus == 1) {
|
|
|
|
+ // 取消下载
|
|
|
|
+ postMessage({ api: 'cancelDownloadCourseware' })
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ postMessage({ api: 'cancelDownloadCourseware' })
|
|
|
|
+ item.downloadStatus = 0
|
|
|
|
+ data.isDownloading = false
|
|
|
|
+ }, 1000)
|
|
|
|
+ showLoadingToast({
|
|
|
|
+ message: '取消中...',
|
|
|
|
+ forbidClick: false,
|
|
|
|
+ loadingType: 'spinner',
|
|
|
|
+ duration: 1000
|
|
|
|
+ })
|
|
return
|
|
return
|
|
}
|
|
}
|
|
// 重新下载
|
|
// 重新下载
|
|
@@ -163,6 +204,17 @@ export default defineComponent({
|
|
}
|
|
}
|
|
data.catchStatus = true
|
|
data.catchStatus = true
|
|
data.catchItem = item
|
|
data.catchItem = item
|
|
|
|
+ // 下载中不提示
|
|
|
|
+ // if (item.downloadStatus == 1) {
|
|
|
|
+ // return
|
|
|
|
+ // }
|
|
|
|
+ // // 重新下载
|
|
|
|
+ // if (item.downloadStatus == 3) {
|
|
|
|
+ // downCatch(item)
|
|
|
|
+ // return
|
|
|
|
+ // }
|
|
|
|
+ // data.catchStatus = true
|
|
|
|
+ // data.catchItem = item
|
|
// try {
|
|
// try {
|
|
// await showConfirmDialog({
|
|
// await showConfirmDialog({
|
|
// message: '当前课程没有缓存,是否缓存?',
|
|
// message: '当前课程没有缓存,是否缓存?',
|
|
@@ -178,6 +230,7 @@ export default defineComponent({
|
|
}
|
|
}
|
|
// 去课件播放
|
|
// 去课件播放
|
|
const gotoPlay = (item: any) => {
|
|
const gotoPlay = (item: any) => {
|
|
|
|
+ data.catchStatus = false
|
|
postMessage({
|
|
postMessage({
|
|
api: 'openWebView',
|
|
api: 'openWebView',
|
|
content: {
|
|
content: {
|
|
@@ -216,6 +269,8 @@ export default defineComponent({
|
|
// 下载缓存
|
|
// 下载缓存
|
|
const downCatch = async (item: any) => {
|
|
const downCatch = async (item: any) => {
|
|
if (browserInfo.isApp) {
|
|
if (browserInfo.isApp) {
|
|
|
|
+ data.catchStatus = false
|
|
|
|
+ data.isDownloading = true
|
|
const res = await postMessage({
|
|
const res = await postMessage({
|
|
api: 'downloadCoursewareToCache',
|
|
api: 'downloadCoursewareToCache',
|
|
content: {
|
|
content: {
|
|
@@ -230,6 +285,9 @@ export default defineComponent({
|
|
// 下载缓存进度
|
|
// 下载缓存进度
|
|
const getProgress = (res: any) => {
|
|
const getProgress = (res: any) => {
|
|
// console.log('🚀 ~ res', res)
|
|
// console.log('🚀 ~ res', res)
|
|
|
|
+ if (!data.isDownloading) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
if (res?.content?.lessonCoursewareDetailId) {
|
|
if (res?.content?.lessonCoursewareDetailId) {
|
|
const { lessonCoursewareDetailId, downloadStatus, progress } = res.content
|
|
const { lessonCoursewareDetailId, downloadStatus, progress } = res.content
|
|
const course = data.list.find(
|
|
const course = data.list.find(
|
|
@@ -241,6 +299,8 @@ export default defineComponent({
|
|
if (downloadStatus == 2) {
|
|
if (downloadStatus == 2) {
|
|
course.hasCache = 1
|
|
course.hasCache = 1
|
|
course.progress = 100
|
|
course.progress = 100
|
|
|
|
+ // 下载完成
|
|
|
|
+ data.isDownloading = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -325,6 +385,15 @@ export default defineComponent({
|
|
{!isLock && String(item.accessScope) === '0' && (
|
|
{!isLock && String(item.accessScope) === '0' && (
|
|
<img class={styles.periodTip} src={iconTip} />
|
|
<img class={styles.periodTip} src={iconTip} />
|
|
)}
|
|
)}
|
|
|
|
+
|
|
|
|
+ {item.hasCache ? (
|
|
|
|
+ <img class={styles.iconCachePoint} src={iconCachePoint} />
|
|
|
|
+ ) : (
|
|
|
|
+ ''
|
|
|
|
+ )}
|
|
|
|
+ {item.downloadStatus === 1 && (
|
|
|
|
+ <div class={styles.downloading}>{`${item.progress || 0}%`}</div>
|
|
|
|
+ )}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
),
|
|
),
|
|
@@ -341,7 +410,6 @@ export default defineComponent({
|
|
<>
|
|
<>
|
|
{item.hasCache ? (
|
|
{item.hasCache ? (
|
|
<Button
|
|
<Button
|
|
- disabled={isLock}
|
|
|
|
class={[
|
|
class={[
|
|
styles.baseBtn,
|
|
styles.baseBtn,
|
|
isLock ? styles.disable : styles.look
|
|
isLock ? styles.disable : styles.look
|
|
@@ -351,20 +419,13 @@ export default defineComponent({
|
|
</Button>
|
|
</Button>
|
|
) : (
|
|
) : (
|
|
<Button
|
|
<Button
|
|
- disabled={isLock}
|
|
|
|
class={[
|
|
class={[
|
|
styles.baseBtn,
|
|
styles.baseBtn,
|
|
isLock ? styles.disable : styles.down,
|
|
isLock ? styles.disable : styles.down,
|
|
item.downloadStatus ? styles.downing : ''
|
|
item.downloadStatus ? styles.downing : ''
|
|
]}
|
|
]}
|
|
>
|
|
>
|
|
- {item.downloadStatus === 1
|
|
|
|
- ? `${item.progress || 0}%`
|
|
|
|
- : item.downloadStatus === 2
|
|
|
|
- ? '成功'
|
|
|
|
- : item.downloadStatus === 3
|
|
|
|
- ? '重试'
|
|
|
|
- : '下载'}
|
|
|
|
|
|
+ {item.downloadStatus === 1 ? `取消下载` : '查看'}
|
|
</Button>
|
|
</Button>
|
|
)}
|
|
)}
|
|
</>
|
|
</>
|
|
@@ -385,29 +446,23 @@ export default defineComponent({
|
|
{data.loading && <OLoading />}
|
|
{data.loading && <OLoading />}
|
|
{!data.loading && !data.list.length && <OEmpty tips="暂无内容" />}
|
|
{!data.loading && !data.list.length && <OEmpty tips="暂无内容" />}
|
|
|
|
|
|
- <Dialog
|
|
|
|
- v-model:show={data.catchStatus}
|
|
|
|
- showCancelButton
|
|
|
|
- message={'当前课程没有缓存,是否缓存?'}
|
|
|
|
- closeOnClickOverlay
|
|
|
|
- class={styles.courseDialog}
|
|
|
|
- onConfirm={() => {
|
|
|
|
- downCatch(data.catchItem)
|
|
|
|
- }}
|
|
|
|
- onCancel={() => {
|
|
|
|
- gotoPlay(data.catchItem)
|
|
|
|
- }}
|
|
|
|
- >
|
|
|
|
- {{
|
|
|
|
- title: () => (
|
|
|
|
- <Icon
|
|
|
|
- name="cross"
|
|
|
|
- class={styles.iconCross}
|
|
|
|
- onClick={() => (data.catchStatus = false)}
|
|
|
|
- />
|
|
|
|
- )
|
|
|
|
- }}
|
|
|
|
- </Dialog>
|
|
|
|
|
|
+ <Popup v-model:show={data.catchStatus} round class={styles.courseDialog}>
|
|
|
|
+ <i class={styles.iconClose} onClick={() => (data.catchStatus = false)}></i>
|
|
|
|
+ <div class={styles.title}>下载提醒</div>
|
|
|
|
+
|
|
|
|
+ <div class={styles.content}>
|
|
|
|
+ 您尚未下载课件内容,为了更加流畅的学习体验,推荐您下载后观看课件。
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class={styles.popupBtnGroup}>
|
|
|
|
+ <Button round onClick={() => gotoPlay(data.catchItem)}>
|
|
|
|
+ 直接观看
|
|
|
|
+ </Button>
|
|
|
|
+ <Button round type="primary" onClick={() => downCatch(data.catchItem)}>
|
|
|
|
+ 下载课件
|
|
|
|
+ </Button>
|
|
|
|
+ </div>
|
|
|
|
+ </Popup>
|
|
</div>
|
|
</div>
|
|
)
|
|
)
|
|
}
|
|
}
|