diff --git a/apps/frontend/src/components/admin/AdminDatePicker.tsx b/apps/frontend/src/components/admin/AdminDatePicker.tsx
new file mode 100644
index 00000000..1fe09d48
--- /dev/null
+++ b/apps/frontend/src/components/admin/AdminDatePicker.tsx
@@ -0,0 +1,52 @@
+import { DatePicker } from 'antd'
+import type { DatePickerProps } from 'antd'
+import type { RangePickerProps } from 'antd/es/date-picker'
+
+import {
+ ADMIN_DATE_FORMAT,
+ ADMIN_DATE_RANGE_PLACEHOLDER,
+ ADMIN_DATE_TIME_FORMAT,
+ ADMIN_DATE_TIME_RANGE_PLACEHOLDER,
+} from '@/lib/dayjs'
+
+type AdminDatePickerProps = DatePickerProps
+
+type AdminRangePickerProps = RangePickerProps
+
+/**
+ * 后台统一日期选择:中文 locale(依赖全局 dayjs zh-cn + ConfigProvider zh_CN)。
+ */
+export function AdminDatePicker({
+ format,
+ placeholder = '请选择日期',
+ ...rest
+}: AdminDatePickerProps) {
+ const resolvedFormat =
+ format ?? (rest.showTime ? ADMIN_DATE_TIME_FORMAT : ADMIN_DATE_FORMAT)
+
+ return
+}
+
+/**
+ * 后台统一日期范围:默认 YYYY-MM-DD;showTime 时 YYYY-MM-DD HH:mm:ss。
+ */
+export function AdminRangePicker({
+ format,
+ placeholder,
+ ...rest
+}: AdminRangePickerProps) {
+ const withTime = Boolean(rest.showTime)
+ const resolvedFormat = format ?? (withTime ? ADMIN_DATE_TIME_FORMAT : ADMIN_DATE_FORMAT)
+ const resolvedPlaceholder =
+ placeholder ?? (withTime ? ADMIN_DATE_TIME_RANGE_PLACEHOLDER : ADMIN_DATE_RANGE_PLACEHOLDER)
+
+ return (
+
+ )
+}
+
+export default AdminDatePicker
diff --git a/apps/frontend/src/lib/dayjs.ts b/apps/frontend/src/lib/dayjs.ts
new file mode 100644
index 00000000..7116cd32
--- /dev/null
+++ b/apps/frontend/src/lib/dayjs.ts
@@ -0,0 +1,25 @@
+/**
+ * 全局 dayjs 中文与插件初始化。
+ * Ant Design DatePicker 依赖 dayjs 渲染周/月文案,必须在应用入口先 import 本模块。
+ */
+import dayjs from 'dayjs'
+import 'dayjs/locale/zh-cn'
+import customParseFormat from 'dayjs/plugin/customParseFormat'
+import localeData from 'dayjs/plugin/localeData'
+import weekday from 'dayjs/plugin/weekday'
+
+dayjs.extend(customParseFormat)
+dayjs.extend(localeData)
+dayjs.extend(weekday)
+dayjs.locale('zh-cn')
+
+export default dayjs
+export type { Dayjs } from 'dayjs'
+
+/** 仅日期 */
+export const ADMIN_DATE_FORMAT = 'YYYY-MM-DD'
+/** 日期 + 时间 */
+export const ADMIN_DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'
+
+export const ADMIN_DATE_RANGE_PLACEHOLDER: [string, string] = ['开始日期', '结束日期']
+export const ADMIN_DATE_TIME_RANGE_PLACEHOLDER: [string, string] = ['开始时间', '结束时间']
diff --git a/apps/frontend/src/main.tsx b/apps/frontend/src/main.tsx
index 9df4ac25..f1e03f33 100644
--- a/apps/frontend/src/main.tsx
+++ b/apps/frontend/src/main.tsx
@@ -5,6 +5,9 @@ import zhCN from 'antd/locale/zh_CN'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import 'antd/dist/reset.css'
+// 必须在渲染前初始化 dayjs 中文,否则 DatePicker 日历周/月仍为英文
+import '@/lib/dayjs'
+
import App from './App'
import './styles/main.css'
diff --git a/apps/frontend/src/pages/admin/AdminAuditLogsPage.tsx b/apps/frontend/src/pages/admin/AdminAuditLogsPage.tsx
index da095270..20a27432 100644
--- a/apps/frontend/src/pages/admin/AdminAuditLogsPage.tsx
+++ b/apps/frontend/src/pages/admin/AdminAuditLogsPage.tsx
@@ -1,13 +1,14 @@
import { ReloadOutlined, SearchOutlined } from '@ant-design/icons'
-import { Alert, Button, Card, DatePicker, Empty, Form, Input, Select, Space, Table, Typography } from 'antd'
+import { Alert, Button, Card, Empty, Form, Input, Select, Space, Table, Typography } from 'antd'
import type { TableColumnsType } from 'antd'
import { useQuery } from '@tanstack/react-query'
-import dayjs from 'dayjs'
import { useMemo } from 'react'
import { useSearchParams } from 'react-router'
+import { AdminRangePicker } from '@/components/admin/AdminDatePicker'
import PageHeader from '@/components/admin/PageHeader'
import StatusTag from '@/components/admin/StatusTag'
+import dayjs from '@/lib/dayjs'
import { fetchAdminAuditLogs } from '@/services/admin'
import type { AdminAuditLogItem } from '@/types/admin'
import { hasAdminRole } from '@/utils/admin-auth'
@@ -169,7 +170,7 @@ export default function AdminAuditLogsPage() {
/>
-
+
diff --git a/apps/frontend/src/pages/admin/AdminCloudtentaclesRecordsPage.tsx b/apps/frontend/src/pages/admin/AdminCloudtentaclesRecordsPage.tsx
index 3215b21e..aafc630c 100644
--- a/apps/frontend/src/pages/admin/AdminCloudtentaclesRecordsPage.tsx
+++ b/apps/frontend/src/pages/admin/AdminCloudtentaclesRecordsPage.tsx
@@ -8,7 +8,6 @@ import {
Alert,
Button,
Card,
- DatePicker,
Image as AntdImage,
Input,
Modal,
@@ -19,11 +18,11 @@ import {
Typography,
} from 'antd'
import type { TableColumnsType } from 'antd'
-import dayjs from 'dayjs'
-import type { Dayjs } from 'dayjs'
import { useEffect, useMemo, useState } from 'react'
+import { AdminRangePicker } from '@/components/admin/AdminDatePicker'
import PageHeader from '@/components/admin/PageHeader'
+import dayjs, { type Dayjs } from '@/lib/dayjs'
import { showError, showSuccess } from '@/lib/feedback'
import {
fetchAdminCloudtentaclesDeliveryRecords,
@@ -323,10 +322,9 @@ export default function AdminCloudtentaclesRecordsPage() {
onChange={(event) => setPlatformOrderId(event.target.value)}
onPressEnter={() => loadRecords(1)}
/>
- setDateRange(value)}
/>
diff --git a/apps/frontend/src/pages/admin/AdminKuaishouIndustryPage.tsx b/apps/frontend/src/pages/admin/AdminKuaishouIndustryPage.tsx
index 5f5d04d7..191c2c1f 100644
--- a/apps/frontend/src/pages/admin/AdminKuaishouIndustryPage.tsx
+++ b/apps/frontend/src/pages/admin/AdminKuaishouIndustryPage.tsx
@@ -10,7 +10,6 @@ import {
Alert,
Button,
Card,
- DatePicker,
Input,
InputNumber,
Select,
@@ -21,11 +20,11 @@ import {
Typography,
} from 'antd'
import type { TableColumnsType, TabsProps } from 'antd'
-import dayjs from 'dayjs'
-import type { Dayjs } from 'dayjs'
import { useEffect, useMemo, useState } from 'react'
+import { AdminRangePicker } from '@/components/admin/AdminDatePicker'
import PageHeader from '@/components/admin/PageHeader'
+import dayjs, { type Dayjs } from '@/lib/dayjs'
import { showError, showSuccess } from '@/lib/feedback'
import {
approveAdminKuaishouIndustryRefund,
@@ -717,7 +716,7 @@ export default function AdminKuaishouIndustryPage() {
value={refundListForm.orderId}
onChange={(event) => updateRefundListForm({ orderId: event.target.value })}
/>
- setRefundDateRange(value)}
diff --git a/apps/frontend/src/pages/admin/AdminTasksPage.tsx b/apps/frontend/src/pages/admin/AdminTasksPage.tsx
index 710c51a7..c02425af 100644
--- a/apps/frontend/src/pages/admin/AdminTasksPage.tsx
+++ b/apps/frontend/src/pages/admin/AdminTasksPage.tsx
@@ -5,15 +5,16 @@ import {
SwapOutlined,
UserSwitchOutlined,
} from '@ant-design/icons'
-import { Alert, App, Button, Card, DatePicker, Form, Input, Select, Space, Table, Tag, Typography } from 'antd'
+import { Alert, App, Button, Card, Form, Input, Select, Space, Table, Tag, Typography } from 'antd'
import type { TableColumnsType } from 'antd'
import { useQuery } from '@tanstack/react-query'
-import dayjs from 'dayjs'
import { useMemo, useState } from 'react'
import { useNavigate, useSearchParams } from 'react-router'
+import { AdminRangePicker } from '@/components/admin/AdminDatePicker'
import PageHeader from '@/components/admin/PageHeader'
import StatusTag from '@/components/admin/StatusTag'
+import dayjs from '@/lib/dayjs'
import {
closeAdminTask,
fetchAdminTasks,
@@ -369,7 +370,7 @@ export default function AdminTasksPage() {
-
+