diff --git a/src/pages/menuPages/configuration/index.vue b/src/pages/menuPages/configuration/index.vue index 1e2afca..0456443 100644 --- a/src/pages/menuPages/configuration/index.vue +++ b/src/pages/menuPages/configuration/index.vue @@ -202,7 +202,7 @@ import SettingValueField from './SettingValueField.vue' import SettingCard from './SettingCard.vue' import { refreshAppModeMenu } from '@/router' import { useUserStore } from '@/store/userStore' -import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, applyProductFundsEnabledFromRows, applyPriceTriggerEnabledFromRows, applyAppNotificationEnabledFromRows, applyPriceProviderFromRows, applyPriceChannelAccessFromRows, applySupportChatMenuEnabledFromRows, applyGroupSmsFromRows, applyCustomerSpecialPricingFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setProductFundsEnabledFromSettings, setPriceTriggerEnabledFromSettings, setAppNotificationEnabledFromSettings, setPriceProviderFromSettings, setPriceChannelAccessFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings, setGroupSmsEnabledFromSettings, setCustomerSpecialPricingEnabledFromSettings } from '@/utils/config' +import { applyBannerEnabledFromRows, applyTrackingSystemsEnabledFromRows, applyConditionalOrderEnabledFromRows, applyAutomationEnabledFromRows, applyProductFundsEnabledFromRows, applyPriceTriggerEnabledFromRows, applyAppNotificationEnabledFromRows, applyPriceProviderFromRows, applyPriceChannelAccessFromRows, applySupportChatMenuEnabledFromRows, applyGroupSmsFromRows, applyCustomerSpecialPricingFromRows, setBannerEnabledFromSettings, setConditionalOrderEnabledFromSettings, setAutomationEnabledFromSettings, setProductFundsEnabledFromSettings, setPriceTriggerEnabledFromSettings, setAppNotificationEnabledFromSettings, setPriceProviderFromSettings, setPriceChannelAccessFromSettings, setStoreModeFromSettings, setTrackingSystemsEnabledFromSettings, setGroupSmsEnabledFromSettings, setCustomerSpecialPricingEnabledFromSettings } from '@/utils/config' import { EDITABLE_SETTING_GROUPS, SYSTEM_SETTING_GROUPS, @@ -490,6 +490,7 @@ async function initConfig() { applyBannerEnabledFromRows(baseData.value) applyTrackingSystemsEnabledFromRows(baseData.value) applyConditionalOrderEnabledFromRows(baseData.value) + applyAutomationEnabledFromRows(baseData.value) applyProductFundsEnabledFromRows(baseData.value) applyPriceTriggerEnabledFromRows(baseData.value) applyAppNotificationEnabledFromRows(baseData.value) @@ -561,6 +562,10 @@ function syncMenuFlagsFromSetting(key: string | undefined, value: string) { setConditionalOrderEnabledFromSettings(isSwitchOn(value)) return } + if (key === 'enable_automation') { + setAutomationEnabledFromSettings(isSwitchOn(value)) + return + } if (key === 'enable_product_funds') { setProductFundsEnabledFromSettings(isSwitchOn(value)) return diff --git a/src/pages/menuPages/configuration/settingGroups.ts b/src/pages/menuPages/configuration/settingGroups.ts index 272fe27..4afec4a 100644 --- a/src/pages/menuPages/configuration/settingGroups.ts +++ b/src/pages/menuPages/configuration/settingGroups.ts @@ -170,7 +170,7 @@ export const SYSTEM_SETTING_GROUPS: SettingGroupDef[] = [ title: 'دسترسی مشتری به قابلیت‌ها', icon: 'vuesax-linear:people', match: (k) => - /^(enable_conditional_order|enable_product_funds|has_page_price_trigger|has_page_notification|has_page_gift_card|enable_customer_level_profit|banner_enabled|jibit_enabled|customer_direct_sms|has_page_earn_money|group_sms|customer_special_pricing|tracking_systems_enabled|permision__enabled|show_to_users_chat)$/.test( + /^(enable_automation|enable_conditional_order|enable_product_funds|has_page_price_trigger|has_page_notification|has_page_gift_card|enable_customer_level_profit|banner_enabled|jibit_enabled|customer_direct_sms|has_page_earn_money|group_sms|customer_special_pricing|tracking_systems_enabled|permision__enabled|show_to_users_chat)$/.test( k ) }, diff --git a/src/pages/menuPages/configuration/settingTypes.ts b/src/pages/menuPages/configuration/settingTypes.ts index ccebad8..b19e386 100644 --- a/src/pages/menuPages/configuration/settingTypes.ts +++ b/src/pages/menuPages/configuration/settingTypes.ts @@ -207,6 +207,7 @@ export function isCodeManagedSettingKey(key?: string | null): boolean { export const SUPERADMIN_OWNED_SETTING_KEYS = new Set([ 'customer_direct_sms', 'customer_special_pricing', + 'enable_automation', 'enable_conditional_order', 'enable_customer_level_profit', 'enable_product_funds', @@ -310,6 +311,7 @@ const KEY_TYPE_FALLBACK: Record = { sell_fee: 'price', fee_free: 'number', fee_conditional_order: 'price', + enable_automation: 'switch', enable_conditional_order: 'switch', enable_product_funds: 'switch', has_page_price_trigger: 'switch', @@ -704,6 +706,8 @@ const KEY_HELP_FALLBACK: Record = { 'تعداد اولین سفارش‌های هر کاربر که از کارمزد معاف می‌شوند. صفر یعنی غیرفعال.', fee_conditional_order: 'مبلغ ریالی که با هر بار ثبت تریگر سفارش شرطی از کیف پول ریالی مشتری کم می‌شود. صفر = رایگان.', + enable_automation: + 'روشن: منوی اتوماسیون در پنل ادمین و اجرای موتور فعال است. خاموش: منو مخفی است و API/کران اجرا نمی‌شود. فقط از سوپرادمین قابل تغییر است.', enable_conditional_order: 'روشن: قابلیت سفارش شرطی سراسری فعال است. خاموش: منو و ارزیابی اجرا نمی‌شود. فقط از صفحه دیپلوی قابل تغییر است.', enable_product_funds: @@ -1016,6 +1020,7 @@ export const KEY_LABEL_FALLBACK: Record = { require_zero_main_gold_before_other_buy: 'الزام صفر بودن کیف اصلی قبل از خرید محصول دیگر', fee_free: 'معافیت کارمزد سفارش اول', fee_conditional_order: 'کارمزد سفارش شرطی', + enable_automation: 'اتوماسیون', enable_conditional_order: 'سفارش شرطی', enable_product_funds: 'قلک محصول', has_page_gift_card: 'کارت هدیه', @@ -1140,6 +1145,7 @@ export const SETTING_LOCKED_KEYS = new Set([ 'group_sms', 'customer_special_pricing', 'customer_direct_sms', + 'enable_automation', 'enable_conditional_order', 'enable_product_funds', 'has_page_price_trigger', diff --git a/src/pages/menuPages/setting/index.vue b/src/pages/menuPages/setting/index.vue index cff14c3..6fa7e66 100644 --- a/src/pages/menuPages/setting/index.vue +++ b/src/pages/menuPages/setting/index.vue @@ -26,7 +26,7 @@ import { useRouterStore } from '@core/stores/router' import { useUserStore } from '@/store/userStore' import { isDeployAdmin } from '@/utils/deployAdmin' import { hasSmsPanelAccess, isSmsBillingEnabled } from '@/utils/smsPanelAccess' -import { bannerEnabledSetting, trackingSystemsEnabledSetting, appNotificationEnabledSetting } from '@/utils/config' +import { bannerEnabledSetting, trackingSystemsEnabledSetting, appNotificationEnabledSetting, automationEnabledSetting } from '@/utils/config' import { get } from 'lodash' import type { RouteRecordRaw } from 'vue-router' @@ -40,6 +40,7 @@ const menu = computed(() => { .filter((child) => !child.meta?.hideMenu) .filter((child) => child.name !== 'banners' || bannerEnabledSetting.value) .filter((child) => child.name !== 'appNotifications' || appNotificationEnabledSetting.value) + .filter((child) => child.name !== 'automations' || automationEnabledSetting.value) .filter((child) => child.name !== 'captureSitesMain' || trackingSystemsEnabledSetting.value) .filter( (child) => diff --git a/src/router/routes/setting.ts b/src/router/routes/setting.ts index ad44ad6..c132a9d 100644 --- a/src/router/routes/setting.ts +++ b/src/router/routes/setting.ts @@ -2,7 +2,7 @@ import type { RouteRecordRaw } from 'vue-router' import { hasSmsPanelAccess } from '@/utils/smsPanelAccess' import { isDeployAdmin } from '@/utils/deployAdmin' import { useUserStore } from '@/store/userStore' -import { bannerEnabledSetting, trackingSystemsEnabledSetting, appNotificationEnabledSetting } from '@/utils/config' +import { bannerEnabledSetting, trackingSystemsEnabledSetting, appNotificationEnabledSetting, automationEnabledSetting } from '@/utils/config' const Setting: RouteRecordRaw = { name: 'settings', @@ -142,6 +142,11 @@ const Setting: RouteRecordRaw = { icon: 'vuesax-linear:flash', title: 'اتوماسیون', order: 4.7 + }, + beforeEnter() { + if (!automationEnabledSetting.value) { + return { name: 'configuration' } + } } }, { diff --git a/src/utils/config.ts b/src/utils/config.ts index 1086738..3f66d4c 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -46,6 +46,9 @@ export const customerDirectSmsEnabledSetting = ref(false) /** reactive — منو و UI سفارش شرطی (ادمین + کنترل‌های مشتری) */ export const conditionalOrderEnabledSetting = ref(false) +/** reactive — منوی اتوماسیون در تنظیمات ادمین */ +export const automationEnabledSetting = ref(false) + /** reactive — قلک per-product در اپ مشتری */ export const productFundsEnabledSetting = ref(false) @@ -167,6 +170,10 @@ export function setConditionalOrderEnabledFromSettings(value: boolean): void { conditionalOrderEnabledSetting.value = value } +export function setAutomationEnabledFromSettings(value: boolean): void { + automationEnabledSetting.value = value +} + export function setProductFundsEnabledFromSettings(value: boolean): void { productFundsEnabledSetting.value = value } @@ -283,6 +290,13 @@ export function applyConditionalOrderEnabledFromRows( if (row) setConditionalOrderEnabledFromSettings(isSwitchOn(row.value)) } +export function applyAutomationEnabledFromRows( + rows: Array<{ key?: string; value?: string | null }> +) { + const row = rows.find((item) => item.key === 'enable_automation') + if (row) setAutomationEnabledFromSettings(isSwitchOn(row.value)) +} + export function applyProductFundsEnabledFromRows( rows: Array<{ key?: string; value?: string | null }> ) { @@ -346,6 +360,7 @@ async function bootstrapSettingsFromApi(): Promise { applyGroupSmsFromRows(list) applyCustomerSpecialPricingFromRows(list) applyConditionalOrderEnabledFromRows(list) + applyAutomationEnabledFromRows(list) applyProductFundsEnabledFromRows(list) applyCustomerLevelProfitEnabledFromRows(list) applyPriceTriggerEnabledFromRows(list)