From 73ecf25d9eabb3034eb840ee66355fc443156e97 Mon Sep 17 00:00:00 2001 From: Rewrite0 <49576640+Rewrite0@users.noreply.github.com> Date: Wed, 31 May 2023 22:06:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=A7=84=E5=88=99=E7=A6=81?= =?UTF-8?q?=E7=94=A8=E4=B8=8E=E5=90=AF=E7=94=A8=20&=20=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20useApi=20=E9=87=8D=E6=9E=84=20bangumi=20=E7=9B=B8=E5=85=B3ap?= =?UTF-8?q?i=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ab-edit-rule.vue | 54 +++++++++++++++--- src/pages/index/bangumi.vue | 48 ++++++++-------- src/store/bangumi.ts | 99 +++++++++++++++++++++------------ 3 files changed, 134 insertions(+), 67 deletions(-) diff --git a/src/components/ab-edit-rule.vue b/src/components/ab-edit-rule.vue index fb97f37a..97b9a001 100644 --- a/src/components/ab-edit-rule.vue +++ b/src/components/ab-edit-rule.vue @@ -2,8 +2,9 @@ import type { BangumiRule } from '#/bangumi'; const emit = defineEmits<{ - delete: [{ id: number; deleteFile: boolean }]; - apply: [item: BangumiRule]; + (e: 'disable', opts: { id: number; deleteFile: boolean }): void; + (e: 'apply', rule: BangumiRule): void; + (e: 'enable', id: number): void; }>(); const show = defineModel('show', { default: false }); @@ -18,8 +19,10 @@ watch(show, (val) => { } }); -function emitDelete(deleteFile: boolean) { - emit('delete', { +const close = () => (show.value = false); + +function emitDisable(deleteFile: boolean) { + emit('disable', { id: rule.value.id, deleteFile, }); @@ -27,11 +30,44 @@ function emitDelete(deleteFile: boolean) { function emitApply() { emit('apply', rule.value); } + +function emitEnable() { + emit('enable', rule.value.id); +} + +const popupTitle = computed(() => { + if (rule.value.deleted) { + return 'Enable Rule'; + } else { + return 'Edit Rule'; + } +}); + +const boxSize = computed(() => { + if (rule.value.deleted) { + return 'w-300px'; + } else { + return 'w-380px'; + } +}); diff --git a/src/store/bangumi.ts b/src/store/bangumi.ts index 64b1a10d..0c347c21 100644 --- a/src/store/bangumi.ts +++ b/src/store/bangumi.ts @@ -1,49 +1,78 @@ import type { BangumiRule } from '#/bangumi'; export const useBangumiStore = defineStore('bangumi', () => { - const message = useMessage(); const data = ref(); - const getAll = async () => { - const res = await apiBangumi.getAll(); + function getAll() { + const { execute, onResult } = useApi(apiBangumi.getAll); - const sort = (arr: BangumiRule[]) => { + function sort(arr: BangumiRule[]) { return arr.sort((a, b) => b.id - a.id); + } + + onResult((res) => { + const enabled = sort(res.filter((e) => !e.deleted)); + const disabled = sort(res.filter((e) => e.deleted)); + + data.value = [...enabled, ...disabled]; + }); + + execute(); + } + + function useUpdateRule() { + const { execute, onResult } = useApi(apiBangumi.updateRule, { + failRule: (data) => { + return data.status !== 'success'; + }, + message: { + success: 'Update Success!', + fail: 'Update Failed!', + error: 'Operation Failed!', + }, + }); + + return { + execute, + onResult, }; + } - const enabled = sort(res.filter((e) => !e.deleted)); - const disabled = sort(res.filter((e) => e.deleted)); + function useDisableRule() { + const { execute, onResult } = useApi(apiBangumi.disableRule, { + failRule: (data) => { + return data.status !== 'success'; + }, + message: { + success: 'Disabled Success!', + fail: 'Disabled Failed!', + error: 'Operation Failed!', + }, + }); - data.value = [...enabled, ...disabled]; - }; + return { + execute, + onResult, + }; + } - const updateRule = async (newRule: BangumiRule) => { - try { - const res = await apiBangumi.updateRule(newRule); - if (res.status === 'success') { - message.success('Update Success!'); - return true; - } else { - message.error('Update Failed!'); - } - } catch (error) { - message.error('Operation Failed!'); - } - }; + function useEnableRule() { + const { execute, onResult } = useApi(apiBangumi.enableRule, { + failRule: (data) => { + return data.status !== 'success'; + }, + message: { + success: 'Enabled Success!', + fail: 'Enabled Failed!', + error: 'Operation Failed!', + }, + }); - const removeRule = async (bangumiId: number, deleteFile = false) => { - try { - const res = await apiBangumi.deleteRule(bangumiId, deleteFile); - if (res.status === 'success') { - message.success(`${res.msg} Success!`); - return true; - } else { - message.error('Delete Failed!'); - } - } catch (error) { - message.error('Operation Failed!'); - } - }; + return { + execute, + onResult, + }; + } - return { data, getAll, updateRule, removeRule }; + return { data, getAll, useUpdateRule, useDisableRule, useEnableRule }; });