mirror of
https://github.com/Megghy/vtsuru.live.git
synced 2025-12-06 18:36:55 +08:00
clear unused imports
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
<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 { ACCOUNT_API_URL } from '@/data/constants'
|
||||
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 password2 = ref('')
|
||||
|
||||
@@ -4,28 +4,7 @@ import { FeedbackStatus, FeedbackType, ResponseFeedbackModel } from '@/api/api-m
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import { FEEDBACK_API_URL } from '@/data/constants'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
NButton,
|
||||
NCard,
|
||||
NCheckbox,
|
||||
NDivider,
|
||||
NEllipsis,
|
||||
NEmpty,
|
||||
NForm,
|
||||
NGrid,
|
||||
NGridItem,
|
||||
NInput,
|
||||
NModal,
|
||||
NRadioButton,
|
||||
NRadioGroup,
|
||||
NSpace,
|
||||
NSpin,
|
||||
NTag,
|
||||
NText,
|
||||
NTime,
|
||||
NTooltip,
|
||||
useMessage,
|
||||
} from 'naive-ui'
|
||||
import { NButton, NCard, NCheckbox, NDivider, NEllipsis, NEmpty, NInput, NModal, NRadioButton, NRadioGroup, NSpace, NSpin, NTag, NText, NTime, NTooltip, useMessage } from 'naive-ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
interface FeedbackModel {
|
||||
@@ -101,9 +80,7 @@ async function add() {
|
||||
<template>
|
||||
<NSpace align="center">
|
||||
<NButton @click="showAddModal = true" type="info">添加反馈</NButton>
|
||||
<NText depth="3">
|
||||
或者直接加群 873260337 说也可以
|
||||
</NText>
|
||||
<NText depth="3"> 或者直接加群 873260337 说也可以 </NText>
|
||||
</NSpace>
|
||||
<NDivider>
|
||||
<NTooltip>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<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 { Lottery24Filled, MoneyOff24Filled, MoreHorizontal24Filled, TabletSpeaker24Filled, VehicleShip24Filled, VideoAdd20Filled } from '@vicons/fluent'
|
||||
import { AnalyticsSharp, Calendar, Chatbox, ListCircle, MusicalNote } from '@vicons/ionicons5'
|
||||
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()
|
||||
|
||||
|
||||
@@ -1,28 +1,10 @@
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
NButton,
|
||||
NDivider,
|
||||
NIcon,
|
||||
NLayout,
|
||||
NLayoutContent,
|
||||
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 { isDarkMode } from '@/Utils'
|
||||
import { isLoadingAccount, useAccount } from '@/api/account'
|
||||
import { ThemeType } from '@/api/api-models'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import RegisterAndLogin from '@/components/RegisterAndLogin.vue'
|
||||
import { ACCOUNT_API_URL } from '@/data/constants'
|
||||
import {
|
||||
CalendarClock24Filled,
|
||||
Chat24Filled,
|
||||
@@ -35,16 +17,34 @@ import {
|
||||
VehicleShip24Filled,
|
||||
VideoAdd20Filled,
|
||||
} from '@vicons/fluent'
|
||||
import { isLoadingAccount, useAccount } from '@/api/account'
|
||||
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 { AnalyticsSharp, BrowsersOutline, Chatbox, Moon, MusicalNote, Sunny } from '@vicons/ionicons5'
|
||||
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 message = useMessage()
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<script setup lang="ts">
|
||||
import { NButton, NElement, NLayoutContent, NResult } from 'naive-ui'
|
||||
import { NButton, NLayoutContent, NResult } from 'naive-ui'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<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%);">
|
||||
<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%)">
|
||||
<template #footer>
|
||||
<NButton type="primary" size="large" @click="$router.push({ name: 'index' })">返回首页</NButton>
|
||||
</template>
|
||||
|
||||
@@ -1,37 +1,33 @@
|
||||
<script setup lang="ts">
|
||||
import { isDarkMode } from '@/Utils'
|
||||
import { OpenLiveInfo, ThemeType } from '@/api/api-models'
|
||||
import { ThemeType } from '@/api/api-models'
|
||||
import DanmakuClient, { AuthInfo } from '@/data/DanmakuClient'
|
||||
import { Lottery24Filled, PeopleQueue24Filled, TabletSpeaker24Filled } from '@vicons/fluent'
|
||||
import { Moon, MusicalNote, Sunny } from '@vicons/ionicons5'
|
||||
import { useElementSize, useStorage } from '@vueuse/core'
|
||||
import {
|
||||
NAlert,
|
||||
NAvatar,
|
||||
NBackTop,
|
||||
NButton,
|
||||
NEllipsis,
|
||||
NIcon,
|
||||
NLayout,
|
||||
NLayoutContent,
|
||||
NLayoutFooter,
|
||||
NLayoutHeader,
|
||||
NLayoutSider,
|
||||
NMenu,
|
||||
NSpace,
|
||||
NText,
|
||||
NButton,
|
||||
NResult,
|
||||
NPageHeader,
|
||||
NSwitch,
|
||||
NModal,
|
||||
NEllipsis,
|
||||
MenuOption,
|
||||
NResult,
|
||||
NSpace,
|
||||
NSpin,
|
||||
NLayoutContent,
|
||||
NLayoutFooter,
|
||||
NBackTop,
|
||||
NScrollbar,
|
||||
useMessage,
|
||||
NDivider,
|
||||
NSwitch,
|
||||
NTag,
|
||||
NAlert,
|
||||
NText,
|
||||
useMessage,
|
||||
} from 'naive-ui'
|
||||
import { ref, onMounted, h, onUnmounted } from 'vue'
|
||||
import { h, onMounted, onUnmounted, ref } from 'vue'
|
||||
import { RouterLink, useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
@@ -55,7 +51,7 @@ const menuOptions = [
|
||||
query: route.query,
|
||||
},
|
||||
},
|
||||
{ default: () => '抽奖' }
|
||||
{ default: () => '抽奖' },
|
||||
),
|
||||
key: 'open-live-lottery',
|
||||
icon: renderIcon(Lottery24Filled),
|
||||
@@ -70,7 +66,7 @@ const menuOptions = [
|
||||
query: route.query,
|
||||
},
|
||||
},
|
||||
{ default: () => '点歌' }
|
||||
{ default: () => '点歌' },
|
||||
),
|
||||
key: 'open-live-song-request',
|
||||
icon: renderIcon(MusicalNote),
|
||||
@@ -85,7 +81,7 @@ const menuOptions = [
|
||||
query: route.query,
|
||||
},
|
||||
},
|
||||
{ default: () => '排队' }
|
||||
{ default: () => '排队' },
|
||||
),
|
||||
key: 'open-live-queue',
|
||||
icon: renderIcon(PeopleQueue24Filled),
|
||||
@@ -100,7 +96,7 @@ const menuOptions = [
|
||||
query: route.query,
|
||||
},
|
||||
},
|
||||
{ default: () => '读弹幕' }
|
||||
{ default: () => '读弹幕' },
|
||||
),
|
||||
key: 'open-live-speech',
|
||||
icon: renderIcon(TabletSpeaker24Filled),
|
||||
@@ -147,7 +143,7 @@ onUnmounted(() => {
|
||||
<template #extra>
|
||||
<NSpace align="center">
|
||||
<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>
|
||||
<NIcon :component="Sunny" />
|
||||
</template>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
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 { VIDEO_COLLECT_API_URL } from '@/data/constants'
|
||||
import { Clock24Regular, Person24Regular, Question24Regular } from '@vicons/fluent'
|
||||
import { useElementSize } from '@vueuse/core'
|
||||
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 { useRoute } from 'vue-router'
|
||||
|
||||
|
||||
@@ -1,37 +1,36 @@
|
||||
<!-- eslint-disable vue/component-name-in-template-casing -->
|
||||
<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 {
|
||||
MenuOption,
|
||||
NAvatar,
|
||||
NBackTop,
|
||||
NButton,
|
||||
NEllipsis,
|
||||
NIcon,
|
||||
NLayout,
|
||||
NLayoutContent,
|
||||
NLayoutHeader,
|
||||
NLayoutSider,
|
||||
NMenu,
|
||||
NSpace,
|
||||
NText,
|
||||
NButton,
|
||||
NResult,
|
||||
NPageHeader,
|
||||
NSwitch,
|
||||
NModal,
|
||||
NEllipsis,
|
||||
MenuOption,
|
||||
NPageHeader,
|
||||
NResult,
|
||||
NSpace,
|
||||
NSpin,
|
||||
NLayoutContent,
|
||||
NBackTop,
|
||||
NScrollbar,
|
||||
NSwitch,
|
||||
NText,
|
||||
} from 'naive-ui'
|
||||
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 { 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 id = computed(() => {
|
||||
@@ -54,15 +53,14 @@ function renderIcon(icon: unknown) {
|
||||
}
|
||||
const menuOptions = ref<MenuOption[]>()
|
||||
async function RequestBiliUserData() {
|
||||
await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${userInfo.value?.biliId}`)
|
||||
.then(async (respone) => {
|
||||
let data = await respone.json()
|
||||
if (data.code == 0) {
|
||||
biliUserInfo.value = data.card
|
||||
} else {
|
||||
throw new Error('Bili User API Error: ' + data.message)
|
||||
}
|
||||
})
|
||||
await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${userInfo.value?.biliId}`).then(async (respone) => {
|
||||
let data = await respone.json()
|
||||
if (data.code == 0) {
|
||||
biliUserInfo.value = data.card
|
||||
} else {
|
||||
throw new Error('Bili User API Error: ' + data.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
@@ -81,7 +79,7 @@ onMounted(async () => {
|
||||
name: 'user-index',
|
||||
},
|
||||
},
|
||||
{ default: () => '主页' }
|
||||
{ default: () => '主页' },
|
||||
),
|
||||
key: 'user-index',
|
||||
icon: renderIcon(Home),
|
||||
@@ -95,7 +93,7 @@ onMounted(async () => {
|
||||
name: 'user-songList',
|
||||
},
|
||||
},
|
||||
{ default: () => '歌单' }
|
||||
{ default: () => '歌单' },
|
||||
),
|
||||
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.SongList) ?? -1) > -1,
|
||||
key: 'user-songList',
|
||||
@@ -110,7 +108,7 @@ onMounted(async () => {
|
||||
name: 'user-schedule',
|
||||
},
|
||||
},
|
||||
{ default: () => '日程' }
|
||||
{ default: () => '日程' },
|
||||
),
|
||||
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.Schedule) ?? -1) > -1,
|
||||
key: 'user-schedule',
|
||||
@@ -125,7 +123,7 @@ onMounted(async () => {
|
||||
name: 'user-questionBox',
|
||||
},
|
||||
},
|
||||
{ default: () => '棉花糖 (提问箱' }
|
||||
{ default: () => '棉花糖 (提问箱' },
|
||||
),
|
||||
show: (userInfo.value?.extra?.enableFunctions.indexOf(FunctionTypes.QuestionBox) ?? -1) > -1,
|
||||
key: 'user-questionBox',
|
||||
@@ -148,7 +146,7 @@ onMounted(async () => {
|
||||
<NPageHeader :subtitle="($route.meta.title as string) ?? ''" style="margin-top: 6px">
|
||||
<template #extra>
|
||||
<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>
|
||||
<NIcon :component="Sunny" />
|
||||
</template>
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
import { GetSelfAccount, useAccount } from '@/api/account'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import { BILI_API_URL } from '@/data/constants'
|
||||
import { NAlert, NButton, NCard, NCode, NInput, NInputNumber, NSpace, NSpin, NText, NCountdown, NInputGroup, useMessage } from 'naive-ui'
|
||||
import { isTaggedTemplateExpression } from 'typescript'
|
||||
import { NAlert, NButton, NCard, NCountdown, NInput, NInputGroup, NInputNumber, NSpace, NSpin, NText, useMessage } from 'naive-ui'
|
||||
import { onMounted, ref } from 'vue'
|
||||
|
||||
const message = useMessage()
|
||||
|
||||
@@ -30,6 +30,6 @@ onUnmounted(() => {
|
||||
<NAlert v-if="accountInfo?.isBiliVerified != true" type="info"> 尚未进行Bilibili认证 </NAlert>
|
||||
<NSpin v-else-if="isClientLoading" show />
|
||||
<KeepAlive v-else>
|
||||
<component :is="component" :client="client" :room-info="client.roomAuthInfo?.value" :code="accountInfo?.biliAuthCode"/>
|
||||
<component :is="component" :client="client" :room-info="client.roomAuthInfo?.value" :code="accountInfo?.biliAuthCode" />
|
||||
</KeepAlive>
|
||||
</template>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<script setup lang="ts">
|
||||
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 SettingsManageView from './SettingsManageView.vue'
|
||||
import { useLocalStorage } from '@vueuse/core'
|
||||
import { ref } from 'vue'
|
||||
import { BiliAuthCodeStatusType } from '@/api/api-models'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
|
||||
import { ACCOUNT_API_URL, TURNSTILE_KEY } from '@/data/constants'
|
||||
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 { BiliAuthCodeStatusType } from '@/api/api-models'
|
||||
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
|
||||
import SettingsManageView from './SettingsManageView.vue'
|
||||
|
||||
const token = ref('')
|
||||
const turnstile = ref()
|
||||
@@ -175,9 +175,7 @@ async function ChangeBili() {
|
||||
当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用
|
||||
<br />
|
||||
在我们被限制连接之前满足以上条件的主播无需部署
|
||||
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text>
|
||||
VtsuruEventFetcher
|
||||
</NButton>
|
||||
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> VtsuruEventFetcher </NButton>
|
||||
即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊
|
||||
</NAlert>
|
||||
<NCard embedded style="width: 100%">
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
<script setup lang="ts">
|
||||
import { isDarkMode } from '@/Utils'
|
||||
import { useAccount } from '@/api/account'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
|
||||
import { AVATAR_URL, BASE_API } from '@/data/constants'
|
||||
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 {
|
||||
NAlert,
|
||||
NAvatar,
|
||||
@@ -16,10 +20,7 @@ import {
|
||||
NEllipsis,
|
||||
NGrid,
|
||||
NGridItem,
|
||||
NH1,
|
||||
NH2,
|
||||
NH3,
|
||||
NH5,
|
||||
NIcon,
|
||||
NLi,
|
||||
NRadioButton,
|
||||
@@ -34,10 +35,6 @@ import {
|
||||
useMessage,
|
||||
} from 'naive-ui'
|
||||
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 {
|
||||
Guard,
|
||||
@@ -175,9 +172,7 @@ onMounted(() => {
|
||||
当前本站正在测试为粉丝数大于 1000 或至少拥有一位舰长的主播直接从服务端记录并储存弹幕数据, 不过并不清楚B站的风控策略, 此功能不一定会长期启用
|
||||
<br />
|
||||
在我们被限制连接之前满足以上条件的主播无需部署
|
||||
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text>
|
||||
VtsuruEventFetcher
|
||||
</NButton>
|
||||
<NButton tag="a" href="https://www.yuque.com/megghy/dez70g/vfvcyv3024xvaa1p" target="_blank" type="primary" text> VtsuruEventFetcher </NButton>
|
||||
即可使用相关功能 (如记录上舰和SC, 直播场记录等) 😊
|
||||
</NAlert>
|
||||
<EventFetcherStatusCard />
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
import { useAccount } from '@/api/account'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import { HISTORY_API_URL } from '@/data/constants'
|
||||
import { NAlert, NCard, NSpace, NSpin, useMessage } from 'naive-ui'
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { addHours, format, isSameDay, isSameHour, startOfHour } from 'date-fns'
|
||||
import { BarChart, LineChart } from 'echarts/charts'
|
||||
import { DataZoomComponent, GridComponent, LegendComponent, TitleComponent, ToolboxComponent, TooltipComponent } from 'echarts/components'
|
||||
import { use } from 'echarts/core'
|
||||
import { CanvasRenderer } from 'echarts/renderers'
|
||||
import { BarChart, LineChart } from 'echarts/charts'
|
||||
import { TitleComponent, TooltipComponent, LegendComponent, GridComponent, DataZoomComponent, ToolboxComponent } from 'echarts/components'
|
||||
import { NAlert, NCard, NSpace, NSpin, useMessage } from 'naive-ui'
|
||||
import { onMounted, ref } from 'vue'
|
||||
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])
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<script setup lang="ts">
|
||||
import { useAccount } from '@/api/account'
|
||||
import DanmakuClient from '@/data/DanmakuClient'
|
||||
import { onMounted, onUnmounted } from 'vue'
|
||||
import { NAlert } from 'naive-ui'
|
||||
import { onMounted, onUnmounted } from 'vue'
|
||||
import OpenLottery from '../open_live/OpenLottery.vue'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
import { useAccount } from '@/api/account'
|
||||
import { ResponseLiveInfoModel } from '@/api/api-models'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import EventFetcherStatusCard from '@/components/EventFetcherStatusCard.vue'
|
||||
import LiveInfoContainer from '@/components/LiveInfoContainer.vue'
|
||||
import { LIVE_API_URL } from '@/data/constants'
|
||||
import { List } from 'linqts'
|
||||
import { NButton, NDivider, NList, NListItem, NAlert, NPagination, NPopover, NSpace, NStatistic, NTag, NTime, NTooltip, useMessage } from 'naive-ui'
|
||||
import { NAlert, NDivider, NList, NListItem, NPagination, NSpace, useMessage } from 'naive-ui'
|
||||
import { ref } from 'vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
|
||||
|
||||
@@ -4,9 +4,7 @@ import { LotteryUserInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import { LOTTERY_API_URL, TURNSTILE_KEY } from '@/data/constants'
|
||||
import { useLocalStorage, useStorage } from '@vueuse/core'
|
||||
import { randomInt } from 'crypto'
|
||||
import { format } from 'date-fns'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
NAvatar,
|
||||
NButton,
|
||||
@@ -29,15 +27,12 @@ import {
|
||||
NRadioGroup,
|
||||
NScrollbar,
|
||||
NSpace,
|
||||
NTabPane,
|
||||
NTabs,
|
||||
NTag,
|
||||
NTime,
|
||||
NTooltip,
|
||||
useMessage,
|
||||
useNotification,
|
||||
} from 'naive-ui'
|
||||
import { breadcrumbLight } from 'naive-ui/es/breadcrumb/styles'
|
||||
import { computed, h, ref } from 'vue'
|
||||
import VueTurnstile from 'vue-turnstile'
|
||||
|
||||
@@ -152,7 +147,7 @@ async function getCommentsUsers() {
|
||||
{
|
||||
id: inputDynamicId.value,
|
||||
},
|
||||
[['Turnstile', token.value]]
|
||||
[['Turnstile', token.value]],
|
||||
)
|
||||
.then((data) => {
|
||||
if (data.code == 200) {
|
||||
@@ -178,7 +173,7 @@ async function getForwardUsers() {
|
||||
{
|
||||
id: inputDynamicId.value,
|
||||
},
|
||||
[['Turnstile', token.value]]
|
||||
[['Turnstile', token.value]],
|
||||
)
|
||||
.then((data) => {
|
||||
if (data.code == 200) {
|
||||
@@ -263,7 +258,7 @@ function onFinishLottery() {
|
||||
h(
|
||||
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)]))
|
||||
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'),
|
||||
onAfterLeave: () => {
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
<script setup lang="ts">
|
||||
import { copyToClipboard } from '@/Utils'
|
||||
import { useAccount } from '@/api/account'
|
||||
import { QAInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import { ACCOUNT_API_URL, QUESTION_API_URL } from '@/data/constants'
|
||||
import router from '@/router'
|
||||
import { Heart, HeartOutline } from '@vicons/ionicons5'
|
||||
import { saveAs } from 'file-saver'
|
||||
import html2canvas from 'html2canvas'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
NButton,
|
||||
NCard,
|
||||
NCheckbox,
|
||||
NDivider,
|
||||
NGradientText,
|
||||
NIcon,
|
||||
NImage,
|
||||
NInput,
|
||||
@@ -27,14 +32,8 @@ import {
|
||||
NTooltip,
|
||||
useMessage,
|
||||
} 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 { useAccount } from '@/api/account'
|
||||
import { saveAs } from 'file-saver'
|
||||
import { copyToClipboard } from '@/Utils'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
@@ -247,7 +246,7 @@ function saveShareImage() {
|
||||
saveAs(data, `vtsuru-提问箱-${accountInfo.value?.name}.png`)
|
||||
},
|
||||
'image/png',
|
||||
1
|
||||
1,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,30 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
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 { QueryPostAPI } from '@/api/query'
|
||||
import { ACCOUNT_API_URL, FETCH_API, IndexTemplateMap, ScheduleTemplateMap, SongListTemplateMap } from '@/data/constants'
|
||||
import { 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'
|
||||
|
||||
interface TemplateDefineTypes {
|
||||
|
||||
@@ -6,6 +6,9 @@ import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import SongList from '@/components/SongList.vue'
|
||||
import { FETCH_API, SONG_API_URL } from '@/data/constants'
|
||||
import { Info24Filled } from '@vicons/fluent'
|
||||
import { format } from 'date-fns'
|
||||
import { saveAs } from 'file-saver'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
FormInst,
|
||||
FormRules,
|
||||
@@ -34,9 +37,6 @@ import {
|
||||
} from 'naive-ui'
|
||||
import { Option } from 'naive-ui/es/transfer/src/interface'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { saveAs } from 'file-saver'
|
||||
import { format } from 'date-fns'
|
||||
import { List } from 'linqts'
|
||||
|
||||
const message = useMessage()
|
||||
const accountInfo = useAccount()
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
import { useAccount } from '@/api/account'
|
||||
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 { onMounted, onUnmounted } from 'vue'
|
||||
import MusicRequest from '../open_live/MusicRequest.vue'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
let client = new DanmakuClient(null)
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
<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 VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue'
|
||||
import { VIDEO_COLLECT_API_URL } from '@/data/constants'
|
||||
import router from '@/router'
|
||||
import { Clock24Filled, Person24Filled } from '@vicons/fluent'
|
||||
import { useWindowSize } from '@vueuse/core'
|
||||
import { formatDuration } from 'date-fns'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
FormRules,
|
||||
@@ -21,7 +20,6 @@ import {
|
||||
NGrid,
|
||||
NGridItem,
|
||||
NIcon,
|
||||
NImage,
|
||||
NInput,
|
||||
NInputNumber,
|
||||
NModal,
|
||||
@@ -30,9 +28,7 @@ import {
|
||||
NSpace,
|
||||
NTabPane,
|
||||
NTabs,
|
||||
NTag,
|
||||
NText,
|
||||
NThing,
|
||||
useMessage,
|
||||
} from 'naive-ui'
|
||||
import Qrcode from 'qrcode.vue'
|
||||
@@ -143,44 +139,47 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
|
||||
}
|
||||
return videos.length == 0
|
||||
? h(NEmpty)
|
||||
: h(NGrid, { cols: '1 500:2 700:3 900:4 1200:5 ', xGap: '12', yGap: '12', responsive: 'self' }, () =>
|
||||
videos?.map((v) =>
|
||||
h(NGridItem, () =>
|
||||
h(
|
||||
NCard,
|
||||
{ style: 'height: 330px;', embedded: true, size: 'small' },
|
||||
{
|
||||
cover: () =>
|
||||
h('div', { style: 'position: relative;height: 150px;' }, [
|
||||
h('img', {
|
||||
src: v.video.cover,
|
||||
referrerpolicy: 'no-referrer',
|
||||
style: 'max-height: 100%; object-fit: contain;cursor: pointer',
|
||||
onClick: () => window.open('https://www.bilibili.com/video/' + v.info.bvid, '_blank'),
|
||||
}),
|
||||
h(NSpace, { style: { position: 'relative', bottom: '20px', background: '#00000073' }, justify: 'space-around' }, () => [
|
||||
h('span', [h(NIcon, { component: Clock24Filled, color: 'lightgrey' }), h(NText, { style: 'color: lightgrey;size:small;' }, () => formatSeconds(v.video.length))]),
|
||||
h('span', [h(NIcon, { component: Person24Filled, color: 'lightgrey' }), h(NText, { style: 'color: lightgrey;size:small;' }, () => v.video.ownerName)]),
|
||||
: h(
|
||||
NGrid,
|
||||
{ cols: '1 500:2 700:3 900:4 1200:5 ', xGap: '12', yGap: '12', responsive: 'self' },
|
||||
() =>
|
||||
videos?.map((v) =>
|
||||
h(NGridItem, () =>
|
||||
h(
|
||||
NCard,
|
||||
{ style: 'height: 330px;', embedded: true, size: 'small' },
|
||||
{
|
||||
cover: () =>
|
||||
h('div', { style: 'position: relative;height: 150px;' }, [
|
||||
h('img', {
|
||||
src: v.video.cover,
|
||||
referrerpolicy: 'no-referrer',
|
||||
style: 'max-height: 100%; object-fit: contain;cursor: pointer',
|
||||
onClick: () => window.open('https://www.bilibili.com/video/' + v.info.bvid, '_blank'),
|
||||
}),
|
||||
h(NSpace, { style: { position: 'relative', bottom: '20px', background: '#00000073' }, justify: 'space-around' }, () => [
|
||||
h('span', [h(NIcon, { component: Clock24Filled, color: 'lightgrey' }), h(NText, { style: 'color: lightgrey;size:small;' }, () => formatSeconds(v.video.length))]),
|
||||
h('span', [h(NIcon, { component: Person24Filled, color: 'lightgrey' }), h(NText, { style: 'color: lightgrey;size:small;' }, () => v.video.ownerName)]),
|
||||
]),
|
||||
]),
|
||||
]),
|
||||
header: () =>
|
||||
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) })
|
||||
),
|
||||
default: () =>
|
||||
h(NScrollbar, { style: 'height: 65px;' }, () =>
|
||||
h(NCard, { contentStyle: 'padding: 5px;' }, () =>
|
||||
v.info.senders.map((s) => [
|
||||
h('div', { style: 'font-size: 12px;' }, [h('div', `推荐人: ${s.sender ?? '未填写'} [${s.senderId ?? '未填写'}]`), h('div', `推荐理由: ${s.description ?? '未填写'}`)]),
|
||||
h(NSpace, { style: 'margin: 0;' }),
|
||||
])
|
||||
)
|
||||
),
|
||||
footer: () => footer(v.info),
|
||||
}
|
||||
)
|
||||
)
|
||||
)
|
||||
header: () =>
|
||||
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) }),
|
||||
),
|
||||
default: () =>
|
||||
h(NScrollbar, { style: 'height: 65px;' }, () =>
|
||||
h(NCard, { contentStyle: 'padding: 5px;' }, () =>
|
||||
v.info.senders.map((s) => [
|
||||
h('div', { style: 'font-size: 12px;' }, [h('div', `推荐人: ${s.sender ?? '未填写'} [${s.senderId ?? '未填写'}]`), h('div', `推荐理由: ${s.description ?? '未填写'}`)]),
|
||||
h(NSpace, { style: 'margin: 0;' }),
|
||||
]),
|
||||
),
|
||||
),
|
||||
footer: () => footer(v.info),
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
const paddingButtonGroup = (v: VideoInfo) =>
|
||||
|
||||
@@ -4,33 +4,7 @@ import { VideoCollectTable } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import VideoCollectInfoCard from '@/components/VideoCollectInfoCard.vue'
|
||||
import { VIDEO_COLLECT_API_URL } from '@/data/constants'
|
||||
import { Clock24Filled } from '@vicons/fluent'
|
||||
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 { FormRules, NButton, NDatePicker, NDivider, NEmpty, NForm, NFormItem, NInput, NInputNumber, NList, NListItem, NModal, NSpace, NSpin, NText, useMessage } from 'naive-ui'
|
||||
import { ref } from 'vue'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
|
||||
@@ -1,38 +1,14 @@
|
||||
<script setup lang="ts">
|
||||
import { AddBiliBlackList, SaveAccountSettings, SaveEnableFunctions, useAccount } from '@/api/account'
|
||||
import {
|
||||
EventDataTypes,
|
||||
EventModel,
|
||||
FunctionTypes,
|
||||
OpenLiveInfo,
|
||||
Setting_SongRequest,
|
||||
SongFrom,
|
||||
SongRequestFrom,
|
||||
SongRequestInfo,
|
||||
SongRequestStatus,
|
||||
DanmakuUserInfo,
|
||||
SongsInfo,
|
||||
} from '@/api/api-models'
|
||||
import { AddBiliBlackList, SaveEnableFunctions, useAccount } from '@/api/account'
|
||||
import { DanmakuUserInfo, EventDataTypes, EventModel, FunctionTypes, Setting_SongRequest, SongRequestFrom, SongRequestInfo, SongRequestStatus, SongsInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI, QueryPostAPIWithParams } from '@/api/query'
|
||||
import DanmakuClient, { AuthInfo, DanmakuInfo, RoomAuthInfo, SCInfo } from '@/data/DanmakuClient'
|
||||
import { OPEN_LIVE_API_URL, SONG_API_URL, SONG_REQUEST_API_URL } from '@/data/constants'
|
||||
import {
|
||||
Check24Filled,
|
||||
Checkmark12Regular,
|
||||
Delete24Filled,
|
||||
Dismiss12Filled,
|
||||
Dismiss16Filled,
|
||||
Info24Filled,
|
||||
Mic24Filled,
|
||||
PeopleQueue24Filled,
|
||||
Play24Filled,
|
||||
PresenceBlocked16Regular,
|
||||
} from '@vicons/fluent'
|
||||
import SongPlayer from '@/components/SongPlayer.vue'
|
||||
import DanmakuClient, { DanmakuInfo, RoomAuthInfo, SCInfo } from '@/data/DanmakuClient'
|
||||
import { SONG_REQUEST_API_URL } from '@/data/constants'
|
||||
import { Checkmark12Regular, Delete24Filled, Dismiss16Filled, Info24Filled, Mic24Filled, PeopleQueue24Filled, Play24Filled, PresenceBlocked16Regular } from '@vicons/fluent'
|
||||
import { ReloadCircleSharp } from '@vicons/ionicons5'
|
||||
import { useStorage } from '@vueuse/core'
|
||||
import { format, isSameDay } from 'date-fns'
|
||||
import { ca } from 'date-fns/locale'
|
||||
import { number } from 'echarts'
|
||||
import { isSameDay } from 'date-fns'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
DataTableColumns,
|
||||
@@ -44,7 +20,6 @@ import {
|
||||
NCollapseItem,
|
||||
NDataTable,
|
||||
NDivider,
|
||||
NEllipsis,
|
||||
NEmpty,
|
||||
NIcon,
|
||||
NInput,
|
||||
@@ -72,8 +47,6 @@ import {
|
||||
import { computed, h, onActivated, onDeactivated, onMounted, onUnmounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import SongRequestOBS from '../obs/SongRequestOBS.vue'
|
||||
import APlayer from 'vue3-aplayer'
|
||||
import SongPlayer from '@/components/SongPlayer.vue'
|
||||
|
||||
const defaultSettings = {
|
||||
orderPrefix: '点歌',
|
||||
@@ -440,7 +413,7 @@ async function updateSettings() {
|
||||
async function deleteSongs(values: SongRequestInfo[]) {
|
||||
await QueryPostAPI(
|
||||
SONG_REQUEST_API_URL + 'del',
|
||||
values.map((s) => s.id)
|
||||
values.map((s) => s.id),
|
||||
)
|
||||
.then((data) => {
|
||||
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),
|
||||
default: () => (data.from == SongRequestFrom.Manual ? '就是主播自己' : data.user?.uid),
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
},
|
||||
@@ -608,7 +581,7 @@ const columns = [
|
||||
},
|
||||
{
|
||||
icon: () => h(NIcon, { component: ReloadCircleSharp }),
|
||||
}
|
||||
},
|
||||
),
|
||||
default: () => '重新放回等待列表',
|
||||
})
|
||||
@@ -630,14 +603,14 @@ const columns = [
|
||||
},
|
||||
{
|
||||
icon: () => h(NIcon, { component: Delete24Filled }),
|
||||
}
|
||||
},
|
||||
),
|
||||
default: () => '删除记录',
|
||||
}),
|
||||
default: () => '确定删除?',
|
||||
}
|
||||
},
|
||||
),
|
||||
]
|
||||
],
|
||||
)
|
||||
},
|
||||
},
|
||||
@@ -899,8 +872,8 @@ onUnmounted(() => {
|
||||
songs.findIndex((s) => s.id != song.id && s.status == SongRequestStatus.Singing) > -1
|
||||
? '还有其他正在演唱的歌曲'
|
||||
: song.status == SongRequestStatus.Waiting && song.id
|
||||
? '开始演唱'
|
||||
: '停止演唱'
|
||||
? '开始演唱'
|
||||
: '停止演唱'
|
||||
}}
|
||||
</NTooltip>
|
||||
<NTooltip>
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
import { computed, h, onMounted, onUnmounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { useAccount } from '@/api/account'
|
||||
import { OpenLiveLotteryType, OpenLiveLotteryUserInfo, UpdateLiveLotteryUsersModel } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import { LOTTERY_API_URL, OPEN_LIVE_API_URL } from '@/data/constants'
|
||||
import { LotteryUserInfo, OpenLiveInfo, OpenLiveLotteryType, OpenLiveLotteryUserInfo, UpdateLiveLotteryUsersModel } from '@/api/api-models'
|
||||
import DanmakuClient, { DanmakuInfo, GiftInfo, RoomAuthInfo } from '@/data/DanmakuClient'
|
||||
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 {
|
||||
NAlert,
|
||||
NAvatar,
|
||||
@@ -22,7 +25,6 @@ import {
|
||||
NInputGroup,
|
||||
NInputGroupLabel,
|
||||
NInputNumber,
|
||||
NLayoutContent,
|
||||
NLi,
|
||||
NList,
|
||||
NListItem,
|
||||
@@ -32,7 +34,6 @@ import {
|
||||
NResult,
|
||||
NScrollbar,
|
||||
NSpace,
|
||||
NSpin,
|
||||
NTag,
|
||||
NTime,
|
||||
NTooltip,
|
||||
@@ -40,13 +41,9 @@ import {
|
||||
useMessage,
|
||||
useNotification,
|
||||
} from 'naive-ui'
|
||||
import { useAccount } from '@/api/account'
|
||||
import ChatClientDirectOpenLive from '@/data/chat/ChatClientDirectOpenLive.js'
|
||||
import { useLocalStorage, useStorage } from '@vueuse/core'
|
||||
import { format } from 'date-fns'
|
||||
import { Delete24Filled, Info24Filled } from '@vicons/fluent'
|
||||
import { h, onMounted, onUnmounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import LiveLotteryOBS from '../obs/LiveLotteryOBS.vue'
|
||||
import DanmakuClient, { AuthInfo, DanmakuInfo, GiftInfo, RoomAuthInfo } from '@/data/DanmakuClient'
|
||||
|
||||
interface LotteryOption {
|
||||
resultCount: number
|
||||
@@ -227,8 +224,10 @@ function onFinishLottery() {
|
||||
description: '共' + resultUsers.value?.length + '人',
|
||||
duration: 3000,
|
||||
content: () =>
|
||||
h(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)]))
|
||||
h(
|
||||
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'),
|
||||
onAfterLeave: () => {
|
||||
@@ -274,7 +273,7 @@ function onDanmaku(data: DanmakuInfo, command: any) {
|
||||
fans_medal_wearing_status: data.fans_medal_wearing_status,
|
||||
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,
|
||||
guard_level: data.guard_level,
|
||||
},
|
||||
command
|
||||
command,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,32 +1,25 @@
|
||||
<script setup lang="ts">
|
||||
import { AddBiliBlackList, SaveEnableFunctions, useAccount } from '@/api/account'
|
||||
import {
|
||||
DanmakuUserInfo,
|
||||
EventDataTypes,
|
||||
EventModel,
|
||||
FunctionTypes,
|
||||
KeywordMatchType,
|
||||
QueueFrom,
|
||||
QueueGiftFilterType,
|
||||
QueueSortType,
|
||||
Setting_Queue,
|
||||
QueueFrom,
|
||||
QueueStatus,
|
||||
DanmakuUserInfo,
|
||||
ResponseQueueModel,
|
||||
Setting_Queue,
|
||||
} from '@/api/api-models'
|
||||
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 {
|
||||
Checkmark12Regular,
|
||||
ClipboardTextLtr24Filled,
|
||||
Delete24Filled,
|
||||
Dismiss16Filled,
|
||||
PeopleQueue24Filled,
|
||||
PresenceBlocked16Regular,
|
||||
} from '@vicons/fluent'
|
||||
import { Checkmark12Regular, ClipboardTextLtr24Filled, Delete24Filled, Dismiss16Filled, PeopleQueue24Filled, PresenceBlocked16Regular } from '@vicons/fluent'
|
||||
import { ReloadCircleSharp } from '@vicons/ionicons5'
|
||||
import { useStorage } from '@vueuse/core'
|
||||
import { format, isSameDay } from 'date-fns'
|
||||
import { isSameDay } from 'date-fns'
|
||||
import { List } from 'linqts'
|
||||
import {
|
||||
DataTableColumns,
|
||||
@@ -145,7 +138,7 @@ const queue = computed(() => {
|
||||
let list = new List(accountInfo ? originQueue.value : localQueues.value)
|
||||
.Where(
|
||||
(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)
|
||||
.OrderByDescending((q) => q.from == QueueFrom.Manual)
|
||||
@@ -165,7 +158,7 @@ const queue = computed(() => {
|
||||
if (configCanEdit.value ? settings.value.isReverse : isReverse.value) {
|
||||
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()
|
||||
})
|
||||
const historySongs = computed(() => {
|
||||
@@ -223,7 +216,7 @@ async function add(danmaku: EventModel) {
|
||||
const index = originQueue.value.findIndex((q) => q.id == data.data.id)
|
||||
if (index > -1) {
|
||||
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)
|
||||
} else {
|
||||
@@ -446,7 +439,7 @@ async function updateSettings() {
|
||||
async function deleteQueue(values: ResponseQueueModel[]) {
|
||||
await QueryPostAPI(
|
||||
QUEUE_API_URL + 'del',
|
||||
values.map((s) => s.id)
|
||||
values.map((s) => s.id),
|
||||
)
|
||||
.then((data) => {
|
||||
if (data.code == 200) {
|
||||
@@ -500,7 +493,7 @@ const columns = [
|
||||
{
|
||||
trigger: () => data.user?.name,
|
||||
default: () => (data.from == QueueFrom.Manual ? '就是主播自己' : data.user?.uid),
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
},
|
||||
@@ -611,7 +604,7 @@ const columns = [
|
||||
},
|
||||
{
|
||||
icon: () => h(NIcon, { component: ReloadCircleSharp }),
|
||||
}
|
||||
},
|
||||
),
|
||||
default: () => '重新放回等待列表',
|
||||
})
|
||||
@@ -633,14 +626,14 @@ const columns = [
|
||||
},
|
||||
{
|
||||
icon: () => h(NIcon, { component: Delete24Filled }),
|
||||
}
|
||||
},
|
||||
),
|
||||
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%;`">
|
||||
<NSpace justify="space-between" align="center" style="height: 100%; margin: 0 5px 0 5px">
|
||||
<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 }}
|
||||
</div>
|
||||
<NText strong style="font-size: 18px">
|
||||
@@ -876,8 +871,8 @@ onUnmounted(() => {
|
||||
queue.findIndex((s) => s.id != queueData.id && s.status == QueueStatus.Progressing) > -1
|
||||
? '还有其他正在正在处理中的用户'
|
||||
: queueData.status == QueueStatus.Waiting && queueData.id
|
||||
? '开始处理'
|
||||
: '取消'
|
||||
? '开始处理'
|
||||
: '取消'
|
||||
}}
|
||||
</NTooltip>
|
||||
<NTooltip>
|
||||
@@ -1021,7 +1016,9 @@ onUnmounted(() => {
|
||||
<NCheckbox v-model:checked="settings.allowIncreasePaymentBySendGift" @update:checked="updateSettings" :disabled="!configCanEdit">
|
||||
在队列中时允许继续发送礼物累计付费量 (仅限上方设定的礼物)
|
||||
</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>
|
||||
<NDivider> 冷却 (单位: 秒) </NDivider>
|
||||
<NCheckbox v-model:checked="settings.enableCooldown" @update:checked="updateSettings" :disabled="!configCanEdit"> 启用排队冷却 </NCheckbox>
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
<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 { useAccount } from '@/api/account'
|
||||
import { EventDataTypes, EventModel } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
import DanmakuClient, { RoomAuthInfo } from '@/data/DanmakuClient'
|
||||
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<{
|
||||
client: DanmakuClient
|
||||
|
||||
@@ -1,33 +1,11 @@
|
||||
<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 { QAInfo, UserInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
|
||||
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'
|
||||
|
||||
const { biliInfo, userInfo } = defineProps<{
|
||||
@@ -72,7 +50,7 @@ async function SendQuestion() {
|
||||
Message: questionMessage.value,
|
||||
ImageBase64: fileList.value?.length > 0 ? await getBase64(fileList.value[0].file) : undefined,
|
||||
},
|
||||
[['Turnstile', token.value]]
|
||||
[['Turnstile', token.value]],
|
||||
)
|
||||
.then((data) => {
|
||||
if (data.code == 200) {
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ScheduleWeekInfo } from '@/api/api-models'
|
||||
import { UserInfo } from '@/api/api-models'
|
||||
import { ScheduleWeekInfo, UserInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI } from '@/api/query'
|
||||
import { SCHEDULE_API_URL, ScheduleTemplateMap } from '@/data/constants'
|
||||
import { NSpin, useMessage } from 'naive-ui'
|
||||
|
||||
@@ -14,13 +14,12 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { Setting_SongRequest, SongRequestInfo, SongsInfo } from '@/api/api-models'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
import { UserInfo } from '@/api/api-models'
|
||||
import { useAccount } from '@/api/account'
|
||||
import { Setting_SongRequest, SongRequestInfo, SongsInfo, UserInfo } from '@/api/api-models'
|
||||
import { QueryGetAPI, QueryPostAPIWithParams } from '@/api/query'
|
||||
import { SONG_API_URL, SONG_REQUEST_API_URL, SongListTemplateMap } from '@/data/constants'
|
||||
import { NSpin, useMessage } from 'naive-ui'
|
||||
import { useAccount } from '@/api/account'
|
||||
import { computed, onMounted, ref } from 'vue'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
|
||||
|
||||
@@ -3,10 +3,9 @@
|
||||
</template>
|
||||
|
||||
<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 DefaultIndexTemplate from '@/views/view/indexTemplate/DefaultIndexTemplate.vue'
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps<{
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { isDarkMode } from '@/Utils'
|
||||
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
|
||||
|
||||
@@ -26,7 +26,7 @@ function navigate(url: string) {
|
||||
round
|
||||
bordered
|
||||
: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)' }"
|
||||
/>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<script setup lang="ts">
|
||||
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 { computed, onMounted, ref } from 'vue'
|
||||
import SaveCompoent from '@/components/SaveCompoent.vue'
|
||||
|
||||
const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
||||
const table = ref()
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
<script setup lang="ts">
|
||||
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 SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
|
||||
import { CloudAdd20Filled } from '@vicons/fluent'
|
||||
import { NButton, NCard, NCollapse, NCollapseItem, NDivider, NIcon, NTooltip, useMessage } from 'naive-ui'
|
||||
import { h, ref } from 'vue'
|
||||
import { Setting_SongRequest, SongRequestInfo } from '@/api/api-models'
|
||||
import SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
|
||||
|
||||
const accountInfo = useAccount()
|
||||
|
||||
@@ -46,11 +45,11 @@ const buttoms = (song: SongsInfo) => [
|
||||
},
|
||||
{
|
||||
icon: () => h(NIcon, { component: CloudAdd20Filled }),
|
||||
}
|
||||
},
|
||||
),
|
||||
default: () =>
|
||||
!props.songRequestSettings.allowFromWeb || song.options ? '点歌 | 用户不允许从网页点歌, 点击后将复制点歌内容到剪切板' : !accountInfo ? '点歌 | 你需要登录后才能点歌' : '点歌',
|
||||
}
|
||||
},
|
||||
)
|
||||
: undefined,
|
||||
]
|
||||
|
||||
@@ -5,9 +5,9 @@ import { FunctionTypes, Setting_SongRequest, SongRequestInfo, SongsInfo, UserInf
|
||||
import SongPlayer from '@/components/SongPlayer.vue'
|
||||
import SongRequestOBS from '@/views/obs/SongRequestOBS.vue'
|
||||
import { CloudAdd20Filled, Play24Filled } from '@vicons/fluent'
|
||||
import { useDebounceFn, useElementSize, useInfiniteScroll, useWindowSize } from '@vueuse/core'
|
||||
import { debounce, 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 { useWindowSize } from '@vueuse/core'
|
||||
import { throttle } from 'lodash'
|
||||
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'
|
||||
|
||||
const props = defineProps<{
|
||||
@@ -40,7 +40,7 @@ const tags = computed(() => {
|
||||
.map((item) => {
|
||||
return item.tags ?? []
|
||||
})
|
||||
.reduce((prev, curr) => [...prev, ...curr], [])
|
||||
.reduce((prev, curr) => [...prev, ...curr], []),
|
||||
),
|
||||
]
|
||||
}
|
||||
@@ -54,7 +54,7 @@ const authors = computed(() => {
|
||||
.map((item) => {
|
||||
return item.author ?? []
|
||||
})
|
||||
.reduce((prev, curr) => [...prev, ...curr], [])
|
||||
.reduce((prev, curr) => [...prev, ...curr], []),
|
||||
),
|
||||
]
|
||||
}
|
||||
@@ -190,8 +190,8 @@ function loadMore() {
|
||||
songRequestSettings?.allowFromWeb == false || item.options
|
||||
? '点歌 | 用户或此歌曲不允许从网页点歌, 点击后将复制点歌内容到剪切板'
|
||||
: !accountInfo
|
||||
? '点歌 | 你需要登录后才能点歌'
|
||||
: '点歌'
|
||||
? '点歌 | 你需要登录后才能点歌'
|
||||
: '点歌'
|
||||
}}
|
||||
</NTooltip>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user