171
171
<Transition name =" fade" mode =" out-in" >
172
172
<div v-if =" !searchValue" class =" song-list" >
173
173
<SongList :data =" djData" type =" dj" />
174
- <!-- 分页 -->
175
- <Pagination
176
- v-if =" djData?.length"
177
- :totalCount =" totalCount"
178
- :pageNumber =" pageNumber"
179
- @pageNumberChange =" pageNumberChange"
180
- />
181
174
</div >
182
175
<SongList v-else-if =" searchData?.length" :data =" searchData" type =" dj" />
183
176
<n-empty
209
202
import { NIcon } from " naive-ui" ;
210
203
import { useRouter } from " vue-router" ;
211
204
import { storeToRefs } from " pinia" ;
212
- import { siteData , siteSettings } from " @/stores" ;
205
+ import { siteData } from " @/stores" ;
213
206
import { getDjDetail , getDjProgram , likeDj } from " @/api/dj" ;
214
207
import { fuzzySearch } from " @/utils/helper" ;
215
208
import { isLogin } from " @/utils/auth" ;
@@ -221,20 +214,17 @@ import SvgIcon from "@/components/Global/SvgIcon";
221
214
222
215
const router = useRouter ();
223
216
const data = siteData ();
224
- const settings = siteSettings ();
225
217
const { userLikeData } = storeToRefs (data);
226
- const { loadSize } = storeToRefs (settings);
227
218
228
219
// 电台数据
229
220
const djId = ref (router .currentRoute .value .query .id );
230
- const pageNumber = ref (Number (router .currentRoute .value .query ? .page ) || 1 );
231
221
const djDetail = ref (null );
232
222
const djData = ref (null );
233
223
234
224
// 模糊搜索数据
225
+ const loadingMsg = ref (null );
235
226
const searchValue = ref (null );
236
227
const searchData = ref ([]);
237
- const totalCount = ref (0 );
238
228
239
229
// 图标渲染
240
230
const renderIcon = (icon ) => {
@@ -267,23 +257,36 @@ const getDjDetailData = async (id) => {
267
257
const detail = await getDjDetail (id);
268
258
// 基础信息
269
259
djDetail .value = formatData (detail .data , " dj" )[0 ];
260
+ // 获取节目
261
+ await getDjProgramData (djId .value , djDetail .value ? .count );
270
262
} catch (error) {
271
263
console .error (" 获取电台信息出错:" , error);
272
264
$message .error (" 获取电台信息出现错误" );
273
265
}
274
266
};
275
267
276
268
// 获取电台全部节目
277
- const getDjProgramData = async (id , limit = loadSize . value , offset = 0 ) => {
269
+ const getDjProgramData = async (id , count ) => {
278
270
try {
271
+ if (count === 0 ) return (djData .value = " empty" );
272
+ // 是否为超大歌单
273
+ if (count >= 500 ) {
274
+ loadingMsg .value = $message .loading (" 该电台节目数量过多,请稍等" , {
275
+ duration: 0 ,
276
+ });
277
+ }
278
+ // 循环获取
279
+ let offset = 0 ;
279
280
djData .value = [];
280
- const result = await getDjProgram (id, limit, offset);
281
- console .log (result);
282
- // 数据总数
283
- totalCount .value = result .count ;
284
- if (totalCount .value === 0 ) return (djData .value = " empty" );
285
- // 处理数据
286
- djData .value = formatData (result .programs , " dj" );
281
+ while (count === null || offset < count) {
282
+ const result = await getDjProgram (id, 500 , offset);
283
+ const djDetail = formatData (result .programs , " dj" );
284
+ djData .value = djData .value .concat (djDetail);
285
+ offset += 500 ;
286
+ }
287
+ // 关闭加载提示
288
+ loadingMsg .value ? .destroy ();
289
+ loadingMsg .value = null ;
287
290
} catch (error) {
288
291
console .error (" 获取电台节目错误:" , error);
289
292
$message .error (" 获取电台节目出现错误" );
@@ -330,36 +333,8 @@ const likeOrDislike = debounce(async (id) => {
330
333
}
331
334
}, 300 );
332
335
333
- // 页数变化
334
- const pageNumberChange = (page ) => {
335
- router .push ({
336
- path: " /dj" ,
337
- query: { id: djId .value , page },
338
- });
339
- };
340
-
341
- // 监听路由变化
342
- watch (
343
- () => router .currentRoute .value ,
344
- async (val ) => {
345
- if (val .name === " dj" ) {
346
- // 更改参数
347
- pageNumber .value = Number (val .query ? .page ) || 1 ;
348
- djId .value = val .query ? .id ;
349
- // 调用接口
350
- await getDjDetailData (djId .value );
351
- await getDjProgramData (
352
- djId .value ,
353
- loadSize .value ,
354
- (pageNumber .value - 1 ) * settings .loadSize ,
355
- );
356
- }
357
- },
358
- );
359
-
360
336
onMounted (async () => {
361
337
await getDjDetailData (djId .value );
362
- await getDjProgramData (djId .value , loadSize .value , (pageNumber .value - 1 ) * settings .loadSize );
363
338
});
364
339
< / script>
365
340
0 commit comments