diff --git a/index.html b/index.html index 50d0df9..c17bf2a 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Banu + مدرسه بانو
diff --git a/src/assets/styles/_reset.scss b/src/assets/styles/_reset.scss index 0fbc321..9e2f1d1 100644 --- a/src/assets/styles/_reset.scss +++ b/src/assets/styles/_reset.scss @@ -4,6 +4,10 @@ box-sizing: border-box; } +html { + font-size: 106.25%; +} + body { margin: 0 !important; padding: 0 !important; diff --git a/src/assets/styles/_typography.scss b/src/assets/styles/_typography.scss index ffbdf7e..7fff996 100644 --- a/src/assets/styles/_typography.scss +++ b/src/assets/styles/_typography.scss @@ -1,6 +1,6 @@ @font-face { font-family: montserrat; - src: url('../fonts/montserrat/Montserrat-ExtraLight.ttf') format('truetype'); + src: url('../fonts/montserrat/Montserrat-Regular.ttf') format('truetype'); font-weight: 200; font-style: normal; font-display: swap; @@ -16,8 +16,8 @@ @font-face { font-family: aria; - src: url('../fonts/aria/AriaWebFaNum-Light.woff2') format('woff2'); - font-weight: 300; + src: url('../fonts/aria/AriaWeb-Normal.woff2') format('woff2'); + font-weight: 200; font-style: normal; font-display: swap; } @@ -25,7 +25,7 @@ @font-face { font-family: aria; src: url('../fonts/aria/AriaWebFaNum-Regular.woff2') format('woff2'); - font-weight: 400; + font-weight: 300; font-style: normal; font-display: swap; } @@ -33,6 +33,14 @@ @font-face { font-family: aria; src: url('../fonts/aria/AriaWebFaNum-Medium.woff2') format('woff2'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: aria; + src: url('../fonts/aria/AriaWebFaNum-SemiBold.woff2') format('woff2'); font-weight: 500; font-style: normal; font-display: swap; @@ -46,25 +54,17 @@ font-display: swap; } -@font-face { - font-family: aria; - src: url('../fonts/aria/AriaWeb-Normal.woff2') format('woff2'); - font-weight: 400; - font-style: normal; - font-display: swap; -} - -@font-face { - font-family: iran-yekan; - src: url('../fonts/iran-yekan/iranyekanwebregularfanum.woff') format('woff'); - font-weight: 400; - font-style: normal; - font-display: swap; -} - @font-face { font-family: iran-yekan; src: url('../fonts/iran-yekan/iranyekanwebmediumfanum.woff') format('woff'); + font-weight: 400; + font-style: normal; + font-display: swap; +} + +@font-face { + font-family: iran-yekan; + src: url('../fonts/iran-yekan/iranyekanwebboldfanum.woff') format('woff'); font-weight: 500; font-style: normal; font-display: swap; @@ -80,7 +80,7 @@ @font-face { font-family: iran-yekan; - src: url('../fonts/iran-yekan/iranyekanweblightfanum.woff') format('woff'); + src: url('../fonts/iran-yekan/iranyekanwebregularfanum.woff') format('woff'); font-weight: 300; font-style: normal; font-display: swap; diff --git a/src/components/form/ImageCropper.vue b/src/components/form/ImageCropper.vue index 049cf3d..f5a30e3 100644 --- a/src/components/form/ImageCropper.vue +++ b/src/components/form/ImageCropper.vue @@ -94,10 +94,10 @@ const props = defineProps({ name: { type: String, default: '' }, vibration: { type: Boolean, default: false }, bgColor: { type: String, default: '#f3f4f6' }, - maxSize: { type: Number, default: 250 * 1024 }, + maxSize: { type: Number, default: 5 * 1024 * 1024 }, helperText: { type: String, - default: 'سایز تصویر رسمی 3x4 و حجم تصویر بیشتر از 250 کیلو بایت نباشد.', + default: 'سایز تصویر رسمی 3x4 و حجم تصویر بیشتر از 5 مگابایت نباشد.', }, helperIcon: { type: String, default: 'warning' }, error: { type: String, default: '' }, @@ -144,7 +144,7 @@ const onFileChange = (event) => { if (!file) return if (props.maxSize > 0 && file.size > props.maxSize) { - emit('error', 'حجم تصویر نباید بیشتر از ۲۵۰ کیلوبایت باشد.') + emit('error', 'حجم تصویر نباید بیشتر از ۵ مگابایت باشد.') event.target.value = null return } diff --git a/src/constants/fields.js b/src/constants/fields.js index 5e1b860..ad6d1d1 100644 --- a/src/constants/fields.js +++ b/src/constants/fields.js @@ -15,6 +15,10 @@ export const fields = { lastName: 'نام خانوادگی', nationalCode: 'کد ملی', postalCode: 'کد پستی', + virtualPhoneNumber: 'شماره تلفن مجازی', + seminaryCode: 'کد حوزوی', + seminaryServiceCenterCode: 'کد مرکز خدمات حوزه', + childrenCount: 'تعداد فرزند', birthDate: 'تاریخ تولد', birthday: 'تاریخ تولد', @@ -75,7 +79,6 @@ export const fields = { seminaryLevel: 'مقطع حوزه', universityLevel: 'مقطع دانشگاهی', universityName: 'نام حوزه علمیه / دانشگاه', - workExperienceSummary: 'خلاصهٔ سوابق شغلی', hijabApproach: 'رویکرد حجاب', prerequisites: 'پیش‌نیازها', diff --git a/src/enums/index.js b/src/enums/index.js index cd8ad6f..6e33b8c 100644 --- a/src/enums/index.js +++ b/src/enums/index.js @@ -53,8 +53,6 @@ export const USER_STATUS = Object.freeze({ export const MARITAL_STATUS = Object.freeze({ single: 'مجرد', married: 'متاهل', - divorced: 'مطلقه', - widowed: 'بیوه', }) export const GENDER = Object.freeze({ @@ -68,7 +66,6 @@ export const CHANGEABLE_ROLES = Object.freeze(ROLES.filter((r) => r.changeable). export const EDUCATION_STATUS = Object.freeze({ seminary_student: 'طلبه', - seminary_and_university_student: 'طلبه و دانشجو', graduate: 'فارغ التحصیلی', }) @@ -76,7 +73,6 @@ export const SEMINARY_LEVEL = Object.freeze({ level_2: 'سطح دو', level_3: 'سطح سه', level_4: 'سطح چهار', - not_applicable: 'طلبه نیستم', }) export const UNIVERSITY_LEVEL = Object.freeze({ diff --git a/src/features/admin/pages/AdminDashboardPage.vue b/src/features/admin/pages/AdminDashboardPage.vue index d27d0ee..df427bd 100644 --- a/src/features/admin/pages/AdminDashboardPage.vue +++ b/src/features/admin/pages/AdminDashboardPage.vue @@ -1,9 +1,9 @@ diff --git a/src/features/auth/components/VerifyCodeForm.vue b/src/features/auth/components/VerifyCodeForm.vue index 67e9b8a..b07dab5 100644 --- a/src/features/auth/components/VerifyCodeForm.vue +++ b/src/features/auth/components/VerifyCodeForm.vue @@ -144,7 +144,7 @@ const onResend = async () => { const body = { phone: props.phoneNumber } if (props.mode === 'forgotPassword') await forgotMutation.mutateAsync(body) else if (props.mode === 'loginWithCode') await requestLoginOtpMutation.mutateAsync(body) - else await resendCodeMutation.mutateAsync({ phoneNumber: props.phoneNumber }) + else await resendCodeMutation.mutateAsync(body) } diff --git a/src/features/auth/components/studentRegister/EducationalInformation.vue b/src/features/auth/components/studentRegister/EducationalInformation.vue index 5829f9f..fd8a942 100644 --- a/src/features/auth/components/studentRegister/EducationalInformation.vue +++ b/src/features/auth/components/studentRegister/EducationalInformation.vue @@ -28,7 +28,7 @@
-
- - - -
+
+ + + +
+
+ + + +
+
+ + + +
@@ -95,6 +140,36 @@ +
+ + + +
+
+ + + +
@@ -166,7 +245,12 @@ import { personalInformationSchema } from '@/features/auth/schema/student-regist import StepActions from '@/features/auth/components/studentRegister/StepActions.vue' import { useStudentRegistrationStore } from '@/features/auth/store/student-registration' import { useGetCitiesOfProvinceQuery, useGetProvincesQuery } from '@/services/query/common' -import { authKeys, useUpdateProfileMutation, useUploadMediaMutation } from '@/services/query/auth' +import { + authKeys, + useSaveRegisterDataMutation, + useUpdateProfileMutation, + useUploadMediaMutation, +} from '@/services/query/auth' const store = useStudentRegistrationStore() const { user } = useAuth() @@ -212,6 +296,11 @@ const form = ref({ cityId: user.value?.cityId || store.personal.cityId || null, address: (typeof user.value?.address === 'string' && user.value.address) || store.personal.address || '', + postalCode: store.personal.postalCode || '', + virtualPhoneNumber: store.personal.virtualPhoneNumber || '', + seminaryCode: store.personal.seminaryCode || '', + seminaryServiceCenterCode: store.personal.seminaryServiceCenterCode || '', + childrenCount: store.personal.childrenCount ?? '', avatar: initialAvatar, avatarId: store.personal.avatarId || '', }) @@ -258,6 +347,7 @@ const onAvatarCropped = async (file) => { const onAvatarError = (msg) => toast.error(msg) const updateProfileMutation = useUpdateProfileMutation() +const saveRegisterMutation = useSaveRegisterDataMutation() const onSubmit = async () => { const { isValid, payload } = await validate(form.value) @@ -280,6 +370,13 @@ const onSubmit = async () => { : {}), } await updateProfileMutation.mutateAsync(body) + await saveRegisterMutation.mutateAsync({ + postalCode: payload.postalCode, + virtualPhoneNumber: payload.virtualPhoneNumber, + seminaryCode: payload.seminaryCode, + seminaryServiceCenterCode: payload.seminaryServiceCenterCode, + childrenCount: payload.childrenCount, + }) await queryClient.invalidateQueries({ queryKey: authKeys.me() }) store.personal = { ...store.personal, ...next } store.markStepAsCompleted(STUDENT_REGISTRATION.PERSONAL_INFORMATION) diff --git a/src/features/auth/components/studentRegister/ProfessionalInformation.vue b/src/features/auth/components/studentRegister/ProfessionalInformation.vue index 8ac7178..a59d9d6 100644 --- a/src/features/auth/components/studentRegister/ProfessionalInformation.vue +++ b/src/features/auth/components/studentRegister/ProfessionalInformation.vue @@ -1,6 +1,6 @@