@quantabit/reach-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/index.cjs +1123 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +1092 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.iife.js +1124 -0
- package/dist/index.iife.js.map +1 -0
- package/dist/index.umd.js +1125 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +79 -0
- package/types/index.d.ts +82 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/services/reachApi.js","../src/types.js","../src/i18n/index.js","../src/hooks/useReach.js","../src/components/CampaignBuilder.jsx","../src/index.js"],"sourcesContent":["/**\n * Reach SDK - API 客户端\n * 用户触达系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 用户触达 API 客户端\n */\nexport class ReachApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/reach', config);\n }\n\n // ============ 触达任务 ============\n\n /**\n * 获取触达任务列表\n * @param {Object} params - 查询参数\n */\n async getTasks(params = {}) {\n return this.get('/tasks', params);\n }\n\n /**\n * 获取触达任务详情\n * @param {string} taskId - 任务 ID\n */\n async getTask(taskId) {\n return this.get(`/tasks/${taskId}`);\n }\n\n /**\n * 创建触达任务(管理员)\n * @param {Object} data - 任务数据\n */\n async createTask(data) {\n return this.post('/tasks', data);\n }\n\n /**\n * 更新触达任务(管理员)\n * @param {string} taskId - 任务 ID\n * @param {Object} updates - 更新数据\n */\n async updateTask(taskId, updates) {\n return this.put(`/tasks/${taskId}`, updates);\n }\n\n /**\n * 删除触达任务(管理员)\n * @param {string} taskId - 任务 ID\n */\n async deleteTask(taskId) {\n return this.delete(`/tasks/${taskId}`);\n }\n\n // ============ 任务控制 ============\n\n /**\n * 立即执行(管理员)\n * @param {string} taskId - 任务 ID\n */\n async executeNow(taskId) {\n return this.post(`/tasks/${taskId}/execute`);\n }\n\n /**\n * 暂停任务(管理员)\n * @param {string} taskId - 任务 ID\n */\n async pauseTask(taskId) {\n return this.post(`/tasks/${taskId}/pause`);\n }\n\n /**\n * 恢复任务(管理员)\n * @param {string} taskId - 任务 ID\n */\n async resumeTask(taskId) {\n return this.post(`/tasks/${taskId}/resume`);\n }\n\n /**\n * 取消任务(管理员)\n * @param {string} taskId - 任务 ID\n */\n async cancelTask(taskId) {\n return this.post(`/tasks/${taskId}/cancel`);\n }\n\n // ============ 渠道管理 ============\n\n /**\n * 获取触达渠道\n */\n async getChannels() {\n return this.get('/channels');\n }\n\n /**\n * 获取渠道配置\n * @param {string} channelType - 渠道类型\n */\n async getChannelConfig(channelType) {\n return this.get(`/channels/${channelType}/config`);\n }\n\n /**\n * 更新渠道配置(管理员)\n * @param {string} channelType - 渠道类型\n * @param {Object} config - 配置数据\n */\n async updateChannelConfig(channelType, config) {\n return this.put(`/channels/${channelType}/config`, config);\n }\n\n /**\n * 测试渠道发送\n * @param {string} channelType - 渠道类型\n * @param {Object} testData - 测试数据\n */\n async testChannel(channelType, testData) {\n return this.post(`/channels/${channelType}/test`, testData);\n }\n\n // ============ 模板管理 ============\n\n /**\n * 获取消息模板\n * @param {Object} params - 查询参数\n */\n async getTemplates(params = {}) {\n return this.get('/templates', params);\n }\n\n /**\n * 获取模板详情\n * @param {string} templateId - 模板 ID\n */\n async getTemplate(templateId) {\n return this.get(`/templates/${templateId}`);\n }\n\n /**\n * 创建模板(管理员)\n * @param {Object} data - 模板数据\n */\n async createTemplate(data) {\n return this.post('/templates', data);\n }\n\n /**\n * 更新模板(管理员)\n * @param {string} templateId - 模板 ID\n * @param {Object} updates - 更新数据\n */\n async updateTemplate(templateId, updates) {\n return this.put(`/templates/${templateId}`, updates);\n }\n\n /**\n * 预览模板\n * @param {string} templateId - 模板 ID\n * @param {Object} variables - 变量数据\n */\n async previewTemplate(templateId, variables = {}) {\n return this.post(`/templates/${templateId}/preview`, { variables });\n }\n\n // ============ 受众管理 ============\n\n /**\n * 获取受众列表\n * @param {Object} params - 查询参数\n */\n async getAudiences(params = {}) {\n return this.get('/audiences', params);\n }\n\n /**\n * 创建受众(管理员)\n * @param {Object} data - 受众数据\n */\n async createAudience(data) {\n return this.post('/audiences', data);\n }\n\n /**\n * 预估受众规模\n * @param {Object} conditions - 筛选条件\n */\n async estimateAudienceSize(conditions) {\n return this.post('/audiences/estimate', conditions);\n }\n\n // ============ 统计分析 ============\n\n /**\n * 获取任务统计\n * @param {string} taskId - 任务 ID\n */\n async getTaskStats(taskId) {\n return this.get(`/tasks/${taskId}/stats`);\n }\n\n /**\n * 获取整体统计\n * @param {Object} params - 统计参数\n */\n async getOverallStats(params = {}) {\n return this.get('/stats', params);\n }\n\n /**\n * 获取发送记录\n * @param {string} taskId - 任务 ID\n * @param {Object} params - 查询参数\n */\n async getSendLogs(taskId, params = {}) {\n return this.get(`/tasks/${taskId}/logs`, params);\n }\n\n // ============ 兼容性方法 (Campaigns, Push, Popups, Banners, Events) ============\n\n /**\n * 获取活动列表\n * @param {Object} params - 查询参数\n */\n async getCampaigns(params = {}) {\n return this.get('/campaigns', params);\n }\n\n /**\n * 获取活跃的活动列表\n * @param {Object} params - 查询参数\n */\n async getActiveCampaigns(params = {}) {\n return this.get('/campaigns/active', params);\n }\n\n /**\n * 获取活动详情\n * @param {string} campaignId - 活动 ID\n */\n async getCampaign(campaignId) {\n return this.get(`/campaigns/${campaignId}`);\n }\n\n /**\n * 创建活动\n * @param {Object} data - 活动数据\n */\n async createCampaign(data) {\n return this.post('/campaigns', data);\n }\n\n /**\n * 更新活动\n * @param {string} campaignId - 活动 ID\n * @param {Object} data - 更新数据\n */\n async updateCampaign(campaignId, data) {\n return this.put(`/campaigns/${campaignId}`, data);\n }\n\n /**\n * 参与活动\n * @param {string} campaignId - 活动 ID\n * @param {Object} data - 参与数据\n */\n async joinCampaign(campaignId, data = {}) {\n return this.post(`/campaigns/${campaignId}/join`, data);\n }\n\n /**\n * 排期/调度活动\n * @param {string} campaignId - 活动 ID\n * @param {string} scheduledTime - 定时发送时间\n */\n async scheduleCampaign(campaignId, scheduledTime) {\n return this.post(`/campaigns/${campaignId}/schedule`, { scheduledTime });\n }\n\n /**\n * 发送活动\n * @param {string} campaignId - 活动 ID\n */\n async sendCampaign(campaignId) {\n return this.post(`/campaigns/${campaignId}/send`);\n }\n\n /**\n * 暂停活动\n * @param {string} campaignId - 活动 ID\n */\n async pauseCampaign(campaignId) {\n return this.post(`/campaigns/${campaignId}/pause`);\n }\n\n /**\n * 取消活动\n * @param {string} campaignId - 活动 ID\n */\n async cancelCampaign(campaignId) {\n return this.post(`/campaigns/${campaignId}/cancel`);\n }\n\n /**\n * 获取弹窗配置列表\n * @param {Object} params - 查询参数\n */\n async getPopups(params = {}) {\n return this.get('/popups', params);\n }\n\n /**\n * 获取横幅广告列表\n * @param {Object} params - 查询参数\n */\n async getBanners(params = {}) {\n return this.get('/banners', params);\n }\n\n /**\n * 追踪事件\n * @param {string} event - 事件名\n * @param {Object} data - 事件数据\n */\n async trackEvent(event, data = {}) {\n return this.post('/events/track', { event, data });\n }\n\n /**\n * 获取推送首选项\n * @param {Object} params - 查询参数\n */\n async getPushPreferences(params = {}) {\n return this.get('/push/preferences', params);\n }\n\n /**\n * 更新推送首选项\n * @param {Object} data - 首选项数据\n */\n async updatePushPreferences(data = {}) {\n return this.put('/push/preferences', data);\n }\n\n /**\n * 订阅推送\n * @param {Object} params - 订阅参数\n */\n async subscribe(params = {}) {\n return this.post('/push/subscribe', params);\n }\n\n /**\n * 取消订阅推送\n * @param {Object} params - 取消参数\n */\n async unsubscribe(params = {}) {\n return this.post('/push/unsubscribe', params);\n }\n\n /**\n * 获取分群列表\n * @param {Object} params - 查询参数\n */\n async getSegments(params = {}) {\n return this.get('/segments', params);\n }\n\n /**\n * 预估受众规模\n * @param {Object} criteria - 预估条件\n */\n async estimateAudience(criteria = {}) {\n return this.post('/audiences/estimate', criteria);\n }\n}\n\n// 创建默认实例\nexport const reachApi = new ReachApiClient();\n\n\n\nexport default reachApi;\n","\nexport const ChannelType = {};\n\nexport const AudienceType = {};\n\nexport const TemplateType = {};\n\nexport const CampaignStatus = {};\n","/**\n * Reach SDK - 国际化\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n // 触达\n reach: '批量触达',\n campaign: '活动',\n campaigns: '触达活动',\n createCampaign: '创建活动',\n \n // 渠道\n channel: '渠道',\n channels: '渠道',\n email: '邮件',\n sms: '短信',\n push: '推送',\n inApp: '站内信',\n wechat: '微信',\n \n // 状态\n draft: '草稿',\n scheduled: '待发送',\n sending: '发送中',\n sent: '已发送',\n paused: '已暂停',\n cancelled: '已取消',\n \n // 受众\n audience: '受众',\n selectAudience: '选择受众',\n allUsers: '全部用户',\n segment: '用户分群',\n uploadList: '上传名单',\n \n // 内容\n content: '内容',\n template: '模板',\n subject: '主题',\n preview: '预览',\n \n // 发送\n send: '发送',\n sendNow: '立即发送',\n schedule: '定时发送',\n scheduledTime: '发送时间',\n \n // 统计\n delivered: '已送达',\n opened: '已打开',\n clicked: '已点击',\n converted: '已转化',\n failed: '发送失败',\n bounced: '退回',\n unsubscribed: '退订',\n \n // 速率\n sendRate: '发送速率',\n openRate: '打开率',\n clickRate: '点击率',\n conversionRate: '转化率',\n },\n ja: {\n // 触达\n reach: '一括アプローチ',\n campaign: 'アクティビティ',\n campaigns: 'アプローチキャンペーン',\n createCampaign: 'キャンペーン作成',\n \n // 渠道\n channel: 'チャネル',\n channels: 'チャネル',\n email: 'メール',\n sms: 'SMS',\n push: 'プッシュ通知',\n inApp: 'メッセージ',\n wechat: 'WeChat',\n \n // 状态\n draft: '下書き',\n scheduled: '送信待ち',\n sending: '送信中',\n sent: '送信済み',\n paused: '一時停止中',\n cancelled: 'キャンセル済み',\n \n // 受众\n audience: 'ターゲット',\n selectAudience: 'ターゲットを選択',\n allUsers: 'すべてのユーザー',\n segment: 'ユーザーセグメント',\n uploadList: 'リストをアップロード',\n \n // 内容\n content: 'コンテンツ',\n template: 'テンプレート',\n subject: '件名',\n preview: 'プレビュー',\n \n // 发送\n send: '送信',\n sendNow: '今すぐ送信',\n schedule: '予約送信',\n scheduledTime: '送信時間',\n \n // 统计\n delivered: '配達済み',\n opened: '開封済み',\n clicked: 'クリック済み',\n converted: 'コンバージョン済み',\n failed: '送信失敗',\n bounced: 'バウンス',\n unsubscribed: '配信停止',\n \n // 速率\n sendRate: '送信速度',\n openRate: '開封率',\n clickRate: 'クリック率',\n conversionRate: 'コンバージョン率',\n },\n ko: {\n // 触达\n reach: '일괄 도달',\n campaign: '이벤트',\n campaigns: '도달 캠페인',\n createCampaign: '캠페인 생성',\n \n // 渠道\n channel: '채널',\n channels: '채널',\n email: '이메일',\n sms: 'SMS',\n push: '푸시 알림',\n inApp: '사이트 메시지',\n wechat: '위챗',\n \n // 状态\n draft: '초안',\n scheduled: '발송 대기',\n sending: '발송 중',\n sent: '전송됨',\n paused: '일시 중지됨',\n cancelled: '취소됨',\n \n // 受众\n audience: '대상',\n selectAudience: '대상 선택',\n allUsers: '모든 사용자',\n segment: '사용자 그룹',\n uploadList: '목록 업로드',\n \n // 内容\n content: '내용',\n template: '템플릿',\n subject: '주제',\n preview: '미리보기',\n \n // 发送\n send: '보내기',\n sendNow: '즉시 발송',\n schedule: '예약 발송',\n scheduledTime: '발송 시간',\n \n // 统计\n delivered: '도달됨',\n opened: '열어봄',\n clicked: '클릭됨',\n converted: '전환됨',\n failed: '전송 실패',\n bounced: '반송됨',\n unsubscribed: '구독 취소됨',\n \n // 速率\n sendRate: '전송 속도',\n openRate: '오픈율',\n clickRate: '클릭률',\n conversionRate: '전환율',\n },\n en: {\n reach: 'Reach',\n campaign: 'Campaign',\n campaigns: 'Campaigns',\n createCampaign: 'Create Campaign',\n \n channel: 'Channel',\n channels: 'Channels',\n email: 'Email',\n sms: 'SMS',\n push: 'Push',\n inApp: 'In-App',\n wechat: 'WeChat',\n \n draft: 'Draft',\n scheduled: 'Scheduled',\n sending: 'Sending',\n sent: 'Sent',\n paused: 'Paused',\n cancelled: 'Cancelled',\n \n audience: 'Audience',\n selectAudience: 'Select Audience',\n allUsers: 'All Users',\n segment: 'Segment',\n uploadList: 'Upload List',\n \n content: 'Content',\n template: 'Template',\n subject: 'Subject',\n preview: 'Preview',\n \n send: 'Send',\n sendNow: 'Send Now',\n schedule: 'Schedule',\n scheduledTime: 'Scheduled Time',\n \n delivered: 'Delivered',\n opened: 'Opened',\n clicked: 'Clicked',\n converted: 'Converted',\n failed: 'Failed',\n bounced: 'Bounced',\n unsubscribed: 'Unsubscribed',\n \n sendRate: 'Send Rate',\n openRate: 'Open Rate',\n clickRate: 'Click Rate',\n conversionRate: 'Conversion Rate',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) currentLanguage = lang;\n}\n\nexport function getLanguage() {\n return currentLanguage;\n}\n\nexport function t(key) {\n return (messages[currentLanguage] || messages.en)[key] || key;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * Reach SDK - React Hooks\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { reachApi } from '../services/reachApi';\n\n/**\n * useCampaigns - 触达活动列表Hook\n */\nexport function useCampaigns(options = {}) {\n const [campaigns, setCampaigns] = useState([]);\n const [loading, setLoading] = useState(false);\n const [total, setTotal] = useState(0);\n\n const loadCampaigns = useCallback(async () => {\n setLoading(true);\n try {\n const result = await reachApi.getCampaigns(options);\n setCampaigns(result.campaigns || []);\n setTotal(result.total || 0);\n } finally {\n setLoading(false);\n }\n }, [options.status, options.channel]);\n\n useEffect(() => {\n loadCampaigns();\n }, [options.status, options.channel]);\n\n return { campaigns, loading, total, refresh: loadCampaigns };\n}\n\n/**\n * useCampaign - 单个触达活动Hook\n */\nexport function useCampaign(campaignId) {\n const [campaign, setCampaign] = useState(null);\n const [stats, setStats] = useState(null);\n const [loading, setLoading] = useState(false);\n const [saving, setSaving] = useState(false);\n\n const loadCampaign = useCallback(async () => {\n if (!campaignId) return;\n setLoading(true);\n try {\n const [campaignData, statsData] = await Promise.all([\n reachApi.getCampaign(campaignId),\n reachApi.getCampaignStats(campaignId),\n ]);\n setCampaign(campaignData);\n setStats(statsData);\n } finally {\n setLoading(false);\n }\n }, [campaignId]);\n\n // 保存活动\n const saveCampaign = useCallback(async (data) => {\n setSaving(true);\n try {\n const result = campaignId\n ? await reachApi.updateCampaign(campaignId, data)\n : await reachApi.createCampaign(data);\n setCampaign(result);\n return result;\n } finally {\n setSaving(false);\n }\n }, [campaignId]);\n\n // 发送活动\n const sendCampaign = useCallback(async (scheduledTime) => {\n if (!campaignId) return false;\n try {\n if (scheduledTime) {\n await reachApi.scheduleCampaign(campaignId, scheduledTime);\n } else {\n await reachApi.sendCampaign(campaignId);\n }\n loadCampaign();\n return true;\n } catch (e) {\n return false;\n }\n }, [campaignId, loadCampaign]);\n\n // 暂停发送\n const pauseCampaign = useCallback(async () => {\n if (!campaignId) return false;\n try {\n await reachApi.pauseCampaign(campaignId);\n loadCampaign();\n return true;\n } catch (e) {\n return false;\n }\n }, [campaignId, loadCampaign]);\n\n // 取消活动\n const cancelCampaign = useCallback(async () => {\n if (!campaignId) return false;\n try {\n await reachApi.cancelCampaign(campaignId);\n loadCampaign();\n return true;\n } catch (e) {\n return false;\n }\n }, [campaignId, loadCampaign]);\n\n useEffect(() => {\n loadCampaign();\n }, [campaignId]);\n\n return {\n campaign,\n stats,\n loading,\n saving,\n saveCampaign,\n sendCampaign,\n pauseCampaign,\n cancelCampaign,\n refresh: loadCampaign,\n };\n}\n\n/**\n * useTemplates - 模板Hook\n */\nexport function useTemplates(channel) {\n const [templates, setTemplates] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const loadTemplates = useCallback(async () => {\n setLoading(true);\n try {\n const result = await reachApi.getTemplates(channel);\n setTemplates(result.templates || []);\n } finally {\n setLoading(false);\n }\n }, [channel]);\n\n useEffect(() => {\n loadTemplates();\n }, [channel]);\n\n return { templates, loading, refresh: loadTemplates };\n}\n\n/**\n * useAudience - 受众Hook\n */\nexport function useAudience() {\n const [segments, setSegments] = useState([]);\n const [loading, setLoading] = useState(false);\n\n const loadSegments = useCallback(async () => {\n setLoading(true);\n try {\n const result = await reachApi.getSegments();\n setSegments(result.segments || []);\n } finally {\n setLoading(false);\n }\n }, []);\n\n // 获取受众人数预估\n const estimateAudience = useCallback(async (criteria) => {\n try {\n const result = await reachApi.estimateAudience(criteria);\n return result.count || 0;\n } catch (e) {\n return 0;\n }\n }, []);\n\n useEffect(() => {\n loadSegments();\n }, []);\n\n return { segments, loading, estimateAudience, refresh: loadSegments };\n}\n\n","/**\n * Reach SDK - 触达组件\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\nimport { CampaignStatus, ChannelType } from '../types';\n\n/**\n * 状态颜色\n */\nconst statusColors = {\n [CampaignStatus.DRAFT]: '#6B7280',\n [CampaignStatus.SCHEDULED]: '#3B82F6',\n [CampaignStatus.SENDING]: '#F59E0B',\n [CampaignStatus.SENT]: '#10B981',\n [CampaignStatus.PAUSED]: '#EF4444',\n [CampaignStatus.CANCELLED]: '#9CA3AF',\n};\n\n/**\n * 渠道图标\n */\nconst channelIcons = {\n [ChannelType.EMAIL]: '📧',\n [ChannelType.SMS]: '📱',\n [ChannelType.PUSH]: '🔔',\n [ChannelType.IN_APP]: '💬',\n [ChannelType.WECHAT]: '💚',\n};\n\n/**\n * CampaignCard 组件\n */\nexport function CampaignCard({\n campaign,\n onClick,\n onSend,\n onPause,\n onCancel,\n}) {\n const { id, name, channel, status, stats, scheduled_time } = campaign;\n const statusColor = statusColors[status] || '#6B7280';\n const channelIcon = channelIcons[channel] || '📤';\n\n return (\n <div className=\"eco-reach-card\" onClick={() => onClick?.(campaign)}>\n <div className=\"eco-reach-card-header\">\n <span className=\"eco-reach-channel\">{channelIcon}</span>\n <h4 className=\"eco-reach-card-title\">{name}</h4>\n <span\n className=\"eco-reach-status\"\n style={{ backgroundColor: `${statusColor}20`, color: statusColor }}\n >\n {t(status)}\n </span>\n </div>\n\n {/* 统计数据 */}\n {stats && (\n <div className=\"eco-reach-stats\">\n <div className=\"eco-reach-stat\">\n <span className=\"eco-reach-stat-value\">{stats.sent || 0}</span>\n <span className=\"eco-reach-stat-label\">{t('delivered')}</span>\n </div>\n <div className=\"eco-reach-stat\">\n <span className=\"eco-reach-stat-value\">\n {((stats.open_rate || 0) * 100).toFixed(1)}%\n </span>\n <span className=\"eco-reach-stat-label\">{t('openRate')}</span>\n </div>\n <div className=\"eco-reach-stat\">\n <span className=\"eco-reach-stat-value\">\n {((stats.click_rate || 0) * 100).toFixed(1)}%\n </span>\n <span className=\"eco-reach-stat-label\">{t('clickRate')}</span>\n </div>\n <div className=\"eco-reach-stat\">\n <span className=\"eco-reach-stat-value\">\n {((stats.conversion_rate || 0) * 100).toFixed(1)}%\n </span>\n <span className=\"eco-reach-stat-label\">{t('conversionRate')}</span>\n </div>\n </div>\n )}\n\n {/* 定时信息 */}\n {scheduled_time && status === CampaignStatus.SCHEDULED && (\n <div className=\"eco-reach-scheduled\">\n 📅 {t('scheduledTime')}: {new Date(scheduled_time).toLocaleString()}\n </div>\n )}\n\n {/* 操作按钮 */}\n <div className=\"eco-reach-actions\" onClick={e => e.stopPropagation()}>\n {status === CampaignStatus.DRAFT && (\n <button className=\"eco-reach-btn send\" onClick={() => onSend?.(id)}>\n {t('sendNow')}\n </button>\n )}\n {status === CampaignStatus.SENDING && (\n <button className=\"eco-reach-btn pause\" onClick={() => onPause?.(id)}>\n {t('paused')}\n </button>\n )}\n {status === CampaignStatus.SCHEDULED && (\n <button className=\"eco-reach-btn cancel\" onClick={() => onCancel?.(id)}>\n {t('cancelled')}\n </button>\n )}\n </div>\n </div>\n );\n}\n\n/**\n * ChannelSelector 组件\n */\nexport function ChannelSelector({ value, onChange }) {\n const channels = [\n { type: ChannelType.EMAIL, icon: '📧', label: t('email') },\n { type: ChannelType.SMS, icon: '📱', label: t('sms') },\n { type: ChannelType.PUSH, icon: '🔔', label: t('push') },\n { type: ChannelType.IN_APP, icon: '💬', label: t('inApp') },\n { type: ChannelType.WECHAT, icon: '💚', label: t('wechat') },\n ];\n\n return (\n <div className=\"eco-reach-channel-selector\">\n {channels.map(channel => (\n <div\n key={channel.type}\n className={`eco-reach-channel-option ${value === channel.type ? 'active' : ''}`}\n onClick={() => onChange?.(channel.type)}\n >\n <span className=\"eco-reach-channel-icon\">{channel.icon}</span>\n <span className=\"eco-reach-channel-label\">{channel.label}</span>\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * AudienceSelector 组件\n */\nexport function AudienceSelector({\n value,\n segments = [],\n estimatedCount,\n onChange,\n}) {\n return (\n <div className=\"eco-reach-audience\">\n <h4>{t('selectAudience')}</h4>\n \n <div className=\"eco-reach-audience-options\">\n <div\n className={`eco-reach-audience-option ${value?.type === 'all' ? 'active' : ''}`}\n onClick={() => onChange?.({ type: 'all' })}\n >\n <span className=\"eco-reach-audience-icon\">👥</span>\n <span>{t('allUsers')}</span>\n </div>\n \n <div\n className={`eco-reach-audience-option ${value?.type === 'segment' ? 'active' : ''}`}\n onClick={() => onChange?.({ type: 'segment' })}\n >\n <span className=\"eco-reach-audience-icon\">🎯</span>\n <span>{t('segment')}</span>\n </div>\n \n <div\n className={`eco-reach-audience-option ${value?.type === 'upload' ? 'active' : ''}`}\n onClick={() => onChange?.({ type: 'upload' })}\n >\n <span className=\"eco-reach-audience-icon\">📤</span>\n <span>{t('uploadList')}</span>\n </div>\n </div>\n\n {/* 分群选择 */}\n {value?.type === 'segment' && segments.length > 0 && (\n <div className=\"eco-reach-segment-list\">\n {segments.map(segment => (\n <div\n key={segment.id}\n className={`eco-reach-segment-item ${value?.segmentId === segment.id ? 'active' : ''}`}\n onClick={() => onChange?.({ type: 'segment', segmentId: segment.id })}\n >\n <span>{segment.name}</span>\n <span className=\"eco-reach-segment-count\">{segment.user_count} 人</span>\n </div>\n ))}\n </div>\n )}\n\n {/* 预估人数 */}\n {estimatedCount !== undefined && (\n <div className=\"eco-reach-estimated\">\n 预估触达人数: <strong>{estimatedCount.toLocaleString()}</strong> 人\n </div>\n )}\n </div>\n );\n}\n\n/**\n * CampaignStats 组件 - 活动统计\n */\nexport function CampaignStats({ stats }) {\n if (!stats) return null;\n\n const metrics = [\n { key: 'sent', label: t('delivered'), value: stats.sent || 0 },\n { key: 'opened', label: t('opened'), value: stats.opened || 0 },\n { key: 'clicked', label: t('clicked'), value: stats.clicked || 0 },\n { key: 'converted', label: t('converted'), value: stats.converted || 0 },\n { key: 'failed', label: t('failed'), value: stats.failed || 0 },\n { key: 'bounced', label: t('bounced'), value: stats.bounced || 0 },\n ];\n\n return (\n <div className=\"eco-reach-stats-detail\">\n {metrics.map(metric => (\n <div key={metric.key} className=\"eco-reach-stats-item\">\n <div className=\"eco-reach-stats-value\">{metric.value.toLocaleString()}</div>\n <div className=\"eco-reach-stats-label\">{metric.label}</div>\n {stats.total > 0 && (\n <div className=\"eco-reach-stats-rate\">\n {((metric.value / stats.total) * 100).toFixed(1)}%\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * CampaignList 组件\n */\nexport function CampaignList({\n campaigns = [],\n loading = false,\n onCampaignClick,\n onSend,\n onPause,\n onCancel,\n}) {\n if (loading && campaigns.length === 0) {\n return <div className=\"eco-reach-loading\">加载中...</div>;\n }\n\n if (campaigns.length === 0) {\n return <div className=\"eco-reach-empty\">暂无触达活动</div>;\n }\n\n return (\n <div className=\"eco-reach-list\">\n {campaigns.map(campaign => (\n <CampaignCard\n key={campaign.id}\n campaign={campaign}\n onClick={onCampaignClick}\n onSend={onSend}\n onPause={onPause}\n onCancel={onCancel}\n />\n ))}\n </div>\n );\n}\n\n","/**\n * @quantabit/reach-sdk\n * Campaign SDK - Full Version\n */\n\n// API Client\nexport { reachApi, ReachApiClient } from './services/reachApi';\n\n// Types\nexport { CampaignStatus, ChannelType, AudienceType, TemplateType } from './types';\n\n// i18n\nexport { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t } from './i18n';\n\n// React Hooks\nexport { useCampaigns, useCampaign, useTemplates, useAudience } from './hooks/useReach';\n\n// React Components\nexport {\n CampaignCard,\n ChannelSelector,\n AudienceSelector,\n CampaignStats,\n CampaignList,\n} from './components/CampaignBuilder';\n\n// Shortcut Methods\nimport { reachApi } from './services/reachApi';\n\nexport const getActiveCampaigns = (params) => reachApi.getActiveCampaigns(params);\nexport const getCampaign = (campaignId) => reachApi.getCampaign(campaignId);\nexport const joinCampaign = (campaignId, data) => reachApi.joinCampaign(campaignId, data);\nexport const getPopups = (params) => reachApi.getPopups(params);\nexport const getBanners = (params) => reachApi.getBanners(params);\nexport const trackEvent = (event, data) => reachApi.trackEvent(event, data);\nexport const getPushPreferences = (params) => reachApi.getPushPreferences(params);\nexport const updatePushPreferences = (data) => reachApi.updatePushPreferences(data);\nexport const subscribe = (params) => reachApi.subscribe(params);\nexport const unsubscribe = (params) => reachApi.unsubscribe(params);\n\n"],"names":["ReachApiClient","BaseApiClient","constructor","config","getTasks","params","get","getTask","taskId","createTask","data","post","updateTask","updates","put","deleteTask","delete","executeNow","pauseTask","resumeTask","cancelTask","getChannels","getChannelConfig","channelType","updateChannelConfig","testChannel","testData","getTemplates","getTemplate","templateId","createTemplate","updateTemplate","previewTemplate","variables","getAudiences","createAudience","estimateAudienceSize","conditions","getTaskStats","getOverallStats","getSendLogs","getCampaigns","getActiveCampaigns","getCampaign","campaignId","createCampaign","updateCampaign","joinCampaign","scheduleCampaign","scheduledTime","sendCampaign","pauseCampaign","cancelCampaign","getPopups","getBanners","trackEvent","event","getPushPreferences","updatePushPreferences","subscribe","unsubscribe","getSegments","estimateAudience","criteria","reachApi","ChannelType","AudienceType","TemplateType","CampaignStatus","SUPPORTED_LANGUAGES","messages","zh","reach","campaign","campaigns","channel","channels","email","sms","push","inApp","wechat","draft","scheduled","sending","sent","paused","cancelled","audience","selectAudience","allUsers","segment","uploadList","content","template","subject","preview","send","sendNow","schedule","delivered","opened","clicked","converted","failed","bounced","unsubscribed","sendRate","openRate","clickRate","conversionRate","ja","ko","en","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","useCampaigns","options","setCampaigns","useState","loading","setLoading","total","setTotal","loadCampaigns","useCallback","result","status","useEffect","refresh","useCampaign","setCampaign","stats","setStats","saving","setSaving","loadCampaign","campaignData","statsData","Promise","all","getCampaignStats","saveCampaign","e","useTemplates","templates","setTemplates","loadTemplates","useAudience","segments","setSegments","loadSegments","count","statusColors","DRAFT","SCHEDULED","SENDING","SENT","PAUSED","CANCELLED","channelIcons","EMAIL","SMS","PUSH","IN_APP","WECHAT","CampaignCard","onClick","onSend","onPause","onCancel","id","name","scheduled_time","statusColor","channelIcon","React","createElement","className","style","backgroundColor","color","open_rate","toFixed","click_rate","conversion_rate","Date","toLocaleString","stopPropagation","ChannelSelector","value","onChange","type","icon","label","map","AudienceSelector","estimatedCount","length","segmentId","user_count","undefined","CampaignStats","metrics","metric","CampaignList","onCampaignClick"],"mappings":"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"}
|