hookehuyr

✨ feat(客户端): 完善点赞,订阅,收藏页面

1 <template> 1 <template>
2 - <div class=""></div> 2 + <div class="book-video-list">
3 + <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
4 + <template v-for="item in dataList" :key="item" style="height: 3rem;">
5 + <video-card :item="item"></video-card>
6 + </template>
7 + </van-list>
8 + </div>
3 </template> 9 </template>
4 10
5 <script setup> 11 <script setup>
12 +import dataList from '@/mock/video_list'
13 +import VideoCard from '@/components/VideoCard/index.vue'
14 +
6 import { ref, reactive, onMounted } from 'vue' 15 import { ref, reactive, onMounted } from 'vue'
7 import { useRoute, useRouter } from 'vue-router' 16 import { useRoute, useRouter } from 'vue-router'
8 import axios from '@/utils/axios'; 17 import axios from '@/utils/axios';
...@@ -11,6 +20,29 @@ import { Toast } from 'vant'; ...@@ -11,6 +20,29 @@ import { Toast } from 'vant';
11 const $route = useRoute(); 20 const $route = useRoute();
12 const $router = useRouter(); 21 const $router = useRouter();
13 22
23 +// 处理书籍下作品列表
24 +const list = ref([]);
25 +const loading = ref(false);
26 +const finished = ref(false);
27 +
28 +const onLoad = () => {
29 + // 异步更新数据
30 + // setTimeout 仅做示例,真实场景中一般为 ajax 请求
31 + setTimeout(() => {
32 + for (let i = 0; i < 20; i++) {
33 + list.value.push(list.value.length + 1);
34 + }
35 +
36 + // 加载状态结束
37 + loading.value = false;
38 +
39 + // 数据全部加载完成
40 + if (list.value.length >= 100) {
41 + finished.value = true;
42 + }
43 + }, 1000);
44 +};
45 +
14 onMounted(() => { 46 onMounted(() => {
15 47
16 }) 48 })
......
1 <template> 1 <template>
2 - <div class=""></div> 2 + <div class="book-video-list">
3 + <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
4 + <template v-for="item in dataList" :key="item" style="height: 3rem;">
5 + <video-card :item="item"></video-card>
6 + </template>
7 + </van-list>
8 + </div>
3 </template> 9 </template>
4 10
5 <script setup> 11 <script setup>
12 +import dataList from '@/mock/video_list'
13 +import VideoCard from '@/components/VideoCard/index.vue'
14 +
6 import { ref, reactive, onMounted } from 'vue' 15 import { ref, reactive, onMounted } from 'vue'
7 import { useRoute, useRouter } from 'vue-router' 16 import { useRoute, useRouter } from 'vue-router'
8 import axios from '@/utils/axios'; 17 import axios from '@/utils/axios';
...@@ -11,6 +20,29 @@ import { Toast } from 'vant'; ...@@ -11,6 +20,29 @@ import { Toast } from 'vant';
11 const $route = useRoute(); 20 const $route = useRoute();
12 const $router = useRouter(); 21 const $router = useRouter();
13 22
23 +// 处理书籍下作品列表
24 +const list = ref([]);
25 +const loading = ref(false);
26 +const finished = ref(false);
27 +
28 +const onLoad = () => {
29 + // 异步更新数据
30 + // setTimeout 仅做示例,真实场景中一般为 ajax 请求
31 + setTimeout(() => {
32 + for (let i = 0; i < 20; i++) {
33 + list.value.push(list.value.length + 1);
34 + }
35 +
36 + // 加载状态结束
37 + loading.value = false;
38 +
39 + // 数据全部加载完成
40 + if (list.value.length >= 100) {
41 + finished.value = true;
42 + }
43 + }, 1000);
44 +};
45 +
14 onMounted(() => { 46 onMounted(() => {
15 47
16 }) 48 })
......
1 <template> 1 <template>
2 - <div class=""></div> 2 + <div class="book-list">
3 + <template v-for="(item, key) in items" :key="key">
4 + <book-card :item="item" @on-click="onClick(item)"></book-card>
5 + </template>
6 + </div>
3 </template> 7 </template>
4 8
5 <script setup> 9 <script setup>
10 +import BookCard from '@/components/BookCard/index.vue'
6 import { ref, reactive, onMounted } from 'vue' 11 import { ref, reactive, onMounted } from 'vue'
7 import { useRoute, useRouter } from 'vue-router' 12 import { useRoute, useRouter } from 'vue-router'
8 import axios from '@/utils/axios'; 13 import axios from '@/utils/axios';
...@@ -11,8 +16,15 @@ import { Toast } from 'vant'; ...@@ -11,8 +16,15 @@ import { Toast } from 'vant';
11 const $route = useRoute(); 16 const $route = useRoute();
12 const $router = useRouter(); 17 const $router = useRouter();
13 18
19 +const items = reactive([])
20 +
14 onMounted(() => { 21 onMounted(() => {
15 - 22 + for (let index = 0; index < 20; index++) {
23 + items.push({
24 + id: index,
25 + avatar: 'https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg'
26 + })
27 + }
16 }) 28 })
17 </script> 29 </script>
18 30
......