tangweijie 5d43154ba5 feat: 新增问卷任务管理模块
- 新增问卷任务页面及组件(创建任务、人员选择、任务详情)
- 新增问卷预览组件
- 新增答题详情对话框
- 优化问卷列表和问卷记录页面
- 优化Dashboard风险趋势图Y轴动态缩放
- 更新评估报告导出页面
2026-01-24 10:56:02 +08:00

190 lines
5.3 KiB
TypeScript

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 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<TaskProgress>({ 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 } })
},
// ==================== 统计相关 ====================
// 按监区统计任务完成情况
getTaskAreaStatistics: async (id: number) => {
return await request.get<TaskAreaStatistics[]>({ url: `/prison/questionnaire-task/area-statistics`, params: { id } })
},
// 获取全局任务统计汇总
getStatisticsSummary: async () => {
return await request.get<TaskStatisticsSummary>({ 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 } })
}
}