From f24ec48c98a485af26321f7f4b74fe1611162f5a Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期三, 25 三月 2026 18:05:32 +0800
Subject: [PATCH] fix: 吨/公斤换算
---
src/pages/inventoryManagement/receiptManagement/index.vue | 47 +++++++++++
src/pages/inventoryManagement/stockManagement/add.vue | 46 ++++++++++-
src/pages/inventoryManagement/stockManagement/subtract.vue | 73 +++++++++++++++++-
src/pages/inventoryManagement/dispatchLog/index.vue | 46 ++++++++++
4 files changed, 195 insertions(+), 17 deletions(-)
diff --git a/src/pages/inventoryManagement/dispatchLog/index.vue b/src/pages/inventoryManagement/dispatchLog/index.vue
index df78c59..d8a8491 100644
--- a/src/pages/inventoryManagement/dispatchLog/index.vue
+++ b/src/pages/inventoryManagement/dispatchLog/index.vue
@@ -83,7 +83,19 @@
</view>
<view class="form-row">
- <text class="form-label required">姣涢噸(鍚�)</text>
+ <text class="form-label">鍗曚綅</text>
+ <up-radio-group v-model="editForm.unit" class="unit-radio-group">
+ <up-radio
+ v-for="opt in unitOptions"
+ :key="opt.value"
+ :label="opt.label"
+ :name="opt.value"
+ ></up-radio>
+ </up-radio-group>
+ </view>
+
+ <view class="form-row">
+ <text class="form-label required">姣涢噸</text>
<up-input
v-model="editForm.grossWeight"
type="digit"
@@ -93,7 +105,7 @@
</view>
<view class="form-row">
- <text class="form-label required">鐨噸(鍚�)</text>
+ <text class="form-label required">鐨噸</text>
<up-input
v-model="editForm.tareWeight"
type="digit"
@@ -103,7 +115,7 @@
</view>
<view class="form-row">
- <text class="form-label required">鍑�閲�(鍚�)</text>
+ <text class="form-label required">鍑�閲�</text>
<up-input v-model="editForm.netWeight" type="digit" placeholder="鑷姩璁$畻" disabled />
</view>
@@ -285,6 +297,7 @@
const editForm = reactive({
id: null,
licensePlateNo: '',
+ unit: '鍚�',
grossWeight: '',
tareWeight: '',
netWeight: '',
@@ -292,6 +305,26 @@
weighingOperator: '',
remark: ''
})
+
+const unitOptions = [
+ { label: '鍚�', value: '鍚�' },
+ { label: '鍏枻', value: '鍏枻' }
+]
+
+const normalizeUnit = (u) => {
+ if (!u) return '鍚�'
+ const s = String(u).trim()
+ if (s === '鍚�' || s === 't' || s === 'ton' || s === 'tonne') return '鍚�'
+ if (
+ s === '鍏枻' ||
+ s === 'kg' ||
+ s === 'kilogram' ||
+ s === '鍗冨厠' ||
+ s === 'kilograms'
+ )
+ return '鍏枻'
+ return '鍚�'
+}
const computeNetWeightEdit = () => {
const gross = Number(editForm.grossWeight)
@@ -324,6 +357,7 @@
const handleEdit = (row) => {
Object.assign(editForm, row || {})
+ editForm.unit = normalizeUnit(editForm.unit)
// 浠ュ綋鍓嶆瘺閲�/鐨噸涓哄噯璁$畻鍑�閲�
computeNetWeightEdit()
showEditModal.value = true
@@ -525,6 +559,12 @@
color: #f56c6c;
margin-right: 6rpx;
}
+.unit-radio-group {
+ display: flex;
+ gap: 24rpx;
+ align-items: center;
+ flex-wrap: wrap;
+}
.selector-trigger {
display: flex;
align-items: center;
diff --git a/src/pages/inventoryManagement/receiptManagement/index.vue b/src/pages/inventoryManagement/receiptManagement/index.vue
index 002b2d9..1d51f9b 100644
--- a/src/pages/inventoryManagement/receiptManagement/index.vue
+++ b/src/pages/inventoryManagement/receiptManagement/index.vue
@@ -81,16 +81,29 @@
<text class="form-label required">杞︾墝鍙�</text>
<up-input v-model="editForm.licensePlateNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
</view>
+
<view class="form-row">
- <text class="form-label required">姣涢噸(鍚�)</text>
+ <text class="form-label">鍗曚綅</text>
+ <up-radio-group v-model="editForm.unit" class="unit-radio-group">
+ <up-radio
+ v-for="opt in unitOptions"
+ :key="opt.value"
+ :label="opt.label"
+ :name="opt.value"
+ ></up-radio>
+ </up-radio-group>
+ </view>
+
+ <view class="form-row">
+ <text class="form-label required">姣涢噸</text>
<up-input v-model="editForm.grossWeight" type="digit" placeholder="璇疯緭鍏ユ瘺閲�" @blur="computeNetWeightEdit" />
</view>
<view class="form-row">
- <text class="form-label required">鐨噸(鍚�)</text>
+ <text class="form-label required">鐨噸</text>
<up-input v-model="editForm.tareWeight" type="digit" placeholder="璇疯緭鍏ョ毊閲�" @blur="computeNetWeightEdit" />
</view>
<view class="form-row">
- <text class="form-label required">鍑�閲�(鍚�)</text>
+ <text class="form-label required">鍑�閲�</text>
<up-input v-model="editForm.netWeight" type="digit" placeholder="鑷姩璁$畻" disabled />
</view>
<view class="form-row">
@@ -275,6 +288,7 @@
const editForm = reactive({
id: null,
licensePlateNo: '',
+ unit: '鍚�',
grossWeight: '',
tareWeight: '',
netWeight: '',
@@ -282,6 +296,26 @@
weighingOperator: '',
remark: ''
})
+
+const unitOptions = [
+ { label: '鍚�', value: '鍚�' },
+ { label: '鍏枻', value: '鍏枻' }
+]
+
+const normalizeUnit = (u) => {
+ if (!u) return '鍚�'
+ const s = String(u).trim()
+ if (s === '鍚�' || s === 't' || s === 'ton' || s === 'tonne') return '鍚�'
+ if (
+ s === '鍏枻' ||
+ s === 'kg' ||
+ s === 'kilogram' ||
+ s === '鍗冨厠' ||
+ s === 'kilograms'
+ )
+ return '鍏枻'
+ return '鍚�'
+}
const computeNetWeightEdit = () => {
const gross = Number(editForm.grossWeight)
@@ -312,6 +346,7 @@
const handleEdit = (row) => {
Object.assign(editForm, row || {})
+ editForm.unit = normalizeUnit(editForm.unit)
computeNetWeightEdit()
showEditModal.value = true
}
@@ -534,6 +569,12 @@
color: #f56c6c;
margin-right: 6rpx;
}
+.unit-radio-group {
+ display: flex;
+ gap: 24rpx;
+ align-items: center;
+ flex-wrap: wrap;
+}
.selector-trigger {
display: flex;
align-items: center;
diff --git a/src/pages/inventoryManagement/stockManagement/add.vue b/src/pages/inventoryManagement/stockManagement/add.vue
index 8c29d09..ae1329c 100644
--- a/src/pages/inventoryManagement/stockManagement/add.vue
+++ b/src/pages/inventoryManagement/stockManagement/add.vue
@@ -19,7 +19,14 @@
</view>
<view class="form-row">
<text class="form-label">鍗曚綅</text>
- <up-input v-model="form.unit" disabled placeholder="璇烽�夋嫨浜у搧鍚庤嚜鍔ㄥ甫鍑�" />
+ <up-radio-group v-model="form.unit" class="unit-radio-group">
+ <up-radio
+ v-for="opt in unitOptions"
+ :key="opt.value"
+ :label="opt.label"
+ :name="opt.value"
+ ></up-radio>
+ </up-radio-group>
</view>
</view>
@@ -39,7 +46,7 @@
<up-input v-model="form.licensePlateNo" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
</view>
<view class="form-row">
- <text class="form-label required">姣涢噸(鍚�)</text>
+ <text class="form-label required">姣涢噸</text>
<up-input
v-model="form.grossWeight"
type="digit"
@@ -47,7 +54,7 @@
/>
</view>
<view class="form-row">
- <text class="form-label required">鐨噸(鍚�)</text>
+ <text class="form-label required">鐨噸</text>
<up-input
v-model="form.tareWeight"
type="digit"
@@ -55,7 +62,7 @@
/>
</view>
<view class="form-row">
- <text class="form-label">鍑�閲�(鍚�)</text>
+ <text class="form-label">鍑�閲�</text>
<up-input
v-model="form.netWeight"
type="digit"
@@ -156,7 +163,7 @@
productModelId: undefined,
productName: '',
productModelName: '',
- unit: '',
+ unit: '鍚�',
productType: undefined,
parentName: '',
licensePlateNo: '',
@@ -168,6 +175,26 @@
qualitity: '',
remark: ''
})
+
+const unitOptions = [
+ { label: '鍚�', value: '鍚�' },
+ { label: '鍏枻', value: '鍏枻' }
+]
+
+const normalizeUnit = (u) => {
+ if (!u) return ''
+ const s = String(u).trim()
+ if (s === '鍚�' || s === 't' || s === 'ton' || s === 'tonne') return '鍚�'
+ if (
+ s === '鍏枻' ||
+ s === 'kg' ||
+ s === 'kilogram' ||
+ s === '鍗冨厠' ||
+ s === 'kilograms'
+ )
+ return '鍏枻'
+ return s
+}
const type = ref('0') // 鍥哄畾鍚堟牸搴撳瓨
const isQualified = computed(() => true)
@@ -227,7 +254,8 @@
form.productModelId = item.id
form.productName = item.productName
form.productModelName = item.model
- form.unit = item.unit
+ const normalizedUnit = normalizeUnit(item.unit)
+ form.unit = normalizedUnit === '鍚�' || normalizedUnit === '鍏枻' ? normalizedUnit : '鍚�'
form.productType = item.productType
form.parentName = parentName
@@ -470,6 +498,12 @@
font-size: 24rpx;
color: #666;
}
+.unit-radio-group {
+ display: flex;
+ gap: 24rpx;
+ align-items: center;
+ flex-wrap: wrap;
+}
.no-data {
text-align: center;
padding: 40rpx 0;
diff --git a/src/pages/inventoryManagement/stockManagement/subtract.vue b/src/pages/inventoryManagement/stockManagement/subtract.vue
index 7fb85e1..6da92d4 100644
--- a/src/pages/inventoryManagement/stockManagement/subtract.vue
+++ b/src/pages/inventoryManagement/stockManagement/subtract.vue
@@ -14,7 +14,14 @@
</view>
<view class="form-row">
<text class="form-label">鍗曚綅</text>
- <up-input v-model="form.unit" disabled />
+ <up-radio-group v-model="form.unit" class="unit-radio-group">
+ <up-radio
+ v-for="opt in unitOptions"
+ :key="opt.value"
+ :label="opt.label"
+ :name="opt.value"
+ ></up-radio>
+ </up-radio-group>
</view>
</view>
@@ -22,7 +29,11 @@
<view class="section-title">鍑哄簱淇℃伅</view>
<view class="form-row">
<text class="form-label">鍑哄簱鏁伴噺</text>
- <up-input v-model="form.stockOutNum" type="number" :placeholder="'鏈�澶�' + (form.unLockedQuantity ?? 0)" />
+ <up-input
+ v-model="form.stockOutNum"
+ type="number"
+ :placeholder="'鏈�澶�' + maxOutQuantity"
+ />
</view>
<view class="form-row">
<text class="form-label">澶囨敞</text>
@@ -52,7 +63,7 @@
parentName: '',
productName: '',
model: '',
- unit: '',
+ unit: '鍚�',
qualitity: undefined,
lockedQuantity: undefined,
unLockedQuantity: undefined,
@@ -69,6 +80,45 @@
})
const type = ref('0') // 鍥哄畾鍚堟牸搴撳瓨
+const unitOptions = [
+ { label: '鍚�', value: '鍚�' },
+ { label: '鍏枻', value: '鍏枻' }
+]
+
+// 璁板綍鐨勫師濮嬪崟浣嶏紝鐢ㄤ簬鍚�/鍏枻鎹㈢畻鏍¢獙鈥滄渶澶у彲鍑哄簱鏁伴噺鈥�
+const recordUnit = ref('')
+
+const normalizeUnit = (u) => {
+ if (!u) return ''
+ const s = String(u).trim()
+ if (s === '鍚�' || s === 't' || s === 'ton' || s === 'tonne') return '鍚�'
+ if (
+ s === '鍏枻' ||
+ s === 'kg' ||
+ s === 'kilogram' ||
+ s === '鍗冨厠' ||
+ s === 'kilograms'
+ )
+ return '鍏枻'
+ return s
+}
+
+const convertByUnit = (value, fromUnit, toUnit) => {
+ if (value === '' || value === undefined || value === null) return 0
+ const num = Number(value)
+ if (Number.isNaN(num)) return 0
+ if (fromUnit === toUnit) return num
+ // 榛樿鍙鐞嗗惃<->鍏枻锛涘叾浠栧崟浣嶇洿鎺ュ師鏍疯繑鍥�
+ if (fromUnit === '鍚�' && toUnit === '鍏枻') return num * 1000
+ if (fromUnit === '鍏枻' && toUnit === '鍚�') return num / 1000
+ return num
+}
+
+const maxOutQuantity = computed(() => {
+ const baseMax = Number(form.unLockedQuantity ?? 0)
+ if (!recordUnit.value || !form.unit) return baseMax
+ return convertByUnit(baseMax, recordUnit.value, form.unit)
+})
onLoad((options) => {
type.value = '0'
@@ -79,6 +129,9 @@
const item = payload && payload.item ? payload.item : payload
// 灏嗗垪琛ㄨ褰曠殑瀹屾暣瀛楁鎷疯礉鍒拌〃鍗曚腑锛屼繚鎸佷笌 PC 绔� Subtract.vue 涓�鑷�
Object.assign(form, item)
+ const normalizedUnit = normalizeUnit(form.unit)
+ form.unit = normalizedUnit === '鍚�' || normalizedUnit === '鍏枻' ? normalizedUnit : '鍚�'
+ recordUnit.value = form.unit
uni.removeStorageSync('stockSubtractRecord')
} catch (e) {
uni.removeStorageSync('stockSubtractRecord')
@@ -91,8 +144,11 @@
uni.showToast({ title: '璁板綍淇℃伅缂哄け锛屾棤娉曞嚭搴�', icon: 'none' })
return
}
+ const normalizedUnit = normalizeUnit(form.unit)
+ form.unit = normalizedUnit === '鍚�' || normalizedUnit === '鍏枻' ? normalizedUnit : '鍚�'
+
const outNum = Number(form.stockOutNum)
- const max = Number(form.unLockedQuantity ?? 0)
+ const max = Number(maxOutQuantity.value ?? 0)
if (!outNum || outNum <= 0 || outNum > max) {
uni.showToast({ title: `璇疯緭鍏� 1~${max} 涔嬮棿鐨勬暟閲廯, icon: 'none' })
return
@@ -100,7 +156,8 @@
const payload = {
id: form.id,
stockOutNum: outNum,
- remark: form.remark
+ remark: form.remark,
+ unit: form.unit
}
subtractStockInventory(payload)
.then(() => {
@@ -181,5 +238,11 @@
align-items: center;
justify-content: center;
}
+.unit-radio-group {
+ display: flex;
+ gap: 24rpx;
+ align-items: center;
+ flex-wrap: wrap;
+}
</style>
--
Gitblit v1.9.3