新增题库配置、题库、用户试卷存储页面
This commit is contained in:
		
							
								
								
									
										63
									
								
								plus-ui/src/api/safety/questionBank/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								plus-ui/src/api/safety/questionBank/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { QuestionBankVO, QuestionBankForm, QuestionBankQuery } from '@/api/safety/questionBank/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询题库列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listQuestionBank = (query?: QuestionBankQuery): AxiosPromise<QuestionBankVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionBank/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询题库详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getQuestionBank = (id: string | number): AxiosPromise<QuestionBankVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionBank/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增题库 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addQuestionBank = (data: QuestionBankForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionBank', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改题库 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateQuestionBank = (data: QuestionBankForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionBank', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除题库 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delQuestionBank = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionBank/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										101
									
								
								plus-ui/src/api/safety/questionBank/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								plus-ui/src/api/safety/questionBank/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,101 @@ | |||||||
|  | export interface QuestionBankVO { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类别 | ||||||
|  |    */ | ||||||
|  |   categoryType: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类型 | ||||||
|  |    */ | ||||||
|  |   questionType: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目内容 | ||||||
|  |    */ | ||||||
|  |   questionContent: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 选项(以JSON数组形式存储) | ||||||
|  |    */ | ||||||
|  |   optionList: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 正确答案 | ||||||
|  |    */ | ||||||
|  |   correctAnswer: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionBankForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类别 | ||||||
|  |    */ | ||||||
|  |   categoryType?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类型 | ||||||
|  |    */ | ||||||
|  |   questionType?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目内容 | ||||||
|  |    */ | ||||||
|  |   questionContent?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 选项(以JSON数组形式存储) | ||||||
|  |    */ | ||||||
|  |   optionList?: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 正确答案 | ||||||
|  |    */ | ||||||
|  |   correctAnswer?: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionBankQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类别 | ||||||
|  |    */ | ||||||
|  |   categoryType?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目类型 | ||||||
|  |    */ | ||||||
|  |   questionType?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题目内容 | ||||||
|  |    */ | ||||||
|  |   questionContent?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 选项(以JSON数组形式存储) | ||||||
|  |    */ | ||||||
|  |   optionList?: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 正确答案 | ||||||
|  |    */ | ||||||
|  |   correctAnswer?: string; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								plus-ui/src/api/safety/questionUserAnswer/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								plus-ui/src/api/safety/questionUserAnswer/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { QuestionUserAnswerVO, QuestionUserAnswerForm, QuestionUserAnswerQuery } from '@/api/safety/questionUserAnswer/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询用户试卷存储列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listQuestionUserAnswer = (query?: QuestionUserAnswerQuery): AxiosPromise<QuestionUserAnswerVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionUserAnswer/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询用户试卷存储详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getQuestionUserAnswer = (id: string | number): AxiosPromise<QuestionUserAnswerVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionUserAnswer/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增用户试卷存储 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addQuestionUserAnswer = (data: QuestionUserAnswerForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionUserAnswer', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改用户试卷存储 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateQuestionUserAnswer = (data: QuestionUserAnswerForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionUserAnswer', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除用户试卷存储 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delQuestionUserAnswer = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionUserAnswer/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										146
									
								
								plus-ui/src/api/safety/questionUserAnswer/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								plus-ui/src/api/safety/questionUserAnswer/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,146 @@ | |||||||
|  | export interface QuestionUserAnswerVO { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用户id | ||||||
|  |    */ | ||||||
|  |   userId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题库id列表 | ||||||
|  |    */ | ||||||
|  |   bankIdList: Array<string | number>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答案列表 | ||||||
|  |    */ | ||||||
|  |   answerList: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 得分 | ||||||
|  |    */ | ||||||
|  |   score: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用时时间(时间戳/秒) | ||||||
|  |    */ | ||||||
|  |   takeTime: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线/总分(格式:60,100) | ||||||
|  |    */ | ||||||
|  |   pass: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 文件地址 | ||||||
|  |    */ | ||||||
|  |   file: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionUserAnswerForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用户id | ||||||
|  |    */ | ||||||
|  |   userId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题库id列表 | ||||||
|  |    */ | ||||||
|  |   bankIdList: Array<string | number>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答案列表 | ||||||
|  |    */ | ||||||
|  |   answerList: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 得分 | ||||||
|  |    */ | ||||||
|  |   score?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用时时间(时间戳/秒) | ||||||
|  |    */ | ||||||
|  |   takeTime?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线/总分(格式:60,100) | ||||||
|  |    */ | ||||||
|  |   pass?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 文件地址 | ||||||
|  |    */ | ||||||
|  |   file?: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionUserAnswerQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用户id | ||||||
|  |    */ | ||||||
|  |   userId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 题库id列表 | ||||||
|  |    */ | ||||||
|  |   bankIdList: Array<string | number>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答案列表 | ||||||
|  |    */ | ||||||
|  |   answerList: Array<string>; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 得分 | ||||||
|  |    */ | ||||||
|  |   score?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 用时时间(时间戳/秒) | ||||||
|  |    */ | ||||||
|  |   takeTime?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线/总分(格式:60,100) | ||||||
|  |    */ | ||||||
|  |   pass?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 文件地址 | ||||||
|  |    */ | ||||||
|  |   file?: string; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								plus-ui/src/api/safety/questionsConfig/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								plus-ui/src/api/safety/questionsConfig/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { QuestionsConfigVO, QuestionsConfigForm, QuestionsConfigQuery } from '@/api/safety/questionsConfig/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询题库配置列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listQuestionsConfig = (query?: QuestionsConfigQuery): AxiosPromise<QuestionsConfigVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionsConfig/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询题库配置详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getQuestionsConfig = (id: string | number): AxiosPromise<QuestionsConfigVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionsConfig/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增题库配置 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addQuestionsConfig = (data: QuestionsConfigForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionsConfig', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改题库配置 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateQuestionsConfig = (data: QuestionsConfigForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionsConfig', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除题库配置 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delQuestionsConfig = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/safety/questionsConfig/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										161
									
								
								plus-ui/src/api/safety/questionsConfig/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								plus-ui/src/api/safety/questionsConfig/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | |||||||
|  | export interface QuestionsConfigVO { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   singleChoice: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选分数 | ||||||
|  |    */ | ||||||
|  |   singleScore: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   multipleChoice: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选分数 | ||||||
|  |    */ | ||||||
|  |   multipleScore: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断题(单位/道) | ||||||
|  |    */ | ||||||
|  |   estimate: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断分数 | ||||||
|  |    */ | ||||||
|  |   estimateScore: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 满分 | ||||||
|  |    */ | ||||||
|  |   fullMark: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线 | ||||||
|  |    */ | ||||||
|  |   passScore: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答题最大时间(单位/分钟) | ||||||
|  |    */ | ||||||
|  |   answerTime: number; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionsConfigForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    * 主键id | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   singleChoice?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选分数 | ||||||
|  |    */ | ||||||
|  |   singleScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   multipleChoice?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选分数 | ||||||
|  |    */ | ||||||
|  |   multipleScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断题(单位/道) | ||||||
|  |    */ | ||||||
|  |   estimate?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断分数 | ||||||
|  |    */ | ||||||
|  |   estimateScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 满分 | ||||||
|  |    */ | ||||||
|  |   fullMark?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线 | ||||||
|  |    */ | ||||||
|  |   passScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答题最大时间(单位/分钟) | ||||||
|  |    */ | ||||||
|  |   answerTime?: number; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface QuestionsConfigQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   singleChoice?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单选分数 | ||||||
|  |    */ | ||||||
|  |   singleScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选题(单位/道) | ||||||
|  |    */ | ||||||
|  |   multipleChoice?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 多选分数 | ||||||
|  |    */ | ||||||
|  |   multipleScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断题(单位/道) | ||||||
|  |    */ | ||||||
|  |   estimate?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 判断分数 | ||||||
|  |    */ | ||||||
|  |   estimateScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 满分 | ||||||
|  |    */ | ||||||
|  |   fullMark?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 及格线 | ||||||
|  |    */ | ||||||
|  |   passScore?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 答题最大时间(单位/分钟) | ||||||
|  |    */ | ||||||
|  |   answerTime?: number; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -118,7 +118,7 @@ const currentRow = ref<ProjectTeamVO>({ | |||||||
|   teamName: undefined, |   teamName: undefined, | ||||||
|   isClockIn: undefined, |   isClockIn: undefined, | ||||||
|   remark: undefined, |   remark: undefined, | ||||||
|   ProjectTeamVO: undefined |   createTime: undefined | ||||||
| }); | }); | ||||||
|  |  | ||||||
| const queryFormRef = ref<ElFormInstance>(); | const queryFormRef = ref<ElFormInstance>(); | ||||||
|  | |||||||
							
								
								
									
										289
									
								
								plus-ui/src/views/safety/questionBank/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								plus-ui/src/views/safety/questionBank/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,289 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-2"> | ||||||
|  |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|  |       <div v-show="showSearch" class="mb-[10px]"> | ||||||
|  |         <el-card shadow="hover"> | ||||||
|  |           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||||
|  |             <el-form-item label="题目类别" prop="categoryType"> | ||||||
|  |               <el-select v-model="queryParams.categoryType" placeholder="请选择题目类别" clearable > | ||||||
|  |                 <el-option v-for="dict in safety_question_category_type" :key="dict.value" :label="dict.label" :value="dict.value"/> | ||||||
|  |               </el-select> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="题目类型" prop="questionType"> | ||||||
|  |               <el-select v-model="queryParams.questionType" placeholder="请选择题目类型" clearable > | ||||||
|  |                 <el-option v-for="dict in safety_question_type" :key="dict.value" :label="dict.label" :value="dict.value"/> | ||||||
|  |               </el-select> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="题目内容" prop="questionContent"> | ||||||
|  |               <el-input v-model="queryParams.questionContent" placeholder="请输入题目内容" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="选项" prop="options"> | ||||||
|  |               <el-input v-model="queryParams.options" placeholder="请输入选项" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="正确答案" prop="correctAnswer"> | ||||||
|  |               <el-input v-model="queryParams.correctAnswer" placeholder="请输入正确答案" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item> | ||||||
|  |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|  |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-form> | ||||||
|  |         </el-card> | ||||||
|  |       </div> | ||||||
|  |     </transition> | ||||||
|  |  | ||||||
|  |     <el-card shadow="never"> | ||||||
|  |       <template #header> | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['safety:questionBank:add']">新增</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['safety:questionBank:edit']">修改</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['safety:questionBank:remove']">删除</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['safety:questionBank:export']">导出</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||||
|  |         </el-row> | ||||||
|  |       </template> | ||||||
|  |  | ||||||
|  |       <el-table v-loading="loading" :data="questionBankList" @selection-change="handleSelectionChange"> | ||||||
|  |         <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |         <el-table-column label="主键id" align="center" prop="id" v-if="true" /> | ||||||
|  |         <el-table-column label="题目类别" align="center" prop="categoryType"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <dict-tag :options="safety_question_category_type" :value="scope.row.categoryType"/> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="题目类型" align="center" prop="questionType"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <dict-tag :options="safety_question_type" :value="scope.row.questionType"/> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="题目内容" align="center" prop="questionContent" /> | ||||||
|  |         <el-table-column label="选项" align="center" prop="options" /> | ||||||
|  |         <el-table-column label="正确答案" align="center" prop="correctAnswer" /> | ||||||
|  |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-tooltip content="修改" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['safety:questionBank:edit']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |             <el-tooltip content="删除" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['safety:questionBank:remove']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |  | ||||||
|  |       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|  |     </el-card> | ||||||
|  |     <!-- 添加或修改题库对话框 --> | ||||||
|  |     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> | ||||||
|  |       <el-form ref="questionBankFormRef" :model="form" :rules="rules" label-width="80px"> | ||||||
|  |         <el-form-item label="题目类别" prop="categoryType"> | ||||||
|  |           <el-select v-model="form.categoryType" placeholder="请选择题目类别"> | ||||||
|  |             <el-option | ||||||
|  |                 v-for="dict in safety_question_category_type" | ||||||
|  |                 :key="dict.value" | ||||||
|  |                 :label="dict.label" | ||||||
|  |                 :value="dict.value" | ||||||
|  |             ></el-option> | ||||||
|  |           </el-select> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="题目类型" prop="questionType"> | ||||||
|  |           <el-select v-model="form.questionType" placeholder="请选择题目类型"> | ||||||
|  |             <el-option | ||||||
|  |                 v-for="dict in safety_question_type" | ||||||
|  |                 :key="dict.value" | ||||||
|  |                 :label="dict.label" | ||||||
|  |                 :value="dict.value" | ||||||
|  |             ></el-option> | ||||||
|  |           </el-select> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="题目内容" prop="questionContent"> | ||||||
|  |           <el-input v-model="form.questionContent" placeholder="请输入题目内容" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="选项" prop="options"> | ||||||
|  |             <el-input v-model="form.options" type="textarea" placeholder="请输入内容" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="正确答案" prop="correctAnswer"> | ||||||
|  |           <el-input v-model="form.correctAnswer" placeholder="请输入正确答案" /> | ||||||
|  |         </el-form-item> | ||||||
|  |       </el-form> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> | ||||||
|  |           <el-button @click="cancel">取 消</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup name="QuestionBank" lang="ts"> | ||||||
|  | import { listQuestionBank, getQuestionBank, delQuestionBank, addQuestionBank, updateQuestionBank } from '@/api/safety/questionBank'; | ||||||
|  | import { QuestionBankVO, QuestionBankQuery, QuestionBankForm } from '@/api/safety/questionBank/types'; | ||||||
|  |  | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  | const { safety_question_type, safety_question_category_type } = toRefs<any>(proxy?.useDict('safety_question_type', 'safety_question_category_type')); | ||||||
|  |  | ||||||
|  | const questionBankList = ref<QuestionBankVO[]>([]); | ||||||
|  | const buttonLoading = ref(false); | ||||||
|  | const loading = ref(true); | ||||||
|  | const showSearch = ref(true); | ||||||
|  | const ids = ref<Array<string | number>>([]); | ||||||
|  | const single = ref(true); | ||||||
|  | const multiple = ref(true); | ||||||
|  | const total = ref(0); | ||||||
|  |  | ||||||
|  | const queryFormRef = ref<ElFormInstance>(); | ||||||
|  | const questionBankFormRef = ref<ElFormInstance>(); | ||||||
|  |  | ||||||
|  | const dialog = reactive<DialogOption>({ | ||||||
|  |   visible: false, | ||||||
|  |   title: '' | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const initFormData: QuestionBankForm = { | ||||||
|  |   id: undefined, | ||||||
|  |   categoryType: undefined, | ||||||
|  |   questionType: undefined, | ||||||
|  |   questionContent: undefined, | ||||||
|  |   options: undefined, | ||||||
|  |   correctAnswer: undefined, | ||||||
|  | } | ||||||
|  | const data = reactive<PageData<QuestionBankForm, QuestionBankQuery>>({ | ||||||
|  |   form: {...initFormData}, | ||||||
|  |   queryParams: { | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |     categoryType: undefined, | ||||||
|  |     questionType: undefined, | ||||||
|  |     questionContent: undefined, | ||||||
|  |     options: undefined, | ||||||
|  |     correctAnswer: undefined, | ||||||
|  |     params: { | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   rules: { | ||||||
|  |     id: [ | ||||||
|  |       { required: true, message: "主键id不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     categoryType: [ | ||||||
|  |       { required: true, message: "题目类别不能为空", trigger: "change" } | ||||||
|  |     ], | ||||||
|  |     questionType: [ | ||||||
|  |       { required: true, message: "题目类型不能为空", trigger: "change" } | ||||||
|  |     ], | ||||||
|  |     questionContent: [ | ||||||
|  |       { required: true, message: "题目内容不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     options: [ | ||||||
|  |       { required: true, message: "选项不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     correctAnswer: [ | ||||||
|  |       { required: true, message: "正确答案不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const { queryParams, form, rules } = toRefs(data); | ||||||
|  |  | ||||||
|  | /** 查询题库列表 */ | ||||||
|  | const getList = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   const res = await listQuestionBank(queryParams.value); | ||||||
|  |   questionBankList.value = res.rows; | ||||||
|  |   total.value = res.total; | ||||||
|  |   loading.value = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 取消按钮 */ | ||||||
|  | const cancel = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 表单重置 */ | ||||||
|  | const reset = () => { | ||||||
|  |   form.value = {...initFormData}; | ||||||
|  |   questionBankFormRef.value?.resetFields(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 搜索按钮操作 */ | ||||||
|  | const handleQuery = () => { | ||||||
|  |   queryParams.value.pageNum = 1; | ||||||
|  |   getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 重置按钮操作 */ | ||||||
|  | const resetQuery = () => { | ||||||
|  |   queryFormRef.value?.resetFields(); | ||||||
|  |   handleQuery(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 多选框选中数据 */ | ||||||
|  | const handleSelectionChange = (selection: QuestionBankVO[]) => { | ||||||
|  |   ids.value = selection.map(item => item.id); | ||||||
|  |   single.value = selection.length != 1; | ||||||
|  |   multiple.value = !selection.length; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 新增按钮操作 */ | ||||||
|  | const handleAdd = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "添加题库"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 修改按钮操作 */ | ||||||
|  | const handleUpdate = async (row?: QuestionBankVO) => { | ||||||
|  |   reset(); | ||||||
|  |   const _id = row?.id || ids.value[0] | ||||||
|  |   const res = await getQuestionBank(_id); | ||||||
|  |   Object.assign(form.value, res.data); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "修改题库"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 提交按钮 */ | ||||||
|  | const submitForm = () => { | ||||||
|  |   questionBankFormRef.value?.validate(async (valid: boolean) => { | ||||||
|  |     if (valid) { | ||||||
|  |       buttonLoading.value = true; | ||||||
|  |       if (form.value.id) { | ||||||
|  |         await updateQuestionBank(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } else { | ||||||
|  |         await addQuestionBank(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } | ||||||
|  |       proxy?.$modal.msgSuccess("操作成功"); | ||||||
|  |       dialog.visible = false; | ||||||
|  |       await getList(); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 删除按钮操作 */ | ||||||
|  | const handleDelete = async (row?: QuestionBankVO) => { | ||||||
|  |   const _ids = row?.id || ids.value; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除题库编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); | ||||||
|  |   await delQuestionBank(_ids); | ||||||
|  |   proxy?.$modal.msgSuccess("删除成功"); | ||||||
|  |   await getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 导出按钮操作 */ | ||||||
|  | const handleExport = () => { | ||||||
|  |   proxy?.download('safety/questionBank/export', { | ||||||
|  |     ...queryParams.value | ||||||
|  |   }, `questionBank_${new Date().getTime()}.xlsx`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | onMounted(() => { | ||||||
|  |   getList(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
							
								
								
									
										271
									
								
								plus-ui/src/views/safety/questionUserAnswer/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										271
									
								
								plus-ui/src/views/safety/questionUserAnswer/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,271 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-2"> | ||||||
|  |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|  |       <div v-show="showSearch" class="mb-[10px]"> | ||||||
|  |         <el-card shadow="hover"> | ||||||
|  |           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||||
|  |             <el-form-item label="项目id" prop="projectId"> | ||||||
|  |               <el-input v-model="queryParams.projectId" placeholder="请输入项目id" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="用户id" prop="userId"> | ||||||
|  |               <el-input v-model="queryParams.userId" placeholder="请输入用户id" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="题库id列表" prop="bankId"> | ||||||
|  |               <el-input v-model="queryParams.bankId" placeholder="请输入题库id列表" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="答案列表" prop="answer"> | ||||||
|  |               <el-input v-model="queryParams.answer" placeholder="请输入答案列表" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="得分" prop="score"> | ||||||
|  |               <el-input v-model="queryParams.score" placeholder="请输入得分" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="用时时间" prop="takeTime"> | ||||||
|  |               <el-input v-model="queryParams.takeTime" placeholder="请输入用时时间" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="及格线/总分" prop="pass"> | ||||||
|  |               <el-input v-model="queryParams.pass" placeholder="请输入及格线/总分" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item> | ||||||
|  |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|  |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-form> | ||||||
|  |         </el-card> | ||||||
|  |       </div> | ||||||
|  |     </transition> | ||||||
|  |  | ||||||
|  |     <el-card shadow="never"> | ||||||
|  |       <template #header> | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['safety:questionUserAnswer:add']">新增</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['safety:questionUserAnswer:edit']">修改</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['safety:questionUserAnswer:remove']">删除</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['safety:questionUserAnswer:export']">导出</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||||
|  |         </el-row> | ||||||
|  |       </template> | ||||||
|  |  | ||||||
|  |       <el-table v-loading="loading" :data="questionUserAnswerList" @selection-change="handleSelectionChange"> | ||||||
|  |         <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |         <el-table-column label="主键id" align="center" prop="id" v-if="true" /> | ||||||
|  |         <el-table-column label="项目id" align="center" prop="projectId" /> | ||||||
|  |         <el-table-column label="用户id" align="center" prop="userId" /> | ||||||
|  |         <el-table-column label="题库id列表" align="center" prop="bankId" /> | ||||||
|  |         <el-table-column label="答案列表" align="center" prop="answer" /> | ||||||
|  |         <el-table-column label="得分" align="center" prop="score" /> | ||||||
|  |         <el-table-column label="用时时间" align="center" prop="takeTime" /> | ||||||
|  |         <el-table-column label="及格线/总分" align="center" prop="pass" /> | ||||||
|  |         <el-table-column label="文件地址" align="center" prop="file" /> | ||||||
|  |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-tooltip content="修改" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['safety:questionUserAnswer:edit']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |             <el-tooltip content="删除" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['safety:questionUserAnswer:remove']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |  | ||||||
|  |       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|  |     </el-card> | ||||||
|  |     <!-- 添加或修改用户试卷存储对话框 --> | ||||||
|  |     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> | ||||||
|  |       <el-form ref="questionUserAnswerFormRef" :model="form" :rules="rules" label-width="80px"> | ||||||
|  |         <el-form-item label="项目id" prop="projectId"> | ||||||
|  |           <el-input v-model="form.projectId" placeholder="请输入项目id" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="用户id" prop="userId"> | ||||||
|  |           <el-input v-model="form.userId" placeholder="请输入用户id" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="题库id列表" prop="bankId"> | ||||||
|  |           <el-input v-model="form.bankId" placeholder="请输入题库id列表" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="答案列表" prop="answer"> | ||||||
|  |           <el-input v-model="form.answer" placeholder="请输入答案列表" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="得分" prop="score"> | ||||||
|  |           <el-input v-model="form.score" placeholder="请输入得分" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="用时时间" prop="takeTime"> | ||||||
|  |           <el-input v-model="form.takeTime" placeholder="请输入用时时间" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="及格线/总分" prop="pass"> | ||||||
|  |           <el-input v-model="form.pass" placeholder="请输入及格线/总分" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="文件地址" prop="file"> | ||||||
|  |           <file-upload v-model="form.file"/> | ||||||
|  |         </el-form-item> | ||||||
|  |       </el-form> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> | ||||||
|  |           <el-button @click="cancel">取 消</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup name="QuestionUserAnswer" lang="ts"> | ||||||
|  | import { listQuestionUserAnswer, getQuestionUserAnswer, delQuestionUserAnswer, addQuestionUserAnswer, updateQuestionUserAnswer } from '@/api/safety/questionUserAnswer'; | ||||||
|  | import { QuestionUserAnswerVO, QuestionUserAnswerQuery, QuestionUserAnswerForm } from '@/api/safety/questionUserAnswer/types'; | ||||||
|  |  | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  |  | ||||||
|  | const questionUserAnswerList = ref<QuestionUserAnswerVO[]>([]); | ||||||
|  | const buttonLoading = ref(false); | ||||||
|  | const loading = ref(true); | ||||||
|  | const showSearch = ref(true); | ||||||
|  | const ids = ref<Array<string | number>>([]); | ||||||
|  | const single = ref(true); | ||||||
|  | const multiple = ref(true); | ||||||
|  | const total = ref(0); | ||||||
|  |  | ||||||
|  | const queryFormRef = ref<ElFormInstance>(); | ||||||
|  | const questionUserAnswerFormRef = ref<ElFormInstance>(); | ||||||
|  |  | ||||||
|  | const dialog = reactive<DialogOption>({ | ||||||
|  |   visible: false, | ||||||
|  |   title: '' | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const initFormData: QuestionUserAnswerForm = { | ||||||
|  |   id: undefined, | ||||||
|  |   projectId: undefined, | ||||||
|  |   userId: undefined, | ||||||
|  |   bankId: undefined, | ||||||
|  |   answer: undefined, | ||||||
|  |   score: undefined, | ||||||
|  |   takeTime: undefined, | ||||||
|  |   pass: undefined, | ||||||
|  |   file: undefined, | ||||||
|  | } | ||||||
|  | const data = reactive<PageData<QuestionUserAnswerForm, QuestionUserAnswerQuery>>({ | ||||||
|  |   form: {...initFormData}, | ||||||
|  |   queryParams: { | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |     projectId: undefined, | ||||||
|  |     userId: undefined, | ||||||
|  |     bankId: undefined, | ||||||
|  |     answer: undefined, | ||||||
|  |     score: undefined, | ||||||
|  |     takeTime: undefined, | ||||||
|  |     pass: undefined, | ||||||
|  |     file: undefined, | ||||||
|  |     params: { | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   rules: { | ||||||
|  |     id: [ | ||||||
|  |       { required: true, message: "主键id不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const { queryParams, form, rules } = toRefs(data); | ||||||
|  |  | ||||||
|  | /** 查询用户试卷存储列表 */ | ||||||
|  | const getList = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   const res = await listQuestionUserAnswer(queryParams.value); | ||||||
|  |   questionUserAnswerList.value = res.rows; | ||||||
|  |   total.value = res.total; | ||||||
|  |   loading.value = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 取消按钮 */ | ||||||
|  | const cancel = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 表单重置 */ | ||||||
|  | const reset = () => { | ||||||
|  |   form.value = {...initFormData}; | ||||||
|  |   questionUserAnswerFormRef.value?.resetFields(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 搜索按钮操作 */ | ||||||
|  | const handleQuery = () => { | ||||||
|  |   queryParams.value.pageNum = 1; | ||||||
|  |   getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 重置按钮操作 */ | ||||||
|  | const resetQuery = () => { | ||||||
|  |   queryFormRef.value?.resetFields(); | ||||||
|  |   handleQuery(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 多选框选中数据 */ | ||||||
|  | const handleSelectionChange = (selection: QuestionUserAnswerVO[]) => { | ||||||
|  |   ids.value = selection.map(item => item.id); | ||||||
|  |   single.value = selection.length != 1; | ||||||
|  |   multiple.value = !selection.length; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 新增按钮操作 */ | ||||||
|  | const handleAdd = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "添加用户试卷存储"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 修改按钮操作 */ | ||||||
|  | const handleUpdate = async (row?: QuestionUserAnswerVO) => { | ||||||
|  |   reset(); | ||||||
|  |   const _id = row?.id || ids.value[0] | ||||||
|  |   const res = await getQuestionUserAnswer(_id); | ||||||
|  |   Object.assign(form.value, res.data); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "修改用户试卷存储"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 提交按钮 */ | ||||||
|  | const submitForm = () => { | ||||||
|  |   questionUserAnswerFormRef.value?.validate(async (valid: boolean) => { | ||||||
|  |     if (valid) { | ||||||
|  |       buttonLoading.value = true; | ||||||
|  |       if (form.value.id) { | ||||||
|  |         await updateQuestionUserAnswer(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } else { | ||||||
|  |         await addQuestionUserAnswer(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } | ||||||
|  |       proxy?.$modal.msgSuccess("操作成功"); | ||||||
|  |       dialog.visible = false; | ||||||
|  |       await getList(); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 删除按钮操作 */ | ||||||
|  | const handleDelete = async (row?: QuestionUserAnswerVO) => { | ||||||
|  |   const _ids = row?.id || ids.value; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除用户试卷存储编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); | ||||||
|  |   await delQuestionUserAnswer(_ids); | ||||||
|  |   proxy?.$modal.msgSuccess("删除成功"); | ||||||
|  |   await getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 导出按钮操作 */ | ||||||
|  | const handleExport = () => { | ||||||
|  |   proxy?.download('safety/questionUserAnswer/export', { | ||||||
|  |     ...queryParams.value | ||||||
|  |   }, `questionUserAnswer_${new Date().getTime()}.xlsx`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | onMounted(() => { | ||||||
|  |   getList(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
							
								
								
									
										310
									
								
								plus-ui/src/views/safety/questionsConfig/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										310
									
								
								plus-ui/src/views/safety/questionsConfig/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,310 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-2"> | ||||||
|  |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|  |       <div v-show="showSearch" class="mb-[10px]"> | ||||||
|  |         <el-card shadow="hover"> | ||||||
|  |           <el-form ref="queryFormRef" :model="queryParams" :inline="true"> | ||||||
|  |             <el-form-item label="单选题" prop="singleChoice"> | ||||||
|  |               <el-input v-model="queryParams.singleChoice" placeholder="请输入单选题" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="单选分数" prop="singleScore"> | ||||||
|  |               <el-input v-model="queryParams.singleScore" placeholder="请输入单选分数" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="多选题" prop="multipleChoice"> | ||||||
|  |               <el-input v-model="queryParams.multipleChoice" placeholder="请输入多选题" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="多选分数" prop="multipleScore"> | ||||||
|  |               <el-input v-model="queryParams.multipleScore" placeholder="请输入多选分数" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="判断题" prop="estimate"> | ||||||
|  |               <el-input v-model="queryParams.estimate" placeholder="请输入判断题" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="判断分数" prop="estimateScore"> | ||||||
|  |               <el-input v-model="queryParams.estimateScore" placeholder="请输入判断分数" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="满分" prop="fullMark"> | ||||||
|  |               <el-input v-model="queryParams.fullMark" placeholder="请输入满分" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="及格线" prop="passScore"> | ||||||
|  |               <el-input v-model="queryParams.passScore" placeholder="请输入及格线" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="答题最大时间" prop="answerTime"> | ||||||
|  |               <el-input v-model="queryParams.answerTime" placeholder="请输入答题最大时间" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item> | ||||||
|  |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|  |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-form> | ||||||
|  |         </el-card> | ||||||
|  |       </div> | ||||||
|  |     </transition> | ||||||
|  |  | ||||||
|  |     <el-card shadow="never"> | ||||||
|  |       <template #header> | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['safety:questionsConfig:add']">新增</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['safety:questionsConfig:edit']">修改</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()" v-hasPermi="['safety:questionsConfig:remove']">删除</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['safety:questionsConfig:export']">导出</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||||
|  |         </el-row> | ||||||
|  |       </template> | ||||||
|  |  | ||||||
|  |       <el-table v-loading="loading" :data="questionsConfigList" @selection-change="handleSelectionChange"> | ||||||
|  |         <el-table-column type="selection" width="55" align="center" /> | ||||||
|  |         <el-table-column label="主键id" align="center" prop="id" v-if="true" /> | ||||||
|  |         <el-table-column label="单选题" align="center" prop="singleChoice" /> | ||||||
|  |         <el-table-column label="单选分数" align="center" prop="singleScore" /> | ||||||
|  |         <el-table-column label="多选题" align="center" prop="multipleChoice" /> | ||||||
|  |         <el-table-column label="多选分数" align="center" prop="multipleScore" /> | ||||||
|  |         <el-table-column label="判断题" align="center" prop="estimate" /> | ||||||
|  |         <el-table-column label="判断分数" align="center" prop="estimateScore" /> | ||||||
|  |         <el-table-column label="满分" align="center" prop="fullMark" /> | ||||||
|  |         <el-table-column label="及格线" align="center" prop="passScore" /> | ||||||
|  |         <el-table-column label="答题最大时间" align="center" prop="answerTime" /> | ||||||
|  |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-tooltip content="修改" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['safety:questionsConfig:edit']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |             <el-tooltip content="删除" placement="top"> | ||||||
|  |               <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['safety:questionsConfig:remove']"></el-button> | ||||||
|  |             </el-tooltip> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |  | ||||||
|  |       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|  |     </el-card> | ||||||
|  |     <!-- 添加或修改题库配置对话框 --> | ||||||
|  |     <el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body> | ||||||
|  |       <el-form ref="questionsConfigFormRef" :model="form" :rules="rules" label-width="80px"> | ||||||
|  |         <el-form-item label="单选题" prop="singleChoice"> | ||||||
|  |           <el-input v-model="form.singleChoice" placeholder="请输入单选题" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="单选分数" prop="singleScore"> | ||||||
|  |           <el-input v-model="form.singleScore" placeholder="请输入单选分数" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="多选题" prop="multipleChoice"> | ||||||
|  |           <el-input v-model="form.multipleChoice" placeholder="请输入多选题" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="多选分数" prop="multipleScore"> | ||||||
|  |           <el-input v-model="form.multipleScore" placeholder="请输入多选分数" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="判断题" prop="estimate"> | ||||||
|  |           <el-input v-model="form.estimate" placeholder="请输入判断题" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="判断分数" prop="estimateScore"> | ||||||
|  |           <el-input v-model="form.estimateScore" placeholder="请输入判断分数" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="满分" prop="fullMark"> | ||||||
|  |           <el-input v-model="form.fullMark" placeholder="请输入满分" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="及格线" prop="passScore"> | ||||||
|  |           <el-input v-model="form.passScore" placeholder="请输入及格线" /> | ||||||
|  |         </el-form-item> | ||||||
|  |         <el-form-item label="答题最大时间" prop="answerTime"> | ||||||
|  |           <el-input v-model="form.answerTime" placeholder="请输入答题最大时间" /> | ||||||
|  |         </el-form-item> | ||||||
|  |       </el-form> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> | ||||||
|  |           <el-button @click="cancel">取 消</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup name="QuestionsConfig" lang="ts"> | ||||||
|  | import { listQuestionsConfig, getQuestionsConfig, delQuestionsConfig, addQuestionsConfig, updateQuestionsConfig } from '@/api/safety/questionsConfig'; | ||||||
|  | import { QuestionsConfigVO, QuestionsConfigQuery, QuestionsConfigForm } from '@/api/safety/questionsConfig/types'; | ||||||
|  |  | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  |  | ||||||
|  | const questionsConfigList = ref<QuestionsConfigVO[]>([]); | ||||||
|  | const buttonLoading = ref(false); | ||||||
|  | const loading = ref(true); | ||||||
|  | const showSearch = ref(true); | ||||||
|  | const ids = ref<Array<string | number>>([]); | ||||||
|  | const single = ref(true); | ||||||
|  | const multiple = ref(true); | ||||||
|  | const total = ref(0); | ||||||
|  |  | ||||||
|  | const queryFormRef = ref<ElFormInstance>(); | ||||||
|  | const questionsConfigFormRef = ref<ElFormInstance>(); | ||||||
|  |  | ||||||
|  | const dialog = reactive<DialogOption>({ | ||||||
|  |   visible: false, | ||||||
|  |   title: '' | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const initFormData: QuestionsConfigForm = { | ||||||
|  |   id: undefined, | ||||||
|  |   singleChoice: undefined, | ||||||
|  |   singleScore: undefined, | ||||||
|  |   multipleChoice: undefined, | ||||||
|  |   multipleScore: undefined, | ||||||
|  |   estimate: undefined, | ||||||
|  |   estimateScore: undefined, | ||||||
|  |   fullMark: undefined, | ||||||
|  |   passScore: undefined, | ||||||
|  |   answerTime: undefined | ||||||
|  | } | ||||||
|  | const data = reactive<PageData<QuestionsConfigForm, QuestionsConfigQuery>>({ | ||||||
|  |   form: {...initFormData}, | ||||||
|  |   queryParams: { | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |     singleChoice: undefined, | ||||||
|  |     singleScore: undefined, | ||||||
|  |     multipleChoice: undefined, | ||||||
|  |     multipleScore: undefined, | ||||||
|  |     estimate: undefined, | ||||||
|  |     estimateScore: undefined, | ||||||
|  |     fullMark: undefined, | ||||||
|  |     passScore: undefined, | ||||||
|  |     answerTime: undefined, | ||||||
|  |     params: { | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   rules: { | ||||||
|  |     id: [ | ||||||
|  |       { required: true, message: "主键id不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     singleChoice: [ | ||||||
|  |       { required: true, message: "单选题不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     singleScore: [ | ||||||
|  |       { required: true, message: "单选分数不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     multipleChoice: [ | ||||||
|  |       { required: true, message: "多选题不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     multipleScore: [ | ||||||
|  |       { required: true, message: "多选分数不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     estimate: [ | ||||||
|  |       { required: true, message: "判断题不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     estimateScore: [ | ||||||
|  |       { required: true, message: "判断分数不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     fullMark: [ | ||||||
|  |       { required: true, message: "满分不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     passScore: [ | ||||||
|  |       { required: true, message: "及格线不能为空", trigger: "blur" } | ||||||
|  |     ], | ||||||
|  |     answerTime: [ | ||||||
|  |       { required: true, message: "答题最大时间不能为空", trigger: "blur" } | ||||||
|  |     ] | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const { queryParams, form, rules } = toRefs(data); | ||||||
|  |  | ||||||
|  | /** 查询题库配置列表 */ | ||||||
|  | const getList = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   const res = await listQuestionsConfig(queryParams.value); | ||||||
|  |   questionsConfigList.value = res.rows; | ||||||
|  |   total.value = res.total; | ||||||
|  |   loading.value = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 取消按钮 */ | ||||||
|  | const cancel = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 表单重置 */ | ||||||
|  | const reset = () => { | ||||||
|  |   form.value = {...initFormData}; | ||||||
|  |   questionsConfigFormRef.value?.resetFields(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 搜索按钮操作 */ | ||||||
|  | const handleQuery = () => { | ||||||
|  |   queryParams.value.pageNum = 1; | ||||||
|  |   getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 重置按钮操作 */ | ||||||
|  | const resetQuery = () => { | ||||||
|  |   queryFormRef.value?.resetFields(); | ||||||
|  |   handleQuery(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 多选框选中数据 */ | ||||||
|  | const handleSelectionChange = (selection: QuestionsConfigVO[]) => { | ||||||
|  |   ids.value = selection.map(item => item.id); | ||||||
|  |   single.value = selection.length != 1; | ||||||
|  |   multiple.value = !selection.length; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 新增按钮操作 */ | ||||||
|  | const handleAdd = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "添加题库配置"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 修改按钮操作 */ | ||||||
|  | const handleUpdate = async (row?: QuestionsConfigVO) => { | ||||||
|  |   reset(); | ||||||
|  |   const _id = row?.id || ids.value[0] | ||||||
|  |   const res = await getQuestionsConfig(_id); | ||||||
|  |   Object.assign(form.value, res.data); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = "修改题库配置"; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 提交按钮 */ | ||||||
|  | const submitForm = () => { | ||||||
|  |   questionsConfigFormRef.value?.validate(async (valid: boolean) => { | ||||||
|  |     if (valid) { | ||||||
|  |       buttonLoading.value = true; | ||||||
|  |       if (form.value.id) { | ||||||
|  |         await updateQuestionsConfig(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } else { | ||||||
|  |         await addQuestionsConfig(form.value).finally(() =>  buttonLoading.value = false); | ||||||
|  |       } | ||||||
|  |       proxy?.$modal.msgSuccess("操作成功"); | ||||||
|  |       dialog.visible = false; | ||||||
|  |       await getList(); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 删除按钮操作 */ | ||||||
|  | const handleDelete = async (row?: QuestionsConfigVO) => { | ||||||
|  |   const _ids = row?.id || ids.value; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除题库配置编号为"' + _ids + '"的数据项?').finally(() => loading.value = false); | ||||||
|  |   await delQuestionsConfig(_ids); | ||||||
|  |   proxy?.$modal.msgSuccess("删除成功"); | ||||||
|  |   await getList(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /** 导出按钮操作 */ | ||||||
|  | const handleExport = () => { | ||||||
|  |   proxy?.download('safety/questionsConfig/export', { | ||||||
|  |     ...queryParams.value | ||||||
|  |   }, `questionsConfig_${new Date().getTime()}.xlsx`) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | onMounted(() => { | ||||||
|  |   getList(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
		Reference in New Issue
	
	Block a user