fix: 代码审查修复 - 前端TypeScript类型和UI优化
前端修复: - 完善TypeScript类型定义(QuestionnairePageParams, QuestionPageParams等) - 移除未使用的导入(Dayjs等) - 日期格式化统一使用dateFormatter替代自定义函数 - 问题类型选项使用字典替代硬编码 - 优化API参数传递方式 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
1ebf700cf2
commit
fdc6bf58e0
@ -1,5 +1,4 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 监区信息信息 */
|
/** 监区信息信息 */
|
||||||
export interface Area {
|
export interface Area {
|
||||||
|
|||||||
@ -1,55 +1,81 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 监室信息信息 */
|
// ========== 监室信息类型定义 ==========
|
||||||
export interface Cell {
|
|
||||||
id: number; // 监室ID
|
|
||||||
areaId?: number; // 所属监区ID
|
|
||||||
areaName?: string; // 所属监区名称
|
|
||||||
name?: string; // 监室名称
|
|
||||||
code?: string; // 监室编码
|
|
||||||
capacity: number; // 床位数量
|
|
||||||
currentCount: number; // 当前人数
|
|
||||||
sort: number; // 排序
|
|
||||||
status?: number; // 状态:1-启用 2-禁用
|
|
||||||
remark: string; // 备注
|
|
||||||
createTime?: Date; // 创建时间
|
|
||||||
}
|
|
||||||
|
|
||||||
// 监室信息 API
|
// 监室信息响应 VO(用于列表和详情展示)
|
||||||
|
export interface CellVO {
|
||||||
|
id: number
|
||||||
|
areaId?: number
|
||||||
|
areaName?: string
|
||||||
|
name?: string
|
||||||
|
code?: string
|
||||||
|
capacity: number
|
||||||
|
currentCount: number
|
||||||
|
sort: number
|
||||||
|
status?: number
|
||||||
|
remark?: string
|
||||||
|
createTime?: Date
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监室信息创建 Request VO
|
||||||
|
export interface CellCreateReqVO {
|
||||||
|
areaId: number
|
||||||
|
name: string
|
||||||
|
code: string
|
||||||
|
capacity: number
|
||||||
|
sort: number
|
||||||
|
status: number
|
||||||
|
remark?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监室信息更新 Request VO
|
||||||
|
export interface CellUpdateReqVO extends CellCreateReqVO {
|
||||||
|
id: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// 监室信息分页 Request VO
|
||||||
|
export interface CellPageReqVO {
|
||||||
|
pageNo: number
|
||||||
|
pageSize: number
|
||||||
|
areaId?: number
|
||||||
|
name?: string
|
||||||
|
status?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
// ========== 监室信息 API ==========
|
||||||
export const CellApi = {
|
export const CellApi = {
|
||||||
// 查询监室信息分页
|
// 查询监室信息分页
|
||||||
getCellPage: async (params: any) => {
|
getCellPage: async (params: CellPageReqVO) => {
|
||||||
return await request.get({ url: `/prison/cell/page`, params })
|
return await request.get<{ list: CellVO[]; total: number }>({ url: '/prison/cell/page', params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询监室信息详情
|
// 查询监室信息详情
|
||||||
getCell: async (id: number) => {
|
getCell: async (id: number) => {
|
||||||
return await request.get({ url: `/prison/cell/get?id=` + id })
|
return await request.get<CellVO>({ url: '/prison/cell/get', params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 新增监室信息
|
// 新增监室信息
|
||||||
createCell: async (data: Cell) => {
|
createCell: async (data: CellCreateReqVO) => {
|
||||||
return await request.post({ url: `/prison/cell/create`, data })
|
return await request.post({ url: '/prison/cell/create', data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 修改监室信息
|
// 修改监室信息
|
||||||
updateCell: async (data: Cell) => {
|
updateCell: async (data: CellUpdateReqVO) => {
|
||||||
return await request.put({ url: `/prison/cell/update`, data })
|
return await request.put({ url: '/prison/cell/update', data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 删除监室信息
|
// 删除监室信息
|
||||||
deleteCell: async (id: number) => {
|
deleteCell: async (id: number) => {
|
||||||
return await request.delete({ url: `/prison/cell/delete?id=` + id })
|
return await request.delete({ url: '/prison/cell/delete', params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 批量删除监室信息 */
|
// 批量删除监室信息
|
||||||
deleteCellList: async (ids: number[]) => {
|
deleteCellList: async (ids: number[]) => {
|
||||||
return await request.delete({ url: `/prison/cell/delete-list?ids=${ids.join(',')}` })
|
return await request.delete({ url: '/prison/cell/delete-list', params: { ids: ids.join(',') } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 导出监室信息 Excel
|
// 导出监室信息 Excel
|
||||||
exportCell: async (params) => {
|
exportCell: async (params: CellPageReqVO) => {
|
||||||
return await request.download({ url: `/prison/cell/export-excel`, params })
|
return await request.download({ url: '/prison/cell/export-excel', params })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 问卷问题信息 */
|
/** 问卷问题信息 */
|
||||||
export interface Question {
|
export interface Question {
|
||||||
id: number // 问题ID
|
id?: number // 问题ID(创建时不需要)
|
||||||
questionnaireId?: number // 所属问卷ID
|
questionnaireId?: number // 所属问卷ID
|
||||||
title?: string // 问题标题
|
title?: string // 问题标题
|
||||||
type?: number // 问题类型:1-单选 2-多选 3-填空 4-评分 5-日期 6-数字
|
type?: number // 问题类型:1-单选 2-多选 3-填空 4-评分 5-日期 6-数字
|
||||||
@ -22,48 +21,71 @@ export interface Question {
|
|||||||
displayCondition?: string // 显示条件JSON
|
displayCondition?: string // 显示条件JSON
|
||||||
minValue?: number // 最小值
|
minValue?: number // 最小值
|
||||||
maxValue?: number // 最大值
|
maxValue?: number // 最大值
|
||||||
createTime?: Date // 创建时间
|
createTime?: string // 创建时间
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 问卷问题分页参数 */
|
||||||
|
export interface QuestionPageParams {
|
||||||
|
pageNo: number
|
||||||
|
pageSize: number
|
||||||
|
questionnaireId?: number
|
||||||
|
title?: string
|
||||||
|
type?: number
|
||||||
|
partName?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 批量更新参数 */
|
||||||
|
export interface BatchUpdateQuestion {
|
||||||
|
id: number
|
||||||
|
partName?: string
|
||||||
|
partSort?: number
|
||||||
|
sort?: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 批量更新请求 */
|
||||||
|
export interface BatchUpdateReq {
|
||||||
|
questions: BatchUpdateQuestion[]
|
||||||
}
|
}
|
||||||
|
|
||||||
// 问卷问题 API
|
// 问卷问题 API
|
||||||
export const QuestionApi = {
|
export const QuestionApi = {
|
||||||
// 查询问卷问题分页
|
// 查询问卷问题分页
|
||||||
getQuestionPage: async (params: any) => {
|
getQuestionPage: async (params: QuestionPageParams) => {
|
||||||
return await request.get({ url: `/prison/question/page`, params })
|
return await request.get({ url: `/prison/question/page`, params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询问卷问题详情
|
// 查询问卷问题详情
|
||||||
getQuestion: async (id: number) => {
|
getQuestion: async (id: number) => {
|
||||||
return await request.get({ url: `/prison/question/get?id=` + id })
|
return await request.get<Question>({ url: `/prison/question/get`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 新增问卷问题
|
// 新增问卷问题
|
||||||
createQuestion: async (data: Question) => {
|
createQuestion: async (data: Question) => {
|
||||||
return await request.post({ url: `/prison/question/create`, data })
|
return await request.post<number>({ url: `/prison/question/create`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 修改问卷问题
|
// 修改问卷问题
|
||||||
updateQuestion: async (data: Question) => {
|
updateQuestion: async (data: Question) => {
|
||||||
return await request.put({ url: `/prison/question/update`, data })
|
return await request.put<boolean>({ url: `/prison/question/update`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 删除问卷问题
|
// 删除问卷问题
|
||||||
deleteQuestion: async (id: number) => {
|
deleteQuestion: async (id: number) => {
|
||||||
return await request.delete({ url: `/prison/question/delete?id=` + id })
|
return await request.delete<boolean>({ url: `/prison/question/delete`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 批量删除问卷问题 */
|
/** 批量删除问卷问题 */
|
||||||
deleteQuestionList: async (ids: number[]) => {
|
deleteQuestionList: async (ids: number[]) => {
|
||||||
return await request.delete({ url: `/prison/question/delete-list?ids=${ids.join(',')}` })
|
return await request.delete<boolean>({ url: `/prison/question/delete-list`, params: { ids: ids.join(',') } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 导出问卷问题 Excel
|
// 导出问卷问题 Excel
|
||||||
exportQuestion: async (params) => {
|
exportQuestion: async (params: QuestionPageParams) => {
|
||||||
return await request.download({ url: `/prison/question/export-excel`, params })
|
return await request.download({ url: `/prison/question/export-excel`, params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 批量更新问卷问题(仅排序和分区字段)
|
// 批量更新问卷问题(仅排序和分区字段)
|
||||||
batchUpdate: async (data: { questions: Array<{ id: number; partName?: string; partSort?: number; sort?: number }> }) => {
|
batchUpdate: async (data: BatchUpdateReq) => {
|
||||||
return await request.post({ url: `/prison/question/batch-update`, data })
|
return await request.post<boolean>({ url: `/prison/question/batch-update`, data })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,51 +1,73 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 问卷模板信息 */
|
/** 问卷模板信息 */
|
||||||
export interface Questionnaire {
|
export interface Questionnaire {
|
||||||
id: number; // 问卷ID
|
id?: number // 问卷ID(创建时不需要)
|
||||||
title?: string; // 问卷标题
|
title: string // 问卷标题
|
||||||
type?: number; // 问卷类型:1-心理测评 2-行为评估 3-满意度调查
|
type: number // 问卷类型:1-心理测评 2-行为评估 3-满意度调查
|
||||||
description: string; // 问卷说明
|
description?: string // 问卷说明
|
||||||
totalScore: number; // 总分
|
totalScore: number // 总分
|
||||||
passScore: number; // 及格分
|
passScore: number // 及格分
|
||||||
status?: number; // 状态:1-草稿 2-已发布 3-已禁用
|
status: number // 状态:1-草稿 2-已发布 3-已禁用
|
||||||
}
|
coverImage?: string // 封面图片URL
|
||||||
|
instruction?: string // 填写说明
|
||||||
|
estimatedTime?: number // 预计耗时(分钟)
|
||||||
|
partCount?: number // 分区数量
|
||||||
|
allowAnonymous?: boolean // 是否允许匿名
|
||||||
|
creator?: string // 创建者
|
||||||
|
createTime?: string // 创建时间
|
||||||
|
updater?: string // 更新者
|
||||||
|
updateTime?: string // 更新时间
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 问卷模板分页参数 */
|
||||||
|
export interface QuestionnairePageParams {
|
||||||
|
pageNo: number
|
||||||
|
pageSize: number
|
||||||
|
title?: string
|
||||||
|
type?: number
|
||||||
|
status?: number
|
||||||
|
coverImage?: string
|
||||||
|
instruction?: string
|
||||||
|
estimatedTime?: number
|
||||||
|
partCount?: number
|
||||||
|
allowAnonymous?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
// 问卷模板 API
|
// 问卷模板 API
|
||||||
export const QuestionnaireApi = {
|
export const QuestionnaireApi = {
|
||||||
// 查询问卷模板分页
|
// 查询问卷模板分页
|
||||||
getQuestionnairePage: async (params: any) => {
|
getQuestionnairePage: async (params: QuestionnairePageParams) => {
|
||||||
return await request.get({ url: `/prison/questionnaire/page`, params })
|
return await request.get({ url: `/prison/questionnaire/page`, params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询问卷模板详情
|
// 查询问卷模板详情
|
||||||
getQuestionnaire: async (id: number) => {
|
getQuestionnaire: async (id: number) => {
|
||||||
return await request.get({ url: `/prison/questionnaire/get?id=` + id })
|
return await request.get<Questionnaire>({ url: `/prison/questionnaire/get`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 新增问卷模板
|
// 新增问卷模板
|
||||||
createQuestionnaire: async (data: Questionnaire) => {
|
createQuestionnaire: async (data: Questionnaire) => {
|
||||||
return await request.post({ url: `/prison/questionnaire/create`, data })
|
return await request.post<number>({ url: `/prison/questionnaire/create`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 修改问卷模板
|
// 修改问卷模板
|
||||||
updateQuestionnaire: async (data: Questionnaire) => {
|
updateQuestionnaire: async (data: Questionnaire) => {
|
||||||
return await request.put({ url: `/prison/questionnaire/update`, data })
|
return await request.put<boolean>({ url: `/prison/questionnaire/update`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 删除问卷模板
|
// 删除问卷模板
|
||||||
deleteQuestionnaire: async (id: number) => {
|
deleteQuestionnaire: async (id: number) => {
|
||||||
return await request.delete({ url: `/prison/questionnaire/delete?id=` + id })
|
return await request.delete<boolean>({ url: `/prison/questionnaire/delete`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 批量删除问卷模板 */
|
/** 批量删除问卷模板 */
|
||||||
deleteQuestionnaireList: async (ids: number[]) => {
|
deleteQuestionnaireList: async (ids: number[]) => {
|
||||||
return await request.delete({ url: `/prison/questionnaire/delete-list?ids=${ids.join(',')}` })
|
return await request.delete<boolean>({ url: `/prison/questionnaire/delete-list`, params: { ids: ids.join(',') } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 导出问卷模板 Excel
|
// 导出问卷模板 Excel
|
||||||
exportQuestionnaire: async (params) => {
|
exportQuestionnaire: async (params: QuestionnairePageParams) => {
|
||||||
return await request.download({ url: `/prison/questionnaire/export-excel`, params })
|
return await request.download({ url: `/prison/questionnaire/export-excel`, params })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,52 +1,66 @@
|
|||||||
import request from '@/config/axios'
|
import request from '@/config/axios'
|
||||||
import type { Dayjs } from 'dayjs';
|
|
||||||
|
|
||||||
/** 问卷答题记录信息 */
|
/** 问卷答题记录信息 */
|
||||||
export interface QuestionnaireRecord {
|
export interface QuestionnaireRecord {
|
||||||
id: number; // 记录ID
|
id?: number // 记录ID(创建时不需要)
|
||||||
questionnaireId?: number; // 问卷ID
|
questionnaireId?: number // 问卷ID
|
||||||
prisonerId?: number; // 罪犯ID
|
prisonerId?: number // 罪犯ID
|
||||||
prisonerNo?: string; // 罪犯编号
|
prisonerNo?: string // 罪犯编号
|
||||||
totalScore: number; // 得分
|
totalScore?: number // 得分
|
||||||
passStatus: number; // 是否及格:1-及格 2-不及格
|
passStatus?: number // 是否及格:0-未及格 1-及格
|
||||||
answerTime?: string | Dayjs; // 答题时间
|
answerTime?: string // 答题时间
|
||||||
status?: number; // 状态:1-已完成 2-已过期
|
status?: number // 状态:1-待评估 2-已完成
|
||||||
}
|
createTime?: string // 创建时间
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 问卷答题记录分页参数 */
|
||||||
|
export interface QuestionnaireRecordPageParams {
|
||||||
|
pageNo: number
|
||||||
|
pageSize: number
|
||||||
|
questionnaireId?: number
|
||||||
|
prisonerId?: number
|
||||||
|
prisonerNo?: string
|
||||||
|
totalScore?: number
|
||||||
|
passStatus?: number
|
||||||
|
status?: number
|
||||||
|
answerTime?: string[]
|
||||||
|
createTime?: string[]
|
||||||
|
}
|
||||||
|
|
||||||
// 问卷答题记录 API
|
// 问卷答题记录 API
|
||||||
export const QuestionnaireRecordApi = {
|
export const QuestionnaireRecordApi = {
|
||||||
// 查询问卷答题记录分页
|
// 查询问卷答题记录分页
|
||||||
getQuestionnaireRecordPage: async (params: any) => {
|
getQuestionnaireRecordPage: async (params: QuestionnaireRecordPageParams) => {
|
||||||
return await request.get({ url: `/prison/questionnaire-record/page`, params })
|
return await request.get({ url: `/prison/questionnaire-record/page`, params })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 查询问卷答题记录详情
|
// 查询问卷答题记录详情
|
||||||
getQuestionnaireRecord: async (id: number) => {
|
getQuestionnaireRecord: async (id: number) => {
|
||||||
return await request.get({ url: `/prison/questionnaire-record/get?id=` + id })
|
return await request.get<QuestionnaireRecord>({ url: `/prison/questionnaire-record/get`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 新增问卷答题记录
|
// 新增问卷答题记录
|
||||||
createQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
createQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
||||||
return await request.post({ url: `/prison/questionnaire-record/create`, data })
|
return await request.post<number>({ url: `/prison/questionnaire-record/create`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 修改问卷答题记录
|
// 修改问卷答题记录
|
||||||
updateQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
updateQuestionnaireRecord: async (data: QuestionnaireRecord) => {
|
||||||
return await request.put({ url: `/prison/questionnaire-record/update`, data })
|
return await request.put<boolean>({ url: `/prison/questionnaire-record/update`, data })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 删除问卷答题记录
|
// 删除问卷答题记录
|
||||||
deleteQuestionnaireRecord: async (id: number) => {
|
deleteQuestionnaireRecord: async (id: number) => {
|
||||||
return await request.delete({ url: `/prison/questionnaire-record/delete?id=` + id })
|
return await request.delete<boolean>({ url: `/prison/questionnaire-record/delete`, params: { id } })
|
||||||
},
|
},
|
||||||
|
|
||||||
/** 批量删除问卷答题记录 */
|
/** 批量删除问卷答题记录 */
|
||||||
deleteQuestionnaireRecordList: async (ids: number[]) => {
|
deleteQuestionnaireRecordList: async (ids: number[]) => {
|
||||||
return await request.delete({ url: `/prison/questionnaire-record/delete-list?ids=${ids.join(',')}` })
|
return await request.delete<boolean>({ url: `/prison/questionnaire-record/delete-list`, params: { ids: ids.join(',') } })
|
||||||
},
|
},
|
||||||
|
|
||||||
// 导出问卷答题记录 Excel
|
// 导出问卷答题记录 Excel
|
||||||
exportQuestionnaireRecord: async (params) => {
|
exportQuestionnaireRecord: async (params: QuestionnaireRecordPageParams) => {
|
||||||
return await request.download({ url: `/prison/questionnaire-record/export-excel`, params })
|
return await request.download({ url: `/prison/questionnaire-record/export-excel`, params })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -458,5 +458,15 @@ export default {
|
|||||||
btn_zoom_in: 'Zoom in',
|
btn_zoom_in: 'Zoom in',
|
||||||
btn_zoom_out: 'Zoom out',
|
btn_zoom_out: 'Zoom out',
|
||||||
preview: 'Preivew'
|
preview: 'Preivew'
|
||||||
|
},
|
||||||
|
prison: {
|
||||||
|
area: {
|
||||||
|
nameRequired: 'Area name is required',
|
||||||
|
codeRequired: 'Area code is required',
|
||||||
|
levelRequired: 'Level is required',
|
||||||
|
typeRequired: 'Area type is required',
|
||||||
|
statusRequired: 'Status is required',
|
||||||
|
parentNotSelf: 'Parent area cannot be itself'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -454,5 +454,15 @@ export default {
|
|||||||
btn_zoom_out: '缩小',
|
btn_zoom_out: '缩小',
|
||||||
preview: '预览'
|
preview: '预览'
|
||||||
},
|
},
|
||||||
|
prison: {
|
||||||
|
area: {
|
||||||
|
nameRequired: '监区名称不能为空',
|
||||||
|
codeRequired: '监区编码不能为空',
|
||||||
|
levelRequired: '级别不能为空',
|
||||||
|
typeRequired: '监区类型不能为空',
|
||||||
|
statusRequired: '状态不能为空',
|
||||||
|
parentNotSelf: '父级监区不能选择自己'
|
||||||
|
}
|
||||||
|
},
|
||||||
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
|
'OAuth 2.0': 'OAuth 2.0' // 避免菜单名是 OAuth 2.0 时,一直 warn 报错
|
||||||
}
|
}
|
||||||
@ -86,7 +86,7 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
|||||||
import { AreaApi, AreaSaveReqVO } from '@/api/prison/area'
|
import { AreaApi, AreaSaveReqVO } from '@/api/prison/area'
|
||||||
|
|
||||||
/** 监区信息 表单 */
|
/** 监区信息 表单 */
|
||||||
defineOptions({ name: 'AreaForm' })
|
defineOptions({ name: 'PrisonAreaForm' })
|
||||||
|
|
||||||
const { t } = useI18n() // 国际化
|
const { t } = useI18n() // 国际化
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
@ -110,11 +110,11 @@ const formData = ref({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
name: [{ required: true, message: '监区名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: t('prison.area.nameRequired'), trigger: 'blur' }],
|
||||||
code: [{ required: true, message: '监区编码不能为空', trigger: 'blur' }],
|
code: [{ required: true, message: t('prison.area.codeRequired'), trigger: 'blur' }],
|
||||||
level: [{ required: true, message: '级别不能为空', trigger: 'blur' }],
|
level: [{ required: true, message: t('prison.area.levelRequired'), trigger: 'blur' }],
|
||||||
type: [{ required: true, message: '监区类型不能为空', trigger: 'blur' }],
|
type: [{ required: true, message: t('prison.area.typeRequired'), trigger: 'blur' }],
|
||||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
status: [{ required: true, message: t('prison.area.statusRequired'), trigger: 'blur' }]
|
||||||
})
|
})
|
||||||
|
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
@ -191,7 +191,7 @@ const submitForm = async () => {
|
|||||||
const data = formData.value as unknown as AreaSaveReqVO
|
const data = formData.value as unknown as AreaSaveReqVO
|
||||||
// 监区级别不能选择自己为父级
|
// 监区级别不能选择自己为父级
|
||||||
if (data.level === 2 && data.parentId === data.id) {
|
if (data.level === 2 && data.parentId === data.id) {
|
||||||
message.error('父级监区不能选择自己')
|
message.error(t('prison.area.parentNotSelf'))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (formType.value === 'create') {
|
if (formType.value === 'create') {
|
||||||
|
|||||||
@ -221,14 +221,11 @@ import { AreaApi, AreaNode } from '@/api/prison/area'
|
|||||||
import AreaForm from './AreaForm.vue'
|
import AreaForm from './AreaForm.vue'
|
||||||
import { OfficeBuilding, Files } from '@element-plus/icons-vue'
|
import { OfficeBuilding, Files } from '@element-plus/icons-vue'
|
||||||
|
|
||||||
defineOptions({ name: 'Area' })
|
defineOptions({ name: 'PrisonArea' })
|
||||||
|
|
||||||
const message = useMessage()
|
const message = useMessage()
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const loading = ref(true)
|
|
||||||
const list = ref<Area[]>([])
|
|
||||||
const total = ref(0)
|
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
@ -257,12 +254,6 @@ const treeProps = {
|
|||||||
children: 'children'
|
children: 'children'
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 日期格式化 */
|
|
||||||
const formatDate = (date: string | Date | undefined) => {
|
|
||||||
if (!date) return '-'
|
|
||||||
return new Date(date).toLocaleString('zh-CN')
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 获取级别图标 */
|
/** 获取级别图标 */
|
||||||
const getLevelIcon = (level: number) => {
|
const getLevelIcon = (level: number) => {
|
||||||
return level === 1 ? OfficeBuilding : Files
|
return level === 1 ? OfficeBuilding : Files
|
||||||
@ -319,22 +310,9 @@ const getTreeList = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 查询列表 */
|
|
||||||
const getList = async () => {
|
|
||||||
loading.value = true
|
|
||||||
try {
|
|
||||||
const data = await AreaApi.getAreaPage(queryParams)
|
|
||||||
list.value = data.list
|
|
||||||
total.value = data.total
|
|
||||||
} finally {
|
|
||||||
loading.value = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 搜索按钮操作 */
|
/** 搜索按钮操作 */
|
||||||
const handleQuery = () => {
|
const handleQuery = () => {
|
||||||
queryParams.pageNo = 1
|
queryParams.pageNo = 1
|
||||||
getList()
|
|
||||||
// 刷新树形结构(带搜索条件)
|
// 刷新树形结构(带搜索条件)
|
||||||
getTreeListWithSearch()
|
getTreeListWithSearch()
|
||||||
}
|
}
|
||||||
@ -344,7 +322,6 @@ const resetQuery = () => {
|
|||||||
queryFormRef.value.resetFields()
|
queryFormRef.value.resetFields()
|
||||||
// 刷新树形结构(使用默认条件,不带搜索参数)
|
// 刷新树形结构(使用默认条件,不带搜索参数)
|
||||||
getTreeList()
|
getTreeList()
|
||||||
handleQuery()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加/修改操作 */
|
/** 添加/修改操作 */
|
||||||
@ -404,7 +381,6 @@ const handleExport = async () => {
|
|||||||
/** 初始化 */
|
/** 初始化 */
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getTreeList()
|
getTreeList()
|
||||||
getList()
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@ -58,8 +58,9 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import { CellApi, Cell } from '@/api/prison/cell'
|
import { CellApi } from '@/api/prison/cell'
|
||||||
import { AreaApi } from '@/api/prison/area'
|
import { AreaApi } from '@/api/prison/area'
|
||||||
|
import type { CellVO, CellCreateReqVO, CellUpdateReqVO } from '@/api/prison/cell'
|
||||||
|
|
||||||
/** 监室信息 表单 */
|
/** 监室信息 表单 */
|
||||||
defineOptions({ name: 'CellForm' })
|
defineOptions({ name: 'CellForm' })
|
||||||
@ -75,22 +76,22 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|||||||
// 监区树形数据
|
// 监区树形数据
|
||||||
const areaTreeData = ref<any[]>([])
|
const areaTreeData = ref<any[]>([])
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref<Partial<CellCreateReqVO> & { id?: number }>({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
areaId: undefined as number | undefined,
|
areaId: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
capacity: undefined as number | undefined,
|
capacity: undefined,
|
||||||
currentCount: undefined as number | undefined,
|
sort: undefined,
|
||||||
sort: undefined as number | undefined,
|
status: undefined,
|
||||||
status: undefined as number | undefined,
|
|
||||||
remark: undefined
|
remark: undefined
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
areaId: [{ required: true, message: '所属监区不能为空', trigger: 'change' }],
|
areaId: [{ required: true, message: '所属监区不能为空', trigger: 'change' }],
|
||||||
name: [{ required: true, message: '监室名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '监室名称不能为空', trigger: 'blur' }],
|
||||||
code: [{ required: true, message: '监室编码不能为空', trigger: 'blur' }],
|
code: [{ required: true, message: '监室编码不能为空', trigger: 'blur' }],
|
||||||
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }],
|
||||||
|
status: [{ required: true, message: '状态不能为空', trigger: 'change' }]
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
@ -98,7 +99,8 @@ const formRef = ref() // 表单 Ref
|
|||||||
const loadAreaTree = async () => {
|
const loadAreaTree = async () => {
|
||||||
try {
|
try {
|
||||||
areaTreeData.value = await AreaApi.getAreaTree()
|
areaTreeData.value = await AreaApi.getAreaTree()
|
||||||
} catch {
|
} catch (error) {
|
||||||
|
console.error('加载监区树形数据失败:', error)
|
||||||
areaTreeData.value = []
|
areaTreeData.value = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,17 +135,19 @@ const submitForm = async () => {
|
|||||||
// 提交请求
|
// 提交请求
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
const data = formData.value as unknown as Cell
|
const data = formData.value as CellCreateReqVO & { id?: number }
|
||||||
if (formType.value === 'create') {
|
if (formType.value === 'create') {
|
||||||
await CellApi.createCell(data)
|
await CellApi.createCell(data)
|
||||||
message.success(t('common.createSuccess'))
|
message.success(t('common.createSuccess'))
|
||||||
} else {
|
} else {
|
||||||
await CellApi.updateCell(data)
|
await CellApi.updateCell(data as CellUpdateReqVO)
|
||||||
message.success(t('common.updateSuccess'))
|
message.success(t('common.updateSuccess'))
|
||||||
}
|
}
|
||||||
dialogVisible.value = false
|
dialogVisible.value = false
|
||||||
// 发送操作成功的事件
|
// 发送操作成功的事件
|
||||||
emit('success')
|
emit('success')
|
||||||
|
} catch (error) {
|
||||||
|
console.error('提交表单失败:', error)
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
@ -157,7 +161,6 @@ const resetForm = () => {
|
|||||||
name: undefined,
|
name: undefined,
|
||||||
code: undefined,
|
code: undefined,
|
||||||
capacity: undefined,
|
capacity: undefined,
|
||||||
currentCount: undefined,
|
|
||||||
sort: undefined,
|
sort: undefined,
|
||||||
status: undefined,
|
status: undefined,
|
||||||
remark: undefined
|
remark: undefined
|
||||||
|
|||||||
@ -139,9 +139,10 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import { CellApi, Cell } from '@/api/prison/cell'
|
import { CellApi } from '@/api/prison/cell'
|
||||||
import { AreaApi } from '@/api/prison/area'
|
import { AreaApi } from '@/api/prison/area'
|
||||||
import CellForm from './CellForm.vue'
|
import CellForm from './CellForm.vue'
|
||||||
|
import type { CellVO, CellPageReqVO } from '@/api/prison/cell'
|
||||||
|
|
||||||
defineOptions({ name: 'Cell' })
|
defineOptions({ name: 'Cell' })
|
||||||
|
|
||||||
@ -149,12 +150,12 @@ const message = useMessage()
|
|||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const list = ref<Cell[]>([])
|
const list = ref<CellVO[]>([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const queryParams = reactive({
|
const queryParams = reactive<CellPageReqVO>({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
areaId: undefined as number | undefined,
|
areaId: undefined,
|
||||||
name: undefined,
|
name: undefined,
|
||||||
status: undefined
|
status: undefined
|
||||||
})
|
})
|
||||||
@ -224,7 +225,7 @@ const handleDelete = async (id: number) => {
|
|||||||
|
|
||||||
/** 批量删除按钮操作 */
|
/** 批量删除按钮操作 */
|
||||||
const checkedIds = ref<number[]>([])
|
const checkedIds = ref<number[]>([])
|
||||||
const handleRowCheckboxChange = (rows: Cell[]) => {
|
const handleRowCheckboxChange = (rows: CellVO[]) => {
|
||||||
checkedIds.value = rows.map((row) => row.id!)
|
checkedIds.value = rows.map((row) => row.id!)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,7 +245,7 @@ const handleExport = async () => {
|
|||||||
await message.exportConfirm()
|
await message.exportConfirm()
|
||||||
exportLoading.value = true
|
exportLoading.value = true
|
||||||
const data = await CellApi.exportCell(queryParams)
|
const data = await CellApi.exportCell(queryParams)
|
||||||
download.excel(data, '监室信息.xls')
|
download.excel(data, '监室信息.xlsx')
|
||||||
} catch {
|
} catch {
|
||||||
} finally {
|
} finally {
|
||||||
exportLoading.value = false
|
exportLoading.value = false
|
||||||
|
|||||||
@ -96,7 +96,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatDate(scope.row.createTime) }}
|
{{ dateFormatter(scope.row.createTime) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" width="150">
|
<el-table-column label="操作" align="center" width="150">
|
||||||
@ -157,19 +157,8 @@ const queryParams = reactive({
|
|||||||
const queryFormRef = ref()
|
const queryFormRef = ref()
|
||||||
const exportLoading = ref(false)
|
const exportLoading = ref(false)
|
||||||
|
|
||||||
// 问题类型枚举选项 (1-单选 2-多选 3-填空 4-评分)
|
// 问题类型枚举选项 (使用字典)
|
||||||
const questionTypeOptions = [
|
const questionTypeOptions = getIntDictOptions(DICT_TYPE.PRISON_QUESTION_TYPE)
|
||||||
{ label: '单选', value: 1 },
|
|
||||||
{ label: '多选', value: 2 },
|
|
||||||
{ label: '填空', value: 3 },
|
|
||||||
{ label: '评分', value: 4 }
|
|
||||||
]
|
|
||||||
|
|
||||||
/** 日期格式化 */
|
|
||||||
const formatDate = (date: string | Date | undefined) => {
|
|
||||||
if (!date) return '-'
|
|
||||||
return new Date(date).toLocaleString('zh-CN')
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
|||||||
@ -110,7 +110,7 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatDate(scope.row.createTime) }}
|
{{ dateFormatter(scope.row.createTime) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" width="150">
|
<el-table-column label="操作" align="center" width="150">
|
||||||
@ -185,12 +185,6 @@ const exportLoading = ref(false)
|
|||||||
const questionnaireTypeOptions = getIntDictOptions(DICT_TYPE.PRISON_QUESTIONNAIRE_TYPE)
|
const questionnaireTypeOptions = getIntDictOptions(DICT_TYPE.PRISON_QUESTIONNAIRE_TYPE)
|
||||||
const questionnaireStatusOptions = getIntDictOptions(DICT_TYPE.PRISON_QUESTIONNAIRE_STATUS)
|
const questionnaireStatusOptions = getIntDictOptions(DICT_TYPE.PRISON_QUESTIONNAIRE_STATUS)
|
||||||
|
|
||||||
/** 日期格式化 */
|
|
||||||
const formatDate = (date: string | Date | undefined) => {
|
|
||||||
if (!date) return '-'
|
|
||||||
return new Date(date).toLocaleString('zh-CN')
|
|
||||||
}
|
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user