feat(api, i18n): add admin report job functionalities and enhance locale support
- Introduced new API functions for managing admin report jobs, including download and post operations. - Updated English, Nepali, and Chinese locale files to include new messages related to report job actions and rollback confirmations. - Enhanced user experience by providing clearer instructions and feedback in the admin interface. - Refactored related components to integrate new functionalities and improve overall usability.
This commit is contained in:
@@ -56,7 +56,7 @@ const ROUTE_PATTERNS: RoutePattern[] = [
|
||||
},
|
||||
{
|
||||
test: (p) => /^\/admin\/draws\/\d+\/risk\/occupancy$/.test(p) || /^\/admin\/risk\/draws\/\d+\/occupancy$/.test(p),
|
||||
resolve: () => ({ ns: "draws", key: "subnav.riskOccupancy" }),
|
||||
resolve: () => ({ ns: "draws", key: "subnav.riskLockLogs" }),
|
||||
},
|
||||
{
|
||||
test: (p) => /^\/admin\/draws\/\d+\/risk\/hot$/.test(p) || /^\/admin\/risk\/draws\/\d+\/hot$/.test(p),
|
||||
|
||||
89
src/lib/report-export-map.ts
Normal file
89
src/lib/report-export-map.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
export type ReportFilterSnapshot = {
|
||||
dateFrom: string;
|
||||
dateTo: string;
|
||||
playerId: number | null;
|
||||
play: string;
|
||||
operatorId: number | null;
|
||||
drawId: number | null;
|
||||
drawNo: string;
|
||||
number: string;
|
||||
};
|
||||
|
||||
/** UI report keys used in reports-console */
|
||||
export type ReportUiKey =
|
||||
| "draw_profit"
|
||||
| "daily_profit"
|
||||
| "player_win_loss"
|
||||
| "player_transfer"
|
||||
| "hot_number_risk"
|
||||
| "play_dimension"
|
||||
| "sold_out_number"
|
||||
| "rebate_commission"
|
||||
| "admin_audit";
|
||||
|
||||
/** Maps UI keys to POST /admin/report-jobs `report_type` */
|
||||
export const REPORT_UI_TO_JOB_TYPE: Record<ReportUiKey, string> = {
|
||||
draw_profit: "draw_profit_summary",
|
||||
daily_profit: "daily_profit_summary",
|
||||
player_win_loss: "player_win_loss",
|
||||
player_transfer: "wallet_transfer_report",
|
||||
hot_number_risk: "hot_number_risk_report",
|
||||
play_dimension: "play_dimension_report",
|
||||
sold_out_number: "sold_out_number_report",
|
||||
rebate_commission: "rebate_commission_report",
|
||||
admin_audit: "audit_operation_report",
|
||||
};
|
||||
|
||||
/** Report types with full server-side export (POST /admin/report-jobs). */
|
||||
export const REPORT_UI_SERVER_FULL_EXPORT = new Set<ReportUiKey>([
|
||||
"draw_profit",
|
||||
"daily_profit",
|
||||
"player_win_loss",
|
||||
"player_transfer",
|
||||
"hot_number_risk",
|
||||
"play_dimension",
|
||||
"sold_out_number",
|
||||
"rebate_commission",
|
||||
"admin_audit",
|
||||
]);
|
||||
|
||||
export function buildReportJobParameters(
|
||||
key: ReportUiKey,
|
||||
filters: ReportFilterSnapshot,
|
||||
): Record<string, unknown> {
|
||||
const params: Record<string, unknown> = {};
|
||||
|
||||
if (filters.dateFrom) {
|
||||
params.date_from = filters.dateFrom;
|
||||
}
|
||||
if (filters.dateTo) {
|
||||
params.date_to = filters.dateTo;
|
||||
}
|
||||
if (filters.playerId != null && filters.playerId > 0) {
|
||||
params.player_id = filters.playerId;
|
||||
}
|
||||
if (filters.operatorId != null && filters.operatorId > 0) {
|
||||
params.operator_id = filters.operatorId;
|
||||
}
|
||||
if (filters.play.trim()) {
|
||||
params.play_code = filters.play.trim();
|
||||
}
|
||||
|
||||
if (key === "draw_profit" || key === "hot_number_risk" || key === "sold_out_number") {
|
||||
if (filters.drawId != null && filters.drawId > 0) {
|
||||
params.draw_id = filters.drawId;
|
||||
}
|
||||
if (filters.drawNo.trim()) {
|
||||
params.draw_no = filters.drawNo.trim();
|
||||
}
|
||||
}
|
||||
|
||||
if (key === "hot_number_risk" && filters.number.trim()) {
|
||||
const digits = filters.number.trim();
|
||||
if (/^\d{4}$/.test(digits)) {
|
||||
params.normalized_number = digits;
|
||||
}
|
||||
}
|
||||
|
||||
return params;
|
||||
}
|
||||
Reference in New Issue
Block a user