테넌트 관리
| ID | 슬러그 | 이름 | 상태 | 요금제 | 멤버 | 페이지 | 연락처 | |
|---|---|---|---|---|---|---|---|---|
| {{ t.id }} | {{ t.slug }} | {{ t.name }} | {{ t.status }} | {{ t.member_count }} | {{ t.page_count }} | {{ t.contact_email || '—' }} |
테넌트가 없습니다.
새 테넌트 생성
{{ currentTenant.name || '...' }} {{ currentTenant.status }}← 목록
테넌트 정보
기본 광고 추적 ID
멤버 ({{ tenantMembers.length }}명)
| 이메일 | 이름 | 역할 | 2FA | 활성 | 최근 로그인 | |
|---|---|---|---|---|---|---|
| {{ m.email }} | {{ m.name }} | {{ m.role }} | {{ m.totp_enabled ? '' : '—' }} | {{ m.is_active ? '' : '—' }} | {{ m.last_login_at && m.last_login_at.slice(0,16) || '—' }} |
아직 멤버 없음
새 페이지 생성
{{ currentTenant.name }}에 마케터 추가
전체 페이지 (모든 테넌트)
| ID | 테넌트 | 슬러그 | 제목 | 상태 | 언어 | 리드 | |
|---|---|---|---|---|---|---|---|
| {{ p.id }} | {{ tenantName(p.tenant_id) }} | {{ p.slug }} | {{ p.title }} | {{ p.status }} | {{ p.source_lang }} | {{ p.cumulative_leads }} |
페이지 없음
가입 신청 관리
| ID | 이메일 | 이름 | 전화 | 회사 | 이메일인증 | 신청일 | 액션 |
|---|---|---|---|---|---|---|---|
| {{ u.id }} | {{ u.email }} | {{ u.name }} | {{ u.phone || '-' }} | {{ u.tenant_name || '-' }} | {{ u.email_verified ? '✓' : '✗' }} | {{ u.created_at && u.created_at.slice(0,16).replace('T',' ') }} |
항목 없음
어드민 관리
| ID | 이메일 | 이름 | 역할 | 활성 | 2FA | IP 제한 | 최근 로그인 | |
|---|---|---|---|---|---|---|---|---|
| {{ a.id }} | {{ a.email }} | {{ a.name }} | {{ a.role }} | {{ a.is_active ? '✓' : '—' }} | {{ a.totp_enabled ? '✓' : '—' }} | {{ a.ip_restriction_count > 0 ? a.ip_restriction_count + '개' : '없음' }} | {{ a.last_login_at && a.last_login_at.slice(0,16) || '—' }} |
어드민 없음
새 어드민 생성
마케터는 테넌트 상세 페이지에서 추가하세요
{{ currentAdmin.name || '...' }} ({{ currentAdmin.email }})
기본 정보
IP 화이트리스트 ({{ adminIps.length }}개)
| IP / CIDR | 설명 | 활성 | 등록일 | |
|---|---|---|---|---|
{{ ip.ip_or_cidr }} |
{{ ip.label || '—' }} | {{ ip.created_at && ip.created_at.slice(0,10) }} |
IP 제한 없음 (모든 IP 허용)
💡 도움말
IP 형식:
- 단일 IP:
1.2.3.4 - CIDR:
192.168.0.0/24 - IPv6:
2001:db8::1
현재 내 IP를 추가하려면 https://api.ipify.org 같은 사이트에서 확인 후 입력하세요.
IP 추가
비밀번호 리셋 완료
{{ resetResultModal.email }} 계정의 새 비밀번호:
{{ resetResultModal.password }}메신저 국가별 매핑
| 국가 코드 | 국가명 | 추천 메신저 (우선순위) | |
|---|---|---|---|
{{ m.item_key }} |
{{ m.value && m.value.label }} | {{ i+1 }}. {{ p }} |
매핑이 없습니다.
{{ newMcMap.editing ? '매핑 편집' : '국가별 메신저 매핑 추가' }}
{{ i+1 }}.
💰 포인트 관리
AI 작업 단가
| 작업 | 포인트 | 단위 | 비고 | 활성 | |
|---|---|---|---|---|---|
| {{ pp.value.label || pp.item_key }} | {{ pp.value.unit }} | {{ pp.value.note }} |
테넌트 잔액
| ID | 병원 | 잔액 | 충전/조정 |
|---|---|---|---|
| {{ t.id }} | {{ t.name }} | {{ (t.point_balance||0).toLocaleString() }} pt |
💳 결제 관리
| 일시 | 병원 | 패키지 | 금액 | 포인트 | 유형 | 상태 | Stripe |
|---|---|---|---|---|---|---|---|
| {{ (pm.paid_at || pm.created_at) && (pm.paid_at || pm.created_at).slice(5,16).replace('T',' ') }} | {{ pm.tenant_name || ('#'+pm.tenant_id) }} | {{ pm.package_key || '—' }} | ${{ pm.amount_usd.toFixed(2) }} | {{ pm.points.toLocaleString() }}pt | {{ pm.kind === 'auto' ? '⚡ 자동' : '수동' }} | {{ pm.status==='paid' ? '결제완료' : pm.status }} | 열기 ↗ |
⚠️ 작업 오류 {{ opErrorOpenCount }} 미처리
| 시각 | 병원 | 작업 | 오류 | 발행 차감 | 상태 | |
|---|---|---|---|---|---|---|
| {{ e.created_at && e.created_at.slice(5,16).replace('T',' ') }} | {{ e.tenant_name || ('#'+e.tenant_id) }} | {{ e.op_label }} | {{ e.batch_charged ? (e.batch_charged + 'pt') : '—' }} | 미처리환불 {{ e.refunded_points }}pt |
{{ ledgerModal.name }} — 포인트 내역
| 일시 | 유형 | 변동 | 잔액 | 사유 |
|---|---|---|---|---|
| {{ x.created_at && x.created_at.slice(0,16).replace('T',' ') }} | {{ x.type }} | {{ x.amount>0?'+':'' }}{{ x.amount }} | {{ x.balance_after }} | {{ x.reason }} ({{ x.ref_type }}{{ x.ref_id?':'+x.ref_id:'' }}) |