feat: 更新前端 API 接口和评估报告组件

- AreaApi 完善查询方法
- CellApi 新增获取列表方法
- ConsumptionApi 优化查询参数
- QuestionnaireApi 调整接口结构
- QuestionnaireRecordApi 完善类型定义
- RiskAssessmentApi 优化接口参数
- ReportDetailDialog 修复样式问题

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
tangweijie 2026-01-19 23:14:40 +08:00
parent 4bac14276a
commit 934f2935ac
8 changed files with 92 additions and 56 deletions

View File

@ -39,11 +39,12 @@ export interface AreaSaveReqVO {
name: string
code: string
parentId?: number
level?: number
type: number
capacity: number
level: number // 级别1-监区(大队) 2-分监区(中队),必填
type: number // 监区类型1-普通监区 2-严管监区 3-集训监区 4-出监监区 5-医院监区 6-禁闭室
capacity: number // 容纳人数
currentCount?: number // 当前人数,创建时可不传
sort?: number
status?: number
status: number // 状态1-启用 2-禁用,必填
remark?: string
}
@ -51,11 +52,16 @@ export interface AreaSaveReqVO {
export interface AreaPageReqVO {
pageNo: number
pageSize: number
name?: string
code?: string
type?: number
level?: number
status?: number
name?: string // 监区名称
code?: string // 监区编码
type?: number // 监区类型
level?: number // 级别
capacity?: number // 容纳人数
currentCount?: number // 当前人数
sort?: number // 排序
status?: number // 状态1-启用 2-禁用
remark?: string // 备注
createTime?: string[] // 创建时间范围 [开始时间, 结束时间]
}
// 监区信息 API
@ -80,6 +86,11 @@ export const AreaApi = {
return await request.get({ url: `/prison/area/parent-list`, params: { level } })
},
// 查询子监区列表(用于下拉选择)
getChildAreas: async (parentId: number) => {
return await request.get({ url: `/prison/area/children`, params: { parentId } })
},
// 新增监区信息
createArea: async (data: AreaSaveReqVO) => {
return await request.post({ url: `/prison/area/create`, data })

View File

@ -23,6 +23,7 @@ export interface CellCreateReqVO {
name: string
code: string
capacity: number
currentCount?: number // 当前人数创建时默认为0
sort: number
status: number
remark?: string
@ -39,7 +40,9 @@ export interface CellPageReqVO {
pageSize: number
areaId?: number
name?: string
code?: string // 监室编码
status?: number
createTime?: string[] // 创建时间范围
}
// ========== 监室信息 API ==========
@ -77,5 +80,10 @@ export const CellApi = {
// 导出监室信息 Excel
exportCell: async (params: CellPageReqVO) => {
return await request.download({ url: '/prison/cell/export-excel', params })
},
// 获取监室列表(下拉选择用)
getCellList: async (params: { areaId?: number; status?: number }) => {
return await request.get<CellVO[]>({ url: '/prison/cell/list', params })
}
}

View File

@ -8,15 +8,19 @@ export interface ConsumptionPageParams {
prisonerName?: string // 罪犯姓名
prisonAreaId?: number // 监区ID
prisonCellId?: number // 监室ID
type?: number
status?: number
totalAmount?: number
orderNo?: string
type?: number // 类型1-购物 2-餐饮 3-医疗 4-通讯 5-其他
status?: number // 状态1-成功 2-失败
totalAmount?: number // 订单总金额
balance?: number // 账户余额
orderNo?: string // 订单号
tradeTime?: string[] // 交易时间范围
createTime?: string[] // 创建时间范围
}
/** 消费明细信息 */
export interface ConsumptionDetail {
id?: number // 明细ID
consumptionId?: number // 消费订单ID
goodsName: string // 商品名称
goodsCode?: string // 商品编码
goodsPrice: number // 商品单价
@ -43,6 +47,7 @@ export interface Consumption {
remark: string // 备注
details?: ConsumptionDetail[] // 消费明细列表
createTime?: Date // 创建时间
updateTime?: Date // 更新时间
}
// 消费订单 API

View File

@ -31,6 +31,7 @@ export interface QuestionPageParams {
title?: string // 问题标题
type?: number // 问题类型
partName?: string // 分区名称
createTime?: string[] // 创建时间范围
}
/** 批量更新请求 */
@ -75,9 +76,9 @@ export const QuestionApi = {
return await request.delete<boolean>({ url: `/prison/question/delete-list`, params: { ids: ids.join(',') } })
},
// 批量更新问卷问题
// 批量更新问卷问题使用POST方法与后端一致
batchUpdate: async (data: QuestionBatchUpdateReq) => {
return await request.put<boolean>({ url: `/prison/question/batch-update`, data })
return await request.post<boolean>({ url: `/prison/question/batch-update`, data })
},
// 导出问卷问题 Excel

View File

@ -6,10 +6,10 @@ export interface Questionnaire {
title: string // 问卷标题
type: number // 问卷类型1-心理测评 2-行为评估 3-满意度调查
description?: string // 问卷说明
totalScore: number // 总分
passScore: number // 及格分
totalScore?: number | string // 总分后端为BigDecimal前端用number或string
passScore?: number | string // 及格分后端为BigDecimal前端用number或string
status: number // 状态1-草稿 2-已发布 3-已禁用
coverImage?: string // 封面图片URL
coverImage?: string // 封面图片URL(单个图片地址)
instruction?: string // 填写说明
estimatedTime?: number // 预计耗时(分钟)
partCount?: number // 分区数量
@ -24,16 +24,16 @@ export interface Questionnaire {
export interface QuestionnairePageParams {
pageNo: number
pageSize: number
title?: string
type?: number
status?: number
description?: string
coverImage?: string
instruction?: string
estimatedTime?: number
partCount?: number
allowAnonymous?: boolean
createTime?: string
title?: string // 问卷标题
type?: number // 问卷类型
status?: number // 状态
description?: string // 问卷说明
coverImage?: string // 封面图片URL
instruction?: string // 填写说明
estimatedTime?: number // 预计耗时
partCount?: number // 分区数量
allowAnonymous?: boolean // 是否允许匿名
createTime?: string[] // 创建时间范围
}
// 问卷模板 API

View File

@ -1,5 +1,13 @@
import request from '@/config/axios'
// ========== 风险等级枚举 ==========
export enum RiskLevelEnum {
LOW = 1, // 低风险
MEDIUM = 2, // 中风险
HIGH = 3, // 高风险
EXTREME = 4 // 极高风险
}
// ========== 问卷答题记录/测评记录类型 ==========
/** 问卷答题记录/测评记录信息 */
@ -13,13 +21,14 @@ export interface QuestionnaireRecord {
status?: number // 状态1-待测评 2-测评中 3-已完成 4-已过期 5-已取消
startTime?: string // 开始时间
endTime?: string // 结束时间
answerTime?: string // 答题时间
deadline?: string // 截止日期
objectiveScore?: number // 客观题得分
subjectiveScore?: number // 主观题得分
totalScore?: number // 总分
passScore?: number // 及格分数
objectiveScore?: number | string // 客观题得分后端为BigDecimal
subjectiveScore?: number | string // 主观题得分后端为BigDecimal
totalScore?: number | string // 总分后端为BigDecimal
passScore?: number | string // 及格分数后端为BigDecimal
passStatus?: number // 及格状态1-及格 2-不及格 3-待评阅
riskLevel?: number // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
riskLevel?: RiskLevelEnum // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
evaluatorId?: number // 评阅人ID
evaluatorName?: string // 评阅人姓名
evaluateTime?: string // 评阅时间
@ -34,16 +43,17 @@ export interface QuestionnaireRecord {
export interface QuestionnaireRecordPageParams {
pageNo: number
pageSize: number
questionnaireId?: number
questionnaireName?: string
prisonerId?: number
prisonerNo?: string
status?: number
passStatus?: number
riskLevel?: number
startTime?: string[]
endTime?: string[]
createTime?: string[]
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[] // 创建时间范围
}
/** 发起测评请求 */
@ -73,7 +83,7 @@ export interface AssessmentManualScoreReq {
recordId: number // 测评记录ID
subjectiveScore: number // 主观题得分
comment?: string // 评语
riskLevel?: number // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
riskLevel?: RiskLevelEnum // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
}
/** 分数分布数据 */

View File

@ -4,12 +4,15 @@ import request from '@/config/axios'
export interface RiskAssessmentPageParams {
pageNo: number
pageSize: number
prisonerId?: number
prisonerNo?: string
prisonerName?: string
assessmentType?: number
riskLevel?: number
status?: number
prisonerId?: number // 罪犯ID
prisonerNo?: string // 罪犯编号
prisonerName?: string // 罪犯姓名
assessmentType?: number // 评估类型1-入狱评估 2-定期评估 3-专项评估
assessmentDate?: string[] // 评估日期范围
riskLevel?: number // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
status?: number // 状态1-待审核 2-已通过
createTime?: string[] // 创建时间范围
updateTime?: string[] // 更新时间范围
}
/** 危险评估信息 */
@ -27,13 +30,11 @@ export interface RiskAssessment {
riskLevel?: number // 风险等级1-低风险 2-中风险 3-高风险 4-极高风险
riskFactors: string // 风险因素
suggestions: string // 管控建议
assessorId: number // 评估人ID
assessorName: string // 评估人姓名
// assessorId 和 assessorName 由后端自动从登录上下文获取,不需要前端传递
nextAssessmentDate: string // 下次评估日期
status?: number // 状态1-待审核 2-已通过
remark: string // 备注
createTime?: string // 创建时间
updateTime?: string // 更新时间
}
// 危险评估 API

View File

@ -53,13 +53,13 @@
<script lang="ts" setup>
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { EvaluationReportApi, EvaluationReport } from '@/api/prison/evaluation'
import { ReportApi, type ReportVO } from '@/api/prison/evaluation-report'
defineOptions({ name: 'ReportDetailDialog' })
const dialogVisible = ref(false)
const loading = ref(false)
const reportData = ref<EvaluationReport | null>(null)
const reportData = ref<ReportVO | null>(null)
/** 获取风险等级类型 */
const getRiskLevelType = (level: number): string => {
@ -78,7 +78,7 @@ const open = async (id: number) => {
dialogVisible.value = true
loading.value = true
try {
reportData.value = await EvaluationReportApi.getReport(id)
reportData.value = await ReportApi.getReport(id)
} finally {
loading.value = false
}