- 新增问卷任务页面及组件(创建任务、人员选择、任务详情) - 新增问卷预览组件 - 新增答题详情对话框 - 优化问卷列表和问卷记录页面 - 优化Dashboard风险趋势图Y轴动态缩放 - 更新评估报告导出页面
190 lines
5.3 KiB
TypeScript
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 } })
|
|
}
|
|
}
|