From 010e287c70dfc559d014227ec7b801b30d7ae0a0 Mon Sep 17 00:00:00 2001 From: adonis Date: Mon, 24 Aug 2026 12:59:34 +0330 Subject: [PATCH] m --- src/model/configuration.ts | 2 ++ src/pages/menuPages/configuration/index.vue | 16 +++++++++++----- .../menuPages/configuration/settingGroups.ts | 13 +++++++++++++ .../tradingHours/useTradingHoursPage.ts | 4 +++- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/model/configuration.ts b/src/model/configuration.ts index 7fc52ad..0517fb9 100644 --- a/src/model/configuration.ts +++ b/src/model/configuration.ts @@ -5,6 +5,8 @@ export interface Const { description?: string title_fa?: string type?: string + menu?: string + show_to_user?: boolean | number is_active: boolean | number can_edit?: number | boolean } diff --git a/src/pages/menuPages/configuration/index.vue b/src/pages/menuPages/configuration/index.vue index d6c12fe..1e2afca 100644 --- a/src/pages/menuPages/configuration/index.vue +++ b/src/pages/menuPages/configuration/index.vue @@ -206,7 +206,8 @@ import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyC import { EDITABLE_SETTING_GROUPS, SYSTEM_SETTING_GROUPS, - getSettingGroupId, + resolveSettingMenu, + OTHER_PAGE_SETTING_MENUS, type SettingGroupDef } from './settingGroups' import { @@ -311,7 +312,11 @@ const filteredRows = computed(() => (baseData.value || []).filter((row) => { if (row.id == null || !matchesFilter(row)) return false if (!isSettingVisible(row.key)) return false - if (!isSystemMode.value && TRADING_HOURS_SETTING_KEY_SET.has(row.key || '')) return false + const menu = String(row.menu ?? '').trim() + if (OTHER_PAGE_SETTING_MENUS.has(menu)) return false + if (!menu && !isSystemMode.value && TRADING_HOURS_SETTING_KEY_SET.has(row.key || '')) { + return false + } if (isSystemMode.value) return true return isEditable(row) }) @@ -330,15 +335,16 @@ const otherRows = computed(() => // گروه‌بندی تنظیمات — اولین match برنده است؛ misc فقط برای باقی‌مانده // ============================================================================= -function getGroupId(key: string): string { - return getSettingGroupId(key, settingGroups.value) +function getGroupId(row: Const): string { + return resolveSettingMenu(row, settingGroups.value) } const groupedFiltered = computed(() => { const map: Record = {} for (const g of settingGroups.value) map[g.id] = [] for (const row of filteredRows.value) { - const gid = getGroupId(row.key || '') + const gid = getGroupId(row) + if (!map[gid]) map[gid] = [] map[gid].push(row) } Object.keys(map).forEach((k) => { diff --git a/src/pages/menuPages/configuration/settingGroups.ts b/src/pages/menuPages/configuration/settingGroups.ts index fdaa33a..272fe27 100644 --- a/src/pages/menuPages/configuration/settingGroups.ts +++ b/src/pages/menuPages/configuration/settingGroups.ts @@ -291,6 +291,19 @@ export function getSettingGroupId(key: string, groups: SettingGroupDef[]): strin return 'misc' } +/** گروه از ستون menu اگر در همین صفحه تعریف شده باشد؛ وگرنه regex. */ +export function resolveSettingMenu( + row: { key?: string; menu?: string | null }, + groups: SettingGroupDef[] +): string { + const menu = String(row.menu ?? '').trim() + if (menu && groups.some((g) => g.id === menu)) return menu + return getSettingGroupId(row.key || '', groups) +} + +/** این کلیدها صفحهٔ جدا دارند و در لیست تنظیمات عادی/پیشرفته نمی‌آیند */ +export const OTHER_PAGE_SETTING_MENUS = new Set(['trading_hours', 'capture_sites']) + export function getSettingSubsectionId( key: string, group: SettingGroupDef | undefined diff --git a/src/pages/menuPages/tradingHours/useTradingHoursPage.ts b/src/pages/menuPages/tradingHours/useTradingHoursPage.ts index 19b2e89..4745181 100644 --- a/src/pages/menuPages/tradingHours/useTradingHoursPage.ts +++ b/src/pages/menuPages/tradingHours/useTradingHoursPage.ts @@ -110,7 +110,9 @@ export function useTradingHoursPage() { const map: Record = {} const draftMap: Record = {} for (const row of rows || []) { - if (!row.key || !TRADING_HOURS_SETTING_KEY_SET.has(row.key)) continue + if (!row.key) continue + const fromMenu = String(row.menu ?? '').trim() === 'trading_hours' + if (!fromMenu && !TRADING_HOURS_SETTING_KEY_SET.has(row.key)) continue map[row.key] = row if (row.id != null) draftMap[String(row.id)] = row.value ?? '' }