9.18/3
This commit is contained in:
@@ -124,7 +124,7 @@
|
||||
<input type="number" v-model.number="it.quantity" @input="recalc()" />
|
||||
</view>
|
||||
<view class="col price">
|
||||
<input type="number" v-model.number="it.unitPrice" @input="recalc()" />
|
||||
<input type="number" v-model.number="it.unitPrice" @input="onPriceInput(it)" />
|
||||
</view>
|
||||
<view class="col amount">¥ {{ (Number(it.quantity)*Number(it.unitPrice)).toFixed(2) }}</view>
|
||||
</view>
|
||||
@@ -139,7 +139,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { post } from '../../common/http.js'
|
||||
import { get, post } from '../../common/http.js'
|
||||
import { INCOME_CATEGORIES, EXPENSE_CATEGORIES } from '../../common/constants.js'
|
||||
|
||||
function todayString() {
|
||||
@@ -162,6 +162,9 @@
|
||||
remark: ''
|
||||
},
|
||||
customerName: '',
|
||||
customerPriceLevel: '零售价',
|
||||
_lastCustomerId: null,
|
||||
_priceCache: {},
|
||||
supplierName: '',
|
||||
items: [],
|
||||
activeCategory: 'sale_income',
|
||||
@@ -192,7 +195,46 @@
|
||||
return Number(p.cash||0) + Number(p.bank||0) + Number(p.wechat||0)
|
||||
}
|
||||
},
|
||||
onShow() {
|
||||
if (this.biz === 'sale') {
|
||||
if (this.order.customerId && this.order.customerId !== this._lastCustomerId) {
|
||||
this.loadCustomerLevel(this.order.customerId).then(() => {
|
||||
this._lastCustomerId = this.order.customerId
|
||||
for (const it of this.items) { if (it && (it._autoPrice || !it.unitPrice)) this.autoPriceItem(it) }
|
||||
})
|
||||
}
|
||||
for (const it of this.items) { if (it && !it.unitPrice) this.autoPriceItem(it) }
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async loadCustomerLevel(customerId) {
|
||||
try {
|
||||
const d = await get(`/api/customers/${customerId}`)
|
||||
this.customerPriceLevel = d && d.priceLevel ? d.priceLevel : '零售价'
|
||||
} catch(e) { this.customerPriceLevel = '零售价' }
|
||||
},
|
||||
priceFieldForLevel() {
|
||||
const lvl = this.customerPriceLevel || '零售价'
|
||||
if (lvl === '批发价') return 'wholesalePrice'
|
||||
if (lvl === '大单报价') return 'bigClientPrice'
|
||||
return 'retailPrice'
|
||||
},
|
||||
async autoPriceItem(it) {
|
||||
if (this.biz !== 'sale') return
|
||||
if (!it || !it.productId) return
|
||||
const pid = it.productId
|
||||
let detail = this._priceCache[pid]
|
||||
if (!detail) {
|
||||
try { detail = await get(`/api/products/${pid}`); this._priceCache[pid] = detail } catch(e) { return }
|
||||
}
|
||||
const field = this.priceFieldForLevel()
|
||||
let price = Number(detail && detail[field] != null ? detail[field] : 0)
|
||||
if (!price && field !== 'retailPrice') { price = Number(detail && detail.retailPrice != null ? detail.retailPrice : 0) }
|
||||
it.unitPrice = price
|
||||
it._autoPrice = true
|
||||
this.recalc()
|
||||
},
|
||||
onPriceInput(it) { if (it) { it._autoPrice = false; this.recalc() } },
|
||||
switchBiz(type) { this.biz = type },
|
||||
onDateChange(e) { this.order.orderTime = e.detail.value },
|
||||
chooseCustomer() {
|
||||
@@ -214,6 +256,12 @@
|
||||
const isSaleOrPurchase = (this.biz==='sale' || this.biz==='purchase')
|
||||
const isCollectOrPay = (this.biz==='sale' && this.saleType==='collect') || (this.biz==='purchase' && this.purchaseType==='pay')
|
||||
const saleTypeValue = this.biz==='sale' ? ('sale.' + this.saleType) : ('purchase.' + this.purchaseType)
|
||||
// 前置校验:销售/进货 出入库要求有明细
|
||||
if (isSaleOrPurchase && !isCollectOrPay) {
|
||||
if (!this.items.length) { uni.showToast({ title: '请先选择商品', icon: 'none' }); return }
|
||||
const invalid = this.items.find(it => !it.productId || Number(it.quantity||0) <= 0)
|
||||
if (invalid) { uni.showToast({ title: '数量需大于0', icon: 'none' }); return }
|
||||
}
|
||||
const payload = isSaleOrPurchase ? (isCollectOrPay ? [
|
||||
{ method: 'cash', amount: Number(this.payments.cash||0) },
|
||||
{ method: 'bank', amount: Number(this.payments.bank||0) },
|
||||
|
||||
Reference in New Issue
Block a user