AdminSessionAttendanceSheetShowAttendance.vue 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <template>
  2. <div class="AdminContentList"
  3. :style="localOptions.style">
  4. <breadcrumbs class="q-mb-xl"
  5. style="margin-top: 29px; margin-bottom: 19px;" />
  6. <div class="flex justify-end">
  7. <q-btn flat
  8. color="grey"
  9. @click="$router.go(-1)">
  10. بازگشت
  11. >
  12. </q-btn>
  13. </div>
  14. <q-inner-loading :showing="loading">
  15. <q-spinner-ball color="primary"
  16. size="50px" />
  17. </q-inner-loading>
  18. <entity-create v-if="mounted"
  19. ref="entityCreateSubmitAttendanceStatus"
  20. v-model:value="submitAttendanceStatusInputs"
  21. :api="submitAttendanceStatusApi"
  22. :default-layout="false"
  23. :show-expand-button="false"
  24. :show-edit-button="false"
  25. :show-index-button="false"
  26. :show-reload-button="false" />
  27. </div>
  28. </template>
  29. <script>
  30. import { shallowRef } from 'vue'
  31. import { EntityCreate } from 'quasar-crud'
  32. import { Session } from 'src/models/Session.js'
  33. import { mixinWidget } from 'src/mixin/Mixins.js'
  34. import { APIGateway } from 'src/api/APIGateway.js'
  35. import { Classroom } from 'src/models/Classroom.js'
  36. import BtnControl from 'src/components/Control/btn.vue'
  37. import { FormBuilderAssist } from 'quasar-form-builder'
  38. import Breadcrumbs from 'src/components/Widgets/Breadcrumbs/Breadcrumbs.vue'
  39. import { SessionAttendanceSheets } from 'src/models/SessionAttendanceSheets.js'
  40. const BtnControlComp = shallowRef(BtnControl)
  41. export default {
  42. name: 'AdminSessionAttendanceSheetList',
  43. components: { EntityCreate, Breadcrumbs },
  44. mixins: [mixinWidget],
  45. data () {
  46. const sessionId = parseInt(this.$route.params.session_id)
  47. return {
  48. classroom: new Classroom(),
  49. session: new Session(),
  50. sessionAttendanceSheets: new SessionAttendanceSheets(),
  51. loading: false,
  52. submitAttendanceStatusInputsReadPart: {
  53. type: 'formBuilder',
  54. name: 'is_read_part',
  55. value: [
  56. { type: 'separator', name: 'space', label: 'مطالعه', className: 'custom-separator', col: 'col-12' },
  57. { type: 'checkbox', name: 'is_read_part1', responseKey: 'is_read_part1', value: false, label: 'نیمه اول را مطالعه کردم', col: 'col-md-12' },
  58. { type: 'checkbox', name: 'is_read_part2', responseKey: 'is_read_part2', value: false, label: 'نیمه دوم را مطالعه کردم', col: 'col-md-12' }
  59. ],
  60. col: 'col-md-4 col-12'
  61. },
  62. submitAttendanceStatusInputs: [
  63. {
  64. type: 'formBuilder',
  65. name: 'is_present_listen_part',
  66. value: [
  67. { type: 'separator', name: 'space', label: 'حضور', className: 'custom-separator', col: 'col-12' },
  68. { type: 'checkbox', name: 'is_present_listen_part1', responseKey: 'is_present_listen_part1', value: false, label: 'حضور نیمه اول', col: 'col-md-12' },
  69. { type: 'checkbox', name: 'is_present_listen_part2', responseKey: 'is_present_listen_part2', value: false, label: 'حضور نیمه دوم', col: 'col-md-12' }
  70. ],
  71. col: 'col-md-4 col-12'
  72. },
  73. { type: BtnControlComp, name: 'btn', responseKey: 'btn', label: 'ثبت حضور و غیاب', placeholder: ' ', customClass: 'flex justify-end', atClick: this.submitAttendanceStatus, col: 'col-12' },
  74. { type: 'hidden', name: 'session', responseKey: 'session', value: sessionId },
  75. { type: 'hidden', name: 'owner', responseKey: 'owner', value: null }
  76. ],
  77. submitAttendanceStatusApi: APIGateway.sessionAttendanceSheets.APIAdresses.base,
  78. mounted: false
  79. }
  80. },
  81. mounted() {
  82. this.getClassroomAndSession()
  83. },
  84. methods: {
  85. getClassroomAndSession () {
  86. const sessionId = parseInt(this.$route.params.session_id)
  87. const classroomId = parseInt(this.$route.params.classroom_id)
  88. const sessionAttendanceSheetsId = parseInt(this.$route.params.session_attendance_sheet_id)
  89. this.loading = true
  90. Promise.all([this.getClassInfo(classroomId), this.getSessionInfo(sessionId), this.getSessionAttendanceSheetsInfo(sessionAttendanceSheetsId)])
  91. .then(() => {
  92. this.updateBreadcrumbs()
  93. this.updateAttendanceInputs()
  94. this.mounted = true
  95. this.loading = false
  96. })
  97. .catch(() => {
  98. this.loading = false
  99. })
  100. },
  101. updateAttendanceInputs () {
  102. const isDefinedSyllabus = this.session.is_defined_syllabus
  103. const classroomHoldingType = this.classroom.holding_type
  104. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'owner', 'value', this.sessionAttendanceSheets.owner_info.id)
  105. this.updateAttendancePresentInputs(classroomHoldingType)
  106. this.updateAttendanceReadInputs(isDefinedSyllabus)
  107. },
  108. updateAttendanceReadInputs (isDefinedSyllabus) {
  109. if (isDefinedSyllabus) {
  110. this.submitAttendanceStatusInputs.unshift(this.submitAttendanceStatusInputsReadPart)
  111. } else {
  112. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_read_part1', value: null })
  113. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_read_part2', value: null })
  114. }
  115. },
  116. updateAttendancePresentInputs (classroomHoldingType) {
  117. if (classroomHoldingType === 'OFFLINE') {
  118. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part1', 'label', 'صوت نیمه اول')
  119. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part2', 'label', 'صوت نیمه دوم')
  120. }
  121. },
  122. submitAttendanceStatus () {
  123. this.loading = true
  124. this.$refs.entityCreateSubmitAttendanceStatus.createEntity(false)
  125. .then(() => {
  126. this.loading = false
  127. })
  128. .catch(() => {
  129. this.loading = false
  130. })
  131. },
  132. updateBreadcrumbs () {
  133. this.$store.commit('AppLayout/updateBreadcrumbs', {
  134. visible: true,
  135. loading: false,
  136. path: [
  137. {
  138. label: 'دوره های آموزشی',
  139. to: { name: 'Admin.Classroom.Index' }
  140. },
  141. {
  142. label: this.classroom.title,
  143. to: { name: 'Admin.Classroom.Show', params: { id: this.$route.params.classroom_id } }
  144. },
  145. {
  146. label: 'لیست حضور و غیاب',
  147. to: { name: 'Admin.Classroom.Session.AttendanceSheetList', params: { classroom_id: this.$route.params.classroom_id, session_id: this.$route.params.session_id } }
  148. },
  149. {
  150. label: 'حضور و غیاب',
  151. to: { name: 'Admin.Classroom.Session.AttendanceSheet.Attendance', params: { classroom_id: this.$route.params.classroom_id, session_id: this.$route.params.session_id, session_attendance_sheet_id: this.$route.params.session_attendance_sheet_id } }
  152. }
  153. ]
  154. })
  155. },
  156. getClassInfo (classroomId) {
  157. return new Promise((resolve, reject) => {
  158. this.classroom.loading = true
  159. APIGateway.classroom.get(classroomId)
  160. .then(classroom => {
  161. this.classroom = new Classroom(classroom)
  162. this.classroom.loading = false
  163. resolve(this.classroom)
  164. })
  165. .catch(() => {
  166. this.classroom.loading = false
  167. reject()
  168. })
  169. })
  170. },
  171. getSessionInfo (sessionId) {
  172. return new Promise((resolve, reject) => {
  173. this.session.loading = true
  174. APIGateway.session.get(sessionId)
  175. .then(session => {
  176. this.session = new Session(session)
  177. this.session.loading = false
  178. resolve(this.session)
  179. })
  180. .catch(() => {
  181. this.session.loading = false
  182. reject()
  183. })
  184. })
  185. },
  186. getSessionAttendanceSheetsInfo (sessionAttendanceSheetsId) {
  187. return new Promise((resolve, reject) => {
  188. this.sessionAttendanceSheets.loading = true
  189. APIGateway.sessionAttendanceSheets.get(sessionAttendanceSheetsId)
  190. .then(sessionAttendanceSheets => {
  191. this.sessionAttendanceSheets = new SessionAttendanceSheets(sessionAttendanceSheets)
  192. this.sessionAttendanceSheets.loading = false
  193. resolve(this.sessionAttendanceSheets)
  194. })
  195. .catch(() => {
  196. this.sessionAttendanceSheets.loading = false
  197. reject()
  198. })
  199. })
  200. }
  201. }
  202. }
  203. </script>
  204. <style scoped lang="scss">
  205. .AdminContentList {
  206. .more-action {
  207. display: flex;
  208. flex-flow: row;
  209. justify-content: flex-end;
  210. margin-bottom: 10px;
  211. }
  212. }
  213. </style>