import React, { useState } from 'react'; import { Card, Typography, Row, Col, Form, Input, Select, Button, Table, Switch, DatePicker, TimePicker, message, Alert, Modal } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, SaveOutlined, PlayCircleOutlined, PauseCircleOutlined, HistoryOutlined } from '@ant-design/icons'; import { Link } from 'react-router-dom'; import { marketingDataSource, Ad } from '@/services/marketingDataSource'; const { Title, Text, Paragraph } = Typography; const { Option } = Select; const { Item } = Form; const { RangePicker } = DatePicker; interface Strategy { id: string; name: string; adId: string; adName: string; type: string; condition: string; action: string; status: 'active' | 'inactive' | 'paused'; createdAt: string; lastExecuted: string; executionCount: number; } interface ExecutionHistory { id: string; strategyId: string; strategyName: string; executionTime: string; status: 'success' | 'failed' | 'pending'; result: string; details: string; } const AutoAdjustment: React.FC = () => { const [strategies, setStrategies] = useState([]); const [executionHistory, setExecutionHistory] = useState([]); const [isModalVisible, setIsModalVisible] = useState(false); const [editingStrategy, setEditingStrategy] = useState(null); const [form] = Form.useForm(); const mockStrategies: Strategy[] = [ { id: '1', name: 'ROI自动调整', adId: 'AD001', adName: '智能手表推广', type: 'ROI', condition: 'ROI < 3.0', action: '降低CPC 10%', status: 'active' as const, createdAt: '2026-03-10', lastExecuted: '2026-03-18 10:30', executionCount: 15, }, { id: '2', name: '点击率优化', adId: 'AD002', adName: '无线耳机促销', type: 'CTR', condition: 'CTR < 2.0%', action: '调整创意', status: 'paused' as const, createdAt: '2026-03-08', lastExecuted: '2026-03-15 14:20', executionCount: 8, }, { id: '3', name: '预算自动分配', adId: 'AD003', adName: '智能音箱新品', type: 'Budget', condition: '日花费 < 预算的80%', action: '增加预算10%', status: 'active' as const, createdAt: '2026-03-05', lastExecuted: '2026-03-18 09:15', executionCount: 20, }, ]; const mockExecutionHistory: ExecutionHistory[] = [ { id: '1', strategyId: '1', strategyName: 'ROI自动调整', executionTime: '2026-03-18 10:30', status: 'success', result: 'CPC降低10%', details: 'ROI为2.8,低于阈值3.0,执行降低CPC操作', }, { id: '2', strategyId: '3', strategyName: '预算自动分配', executionTime: '2026-03-18 09:15', status: 'success', result: '预算增加10%', details: '日花费为预算的75%,低于阈值80%,执行增加预算操作', }, { id: '3', strategyId: '1', strategyName: 'ROI自动调整', executionTime: '2026-03-17 16:45', status: 'failed', result: '操作失败', details: 'API调用失败,无法执行调整操作', }, ]; const handleAddStrategy = () => { setEditingStrategy(null); form.resetFields(); setIsModalVisible(true); }; const handleEditStrategy = (strategy: Strategy) => { setEditingStrategy(strategy); form.setFieldsValue(strategy); setIsModalVisible(true); }; const handleDeleteStrategy = (id: string) => { const updatedStrategies = strategies.filter(item => item.id !== id); setStrategies(updatedStrategies); message.success('策略已删除'); }; const handleToggleStrategy = (id: string) => { const updatedStrategies = strategies.map(item => item.id === id ? { ...item, status: item.status === 'active' ? 'paused' : 'active' } : item ); setStrategies(updatedStrategies); message.success('策略状态已更新'); }; const handleSaveStrategy = () => { form.validateFields().then(values => { if (editingStrategy) { const updatedStrategies = strategies.map(item => item.id === editingStrategy.id ? { ...item, ...values } : item ); setStrategies(updatedStrategies); message.success('策略已更新'); } else { const newStrategy: Strategy = { id: (strategies.length + 1).toString(), ...values, status: (values.status || 'inactive') as 'active' | 'inactive' | 'paused', createdAt: new Date().toISOString().split('T')[0], lastExecuted: '-', executionCount: 0, }; setStrategies([...strategies, newStrategy]); message.success('策略已创建'); } setIsModalVisible(false); }); }; const columns = [ { title: '策略名称', dataIndex: 'name', key: 'name', }, { title: '广告', dataIndex: 'adName', key: 'adName', }, { title: '类型', dataIndex: 'type', key: 'type', }, { title: '条件', dataIndex: 'condition', key: 'condition', }, { title: '动作', dataIndex: 'action', key: 'action', }, { title: '状态', dataIndex: 'status', key: 'status', render: (status: string) => ( {status === 'active' ? '活跃' : status === 'paused' ? '暂停' : '未激活'} ), }, { title: '执行次数', dataIndex: 'executionCount', key: 'executionCount', }, { title: '上次执行', dataIndex: 'lastExecuted', key: 'lastExecuted', }, { title: '操作', key: 'action', render: (_: any, record: Strategy) => (
), }, ]; const historyColumns = [ { title: '策略名称', dataIndex: 'strategyName', key: 'strategyName', }, { title: '执行时间', dataIndex: 'executionTime', key: 'executionTime', }, { title: '状态', dataIndex: 'status', key: 'status', render: (status: string) => ( {status === 'success' ? '成功' : status === 'failed' ? '失败' : '待执行'} ), }, { title: '结果', dataIndex: 'result', key: 'result', }, { title: '详情', dataIndex: 'details', key: 'details', }, ]; return (
自动调整策略配置
{/* 策略列表 */} {/* 执行历史 */}
{/* 策略编辑模态框 */} setIsModalVisible(false)} footer={null} >
); }; export default AutoAdjustment;