fix edits for borsemes

This commit is contained in:
2026-07-23 12:28:48 +03:30
parent d3727265e8
commit 73feee2048
6 changed files with 210 additions and 58 deletions
+27 -15
View File
@@ -174,7 +174,7 @@ import SettingValueField from './SettingValueField.vue'
import SettingCard from './SettingCard.vue'
import { refreshAppModeMenu } from '@/router'
import { useUserStore } from '@/store/userStore'
import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings } from '@/utils/config'
import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, applyPriceProviderFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setPriceProviderFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings } from '@/utils/config'
import {
EDITABLE_SETTING_GROUPS,
SYSTEM_SETTING_GROUPS,
@@ -278,12 +278,9 @@ const filteredRows = computed(() =>
sortRows(
(baseData.value || []).filter((row) => {
if (row.id == null || !matchesFilter(row)) return false
if (isSystemMode.value) {
// کارمزد سفارش شرطی فقط وقتی قابلیت سراسری روشن است دیده شود
if (row.key === 'fee_conditional_order' && !isSettingVisible(row.key)) return false
return true
}
return isEditable(row) && isSettingVisible(row.key)
if (!isSettingVisible(row.key)) return false
if (isSystemMode.value) return true
return isEditable(row)
})
)
)
@@ -423,14 +420,21 @@ async function initConfig() {
? await getSystemConfiguration()
: await getEditableConfiguration()) ?? []
baseData.value = rows.map(normalizeSettingRow)
if (isSystemMode.value) {
applyBannerEnabledFromRows(baseData.value)
applyTrackingSystemsEnabledFromRows(baseData.value)
applyConditionalOrderEnabledFromRows(baseData.value)
} else {
applyBannerEnabledFromRows(baseData.value)
applyTrackingSystemsEnabledFromRows(baseData.value)
applyConditionalOrderEnabledFromRows(baseData.value)
applyBannerEnabledFromRows(baseData.value)
applyTrackingSystemsEnabledFromRows(baseData.value)
applyConditionalOrderEnabledFromRows(baseData.value)
applyPriceProviderFromRows(baseData.value)
// در صفحهٔ عادی price_provider (can_edit=0) نیست — از کل تنظیمات بخوان
if (!baseData.value.some((row) => row.key === 'price_provider')) {
try {
const { getConfiguration } = await import('@/api/configuration')
const all = await getConfiguration()
applyPriceProviderFromRows(Array.isArray(all) ? all : [])
} catch {
/* کش قبلی می‌ماند */
}
}
if (!isSystemMode.value) {
const storeRow = baseData.value.find((row) => row.key === 'is_store')
if (storeRow) {
setStoreModeFromSettings(isSwitchOn(storeRow.value))
@@ -459,6 +463,11 @@ function onValueChange(row: Const, value: string) {
drafts.value[row.id] = value
// بلافاصله گروه Montzar را با انتخاب منبع قیمت همگام کن
if (row.key === 'price_provider') {
setPriceProviderFromSettings(value)
}
// longtext هم باید ذخیره شود، فقط با delay بیشتر
scheduleSave(row)
}
@@ -550,6 +559,9 @@ async function saveSettingRow(row: Const) {
if (row.key === 'enable_conditional_order') {
setConditionalOrderEnabledFromSettings(isSwitchOn(value))
}
if (row.key === 'price_provider') {
setPriceProviderFromSettings(value)
}
savedFlashIds.value.add(id)
if (saveTimers.has(id)) clearTimeout(saveTimers.get(id))
saveTimers.set(
@@ -1,5 +1,5 @@
import type { Const } from '@/model/configuration'
import { conditionalOrderEnabledSetting, isStoreApp } from '@/utils/config'
import { conditionalOrderEnabledSetting, isStoreApp, priceProviderSetting } from '@/utils/config'
export type SettingFieldType =
| 'text'
@@ -209,6 +209,10 @@ export function isSettingVisible(key: string | undefined | null): boolean {
if (HIDDEN_LEGACY_SETTING_KEYS.has(k)) return false
if (STORE_ONLY_SETTING_KEYS.has(k) && !isStoreApp()) return false
if (k === 'fee_conditional_order' && !conditionalOrderEnabledSetting.value) return false
// گروه همکار Montzar فقط وقتی منبع قیمت montzar است
if ((k.startsWith('montzar_') || k === 'display_montzar') && priceProviderSetting.value !== 'montzar') {
return false
}
return true
}
@@ -552,7 +556,7 @@ const KEY_HELP_FALLBACK: Record<string, string> = {
sell_fee:
'مبلغ کسر (ریال) از قیمت پایه برای سمت فروش. اگر خالی بگذارید، از «اختلاف پایه» استفاده می‌شود.',
fee_service_charge_percentage:
'درصد کارمزد هر معامله از مبلغ سفارش (اعشاری؛ مثلاً ۰٫۰۰۵ یعنی نیم در هزار).',
'درصد کارمزد هر معامله (اعشاری؛ مثلاً ۰٫۰۰۵). روی همهٔ سفارش‌ها اعمال می‌شود و با اختلاف قیمت محصول یا buy_fee/sell_fee قاطی نمی‌شود. محصول مقداری: اگر مبلغ ریالی قفل باشد کارمزد از فلز، اگر وزن قفل باشد از ریال. محصول تعدادی: کارمزد فقط از ریال.',
fee_deduct_from_gold:
'این کلید دیگر روی محاسبه اثری ندارد. مبنای کارمزد اکنون فیلدی است که مشتری وارد می‌کند: اگر «مبلغ ریالی» را وارد کند (مثلاً دقیقاً ۱۰۰ میلیون ریال) همان مبلغ معامله می‌شود و کارمزد از طلا کسر می‌شود؛ اگر «وزن» را وارد کند (مثلاً دقیقاً ۲ گرم) همان وزن معامله می‌شود و کارمزد از ریال کسر می‌شود. این قانون برای خرید و فروش یکسان است.',
require_zero_main_gold_before_other_buy:
@@ -872,6 +876,8 @@ export const SETTING_LOCKED_KEYS = new Set([
'chart_id', 'chart_use_local_data',
'external_order_api_enabled',
'fee_deduct_from_gold',
'fee_single',
'referral_bonus_amount',
'group_sms',
'customer_direct_sms',
'enable_conditional_order',
@@ -921,7 +927,7 @@ export const SETTING_EDITABLE_KEYS = new Set([
'deposit_sms_support_number', 'deposit_support_message_text',
'deposit_account_holder', 'deposit_card_number', 'deposit_sheba',
'endDay',
'fee_free', 'fee_service_charge_percentage', 'fee_single',
'fee_free', 'fee_service_charge_percentage',
'gift_for_referral', 'gift_for_referrer',
'invite_link_text',
'jibit_verification',
@@ -930,7 +936,7 @@ export const SETTING_EDITABLE_KEYS = new Set([
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
'montzar_password', 'montzar_price', 'montzar_product_id',
'open_register',
'referral_bonus_amount', 'referral_id', 'referral_limit', 'referral_gift_on_first_order',
'referral_id', 'referral_limit', 'referral_gift_on_first_order',
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
'sell_fee', 'show_last_price', 'show_gold_ounce_price', 'startDay',
'support_messengers', 'support_messenger_text',