added percent in product fee 5
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
:disabled="props.disabled"
|
:disabled="props.disabled"
|
||||||
:placeHolder="props.placeHolder"
|
:placeHolder="props.placeHolder"
|
||||||
:size="props.size"
|
:size="props.size"
|
||||||
|
:step="props.step"
|
||||||
:type="props.type"
|
:type="props.type"
|
||||||
class=""
|
class=""
|
||||||
@change="handlerChange"
|
@change="handlerChange"
|
||||||
@@ -23,6 +24,7 @@
|
|||||||
:disabled="props.disabled"
|
:disabled="props.disabled"
|
||||||
:placeHolder="props.placeHolder"
|
:placeHolder="props.placeHolder"
|
||||||
:size="props.size"
|
:size="props.size"
|
||||||
|
:step="props.step"
|
||||||
:type="props.type === 'price' ? 'tel' : props.type"
|
:type="props.type === 'price' ? 'tel' : props.type"
|
||||||
class=""
|
class=""
|
||||||
@change="handlerChange"
|
@change="handlerChange"
|
||||||
@@ -48,6 +50,7 @@ interface Prop {
|
|||||||
addonBgColor?: String
|
addonBgColor?: String
|
||||||
addonTextColor?: String
|
addonTextColor?: String
|
||||||
placeHolder?: String
|
placeHolder?: String
|
||||||
|
step?: String | Number
|
||||||
}
|
}
|
||||||
|
|
||||||
const addonBgColor = computed(() => props.addonBgColor)
|
const addonBgColor = computed(() => props.addonBgColor)
|
||||||
|
|||||||
@@ -263,9 +263,10 @@
|
|||||||
v-model:value="form.cash_fee_buy"
|
v-model:value="form.cash_fee_buy"
|
||||||
:addon-before="form.cash_fee_buy_is_percent ? '%' : 'ریال'"
|
:addon-before="form.cash_fee_buy_is_percent ? '%' : 'ریال'"
|
||||||
:type="form.cash_fee_buy_is_percent ? 'number' : 'price'"
|
:type="form.cash_fee_buy_is_percent ? 'number' : 'price'"
|
||||||
|
:step="form.cash_fee_buy_is_percent ? 'any' : undefined"
|
||||||
size="large"
|
size="large"
|
||||||
class="w-full product-cash-fee-input"
|
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>
|
</div>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -286,9 +287,10 @@
|
|||||||
v-model:value="form.cash_fee_sell"
|
v-model:value="form.cash_fee_sell"
|
||||||
:addon-before="form.cash_fee_sell_is_percent ? '%' : 'ریال'"
|
:addon-before="form.cash_fee_sell_is_percent ? '%' : 'ریال'"
|
||||||
:type="form.cash_fee_sell_is_percent ? 'number' : 'price'"
|
:type="form.cash_fee_sell_is_percent ? 'number' : 'price'"
|
||||||
|
:step="form.cash_fee_sell_is_percent ? 'any' : undefined"
|
||||||
size="large"
|
size="large"
|
||||||
class="w-full product-cash-fee-input"
|
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>
|
</div>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
@@ -463,12 +465,12 @@ const inventoryHelp: DashboardHelp = {
|
|||||||
|
|
||||||
const cashFeeBuyHelp: DashboardHelp = {
|
const cashFeeBuyHelp: DashboardHelp = {
|
||||||
description: 'مبلغ اضافه روی قیمت پایه برای خرید — نقدی (ریال ثابت) یا درصدی از مظنه.',
|
description: 'مبلغ اضافه روی قیمت پایه برای خرید — نقدی (ریال ثابت) یا درصدی از مظنه.',
|
||||||
formula: 'نقدی: +۱۰۰٬۰۰۰ ریال | درصدی: ۵٪ از قیمت پایه',
|
formula: 'نقدی: +۱۰۰٬۰۰۰ ریال | درصدی: ۰.۵٪ یا ۵٪ از قیمت پایه',
|
||||||
}
|
}
|
||||||
|
|
||||||
const cashFeeSellHelp: DashboardHelp = {
|
const cashFeeSellHelp: DashboardHelp = {
|
||||||
description: 'مبلغ کسر از قیمت پایه برای فروش — نقدی (ریال ثابت) یا درصدی از مظنه.',
|
description: 'مبلغ کسر از قیمت پایه برای فروش — نقدی (ریال ثابت) یا درصدی از مظنه.',
|
||||||
formula: 'نقدی: −۲۰۰٬۰۰۰ ریال | درصدی: ۱۰٪ از قیمت پایه',
|
formula: 'نقدی: −۲۰۰٬۰۰۰ ریال | درصدی: ۰.۵٪ یا ۱۰٪ از قیمت پایه',
|
||||||
}
|
}
|
||||||
|
|
||||||
const showInAssetsHelp: DashboardHelp = {
|
const showInAssetsHelp: DashboardHelp = {
|
||||||
|
|||||||
@@ -1,25 +1,13 @@
|
|||||||
import type { BaseTableColumn } from '@core/type/baseTable'
|
import type { BaseTableColumn } from '@core/type/baseTable'
|
||||||
import CustomTag from '@/components/CustomTag.vue'
|
import CustomTag from '@/components/CustomTag.vue'
|
||||||
import { isStoreApp } from '@/utils/config'
|
import { isStoreApp } from '@/utils/config'
|
||||||
|
import { formatAdminCashFeeLabel } from '@/utils/productCashFee'
|
||||||
import { usePrice } from '@core/utils/usePrice'
|
import { usePrice } from '@core/utils/usePrice'
|
||||||
|
|
||||||
function formatMoney(value: number | null | undefined) {
|
function formatMoney(value: number | null | undefined) {
|
||||||
return usePrice(value ?? 0, true, '').trim()
|
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 = {
|
const inventoryColumn: BaseTableColumn = {
|
||||||
title: 'موجودی',
|
title: 'موجودی',
|
||||||
dataIndex: 'inventory',
|
dataIndex: 'inventory',
|
||||||
@@ -99,14 +87,14 @@ export function getProductColumns(): BaseTableColumn[] {
|
|||||||
dataIndex: 'cash_fee_buy',
|
dataIndex: 'cash_fee_buy',
|
||||||
key: 'cash_fee_buy',
|
key: 'cash_fee_buy',
|
||||||
type: 'Number',
|
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: 'هزینه فروش',
|
title: 'هزینه فروش',
|
||||||
dataIndex: 'cash_fee_sell',
|
dataIndex: 'cash_fee_sell',
|
||||||
key: 'cash_fee_sell',
|
key: 'cash_fee_sell',
|
||||||
type: 'Number',
|
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] : []),
|
...(isStoreApp() ? [inventoryColumn] : []),
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,20 @@
|
|||||||
/** پارس مقدار هزینه خرید/فروش (نقدی یا درصدی) قبل از ارسال به API */
|
/** پارس مقدار هزینه خرید/فروش (نقدی یا درصدی) قبل از ارسال به 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 {
|
export function parseCashFeeValue(value: unknown): number {
|
||||||
if (value === undefined || value === null) {
|
if (value === undefined || value === null) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
const raw = String(value).trim().replaceAll(',', '')
|
const raw = normalizeDecimalString(String(value))
|
||||||
if (raw === '') {
|
if (raw === '') {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -31,7 +41,8 @@ export function formatAdminCashFeeLabel(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isPercent) {
|
if (isPercent) {
|
||||||
return `${raw}%`
|
const text = Number.isInteger(raw) ? String(raw) : String(parseFloat(raw.toFixed(4)))
|
||||||
|
return `${text}%`
|
||||||
}
|
}
|
||||||
|
|
||||||
return String(raw)
|
return String(raw)
|
||||||
|
|||||||
Reference in New Issue
Block a user