From 51ceb3da9dbcaaf62794c342531451956f3fa14d Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 6 Jun 2026 17:13:04 +0330 Subject: [PATCH] fix bug --- .../SupportMessengerSettings.vue | 176 ++++++++++++++++++ src/pages/menuPages/configuration/index.vue | 37 +++- .../menuPages/configuration/settingTypes.ts | 54 +++++- 3 files changed, 260 insertions(+), 7 deletions(-) create mode 100644 src/pages/menuPages/configuration/SupportMessengerSettings.vue diff --git a/src/pages/menuPages/configuration/SupportMessengerSettings.vue b/src/pages/menuPages/configuration/SupportMessengerSettings.vue new file mode 100644 index 0000000..93f30f0 --- /dev/null +++ b/src/pages/menuPages/configuration/SupportMessengerSettings.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/src/pages/menuPages/configuration/index.vue b/src/pages/menuPages/configuration/index.vue index 05c0fb4..f30deb6 100644 --- a/src/pages/menuPages/configuration/index.vue +++ b/src/pages/menuPages/configuration/index.vue @@ -66,6 +66,18 @@ + + @@ -171,13 +183,17 @@ import { loading } from '@/utils' import { getConfiguration, setConfiguration } from '@/api/configuration' import SettingValueField from './SettingValueField.vue' import SettingCard from './SettingCard.vue' +import SupportMessengerSettings from './SupportMessengerSettings.vue' import { SETTING_TYPE_OPTIONS, formatValueForSave, helpText, - resolveSettingFieldType + resolveSettingFieldType, + SUPPORT_MESSENGER_KEYS } from './settingTypes' +const supportMessengerKeySet = new Set(SUPPORT_MESSENGER_KEYS) + const settingTypeOptions = SETTING_TYPE_OPTIONS const statusFilterOptions = [ @@ -270,9 +286,24 @@ const switchRows = computed(() => ) const otherRows = computed(() => - filteredRows.value.filter((row) => resolveSettingFieldType(row) !== 'switch') + filteredRows.value.filter( + (row) => + resolveSettingFieldType(row) !== 'switch' && + !supportMessengerKeySet.has(row.key ?? '') + ) ) +const supportMessengerBundle = computed(() => { + const rows = filteredRows.value.filter((row) => supportMessengerKeySet.has(row.key ?? '')) + if (!rows.length) return null + const byKey = Object.fromEntries(rows.map((row) => [row.key, row])) + return { + messenger: byKey.support_messenger as Const | undefined, + id: byKey.support_messenger_id as Const | undefined, + text: byKey.support_messenger_text as Const | undefined + } +}) + function rowColSpan(row: Const): number { return resolveSettingFieldType(row) === 'longtext' ? 24 : 8 } diff --git a/src/pages/menuPages/configuration/settingTypes.ts b/src/pages/menuPages/configuration/settingTypes.ts index fcf1d8d..d533906 100644 --- a/src/pages/menuPages/configuration/settingTypes.ts +++ b/src/pages/menuPages/configuration/settingTypes.ts @@ -69,7 +69,6 @@ const KEY_TYPE_FALLBACK: Record = { montzar_closed: 'switch', montzar_open_buy: 'switch', montzar_open_sell: 'switch', - is_requaire_referral: 'switch', product_update_price_on_list: 'switch', product_auto_close_open_on_list: 'switch', payping_fin_sync_enabled: 'switch', @@ -77,7 +76,21 @@ const KEY_TYPE_FALLBACK: Record = { store_status: 'select', credit_rial_price_unit: 'select', node_client_id: 'text', - node_shared_secret: 'text' + node_shared_secret: 'text', + support_messenger_id: 'text', + support_messenger_text: 'text', + support_messenger: 'select' +} + +const SELECT_LABELS_BY_KEY: Record> = { + support_messenger: { + bale: 'بله', + telegram: 'تلگرام', + whatsapp: 'واتساپ', + rubika: 'روبیکا', + eitaa: 'ایتا', + soroush: 'سروش' + } } const SELECT_OPTIONS_BY_KEY: Record = { @@ -85,7 +98,39 @@ const SELECT_OPTIONS_BY_KEY: Record = { referral_id: 'required,', payping_gateway_name: 'sepal,', credit_rial_price_unit: 'gram,mesghal,unit', - store_status: 'باز,بسته' + store_status: 'باز,بسته', + support_messenger: 'bale,telegram,whatsapp,rubika,eitaa,soroush' +} + +export const SUPPORT_MESSENGER_KEYS = [ + 'support_messenger', + 'support_messenger_id', + 'support_messenger_text' +] as const + +export const SUPPORT_MESSENGER_OPTIONS = [ + { key: 'bale', label: 'بله' }, + { key: 'telegram', label: 'تلگرام' }, + { key: 'whatsapp', label: 'واتساپ' }, + { key: 'rubika', label: 'روبیکا' }, + { key: 'eitaa', label: 'ایتا' }, + { key: 'soroush', label: 'سروش' } +] as const + +export function supportMessengerIdPlaceholder(messenger: string): string { + switch ((messenger || '').trim().toLowerCase()) { + case 'telegram': + return 'username بدون @' + case 'whatsapp': + return '98912xxxxxxx' + case 'rubika': + case 'eitaa': + case 'soroush': + return 'username' + case 'bale': + default: + return 'username در ble.ir' + } } export function resolveSettingFieldType(row: Pick): SettingFieldType { @@ -111,9 +156,10 @@ export function parseSelectOptions( } const opts = source.split(',').map((s) => s.trim()) + const labels = row.key ? SELECT_LABELS_BY_KEY[row.key] : undefined return opts.map((opt) => ({ key: opt, - value: opt === '' ? '(خالی)' : opt + value: labels?.[opt] ?? (opt === '' ? '(خالی)' : opt) })) }