feat: improve bill flow, user columns, and admin notes UI

Select class before user when creating bills, fix national ID and registered classes display, remove course ratings, fix notification badge, and show Persian datetime in the topbar.
This commit is contained in:
2026-08-15 02:39:10 +03:30
parent 6b5549019c
commit b8e206caab
9 changed files with 228 additions and 38 deletions
+11 -3
View File
@@ -55,6 +55,10 @@
<label class="font-semibold text-sm">کلاس فعال است</label>
</div>
<div class="col-12">
<AdminNotesField v-model="form.adminNotes" />
</div>
<div class="col-12 flex justify-content-end gap-2 mt-4 pt-3 border-top-1 border-color">
<Button label="انصراف" text severity="secondary" @click="goBack" />
<Button type="submit" :label="$t('app.save')" icon="pi pi-check" :loading="isSubmitting" />
@@ -129,6 +133,7 @@ import { userApi } from '@/api/userApi';
import { usePersianDate } from '@/composables/usePersianDate';
import { useToast } from '@/composables/useToast';
import PageHeader from '@/components/common/PageHeader.vue';
import AdminNotesField from '@/components/common/AdminNotesField.vue';
import ClassSessionsSection from '@/components/classes/ClassSessionsSection.vue';
import InputText from 'primevue/inputtext';
import InputNumber from 'primevue/inputnumber';
@@ -167,7 +172,8 @@ const form = reactive({
tuitionFee: 0,
startDate: '',
endDate: '',
isActive: true
isActive: true,
adminNotes: []
});
const availableUsers = computed(() => {
@@ -242,7 +248,8 @@ const fetchData = async () => {
tuitionFee: data.tuitionFee || 0,
startDate: toJalaliDisplay(data.startDate),
endDate: toJalaliDisplay(data.endDate),
isActive: data.isActive !== false
isActive: data.isActive !== false,
adminNotes: Array.isArray(data.adminNotes) ? [...data.adminNotes] : []
});
students.value = data.students || [];
if (data.course?.sectionCount) defaultSessionCount.value = data.course.sectionCount;
@@ -277,7 +284,8 @@ const handleSubmit = async () => {
tuitionFee: form.tuitionFee,
startDate: toGregorianIso(form.startDate),
endDate: toGregorianIso(form.endDate),
isActive: form.isActive
isActive: form.isActive,
adminNotes: (form.adminNotes || []).map((n) => String(n).trim()).filter(Boolean)
};
if (isEditMode.value) {
await classApi.update(classId, payload);