/** * 调查问卷管理相关常量定义 * @fileoverview 问卷状态、模板类型、题目类型、必填状态等枚举值和工具函数 */ /** * 问卷状态枚举 * @readonly * @enum {number} */ export const SURVEY_STATUS = { /** 草稿 */ DRAFT: 0, /** 已发布 */ PUBLISHED: 1, /** 已结束 */ ENDED: 2 } /** * 是否模板枚举 * @readonly * @enum {number} */ export const SURVEY_TEMPLATE = { /** 否 */ NO: 0, /** 是(模板) */ YES: 1 } /** * 题目类型枚举 * @readonly * @enum {number} */ export const QUESTION_TYPE = { /** 单选 */ SINGLE_CHOICE: 1, /** 多选 */ MULTIPLE_CHOICE: 2, /** 文本 */ TEXT: 3 } /** * 是否必填枚举 * @readonly * @enum {number} */ export const QUESTION_REQUIRED = { /** 否 */ NO: 0, /** 是 */ YES: 1 } /** * 问卷状态配置映射 * @readonly * @type {Record} */ export const SURVEY_STATUS_CONFIG = { [SURVEY_STATUS.DRAFT]: { label: '草稿', type: 'info', color: '#909399' }, [SURVEY_STATUS.PUBLISHED]: { label: '已发布', type: 'success', color: '#67C23A' }, [SURVEY_STATUS.ENDED]: { label: '已结束', type: 'danger', color: '#F56C6C' } } /** * 是否模板配置映射 * @readonly * @type {Record} */ export const SURVEY_TEMPLATE_CONFIG = { [SURVEY_TEMPLATE.NO]: { label: '否', type: 'info', color: '#909399' }, [SURVEY_TEMPLATE.YES]: { label: '是(模板)', type: 'warning', color: '#E6A23C' } } /** * 问卷状态选项数组 * @readonly * @type {Array<{label: string, value: number}>} */ export const SURVEY_STATUS_OPTIONS = [ { label: '草稿', value: SURVEY_STATUS.DRAFT }, { label: '已发布', value: SURVEY_STATUS.PUBLISHED }, { label: '已结束', value: SURVEY_STATUS.ENDED } ] /** * 是否模板选项数组 * @readonly * @type {Array<{label: string, value: number}>} */ export const SURVEY_TEMPLATE_OPTIONS = [ { label: '否', value: SURVEY_TEMPLATE.NO }, { label: '是(模板)', value: SURVEY_TEMPLATE.YES } ] /** * 获取问卷状态标签 * @param {number} status - 状态值 * @returns {string} 状态标签 */ export function getSurveyStatusLabel(status) { return SURVEY_STATUS_CONFIG[status]?.label || '未知状态' } /** * 获取问卷状态类型 * @param {number} status - 状态值 * @returns {string} 状态类型 */ export function getSurveyStatusType(status) { return SURVEY_STATUS_CONFIG[status]?.type || 'info' } /** * 获取问卷状态颜色 * @param {number} status - 状态值 * @returns {string} 状态颜色 */ export function getSurveyStatusColor(status) { return SURVEY_STATUS_CONFIG[status]?.color || '#909399' } /** * 获取是否模板标签 * @param {number} isTemplate - 模板值 * @returns {string} 模板标签 */ export function getSurveyTemplateLabel(isTemplate) { return SURVEY_TEMPLATE_CONFIG[isTemplate]?.label || '未知类型' } /** * 获取是否模板类型 * @param {number} isTemplate - 模板值 * @returns {string} 模板类型 */ export function getSurveyTemplateType(isTemplate) { return SURVEY_TEMPLATE_CONFIG[isTemplate]?.type || 'info' } /** * 获取是否模板颜色 * @param {number} isTemplate - 模板值 * @returns {string} 模板颜色 */ export function getSurveyTemplateColor(isTemplate) { return SURVEY_TEMPLATE_CONFIG[isTemplate]?.color || '#909399' } /** * 验证问卷状态是否有效 * @param {number} status - 状态值 * @returns {boolean} 是否有效 */ export function isValidSurveyStatus(status) { return Object.values(SURVEY_STATUS).includes(status) } /** * 验证是否模板值是否有效 * @param {number} isTemplate - 模板值 * @returns {boolean} 是否有效 */ export function isValidSurveyTemplate(isTemplate) { return Object.values(SURVEY_TEMPLATE).includes(isTemplate) } /** * 获取所有问卷状态值 * @returns {Array} 状态值数组 */ export function getAllSurveyStatusValues() { return Object.values(SURVEY_STATUS) } /** * 获取所有是否模板值 * @returns {Array} 模板值数组 */ export function getAllSurveyTemplateValues() { return Object.values(SURVEY_TEMPLATE) } /** * 题目类型配置映射 * @readonly * @type {Record} */ export const QUESTION_TYPE_CONFIG = { [QUESTION_TYPE.SINGLE_CHOICE]: { label: '单选', type: 'primary', color: '#409EFF', icon: 'el-icon-circle-check' }, [QUESTION_TYPE.MULTIPLE_CHOICE]: { label: '多选', type: 'success', color: '#67C23A', icon: 'el-icon-check' }, [QUESTION_TYPE.TEXT]: { label: '文本', type: 'warning', color: '#E6A23C', icon: 'el-icon-edit' } } /** * 是否必填配置映射 * @readonly * @type {Record} */ export const QUESTION_REQUIRED_CONFIG = { [QUESTION_REQUIRED.NO]: { label: '否', type: 'info', color: '#909399' }, [QUESTION_REQUIRED.YES]: { label: '是', type: 'danger', color: '#F56C6C' } } /** * 题目类型选项数组 * @readonly * @type {Array<{label: string, value: number}>} */ export const QUESTION_TYPE_OPTIONS = [ { label: '单选', value: QUESTION_TYPE.SINGLE_CHOICE }, { label: '多选', value: QUESTION_TYPE.MULTIPLE_CHOICE }, { label: '文本', value: QUESTION_TYPE.TEXT } ] /** * 是否必填选项数组 * @readonly * @type {Array<{label: string, value: number}>} */ export const QUESTION_REQUIRED_OPTIONS = [ { label: '否', value: QUESTION_REQUIRED.NO }, { label: '是', value: QUESTION_REQUIRED.YES } ] /** * 获取题目类型标签 * @param {number} questionType - 题目类型值 * @returns {string} 题目类型标签 */ export function getQuestionTypeLabel(questionType) { return QUESTION_TYPE_CONFIG[questionType]?.label || '未知类型' } /** * 获取题目类型类型 * @param {number} questionType - 题目类型值 * @returns {string} 题目类型类型 */ export function getQuestionTypeType(questionType) { return QUESTION_TYPE_CONFIG[questionType]?.type || 'info' } /** * 获取题目类型颜色 * @param {number} questionType - 题目类型值 * @returns {string} 题目类型颜色 */ export function getQuestionTypeColor(questionType) { return QUESTION_TYPE_CONFIG[questionType]?.color || '#909399' } /** * 获取题目类型图标 * @param {number} questionType - 题目类型值 * @returns {string} 题目类型图标 */ export function getQuestionTypeIcon(questionType) { return QUESTION_TYPE_CONFIG[questionType]?.icon || 'el-icon-question' } /** * 获取是否必填标签 * @param {number} isRequired - 必填值 * @returns {string} 必填标签 */ export function getQuestionRequiredLabel(isRequired) { return QUESTION_REQUIRED_CONFIG[isRequired]?.label || '未知' } /** * 获取是否必填类型 * @param {number} isRequired - 必填值 * @returns {string} 必填类型 */ export function getQuestionRequiredType(isRequired) { return QUESTION_REQUIRED_CONFIG[isRequired]?.type || 'info' } /** * 获取是否必填颜色 * @param {number} isRequired - 必填值 * @returns {string} 必填颜色 */ export function getQuestionRequiredColor(isRequired) { return QUESTION_REQUIRED_CONFIG[isRequired]?.color || '#909399' } /** * 验证题目类型是否有效 * @param {number} questionType - 题目类型值 * @returns {boolean} 是否有效 */ export function isValidQuestionType(questionType) { return Object.values(QUESTION_TYPE).includes(questionType) } /** * 验证是否必填值是否有效 * @param {number} isRequired - 必填值 * @returns {boolean} 是否有效 */ export function isValidQuestionRequired(isRequired) { return Object.values(QUESTION_REQUIRED).includes(isRequired) } /** * 判断题目类型是否需要选项 * @param {number} questionType - 题目类型值 * @returns {boolean} 是否需要选项 */ export function isQuestionTypeNeedOptions(questionType) { return questionType === QUESTION_TYPE.SINGLE_CHOICE || questionType === QUESTION_TYPE.MULTIPLE_CHOICE } /** * 获取所有题目类型值 * @returns {Array} 题目类型值数组 */ export function getAllQuestionTypeValues() { return Object.values(QUESTION_TYPE) } /** * 获取所有是否必填值 * @returns {Array} 必填值数组 */ export function getAllQuestionRequiredValues() { return Object.values(QUESTION_REQUIRED) }