diff --git a/src/api/modules/alert.ts b/src/api/modules/alert.ts new file mode 100644 index 0000000..c5bcc8a --- /dev/null +++ b/src/api/modules/alert.ts @@ -0,0 +1,77 @@ +/** + * 轮询告警管理 API + */ +import { BaseService } from '../BaseService' +import type { BaseResponse } from '@/types/api' +import type { + PollingAlertRule, + PollingAlertHistory, + CreatePollingAlertRuleRequest, + UpdatePollingAlertRuleRequest, + PollingAlertHistoryQueryParams +} from '@/types/api/alert' + +export class PollingAlertService extends BaseService { + /** + * 获取告警规则列表 + */ + static getPollingAlertRules(): Promise> { + return this.get>('/api/admin/polling-alert-rules') + } + + /** + * 获取告警规则详情 + */ + static getPollingAlertRuleById(id: number): Promise> { + return this.get>(`/api/admin/polling-alert-rules/${id}`) + } + + /** + * 创建告警规则 + */ + static createPollingAlertRule( + data: CreatePollingAlertRuleRequest + ): Promise> { + return this.post>('/api/admin/polling-alert-rules', data) + } + + /** + * 更新告警规则 + */ + static updatePollingAlertRule( + id: number, + data: UpdatePollingAlertRuleRequest + ): Promise> { + return this.put>(`/api/admin/polling-alert-rules/${id}`, data) + } + + /** + * 删除告警规则 + */ + static deletePollingAlertRule(id: number): Promise> { + return this.delete>(`/api/admin/polling-alert-rules/${id}`) + } + + /** + * 获取告警历史列表 + */ + static getPollingAlertHistory(params?: PollingAlertHistoryQueryParams): Promise< + BaseResponse<{ + items: PollingAlertHistory[] + page: number + page_size: number + total: number + total_pages: number + }> + > { + return this.get< + BaseResponse<{ + items: PollingAlertHistory[] + page: number + page_size: number + total: number + total_pages: number + }> + >('/api/admin/polling-alert-history', params) + } +} diff --git a/src/api/modules/dataCleanup.ts b/src/api/modules/dataCleanup.ts new file mode 100644 index 0000000..12ce528 --- /dev/null +++ b/src/api/modules/dataCleanup.ts @@ -0,0 +1,103 @@ +/** + * 数据清理管理 API + */ +import { BaseService } from '../BaseService' +import type { BaseResponse } from '@/types/api' +import type { + DataCleanupConfig, + CreateDataCleanupConfigRequest, + UpdateDataCleanupConfigRequest, + DataCleanupLog, + DataCleanupLogQueryParams, + DataCleanupPreviewItem, + DataCleanupProgress, + TriggerDataCleanupRequest +} from '@/types/api/dataCleanup' + +export class DataCleanupService extends BaseService { + /** + * 获取数据清理配置列表 + */ + static getDataCleanupConfigs(): Promise> { + return this.get>('/api/admin/data-cleanup-configs') + } + + /** + * 获取数据清理配置详情 + */ + static getDataCleanupConfigById(id: number): Promise> { + return this.get>(`/api/admin/data-cleanup-configs/${id}`) + } + + /** + * 创建数据清理配置 + */ + static createDataCleanupConfig( + data: CreateDataCleanupConfigRequest + ): Promise> { + return this.post>('/api/admin/data-cleanup-configs', data) + } + + /** + * 更新数据清理配置 + */ + static updateDataCleanupConfig( + id: number, + data: UpdateDataCleanupConfigRequest + ): Promise> { + return this.put>(`/api/admin/data-cleanup-configs/${id}`, data) + } + + /** + * 删除数据清理配置 + */ + static deleteDataCleanupConfig(id: number): Promise> { + return this.delete>(`/api/admin/data-cleanup-configs/${id}`) + } + + /** + * 获取数据清理日志列表 + */ + static getDataCleanupLogs(params?: DataCleanupLogQueryParams): Promise< + BaseResponse<{ + items: DataCleanupLog[] + page: number + page_size: number + total: number + total_pages: number + }> + > { + return this.get< + BaseResponse<{ + items: DataCleanupLog[] + page: number + page_size: number + total: number + total_pages: number + }> + >('/api/admin/data-cleanup-logs', params) + } + + /** + * 预览待清理数据 + */ + static previewDataCleanup(): Promise> { + return this.get>( + '/api/admin/data-cleanup/preview' + ) + } + + /** + * 获取数据清理进度 + */ + static getDataCleanupProgress(): Promise> { + return this.get>('/api/admin/data-cleanup/progress') + } + + /** + * 手动触发数据清理 + */ + static triggerDataCleanup(data?: TriggerDataCleanupRequest): Promise> { + return this.post>('/api/admin/data-cleanup/trigger', data || {}) + } +} diff --git a/src/api/modules/index.ts b/src/api/modules/index.ts index 53803b0..66115ed 100644 --- a/src/api/modules/index.ts +++ b/src/api/modules/index.ts @@ -29,6 +29,13 @@ export { AssetService } from './asset' export { AgentRechargeService } from './agentRecharge' export { WechatConfigService } from './wechatConfig' export { ExchangeService } from './exchange' +export { RefundService } from './refund' +export { DataCleanupService } from './dataCleanup' +export { PollingAlertService } from './alert' +export { PollingConcurrencyService } from './pollingConcurrency' +export { PollingConfigService } from './pollingConfig' +export { ManualTriggerService } from './manualTrigger' +export { PollingMonitorService } from './pollingMonitor' // TODO: 按需添加其他业务模块 // export { SettingService } from './setting' diff --git a/src/api/modules/manualTrigger.ts b/src/api/modules/manualTrigger.ts new file mode 100644 index 0000000..0710f97 --- /dev/null +++ b/src/api/modules/manualTrigger.ts @@ -0,0 +1,88 @@ +/** + * 手动触发相关 API + */ + +import { BaseService } from '../BaseService' +import type { + ManualTriggerLog, + BatchManualTriggerRequest, + ConditionManualTriggerRequest, + SingleManualTriggerRequest, + CancelManualTriggerRequest, + ManualTriggerHistoryQueryParams, + ManualTriggerHistoryResponse, + ManualTriggerStatusResponse, + BaseResponse +} from '@/types/api' + +export class ManualTriggerService extends BaseService { + /** + * 批量手动触发 + * POST /api/admin/polling-manual-trigger/batch + */ + static batchTrigger( + data: BatchManualTriggerRequest + ): Promise> { + return this.post>( + '/api/admin/polling-manual-trigger/batch', + data + ) + } + + /** + * 条件筛选触发 + * POST /api/admin/polling-manual-trigger/by-condition + */ + static conditionTrigger( + data: ConditionManualTriggerRequest + ): Promise> { + return this.post>( + '/api/admin/polling-manual-trigger/by-condition', + data + ) + } + + /** + * 单卡手动触发 + * POST /api/admin/polling-manual-trigger/single + */ + static singleTrigger( + data: SingleManualTriggerRequest + ): Promise> { + return this.post>( + '/api/admin/polling-manual-trigger/single', + data + ) + } + + /** + * 取消手动触发任务 + * POST /api/admin/polling-manual-trigger/cancel + */ + static cancelTrigger(data: CancelManualTriggerRequest): Promise> { + return this.post>('/api/admin/polling-manual-trigger/cancel', data) + } + + /** + * 获取手动触发历史 + * GET /api/admin/polling-manual-trigger/history + */ + static getHistory( + params?: ManualTriggerHistoryQueryParams + ): Promise> { + return this.get>( + '/api/admin/polling-manual-trigger/history', + params + ) + } + + /** + * 获取手动触发状态 + * GET /api/admin/polling-manual-trigger/status + */ + static getStatus(): Promise> { + return this.get>( + '/api/admin/polling-manual-trigger/status' + ) + } +} diff --git a/src/api/modules/pollingConcurrency.ts b/src/api/modules/pollingConcurrency.ts new file mode 100644 index 0000000..479a394 --- /dev/null +++ b/src/api/modules/pollingConcurrency.ts @@ -0,0 +1,50 @@ +/** + * 轮询并发控制 API + */ +import { BaseService } from '../BaseService' +import type { BaseResponse } from '@/types/api' +import type { + PollingConcurrency, + PollingConcurrencyListResponse, + UpdateConcurrencyParams, + ResetConcurrencyParams +} from '@/types/api/pollingConcurrency' + +/** + * 轮询并发控制服务 + */ +export class PollingConcurrencyService extends BaseService { + /** + * 获取轮询并发配置列表 + * @returns 并发配置列表 + */ + static getConcurrencyList(): Promise> { + return this.get>('/api/admin/polling-concurrency') + } + + /** + * 获取指定任务类型的并发配置 + * @param taskType 任务类型 + * @returns 并发配置 + */ + static getConcurrencyByType(taskType: string): Promise> { + return this.get>(`/api/admin/polling-concurrency/${taskType}`) + } + + /** + * 更新轮询并发配置 + * @param taskType 任务类型 + * @param params 更新参数 + */ + static updateConcurrency(taskType: string, params: UpdateConcurrencyParams): Promise> { + return this.put>(`/api/admin/polling-concurrency/${taskType}`, params) + } + + /** + * 重置轮询并发计数 + * @param params 重置参数 + */ + static resetConcurrency(params?: ResetConcurrencyParams): Promise> { + return this.post>('/api/admin/polling-concurrency/reset', params || {}) + } +} diff --git a/src/api/modules/pollingConfig.ts b/src/api/modules/pollingConfig.ts new file mode 100644 index 0000000..c150b0f --- /dev/null +++ b/src/api/modules/pollingConfig.ts @@ -0,0 +1,90 @@ +/** + * 轮询配置管理 API + */ +import { BaseService } from '../BaseService' +import type { BaseResponse } from '@/types/api' +import type { + PollingConfig, + PollingConfigQueryParams, + PollingConfigListResponse, + CreatePollingConfigRequest, + UpdatePollingConfigRequest, + UpdatePollingConfigStatusRequest +} from '@/types/api/pollingConfig' + +/** + * 轮询配置管理服务 + */ +export class PollingConfigService extends BaseService { + /** + * 获取轮询配置列表 + * @param params 查询参数 + * @returns 配置列表 + */ + static getPollingConfigs( + params?: PollingConfigQueryParams + ): Promise> { + return this.get>('/api/admin/polling-configs', params) + } + + /** + * 获取轮询配置详情 + * @param id 配置ID + * @returns 配置详情 + */ + static getPollingConfigById(id: number): Promise> { + return this.get>(`/api/admin/polling-configs/${id}`) + } + + /** + * 创建轮询配置 + * @param data 创建参数 + * @returns 创建的配置 + */ + static createPollingConfig( + data: CreatePollingConfigRequest + ): Promise> { + return this.post>('/api/admin/polling-configs', data) + } + + /** + * 更新轮询配置 + * @param id 配置ID + * @param data 更新参数 + * @returns 更新后的配置 + */ + static updatePollingConfig( + id: number, + data: UpdatePollingConfigRequest + ): Promise> { + return this.put>(`/api/admin/polling-configs/${id}`, data) + } + + /** + * 删除轮询配置 + * @param id 配置ID + */ + static deletePollingConfig(id: number): Promise> { + return this.delete>(`/api/admin/polling-configs/${id}`) + } + + /** + * 更新轮询配置状态 + * @param id 配置ID + * @param data 状态参数 + */ + static updatePollingConfigStatus( + id: number, + data: UpdatePollingConfigStatusRequest + ): Promise> { + return this.put>(`/api/admin/polling-configs/${id}/status`, data) + } + + /** + * 获取所有启用的配置 + * @returns 启用的配置列表 + */ + static getEnabledPollingConfigs(): Promise> { + return this.get>('/api/admin/polling-configs/enabled') + } +} diff --git a/src/api/modules/pollingMonitor.ts b/src/api/modules/pollingMonitor.ts new file mode 100644 index 0000000..4de21c0 --- /dev/null +++ b/src/api/modules/pollingMonitor.ts @@ -0,0 +1,46 @@ +/** + * 轮询监控相关 API + */ + +import { BaseService } from '../BaseService' +import type { + PollingOverviewStats, + PollingInitProgress, + PollingQueueStatusResponse, + PollingTaskStatsResponse, + BaseResponse +} from '@/types/api' + +export class PollingMonitorService extends BaseService { + /** + * 获取轮询总览统计 + * GET /api/admin/polling-stats + */ + static getOverviewStats(): Promise> { + return this.get>('/api/admin/polling-stats') + } + + /** + * 获取轮询初始化进度 + * GET /api/admin/polling-stats/init-progress + */ + static getInitProgress(): Promise> { + return this.get>('/api/admin/polling-stats/init-progress') + } + + /** + * 获取轮询队列状态 + * GET /api/admin/polling-stats/queues + */ + static getQueueStatus(): Promise> { + return this.get>('/api/admin/polling-stats/queues') + } + + /** + * 获取轮询任务统计 + * GET /api/admin/polling-stats/tasks + */ + static getTaskStats(): Promise> { + return this.get>('/api/admin/polling-stats/tasks') + } +} diff --git a/src/api/modules/refund.ts b/src/api/modules/refund.ts new file mode 100644 index 0000000..ff112bb --- /dev/null +++ b/src/api/modules/refund.ts @@ -0,0 +1,78 @@ +/** + * 退款管理相关 API + */ + +import { BaseService } from '../BaseService' +import type { + Refund, + RefundQueryParams, + RefundListResponse, + CreateRefundRequest, + ApproveRefundRequest, + RejectRefundRequest, + ResubmitRefundRequest, + ReturnRefundRequest, + BaseResponse +} from '@/types/api' + +export class RefundService extends BaseService { + /** + * 获取退款申请列表 + * @param params 查询参数 + */ + static getRefunds(params?: RefundQueryParams): Promise> { + return this.get>('/api/admin/refunds', params) + } + + /** + * 获取退款申请详情 + * @param id 退款申请ID + */ + static getRefundById(id: number): Promise> { + return this.getOne(`/api/admin/refunds/${id}`) + } + + /** + * 创建退款申请 + * @param data 创建退款申请请求参数 + */ + static createRefund(data: CreateRefundRequest): Promise> { + return this.post>('/api/admin/refunds', data) + } + + /** + * 审批通过退款申请 + * @param id 退款申请ID + * @param data 审批通过请求参数 + */ + static approveRefund(id: number, data: ApproveRefundRequest): Promise> { + return this.post>(`/api/admin/refunds/${id}/approve`, data) + } + + /** + * 审批拒绝退款申请 + * @param id 退款申请ID + * @param data 审批拒绝请求参数 + */ + static rejectRefund(id: number, data: RejectRefundRequest): Promise> { + return this.post>(`/api/admin/refunds/${id}/reject`, data) + } + + /** + * 重新提交退款申请 + * @param id 退款申请ID + * @param data 重新提交请求参数 + */ + static resubmitRefund(id: number, data: ResubmitRefundRequest): Promise> { + return this.post>(`/api/admin/refunds/${id}/resubmit`, data) + } + + /** + * 退回退款申请 + * @param id 退款申请ID + * @param data 退回请求参数 + */ + static returnRefund(id: number, data: ReturnRefundRequest): Promise> { + return this.post>(`/api/admin/refunds/${id}/return`, data) + } +} diff --git a/src/router/routes/asyncRoutes.ts b/src/router/routes/asyncRoutes.ts index 91d0ef3..694f7b1 100644 --- a/src/router/routes/asyncRoutes.ts +++ b/src/router/routes/asyncRoutes.ts @@ -1193,6 +1193,25 @@ export const asyncRoutes: AppRouteRecord[] = [ isHide: true, keepAlive: false } + }, + { + path: 'refund', + name: 'RefundManagement', + component: RoutesAlias.RefundManagement, + meta: { + title: '退款管理', + keepAlive: true + } + }, + { + path: 'refund/detail/:id', + name: 'RefundDetailRoute', + component: RoutesAlias.RefundDetail, + meta: { + title: '退款详情', + isHide: true, + keepAlive: false + } } ] }, @@ -1305,5 +1324,81 @@ export const asyncRoutes: AppRouteRecord[] = [ // } // } ] + }, + + // 轮询管理 + { + path: '/polling-management', + name: 'PollingManagement', + component: RoutesAlias.Home, + meta: { + title: '轮询管理', + icon: '' + }, + children: [ + { + path: 'data-cleanup', + name: 'DataCleanup', + component: RoutesAlias.DataCleanup, + meta: { + title: '数据清理', + keepAlive: true + } + }, + { + path: 'alert-rules', + name: 'AlertRules', + component: RoutesAlias.AlertRules, + meta: { + title: '告警规则', + keepAlive: true + } + }, + { + path: 'alert-history', + name: 'AlertHistory', + component: RoutesAlias.AlertHistory, + meta: { + title: '告警历史', + keepAlive: true + } + }, + { + path: 'concurrency', + name: 'PollingConcurrency', + component: RoutesAlias.PollingConcurrency, + meta: { + title: '并发控制', + keepAlive: true + } + }, + { + path: 'config', + name: 'PollingConfig', + component: RoutesAlias.PollingConfig, + meta: { + title: '轮询配置', + keepAlive: true + } + }, + { + path: 'manual-trigger', + name: 'ManualTrigger', + component: RoutesAlias.ManualTrigger, + meta: { + title: '手动触发', + keepAlive: true + } + }, + { + path: 'monitor', + name: 'PollingMonitor', + component: RoutesAlias.PollingMonitor, + meta: { + title: '轮询监控', + keepAlive: true + } + } + ] } ] diff --git a/src/router/routesAlias.ts b/src/router/routesAlias.ts index 6f8edbf..ebeaa39 100644 --- a/src/router/routesAlias.ts +++ b/src/router/routesAlias.ts @@ -129,7 +129,20 @@ export enum RoutesAlias { DeveloperApi = '/settings/developer-api', // 开发者API CommissionTemplate = '/settings/commission-template', // 分佣模板 WechatConfig = '/settings/wechat-config', // 微信支付配置 - WechatConfigDetail = '/settings/wechat-config/detail' // 微信支付配置详情 + WechatConfigDetail = '/settings/wechat-config/detail', // 微信支付配置详情 + + // 退款管理 + RefundManagement = '/finance/refund', // 退款管理 + RefundDetail = '/finance/refund/detail', // 退款详情 + + // 轮询管理 + DataCleanup = '/polling-management/data-cleanup', // 数据清理 + AlertRules = '/polling-management/alert-rules', // 告警规则 + AlertHistory = '/polling-management/alert-history', // 告警历史 + PollingConcurrency = '/polling-management/concurrency', // 并发控制 + PollingConfig = '/polling-management/config', // 轮询配置 + ManualTrigger = '/polling-management/manual-trigger', // 手动触发 + PollingMonitor = '/polling-management/monitor' // 轮询监控 } // 主页路由 diff --git a/src/types/api/alert.ts b/src/types/api/alert.ts new file mode 100644 index 0000000..19570a3 --- /dev/null +++ b/src/types/api/alert.ts @@ -0,0 +1,74 @@ +/** + * 轮询告警管理相关类型定义 + */ + +/** + * 告警规则 + */ +export interface PollingAlertRule { + id: number + rule_name: string + alert_level: string + metric_type: string + metric_type_name: string + task_type: string + task_type_name: string + operator: string + threshold: number + cooldown_minutes: number + notify_channels: string + status: number + created_at: string + updated_at: string +} + +/** + * 告警历史 + */ +export interface PollingAlertHistory { + id: number + rule_id: number + rule_name: string + alert_level: string + metric_type: string + task_type: string + threshold: number + current_value: number + message: string + created_at: string +} + +/** + * 创建告警规则请求 + */ +export interface CreatePollingAlertRuleRequest { + rule_name: string + alert_level: string + metric_type: string + task_type: string + threshold: number + operator?: string + cooldown_minutes?: number + notify_channels?: string +} + +/** + * 更新告警规则请求 + */ +export interface UpdatePollingAlertRuleRequest { + rule_name?: string + alert_level?: string + threshold?: number + cooldown_minutes?: number + notify_channels?: string + status?: number +} + +/** + * 告警历史查询参数 + */ +export interface PollingAlertHistoryQueryParams { + rule_id?: number + page?: number + page_size?: number +} diff --git a/src/types/api/dataCleanup.ts b/src/types/api/dataCleanup.ts new file mode 100644 index 0000000..ecaf6d4 --- /dev/null +++ b/src/types/api/dataCleanup.ts @@ -0,0 +1,78 @@ +/** + * 数据清理配置相关类型定义 + */ + +// 数据清理配置 +export interface DataCleanupConfig { + id: number + table_name: string + description: string + retention_days: number + batch_size: number + enabled: number // 0=禁用,1=启用 + created_at: string + updated_at: string + updated_by: number +} + +// 创建数据清理配置请求 +export interface CreateDataCleanupConfigRequest { + table_name: string + retention_days: number + batch_size?: number + description?: string +} + +// 更新数据清理配置请求 +export interface UpdateDataCleanupConfigRequest { + retention_days?: number + batch_size?: number + description?: string + enabled?: number +} + +// 数据清理日志 +export interface DataCleanupLog { + id: number + table_name: string + cleanup_type: 'scheduled' | 'manual' + status: 'success' | 'failed' | 'running' + retention_days: number + deleted_count: number + duration_ms: number + started_at: string + completed_at: string | null + error_message: string + triggered_by: number | null +} + +// 数据清理日志查询参数 +export interface DataCleanupLogQueryParams { + table_name?: string + page?: number + page_size?: number +} + +// 数据清理预览项 +export interface DataCleanupPreviewItem { + table_name: string + description: string + retention_days: number + record_count: number +} + +// 数据清理进度 +export interface DataCleanupProgress { + is_running: boolean + current_table: string + total_tables: number + processed_tables: number + total_deleted: number + started_at: string | null + last_log: DataCleanupLog | null +} + +// 手动触发数据清理请求 +export interface TriggerDataCleanupRequest { + table_name?: string +} diff --git a/src/types/api/index.ts b/src/types/api/index.ts index 216cae5..ef3fdde 100644 --- a/src/types/api/index.ts +++ b/src/types/api/index.ts @@ -85,3 +85,24 @@ export * from './agentRecharge' // 微信支付配置相关 export * from './wechatConfig' + +// 退款管理相关 +export * from './refund' + +// 数据清理相关 +export * from './dataCleanup' + +// 轮询告警相关 +export * from './alert' + +// 轮询并发控制相关 +export * from './pollingConcurrency' + +// 轮询配置管理相关 +export * from './pollingConfig' + +// 手动触发相关 +export * from './manualTrigger' + +// 轮询监控相关 +export * from './pollingMonitor' diff --git a/src/types/api/manualTrigger.ts b/src/types/api/manualTrigger.ts new file mode 100644 index 0000000..396a1f0 --- /dev/null +++ b/src/types/api/manualTrigger.ts @@ -0,0 +1,140 @@ +/** + * 手动触发相关类型定义 + */ + +/** + * 任务类型 + */ +export type TaskType = 'polling:realname' | 'polling:carddata' | 'polling:package' + +/** + * 触发类型 + */ +export type TriggerType = 'single' | 'batch' | 'by_condition' + +/** + * 任务状态 + */ +export type ManualTriggerStatus = 'pending' | 'processing' | 'completed' | 'cancelled' + +/** + * 手动触发日志对象 + */ +export interface ManualTriggerLog { + /** 日志ID */ + id: number + /** 任务类型 */ + task_type: TaskType + /** 任务类型名称 */ + task_type_name: string + /** 触发类型 */ + trigger_type: TriggerType + /** 触发类型名称 */ + trigger_type_name: string + /** 总卡数 */ + total_count: number + /** 已处理数 */ + processed_count: number + /** 成功数 */ + success_count: number + /** 失败数 */ + failed_count: number + /** 状态 */ + status: ManualTriggerStatus + /** 状态名称 */ + status_name: string + /** 触发时间 */ + triggered_at: string + /** 完成时间 */ + completed_at: string | null + /** 触发人ID */ + triggered_by: number +} + +/** + * 批量手动触发请求参数 + */ +export interface BatchManualTriggerRequest { + /** 任务类型 */ + task_type: TaskType + /** 卡ID列表(最多1000个) */ + card_ids?: number[] +} + +/** + * 条件筛选触发请求参数 + */ +export interface ConditionManualTriggerRequest { + /** 任务类型 */ + task_type: TaskType + /** 限制数量(最多1000) */ + limit: number + /** 卡状态筛选 */ + card_status?: string + /** 卡类型筛选 */ + card_type?: string + /** 运营商代码筛选 */ + carrier_code?: string + /** 是否启用轮询筛选 */ + enable_polling?: boolean + /** 套餐ID列表筛选 */ + package_ids?: number[] + /** 店铺ID筛选 */ + shop_id?: number +} + +/** + * 单卡手动触发请求参数 + */ +export interface SingleManualTriggerRequest { + /** 卡ID */ + card_id: number + /** 任务类型 */ + task_type: TaskType +} + +/** + * 取消手动触发请求参数 + */ +export interface CancelManualTriggerRequest { + /** 触发任务ID */ + trigger_id: number +} + +/** + * 手动触发历史查询参数 + */ +export interface ManualTriggerHistoryQueryParams { + /** 任务类型筛选 */ + task_type?: TaskType + /** 页码 */ + page?: number + /** 每页数量 */ + page_size?: number +} + +/** + * 手动触发历史列表响应 + */ +export interface ManualTriggerHistoryResponse { + /** 日志列表 */ + items: ManualTriggerLog[] + /** 当前页 */ + page: number + /** 每页数量 */ + page_size: number + /** 总数 */ + total: number + /** 总页数 */ + total_pages: number +} + +/** + * 手动触发状态响应 + */ +export interface ManualTriggerStatusResponse { + /** 各队列大小 */ + queue_sizes: Record + /** 正在运行的任务列表 */ + running_tasks: ManualTriggerLog[] +} diff --git a/src/types/api/pollingConcurrency.ts b/src/types/api/pollingConcurrency.ts new file mode 100644 index 0000000..0a0f243 --- /dev/null +++ b/src/types/api/pollingConcurrency.ts @@ -0,0 +1,45 @@ +/** + * 轮询并发控制相关类型定义 + */ + +/** + * 并发配置对象 + */ +export interface PollingConcurrency { + /** 任务类型 */ + task_type: string + /** 任务类型名称 */ + task_type_name: string + /** 最大并发数 */ + max_concurrency: number + /** 当前并发数 */ + current: number + /** 可用并发数 */ + available: number + /** 使用率(百分比) */ + utilization: number +} + +/** + * 并发配置列表响应 + */ +export interface PollingConcurrencyListResponse { + /** 并发配置列表 */ + items: PollingConcurrency[] +} + +/** + * 更新并发配置请求参数 + */ +export interface UpdateConcurrencyParams { + /** 最大并发数(1-1000) */ + max_concurrency: number +} + +/** + * 重置并发计数请求参数 + */ +export interface ResetConcurrencyParams { + /** 任务类型(不传则重置全部) */ + task_type?: string +} diff --git a/src/types/api/pollingConfig.ts b/src/types/api/pollingConfig.ts new file mode 100644 index 0000000..cc24ef8 --- /dev/null +++ b/src/types/api/pollingConfig.ts @@ -0,0 +1,137 @@ +/** + * 轮询配置管理相关类型定义 + */ + +/** + * 卡业务类型 + */ +export type CardCategory = 'normal' | 'industry' + +/** + * 卡状态条件 + */ +export type CardCondition = 'not_real_name' | 'real_name' | 'activated' | 'suspended' + +/** + * 轮询配置对象 + */ +export interface PollingConfig { + /** 配置ID */ + id: number + /** 配置名称 */ + config_name: string + /** 配置说明 */ + description: string + /** 卡业务类型 */ + card_category: CardCategory + /** 卡状态条件 */ + card_condition: CardCondition + /** 运营商ID */ + carrier_id: number + /** 优先级(数字越小优先级越高) */ + priority: number + /** 状态(1:启用,0:禁用) */ + status: number + /** 实名检查间隔(秒,NULL表示不检查) */ + realname_check_interval: number | null + /** 套餐检查间隔(秒,NULL表示不检查) */ + package_check_interval: number | null + /** 流量检查间隔(秒,NULL表示不检查) */ + carddata_check_interval: number | null + /** 创建时间 */ + created_at: string + /** 更新时间 */ + updated_at: string +} + +/** + * 轮询配置查询参数 + */ +export interface PollingConfigQueryParams { + /** 页码(默认1) */ + page?: number + /** 每页数量(1-100) */ + page_size?: number + /** 状态(1:启用,0:禁用) */ + status?: number + /** 卡状态条件 */ + card_condition?: CardCondition + /** 卡业务类型 */ + card_category?: CardCategory + /** 运营商ID */ + carrier_id?: number + /** 配置名称(模糊搜索) */ + config_name?: string +} + +/** + * 轮询配置列表响应 + */ +export interface PollingConfigListResponse { + /** 配置列表 */ + items: PollingConfig[] + /** 当前页 */ + page: number + /** 每页数量 */ + page_size: number + /** 总数 */ + total: number + /** 总页数 */ + total_pages: number +} + +/** + * 创建轮询配置请求参数 + */ +export interface CreatePollingConfigRequest { + /** 配置名称(1-100字符) */ + config_name: string + /** 优先级(1-1000,数字越小优先级越高) */ + priority: number + /** 配置说明(最多500字符) */ + description?: string + /** 卡业务类型 */ + card_category?: CardCategory + /** 卡状态条件 */ + card_condition?: CardCondition + /** 运营商ID */ + carrier_id?: number + /** 实名检查间隔(秒,最小30,NULL表示不检查) */ + realname_check_interval?: number | null + /** 套餐检查间隔(秒,最小60,NULL表示不检查) */ + package_check_interval?: number | null + /** 流量检查间隔(秒,最小60,NULL表示不检查) */ + carddata_check_interval?: number | null +} + +/** + * 更新轮询配置请求参数 + */ +export interface UpdatePollingConfigRequest { + /** 配置名称(1-100字符) */ + config_name?: string + /** 优先级(1-1000,数字越小优先级越高) */ + priority?: number + /** 配置说明(最多500字符) */ + description?: string + /** 卡业务类型 */ + card_category?: CardCategory + /** 卡状态条件 */ + card_condition?: CardCondition + /** 运营商ID */ + carrier_id?: number + /** 实名检查间隔(秒,最小30,NULL表示不检查) */ + realname_check_interval?: number | null + /** 套餐检查间隔(秒,最小60,NULL表示不检查) */ + package_check_interval?: number | null + /** 流量检查间隔(秒,最小60,NULL表示不检查) */ + carddata_check_interval?: number | null +} + +/** + * 更新轮询配置状态请求参数 + */ +export interface UpdatePollingConfigStatusRequest { + /** 状态(1:启用,0:禁用) */ + status: number +} diff --git a/src/types/api/pollingMonitor.ts b/src/types/api/pollingMonitor.ts new file mode 100644 index 0000000..9836af6 --- /dev/null +++ b/src/types/api/pollingMonitor.ts @@ -0,0 +1,95 @@ +/** + * 轮询监控相关类型定义 + */ + +/** + * 轮询总览统计对象 + */ +export interface PollingOverviewStats { + /** 总卡数 */ + total_cards: number + /** 已初始化卡数 */ + initialized_cards: number + /** 是否正在初始化 */ + is_initializing: boolean + /** 初始化进度(0-100) */ + init_progress: number + /** 实名检查队列大小 */ + realname_queue_size: number + /** 套餐检查队列大小 */ + package_queue_size: number + /** 流量检查队列大小 */ + carddata_queue_size: number +} + +/** + * 轮询初始化进度对象 + */ +export interface PollingInitProgress { + /** 总卡数 */ + total_cards: number + /** 已初始化卡数 */ + initialized_cards: number + /** 进度百分比(0-100) */ + progress: number + /** 是否完成 */ + is_complete: boolean + /** 开始时间 */ + started_at: string + /** 预计完成时间 */ + estimated_eta: string +} + +/** + * 轮询队列状态对象 + */ +export interface PollingQueueStatus { + /** 任务类型 */ + task_type: string + /** 任务类型名称 */ + task_type_name: string + /** 队列大小 */ + queue_size: number + /** 到期待处理数 */ + due_count: number + /** 手动触发待处理数 */ + manual_pending: number + /** 平均等待时间(秒) */ + avg_wait_time_s: number +} + +/** + * 队列状态列表响应 + */ +export interface PollingQueueStatusResponse { + /** 队列状态列表 */ + items: PollingQueueStatus[] +} + +/** + * 轮询任务统计对象 + */ +export interface PollingTaskStats { + /** 任务类型 */ + task_type: string + /** 任务类型名称 */ + task_type_name: string + /** 1小时总数 */ + total_count_1h: number + /** 1小时成功数 */ + success_count_1h: number + /** 1小时失败数 */ + failure_count_1h: number + /** 成功率(0-100) */ + success_rate: number + /** 平均耗时(毫秒) */ + avg_duration_ms: number +} + +/** + * 任务统计列表响应 + */ +export interface PollingTaskStatsResponse { + /** 任务统计列表 */ + items: PollingTaskStats[] +} diff --git a/src/types/api/refund.ts b/src/types/api/refund.ts new file mode 100644 index 0000000..c13a00b --- /dev/null +++ b/src/types/api/refund.ts @@ -0,0 +1,85 @@ +/** + * 退款管理相关类型定义 + */ + +// 退款状态 +export enum RefundStatus { + PENDING = 1, // 待审批 + APPROVED = 2, // 已通过 + REJECTED = 3, // 已拒绝 + RETURNED = 4 // 已退回 +} + +// 退款申请 +export interface Refund { + id: number + refund_no: string + order_id: number + shop_id: number + package_usage_id: number | null + requested_refund_amount: number // 申请退款金额(分) + approved_refund_amount: number | null // 实际退款金额(分) + actual_received_amount: number // 实收金额(分) + status: RefundStatus + refund_reason: string + reject_reason: string + remark: string + asset_reset: boolean + commission_deducted: boolean + creator: number + processor_id: number | null + processed_at: string | null + created_at: string + updated_at: string + updater: number +} + +// 查询退款申请列表参数 +export interface RefundQueryParams { + page?: number + page_size?: number + status?: RefundStatus + order_id?: number + shop_id?: number + dateRange?: string[] +} + +// 退款申请列表响应 +export interface RefundListResponse { + items: Refund[] + page: number + size: number + total: number +} + +// 创建退款申请请求 +export interface CreateRefundRequest { + order_id: number + package_usage_id?: number + requested_refund_amount: number // 申请退款金额(分) + actual_received_amount: number // 实收金额(分) + refund_reason?: string +} + +// 审批通过退款申请请求 +export interface ApproveRefundRequest { + approved_refund_amount?: number // 实际退款金额(分) + remark?: string +} + +// 审批拒绝退款申请请求 +export interface RejectRefundRequest { + reject_reason: string +} + +// 重新提交退款申请请求 +export interface ResubmitRefundRequest { + requested_refund_amount?: number + actual_received_amount?: number + refund_reason?: string +} + +// 退回退款申请请求 +export interface ReturnRefundRequest { + remark?: string +} diff --git a/src/views/finance/refund/detail.vue b/src/views/finance/refund/detail.vue new file mode 100644 index 0000000..28fa678 --- /dev/null +++ b/src/views/finance/refund/detail.vue @@ -0,0 +1,565 @@ + + + + + diff --git a/src/views/finance/refund/index.vue b/src/views/finance/refund/index.vue new file mode 100644 index 0000000..4de3d59 --- /dev/null +++ b/src/views/finance/refund/index.vue @@ -0,0 +1,1038 @@ + + + + + diff --git a/src/views/polling-management/alert-history/index.vue b/src/views/polling-management/alert-history/index.vue new file mode 100644 index 0000000..d4565f6 --- /dev/null +++ b/src/views/polling-management/alert-history/index.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/views/polling-management/alert-rules/index.vue b/src/views/polling-management/alert-rules/index.vue new file mode 100644 index 0000000..9cfdee1 --- /dev/null +++ b/src/views/polling-management/alert-rules/index.vue @@ -0,0 +1,479 @@ + + + + + diff --git a/src/views/polling-management/concurrency/index.vue b/src/views/polling-management/concurrency/index.vue new file mode 100644 index 0000000..2019d0f --- /dev/null +++ b/src/views/polling-management/concurrency/index.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/views/polling-management/config/index.vue b/src/views/polling-management/config/index.vue new file mode 100644 index 0000000..c1e2562 --- /dev/null +++ b/src/views/polling-management/config/index.vue @@ -0,0 +1,704 @@ + + + + + diff --git a/src/views/polling-management/data-cleanup/index.vue b/src/views/polling-management/data-cleanup/index.vue new file mode 100644 index 0000000..1428159 --- /dev/null +++ b/src/views/polling-management/data-cleanup/index.vue @@ -0,0 +1,625 @@ + + + + + diff --git a/src/views/polling-management/manual-trigger/index.vue b/src/views/polling-management/manual-trigger/index.vue new file mode 100644 index 0000000..2be4f06 --- /dev/null +++ b/src/views/polling-management/manual-trigger/index.vue @@ -0,0 +1,763 @@ + + + + + diff --git a/src/views/polling-management/monitor/index.vue b/src/views/polling-management/monitor/index.vue new file mode 100644 index 0000000..324e816 --- /dev/null +++ b/src/views/polling-management/monitor/index.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/src/views/settings/wechat-config/index.vue b/src/views/settings/wechat-config/index.vue index c471872..ef086a3 100644 --- a/src/views/settings/wechat-config/index.vue +++ b/src/views/settings/wechat-config/index.vue @@ -60,10 +60,11 @@ - + @@ -77,6 +78,7 @@ placeholder="请选择支付渠道类型" style="width: 100%" :disabled="dialogType === 'edit'" + @change="handleProviderTypeChange" > @@ -95,11 +97,17 @@