AdminSessionAttendanceSheetOfUser.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. <template>
  2. <div>
  3. <q-skeleton v-if="classroom.loading"
  4. type="text"
  5. width="200px" />
  6. <breadcrumbs v-else
  7. style="margin-top: 29px; margin-bottom: 19px;" />
  8. <div class="flex justify-end">
  9. <q-btn flat
  10. color="grey"
  11. @click="$router.go(-1)">
  12. بازگشت
  13. >
  14. </q-btn>
  15. </div>
  16. <div>
  17. <q-inner-loading :showing="entityShowLoading"
  18. label="کمی صبر کنید..." />
  19. <entity-show v-if="mounted"
  20. v-model:value="sessionInfoInputs"
  21. title="جزییات جلسه"
  22. :api="api"
  23. :show-expand-button="false"
  24. :show-edit-button="false"
  25. :show-index-button="false"
  26. :show-reload-button="false"
  27. :before-load-input-data="beforeLoadInputData">
  28. <template #before-form-builder>
  29. <div class="session-title-and-time-row">
  30. <div class="item">
  31. <div class="icon">
  32. <svg xmlns="http://www.w3.org/2000/svg"
  33. width="18.165"
  34. height="19.91"
  35. viewBox="0 0 18.165 19.91">
  36. <g id="Document"
  37. transform="translate(0)">
  38. <path id="Combined_Shape"
  39. data-name="Combined Shape"
  40. 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"
  41. transform="translate(0 0)"
  42. fill="#aaa095" />
  43. </g>
  44. </svg>
  45. </div>
  46. <div class="title">
  47. {{ title }}
  48. </div>
  49. </div>
  50. <div class="item">
  51. <div class="icon">
  52. <svg id="Calendar"
  53. xmlns="http://www.w3.org/2000/svg"
  54. width="19.5"
  55. height="21.5"
  56. viewBox="0 0 19.5 21.5">
  57. <path id="Combined_Shape"
  58. data-name="Combined Shape"
  59. 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"
  60. transform="translate(0 0)"
  61. fill="#aaa095" />
  62. </svg>
  63. </div>
  64. <div class="title">
  65. شروع:
  66. {{ startingTime }}
  67. </div>
  68. </div>
  69. <div class="item">
  70. <div class="icon">
  71. <svg id="Calendar"
  72. xmlns="http://www.w3.org/2000/svg"
  73. width="19.5"
  74. height="21.5"
  75. viewBox="0 0 19.5 21.5">
  76. <path id="Combined_Shape"
  77. data-name="Combined Shape"
  78. 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"
  79. transform="translate(0 0)"
  80. fill="#aaa095" />
  81. </svg>
  82. </div>
  83. <div class="title">
  84. پایان:
  85. {{ endingTime }}
  86. </div>
  87. </div>
  88. </div>
  89. </template>
  90. <template #after-form-builder>
  91. <q-inner-loading :showing="submitAttendanceStatusLoading || submitAssignmentLoading">
  92. <q-spinner-ball color="primary"
  93. size="50px" />
  94. </q-inner-loading>
  95. <template v-if="session?.is_show_answer_input">
  96. <q-separator class="q-my-lg" />
  97. <entity-create v-if="session?.is_enabled_answering"
  98. ref="entityCreateSubmitAssignment"
  99. v-model:value="submitAssignmentInputs"
  100. :api="submitAssignmentApi"
  101. :default-layout="false"
  102. :show-expand-button="false"
  103. :show-edit-button="false"
  104. :show-index-button="false"
  105. :show-reload-button="false" />
  106. <entity-show v-else-if="sessionLoaded"
  107. v-model:value="sessionAssignmentInfoInputs"
  108. title="پاسخ کاربر"
  109. :loaded-data="currentUserAttendanceSheet"
  110. :default-layout="false"
  111. :show-expand-button="false"
  112. :show-edit-button="false"
  113. :show-index-button="false"
  114. :show-reload-button="false" />
  115. </template>
  116. <q-separator class="q-my-lg" />
  117. <entity-create v-if="classroomDataLoaded"
  118. ref="entityCreateSubmitAttendanceStatus"
  119. v-model:value="submitAttendanceStatusInputs"
  120. :api="submitAttendanceStatusApi"
  121. :default-layout="false"
  122. :show-expand-button="false"
  123. :show-edit-button="false"
  124. :show-index-button="false"
  125. :show-reload-button="false" />
  126. </template>
  127. </entity-show>
  128. </div>
  129. </div>
  130. </template>
  131. <script>
  132. import { shallowRef } from 'vue'
  133. import { Session } from 'src/models/Session.js'
  134. import ShamsiDate from 'src/assets/ShamsiDate.js'
  135. import { APIGateway } from 'src/api/APIGateway.js'
  136. import { Classroom } from 'src/models/Classroom.js'
  137. import { EntityShow, EntityCreate } from 'quasar-crud'
  138. import BtnControl from 'src/components/Control/btn.vue'
  139. import { FormBuilderAssist } from 'quasar-form-builder'
  140. import Breadcrumbs from 'src/components/Widgets/Breadcrumbs/Breadcrumbs.vue'
  141. import { SessionAttendanceSheets } from 'src/models/SessionAttendanceSheets.js'
  142. import FormBuilderDateTime from 'src/components/FormBuilderCustumComponents/FormBuilderDateTime.vue'
  143. import ContentMedias from 'src/components/FormBuilderCustumComponents/ContentMedias/ContentMedias.vue'
  144. import ContentsSelector from 'src/components/FormBuilderCustumComponents/ContentsSelector/ContentsSelector.vue'
  145. const BtnControlComp = shallowRef(BtnControl)
  146. const ContentMediasComp = shallowRef(ContentMedias)
  147. const ContentsSelectorComp = shallowRef(ContentsSelector)
  148. const FormBuilderDateTimeComp = shallowRef(FormBuilderDateTime)
  149. export default {
  150. name: 'UserPanel.Profile.SessionInfo',
  151. components: {
  152. EntityShow,
  153. EntityCreate,
  154. Breadcrumbs
  155. },
  156. data () {
  157. const userId = parseInt(this.$route.params.user_id)
  158. const sessionId = parseInt(this.$route.params.session_id)
  159. return {
  160. classroomDataLoaded: false,
  161. entityShowLoading: false,
  162. classroom: new Classroom(),
  163. session: new Session(),
  164. sessionLoaded: false,
  165. sessionAttendanceSheets: new SessionAttendanceSheets(),
  166. mounted: false,
  167. api: APIGateway.session.APIAdresses.sessionAndCurrentUserAttendanceSheetOfUser(sessionId, userId),
  168. sessionInfoInputs: [
  169. { type: 'inputEditor', name: 'description', responseKey: 'description', label: 'توضیحات', col: 'col-md-12' },
  170. { type: 'separator', name: 'space', size: '1px', col: 'col-md-12' },
  171. { type: 'inputEditor', name: 'syllabus', responseKey: 'syllabus', label: 'مقرری جلسه', col: 'col-md-12' },
  172. { type: 'separator', name: 'space', size: '1px', col: 'col-md-12' },
  173. { type: 'inputEditor', name: 'assignment_description', responseKey: 'assignment_description', label: 'تکلیف جلسه', col: 'col-md-12' },
  174. { type: ContentsSelectorComp, name: 'contents', responseKey: 'contents_info', showPageLink: false, showDownloadLink: true, col: 'col-12' },
  175. { type: ContentMediasComp, name: 'medias', responseKey: 'medias_info', sourceType: 'SESSION', col: 'col-12' },
  176. { type: 'hidden', name: 'title', responseKey: 'title', label: 'نام جلسه', col: 'col-md-1' },
  177. { type: 'hidden', name: 'beginning_time', responseKey: 'beginning_time', label: 'زمان شروع جلسه', col: 'col-md-1' },
  178. { type: 'hidden', name: 'ending_time', responseKey: 'ending_time', label: 'زمان پایان جلسه', col: 'col-md-1' },
  179. { type: 'hidden', name: 'id', responseKey: 'id', label: 'id', col: 'col-md-1' }
  180. ],
  181. submitAttendanceStatusLoading: false,
  182. submitAttendanceStatusInputsReadPart: {
  183. type: 'formBuilder',
  184. name: 'is_read_part',
  185. value: [
  186. { type: 'separator', name: 'space', label: 'مطالعه', className: 'custom-separator', col: 'col-12' },
  187. { type: 'checkbox', name: 'is_read_part1', responseKey: 'is_read_part1', value: false, label: 'نیمه اول را مطالعه کردم', col: 'col-md-12' },
  188. { type: 'checkbox', name: 'is_read_part2', responseKey: 'is_read_part2', value: false, label: 'نیمه دوم را مطالعه کردم', col: 'col-md-12' }
  189. ],
  190. col: 'col-md-4 col-12'
  191. },
  192. submitAttendanceStatusInputsPresentListenPart: {
  193. type: 'formBuilder',
  194. name: 'is_present_listen_part',
  195. value: [
  196. { type: 'separator', name: 'space', label: 'حضور', className: 'custom-separator', col: 'col-12' },
  197. { type: 'checkbox', name: 'is_present_listen_part1', responseKey: 'is_present_listen_part1', value: false, label: 'در نیمه اول حضور داشته‌ام', col: 'col-md-12' },
  198. { type: 'checkbox', name: 'is_present_listen_part2', responseKey: 'is_present_listen_part2', value: false, label: 'در نیمه دوم حضور داشته‌ام', col: 'col-md-12' }
  199. ],
  200. col: 'col-md-4 col-12'
  201. },
  202. submitAttendanceStatusAction: { type: BtnControlComp, name: 'btn', responseKey: 'btn', label: 'ثبت حضور و غیاب', placeholder: ' ', customClass: 'flex justify-end', atClick: this.submitAttendanceStatus, col: 'col-12' },
  203. submitAttendanceStatusInputs: [
  204. { type: 'hidden', name: 'session', responseKey: 'session', value: sessionId }
  205. // { type: BtnControlComp, name: 'btn', responseKey: 'btn', label: 'ثبت', customClass: 'flex justify-end', atClick: this.submitAttendanceStatus, col: 'col-12' }
  206. ],
  207. submitAttendanceStatusApi: APIGateway.sessionAttendanceSheets.APIAdresses.submitAttendanceStatus,
  208. submitAttendanceStatusMounted: false,
  209. submitAssignmentLoading: false,
  210. submitAssignmentInputs: [
  211. { type: 'InputEditor', name: 'answer_text', responseKey: 'answer_text', label: 'پاسخ به تکلیف', placeholder: ' ', col: 'col-md-12 col-12' },
  212. { type: 'file', name: 'answer_attachment', responseKey: 'answer_attachment', label: 'انتخاب فایل ضمیمه', placeholder: ' ', col: 'col-md-3 col-12' },
  213. { type: BtnControlComp, name: 'btn', responseKey: 'btn', label: 'ارسال تکلیف', customClass: 'flex justify-end', atClick: this.submitAssignment, col: 'col-md-9 col-12' },
  214. { type: 'hidden', name: 'session', responseKey: 'session', value: sessionId }
  215. ],
  216. submitAssignmentApi: APIGateway.sessionAttendanceSheets.APIAdresses.submitAssignment,
  217. sessionAssignmentInfoInputs: [
  218. { type: 'InputEditor', name: 'answer_text', responseKey: 'answer_text', label: 'پاسخ کاربر', placeholder: ' ', col: 'col-md-12 col-12' },
  219. { type: 'file', name: 'answer_attachment', responseKey: 'answer_attachment', label: 'فایل ضمیمه', placeholder: ' ', col: 'col-md-3 col-12' },
  220. { type: 'select', name: 'assignment_status', responseKey: 'assignment_status', label: 'وضعیت تکلیف', placeholder: ' ', options: (new SessionAttendanceSheets()).assignment_statusEnums, col: 'col-md-3 col-12' },
  221. { type: FormBuilderDateTimeComp, name: 'creation_time', responseKey: 'creation_time', outsideLabel: 'زمان ارسال تکلیف', col: 'col-md-6 col-12' }
  222. ]
  223. }
  224. },
  225. computed: {
  226. title () {
  227. return this.getSessionInfoInputValue('title')
  228. },
  229. endingTime () {
  230. const data = this.getSessionInfoInputValue('ending_time')
  231. if (!data) {
  232. return '-'
  233. }
  234. return ShamsiDate.getDateTime(data)
  235. },
  236. startingTime () {
  237. const data = this.getSessionInfoInputValue('beginning_time')
  238. if (!data) {
  239. return '-'
  240. }
  241. return ShamsiDate.getDateTime(data)
  242. },
  243. currentUserAttendanceSheet () {
  244. if (!this.sessionAttendanceSheets?.session_attendance_sheets || this.sessionAttendanceSheets.session_attendance_sheets.length === 0) {
  245. return new SessionAttendanceSheets()
  246. }
  247. return new SessionAttendanceSheets(this.sessionAttendanceSheets.session_attendance_sheets[0])
  248. }
  249. },
  250. mounted () {
  251. this.entityLoading = true
  252. this.mounted = true
  253. },
  254. methods: {
  255. setAssignmentInputsValues () {
  256. FormBuilderAssist.setAttributeByName(this.submitAssignmentInputs, 'answer_text', 'value', this.currentUserAttendanceSheet?.answer_text)
  257. FormBuilderAssist.setAttributeByName(this.submitAssignmentInputs, 'answer_attachment', 'value', this.currentUserAttendanceSheet?.answer_attachment)
  258. },
  259. updateAttendanceInputsValues () {
  260. this.setAssignmentInputsValues()
  261. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_read_part1', 'value', !!this.currentUserAttendanceSheet?.is_read_part1)
  262. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_read_part2', 'value', !!this.currentUserAttendanceSheet?.is_read_part2)
  263. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part1', 'value', !!this.currentUserAttendanceSheet?.is_present_listen_part1)
  264. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part2', 'value', !!this.currentUserAttendanceSheet?.is_present_listen_part2)
  265. if (!this.session.is_enabled_changing_attendance_status) {
  266. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_read_part1', 'readonly', true)
  267. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_read_part2', 'readonly', true)
  268. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part1', 'readonly', true)
  269. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part2', 'readonly', true)
  270. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'btn', 'type', 'hidden')
  271. } else {
  272. this.submitAttendanceStatusInputs.push(this.submitAttendanceStatusAction)
  273. }
  274. },
  275. updateAttendanceInputs (isShowSyllabusInput, isShowPresentListenInput, classroomHoldingType) {
  276. this.updateAttendancePresentInputs(isShowPresentListenInput)
  277. this.updateAttendanceReadInputs(isShowSyllabusInput)
  278. if (classroomHoldingType === 'OFFLINE') {
  279. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part1', 'label', 'نیمه اول صوت را گوش کردم')
  280. FormBuilderAssist.setAttributeByName(this.submitAttendanceStatusInputs, 'is_present_listen_part2', 'label', 'نیمه دوم صوت را گوش کردم')
  281. }
  282. },
  283. updateAttendanceReadInputs (isShowSyllabusInput) {
  284. if (isShowSyllabusInput) {
  285. this.submitAttendanceStatusInputs.unshift(this.submitAttendanceStatusInputsReadPart)
  286. } else {
  287. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_read_part1', value: null })
  288. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_read_part2', value: null })
  289. }
  290. },
  291. updateAttendancePresentInputs (isShowPresentListenInput) {
  292. if (isShowPresentListenInput) {
  293. this.submitAttendanceStatusInputs.unshift(this.submitAttendanceStatusInputsPresentListenPart)
  294. } else {
  295. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_present_listen_part1', value: null })
  296. this.submitAttendanceStatusInputs.unshift({ type: 'hidden', name: 'is_present_listen_part2', value: null })
  297. }
  298. },
  299. submitAttendanceStatus () {
  300. this.entityLoading = true
  301. this.submitAttendanceStatusLoading = true
  302. this.$refs.entityCreateSubmitAttendanceStatus.createEntity(false)
  303. .then(() => {
  304. this.entityLoading = false
  305. this.submitAttendanceStatusLoading = false
  306. })
  307. .catch(() => {
  308. this.entityLoading = false
  309. this.submitAttendanceStatusLoading = false
  310. })
  311. },
  312. submitAssignment () {
  313. const answerText = FormBuilderAssist.getInputsByName(this.submitAssignmentInputs, 'answer_text').value
  314. if (!answerText) {
  315. this.$q.notify({
  316. type: 'negative',
  317. message: 'متن پاسخ را کامل کنید.',
  318. position: 'top'
  319. })
  320. return
  321. }
  322. this.entityLoading = true
  323. this.submitAssignmentLoading = true
  324. this.$refs.entityCreateSubmitAssignment.createEntity(false)
  325. .then(() => {
  326. this.submitAssignmentLoading = false
  327. this.entityLoading = false
  328. })
  329. .catch(() => {
  330. this.submitAssignmentLoading = false
  331. this.entityLoading = false
  332. })
  333. },
  334. updateBreadcrumbs () {
  335. this.$store.commit('AppLayout/updateBreadcrumbs', {
  336. visible: true,
  337. loading: false,
  338. path: [
  339. {
  340. label: 'دوره های من',
  341. to: { name: 'UserPanel.Profile.AllClassrooms' }
  342. },
  343. {
  344. label: this.classroom.title,
  345. to: { name: 'UserPanel.Profile.ClassroomInfo', params: { id: this.classroom.id } }
  346. },
  347. {
  348. label: 'جزییات جلسه',
  349. to: { name: 'UserPanel.Profile.SessionInfo', params: { id: this.$route.params.session_id } }
  350. }
  351. ]
  352. })
  353. },
  354. getSessionInfoInputValue (name) {
  355. const target = FormBuilderAssist.getInputsByName(this.sessionInfoInputs, name)
  356. if (!target) {
  357. return null
  358. }
  359. return target.value
  360. },
  361. beforeLoadInputData (data) {
  362. this.session = new Session(data)
  363. this.sessionAttendanceSheets = new SessionAttendanceSheets(data)
  364. this.classroom.loading = true
  365. this.submitAttendanceStatusMounted = true
  366. this.sessionLoaded = true
  367. this.getClassInfo(this.session.classroom)
  368. this.entityLoading = false
  369. },
  370. getClassInfo (classroomId) {
  371. this.classroom.loading = true
  372. APIGateway.classroom.get(classroomId)
  373. .then(classroom => {
  374. this.classroom = new Classroom(classroom)
  375. this.updateBreadcrumbs()
  376. this.classroom.loading = false
  377. // this.updateAttendanceInputs(this.session.is_defined_syllabus, this.classroom.holding_type)
  378. this.updateAttendanceInputs(this.session.is_show_syllabus_input, this.session.is_show_present_listen_input, this.classroom.holding_type)
  379. this.updateAttendanceInputsValues()
  380. this.classroomDataLoaded = true
  381. })
  382. .catch(() => {
  383. this.classroom.loading = false
  384. })
  385. }
  386. }
  387. }
  388. </script>
  389. <style lang="scss">
  390. .entity-show {
  391. .session-title-and-time-row {
  392. background-color: #FCF9F4;
  393. margin: -16px;
  394. width: calc( 100% + 32px );
  395. max-width: calc( 100% + 32px );
  396. display: flex;
  397. flex-flow: row;
  398. justify-content: flex-start;
  399. align-items: center;
  400. padding: 16px;
  401. border-bottom: solid 1px #DFE1EC;
  402. margin-bottom: 24px;
  403. .item {
  404. display: flex;
  405. flex-flow: row;
  406. justify-content: flex-start;
  407. width: 25%;
  408. align-items: center;
  409. .icon {
  410. padding-right: 11px;
  411. }
  412. .title {
  413. padding-right: 11px;
  414. }
  415. }
  416. }
  417. }
  418. </style>