diff --git a/src/views/classes/ClassFormView.vue b/src/views/classes/ClassFormView.vue
index d66d2d2..6ce82ca 100644
--- a/src/views/classes/ClassFormView.vue
+++ b/src/views/classes/ClassFormView.vue
@@ -39,7 +39,7 @@
@@ -508,10 +508,15 @@ const fetchData = async () => {
if (pResult.status === 'fulfilled') {
const pRes = pResult.value;
const pData = pRes.data || pRes;
- professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => ({
- ...p,
- name: `${p.name || ''} ${p.surname || ''}`.trim()
- }));
+ professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => {
+ const fullName = p.fullName || `${p.name || ''} ${p.surname || ''}`.trim() || p.user?.name || 'استاد';
+ return {
+ ...p,
+ _id: p._id || p.id,
+ name: fullName,
+ displayName: `${fullName}${p.phoneNumber ? ` (${p.phoneNumber})` : ''}`
+ };
+ });
}
if (uResult.status === 'fulfilled') {
@@ -523,10 +528,24 @@ const fetchData = async () => {
if (classId) {
const res = await classApi.getOne(classId);
const data = res.data || res;
+ const profId = data.professor?._id || data.professor?.id || (typeof data.professor === 'string' ? data.professor : null);
+
+ if (data.professor && typeof data.professor === 'object' && profId) {
+ const profFullName = data.professor.fullName || `${data.professor.name || ''} ${data.professor.surname || ''}`.trim() || data.professor.user?.name || 'استاد';
+ if (!professors.value.some((p) => String(p._id) === String(profId))) {
+ professors.value.push({
+ ...data.professor,
+ _id: profId,
+ name: profFullName,
+ displayName: `${profFullName}${data.professor.phoneNumber ? ` (${data.professor.phoneNumber})` : ''}`
+ });
+ }
+ }
+
Object.assign(form, {
name: data.name || '',
course: data.course?._id || data.course || null,
- professor: data.professor?._id || data.professor || null,
+ professor: profId,
capacity: data.capacity || 20,
tuitionFee: data.tuitionFee || 0,
hasDiscount: Boolean(data.hasDiscount),
diff --git a/src/views/sessions/SessionFormView.vue b/src/views/sessions/SessionFormView.vue
index 32dec7d..e07b83d 100644
--- a/src/views/sessions/SessionFormView.vue
+++ b/src/views/sessions/SessionFormView.vue
@@ -41,7 +41,7 @@
-
+
@@ -182,21 +182,40 @@ const fetchData = async () => {
if (pResult.status === 'fulfilled') {
const pRes = pResult.value;
const pData = pRes.data || pRes;
- professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => ({
- ...p,
- name: `${p.name || ''} ${p.surname || ''}`.trim()
- }));
+ professors.value = (Array.isArray(pData) ? pData : (pData.items || pData.professors || pData.data || [])).map((p) => {
+ const fullName = p.fullName || `${p.name || ''} ${p.surname || ''}`.trim() || p.user?.name || 'استاد';
+ return {
+ ...p,
+ _id: p._id || p.id,
+ name: fullName,
+ displayName: `${fullName}${p.phoneNumber ? ` (${p.phoneNumber})` : ''}`
+ };
+ });
}
if (sessionId) {
const res = await sessionApi.getOne(sessionId);
const data = res.data || res;
const courseId = data.course?._id || data.course || null;
+ const profId = data.professor?._id || data.professor?.id || (typeof data.professor === 'string' ? data.professor : null);
+
+ if (data.professor && typeof data.professor === 'object' && profId) {
+ const profFullName = data.professor.fullName || `${data.professor.name || ''} ${data.professor.surname || ''}`.trim() || data.professor.user?.name || 'استاد';
+ if (!professors.value.some((p) => String(p._id) === String(profId))) {
+ professors.value.push({
+ ...data.professor,
+ _id: profId,
+ name: profFullName,
+ displayName: `${profFullName}${data.professor.phoneNumber ? ` (${data.professor.phoneNumber})` : ''}`
+ });
+ }
+ }
+
await loadClasses(courseId);
Object.assign(form, {
course: courseId,
class: data.class?._id || data.class || null,
- professor: data.professor?._id || data.professor || null,
+ professor: profId,
day: toJalaliPickerValue(data.day || data.date) || getTodayJalali(),
startTime: data.startTime || '19:00',
endTime: data.endTime || '20:30',
diff --git a/src/views/settings/SettingsView.vue b/src/views/settings/SettingsView.vue
index bf4e31b..e3a9854 100644
--- a/src/views/settings/SettingsView.vue
+++ b/src/views/settings/SettingsView.vue
@@ -876,6 +876,7 @@ const saveBypassItem = async () => {
});
}
+ smsBypassNumbers.value = list;
const res = await settingsApi.save({ smsBypassNumbers: list });
applySettings(res);
showSuccess(isEditingBypass.value ? 'شماره مجاز با موفقیت ویرایش شد' : 'شماره مجاز جدید اضافه شد');
@@ -891,6 +892,7 @@ const toggleBypassStatus = async (item, index) => {
try {
const list = [...smsBypassNumbers.value];
list[index] = { ...list[index], isActive: !list[index].isActive };
+ smsBypassNumbers.value = list;
const res = await settingsApi.save({ smsBypassNumbers: list });
applySettings(res);
showSuccess(`وضعیت شماره ${item.phoneNumber} بهروزرسانی شد`);
@@ -911,6 +913,7 @@ const deleteBypassItem = (index) => {
accept: async () => {
try {
const list = smsBypassNumbers.value.filter((_, i) => i !== index);
+ smsBypassNumbers.value = list;
const res = await settingsApi.save({ smsBypassNumbers: list });
applySettings(res);
showSuccess('شماره با موفقیت از لیست مجاز حذف شد');
@@ -941,7 +944,8 @@ const saveMessaging = async () => {
smsEnabled: Boolean(messagingForm.value.smsEnabled),
emailEnabled: Boolean(messagingForm.value.emailEnabled),
botEnabled: Boolean(messagingForm.value.botEnabled)
- }
+ },
+ smsBypassNumbers: smsBypassNumbers.value
});
applySettings(response);
showSuccess('تنظیمات کانالهای اطلاعرسانی با موفقیت ذخیره شد.');