Single-customer and row sync preview balances with documents before overwrite/keep; bulk sync keeps confirm. Also ship Zarin wallet sync actions, field help, and get_user cache improvements. Co-authored-by: Cursor <cursoragent@cursor.com>
290 lines
22 KiB
TypeScript
290 lines
22 KiB
TypeScript
/** توضیحات ساده فارسی برای فرمهای ادمین — قابل فهم بدون دانش فنی */
|
|
|
|
import { adminHelp } from '@/utils/adminHelpFormat'
|
|
|
|
export const bannersPageIntro =
|
|
'بنرها همان تصاویر اسلایدر بالای صفحهٔ اصلی اپ مشتری هستند. هر کارت = یک اسلاید. بعد از هر تغییر حتماً «ذخیره تغییرات» را بزنید؛ تا آن لحظه در اپ دیده نمیشود.'
|
|
|
|
export const bannersShowHelp =
|
|
'روشن = این بنر در اپ مشتری نشان داده میشود. خاموش = موقتاً مخفی میشود (حذف نمیشود).'
|
|
|
|
export const bannersAspectHelp =
|
|
'عکس باید افقی و با نسبت ۱۶:۹ باشد (مثل تصویر تلویزیون). اگر بلند و باریک یا مربع باشد، در اپ کشیده یا بریده میشود.'
|
|
|
|
export const bannersImageHelp =
|
|
'روی «افزودن عکس» بزنید. آیکون سطل زباله فقط تصویر را پاک میکند؛ برای حذف کل اسلاید از دکمهٔ «حذف اسلاید» استفاده کنید.'
|
|
|
|
export const bannersImageSectionHelp =
|
|
'عکس افقی با نسبت ۱۶:۹ (مثل تلویزیون) بهترین نتیجه را میدهد. تصویر نامناسب در اپ کشیده یا بریده میشود.'
|
|
|
|
export const bannersEventHelp =
|
|
'وقتی مشتری روی بنر ضربه میزند چه اتفاقی بیفتد؟ اگر مطمئن نیستید «بدون رویداد» را بگذارید.'
|
|
|
|
export const bannersLinkHelp =
|
|
'آدرس کامل صفحهای که باید باز شود. مثال: https://example.com یا tel:02112345678'
|
|
|
|
export const bannersModalHelp =
|
|
'متنی که داخل خود اپ به مشتری نشان داده میشود. میتوانید بولد، لیست و لینک هم بگذارید.'
|
|
|
|
export const bannersShareHelp =
|
|
'با انتخاب این گزینه، منوی اشتراکگذاری گوشی مشتری باز میشود (واتساپ، تلگرام و...). نیازی به پر کردن فیلد دیگر نیست.'
|
|
|
|
export const bannersNoEventHelp =
|
|
'فقط تصویر دیده میشود؛ کلیک هیچ کاری نمیکند. برای بنرهای تزئینی مناسب است.'
|
|
|
|
export const settingsProfileBannersIntro =
|
|
'تصاویر تم اپ: کارت دارایی صفحهٔ اصلی، تصویر قلک، اسلایدر بنرهای موبایل صفحهٔ محصولات، و بنرهای صفحهٔ تنظیمات. برای هر مورد دو تصویر جدا — تم روشن و تم تیره — آپلود کنید.'
|
|
|
|
export const settingsProfileBannersThemeHelp =
|
|
'تم روشن: وقتی مشتری حالت روشن را انتخاب کرده. تم تیره: وقتی حالت تیره فعال است. اگر فقط یکی را بگذارید، اپ برای دیگری از تصویر پیشفرض خودش استفاده میکند.'
|
|
|
|
export const pricingPageIntro =
|
|
'اینجا تاریخچهٔ همگامسازی قیمت را میبینید. دکمهٔ «بهروزرسانی قیمت» همان لحظه قیمت را از منبعی که در تنظیمات مشخص کردهاید میگیرد و روی محصولات اعمال میکند. اگر قیمت عوض نشده باشد پیام «تغییری نکرد» میآید.'
|
|
|
|
export const giftCardMobileHelp =
|
|
'شماره موبایلی که کارت هدیه برایش ساخته میشود. باید ۱۱ رقم و با ۰۹ شروع شود.'
|
|
|
|
export const giftCardNameHelp =
|
|
'نام مشتری فقط برای شناسایی در پنل شماست؛ روی اپ مشتری تأثیر مستقیم ندارد.'
|
|
|
|
export const giftCardUnitHelp =
|
|
'ریالی = اعتبار کیف پول (ریال). طلا = وزن طلا به گرم که به کیف مشتری واریز میشود.'
|
|
|
|
export const giftCardCountHelp =
|
|
'چند کد یکتا ساخته شود. هر کد فقط یکبار قابل استفاده است.'
|
|
|
|
export const giftCardAmountHelp =
|
|
'مقدار هر کد: اگر ریالی انتخاب کردید مبلغ به ریال؛ اگر طلا انتخاب کردید وزن به گرم.'
|
|
|
|
export const giftCardExpiryHelp =
|
|
'بعد از این تاریخ کدها دیگر قابل استفاده نیستند. تاریخ را با دقت انتخاب کنید.'
|
|
|
|
export const discountNameHelp =
|
|
'نامی که در لیست پویشهای تخفیف در پنل میبینید؛ فقط برای مدیریت داخلی است.'
|
|
|
|
export const discountPercentHelp =
|
|
'درصد تخفیف روی سفارش. مثلاً ۱۰ یعنی ده درصد کمتر از مبلغ اصلی.'
|
|
|
|
export const discountCountHelp =
|
|
'چند کد تخفیف یکتا ساخته شود. هر کد یکبار مصرف میشود.'
|
|
|
|
export const discountExpiryHelp =
|
|
'بعد از این تاریخ کدهای این پویش دیگر کار نمیکنند.'
|
|
|
|
export const priceTriggersPageIntro =
|
|
'لیست هشدارهای قیمت مشتریان. میتوانید هشدار جدید بسازید، ویرایش کنید، فعال/غیرفعال کنید یا حذف کنید. وقتی قیمت به هدف برسد، به مشتری پیامک یا ایمیل میرود و هشدار خودکار غیرفعال میشود.'
|
|
|
|
export const physicalWithdrawPageIntro =
|
|
'درخواست تحویل فیزیکی طلا یا محصول از کیف مشتری. درخواستهای ثبتشده از اپ مشتری و همینجا توسط ادمین در این لیست دیده میشوند. با ثبت درخواست، مقدار از کیف مشتری کسر میشود. در وضعیت «در انتظار ارسال» با آیکون ویرایش میتوانید مقدار را (حتی اعشاری برای آبشده) تنظیم کنید؛ با «تایید» به «ارسال شده» میرود. برای برداشت ریالی از منوی «برداشت و واریز» استفاده کنید.'
|
|
|
|
export const physicalWithdrawCustomerHelp =
|
|
'مشتریای که میخواهید برایش تحویل فیزیکی ثبت کنید. بعد از انتخاب، لیست محصولات و آدرسهای همان مشتری بارگذاری میشود.'
|
|
|
|
export const physicalWithdrawAddressHelp =
|
|
'آدرسی که محصول به آن ارسال میشود. مشتری آدرسها را در اپ خود ثبت میکند؛ اگر آدرسی ندارد، ابتدا از پنل مشتریان یا از خود مشتری بخواهید آدرس اضافه کند.'
|
|
|
|
export const physicalWithdrawProductHelp =
|
|
'محصولی که مشتری میخواهد فیزیکی تحویل بگیرد. فقط محصولاتی با موجودی بیشتر از صفر نشان داده میشوند.'
|
|
|
|
export const physicalWithdrawAmountHelp = adminHelp(
|
|
'تعداد یا مقدار درخواستی همان واحدی است که در اپ مشتری نمایش داده میشود (مثلاً تعداد سکه یا گرم).',
|
|
'مقدار درخواستی ≤ موجودی کیف مشتری'
|
|
)
|
|
|
|
export const physicalWithdrawDecreaseHelp =
|
|
'یک واحد از مقدار این خط کم میکند و همان مقدار به کیف مشتری برمیگردد. فقط وقتی وضعیت «در انتظار ارسال» است.'
|
|
|
|
export const physicalWithdrawIncreaseHelp =
|
|
'یک واحد به مقدار این خط اضافه میکند و از کیف مشتری کسر میشود. فقط وقتی وضعیت «در انتظار ارسال» است و موجودی کافی باشد.'
|
|
|
|
export const physicalWithdrawAdjustValueHelp = adminHelp(
|
|
'مقدار نهایی برداشت را وارد کنید. برای آبشده و محصولات وزنی میتوانید اعشار بزنید (مثلاً ۱.۲۵۰ گرم). برای سکه و محصولات تعدادی فقط عدد صحیح مجاز است.',
|
|
'مقدار نهایی ≤ موجودی کیف مشتری'
|
|
)
|
|
|
|
export const physicalWithdrawApproveHelp =
|
|
'درخواست را تایید میکند و وضعیت به «ارسال شده» تغییر میکند؛ یعنی آمادهٔ ارسال یا تحویل است.'
|
|
|
|
export const physicalWithdrawStatusHelp =
|
|
'پیگیری مراحل ارسال: در انتظار ارسال، ارسال شده، لغو شده، یا در انتظار تعیین مجدد قیمت (برای محصولاتی که وزن نهایی مشخص نیست).'
|
|
|
|
export const automationAudienceHelp =
|
|
'چه کسانی این پیام را بگیرند. «همه کاربران» یعنی همه مشتریان خانگی فعال. «با شرط» فقط کسانی که شرطهای زیر را دارند.'
|
|
|
|
export const automationNameHelp =
|
|
'نام داخلی برای پیدا کردن این اتوماسیون در لیست پنل؛ به مشتری نشان داده نمیشود.'
|
|
|
|
export const automationTitleHelp =
|
|
'عنوانی که همراه پیامک یا اعلان داخل اپ برای مشتری میآید.'
|
|
|
|
export const automationBodyHelp =
|
|
'متن اصلی پیام. با دکمههای زیر فیلد میتوانید %نام، %نام_کوچک و %موبایل را در محل کرسر بگذارید تا موقع ارسال با اطلاعات هر مشتری جایگزین شود. در پیامک، نام اپ (از تنظیمات name_fa) خودکار پایین متن اضافه میشود مگر از قبل در پیام باشد.'
|
|
|
|
export const automationTriggerTypeHelp =
|
|
'زماندار: طبق فاصلهٔ روزها. رویداد: وقتی اتفاقی مثل ثبتنام بیفتد. قیمت: وقتی قیمت به اندازهٔ مشخصی حرکت کند.'
|
|
|
|
export const automationEveryDaysHelp =
|
|
'هر چند روز یکبار این پیام برای مخاطبان واجد شرایط فرستاده میشود. مثلاً ۲۰ یعنی حدوداً هر ۲۰ روز یکبار برای هر نفر.'
|
|
|
|
export const automationEventHelp =
|
|
'کدام رویداد سیستم باعث شروع این اتوماسیون شود (مثلاً ثبتنام یا خرید).'
|
|
|
|
export const automationEventTimingHelp =
|
|
'سر ضرب: بلافاصله بعد از رویداد. با تأخیر: چند ساعت بعد از رویداد ارسال میشود.'
|
|
|
|
export const automationDelayHoursHelp =
|
|
'چند ساعت بعد از رویداد پیام برود. مثلاً ۲۴ یعنی یک روز بعد.'
|
|
|
|
export const automationPriceWindowHelp =
|
|
'در یک روز: تغییر قیمت از ابتدای همان روز تقویمی تا الان را میسنجد و در همان روز حداکثر یکبار میفرستد. از آخرین ارسال: پلهپله از آخرین باری که برای همان نفر فرستاده شده حساب میکند.'
|
|
|
|
export const automationPriceDirectionHelp =
|
|
'بالا = فقط وقتی قیمت بالا رفته. پایین = فقط وقتی پایین آمده. هر دو = هر دو جهت.'
|
|
|
|
export const automationPriceStepHelp =
|
|
'حداقل رقم تغییر قیمت به تومان که باید رخ دهد تا پیام برود. مثلاً ۱۰۰۰۰۰ یعنی صد هزار تومان.'
|
|
|
|
export const automationPriceProductHelp =
|
|
'اگر خالی بگذارید قیمت تابلو/مرجع کلی استفاده میشود. اگر محصول انتخاب کنید، فقط حرکت قیمت همان محصول ملاک است.'
|
|
|
|
export const automationCooldownHelp =
|
|
'حداقل فاصلهٔ ساعت بین دو ارسال موفق به یک نفر برای این اتوماسیون. جلوی اسپم شدن همان مشتری را میگیرد.'
|
|
|
|
export const automationMaxSendsHelp =
|
|
'سقف تعداد دفعاتی که این اتوماسیون میتواند به یک نفر پیام بدهد. خالی = بدون سقف.'
|
|
|
|
export const automationSmsHelp =
|
|
'روشن = ارسال پیامک. اگر ساعت انتخاب کنید، ارسال تا آن ساعت نگه داشته میشود؛ اگر خالی باشد طبق زمان تریگر میرود.'
|
|
|
|
export const automationInAppHelp =
|
|
'روشن = اعلان داخل اپ مشتری. ساعت اختیاری مثل پیامک عمل میکند.'
|
|
|
|
export const automationStartsAtHelp =
|
|
'از این تاریخ و ساعت به بعد اتوماسیون میتواند اجرا شود. خالی = از همین الان.'
|
|
|
|
export const automationEndsAtHelp =
|
|
'بعد از این تاریخ و ساعت دیگر اجرا نمیشود. خالی = بدون پایان.'
|
|
|
|
export const automationStatusHelp =
|
|
'فعال = موتور اتوماسیون این قانون را اجرا میکند. غیرفعال = ذخیره میماند ولی چیزی نمیفرستد.'
|
|
|
|
export const tradingHoursPageIntro =
|
|
'ساعت باز و بسته بودن فروشگاه و رفتار نمایش قیمت در اپ مشتری. میتوانید برای همه روزها یک ساعت بگذارید یا برای هر روز هفته جداگانه تنظیم کنید.'
|
|
|
|
export const customersPageIntro =
|
|
'لیست مشتریان ثبتشده در اپ. از اینجا میتوانید مشتری جدید بسازید، ویرایش کنید، موجودی و سفارشها را ببینید، یا مشتری را بایگانی کنید.'
|
|
|
|
export const customersArchivePageIntro =
|
|
'مشتریانی که بایگانی شدهاند اینجا هستند؛ در اپ فعال نیستند. میتوانید دوباره از بایگانی خارجشان کنید.'
|
|
|
|
export const customersOnlinePageIntro =
|
|
'مشتریانی که الان اپ را باز دارند. با بستن اپ از لیست حذف میشوند. برای جزئیات روی کارت بزنید.'
|
|
|
|
export const goldCreditPageIntro =
|
|
'اعتبار طلایی مشتریان: درخواستهای جدید و اعتبارهای فعال. از تبها بین درخواست و فعال جابهجا شوید.'
|
|
|
|
export const goldCreditInstallmentsIntro =
|
|
'اقساط مربوط به اعتبار طلایی همین مشتری. وضعیت پرداخت هر قسط را اینجا میبینید.'
|
|
|
|
export const specialPricePageIntro =
|
|
'پکیج قیمت ویژه برای گروهی از مشتریان. با پکیج میتوانید خرید/فروش را با قیمت یا کارمزد متفاوت از بقیه تنظیم کنید.'
|
|
|
|
export const productsPageIntro =
|
|
'محصولات قابل معامله در اپ. افزودن، ویرایش، قیمتگذاری، موجودی و بایگانی از همینجا انجام میشود.'
|
|
|
|
export const productsCategoriesPageIntro =
|
|
'دستهبندی محصولات برای فیلتر تبهای اپ. ترتیب را با کشیدن عوض کنید؛ «همگامسازی از محصولات» دستههای گمشده را از روی محصولات میسازد.'
|
|
|
|
export const ordersPageIntro =
|
|
'سفارشهای خرید و فروش مشتریان. میتوانید سفارش جدید ثبت کنید یا جزئیات و وضعیت هر سفارش را ببینید.'
|
|
|
|
export const conditionalOrdersPageIntro =
|
|
'سفارش شرطی: وقتی قیمت به هدف برسد سیستم خودکار سفارش میزند. فعال/غیرفعال و ویرایش از همین لیست.'
|
|
|
|
export const colleagueOrdersPageIntro =
|
|
'تراکنشهای پوشششده با اپ همکار. برای ثبت درست سند حسابداری، کد حساب همکار را هم در همین صفحه تنظیم کنید.'
|
|
|
|
export const colleagueAccountingCodeHelp =
|
|
'کدی که سند خرید/فروش پوشششدهٔ همکار روی آن در سیستم حسابداری فعال ثبت میشود. فقط فیلد مربوط به حسابداری فعال را پر کنید.'
|
|
|
|
export const transactionsPageIntro =
|
|
'گزارش تراکنشهای کیف پول و عملیات مالی مشتریان. برای بررسی جزئیات هر ردیف را باز کنید.'
|
|
|
|
export const walletPageIntro =
|
|
'موجودی کیفهای مشتریان (طلا، ریال، محصول، قلک). خلاصه و جزئیات هر کیف را اینجا میبینید.'
|
|
|
|
export const withdrawPageIntro =
|
|
'درخواستهای واریز و برداشت ریالی مشتریان. تایید، رد یا تعیین وزن (در صورت نیاز) از همین لیست.'
|
|
|
|
export const cardsPageIntro =
|
|
'حسابها و کارتهای بانکی ثبتشده برای واریز/برداشت. افزودن، ویرایش یا حذف از همینجا.'
|
|
|
|
export const giftCardsPageIntro =
|
|
'ساخت و مدیریت کارت هدیه (ریالی یا طلا). هر پویش چند کد یکتا میسازد؛ وضعیت مصرف و انقضا را اینجا ببینید.'
|
|
|
|
export const discountPageIntro =
|
|
'پویشهای کد تخفیف. درصد، تعداد کد و تاریخ انقضا را تنظیم کنید؛ هر کد معمولاً یکبار مصرف است.'
|
|
|
|
export const smsPageIntro =
|
|
'تاریخچه پیامکهای ارسالشده به مشتریان. در صورت فعال بودن پیامک گروهی، از همینجا هم میتوانید پیامک بفرستید.'
|
|
|
|
export const smsPanelPageIntro =
|
|
'پنل شارژ و وضعیت سرویس پیامک. موجودی، خرید بسته و تنظیمات ارسال پیامک در این صفحه است.'
|
|
|
|
export const appNotificationsPageIntro =
|
|
'اعلان ادمین را دستی میفرستید؛ اعلان سیستمی خودکار برای خرید/فروش/واریز/برداشت ساخته میشود. از تبها برای جدا کردن لیست استفاده کنید.'
|
|
|
|
export const automationsPageIntro =
|
|
'قوانین پیام خودکار (زماندار، رویداد یا قیمت). مخاطب، متن، کانال پیامک/اعلان و سقف ارسال را اینجا تنظیم کنید.'
|
|
|
|
export const usersPageIntro =
|
|
'مدیران پنل ادمین. افزودن مدیر، ویرایش دسترسی و غیرفعال کردن از همین لیست.'
|
|
|
|
export const captureSitesPageIntro =
|
|
'سایتهای منبع قیمت برای ریگیری. روشن/خاموش کردن ریگیری و مدیریت آدرسها از همین صفحه.'
|
|
|
|
export const configurationPageIntro =
|
|
'تنظیمات کلی سامانه (کلید–مقدار). با جستجو و فیلتر نوع فیلد، مورد را پیدا کنید؛ بعد از تغییر ذخیره کنید. روی آیکون i کنار هر تنظیم توضیح همان فیلد را ببینید.'
|
|
|
|
export const accountingReportsPageIntro =
|
|
'گزارشهای حسابداری داخلی پنل. برای اسناد و همگامسازی مشتریان از تبهای تهحساب / زرین / پرگار استفاده کنید.'
|
|
|
|
export const accountingTahesabDocsIntro =
|
|
'اسناد ارسالشده یا در صف تهحساب. میتوانید وضعیت، خطا و جزئیات هر سند را ببینید و در صورت نیاز همگام کنید.'
|
|
|
|
export const accountingZarinDocsIntro =
|
|
'اسناد ارسالشده یا در صف زرین. وضعیت، خطا و جزئیات هر سند را اینجا پیگیری کنید.'
|
|
|
|
export const accountingPargarDocsIntro =
|
|
'اسناد پرگار. وضعیت ارسال، خطا و جزئیات هر سند را اینجا ببینید.'
|
|
|
|
export const accountingTahesabCustomerSyncIntro =
|
|
'لینک کردن مشتریان پنل با کد تهحساب. تب «پنل ← تهحساب» کسانی که فقط در پنلاند؛ تب برعکس کسانی که فقط در تهحساباند.'
|
|
|
|
export const accountingZarinCustomerSyncIntro =
|
|
'لینک کردن مشتریان پنل با کد زرین. مشتریان بدون لینک را از دو طرف پیدا و ثبت کنید.'
|
|
|
|
export const accountingPargarCustomerSyncIntro =
|
|
'لینک کردن مشتریان پنل با کد پرگار. مشتریان بدون لینک را از دو طرف پیدا و ثبت کنید.'
|
|
|
|
export const accountingTahesabBalanceSyncIntro =
|
|
'جدول مشتریان لینکشده ماندهٔ کیف را کنار ماندهٔ تهحساب و سندها نشان میدهد. همگام تکی اول بررسی و تأیید است. «همگامسازی» همه فقط کیف خالی را مینشاند و تداخل را نگه میدارد؛ «اعمال اجباری» مانده تهحساب را برای همه جایگزین میکند. دو مانده جمع نمیشوند.'
|
|
|
|
export const accountingZarinBalanceSyncIntro =
|
|
'مانده طلا و ریال زرین را روی کیف اصلی مشتریان لینکشده مینشاند. همگامسازی دستی است؛ تداخل برای تصمیم شما میماند. دو مانده با هم جمع نمیشوند.'
|
|
|
|
export const accountingPargarBalanceSyncIntro =
|
|
'مانده پرگار را روی کیف مشتریان لینکشده مینشاند. قبل از اجرا مطمئن شوید کد پرگار مشتریان درست است.'
|
|
|
|
export const customerFundsIntro =
|
|
'داراییهای مرتبط با همین مشتری (محصول و موجودی). جزئیات و تراکنش هر دارایی را از اکشنها باز کنید.'
|
|
|
|
export const customerPiggyFundsIntro =
|
|
'قلکهای همین مشتری و موجودی هرکدام.'
|
|
|
|
export const customerReferralsIntro =
|
|
'مشتریانی که با کد معرف همین نفر ثبتنام کردهاند.'
|
|
|
|
export const customerPargarLogsIntro =
|
|
'لاگ و اسناد پرگار مربوط به همین مشتری.'
|