mirror of
https://github.com/lkddi/Xboard.git
synced 2026-04-28 06:47:24 +08:00
feat: enhance plan validation, traffic system and email verification
- feat: add plan price validation - feat: make traffic packages stackable - feat: add commission and invite info to admin order details - feat: apply email whitelist to verification code API - fix: subscription link copy compatibility for non-HTTPS - fix: resolve route editing 500 error in certain cases - refactor: restructure traffic reset logic
This commit is contained in:
Vendored
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+16
-15
File diff suppressed because one or more lines are too long
Vendored
+184
-149
File diff suppressed because one or more lines are too long
Vendored
+116
-1
@@ -162,6 +162,7 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"orderManagement": "Order Management",
|
||||
"couponManagement": "Coupon Management",
|
||||
"userManagement": "User Management",
|
||||
"trafficResetLogs": "Traffic Reset Logs",
|
||||
"ticketManagement": "Ticket Management"
|
||||
},
|
||||
"plugin": {
|
||||
@@ -1216,6 +1217,8 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"basicInfo": "Basic Information",
|
||||
"amountInfo": "Amount Information",
|
||||
"timeInfo": "Time Information",
|
||||
"commissionInfo": "Commission Information",
|
||||
"commissionStatusActive": "Active",
|
||||
"addOrder": "Add Order",
|
||||
"assignOrder": "Assign Order",
|
||||
"fields": {
|
||||
@@ -1229,7 +1232,12 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"refundAmount": "Refund Amount",
|
||||
"deductionAmount": "Deduction Amount",
|
||||
"createdAt": "Created At",
|
||||
"updatedAt": "Updated At"
|
||||
"updatedAt": "Updated At",
|
||||
"commissionStatus": "Commission Status",
|
||||
"commissionAmount": "Commission Amount",
|
||||
"actualCommissionAmount": "Actual Commission",
|
||||
"inviteUser": "Inviter",
|
||||
"inviteUserId": "Inviter ID"
|
||||
},
|
||||
"placeholders": {
|
||||
"email": "Please enter user email",
|
||||
@@ -2000,6 +2008,7 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"orders": "Orders",
|
||||
"invites": "Invites",
|
||||
"traffic_records": "Traffic Records",
|
||||
"reset_traffic": "Reset Traffic",
|
||||
"delete": "Delete",
|
||||
"delete_confirm_title": "Confirm Delete User",
|
||||
"delete_confirm_description": "This action will permanently delete user {{email}} and all associated data, including orders, coupons, traffic records, and support tickets. This action cannot be undone. Do you want to continue?"
|
||||
@@ -2136,6 +2145,7 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"title": "Actions",
|
||||
"send_email": "Send Email",
|
||||
"export_csv": "Export CSV",
|
||||
"traffic_reset_stats": "Traffic Reset Stats",
|
||||
"batch_ban": "Batch Ban",
|
||||
"confirm_ban": {
|
||||
"title": "Confirm Batch Ban",
|
||||
@@ -2163,6 +2173,111 @@ window.XBOARD_TRANSLATIONS['en-US'] = {
|
||||
"required_fields": "Please fill in all required fields"
|
||||
}
|
||||
},
|
||||
"traffic_reset": {
|
||||
"title": "Traffic Reset",
|
||||
"description": "Reset traffic usage for user {{email}}",
|
||||
"tabs": {
|
||||
"reset": "Reset Traffic",
|
||||
"history": "Reset History"
|
||||
},
|
||||
"user_info": "User Information",
|
||||
"warning": {
|
||||
"title": "Important Notice",
|
||||
"irreversible": "Traffic reset operation is irreversible, please proceed with caution",
|
||||
"reset_to_zero": "After reset, user's upload and download traffic will be cleared to zero",
|
||||
"logged": "All reset operations will be logged in the system"
|
||||
},
|
||||
"reason": {
|
||||
"label": "Reset Reason",
|
||||
"placeholder": "Please enter the reason for traffic reset (optional)",
|
||||
"optional": "This field is optional and used to record the reason for reset"
|
||||
},
|
||||
"confirm_reset": "Confirm Reset",
|
||||
"resetting": "Resetting...",
|
||||
"reset_success": "Traffic reset successful",
|
||||
"reset_failed": "Traffic reset failed",
|
||||
"history": {
|
||||
"summary": "Reset Overview",
|
||||
"reset_count": "Reset Count",
|
||||
"last_reset": "Last Reset",
|
||||
"next_reset": "Next Reset",
|
||||
"never": "Never Reset",
|
||||
"no_schedule": "No Scheduled Reset",
|
||||
"records": "Reset Records",
|
||||
"recent_records": "Recent 10 Reset Records",
|
||||
"no_records": "No reset records",
|
||||
"reset_time": "Reset Time",
|
||||
"traffic_cleared": "Traffic Cleared"
|
||||
},
|
||||
"stats": {
|
||||
"title": "Traffic Reset Statistics",
|
||||
"description": "View system traffic reset statistics",
|
||||
"time_range": "Statistics Time Range",
|
||||
"total_resets": "Total Resets",
|
||||
"auto_resets": "Auto Resets",
|
||||
"manual_resets": "Manual Resets",
|
||||
"cron_resets": "Cron Resets",
|
||||
"in_period": "In the last {{days}} days",
|
||||
"breakdown": "Reset Type Breakdown",
|
||||
"breakdown_description": "Percentage breakdown of different reset operation types",
|
||||
"auto_percentage": "Auto Reset Percentage",
|
||||
"manual_percentage": "Manual Reset Percentage",
|
||||
"cron_percentage": "Cron Reset Percentage",
|
||||
"days_options": {
|
||||
"week": "Last Week",
|
||||
"month": "Last Month",
|
||||
"quarter": "Last Quarter",
|
||||
"year": "Last Year"
|
||||
}
|
||||
}
|
||||
},
|
||||
"traffic_reset_logs": {
|
||||
"title": "Traffic Reset Logs",
|
||||
"description": "View detailed records of all traffic reset operations in the system",
|
||||
"columns": {
|
||||
"id": "Log ID",
|
||||
"user": "User",
|
||||
"reset_type": "Reset Type",
|
||||
"trigger_source": "Trigger Source",
|
||||
"cleared_traffic": "Cleared Traffic",
|
||||
"cleared": "Cleared",
|
||||
"upload": "Upload",
|
||||
"download": "Download",
|
||||
"reset_time": "Reset Time",
|
||||
"log_time": "Log Time"
|
||||
},
|
||||
"filters": {
|
||||
"search_user": "Search user email...",
|
||||
"reset_type": "Reset Type",
|
||||
"trigger_source": "Trigger Source",
|
||||
"all_types": "All Types",
|
||||
"all_sources": "All Sources",
|
||||
"start_date": "Start Date",
|
||||
"end_date": "End Date",
|
||||
"apply_date": "Apply Filter",
|
||||
"reset": "Reset Filter",
|
||||
"filter_title": "Filter Options",
|
||||
"filter_description": "Set filter conditions to find specific traffic reset records",
|
||||
"reset_types": {
|
||||
"monthly": "Monthly Reset",
|
||||
"first_day_month": "First Day of Month Reset",
|
||||
"yearly": "Yearly Reset",
|
||||
"first_day_year": "First Day of Year Reset",
|
||||
"manual": "Manual Reset"
|
||||
},
|
||||
"trigger_sources": {
|
||||
"auto": "Auto Trigger",
|
||||
"manual": "Manual Trigger",
|
||||
"cron": "Cron Job"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"export": "Export Logs",
|
||||
"exporting": "Exporting...",
|
||||
"export_success": "Export successful",
|
||||
"export_failed": "Export failed"
|
||||
}
|
||||
},
|
||||
"send_mail": {
|
||||
"title": "Send Email",
|
||||
"description": "Send email to selected or filtered users",
|
||||
|
||||
Vendored
+116
-1
@@ -162,6 +162,7 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"orderManagement": "주문 관리",
|
||||
"couponManagement": "쿠폰 관리",
|
||||
"userManagement": "사용자 관리",
|
||||
"trafficResetLogs": "트래픽 재설정 로그",
|
||||
"ticketManagement": "티켓 관리"
|
||||
},
|
||||
"plugin": {
|
||||
@@ -1232,6 +1233,8 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"basicInfo": "기본 정보",
|
||||
"amountInfo": "금액 정보",
|
||||
"timeInfo": "시간 정보",
|
||||
"commissionInfo": "수수료 정보",
|
||||
"commissionStatusActive": "활성",
|
||||
"addOrder": "주문 추가",
|
||||
"assignOrder": "주문 할당",
|
||||
"fields": {
|
||||
@@ -1245,7 +1248,12 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"refundAmount": "환불 금액",
|
||||
"deductionAmount": "차감 금액",
|
||||
"createdAt": "생성 시간",
|
||||
"updatedAt": "업데이트 시간"
|
||||
"updatedAt": "업데이트 시간",
|
||||
"commissionStatus": "수수료 상태",
|
||||
"commissionAmount": "수수료 금액",
|
||||
"actualCommissionAmount": "실제 수수료",
|
||||
"inviteUser": "초대자",
|
||||
"inviteUserId": "초대자 ID"
|
||||
},
|
||||
"placeholders": {
|
||||
"email": "사용자 이메일을 입력해주세요",
|
||||
@@ -1969,6 +1977,7 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"orders": "주문 내역",
|
||||
"invites": "초대 내역",
|
||||
"traffic_records": "트래픽 기록",
|
||||
"reset_traffic": "트래픽 재설정",
|
||||
"delete": "삭제",
|
||||
"delete_confirm_title": "사용자 삭제 확인",
|
||||
"delete_confirm_description": "이 작업은 사용자 {{email}}와 관련된 모든 데이터(주문, 쿠폰, 트래픽 기록, 지원 티켓 등)를 영구적으로 삭제합니다. 이 작업은 취소할 수 없습니다. 계속하시겠습니까?"
|
||||
@@ -2105,6 +2114,7 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"title": "작업",
|
||||
"send_email": "이메일 보내기",
|
||||
"export_csv": "CSV 내보내기",
|
||||
"traffic_reset_stats": "트래픽 재설정 통계",
|
||||
"batch_ban": "일괄 차단",
|
||||
"confirm_ban": {
|
||||
"title": "일괄 차단 확인",
|
||||
@@ -2132,6 +2142,111 @@ window.XBOARD_TRANSLATIONS['ko-KR'] = {
|
||||
"required_fields": "모든 필수 항목을 입력해주세요"
|
||||
}
|
||||
},
|
||||
"traffic_reset": {
|
||||
"title": "트래픽 재설정",
|
||||
"description": "사용자 {{email}}의 트래픽 사용량 재설정",
|
||||
"tabs": {
|
||||
"reset": "트래픽 재설정",
|
||||
"history": "재설정 기록"
|
||||
},
|
||||
"user_info": "사용자 정보",
|
||||
"warning": {
|
||||
"title": "중요 안내",
|
||||
"irreversible": "트래픽 재설정 작업은 되돌릴 수 없습니다. 신중하게 진행해주세요",
|
||||
"reset_to_zero": "재설정 후 사용자의 업로드 및 다운로드 트래픽이 0으로 초기화됩니다",
|
||||
"logged": "모든 재설정 작업은 시스템 로그에 기록됩니다"
|
||||
},
|
||||
"reason": {
|
||||
"label": "재설정 사유",
|
||||
"placeholder": "트래픽 재설정 사유를 입력해주세요 (선택사항)",
|
||||
"optional": "이 필드는 선택사항이며 재설정 사유를 기록하는 데 사용됩니다"
|
||||
},
|
||||
"confirm_reset": "재설정 확인",
|
||||
"resetting": "재설정 중...",
|
||||
"reset_success": "트래픽 재설정 성공",
|
||||
"reset_failed": "트래픽 재설정 실패",
|
||||
"history": {
|
||||
"summary": "재설정 개요",
|
||||
"reset_count": "재설정 횟수",
|
||||
"last_reset": "마지막 재설정",
|
||||
"next_reset": "다음 재설정",
|
||||
"never": "재설정된 적 없음",
|
||||
"no_schedule": "예약된 재설정 없음",
|
||||
"records": "재설정 기록",
|
||||
"recent_records": "최근 10번의 재설정 기록",
|
||||
"no_records": "재설정 기록이 없습니다",
|
||||
"reset_time": "재설정 시간",
|
||||
"traffic_cleared": "삭제된 트래픽"
|
||||
},
|
||||
"stats": {
|
||||
"title": "트래픽 재설정 통계",
|
||||
"description": "시스템 트래픽 재설정 통계 정보 보기",
|
||||
"time_range": "통계 시간 범위",
|
||||
"total_resets": "총 재설정 횟수",
|
||||
"auto_resets": "자동 재설정",
|
||||
"manual_resets": "수동 재설정",
|
||||
"cron_resets": "예약 재설정",
|
||||
"in_period": "최근 {{days}}일",
|
||||
"breakdown": "재설정 유형별 분석",
|
||||
"breakdown_description": "다양한 재설정 작업 유형의 백분율 분석",
|
||||
"auto_percentage": "자동 재설정 비율",
|
||||
"manual_percentage": "수동 재설정 비율",
|
||||
"cron_percentage": "예약 재설정 비율",
|
||||
"days_options": {
|
||||
"week": "지난 주",
|
||||
"month": "지난 달",
|
||||
"quarter": "지난 분기",
|
||||
"year": "지난 해"
|
||||
}
|
||||
}
|
||||
},
|
||||
"traffic_reset_logs": {
|
||||
"title": "트래픽 재설정 로그",
|
||||
"description": "시스템의 모든 트래픽 재설정 작업에 대한 상세 기록 보기",
|
||||
"columns": {
|
||||
"id": "로그 ID",
|
||||
"user": "사용자",
|
||||
"reset_type": "재설정 유형",
|
||||
"trigger_source": "트리거 소스",
|
||||
"cleared_traffic": "삭제된 트래픽",
|
||||
"cleared": "삭제됨",
|
||||
"upload": "업로드",
|
||||
"download": "다운로드",
|
||||
"reset_time": "재설정 시간",
|
||||
"log_time": "로그 시간"
|
||||
},
|
||||
"filters": {
|
||||
"search_user": "사용자 이메일 검색...",
|
||||
"reset_type": "재설정 유형",
|
||||
"trigger_source": "트리거 소스",
|
||||
"all_types": "모든 유형",
|
||||
"all_sources": "모든 소스",
|
||||
"start_date": "시작 날짜",
|
||||
"end_date": "종료 날짜",
|
||||
"apply_date": "필터 적용",
|
||||
"reset": "필터 초기화",
|
||||
"filter_title": "필터 옵션",
|
||||
"filter_description": "특정 트래픽 재설정 기록을 찾기 위한 필터 조건을 설정하세요",
|
||||
"reset_types": {
|
||||
"monthly": "월별 재설정",
|
||||
"first_day_month": "매월 1일 재설정",
|
||||
"yearly": "연별 재설정",
|
||||
"first_day_year": "매년 1월 1일 재설정",
|
||||
"manual": "수동 재설정"
|
||||
},
|
||||
"trigger_sources": {
|
||||
"auto": "자동 트리거",
|
||||
"manual": "수동 트리거",
|
||||
"cron": "예약 작업"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"export": "로그 내보내기",
|
||||
"exporting": "내보내는 중...",
|
||||
"export_success": "내보내기 성공",
|
||||
"export_failed": "내보내기 실패"
|
||||
}
|
||||
},
|
||||
"send_mail": {
|
||||
"title": "이메일 보내기",
|
||||
"description": "선택하거나 필터링된 사용자에게 이메일 보내기",
|
||||
|
||||
Vendored
+117
-2
@@ -162,7 +162,8 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"orderManagement": "订单管理",
|
||||
"couponManagement": "优惠券管理",
|
||||
"userManagement": "用户管理",
|
||||
"ticketManagement": "工单管理"
|
||||
"ticketManagement": "工单管理",
|
||||
"trafficResetLogs": "流量重置日志"
|
||||
},
|
||||
"plugin": {
|
||||
"title": "插件管理",
|
||||
@@ -1208,6 +1209,8 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"basicInfo": "基本信息",
|
||||
"amountInfo": "金额信息",
|
||||
"timeInfo": "时间信息",
|
||||
"commissionInfo": "佣金信息",
|
||||
"commissionStatusActive": "有效",
|
||||
"addOrder": "添加订单",
|
||||
"assignOrder": "订单分配",
|
||||
"fields": {
|
||||
@@ -1221,7 +1224,12 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"refundAmount": "退回金额",
|
||||
"deductionAmount": "折抵金额",
|
||||
"createdAt": "创建时间",
|
||||
"updatedAt": "更新时间"
|
||||
"updatedAt": "更新时间",
|
||||
"commissionStatus": "佣金状态",
|
||||
"commissionAmount": "佣金金额",
|
||||
"actualCommissionAmount": "实际佣金",
|
||||
"inviteUser": "邀请人",
|
||||
"inviteUserId": "邀请人ID"
|
||||
},
|
||||
"placeholders": {
|
||||
"email": "请输入用户邮箱",
|
||||
@@ -1963,6 +1971,7 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"assign_order": "分配订单",
|
||||
"copy_url": "复制订阅URL",
|
||||
"reset_secret": "重置UUID及订阅URL",
|
||||
"reset_traffic": "重置流量",
|
||||
"orders": "TA的订单",
|
||||
"invites": "TA的邀请",
|
||||
"traffic_records": "TA的流量记录",
|
||||
@@ -2102,6 +2111,7 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"title": "操作",
|
||||
"send_email": "发送邮件",
|
||||
"export_csv": "导出 CSV",
|
||||
"traffic_reset_stats": "流量重置统计",
|
||||
"batch_ban": "批量封禁",
|
||||
"confirm_ban": {
|
||||
"title": "确认批量封禁",
|
||||
@@ -2112,6 +2122,111 @@ window.XBOARD_TRANSLATIONS['zh-CN'] = {
|
||||
"banning": "封禁中..."
|
||||
}
|
||||
},
|
||||
"traffic_reset": {
|
||||
"title": "流量重置",
|
||||
"description": "为用户 {{email}} 重置流量使用量",
|
||||
"tabs": {
|
||||
"reset": "重置流量",
|
||||
"history": "重置历史"
|
||||
},
|
||||
"user_info": "用户信息",
|
||||
"warning": {
|
||||
"title": "重要提醒",
|
||||
"irreversible": "流量重置操作不可逆,请谨慎操作",
|
||||
"reset_to_zero": "重置后用户的上传和下载流量将清零",
|
||||
"logged": "所有重置操作都会被记录在系统日志中"
|
||||
},
|
||||
"reason": {
|
||||
"label": "重置原因",
|
||||
"placeholder": "请输入重置流量的原因(可选)",
|
||||
"optional": "此字段为可选项,用于记录重置原因"
|
||||
},
|
||||
"confirm_reset": "确认重置",
|
||||
"resetting": "重置中...",
|
||||
"reset_success": "流量重置成功",
|
||||
"reset_failed": "流量重置失败",
|
||||
"history": {
|
||||
"summary": "重置概览",
|
||||
"reset_count": "重置次数",
|
||||
"last_reset": "最后重置",
|
||||
"next_reset": "下次重置",
|
||||
"never": "从未重置",
|
||||
"no_schedule": "无定时重置",
|
||||
"records": "重置记录",
|
||||
"recent_records": "最近10次重置记录",
|
||||
"no_records": "暂无重置记录",
|
||||
"reset_time": "重置时间",
|
||||
"traffic_cleared": "清除流量"
|
||||
},
|
||||
"stats": {
|
||||
"title": "流量重置统计",
|
||||
"description": "查看系统流量重置的统计信息",
|
||||
"time_range": "统计时间范围",
|
||||
"total_resets": "总重置次数",
|
||||
"auto_resets": "自动重置",
|
||||
"manual_resets": "手动重置",
|
||||
"cron_resets": "定时重置",
|
||||
"in_period": "最近 {{days}} 天",
|
||||
"breakdown": "重置类型分布",
|
||||
"breakdown_description": "各类型重置操作的百分比分布",
|
||||
"auto_percentage": "自动重置占比",
|
||||
"manual_percentage": "手动重置占比",
|
||||
"cron_percentage": "定时重置占比",
|
||||
"days_options": {
|
||||
"week": "最近一周",
|
||||
"month": "最近一月",
|
||||
"quarter": "最近三月",
|
||||
"year": "最近一年"
|
||||
}
|
||||
}
|
||||
},
|
||||
"traffic_reset_logs": {
|
||||
"title": "流量重置日志",
|
||||
"description": "查看系统中所有流量重置操作的详细记录",
|
||||
"columns": {
|
||||
"id": "日志ID",
|
||||
"user": "用户",
|
||||
"reset_type": "重置类型",
|
||||
"trigger_source": "触发源",
|
||||
"cleared_traffic": "清除流量",
|
||||
"cleared": "已清除",
|
||||
"upload": "上传",
|
||||
"download": "下载",
|
||||
"reset_time": "重置时间",
|
||||
"log_time": "记录时间"
|
||||
},
|
||||
"filters": {
|
||||
"search_user": "搜索用户邮箱...",
|
||||
"reset_type": "重置类型",
|
||||
"trigger_source": "触发源",
|
||||
"all_types": "全部类型",
|
||||
"all_sources": "全部来源",
|
||||
"start_date": "开始日期",
|
||||
"end_date": "结束日期",
|
||||
"apply_date": "应用筛选",
|
||||
"reset": "重置筛选",
|
||||
"filter_title": "筛选条件",
|
||||
"filter_description": "设置筛选条件来查找特定的流量重置记录",
|
||||
"reset_types": {
|
||||
"monthly": "按月重置",
|
||||
"first_day_month": "每月1号重置",
|
||||
"yearly": "按年重置",
|
||||
"first_day_year": "每年1月1日重置",
|
||||
"manual": "手动重置"
|
||||
},
|
||||
"trigger_sources": {
|
||||
"auto": "自动触发",
|
||||
"manual": "手动触发",
|
||||
"cron": "定时任务"
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"export": "导出日志",
|
||||
"exporting": "导出中...",
|
||||
"export_success": "导出成功",
|
||||
"export_failed": "导出失败"
|
||||
}
|
||||
},
|
||||
"messages": {
|
||||
"success": "成功",
|
||||
"error": "错误",
|
||||
|
||||
Reference in New Issue
Block a user