From a2a7e756ada99ce213cace804c47c12e8f15faa4 Mon Sep 17 00:00:00 2001 From: Kavehhn174 Date: Mon, 24 Aug 2026 22:53:24 +0330 Subject: [PATCH] feat(users,professors): add student-to-professor promotion dialog, complete student profile view and charts --- src/api/professorApi.js | 1 + src/api/userApi.js | 2 + .../professors/AddProfessorFromUserDialog.vue | 257 ++++++ .../users/charts/StudentAttendanceChart.vue | 91 ++ .../charts/StudentPaymentStatusChart.vue | 86 ++ .../charts/StudentPaymentTimelineChart.vue | 88 ++ src/views/professors/ProfessorListView.vue | 20 +- src/views/users/UserDetailView.vue | 804 ++++++++++++++---- src/views/users/UserListView.vue | 124 ++- 9 files changed, 1302 insertions(+), 171 deletions(-) create mode 100644 src/components/professors/AddProfessorFromUserDialog.vue create mode 100644 src/components/users/charts/StudentAttendanceChart.vue create mode 100644 src/components/users/charts/StudentPaymentStatusChart.vue create mode 100644 src/components/users/charts/StudentPaymentTimelineChart.vue diff --git a/src/api/professorApi.js b/src/api/professorApi.js index fdd4eda..90328a4 100644 --- a/src/api/professorApi.js +++ b/src/api/professorApi.js @@ -6,6 +6,7 @@ export const professorApi = { search: (params) => axiosInstance.get('/professors/admin/search', { params }), getOne: (id) => axiosInstance.get(`/professors/admin/get-one/${id}`), create: (data) => axiosInstance.post('/professors/admin/create', data), + createFromUser: (data) => axiosInstance.post('/professors/admin/create-from-user', data), update: (id, data) => axiosInstance.put(`/professors/admin/update/${id}`, data), delete: (id) => axiosInstance.delete(`/professors/admin/delete/${id}`) }; diff --git a/src/api/userApi.js b/src/api/userApi.js index aaacdf3..eee33bb 100644 --- a/src/api/userApi.js +++ b/src/api/userApi.js @@ -5,8 +5,10 @@ export const userApi = { getAll: (params) => axiosInstance.get('/users/admin/get-all', { params }), search: (params) => axiosInstance.get('/users/admin/search', { params }), getOne: (id) => axiosInstance.get(`/users/admin/get-one/${id}`), + getFullProfile: (id) => axiosInstance.get(`/users/admin/${id}/full-profile`), create: (data) => axiosInstance.post('/users/admin/create', data), update: (id, data) => axiosInstance.put(`/users/admin/update/${id}`, data), + promoteToProfessor: (id, data) => axiosInstance.post(`/users/admin/${id}/promote-to-professor`, data), resetPasswordAndSms: (id) => axiosInstance.post( `/users/admin/${id}/reset-password-sms`, {}, diff --git a/src/components/professors/AddProfessorFromUserDialog.vue b/src/components/professors/AddProfessorFromUserDialog.vue new file mode 100644 index 0000000..06ec428 --- /dev/null +++ b/src/components/professors/AddProfessorFromUserDialog.vue @@ -0,0 +1,257 @@ + +