AdminClassroomShow.vue 8.3 KB

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