update:原生确认框替换为自定义弹窗

This commit is contained in:
xiaozhu
2026-09-01 17:23:31 +08:00
parent 149e85cf10
commit 026cd085c6
15 changed files with 452 additions and 83 deletions
@@ -1,7 +1,4 @@
// Dialog slice: create-schedule dialog state + cron preview.
// Pure setters + small mutations that read/write only dialog-owned fields.
import type { CronPreview } from "../../../services/api";
import type { CronPreview, Schedule } from "../../../services/api";
import type { StateCreator } from "zustand";
import { handleError, notify, requireApi } from "./helpers";
@@ -12,6 +9,8 @@ import type { SchedulesStore } from "./useSchedulesStore";
export type DialogSliceState = {
createDialogOpen: boolean;
newScheduleName: string;
renameTarget: Schedule | null;
renameName: string;
cronResult: CronPreview | null;
};
@@ -21,10 +20,13 @@ export type DialogSliceActions = {
// pure setters
setCreateDialogOpen: (open: boolean) => void;
setNewScheduleName: (name: string) => void;
setRenameName: (name: string) => void;
setCronResult: (result: CronPreview | null) => void;
// mutations
openCreateDialog: () => void;
openRenameDialog: (target: Schedule) => void;
closeRenameDialog: () => void;
runCronPreview: () => Promise<void>;
};
@@ -35,12 +37,15 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
// ---- initial state ----
createDialogOpen: false,
newScheduleName: "",
renameTarget: null,
renameName: "",
cronResult: null,
// ---- pure setters ----
setCreateDialogOpen: (open) => set({ createDialogOpen: open }),
setNewScheduleName: (name) => set({ newScheduleName: name }),
setRenameName: (name) => set({ renameName: name }),
setCronResult: (result) => set({ cronResult: result }),
// ---- mutations ----
@@ -54,6 +59,20 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
}));
},
openRenameDialog: (target) => {
if (get().busy) return;
set({
contextMenu: null,
renameTarget: target,
renameName: target.schedule_name,
});
},
closeRenameDialog: () => {
if (get().busy === "rename-schedule") return;
set({ renameTarget: null, renameName: "" });
},
runCronPreview: async () => {
const api = requireApi();
const { scheduleForm } = get();
@@ -75,4 +94,4 @@ export const createDialogSlice: StateCreator<SchedulesStore, [], [], DialogSlice
set({ busy: null });
}
},
});
});