From 7f4105bc2f1d4f8562e1cb9776ce49f8be0c98d2 Mon Sep 17 00:00:00 2001
From: yj <2077506045@qq.com>
Date: 星期二, 03 十二月 2024 13:46:37 +0800
Subject: [PATCH] 更新CAQ优化,适配低分辨率设备

---
 src/views/exam/components/QuestionIntelligenceEdit.vue |    2 
 src/views/exam/paper/intelligence.vue                  |  170 +++++++++++++++++++++++++++++++++++++++++++++++---------
 src/views/exam/paper/personality.vue                   |    4 +
 3 files changed, 145 insertions(+), 31 deletions(-)

diff --git a/src/views/exam/components/QuestionIntelligenceEdit.vue b/src/views/exam/components/QuestionIntelligenceEdit.vue
index b981160..bfd84f4 100644
--- a/src/views/exam/components/QuestionIntelligenceEdit.vue
+++ b/src/views/exam/components/QuestionIntelligenceEdit.vue
@@ -1,5 +1,5 @@
 <template>
-  <div style="line-height:1.8" :class="question.template==='intelligence_title'?'fixed-div':''">
+  <div style="line-height:1.8">
     <div v-if="qType==1" v-loading="qLoading">
       <div class="q-title" v-if="question.template==='intelligence_title'" @click="showPopup(qLabel+'&nbsp;&nbsp;'+question.title)" v-html="qLabel+'&nbsp;&nbsp;'+question.title" style="font-size: x-large"/>
       <div class="q-title" v-else v-html="qLabel+'&nbsp;&nbsp;'+question.title" style="font-size: x-large"/>
diff --git a/src/views/exam/paper/intelligence.vue b/src/views/exam/paper/intelligence.vue
index 688a1d6..feaa445 100644
--- a/src/views/exam/paper/intelligence.vue
+++ b/src/views/exam/paper/intelligence.vue
@@ -12,10 +12,18 @@
         <el-form :model="form" ref="form" v-loading="formLoading" label-width="100%" v-else>
           <el-row :key="index"  v-for="(titleItem,index) in titleItems" ref="titleItem">
             <div class="q-content">{{titleItem.description}}</div>
-            <el-card class="exampaper-item-box" style="border:2px solid #2b90ff;" :body-style="{padding: '0px 20px 20px 20px' }">
+            <el-card class="exampaper-item-box" style="border:2px solid #2b90ff;" :body-style="{padding: '0px 20px 20px 20px'}">
               <div class="align-center" style="padding-top:20px;height:50px;position: sticky;top: 0px; z-index: 1; background-color: white;"><span style="font-size: small; float: left">{{$t('examinee')}}{{memberName}}</span><span style="margin-top: 0px;padding-right: 11%">鈼弡{form.name}}鈼�</span><span style="font-size: small; float: right">{{$t('partRemailTime')}}{{formatSecondsG(remainTime,$t('hour'),$t('min'),$t('second'))}}</span></div>
               <hr style="margin:0px;border : 1px dashed #b3d8ff;position: sticky;top: 50px; z-index: 1; background-color: white;" />
-              <el-form-item :class="(questionItem.questionType==1 && questionItem.template==='intelligence_title')?'fixed-div':''"  :key="index" label-width="1px" v-for="(questionItem, index) in questionItems">
+              <div class="question-title-down-box">
+                
+                <div class="question-title-down">
+                </div>
+                <div class="question-title-down-btn" @click="handleClickDownBtn">
+                  <i class="el-icon-d-caret"></i>
+                </div>
+              </div>
+              <el-form-item :class="questionItem.questionType==1 && questionItem.template=='intelligence_title'?'question-title-box':''" :key="index" label-width="1px" v-for="(questionItem, index) in questionItems">
                 <QuestionIntelligenceEdit @callNextSubject="onChoice" :qType="questionItem.questionType" :question="questionItem"
                               :answer="answer.answerItems[questionItem.itemOrder-1]" :qLabel="questionItem.questionNumber" :order = "questionItem.itemOrder-1" :displayVal="displayVal"/>
               </el-form-item>
@@ -98,11 +106,14 @@
       isSubmiting: false,
       displayVal: 'block',
       isSubmitClick: false,
-      timeoutValue: 6
+      timeoutValue: 6,
+      downBtnFlag: false,
+      downBtnFlagInit: true
     }
   },
   created: function () {
     let _this = this
+
     window.addEventListener('beforeunload', e => this.beforeunloadFn(e))
     _this.ismobile = /ipad|iphone|midp|rv:1.2.3.4|ucweb|android|windows ce|windows mobile/.test(navigator.userAgent.toLowerCase())
     // 澶氳瑷�
@@ -180,14 +191,34 @@
     }
   },
   updated () {
-    // const elements = document.querySelectorAll('.exampaper-item-box')
-    // if (elements) {
-    //   elements.forEach(element => {
-    //     if (element) {
-    //       element.addEventListener('scroll', this.handleCardScroll, true)
+    // let questionTitleDownBtnBottom = document.querySelectorAll('.question-title-down-btn')[0]
+    // if (questionTitleDownBtnBottom) {
+    //   questionTitleDownBtnBottom.addEventListener('click', () => {
+    //     console.log('click')
+    //     let questionTitleBox = document.querySelectorAll('.question-title-box')[0]
+    //     let questionTitleDown = document.querySelectorAll('.question-title-down')[0]
+    //     let questionTitleDownBtn = document.querySelectorAll('.question-title-down-btn i')[0]
+    //     questionTitleDown.innerHTML = ''
+    //     if (questionTitleDownBtn.classList.contains('el-icon-caret-bottom')) {
+    //       document.querySelectorAll('.question-title-down-btn i')[0].classList.remove('el-icon-caret-bottom')
+    //       document.querySelectorAll('.question-title-down-btn i')[0].classList.add('el-icon-caret-top')
+    //       let questionTitleBoxClone = questionTitleBox.cloneNode(true)
+    //       questionTitleDown.appendChild(questionTitleBoxClone)
+    //     } else {
+    //       document.querySelectorAll('.question-title-down-btn i')[0].classList.remove('el-icon-caret-top')
+    //       document.querySelectorAll('.question-title-down-btn i')[0].classList.add('el-icon-caret-bottom')
     //     }
     //   })
     // }
+
+    let elements = document.querySelectorAll('.exampaper-item-box')
+    if (elements) {
+      elements.forEach(element => {
+        if (element) {
+          element.addEventListener('scroll', this.handleCardScroll, true)
+        }
+      })
+    }
   },
   beforeDestroy () {
     window.clearInterval(this.timer)
@@ -197,24 +228,41 @@
   },
   methods: {
     handleCardScroll (e) {
-      const scrollTop = e.target.scrollTop;
-      const elements = e.target.querySelectorAll('.q-title p img')
-      if (scrollTop > 200) {
-        elements.forEach(element => {
-          element.style.transition = 'width 0.5s ease-in-out'
-          element.style.width = '30%'
-        })
+      let scrollTop = e.target.scrollTop;
+      let questionTitleBox = e.target.querySelectorAll('.question-title-box')[0]
+      let questionTitleDown = document.querySelectorAll('.question-title-down')[0]
+      let questionTitleDownBox = document.querySelectorAll('.question-title-down-box')[0]
+      if (scrollTop >= questionTitleBox.offsetHeight) {
+        questionTitleDownBox.classList.add('show')
+        document.querySelectorAll('.question-title-down-btn')[0].classList.add('show')
+        if (this.downBtnFlagInit) {
+          this.handleClickDownBtn()
+          this.downBtnFlagInit = false
+        }
+      } else if (scrollTop < questionTitleBox.offsetHeight) {
+        questionTitleDown.innerHTML = ''
+        questionTitleDownBox.classList.remove('show')
+        document.querySelectorAll('.question-title-down-btn')[0].classList.remove('show')
+        this.downBtnFlag = false
       }
-      if (scrollTop === 0) {
-        elements.forEach(element => {
-          if (elements.length > 1) {
-            element.style.transition = 'width 0.5s ease-in-out'
-            element.style.width = '50%'
-          } else {
-            element.style.transition = 'width 0.5s ease-in-out'
-            element.style.width = '50%'
-          }
+    },
+
+    handleClickDownBtn () {
+      let questionTitleBox = document.querySelectorAll('.question-title-box')[0]
+      let questionTitleDown = document.querySelectorAll('.question-title-down')[0]
+      questionTitleDown.innerHTML = ''
+      console.log(this.downBtnFlag)
+      if (!this.downBtnFlag) {
+        this.downBtnFlag = true
+        let questionTitleBoxClone = questionTitleBox.cloneNode(true)
+        let cloneImgs = questionTitleBoxClone.querySelectorAll('.q-title>p>img')
+        console.log(cloneImgs)
+        cloneImgs.forEach(item => {
+          item.style.width = '35%'
         })
+        questionTitleDown.appendChild(questionTitleBoxClone)
+      } else {
+        this.downBtnFlag = false
       }
     },
     beforeunloadFn (e) {
@@ -579,6 +627,18 @@
       return true
     },
     nextOrder () {
+      // 婊氬姩鍒伴《閮�
+      let elements = document.querySelectorAll('.exampaper-item-box')
+      if (elements) {
+        elements.forEach(element => {
+          if (element) {
+            element.scrollTop = 0
+          }
+        })
+      }
+      this.downBtnFlag = false
+      this.downBtnFlagInit = true
+
       let _this = this
       _this.order++
       // 濡傛灉鏄凡缁忓畬鎴愭湰娈碉紝鎻愪氦灞曠ず鎸囧璇�
@@ -614,6 +674,18 @@
       return answerSubmit
     },
     preSubject () {
+      // 婊氬姩鍒伴《閮�
+      let elements = document.querySelectorAll('.exampaper-item-box')
+      if (elements) {
+        elements.forEach(element => {
+          if (element) {
+            element.scrollTop = 0
+          }
+        })
+      }
+      this.downBtnFlag = false
+      this.downBtnFlagInit = true
+
       let _this = this
       _this.isShowGuide(false)
       if (_this.order <= 0) {
@@ -852,11 +924,51 @@
     height: calc(100vh - 110px); /* 鏍规嵁闇�瑕佽缃洅瀛愮殑鏈�澶ч珮搴� */
   }
 
-  .fixed-div {
+  .question-title-down-box {
     position: sticky;
-    top: 51px; /* 鍥哄畾鍦ㄧ洅瀛愮殑椤堕儴 */
-    background-color: white; /* 鑳屾櫙棰滆壊浠ヨ鐩栨粴鍔ㄥ唴瀹� */
-    z-index: 1; /* 纭繚鏍囬鍦ㄦ粴鍔ㄦ椂楂樹簬鍏朵粬鍐呭 */
-    border-bottom: 1px dotted #ccc;
+    display: none;
+    top: 51px;
+    width: 100%;
+    z-index: 1;
   }
+
+  .question-title-down {
+    background-color: #fff;
+  }
+
+  .question-title-down .question-title-box {
+    margin-bottom: 0px;
+  }
+
+  .question-title-down-btn{
+    display: none;
+    background-color: #409EFF; /* 鑳屾櫙棰滆壊浠ヨ鐩栨粴鍔ㄥ唴瀹� */
+    color: #fff;
+    box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+    justify-content: center;
+    width: 100px;
+    padding: 1px 0px;
+    margin-left: auto;
+    margin-right: auto;
+    border-radius: 0px 0px 5px 5px;
+    cursor: pointer;
+  }
+
+  .question-title-down-btn.top{
+    display: none;
+  }
+
+  .question-title-down-btn.show{
+    display: flex;
+  }
+
+  .question-title-down-box.show{
+    display: block;
+  }
+
+  .question-title-down-box .question-title-down-btn i{
+    font-size: 18px;
+    font-weight: bold;
+  }
+
 </style>
diff --git a/src/views/exam/paper/personality.vue b/src/views/exam/paper/personality.vue
index a2d8e4a..bca5994 100644
--- a/src/views/exam/paper/personality.vue
+++ b/src/views/exam/paper/personality.vue
@@ -512,6 +512,7 @@
           if (_this.form.name.indexOf('LAQ') !== -1) {
             examPaperApi.select(_this.memberToken, _this.langType).then(re => {
               _this.form = re.response
+              this.setFormDo(_this.form)
               _this.$router.push({ path: '/guide/index', query: { formDo: _this.form } })
             }).catch(e => {
               _this.$message.error(_this.$t('noquestionMsg'))
@@ -578,7 +579,8 @@
     },
     ...mapMutations('user', ['setLangType']),
     ...mapMutations('user', ['setLangFlag']),
-    ...mapMutations('user', ['getFormDo'])
+    ...mapMutations('user', ['getFormDo']),
+    ...mapMutations('user', ['setFormDo'])
   },
   computed: {
     ...mapGetters('enumItem', ['enumFormat']),

--
Gitblit v1.9.1