|
@@ -1,11 +1,5 @@
|
|
|
<template>
|
|
|
<view class="chooseProduct-wrap">
|
|
|
- <!-- 标题 -->
|
|
|
- <u-navbar title="选择产品" :safeAreaInsetTop="false" :border-bottom="true">
|
|
|
- <view class="u-nav-slot" slot="right" style="padding-right: 40rpx;">
|
|
|
- <u-icon name="search" color="#999" size="28" @click="openModal=true"></u-icon>查询
|
|
|
- </view>
|
|
|
- </u-navbar>
|
|
|
<!-- 产品列表 -->
|
|
|
<view class="product-list-box">
|
|
|
<scroll-view class="product-list-con" :style="{height: scrollH+'upx'}" scroll-y @scrolltolower="onreachBottom">
|
|
@@ -14,19 +8,30 @@
|
|
|
<view class="item-tit ellipsis-one" :style="{borderColor: $config('primaryColor')}">{{item.productName}}</view>
|
|
|
</view>
|
|
|
<view class="list-item-con flex align_center justify_between">
|
|
|
- <view class="pimgs">
|
|
|
- <u-image :src="item.productMainPic&&item.productMainPic.imageUrl?item.productMainPic.imageUrl:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
|
|
|
- </view>
|
|
|
- <view class="flex_1">
|
|
|
- <view>产品编码:{{item.productCode || '--'}}</view>
|
|
|
- <view class="padding_3 flex align_center justify_between">
|
|
|
- <view>原厂编码:{{item.productOrigCode || '--'}}</view>
|
|
|
- <u-icon name="plus-circle" :color="$config('primaryColor')" size="40" class="close-circle" @click="handleAdd(item, 'add')"></u-icon>
|
|
|
+ <view class="flex align_center justify_between flex_1">
|
|
|
+ <view class="pimgs">
|
|
|
+ <u-image :src="item.productMainImage?item.productMainImage:`../../static/${theme}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
|
|
|
+ </view>
|
|
|
+ <view class="flex_1">
|
|
|
+ <view>产品编码:{{item.productCode || '--'}}</view>
|
|
|
+ <view class="padding_3">原厂编码:{{item.productOrigCode || '--'}}</view>
|
|
|
+ <view v-if="item.warehouseName || item.warehouseLocationName">仓库仓位:{{item.warehouseName}} > {{item.warehouseLocationName}}</view>
|
|
|
</view>
|
|
|
- <view v-if="item.warehouseName || item.warehouseLocationName">仓库仓位:{{item.warehouseName}} > {{item.warehouseLocationName}}</view>
|
|
|
+ </view>
|
|
|
+ <view class="list-item-btn">
|
|
|
+ <u-icon class="item-btn-add" v-if="!item.saleQty" name="plus-circle" :color="$config('primaryColor')" size="40" @click="handleAdd(item, 'add')"></u-icon>
|
|
|
+ <u-tag v-else text="已添加" type="info" mode="light" shape="circle" size="mini" style="vertical-align: text-top;" />
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="list-item-footer flex align_center justify_between">
|
|
|
+ <view class="footer-item" v-if="searchParams && searchParams.cost">
|
|
|
+ <view>{{toThousands(item.putCost||0, 2)}}</view>
|
|
|
+ <view class="color_6">成本价</view>
|
|
|
+ </view>
|
|
|
+ <view class="footer-item" v-if="searchParams && searchParams.cityPrice">
|
|
|
+ <view>{{toThousands(item.dealerProduct && item.dealerProduct.cityPrice || 0, 2)}}</view>
|
|
|
+ <view class="color_6">市级价</view>
|
|
|
+ </view>
|
|
|
<view class="footer-item">
|
|
|
<view>{{toThousands(item.currentQty||0)}}{{item.unit}}</view>
|
|
|
<view class="color_6">库存数量</view>
|
|
@@ -56,11 +61,11 @@
|
|
|
<!-- 查询右侧弹框 -->
|
|
|
<productSearch :openModal="openModal" :defaultParams="searchParams" @refresh="refresh" @close="openModal=false" />
|
|
|
<!-- 添加/编辑产品 -->
|
|
|
- <productModal :openModal="openProductModal" :infoData="productData" @confirm="productConfirm" @close="openProductModal=false" />
|
|
|
+ <productModal :openModal="openProductModal" :infoData="productInfo" @confirm="productConfirm" @close="openProductModal=false" />
|
|
|
<!-- 已选产品 -->
|
|
|
- <selectedProductsModal :openModal="openSelectedModal" :nowData="detailData" @confirm="handleChoose" @refreshTotal="selectedProductTotal" @close="openSelectedModal=false" />
|
|
|
+ <selectedProductsModal ref="selectedProducts" :openModal="openSelectedModal" :nowData="detailData" @edit="handleEdit" @confirm="handleChoose" @refreshTotal="selectedProductTotal" @close="openSelectedModal=false" />
|
|
|
<!-- 弹框 -->
|
|
|
- <common-modal :openModal="commonModal" :content="modalText" @confirm="handleCommon" @close="commonModal=false" />
|
|
|
+ <common-modal :openModal="commonModal" :content="modalText" @confirm="handleCommon" @cancel="handleCancel" @close="commonModal=false" />
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
@@ -70,8 +75,8 @@
|
|
|
import SelectedProductsModal from './selectedProductsModal.vue'
|
|
|
import commonModal from '@/pages/common/commonModal.vue'
|
|
|
import { toThousands } from '@/libs/tools'
|
|
|
- import { querySumByProductLocation } from '@/api/stock'
|
|
|
- import { salesDetail, supperCodeByVin } from '@/api/sales'
|
|
|
+ import { querySumByProductLocation, stockByProductSn } from '@/api/stock'
|
|
|
+ import { salesDetail, supperCodeByVin, salesDetailInsert, salesDetailUpdate } from '@/api/sales'
|
|
|
export default{
|
|
|
components: { ProductSearch, ProductModal, SelectedProductsModal, commonModal },
|
|
|
data(){
|
|
@@ -82,19 +87,21 @@
|
|
|
pageSize: 6,
|
|
|
totalNum: 0,
|
|
|
noDataText: '暂无数据',
|
|
|
- searchParams: {},
|
|
|
+ searchParams: null,
|
|
|
openModal: false,
|
|
|
theme: '',
|
|
|
salesInfo: null, // 销售单信息
|
|
|
scrollH: 0,
|
|
|
openProductModal: false, // 编辑产品信息弹框是否显示
|
|
|
productData: null, // 当前操作的产品信息
|
|
|
+ productInfo: null, // 添加/编辑产品需要的参数
|
|
|
chooseType: 'add', // 添加产品add,编辑产品edit
|
|
|
commonModal: false, // 公共弹框是否显示
|
|
|
modalText: '', // 公共弹框提示语
|
|
|
- commonType: 1, // 公共弹框类型 1为添加产品时库存不足,2为编辑产品时库存不足,
|
|
|
+ commonType: 1, // 公共弹框类型 1为添加产品时库存不足,2为编辑产品时库存不足,3为售价低于定价,4为售价低于成本价
|
|
|
openSelectedModal: false, // 已选产品弹框是否显示
|
|
|
- detailData: null // 销售单详情数据
|
|
|
+ detailData: null, // 销售单详情数据
|
|
|
+ editInfo: null, // 添加/编辑 提交的值
|
|
|
}
|
|
|
},
|
|
|
onNavigationBarButtonTap(e){ // 标题栏 按钮操作
|
|
@@ -149,10 +156,15 @@
|
|
|
pageSize: this.pageSize
|
|
|
}
|
|
|
let searchParams = JSON.parse(JSON.stringify(this.searchParams))
|
|
|
- searchParams.brandName = undefined
|
|
|
- searchParams.nowData = undefined
|
|
|
- searchParams.warehouseName = undefined
|
|
|
- querySumByProductLocation(Object.assign(params, searchParams, { customerSn: this.salesInfo.buyerSn })).then(res => {
|
|
|
+ console.log(searchParams)
|
|
|
+ if(searchParams){
|
|
|
+ searchParams.brandName = undefined
|
|
|
+ searchParams.nowData = undefined
|
|
|
+ searchParams.warehouseName = undefined
|
|
|
+ searchParams.cost = undefined
|
|
|
+ searchParams.cityPrice = undefined
|
|
|
+ }
|
|
|
+ querySumByProductLocation(Object.assign(params, searchParams, { customerSn: this.salesInfo.buyerSn, salePriceType: this.salesInfo.priceType, salesBillSn: this.salesInfo.salesBillSn })).then(res => {
|
|
|
if (res.status == 200) {
|
|
|
if(res.data && res.data.list){
|
|
|
res.data.list.map(item => {
|
|
@@ -183,10 +195,39 @@
|
|
|
},
|
|
|
// 添加/编辑产品
|
|
|
handleAdd(data, type){
|
|
|
+ console.log(data)
|
|
|
+ if(type == 'add'){
|
|
|
+ this.productInfo = {
|
|
|
+ productName: data.productName,
|
|
|
+ productMainImage: data.productMainImage,
|
|
|
+ productCode: data.productCode,
|
|
|
+ productOrigCode: data.productOrigCode,
|
|
|
+ warehouseName: data.warehouseName,
|
|
|
+ warehouseLocationName: data.warehouseLocationName,
|
|
|
+ price: data.price,
|
|
|
+ qty: 1
|
|
|
+ }
|
|
|
+ }else if(type == 'edit'){
|
|
|
+ this.productInfo = {
|
|
|
+ productName: data.productName,
|
|
|
+ productMainImage: data.productMainImage,
|
|
|
+ productCode: data.productCode,
|
|
|
+ productOrigCode: data.productOrigCode,
|
|
|
+ warehouseName: data.warehouseEntity && data.warehouseEntity.name,
|
|
|
+ warehouseLocationName: data.warehouseLocationEntity && data.warehouseLocationEntity.name,
|
|
|
+ price: data.price,
|
|
|
+ qty: data.qty
|
|
|
+ }
|
|
|
+ }
|
|
|
this.openProductModal = true
|
|
|
this.chooseType = type
|
|
|
this.productData = data
|
|
|
},
|
|
|
+ // 已选产品 编辑
|
|
|
+ handleEdit(data){
|
|
|
+ console.log(data)
|
|
|
+ this.handleAdd(data, 'edit')
|
|
|
+ },
|
|
|
// 选好了
|
|
|
handleChoose(){
|
|
|
uni.redirectTo({ url: '/pages/sales/edit?pageType=edit&data='+JSON.stringify(this.detailData) })
|
|
@@ -197,43 +238,125 @@
|
|
|
},
|
|
|
// 确认产品信息
|
|
|
productConfirm(data){
|
|
|
- console.log('form',data)
|
|
|
- console.log('info',this.productData)
|
|
|
- if (this.productData.lastSalePrice && (this.productData.price < this.productData.salePrice)) { // 售价低于定价
|
|
|
-
|
|
|
- }
|
|
|
+ this.editInfo = data
|
|
|
if(this.chooseType == 'add'){
|
|
|
- // 库存不足时
|
|
|
- if (this.productData.currentQty < data.qty) {
|
|
|
- this.commonType = 1
|
|
|
- this.modalText = '库存不足,将产生急件,确认要添加吗?'
|
|
|
- this.commonModal = true
|
|
|
- }else{
|
|
|
-
|
|
|
- }
|
|
|
+ this.validatePrice() //验证 售价是否低于定价
|
|
|
}else if(this.chooseType == 'edit'){
|
|
|
- // 库存不足时
|
|
|
- if (this.productData.currentQty < this.productData.salesNums) {
|
|
|
+ this.validateStock() //验证 库存是否不足
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 售价低于定价
|
|
|
+ validatePrice(){
|
|
|
+ if (this.productData.lastSalePrice && (this.editInfo.price < this.productData.salePrice)) { // 售价低于定价
|
|
|
+ this.commonType = 1
|
|
|
+ this.modalText = '售价低于定价,确认要添加吗?'
|
|
|
+ this.commonModal = true
|
|
|
+ }else{
|
|
|
+ this.validateStock() //验证 库存是否不足
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 库存不足
|
|
|
+ validateStock(){
|
|
|
+ if(this.chooseType == 'add'){ // 添加产品
|
|
|
+ if (this.productData.currentQty < this.editInfo.qty) {
|
|
|
this.commonType = 2
|
|
|
- this.modalText = '库存不足,将产生急件,确认修改吗?'
|
|
|
+ this.modalText = '库存不足,将产生急件,确认要添加吗?'
|
|
|
this.commonModal = true
|
|
|
}else{
|
|
|
-
|
|
|
+ this.validateCost() //验证 售价是否低于成本价
|
|
|
}
|
|
|
+ }else if(this.chooseType == 'edit'){ // 编辑产品
|
|
|
+ // 校验库存
|
|
|
+ stockByProductSn({ productSn: this.productData.productSn }).then(res => {
|
|
|
+ if (res.status == 200) {
|
|
|
+ console.log(!res.data.currentStockQty, this.editInfo.qty <= res.data.currentStockQty)
|
|
|
+ console.log(!res.data.currentStockQty || this.editInfo.qty <= res.data.currentStockQty)
|
|
|
+ if (res.data && (!res.data.currentStockQty || this.editInfo.qty <= res.data.currentStockQty)) {
|
|
|
+ this.editProduct()
|
|
|
+ } else { // 库存不足
|
|
|
+ this.commonType = 3
|
|
|
+ this.modalText = '库存不足,将产生急件,确认修改吗?'
|
|
|
+ this.commonModal = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
- // this.openProductModal = false
|
|
|
},
|
|
|
- addProduct(data){
|
|
|
-
|
|
|
+ // 售价低于成本价
|
|
|
+ validateCost(){
|
|
|
+ if (this.productData.putCost > this.editInfo.price) {
|
|
|
+ this.commonType = 4
|
|
|
+ this.modalText = '售价低于成本价,确认要添加吗?'
|
|
|
+ this.commonModal = true
|
|
|
+ }else{
|
|
|
+ this.addProduct()
|
|
|
+ }
|
|
|
},
|
|
|
- // 公共弹框
|
|
|
+ // 添加产品
|
|
|
+ addProduct(){
|
|
|
+ let params = {
|
|
|
+ buyerSn: this.detailData.buyerSn,
|
|
|
+ productSn: this.productData.productSn,
|
|
|
+ cost: this.productData.putCost,
|
|
|
+ price: this.editInfo.price,
|
|
|
+ qty: this.editInfo.qty,
|
|
|
+ salesBillSn: this.detailData.salesBillSn,
|
|
|
+ salesBillNo: this.detailData.salesBillNo,
|
|
|
+ warehouseSn: this.productData.warehouseSn,
|
|
|
+ warehouseLocationSn: this.productData.warehouseLocationSn,
|
|
|
+ stockSn: this.productData.stockSn
|
|
|
+ }
|
|
|
+ salesDetailInsert(params).then(res => {
|
|
|
+ if(res.status == 200){
|
|
|
+ this.changeList(params) // 变更 列表产品可选状态
|
|
|
+ this.selectedProductTotal() // 已选产品合计
|
|
|
+ this.commonModal = false
|
|
|
+ this.openProductModal = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 编辑产品
|
|
|
+ editProduct(){
|
|
|
+ let params = {
|
|
|
+ id: this.productData.id,
|
|
|
+ qty: this.editInfo.qty,
|
|
|
+ price: this.editInfo.price,
|
|
|
+ productSn: this.productData.productSn,
|
|
|
+ salesBillSn: this.detailData.salesBillSn,
|
|
|
+ }
|
|
|
+ salesDetailUpdate(params).then(res => {
|
|
|
+ if(res.status == 200){
|
|
|
+ this.$refs.selectedProducts.getList(1)
|
|
|
+ this.selectedProductTotal() // 已选产品合计
|
|
|
+ this.commonModal = false
|
|
|
+ this.openProductModal = false
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 更改产品列表参数
|
|
|
+ changeList(params){
|
|
|
+ this.listData.map(item => {
|
|
|
+ if((item.stockSn == params.stockSn) && (item.warehouseLocationSn == params.warehouseLocationSn)){
|
|
|
+ item.saleQty = 1 // 非0即可,用于判断是否显示添加产品按钮
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ // 公共弹框 确定
|
|
|
handleCommon(){
|
|
|
- if(this.commonType == 1){ // 添加产品时库存不足
|
|
|
-
|
|
|
- }else if(this.commonType == 2){ // 编辑产品时库存不足
|
|
|
-
|
|
|
+ if(this.commonType == 1){ // 添加产品时售价低于定价
|
|
|
+ this.validateStock() //验证 库存是否不足
|
|
|
+ }else if(this.commonType == 2){ // 添加产品时库存不足
|
|
|
+ this.validateCost() //验证 售价是否低于成本价
|
|
|
+ }else if(this.commonType == 3){ // 编辑产品时库存不足
|
|
|
+ this.editProduct()
|
|
|
+ }else if(this.commonType == 4){ // 添加产品时售价低于成本价
|
|
|
+ this.addProduct()
|
|
|
}
|
|
|
},
|
|
|
+ // 公共弹框 取消
|
|
|
+ handleCancel(){
|
|
|
+ this.openProductModal = false
|
|
|
+ },
|
|
|
// 已选产品 提交
|
|
|
selectedConfirm(){},
|
|
|
// 已选产品合计
|
|
@@ -282,11 +405,16 @@
|
|
|
}
|
|
|
}
|
|
|
.list-item-con{
|
|
|
- padding: 14upx 14upx 16upx;
|
|
|
+ padding: 14upx 0 16upx;
|
|
|
font-size: 26upx;
|
|
|
.pimgs{
|
|
|
margin-right: 16upx;
|
|
|
}
|
|
|
+ .list-item-btn{
|
|
|
+ .item-btn-add{
|
|
|
+ padding: 30upx 30upx;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
.list-item-footer{
|
|
|
border-top: 1px solid #e4e7ed;
|