fix some bugs
This commit is contained in:
@@ -174,7 +174,7 @@ import SettingValueField from './SettingValueField.vue'
|
|||||||
import SettingCard from './SettingCard.vue'
|
import SettingCard from './SettingCard.vue'
|
||||||
import { refreshAppModeMenu } from '@/router'
|
import { refreshAppModeMenu } from '@/router'
|
||||||
import { useUserStore } from '@/store/userStore'
|
import { useUserStore } from '@/store/userStore'
|
||||||
import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, applyProductFundsEnabledFromRows, applyPriceTriggerEnabledFromRows, applyAppNotificationEnabledFromRows, applyPriceProviderFromRows, applySupportChatMenuEnabledFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setProductFundsEnabledFromSettings, setPriceTriggerEnabledFromSettings, setAppNotificationEnabledFromSettings, setPriceProviderFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings } from '@/utils/config'
|
import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, applyProductFundsEnabledFromRows, applyPriceTriggerEnabledFromRows, applyAppNotificationEnabledFromRows, applyPriceProviderFromRows, applyPriceChannelAccessFromRows, applySupportChatMenuEnabledFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setProductFundsEnabledFromSettings, setPriceTriggerEnabledFromSettings, setAppNotificationEnabledFromSettings, setPriceProviderFromSettings, setPriceChannelAccessFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings } from '@/utils/config'
|
||||||
import {
|
import {
|
||||||
EDITABLE_SETTING_GROUPS,
|
EDITABLE_SETTING_GROUPS,
|
||||||
SYSTEM_SETTING_GROUPS,
|
SYSTEM_SETTING_GROUPS,
|
||||||
@@ -427,11 +427,13 @@ async function initConfig() {
|
|||||||
applyPriceTriggerEnabledFromRows(baseData.value)
|
applyPriceTriggerEnabledFromRows(baseData.value)
|
||||||
applyAppNotificationEnabledFromRows(baseData.value)
|
applyAppNotificationEnabledFromRows(baseData.value)
|
||||||
applyPriceProviderFromRows(baseData.value)
|
applyPriceProviderFromRows(baseData.value)
|
||||||
|
applyPriceChannelAccessFromRows(baseData.value)
|
||||||
applySupportChatMenuEnabledFromRows(baseData.value)
|
applySupportChatMenuEnabledFromRows(baseData.value)
|
||||||
// در صفحهٔ عادی price_provider و show_to_users_chat (can_edit=0) نیستند — از کل تنظیمات بخوان
|
// در صفحهٔ عادی price_provider و show_to_users_chat و price_channel_access (can_edit=0) نیستند — از کل تنظیمات بخوان
|
||||||
if (
|
if (
|
||||||
!baseData.value.some((row) => row.key === 'price_provider') ||
|
!baseData.value.some((row) => row.key === 'price_provider') ||
|
||||||
!baseData.value.some((row) => row.key === 'show_to_users_chat')
|
!baseData.value.some((row) => row.key === 'show_to_users_chat') ||
|
||||||
|
!baseData.value.some((row) => row.key === 'price_channel_access')
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const { getConfiguration } = await import('@/api/configuration')
|
const { getConfiguration } = await import('@/api/configuration')
|
||||||
@@ -439,6 +441,7 @@ async function initConfig() {
|
|||||||
const rows = Array.isArray(all) ? all : []
|
const rows = Array.isArray(all) ? all : []
|
||||||
applyPriceProviderFromRows(rows)
|
applyPriceProviderFromRows(rows)
|
||||||
applySupportChatMenuEnabledFromRows(rows)
|
applySupportChatMenuEnabledFromRows(rows)
|
||||||
|
applyPriceChannelAccessFromRows(rows)
|
||||||
} catch {
|
} catch {
|
||||||
/* کش قبلی میماند */
|
/* کش قبلی میماند */
|
||||||
}
|
}
|
||||||
@@ -505,6 +508,9 @@ function syncMenuFlagsFromSetting(key: string | undefined, value: string) {
|
|||||||
if (row) row.value = value
|
if (row) row.value = value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (key === 'price_channel_access') {
|
||||||
|
setPriceChannelAccessFromSettings(isSwitchOn(value))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onValueChange(row: Const, value: string) {
|
function onValueChange(row: Const, value: string) {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { Const } from '@/model/configuration'
|
import type { Const } from '@/model/configuration'
|
||||||
import { conditionalOrderEnabledSetting, isStoreApp, priceProviderSetting, showToUsersChatSetting } from '@/utils/config'
|
import { conditionalOrderEnabledSetting, isStoreApp, priceChannelAccessSetting, priceProviderSetting, showToUsersChatSetting } from '@/utils/config'
|
||||||
|
|
||||||
export type SettingFieldType =
|
export type SettingFieldType =
|
||||||
| 'text'
|
| 'text'
|
||||||
@@ -215,9 +215,24 @@ export function isSettingVisible(key: string | undefined | null): boolean {
|
|||||||
if ((k.startsWith('montzar_') || k === 'display_montzar') && priceProviderSetting.value !== 'montzar') {
|
if ((k.startsWith('montzar_') || k === 'display_montzar') && priceProviderSetting.value !== 'montzar') {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
// تنظیمات قابلویرایش کانال فقط وقتی دسترسی دیپلوی روشن است
|
||||||
|
if (PRICE_CHANNEL_PANEL_KEYS.has(k) && !priceChannelAccessSetting.value) return false
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** کلیدهای گروه کانال در تنظیمات عادی (نه دسترسی دیپلوی و نه مقصد/توکن) */
|
||||||
|
const PRICE_CHANNEL_PANEL_KEYS = new Set([
|
||||||
|
'price_channel_enabled',
|
||||||
|
'price_channel_messengers',
|
||||||
|
'price_channel_diff',
|
||||||
|
'price_channel_min_seconds',
|
||||||
|
'price_channel_message_text',
|
||||||
|
'price_channel_footer_id',
|
||||||
|
'price_channel_footer_phone',
|
||||||
|
'price_channel_footer_link',
|
||||||
|
'change_mesghal',
|
||||||
|
])
|
||||||
|
|
||||||
export const SETTING_TYPE_OPTIONS = [
|
export const SETTING_TYPE_OPTIONS = [
|
||||||
{ key: 'text', value: 'متن کوتاه' },
|
{ key: 'text', value: 'متن کوتاه' },
|
||||||
{ key: 'number', value: 'عدد / شماره' },
|
{ key: 'number', value: 'عدد / شماره' },
|
||||||
@@ -262,6 +277,8 @@ const KEY_TYPE_FALLBACK: Record<string, SettingFieldType> = {
|
|||||||
jibit_enabled: 'switch',
|
jibit_enabled: 'switch',
|
||||||
register_referral_sms_to_referrer: 'switch',
|
register_referral_sms_to_referrer: 'switch',
|
||||||
register_referral_bonus_message: 'switch',
|
register_referral_bonus_message: 'switch',
|
||||||
|
referral_gift_on_first_order: 'switch',
|
||||||
|
referral_gift_buy_from_montzar: 'switch',
|
||||||
open_register: 'switch',
|
open_register: 'switch',
|
||||||
sms_panel: 'switch',
|
sms_panel: 'switch',
|
||||||
auto_active_customer: 'switch',
|
auto_active_customer: 'switch',
|
||||||
@@ -351,6 +368,7 @@ const KEY_TYPE_FALLBACK: Record<string, SettingFieldType> = {
|
|||||||
deposit_sms_support_number: 'number',
|
deposit_sms_support_number: 'number',
|
||||||
zaarbox_price_key: 'select',
|
zaarbox_price_key: 'select',
|
||||||
price_channel_enabled: 'switch',
|
price_channel_enabled: 'switch',
|
||||||
|
price_channel_access: 'switch',
|
||||||
price_channel_messengers: 'multiselect',
|
price_channel_messengers: 'multiselect',
|
||||||
price_channel_diff: 'price',
|
price_channel_diff: 'price',
|
||||||
price_channel_min_seconds: 'number',
|
price_channel_min_seconds: 'number',
|
||||||
@@ -651,15 +669,17 @@ const KEY_HELP_FALLBACK: Record<string, string> = {
|
|||||||
referral_id:
|
referral_id:
|
||||||
'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است.',
|
'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است.',
|
||||||
gift_for_referrer:
|
gift_for_referrer:
|
||||||
'مقدار پاداش (معمولاً وزن فلز به گرم) که به کیف معرف واریز میشود. صفر = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است.',
|
'مقدار پاداش (گرم) به کیف معرف. صفر = بدون پاداش. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.',
|
||||||
gift_for_referral:
|
gift_for_referral:
|
||||||
'مقدار پاداش (معمولاً وزن فلز) که به معرفشونده واریز میشود. صفر = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است.',
|
'مقدار پاداش (گرم) به معرفشونده. صفر = بدون پاداش. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.',
|
||||||
register_referral_sms_to_referrer:
|
register_referral_sms_to_referrer:
|
||||||
'روشن: پس از ثبتنام کاربر جدید، پیامک اطلاعرسانی برای معرف ارسال میشود. خاموش: پیامکی برای معرف ارسال نمیشود.',
|
'روشن: پس از ثبتنام کاربر جدید، پیامک اطلاعرسانی برای معرف ارسال میشود. خاموش: پیامکی برای معرف ارسال نمیشود.',
|
||||||
register_referral_bonus_message:
|
register_referral_bonus_message:
|
||||||
'روشن: متن پاداش معرف در پیامک خوشآمد ثبتنام گنجانده میشود. خاموش: متن پاداش در پیامک خوشآمد نمیآید.',
|
'روشن: متن پاداش معرف در پیامک خوشآمد ثبتنام گنجانده میشود. خاموش: متن پاداش در پیامک خوشآمد نمیآید.',
|
||||||
referral_gift_on_first_order:
|
referral_gift_on_first_order:
|
||||||
'روشن: پاداش معرف (gift_for_referrer) و معرفشونده (gift_for_referral) پس از تکمیل اولین سفارش معرفشونده به کیف واریز میشود — فقط اگر مقدار هر پاداش بیشتر از صفر باشد. خاموش: پاداش بلافاصله پس از ثبتنام موفق یا تأیید احراز هویت واریز میشود (باز هم فقط برای مقادیر بیشتر از صفر).',
|
'روشن: پاداش معرف (gift_for_referrer) و معرفشونده (gift_for_referral) پس از تکمیل اولین سفارش معرفشونده به کیف واریز میشود — فقط اگر مقدار هر پاداش بیشتر از صفر باشد. خاموش: پاداش بلافاصله پس از ثبتنام موفق یا تأیید احراز هویت واریز میشود (باز هم فقط برای مقادیر بیشتر از صفر).',
|
||||||
|
referral_gift_buy_from_montzar:
|
||||||
|
'روشن: اگر منبع قیمت montzar باشد، قبل از واریز پاداش معرف/معرفشونده همان وزن از همکار خرید میشود؛ شکست خرید = واریز نمیشود. خاموش: مثل قبل فقط به کیف واریز میشود بدون خرید از همکار.',
|
||||||
referral_limit:
|
referral_limit:
|
||||||
'حداکثر تعداد دعوت مجاز برای هر کاربر. خالی = بدون محدودیت.',
|
'حداکثر تعداد دعوت مجاز برای هر کاربر. خالی = بدون محدودیت.',
|
||||||
referral_bonus_amount:
|
referral_bonus_amount:
|
||||||
@@ -864,6 +884,8 @@ const KEY_HELP_FALLBACK: Record<string, string> = {
|
|||||||
'تنظیم قدیمی — از «منبع قیمت» استفاده کنید. روشن نگه داشتن توصیه نمیشود.',
|
'تنظیم قدیمی — از «منبع قیمت» استفاده کنید. روشن نگه داشتن توصیه نمیشود.',
|
||||||
price_channel_enabled:
|
price_channel_enabled:
|
||||||
'روشن: بعد از هر تغییر قیمت، مظنه بهصورت خودکار به کانالهای پیامرسان انتخابشده ارسال میشود.',
|
'روشن: بعد از هر تغییر قیمت، مظنه بهصورت خودکار به کانالهای پیامرسان انتخابشده ارسال میشود.',
|
||||||
|
price_channel_access:
|
||||||
|
'روشن: گروه «ارسال قیمت به کانال» در تنظیمات عادی پنل دیده میشود. خاموش: مخفی است (فقط از تنظیمات پیشرفته).',
|
||||||
price_channel_messengers:
|
price_channel_messengers:
|
||||||
'کدام پیامرسانها قیمت را دریافت کنند؟ میتوانید چند مورد را انتخاب کنید (بله، تلگرام، روبیکا). برای هر پیامرسان باید توکن بات و «مقصد ارسال» هم پر شده باشد.',
|
'کدام پیامرسانها قیمت را دریافت کنند؟ میتوانید چند مورد را انتخاب کنید (بله، تلگرام، روبیکا). برای هر پیامرسان باید توکن بات و «مقصد ارسال» هم پر شده باشد.',
|
||||||
price_channel_diff:
|
price_channel_diff:
|
||||||
@@ -933,6 +955,7 @@ export const KEY_LABEL_FALLBACK: Record<string, string> = {
|
|||||||
minimum_sell: 'حداقل مبلغ فروش (ریال)',
|
minimum_sell: 'حداقل مبلغ فروش (ریال)',
|
||||||
referral_id: 'کد معرف اجباری',
|
referral_id: 'کد معرف اجباری',
|
||||||
referral_gift_on_first_order: 'پاداش معرف پس از اولین سفارش',
|
referral_gift_on_first_order: 'پاداش معرف پس از اولین سفارش',
|
||||||
|
referral_gift_buy_from_montzar: 'خرید پاداش معرفی از همکار',
|
||||||
open_register: 'ثبتنام باز',
|
open_register: 'ثبتنام باز',
|
||||||
sms_panel: 'پنل پیامک (کیف پول)',
|
sms_panel: 'پنل پیامک (کیف پول)',
|
||||||
customer_direct_sms: 'پیامک تکی به مشتری از لیست',
|
customer_direct_sms: 'پیامک تکی به مشتری از لیست',
|
||||||
@@ -992,6 +1015,7 @@ export const KEY_LABEL_FALLBACK: Record<string, string> = {
|
|||||||
deposit_sheba: 'شبا واریز',
|
deposit_sheba: 'شبا واریز',
|
||||||
deposit_sms_support_number: 'شماره تماس پشتیبانی',
|
deposit_sms_support_number: 'شماره تماس پشتیبانی',
|
||||||
price_channel_enabled: 'ارسال قیمت به کانال',
|
price_channel_enabled: 'ارسال قیمت به کانال',
|
||||||
|
price_channel_access: 'دسترسی ارسال قیمت به کانال',
|
||||||
price_channel_messengers: 'پیامرسانهای ارسال قیمت',
|
price_channel_messengers: 'پیامرسانهای ارسال قیمت',
|
||||||
price_channel_diff: 'اختلاف قیمت کانال',
|
price_channel_diff: 'اختلاف قیمت کانال',
|
||||||
price_channel_min_seconds: 'حداقل فاصله ارسال (ثانیه)',
|
price_channel_min_seconds: 'حداقل فاصله ارسال (ثانیه)',
|
||||||
@@ -1053,6 +1077,7 @@ export const SETTING_LOCKED_KEYS = new Set([
|
|||||||
'pargar_api_token', 'pargar_password', 'pargar_username',
|
'pargar_api_token', 'pargar_password', 'pargar_username',
|
||||||
'pargar_item_id_rial', 'pargar_item_id_gold',
|
'pargar_item_id_rial', 'pargar_item_id_gold',
|
||||||
'telegram_bot_token', 'rubika_bot_token',
|
'telegram_bot_token', 'rubika_bot_token',
|
||||||
|
'price_channel_access',
|
||||||
'price_channel_bale_to', 'price_channel_telegram_to', 'price_channel_rubika_to',
|
'price_channel_bale_to', 'price_channel_telegram_to', 'price_channel_rubika_to',
|
||||||
'unit',
|
'unit',
|
||||||
'up_price', 'down_price',
|
'up_price', 'down_price',
|
||||||
@@ -1085,7 +1110,7 @@ export const SETTING_EDITABLE_KEYS = new Set([
|
|||||||
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
|
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
|
||||||
'montzar_password', 'montzar_product_id',
|
'montzar_password', 'montzar_product_id',
|
||||||
'open_register',
|
'open_register',
|
||||||
'referral_id', 'referral_limit', 'referral_gift_on_first_order',
|
'referral_id', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
|
||||||
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
|
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
|
||||||
'sell_fee', 'show_last_price', 'show_home_price_when_closed', 'show_gold_ounce_price', 'show_product_details',
|
'sell_fee', 'show_last_price', 'show_home_price_when_closed', 'show_gold_ounce_price', 'show_product_details',
|
||||||
'show_product_trade_status', 'show_product_card_meta',
|
'show_product_trade_status', 'show_product_card_meta',
|
||||||
|
|||||||
@@ -64,6 +64,9 @@ export const supportChatMenuEnabledSetting = ref(false)
|
|||||||
/** reactive — سوییچ دیپلوی show_to_users_chat (برای مخفی کردن has_chat در تنظیمات عادی) */
|
/** reactive — سوییچ دیپلوی show_to_users_chat (برای مخفی کردن has_chat در تنظیمات عادی) */
|
||||||
export const showToUsersChatSetting = ref(false)
|
export const showToUsersChatSetting = ref(false)
|
||||||
|
|
||||||
|
/** reactive — سوییچ دیپلوی price_channel_access (گروه کانال در تنظیمات عادی) */
|
||||||
|
export const priceChannelAccessSetting = ref(false)
|
||||||
|
|
||||||
export const accountingProviderSetting = ref<AccountingProvider>('none')
|
export const accountingProviderSetting = ref<AccountingProvider>('none')
|
||||||
|
|
||||||
let tahesabEnabledFromSettings: boolean | null = null
|
let tahesabEnabledFromSettings: boolean | null = null
|
||||||
@@ -167,6 +170,10 @@ export function setShowToUsersChatFromSettings(value: boolean): void {
|
|||||||
showToUsersChatSetting.value = value
|
showToUsersChatSetting.value = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function setPriceChannelAccessFromSettings(value: boolean): void {
|
||||||
|
priceChannelAccessSetting.value = value
|
||||||
|
}
|
||||||
|
|
||||||
let lastShowToUsersChat = ''
|
let lastShowToUsersChat = ''
|
||||||
let lastHasChat = ''
|
let lastHasChat = ''
|
||||||
let lastChatApi = ''
|
let lastChatApi = ''
|
||||||
@@ -273,6 +280,13 @@ export function applyPriceProviderFromRows(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function applyPriceChannelAccessFromRows(
|
||||||
|
rows: Array<{ key?: string; value?: string | null }>
|
||||||
|
) {
|
||||||
|
const row = rows.find((item) => item.key === 'price_channel_access')
|
||||||
|
if (row) setPriceChannelAccessFromSettings(isSwitchOn(row.value))
|
||||||
|
}
|
||||||
|
|
||||||
async function bootstrapSettingsFromApi(): Promise<void> {
|
async function bootstrapSettingsFromApi(): Promise<void> {
|
||||||
if (settingsBootstrapped) return
|
if (settingsBootstrapped) return
|
||||||
|
|
||||||
@@ -295,6 +309,7 @@ async function bootstrapSettingsFromApi(): Promise<void> {
|
|||||||
applyAppNotificationEnabledFromRows(list)
|
applyAppNotificationEnabledFromRows(list)
|
||||||
applySupportChatMenuEnabledFromRows(list)
|
applySupportChatMenuEnabledFromRows(list)
|
||||||
applyPriceProviderFromRows(list)
|
applyPriceProviderFromRows(list)
|
||||||
|
applyPriceChannelAccessFromRows(list)
|
||||||
setCachedMainMetal(mainMetalRow?.value)
|
setCachedMainMetal(mainMetalRow?.value)
|
||||||
const { setCachedMainWalletProductIds } = await import('@/components/mobile/utils/wallet')
|
const { setCachedMainWalletProductIds } = await import('@/components/mobile/utils/wallet')
|
||||||
setCachedMainWalletProductIds(parseMainWalletProductIds(mainWalletRow?.value))
|
setCachedMainWalletProductIds(parseMainWalletProductIds(mainWalletRow?.value))
|
||||||
|
|||||||
Reference in New Issue
Block a user