AdminClassroomShow.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <q-skeleton v-if="classroom.loading"
  3. type="text"
  4. width="200px" />
  5. <breadcrumbs v-else
  6. style="margin-top: 29px; margin-bottom: 19px;" />
  7. <div class="flex justify-end">
  8. <q-btn flat
  9. color="grey"
  10. @click="$router.go(-1)">
  11. بازگشت
  12. >
  13. </q-btn>
  14. </div>
  15. <q-card v-if="mounted"
  16. class="AdminClassroomShow">
  17. <q-tabs v-model="tab"
  18. dense
  19. class="text-grey"
  20. active-color="primary"
  21. indicator-color="primary"
  22. align="justify"
  23. narrow-indicator>
  24. <q-tab v-if="canShowTabPage('classroomInfo')"
  25. name="classroomInfo"
  26. label="مشخصات" />
  27. <q-tab v-if="canShowTabPage('sessions')"
  28. name="sessions"
  29. :label="sessionsTabTitle" />
  30. <q-tab v-if="canShowTabPage('projects')"
  31. name="projects"
  32. label="پروژه‌ها" />
  33. <q-tab v-if="canShowTabPage('exams')"
  34. name="exams"
  35. :label="localOptions.classroomType === 'TRAINING' ? 'آزمون' : 'پرسشنامه'" />
  36. <q-tab v-if="canShowTabPage('members')"
  37. name="members"
  38. label="اندیشه جویان" />
  39. <q-tab v-if="canShowTabPage('teams')"
  40. name="teams"
  41. label="گروه" />
  42. <q-tab v-if="canShowTabPage('graders')"
  43. name="graders"
  44. label="مصححین" />
  45. <q-tab v-if="canShowTabPage('leaders')"
  46. name="leaders"
  47. label="سرگروه ها" />
  48. <q-tab v-if="canShowTabPage('activity_sheet')"
  49. name="activity_sheet"
  50. label="فعالیت کلاسی" />
  51. <q-tab v-if="canShowTabPage('live_streaming_url')"
  52. name="live_streaming_url"
  53. label="بخش آنلاین" />
  54. </q-tabs>
  55. <q-separator />
  56. <q-tab-panels v-model="tab"
  57. animated>
  58. <q-tab-panel name="classroomInfo"
  59. class="q-pa-none">
  60. <classroom-info v-model:classroom="classroom"
  61. :classroom-type="localOptions.classroomType"
  62. :classroom-id="parseInt($route.params.id)" />
  63. </q-tab-panel>
  64. <q-tab-panel name="sessions"
  65. class="q-pa-none">
  66. <session-list :classroom-id="parseInt($route.params.id)"
  67. :classroom-type="localOptions.classroomType" />
  68. </q-tab-panel>
  69. <q-tab-panel name="projects"
  70. class="q-pa-none">
  71. <project-list :classroom-id="parseInt($route.params.id)" />
  72. </q-tab-panel>
  73. <q-tab-panel name="exams"
  74. class="q-pa-none">
  75. <test-list :classroom="classroom"
  76. :classroom-id="parseInt($route.params.id)"
  77. :classroom-type="localOptions.classroomType" />
  78. </q-tab-panel>
  79. <q-tab-panel name="members"
  80. class="q-pa-none">
  81. <members-list :classroom-id="parseInt($route.params.id)" />
  82. </q-tab-panel>
  83. <q-tab-panel name="teams"
  84. class="q-pa-none">
  85. <team-list :classroom-id="parseInt($route.params.id)" />
  86. </q-tab-panel>
  87. <q-tab-panel name="graders"
  88. class="q-pa-none">
  89. <grader-list :classroom-id="parseInt($route.params.id)" />
  90. </q-tab-panel>
  91. <q-tab-panel name="leaders"
  92. class="q-pa-none">
  93. <leader-list :classroom-id="parseInt($route.params.id)" />
  94. </q-tab-panel>
  95. <q-tab-panel name="activity_sheet"
  96. class="q-pa-none">
  97. <activity-sheet-list :classroom-id="parseInt($route.params.id)" />
  98. </q-tab-panel>
  99. <q-tab-panel name="live_streaming_url">
  100. <live-streaming :classroom="classroom" />
  101. </q-tab-panel>
  102. </q-tab-panels>
  103. </q-card>
  104. </template>
  105. <script>
  106. import TeamList from './components/TeamList.vue'
  107. import TestList from './components/TestList.vue'
  108. import { mixinWidget } from 'src/mixin/Mixins.js'
  109. import { Classroom } from 'src/models/Classroom.js'
  110. import LeaderList from './components/LeaderList.vue'
  111. import GraderList from './components/GraderList.vue'
  112. import SessionList from './components/SessionList.vue'
  113. import ProjectList from './components/ProjectList.vue'
  114. import MembersList from './components/MembersList.vue'
  115. import { UnitCategory } from 'src/models/UnitCategory.js'
  116. import ClassroomInfo from './components/ClassroomInfo.vue'
  117. import LiveStreaming from './components/LiveStreaming.vue'
  118. import ActivitySheetList from './components/ActivitySheetList.vue'
  119. import Breadcrumbs from 'src/components/Widgets/Breadcrumbs/Breadcrumbs.vue'
  120. export default {
  121. name: 'Admin.Classroom.Show',
  122. components: {
  123. TeamList,
  124. TestList,
  125. LeaderList,
  126. GraderList,
  127. SessionList,
  128. ProjectList,
  129. MembersList,
  130. Breadcrumbs,
  131. ClassroomInfo,
  132. LiveStreaming,
  133. ActivitySheetList
  134. },
  135. mixins: [mixinWidget],
  136. data () {
  137. return {
  138. mounted: false,
  139. tab: 'classroomInfo',
  140. classroom: new Classroom()
  141. }
  142. },
  143. computed: {
  144. classroomId () {
  145. return this.classroom.id
  146. },
  147. classroomTypeTitle () {
  148. const unitCategory = new UnitCategory({ type: this.localOptions.classroomType })
  149. return unitCategory.type_info.label
  150. },
  151. sessionsTabTitle () {
  152. if (this.localOptions.classroomType === 'TRAINING') {
  153. return 'لیست جلسات'
  154. }
  155. if (this.localOptions.classroomType === 'EVENT') {
  156. return 'لیست برنامه ها'
  157. }
  158. return 'لیست جلسات'
  159. },
  160. indexPageRouteName () {
  161. if (this.localOptions.classroomType === 'TRAINING') {
  162. return 'Admin.Classroom.Index'
  163. }
  164. if (this.localOptions.classroomType === 'EVENT') {
  165. return 'Admin.Event.Index'
  166. }
  167. return 'Admin.Classroom.Index'
  168. },
  169. showPageRouteName () {
  170. if (this.localOptions.classroomType === 'TRAINING') {
  171. return 'Admin.Classroom.Show'
  172. }
  173. if (this.localOptions.classroomType === 'EVENT') {
  174. return 'Admin.Event.Show'
  175. }
  176. return 'Admin.Classroom.Show'
  177. },
  178. canShowTabPage () {
  179. return (tabName) => {
  180. const tabs = {
  181. TRAINING: [
  182. 'classroomInfo',
  183. 'sessions',
  184. 'projects',
  185. 'exams',
  186. 'members',
  187. 'teams',
  188. 'graders',
  189. 'leaders',
  190. 'activity_sheet',
  191. 'live_streaming_url'
  192. ],
  193. EVENT: [
  194. 'classroomInfo',
  195. 'sessions',
  196. 'members',
  197. 'exams',
  198. 'live_streaming_url'
  199. ]
  200. }
  201. return tabs[this.localOptions.classroomType].includes(tabName)
  202. }
  203. }
  204. },
  205. watch: {
  206. classroomId (newValue) {
  207. if (!newValue) {
  208. return
  209. }
  210. this.updateBreadcrumbs()
  211. }
  212. },
  213. mounted () {
  214. this.mounted = true
  215. },
  216. methods: {
  217. updateBreadcrumbs () {
  218. this.$store.commit('AppLayout/updateBreadcrumbs', {
  219. visible: true,
  220. loading: false,
  221. path: [
  222. {
  223. label: 'لیست ' + this.classroomTypeTitle,
  224. to: { name: this.indexPageRouteName }
  225. },
  226. {
  227. label: this.classroom.title,
  228. to: { name: this.showPageRouteName, params: { id: this.$route.params.id } }
  229. }
  230. ]
  231. })
  232. }
  233. }
  234. }
  235. </script>