hookehuyr

✨ feat(书籍详情页,视频列表播放全屏优化,细节优化):

...@@ -22,53 +22,56 @@ ...@@ -22,53 +22,56 @@
22 </div> 22 </div>
23 </div> 23 </div>
24 24
25 - <div class="book-video-title"> 25 + <van-sticky>
26 - <van-row> 26 + <div class="book-video-title">
27 - <van-col span="12"> 27 + <van-row>
28 - 作品演绎 28 + <van-col span="12">
29 - <div style="background-color: #F9D95C; width: 70px; height: 4px;"></div> 29 + 作品演绎
30 - </van-col> 30 + <div style="background-color: #F9D95C; width: 70px; height: 4px;"></div>
31 - <van-col span="12"> 31 + </van-col>
32 - <div style="font-size: 1rem; color: #999999; text-align: right;"> 32 + <van-col span="12">
33 - <van-icon :name="icon_video" /> 33 + <div style="font-size: 1rem; color: #999999; text-align: right;">
34 - 54个作品 34 + <van-icon :name="icon_video" />
35 - </div> 35 + 54个作品
36 - </van-col>
37 - </van-row>
38 - </div>
39 -
40 - <div class="book-video-language">
41 - <van-row>
42 - <van-col span="6">
43 - <div @click="toggleLanguage" :class="[check_mandarin ? 'checked' : 'uncheck']">普通话</div>
44 - </van-col>
45 - <van-col span="6">
46 - <div @click="toggleLanguage" :class="[check_localism ? 'checked' : 'uncheck']">方言</div>
47 - </van-col>
48 - <van-col span="12" v-if="check_localism" @click="showPicker = true">
49 - <div class="choose-wrapper">
50 - <div class="text">
51 - &nbsp;{{ chooseLanguage.text }}
52 </div> 36 </div>
53 - <div class="icon"> 37 + </van-col>
54 - <van-icon name="arrow-down" />&nbsp; 38 + </van-row>
39 + </div>
40 + <div class="book-video-language">
41 + <van-row>
42 + <van-col span="6">
43 + <div @click="toggleLanguage" :class="[check_mandarin ? 'checked' : 'uncheck']">普通话</div>
44 + </van-col>
45 + <van-col span="6">
46 + <div @click="toggleLanguage" :class="[check_localism ? 'checked' : 'uncheck']">方言</div>
47 + </van-col>
48 + <van-col span="12" v-if="check_localism" @click="showPicker = true">
49 + <div class="choose-wrapper">
50 + <div class="text">
51 + &nbsp;{{ chooseLanguage.text }}
52 + </div>
53 + <div class="icon">
54 + <van-icon name="arrow-down" />&nbsp;
55 + </div>
55 </div> 56 </div>
56 - </div> 57 + </van-col>
57 - </van-col> 58 + </van-row>
58 - </van-row> 59 + <van-popup v-model:show="showPicker" round position="bottom">
59 - <van-popup v-model:show="showPicker" round position="bottom"> 60 + <van-picker
60 - <van-picker 61 + :columns="columns"
61 - :columns="columns" 62 + :columns-field-names="{ text: 'text', value: 'val', children: 'children' }"
62 - :columns-field-names="{ text: 'text', value: 'val', children: 'children' }" 63 + @cancel="showPicker = false"
63 - @cancel="showPicker = false" 64 + @confirm="onConfirm"
64 - @confirm="onConfirm" 65 + />
65 - /> 66 + </van-popup>
66 - </van-popup> 67 + </div>
67 - </div> 68 + </van-sticky>
68 69
69 <div class="book-video-list"> 70 <div class="book-video-list">
70 <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> 71 <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
71 - <div v-for="item in list" :key="item" style="height: 3rem;">{{ item }}</div> 72 + <template v-for="item in dataList" :key="item" style="height: 3rem;">
73 + <video-card :item="item"></video-card>
74 + </template>
72 </van-list> 75 </van-list>
73 </div> 76 </div>
74 </div> 77 </div>
...@@ -91,7 +94,10 @@ ...@@ -91,7 +94,10 @@
91 </template> 94 </template>
92 95
93 <script setup> 96 <script setup>
97 +import dataList from '@/mock/video_list'
98 +
94 import MyButton from '@/components/MyButton/index.vue' 99 import MyButton from '@/components/MyButton/index.vue'
100 +import VideoCard from '@/components/VideoCard/index.vue'
95 101
96 import icon_video from '@images/video.png' 102 import icon_video from '@images/video.png'
97 import icon_up from '@images/icon-guanbi@2x.png' 103 import icon_up from '@images/icon-guanbi@2x.png'
...@@ -105,6 +111,7 @@ import { ref, reactive, onMounted } from 'vue' ...@@ -105,6 +111,7 @@ import { ref, reactive, onMounted } from 'vue'
105 import { useRoute, useRouter } from 'vue-router' 111 import { useRoute, useRouter } from 'vue-router'
106 import axios from '@/utils/axios'; 112 import axios from '@/utils/axios';
107 import $ from 'jquery' 113 import $ from 'jquery'
114 +import _ from 'lodash'
108 import { Toast } from 'vant'; 115 import { Toast } from 'vant';
109 const $route = useRoute(); 116 const $route = useRoute();
110 const $router = useRouter(); 117 const $router = useRouter();
...@@ -220,6 +227,10 @@ const uploadVideo = () => { ...@@ -220,6 +227,10 @@ const uploadVideo = () => {
220 <script> 227 <script>
221 import mixin from 'common/mixin'; 228 import mixin from 'common/mixin';
222 229
230 +function transCaseList (url, pic) {
231 + return { url, pic }
232 +}
233 +
223 export default { 234 export default {
224 mixins: [mixin.init], 235 mixins: [mixin.init],
225 data() { 236 data() {
...@@ -227,11 +238,17 @@ export default { ...@@ -227,11 +238,17 @@ export default {
227 238
228 } 239 }
229 }, 240 },
230 - mounted() { 241 + created() {
231 - 242 + this.getList()
232 }, 243 },
233 methods: { 244 methods: {
234 - 245 + getList () {
246 + _.each(this.dataList, item => {
247 + let video = item.video && item.video.url ? item.video.url : 'http://static.smartisanos.cn/common/video/t1-ui.mp4';
248 + let cover = item.cover && item.cover.url ? item.cover.url : 'http://static.smartisanos.cn/pr/img/video/video_03_cc87ce5bdb.jpg';
249 + item.options = { video: transCaseList(video, cover), autoplay: false, preload: 'none' }
250 + })
251 + }
235 } 252 }
236 } 253 }
237 </script> 254 </script>
...@@ -240,11 +257,12 @@ export default { ...@@ -240,11 +257,12 @@ export default {
240 @import url('@css/content-bg.less'); 257 @import url('@css/content-bg.less');
241 258
242 .book-detail-page { 259 .book-detail-page {
243 - overflow: auto; 260 + // overflow: auto;
244 261
245 .book-detail { 262 .book-detail {
246 margin: 1rem; 263 margin: 1rem;
247 - margin-top: 1.25rem; 264 + // margin-top: 1.25rem;
265 + margin-top: 0;
248 padding-top: 1rem; 266 padding-top: 1rem;
249 border-radius: 10px; 267 border-radius: 10px;
250 background-color: rgba(255, 255, 255, 1); 268 background-color: rgba(255, 255, 255, 1);
...@@ -278,7 +296,7 @@ export default { ...@@ -278,7 +296,7 @@ export default {
278 296
279 .book-video-language { 297 .book-video-language {
280 padding: 1rem; 298 padding: 1rem;
281 - 299 + background-color: white;
282 .uncheck { 300 .uncheck {
283 background: #F7F7F7; 301 background: #F7F7F7;
284 border-radius: 15px; 302 border-radius: 15px;
...@@ -320,12 +338,13 @@ export default { ...@@ -320,12 +338,13 @@ export default {
320 } 338 }
321 339
322 .book-video-list { 340 .book-video-list {
323 - height: 20rem; 341 + // height: 20rem;
324 - overflow: scroll; 342 + // overflow: scroll;
325 } 343 }
326 } 344 }
327 345
328 .book-bar { 346 .book-bar {
347 + z-index: 999;
329 position: fixed; 348 position: fixed;
330 right: 0; 349 right: 0;
331 bottom: 0; 350 bottom: 0;
......