feat: zoom attendance
This commit is contained in:
91
frontend/src/components/Modals/LiveClassAttendance.vue
Normal file
91
frontend/src/components/Modals/LiveClassAttendance.vue
Normal file
@@ -0,0 +1,91 @@
|
||||
<template>
|
||||
<Dialog
|
||||
v-model="show"
|
||||
:options="{
|
||||
title: __('Attendance for Class - {0}').format(live_class?.title),
|
||||
size: 'xl',
|
||||
}"
|
||||
>
|
||||
<template #body-content>
|
||||
<div class="space-y-5">
|
||||
<div
|
||||
v-for="participant in participants.data"
|
||||
@click="redirectToProfile(participant.member_username)"
|
||||
class="cursor-pointer text-base w-fit"
|
||||
>
|
||||
<Tooltip placement="right">
|
||||
<div class="flex items-center space-x-2">
|
||||
<Avatar
|
||||
:image="participant.member_image"
|
||||
:label="participant.member_name"
|
||||
size="xl"
|
||||
/>
|
||||
<div class="space-y-1">
|
||||
<div class="font-medium">
|
||||
{{ participant.member_name }}
|
||||
</div>
|
||||
<div>
|
||||
{{ participant.member }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template #body>
|
||||
<div
|
||||
class="max-w-[30ch] rounded bg-surface-gray-7 px-2 py-1 text-p-xs text-ink-white leading-5 shadow-xl"
|
||||
>
|
||||
{{ dayjs(participant.joined_at).format('HH:mm a') }} -
|
||||
{{ dayjs(participant.left_at).format('HH:mm a') }}
|
||||
<br />
|
||||
{{ __('attended for') }} {{ participant.duration }}
|
||||
{{ __('minutes') }}
|
||||
</div>
|
||||
</template>
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { Avatar, createListResource, Dialog, Tooltip } from 'frappe-ui'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { inject } from 'vue'
|
||||
|
||||
const show = defineModel()
|
||||
const router = useRouter()
|
||||
const dayjs = inject('$dayjs')
|
||||
|
||||
interface LiveClass {
|
||||
name: String
|
||||
title: String
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
live_class: LiveClass | null
|
||||
}>()
|
||||
|
||||
const participants = createListResource({
|
||||
doctype: 'LMS Live Class Participant',
|
||||
filter: {
|
||||
live_class: props.live_class?.name,
|
||||
},
|
||||
fields: [
|
||||
'name',
|
||||
'member',
|
||||
'member_name',
|
||||
'member_image',
|
||||
'member_username',
|
||||
'joined_at',
|
||||
'left_at',
|
||||
'duration',
|
||||
],
|
||||
auto: true,
|
||||
})
|
||||
|
||||
const redirectToProfile = (username: string) => {
|
||||
router.push({
|
||||
name: 'Profile',
|
||||
params: { username },
|
||||
})
|
||||
}
|
||||
</script>
|
||||
@@ -16,14 +16,29 @@
|
||||
<template #body-content>
|
||||
<div class="flex flex-col gap-4">
|
||||
<div class="grid grid-cols-2 gap-4">
|
||||
<div>
|
||||
<div class="space-y-4">
|
||||
<FormControl
|
||||
type="text"
|
||||
v-model="liveClass.title"
|
||||
:label="__('Title')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
<FormControl
|
||||
v-model="liveClass.date"
|
||||
type="date"
|
||||
:label="__('Date')"
|
||||
:required="true"
|
||||
/>
|
||||
<Tooltip :text="__('Duration of the live class in minutes')">
|
||||
<FormControl
|
||||
type="number"
|
||||
v-model="liveClass.duration"
|
||||
:label="__('Duration')"
|
||||
:required="true"
|
||||
/>
|
||||
</Tooltip>
|
||||
</div>
|
||||
<div class="space-y-4">
|
||||
<Tooltip
|
||||
:text="
|
||||
__(
|
||||
@@ -35,7 +50,6 @@
|
||||
v-model="liveClass.time"
|
||||
type="time"
|
||||
:label="__('Time')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</Tooltip>
|
||||
@@ -52,24 +66,6 @@
|
||||
:required="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<FormControl
|
||||
v-model="liveClass.date"
|
||||
type="date"
|
||||
class="mb-4"
|
||||
:label="__('Date')"
|
||||
:required="true"
|
||||
/>
|
||||
<Tooltip :text="__('Duration of the live class in minutes')">
|
||||
<FormControl
|
||||
type="number"
|
||||
v-model="liveClass.duration"
|
||||
:label="__('Duration')"
|
||||
class="mb-4"
|
||||
:required="true"
|
||||
/>
|
||||
</Tooltip>
|
||||
<FormControl
|
||||
v-model="liveClass.auto_recording"
|
||||
type="select"
|
||||
|
||||
Reference in New Issue
Block a user