新增打手端滚动公告
This commit is contained in:
@@ -7,6 +7,7 @@ import PageHeader from '@/components/admin/PageHeader'
|
||||
import { fetchAdminWorkerPlatformSummary } from '@/services/admin'
|
||||
import { getAdminRole } from '@/utils/admin-auth'
|
||||
import CategoriesPanel from './panels/CategoriesPanel'
|
||||
import AnnouncementPanel from './panels/AnnouncementPanel'
|
||||
import CancelRequestsPanel from './panels/CancelRequestsPanel'
|
||||
import FinancePanel from './panels/FinancePanel'
|
||||
import FeedbacksPanel from './panels/FeedbacksPanel'
|
||||
@@ -56,6 +57,9 @@ export default function AdminWorkerPlatformPage() {
|
||||
{ key: 'orders', label: '接单工单', children: <WorkOrdersPanel /> },
|
||||
{ key: 'cancel-requests', label: '撤单审核', children: <CancelRequestsPanel /> },
|
||||
{ key: 'feedbacks', label: '问题反馈', children: <FeedbacksPanel /> },
|
||||
...(isAdmin
|
||||
? [{ key: 'announcement', label: '公告管理', children: <AnnouncementPanel /> }]
|
||||
: []),
|
||||
{ key: 'rules', label: '接单模板', children: <ProductRulesPanel /> },
|
||||
{ key: 'product-match', label: '匹配诊断', children: <ProductMatchPanel /> },
|
||||
{ key: 'categories', label: '分类', children: <CategoriesPanel /> },
|
||||
@@ -79,6 +83,7 @@ function loadActiveTabPreference(): string {
|
||||
return saved === 'orders' ||
|
||||
saved === 'cancel-requests' ||
|
||||
saved === 'feedbacks' ||
|
||||
saved === 'announcement' ||
|
||||
saved === 'rules' ||
|
||||
saved === 'product-match' ||
|
||||
saved === 'categories' ||
|
||||
@@ -99,6 +104,7 @@ function isWorkerPlatformTab(tab: string | null): tab is string {
|
||||
'orders',
|
||||
'cancel-requests',
|
||||
'feedbacks',
|
||||
'announcement',
|
||||
'rules',
|
||||
'product-match',
|
||||
'categories',
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
import { useQuery, useQueryClient } from '@tanstack/react-query'
|
||||
import { App, Button, Card, Form, Input, Space, Switch, Typography } from 'antd'
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
import { fetchAdminWorkerAnnouncement, saveAdminWorkerAnnouncement } from '@/services/admin'
|
||||
import type { WorkerAnnouncementConfig } from '@/types/worker-platform'
|
||||
|
||||
export default function AnnouncementPanel() {
|
||||
const { message } = App.useApp()
|
||||
const queryClient = useQueryClient()
|
||||
const [form] = Form.useForm<WorkerAnnouncementConfig>()
|
||||
const [saving, setSaving] = useState(false)
|
||||
const announcementQuery = useQuery({
|
||||
queryKey: ['admin-worker-announcement'],
|
||||
queryFn: fetchAdminWorkerAnnouncement,
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (announcementQuery.data?.data) form.setFieldsValue(announcementQuery.data.data)
|
||||
}, [announcementQuery.data, form])
|
||||
|
||||
async function saveAnnouncement(values: WorkerAnnouncementConfig) {
|
||||
setSaving(true)
|
||||
try {
|
||||
await saveAdminWorkerAnnouncement({
|
||||
enabled: values.enabled !== false,
|
||||
content: String(values.content || '').trim(),
|
||||
})
|
||||
await queryClient.invalidateQueries({ queryKey: ['admin-worker-announcement'] })
|
||||
message.success('公告已保存')
|
||||
} catch (error) {
|
||||
message.error(error instanceof Error ? error.message : '保存公告失败')
|
||||
} finally {
|
||||
setSaving(false)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Card title="打手端滚动公告" bordered={false}>
|
||||
<Form form={form} layout="vertical" onFinish={saveAnnouncement} style={{ maxWidth: 760 }}>
|
||||
<Form.Item name="enabled" valuePropName="checked" label="展示公告">
|
||||
<Switch />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name="content"
|
||||
label="公告内容"
|
||||
rules={[{ required: true, whitespace: true, message: '请填写公告内容' }]}
|
||||
extra="公告会显示在打手端各页面顶部并横向滚动。"
|
||||
>
|
||||
<Input.TextArea rows={4} maxLength={300} showCount placeholder="请输入打手端公告内容" />
|
||||
</Form.Item>
|
||||
<Space>
|
||||
<Button type="primary" htmlType="submit" loading={saving}>
|
||||
保存公告
|
||||
</Button>
|
||||
<Typography.Text type="secondary">关闭后打手端不显示公告栏。</Typography.Text>
|
||||
</Space>
|
||||
</Form>
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user