ali 2 лет назад
Родитель
Сommit
fa031ffab9

+ 3 - 0
src/components/Widgets/Test/TestParticipation/TestParticipation.vue

@@ -119,6 +119,9 @@ export default {
       return formattedHours + ':' + formattedMinutes + ':' + formattedSeconds
     }
   },
+  beforeUnmount() {
+    this.$store.commit('Test/updateAnswerBook', null)
+  },
   mounted () {
     // this.getAnswerBook()
     this.getTestQuestions()

+ 8 - 4
src/components/Widgets/Test/TestParticipation/components/SingleQuestion.vue

@@ -13,8 +13,8 @@
           </q-badge>
         </span>
 
-        <span v-if="question?.question_info"
-              v-html="question.question_info.text" />
+        <span v-if="question.text"
+              v-html="question.text" />
       </div>
       <q-separator class="q-my-lg" />
       <q-card-actions class="flex justify-end SingleQuestionForm">
@@ -82,9 +82,13 @@ export default {
     isLastQuestion () {
       return this.answerBook.test_info.test_set_info.test_set_questions.length === this.questionNumber
     },
+    testSetQuestion () {
+      // return this.answerBook.test_info.test_set_info.test_set_questions[this.questionNumber - 1]
+      return this.answerBook.answer_sheet_info.list[this.questionNumber - 1].test_set_question_info
+    },
     question () {
       // return this.answerBook.test_info.test_set_info.test_set_questions[this.questionNumber - 1]
-      return this.answerBook.answer_sheet_info.list[this.questionNumber - 1].test_set_question_info.question_info
+      return this.testSetQuestion.question_info
     }
   },
   mounted () {
@@ -119,7 +123,7 @@ export default {
       FormBuilderAssist.setAttributeByName(this.inputs, 'btnFinal', 'atClick', () => { this.sendAnswer('final') })
       FormBuilderAssist.setAttributeByName(this.inputs, 'btnNext', 'atClick', () => { this.sendAnswer('next') })
       FormBuilderAssist.setAttributeByName(this.inputs, 'btnPrev', 'atClick', () => { this.sendAnswer('prev') })
-      FormBuilderAssist.setAttributeByName(this.inputs, 'test_set_question', 'value', this.question?.id)
+      FormBuilderAssist.setAttributeByName(this.inputs, 'test_set_question', 'value', this.testSetQuestion?.id)
     },
     sendAnswer (actionType) {
       const answerText = FormBuilderAssist.getInputsByName(this.inputs, 'answer_text').value

+ 8 - 5
src/components/Widgets/Test/TestShow/TestShow.vue

@@ -70,7 +70,7 @@
                      :show-reload-button="false"
                      :default-layout="false" />
       </div>
-      <template v-if="$route.query.send_objection && $route.query.send_objection.toString() === '1' && answerBook.is_enabled_objecting">
+      <template v-if="$route.query.send_objection && $route.query.send_objection.toString() === '1' && !answerBook.objection_request && answerBook.is_enabled_objecting">
         <q-separator class="q-my-xl" />
         <q-card-section>
           <entity-edit v-if="mounted"
@@ -95,10 +95,13 @@
         </q-card-section>
       </template>
       <template v-else-if="answerBook.objection_request">
-        <div>
-          متن اعتراض:
-        </div>
-        <div v-html="answerBook.objection_request" />
+        <q-separator class="q-my-lg" />
+        <q-card-section>
+          <div>
+            متن اعتراض:
+          </div>
+          <div v-html="answerBook.objection_request.toString().replace(/(?:\r\n|\r|\n)/g, '<br>')" />
+        </q-card-section>
       </template>
       <template v-if="answerBook.objection_result">
         <div>

+ 66 - 37
src/pages/User/Profile/classroomInfo.vue

@@ -146,43 +146,26 @@
               {{ inputData.rowNumber }}
             </template>
             <template v-else-if="inputData.col.name === 'action'">
-              <q-btn flat
-                     icon="more_vert">
-                <q-menu>
-                  <q-list separator>
-                    <q-item v-if="inputData.props.row.is_enabled_attending"
-                            v-close-popup
-                            :to="{name: 'UserPanel.Test.AnswerBook.Confirmation', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}}"
-                            clickable>
-                      <q-item-section>شرکت در آزمون</q-item-section>
-                    </q-item>
-                    <q-item v-if="inputData.props.row.is_enabled_continuing"
-                            v-close-popup
-                            clickable
-                            :to="{name: 'UserPanel.Test.AnswerBook.Participate.AllQuestions', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}}">
-                      <q-item-section>ادامه آزمون(تمام سوالها)</q-item-section>
-                    </q-item>
-                    <q-item v-if="inputData.props.row.is_enabled_continuing"
-                            v-close-popup
-                            clickable
-                            :to="{name: 'UserPanel.Test.AnswerBook.Participate.SingleQuestion', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id, question_number: 1}}">
-                      <q-item-section>ادامه آزمون(تک سوال)</q-item-section>
-                    </q-item>
-                    <q-item v-if="inputData.props.row.is_enabled_objecting"
-                            v-close-popup
-                            clickable
-                            :to="{name: 'UserPanel.Test.AnswerBook.Show', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}, query: { send_objection: 1}}">
-                      <q-item-section>ثبت اعتراض</q-item-section>
-                    </q-item>
-                    <q-item v-if="inputData.props.row.is_enabled_viewing"
-                            v-close-popup
-                            clickable
-                            :to="{name: 'UserPanel.Test.AnswerBook.Show', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}}">
-                      <q-item-section>مشاهده</q-item-section>
-                    </q-item>
-                  </q-list>
-                </q-menu>
-              </q-btn>
+              <q-btn v-if="inputData.props.row.is_enabled_attending"
+                     size="md"
+                     color="primary"
+                     label="شرکت در آزمون"
+                     :to="{name: 'UserPanel.Test.AnswerBook.Confirmation', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}}" />
+              <q-btn v-if="inputData.props.row.is_enabled_continuing"
+                     size="md"
+                     color="primary"
+                     label="ادامه آزمون"
+                     @click="showParticipateTypeDialog(inputData.props.row.test, inputData.props.row.id)" />
+              <q-btn v-if="inputData.props.row.is_enabled_objecting"
+                     size="md"
+                     color="primary"
+                     label="ثبت اعتراض"
+                     :to="{name: 'UserPanel.Test.AnswerBook.Show', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}, query: { send_objection: 1}}" />
+              <q-btn v-if="inputData.props.row.is_enabled_viewing"
+                     size="md"
+                     color="primary"
+                     label="مشاهده"
+                     :to="{name: 'UserPanel.Test.AnswerBook.Show', params: {test_id: inputData.props.row.test, answer_book_id: inputData.props.row.id}}" />
             </template>
             <template v-else>
               {{ inputData.col.value }}
@@ -207,6 +190,37 @@
         <q-skeleton v-else
                     type="rect"
                     height="200px" />
+        <q-dialog v-model="participateTypeDialog">
+          <q-card>
+            <q-card-actions>
+              نحوه پاسخ به آزمون
+            </q-card-actions>
+            <q-separator />
+            <q-card-actions>
+              <div>
+                اندیشه جوی عزیز لطفا نحوه پاسخ به سوالات آزمون را مشخص کنید
+              </div>
+              <div>
+                <q-radio v-model="participateType"
+                         val="UserPanel.Test.AnswerBook.Participate.AllQuestions"
+                         label="مایلم پاسخ سوالات را به صورت یک فایل جامع بارگزاری کنم" />
+                <q-radio v-model="participateType"
+                         val="UserPanel.Test.AnswerBook.Participate.SingleQuestion"
+                         label="مایلم پاسخ سوالات را به صورت جداگانه ذیل همان سوال وارد کنم" />
+              </div>
+            </q-card-actions>
+            <q-card-actions>
+              <q-btn v-close-popup
+                     outline
+                     label="انصراف از آزمون"
+                     color="red" />
+              <q-btn :disable="!participateType"
+                     label="تایید و شروع آزمون"
+                     color="primary"
+                     @click="startTest" />
+            </q-card-actions>
+          </q-card>
+        </q-dialog>
       </q-tab-panel>
 
       <q-tab-panel name="projects"
@@ -301,6 +315,12 @@ export default {
     // const userId = this.$store.getters['Auth/user'].id
     return {
       mounted: false,
+      selectedTest: {
+        testId: null,
+        answerBookId: null
+      },
+      participateTypeDialog: false,
+      participateType: null,
       tab: 'classroomInfo',
       inputs: [],
       sessionsInputs: [
@@ -685,6 +705,15 @@ export default {
     FormBuilderAssist.setAttributeByName(this.testListInputs, 'owner', 'value', this.user.id)
   },
   methods: {
+    showParticipateTypeDialog (testId, answerBookId) {
+      this.$store.commit('Test/updateAnswerBook', null)
+      this.selectedTest.testId = testId
+      this.selectedTest.answerBookId = answerBookId
+      this.participateTypeDialog = true
+    },
+    startTest () {
+      this.$router.push({ name: this.participateType, params: { test_id: this.selectedTest.testId, answer_book_id: this.selectedTest.answerBookId, question_number: 1 } })
+    },
     getTeamJoinStatusLabel (team) {
       if (team.join_status === 'ENABLED') {
         return 'عضو شوید'