holland.vue 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <step-paper type="holland">
  3. <template #welcome>
  4. <view class="p-40 leading-6">
  5. <view class="text-lg text-main indent-50">
  6. 霍兰德职业兴趣测评(self-Directed Search)是由美国职业指导专家霍兰德(John
  7. Holland)根据他本人大量的职业咨询经验及其汁液类型理论编制的测评工具。他认为,个人职业兴趣特性与职业之间有一种内在的对应关系,根据系兴趣不同人格可分为以下六种,每个人的性格都是这六个维度的不同程度的组合。
  8. </view>
  9. <uv-image src="/static/test-center/img_huolandeceshi.png" height="auto" width="90vw"
  10. mode="widthFix" class="py-60"/>
  11. <view class="text-content indent-50">
  12. 职业兴趣测评,定位于高中的职业兴趣特征,从与职业和专业选择密切相关的6种兴趣类型入手,全面深入地了解个人的职业兴趣偏好,并提供应用测评结果指导生涯规划及大学的选则建议。
  13. </view>
  14. </view>
  15. </template>
  16. <template #result>
  17. <interest-result :holl-info="hollandData" :series-data="chartData"/>
  18. </template>
  19. </step-paper>
  20. </template>
  21. <script setup>
  22. import {ref, onMounted} from 'vue'
  23. import mxConst from "@/common/mxConst";
  24. import _ from 'lodash'
  25. import StepPaper from "@/pages/test-center/components/step-paper/step-paper.vue";
  26. import {
  27. questionsFormatter,
  28. stepFormatter,
  29. useProvideStepPaper
  30. } from "@/pages/test-center/components/step-paper/useStepPaperInjection";
  31. import {hollDetail, hollSaveHolland, hollSteps, hollStepsQuestions} from "@/api/webApi/career-course";
  32. import {useProvideQuestionService} from "@/components/mx-question/useQuestionInjection";
  33. import {
  34. useProvideStepPaperNavigationService
  35. } from "@/pages/test-center/components/step-paper/useProvideStepPaperNavigationService";
  36. import InterestResult from "@/pages/test-center/holland/components/interest-result.vue";
  37. import {useTransfer} from "@/hooks/useTransfer";
  38. import {useProvidePageScroll} from "@/hooks/usePageScrollInjection";
  39. import {useCacheStore} from "@/hooks/useCacheStore";
  40. const {prevData} = useTransfer()
  41. const {dispatchCache} = useCacheStore()
  42. const paperService = useProvideStepPaper('霍兰德职业系兴趣测评', v => `[${v}]`)
  43. const {welcomeShow, resultShow, steps, stepQuestionContainer, onBegin, onStepStart, onFinish} = paperService
  44. const questionService = useProvideQuestionService(paperService, 0, false)
  45. useProvideStepPaperNavigationService(paperService, questionService)
  46. useProvidePageScroll()
  47. const hollandData = ref({})
  48. const chartData = ref([])
  49. onBegin(async () => {
  50. const res = await dispatchCache(hollSteps)
  51. steps.value = stepFormatter(res.data)
  52. })
  53. onStepStart(async (stepId) => {
  54. if (stepQuestionContainer.value.has(stepId)) return
  55. const res = await dispatchCache(hollStepsQuestions, {stepId})
  56. const useRadio = stepId == 5
  57. const typeId = useRadio ? mxConst.question.radioTypes[0] : mxConst.question.checkboxTypes[0]
  58. const options = useRadio ? _.map(_.range(1, 8), id => ({id, label: id + '分'})) : null
  59. stepQuestionContainer.value.set(stepId, questionsFormatter(res.rows, typeId, options))
  60. })
  61. onFinish(async (commits) => {
  62. uni.showLoading({
  63. title: '正在生成报告',
  64. mask: true
  65. })
  66. try {
  67. const {data: code} = await hollSaveHolland(commits)
  68. await loadReport(code)
  69. } finally {
  70. uni.hideLoading()
  71. }
  72. })
  73. onMounted(async () => {
  74. // prevData.value.code = 'ee028df062bba5e6b6aee859100c43d1'
  75. if (prevData.value.code) {
  76. welcomeShow.value = false
  77. resultShow.value = true
  78. try {
  79. uni.showLoading()
  80. await loadReport(prevData.value.code)
  81. } finally {
  82. uni.hideLoading()
  83. }
  84. }
  85. })
  86. const loadReport = async (code) => {
  87. const {data} = await hollDetail({code})
  88. const {scorer, scorea, scorei, scores, scoree, scorec} = data
  89. hollandData.value = data
  90. chartData.value = [scorer, scorea, scorei, scores, scoree, scorec]
  91. }
  92. </script>