+
}
+ loading={configQuery.isFetching}
+ onClick={() => void configQuery.refetch()}
+ >
+ 刷新
+
+ }
+ />
+
+
+
+
+
+
+
+
+
+
+
+ 模板留空将回退到后端默认模板
+
+
+
+
+
+ )
+}
diff --git a/frontend/src/features/admin/AdminCrashOrdersPage.tsx b/frontend/src/features/admin/AdminCrashOrdersPage.tsx
new file mode 100644
index 0000000..a214cb4
--- /dev/null
+++ b/frontend/src/features/admin/AdminCrashOrdersPage.tsx
@@ -0,0 +1,293 @@
+import { useState } from 'react'
+import { keepPreviousData, useQuery, useQueryClient } from '@tanstack/react-query'
+import { Alert, App, Button, Input, Select, Space, Tag, Typography, type TableColumnsType } from 'antd'
+import { ReloadOutlined } from '@ant-design/icons'
+
+import {
+ cancelCrashOrder,
+ completeCrashOrder,
+ fetchCrashOrders,
+ receiveCrashOrder,
+ refundCrashOrder,
+} from '@/features/admin/api'
+import { AdminPageHeader } from '@/features/admin/components/AdminPageHeader'
+import { DataTable } from '@/features/admin/components/DataTable'
+import { FilterBar, FilterField } from '@/features/admin/components/FilterBar'
+import type { AdminCrashOrder } from '@/features/admin/types'
+import { useAdminSessionStore } from '@/stores/adminSession'
+import { formatDateTime, formatMoney, formatText } from '@/shared/utils/format'
+
+const statusMeta: Record