diff --git a/src/pages/menuPages/pricing/index.vue b/src/pages/menuPages/pricing/index.vue index 3a632ea..4bd895f 100644 --- a/src/pages/menuPages/pricing/index.vue +++ b/src/pages/menuPages/pricing/index.vue @@ -40,8 +40,12 @@ async function handleSync() { syncing.value = true try { const res = await runPriceSync() - message.success(res.message || 'انجام شد') - refreshTable() + if (res.data) { + message.success(res.message || 'انجام شد') + refreshTable() + } else { + message.info(res.message || 'قیمت تغییری نکرد') + } } catch (e) { console.error(e) message.error('خطا در به‌روزرسانی قیمت') diff --git a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue index 0e9d795..7558238 100644 --- a/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue +++ b/src/pages/menuPages/products/base/components/ProductEditorFormBody.vue @@ -191,7 +191,12 @@ - + isMeltedTradeGroup(props.form.group_type)) +const showUnitField = computed(() => isMeltedCategory.value || props.weightOption === '1') + const livePricePreview = computed(() => computeProductEditorPricePreview({ form: props.form, diff --git a/src/pages/menuPages/products/base/index.vue b/src/pages/menuPages/products/base/index.vue index 1bd35ce..427576c 100644 --- a/src/pages/menuPages/products/base/index.vue +++ b/src/pages/menuPages/products/base/index.vue @@ -84,6 +84,8 @@ import { resolveMeltedPriceSource } from '@/utils/productCategories' import { syncAndLoadCategories } from '@/utils/categorySelect' +import { getConfiguration } from '@/api/configuration' +import { resolveTradeWeightUnit } from '@/utils/weightUnit' dayjs.extend(customParseFormat) @@ -94,6 +96,7 @@ const refreshTable = () => table.value?.fetch() const methodOption = ref('1') const weightOption = ref('1') const meltedPriceOption = ref('app') +const tradeWeightUnit = ref('گرم') const activeKey_ = ref(['0']) const ProductIndexImage = ref>([]) const addUserVisible = ref(false) @@ -191,6 +194,15 @@ watch(addUserVisible, (visible) => { onMounted(() => { void refreshLivePrices() void loadCategorySelectItems() + void (async () => { + try { + const rows = await getConfiguration() + const unitRow = Array.isArray(rows) ? rows.find((row) => row.key === 'unit') : null + tradeWeightUnit.value = resolveTradeWeightUnit(unitRow?.value) + } catch { + tradeWeightUnit.value = 'گرم' + } + })() }) async function loadCategorySelectItems() { @@ -289,7 +301,10 @@ async function edit(record: Product) { if (isMeltedTradeGroup(productData.group_type)) { methodOption.value = '1' } - weightOption.value = productData.amount && productData.amount !== 1 ? '1' : '2' + weightOption.value = Number(productData.amount) > 0 ? '1' : '2' + if (weightOption.value === '2' && !isMeltedTradeGroup(productData.group_type)) { + productData.unit = undefined + } const start = productData.auto_open_at ? dayjs(productData.auto_open_at, 'HH:mm:ss') @@ -353,6 +368,16 @@ function resetData() { } async function ok() { + if (!isMeltedTradeGroup(form.value.group_type ?? '')) { + if (weightOption.value === '1') { + const amount = Number(form.value.amount) + if (!Number.isFinite(amount) || amount <= 0) { + message.error('لطفاً وزن محصول را وارد کنید') + return + } + } + } + try { await formRef.value?.validateFields() } catch { @@ -392,7 +417,14 @@ async function ok() { delete payload.price payload.price_offset_percent = Number(payload.price_offset_percent ?? 0) } - if (weightOption.value === '2') payload.amount = 1 + if (weightOption.value === '2') { + payload.amount = 0 + if (!isMeltedTradeGroup(payload.group_type)) { + payload.unit = tradeWeightUnit.value + } + } else if (!isMeltedTradeGroup(payload.group_type)) { + payload.amount = Number(payload.amount) + } if (isStoreApp() && !isMeltedTradeGroup(payload.group_type)) { payload.inventory = Math.max(0, Number(payload.inventory ?? 0)) @@ -445,5 +477,14 @@ const minusPrice = () => { if (form.value.price) form.value.price = parseInt(String(form.value.price)) - 10000 else form.value.price = -10000 } + +watch(weightOption, (option) => { + if (option === '1' && Number(form.value.amount) <= 0) { + form.value.amount = undefined + } + if (option === '2' && !isMeltedTradeGroup(form.value.group_type ?? '')) { + form.value.unit = undefined + } +})