refactor: badge page data
This commit is contained in:
@@ -2,31 +2,32 @@
|
||||
<div v-if="badge.doc">
|
||||
<div class="p-5 flex flex-col items-center mt-40">
|
||||
<div class="text-3xl font-semibold">
|
||||
{{ badge.doc.title }}
|
||||
{{ badge.doc.badge }}
|
||||
</div>
|
||||
<img :src="badge.doc.image" :alt="badge.doc.title" class="h-60 mt-2" />
|
||||
<img
|
||||
:src="badge.doc.badge_image"
|
||||
:alt="badge.doc.badge"
|
||||
class="h-60 mt-2"
|
||||
/>
|
||||
<div class="text-lg">
|
||||
{{
|
||||
__('This badge has been awarded to {0} on {1}.').format(
|
||||
userName,
|
||||
dayjs(issuedOn.data?.issued_on).format('DD MMM YYYY')
|
||||
badge.doc.member_name,
|
||||
dayjs(badge.doc.issued_on).format('DD MMM YYYY')
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
<div class="text-lg mt-2">
|
||||
{{ badge.doc.description }}
|
||||
{{ badge.doc.badge_description }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { createDocumentResource, createResource, Breadcrumbs } from 'frappe-ui'
|
||||
import { createDocumentResource } from 'frappe-ui'
|
||||
import { computed, inject } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const allUsers = inject('$allUsers')
|
||||
const dayjs = inject('$dayjs')
|
||||
const router = useRouter()
|
||||
|
||||
const props = defineProps({
|
||||
badgeName: {
|
||||
@@ -40,35 +41,11 @@ const props = defineProps({
|
||||
})
|
||||
|
||||
const badge = createDocumentResource({
|
||||
doctype: 'LMS Badge',
|
||||
name: props.badgeName,
|
||||
})
|
||||
|
||||
const userName = computed(() => {
|
||||
const user = Object.values(allUsers.data).find(
|
||||
(user) => user.name === props.email
|
||||
)
|
||||
return user ? user.full_name : props.email
|
||||
})
|
||||
|
||||
const issuedOn = createResource({
|
||||
url: 'frappe.client.get_value',
|
||||
makeParams(values) {
|
||||
return {
|
||||
doctype: 'LMS Badge Assignment',
|
||||
filters: {
|
||||
member: props.email,
|
||||
badge: props.badgeName,
|
||||
},
|
||||
fieldname: 'issued_on',
|
||||
}
|
||||
doctype: 'LMS Badge Assignment',
|
||||
filters: {
|
||||
badge: props.badgeName,
|
||||
member: props.email,
|
||||
},
|
||||
onSuccess(data) {
|
||||
if (!data.issued_on) {
|
||||
router.push({ name: 'Courses' })
|
||||
}
|
||||
},
|
||||
auto: true,
|
||||
})
|
||||
|
||||
const breadcrumbs = computed(() => {
|
||||
@@ -77,11 +54,11 @@ const breadcrumbs = computed(() => {
|
||||
label: 'Badges',
|
||||
},
|
||||
{
|
||||
label: badge.doc.title,
|
||||
label: badge.doc.badge,
|
||||
route: {
|
||||
name: 'Badge',
|
||||
params: {
|
||||
badge: badge.doc.name,
|
||||
badge: badge.doc.badge,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -228,8 +228,7 @@ router.beforeEach(async (to, from, next) => {
|
||||
isLoggedIn &&
|
||||
(to.name == 'Lesson' ||
|
||||
to.name == 'Batch' ||
|
||||
to.name == 'Notifications' ||
|
||||
to.name == 'Badge')
|
||||
to.name == 'Notifications')
|
||||
) {
|
||||
await allUsers.promise
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
"engine": "InnoDB",
|
||||
"field_order": [
|
||||
"member",
|
||||
"member_name",
|
||||
"issued_on",
|
||||
"column_break_ugix",
|
||||
"badge",
|
||||
@@ -57,11 +58,18 @@
|
||||
"label": "Badge Description",
|
||||
"read_only": 1,
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fetch_from": "member.full_name",
|
||||
"fieldname": "member_name",
|
||||
"fieldtype": "Data",
|
||||
"label": "Member Name",
|
||||
"read_only": 1
|
||||
}
|
||||
],
|
||||
"index_web_pages_for_search": 1,
|
||||
"links": [],
|
||||
"modified": "2024-05-13 20:16:00.191517",
|
||||
"modified": "2025-01-06 12:32:28.450028",
|
||||
"modified_by": "Administrator",
|
||||
"module": "LMS",
|
||||
"name": "LMS Badge Assignment",
|
||||
|
||||
Reference in New Issue
Block a user