update alert

This commit is contained in:
2024-01-15 21:30:05 +08:00
parent 6b55855d35
commit 6f4f602488
17 changed files with 461 additions and 346 deletions

View File

@@ -2,6 +2,7 @@
import { useAccount } from '@/api/account'
import { FeedbackStatus, FeedbackType, ResponseFeedbackModel } from '@/api/api-models'
import { QueryGetAPI, QueryPostAPI } from '@/api/query'
import FeedbackItem from '@/components/FeedbackItem.vue'
import { FEEDBACK_API_URL } from '@/data/constants'
import { List } from 'linqts'
import { NButton, NCard, NCheckbox, NDivider, NEllipsis, NEmpty, NInput, NModal, NRadioButton, NRadioGroup, NSpace, NSpin, NTag, NText, NTime, NTooltip, useMessage } from 'naive-ui'
@@ -24,6 +25,7 @@ const order = {
[FeedbackStatus.Todo]: 3,
[FeedbackStatus.Finish]: 4,
[FeedbackStatus.Reject]: 5,
[FeedbackStatus.Developing]: 6,
}
const selectedFeedback = computed(() => {
return feedbacks.value.sort((a, b) => {
@@ -79,7 +81,12 @@ async function add() {
<template>
<NSpace align="center">
<NButton @click="showAddModal = true" type="info">添加反馈</NButton>
<NTooltip :disabled="accountInfo !== undefined">
<template #trigger>
<NButton @click="showAddModal = true" type="info" :disabled="!accountInfo">添加反馈</NButton>
</template>
你需要登陆后才能提交反馈
</NTooltip>
<NText depth="3"> 或者直接加群 873260337 说也可以 </NText>
</NSpace>
<NDivider>
@@ -94,54 +101,41 @@ async function add() {
</NTooltip>
</NDivider>
<NEmpty v-if="feedbacks.length == 0" description="暂无反馈" />
<NSpace v-else>
<NCard v-for="item in selectedFeedback" v-bind:key="item.createAt" size="small" embedded style="min-width: 300px">
<template #header>
<NTag v-if="item.status == FeedbackStatus.Padding" :bordered="false"> 等待 </NTag>
<NTag v-else-if="item.status == FeedbackStatus.Progressing" type="success">
<template #icon>
<NSpin :size="12" />
</template>
处理中
</NTag>
<NTag v-else-if="item.status == FeedbackStatus.Finish" :bordered="false" type="primary"> 已完成 </NTag>
<NTag v-else-if="item.status == FeedbackStatus.Todo" :bordered="false" type="info"> 计划中 </NTag>
<NTag v-else-if="item.status == FeedbackStatus.Reject" :bordered="false" type="warning"> 搁置 </NTag>
<NDivider vertical />
<NTag v-if="!item.userName"> 匿名 </NTag>
<template v-else>
<NEllipsis>
{{ item.userName }}
</NEllipsis>
</template>
<NDivider vertical />
<NTooltip>
<template #trigger>
<NText depth="3" style="font-size: small">
<NTime :time="item.createAt" type="relative" />
</NText>
</template>
<NTime :time="item.createAt" />
</NTooltip>
</template>
<template #header-extra>
<NTag v-if="item.type == FeedbackType.Opinion" :bordered="false" size="small" type="info" :color="{ color: '#5f877d', textColor: 'white' }"> 建议 </NTag>
<NTag v-else-if="item.type == FeedbackType.Bug" :bordered="false" size="small" type="info" :color="{ color: '#875f5f', textColor: 'white' }"> Bug </NTag>
<NTag v-else-if="item.type == FeedbackType.FunctionRequest" :bordered="false" size="small" type="info" :color="{ color: '#5f6887', textColor: 'white' }"> 功能 </NTag>
<NTag v-else-if="item.type == FeedbackType.Other" :bordered="false" size="small" type="info" :color="{ color: '#595557', textColor: 'white' }"> 其他 </NTag>
</template>
{{ item.message }}
<template v-if="item.replyMessage" #footer>
<NDivider style="margin: 0px 0 10px 0" />
<NSpace align="center">
<div :style="`border-radius: 4px; background-color: #75c37f; width: 10px; height: 15px`"></div>
<NText>
{{ item.replyMessage }}
</NText>
</NSpace>
</template>
</NCard>
<NSpace v-else-if="orderType == 'time'">
<FeedbackItem v-for="item in selectedFeedback" :item="item" />
</NSpace>
<template v-else>
<NDivider> 开发计划 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Developing).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Developing)" :item="item" />
</NSpace>
<NDivider> 处理中 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Progressing).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Progressing)" :item="item" />
</NSpace>
<NDivider> 等待回复 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Padding).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Padding)" :item="item" />
</NSpace>
<NDivider> 计划中 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Todo).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Todo)" :item="item" />
</NSpace>
<NDivider> 已完成 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Finish).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Finish)" :item="item" />
</NSpace>
<NDivider> 搁置 </NDivider>
<NEmpty v-if="selectedFeedback.filter((f) => f.status == FeedbackStatus.Reject).length == 0" description="无" />
<NSpace v-else>
<FeedbackItem v-for="item in selectedFeedback.filter((f) => f.status == FeedbackStatus.Reject)" :item="item" />
</NSpace>
</template>
<NModal v-model:show="showAddModal" preset="card" title="添加反馈" style="width: 600px; max-width: 90vw">
<NSpace vertical>
<NInput v-model:value="newFeedback.message" type="textarea" placeholder="请输入反馈内容" clearable show-count maxlength="1000" />

View File

@@ -0,0 +1,9 @@
<script setup lang="ts">
import { NLayoutContent } from 'naive-ui'
import FeedbackManage from './FeedbackManage.vue'
</script>
<template>
<div style="margin: 16px;">
<FeedbackManage />
</div>
</template>

View File

@@ -190,10 +190,13 @@ onMounted(async () => {
</div>
</Transition>
<NMenu :default-value="$route.name?.toString()" :collapsed-width="64" :collapsed-icon-size="22" :options="menuOptions" />
<NSpace justify="center">
<NText depth="3" v-if="width > 150">
<NSpace v-if="width > 150" justify="center" align="center" vertical>
<NText depth="3">
有更多功能建议请
<NButton text type="info" @click="$router.push({ name: 'about' })"> 反馈 </NButton>
<NButton text type="info" tag="a" href="/feedback" target="_blank"> 反馈 </NButton>
</NText>
<NText depth="3">
<NButton text type="info" tag="a" href="/about" target="_blank"> 关于本站 </NButton>
</NText>
</NSpace>
</NLayoutSider>

View File

@@ -2,12 +2,13 @@
import { useAccount } from '@/api/account'
import { QueryGetAPI } from '@/api/query'
import { HISTORY_API_URL } from '@/data/constants'
import { Info24Filled } from '@vicons/fluent'
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 { NAlert, NCard, NSpace, NSpin, useMessage } from 'naive-ui'
import { NAlert, NButton, NCard, NIcon, NSpace, NSpin, NText, NTooltip, useMessage } from 'naive-ui'
import { onMounted, ref } from 'vue'
import VChart from 'vue-echarts'
@@ -486,6 +487,24 @@ onMounted(async () => {
<NAlert v-if="accountInfo?.isBiliVerified != true" type="info"> 尚未进行Bilibili认证 </NAlert>
<NSpin v-else-if="isLoading" show />
<NCard v-else size="small">
<NTooltip trigger="click" placement="bottom">
<template #trigger>
<NButton type="info">
<template #icon>
<NIcon :component="Info24Filled" />
</template>
关于数据更新
</NButton>
</template>
更新速度:
<NSpace vertical>
<span> 粉丝数: 1000粉以下: 每24小时一次, 1000-10000: 每6小时一次, 10000粉以上: 每小时一次 </span>
<span> 舰长数: 10舰以下: 每24小时一次, 10-50: 每12小时一次, 50舰以上: 每6小时一次 </span>
<span> 投稿数据: 每天一次 </span>
</NSpace>
</NTooltip>
<br />
<br />
<NSpace vertical>
<VChart :option="fansOption" style="height: 200px" />
<VChart :option="guardsOption" style="height: 200px" />

View File

@@ -46,7 +46,7 @@ async function get() {
return data.data
}
} catch (err) {}
return {} as { playing: WaitMusicInfo; waiting: WaitMusicInfo[] }
return originSongs.value
}
const isMoreThanContainer = computed(() => {
return originSongs.value.waiting.length * itemHeight > height.value
@@ -95,9 +95,6 @@ onUnmounted(() => {
{{ item.music.name }}
</div>
<p class="music-request-list-item-name">{{ item.from ? item.from.name : '主播添加' }}</p>
<div class="music-request-list-item-level" :has-level="(item.from?.fans_medal_level ?? 0) > 0">
{{ `${item.from?.fans_medal_name} ${item.from?.fans_medal_level}` }}
</div>
</span>
</Vue3Marquee>
</template>