Procházet zdrojové kódy

Merge branch 'production'

ali před 2 roky
rodič
revize
84709c14fe

+ 5 - 0
src/components/Template/SideBard/Main.vue

@@ -78,6 +78,11 @@ export default {
               title: 'کتب جریان‌شناسی',
               title: 'کتب جریان‌شناسی',
               externalLink: 'https://formafzar.com/form/ch1om',
               externalLink: 'https://formafzar.com/form/ch1om',
               show: true
               show: true
+            },
+            {
+              title: 'کتاب تشکیلات بهشتی',
+              externalLink: 'https://formafzar.com/form/j3x1d',
+              show: true
             }
             }
           ],
           ],
           show: false,
           show: false,

+ 1 - 1
src/components/Widgets/Classroom/AdminClassroomShow/components/MembersList.vue

@@ -21,7 +21,7 @@
         {{ inputData.rowNumber }}
         {{ inputData.rowNumber }}
       </template>
       </template>
       <template v-if="inputData.col.name === 'UserRegisterStatus'">
       <template v-if="inputData.col.name === 'UserRegisterStatus'">
-        <q-btn v-if="inputData.col.value === 'DROPPED_FOR_CONDITION'"
+        <q-btn v-if="inputData.props.row.status === 'DROPPED_FOR_CONDITION'"
                color="primary"
                color="primary"
                class="q-mr-md"
                class="q-mr-md"
                :loading="revertDroppedForConditionLoading"
                :loading="revertDroppedForConditionLoading"

+ 47 - 30
src/pages/User/Profile/projectInfo.vue

@@ -8,36 +8,40 @@
       >
       >
     </q-btn>
     </q-btn>
   </div>
   </div>
-  <entity-show v-if="mounted"
-               ref="projectEntityEdit"
-               v-model:value="inputs"
-               title="جزییات پروژه"
-               :api="api"
-               :show-index-button="false"
-               :show-close-button="false"
-               :show-edit-button="false"
-               :show-expand-button="false"
-               :show-save-button="false"
-               :show-reload-button="false"
-               :after-load-input-data="afterLoadProject">
-    <template #after-form-builder>
-      <q-separator class="q-my-lg" />
-      <entity-create v-if="projectLoaded && project.is_enabled_answering"
-                     ref="entityCreate"
-                     v-model:value="attendanceSheetsInputs"
-                     :api="attendanceSheetsApi"
-                     :default-layout="false" />
-      <entity-show v-else-if="projectLoaded"
-                   v-model:value="attendanceSheetsShowInputs"
-                   title="پاسخ کاربر"
-                   :loaded-data="currentUserAttendanceSheet"
-                   :default-layout="false"
-                   :show-expand-button="false"
-                   :show-edit-button="false"
-                   :show-index-button="false"
-                   :show-reload-button="false" />
-    </template>
-  </entity-show>
+  <div>
+    <q-inner-loading :showing="entityLoading"
+                     label="کمی صبر کنید..." />
+    <entity-show v-if="mounted"
+                 ref="projectEntityEdit"
+                 v-model:value="inputs"
+                 title="جزییات پروژه"
+                 :api="api"
+                 :show-index-button="false"
+                 :show-close-button="false"
+                 :show-edit-button="false"
+                 :show-expand-button="false"
+                 :show-save-button="false"
+                 :show-reload-button="false"
+                 :after-load-input-data="afterLoadProject">
+      <template #after-form-builder>
+        <q-separator class="q-my-lg" />
+        <entity-create v-if="projectLoaded && project.is_enabled_answering"
+                       ref="entityCreate"
+                       v-model:value="attendanceSheetsInputs"
+                       :api="attendanceSheetsApi"
+                       :default-layout="false" />
+        <entity-show v-else-if="projectLoaded"
+                     v-model:value="attendanceSheetsShowInputs"
+                     title="پاسخ کاربر"
+                     :loaded-data="currentUserAttendanceSheet"
+                     :default-layout="false"
+                     :show-expand-button="false"
+                     :show-edit-button="false"
+                     :show-index-button="false"
+                     :show-reload-button="false" />
+      </template>
+    </entity-show>
+  </div>
 </template>
 </template>
 
 
 <script>
 <script>
@@ -66,6 +70,7 @@ export default {
     const projectId = parseInt(this.$route.params.project_id)
     const projectId = parseInt(this.$route.params.project_id)
     return {
     return {
       mounted: false,
       mounted: false,
+      entityLoading: false,
       projectLoaded: false,
       projectLoaded: false,
       classroomLoaded: false,
       classroomLoaded: false,
       project: new Project(),
       project: new Project(),
@@ -152,12 +157,24 @@ export default {
   },
   },
   methods: {
   methods: {
     createAttendanceSheet () {
     createAttendanceSheet () {
+      const answerText = FormBuilderAssist.getInputsByName(this.attendanceSheetsInputs, 'answer_text').value
+      if (!answerText) {
+        this.$q.notify({
+          type: 'negative',
+          message: 'متن پاسخ را کامل کنید.',
+          position: 'top'
+        })
+        return
+      }
+      this.entityLoading = true
       this.$refs.entityCreate.createEntity(false)
       this.$refs.entityCreate.createEntity(false)
         .then(() => {
         .then(() => {
+          this.entityLoading = false
           // this.reloadProject()
           // this.reloadProject()
           this.$router.go(-1)
           this.$router.go(-1)
         })
         })
         .catch(() => {
         .catch(() => {
+          this.entityLoading = false
           this.reloadProject()
           this.reloadProject()
         })
         })
     },
     },

+ 118 - 96
src/pages/User/Profile/sessionInfo.vue

@@ -13,115 +13,119 @@
         >
         >
       </q-btn>
       </q-btn>
     </div>
     </div>
-    <entity-show v-if="mounted"
-                 v-model:value="sessionInfoInputs"
-                 title="جزییات جلسه"
-                 :api="api"
-                 :show-expand-button="false"
-                 :show-edit-button="false"
-                 :show-index-button="false"
-                 :show-reload-button="false"
-                 :before-load-input-data="beforeLoadInputData">
-      <template #before-form-builder>
-        <div class="session-title-and-time-row">
-          <div class="item">
-            <div class="icon">
-              <svg xmlns="http://www.w3.org/2000/svg"
-                   width="18.165"
-                   height="19.91"
-                   viewBox="0 0 18.165 19.91">
-                <g id="Document"
-                   transform="translate(0)">
+    <div>
+      <q-inner-loading :showing="entityShowLoading"
+                       label="کمی صبر کنید..." />
+      <entity-show v-if="mounted"
+                   v-model:value="sessionInfoInputs"
+                   title="جزییات جلسه"
+                   :api="api"
+                   :show-expand-button="false"
+                   :show-edit-button="false"
+                   :show-index-button="false"
+                   :show-reload-button="false"
+                   :before-load-input-data="beforeLoadInputData">
+        <template #before-form-builder>
+          <div class="session-title-and-time-row">
+            <div class="item">
+              <div class="icon">
+                <svg xmlns="http://www.w3.org/2000/svg"
+                     width="18.165"
+                     height="19.91"
+                     viewBox="0 0 18.165 19.91">
+                  <g id="Document"
+                     transform="translate(0)">
+                    <path id="Combined_Shape"
+                          data-name="Combined Shape"
+                          d="M0,14.553v-9.2A4.973,4.973,0,0,1,5.215,0l7.693,0a5.025,5.025,0,0,1,5.257,5.357v9.2a4.973,4.973,0,0,1-5.215,5.354l-7.693,0A5.025,5.025,0,0,1,0,14.553ZM5.22,1.5A3.494,3.494,0,0,0,1.5,5.357v9.2A3.5,3.5,0,0,0,5.256,18.41l7.689,0a3.494,3.494,0,0,0,3.721-3.854v-9.2A3.5,3.5,0,0,0,12.909,1.5ZM5.5,14.973a.75.75,0,1,1,0-1.5h7.22a.75.75,0,1,1,0,1.5Zm0-4.186a.75.75,0,1,1,0-1.5h7.22a.75.75,0,0,1,0,1.5Zm0-4.177a.75.75,0,0,1,0-1.5H8.251a.75.75,0,0,1,0,1.5Z"
+                          transform="translate(0 0)"
+                          fill="#aaa095" />
+                  </g>
+                </svg>
+              </div>
+              <div class="title">
+                {{ title }}
+              </div>
+            </div>
+            <div class="item">
+              <div class="icon">
+                <svg id="Calendar"
+                     xmlns="http://www.w3.org/2000/svg"
+                     width="19.5"
+                     height="21.5"
+                     viewBox="0 0 19.5 21.5">
                   <path id="Combined_Shape"
                   <path id="Combined_Shape"
                         data-name="Combined Shape"
                         data-name="Combined Shape"
-                        d="M0,14.553v-9.2A4.973,4.973,0,0,1,5.215,0l7.693,0a5.025,5.025,0,0,1,5.257,5.357v9.2a4.973,4.973,0,0,1-5.215,5.354l-7.693,0A5.025,5.025,0,0,1,0,14.553ZM5.22,1.5A3.494,3.494,0,0,0,1.5,5.357v9.2A3.5,3.5,0,0,0,5.256,18.41l7.689,0a3.494,3.494,0,0,0,3.721-3.854v-9.2A3.5,3.5,0,0,0,12.909,1.5ZM5.5,14.973a.75.75,0,1,1,0-1.5h7.22a.75.75,0,1,1,0,1.5Zm0-4.186a.75.75,0,1,1,0-1.5h7.22a.75.75,0,0,1,0,1.5Zm0-4.177a.75.75,0,0,1,0-1.5H8.251a.75.75,0,0,1,0,1.5Z"
+                        d="M5.521,21.5C2.115,21.5,0,19.4,0,16.023V6.973A5,5,0,0,1,4.965,1.6V.75a.75.75,0,0,1,1.5,0v.83h6.578V.75a.75.75,0,0,1,1.5,0V1.6a5.382,5.382,0,0,1,3.532,1.46A5.379,5.379,0,0,1,19.5,6.976V16.1c0,3.332-2.116,5.4-5.522,5.4ZM1.5,16.023C1.5,18.588,2.928,20,5.521,20h8.458C16.572,20,18,18.615,18,16.1V8.9H1.5ZM18,7.4V6.973a3.862,3.862,0,0,0-.987-2.855A3.867,3.867,0,0,0,14.543,3.1v.938a.75.75,0,1,1-1.5,0V3.08H6.466v.961a.75.75,0,0,1-1.5,0V3.1A3.486,3.486,0,0,0,1.5,6.973V7.4Zm-4.553,8.542a.746.746,0,0,1,.745-.75H14.2a.75.75,0,1,1-.754.75Zm-4.437,0a.746.746,0,0,1,.745-.75h.009a.75.75,0,1,1-.754.75Zm-4.448,0a.747.747,0,0,1,.746-.75h.009a.75.75,0,1,1-.755.75Zm8.885-3.886a.747.747,0,0,1,.745-.751H14.2a.75.75,0,1,1-.754.751Zm-4.437,0a.747.747,0,0,1,.745-.751h.009a.75.75,0,1,1-.754.751Zm-4.448,0a.747.747,0,0,1,.746-.751h.009a.75.75,0,1,1-.755.751Z"
                         transform="translate(0 0)"
                         transform="translate(0 0)"
                         fill="#aaa095" />
                         fill="#aaa095" />
-                </g>
-              </svg>
-            </div>
-            <div class="title">
-              {{ title }}
-            </div>
-          </div>
-          <div class="item">
-            <div class="icon">
-              <svg id="Calendar"
-                   xmlns="http://www.w3.org/2000/svg"
-                   width="19.5"
-                   height="21.5"
-                   viewBox="0 0 19.5 21.5">
-                <path id="Combined_Shape"
-                      data-name="Combined Shape"
-                      d="M5.521,21.5C2.115,21.5,0,19.4,0,16.023V6.973A5,5,0,0,1,4.965,1.6V.75a.75.75,0,0,1,1.5,0v.83h6.578V.75a.75.75,0,0,1,1.5,0V1.6a5.382,5.382,0,0,1,3.532,1.46A5.379,5.379,0,0,1,19.5,6.976V16.1c0,3.332-2.116,5.4-5.522,5.4ZM1.5,16.023C1.5,18.588,2.928,20,5.521,20h8.458C16.572,20,18,18.615,18,16.1V8.9H1.5ZM18,7.4V6.973a3.862,3.862,0,0,0-.987-2.855A3.867,3.867,0,0,0,14.543,3.1v.938a.75.75,0,1,1-1.5,0V3.08H6.466v.961a.75.75,0,0,1-1.5,0V3.1A3.486,3.486,0,0,0,1.5,6.973V7.4Zm-4.553,8.542a.746.746,0,0,1,.745-.75H14.2a.75.75,0,1,1-.754.75Zm-4.437,0a.746.746,0,0,1,.745-.75h.009a.75.75,0,1,1-.754.75Zm-4.448,0a.747.747,0,0,1,.746-.75h.009a.75.75,0,1,1-.755.75Zm8.885-3.886a.747.747,0,0,1,.745-.751H14.2a.75.75,0,1,1-.754.751Zm-4.437,0a.747.747,0,0,1,.745-.751h.009a.75.75,0,1,1-.754.751Zm-4.448,0a.747.747,0,0,1,.746-.751h.009a.75.75,0,1,1-.755.751Z"
-                      transform="translate(0 0)"
-                      fill="#aaa095" />
-              </svg>
-            </div>
-            <div class="title">
-              شروع:
-              {{ startingTime }}
+                </svg>
+              </div>
+              <div class="title">
+                شروع:
+                {{ startingTime }}
+              </div>
             </div>
             </div>
-          </div>
-          <div class="item">
-            <div class="icon">
-              <svg id="Calendar"
-                   xmlns="http://www.w3.org/2000/svg"
-                   width="19.5"
-                   height="21.5"
-                   viewBox="0 0 19.5 21.5">
-                <path id="Combined_Shape"
-                      data-name="Combined Shape"
-                      d="M5.521,21.5C2.115,21.5,0,19.4,0,16.023V6.973A5,5,0,0,1,4.965,1.6V.75a.75.75,0,0,1,1.5,0v.83h6.578V.75a.75.75,0,0,1,1.5,0V1.6a5.382,5.382,0,0,1,3.532,1.46A5.379,5.379,0,0,1,19.5,6.976V16.1c0,3.332-2.116,5.4-5.522,5.4ZM1.5,16.023C1.5,18.588,2.928,20,5.521,20h8.458C16.572,20,18,18.615,18,16.1V8.9H1.5ZM18,7.4V6.973a3.862,3.862,0,0,0-.987-2.855A3.867,3.867,0,0,0,14.543,3.1v.938a.75.75,0,1,1-1.5,0V3.08H6.466v.961a.75.75,0,0,1-1.5,0V3.1A3.486,3.486,0,0,0,1.5,6.973V7.4Zm-4.553,8.542a.746.746,0,0,1,.745-.75H14.2a.75.75,0,1,1-.754.75Zm-4.437,0a.746.746,0,0,1,.745-.75h.009a.75.75,0,1,1-.754.75Zm-4.448,0a.747.747,0,0,1,.746-.75h.009a.75.75,0,1,1-.755.75Zm8.885-3.886a.747.747,0,0,1,.745-.751H14.2a.75.75,0,1,1-.754.751Zm-4.437,0a.747.747,0,0,1,.745-.751h.009a.75.75,0,1,1-.754.751Zm-4.448,0a.747.747,0,0,1,.746-.751h.009a.75.75,0,1,1-.755.751Z"
-                      transform="translate(0 0)"
-                      fill="#aaa095" />
-              </svg>
-            </div>
-            <div class="title">
-              پایان:
-              {{ endingTime }}
+            <div class="item">
+              <div class="icon">
+                <svg id="Calendar"
+                     xmlns="http://www.w3.org/2000/svg"
+                     width="19.5"
+                     height="21.5"
+                     viewBox="0 0 19.5 21.5">
+                  <path id="Combined_Shape"
+                        data-name="Combined Shape"
+                        d="M5.521,21.5C2.115,21.5,0,19.4,0,16.023V6.973A5,5,0,0,1,4.965,1.6V.75a.75.75,0,0,1,1.5,0v.83h6.578V.75a.75.75,0,0,1,1.5,0V1.6a5.382,5.382,0,0,1,3.532,1.46A5.379,5.379,0,0,1,19.5,6.976V16.1c0,3.332-2.116,5.4-5.522,5.4ZM1.5,16.023C1.5,18.588,2.928,20,5.521,20h8.458C16.572,20,18,18.615,18,16.1V8.9H1.5ZM18,7.4V6.973a3.862,3.862,0,0,0-.987-2.855A3.867,3.867,0,0,0,14.543,3.1v.938a.75.75,0,1,1-1.5,0V3.08H6.466v.961a.75.75,0,0,1-1.5,0V3.1A3.486,3.486,0,0,0,1.5,6.973V7.4Zm-4.553,8.542a.746.746,0,0,1,.745-.75H14.2a.75.75,0,1,1-.754.75Zm-4.437,0a.746.746,0,0,1,.745-.75h.009a.75.75,0,1,1-.754.75Zm-4.448,0a.747.747,0,0,1,.746-.75h.009a.75.75,0,1,1-.755.75Zm8.885-3.886a.747.747,0,0,1,.745-.751H14.2a.75.75,0,1,1-.754.751Zm-4.437,0a.747.747,0,0,1,.745-.751h.009a.75.75,0,1,1-.754.751Zm-4.448,0a.747.747,0,0,1,.746-.751h.009a.75.75,0,1,1-.755.751Z"
+                        transform="translate(0 0)"
+                        fill="#aaa095" />
+                </svg>
+              </div>
+              <div class="title">
+                پایان:
+                {{ endingTime }}
+              </div>
             </div>
             </div>
           </div>
           </div>
-        </div>
-      </template>
-      <template #after-form-builder>
-        <q-inner-loading :showing="submitAttendanceStatusLoading || submitAssignmentLoading">
-          <q-spinner-ball color="primary"
-                          size="50px" />
-        </q-inner-loading>
-        <template v-if="session?.is_show_answer_input">
+        </template>
+        <template #after-form-builder>
+          <q-inner-loading :showing="submitAttendanceStatusLoading || submitAssignmentLoading">
+            <q-spinner-ball color="primary"
+                            size="50px" />
+          </q-inner-loading>
+          <template v-if="session?.is_show_answer_input">
+            <q-separator class="q-my-lg" />
+            <entity-create v-if="session?.is_enabled_answering"
+                           ref="entityCreateSubmitAssignment"
+                           v-model:value="submitAssignmentInputs"
+                           :api="submitAssignmentApi"
+                           :default-layout="false"
+                           :show-expand-button="false"
+                           :show-edit-button="false"
+                           :show-index-button="false"
+                           :show-reload-button="false" />
+            <entity-show v-else-if="sessionLoaded"
+                         v-model:value="sessionAssignmentInfoInputs"
+                         title="پاسخ کاربر"
+                         :loaded-data="currentUserAttendanceSheet"
+                         :default-layout="false"
+                         :show-expand-button="false"
+                         :show-edit-button="false"
+                         :show-index-button="false"
+                         :show-reload-button="false" />
+          </template>
           <q-separator class="q-my-lg" />
           <q-separator class="q-my-lg" />
-          <entity-create v-if="session?.is_enabled_answering"
-                         ref="entityCreateSubmitAssignment"
-                         v-model:value="submitAssignmentInputs"
-                         :api="submitAssignmentApi"
+          <entity-create v-if="mounted"
+                         ref="entityCreateSubmitAttendanceStatus"
+                         v-model:value="submitAttendanceStatusInputs"
+                         :api="submitAttendanceStatusApi"
                          :default-layout="false"
                          :default-layout="false"
                          :show-expand-button="false"
                          :show-expand-button="false"
                          :show-edit-button="false"
                          :show-edit-button="false"
                          :show-index-button="false"
                          :show-index-button="false"
                          :show-reload-button="false" />
                          :show-reload-button="false" />
-          <entity-show v-else-if="sessionLoaded"
-                       v-model:value="sessionAssignmentInfoInputs"
-                       title="پاسخ کاربر"
-                       :loaded-data="currentUserAttendanceSheet"
-                       :default-layout="false"
-                       :show-expand-button="false"
-                       :show-edit-button="false"
-                       :show-index-button="false"
-                       :show-reload-button="false" />
         </template>
         </template>
-        <q-separator class="q-my-lg" />
-        <entity-create v-if="mounted"
-                       ref="entityCreateSubmitAttendanceStatus"
-                       v-model:value="submitAttendanceStatusInputs"
-                       :api="submitAttendanceStatusApi"
-                       :default-layout="false"
-                       :show-expand-button="false"
-                       :show-edit-button="false"
-                       :show-index-button="false"
-                       :show-reload-button="false" />
-      </template>
-    </entity-show>
+      </entity-show>
+    </div>
   </div>
   </div>
 </template>
 </template>
 
 
@@ -153,6 +157,7 @@ export default {
   data () {
   data () {
     const sessionId = parseInt(this.$route.params.id)
     const sessionId = parseInt(this.$route.params.id)
     return {
     return {
+      entityShowLoading: false,
       classroom: new Classroom(),
       classroom: new Classroom(),
       session: new Session(),
       session: new Session(),
       sessionLoaded: false,
       sessionLoaded: false,
@@ -247,7 +252,8 @@ export default {
       return new SessionAttendanceSheets(this.sessionAttendanceSheets.session_attendance_sheets[0])
       return new SessionAttendanceSheets(this.sessionAttendanceSheets.session_attendance_sheets[0])
     }
     }
   },
   },
-  mounted() {
+  mounted () {
+    this.entityLoading = true
     this.mounted = true
     this.mounted = true
   },
   },
   methods: {
   methods: {
@@ -296,23 +302,38 @@ export default {
       }
       }
     },
     },
     submitAttendanceStatus () {
     submitAttendanceStatus () {
+      this.entityLoading = true
       this.submitAttendanceStatusLoading = true
       this.submitAttendanceStatusLoading = true
       this.$refs.entityCreateSubmitAttendanceStatus.createEntity(false)
       this.$refs.entityCreateSubmitAttendanceStatus.createEntity(false)
         .then(() => {
         .then(() => {
+          this.entityLoading = false
           this.submitAttendanceStatusLoading = false
           this.submitAttendanceStatusLoading = false
         })
         })
         .catch(() => {
         .catch(() => {
+          this.entityLoading = false
           this.submitAttendanceStatusLoading = false
           this.submitAttendanceStatusLoading = false
         })
         })
     },
     },
     submitAssignment () {
     submitAssignment () {
+      const answerText = FormBuilderAssist.getInputsByName(this.submitAssignmentInputs, 'answer_text').value
+      if (!answerText) {
+        this.$q.notify({
+          type: 'negative',
+          message: 'متن پاسخ را کامل کنید.',
+          position: 'top'
+        })
+        return
+      }
+      this.entityLoading = true
       this.submitAssignmentLoading = true
       this.submitAssignmentLoading = true
       this.$refs.entityCreateSubmitAssignment.createEntity(false)
       this.$refs.entityCreateSubmitAssignment.createEntity(false)
         .then(() => {
         .then(() => {
           this.submitAssignmentLoading = false
           this.submitAssignmentLoading = false
+          this.entityLoading = false
         })
         })
         .catch(() => {
         .catch(() => {
           this.submitAssignmentLoading = false
           this.submitAssignmentLoading = false
+          this.entityLoading = false
         })
         })
     },
     },
     updateBreadcrumbs () {
     updateBreadcrumbs () {
@@ -350,6 +371,7 @@ export default {
       this.submitAttendanceStatusMounted = true
       this.submitAttendanceStatusMounted = true
       this.sessionLoaded = true
       this.sessionLoaded = true
       this.getClassInfo(this.session.classroom)
       this.getClassInfo(this.session.classroom)
+      this.entityLoading = false
     },
     },
     getClassInfo (classroomId) {
     getClassInfo (classroomId) {
       this.classroom.loading = true
       this.classroom.loading = true