Showing
2 changed files
with
63 additions
and
59 deletions
| ... | @@ -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" /> |
| 15 | - src="https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg" /> | 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 | | 22 | |
| 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> | ... | ... |
-
Please register or login to post a comment