import request from '@/config/axios' /** 问卷任务信息 */ export interface QuestionnaireTask { id?: number taskName: string questionnaireId: number questionnaireName?: string targetType: number // 1-指定犯人 2-指定监区 3-全部犯人 areaId?: number areaName?: string prisonerIds?: string startTime?: string deadline: string status: number // 1-草稿 2-进行中 3-已结束 4-已取消 totalCount?: number completedCount?: number pendingCount?: number completionRate?: string | number remark?: string createTime?: string updateTime?: string } /** 问卷任务分页参数 */ export interface QuestionnaireTaskPageParams { pageNo: number pageSize: number taskName?: string questionnaireId?: number status?: number targetType?: number createTime?: string[] } /** 问卷任务创建参数 */ export interface QuestionnaireTaskCreateParams { taskName: string questionnaireId: number targetType: number prisonerIds?: number[] areaId?: number startTime?: string deadline: string remark?: string } /** 问卷任务更新参数 */ export interface QuestionnaireTaskUpdateParams { id: number taskName?: string deadline?: string remark?: string } /** 任务进度详情 */ export interface TaskProgress { taskId: number taskName: string questionnaireName: string status: number startTime?: string deadline: string totalCount: number completedCount: number pendingCount: number completionRate: string | number statusBreakdown: { pending: number inProgress: number completed: number expired: number cancelled: number } } /** 按监区统计 */ export interface TaskAreaStatistics { areaId?: number areaName?: string totalCount: number completedCount: number completionRate: string | number avgScore: string | number passRate: string | number riskDistribution: { highRisk: number mediumRisk: number lowRisk: number } } /** 按监区统计 */ export interface TaskAreaStatistics { areaId?: number areaName?: string totalCount: number completedCount: number completionRate: string | number avgScore: string | number passRate: string | number riskDistribution: { highRisk: number mediumRisk: number lowRisk: number } } /** 人员填写进度 */ export interface PrisonerProgress { questionnaireId: number questionnaireName?: string id: number prisonerId: number prisonerNo: string prisonerName: string areaId?: number areaName?: string status: number objectiveScore?: number subjectiveScore?: number totalScore?: number riskLevel?: number duration?: number startTime?: string finishTime?: string } /** 统计汇总 */ export interface TaskStatisticsSummary { taskCount: number totalPrisoners: number totalCompleted: number totalPending: number overallCompletionRate: string | number } // 问卷任务 API export const QuestionnaireTaskApi = { // 查询问卷任务分页 getQuestionnaireTaskPage: async (params: QuestionnaireTaskPageParams) => { return await request.get({ url: `/prison/questionnaire-task/page`, params }) }, // 查询问卷任务详情 getQuestionnaireTask: async (id: number) => { return await request.get({ url: `/prison/questionnaire-task/get`, params: { id } }) }, // 新增问卷任务 createQuestionnaireTask: async (data: QuestionnaireTaskCreateParams) => { return await request.post({ url: `/prison/questionnaire-task/create`, data }) }, // 修改问卷任务 updateQuestionnaireTask: async (data: QuestionnaireTaskUpdateParams) => { return await request.put({ url: `/prison/questionnaire-task/update`, data }) }, // 删除问卷任务 deleteQuestionnaireTask: async (id: number) => { return await request.delete({ url: `/prison/questionnaire-task/delete`, params: { id } }) }, // 批量删除问卷任务 deleteQuestionnaireTaskList: async (ids: number[]) => { return await request.delete({ url: `/prison/questionnaire-task/delete-list`, params: { ids: ids.join(',') } }) }, // 导出问卷任务 Excel exportQuestionnaireTask: async (params: QuestionnaireTaskPageParams) => { return await request.download({ url: `/prison/questionnaire-task/export-excel`, params }) }, // ==================== 任务执行相关 ==================== // 取消任务 cancelTask: async (id: number) => { return await request.post({ url: `/prison/questionnaire-task/cancel`, params: { id } }) }, // 结束任务 finishTask: async (id: number) => { return await request.post({ url: `/prison/questionnaire-task/finish`, params: { id } }) }, // 重新开始任务 restartTask: async (id: number) => { return await request.post({ url: `/prison/questionnaire-task/restart`, params: { id } }) }, // ==================== 进度跟踪相关 ==================== // 获取任务进度 getTaskProgress: async (id: number) => { return await request.get({ url: `/prison/questionnaire-task/progress`, params: { id } }) }, // 获取任务未完成人员 getPendingPrisoners: async (id: number, params: any) => { return await request.get({ url: `/prison/questionnaire-task/pending-prisoners`, params: { id, ...params } }) }, // 提醒未完成人员 remindPendingPrisoners: async (id: number) => { return await request.post({ url: `/prison/questionnaire-task/remind`, params: { id } }) }, // 获取任务的人员填写进度列表 getPrisonerProgress: async (id: number) => { return await request.get({ url: `/prison/questionnaire-task/prisoner-progress`, params: { id } }) }, // 通知单个人员 notifyPrisoner: async (recordId: number) => { return await request.post({ url: `/prison/questionnaire-task/notify-prisoner`, params: { recordId } }) }, // 重置人员答题记录 resetPrisonerRecord: async (recordId: number) => { return await request.post({ url: `/prison/questionnaire-task/reset-record`, params: { recordId } }) }, // ==================== 统计相关 ==================== // 按监区统计任务完成情况 getTaskAreaStatistics: async (id: number) => { return await request.get({ url: `/prison/questionnaire-task/area-statistics`, params: { id } }) }, // 获取全局任务统计汇总 getStatisticsSummary: async () => { return await request.get({ url: `/prison/questionnaire-task/statistics-summary` }) }, // 按监区对比分析 compareAreasByQuestionnaire: async (questionnaireId?: number, areaIds?: number[]) => { return await request.get({ url: `/prison/questionnaire-task/area-comparison`, params: { questionnaireId, areaIds } }) } }