clear unused imports

This commit is contained in:
Megghy
2023-12-19 10:41:04 +08:00
parent 89911c7ad2
commit 283f3e11f4
46 changed files with 330 additions and 514 deletions

View File

@@ -24,14 +24,13 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import ViewerLayout from '@/views/ViewerLayout.vue'
import ManageLayout from '@/views/ManageLayout.vue' import ManageLayout from '@/views/ManageLayout.vue'
import { useRoute } from 'vue-router' import ViewerLayout from '@/views/ViewerLayout.vue'
import { NConfigProvider, NMessageProvider, NNotificationProvider, zhCN, dateZhCN, useOsTheme, darkTheme, NElement, NSpin } from 'naive-ui'
import { computed, onMounted, ref } from 'vue'
import { useStorage } from '@vueuse/core' import { useStorage } from '@vueuse/core'
import { ThemeType, UserInfo } from './api/api-models' import { NConfigProvider, NElement, NMessageProvider, NNotificationProvider, NSpin, darkTheme, dateZhCN, useOsTheme, zhCN } from 'naive-ui'
import { useUser } from './api/user' import { computed } from 'vue'
import { useRoute } from 'vue-router'
import { ThemeType } from './api/api-models'
import OpenLiveLayout from './views/OpenLiveLayout.vue' import OpenLiveLayout from './views/OpenLiveLayout.vue'
const route = useRoute() const route = useRoute()

View File

@@ -1,43 +1,43 @@
<!-- eslint-disable vue/no-mutating-props --> <!-- eslint-disable vue/no-mutating-props -->
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, h, computed, nextTick, watch, ref } from 'vue' import { useAccount } from '@/api/account'
import { DanmakuModel, EventDataTypes, ResponseLiveInfoModel } from '@/api/api-models'
import DanmakuItem from '@/components/DanmakuItem.vue'
import { GetString } from '@/data/DanmakuExport'
import router from '@/router'
import { Info12Filled, Money20Regular, Money24Regular, Search24Filled, Wrench24Filled } from '@vicons/fluent'
import { useDebounceFn, useLocalStorage, useWindowSize } from '@vueuse/core'
import { saveAs } from 'file-saver'
import { List } from 'linqts'
import { import {
NSkeleton, NAvatar,
NButton,
NCard, NCard,
NDivider,
NCheckbox, NCheckbox,
NCheckboxGroup, NCheckboxGroup,
NModal,
NButton,
NPopover,
NIcon,
NInput,
NSpace,
NSwitch,
NInputNumber,
NCollapseTransition,
NTag,
NSpin,
NRadioGroup,
NList,
NListItem,
NAvatar,
NTooltip,
NRadioButton,
NCollapse, NCollapse,
NCollapseItem, NCollapseItem,
NCollapseTransition,
NDivider,
NIcon,
NInput,
NInputNumber,
NList,
NListItem,
NModal,
NPopover,
NRadioButton,
NRadioGroup,
NSkeleton,
NSpace,
NSpin,
NSwitch,
NTag,
NTooltip,
} from 'naive-ui' } from 'naive-ui'
import router from '@/router' import { computed, nextTick, onMounted, ref, watch } from 'vue'
import { Search24Filled, Money20Regular, Wrench24Filled, Money24Regular, Info12Filled, Home24Filled } from '@vicons/fluent'
import { saveAs } from 'file-saver'
import { useLocalStorage, useWindowSize, useDebounceFn } from '@vueuse/core'
import { ResponseLiveInfoModel, DanmakuModel, EventDataTypes } from '@/api/api-models'
import { List } from 'linqts'
import { useAccount } from '@/api/account'
import LiveInfoContainer from './LiveInfoContainer.vue' import LiveInfoContainer from './LiveInfoContainer.vue'
import { GetString } from '@/data/DanmakuExport'
import SimpleVirtualList from './SimpleVirtualList.vue' import SimpleVirtualList from './SimpleVirtualList.vue'
import DanmakuItem from '@/components/DanmakuItem.vue'
enum RankType { enum RankType {
Danmaku, Danmaku,
@@ -117,7 +117,7 @@ watch(
() => showTools, () => showTools,
(newV, oldV) => { (newV, oldV) => {
innerShowTools.value = newV innerShowTools.value = newV
} },
) )
const danmakuRef = computed(() => { const danmakuRef = computed(() => {
//不知道为啥不能直接watch //不知道为啥不能直接watch
@@ -257,7 +257,7 @@ function Export() {
isExporting.value = true isExporting.value = true
saveAs( saveAs(
new Blob([GetString(accountInfo.value, currentLive, onlyExportFilteredDanmakus.value ? danmakus.value : currentDanmakus, exportType.value)], { type: 'text/plain;charset=utf-8' }), new Blob([GetString(accountInfo.value, currentLive, onlyExportFilteredDanmakus.value ? danmakus.value : currentDanmakus, exportType.value)], { type: 'text/plain;charset=utf-8' }),
`${Date.now()}_${currentLive.startAt}_${currentLive.title.replace('_', '-')}_${accountInfo.value?.name}.${exportType.value}` `${Date.now()}_${currentLive.startAt}_${currentLive.title.replace('_', '-')}_${accountInfo.value?.name}.${exportType.value}`,
) )
isExporting.value = false isExporting.value = false
} }

View File

@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { NButton, NDivider, NTooltip, NTag, NIcon, NCard } from 'naive-ui'
import { format } from 'date-fns'
import { Money24Regular, VehicleShip24Filled } from '@vicons/fluent'
import { AccountInfo, DanmakuModel, EventDataTypes } from '@/api/api-models' import { AccountInfo, DanmakuModel, EventDataTypes } from '@/api/api-models'
import { Money24Regular, VehicleShip24Filled } from '@vicons/fluent'
import { format } from 'date-fns'
import { NButton, NCard, NDivider, NIcon, NTag, NTooltip } from 'naive-ui'
function GetSCColor(price: number): string { function GetSCColor(price: number): string {
if (price === 0) return `#2a60b2` if (price === 0) return `#2a60b2`

View File

@@ -1,17 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { FormRules, NForm } from 'naive-ui'; import { FormRules, NForm } from 'naive-ui'
defineProps<{ defineProps<{
rules: FormRules rules: FormRules
}>() }>()
function getItems() { function getItems() {}
}
</script> </script>
<template> <template>
<NForm> <NForm> </NForm>
</NForm>
</template> </template>

View File

@@ -1,8 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { EventDataTypes, ResponseLiveInfoModel } from '@/api/api-models' import { ResponseLiveInfoModel } from '@/api/api-models'
import { Info24Filled } from '@vicons/fluent' import { Info24Filled } from '@vicons/fluent'
import { List } from 'linqts' import { NButton, NDivider, NIcon, NNumberAnimation, NPopover, NSpace, NStatistic, NTag, NTime, NTooltip } from 'naive-ui'
import { NPopover, NSpace, NStatistic, NTime, NDivider, NNumberAnimation, NTag, NButton, NTooltip, NIcon } from 'naive-ui'
import { ref, watch } from 'vue' import { ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
@@ -25,7 +24,7 @@ watch(
() => live, () => live,
(newValue) => { (newValue) => {
defaultDanmakusCount.value = newValue.danmakusCount defaultDanmakusCount.value = newValue.danmakusCount
} },
) )
</script> </script>

View File

@@ -1,31 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { GetSelfAccount } from '@/api/account'
import { AccountInfo } from '@/api/api-models' import { AccountInfo } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants' import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants'
import { GetNotifactions } from '@/data/notifactions'
import { useLocalStorage } from '@vueuse/core' import { useLocalStorage } from '@vueuse/core'
import { import { FormInst, FormItemInst, FormItemRule, FormRules, NAlert, NButton, NCard, NCountdown, NDivider, NForm, NFormItem, NInput, NSpace, NTabPane, NTabs, useMessage } from 'naive-ui'
FormInst,
FormItemInst,
FormItemRule,
FormRules,
NAlert,
NButton,
NCard,
NCountdown,
NDivider,
NForm,
NFormItem,
NInput,
NSpace,
NSpin,
NTab,
NTabPane,
NTabs,
NTime,
useMessage,
} from 'naive-ui'
import { ref } from 'vue' import { ref } from 'vue'
import VueTurnstile from 'vue-turnstile' import VueTurnstile from 'vue-turnstile'
@@ -130,7 +108,7 @@ function onRegisterButtonClick() {
email: registerModel.value.email, email: registerModel.value.email,
password: registerModel.value.password, password: registerModel.value.password,
}, },
[['Turnstile', token.value]] [['Turnstile', token.value]],
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {

View File

@@ -29,7 +29,7 @@ function saveCompoent() {
saveAs(data, props.fileName + '.png') saveAs(data, props.fileName + '.png')
}, },
'image/png', 'image/png',
1 1,
) )
}) })
} }

View File

@@ -1,10 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useWindowSize } from '@vueuse/core'
import { NGrid, NList, NListItem, NSpace, NCard, NEmpty, NGridItem, NText, NTime, NButton, NPopconfirm, NEllipsis, NBadge } from 'naive-ui'
import { ref } from 'vue'
import { ScheduleWeekInfo } from '@/api/api-models' import { ScheduleWeekInfo } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { useWindowSize } from '@vueuse/core'
import { SCHEDULE_API_URL } from '@/data/constants' import { NBadge, NButton, NCard, NEllipsis, NEmpty, NGrid, NGridItem, NList, NListItem, NPopconfirm, NSpace, NText, NTime } from 'naive-ui'
const { width } = useWindowSize() const { width } = useWindowSize()

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { VVirtualList } from 'vueuc'
import type { VirtualListInst } from 'vueuc'
import { NScrollbar } from 'naive-ui/es/_internal'
import type { ScrollbarInst } from 'naive-ui/es/_internal' import type { ScrollbarInst } from 'naive-ui/es/_internal'
import { NScrollbar } from 'naive-ui/es/_internal'
import { computed, onMounted, ref, type PropType } from 'vue' import { computed, onMounted, ref, type PropType } from 'vue'
import type { VirtualListInst } from 'vueuc'
import { VVirtualList } from 'vueuc'
import type { ItemData } from 'vueuc/lib/virtual-list/src/type' import type { ItemData } from 'vueuc/lib/virtual-list/src/type'
const scrollerInstRef = ref<ScrollbarInst | null>(null) const scrollerInstRef = ref<ScrollbarInst | null>(null)

View File

@@ -1,8 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { SongAuthorInfo, SongFrom, SongLanguage, SongsInfo, SongRequestOption } from '@/api/api-models' import { SongFrom, SongLanguage, SongRequestOption, SongsInfo } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { SONG_API_URL } from '@/data/constants' import { SONG_API_URL } from '@/data/constants'
import { refDebounced, useDebounceFn, useLocalStorage } from '@vueuse/core' import FiveSingIcon from '@/svgs/fivesing.svg'
import NeteaseIcon from '@/svgs/netease.svg'
import { Delete24Filled, Info24Filled, NotepadEdit20Filled, Play24Filled, SquareArrowForward24Filled } from '@vicons/fluent'
import { refDebounced, useLocalStorage } from '@vueuse/core'
import { List } from 'linqts' import { List } from 'linqts'
import { import {
DataTableBaseColumn, DataTableBaseColumn,
@@ -10,11 +13,9 @@ import {
DataTableRowKey, DataTableRowKey,
FormInst, FormInst,
FormRules, FormRules,
NAvatar,
NButton, NButton,
NCard, NCard,
NCheckbox, NCheckbox,
NCollapseTransition,
NDataTable, NDataTable,
NDivider, NDivider,
NEllipsis, NEllipsis,
@@ -36,10 +37,7 @@ import {
NTooltip, NTooltip,
useMessage, useMessage,
} from 'naive-ui' } from 'naive-ui'
import { onMounted, h, ref, watch, computed, VNodeChild } from 'vue' import { VNodeChild, computed, h, onMounted, ref, watch } from 'vue'
import { NotepadEdit20Filled, Delete24Filled, Play24Filled, SquareArrowForward24Filled, Info24Filled } from '@vicons/fluent'
import NeteaseIcon from '@/svgs/netease.svg'
import FiveSingIcon from '@/svgs/fivesing.svg'
import SongPlayer from './SongPlayer.vue' import SongPlayer from './SongPlayer.vue'
const props = defineProps<{ const props = defineProps<{

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { SongsInfo, SongFrom } from '@/api/api-models' import { SongFrom, SongsInfo } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { SONG_API_URL } from '@/data/constants' import { SONG_API_URL } from '@/data/constants'
import { NEmpty } from 'naive-ui' import { NEmpty } from 'naive-ui'
import { computed, ref, toRef, toRefs, watch } from 'vue' import { computed, ref, toRef, watch } from 'vue'
import APlayer from 'vue3-aplayer' import APlayer from 'vue3-aplayer'
const props = defineProps<{ const props = defineProps<{

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { VideoCollectTable } from '@/api/api-models' import { VideoCollectTable } from '@/api/api-models'
import router from '@/router' import router from '@/router'
import { Clock24Filled, Clock24Regular, NumberRow24Regular } from '@vicons/fluent' import { Clock24Regular, NumberRow24Regular } from '@vicons/fluent'
import { CountdownProps, NCard, NCountdown, NDivider, NEllipsis, NIcon, NSpace, NTag, NText, NTime, NTooltip } from 'naive-ui' import { CountdownProps, NCard, NCountdown, NDivider, NEllipsis, NIcon, NSpace, NTag, NText, NTime, NTooltip } from 'naive-ui'
const props = defineProps<{ const props = defineProps<{

View File

@@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { NButton, NCard, NInput, NLayoutContent, NSpace, useMessage } from 'naive-ui'
import { computed, ref } from 'vue'
import { useRoute } from 'vue-router'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { ACCOUNT_API_URL } from '@/data/constants' import { ACCOUNT_API_URL } from '@/data/constants'
import router from '@/router' import router from '@/router'
import { NButton, NCard, NInput, NLayoutContent, NSpace, useMessage } from 'naive-ui'
import { computed, ref } from 'vue'
import { useRoute } from 'vue-router'
const password = ref('') const password = ref('')
const password2 = ref('') const password2 = ref('')

View File

@@ -4,28 +4,7 @@ import { FeedbackStatus, FeedbackType, ResponseFeedbackModel } from '@/api/api-m
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { FEEDBACK_API_URL } from '@/data/constants' import { FEEDBACK_API_URL } from '@/data/constants'
import { List } from 'linqts' import { List } from 'linqts'
import { import { NButton, NCard, NCheckbox, NDivider, NEllipsis, NEmpty, NInput, NModal, NRadioButton, NRadioGroup, NSpace, NSpin, NTag, NText, NTime, NTooltip, useMessage } from 'naive-ui'
NButton,
NCard,
NCheckbox,
NDivider,
NEllipsis,
NEmpty,
NForm,
NGrid,
NGridItem,
NInput,
NModal,
NRadioButton,
NRadioGroup,
NSpace,
NSpin,
NTag,
NText,
NTime,
NTooltip,
useMessage,
} from 'naive-ui'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
interface FeedbackModel { interface FeedbackModel {
@@ -101,9 +80,7 @@ async function add() {
<template> <template>
<NSpace align="center"> <NSpace align="center">
<NButton @click="showAddModal = true" type="info">添加反馈</NButton> <NButton @click="showAddModal = true" type="info">添加反馈</NButton>
<NText depth="3"> <NText depth="3"> 或者直接加群 873260337 说也可以 </NText>
或者直接加群 873260337 说也可以
</NText>
</NSpace> </NSpace>
<NDivider> <NDivider>
<NTooltip> <NTooltip>

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { NCard, NDivider, NGradientText, NSpace, NText, NIcon, NGrid, NGridItem, NButton } from 'naive-ui'
import vtb from '@/svgs/ic_vtuber.svg' import vtb from '@/svgs/ic_vtuber.svg'
import { Lottery24Filled, MoneyOff24Filled, MoreHorizontal24Filled, TabletSpeaker24Filled, VehicleShip24Filled, VideoAdd20Filled } from '@vicons/fluent'
import { AnalyticsSharp, Calendar, Chatbox, ListCircle, MusicalNote } from '@vicons/ionicons5' import { AnalyticsSharp, Calendar, Chatbox, ListCircle, MusicalNote } from '@vicons/ionicons5'
import { useWindowSize } from '@vueuse/core' import { useWindowSize } from '@vueuse/core'
import { Lottery24Filled, MoneyOff24Filled, MoreHorizontal24Filled, TabletSpeaker24Filled, VehicleShip24Filled, VideoAdd20Filled } from '@vicons/fluent' import { NButton, NDivider, NGradientText, NGrid, NGridItem, NIcon, NSpace, NText } from 'naive-ui'
const { width } = useWindowSize() const { width } = useWindowSize()

View File

@@ -1,28 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { import { isDarkMode } from '@/Utils'
NButton, import { isLoadingAccount, useAccount } from '@/api/account'
NDivider, import { ThemeType } from '@/api/api-models'
NIcon, import { QueryGetAPI } from '@/api/query'
NLayout, import RegisterAndLogin from '@/components/RegisterAndLogin.vue'
NLayoutContent, import { ACCOUNT_API_URL } from '@/data/constants'
NLayoutHeader,
NPageHeader,
NSpace,
NSpin,
NSwitch,
NText,
NScrollbar,
useMessage,
NMenu,
NLayoutSider,
NAlert,
NBackTop,
NCountdown,
NTooltip,
NPopconfirm,
} from 'naive-ui'
import { h, onMounted, ref } from 'vue'
import { BrowsersOutline, Chatbox, Moon, MusicalNote, Sunny, AnalyticsSharp } from '@vicons/ionicons5'
import { import {
CalendarClock24Filled, CalendarClock24Filled,
Chat24Filled, Chat24Filled,
@@ -35,16 +17,34 @@ import {
VehicleShip24Filled, VehicleShip24Filled,
VideoAdd20Filled, VideoAdd20Filled,
} from '@vicons/fluent' } from '@vicons/fluent'
import { isLoadingAccount, useAccount } from '@/api/account' import { AnalyticsSharp, BrowsersOutline, Chatbox, Moon, MusicalNote, Sunny } from '@vicons/ionicons5'
import RegisterAndLogin from '@/components/RegisterAndLogin.vue'
import { RouterLink, useRoute } from 'vue-router'
import { useElementSize, useStorage } from '@vueuse/core'
import { ACCOUNT_API_URL } from '@/data/constants'
import { QueryGetAPI } from '@/api/query'
import { FunctionTypes, ThemeType } from '@/api/api-models'
import { isDarkMode } from '@/Utils'
import DanmakuLayout from './manage/DanmakuLayout.vue'
import { computed } from '@vue/reactivity' import { computed } from '@vue/reactivity'
import { useElementSize, useStorage } from '@vueuse/core'
import {
NAlert,
NBackTop,
NButton,
NCountdown,
NDivider,
NIcon,
NLayout,
NLayoutContent,
NLayoutHeader,
NLayoutSider,
NMenu,
NPageHeader,
NPopconfirm,
NScrollbar,
NSpace,
NSpin,
NSwitch,
NText,
NTooltip,
useMessage,
} from 'naive-ui'
import { h, onMounted, ref } from 'vue'
import { RouterLink, useRoute } from 'vue-router'
import DanmakuLayout from './manage/DanmakuLayout.vue'
const accountInfo = useAccount() const accountInfo = useAccount()
const message = useMessage() const message = useMessage()

View File

@@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { NButton, NElement, NLayoutContent, NResult } from 'naive-ui' import { NButton, NLayoutContent, NResult } from 'naive-ui'
</script> </script>
<template> <template>
<NLayoutContent tag="div" style="height: 100vh;position: relative;"> <NLayoutContent tag="div" style="height: 100vh; position: relative">
<NResult status="404" title="404" description="页面不存在" style="position: absolute; top: 40%; left: 50%; transform: translate(-50%, -50%);"> <NResult status="404" title="404" description="页面不存在" style="position: absolute; top: 40%; left: 50%; transform: translate(-50%, -50%)">
<template #footer> <template #footer>
<NButton type="primary" size="large" @click="$router.push({ name: 'index' })">返回首页</NButton> <NButton type="primary" size="large" @click="$router.push({ name: 'index' })">返回首页</NButton>
</template> </template>

View File

@@ -1,37 +1,33 @@
<script setup lang="ts"> <script setup lang="ts">
import { isDarkMode } from '@/Utils' import { isDarkMode } from '@/Utils'
import { OpenLiveInfo, ThemeType } from '@/api/api-models' import { ThemeType } from '@/api/api-models'
import DanmakuClient, { AuthInfo } from '@/data/DanmakuClient' import DanmakuClient, { AuthInfo } from '@/data/DanmakuClient'
import { Lottery24Filled, PeopleQueue24Filled, TabletSpeaker24Filled } from '@vicons/fluent' import { Lottery24Filled, PeopleQueue24Filled, TabletSpeaker24Filled } from '@vicons/fluent'
import { Moon, MusicalNote, Sunny } from '@vicons/ionicons5' import { Moon, MusicalNote, Sunny } from '@vicons/ionicons5'
import { useElementSize, useStorage } from '@vueuse/core' import { useElementSize, useStorage } from '@vueuse/core'
import { import {
NAlert,
NAvatar, NAvatar,
NBackTop,
NButton,
NEllipsis,
NIcon, NIcon,
NLayout, NLayout,
NLayoutContent,
NLayoutFooter,
NLayoutHeader, NLayoutHeader,
NLayoutSider, NLayoutSider,
NMenu, NMenu,
NSpace,
NText,
NButton,
NResult,
NPageHeader, NPageHeader,
NSwitch, NResult,
NModal, NSpace,
NEllipsis,
MenuOption,
NSpin, NSpin,
NLayoutContent, NSwitch,
NLayoutFooter,
NBackTop,
NScrollbar,
useMessage,
NDivider,
NTag, NTag,
NAlert, NText,
useMessage,
} from 'naive-ui' } from 'naive-ui'
import { ref, onMounted, h, onUnmounted } from 'vue' import { h, onMounted, onUnmounted, ref } from 'vue'
import { RouterLink, useRoute } from 'vue-router' import { RouterLink, useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
@@ -55,7 +51,7 @@ const menuOptions = [
query: route.query, query: route.query,
}, },
}, },
{ default: () => '抽奖' } { default: () => '抽奖' },
), ),
key: 'open-live-lottery', key: 'open-live-lottery',
icon: renderIcon(Lottery24Filled), icon: renderIcon(Lottery24Filled),
@@ -70,7 +66,7 @@ const menuOptions = [
query: route.query, query: route.query,
}, },
}, },
{ default: () => '点歌' } { default: () => '点歌' },
), ),
key: 'open-live-song-request', key: 'open-live-song-request',
icon: renderIcon(MusicalNote), icon: renderIcon(MusicalNote),
@@ -85,7 +81,7 @@ const menuOptions = [
query: route.query, query: route.query,
}, },
}, },
{ default: () => '排队' } { default: () => '排队' },
), ),
key: 'open-live-queue', key: 'open-live-queue',
icon: renderIcon(PeopleQueue24Filled), icon: renderIcon(PeopleQueue24Filled),
@@ -100,7 +96,7 @@ const menuOptions = [
query: route.query, query: route.query,
}, },
}, },
{ default: () => '读弹幕' } { default: () => '读弹幕' },
), ),
key: 'open-live-speech', key: 'open-live-speech',
icon: renderIcon(TabletSpeaker24Filled), icon: renderIcon(TabletSpeaker24Filled),
@@ -147,7 +143,7 @@ onUnmounted(() => {
<template #extra> <template #extra>
<NSpace align="center"> <NSpace align="center">
<NTag :type="client?.roomAuthInfo.value ? 'success' : 'warning'"> {{ client?.roomAuthInfo.value ? `已连接 | ${client.roomAuthInfo.value?.anchor_info.uname}` : '未连接' }} </NTag> <NTag :type="client?.roomAuthInfo.value ? 'success' : 'warning'"> {{ client?.roomAuthInfo.value ? `已连接 | ${client.roomAuthInfo.value?.anchor_info.uname}` : '未连接' }} </NTag>
<NSwitch :default-value="!isDarkMode()" @update:value="(value: string & number & boolean) => themeType = value ? ThemeType.Light : ThemeType.Dark"> <NSwitch :default-value="!isDarkMode()" @update:value="(value: string & number & boolean) => (themeType = value ? ThemeType.Light : ThemeType.Dark)">
<template #checked> <template #checked>
<NIcon :component="Sunny" /> <NIcon :component="Sunny" />
</template> </template>

View File

@@ -1,12 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { NavigateToNewTab } from '@/Utils' import { NavigateToNewTab } from '@/Utils'
import { VideoCollectCreateModel, VideoCollectDetail, VideoCollectVideo, VideoInfo, VideoStatus } from '@/api/api-models' import { VideoCollectDetail, VideoCollectVideo, VideoInfo, VideoStatus } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { VIDEO_COLLECT_API_URL } from '@/data/constants' import { VIDEO_COLLECT_API_URL } from '@/data/constants'
import { Clock24Regular, Person24Regular, Question24Regular } from '@vicons/fluent' import { Clock24Regular, Person24Regular, Question24Regular } from '@vicons/fluent'
import { useElementSize } from '@vueuse/core' import { useElementSize } from '@vueuse/core'
import { List } from 'linqts' import { List } from 'linqts'
import { NAlert, NButton, NCard, NDivider, NElement, NEllipsis, NIcon, NImage, NLayoutContent, NList, NListItem, NProgress, NResult, NSpace, NText, NTooltip, useMessage } from 'naive-ui' import { NAlert, NButton, NCard, NDivider, NEllipsis, NIcon, NImage, NLayoutContent, NList, NListItem, NProgress, NResult, NSpace, NText, NTooltip, useMessage } from 'naive-ui'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'

View File

@@ -1,37 +1,36 @@
<!-- eslint-disable vue/component-name-in-template-casing --> <!-- eslint-disable vue/component-name-in-template-casing -->
<script setup lang="ts"> <script setup lang="ts">
import { isDarkMode } from '@/Utils'
import { useAccount } from '@/api/account'
import { FunctionTypes, ThemeType, UserInfo } from '@/api/api-models'
import { useUser } from '@/api/user'
import RegisterAndLogin from '@/components/RegisterAndLogin.vue'
import { FETCH_API } from '@/data/constants'
import { CalendarClock24Filled } from '@vicons/fluent'
import { Chatbox, Home, Moon, MusicalNote, Sunny } from '@vicons/ionicons5'
import { useElementSize, useStorage } from '@vueuse/core'
import { import {
MenuOption,
NAvatar, NAvatar,
NBackTop,
NButton,
NEllipsis,
NIcon, NIcon,
NLayout, NLayout,
NLayoutContent,
NLayoutHeader, NLayoutHeader,
NLayoutSider, NLayoutSider,
NMenu, NMenu,
NSpace,
NText,
NButton,
NResult,
NPageHeader,
NSwitch,
NModal, NModal,
NEllipsis, NPageHeader,
MenuOption, NResult,
NSpace,
NSpin, NSpin,
NLayoutContent, NSwitch,
NBackTop, NText,
NScrollbar,
} from 'naive-ui' } from 'naive-ui'
import { computed, h, onMounted, ref } from 'vue' import { computed, h, onMounted, ref } from 'vue'
import { BookOutline as BookIcon, Chatbox, Home, Moon, MusicalNote, PersonOutline as PersonIcon, Sunny, WineOutline as WineIcon } from '@vicons/ionicons5'
import { GetInfo, useUser, useUserWithUId } from '@/api/user'
import { RouterLink, useRoute } from 'vue-router' import { RouterLink, useRoute } from 'vue-router'
import { FunctionTypes, ThemeType, UserInfo } from '@/api/api-models'
import { FETCH_API } from '@/data/constants'
import { useAccount } from '@/api/account'
import RegisterAndLogin from '@/components/RegisterAndLogin.vue'
import { useElementSize, useStorage } from '@vueuse/core'
import { isDarkMode } from '@/Utils'
import { CalendarClock24Filled } from '@vicons/fluent'
const route = useRoute() const route = useRoute()
const id = computed(() => { const id = computed(() => {
@@ -54,8 +53,7 @@ function renderIcon(icon: unknown) {
} }
const menuOptions = ref<MenuOption[]>() const menuOptions = ref<MenuOption[]>()
async function RequestBiliUserData() { async function RequestBiliUserData() {
await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${userInfo.value?.biliId}`) await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${userInfo.value?.biliId}`).then(async (respone) => {
.then(async (respone) => {
let data = await respone.json() let data = await respone.json()
if (data.code == 0) { if (data.code == 0) {
biliUserInfo.value = data.card biliUserInfo.value = data.card
@@ -81,7 +79,7 @@ onMounted(async () => {
name: 'user-index', name: 'user-index',
}, },
}, },
{ default: () => '主页' } { default: () => '主页' },
), ),
key: 'user-index', key: 'user-index',
icon: renderIcon(Home), icon: renderIcon(Home),
@@ -95,7 +93,7 @@ onMounted(async () => {
name: 'user-songList', name: 'user-songList',
}, },
}, },
{ default: () => '歌单' } { default: () => '歌单' },
), ),
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.SongList) ?? -1) > -1, show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.SongList) ?? -1) > -1,
key: 'user-songList', key: 'user-songList',
@@ -110,7 +108,7 @@ onMounted(async () => {
name: 'user-schedule', name: 'user-schedule',
}, },
}, },
{ default: () => '日程' } { default: () => '日程' },
), ),
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.Schedule) ?? -1) > -1, show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.Schedule) ?? -1) > -1,
key: 'user-schedule', key: 'user-schedule',
@@ -125,7 +123,7 @@ onMounted(async () => {
name: 'user-questionBox', name: 'user-questionBox',
}, },
}, },
{ default: () => '棉花糖 (提问箱' } { default: () => '棉花糖 (提问箱' },
), ),
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.QuestionBox) ?? -1) > -1, show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.QuestionBox) ?? -1) > -1,
key: 'user-questionBox', key: 'user-questionBox',
@@ -148,7 +146,7 @@ onMounted(async () => {
<NPageHeader :subtitle="($route.meta.title as string) ?? ''" style="margin-top: 6px"> <NPageHeader :subtitle="($route.meta.title as string) ?? ''" style="margin-top: 6px">
<template #extra> <template #extra>
<NSpace align="center"> <NSpace align="center">
<NSwitch :default-value="!isDarkMode()" @update:value="(value: string & number & boolean) => themeType = value ? ThemeType.Light : ThemeType.Dark"> <NSwitch :default-value="!isDarkMode()" @update:value="(value: string & number & boolean) => (themeType = value ? ThemeType.Light : ThemeType.Dark)">
<template #checked> <template #checked>
<NIcon :component="Sunny" /> <NIcon :component="Sunny" />
</template> </template>

View File

@@ -2,8 +2,7 @@
import { GetSelfAccount, useAccount } from '@/api/account' import { GetSelfAccount, useAccount } from '@/api/account'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { BILI_API_URL } from '@/data/constants' import { BILI_API_URL } from '@/data/constants'
import { NAlert, NButton, NCard, NCode, NInput, NInputNumber, NSpace, NSpin, NText, NCountdown, NInputGroup, useMessage } from 'naive-ui' import { NAlert, NButton, NCard, NCountdown, NInput, NInputGroup, NInputNumber, NSpace, NSpin, NText, useMessage } from 'naive-ui'
import { isTaggedTemplateExpression } from 'typescript'
import { onMounted, ref } from 'vue' import { onMounted, ref } from 'vue'
const message = useMessage() const message = useMessage()

View File

@@ -1,15 +1,15 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { NAlert, NButton, NCard, NCountdown, NDivider, NEllipsis, NIcon, NInput, NInputGroup, NModal, NPopconfirm, NSpace, NTag, NText, NThing, NTime, NTooltip, useMessage } from 'naive-ui' import { BiliAuthCodeStatusType } from '@/api/api-models'
import SettingsManageView from './SettingsManageView.vue'
import { useLocalStorage } from '@vueuse/core'
import { ref } from 'vue'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants' import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants'
import { Question24Regular } from '@vicons/fluent' import { Question24Regular } from '@vicons/fluent'
import { useLocalStorage } from '@vueuse/core'
import { NAlert, NButton, NCard, NCountdown, NDivider, NEllipsis, NIcon, NInput, NInputGroup, NModal, NPopconfirm, NSpace, NTag, NText, NTime, NTooltip, useMessage } from 'naive-ui'
import { ref } from 'vue'
import VueTurnstile from 'vue-turnstile' import VueTurnstile from 'vue-turnstile'
import { BiliAuthCodeStatusType } from '@/api/api-models' import SettingsManageView from './SettingsManageView.vue'
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
const token = ref('') const token = ref('')
const turnstile = ref() const turnstile = ref()
@@ -175,9 +175,7 @@ async function ChangeBili() {
当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用 当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用
<br /> <br />
在我们被限制连接之前满足以上条件的主播无需部署 在我们被限制连接之前满足以上条件的主播无需部署
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> <NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> VtsuruEventFetcher </NButton>
VtsuruEventFetcher
</NButton>
即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊 即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊
</NAlert> </NAlert>
<NCard embedded style="width: 100%"> <NCard embedded style="width: 100%">

View File

@@ -1,9 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { isDarkMode } from '@/Utils'
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
import { AVATAR_URL, BASE_API } from '@/data/constants' import { AVATAR_URL, BASE_API } from '@/data/constants'
import { Grid28Filled, List16Filled } from '@vicons/fluent' import { Grid28Filled, List16Filled } from '@vicons/fluent'
import { format, getDaysInMonth } from 'date-fns' import { format } from 'date-fns'
import { saveAs } from 'file-saver'
import { List } from 'linqts'
import { import {
NAlert, NAlert,
NAvatar, NAvatar,
@@ -16,10 +20,7 @@ import {
NEllipsis, NEllipsis,
NGrid, NGrid,
NGridItem, NGridItem,
NH1,
NH2,
NH3, NH3,
NH5,
NIcon, NIcon,
NLi, NLi,
NRadioButton, NRadioButton,
@@ -34,10 +35,6 @@ import {
useMessage, useMessage,
} from 'naive-ui' } from 'naive-ui'
import { computed, onMounted, ref } from 'vue' import { computed, onMounted, ref } from 'vue'
import { saveAs } from 'file-saver'
import { List } from 'linqts'
import { isDarkMode } from '@/Utils'
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
enum EventType { enum EventType {
Guard, Guard,
@@ -175,9 +172,7 @@ onMounted(() => {
当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用 当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用
<br /> <br />
在我们被限制连接之前满足以上条件的主播无需部署 在我们被限制连接之前满足以上条件的主播无需部署
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> <NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> VtsuruEventFetcher </NButton>
VtsuruEventFetcher
</NButton>
即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊 即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊
</NAlert> </NAlert>
<EventFetcherStatusCard /> <EventFetcherStatusCard />

View File

@@ -2,14 +2,14 @@
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { HISTORY_API_URL } from '@/data/constants' import { HISTORY_API_URL } from '@/data/constants'
import { NAlert, NCard, NSpace, NSpin, useMessage } from 'naive-ui' import { addHours, format, isSameDay, isSameHour, startOfHour } from 'date-fns'
import { onMounted, ref } from 'vue' import { BarChart, LineChart } from 'echarts/charts'
import { DataZoomComponent, GridComponent, LegendComponent, TitleComponent, ToolboxComponent, TooltipComponent } from 'echarts/components'
import { use } from 'echarts/core' import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers' import { CanvasRenderer } from 'echarts/renderers'
import { BarChart, LineChart } from 'echarts/charts' import { NAlert, NCard, NSpace, NSpin, useMessage } from 'naive-ui'
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent, DataZoomComponent, ToolboxComponent } from 'echarts/components' import { onMounted, ref } from 'vue'
import VChart from 'vue-echarts' import VChart from 'vue-echarts'
import { addHours, format, getUnixTime, isSameDay, isSameHour, startOfHour } from 'date-fns'
use([CanvasRenderer, LineChart, TitleComponent, TooltipComponent, LegendComponent, GridComponent, DataZoomComponent, LineChart, ToolboxComponent, BarChart]) use([CanvasRenderer, LineChart, TitleComponent, TooltipComponent, LegendComponent, GridComponent, DataZoomComponent, LineChart, ToolboxComponent, BarChart])

View File

@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import DanmakuClient from '@/data/DanmakuClient' import DanmakuClient from '@/data/DanmakuClient'
import { onMounted, onUnmounted } from 'vue'
import { NAlert } from 'naive-ui' import { NAlert } from 'naive-ui'
import { onMounted, onUnmounted } from 'vue'
import OpenLottery from '../open_live/OpenLottery.vue' import OpenLottery from '../open_live/OpenLottery.vue'
const accountInfo = useAccount() const accountInfo = useAccount()

View File

@@ -2,11 +2,9 @@
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { ResponseLiveInfoModel } from '@/api/api-models' import { ResponseLiveInfoModel } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
import LiveInfoContainer from '@/components/LiveInfoContainer.vue' import LiveInfoContainer from '@/components/LiveInfoContainer.vue'
import { LIVE_API_URL } from '@/data/constants' import { LIVE_API_URL } from '@/data/constants'
import { List } from 'linqts' import { NAlert, NDivider, NList, NListItem, NPagination, NSpace, useMessage } from 'naive-ui'
import { NButton, NDivider, NList, NListItem, NAlert, NPagination, NPopover, NSpace, NStatistic, NTag, NTime, NTooltip, useMessage } from 'naive-ui'
import { ref } from 'vue' import { ref } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'

View File

@@ -4,9 +4,7 @@ import { LotteryUserInfo } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { LOTTERY_API_URL, TURNSTILE_KEY } from '@/data/constants' import { LOTTERY_API_URL, TURNSTILE_KEY } from '@/data/constants'
import { useLocalStorage, useStorage } from '@vueuse/core' import { useLocalStorage, useStorage } from '@vueuse/core'
import { randomInt } from 'crypto'
import { format } from 'date-fns' import { format } from 'date-fns'
import { List } from 'linqts'
import { import {
NAvatar, NAvatar,
NButton, NButton,
@@ -29,15 +27,12 @@ import {
NRadioGroup, NRadioGroup,
NScrollbar, NScrollbar,
NSpace, NSpace,
NTabPane,
NTabs,
NTag, NTag,
NTime, NTime,
NTooltip, NTooltip,
useMessage, useMessage,
useNotification, useNotification,
} from 'naive-ui' } from 'naive-ui'
import { breadcrumbLight } from 'naive-ui/es/breadcrumb/styles'
import { computed, h, ref } from 'vue' import { computed, h, ref } from 'vue'
import VueTurnstile from 'vue-turnstile' import VueTurnstile from 'vue-turnstile'
@@ -152,7 +147,7 @@ async function getCommentsUsers() {
{ {
id: inputDynamicId.value, id: inputDynamicId.value,
}, },
[['Turnstile', token.value]] [['Turnstile', token.value]],
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {
@@ -178,7 +173,7 @@ async function getForwardUsers() {
{ {
id: inputDynamicId.value, id: inputDynamicId.value,
}, },
[['Turnstile', token.value]] [['Turnstile', token.value]],
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {
@@ -263,7 +258,7 @@ function onFinishLottery() {
h( h(
NSpace, NSpace,
{ vertical: true }, { vertical: true },
resultUsers.value?.map((user) => h(NSpace, null, [h(NAvatar, { src: user.avatar + '@32w_32h', imgProps: { referrerpolicy: 'no-referrer' } }), h('span', user.name)])) resultUsers.value?.map((user) => h(NSpace, null, [h(NAvatar, { src: user.avatar + '@32w_32h', imgProps: { referrerpolicy: 'no-referrer' } }), h('span', user.name)])),
), ),
meta: format(new Date(), 'yyyy-MM-dd HH:mm:ss'), meta: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
onAfterLeave: () => { onAfterLeave: () => {

View File

@@ -1,14 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
import { copyToClipboard } from '@/Utils'
import { useAccount } from '@/api/account'
import { QAInfo } from '@/api/api-models' import { QAInfo } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { ACCOUNT_API_URL, QUESTION_API_URL } from '@/data/constants' import { ACCOUNT_API_URL, QUESTION_API_URL } from '@/data/constants'
import router from '@/router'
import { Heart, HeartOutline } from '@vicons/ionicons5' import { Heart, HeartOutline } from '@vicons/ionicons5'
import { saveAs } from 'file-saver'
import html2canvas from 'html2canvas'
import { List } from 'linqts'
import { import {
NButton, NButton,
NCard, NCard,
NCheckbox, NCheckbox,
NDivider, NDivider,
NGradientText,
NIcon, NIcon,
NImage, NImage,
NInput, NInput,
@@ -27,14 +32,8 @@ import {
NTooltip, NTooltip,
useMessage, useMessage,
} from 'naive-ui' } from 'naive-ui'
import { computed, onMounted, ref } from 'vue'
import { List } from 'linqts'
import router from '@/router'
import html2canvas from 'html2canvas'
import QrcodeVue from 'qrcode.vue' import QrcodeVue from 'qrcode.vue'
import { useAccount } from '@/api/account' import { computed, onMounted, ref } from 'vue'
import { saveAs } from 'file-saver'
import { copyToClipboard } from '@/Utils'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const accountInfo = useAccount() const accountInfo = useAccount()
@@ -247,7 +246,7 @@ function saveShareImage() {
saveAs(data, `vtsuru-提问箱-${accountInfo.value?.name}.png`) saveAs(data, `vtsuru-提问箱-${accountInfo.value?.name}.png`)
}, },
'image/png', 'image/png',
1 1,
) )
}) })
} }

View File

@@ -1,30 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { DelBiliBlackList, SaveAccountSettings, SaveEnableFunctions, useAccount } from '@/api/account' import { DelBiliBlackList, SaveAccountSettings, SaveEnableFunctions, useAccount } from '@/api/account'
import {
NButton,
NCard,
NCheckbox,
NCheckboxGroup,
NDivider,
NEmpty,
NForm,
NList,
NListItem,
NModal,
NSelect,
NSpace,
NSpin,
NSwitch,
NTabPane,
NTabs,
NText,
SelectOption,
useMessage,
} from 'naive-ui'
import { Ref, computed, h, onMounted, ref, defineAsyncComponent, onActivated } from 'vue'
import { FunctionTypes, ScheduleWeekInfo, SongFrom, SongLanguage, SongRequestOption, SongsInfo } from '@/api/api-models' import { FunctionTypes, ScheduleWeekInfo, SongFrom, SongLanguage, SongRequestOption, SongsInfo } from '@/api/api-models'
import { QueryPostAPI } from '@/api/query' import { FETCH_API, IndexTemplateMap, ScheduleTemplateMap, SongListTemplateMap } from '@/data/constants'
import { ACCOUNT_API_URL, FETCH_API, IndexTemplateMap, ScheduleTemplateMap, SongListTemplateMap } from '@/data/constants' import { NButton, NCard, NCheckbox, NCheckboxGroup, NDivider, NEmpty, NList, NListItem, NModal, NSelect, NSpace, NSpin, NTabPane, NTabs, NText, SelectOption, useMessage } from 'naive-ui'
import { Ref, computed, h, onActivated, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
interface TemplateDefineTypes { interface TemplateDefineTypes {

View File

@@ -6,6 +6,9 @@ import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import SongList from '@/components/SongList.vue' import SongList from '@/components/SongList.vue'
import { FETCH_API, SONG_API_URL } from '@/data/constants' import { FETCH_API, SONG_API_URL } from '@/data/constants'
import { Info24Filled } from '@vicons/fluent' import { Info24Filled } from '@vicons/fluent'
import { format } from 'date-fns'
import { saveAs } from 'file-saver'
import { List } from 'linqts'
import { import {
FormInst, FormInst,
FormRules, FormRules,
@@ -34,9 +37,6 @@ import {
} from 'naive-ui' } from 'naive-ui'
import { Option } from 'naive-ui/es/transfer/src/interface' import { Option } from 'naive-ui/es/transfer/src/interface'
import { computed, onMounted, ref } from 'vue' import { computed, onMounted, ref } from 'vue'
import { saveAs } from 'file-saver'
import { format } from 'date-fns'
import { List } from 'linqts'
const message = useMessage() const message = useMessage()
const accountInfo = useAccount() const accountInfo = useAccount()

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import DanmakuClient from '@/data/DanmakuClient' import DanmakuClient from '@/data/DanmakuClient'
import { onActivated, onDeactivated, onMounted, onUnmounted } from 'vue'
import MusicRequest from '../open_live/MusicRequest.vue'
import { NAlert } from 'naive-ui' import { NAlert } from 'naive-ui'
import { onMounted, onUnmounted } from 'vue'
import MusicRequest from '../open_live/MusicRequest.vue'
const accountInfo = useAccount() const accountInfo = useAccount()
let client = new DanmakuClient(null) let client = new DanmakuClient(null)

View File

@@ -1,12 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { VideoCollectCreateModel, VideoCollectDetail, VideoCollectTable, VideoCollectVideo, VideoFrom, VideoInfo, VideoStatus } from '@/api/api-models' import { VideoCollectCreateModel, VideoCollectDetail, VideoCollectTable, VideoCollectVideo, VideoInfo, VideoStatus } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue' import VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue'
import { VIDEO_COLLECT_API_URL } from '@/data/constants' import { VIDEO_COLLECT_API_URL } from '@/data/constants'
import router from '@/router' import router from '@/router'
import { Clock24Filled, Person24Filled } from '@vicons/fluent' import { Clock24Filled, Person24Filled } from '@vicons/fluent'
import { useWindowSize } from '@vueuse/core' import { useWindowSize } from '@vueuse/core'
import { formatDuration } from 'date-fns'
import { List } from 'linqts' import { List } from 'linqts'
import { import {
FormRules, FormRules,
@@ -21,7 +20,6 @@ import {
NGrid, NGrid,
NGridItem, NGridItem,
NIcon, NIcon,
NImage,
NInput, NInput,
NInputNumber, NInputNumber,
NModal, NModal,
@@ -30,9 +28,7 @@ import {
NSpace, NSpace,
NTabPane, NTabPane,
NTabs, NTabs,
NTag,
NText, NText,
NThing,
useMessage, useMessage,
} from 'naive-ui' } from 'naive-ui'
import Qrcode from 'qrcode.vue' import Qrcode from 'qrcode.vue'
@@ -143,7 +139,10 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
} }
return videos.length == 0 return videos.length == 0
? h(NEmpty) ? h(NEmpty)
: h(NGrid, { cols: '1 500:2 700:3 900:4 1200:5 ', xGap: '12', yGap: '12', responsive: 'self' }, () => : h(
NGrid,
{ cols: '1 500:2 700:3 900:4 1200:5 ', xGap: '12', yGap: '12', responsive: 'self' },
() =>
videos?.map((v) => videos?.map((v) =>
h(NGridItem, () => h(NGridItem, () =>
h( h(
@@ -165,7 +164,7 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
]), ]),
header: () => header: () =>
h(NButton, { style: 'width: 100%;', text: true, onClick: () => window.open('https://www.bilibili.com/video/' + v.info.bvid, '_blank') }, () => h(NButton, { style: 'width: 100%;', text: true, onClick: () => window.open('https://www.bilibili.com/video/' + v.info.bvid, '_blank') }, () =>
h(NEllipsis, { style: 'max-width: 100%;' }, { default: () => v.video.title, tooltip: () => h('div', { style: 'max-width: 300px' }, v.video.title) }) h(NEllipsis, { style: 'max-width: 100%;' }, { default: () => v.video.title, tooltip: () => h('div', { style: 'max-width: 300px' }, v.video.title) }),
), ),
default: () => default: () =>
h(NScrollbar, { style: 'height: 65px;' }, () => h(NScrollbar, { style: 'height: 65px;' }, () =>
@@ -173,14 +172,14 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
v.info.senders.map((s) => [ v.info.senders.map((s) => [
h('div', { style: 'font-size: 12px;' }, [h('div', `推荐人: ${s.sender ?? '未填写'} [${s.senderId ?? '未填写'}]`), h('div', `推荐理由: ${s.description ?? '未填写'}`)]), h('div', { style: 'font-size: 12px;' }, [h('div', `推荐人: ${s.sender ?? '未填写'} [${s.senderId ?? '未填写'}]`), h('div', `推荐理由: ${s.description ?? '未填写'}`)]),
h(NSpace, { style: 'margin: 0;' }), h(NSpace, { style: 'margin: 0;' }),
]) ]),
) ),
), ),
footer: () => footer(v.info), footer: () => footer(v.info),
} },
) ),
) ),
) ),
) )
} }
const paddingButtonGroup = (v: VideoInfo) => const paddingButtonGroup = (v: VideoInfo) =>

View File

@@ -4,33 +4,7 @@ import { VideoCollectTable } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue' import VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue'
import { VIDEO_COLLECT_API_URL } from '@/data/constants' import { VIDEO_COLLECT_API_URL } from '@/data/constants'
import { Clock24Filled } from '@vicons/fluent' import { FormRules, NButton, NDatePicker, NDivider, NEmpty, NForm, NFormItem, NInput, NInputNumber, NList, NListItem, NModal, NSpace, NSpin, NText, useMessage } from 'naive-ui'
import {
CountdownProps,
FormRules,
NButton,
NCard,
NCountdown,
NDatePicker,
NDivider,
NEllipsis,
NEmpty,
NForm,
NFormItem,
NIcon,
NInput,
NInputNumber,
NList,
NListItem,
NModal,
NSpace,
NSpin,
NTag,
NText,
NTime,
NTooltip,
useMessage,
} from 'naive-ui'
import { ref } from 'vue' import { ref } from 'vue'
const accountInfo = useAccount() const accountInfo = useAccount()

View File

@@ -1,38 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import { AddBiliBlackList, SaveAccountSettings, SaveEnableFunctions, useAccount } from '@/api/account' import { AddBiliBlackList, SaveEnableFunctions, useAccount } from '@/api/account'
import { import { DanmakuUserInfo, EventDataTypes, EventModel, FunctionTypes, Setting_SongRequest, SongRequestFrom, SongRequestInfo, SongRequestStatus, SongsInfo } from '@/api/api-models'
EventDataTypes,
EventModel,
FunctionTypes,
OpenLiveInfo,
Setting_SongRequest,
SongFrom,
SongRequestFrom,
SongRequestInfo,
SongRequestStatus,
DanmakuUserInfo,
SongsInfo,
} from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI, QueryPostAPIWithParams } from '@/api/query' import { QueryGetAPI, QueryPostAPI, QueryPostAPIWithParams } from '@/api/query'
import DanmakuClient, { AuthInfo, DanmakuInfo, RoomAuthInfo, SCInfo } from '@/data/DanmakuClient' import SongPlayer from '@/components/SongPlayer.vue'
import { OPEN_LIVE_API_URL, SONG_API_URL, SONG_REQUEST_API_URL } from '@/data/constants' import DanmakuClient, { DanmakuInfo, RoomAuthInfo, SCInfo } from '@/data/DanmakuClient'
import { import { SONG_REQUEST_API_URL } from '@/data/constants'
Check24Filled, import { Checkmark12Regular, Delete24Filled, Dismiss16Filled, Info24Filled, Mic24Filled, PeopleQueue24Filled, Play24Filled, PresenceBlocked16Regular } from '@vicons/fluent'
Checkmark12Regular,
Delete24Filled,
Dismiss12Filled,
Dismiss16Filled,
Info24Filled,
Mic24Filled,
PeopleQueue24Filled,
Play24Filled,
PresenceBlocked16Regular,
} from '@vicons/fluent'
import { ReloadCircleSharp } from '@vicons/ionicons5' import { ReloadCircleSharp } from '@vicons/ionicons5'
import { useStorage } from '@vueuse/core' import { useStorage } from '@vueuse/core'
import { format, isSameDay } from 'date-fns' import { isSameDay } from 'date-fns'
import { ca } from 'date-fns/locale'
import { number } from 'echarts'
import { List } from 'linqts' import { List } from 'linqts'
import { import {
DataTableColumns, DataTableColumns,
@@ -44,7 +20,6 @@ import {
NCollapseItem, NCollapseItem,
NDataTable, NDataTable,
NDivider, NDivider,
NEllipsis,
NEmpty, NEmpty,
NIcon, NIcon,
NInput, NInput,
@@ -72,8 +47,6 @@ import {
import { computed, h, onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue' import { computed, h, onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import SongRequestOBS from '../obs/SongRequestOBS.vue' import SongRequestOBS from '../obs/SongRequestOBS.vue'
import APlayer from 'vue3-aplayer'
import SongPlayer from '@/components/SongPlayer.vue'
const defaultSettings = { const defaultSettings = {
orderPrefix: '点歌', orderPrefix: '点歌',
@@ -440,7 +413,7 @@ async function updateSettings() {
async function deleteSongs(values: SongRequestInfo[]) { async function deleteSongs(values: SongRequestInfo[]) {
await QueryPostAPI( await QueryPostAPI(
SONG_REQUEST_API_URL + 'del', SONG_REQUEST_API_URL + 'del',
values.map((s) => s.id) values.map((s) => s.id),
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {
@@ -497,7 +470,7 @@ const columns = [
{ {
trigger: () => h(NTag, { bordered: false, size: 'small' }, data.from == SongRequestFrom.Manual ? () => h(NText, { italic: true }, () => '手动添加') : () => data.user?.name), trigger: () => h(NTag, { bordered: false, size: 'small' }, data.from == SongRequestFrom.Manual ? () => h(NText, { italic: true }, () => '手动添加') : () => data.user?.name),
default: () => (data.from == SongRequestFrom.Manual ? '就是主播自己' : data.user?.uid), default: () => (data.from == SongRequestFrom.Manual ? '就是主播自己' : data.user?.uid),
} },
) )
}, },
}, },
@@ -608,7 +581,7 @@ const columns = [
}, },
{ {
icon: () => h(NIcon, { component: ReloadCircleSharp }), icon: () => h(NIcon, { component: ReloadCircleSharp }),
} },
), ),
default: () => '重新放回等待列表', default: () => '重新放回等待列表',
}) })
@@ -630,14 +603,14 @@ const columns = [
}, },
{ {
icon: () => h(NIcon, { component: Delete24Filled }), icon: () => h(NIcon, { component: Delete24Filled }),
} },
), ),
default: () => '删除记录', default: () => '删除记录',
}), }),
default: () => '确定删除?', default: () => '确定删除?',
} },
), ),
] ],
) )
}, },
}, },

View File

@@ -1,9 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, h, onMounted, onUnmounted, ref } from 'vue' import { useAccount } from '@/api/account'
import { useRoute } from 'vue-router' import { OpenLiveLotteryType, OpenLiveLotteryUserInfo, UpdateLiveLotteryUsersModel } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { LOTTERY_API_URL, OPEN_LIVE_API_URL } from '@/data/constants' import DanmakuClient, { DanmakuInfo, GiftInfo, RoomAuthInfo } from '@/data/DanmakuClient'
import { LotteryUserInfo, OpenLiveInfo, OpenLiveLotteryType, OpenLiveLotteryUserInfo, UpdateLiveLotteryUsersModel } from '@/api/api-models' import { LOTTERY_API_URL } from '@/data/constants'
import { Delete24Filled, Info24Filled } from '@vicons/fluent'
import { useLocalStorage, useStorage } from '@vueuse/core'
import { format } from 'date-fns'
import { import {
NAlert, NAlert,
NAvatar, NAvatar,
@@ -22,7 +25,6 @@ import {
NInputGroup, NInputGroup,
NInputGroupLabel, NInputGroupLabel,
NInputNumber, NInputNumber,
NLayoutContent,
NLi, NLi,
NList, NList,
NListItem, NListItem,
@@ -32,7 +34,6 @@ import {
NResult, NResult,
NScrollbar, NScrollbar,
NSpace, NSpace,
NSpin,
NTag, NTag,
NTime, NTime,
NTooltip, NTooltip,
@@ -40,13 +41,9 @@ import {
useMessage, useMessage,
useNotification, useNotification,
} from 'naive-ui' } from 'naive-ui'
import { useAccount } from '@/api/account' import { h, onMounted, onUnmounted, ref } from 'vue'
import ChatClientDirectOpenLive from '@/data/chat/ChatClientDirectOpenLive.js' import { useRoute } from 'vue-router'
import { useLocalStorage, useStorage } from '@vueuse/core'
import { format } from 'date-fns'
import { Delete24Filled, Info24Filled } from '@vicons/fluent'
import LiveLotteryOBS from '../obs/LiveLotteryOBS.vue' import LiveLotteryOBS from '../obs/LiveLotteryOBS.vue'
import DanmakuClient, { AuthInfo, DanmakuInfo, GiftInfo, RoomAuthInfo } from '@/data/DanmakuClient'
interface LotteryOption { interface LotteryOption {
resultCount: number resultCount: number
@@ -227,8 +224,10 @@ function onFinishLottery() {
description: '共' + resultUsers.value?.length + '人', description: '共' + resultUsers.value?.length + '人',
duration: 3000, duration: 3000,
content: () => content: () =>
h(NSpace, { vertical: true }, () => h(
resultUsers.value?.map((user) => h(NSpace, null, () => [h(NAvatar, { src: user.avatar + '@32w_32h', imgProps: { referrerpolicy: 'no-referrer' } }), h('span', user.name)])) NSpace,
{ vertical: true },
() => resultUsers.value?.map((user) => h(NSpace, null, () => [h(NAvatar, { src: user.avatar + '@32w_32h', imgProps: { referrerpolicy: 'no-referrer' } }), h('span', user.name)])),
), ),
meta: format(new Date(), 'yyyy-MM-dd HH:mm:ss'), meta: format(new Date(), 'yyyy-MM-dd HH:mm:ss'),
onAfterLeave: () => { onAfterLeave: () => {
@@ -274,7 +273,7 @@ function onDanmaku(data: DanmakuInfo, command: any) {
fans_medal_wearing_status: data.fans_medal_wearing_status, fans_medal_wearing_status: data.fans_medal_wearing_status,
guard_level: data.guard_level, guard_level: data.guard_level,
}, },
command command,
) )
} }
} }
@@ -290,7 +289,7 @@ function onGift(data: GiftInfo, command: any) {
fans_medal_wearing_status: data.fans_medal_wearing_status, fans_medal_wearing_status: data.fans_medal_wearing_status,
guard_level: data.guard_level, guard_level: data.guard_level,
}, },
command command,
) )
} }
} }

View File

@@ -1,32 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import { AddBiliBlackList, SaveEnableFunctions, useAccount } from '@/api/account' import { AddBiliBlackList, SaveEnableFunctions, useAccount } from '@/api/account'
import { import {
DanmakuUserInfo,
EventDataTypes, EventDataTypes,
EventModel, EventModel,
FunctionTypes, FunctionTypes,
KeywordMatchType, KeywordMatchType,
QueueFrom,
QueueGiftFilterType, QueueGiftFilterType,
QueueSortType, QueueSortType,
Setting_Queue,
QueueFrom,
QueueStatus, QueueStatus,
DanmakuUserInfo,
ResponseQueueModel, ResponseQueueModel,
Setting_Queue,
} from '@/api/api-models' } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI, QueryPostAPIWithParams } from '@/api/query' import { QueryGetAPI, QueryPostAPI, QueryPostAPIWithParams } from '@/api/query'
import DanmakuClient, { AuthInfo, DanmakuInfo, GiftInfo, RoomAuthInfo, SCInfo } from '@/data/DanmakuClient' import DanmakuClient, { DanmakuInfo, GiftInfo, RoomAuthInfo } from '@/data/DanmakuClient'
import { QUEUE_API_URL } from '@/data/constants' import { QUEUE_API_URL } from '@/data/constants'
import { import { Checkmark12Regular, ClipboardTextLtr24Filled, Delete24Filled, Dismiss16Filled, PeopleQueue24Filled, PresenceBlocked16Regular } from '@vicons/fluent'
Checkmark12Regular,
ClipboardTextLtr24Filled,
Delete24Filled,
Dismiss16Filled,
PeopleQueue24Filled,
PresenceBlocked16Regular,
} from '@vicons/fluent'
import { ReloadCircleSharp } from '@vicons/ionicons5' import { ReloadCircleSharp } from '@vicons/ionicons5'
import { useStorage } from '@vueuse/core' import { useStorage } from '@vueuse/core'
import { format, isSameDay } from 'date-fns' import { isSameDay } from 'date-fns'
import { List } from 'linqts' import { List } from 'linqts'
import { import {
DataTableColumns, DataTableColumns,
@@ -145,7 +138,7 @@ const queue = computed(() => {
let list = new List(accountInfo ? originQueue.value : localQueues.value) let list = new List(accountInfo ? originQueue.value : localQueues.value)
.Where( .Where(
(q) => (q) =>
!filterName.value || (filterNameContains.value ? q?.user?.name.toLowerCase().includes(filterName.value.toLowerCase()) == true : q?.user?.name.toLowerCase() == filterName.value.toLowerCase()) !filterName.value || (filterNameContains.value ? q?.user?.name.toLowerCase().includes(filterName.value.toLowerCase()) == true : q?.user?.name.toLowerCase() == filterName.value.toLowerCase()),
) )
.Where((q) => (q?.status ?? QueueStatus.Cancel) < QueueStatus.Finish) .Where((q) => (q?.status ?? QueueStatus.Cancel) < QueueStatus.Finish)
.OrderByDescending((q) => q.from == QueueFrom.Manual) .OrderByDescending((q) => q.from == QueueFrom.Manual)
@@ -165,7 +158,7 @@ const queue = computed(() => {
if (configCanEdit.value ? settings.value.isReverse : isReverse.value) { if (configCanEdit.value ? settings.value.isReverse : isReverse.value) {
list = list.Reverse() list = list.Reverse()
} }
list = list.OrderByDescending((q) => q.status == QueueStatus.Progressing ? 1 : 0) list = list.OrderByDescending((q) => (q.status == QueueStatus.Progressing ? 1 : 0))
return list.ToArray() return list.ToArray()
}) })
const historySongs = computed(() => { const historySongs = computed(() => {
@@ -223,7 +216,7 @@ async function add(danmaku: EventModel) {
const index = originQueue.value.findIndex((q) => q.id == data.data.id) const index = originQueue.value.findIndex((q) => q.id == data.data.id)
if (index > -1) { if (index > -1) {
message.info( message.info(
`${data.data.user?.name} 通过发送礼物再次付费: ¥ ${((data.data?.giftPrice ?? 0) - (originQueue.value[index]?.giftPrice ?? 0)).toFixed(1)}, 当前总计付费: ¥ ${data.data.giftPrice}` `${data.data.user?.name} 通过发送礼物再次付费: ¥ ${((data.data?.giftPrice ?? 0) - (originQueue.value[index]?.giftPrice ?? 0)).toFixed(1)}, 当前总计付费: ¥ ${data.data.giftPrice}`,
) )
originQueue.value.splice(index, 1, data.data) originQueue.value.splice(index, 1, data.data)
} else { } else {
@@ -446,7 +439,7 @@ async function updateSettings() {
async function deleteQueue(values: ResponseQueueModel[]) { async function deleteQueue(values: ResponseQueueModel[]) {
await QueryPostAPI( await QueryPostAPI(
QUEUE_API_URL + 'del', QUEUE_API_URL + 'del',
values.map((s) => s.id) values.map((s) => s.id),
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {
@@ -500,7 +493,7 @@ const columns = [
{ {
trigger: () => data.user?.name, trigger: () => data.user?.name,
default: () => (data.from == QueueFrom.Manual ? '就是主播自己' : data.user?.uid), default: () => (data.from == QueueFrom.Manual ? '就是主播自己' : data.user?.uid),
} },
) )
}, },
}, },
@@ -611,7 +604,7 @@ const columns = [
}, },
{ {
icon: () => h(NIcon, { component: ReloadCircleSharp }), icon: () => h(NIcon, { component: ReloadCircleSharp }),
} },
), ),
default: () => '重新放回等待列表', default: () => '重新放回等待列表',
}) })
@@ -633,14 +626,14 @@ const columns = [
}, },
{ {
icon: () => h(NIcon, { component: Delete24Filled }), icon: () => h(NIcon, { component: Delete24Filled }),
} },
), ),
default: () => '删除记录', default: () => '删除记录',
}), }),
default: () => '确定删除?', default: () => '确定删除?',
} },
), ),
] ],
) )
}, },
}, },
@@ -815,7 +808,9 @@ onUnmounted(() => {
<NCard embedded size="small" content-style="padding: 5px;" :style="`${queueData.status == QueueStatus.Progressing ? 'animation: animated-border 2.5s infinite;' : ''};height: 100%;`"> <NCard embedded size="small" content-style="padding: 5px;" :style="`${queueData.status == QueueStatus.Progressing ? 'animation: animated-border 2.5s infinite;' : ''};height: 100%;`">
<NSpace justify="space-between" align="center" style="height: 100%; margin: 0 5px 0 5px"> <NSpace justify="space-between" align="center" style="height: 100%; margin: 0 5px 0 5px">
<NSpace align="center"> <NSpace align="center">
<div :style="`border-radius: 4px; background-color: ${queueData.status == QueueStatus.Progressing ? '#75c37f' : '#577fb8'}; width: 20px; height: 20px;text-align: center;color: white;`"> <div
:style="`border-radius: 4px; background-color: ${queueData.status == QueueStatus.Progressing ? '#75c37f' : '#577fb8'}; width: 20px; height: 20px;text-align: center;color: white;`"
>
{{ index + 1 }} {{ index + 1 }}
</div> </div>
<NText strong style="font-size: 18px"> <NText strong style="font-size: 18px">
@@ -1021,7 +1016,9 @@ onUnmounted(() => {
<NCheckbox v-model:checked="settings.allowIncreasePaymentBySendGift" @update:checked="updateSettings" :disabled="!configCanEdit"> <NCheckbox v-model:checked="settings.allowIncreasePaymentBySendGift" @update:checked="updateSettings" :disabled="!configCanEdit">
在队列中时允许继续发送礼物累计付费量 (仅限上方设定的礼物) 在队列中时允许继续发送礼物累计付费量 (仅限上方设定的礼物)
</NCheckbox> </NCheckbox>
<NCheckbox v-if="settings.allowIncreasePaymentBySendGift" v-model:checked="settings.allowIncreaseByAnyPayment" @update:checked="updateSettings" :disabled="!configCanEdit"> 允许发送任意礼物来叠加付费量 </NCheckbox> <NCheckbox v-if="settings.allowIncreasePaymentBySendGift" v-model:checked="settings.allowIncreaseByAnyPayment" @update:checked="updateSettings" :disabled="!configCanEdit">
允许发送任意礼物来叠加付费量
</NCheckbox>
</NSpace> </NSpace>
<NDivider> 冷却 (单位: ) </NDivider> <NDivider> 冷却 (单位: ) </NDivider>
<NCheckbox v-model:checked="settings.enableCooldown" @update:checked="updateSettings" :disabled="!configCanEdit"> 启用排队冷却 </NCheckbox> <NCheckbox v-model:checked="settings.enableCooldown" @update:checked="updateSettings" :disabled="!configCanEdit"> 启用排队冷却 </NCheckbox>

View File

@@ -1,18 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, onUnmounted, ref } from 'vue'
import EasySpeech from 'easy-speech'
import { NAlert, NButton, NDivider, NIcon, NInput, NInputGroup, NInputGroupLabel, NPopconfirm, NSelect, NSlider, NSpace, NTag, NText, NTooltip, useMessage } from 'naive-ui'
import { useRoute } from 'vue-router'
import { useStorage } from '@vueuse/core'
import { Queue } from 'queue-typescript'
import DanmakuClient, { DanmakuInfo, RoomAuthInfo } from '@/data/DanmakuClient'
import { EventDataTypes, EventModel } from '@/api/api-models'
import { useAccount } from '@/api/account'
import { Mic24Filled } from '@vicons/fluent'
import { copyToClipboard } from '@/Utils' import { copyToClipboard } from '@/Utils'
import { useAccount } from '@/api/account'
import { EventDataTypes, EventModel } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import DanmakuClient, { RoomAuthInfo } from '@/data/DanmakuClient'
import { VTSURU_API_URL } from '@/data/constants' import { VTSURU_API_URL } from '@/data/constants'
import { setInterval, clearInterval } from 'worker-timers' import { Mic24Filled } from '@vicons/fluent'
import { useStorage } from '@vueuse/core'
import EasySpeech from 'easy-speech'
import { NAlert, NButton, NDivider, NIcon, NInput, NInputGroup, NInputGroupLabel, NPopconfirm, NSelect, NSlider, NSpace, NText, NTooltip, useMessage } from 'naive-ui'
import { computed, onMounted, onUnmounted, ref } from 'vue'
import { useRoute } from 'vue-router'
import { clearInterval, setInterval } from 'worker-timers'
const props = defineProps<{ const props = defineProps<{
client: DanmakuClient client: DanmakuClient

View File

@@ -1,33 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import {
NAlert,
NAvatar,
NButton,
NCard,
NCheckbox,
NDivider,
NEmpty,
NImage,
NInput,
NList,
NListItem,
NSpace,
NTab,
NTabPane,
NTabs,
NText,
NTime,
NTooltip,
NUpload,
UploadFileInfo,
useMessage,
} from 'naive-ui'
import GraphemeSplitter from 'grapheme-splitter'
import { computed, onMounted, onUnmounted, ref } from 'vue'
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { QAInfo, UserInfo } from '@/api/api-models' import { QAInfo, UserInfo } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query' import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import { QUESTION_API_URL, TURNSTILE_KEY } from '@/data/constants' import { QUESTION_API_URL, TURNSTILE_KEY } from '@/data/constants'
import GraphemeSplitter from 'grapheme-splitter'
import { NAlert, NAvatar, NButton, NCard, NCheckbox, NDivider, NEmpty, NImage, NInput, NList, NListItem, NSpace, NText, NTime, NTooltip, NUpload, UploadFileInfo, useMessage } from 'naive-ui'
import { computed, onMounted, onUnmounted, ref } from 'vue'
import VueTurnstile from 'vue-turnstile' import VueTurnstile from 'vue-turnstile'
const { biliInfo, userInfo } = defineProps<{ const { biliInfo, userInfo } = defineProps<{
@@ -72,7 +50,7 @@ async function SendQuestion() {
Message: questionMessage.value, Message: questionMessage.value,
ImageBase64: fileList.value?.length > 0 ? await getBase64(fileList.value[0].file) : undefined, ImageBase64: fileList.value?.length > 0 ? await getBase64(fileList.value[0].file) : undefined,
}, },
[['Turnstile', token.value]] [['Turnstile', token.value]],
) )
.then((data) => { .then((data) => {
if (data.code == 200) { if (data.code == 200) {

View File

@@ -4,8 +4,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ScheduleWeekInfo } from '@/api/api-models' import { ScheduleWeekInfo, UserInfo } from '@/api/api-models'
import { UserInfo } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query' import { QueryGetAPI } from '@/api/query'
import { SCHEDULE_API_URL, ScheduleTemplateMap } from '@/data/constants' import { SCHEDULE_API_URL, ScheduleTemplateMap } from '@/data/constants'
import { NSpin, useMessage } from 'naive-ui' import { NSpin, useMessage } from 'naive-ui'

View File

@@ -14,13 +14,12 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { Setting_SongRequest, SongRequestInfo, SongsInfo } from '@/api/api-models' import { useAccount } from '@/api/account'
import { computed, onMounted, ref } from 'vue' import { Setting_SongRequest, SongRequestInfo, SongsInfo, UserInfo } from '@/api/api-models'
import { UserInfo } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPIWithParams } from '@/api/query' import { QueryGetAPI, QueryPostAPIWithParams } from '@/api/query'
import { SONG_API_URL, SONG_REQUEST_API_URL, SongListTemplateMap } from '@/data/constants' import { SONG_API_URL, SONG_REQUEST_API_URL, SongListTemplateMap } from '@/data/constants'
import { NSpin, useMessage } from 'naive-ui' import { NSpin, useMessage } from 'naive-ui'
import { useAccount } from '@/api/account' import { computed, onMounted, ref } from 'vue'
const accountInfo = useAccount() const accountInfo = useAccount()

View File

@@ -3,10 +3,9 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { IndexTypes } from '@/api/api-models'
import DefaultIndexTemplate from '@/views/view/indexTemplate/DefaultIndexTemplate.vue'
import { computed, onMounted, ref } from 'vue'
import { UserInfo } from '@/api/api-models' import { UserInfo } from '@/api/api-models'
import DefaultIndexTemplate from '@/views/view/indexTemplate/DefaultIndexTemplate.vue'
import { computed } from 'vue'
const props = defineProps<{ const props = defineProps<{
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any

View File

@@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { isDarkMode } from '@/Utils' import { isDarkMode } from '@/Utils'
import { UserInfo } from '@/api/api-models' import { UserInfo } from '@/api/api-models'
import { NAvatar, NButton, NDivider, NImage, NSpace, NText } from 'naive-ui' import { NAvatar, NButton, NDivider, NSpace, NText } from 'naive-ui'
const width = window.innerWidth const width = window.innerWidth
@@ -26,7 +26,7 @@ function navigate(url: string) {
round round
bordered bordered
:img-props="{ :img-props="{
referrerpolicy: 'no-referrer' referrerpolicy: 'no-referrer',
}" }"
:style="{ boxShadow: isDarkMode() ? 'rgb(195 192 192 / 35%) 0px 5px 20px' : '0 5px 15px rgba(0, 0, 0, 0.2)' }" :style="{ boxShadow: isDarkMode() ? 'rgb(195 192 192 / 35%) 0px 5px 20px' : '0 5px 15px rgba(0, 0, 0, 0.2)' }"
/> />

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { ScheduleWeekInfo, UserInfo } from '@/api/api-models' import { ScheduleWeekInfo, UserInfo } from '@/api/api-models'
import { getYear, getWeek, startOfWeek } from 'date-fns' import SaveCompoent from '@/components/SaveCompoent.vue'
import { getWeek, getYear } from 'date-fns'
import { NDivider, NSelect, NSpace } from 'naive-ui' import { NDivider, NSelect, NSpace } from 'naive-ui'
import { computed, onMounted, ref } from 'vue' import { computed, onMounted, ref } from 'vue'
import SaveCompoent from '@/components/SaveCompoent.vue'
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
const table = ref() const table = ref()

View File

@@ -1,12 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
import { SongsInfo, UserInfo } from '@/api/api-models' import { Setting_SongRequest, SongRequestInfo, SongsInfo, UserInfo } from '@/api/api-models'
import SongList from '@/components/SongList.vue' import SongList from '@/components/SongList.vue'
import SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
import { CloudAdd20Filled } from '@vicons/fluent' import { CloudAdd20Filled } from '@vicons/fluent'
import { NButton, NCard, NCollapse, NCollapseItem, NDivider, NIcon, NTooltip, useMessage } from 'naive-ui' import { NButton, NCard, NCollapse, NCollapseItem, NDivider, NIcon, NTooltip, useMessage } from 'naive-ui'
import { h, ref } from 'vue' import { h, ref } from 'vue'
import { Setting_SongRequest, SongRequestInfo } from '@/api/api-models'
import SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
const accountInfo = useAccount() const accountInfo = useAccount()
@@ -46,11 +45,11 @@ const buttoms = (song: SongsInfo) => [
}, },
{ {
icon: () => h(NIcon, { component: CloudAdd20Filled }), icon: () => h(NIcon, { component: CloudAdd20Filled }),
} },
), ),
default: () => default: () =>
!props.songRequestSettings.allowFromWeb || song.options ? '点歌 | 用户不允许从网页点歌, 点击后将复制点歌内容到剪切板' : !accountInfo ? '点歌 | 你需要登录后才能点歌' : '点歌', !props.songRequestSettings.allowFromWeb || song.options ? '点歌 | 用户不允许从网页点歌, 点击后将复制点歌内容到剪切板' : !accountInfo ? '点歌 | 你需要登录后才能点歌' : '点歌',
} },
) )
: undefined, : undefined,
] ]

View File

@@ -5,9 +5,9 @@ import { FunctionTypes, Setting_SongRequest, SongRequestInfo, SongsInfo, UserInf
import SongPlayer from '@/components/SongPlayer.vue' import SongPlayer from '@/components/SongPlayer.vue'
import SongRequestOBS from '@/views/obs/SongRequestOBS.vue' import SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
import { CloudAdd20Filled, Play24Filled } from '@vicons/fluent' import { CloudAdd20Filled, Play24Filled } from '@vicons/fluent'
import { useDebounceFn, useElementSize, useInfiniteScroll, useWindowSize } from '@vueuse/core' import { useWindowSize } from '@vueuse/core'
import { debounce, throttle } from 'lodash' import { throttle } from 'lodash'
import { NGridItem, NGrid, NCard, NSpace, NDivider, NButton, NCollapseTransition, NInput, NText, NEllipsis, NSelect, NEmpty, NIcon, NTag, NScrollbar, NTooltip, NPopover } from 'naive-ui' import { NButton, NCard, NCollapseTransition, NDivider, NEllipsis, NEmpty, NGrid, NGridItem, NIcon, NInput, NPopover, NScrollbar, NSelect, NSpace, NTag, NText, NTooltip } from 'naive-ui'
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
const props = defineProps<{ const props = defineProps<{
@@ -40,7 +40,7 @@ const tags = computed(() => {
.map((item) => { .map((item) => {
return item.tags ?? [] return item.tags ?? []
}) })
.reduce((prev, curr) => [...prev, ...curr], []) .reduce((prev, curr) => [...prev, ...curr], []),
), ),
] ]
} }
@@ -54,7 +54,7 @@ const authors = computed(() => {
.map((item) => { .map((item) => {
return item.author ?? [] return item.author ?? []
}) })
.reduce((prev, curr) => [...prev, ...curr], []) .reduce((prev, curr) => [...prev, ...curr], []),
), ),
] ]
} }