fix(trading-hours): save schedule edits immediately and match display help

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 02:29:02 +03:30
co-authored by Cursor
parent 0d072ba82d
commit b313b66d48
3 changed files with 8 additions and 10 deletions
@@ -668,15 +668,15 @@ const KEY_HELP_FALLBACK: Record<string, string> = {
auto_active_customer:
'روشن: بعد از ثبت‌نام، کاربر می‌تواند وارد اپ شود (بدون تأیید دستی ادمین). خاموش: ورود فقط بعد از فعال‌سازی دستی شما در پنل. این سوییچ اجازهٔ خرید/فروش نمی‌دهد — معامله فقط بعد از احراز هویت (is_legal) ممکن است.',
close_price:
'فیلتر اصلی ساعت کاری فروشگاه. روشن: خرید و فروش فقط بین «ساعت شروع» و «ساعت پایان» انجام می‌شود. نمایش قیمت صفحه اصلی در خارج از این بازه با سوییچ «نمایش قیمت صفحه اصلی خارج از ساعت کاری» کنترل می‌شود. خاموش: محدودیت ساعتی سراسری اعمال نمی‌شود (مگر برای محصولی ساعت اختصاصی تعریف کرده باشید).',
'سوییچ اصلی ساعت کاری. خاموش: محدودیت ساعت اعمال نمی‌شود — اگر مظنه زنده باشد قیمت نشان داده می‌شود؛ اگر نباشد با «نمایش آخرین قیمت ذخیره‌شده» آخرین قیمت می‌آید وگرنه «مظنه در دسترس نیست». روشن: فقط داخل بازهٔ یکسان یا برنامهٔ هفتگی همین منطق مظنه اعمال می‌شود؛ خارج از بازه با سوییچ «نمایش قیمت صفحه اصلی خارج از ساعت کاری» یا پیام «فروشگاه بسته است». خرید/فروش خارج از ساعت همیشه بسته است.',
startDay:
'ساعت شروع فعالیت روزانه فروشگاه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد اعمال می‌شود. از ساعت‌شمار انتخاب کنید (مثلاً ۰۹:۰۰).',
'ساعت شروع فعالیت روزانه فروشگاه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد و برنامه «یکسان برای همه روزها» باشد اعمال می‌شود.',
endDay:
'ساعت پایان فعالیت روزانه فروشگاه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد اعمال می‌شود. بعد از این ساعت فروشگاه بسته می‌شود (مثلاً ۱۷:۰۰ یا ۲۲:۰۰).',
'ساعت پایان فعالیت روزانه فروشگاه. فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن باشد و برنامه «یکسان برای همه روزها» باشد اعمال می‌شود.',
show_last_price:
'رفتار هنگام در دسترس نبودن قیمت زنده. روشن: آخرین قیمت ذخیره‌شده نشان داده می‌شود. خاموش: به‌جای صفر پیام «مظنه در دسترس نیست» نمایش داده می‌شود.',
'وقتی مظنه زنده نیست (و فروشگاه از نظر ساعت بسته حساب نمی‌شود): روشن = آخرین قیمت ذخیره‌شده نشان داده شود. خاموش = پیام «مظنه در دسترس نیست».',
show_home_price_when_closed:
'روشن: وقتی فروشگاه خارج از ساعت کاری است، قیمت صفحه اصلی اپ همچنان نمایش داده می‌شود و پیام «فروشگاه بسته است» نشان داده نمی‌شود. خرید/فروش همچنان بسته می‌ماند. خاموش (پیش‌فرض): خارج از ساعت پیام بسته بودن نشان داده می‌شود.',
'فقط وقتی «بستن خودکار خارج از ساعت کاری» روشن است و الان خارج از بازه هستید. روشن: آخرین قیمت روی صفحه اصلی نشان داده می‌شود (معامله بسته می‌ماند). خاموش: پیام «فروشگاه بسته است».',
show_gold_ounce_price:
'روشن: اگر آدرس API تابلو (zaarbox_api_url) تنظیم شده باشد، قیمت انس طلا در اپ مشتری نمایش داده می‌شود. خاموش: نمایش داده نمی‌شود.',
show_product_details:
+1 -3
View File
@@ -104,9 +104,7 @@
<div v-else class="th-weekly">
<p class="th-weekly__hint">
برای هر روز می‌توانید ساعت جدا بگذارید یا آن روز را کاملاً تعطیل کنید. فعلاً
اپ از کوچک‌ترین بازهٔ ذخیره‌شده برای سازگاری استفاده می‌کند؛ اعمال دقیق
روزانه در سرور به‌زودی فعال می‌شود.
برای هر روز می‌توانید ساعت جدا بگذارید یا آن روز را کاملاً تعطیل کنید. اپ و سرور همان برنامهٔ روزانه را برای باز/بسته بودن و نمایش قیمت صفحه اصلی اعمال می‌کنند.
</p>
<div class="th-weekly__list">
<TradingHoursDayRow
@@ -185,7 +185,7 @@ export function useTradingHoursPage() {
key,
debounce((nextValue: string) => {
void persistKey(key, nextValue)
}, key === 'trading_hours_by_day' ? 500 : 350)
}, 120)
)
}
const fn = debouncedSave.get(key)!
@@ -248,7 +248,7 @@ export function useTradingHoursPage() {
end: normalizeTimeValue(patch.end ?? weekly.value.days[day].end) || DEFAULT_DAY_END,
}
weekly.value.mode = 'per_day'
setDraftByKey('trading_hours_by_day', serializeWeekly(weekly.value))
setDraftByKey('trading_hours_by_day', serializeWeekly(weekly.value), { flush: true })
syncLegacyBoundsFromWeekly()
}