refactor: 在管理后台各项删除操作中使用自定义确认对话框替换原生 confirm
continuous-integration/drone/push Build is passing

This commit is contained in:
seahi committed 2026-08-15 11:46:10 +08:00
1 parent ffde675f3a
commit 4acf0f03b6
6 files changed
+87 -26

No files matched your search

+15 -6
View File
@@ -2,6 +2,7 @@
import { page } from '$app/stores';
import type { PageData, ActionData } from './$types';
import { createSlugAutoHandler } from '$lib/utils/slugify';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data, form }: { data: PageData; form: ActionData } = $props();
@@ -111,13 +112,21 @@
action="?/delete"
method="POST"
class="inline-form"
onsubmit={(e) => {
if (
!confirm(
`确定要删除${$page.data.aliases?.category || '分类'} "${category.name}" 吗?删除后相关文章将归为未${$page.data.aliases?.category || '分类'}。`
)
)
onsubmit={async (e) => {
if ((e.target as HTMLFormElement).dataset.confirmed === 'true') {
(e.target as HTMLFormElement).removeAttribute('data-confirmed');
return;
}
e.preventDefault();
const form = e.target as HTMLFormElement;
const submitter = e.submitter;
const confirmed = await confirmState.show(
`确定要删除${$page.data.aliases?.category || '分类'} "${category.name}" 吗?删除后相关文章将归为未${$page.data.aliases?.category || '分类'}。`
);
if (confirmed) {
form.dataset.confirmed = 'true';
form.requestSubmit(submitter);
}
}}
>
<input type="hidden" name="id" value={category.id} />
+14 -2
View File
@@ -4,6 +4,7 @@
import { enhance } from '$app/forms';
import type { ActionData, PageData } from './$types';
import { addToast } from '$lib/stores/toast.svelte';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data, form } = $props<{ data: PageData; form: ActionData }>();
@@ -156,8 +157,19 @@
<button
class="action-btn delete-btn"
type="submit"
onclick={(e) => {
if (!confirm('确定要删除此文件吗?此操作不可恢复。')) e.preventDefault();
onclick={async (e) => {
if ((e.currentTarget as HTMLElement).dataset.confirmed === 'true') {
(e.currentTarget as HTMLElement).removeAttribute('data-confirmed');
return;
}
e.preventDefault();
const btn = e.currentTarget as HTMLElement;
const form = btn.closest('form');
const confirmed = await confirmState.show('确定要删除此文件吗?此操作不可恢复。');
if (confirmed && form) {
btn.dataset.confirmed = 'true';
form.requestSubmit(btn);
}
}}
title="删除文件"
>
+14 -6
View File
@@ -2,6 +2,7 @@
import { resolve } from '$app/paths';
import { page } from '$app/stores';
import type { PageData } from './$types';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data }: { data: PageData } = $props();
let selectedIds = $state<string[]>([]);
@@ -33,13 +34,20 @@
action="?/delete"
method="POST"
class="inline-form"
onsubmit={(e) => {
if (
!confirm(
`确定要删除选中的 ${selectedIds.length} 篇${$page.data.aliases?.page || '项目'}吗?操作不可恢复。`
)
) {
onsubmit={async (e) => {
if ((e.target as HTMLFormElement).dataset.confirmed === 'true') {
(e.target as HTMLFormElement).removeAttribute('data-confirmed');
return;
}
e.preventDefault();
const form = e.target as HTMLFormElement;
const submitter = e.submitter;
const confirmed = await confirmState.show(
`确定要删除选中的 ${selectedIds.length} 篇${$page.data.aliases?.page || '项目'}吗?操作不可恢复。`
);
if (confirmed) {
form.dataset.confirmed = 'true';
form.requestSubmit(submitter);
}
}}
>
+14 -6
View File
@@ -2,6 +2,7 @@
import { resolve } from '$app/paths';
import { page } from '$app/stores';
import type { PageData } from './$types';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data }: { data: PageData } = $props();
let selectedIds = $state<string[]>([]);
@@ -33,13 +34,20 @@
action="?/delete"
method="POST"
class="inline-form"
onsubmit={(e) => {
if (
!confirm(
`确定要删除选中的 ${selectedIds.length} 篇${$page.data.aliases?.post || '项目'}吗?操作不可恢复。`
)
) {
onsubmit={async (e) => {
if ((e.target as HTMLFormElement).dataset.confirmed === 'true') {
(e.target as HTMLFormElement).removeAttribute('data-confirmed');
return;
}
e.preventDefault();
const form = e.target as HTMLFormElement;
const submitter = e.submitter;
const confirmed = await confirmState.show(
`确定要删除选中的 ${selectedIds.length} 篇${$page.data.aliases?.post || '项目'}吗?操作不可恢复。`
);
if (confirmed) {
form.dataset.confirmed = 'true';
form.requestSubmit(submitter);
}
}}
>
+15 -2
View File
@@ -3,6 +3,7 @@
import { resolve } from '$app/paths';
import type { ActionData, PageData } from './$types';
import { createSlugAutoHandler } from '$lib/utils/slugify';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data, form }: { data: PageData; form: ActionData } = $props();
let name = $state('');
@@ -105,9 +106,21 @@
method="POST"
action="?/delete"
class="delete-form"
onsubmit={(event) => {
if (!confirm(`确定删除系列“${item.name}”吗?相关文章会保留,但不再属于任何系列。`))
onsubmit={async (event) => {
if ((event.target as HTMLFormElement).dataset.confirmed === 'true') {
(event.target as HTMLFormElement).removeAttribute('data-confirmed');
return;
}
event.preventDefault();
const form = event.target as HTMLFormElement;
const submitter = event.submitter;
const confirmed = await confirmState.show(
`确定删除系列“${item.name}”吗?相关文章会保留,但不再属于任何系列。`
);
if (confirmed) {
form.dataset.confirmed = 'true';
form.requestSubmit(submitter);
}
}}
>
<input type="hidden" name="id" value={item.id} />
+15 -4
View File
@@ -1,6 +1,7 @@
<script lang="ts">
import { page } from '$app/stores';
import type { PageData, ActionData } from './$types';
import { confirmState } from '$lib/stores/confirm.svelte';
let { data, form }: { data: PageData; form: ActionData } = $props();
@@ -64,11 +65,21 @@
action="?/delete"
method="POST"
class="inline-form"
onsubmit={(e) => {
if (
!confirm(`确定要删除${$page.data.aliases?.tag || '标签'} "${tag.name}" 吗?`)
)
onsubmit={async (e) => {
if ((e.target as HTMLFormElement).dataset.confirmed === 'true') {
(e.target as HTMLFormElement).removeAttribute('data-confirmed');
return;
}
e.preventDefault();
const form = e.target as HTMLFormElement;
const submitter = e.submitter;
const confirmed = await confirmState.show(
`确定要删除${$page.data.aliases?.tag || '标签'} "${tag.name}" 吗?`
);
if (confirmed) {
form.dataset.confirmed = 'true';
form.requestSubmit(submitter);
}
}}
>
<input type="hidden" name="id" value={tag.id} />