6.2 KiB
واحد پول = تومان در سایت عمومی (نمایش ÷۱۰ / ورودی ×۱۰) — 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بدون خطا؛ سپس چشمی صفحهٔ پرداخت نوبت، داشبورد تراکنشها، و نتیجهٔ پرداخت — اعداد باید ۱۰ برابر کوچکتر و با «تومان» باشند.