diff --git a/src/model/product.ts b/src/model/product.ts index cae1cc8..998b6c3 100644 --- a/src/model/product.ts +++ b/src/model/product.ts @@ -24,6 +24,7 @@ export interface Product{ open_sell: boolean show: boolean show_in_assets?: boolean + use_last_price_if_zero?: boolean title: string updated_at: string methodOption: number diff --git a/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx b/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx index f980126..2acab57 100644 --- a/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx +++ b/src/pages/menuPages/customers/base/hooks/fundsColumns.tsx @@ -40,13 +40,14 @@ export const cols: BaseTableColumn[] = [ // className: 'column-money' }, { - title: 'نام قلک', - dataIndex: 'fund.title', - key: 'fund.title', - type: 'Text' + title: 'نام محصول', + dataIndex: 'product.title', + key: 'product.title', + type: 'Text', + customRender: (record: any) => record.record?.product?.title ?? '-' }, { - title: 'موجودی طلا', + title: 'موجودی', dataIndex: 'gold', key: 'gold', type: 'Number' diff --git a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue index 8eff604..9adb9b5 100644 --- a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue +++ b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue @@ -46,6 +46,12 @@
مثبت = گران‌تر، منفی = ارزان‌تر نسبت به قیمت مرجع.
+ + + + اگر provider قیمت نداد (صفر)، با آخرین قیمت ذخیره‌شده معامله شود + +
@@ -113,6 +119,12 @@
مثبت = گران‌تر، منفی = ارزان‌تر نسبت به قیمت اتوماتیک. مثلاً ۵ یعنی ۵٪ بالاتر از مرجع.
+ + + + اگر provider قیمت نداد (صفر)، با آخرین قیمت ذخیره‌شده معامله شود + +
diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue index 73ce627..d71aa29 100644 --- a/src/pages/menuPages/products/base/index.vue +++ b/src/pages/menuPages/products/base/index.vue @@ -280,6 +280,7 @@ async function edit(record: Product) { form.value = normalizeProductOrderLimitForm({ ...productData, + show_in_assets: productData.show_in_assets ?? false, price_offset_percent: productData.price_offset_percent ?? 0, direct_price: productData.direct_price ?? 0, auto_open_at: start.isValid() ? start : dayjs('00:00:00', 'HH:mm:ss'), @@ -320,7 +321,8 @@ function resetData() { file_id: undefined, file: undefined, order_limit_enabled: false, - show_in_assets: true, + show_in_assets: false, + use_last_price_if_zero: false, min_order_cash: undefined, max_order_cash: undefined, auto_open_at: dayjs('00:00:00', 'HH:mm:ss'), diff --git a/src/utils/productEditorPrice.ts b/src/utils/productEditorPrice.ts index 7d16092..42c3f9e 100644 --- a/src/utils/productEditorPrice.ts +++ b/src/utils/productEditorPrice.ts @@ -56,12 +56,24 @@ export type ProductEditorPricePreview = | { status: 'ready'; amount: number; source: string } | { status: 'empty'; message: string } +function resolveStoredFallbackPrice( + storedPrice: number | null | undefined, + useLastPriceIfZero: boolean | undefined +): number { + if (!useLastPriceIfZero) { + return 0 + } + + return Number(storedPrice) || 0 +} + export function computeProductEditorPricePreview(input: { form: { group_type?: string price?: number | null reading_method?: string | null price_offset_percent?: number | null + use_last_price_if_zero?: boolean | null } methodOption: string meltedPriceOption: MeltedPriceSource @@ -99,11 +111,17 @@ export function computeProductEditorPricePreview(input: { return { status: 'empty', message: '' } } const { base, profit } = normalizeReferenceBase(entry) - return { - status: 'ready', - amount: adjustedProductPrice(base, profit, offsetPercent), - source: entry.name + const liveAmount = adjustedProductPrice(base, profit, offsetPercent) + if (liveAmount > 0) { + return { status: 'ready', amount: liveAmount, source: entry.name } } + const fallback = resolveStoredFallbackPrice( + input.form.price, + input.form.use_last_price_if_zero ?? false + ) + return fallback > 0 + ? { status: 'ready', amount: fallback, source: 'آخرین قیمت ذخیره‌شده' } + : { status: 'empty', message: 'قیمت provider صفر است' } } if (input.methodOption === '1') { @@ -121,9 +139,15 @@ export function computeProductEditorPricePreview(input: { return { status: 'empty', message: '' } } const { base, profit } = normalizeReferenceBase(entry) - return { - status: 'ready', - amount: adjustedProductPrice(base, profit, offsetPercent), - source: entry.name + const liveAmount = adjustedProductPrice(base, profit, offsetPercent) + if (liveAmount > 0) { + return { status: 'ready', amount: liveAmount, source: entry.name } } + const fallback = resolveStoredFallbackPrice( + input.form.price, + input.form.use_last_price_if_zero ?? false + ) + return fallback > 0 + ? { status: 'ready', amount: fallback, source: 'آخرین قیمت ذخیره‌شده' } + : { status: 'empty', message: 'قیمت provider صفر است' } }