feat(schedule)+fix(schedule)+feat(player): 排期管理5项功能 - 紧凑布局/投稿人优先算法/localStorage持久化/备选池修复/播放队列按钮
* fix+style(schedule): ScheduleManager 标签页紧凑布局,头部 min-height 防抖,内容区统间距与移动端适配 * feat(schedule): 新增自动排期策略「按投稿人数优先覆盖」,按 requester+collaborators 数排序分配好时段 * feat(schedule): localStorage 键 voicehub:schedule:auto-config 持久化策略/时段/学期/过滤等7项,onMounted 恢复,watch debounce 500ms 保存 * fix(schedule): songs/index.get.ts 新增 use_pool 查询参数,备选池过滤条件 status=PENDING + song.played=false + song未在任何排期中;ScheduleManager/draft-bulk 创建排期时将池记录 UPDATE 为 ASSIGNED * feat(player): ScheduleManager 工具栏新增「构建播放队列」按钮,按 playDate+playTimeId+sequence 排序后调用 useAudioPlayer.playSong 加载播放列表,支持 confirm 确认与 toast 反馈 * refactor(useSongs): fetchSongs 增加第5参数 usePool,透传 use_pool=true 到 /api/songs
This commit is contained in:
@@ -75,7 +75,8 @@ export const useSongs = () => {
|
||||
silent = false,
|
||||
semester?: string,
|
||||
forceRefresh = false,
|
||||
bypassCache = false
|
||||
bypassCache = false,
|
||||
usePool = false
|
||||
) => {
|
||||
if (!silent) {
|
||||
loading.value = true
|
||||
@@ -88,21 +89,21 @@ export const useSongs = () => {
|
||||
const response = await dedup.dedupedRequest(
|
||||
'songs',
|
||||
async () => {
|
||||
// 构建URL参数
|
||||
const params = new URLSearchParams()
|
||||
if (semester) {
|
||||
params.append('semester', semester)
|
||||
}
|
||||
// 只有当 bypassCache 为 true 时才添加 bypass_cache 参数
|
||||
if (bypassCache) {
|
||||
params.append('bypass_cache', 'true')
|
||||
}
|
||||
if (usePool) {
|
||||
params.append('use_pool', 'true')
|
||||
}
|
||||
if (forceRefresh) {
|
||||
params.append('t', Date.now().toString())
|
||||
}
|
||||
const url = `/api/songs${params.toString() ? '?' + params.toString() : ''}`
|
||||
|
||||
// API请求
|
||||
return await $fetch(url, {
|
||||
...getAuthConfig()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user