子窗口操作同步主窗口,帖子排序

This commit is contained in:
目棃
2024-03-23 14:31:29 +08:00
parent 55671ab22d
commit 9e030c976b
2 changed files with 47 additions and 9 deletions

View File

@@ -12,6 +12,7 @@
<ToPostCollect v-model="showEdit" :post="props.data" @submit="refresh()" /> <ToPostCollect v-model="showEdit" :post="props.data" @submit="refresh()" />
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { event } from "@tauri-apps/api";
import { onBeforeMount, ref, watch } from "vue"; import { onBeforeMount, ref, watch } from "vue";
import TSUserCollection from "../../plugins/Sqlite/modules/userCollect"; import TSUserCollection from "../../plugins/Sqlite/modules/userCollect";
@@ -34,6 +35,7 @@ const props = defineProps<TbCollectProps>();
onBeforeMount(async () => await refresh()); onBeforeMount(async () => await refresh());
async function refresh(): Promise<void> { async function refresh(): Promise<void> {
await event.emit("refreshCollect");
const check = await TSUserCollection.getPostCollect(props.modelValue.toString()); const check = await TSUserCollection.getPostCollect(props.modelValue.toString());
if (typeof check === "boolean") { if (typeof check === "boolean") {
isCollected.value = check; isCollected.value = check;
@@ -57,6 +59,7 @@ watch(
if (val === undefined) return; if (val === undefined) return;
if (isCollected.value === false) return; if (isCollected.value === false) return;
const res = await TSUserCollection.updatePostInfo(props.modelValue.toString(), val); const res = await TSUserCollection.updatePostInfo(props.modelValue.toString(), val);
await event.emit("refreshCollect");
if (!res) { if (!res) {
showSnackbar({ showSnackbar({
text: "更新帖子信息失败,数据库中不存在帖子信息!", text: "更新帖子信息失败,数据库中不存在帖子信息!",
@@ -82,6 +85,7 @@ async function switchCollect(): Promise<void> {
return; return;
} }
await TSUserCollection.addCollect(props.modelValue.toString(), props.data); await TSUserCollection.addCollect(props.modelValue.toString(), props.data);
await event.emit("refreshCollect");
isCollected.value = true; isCollected.value = true;
showSnackbar({ showSnackbar({
text: "收藏成功", text: "收藏成功",
@@ -99,6 +103,7 @@ async function switchCollect(): Promise<void> {
} }
} }
await TSUserCollection.deletePostCollect(props.modelValue.toString(), true); await TSUserCollection.deletePostCollect(props.modelValue.toString(), true);
await event.emit("refreshCollect");
isCollected.value = false; isCollected.value = false;
showSnackbar({ showSnackbar({
text: "取消收藏成功", text: "取消收藏成功",

View File

@@ -14,6 +14,13 @@
<v-list-item v-bind="props" :title="item.raw.title" :subtitle="item.raw.desc" /> <v-list-item v-bind="props" :title="item.raw.title" :subtitle="item.raw.desc" />
</template> </template>
</v-select> </v-select>
<v-btn
size="small"
class="pc-btn"
icon="mdi-sort"
@click="sortPost(!sortId)"
:title="sortId ? '按更新时间排序' : '按帖子ID排序'"
/>
<v-btn <v-btn
:disabled="selectedMode" :disabled="selectedMode"
size="small" size="small"
@@ -83,8 +90,10 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { event } from "@tauri-apps/api";
import { UnlistenFn } from "@tauri-apps/api/helpers/event";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { computed, onBeforeMount, onMounted, ref, watch } from "vue"; import { computed, onBeforeMount, onMounted, onUnmounted, ref, watch } from "vue";
import showConfirm from "../../components/func/confirm"; import showConfirm from "../../components/func/confirm";
import showSnackbar from "../../components/func/snackbar"; import showSnackbar from "../../components/func/snackbar";
@@ -115,6 +124,9 @@ const view = computed(() => {
const selectedMode = ref<boolean>(false); const selectedMode = ref<boolean>(false);
const selectedPost = ref<Array<string>>([]); const selectedPost = ref<Array<string>>([]);
const showOverlay = ref(false); const showOverlay = ref(false);
const sortId = ref<boolean>(false);
let collectListener: UnlistenFn | undefined = undefined;
onBeforeMount(async () => { onBeforeMount(async () => {
if (!(await TGSqlite.checkTableExist("UFPost"))) { if (!(await TGSqlite.checkTableExist("UFPost"))) {
@@ -124,14 +136,36 @@ onBeforeMount(async () => {
color: "success", color: "success",
}); });
} }
collectListener = await event.listen("refreshCollect", async () => await load());
}); });
onMounted(async () => await load()); onMounted(async () => await load());
onUnmounted(() => {
if (collectListener) collectListener();
});
function updateSelected(v: string[]) { function updateSelected(v: string[]) {
selectedPost.value = v; selectedPost.value = v;
} }
function sortPost(value: boolean) {
let ori = sortId.value;
sortId.value = value;
selected.value = selected.value.sort((a, b) => {
if (sortId.value) {
return Number(b.id) - Number(a.id);
} else {
return Number(b.updated) - Number(a.updated);
}
});
if (ori !== sortId.value) {
showSnackbar({
text: `${sortId.value ? "按帖子ID排序" : "按更新时间排序"}`,
color: "success",
});
}
}
async function load(): Promise<void> { async function load(): Promise<void> {
loadingTitle.value = "获取收藏帖子..."; loadingTitle.value = "获取收藏帖子...";
loading.value = true; loading.value = true;
@@ -139,19 +173,18 @@ async function load(): Promise<void> {
collections.value = await TSUserCollection.getCollectList(); collections.value = await TSUserCollection.getCollectList();
loadingTitle.value = "获取未分类帖子..."; loadingTitle.value = "获取未分类帖子...";
const postUnCollect = await TSUserCollection.getUnCollectPostList(); const postUnCollect = await TSUserCollection.getUnCollectPostList();
if (postUnCollect.length > 0) { if (curSelect.value === "未分类" || collections.value.length === 0) {
selected.value = postUnCollect;
} else if (collections.value.find((c) => c.title === curSelect.value)) {
selected.value = await TSUserCollection.getCollectPostList(curSelect.value);
} else {
selected.value = postUnCollect; selected.value = postUnCollect;
curSelect.value = "未分类"; curSelect.value = "未分类";
} else if (collections.value.length > 0) {
selected.value = await TSUserCollection.getCollectPostList(collections.value[0].title);
curSelect.value = collections.value[0].title;
} else {
selected.value = [];
curSelect.value = "未分类";
} }
sortPost(sortId.value);
selectedMode.value = false; selectedMode.value = false;
selectedPost.value = []; selectedPost.value = [];
page.value = 1; if (page.value > length.value) page.value = 1;
loading.value = false; loading.value = false;
} }