refactor event

This commit is contained in:
Timi
2026-08-06 20:53:22 +08:00
parent 1243068fc3
commit 9df6dfaf59
37 changed files with 1584 additions and 2316 deletions
+28 -23
View File
@@ -39,13 +39,13 @@
</template>
</t-cell>
</t-cell-group>
<div v-else class="empty-block" v-text="loading ? '正在加载登记事件' : '暂无登记事件'" />
<div v-else class="empty-block" v-text="isLoading ? '正在加载登记事件' : '暂无登记事件'" />
</div>
<t-button
class="save"
theme="primary"
:loading="saving"
:disabled="!sortDirty || saving || loading"
:loading="isSaving"
:disabled="!sortDirty || isSaving || isLoading"
@click="saveSort"
>
保存排序
@@ -65,12 +65,18 @@ defineOptions({
});
const navBarStore = useNavBarStore();
// ---------- 列表数据 ----------
const defaultColor = "#2f88ff";
const eventList = ref<EventItem[]>([]);
const sortListRef = ref<HTMLElement>();
const loading = ref(false);
const saving = ref(false);
const isLoading = ref(false);
const isSaving = ref(false);
const sortDirty = ref(false);
// ---------- 拖拽状态 ----------
const draggingIndex = ref(-1);
let pointerId: number | undefined;
let pointerStartY = 0;
@@ -78,6 +84,8 @@ let pointerMoved = false;
let pointerTarget: HTMLElement | undefined;
let dragInputType: "pointer" | "touch" | undefined;
// ---------- 展示文案 ----------
function getStatusText(status?: EventStatus): string {
if (status === "DRAFT") {
return "草稿";
@@ -98,6 +106,8 @@ function getStatusTheme(status?: EventStatus): TagProps["theme"] {
return "primary";
}
// ---------- 拖拽排序 ----------
function resolveDropIndex(clientY: number): number {
const elements = sortListRef.value?.querySelectorAll<HTMLElement>(".item");
if (!elements?.length) {
@@ -152,7 +162,7 @@ function finishDragState(): void {
}
function startDrag(event: PointerEvent, index: number): void {
if (saving.value || loading.value || dragInputType || !event.isPrimary || event.button !== 0) {
if (isSaving.value || isLoading.value || dragInputType || !event.isPrimary || event.button !== 0) {
return;
}
@@ -184,7 +194,7 @@ function finishDrag(event: PointerEvent): void {
}
function startTouchDrag(event: TouchEvent, index: number): void {
if (saving.value || loading.value || dragInputType || event.touches.length !== 1) {
if (isSaving.value || isLoading.value || dragInputType || event.touches.length !== 1) {
return;
}
@@ -216,12 +226,14 @@ function finishTouchDrag(event: TouchEvent): void {
finishDragState();
}
// ---------- 保存 ----------
async function saveSort(): Promise<void> {
if (!sortDirty.value || saving.value) {
if (!sortDirty.value || isSaving.value) {
return;
}
saving.value = true;
isSaving.value = true;
try {
const idList = eventList.value
.map(item => item.id)
@@ -231,24 +243,18 @@ async function saveSort(): Promise<void> {
item.sort = index;
});
sortDirty.value = false;
showToast("登记事件排序已保存");
Toast.success("登记事件排序已保存");
} catch {
showToast("登记事件排序保存失败", "error");
Toast.error("登记事件排序保存失败");
} finally {
saving.value = false;
isSaving.value = false;
}
}
function showToast(message: string, theme: "success" | "error" = "success"): void {
Toast({
theme,
direction: "row",
message
});
}
// ---------- 页面数据 ----------
async function loadData(): Promise<void> {
loading.value = true;
isLoading.value = true;
try {
const result = await EventAPI.list({
index: 0,
@@ -257,7 +263,7 @@ async function loadData(): Promise<void> {
eventList.value = result.list || [];
sortDirty.value = false;
} finally {
loading.value = false;
isLoading.value = false;
}
}
@@ -266,7 +272,7 @@ onMounted(async () => {
try {
await loadData();
} catch {
showToast("登记事件加载失败", "error");
Toast.error("登记事件加载失败");
}
});
@@ -351,4 +357,3 @@ onUnmounted(() => {
}
}
</style>