- AreaApi 完善查询方法 - CellApi 新增获取列表方法 - ConsumptionApi 优化查询参数 - QuestionnaireApi 调整接口结构 - QuestionnaireRecordApi 完善类型定义 - RiskAssessmentApi 优化接口参数 - ReportDetailDialog 修复样式问题 Co-Authored-By: Claude <noreply@anthropic.com>
202 lines
7.0 KiB
TypeScript
202 lines
7.0 KiB
TypeScript
import request from '@/config/axios'
|
||
|
||
// ========== 风险等级枚举 ==========
|
||
export enum RiskLevelEnum {
|
||
LOW = 1, // 低风险
|
||
MEDIUM = 2, // 中风险
|
||
HIGH = 3, // 高风险
|
||
EXTREME = 4 // 极高风险
|
||
}
|
||
|
||
// ========== 问卷答题记录/测评记录类型 ==========
|
||
|
||
/** 问卷答题记录/测评记录信息 */
|
||
export interface QuestionnaireRecord {
|
||
id?: number // 记录ID
|
||
questionnaireId?: number // 问卷ID
|
||
questionnaireName?: string // 问卷名称
|
||
prisonerId?: number // 罪犯ID
|
||
prisonerNo?: string // 罪犯编号
|
||
prisonerName?: string // 罪犯姓名
|
||
status?: number // 状态:1-待测评 2-测评中 3-已完成 4-已过期 5-已取消
|
||
startTime?: string // 开始时间
|
||
endTime?: string // 结束时间
|
||
answerTime?: string // 答题时间
|
||
deadline?: string // 截止日期
|
||
objectiveScore?: number | string // 客观题得分(后端为BigDecimal)
|
||
subjectiveScore?: number | string // 主观题得分(后端为BigDecimal)
|
||
totalScore?: number | string // 总分(后端为BigDecimal)
|
||
passScore?: number | string // 及格分数(后端为BigDecimal)
|
||
passStatus?: number // 及格状态:1-及格 2-不及格 3-待评阅
|
||
riskLevel?: RiskLevelEnum // 风险等级:1-低风险 2-中风险 3-高风险 4-极高风险
|
||
evaluatorId?: number // 评阅人ID
|
||
evaluatorName?: string // 评阅人姓名
|
||
evaluateTime?: string // 评阅时间
|
||
participantCount?: number // 参与人数
|
||
completedCount?: number // 完成人数
|
||
duration?: number // 答题用时(秒)
|
||
remark?: string // 备注
|
||
createTime?: string // 创建时间
|
||
}
|
||
|
||
/** 问卷答题记录分页参数 */
|
||
export interface QuestionnaireRecordPageParams {
|
||
pageNo: number
|
||
pageSize: number
|
||
questionnaireId?: number // 问卷ID
|
||
questionnaireName?: string // 问卷名称
|
||
prisonerId?: number // 罪犯ID
|
||
prisonerNo?: string // 罪犯编号
|
||
status?: number // 状态:1-待测评 2-测评中 3-已完成 4-已过期 5-已取消
|
||
passStatus?: number // 及格状态:1-及格 2-不及格 3-待评阅
|
||
riskLevel?: RiskLevelEnum // 风险等级
|
||
startTime?: string[] // 开始时间范围
|
||
endTime?: string[] // 结束时间范围
|
||
deadline?: string[] // 截止日期范围
|
||
createTime?: string[] // 创建时间范围
|
||
}
|
||
|
||
/** 发起测评请求 */
|
||
export interface AssessmentInitiateReq {
|
||
questionnaireId: number // 问卷模板ID
|
||
prisonerIds: number[] // 罪犯ID列表
|
||
deadline?: string // 截止日期
|
||
remark?: string // 备注
|
||
}
|
||
|
||
/** 答题详情项 */
|
||
export interface AnswerItem {
|
||
questionId: number // 问题ID
|
||
answer?: string // 答案
|
||
optionIds?: number[] // 选择的选项ID列表
|
||
}
|
||
|
||
/** 提交答卷请求 */
|
||
export interface AssessmentAnswerSubmitReq {
|
||
recordId: number // 测评记录ID
|
||
prisonerId: number // 罪犯ID
|
||
answers: AnswerItem[] // 答题详情列表
|
||
}
|
||
|
||
/** 人工评分请求 */
|
||
export interface AssessmentManualScoreReq {
|
||
recordId: number // 测评记录ID
|
||
subjectiveScore: number // 主观题得分
|
||
comment?: string // 评语
|
||
riskLevel?: RiskLevelEnum // 风险等级:1-低风险 2-中风险 3-高风险 4-极高风险
|
||
}
|
||
|
||
/** 分数分布数据 */
|
||
export interface ScoreDistribution {
|
||
'0-20'?: number
|
||
'21-40'?: number
|
||
'41-60'?: number
|
||
'61-80'?: number
|
||
'81-100'?: number
|
||
}
|
||
|
||
/** 风险分布数据 */
|
||
export interface RiskDistribution {
|
||
extreme?: number // 极高风险
|
||
high?: number
|
||
medium?: number
|
||
low?: number
|
||
}
|
||
|
||
// ========== API 对象 ==========
|
||
|
||
export const QuestionnaireRecordApi = {
|
||
// ========== 基础 CRUD ==========
|
||
|
||
/** 查询问卷答题记录分页 */
|
||
getQuestionnaireRecordPage: async (params: QuestionnaireRecordPageParams) => {
|
||
return await request.get({ url: `/prison/questionnaire-record/page`, params })
|
||
},
|
||
|
||
/** 查询问卷答题记录详情 */
|
||
getQuestionnaireRecord: async (id: number) => {
|
||
return await request.get<QuestionnaireRecord>({ url: `/prison/questionnaire-record/get`, params: { id } })
|
||
},
|
||
|
||
/** 新增问卷答题记录 */
|
||
createQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
||
return await request.post<number>({ url: `/prison/questionnaire-record/create`, data })
|
||
},
|
||
|
||
/** 修改问卷答题记录 */
|
||
updateQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
||
return await request.put<boolean>({ url: `/prison/questionnaire-record/update`, data })
|
||
},
|
||
|
||
/** 删除问卷答题记录 */
|
||
deleteQuestionnaireRecord: async (id: number) => {
|
||
return await request.delete<boolean>({ url: `/prison/questionnaire-record/delete`, params: { id } })
|
||
},
|
||
|
||
/** 批量删除问卷答题记录 */
|
||
deleteQuestionnaireRecordList: async (ids: number[]) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/delete-list`, data: ids })
|
||
},
|
||
|
||
/** 导出问卷答题记录 Excel */
|
||
exportQuestionnaireRecord: async (params: QuestionnaireRecordPageParams) => {
|
||
return await request.download({ url: `/prison/questionnaire-record/export-excel`, params })
|
||
},
|
||
|
||
// ========== 测评执行相关 ==========
|
||
|
||
/** 发起测评 */
|
||
initiateAssessment: async (data: AssessmentInitiateReq) => {
|
||
return await request.post<number>({ url: `/prison/questionnaire-record/initiate`, data })
|
||
},
|
||
|
||
/** 开始测评 */
|
||
startAssessment: async (id: number, prisonerId: number) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/start`, params: { id, prisonerId } })
|
||
},
|
||
|
||
/** 提交答卷 */
|
||
submitAnswer: async (data: AssessmentAnswerSubmitReq) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/submit`, data })
|
||
},
|
||
|
||
/** 结束测评 */
|
||
finishAssessment: async (id: number) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/finish`, params: { id } })
|
||
},
|
||
|
||
/** 取消测评 */
|
||
cancelAssessment: async (id: number) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/cancel`, params: { id } })
|
||
},
|
||
|
||
// ========== 评分相关 ==========
|
||
|
||
/** 自动评分 */
|
||
autoScore: async (id: number) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/auto-score`, params: { id } })
|
||
},
|
||
|
||
/** 人工评分 */
|
||
manualScore: async (data: AssessmentManualScoreReq) => {
|
||
return await request.post<boolean>({ url: `/prison/questionnaire-record/manual-score`, data })
|
||
},
|
||
|
||
// ========== 统计相关 ==========
|
||
|
||
/** 获取完成率 */
|
||
getCompletionRate: async (assessmentRecordId: number) => {
|
||
return await request.get<number>({ url: `/prison/questionnaire-record/completion-rate`, params: { assessmentRecordId } })
|
||
},
|
||
|
||
/** 获取分数分布 */
|
||
getScoreDistribution: async (assessmentRecordId: number) => {
|
||
return await request.get<ScoreDistribution>({ url: `/prison/questionnaire-record/score-distribution`, params: { assessmentRecordId } })
|
||
},
|
||
|
||
/** 获取风险分布 */
|
||
getRiskDistribution: async (assessmentRecordId: number) => {
|
||
return await request.get<RiskDistribution>({ url: `/prison/questionnaire-record/risk-distribution`, params: { assessmentRecordId } })
|
||
}
|
||
}
|