feat: sort pool topic

This commit is contained in:
KUN1007 2023-11-19 17:13:59 +08:00
parent 02f731e259
commit 876a045c4e
5 changed files with 100 additions and 10 deletions

View file

@ -371,6 +371,9 @@ export default {
pool: { pool: {
load: 'Click to Load More Topics', load: 'Click to Load More Topics',
complete: `Already there's nothing left...`, complete: `Already there's nothing left...`,
view: 'Sort by Views',
like: 'Sort by Likes',
time: 'Sort by Time',
}, },
donate: { donate: {
donate: 'Donate Us', donate: 'Donate Us',

View file

@ -370,6 +370,9 @@ export default {
pool: { pool: {
load: '点击继续加载话题', load: '点击继续加载话题',
complete: '已经。。。一滴也不剩了', complete: '已经。。。一滴也不剩了',
view: '按浏览数排序',
like: '按点赞数排序',
time: '按照时间排序',
}, },
donate: { donate: {
donate: '赞助我们', donate: '赞助我们',

View file

@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, ref } from 'vue' import { computed, onMounted, ref, watch } from 'vue'
import KUNGalgameFooter from '@/components/KUNGalgameFooter.vue' import KUNGalgameFooter from '@/components/KUNGalgameFooter.vue'
import Topic from './components/Topic.vue' import Topic from './components/Topic.vue'
import Bar from './components/Bar.vue' import Bar from './components/Bar.vue'
@ -12,7 +12,7 @@ import type { PoolTopic } from '@/api'
const topics = ref<PoolTopic[]>([]) const topics = ref<PoolTopic[]>([])
const { page } = storeToRefs(useTempPoolStore()) const { page, sortField, sortOrder } = storeToRefs(useTempPoolStore())
const { showKUNGalgamePageWidth } = storeToRefs(useKUNGalgameSettingsStore()) const { showKUNGalgamePageWidth } = storeToRefs(useKUNGalgameSettingsStore())
const isLoadingComplete = ref(false) const isLoadingComplete = ref(false)
@ -24,6 +24,15 @@ const getTopics = async () => {
return (await useTempPoolStore().getTopics()).data return (await useTempPoolStore().getTopics()).data
} }
watch(
() => [sortField.value, sortOrder.value],
async () => {
isLoadingComplete.value = false
useTempPoolStore().resetPageStatus()
topics.value = await getTopics()
}
)
const handleLoadTopics = async () => { const handleLoadTopics = async () => {
if (isLoadingComplete.value) { if (isLoadingComplete.value) {
return return

View file

@ -1,17 +1,35 @@
<script setup lang="ts"> <script setup lang="ts">
import { Icon } from '@iconify/vue' import { Icon } from '@iconify/vue'
import { useTempPoolStore } from '@/store/temp/pool'
import { storeToRefs } from 'pinia'
import { sortItem } from './sortItem'
const { sortField, sortOrder } = storeToRefs(useTempPoolStore())
</script> </script>
<template> <template>
<div class="bar"> <div class="bar">
<div class="sort"> <div class="sort">
<div class="func"> <div class="func">
<div><Icon icon="ic:outline-remove-red-eye" /> 按照浏览数排序</div> <div
class="item"
v-for="item in sortItem"
:key="item.index"
@click="sortField = item.field"
>
<Icon :icon="item.icon" />
<span>{{ $tm(`pool.${item.name}`) }}</span>
</div>
<div><Icon icon="line-md:thumbs-up-twotone" /> 按照点赞数排序</div> <div class="order">
<span @click="sortOrder = 'asc'">
<div> <Icon icon="tdesign:order-ascending" />
<Icon class="hourglass" icon="eos-icons:hourglass" /> 按照时间排序 </span>
<span @click="sortOrder = 'desc'">
<Icon icon="tdesign:order-descending" />
</span>
</div> </div>
</div> </div>
@ -45,14 +63,44 @@ import { Icon } from '@iconify/vue'
cursor: pointer; cursor: pointer;
display: none; display: none;
background-color: var(--kungalgame-trans-white-2); background-color: var(--kungalgame-trans-white-2);
border: 1px solid var(--kungalgame-blue-1); border: 1px solid var(--kungalgame-blue-4);
top: 0; top: 0;
}
& > div { .item {
display: flex;
justify-content: center;
align-items: center;
padding: 8px;
span {
margin-left: 8px;
}
&:hover {
background-color: var(--kungalgame-trans-blue-1);
}
}
.order {
display: flex;
&:hover {
background-color: var(--kungalgame-trans-white-2);
}
span {
padding: 8px; padding: 8px;
width: 100%;
height: 100%;
display: flex;
justify-content: space-around;
align-items: center;
color: var(--kungalgame-blue-4);
&:hover { &:hover {
background-color: var(--kungalgame-trans-blue-1); background-color: var(--kungalgame-blue-4);
color: var(--kungalgame-white);
} }
} }
} }

View file

@ -0,0 +1,27 @@
interface Sort {
index: number
icon: string
name: string
field: string
}
export const sortItem: Sort[] = [
{
index: 1,
icon: 'ic:outline-remove-red-eye',
name: 'view',
field: 'views',
},
{
index: 2,
icon: 'line-md:thumbs-up-twotone',
name: 'like',
field: 'likes_count',
},
{
index: 3,
icon: 'eos-icons:hourglass',
name: 'time',
field: 'time',
},
]