diff --git a/src/api/professorApi.js b/src/api/professorApi.js new file mode 100644 index 0000000..cef628b --- /dev/null +++ b/src/api/professorApi.js @@ -0,0 +1,6 @@ +// /src/api/professorApi.js +import axiosInstance from './axiosInstance' + +export const professorApi = { + getPortal: () => axiosInstance.get('/professors/portal') +} diff --git a/src/layouts/AccountLayout.vue b/src/layouts/AccountLayout.vue index 27f4e38..4492f86 100644 --- a/src/layouts/AccountLayout.vue +++ b/src/layouts/AccountLayout.vue @@ -12,6 +12,10 @@ @@ -121,6 +125,26 @@ nav { color: var(--leaf); } +.professor-link { + display: flex; + align-items: center; + gap: 0.5rem; + background: rgba(232, 163, 23, 0.08); + border: 1px solid rgba(232, 163, 23, 0.25); + color: var(--ink); +} + +.professor-link:hover, +.professor-link.router-link-active { + background: linear-gradient(135deg, rgba(232, 163, 23, 0.2), rgba(45, 106, 79, 0.15)); + color: var(--ink); + border-color: var(--saffron); +} + +.professor-icon { + font-size: 1.1rem; +} + .logout-btn { margin-top: 1.25rem; width: 100%; diff --git a/src/router/index.js b/src/router/index.js index 677089b..02fb7d7 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -43,6 +43,12 @@ const routes = [ component: () => import('@/views/account/AccountHomeView.vue'), meta: { title: 'پنل کاربری | گام نو' } }, + { + path: 'teaching', + name: 'professor-portal', + component: () => import('@/views/account/ProfessorPortalView.vue'), + meta: { title: 'میزکار اساتید و تدریس | گام نو' } + }, { path: 'classes', name: 'my-classes', diff --git a/src/stores/authStore.js b/src/stores/authStore.js index a44d631..76a5164 100644 --- a/src/stores/authStore.js +++ b/src/stores/authStore.js @@ -13,6 +13,10 @@ export const useAuthStore = defineStore('auth', () => { if (!user.value) return '' return `${user.value.name || ''}`.trim() }) + const isProfessor = computed(() => { + const roleName = user.value?.role?.name || user.value?.role + return roleName === 'Professor' || user.value?.isProfessor === true + }) function setTokens(access, refresh) { accessToken.value = access @@ -71,6 +75,7 @@ export const useAuthStore = defineStore('auth', () => { user, isAuthenticated, fullName, + isProfessor, setTokens, setUser, login, diff --git a/src/views/account/AccountHomeView.vue b/src/views/account/AccountHomeView.vue index 49e6ca2..951ce64 100644 --- a/src/views/account/AccountHomeView.vue +++ b/src/views/account/AccountHomeView.vue @@ -5,6 +5,17 @@
کلاسهای ثبتشده و گواهینامههایتان را از اینجا مدیریت کنید.
+ +حساب کاربری شما نقش استاد ندارد. این بخش مخصوص اساتید محترم مؤسسه آموزشی گام نو جهت مشاهده کلاسها، زمانبندی و گزارش سهم تدریس میباشد.
++ {{ portalData?.professor?.title || 'مدرس دورههای آموزشی مؤسسه گام نو' }} + + {{ toPersianDigits(portalData.professor.phoneNumber) }} + +
+در حال دریافت اطلاعات و محاسبات کارکرد استاد...
+{{ error }}
+ +در حال حاضر کلاسی به شما تخصیص داده نشده است.
+دادههای زمانی کافی برای رسم نمودار موجود نیست.
+فرمول محاسبه سهم طبق قرارداد ثبتشده برای هر کلاس محاسبه گردیده است.
+| کلاس / دوره | +مدل محاسبه | +دانشجویان | +جلسات برگزارشده | +درآمد ناخالص کلاس | +هزینه ثابت جلسات | +سهم خالص استاد | +
|---|---|---|---|---|---|---|
|
+
+ {{ cls.name }}
+ {{ cls.courseTitle }}
+
+ |
+ + + ساعتی ({{ formatPrice(cls.payoutHourlyRate) }}/ساعت) + + + درصدی ({{ toPersianDigits(cls.payoutPercentage) }}٪) + + | +{{ toPersianDigits(cls.studentsCount) }} نفر | +{{ toPersianDigits(cls.heldSessionsCount) }} از {{ toPersianDigits(cls.numberOfSessions || cls.sessionsCount || 0) }} | +{{ formatPrice(cls.actualRevenue || cls.tuitionTotal || 0) }} | +{{ formatPrice((cls.extraExpensePerSession || 0) * (cls.heldSessionsCount || 0)) }} | +{{ formatPrice(cls.professorPayout) }} | +
| مجموع کل کارکرد و سهم تدریس شما: | +{{ formatPrice(summary.totalEarnings) }} | +|||||
جلسه برنامهریزیشدهای در روزهای آینده ثبت نشده است.
+لیست تمامی دانشجویانی که در کلاسهای شما عضو هستند
+| # | +نام دانشجو | +شماره تماس | +کد ملی | +کلاس مربوطه | +دوره آموزشی | +
|---|---|---|---|---|---|
| {{ toPersianDigits(idx + 1) }} | +{{ std.name }} | +{{ toPersianDigits(std.phoneNumber || '—') }} | +{{ toPersianDigits(std.nationalIdCode || '—') }} | +{{ std.className }} | +{{ std.courseTitle }} | +
| دانشجویی مطابق جستجو یافت نشد. | +|||||