survey.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. /**
  2. * 调查问卷管理相关常量定义
  3. * @fileoverview 问卷状态、模板类型、题目类型、必填状态等枚举值和工具函数
  4. */
  5. /**
  6. * 问卷状态枚举
  7. * @readonly
  8. * @enum {number}
  9. */
  10. export const SURVEY_STATUS = {
  11. /** 草稿 */
  12. DRAFT: 0,
  13. /** 已发布 */
  14. PUBLISHED: 1,
  15. /** 已结束 */
  16. ENDED: 2
  17. }
  18. /**
  19. * 是否模板枚举
  20. * @readonly
  21. * @enum {number}
  22. */
  23. export const SURVEY_TEMPLATE = {
  24. /** 否 */
  25. NO: 0,
  26. /** 是(模板) */
  27. YES: 1
  28. }
  29. /**
  30. * 题目类型枚举
  31. * @readonly
  32. * @enum {number}
  33. */
  34. export const QUESTION_TYPE = {
  35. /** 单选 */
  36. SINGLE_CHOICE: 1,
  37. /** 多选 */
  38. MULTIPLE_CHOICE: 2,
  39. /** 文本 */
  40. TEXT: 3
  41. }
  42. /**
  43. * 是否必填枚举
  44. * @readonly
  45. * @enum {number}
  46. */
  47. export const QUESTION_REQUIRED = {
  48. /** 否 */
  49. NO: 0,
  50. /** 是 */
  51. YES: 1
  52. }
  53. /**
  54. * 问卷状态配置映射
  55. * @readonly
  56. * @type {Record<number, {label: string, type: string, color: string}>}
  57. */
  58. export const SURVEY_STATUS_CONFIG = {
  59. [SURVEY_STATUS.DRAFT]: {
  60. label: '草稿',
  61. type: 'info',
  62. color: '#909399'
  63. },
  64. [SURVEY_STATUS.PUBLISHED]: {
  65. label: '已发布',
  66. type: 'success',
  67. color: '#67C23A'
  68. },
  69. [SURVEY_STATUS.ENDED]: {
  70. label: '已结束',
  71. type: 'danger',
  72. color: '#F56C6C'
  73. }
  74. }
  75. /**
  76. * 是否模板配置映射
  77. * @readonly
  78. * @type {Record<number, {label: string, type: string, color: string}>}
  79. */
  80. export const SURVEY_TEMPLATE_CONFIG = {
  81. [SURVEY_TEMPLATE.NO]: {
  82. label: '否',
  83. type: 'info',
  84. color: '#909399'
  85. },
  86. [SURVEY_TEMPLATE.YES]: {
  87. label: '是(模板)',
  88. type: 'warning',
  89. color: '#E6A23C'
  90. }
  91. }
  92. /**
  93. * 问卷状态选项数组
  94. * @readonly
  95. * @type {Array<{label: string, value: number}>}
  96. */
  97. export const SURVEY_STATUS_OPTIONS = [
  98. { label: '草稿', value: SURVEY_STATUS.DRAFT },
  99. { label: '已发布', value: SURVEY_STATUS.PUBLISHED },
  100. { label: '已结束', value: SURVEY_STATUS.ENDED }
  101. ]
  102. /**
  103. * 是否模板选项数组
  104. * @readonly
  105. * @type {Array<{label: string, value: number}>}
  106. */
  107. export const SURVEY_TEMPLATE_OPTIONS = [
  108. { label: '否', value: SURVEY_TEMPLATE.NO },
  109. { label: '是(模板)', value: SURVEY_TEMPLATE.YES }
  110. ]
  111. /**
  112. * 获取问卷状态标签
  113. * @param {number} status - 状态值
  114. * @returns {string} 状态标签
  115. */
  116. export function getSurveyStatusLabel(status) {
  117. return SURVEY_STATUS_CONFIG[status]?.label || '未知状态'
  118. }
  119. /**
  120. * 获取问卷状态类型
  121. * @param {number} status - 状态值
  122. * @returns {string} 状态类型
  123. */
  124. export function getSurveyStatusType(status) {
  125. return SURVEY_STATUS_CONFIG[status]?.type || 'info'
  126. }
  127. /**
  128. * 获取问卷状态颜色
  129. * @param {number} status - 状态值
  130. * @returns {string} 状态颜色
  131. */
  132. export function getSurveyStatusColor(status) {
  133. return SURVEY_STATUS_CONFIG[status]?.color || '#909399'
  134. }
  135. /**
  136. * 获取是否模板标签
  137. * @param {number} isTemplate - 模板值
  138. * @returns {string} 模板标签
  139. */
  140. export function getSurveyTemplateLabel(isTemplate) {
  141. return SURVEY_TEMPLATE_CONFIG[isTemplate]?.label || '未知类型'
  142. }
  143. /**
  144. * 获取是否模板类型
  145. * @param {number} isTemplate - 模板值
  146. * @returns {string} 模板类型
  147. */
  148. export function getSurveyTemplateType(isTemplate) {
  149. return SURVEY_TEMPLATE_CONFIG[isTemplate]?.type || 'info'
  150. }
  151. /**
  152. * 获取是否模板颜色
  153. * @param {number} isTemplate - 模板值
  154. * @returns {string} 模板颜色
  155. */
  156. export function getSurveyTemplateColor(isTemplate) {
  157. return SURVEY_TEMPLATE_CONFIG[isTemplate]?.color || '#909399'
  158. }
  159. /**
  160. * 验证问卷状态是否有效
  161. * @param {number} status - 状态值
  162. * @returns {boolean} 是否有效
  163. */
  164. export function isValidSurveyStatus(status) {
  165. return Object.values(SURVEY_STATUS).includes(status)
  166. }
  167. /**
  168. * 验证是否模板值是否有效
  169. * @param {number} isTemplate - 模板值
  170. * @returns {boolean} 是否有效
  171. */
  172. export function isValidSurveyTemplate(isTemplate) {
  173. return Object.values(SURVEY_TEMPLATE).includes(isTemplate)
  174. }
  175. /**
  176. * 获取所有问卷状态值
  177. * @returns {Array<number>} 状态值数组
  178. */
  179. export function getAllSurveyStatusValues() {
  180. return Object.values(SURVEY_STATUS)
  181. }
  182. /**
  183. * 获取所有是否模板值
  184. * @returns {Array<number>} 模板值数组
  185. */
  186. export function getAllSurveyTemplateValues() {
  187. return Object.values(SURVEY_TEMPLATE)
  188. }
  189. /**
  190. * 题目类型配置映射
  191. * @readonly
  192. * @type {Record<number, {label: string, type: string, color: string, icon: string}>}
  193. */
  194. export const QUESTION_TYPE_CONFIG = {
  195. [QUESTION_TYPE.SINGLE_CHOICE]: {
  196. label: '单选',
  197. type: 'primary',
  198. color: '#409EFF',
  199. icon: 'el-icon-circle-check'
  200. },
  201. [QUESTION_TYPE.MULTIPLE_CHOICE]: {
  202. label: '多选',
  203. type: 'success',
  204. color: '#67C23A',
  205. icon: 'el-icon-check'
  206. },
  207. [QUESTION_TYPE.TEXT]: {
  208. label: '文本',
  209. type: 'warning',
  210. color: '#E6A23C',
  211. icon: 'el-icon-edit'
  212. }
  213. }
  214. /**
  215. * 是否必填配置映射
  216. * @readonly
  217. * @type {Record<number, {label: string, type: string, color: string}>}
  218. */
  219. export const QUESTION_REQUIRED_CONFIG = {
  220. [QUESTION_REQUIRED.NO]: {
  221. label: '否',
  222. type: 'info',
  223. color: '#909399'
  224. },
  225. [QUESTION_REQUIRED.YES]: {
  226. label: '是',
  227. type: 'danger',
  228. color: '#F56C6C'
  229. }
  230. }
  231. /**
  232. * 题目类型选项数组
  233. * @readonly
  234. * @type {Array<{label: string, value: number}>}
  235. */
  236. export const QUESTION_TYPE_OPTIONS = [
  237. { label: '单选', value: QUESTION_TYPE.SINGLE_CHOICE },
  238. { label: '多选', value: QUESTION_TYPE.MULTIPLE_CHOICE },
  239. { label: '文本', value: QUESTION_TYPE.TEXT }
  240. ]
  241. /**
  242. * 是否必填选项数组
  243. * @readonly
  244. * @type {Array<{label: string, value: number}>}
  245. */
  246. export const QUESTION_REQUIRED_OPTIONS = [
  247. { label: '否', value: QUESTION_REQUIRED.NO },
  248. { label: '是', value: QUESTION_REQUIRED.YES }
  249. ]
  250. /**
  251. * 获取题目类型标签
  252. * @param {number} questionType - 题目类型值
  253. * @returns {string} 题目类型标签
  254. */
  255. export function getQuestionTypeLabel(questionType) {
  256. return QUESTION_TYPE_CONFIG[questionType]?.label || '未知类型'
  257. }
  258. /**
  259. * 获取题目类型类型
  260. * @param {number} questionType - 题目类型值
  261. * @returns {string} 题目类型类型
  262. */
  263. export function getQuestionTypeType(questionType) {
  264. return QUESTION_TYPE_CONFIG[questionType]?.type || 'info'
  265. }
  266. /**
  267. * 获取题目类型颜色
  268. * @param {number} questionType - 题目类型值
  269. * @returns {string} 题目类型颜色
  270. */
  271. export function getQuestionTypeColor(questionType) {
  272. return QUESTION_TYPE_CONFIG[questionType]?.color || '#909399'
  273. }
  274. /**
  275. * 获取题目类型图标
  276. * @param {number} questionType - 题目类型值
  277. * @returns {string} 题目类型图标
  278. */
  279. export function getQuestionTypeIcon(questionType) {
  280. return QUESTION_TYPE_CONFIG[questionType]?.icon || 'el-icon-question'
  281. }
  282. /**
  283. * 获取是否必填标签
  284. * @param {number} isRequired - 必填值
  285. * @returns {string} 必填标签
  286. */
  287. export function getQuestionRequiredLabel(isRequired) {
  288. return QUESTION_REQUIRED_CONFIG[isRequired]?.label || '未知'
  289. }
  290. /**
  291. * 获取是否必填类型
  292. * @param {number} isRequired - 必填值
  293. * @returns {string} 必填类型
  294. */
  295. export function getQuestionRequiredType(isRequired) {
  296. return QUESTION_REQUIRED_CONFIG[isRequired]?.type || 'info'
  297. }
  298. /**
  299. * 获取是否必填颜色
  300. * @param {number} isRequired - 必填值
  301. * @returns {string} 必填颜色
  302. */
  303. export function getQuestionRequiredColor(isRequired) {
  304. return QUESTION_REQUIRED_CONFIG[isRequired]?.color || '#909399'
  305. }
  306. /**
  307. * 验证题目类型是否有效
  308. * @param {number} questionType - 题目类型值
  309. * @returns {boolean} 是否有效
  310. */
  311. export function isValidQuestionType(questionType) {
  312. return Object.values(QUESTION_TYPE).includes(questionType)
  313. }
  314. /**
  315. * 验证是否必填值是否有效
  316. * @param {number} isRequired - 必填值
  317. * @returns {boolean} 是否有效
  318. */
  319. export function isValidQuestionRequired(isRequired) {
  320. return Object.values(QUESTION_REQUIRED).includes(isRequired)
  321. }
  322. /**
  323. * 判断题目类型是否需要选项
  324. * @param {number} questionType - 题目类型值
  325. * @returns {boolean} 是否需要选项
  326. */
  327. export function isQuestionTypeNeedOptions(questionType) {
  328. return questionType === QUESTION_TYPE.SINGLE_CHOICE || questionType === QUESTION_TYPE.MULTIPLE_CHOICE
  329. }
  330. /**
  331. * 获取所有题目类型值
  332. * @returns {Array<number>} 题目类型值数组
  333. */
  334. export function getAllQuestionTypeValues() {
  335. return Object.values(QUESTION_TYPE)
  336. }
  337. /**
  338. * 获取所有是否必填值
  339. * @returns {Array<number>} 必填值数组
  340. */
  341. export function getAllQuestionRequiredValues() {
  342. return Object.values(QUESTION_REQUIRED)
  343. }