|
@@ -1,15 +1,159 @@
|
|
-import { Button } from 'vant'
|
|
|
|
|
|
+import request from '@/helpers/request'
|
|
|
|
+import { PullRefresh, Swipe, SwipeItem, Image } from 'vant'
|
|
import { defineComponent } from 'vue'
|
|
import { defineComponent } from 'vue'
|
|
|
|
+import HotAlbum from './components/hot-album'
|
|
|
|
+import MenuList from './components/menu-list'
|
|
|
|
+import Music from './components/music'
|
|
|
|
+import RecommendSage from './components/recommend-sage'
|
|
|
|
+import TheHomeHeader from './components/TheHomeHeader'
|
|
|
|
+import VideoClass from './components/video-class'
|
|
import styles from './index.module.less'
|
|
import styles from './index.module.less'
|
|
|
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
- name: 'home',
|
|
|
|
|
|
+ name: 'home-index',
|
|
|
|
+ props: {
|
|
|
|
+ album: {
|
|
|
|
+ type: Array,
|
|
|
|
+ default: () => {
|
|
|
|
+ return []
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ loading: false,
|
|
|
|
+ height: 'auto' as any,
|
|
|
|
+ banner: [], // BANNER列表
|
|
|
|
+ appMenu: [], // 按钮列表
|
|
|
|
+ albumList: [], // 热门专辑
|
|
|
|
+ musicList: {
|
|
|
|
+ topMusicSheet: [] as any,
|
|
|
|
+ newMusicSheet: [] as any,
|
|
|
|
+ hotMusicSheet: [] as any
|
|
|
|
+ },
|
|
|
|
+ sageList: [], // 推荐达人
|
|
|
|
+ videoList: [] // 视频课
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ this.init()
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ async init() {
|
|
|
|
+ try {
|
|
|
|
+ const res = await request.post('/api-cms/news/app/home', {
|
|
|
|
+ data: {
|
|
|
|
+ clientType: 'STUDENT'
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ const result = res.data || {}
|
|
|
|
+ this.banner = result.banner || []
|
|
|
|
+ this.appMenu = this.arrChange(5, result.appMenu || [])
|
|
|
|
+
|
|
|
|
+ // 热门专辑
|
|
|
|
+ const album = await request.post('/api-student/music/album/list', {
|
|
|
|
+ data: {
|
|
|
|
+ albumStatus: 1,
|
|
|
|
+ clientId: 'STUDENT'
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ this.albumList = album.data.rows || []
|
|
|
|
+
|
|
|
|
+ // 曲谱
|
|
|
|
+ const music = await request.post(
|
|
|
|
+ '/api-student/music/sheet/appMusicSheet',
|
|
|
|
+ {
|
|
|
|
+ data: {}
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ const musicData = music.data || []
|
|
|
|
+ this.musicList = {
|
|
|
|
+ topMusicSheet: this.arrChange(4, musicData.topMusicSheet || []),
|
|
|
|
+ newMusicSheet: this.arrChange(4, musicData.newMusicSheet || []),
|
|
|
|
+ hotMusicSheet: this.arrChange(4, musicData.hotMusicSheet || [])
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const sage = await request.get(
|
|
|
|
+ '/api-student/teacher/queryHotTeacherList'
|
|
|
|
+ )
|
|
|
|
+ this.sageList = sage.data || []
|
|
|
|
+
|
|
|
|
+ const video = await request.get(
|
|
|
|
+ '/api-student/courseSchedule/queryLiveAndVideo'
|
|
|
|
+ )
|
|
|
|
+ console.log(video.data.videoList)
|
|
|
|
+ this.videoList = video.data.videoList || []
|
|
|
|
+ } catch {
|
|
|
|
+ //
|
|
|
|
+ }
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.loading = false
|
|
|
|
+ }, 500)
|
|
|
|
+ },
|
|
|
|
+ arrChange(num: number, arr: any) {
|
|
|
|
+ const newArr = [] as any
|
|
|
|
+ while (arr.length > 0) {
|
|
|
|
+ newArr.push(arr.splice(0, num))
|
|
|
|
+ }
|
|
|
|
+ return newArr
|
|
|
|
+ },
|
|
|
|
+ async onRefresh() {
|
|
|
|
+ await this.init()
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.loading = false
|
|
|
|
+ }, 500)
|
|
|
|
+ }
|
|
|
|
+ },
|
|
render() {
|
|
render() {
|
|
return (
|
|
return (
|
|
- <>
|
|
|
|
- <div class={styles.title}>标题</div>
|
|
|
|
- <Button>首页</Button>
|
|
|
|
- </>
|
|
|
|
|
|
+ <div class={styles.home}>
|
|
|
|
+ <TheHomeHeader
|
|
|
|
+ onCart={() => {
|
|
|
|
+ //
|
|
|
|
+ }}
|
|
|
|
+ onSearch={() => {
|
|
|
|
+ //
|
|
|
|
+ }}
|
|
|
|
+ onMore={() => {
|
|
|
|
+ //
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+
|
|
|
|
+ <PullRefresh
|
|
|
|
+ v-model={this.loading}
|
|
|
|
+ loading-text="正在刷新..."
|
|
|
|
+ success-text="刷新完成"
|
|
|
|
+ onRefresh={() => this.onRefresh()}
|
|
|
|
+ >
|
|
|
|
+ <div class={styles.hotContent}>
|
|
|
|
+ <Swipe class={styles.swipe} autoplay={3000}>
|
|
|
|
+ {this.banner.map((item: any) => (
|
|
|
|
+ <SwipeItem>
|
|
|
|
+ <Image
|
|
|
|
+ class={styles.swipeItemImg}
|
|
|
|
+ src={item.coverImage}
|
|
|
|
+ fit="fill"
|
|
|
|
+ />
|
|
|
|
+ </SwipeItem>
|
|
|
|
+ ))}
|
|
|
|
+ </Swipe>
|
|
|
|
+
|
|
|
|
+ <MenuList productList={this.appMenu} />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <HotAlbum album={this.albumList} />
|
|
|
|
+
|
|
|
|
+ <Music title="推荐曲目" music={this.musicList?.topMusicSheet || []} />
|
|
|
|
+ <Music title="最新曲目" music={this.musicList?.newMusicSheet || []} />
|
|
|
|
+ <Music title="最热曲目" music={this.musicList?.hotMusicSheet || []} />
|
|
|
|
+
|
|
|
|
+ {/* 推荐达人 */}
|
|
|
|
+ <RecommendSage sage={this.sageList} />
|
|
|
|
+
|
|
|
|
+ {/* 精品视频课 */}
|
|
|
|
+ <VideoClass video={this.videoList} />
|
|
|
|
+ </PullRefresh>
|
|
|
|
+ </div>
|
|
)
|
|
)
|
|
}
|
|
}
|
|
-})
|
|
|
|
|
|
+})
|