Просмотр исходного кода

elective paper - fit teacher role

hehaibo 1 год назад
Родитель
Сommit
012658243b

+ 34 - 0
src/api/webApi/mental-health.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+export function getMentalHealthHistories(params) {
+  return request(({
+    url: '/front/mentalHealth/list',
+    method: 'get',
+    params
+  }))
+}
+
+export function getMentalHealthReport(params) {
+  return request(({
+    url: '/front/mentalHealth/report',
+    method: 'get',
+    params
+  }))
+}
+
+export function submitMentalHealthForm(data) {
+  return request(({
+    url: '/front/mentalHealth/submit',
+    method: 'post',
+    data
+  }))
+}
+
+export function exportMentalHealthReport(params) {
+  return request(({
+    url: '/front/mentalHealth/export',
+    method: 'get',
+    responseType: 'blob',
+    params
+  }))
+}

BIN
src/assets/images/career/img_health.jpg


+ 1 - 0
src/common/mx-const.js

@@ -72,6 +72,7 @@ export default {
       occupation: 2,  // 职业兴趣
       knowledge: 3    // 知识兴趣
     },
+    mentalHealthTestType: 4, // 心理健康测评
     electivePermission: {
       applyCount: 'elective:student:apply:applyCount', //初录选科人数比 elective:student:apply:scoreByGroup
       scoreByGroup: 'elective:student:apply:scoreByGroup', // 组合成绩

+ 18 - 0
src/router/index.js

@@ -708,6 +708,24 @@ export const constantRoutes = [{
           title: '多元升学路径规划报告',
           parentRoute: 'MultiwayIndex'
         }
+      },
+      {
+        path: '/career/mental-health/paper',
+        component: (resolve) => require(['@/views/career/MentalHealth/paper.vue'], resolve),
+        name: 'MentalHealthPaper',
+        meta: {
+          title: '心理健康测评试卷',
+          parentRoute: 'MentalHealthIndex'
+        }
+      },
+      {
+        path: '/career/mental-health/report',
+        component: (resolve) => require(['@/views/career/MentalHealth/report.vue'], resolve),
+        name: 'MentalHealthReport',
+        meta: {
+          title: '心理健康测评报告',
+          parentRoute: 'MentalHealthIndex'
+        }
       }
     ]
   }, {

+ 133 - 0
src/views/career/MentalHealth/index.vue

@@ -0,0 +1,133 @@
+<template>
+  <div class="app-container bg-page fx-column fx-cen-cen">
+    <index-card class="width100" title="中学生心理健康诊断测验(MHT)">
+      <div slot="more" class="fx-row">
+        <el-button size="small" round type="primary" @click="goForm()">进入评测</el-button>
+        <el-button size="small" round plain @click="historyVisible=true,getList()">查看记录</el-button>
+      </div>
+      <div class="fx-row fx-bet-sta">
+        <el-image style="width: 200px" :src="require('@/assets/images/career/img_health.jpg')" fit="contain" />
+        <div class="ml20 fx-1 fx-column">
+          <div class="mb15 fx-row ai-cen f14 pf">
+            <span>测评方向:心理健康</span>
+            <span class="ml60">测评时间:20分钟</span>
+            <span class="ml60">测评题目:100题</span>
+          </div>
+          <el-tabs v-model="activeName">
+            <el-tab-pane label="测前说明" name="first">
+              <ul class="test-rule-list">
+                <li>1、评测时间:共100题,无限制,约需20分钟。</li>
+                <li>2、按你平时所想的如实回答。</li>
+                <li>3、每一问题都要回答,难以决定时,请选与你接近或最初想到的答案。</li>
+                <li>4、回答时间没有限制,但不要过分考虑。</li>
+              </ul>
+            </el-tab-pane>
+            <el-tab-pane label="测评介绍" name="second">
+              <ul class="test-rule-list">
+                <li>
+                  1、中学生心理健康诊断测验(MHT)是由华东师范大学心理学系教授周步成和其他心理学科研究人员,根据日本铃木清等人编制的"不安倾向诊断测验"进行修订,成为适应于我国中学学生标准化的《心理健康诊断测验》。
+                </li>
+                <li>
+                  2、这个测验是调查你的心情和感受的,不是测验智力和学习能力,与学习成绩无关,答案也没有好坏对错之分,请按照你平常所想的如实回答。
+                </li>
+              </ul>
+            </el-tab-pane>
+            <el-tab-pane label="测评目的" name="third">
+              <ul class="test-rule-list">
+                <li>1、本测验按焦虑情绪所指向的对象和由焦虑情绪而产生的行为这两个方面进行测定。</li>
+                <li>
+                  2、全量表由8个内容量表构成,主要包括:学习焦虑、对人焦虑、孤独倾向、自责倾向、过敏倾向、身体症状、恐怖倾向、冲动倾向。
+                </li>
+                <li>
+                  3、把这8个内容量表的结果综合起来得到全量表分数,全量表分数从整体上表示焦虑程度强不强、焦虑范围广不广,分数越高,表明学生的焦虑程度越强。由此可诊断出个人的焦虑中,哪个方面问题较大。
+                </li>
+              </ul>
+            </el-tab-pane>
+          </el-tabs>
+        </div>
+      </div>
+    </index-card>
+    <!--  历史  -->
+    <el-drawer :visible.sync="historyVisible" title="心理健康测评历史" size="70%" append-to-body>
+      <dynamic-table :rows="list" :columns="columns">
+        <template #action="{row}">
+          <el-button type="text" icon="el-icon-view" @click="goReport(row)">查看</el-button>
+        </template>
+      </dynamic-table>
+      <pagination
+        v-if="total>queryParams.pageSize"
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+      />
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import DynamicTable from '@/components/dynamic-table/index.vue'
+import IndexCard from '@/views/login/components/modules/shared/IndexCard.vue'
+import MxTransferMixin from '@/components/mx-transfer-mixin'
+import { getMentalHealthHistories } from '@/api/webApi/mental-health'
+import MxConst from '@/common/mx-const'
+
+export default {
+  name: 'MentalHealth',
+  components: { DynamicTable, IndexCard },
+  mixins: [MxTransferMixin],
+  data() {
+    return {
+      activeName: 'first',
+      // history
+      historyVisible: false,
+      list: [],
+      total: 0,
+      queryParams: {
+        pageNum: 1,
+        pageSize: 20
+      },
+      columns: [
+        { prop: 'endTime', label: '时间' },
+        { prop: 'acton', label: '操作', slotBody: 'action' }
+      ]
+    }
+  },
+  methods: {
+    goForm() {
+      const next = { testType: MxConst.enum.mentalHealthTestType } // TODO: confirm new test type
+      const nextRoute = this.$router.resolve({name: 'MentalHealthPaper'})
+      this.transferTo(nextRoute.href, next)
+    },
+    goReport(row) {
+      const query = { testType: MxConst.enum.mentalHealthTestType, examineeId: row.examineeId }
+      const path = this.$router.resolve({ name: 'MentalHealthReport' })
+      this.transferTo(path.href, query, null, '_blank')
+    },
+    async getList() {
+      const res = await getMentalHealthHistories(this.queryParams)
+      this.list = res.rows
+      this.total = res.total
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.test-rule-list {
+  font-size: 14px;
+  color: #414141;
+  font-family: PingFangSC-Regular, PingFang SC, Helvetica, serif;
+  font-weight: 400;
+  padding: 0px;
+  width: 100%;
+
+  li {
+    width: 100%;
+    list-style: none;
+    padding: 8px 0;
+    line-height: 1.75;
+    word-wrap: normal;
+    white-space: pre-wrap;
+  }
+}
+</style>

+ 65 - 0
src/views/career/MentalHealth/paper.vue

@@ -0,0 +1,65 @@
+<template>
+  <div class="bg-page fx-column fx-cen-cen">
+    <index-card title="心理健康(MHT)" class="index-block">
+      <el-button slot="more" v-has-history size="small" round @click="$router.back()">返回</el-button>
+      <mx-paper :options="options" />
+    </index-card>
+  </div>
+</template>
+
+<script>
+import IndexCard from '@/views/login/components/modules/shared/IndexCard.vue'
+import MxPaper from '@/components/MxPaper/mx-paper.vue'
+import transferMixin from '@/components/mx-transfer-mixin'
+import paperMixin from '@/components/MxPaper/mx-paper-mixin'
+import EventBus from '@/components/EventBus'
+import {openExamineePaper, scoreExamineeQuestion} from "@/api/webApi/studentEvaluating";
+
+export default {
+  name: 'MentalHealthPaper',
+  components: { IndexCard, MxPaper },
+  mixins: [transferMixin, paperMixin],
+  data() {
+    return {
+      overrideOpts: {
+        customScoredAction: true,
+        customCommittedAction: true,
+        navigatorSpan: 10
+      }
+    }
+  },
+  computed: {
+    queryApi() {
+      // always use openExamineePaper api.
+      return openExamineePaper
+    },
+    scoreApi() {
+      // always use scoreExamineeQuestion api.
+      return scoreExamineeQuestion
+    }
+  },
+  mounted() {
+    EventBus.instance.$on('customScoredAction', () => this.innerLoadPaper())
+    EventBus.instance.$on('customCommittedAction', () => this.innerLoadPaper())
+    this.loadPaper(this.prevData, this.overrideOpts)
+  },
+  beforeDestroy() {
+    EventBus.instance.$off('customScoredAction')
+    EventBus.instance.$off('customCommittedAction')
+  },
+  methods: {
+    innerLoadPaper() {
+      const next = {
+        ...this.prevData,
+        examineeId: this.paper.examineeId
+      }
+      const nextRoute = this.$router.resolve({name: 'MentalHealthReport'})
+      this.transferTo(nextRoute.href, next, null, true)
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 412 - 0
src/views/career/MentalHealth/report.vue

@@ -0,0 +1,412 @@
+<template>
+  <div class="app-container bg-page fx-column fx-cen-cen">
+    <index-card class="index-block" title="心理健康诊断测验报告" :sub-title="nickName">
+      <div slot="more">
+        <el-button v-loading="loading" size="mini" type="primary" round @click="handleDownload">下载</el-button>
+        <el-button v-has-history size="mini" round @click="$router.push({name: 'MentalHealthIndex'})">返回</el-button>
+      </div>
+      <div class="fx-column">
+        <div v-if="report.endTime" class="f-666 mt10 fx-row jc-end">
+          测评时间: {{ report.endTime }}
+        </div>
+        <!--    introduce    -->
+        <div class="fx-row ai-center mt50">
+          <el-divider direction="vertical" class="multiway-title-divider" />
+          <span class="f24 bold f-333">心理健康诊断测验介绍</span>
+        </div>
+        <div class="mt20 report-content indent2">
+          本测验按焦虑情绪所指向的对象和由焦虑情绪而产生的行为这两个方面进行测定。
+          全量表由8个内容量表构成,把这8个内容量表的结果综合起来得到全量表分数,全量表分数从整体上表示焦虑程度强不强、焦虑范围广不广,分数越高,表明学生的焦虑程度越强:
+          而8个内容量表的结果可诊断出个人的焦虑中,哪个方面问题较大,主要包括;学习焦虑、对人焦虑、孤独倾向、自责倾向、过敏倾向、身体症状、恐怖倾向、冲动倾向。
+        </div>
+        <ul class="report-list">
+          这是按照焦虑反应的表现方式和场合来分类的:
+          <li>
+            1.学习焦虑。近年来,随着升学考试和就业考试的难度增加,学生和父母都很关心学习。每天把学习挂在心上,担心被老师提问,上课时一直不放心,一有考试就怕得坏分数而无法安心学习,这些就是学习焦虑的表现。
+          </li>
+          <li>
+            2.对人焦虑。青少年时期,由于自我过强,不会与人交往,很怕生人,所以,与他人讲话时,担心会不会脸红,受到教师或父母责备时,一直放在心上,并担心朋友也会背地里说自己的坏话,因而经常感到焦躁。
+          </li>
+          <li>
+            3.孤独倾向。被父母疏远的儿童,娇生惯养在家称大王在外懦弱的儿童,腼腆抑郁的青少年,都经常因孤独而烦恼。这类儿童和青少年,和大家一起做某件事时,由于技术差、经验不足,经常感到失败的威胁。因此,感到和大家一起玩还不如一个人玩。这样,就越来越不会和大家一起相处。当别人高兴地相互谈话时,就有一种我不仅不能参加,而且还被人家排挤的心情。这样恶性循环下去,最后只要是人们聚集在一起,就会感到恐怖。这样,既想加入到伙伴当中去,又想避免在伙伴们面前出现失败,因而产生不安倾向。
+          </li>
+          <li>
+            4.自责倾向。像打篮球、排球那样,如果自己的队输了,有些儿童和青少年就认为是因为自己加入了才输的,而一直放在心上。在受到责备、打架之后或成绩不好时,常会认为是自己不好。这样,就对自己所做的事失去了信心。经常担心,阻碍自己的行动。当发生不如意的事情时,不认为是他人的问题,而经常认为是自己不好,对自己所做的事抱有恐惧倾向,称为自责倾向。
+          </li>
+          <li>
+            5.过敏倾向。感受性太强,就连小事都放心不下,行动受到严重损害的倾向,称为过敏倾问。对周围的噪声特别敏感,担心家属中有人会受伤,生病或死亡,决定事情不果断,即使做了好事也感到烦恼。
+          </li>
+          <li>
+            6.身体症状。当焦虑急剧袭来时,感到将要死去,呼吸感到困难,心跳加快,感到喘不过气,出虚汗,头晕、知觉异常。如果焦虑是慢慢产生的,就会心神不定,心跳异常,脉搏混乱,想呕吐,食欲不振,肚子痛或失眠等,这种身体上的症状是比较明显的,所以,过去也曾用于焦虑的诊断。本测验除了这种身体症状外,还包括身体某个部分是否有毛病,身体某个部分是否比别人难看,对身体缺陷不放心等,这些都能用身体症状的内容量表来测定。
+          </li>
+          <li>
+            7.恐怖倾向。恐怖和焦虑通常是区别开来使用的。这里所说的是,客观上一点不需要恐惧,主观上也不知道为什么要恐惧,然而却抱有一种恐惧心理,这称为恐惧倾向。例如,只要登上高处就怕得不能站立,无缘无故地恐惧黑暗,晚上开灯睡觉等,都是用来测定这种倾向的。
+          </li>
+          <li>
+            8.冲动倾向。有时无缘无故地想大声哭、大声叫,或者一看到想要的东西,就一定要拿到手,毫无理由地想到远处去,或想死,这些称为冲动倾向。这种想干危险的事或愚蠢的事的观念,是因为内部具有焦虑倾向而产生的。
+          </li>
+        </ul>
+      </div>
+      <div class="fx-row ai-center mt50">
+        <el-divider direction="vertical" class="multiway-title-divider" />
+        <span class="f24 bold f-333">测评结果及辅导建议</span>
+      </div>
+      <div v-for="rule in firedRules" :key="rule.key" class="report-content">
+        <div class="sub-title mt30 mb8">
+          <el-badge is-dot :hidden="!rule.result.type" :type="rule.result.type">
+            {{ rule.title }}
+          </el-badge>
+        </div>
+        <div
+          v-for="(ex,idx) in rule.result.explain"
+          :key="'ex_'+idx"
+          class="mt8"
+          :style="{paddingLeft: ex.indent + 'em'}"
+        >
+          {{ ex.text }}
+        </div>
+        <div
+          v-for="(ad,idx) in rule.result.advice"
+          :key="'ad_'+idx"
+          class="mt8"
+          :style="{paddingLeft: ad.indent + 'em'}"
+        >
+          {{ ad.text }}
+        </div>
+      </div>
+    </index-card>
+  </div>
+</template>
+
+<script>
+import IndexCard from '@/views/login/components/modules/shared/IndexCard.vue'
+import { mapGetters } from 'vuex'
+import { downloadBlobFile } from '@/utils/blob'
+import { exportMentalHealthReport, getMentalHealthReport } from '@/api/webApi/mental-health'
+import MxTransferMixin from '@/components/mx-transfer-mixin'
+
+export default {
+  name: 'MentalHealthReport',
+  components: { IndexCard },
+  mixins: [MxTransferMixin],
+  data() {
+    return {
+      loading: false,
+      report: {
+        study: 2,
+        social: 8,
+        alone: 2,
+        blamed: 6,
+        sensitive: 8,
+        body: 8,
+        fear: 7,
+        implust: 8
+      },
+      rules: Object.freeze([{
+        key: 'study',
+        title: '学习焦虑',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:学习焦虑低,在学习过程中不会受到困扰,能正确的对待考试成绩。',
+          advice: '辅导建议:请保持轻松、良好的心态面对考试。请注意:当本项得分很低,但被试成绩也很低时,请查阅被试在本量表中,第9题的选项:你是否希望考试能顺利通过。   A.是   B.不是  若选B,可能表示被试自暴自弃,或存在掩饰和胡乱答题的可能。此时需建议被试找到生活、学习的目标,找到自己擅长的领域,可给予适当的压力,转换为动力。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:在学习焦虑方面的反应与常人一致,没有特别的不适应。',
+          advice: '辅导建议:保持以良好的心态面对考试,感受到轻微的紧张有利于考试的发挥。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:学习焦虑偏高,对考试有恐惧心理,不能安心的专注于学习,十分在乎考试的分数。因此不能很好的应对学习和考试压力。学生出现这种情况主要是因为目前学校普遍存在应试教育的大背景,学生的考试成绩常被作为评价学生和学校优劣与否的依据。来自社会的升学压力,父母的高期望值,严厉的管教,让学生对自己的学习成绩表现出过度的焦虑。',
+          advice: ['辅导建议:',
+            '(1) 首先分析自己出现学习焦虑的原因,是否与具体的时间、地点或场合有关,自己焦虑时的表现是什么,对自己的焦虑程度有所了解。通过对自己焦虑问题的觉察,能够及时、有意识的告诉自己暂时停下来,理智的分析自己所在的环境和所处的情绪状态。',
+            '(2) 教给被试放松训练的方法。',
+            '(3) 尝试努力让自己放轻松,通过体育运动、与他人讨论自己的焦虑感受,也可学会暂时转移注意力的方法。']
+        }]
+      }, {
+        key: 'social',
+        title: '对人焦虑',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:大方,容易结交朋友。',
+          advice: '辅导建议:被试大方,容易结交朋友,不会过度在意别人的看法,这点很好,值得赞扬。还有,当被试确实做错事时,容易保持良好的心态,这点很好,但是在保持良好心态的同时,需要注意认真反思,减少下次做出同样错误的几率。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:被试具备正常的人际交往能力,但并不十分主动。',
+          advice: '辅导建议:继续保持人际交往的能力。可以在自己感觉安全的时候,或者在讨论自己擅长话题的时候,大胆的在众人面前发言,渐渐培养自信心。另外,可以在意识到自己过分在意别人的看法时,尝试“我行我素”一下,再看看别人的反应如何。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:过分注重自己的形象,害怕与人交往,退缩。对人焦虑通常表现为过度关注自我,一切以自我为中心,怕见生人,在众人面前感到不安,不会与人交往,难以与同学、伙伴合作。独生子女,享受父母的娇惯和迁就,养成较强的自我中心意识,在人际交往方面的能力较弱,易产生对人焦虑的倾向;有的学生从小受到父母的严厉管教,形成了看大人脸色行事的软弱性格,这也是造成学生对人焦虑的另一原因。',
+          advice: ['辅导建议:',
+            '(1)首先希望受测者能够敞开心扉,和希望交往的朋友坦然而真诚的交流,不需要过于担心别人可能对自己做出的评价,完全可以自然、大方的呈现出自己的特点。',
+            '(2)其次要相信自己的交往能力,相信自己可以和他人相处融洽。自信是交往开始的基础。有的时候,不是自己没有吸引对方的能力,而是在交往之前,就打了退堂鼓,没有勇气和人交往。那么现在,不要怀疑自己的能力,至少在与人交流之前,不要左思右想,而是怀着自信,勇敢而友善的同他人打交道,朋友们会越来越多的。不要因为不自信,放弃了与人交流的机会。',
+            '(3)应当尝试多学习一些人际交往的技巧,提高自己人际交往的能力。通过观察你身边社交能力强的同伴的做法,比如如何找到双方均感兴趣的话题、如何倾听等等,必定有助于进一步改善受测者的社交状况,降低对人焦虑。']
+        }]
+      }, {
+        key: 'alone',
+        title: '孤独倾向',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:爱好社交,喜欢寻求刺激,喜欢与他人在一起。',
+          advice: '辅导建议:被试爱好社交,喜欢寻求刺激,喜欢与他人在一起。这点很好,值得赞扬。需要注意的是,提高选择良师益友的甄别能力。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:能与他人保持正常的交往。',
+          advice: '辅导建议:能正常交往,继续保持。在舒服的环境下,或者做在自己较擅长的事情时,可以再更主动一些。表现自己,适当增加一些和陌生人的交流。寻找一两个知心朋友,长期稳定的交往。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:孤独倾向偏高,孤独、抑郁、不善于与人交往、自我封闭,喜欢独来独往。孤独倾向主要是与对周围环境的熟悉与认同,自身的适应性强否有关。',
+          advice: '辅导建议:人具有社会属性,人的正常发展离不开周围的环境,如果过于离群或是持续保持孤独状态,必然会受到周围人的排斥,进而影响到正常的个性发展。受测者可以分析一下自己喜欢孤独的原因。孤独给自己带来的好处和坏处有哪些?自己孤独时的情绪感受是什么?如果是因为不能适应环境,不能被他人接纳,而自己还是希望与人交往,那就最好接受心理老师或专家的指导,及时改善这种情况。如果不是,可以具体分析自己孤独的原因,在适当的范围做些调整,使自己能与他人保持正常的交往。'
+        }]
+      }, {
+        key: 'blamed',
+        title: '自责倾向',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:自信,能正确看待失败。',
+          advice: '辅导建议:被试自信,能正确看待成功与失败,这点非常值得赞扬。此外,过分的自信会变成自大,需要了解自己擅长的领域在哪里,能力高低。还有,被试可能属于外归因者,这样的情况同样需要自省,如果确实是自己的问题,可以及时修正,以免一直认为失败是外界原因。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:在面对挫折和困难时,与常人表现一致,没有明显个体差异。',
+          advice: '辅导建议:被试基本能正确面对挫折和困难,这点非常值得赞扬。被试可以适当的进行耐挫力训练,提高耐挫力和自信。此外,当出现失败的事情时,需要及时自省,以积极的态度面对失败和问题,客观分析原因,并将可控的因素做到最好。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:自卑,常怀疑自己的能力,常将失败归咎于自己。常常会陷入强烈自责不良情绪中,从而无法将精力完全投入到学习和娱乐中去。自责倾向的根源来自于对失去别人关爱的不安。独生子女对别人的关爱有着过强的渴求,存在很强的依赖心理,容易形成自责倾向,如果教师、家长对儿童过分严厉,而学生又不能处处满足他们的要求,自责倾向就更容易出现了。',
+          advice: ['辅导建议:',
+            '(1) 遇到问题首先自省,这是很多人做不到的,这样的习惯应该说是挺好的。但,如果习惯性把所有的事情都归咎为自己的错误就会有很大的问题。长此以往对身心健康非常不利。一个人做事情不可能一直犯错,不可能做所有事情都是自己的错误。要学会对失败和挫折进行正确的归因,不要盲目的责怪自己。在任何事情的成败当中都有内部自身和外部环境两个方面的因素,自身的因素中还存在努力和能力两个方面。因此要学会全面的分析和理解失败、挫折产生的原因,从而调整自己的下一步行动。如果盲目的将错误的原因归结到个人方面,会极大的影响自己的信心和努力的愿望,有百害而无一益。',
+            '(2)将自己的想法告诉周围熟悉、信赖的人,使自己的一些不合理想法及时得到纠正。如果有条件,建议被试做有针对性、系统的心理辅导、心理咨询。',
+            '(3) 此外,学会放松,合理宣泄自己的不良情绪,让自己保持愉快的心境。通过体育锻炼、听音乐,让自己的身心得到放松,出门旅游,使自己心情舒畅。']
+        }]
+      }, {
+        key: 'sensitive',
+        title: '过敏倾向',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:敏感性较低,能较好的处理日常事务。',
+          advice: '辅导建议:建议被试继续保持良好的心态,积极面对生活。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:属于中等水平,对日常事务一般不会过于敏感。',
+          advice: ['辅导建议:',
+            '(1)过于敏感的人,首先需要通过调整自己的心态加以克服,不要妄加推测别人对自己的评价,学会与人为善。',
+            '(2)其次要有适度的期望值,在做每一件事前,不要把目标、期望值定得过高,要把各种不利因素充分考虑进去,留有一定的余地。',
+            '(3)心胸要宽广,遇事应乐观一些,大度一些,不能对任何事情都过于敏感,过分计较。']
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:过于敏感,容易为一些小事而烦恼。表现为爱哭、胆怯、爱担心、小心眼,这样的孩子可能长期处于不安、斥责的氛围中。有些父母对子女物质上处处满足,但是精神上对子女期望过高,鼓励不多,多是批评,这往往给孩子形成一定的压力,造成敏感焦虑。',
+          advice: ['辅导建议:',
+            '(1)过于敏感的人,首先需要通过调整自己的心态加以克服,不要妄加推测别人对自己的评价,学会与人为善。',
+            '(2)其次要有适度的期望值,在做每一件事前,不要把目标、期望值定得过高,要把各种不利因素充分考虑进去,留有一定的余地。',
+            '(3)心胸要宽广,遇事应乐观一些,大度一些,不能对任何事情都过于敏感,过分计较。']
+        }]
+      }, {
+        key: 'body',
+        title: '身体症状',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:身体健康,基本没有异常表现。',
+          advice: '辅导建议:在最近的时期内身体状况很好,希望能够继续保持下去、善待自己的身体。由于身心关系密切,因此另一方面也说明受测者的心态积极健康,心绪平稳。因此被测试者也要注意维持自己的心理健康状态。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:身体会有一些小问题,但不影响生活和学习。',
+          advice: ['辅导建议:',
+            '(1)需要定期做全面的身体检查,如果有问题,及时就医。',
+            '(2)经常参加体育锻炼,有个好身体才是一切的基础。',
+            '(3)保持良好的心情和心态,乐观的态度面对生活,心理健康,身体才会更健康。']
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:在极度焦虑时,会出现呕吐失眠、头晕头痛等明显的身体症状。身体症状的原因大多是经常受父母打骂训斥、青春期发育及生理缺陷、情绪不稳、意志不坚,父母关心少、管束多。',
+          advice: ['辅导建议:',
+            '(1)需要及时就诊,做全面的身体检查,找出到底是身体方面的原因还是心理问题导致的身体症状,对症就医。',
+            '(2)如果是心理方面的问题,要找出症状的根源,并及时解决。有些受测者性格较内向,不太善于表达自己的想法和感受,或是害怕表露自己会让家长不开心,因此家长要创造轻松、温馨的家庭环境,让孩子能够说出自己的感受,而不是通过身体症状表现自己的问题。']
+        }]
+      }, {
+        key: 'fear',
+        title: '恐怖倾向',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:恐怖倾向较弱,处于这一水平的受测者胆量偏大,基本不会对日常生活当中的情景,如黑暗、高地、独自睡觉或者某种特殊事物等感到紧张害怕。被测试者的心理安全感较高,不容易产生恐怖感,情绪平稳。',
+          advice: '辅导建议:继续保持。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:并非对任何事情都无所畏惧,但这不影响学习和生活。',
+          advice: '辅导建议:针对个别感到恐惧的场景,分析原因,树立正确的心态,找出应对态度和方法。其他方面继续保持。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:具有一定的恐怖倾向,对某些日常事物,如黑暗、旷野、坟场等有较严重的恐怖感。被测试者的心理安全感较低,容易产生恐怖感。',
+          advice: ['辅导建议:',
+            '(1)应减少对孩子的过分保护,要有意识地训练孩子独立生活的能力;对于孩子缺乏经历而产生的恐怖倾向,要鼓励孩子去大胆尝试,多参加集体活动,要不断拓展生活的空间,对于孩子勇敢的行为要给予充分的表扬与肯定;',
+            '(2)对于因过去创伤经历所导致的恐怖的倾向,要进行心理分析,帮助孩子找到第一次恐怖的经历与事件,然后进行再分析、确立正确的应对态度与策略。鼓励孩子从创伤中走出来,并勇敢地面对以前所恐怖的对象,超越自我、战胜自我。',
+            '(3)对于因缺少关爱与自尊而导致的恐怖倾向的孩子,要给予足够的关爱与尊重。要多询问了解他们的需要,对于他们的优点要给予充分的表扬与肯定。',
+            '(4)若被试有恐惧难以消除,并且感到痛苦焦虑,可以尝试系统脱敏疗法。']
+        }]
+      }, {
+        key: 'implust',
+        title: '冲动倾向',
+        results: [{
+          matcher: score => score <= 3,
+          className: 'bg-success f-success',
+          type: 'success',
+          explain: '结果解释:冲动倾向较低,说明有很好的自制力,凡事三思而后行。',
+          advice: '辅导建议:处于这一水平的受测者基本没有冲动性行为,做事沉稳,精确性高,总是把问题考虑周全以后再做反应,看中解决问题的质量,而不是仅仅追求速度。在情绪方面控制得比较好,善于合理解决自己的不良情绪,因此较少被不良情绪困扰。保持并进一步完善良好的自我评价,定立明确可行的、具体的学习与交往的目标。'
+        }, {
+          matcher: score => score > 3 && score < 8,
+          explain: '结果解释:冲动倾向属于中等水平,自制力不强。情绪易摇摆不定,对问题的预见和解决问题的能力一般,缺乏对待挫折的耐受力。',
+          advice: '辅导建议:受测者在长期内的表现还有待提高,在遇到了较大困难和挫折的时候,应善于在实际行动中抑制冲动行为,提高自律能力。'
+        }, {
+          matcher: score => score >= 8,
+          className: 'bg-red f-red',
+          type: 'danger',
+          explain: '结果解释:冲动倾向较高,情绪易摇摆不定,起伏大,易激惹和焦虑。缺乏对挫折的耐受力,遇到挫折时,难以控制愤怒的情绪,缺乏对问题的预见能力以及解决问题的能力,易大发脾气或爆发攻击性行为。甚至可能有自杀自残的想法,需要重点关注!',
+          advice: ['辅导建议:',
+            '本因子项的结果非常重要,若被试本项分数很高,说明问题是比较严重的。建议先了解被试哪些题目的选项是阳性的(选“是”的)。若被试有伤害自己或他人的倾向,需引起重视并及时心理干预,如85、89、91、97题。',
+            '若被试是其他因素自制力较差,则:',
+            '(1)设定清楚的界限:让孩子明确地知道什么样的行为是被允许的,什么样的行为是不被允许的,出现冲动性行为将会受到什么样的惩罚。在设定清楚的界限后,老师和家长要做到“言必行,行必果”,在任何时候都要传递正确的教育信息,绝不姑息“不良行为”的发生,对待良好的行为,要给予充分的肯定与表扬。',
+            '(2)指导孩子与人交往的方法:要指导孩子与人交往的策略,比如,指导孩子如何赞美他人,如何处理与他人的不同意见,如何有礼貌地忍让,如何与他人合作,如何才能赢得他人的帮助等等。还要帮助孩子掌握克服冲动的方法,树立对待冲动的正确态度.例如,学会转移注意、转换心情、控制感情等;',
+            '(3)帮助孩子建立良好的自我评价:要直率地与孩子交流,给予良好的评价,尤其是要看到他表现好的方面,明确告诉孩子:“你是一个好孩子,只要你改变一些不当的行为,你就完全可以成为一个受人欢迎的人。而且,只要你愿意,你就能够做得到”。同时,还要帮助孩子订立明确可行的、具体的学习与交往目标。']
+        }]
+      }])
+    }
+  },
+  computed: {
+    ...mapGetters(['nickName']),
+    queryParams() {
+      return this.prevData
+    },
+    firedRules() {
+      const formatValue = val => {
+        if (typeof val === 'string') return { text: val, indent: 0 }
+        if (Array.isArray(val)) return val.map(formatValue)
+        return val
+      }
+      const formatResult = (result) => {
+        const r = { ...result } // create a new result
+        r.explain = formatValue(result.explain)
+        r.advice = formatValue(result.advice)
+        if (!Array.isArray(r.explain)) r.explain = [r.explain]
+        if (!Array.isArray(r.advice)) r.advice = [r.advice]
+        return r
+      }
+      return this.rules.map(rule => ({
+        ...rule,
+        result: formatResult(rule.results.find(r => r.matcher(this.report[rule.key])))
+      }))
+    }
+  },
+  async mounted() {
+    await this.getReport()
+  },
+  methods: {
+    async handleDownload() {
+      if (!this.queryParams.examineeId) return
+      this.loading = true
+      try {
+        const res = await exportMentalHealthReport(this.queryParams)
+        const fileName = `${this.nickName}心理健康诊断报告`
+        downloadBlobFile(res, fileName)
+      } finally {
+        this.loading = false
+      }
+    },
+    async getReport() {
+      if (!this.queryParams.examineeId) return
+      this.loading = true
+      try {
+        const res = await getMentalHealthReport(this.queryParams)
+        this.report = res.data
+      } finally {
+        this.loading = false
+      }
+    }
+  }
+}
+</script>
+<style lang="scss">
+.sub-title {
+  .el-badge__content.is-dot {
+    width: 12px;
+    height: 12px;
+  }
+  .el-badge__content.is-fixed {
+    top: 5px;
+  }
+}
+</style>
+<style lang="scss" scoped>
+.multiway-title-divider {
+  width: 6px;
+  background-color: var(--themeColor);
+}
+
+.report-content {
+  line-height: 24px;
+}
+
+.report-list {
+  list-style: none;
+  line-height: 24px;
+
+  li + li {
+    margin-top: 10px;
+  }
+}
+
+.sub-title {
+  font-size: 18px;
+  font-weight: bold;
+}
+
+/* 短横线 BEGIN */
+.sub-title {
+  position: relative;
+  display: inline-block;
+}
+
+.sub-title::after {
+  content: '';
+  position: absolute;
+  bottom: -5px; /* 调整横线位置 */
+  left: 0;
+  width: 30%;
+  height: 4px; /* 横线高度 */
+  background-color: var(--themeColor); /* 横线颜色 */
+}
+
+/* 短横线 END */
+
+.sub-title .dot {
+  width: 10px;
+  height: 10px;
+  border-radius: 5px;
+}
+
+.indent2 {
+  text-indent: 40px; /* the same as ul */
+}
+</style>

+ 6 - 1
src/views/elective/test/components/test-entry.vue

@@ -40,6 +40,7 @@ import config from '@/common/mx-config'
 import consts from '@/common/mx-const'
 import TestReport from '@/views/elective/test/components/test-report'
 import TestHistory from '@/views/elective/test/components/test-history'
+import MxConst from "@/common/mx-const";
 
 export default {
   components: { TestHistory, TestReport },
@@ -98,7 +99,11 @@ export default {
       }
     },
     goPaper() {
-      const nextData = { testType: this.testType, category: this.testTypeKey }
+      const nextData = {
+        testType: this.testType,
+        category: this.testTypeKey,
+        examineeType: MxConst.enum.paper.examineeType.elective
+      }
       this.transferTo('/elective/test/elective-paper', nextData)
     }
   }

+ 11 - 0
src/views/elective/test/elective-paper.vue

@@ -10,6 +10,7 @@ import MxPaper from '@/components/MxPaper/mx-paper'
 import transferMixin from '@/components/mx-transfer-mixin'
 import paperMixin from '@/components/MxPaper/mx-paper-mixin'
 import EventBus from '@/components/EventBus'
+import {openExamineePaper, scoreExamineeQuestion} from "@/api/webApi/studentEvaluating";
 
 export default {
   mixins: [transferMixin, paperMixin],
@@ -24,6 +25,16 @@ export default {
       }
     }
   },
+  computed: {
+    queryApi() {
+      // always use openExamineePaper api.
+      return openExamineePaper
+    },
+    scoreApi() {
+      // always use scoreExamineeQuestion api.
+      return scoreExamineeQuestion
+    }
+  },
   mounted() {
     EventBus.instance.$on('customScoredAction', () => this.innerLoadPaper())
     EventBus.instance.$on('customCommittedAction', () => this.innerLoadPaper())