hookehuyr

✨ feat(我的视频): API接口联调

...@@ -5,45 +5,47 @@ ...@@ -5,45 +5,47 @@
5 <van-image v-if="item.status === 'REFUSE'" round width="6rem" height="6rem" style="vertical-align: bottom;" :src="icon_refuse" /> 5 <van-image v-if="item.status === 'REFUSE'" round width="6rem" height="6rem" style="vertical-align: bottom;" :src="icon_refuse" />
6 <van-image v-if="item.status === 'APPLY'" round width="6rem" height="6rem" style="vertical-align: bottom;" :src="icon_apply" /> 6 <van-image v-if="item.status === 'APPLY'" round width="6rem" height="6rem" style="vertical-align: bottom;" :src="icon_apply" />
7 </div> 7 </div>
8 - <div class="video-div" :id="'mui-player-' + item.case_id"> 8 + <div class="video-div" :id="'mui-player-' + item.id"></div>
9 - </div> 9 + <div v-if="item.status === 'ENABLE'" class="normal-module">
10 - <div v-if="item.status === 'ENABLE'" >
11 <div class="video-bar"> 10 <div class="video-bar">
12 <van-row> 11 <van-row>
13 <van-col span="12" @click="goTo"> 12 <van-col span="12" @click="goTo">
14 - <van-image round width="2rem" height="2rem" style="vertical-align: bottom;" 13 + <van-image round width="2rem" height="2rem" style="vertical-align: middle;" :src="item.avatar" />&nbsp;
15 - src="https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg" />&nbsp; 14 + <span style="font-size: 1.05rem;vertical-align: middle;">{{ item.name }}</span>
16 - <span style="font-size: 1.05rem;">王忆慈</span>
17 </van-col> 15 </van-col>
18 <van-col span="12"> 16 <van-col span="12">
19 <div style="padding: 0.25rem; padding-top: 0.75rem; text-align: right;"> 17 <div style="padding: 0.25rem; padding-top: 0.75rem; text-align: right;">
20 <span @click="setComment"> 18 <span @click="setComment">
21 <van-icon :name="icon_liuyan" size="1.2rem" style="vertical-align: bottom;" /> 19 <van-icon :name="icon_liuyan" size="1.2rem" style="vertical-align: bottom;" />
22 - 67 20 + {{ item.comment_num }}
23 </span> 21 </span>
24 &nbsp;&nbsp;&nbsp; 22 &nbsp;&nbsp;&nbsp;
25 - <span @click="setLike()"> 23 + <span @click="handleAction('like', detail.id)">
26 - <van-icon v-if="!detail.liked" :name="icon_dianzan1" size="1.2rem" style="vertical-align: bottom;" /> 24 + <van-icon v-if="!detail.is_like" :name="icon_dianzan1" size="1.2rem" style="vertical-align: bottom;" />
27 <van-icon v-else :name="icon_dianzan2" size="1.2rem" style="vertical-align: bottom;" /> 25 <van-icon v-else :name="icon_dianzan2" size="1.2rem" style="vertical-align: bottom;" />
28 - 10086 26 + {{ detail.like_num }}
29 </span> 27 </span>
30 </div> 28 </div>
31 </van-col> 29 </van-col>
32 </van-row> 30 </van-row>
33 </div> 31 </div>
34 - <div @click="goTo" style="color: #999999; padding: 0px 1rem 0.5rem;">杨浦民办科技幼稚园 | 藏语</div> 32 + <div @click="goTo" style="color: #999999; padding: 0px 1rem 0.5rem;">{{ item.kg_name }} | {{ item.localism_type }}
33 + </div>
35 </div> 34 </div>
36 - <div v-else style="margin-top: 1rem;"> 35 + <div v-else class="audit-module" style="margin-top: 1rem;">
37 - <div style="color: #222222; padding: 0px 1rem 0.5rem;">杨浦民办科技幼稚园 | 藏语</div> 36 + <div style="color: #222222; padding: 0px 1rem 0.5rem;">{{ item.kg_name }} | {{ item.localism_type }}</div>
38 <div v-if="item.status === 'REFUSE'" style="padding: 0 1rem 1rem 1rem; font-size: 0.85rem;"> 37 <div v-if="item.status === 'REFUSE'" style="padding: 0 1rem 1rem 1rem; font-size: 0.85rem;">
39 <p style="color: #999999; margin-bottom: 0.25rem;">老师留言:</p> 38 <p style="color: #999999; margin-bottom: 0.25rem;">老师留言:</p>
40 - <p>下次我们继续加油,争取有更好的表现哦~</p> 39 + <p>{{ item.check_note }}</p>
41 </div> 40 </div>
42 </div> 41 </div>
43 </div> 42 </div>
44 </template> 43 </template>
45 44
46 <script setup> 45 <script setup>
46 +/**
47 + * 视频组件通用模块
48 + */
47 import icon_dianzan1 from '@images/icon-dianzan01@2x.png' 49 import icon_dianzan1 from '@images/icon-dianzan01@2x.png'
48 import icon_dianzan2 from '@images/icon-dianzan02@2x.png' 50 import icon_dianzan2 from '@images/icon-dianzan02@2x.png'
49 import icon_liuyan from '@images/icon-liuyan@2x.png' 51 import icon_liuyan from '@images/icon-liuyan@2x.png'
...@@ -55,24 +57,23 @@ import { ref, reactive, onMounted } from 'vue' ...@@ -55,24 +57,23 @@ import { ref, reactive, onMounted } from 'vue'
55 import 'mui-player/dist/mui-player.min.css' 57 import 'mui-player/dist/mui-player.min.css'
56 import MuiPlayer from 'mui-player' 58 import MuiPlayer from 'mui-player'
57 import _ from 'lodash'; 59 import _ from 'lodash';
60 +import axios from 'axios';
61 +import { Toast } from 'vant';
58 62
59 import { useRoute, useRouter } from 'vue-router' 63 import { useRoute, useRouter } from 'vue-router'
60 const $route = useRoute(); 64 const $route = useRoute();
61 const $router = useRouter(); 65 const $router = useRouter();
62 66
63 -const goTo = () => { // 跳转作品详情页
64 - $router.push({
65 - path: '/client/videoDetail'
66 - });
67 -}
68 -
69 onMounted(() => { 67 onMounted(() => {
70 }) 68 })
71 69
72 </script> 70 </script>
73 71
74 <script> 72 <script>
73 +import mixin from 'common/mixin';
74 +
75 export default { 75 export default {
76 + mixins: [mixin.likeFn],
76 props: ['item'], 77 props: ['item'],
77 data() { 78 data() {
78 return { 79 return {
...@@ -84,27 +85,36 @@ export default { ...@@ -84,27 +85,36 @@ export default {
84 mounted() { 85 mounted() {
85 setTimeout(() => { 86 setTimeout(() => {
86 var mp = new MuiPlayer({ 87 var mp = new MuiPlayer({
87 - container: '#mui-player-' + this.item.case_id, 88 + container: '#mui-player-' + this.item.id,
88 title: this.item.title, 89 title: this.item.title,
89 - src: this.item.video.url, 90 + src: this.item.video,
90 - poster: this.item.cover.url, 91 + poster: this.item.cover,
91 autoFit: false, 92 autoFit: false,
92 videoAttribute: [ // 声明启用同层播放, 不让会自动全屏播放 93 videoAttribute: [ // 声明启用同层播放, 不让会自动全屏播放
93 - {attrKey:'webkit-playsinline',attrValue:'webkit-playsinline'}, 94 + { attrKey: 'webkit-playsinline', attrValue: 'webkit-playsinline' },
94 - {attrKey:'playsinline',attrValue:'playsinline'}, 95 + { attrKey: 'playsinline', attrValue: 'playsinline' },
95 - {attrKey:'x5-video-player-type',attrValue:'h5-page'}, 96 + { attrKey: 'x5-video-player-type', attrValue: 'h5-page' },
96 ] 97 ]
97 }) 98 })
98 - this.detail = _.cloneDeep(this.item) 99 + this.detail = _.cloneDeep(this.item);
99 }, 500); 100 }, 500);
100 }, 101 },
101 methods: { 102 methods: {
102 - setLike() { 103 + goTo () { // 跳转作品详情页
103 - this.detail.liked = !this.detail.liked 104 + this.$router.push({
105 + path: '/client/videoDetail',
106 + query: {
107 + prod_id: this.item.id
108 + }
109 + });
104 }, 110 },
105 setComment() { 111 setComment() {
106 - console.warn('跳转详情页,移动到留言页'); 112 + this.$router.push({
107 - console.warn(this.detail.case_id); 113 + path: '/client/videoDetail/comment',
114 + query: {
115 + prod_id: this.item.id
116 + }
117 + });
108 } 118 }
109 } 119 }
110 } 120 }
...@@ -126,10 +136,12 @@ export default { ...@@ -126,10 +136,12 @@ export default {
126 border-top-left-radius: 5px; 136 border-top-left-radius: 5px;
127 border-top-right-radius: 5px; 137 border-top-right-radius: 5px;
128 } 138 }
139 +
129 .video-bar { 140 .video-bar {
130 color: #713610; 141 color: #713610;
131 padding: 1rem; 142 padding: 1rem;
132 padding-bottom: 0.5rem; 143 padding-bottom: 0.5rem;
144 +
133 } 145 }
134 } 146 }
135 </style> 147 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <div class="book-video-list"> 2 <div class="book-video-list">
3 - <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> 3 + <template v-for="item in prodList" :key="item" style="height: 3rem;">
4 - <template v-for="item in dataList" :key="item" style="height: 3rem;">
5 <audit-video-card :item="item"></audit-video-card> 4 <audit-video-card :item="item"></audit-video-card>
6 </template> 5 </template>
7 - </van-list> 6 + <div style="height: 2rem;"></div>
8 </div> 7 </div>
9 </template> 8 </template>
10 9
11 <script setup> 10 <script setup>
12 -import dataList from '@/mock/video_list'
13 import AuditVideoCard from '@/components/AuditVideoCard/index.vue' 11 import AuditVideoCard from '@/components/AuditVideoCard/index.vue'
14 12
15 import { ref, reactive, onMounted } from 'vue' 13 import { ref, reactive, onMounted } from 'vue'
...@@ -21,31 +19,25 @@ const $route = useRoute(); ...@@ -21,31 +19,25 @@ const $route = useRoute();
21 const $router = useRouter(); 19 const $router = useRouter();
22 20
23 // 处理书籍下作品列表 21 // 处理书籍下作品列表
24 -const list = ref([]); 22 +const prodList = ref([])
25 -const loading = ref(false); 23 +axios.get('/srv/?a=my_prod')
26 -const finished = ref(false); 24 +.then(res => {
27 - 25 + if (res.data.code === 1) {
28 -const onLoad = () => { 26 + res.data.data.prod.forEach(v => {
29 - // 异步更新数据 27 + v.status = v.status.toUpperCase()
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 -
46 - onMounted(() => {
47 -
48 }) 28 })
29 + prodList.value = res.data.data.prod;
30 + } else {
31 + console.warn(res);
32 + Toast({
33 + icon: 'close',
34 + message: res.data.msg
35 + });
36 + }
37 +})
38 +.catch(err => {
39 + console.error(err);
40 +})
49 </script> 41 </script>
50 42
51 <script> 43 <script>
......