From 1d338503c8f649df18362704930ad933118a934b Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Thu, 30 Jul 2026 10:30:39 +0330 Subject: [PATCH] feat: enhance StaffPage modals and form fields with improved layout and error handling --- assets/admin/pages/StaffPage.tsx | 173 +++++++++++++++++++++---------- assets/admin/styles.css | 3 + 2 files changed, 121 insertions(+), 55 deletions(-) diff --git a/assets/admin/pages/StaffPage.tsx b/assets/admin/pages/StaffPage.tsx index bf3c0c70..be0e27aa 100644 --- a/assets/admin/pages/StaffPage.tsx +++ b/assets/admin/pages/StaffPage.tsx @@ -235,32 +235,47 @@ export default function StaffPage() { {/* Modal ایجاد */} - setCreateOpen(false)} title="افزودن پرسنل جدید"> -
createMutation.mutate(d))}> - -
- + - -
+ + } + > + createMutation.mutate(d))}> +
{/* Modal ویرایش */} - setEditTarget(null)} title="ویرایش پرسنل"> + setEditTarget(null)} + title={editTarget ? `ویرایش — ${editTarget.full_name}` : 'ویرایش پرسنل'} + size="lg" + footer={ + <> + + + + } + >
editTarget && editMutation.mutate({ uuid: editTarget.uuid, body: d }) )} > - -
- - -
+
@@ -278,46 +293,94 @@ export default function StaffPage() { ); } -function StaffFormFields({ form }: { form: ReturnType> }) { - const { register, formState: { errors } } = form; - return ( -
-
-
- - - {errors.full_name && {errors.full_name.message}} -
-
- - -
-
-
-
- - - {errors.phone && {errors.phone.message}} -
-
- - -
-
-
- - -
+const Required = () => *; -
- - - {errors.password && {errors.password.message}} -
- برای هر پرسنل حساب کاربری ساخته می‌شود: با همین شماره موبایل وارد پنل می‌شود و فقط - داشبورد و سرویس‌های خودش را می‌بیند. -
+/** تیتر یک بخش از فرم — همان الگوی سایر فرم‌های چندبخشی پنل. */ +function FormSection({ title, hint, children }: { title: string; hint?: string; children: React.ReactNode }) { + return ( +
+
+

{title}

+ {hint && {hint}}
-
+ {children} + + ); +} + +function StaffFormFields({ form, mode }: { form: ReturnType>; mode: 'create' | 'edit' }) { + const { register, formState: { errors } } = form; + + return ( + <> + +
+
+ + + {errors.full_name &&

{errors.full_name.message}

} +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+

+ پرسنل با همین شمارهٔ موبایل وارد پنل می‌شود و فقط داشبورد و سرویس‌های خودش را می‌بیند. +

+
+
+ + + {errors.phone &&

{errors.phone.message}

} +
+
+ + + {errors.password + ?

{errors.password.message}

+ :

+ {mode === 'edit' + ? 'برای تغییر رمز، مقدار جدید را وارد کنید.' + : 'خالی بگذارید تا پرسنل خودش با «فراموشی رمز» تعیین کند.'} +

} +
+
+
+
+ ); } diff --git a/assets/admin/styles.css b/assets/admin/styles.css index 971e17b4..fc14afe7 100644 --- a/assets/admin/styles.css +++ b/assets/admin/styles.css @@ -579,6 +579,9 @@ body { /* field-label utility */ .field-label { display: block; font-size: 12.5px; font-weight: 600; color: var(--text-2); margin-bottom: 5px; } +/* پیام خطای اعتبارسنجی زیر ورودی — هر دو نام در صفحات موجود استفاده شده‌اند */ +.err-text, .field-error { display: block; font-size: 11.5px; font-weight: 600; color: var(--danger); } + /* ── Buttons ─────────────────────────────────────────────────── */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px;