update
This commit is contained in:
@@ -907,7 +907,7 @@ const radarChartOptions = {
|
|||||||
class="stat-ac-rate"
|
class="stat-ac-rate"
|
||||||
>
|
>
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<Icon icon="streamline-emojis:check-mark" width="20" />
|
<Icon icon="fluent-emoji:check-mark-button" width="20" />
|
||||||
</template>
|
</template>
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-gi>
|
</n-gi>
|
||||||
|
|||||||
@@ -204,8 +204,8 @@ onMounted(() => {
|
|||||||
<IconButton
|
<IconButton
|
||||||
:icon="
|
:icon="
|
||||||
syncEnabled
|
syncEnabled
|
||||||
? 'ph:wifi-slash'
|
? 'streamline-ultimate-color:wifi-off'
|
||||||
: 'ph:wifi-high'
|
: 'streamline-ultimate-color:wifi-signal-2'
|
||||||
"
|
"
|
||||||
:tip="syncEnabled ? SYNC_MESSAGES.SYNC_ON : SYNC_MESSAGES.SYNC_OFF"
|
:tip="syncEnabled ? SYNC_MESSAGES.SYNC_ON : SYNC_MESSAGES.SYNC_OFF"
|
||||||
:type="syncEnabled ? 'warning' : 'default'"
|
:type="syncEnabled ? 'warning' : 'default'"
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
v-if="hasCommented"
|
v-if="hasCommented"
|
||||||
icon="noto:star"
|
icon="fluent-emoji:star"
|
||||||
:width="24"
|
:width="24"
|
||||||
v-for="(_, i) in description_rating"
|
v-for="(_, i) in description_rating"
|
||||||
:key="i"
|
:key="i"
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
v-if="hasCommented"
|
v-if="hasCommented"
|
||||||
icon="noto:star"
|
icon="fluent-emoji:star"
|
||||||
:width="24"
|
:width="24"
|
||||||
v-for="(_, i) in difficulty_rating"
|
v-for="(_, i) in difficulty_rating"
|
||||||
:key="i"
|
:key="i"
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
>
|
>
|
||||||
<Icon
|
<Icon
|
||||||
v-if="hasCommented"
|
v-if="hasCommented"
|
||||||
icon="noto:star"
|
icon="fluent-emoji:star"
|
||||||
:width="24"
|
:width="24"
|
||||||
v-for="(_, i) in difficulty_rating"
|
v-for="(_, i) in difficulty_rating"
|
||||||
:key="i"
|
:key="i"
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ const numbers = computed(() => {
|
|||||||
suffix: "",
|
suffix: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
icon: "emojione:chart-increasing",
|
icon: "fluent-emoji:chart-increasing",
|
||||||
title: getACRateNumber(
|
title: getACRateNumber(
|
||||||
problem.value?.accepted_number ?? 0,
|
problem.value?.accepted_number ?? 0,
|
||||||
problem.value?.submission_number ?? 0,
|
problem.value?.submission_number ?? 0,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ function showCodePanel(id: string, problem: string) {
|
|||||||
|
|
||||||
const columns: DataTableColumn<Submission>[] = [
|
const columns: DataTableColumn<Submission>[] = [
|
||||||
{
|
{
|
||||||
title: renderTableTitle("提交时间", "noto:seven-oclock"),
|
title: renderTableTitle("提交时间", "fluent-emoji:seven-oclock"),
|
||||||
key: "create_time",
|
key: "create_time",
|
||||||
width: 200,
|
width: 200,
|
||||||
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ function handleJoin() {
|
|||||||
<n-h2 style="margin: 0">{{ problemSet.title }}</n-h2>
|
<n-h2 style="margin: 0">{{ problemSet.title }}</n-h2>
|
||||||
<n-tooltip trigger="hover" v-if="problemSet.description">
|
<n-tooltip trigger="hover" v-if="problemSet.description">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<Icon width="20" icon="emojione:information" />
|
<Icon width="20" icon="fluent-emoji:information" />
|
||||||
</template>
|
</template>
|
||||||
{{ problemSet.description }}
|
{{ problemSet.description }}
|
||||||
</n-tooltip>
|
</n-tooltip>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ function handleProblemClick(problemId: string) {
|
|||||||
<Icon
|
<Icon
|
||||||
style="margin-right: 10px"
|
style="margin-right: 10px"
|
||||||
width="48"
|
width="48"
|
||||||
icon="noto:check-mark-button"
|
icon="fluent-emoji:check-mark-button"
|
||||||
v-if="problemSetProblem.is_completed"
|
v-if="problemSetProblem.is_completed"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|||||||
@@ -642,7 +642,7 @@ watch(
|
|||||||
class="stat-ac-rate"
|
class="stat-ac-rate"
|
||||||
>
|
>
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<Icon icon="streamline-emojis:check-mark" width="20" />
|
<Icon icon="fluent-emoji:check-mark-button" width="20" />
|
||||||
</template>
|
</template>
|
||||||
</n-statistic>
|
</n-statistic>
|
||||||
</n-gi>
|
</n-gi>
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ watch(
|
|||||||
const columns = computed(() => {
|
const columns = computed(() => {
|
||||||
const res: DataTableColumn<SubmissionListItem>[] = [
|
const res: DataTableColumn<SubmissionListItem>[] = [
|
||||||
{
|
{
|
||||||
title: renderTableTitle("提交时间", "noto:seven-oclock"),
|
title: renderTableTitle("提交时间", "fluent-emoji:seven-oclock"),
|
||||||
key: "create_time",
|
key: "create_time",
|
||||||
minWidth: 200,
|
minWidth: 200,
|
||||||
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
||||||
@@ -319,7 +319,7 @@ const columns = computed(() => {
|
|||||||
const flowchartColumns = computed(() => {
|
const flowchartColumns = computed(() => {
|
||||||
const res: DataTableColumn<FlowchartSubmissionListItem>[] = [
|
const res: DataTableColumn<FlowchartSubmissionListItem>[] = [
|
||||||
{
|
{
|
||||||
title: renderTableTitle("提交时间", "noto:seven-oclock"),
|
title: renderTableTitle("提交时间", "fluent-emoji:seven-oclock"),
|
||||||
key: "create_time",
|
key: "create_time",
|
||||||
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
render: (row) => parseTime(row.create_time, "YYYY-MM-DD HH:mm:ss"),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ defineProps<{ value: string }>()
|
|||||||
const [copied, toggle] = useToggle()
|
const [copied, toggle] = useToggle()
|
||||||
const { start } = useTimeoutFn(() => toggle(false), 1000, { immediate: false })
|
const { start } = useTimeoutFn(() => toggle(false), 1000, { immediate: false })
|
||||||
|
|
||||||
const COPY = h(Icon, { icon: "twemoji:clipboard" })
|
const COPY = h(Icon, { icon: "fluent-emoji:clipboard" })
|
||||||
const OK = h(Icon, { icon: "twemoji:check-mark-button" })
|
const OK = h(Icon, { icon: "fluent-emoji:check-mark-button" })
|
||||||
|
|
||||||
async function handleClick(value: string) {
|
async function handleClick(value: string) {
|
||||||
const success = await copyToClipboard(value)
|
const success = await copyToClipboard(value)
|
||||||
|
|||||||
@@ -120,47 +120,47 @@ const menus = computed<MenuOption[]>(() => [
|
|||||||
{
|
{
|
||||||
label: () => h(RouterLink, { to: "/learn/01" }, { default: () => "自学" }),
|
label: () => h(RouterLink, { to: "/learn/01" }, { default: () => "自学" }),
|
||||||
key: "learn",
|
key: "learn",
|
||||||
icon: renderIcon("twemoji:books"),
|
icon: renderIcon("fluent-emoji:books"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () => h(RouterLink, { to: "/" }, { default: () => "题目" }),
|
label: () => h(RouterLink, { to: "/" }, { default: () => "题目" }),
|
||||||
key: "problem",
|
key: "problem",
|
||||||
icon: renderIcon("twemoji:memo"),
|
icon: renderIcon("fluent-emoji:memo"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
h(RouterLink, { to: "/problemset" }, { default: () => "题单" }),
|
h(RouterLink, { to: "/problemset" }, { default: () => "题单" }),
|
||||||
key: "problemset",
|
key: "problemset",
|
||||||
icon: renderIcon("twemoji:clipboard"),
|
icon: renderIcon("fluent-emoji:clipboard"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
h(RouterLink, { to: "/submission" }, { default: () => "提交" }),
|
h(RouterLink, { to: "/submission" }, { default: () => "提交" }),
|
||||||
key: "submission",
|
key: "submission",
|
||||||
icon: renderIcon("twemoji:inbox-tray"),
|
icon: renderIcon("fluent-emoji:inbox-tray"),
|
||||||
show: userStore.showSubmissions,
|
show: userStore.showSubmissions,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () => h(RouterLink, { to: "/contest" }, { default: () => "比赛" }),
|
label: () => h(RouterLink, { to: "/contest" }, { default: () => "比赛" }),
|
||||||
key: "contest",
|
key: "contest",
|
||||||
icon: renderIcon("twemoji:chequered-flag"),
|
icon: renderIcon("fluent-emoji:chequered-flag"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () => h(RouterLink, { to: "/rank" }, { default: () => "排名" }),
|
label: () => h(RouterLink, { to: "/rank" }, { default: () => "排名" }),
|
||||||
key: "rank",
|
key: "rank",
|
||||||
icon: renderIcon("twemoji:trophy"),
|
icon: renderIcon("fluent-emoji:trophy"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () => h(RouterLink, { to: "/class/pk" }, { default: () => "班级" }),
|
label: () => h(RouterLink, { to: "/class/pk" }, { default: () => "班级" }),
|
||||||
show: false,
|
show: false,
|
||||||
key: "class",
|
key: "class",
|
||||||
icon: renderIcon("twemoji:crossed-swords"),
|
icon: renderIcon("fluent-emoji:crossed-swords"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
h(RouterLink, { to: "/announcement" }, { default: () => "公告" }),
|
h(RouterLink, { to: "/announcement" }, { default: () => "公告" }),
|
||||||
key: "announcement",
|
key: "announcement",
|
||||||
icon: renderIcon("twemoji:loudspeaker"),
|
icon: renderIcon("fluent-emoji:loudspeaker"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: () =>
|
label: () =>
|
||||||
@@ -171,7 +171,7 @@ const menus = computed<MenuOption[]>(() => [
|
|||||||
),
|
),
|
||||||
show: userStore.isAdminRole,
|
show: userStore.isAdminRole,
|
||||||
key: "admin",
|
key: "admin",
|
||||||
icon: renderIcon("twemoji:gear"),
|
icon: renderIcon("fluent-emoji:gear"),
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ function handleMenuSelect(key: string) {
|
|||||||
@select="handleMenuSelect"
|
@select="handleMenuSelect"
|
||||||
>
|
>
|
||||||
<n-button>
|
<n-button>
|
||||||
<Icon icon="twemoji:artist-palette" height="20"></Icon>
|
<Icon icon="fluent-emoji:artist-palette" height="20"></Icon>
|
||||||
<span style="padding-left: 8px">菜单</span>
|
<span style="padding-left: 8px">菜单</span>
|
||||||
</n-button>
|
</n-button>
|
||||||
</n-dropdown>
|
</n-dropdown>
|
||||||
@@ -304,8 +304,8 @@ function handleMenuSelect(key: string) {
|
|||||||
</div>
|
</div>
|
||||||
<n-button :bordered="false" circle @click="toggleDark">
|
<n-button :bordered="false" circle @click="toggleDark">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<Icon v-if="isDark" icon="twemoji:sun-behind-small-cloud"></Icon>
|
<Icon v-if="isDark" icon="fluent-emoji:sun-behind-small-cloud"></Icon>
|
||||||
<Icon v-else icon="twemoji:cloud-with-lightning-and-rain"></Icon>
|
<Icon v-else icon="fluent-emoji:cloud-with-lightning-and-rain"></Icon>
|
||||||
</template>
|
</template>
|
||||||
</n-button>
|
</n-button>
|
||||||
</n-flex>
|
</n-flex>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<n-tooltip>
|
<n-tooltip>
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<n-button circle :type="type ?? 'default'" @click="$emit('click')">
|
<n-button round :type="type ?? 'default'" @click="$emit('click')">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<Icon :icon="icon" />
|
<Icon :icon="icon" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Reference in New Issue
Block a user