55 lines
4.1 KiB
Plaintext
55 lines
4.1 KiB
Plaintext
# Performance Analysis - 20251123-080448
|
|
== Large component files (>500 lines) ==
|
|
522 src/components/trustBusiness/WebsiteCopyGenerator.vue
|
|
546 src/views/StaffDashboardView.vue
|
|
512 src/views/ProjectsView.vue
|
|
522 src/views/AdminDashboardView.vue
|
|
|
|
== Missing lazy loading on routes ==
|
|
11: component: HomeView,
|
|
|
|
== Inline functions in templates (cause re-renders) ==
|
|
src/components/trustBusiness/QuestionnaireSection.vue:39: @click="$emit('previous')"
|
|
src/components/trustBusiness/QuestionnaireSection.vue:48: @click="$emit('next')"
|
|
src/components/trustBusiness/QuestionnaireSection.vue:55: @click="$emit('complete')"
|
|
src/components/trustBusiness/QuestionnaireSidebar.vue:50: @click="$emit('select-section', completion.sectionId)"
|
|
src/components/trustBusiness/QuestionnaireSidebar.vue:81: @click="$emit('save')"
|
|
src/components/trustBusiness/QuestionnaireSidebar.vue:88: @click="$emit('submit')"
|
|
src/components/ui/ToastContainer.vue:35: @click="removeToast(toast.id)"
|
|
src/views/StaffDashboardView.vue:204: @click="updateTaskStatus(task.id, 'IN_PROGRESS')"
|
|
src/views/StaffDashboardView.vue:211: @click="updateTaskStatus(task.id, 'COMPLETED')"
|
|
src/views/StaffDashboardView.vue:273: @click="updateTaskStatus(task.id, 'IN_PROGRESS')"
|
|
src/views/StaffDashboardView.vue:306: @click="updateTaskStatus(task.id, 'COMPLETED')"
|
|
src/views/ProjectsView.vue:70: @click="approveProject(project.id)"
|
|
src/views/ProjectsView.vue:77: @click="showRejectModal(project)"
|
|
src/views/ProjectsView.vue:115: @click="cancelRequest(request.id)"
|
|
src/views/LoginView.vue:23: <button @click="authStore.clearError()" class="inline-flex rounded-md p-1.5 text-red-500 hover:bg-red-100 focus:outline-none">
|
|
src/views/InvoicesView.vue:61: <button @click="viewInvoice(invoice)" class="text-sm font-medium text-blue-600 hover:text-blue-500">
|
|
src/views/InvoicesView.vue:65: @click="payInvoice(invoice)"
|
|
src/views/InvoicesView.vue:204: @click="payInvoice(selectedInvoice)"
|
|
src/views/AdminDashboardView.vue:309: @click="promoteUser(user.id, 'STAFF')"
|
|
src/views/AdminDashboardView.vue:317: @click="demoteUser(user.id, 'STAFF')"
|
|
src/views/AdminDashboardView.vue:325: @click="promoteUser(user.id, 'ADMIN')"
|
|
src/views/RegisterView.vue:26: <button @click="authStore.clearError()" class="inline-flex rounded-md p-1.5 text-red-500 hover:bg-red-100 focus:outline-none">
|
|
|
|
== Missing key attribute in v-for ==
|
|
src/components/trustBusiness/QuestionnaireSection.vue:26: v-for="question in section.questions"
|
|
src/components/trustBusiness/GeneratedOutputs.vue:7: v-for="output in outputs"
|
|
src/components/trustBusiness/WebsiteCopyGenerator.vue:35: v-for="tab in tabs"
|
|
src/components/trustBusiness/QuestionInput.vue:54: v-for="option in question.options"
|
|
src/components/trustBusiness/QuestionnaireSidebar.vue:43: v-for="(completion, index) in store.sectionCompletion"
|
|
src/components/ui/ToastContainer.vue:6: v-for="toast in toasts"
|
|
src/views/StaffDashboardView.vue:261: v-for="task in todoTasks"
|
|
src/views/StaffDashboardView.vue:294: v-for="task in inProgressTasks"
|
|
src/views/StaffDashboardView.vue:327: v-for="task in completedTasks.slice(0, 10)"
|
|
src/views/ServicesView.vue:17: v-for="service in services"
|
|
src/views/BlogView.vue:17: v-for="article in articles"
|
|
src/views/AdminDashboardView.vue:293: v-for="role in user.roles"
|
|
src/views/TrustBusinessView.vue:194: v-for="completion in store.sectionCompletion"
|
|
|
|
== Watchers without immediate: false (potential issues) ==
|
|
src/stores/trustBusiness.ts:1548: watch(
|
|
src/views/ArticleDetailView.vue:122:watch(() => route.params.slug, (newSlug) => {
|
|
src/views/ServiceDetailView.vue:108:watch(() => route.params.slug, (newSlug) => {
|
|
src/views/BizCardView.vue:305:watch(showQRCode, async (show) => {
|