This commit is contained in:
2026-10-07 02:34:58 +07:00
parent 60ee1f0a4f
commit cfbd4a7e3b
2 changed files with 26 additions and 23 deletions
+1 -1
View File
@@ -5,7 +5,7 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Вечерний детектив</title> <title>Вечерний детектив</title>
<script type="module" crossorigin src="/assets/index-DyRlptq3.js"></script> <script type="module" crossorigin src="/assets/index-yC63TaCs.js"></script>
<link rel="modulepreload" crossorigin href="/assets/client-BPUTdqiR.js"> <link rel="modulepreload" crossorigin href="/assets/client-BPUTdqiR.js">
<link rel="modulepreload" crossorigin href="/assets/light-CAboqKml.js"> <link rel="modulepreload" crossorigin href="/assets/light-CAboqKml.js">
<link rel="modulepreload" crossorigin href="/assets/light-p8ayFy8X.js"> <link rel="modulepreload" crossorigin href="/assets/light-p8ayFy8X.js">
+25 -22
View File
@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { NAlert, NButton, NFlex, NInput, NInputNumber, NSelect, NSwitch, NTag, NUpload, type UploadFileInfo } from 'naive-ui' import { NAlert, NButton, NFlex, NInput, NInputNumber, NSelect, NSwitch, NUpload, type UploadFileInfo } from 'naive-ui'
import { ref } from 'vue' import { ref } from 'vue'
import type { MusicState, Playlist, ScreenState } from '@/api/generated/crabs/evening_detective_server' import type { MusicState, Playlist, ScreenState } from '@/api/generated/crabs/evening_detective_server'
@@ -30,6 +30,11 @@ const playlistName = ref('')
function uploadTrack(options: { file: UploadFileInfo }) { function uploadTrack(options: { file: UploadFileInfo }) {
if (options.file.file) emit('uploadTrack', options.file.file) if (options.file.file) emit('uploadTrack', options.file.file)
} }
function selectTrack(index: number) {
if (index === props.music?.trackIndex) return
emit('setMusic', { trackIndex: index, positionMs: 0 })
}
</script> </script>
<template> <template>
@@ -114,22 +119,24 @@ function uploadTrack(options: { file: UploadFileInfo }) {
<div class="track-main"> <div class="track-main">
<span class="track-number">{{ index + 1 }}</span> <span class="track-number">{{ index + 1 }}</span>
<span class="track-details"> <span class="track-details">
<span class="track-name">{{ track.name || track.filename || `Трек ${index + 1}` }}</span> <span class="track-name">{{ track.name || `Трек ${index + 1}` }}</span>
<span class="track-filename">{{ track.filename }}</span>
</span> </span>
</div> </div>
<n-flex align="center" class="track-actions"> <n-flex align="center" class="track-actions">
<n-tag v-if="index === (props.music.trackIndex ?? 0)" type="success" size="small">
{{ props.music.playback === 'MUSIC_PLAYBACK_PLAYING' ? 'Играет' : 'Выбран' }}
</n-tag>
<n-button <n-button
v-else
size="small" size="small"
type="primary" :type="index === (props.music.trackIndex ?? 0) ? 'success' : 'primary'"
ghost ghost
@click="emit('setMusic', { trackIndex: index, positionMs: 0 })" :class="{ 'track-switch-active': index === (props.music.trackIndex ?? 0) }"
@click="selectTrack(index)"
> >
Включить {{
index === (props.music.trackIndex ?? 0)
? props.music.playback === 'MUSIC_PLAYBACK_PLAYING'
? 'Играет'
: 'Выбран'
: 'Включить'
}}
</n-button> </n-button>
<n-button size="small" type="error" ghost @click="emit('deleteTrack', track.ID!)"> <n-button size="small" type="error" ghost @click="emit('deleteTrack', track.ID!)">
Удалить Удалить
@@ -198,7 +205,7 @@ function uploadTrack(options: { file: UploadFileInfo }) {
} }
.volume-input { .volume-input {
width: 96px; width: 108px;
} }
.screen-row { .screen-row {
@@ -254,15 +261,15 @@ function uploadTrack(options: { file: UploadFileInfo }) {
align-items: center; align-items: center;
display: flex; display: flex;
flex: 1; flex: 1;
gap: 12px;
overflow: hidden; overflow: hidden;
padding-left: 8px;
} }
.track-number { .track-number {
color: #aaa; color: #aaa;
flex: 0 0 28px; flex: 0 0 20px;
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
text-align: center; text-align: left;
} }
.track-details { .track-details {
@@ -278,17 +285,14 @@ function uploadTrack(options: { file: UploadFileInfo }) {
white-space: nowrap; white-space: nowrap;
} }
.track-filename {
color: #aaa;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.track-actions { .track-actions {
flex: 0 0 auto; flex: 0 0 auto;
} }
.track-switch-active {
font-weight: 600;
}
@media (width < 1024px) { @media (width < 1024px) {
.track-list { .track-list {
padding: 0; padding: 0;
@@ -302,7 +306,6 @@ function uploadTrack(options: { file: UploadFileInfo }) {
} }
.track-main { .track-main {
padding-left: 0;
width: 100%; width: 100%;
} }