@@ -3,90 +3,165 @@ export default [
|
||||
path: '/dashboard',
|
||||
name: 'student-dashboard',
|
||||
component: () => import('@/features/student/pages/StudentDashboardPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'پیشخوان' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'سلام بر شما',
|
||||
subtitle: 'به سامانه موسسه بانو خوش آمدید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/profile',
|
||||
name: 'student-profile',
|
||||
component: () => import('@/features/student/profile/pages/EditProfilePage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'ویرایش پروفایل' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'پروفایل شما',
|
||||
subtitle: 'مشخصاتتان را ویرایش نمایید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-courses',
|
||||
name: 'student-courses',
|
||||
component: () => import('@/features/student/courses/pages/StudentCoursesPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'دورههای من' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-courses/:id',
|
||||
name: 'student-course-details',
|
||||
component: () => import('@/features/student/courses/pages/StudentCourseDetailsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'جزئیات دوره' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-terms',
|
||||
name: 'student-terms',
|
||||
component: () => import('@/features/student/terms/pages/StudentTermsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'ترمهای آموزشی' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-terms/:id',
|
||||
name: 'student-term-details',
|
||||
component: () => import('@/features/student/terms/pages/StudentTermDetailsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'جزئیات دوره' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-lessons/:id',
|
||||
name: 'student-lesson-details',
|
||||
component: () => import('@/features/student/lessons/pages/StudentLessonDetailsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'جزئیات درس' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-sessions/:id',
|
||||
name: 'student-session-details',
|
||||
component: () => import('@/features/student/sessions/pages/StudentSessionDetailsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'جزئیات جلسه' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-exams/:id',
|
||||
name: 'student-exam',
|
||||
component: () => import('@/features/student/exams/pages/StudentExamPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'آزمون' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-exams/:id/take',
|
||||
name: 'student-take-exam',
|
||||
component: () => import('@/features/student/exams/pages/StudentTakeExamPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'شروع آزمون' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'یادگیری شما',
|
||||
subtitle: 'مهارتها و دورههای خود را دنبال کنید.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/missionary',
|
||||
name: 'student-missionary',
|
||||
component: () => import('@/features/student/missionary/pages/StudentMissionaryPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'سامانه اعزام' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'سیستم مدیریت اعزام',
|
||||
subtitle: 'سادهترین راه برای برنامهریزی و پایش مأموریتها',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/user/services',
|
||||
name: 'student-services',
|
||||
component: () => import('@/features/student/services/pages/StudentServicesPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'خدمات' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'درخواست خدمت',
|
||||
subtitle: 'فقط یک مرحله تا شروع کار شما.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/user/consultants',
|
||||
name: 'student-consultants',
|
||||
component: () => import('@/features/student/consultants/pages/StudentConsultantsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'مشاوره' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'مشاوره سریع',
|
||||
subtitle: 'چند ثانیه برای دریافت مشاوره کافیست.',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/user/certificates',
|
||||
name: 'student-certificates',
|
||||
component: () => import('@/features/student/certificates/pages/StudentCertificatesPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'گواهینامه ها' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'گواهینامه معتبر',
|
||||
subtitle: 'نشان اعتماد و تخصص ما در هر حوزه',
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/my-tickets',
|
||||
name: 'student-tickets',
|
||||
component: () => import('@/features/student/tickets/pages/StudentTicketsPage.vue'),
|
||||
meta: { layout: 'student', role: 'student', title: 'تیکتهای من' },
|
||||
meta: {
|
||||
layout: 'student',
|
||||
role: 'student',
|
||||
title: 'تیکتهای شما',
|
||||
subtitle: 'اینجا پل ارتباطی شما با پشتیبانی است.',
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
@@ -14,7 +14,17 @@
|
||||
</div>
|
||||
|
||||
<SkeletonLoaderBlock v-if="isLoading && !ticket" :rows="3" :cols-per-row="1" />
|
||||
<div v-else-if="messages.length > 0" ref="thread" class="ticket-details__thread">
|
||||
<div
|
||||
v-else-if="messages.length > 0 || ticketMedia.length > 0"
|
||||
ref="thread"
|
||||
class="ticket-details__thread"
|
||||
>
|
||||
<div v-if="ticketMedia.length > 0" class="ticket-details__row ticket-details__row--self">
|
||||
<div class="ticket-details__bubble">
|
||||
<MessageAttachments :media="ticketMedia" />
|
||||
<span class="ticket-details__time">{{ messageTime(ticket) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-for="message in messages"
|
||||
:key="message.id"
|
||||
@@ -22,6 +32,7 @@
|
||||
:class="`ticket-details__row--${senderClass(message)}`"
|
||||
>
|
||||
<div class="ticket-details__bubble">
|
||||
<MessageAttachments v-if="message.media?.length" :media="message.media" />
|
||||
<p class="ticket-details__text">{{ message.message }}</p>
|
||||
<span class="ticket-details__time">{{ messageTime(message) }}</span>
|
||||
</div>
|
||||
@@ -60,6 +71,7 @@ import BasicModal from '@/components/BasicModal.vue'
|
||||
import SvgIcon from '@/components/icons/SvgIcon.vue'
|
||||
import NoItems from '@/components/blocks/NoItems.vue'
|
||||
import { formatJalaaliDate } from '@/utils/date-utils'
|
||||
import MessageAttachments from '@/components/blocks/MessageAttachments.vue'
|
||||
import SkeletonLoaderBlock from '@/components/blocks/SkeletonLoaderBlock.vue'
|
||||
import {
|
||||
studentTicketsKeys,
|
||||
@@ -81,6 +93,8 @@ const { data: ticket, isLoading } = useStudentTicketQuery(ticketId, {
|
||||
|
||||
const messages = computed(() => ticket.value?.messages ?? [])
|
||||
|
||||
const ticketMedia = computed(() => ticket.value?.media ?? [])
|
||||
|
||||
const ticketDate = computed(() => formatJalaaliDate(ticket.value?.createdAt) || '—')
|
||||
|
||||
// Student viewing their own ticket — their own messages get the highlighted
|
||||
|
||||
Reference in New Issue
Block a user