feat: show submitted feedback as readonly

This commit is contained in:
Jannat Patel
2025-01-10 19:05:59 +05:30
parent 5d14d6f1aa
commit 2ecb93e925
3 changed files with 92 additions and 18 deletions

View File

@@ -1,25 +1,59 @@
<template> <template>
<div v-if="feedbackList.data"></div> <div>
<div v-else class="space-y-8"> <div
<div class="grid grid-cols-4 gap-5"> v-if="feedbackList.data?.length"
<Rating v-model="feedback.content" :label="__('Content')" /> class="bg-blue-100 text-blue-700 p-2 rounded-md mb-5"
<Rating v-model="feedback.delivery" :label="__('Delivery')" /> >
<Rating v-model="feedback.instructors" :label="__('Instructors')" /> {{ __('Thank you for providing your feedback!') }}
<Rating v-model="feedback.value" :label="__('Value')" /> </div>
<div v-else class="flex justify-between items-center mb-5">
<div class="text-lg font-semibold">
{{ __('Help Us Improve') }}
</div>
<Button @click="submitFeedback()">
{{ __('Submit') }}
</Button>
</div>
<div class="space-y-8">
<div class="grid grid-cols-4 gap-5">
<Rating
v-model="feedback.content"
:label="__('Content')"
:readonly="readOnly"
/>
<Rating
v-model="feedback.delivery"
:label="__('Delivery')"
:readonly="readOnly"
/>
<Rating
v-model="feedback.instructors"
:label="__('Instructors')"
:readonly="readOnly"
/>
<Rating
v-model="feedback.value"
:label="__('Value')"
:readonly="readOnly"
/>
</div>
<FormControl
v-model="feedback.feedback"
type="textarea"
:label="__('Feedback')"
:rows="7"
:readonly="readOnly"
/>
</div> </div>
<FormControl
v-model="feedback.feedback"
type="textarea"
:label="__('Feedback')"
rows="7"
/>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup>
import { inject, reactive } from 'vue' import { inject, reactive, ref } from 'vue'
import { createListResource, FormControl, Rating } from 'frappe-ui' import { Button, createListResource, FormControl, Rating } from 'frappe-ui'
const user = inject('$user') const user = inject('$user')
const ratingKeys = ['content', 'delivery', 'instructors', 'value']
const readOnly = ref(false)
const feedback = reactive({ const feedback = reactive({
content: 0, content: 0,
delivery: 0, delivery: 0,
@@ -41,7 +75,35 @@ const feedbackList = createListResource({
batch: props.batch, batch: props.batch,
member: user.data?.name, member: user.data?.name,
}, },
fields: ['content', 'delivery', 'instructors', 'value', 'feedback', 'name'],
cache: ['feedbackList', props.batch, user.data?.name], cache: ['feedbackList', props.batch, user.data?.name],
auto: true, auto: true,
onSuccess(data) {
if (data.length) {
readOnly.value = true
Object.keys(feedback).forEach((key) => {
if (ratingKeys.includes(key)) feedback[key] = data[0][key] * 5
else feedback[key] = data[0][key]
})
}
},
}) })
const submitFeedback = () => {
ratingKeys.forEach((key) => {
feedback[key] = feedback[key] / 5
})
feedbackList.insert.submit(
{
member: user.data?.name,
batch: props.batch,
...feedback,
},
{
onSuccess: () => {
feedbackList.reload()
},
}
)
}
</script> </script>

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="flex rounded p-1 lg:px-2 lg:py-2.5 hover:bg-gray-100"> <div class="flex rounded p-1 lg:px-2 lg:py-4 hover:bg-gray-100">
<div class="flex w-3/5 md:w-2/5"> <div class="flex w-3/5 md:w-2/5">
<img <img
:src="job.company_logo" :src="job.company_logo"

View File

@@ -65,7 +65,7 @@
], ],
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"links": [], "links": [],
"modified": "2025-01-07 18:56:38.800575", "modified": "2025-01-10 17:25:25.482724",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "LMS", "module": "LMS",
"name": "LMS Batch Feedback", "name": "LMS Batch Feedback",
@@ -82,6 +82,18 @@
"role": "System Manager", "role": "System Manager",
"share": 1, "share": 1,
"write": 1 "write": 1
},
{
"create": 1,
"email": 1,
"export": 1,
"if_owner": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "LMS Student",
"share": 1,
"write": 1
} }
], ],
"sort_field": "creation", "sort_field": "creation",