AdminClassroomShow.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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('announce_result')"
  52. name="announce_result"
  53. label="کارنامه" />
  54. <q-tab v-if="canShowTabPage('live_streaming_url')"
  55. name="live_streaming_url"
  56. label="بخش آنلاین" />
  57. </q-tabs>
  58. <q-separator />
  59. <q-tab-panels v-model="tab"
  60. animated>
  61. <q-tab-panel name="classroomInfo"
  62. class="q-pa-none">
  63. <classroom-info v-model:classroom="classroom"
  64. :classroom-type="localOptions.classroomType"
  65. :classroom-id="parseInt($route.params.id)" />
  66. </q-tab-panel>
  67. <q-tab-panel name="sessions"
  68. class="q-pa-none">
  69. <session-list :classroom-id="parseInt($route.params.id)"
  70. :classroom-type="localOptions.classroomType" />
  71. </q-tab-panel>
  72. <q-tab-panel name="projects"
  73. class="q-pa-none">
  74. <project-list :classroom-id="parseInt($route.params.id)" />
  75. </q-tab-panel>
  76. <q-tab-panel name="exams"
  77. class="q-pa-none">
  78. <test-list v-if="classroom.id"
  79. :classroom="classroom"
  80. :classroom-id="parseInt($route.params.id)"
  81. :classroom-type="localOptions.classroomType" />
  82. </q-tab-panel>
  83. <q-tab-panel name="members"
  84. class="q-pa-none">
  85. <members-list :classroom-id="parseInt($route.params.id)" />
  86. </q-tab-panel>
  87. <q-tab-panel name="teams"
  88. class="q-pa-none">
  89. <team-list :classroom-id="parseInt($route.params.id)" />
  90. </q-tab-panel>
  91. <q-tab-panel name="graders"
  92. class="q-pa-none">
  93. <grader-list :classroom-id="parseInt($route.params.id)" />
  94. </q-tab-panel>
  95. <q-tab-panel name="leaders"
  96. class="q-pa-none">
  97. <leader-list :classroom-id="parseInt($route.params.id)" />
  98. </q-tab-panel>
  99. <q-tab-panel name="activity_sheet"
  100. class="q-pa-none">
  101. <activity-sheet-list :classroom-id="parseInt($route.params.id)" />
  102. </q-tab-panel>
  103. <q-tab-panel name="announce_result"
  104. class="q-pa-none">
  105. <announce-result-list v-if="classroom.id"
  106. :classroom="classroom" />
  107. </q-tab-panel>
  108. <q-tab-panel name="live_streaming_url">
  109. <live-streaming v-if="classroom.id"
  110. :classroom="classroom" />
  111. </q-tab-panel>
  112. </q-tab-panels>
  113. </q-card>
  114. </template>
  115. <script>
  116. import TeamList from './components/TeamList.vue'
  117. import TestList from './components/TestList.vue'
  118. import { mixinWidget } from 'src/mixin/Mixins.js'
  119. import { Classroom } from 'src/models/Classroom.js'
  120. import LeaderList from './components/LeaderList.vue'
  121. import GraderList from './components/GraderList.vue'
  122. import SessionList from './components/SessionList.vue'
  123. import ProjectList from './components/ProjectList.vue'
  124. import MembersList from './components/MembersList.vue'
  125. import { UnitCategory } from 'src/models/UnitCategory.js'
  126. import ClassroomInfo from './components/ClassroomInfo.vue'
  127. import LiveStreaming from './components/LiveStreaming.vue'
  128. import ActivitySheetList from './components/ActivitySheetList.vue'
  129. import AnnounceResultList from './components/AnnounceResultList.vue'
  130. import Breadcrumbs from 'src/components/Widgets/Breadcrumbs/Breadcrumbs.vue'
  131. export default {
  132. name: 'Admin.Classroom.Show',
  133. components: {
  134. TeamList,
  135. TestList,
  136. LeaderList,
  137. GraderList,
  138. SessionList,
  139. ProjectList,
  140. MembersList,
  141. Breadcrumbs,
  142. ClassroomInfo,
  143. LiveStreaming,
  144. ActivitySheetList,
  145. AnnounceResultList
  146. },
  147. mixins: [mixinWidget],
  148. data () {
  149. return {
  150. mounted: false,
  151. tab: 'classroomInfo',
  152. classroom: new Classroom()
  153. }
  154. },
  155. computed: {
  156. classroomId () {
  157. return this.classroom.id
  158. },
  159. classroomTypeTitle () {
  160. const unitCategory = new UnitCategory({ type: this.localOptions.classroomType })
  161. return unitCategory.type_info.label
  162. },
  163. sessionsTabTitle () {
  164. if (this.localOptions.classroomType === 'TRAINING') {
  165. return 'لیست جلسات'
  166. }
  167. if (this.localOptions.classroomType === 'EVENT') {
  168. return 'لیست برنامه ها'
  169. }
  170. return 'لیست جلسات'
  171. },
  172. indexPageRouteName () {
  173. if (this.localOptions.classroomType === 'TRAINING') {
  174. return 'Admin.Classroom.Index'
  175. }
  176. if (this.localOptions.classroomType === 'EVENT') {
  177. return 'Admin.Event.Index'
  178. }
  179. return 'Admin.Classroom.Index'
  180. },
  181. showPageRouteName () {
  182. if (this.localOptions.classroomType === 'TRAINING') {
  183. return 'Admin.Classroom.Show'
  184. }
  185. if (this.localOptions.classroomType === 'EVENT') {
  186. return 'Admin.Event.Show'
  187. }
  188. return 'Admin.Classroom.Show'
  189. },
  190. canShowTabPage () {
  191. return (tabName) => {
  192. const tabs = {
  193. TRAINING: [
  194. 'classroomInfo',
  195. 'sessions',
  196. 'projects',
  197. 'exams',
  198. 'members',
  199. 'teams',
  200. 'graders',
  201. 'leaders',
  202. 'activity_sheet',
  203. 'announce_result',
  204. 'live_streaming_url'
  205. ],
  206. EVENT: [
  207. 'classroomInfo',
  208. 'sessions',
  209. 'members',
  210. 'exams',
  211. 'live_streaming_url'
  212. ]
  213. }
  214. return tabs[this.localOptions.classroomType].includes(tabName)
  215. }
  216. }
  217. },
  218. watch: {
  219. classroomId (newValue) {
  220. if (!newValue) {
  221. return
  222. }
  223. this.updateBreadcrumbs()
  224. }
  225. },
  226. mounted () {
  227. this.mounted = true
  228. },
  229. methods: {
  230. updateBreadcrumbs () {
  231. this.$store.commit('AppLayout/updateBreadcrumbs', {
  232. visible: true,
  233. loading: false,
  234. path: [
  235. {
  236. label: 'لیست ' + this.classroomTypeTitle,
  237. to: { name: this.indexPageRouteName }
  238. },
  239. {
  240. label: this.classroom.title,
  241. to: { name: this.showPageRouteName, params: { id: this.$route.params.id } }
  242. }
  243. ]
  244. })
  245. }
  246. }
  247. }
  248. </script>