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 }; });