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

View File

@@ -1,43 +1,43 @@
<!-- eslint-disable vue/no-mutating-props -->
<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 {
NSkeleton,
NAvatar,
NButton,
NCard,
NDivider,
NCheckbox,
NCheckboxGroup,
NModal,
NButton,
NPopover,
NIcon,
NInput,
NSpace,
NSwitch,
NInputNumber,
NCollapseTransition,
NTag,
NSpin,
NRadioGroup,
NList,
NListItem,
NAvatar,
NTooltip,
NRadioButton,
NCollapse,
NCollapseItem,
NCollapseTransition,
NDivider,
NIcon,
NInput,
NInputNumber,
NList,
NListItem,
NModal,
NPopover,
NRadioButton,
NRadioGroup,
NSkeleton,
NSpace,
NSpin,
NSwitch,
NTag,
NTooltip,
} from 'naive-ui'
import router from '@/router'
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 { computed, nextTick, onMounted, ref, watch } from 'vue'
import LiveInfoContainer from './LiveInfoContainer.vue'
import { GetString } from '@/data/DanmakuExport'
import SimpleVirtualList from './SimpleVirtualList.vue'
import DanmakuItem from '@/components/DanmakuItem.vue'
enum RankType {
Danmaku,
@@ -117,7 +117,7 @@ watch(
() => showTools,
(newV, oldV) => {
innerShowTools.value = newV
}
},
)
const danmakuRef = computed(() => {
//不知道为啥不能直接watch
@@ -257,7 +257,7 @@ function Export() {
isExporting.value = true
saveAs(
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
}

View File

@@ -1,8 +1,8 @@
<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 { 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 {
if (price === 0) return `#2a60b2`

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,10 +1,7 @@
<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 { QueryGetAPI } from '@/api/query'
import { SCHEDULE_API_URL } from '@/data/constants'
import { useWindowSize } from '@vueuse/core'
import { NBadge, NButton, NCard, NEllipsis, NEmpty, NGrid, NGridItem, NList, NListItem, NPopconfirm, NSpace, NText, NTime } from 'naive-ui'
const { width } = useWindowSize()

View File

@@ -1,9 +1,9 @@
<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 { NScrollbar } from 'naive-ui/es/_internal'
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'
const scrollerInstRef = ref<ScrollbarInst | null>(null)

View File

@@ -1,8 +1,11 @@
<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 { 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 {
DataTableBaseColumn,
@@ -10,11 +13,9 @@ import {
DataTableRowKey,
FormInst,
FormRules,
NAvatar,
NButton,
NCard,
NCheckbox,
NCollapseTransition,
NDataTable,
NDivider,
NEllipsis,
@@ -36,10 +37,7 @@ import {
NTooltip,
useMessage,
} from 'naive-ui'
import { onMounted, h, ref, watch, computed, VNodeChild } from 'vue'
import { NotepadEdit20Filled, Delete24Filled, Play24Filled, SquareArrowForward24Filled, Info24Filled } from '@vicons/fluent'
import NeteaseIcon from '@/svgs/netease.svg'
import FiveSingIcon from '@/svgs/fivesing.svg'
import { VNodeChild, computed, h, onMounted, ref, watch } from 'vue'
import SongPlayer from './SongPlayer.vue'
const props = defineProps<{

View File

@@ -1,9 +1,9 @@
<script setup lang="ts">
import { SongsInfo, SongFrom } from '@/api/api-models'
import { SongFrom, SongsInfo } from '@/api/api-models'
import { QueryGetAPI } from '@/api/query'
import { SONG_API_URL } from '@/data/constants'
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'
const props = defineProps<{

View File

@@ -1,7 +1,7 @@
<script setup lang="ts">
import { VideoCollectTable } from '@/api/api-models'
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'
const props = defineProps<{

View File

@@ -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('')

View File

@@ -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>

View File

@@ -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()

View File

@@ -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()

View File

@@ -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>

View File

@@ -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>

View File

@@ -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'

View File

@@ -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,8 +53,7 @@ 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) => {
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
@@ -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>

View File

@@ -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()

View File

@@ -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%">

View File

@@ -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 />

View File

@@ -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])

View File

@@ -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()

View File

@@ -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'

View File

@@ -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: () => {

View File

@@ -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,
)
})
}

View File

@@ -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 {

View File

@@ -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()

View File

@@ -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)

View File

@@ -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,7 +139,10 @@ 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' }, () =>
: h(
NGrid,
{ cols: '1 500:2 700:3 900:4 1200:5 ', xGap: '12', yGap: '12', responsive: 'self' },
() =>
videos?.map((v) =>
h(NGridItem, () =>
h(
@@ -165,7 +164,7 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
]),
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) })
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;' }, () =>
@@ -173,14 +172,14 @@ const gridRender = (type: 'padding' | 'reject' | 'accept') => {
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) =>

View File

@@ -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()

View File

@@ -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: () => '确定删除?',
}
},
),
]
],
)
},
},

View File

@@ -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,
)
}
}

View File

@@ -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">
@@ -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>

View File

@@ -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

View File

@@ -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) {

View File

@@ -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'

View File

@@ -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()

View File

@@ -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

View File

@@ -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)' }"
/>

View File

@@ -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()

View File

@@ -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,
]

View File

@@ -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], []),
),
]
}