Showing
5 changed files
with
154 additions
and
104 deletions
| ... | @@ -3,38 +3,35 @@ | ... | @@ -3,38 +3,35 @@ |
| 3 | <div v-if="status === 'PROCESS'" class="status"> | 3 | <div v-if="status === 'PROCESS'" class="status"> |
| 4 | <van-image v-if="item.status === 'ENABLE'" round width="6rem" height="6rem" style="vertical-align: bottom;" | 4 | <van-image v-if="item.status === 'ENABLE'" round width="6rem" height="6rem" style="vertical-align: bottom;" |
| 5 | :src="icon_enable" /> | 5 | :src="icon_enable" /> |
| 6 | - <van-image v-if="item.status === 'REFUSE'" round width="6rem" height="6rem" style="vertical-align: bottom;" | 6 | + <van-image v-if="item.status === 'DISABLE'" round width="6rem" height="6rem" style="vertical-align: bottom;" |
| 7 | :src="icon_refuse" /> | 7 | :src="icon_refuse" /> |
| 8 | <van-image v-if="item.status === 'APPLY'" round width="6rem" height="6rem" style="vertical-align: bottom;" | 8 | <van-image v-if="item.status === 'APPLY'" round width="6rem" height="6rem" style="vertical-align: bottom;" |
| 9 | :src="icon_apply" /> | 9 | :src="icon_apply" /> |
| 10 | </div> | 10 | </div> |
| 11 | - <div class="video-div" :id="'mui-player-' + item.case_id"> | 11 | + <div class="video-div" :id="'mui-player-' + item.id"> |
| 12 | </div> | 12 | </div> |
| 13 | + <div class="control-bar"> | ||
| 13 | <div> | 14 | <div> |
| 14 | <div class="video-bar"> | 15 | <div class="video-bar"> |
| 15 | <van-row align="center"> | 16 | <van-row align="center"> |
| 16 | <van-col span="8"> | 17 | <van-col span="8"> |
| 17 | - <van-image round width="2rem" height="2rem" style="vertical-align: middle;" | 18 | + <van-image round width="2rem" height="2rem" style="vertical-align: middle;" :src="item.cover" /> |
| 18 | - src="https://cdn.jsdelivr.net/npm/@vant/assets/cat.jpeg" /> | 19 | + <span style="font-size: 1.05rem; vertical-align: middle;">{{ item.name }}</span> |
| 19 | - <span style="font-size: 1.05rem; vertical-align: middle;">王忆慈</span> | ||
| 20 | </van-col> | 20 | </van-col> |
| 21 | <van-col span="16"> | 21 | <van-col span="16"> |
| 22 | - <div style="color: #999999; text-align: right;">杨浦民办科技幼稚园 | 藏语</div> | 22 | + <div style="color: #999999; text-align: right;">{{ item.book_name }} | {{ item.localism_type }}</div> |
| 23 | </van-col> | 23 | </van-col> |
| 24 | </van-row> | 24 | </van-row> |
| 25 | </div> | 25 | </div> |
| 26 | </div> | 26 | </div> |
| 27 | <div v-if="status === 'PROCESS'" style="margin-top: 1rem;"> | 27 | <div v-if="status === 'PROCESS'" style="margin-top: 1rem;"> |
| 28 | - <div v-if="item.status === 'REFUSE'" style="padding: 0 1rem 1rem 1rem; font-size: 0.85rem;"> | 28 | + <div v-if="item.status === 'DISABLE'" style="padding: 0 1rem 1rem 1rem; font-size: 0.85rem;"> |
| 29 | <p style="color: #999999; margin-bottom: 0.25rem;">老师留言:</p> | 29 | <p style="color: #999999; margin-bottom: 0.25rem;">老师留言:</p> |
| 30 | - <p>下次我们继续加油,争取有更好的表现哦~</p> | 30 | + <p>{{ item.check_note }}</p> |
| 31 | </div> | 31 | </div> |
| 32 | </div> | 32 | </div> |
| 33 | <div class="book-intro"> | 33 | <div class="book-intro"> |
| 34 | - <div id="book-intro" :class="{ 'van-multi-ellipsis--l3': isToggle }"> | 34 | + <div id="book-intro" :class="{ 'van-multi-ellipsis--l3': isToggle }">{{ item.note }}</div> |
| 35 | - 从前有一只小兔子,总是想要离家出走。有一天他对妈妈说:“我要跑走啦!”“如果你跑走了我就去追你,因为你是我的小宝贝呀!”妈妈说。 | ||
| 36 | - 一场爱的捉迷藏就此展开了 | ||
| 37 | - </div> | ||
| 38 | <div v-if="hasToggle"> | 35 | <div v-if="hasToggle"> |
| 39 | <div v-if="isToggle" @click="onToggle(false)" class="book-toggle-icon">展开 | 36 | <div v-if="isToggle" @click="onToggle(false)" class="book-toggle-icon">展开 |
| 40 | <van-icon style="vertical-align: middle;" size="0.9rem" :name="icon_down" /> | 37 | <van-icon style="vertical-align: middle;" size="0.9rem" :name="icon_down" /> |
| ... | @@ -59,23 +56,29 @@ | ... | @@ -59,23 +56,29 @@ |
| 59 | </van-row> | 56 | </van-row> |
| 60 | </div> | 57 | </div> |
| 61 | </div> | 58 | </div> |
| 59 | + </div> | ||
| 62 | 60 | ||
| 63 | <van-overlay :show="showNotice" z-index="1000"> | 61 | <van-overlay :show="showNotice" z-index="1000"> |
| 64 | <div class="wrapper" @click.stop> | 62 | <div class="wrapper" @click.stop> |
| 65 | <div class="block"> | 63 | <div class="block"> |
| 66 | - <div style="position: absolute; top: -2rem; right: 1rem; font-size: 1.5rem;"><van-icon name="close" color="#FFFFFF" @click="closeNotice" /></div> | 64 | + <div style="position: absolute; top: -2rem; right: 1rem; font-size: 1.5rem;"> |
| 67 | - <div class="van-hairline--bottom" style="color: #222222; font-size: 1.25rem; font-weight: bold; text-align: center; padding-bottom: 1rem;">作品审核建议</div> | 65 | + <van-icon name="close" color="#FFFFFF" @click="closeNotice" /> |
| 66 | + </div> | ||
| 67 | + <div class="van-hairline--bottom" | ||
| 68 | + style="color: #222222; font-size: 1.25rem; font-weight: bold; text-align: center; padding-bottom: 1rem;"> | ||
| 69 | + 作品审核建议</div> | ||
| 68 | <div> | 70 | <div> |
| 69 | - <van-field v-model="message" rows="2" autosize label="" type="textarea" maxlength="200" placeholder="请填写您对小朋友的温馨鼓励" show-word-limit /> | 71 | + <van-field v-model="message" rows="2" autosize label="" type="textarea" maxlength="200" |
| 72 | + placeholder="请填写您对小朋友的温馨鼓励" show-word-limit /> | ||
| 70 | </div> | 73 | </div> |
| 71 | <div style="margin: 3rem 0;"> | 74 | <div style="margin: 3rem 0;"> |
| 72 | - <my-button @on-click="onConfirm" type="primary">确定</my-button> | 75 | + <my-button @on-click="handleAudit('disable')" type="primary">确定</my-button> |
| 73 | </div> | 76 | </div> |
| 74 | </div> | 77 | </div> |
| 75 | </div> | 78 | </div> |
| 76 | </van-overlay> | 79 | </van-overlay> |
| 77 | 80 | ||
| 78 | - <van-dialog v-model:show="show" title="温馨提示" show-cancel-button confirmButtonColor="#F9D95C" @confirm="onPassConfirm"> | 81 | + <van-dialog v-model:show="show" title="温馨提示" show-cancel-button confirmButtonColor="#F9D95C" @confirm="handleAudit('enable')"> |
| 79 | <div style="padding: 1rem; text-align: center;">是否确认审核通过该视频 ?</div> | 82 | <div style="padding: 1rem; text-align: center;">是否确认审核通过该视频 ?</div> |
| 80 | </van-dialog> | 83 | </van-dialog> |
| 81 | </template> | 84 | </template> |
| ... | @@ -84,6 +87,7 @@ | ... | @@ -84,6 +87,7 @@ |
| 84 | import icon_up from '@images/icon-guanbi@2x.png' | 87 | import icon_up from '@images/icon-guanbi@2x.png' |
| 85 | import icon_down from '@images/icon-zhankai@2x.png' | 88 | import icon_down from '@images/icon-zhankai@2x.png' |
| 86 | 89 | ||
| 90 | +// TODO: 让娜娜做一张不是透明的看看效果 | ||
| 87 | import icon_refuse from '@images/icon-jujue@2x.png' | 91 | import icon_refuse from '@images/icon-jujue@2x.png' |
| 88 | import icon_apply from '@images/icon-shenhe@2x.png' | 92 | import icon_apply from '@images/icon-shenhe@2x.png' |
| 89 | import icon_enable from '@images/icon-tongguo@2x.png' | 93 | import icon_enable from '@images/icon-tongguo@2x.png' |
| ... | @@ -92,10 +96,12 @@ import MyButton from '@/components/MyButton/index.vue' | ... | @@ -92,10 +96,12 @@ import MyButton from '@/components/MyButton/index.vue' |
| 92 | import { ref, reactive, onMounted, nextTick, watch, onUpdated } from 'vue' | 96 | import { ref, reactive, onMounted, nextTick, watch, onUpdated } from 'vue' |
| 93 | import 'mui-player/dist/mui-player.min.css' | 97 | import 'mui-player/dist/mui-player.min.css' |
| 94 | import MuiPlayer from 'mui-player' | 98 | import MuiPlayer from 'mui-player' |
| 99 | +import axios from '@/utils/axios'; | ||
| 95 | import _ from 'lodash'; | 100 | import _ from 'lodash'; |
| 96 | import tools from '@/common/tool' | 101 | import tools from '@/common/tool' |
| 97 | 102 | ||
| 98 | import { useRoute, useRouter } from 'vue-router' | 103 | import { useRoute, useRouter } from 'vue-router' |
| 104 | +import { Toast } from 'vant'; | ||
| 99 | const $route = useRoute(); | 105 | const $route = useRoute(); |
| 100 | const $router = useRouter(); | 106 | const $router = useRouter(); |
| 101 | 107 | ||
| ... | @@ -107,32 +113,6 @@ const onToggle = (v) => { // 展开/折叠 | ... | @@ -107,32 +113,6 @@ const onToggle = (v) => { // 展开/折叠 |
| 107 | isToggle.value = v | 113 | isToggle.value = v |
| 108 | } | 114 | } |
| 109 | 115 | ||
| 110 | -const showNotice = ref(false) | ||
| 111 | -const onConfirm = () => { | ||
| 112 | - showNotice.value = false; | ||
| 113 | -} | ||
| 114 | -const closeNotice = () => { | ||
| 115 | - showNotice.value = false; | ||
| 116 | -} | ||
| 117 | - | ||
| 118 | -const show = ref(false); | ||
| 119 | - | ||
| 120 | -const onRefuse = () => { | ||
| 121 | - showNotice.value = true; | ||
| 122 | -} | ||
| 123 | -const onPass = () => { | ||
| 124 | - show.value = true; | ||
| 125 | -} | ||
| 126 | -const onPassConfirm = () => { // 审核通过视频 | ||
| 127 | - console.warn('审核通过视频'); | ||
| 128 | -} | ||
| 129 | -const message = ref('') | ||
| 130 | - | ||
| 131 | -const props = defineProps({ | ||
| 132 | - item: Object, | ||
| 133 | - status: String | ||
| 134 | -}) | ||
| 135 | - | ||
| 136 | onMounted(() => { | 116 | onMounted(() => { |
| 137 | // 判断是否显示简介的展开图标 | 117 | // 判断是否显示简介的展开图标 |
| 138 | nextTick(() => { | 118 | nextTick(() => { |
| ... | @@ -144,10 +124,14 @@ onMounted(() => { | ... | @@ -144,10 +124,14 @@ onMounted(() => { |
| 144 | 124 | ||
| 145 | <script> | 125 | <script> |
| 146 | export default { | 126 | export default { |
| 147 | - // props: ['item', 'status'], | 127 | + props: ['item', 'status'], |
| 148 | data() { | 128 | data() { |
| 149 | return { | 129 | return { |
| 150 | - detail: {} | 130 | + detail: {}, |
| 131 | + mp: '', | ||
| 132 | + message: '', | ||
| 133 | + showNotice: false, | ||
| 134 | + show: false | ||
| 151 | } | 135 | } |
| 152 | }, | 136 | }, |
| 153 | created() { | 137 | created() { |
| ... | @@ -155,10 +139,10 @@ export default { | ... | @@ -155,10 +139,10 @@ export default { |
| 155 | mounted() { | 139 | mounted() { |
| 156 | setTimeout(() => { | 140 | setTimeout(() => { |
| 157 | var mp = new MuiPlayer({ | 141 | var mp = new MuiPlayer({ |
| 158 | - container: '#mui-player-' + this.item.case_id, | 142 | + container: '#mui-player-' + this.item.id, |
| 159 | title: this.item.title, | 143 | title: this.item.title, |
| 160 | - src: this.item.video.url, | 144 | + src: this.item.video, |
| 161 | - poster: this.item.cover.url, | 145 | + poster: this.item.cover, |
| 162 | autoFit: false, | 146 | autoFit: false, |
| 163 | videoAttribute: [ // 声明启用同层播放, 不让会自动全屏播放 | 147 | videoAttribute: [ // 声明启用同层播放, 不让会自动全屏播放 |
| 164 | { attrKey: 'webkit-playsinline', attrValue: 'webkit-playsinline' }, | 148 | { attrKey: 'webkit-playsinline', attrValue: 'webkit-playsinline' }, |
| ... | @@ -166,16 +150,43 @@ export default { | ... | @@ -166,16 +150,43 @@ export default { |
| 166 | { attrKey: 'x5-video-player-type', attrValue: 'h5-page' }, | 150 | { attrKey: 'x5-video-player-type', attrValue: 'h5-page' }, |
| 167 | ] | 151 | ] |
| 168 | }) | 152 | }) |
| 153 | + this.mp = mp; | ||
| 169 | this.detail = _.cloneDeep(this.item) | 154 | this.detail = _.cloneDeep(this.item) |
| 170 | }, 500); | 155 | }, 500); |
| 171 | }, | 156 | }, |
| 172 | methods: { | 157 | methods: { |
| 173 | - setLike() { | 158 | + closeNotice() { |
| 174 | - this.detail.liked = !this.detail.liked | 159 | + this.showNotice = false; |
| 160 | + }, | ||
| 161 | + onRefuse() { // 不通过审核 | ||
| 162 | + this.showNotice = true; | ||
| 163 | + }, | ||
| 164 | + onPass() { // 通过审核 | ||
| 165 | + this.show = true; | ||
| 175 | }, | 166 | }, |
| 176 | - setComment() { | 167 | + handleAudit (status) { |
| 177 | - console.warn('跳转详情页,移动到留言页'); | 168 | + axios.post('/srv/?a=check_prod', { |
| 178 | - console.warn(this.detail.case_id); | 169 | + prod_id: this.detail.id, |
| 170 | + status, | ||
| 171 | + check_note: this.message, | ||
| 172 | + }) | ||
| 173 | + .then(res => { | ||
| 174 | + if (res.data.code === 1) { | ||
| 175 | + Toast.success('操作成功'); | ||
| 176 | + this.message = ''; | ||
| 177 | + this.showNotice = false; | ||
| 178 | + this.show = false; | ||
| 179 | + } else { | ||
| 180 | + console.warn(res); | ||
| 181 | + Toast({ | ||
| 182 | + icon: 'close', | ||
| 183 | + message: res.data.msg | ||
| 184 | + }); | ||
| 185 | + } | ||
| 186 | + }) | ||
| 187 | + .catch(err => { | ||
| 188 | + console.error(err); | ||
| 189 | + }) | ||
| 179 | } | 190 | } |
| 180 | } | 191 | } |
| 181 | } | 192 | } | ... | ... |
| ... | @@ -27,6 +27,7 @@ export const useUnwatchList = () => { | ... | @@ -27,6 +27,7 @@ export const useUnwatchList = () => { |
| 27 | .then(res => { | 27 | .then(res => { |
| 28 | if (res.data.code === 1) { | 28 | if (res.data.code === 1) { |
| 29 | prod_list.value = _.concat(prod_list.value, res.data.data.prod); | 29 | prod_list.value = _.concat(prod_list.value, res.data.data.prod); |
| 30 | + prod_list.value = _.uniqBy(prod_list.value, 'id'); | ||
| 30 | offset.value = prod_list.value.length; | 31 | offset.value = prod_list.value.length; |
| 31 | loading.value = false; | 32 | loading.value = false; |
| 32 | // 数据全部加载完成 | 33 | // 数据全部加载完成 | ... | ... |
| ... | @@ -102,6 +102,7 @@ export const useVideoList = ($route) => { | ... | @@ -102,6 +102,7 @@ export const useVideoList = ($route) => { |
| 102 | if (res.data.code === 1) { | 102 | if (res.data.code === 1) { |
| 103 | bookInfo.value = res.data.data; | 103 | bookInfo.value = res.data.data; |
| 104 | prod_list.value = _.concat(prod_list.value, res.data.data.prod_list); | 104 | prod_list.value = _.concat(prod_list.value, res.data.data.prod_list); |
| 105 | + prod_list.value = _.uniqBy(prod_list.value, 'id'); | ||
| 105 | offset.value = prod_list.value.length; | 106 | offset.value = prod_list.value.length; |
| 106 | loading.value = false; | 107 | loading.value = false; |
| 107 | // 数据全部加载完成 | 108 | // 数据全部加载完成 | ... | ... |
| ... | @@ -2,10 +2,10 @@ | ... | @@ -2,10 +2,10 @@ |
| 2 | <div class=""> | 2 | <div class=""> |
| 3 | <van-tabs v-model:active="active" sticky @click-tab="onClickTab" color="#F9D95C" background="#F7F7F7" | 3 | <van-tabs v-model:active="active" sticky @click-tab="onClickTab" color="#F9D95C" background="#F7F7F7" |
| 4 | title-active-color="#222222" title-inactive-color="#777777"> | 4 | title-active-color="#222222" title-inactive-color="#777777"> |
| 5 | - <van-tab title="待审核" badge="24" :title-style="titleStyle"> | 5 | + <van-tab title="待审核" :badge="prod_num" :title-style="titleStyle"> |
| 6 | <template v-if="!active"> | 6 | <template v-if="!active"> |
| 7 | <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> | 7 | <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> |
| 8 | - <template v-for="item in dataList" :key="item" style="height: 3rem;"> | 8 | + <template v-for="item in prod_list" :key="item" style="height: 3rem;"> |
| 9 | <b-video-card :item="item" status="PENDING"></b-video-card> | 9 | <b-video-card :item="item" status="PENDING"></b-video-card> |
| 10 | </template> | 10 | </template> |
| 11 | </van-list> | 11 | </van-list> |
| ... | @@ -14,7 +14,7 @@ | ... | @@ -14,7 +14,7 @@ |
| 14 | <van-tab title="已审核" :title-style="titleStyle"> | 14 | <van-tab title="已审核" :title-style="titleStyle"> |
| 15 | <template v-if="active"> | 15 | <template v-if="active"> |
| 16 | <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> | 16 | <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> |
| 17 | - <template v-for="item in dataList1" :key="item" style="height: 3rem;"> | 17 | + <template v-for="item in prod_list" :key="item" style="height: 3rem;"> |
| 18 | <b-video-card :item="item" status="PROCESS"></b-video-card> | 18 | <b-video-card :item="item" status="PROCESS"></b-video-card> |
| 19 | </template> | 19 | </template> |
| 20 | </van-list> | 20 | </van-list> |
| ... | @@ -25,54 +25,98 @@ | ... | @@ -25,54 +25,98 @@ |
| 25 | </template> | 25 | </template> |
| 26 | 26 | ||
| 27 | <script setup> | 27 | <script setup> |
| 28 | -import dataList from '@/mock/video_list' | ||
| 29 | -import dataList1 from '@/mock/video_list1' | ||
| 30 | import BVideoCard from '@/components/BVideoCard/index.vue' | 28 | import BVideoCard from '@/components/BVideoCard/index.vue' |
| 31 | 29 | ||
| 32 | import { ref, reactive, onMounted } from 'vue' | 30 | import { ref, reactive, onMounted } from 'vue' |
| 33 | import { useRoute, useRouter } from 'vue-router' | 31 | import { useRoute, useRouter } from 'vue-router' |
| 34 | import axios from '@/utils/axios'; | 32 | import axios from '@/utils/axios'; |
| 35 | -import $ from 'jquery' | 33 | +import _ from 'lodash' |
| 36 | import { Toast } from 'vant'; | 34 | import { Toast } from 'vant'; |
| 35 | + | ||
| 37 | const $route = useRoute(); | 36 | const $route = useRoute(); |
| 38 | const $router = useRouter(); | 37 | const $router = useRouter(); |
| 39 | 38 | ||
| 39 | + | ||
| 40 | const titleStyle = { | 40 | const titleStyle = { |
| 41 | fontSize: '1rem' | 41 | fontSize: '1rem' |
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | + | ||
| 45 | +/** | ||
| 46 | + * 重载刷新程序 | ||
| 47 | + */ | ||
| 48 | +const onReload = (v) => { | ||
| 49 | + status.value = v | ||
| 50 | + offset.value = 0 | ||
| 51 | + prod_list.value = [] | ||
| 52 | + loading.value = true; | ||
| 53 | + finished.value = false; | ||
| 54 | + onLoad() | ||
| 55 | +} | ||
| 56 | + | ||
| 44 | const active = ref(0) | 57 | const active = ref(0) |
| 45 | let tabStatus = ref('PENDING') | 58 | let tabStatus = ref('PENDING') |
| 46 | -const onClickTab = () => { | 59 | + |
| 47 | - console.warn(0); | 60 | +const onClickTab = (v) => { |
| 61 | + if (!v.name) { | ||
| 62 | + onReload('apply') | ||
| 63 | + } else { | ||
| 64 | + onReload('checked') | ||
| 65 | + } | ||
| 48 | } | 66 | } |
| 49 | 67 | ||
| 68 | +// 绑定页面数据 | ||
| 69 | +const status = ref('apply'); | ||
| 70 | +const prod_num = ref(''); | ||
| 71 | +const prod_list = ref([]); | ||
| 72 | +const limit = ref(10) | ||
| 73 | +const offset = ref(0) | ||
| 74 | + | ||
| 50 | // 处理书籍下作品列表 | 75 | // 处理书籍下作品列表 |
| 51 | -const list = ref([]); | ||
| 52 | const loading = ref(false); | 76 | const loading = ref(false); |
| 53 | const finished = ref(false); | 77 | const finished = ref(false); |
| 54 | 78 | ||
| 79 | +/** | ||
| 80 | + * 向下滚动查询数据 | ||
| 81 | + */ | ||
| 55 | const onLoad = () => { | 82 | const onLoad = () => { |
| 56 | // 异步更新数据 | 83 | // 异步更新数据 |
| 57 | - // setTimeout 仅做示例,真实场景中一般为 ajax 请求 | 84 | + axios.get('/srv/?a=check_prod_list', { |
| 58 | - setTimeout(() => { | 85 | + params: { |
| 59 | - for (let i = 0; i < 20; i++) { | 86 | + status: status.value, |
| 60 | - list.value.push(list.value.length + 1); | 87 | + limit: limit.value, |
| 88 | + offset: offset.value | ||
| 61 | } | 89 | } |
| 62 | - | 90 | + }) |
| 63 | - // 加载状态结束 | 91 | + .then(res => { |
| 92 | + if (res.data.code === 1) { | ||
| 93 | + prod_num.value = res.data.data.prod_num; | ||
| 94 | + _.each(res.data.data.prod, item => { | ||
| 95 | + item.status = item.status.toUpperCase() | ||
| 96 | + }) | ||
| 97 | + prod_list.value = _.concat(prod_list.value, res.data.data.prod); | ||
| 98 | + prod_list.value = _.uniqBy(prod_list.value, 'id'); | ||
| 99 | + offset.value = prod_list.value.length; | ||
| 64 | loading.value = false; | 100 | loading.value = false; |
| 65 | - | ||
| 66 | // 数据全部加载完成 | 101 | // 数据全部加载完成 |
| 67 | - if (list.value.length >= 100) { | 102 | + if (!res.data.data.prod.length) { |
| 103 | + // 加载状态结束 | ||
| 68 | finished.value = true; | 104 | finished.value = true; |
| 69 | } | 105 | } |
| 70 | - }, 1000); | 106 | + } else { |
| 107 | + console.warn(res); | ||
| 108 | + Toast({ | ||
| 109 | + icon: 'close', | ||
| 110 | + message: res.data.msg | ||
| 111 | + }); | ||
| 112 | + } | ||
| 113 | + }) | ||
| 114 | + .catch(err => { | ||
| 115 | + console.error(err); | ||
| 116 | + }) | ||
| 71 | }; | 117 | }; |
| 72 | 118 | ||
| 73 | - onMounted(() => { | ||
| 74 | 119 | ||
| 75 | - }) | ||
| 76 | </script> | 120 | </script> |
| 77 | 121 | ||
| 78 | <script> | 122 | <script> |
| ... | @@ -80,12 +124,12 @@ import mixin from 'common/mixin'; | ... | @@ -80,12 +124,12 @@ import mixin from 'common/mixin'; |
| 80 | 124 | ||
| 81 | export default { | 125 | export default { |
| 82 | mixins: [mixin.init], | 126 | mixins: [mixin.init], |
| 83 | - data () { | 127 | + data() { |
| 84 | return { | 128 | return { |
| 85 | 129 | ||
| 86 | } | 130 | } |
| 87 | }, | 131 | }, |
| 88 | - mounted () { | 132 | + mounted() { |
| 89 | 133 | ||
| 90 | }, | 134 | }, |
| 91 | methods: { | 135 | methods: { |
| ... | @@ -98,6 +142,7 @@ export default { | ... | @@ -98,6 +142,7 @@ export default { |
| 98 | :global(.van-badge--top-right) { | 142 | :global(.van-badge--top-right) { |
| 99 | right: -10px; | 143 | right: -10px; |
| 100 | } | 144 | } |
| 145 | + | ||
| 101 | :global(.van-sticky--fixed) { | 146 | :global(.van-sticky--fixed) { |
| 102 | z-index: 1000; | 147 | z-index: 1000; |
| 103 | } | 148 | } | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div class=""> | 2 | <div class=""> |
| 3 | - <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad"> | 3 | + <template v-for="item in kgProdList" :key="item" style="height: 3rem;"> |
| 4 | - <template v-for="item in dataList" :key="item" style="height: 3rem;"> | ||
| 5 | <b-video-card :item="item"></b-video-card> | 4 | <b-video-card :item="item"></b-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 BVideoCard from '@/components/BVideoCard/index.vue' | 11 | import BVideoCard from '@/components/BVideoCard/index.vue' |
| 14 | 12 | ||
| 15 | import { ref, reactive, onMounted } from 'vue' | 13 | import { ref, reactive, onMounted } from 'vue' |
| 16 | import { useRoute, useRouter } from 'vue-router' | 14 | import { useRoute, useRouter } from 'vue-router' |
| 17 | import axios from '@/utils/axios'; | 15 | import axios from '@/utils/axios'; |
| 18 | -import $ from 'jquery' | 16 | +import _ from 'lodash' |
| 19 | import { Toast } from 'vant'; | 17 | import { Toast } from 'vant'; |
| 20 | const $route = useRoute(); | 18 | const $route = useRoute(); |
| 21 | const $router = useRouter(); | 19 | const $router = useRouter(); |
| 22 | 20 | ||
| 23 | // 处理书籍下作品列表 | 21 | // 处理书籍下作品列表 |
| 24 | -const list = ref([]); | 22 | +const kgProdList = ref([]) |
| 25 | -const loading = ref(false); | 23 | +axios.get('/srv/?a=kg_prod_list') |
| 26 | -const finished = ref(false); | 24 | +.then(res => { |
| 27 | - | 25 | + if (res.data.code === 1) { |
| 28 | -const onLoad = () => { | 26 | + _.each(res.data.data.prod, item => { |
| 29 | - // 异步更新数据 | 27 | + item.status = item.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 | + kgProdList.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