added percent in product fee 5

This commit is contained in:
2026-07-04 22:13:37 +03:30
parent 5690f83657
commit bcf7b2f0ae
4 changed files with 25 additions and 21 deletions
+3
View File
@@ -11,6 +11,7 @@
:disabled="props.disabled"
:placeHolder="props.placeHolder"
:size="props.size"
:step="props.step"
:type="props.type"
class=""
@change="handlerChange"
@@ -23,6 +24,7 @@
:disabled="props.disabled"
:placeHolder="props.placeHolder"
:size="props.size"
:step="props.step"
:type="props.type === 'price' ? 'tel' : props.type"
class=""
@change="handlerChange"
@@ -48,6 +50,7 @@ interface Prop {
addonBgColor?: String
addonTextColor?: String
placeHolder?: String
step?: String | Number
}
const addonBgColor = computed(() => props.addonBgColor)
@@ -263,9 +263,10 @@
v-model:value="form.cash_fee_buy"
:addon-before="form.cash_fee_buy_is_percent ? '%' : 'ریال'"
:type="form.cash_fee_buy_is_percent ? 'number' : 'price'"
:step="form.cash_fee_buy_is_percent ? 'any' : undefined"
size="large"
class="w-full product-cash-fee-input"
:placeHolder="form.cash_fee_buy_is_percent ? 'مثلاً 5' : 'مثلاً 100000'"
:placeHolder="form.cash_fee_buy_is_percent ? 'مثلاً 0.5 یا 5' : 'مثلاً 100000'"
/>
</div>
</a-form-item>
@@ -286,9 +287,10 @@
v-model:value="form.cash_fee_sell"
:addon-before="form.cash_fee_sell_is_percent ? '%' : 'ریال'"
:type="form.cash_fee_sell_is_percent ? 'number' : 'price'"
:step="form.cash_fee_sell_is_percent ? 'any' : undefined"
size="large"
class="w-full product-cash-fee-input"
:placeHolder="form.cash_fee_sell_is_percent ? 'مثلاً 10' : 'مثلاً 200000'"
:placeHolder="form.cash_fee_sell_is_percent ? 'مثلاً 0.5 یا 10' : 'مثلاً 200000'"
/>
</div>
</a-form-item>
@@ -463,12 +465,12 @@ const inventoryHelp: DashboardHelp = {
const cashFeeBuyHelp: DashboardHelp = {
description: 'مبلغ اضافه روی قیمت پایه برای خرید — نقدی (ریال ثابت) یا درصدی از مظنه.',
formula: 'نقدی: +۱۰۰٬۰۰۰ ریال | درصدی: ۵٪ از قیمت پایه',
formula: 'نقدی: +۱۰۰٬۰۰۰ ریال | درصدی: ۰.۵٪ یا ۵٪ از قیمت پایه',
}
const cashFeeSellHelp: DashboardHelp = {
description: 'مبلغ کسر از قیمت پایه برای فروش — نقدی (ریال ثابت) یا درصدی از مظنه.',
formula: 'نقدی: −۲۰۰٬۰۰۰ ریال | درصدی: ۱۰٪ از قیمت پایه',
formula: 'نقدی: −۲۰۰٬۰۰۰ ریال | درصدی: ۰.۵٪ یا ۱۰٪ از قیمت پایه',
}
const showInAssetsHelp: DashboardHelp = {
@@ -1,25 +1,13 @@
import type { BaseTableColumn } from '@core/type/baseTable'
import CustomTag from '@/components/CustomTag.vue'
import { isStoreApp } from '@/utils/config'
import { formatAdminCashFeeLabel } from '@/utils/productCashFee'
import { usePrice } from '@core/utils/usePrice'
function formatMoney(value: number | null | undefined) {
return usePrice(value ?? 0, true, '').trim()
}
function formatProductCashFee(value: number | null | undefined, isPercent?: boolean | null) {
const raw = Number(value ?? 0)
if (!raw) {
return '۰'
}
if (isPercent) {
return `${raw}%`
}
return formatMoney(raw)
}
const inventoryColumn: BaseTableColumn = {
title: 'موجودی',
dataIndex: 'inventory',
@@ -99,14 +87,14 @@ export function getProductColumns(): BaseTableColumn[] {
dataIndex: 'cash_fee_buy',
key: 'cash_fee_buy',
type: 'Number',
customRender: ({ record }) => formatProductCashFee(record.cash_fee_buy, record.cash_fee_buy_is_percent)
customRender: ({ record }) => formatAdminCashFeeLabel(record.cash_fee_buy, record.cash_fee_buy_is_percent)
},
{
title: 'هزینه فروش',
dataIndex: 'cash_fee_sell',
key: 'cash_fee_sell',
type: 'Number',
customRender: ({ record }) => formatProductCashFee(record.cash_fee_sell, record.cash_fee_sell_is_percent)
customRender: ({ record }) => formatAdminCashFeeLabel(record.cash_fee_sell, record.cash_fee_sell_is_percent)
},
...(isStoreApp() ? [inventoryColumn] : []),
{
+13 -2
View File
@@ -1,10 +1,20 @@
/** پارس مقدار هزینه خرید/فروش (نقدی یا درصدی) قبل از ارسال به API */
function normalizeDecimalString(value: string) {
const trimmed = value.trim()
if (!trimmed.includes(',') || trimmed.includes('.')) {
return trimmed.replaceAll(',', '')
}
// 0,5 => 0.5
return trimmed.replace(',', '.')
}
export function parseCashFeeValue(value: unknown): number {
if (value === undefined || value === null) {
return 0
}
const raw = String(value).trim().replaceAll(',', '')
const raw = normalizeDecimalString(String(value))
if (raw === '') {
return 0
}
@@ -31,7 +41,8 @@ export function formatAdminCashFeeLabel(
}
if (isPercent) {
return `${raw}%`
const text = Number.isInteger(raw) ? String(raw) : String(parseFloat(raw.toFixed(4)))
return `${text}%`
}
return String(raw)