diff --git a/src/model/product.ts b/src/model/product.ts index 8859b69..e8636c5 100644 --- a/src/model/product.ts +++ b/src/model/product.ts @@ -27,6 +27,7 @@ export interface Product{ show: boolean show_in_assets?: boolean show_on_tv?: boolean + show_in_list?: boolean trade_by_quantity?: boolean override_trading_hours?: boolean use_last_price_if_zero?: boolean @@ -40,6 +41,8 @@ export interface Product{ app_price?: boolean price_formula_enabled?: boolean price_formula?: string | null + tv_price_formula_enabled?: boolean + tv_price_formula?: string | null price: number price_profit?: number price_offset_percent?: number diff --git a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue index 4999804..1be6a6f 100644 --- a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue +++ b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue @@ -411,6 +411,21 @@ + +
+
+ +
+ + + +
@@ -590,6 +605,7 @@ import { resolveTradeWeightUnit, weightFieldLabelForUnit } from '@/utils/weightU import type { DashboardHelp } from '@/pages/dashboard/dashboardSectionCopy' import DashboardLabelWithHelp from '@/pages/dashboard/components/DashboardLabelWithHelp.vue' import FormulaPriceSection from './FormulaPriceSection.vue' +import TvFormulaPriceSection from './TvFormulaPriceSection.vue' import dayjs from 'dayjs' import { computed, onMounted, ref, watch } from 'vue' @@ -669,6 +685,10 @@ const showOnTvHelp: DashboardHelp = { description: 'روشن: این محصول در صفحه تابلو قیمت مشتری (/tv) نمایش داده می‌شود.', } +const showInListHelp: DashboardHelp = { + description: 'روشن: این محصول در صفحه لیست محصولات اپ مشتری نمایش داده می‌شود.', +} + const autoOpenHelp: DashboardHelp = { description: 'ساعت شروع معامله این محصول — فقط وقتی ساعت اختصاصی روشن باشد.', } @@ -820,6 +840,11 @@ function onFormulaEnabledChange(enabled: boolean) { } } +function onTvFormulaFormPatch(next: Record) { + props.form.tv_price_formula_enabled = !!next.tv_price_formula_enabled + props.form.tv_price_formula = next.tv_price_formula ?? props.form.tv_price_formula +} + watch( () => props.methodOption, (option) => { diff --git a/src/pages/menuPages/products/base/components/TvFormulaPriceSection.vue b/src/pages/menuPages/products/base/components/TvFormulaPriceSection.vue new file mode 100644 index 0000000..a70a921 --- /dev/null +++ b/src/pages/menuPages/products/base/components/TvFormulaPriceSection.vue @@ -0,0 +1,183 @@ + + + + + + + diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue index 44a01fe..97dd592 100644 --- a/src/pages/menuPages/products/base/index.vue +++ b/src/pages/menuPages/products/base/index.vue @@ -367,10 +367,13 @@ async function edit(record: Product) { ...productData, show_in_assets: productData.show_in_assets ?? false, show_on_tv: productData.show_on_tv ?? false, + show_in_list: productData.show_in_list ?? true, trade_by_quantity: productData.trade_by_quantity ?? false, app_price: Boolean(productData.app_price), price_formula_enabled: Boolean(productData.price_formula_enabled), price_formula: productData.price_formula ?? '', + tv_price_formula_enabled: Boolean(productData.tv_price_formula_enabled), + tv_price_formula: productData.tv_price_formula ?? '', override_trading_hours: productData.override_trading_hours ?? false, has_physical_delivery: productData.has_physical_delivery ?? false, min_physical_delivery_quantity: @@ -439,11 +442,14 @@ function resetData() { app_price: false, price_formula_enabled: false, price_formula: '', + tv_price_formula_enabled: false, + tv_price_formula: '', file_id: undefined, file: undefined, order_limit_enabled: false, show_in_assets: false, show_on_tv: false, + show_in_list: true, trade_by_quantity: false, override_trading_hours: false, use_last_price_if_zero: false, @@ -470,6 +476,8 @@ const PRICING_FIELDS = new Set([ 'use_last_price_if_zero', 'price_formula', 'price_formula_enabled', + 'tv_price_formula', + 'tv_price_formula_enabled', ]) const DETAILS_FIELDS = new Set([ 'title', @@ -483,6 +491,7 @@ const DETAILS_FIELDS = new Set([ 'trade_by_quantity', 'show_in_assets', 'show_on_tv', + 'show_in_list', ]) const FEES_FIELDS = new Set(['cash_fee_buy', 'cash_fee_sell']) const HOURS_FIELDS = new Set(['override_trading_hours', 'auto_open_at', 'auto_close_at']) @@ -609,6 +618,10 @@ async function saveProduct() { payload.app_price = false payload.price_formula_enabled = false } + if (!payload.show_on_tv) { + payload.tv_price_formula_enabled = false + } + if (weightOption.value === '2') { payload.amount = 0 if (!isMeltedTradeGroup(payload.group_type)) {