Files
nobat724_front/.claude/prompt/currency-toman-display-front.md

6.2 KiB
Raw Permalink Blame History

واحد پول = تومان در سایت عمومی (نمایش ÷۱۰ / ورودی ×۱۰) — API ریال می‌ماند

پروژه

nobat724_front (سایت عمومی). cross-repo: پرامپت همتا (ادمین): clinicpro/.claude/prompt/currency-toman-display-admin.md. API بک‌اند (clinicpro) واحدش ریال است و تغییر نمی‌کند؛ فیلدهای *_rials ریال برمی‌گردانند.

زمینه

واحد نمایشِ سایت باید تومان باشد، اما API همهٔ مبالغ را ریال می‌دهد و می‌گیرد (appointment_fee_rials، amount_rials، …) و ارسال به درگاه هم ریال است (بک‌اند مدیریت می‌کند). پس فقط باید در UI مقدار ریال ÷۱۰ و با «تومان» نشان داده شود، و اگر جایی مبلغ از کاربر گرفته می‌شود ×۱۰ به ریال تبدیل شود.

الان ناهماهنگ است: بعضی جاها عددِ *_rials خام با برچسب «ریال» نمایش داده می‌شود (paying, transactions, payment result, dashboard balance) و یک‌جا (app/dashboard/page.js) دستی /10 شده. باید یکدست شود.

مشکل / هدف

همهٔ مبالغِ نمایشی در سایت به تومان (÷۱۰ از مقدار ریالِ API) با برچسب «تومان» نشان داده شوند؛ منطق پرداخت/ارسال به درگاه (سمت بک‌اند، ریال) دست نخورد.

فایل‌های مرتبط

فایل نقش
nobat724_front/lib/money.js جدید — helper تبدیل/فرمت مرکزی
nobat724_front/components/appointment/paying/index.js مبلغ نوبت + دکمهٔ پرداخت (ریال→تومان)
nobat724_front/components/dashboard/userAccount/sidebars/transactions/Card.js مبلغ تراکنش
nobat724_front/components/dashboard/userAccount/sidebars/transactions/List.js مبلغ تراکنش
nobat724_front/components/dashboard/userAccount/Head.js برچسب/موجودی
nobat724_front/app/payment/[uuid]/page.js مبلغ نتیجهٔ پرداخت
nobat724_front/app/dashboard/page.js جمع تراکنش‌ها (حذف /10 دستی، استفاده از helper)

با grep -rn "ریال\|amount_rials\|_rials\|toLocaleString" components app بقیهٔ نقاط مبلغ را هم پیدا و یکدست کن.

وضعیت فعلی

components/appointment/paying/index.js

setFeeRials(Number(res?.data?.appointment_fee_rials) || 0);
// ...
const rials = feeRials != null ? feeRials.toLocaleString("fa-IR") : "—";
// ...
{rials} <span className="...">ریال</span>
// ...
{testMode ? "پرداخت آزمایشی" : `پرداخت ${rials} ریال`}

مقدارِ ریالِ خام را با «ریال» نشان می‌دهد (باید تومان).

app/dashboard/page.js (تبدیل دستی ناهماهنگ)

const totalTransactions = Math.round(totalRials / 10); // ریال → تومان

app/payment/[uuid]/page.js

{formatAmount(payment.amount_rials)} ریال

وظایف

۱. helper مرکزی lib/money.js

export const RIAL_PER_TOMAN = 10;
export const rialToToman = (rial) => Math.round((Number(rial) || 0) / RIAL_PER_TOMAN);
export const tomanToRial = (toman) => Math.round((Number(toman) || 0) * RIAL_PER_TOMAN);
// فرمت فارسیِ مبلغِ تومان از مقدار ریالِ API
export const formatToman = (rial) => rialToToman(rial).toLocaleString("fa-IR");

۲. paying/index.js

  • نمایش مبلغ: const toman = feeRials != null ? formatToman(feeRials) : "—";
  • جای «ریال» → «تومان»؛ دکمه: پرداخت ${toman} تومان.
  • feeRials را همچنان از appointment_fee_rials بگیر (ریال)؛ فقط نمایش تبدیل شود. مبلغی که برای شروع پرداخت به بک‌اند/درگاه می‌رود تغییر نکند (بک‌اند ریال می‌فرستد).

۳. تراکنش‌ها و موجودی داشبورد

  • transactions/Card.js و List.js: Number(data.amount_rials) خام + «ریال» → formatToman(data.amount_rials) + «تومان».
  • userAccount/Head.js: موجودی/برچسب «ریال» → تومان (اگر عددی خام کنارش هست با formatToman).
  • app/dashboard/page.js: به‌جای Math.round(totalRials/10) از rialToToman(totalRials) استفاده کن (همان نتیجه، یکدست).

۴. صفحهٔ نتیجهٔ پرداخت

  • app/payment/[uuid]/page.js: {formatAmount(payment.amount_rials)} ریال{formatToman(payment.amount_rials)} تومان (یا formatAmount را با rialToToman هماهنگ کن؛ اگر formatAmount جای دیگری هم استفاده می‌شود، دوباره‌تبدیل نشود).

۵. جستجوی باقی‌ماندهٔ «ریال»

grep -rn "ریال" components app → هر مبلغِ خام ریال را formatToman + «تومان» کن. برچسب‌های ثابت «ریال» به «تومان».

نکات مهم

  • API/درگاه ریال می‌ماند: هیچ فراخوانی services/response.js و هیچ مقدارِ ارسالی به بک‌اند تغییر نمی‌کند؛ فقط نمایش. مبلغ پرداخت را بک‌اند (ریال) مدیریت می‌کند.
  • ورودی پول (اگر هست): اگر جایی کاربر مبلغ وارد می‌کند که به API می‌رود، با tomanToRial به ریال تبدیل کن (در این سایت معمولاً ورودی پول نیست؛ بیشتر نمایش است).
  • double-convert نکن: جایی که قبلاً /10 شده (dashboard/page.js) را با helper جایگزین کن، نه اضافه.
  • RTL/فونت/Jalali مثل قبل؛ فقط عدد و برچسب واحد عوض می‌شود.
  • تست: npm run lint و npm run build بدون خطا؛ سپس چشمی صفحهٔ پرداخت نوبت، داشبورد تراکنش‌ها، و نتیجهٔ پرداخت — اعداد باید ۱۰ برابر کوچک‌تر و با «تومان» باشند.