import { useState } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Card } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Calendar } from '@/components/ui/calendar'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Send, Clock, CalendarIcon } from 'lucide-react'; import { format } from 'date-fns'; import { zhCN } from 'date-fns/locale'; import { MessageTemplate } from '@/types/message'; import { MessageSendFormData } from '../types'; interface SendMessageDialogProps { open: boolean; onOpenChange: (open: boolean) => void; templates: MessageTemplate[]; formData: MessageSendFormData; onFormDataChange: (data: MessageSendFormData) => void; onSend: () => void; getTypeIcon: (type: string) => JSX.Element; getTypeLabel: (type: string) => string; } export function SendMessageDialog({ open, onOpenChange, templates, formData, onFormDataChange, onSend, getTypeIcon, getTypeLabel }: SendMessageDialogProps) { const replaceVariables = (content: string, variables: Record): string => { let result = content; Object.entries(variables).forEach(([key, value]) => { result = result.replace(new RegExp(`\\{\\{${key}\\}\\}`, 'g'), value || `{{${key}}}`); }); return result; }; const handleTemplateChange = (templateId: string) => { const template = templates.find(t => t.id === templateId); if (template) { // 初始化变量 const vars: Record = {}; template.variables.forEach(v => { vars[v] = ''; }); onFormDataChange({ ...formData, templateId, type: template.type, subject: template.subject || '', content: template.content, variables: vars, }); } }; const selectedTemplate = templates.find(t => t.id === formData.templateId); return (
发送消息
选择消息模版并发送消息
{/* 选择模版 */}
{/* 发送方式 */}
{/* 定时发送设置 */} {formData.sendType === 'scheduled' && (
onFormDataChange({ ...formData, scheduledDate: date })} locale={zhCN} disabled={(date) => date < new Date(new Date().setHours(0, 0, 0, 0))} />
onFormDataChange({ ...formData, scheduledTime: e.target.value })} />
)} {/* 接收人 */}