diff --git a/backend/src/common/services/sms-events.constants.ts b/backend/src/common/services/sms-events.constants.ts index 8ddc1e8..9e0a473 100644 --- a/backend/src/common/services/sms-events.constants.ts +++ b/backend/src/common/services/sms-events.constants.ts @@ -59,6 +59,8 @@ export const SMS_EVENT_DEFINITIONS: SmsEventDefinition[] = [ { key: 'provinceCity', label: 'استان و شهر مقصد', sample: 'تهران - تهران' }, { key: 'postalCode', label: 'کد پستی ۱۰ رقمی', sample: '1967812345' }, { key: 'address', label: 'نشانی پستی', sample: 'خیابان ولیعصر، کوچه بهار، پلاک ۴' }, + { key: 'itemsSummary', label: 'خلاصه اقلام سفارش', sample: 'شیر خشک توله سگ (۲)' }, + { key: 'itemCount', label: 'تعداد کل اقلام', sample: '۲' }, { key: 'paymentMethod', label: 'روش پرداخت', sample: 'کارت به کارت' }, { key: 'orderDate', label: 'تاریخ ثبت سفارش', sample: '۱۴۰۳/۰۶/۱۵' }, ], diff --git a/frontend/admin-panel/src/pages/SmsSettingsPage.tsx b/frontend/admin-panel/src/pages/SmsSettingsPage.tsx index 35b3c0b..ecffbcc 100644 --- a/frontend/admin-panel/src/pages/SmsSettingsPage.tsx +++ b/frontend/admin-panel/src/pages/SmsSettingsPage.tsx @@ -43,6 +43,7 @@ import { FileText, } from 'lucide-react'; import { toast } from 'react-hot-toast'; +import { useSearchParams } from 'react-router-dom'; import api from '../services/api'; import Spinner from '../components/ui/Spinner'; import Button from '../components/ui/Button'; @@ -122,7 +123,19 @@ const toPersianDigits = (n: string | number | null | undefined): string => { }; export default function SmsSettingsPage() { - const [activeTab, setActiveTab] = useState<'settings' | 'patterns' | 'triggers' | 'logs'>('patterns'); + const [searchParams, setSearchParams] = useSearchParams(); + const urlTab = searchParams.get('tab'); + const validTabs: ('settings' | 'patterns' | 'triggers' | 'logs')[] = ['settings', 'patterns', 'triggers', 'logs']; + const activeTab: 'settings' | 'patterns' | 'triggers' | 'logs' = + urlTab && validTabs.includes(urlTab as any) ? (urlTab as any) : 'settings'; + + const setActiveTab = (tab: 'settings' | 'patterns' | 'triggers' | 'logs') => { + setSearchParams((prev) => { + const next = new URLSearchParams(prev); + next.set('tab', tab); + return next; + }, { replace: false }); + }; // Config State const [config, setConfig] = useState({ @@ -382,6 +395,20 @@ export default function SmsSettingsPage() { setIsRuleModalOpen(true); }; + const handleDuplicateRule = (rule: SmsRule) => { + setEditingRule(null); // Create new rule on save + setRuleFormTitle(`${rule.title} (کپی)`); + setRuleFormEvent(rule.event); + setRuleFormEnabled(rule.enabled); + setRuleFormRecipientType(rule.recipientType); + setRuleFormCustomPhone(rule.customPhone || ''); + setRuleFormPatternId(String(rule.patternId || '')); + setRuleFormVariables(rule.variables ? [...rule.variables] : []); + setRuleFormDescription(rule.description ? `${rule.description} (رونوشت)` : ''); + setIsRuleModalOpen(true); + toast.info('اطلاعات سناریو تکثیر شد. پس از بازبینی، ذخیره نمایید.'); + }; + const handleSaveRule = async (e: React.FormEvent) => { e.preventDefault(); if (!ruleFormTitle.trim()) { @@ -1367,6 +1394,16 @@ export default function SmsSettingsPage() {
+ +