chenrui hace 3 años
padre
commit
b4aa422b08

+ 7 - 0
api/sales.js

@@ -54,6 +54,13 @@ export const salesDetailList = (params) => {
     method: 'post'
   })
 }
+//  销售详情 删除
+export const salesDetailDel = (params) => {
+  return axios.request({
+    url: `salesDetail/delete/${params.id}`,
+    method: 'get'
+  })
+}
 
 // 产品报价列表
 export const dealerProductList = (params) => {

+ 0 - 3
pages/common/commonModal.vue

@@ -79,9 +79,6 @@
 	.commonModal{
 		width: 100%;
 		height: 100vh;
-		position: absolute;
-		left: 0;
-		top: 0;
 		z-index: 10000;
 		.modal-con{
 			width: 70%;

+ 28 - 16
pages/sales/discountModal.vue

@@ -4,7 +4,7 @@
 			<view class="discount-main">
 				<view class="text-c">请输入折扣金额</view>
 				<view class="discount-price text-c">
-					<u-input class="price" v-model="discountAmount" @input="numberToFixed" :clearable="false" type="number" style="display: inline-block;vertical-align: middle;" />元
+					<u-input class="price" v-model="formValidate.discountAmount" @input="numberToFixed('discountAmount',2,999999)" @focus="amountFocus" placeholder="请输入折扣金额" :clearable="false" type="digit" style="display: inline-block;vertical-align: middle;" />元
 				</view>
 			</view>
 			<view class="discount-footer">
@@ -16,6 +16,7 @@
 </template>
 
 <script>
+	import { numberToFixed } from '@/libs/tools'
 	export default {
 		props: {
 			openModal: { //  弹框显示状态
@@ -27,26 +28,37 @@
 				default: ()=>{
 					return null
 				}
+			},
+			amount: {
+				type: [Number, String],
+				default: ''
 			}
 		},
 		data() {
 			return {
 				isShow: this.openModal, //  是否打开弹框
-				discountAmount: ''
+				discountAmount: '',
+				formValidate: {
+					discountAmount: 0
+				}
 			}
 		},
 		methods: {
 			// 确认
 			handleConfirm(){
-				this.$emit('confirm', this.printType)
+				this.$emit('confirm', this.formValidate.discountAmount)
 			},
-			numberToFixed(){
-				if(this.discountAmount){
-					this.discountAmount = Math.floor(this.discountAmount * 100) / 100  // 保留两位小数,不四舍五入
-					if(this.discountAmount < 0){
-						this.discountAmount = Math.abs(this.discountAmount)  // 金额为正数
-					}
-				}
+			// 小数点后两位
+			numberToFixed: function (key, num, max) {
+			  let val = this.formValidate[key]
+			  let ret = numberToFixed(val, num, max)
+			  this.$nextTick(() => {
+			  	this.formValidate[key] = ret
+			  })
+			},
+			//  折扣金额  获取焦点
+			amountFocus(){
+				this.formValidate.discountAmount = this.formValidate.discountAmount == 0 ? '' : this.formValidate.discountAmount
 			}
 		},
 		watch: {
@@ -56,9 +68,12 @@
 			},
 			//  重定义的弹框状态
 			isShow (newValue, oldValue) {
-			  if (!newValue) {
-			    this.$emit('close')
-			  }
+				if (!newValue) {
+					this.$emit('close')
+					this.formValidate.discountAmount = 0
+				}else{
+					this.formValidate.discountAmount = this.amount || ''
+				}
 			}
 		}
 	}
@@ -68,9 +83,6 @@
 	.discountModal{
 		width: 100%;
 		height: 100%;
-		position: absolute;
-		left: 0;
-		top: 0;
 		.text-c{
 			text-align: center;
 		}

+ 83 - 16
pages/sales/edit.vue

@@ -2,7 +2,7 @@
 	<view class="sales-edit-wrap">
 		<!-- 基础信息 -->
 		<view class="sales-info-con">
-			<u-section @click="infoModal=true" title="基础信息" sub-title="查看全部" :line-color="$config('primaryColor')"></u-section>
+			<u-section @click="infoModal=true" title="基础信息" sub-title="查看更多" :line-color="$config('primaryColor')"></u-section>
 			<view class="info-item-box">
 				<text class="info-item-tit color_6">销售单号</text>
 				<text>{{pageData.data && pageData.data.salesBillNo || '--'}}</text>
@@ -16,10 +16,13 @@
 		<view class="sales-product-con">
 			<!-- 标题 -->
 			<view class="sales-product-header border-b flex align_center justify_between">
-				<u-section title="产品列表" :line-color="$config('primaryColor')">
-					<template slot="right">
+				<u-section title="产品列表" :right="pageData.type=='edit'" :line-color="$config('primaryColor')">
+					<template slot="right" v-if="pageData.type=='edit'">
 						<view class="sales-product-operation">
-							<u-button @click="discountModal=true" size="mini" :hair-line="false" plain type="primary" hover-class="none">打折</u-button>
+							<u-button @click="discountModal=true" size="mini" :hair-line="false" plain type="primary" hover-class="none">
+								打折
+								<text v-if="discountAmount">:¥{{discountAmount}}</text>
+							</u-button>
 							<u-button @click="" size="mini" :hair-line="false" plain type="primary" hover-class="none">选择产品</u-button>
 						</view>
 					</template>
@@ -57,7 +60,7 @@
 							<view class="sales-item-name">{{item.productName || '--'}}</view>
 							<view class="sales-item-txt flex align_center justify_between">
 								<view>{{item.productCode || '--'}}</view>
-								<u-icon name="trash-fill" :color="$config('errorColor')" size="34"></u-icon>
+								<u-icon v-if="pageData.type=='edit'" @click="handleDel(item)" name="trash-fill" :color="$config('errorColor')" size="34"></u-icon>
 							</view>
 							<view class="sales-item-txt color_6" style="font-size: 24upx;" v-if="item.warehouseEntity&&item.warehouseEntity.name || item.warehouseLocationEntity&&item.warehouseLocationEntity.name">{{item.warehouseEntity&&item.warehouseEntity.name}} > {{item.warehouseLocationEntity&&item.warehouseLocationEntity.name}}</view>
 							<view class="sales-item-txt flex align_center justify_between">
@@ -79,24 +82,29 @@
 			</view>
 		</view>
 		<!-- 操作按钮 -->
-		<view class="sales-btn-box flex align_center justify_between">
-			<u-button class="handle-btn" size="medium" hover-class="none" @click="resetForm">整单删除</u-button>
-			<u-button class="handle-btn search-btn" size="medium" hover-class="none" :custom-style="customBtnStyle" @click="handleSearch">提交</u-button>
+		<view class="sales-btn-box">
+			<view v-if="pageData.type=='edit'" class="flex align_center justify_between">
+				<u-button class="handle-btn" size="medium" hover-class="none" @click="handleDel()">整单删除</u-button>
+				<u-button class="handle-btn search-btn" size="medium" hover-class="none" :custom-style="customBtnStyle" @click="handleSearch">提交</u-button>
+			</view>
 		</view>
 		<!-- 基础信息 -->
 		<orderInfoModal :openModal="infoModal" :infoData="pageData.data" @close="infoModal=false" />
 		<!-- 折扣 -->
-		<discountModal :openModal="discountModal" :infoData="pageData.data" @close="discountModal=false" />
+		<discountModal :openModal="discountModal" :infoData="pageData.data" :amount="discountAmount" @confirm="discountConfirm" @close="discountModal=false" />
+		<!-- 删除产品/整单删除弹框 -->
+		<common-modal :openModal="delModal" :content="delText" @confirm="handleConfirm" @close="delModal=false" />
 	</view>
 </template>
 
 <script>
+	import commonModal from '@/pages/common/commonModal.vue'
 	import OrderInfoModal from './orderInfoModal.vue'
 	import DiscountModal from './discountModal.vue'
 	import { toThousands } from '@/libs/tools'
-	import { salesDetailList } from '@/api/sales'
+	import { salesDetailList, salesDetailDel, salesDel } from '@/api/sales'
 	export default{
-		components: { OrderInfoModal, DiscountModal },
+		components: { OrderInfoModal, DiscountModal, commonModal },
 		data(){
 			return{
 				pageData: {
@@ -116,9 +124,13 @@
 				totalNum: 0,
 				noDataText: '暂无数据',
 				theme: '',
-				scrollH: 836,
+				scrollH: 1036,
 				infoModal: false,
-				discountModal: false
+				discountModal: false,
+				discountAmount: 0,
+				delModal: false,
+				delText: '确认要删除吗?',
+				dataInfo: null,
 			}
 		},
 		onLoad(opt) {
@@ -174,12 +186,67 @@
 					this.getList()
 				}
 			},
+			discountConfirm(amount){
+				this.discountAmount = amount
+				this.discountModal = false
+			},
+			// 删除
+			handleDel(item){
+				if(item){  // 删除产品
+					this.dataInfo = item
+					this.delText = '确认要删除吗?'
+					this.delModal = true
+				}else{  // 整单删除
+					this.dataInfo = null
+					this.delText = '确认删除该销售单吗?'
+					this.delModal = true
+				}
+			},
+			// 删除
+			handleConfirm(){
+				let url = salesDetailDel
+				let params = {}
+				if(this.dataInfo){  // 删除产品
+					url = salesDetailDel
+					params = { id: this.dataInfo.id }
+				}else{  // 整单删除
+					url = salesDel
+					params = { id: this.pageData.data && this.pageData.data.id }
+				}
+				url(params).then(res => {
+					if (res.status == 200) {
+						if(this.dataInfo){  // 删除产品
+							this.toashMsg(res.message)
+							this.getList(1)
+						}else{  // 整单删除
+							this.toashMsg(res.message)
+							uni.$emit('refreshBL')
+							uni.navigateBack()
+						}
+						this.delModal = false
+					} else {
+						this.delModal = false
+					}
+				})
+			},
+			changeScrollH(){
+				const _this = this
+				uni.getSystemInfo({
+					success: function (res) {
+						const winH = res.windowHeight * 2
+						let totalH = _this.$refs.salesTotal && _this.$refs.salesTotal.$el && _this.$refs.salesTotal.$el.offsetHeight || 0
+						if(_this.toggle){
+							_this.scrollH = winH - 556 - totalH
+						}else{
+							_this.scrollH = winH - 416 - totalH
+						}
+					}
+				})
+			}
 		},
 		watch: {
 			toggle (newValue, oldValue) {
-				const winH = window.innerHeight * 2
-				let totalH = this.$refs.salesTotal && this.$refs.salesTotal.$el && this.$refs.salesTotal.$el.offsetHeight || 0
-				this.scrollH = winH - 396 - totalH
+				this.changeScrollH()
 			}
 		}
 	}

+ 15 - 4
pages/sales/index.vue

@@ -26,10 +26,10 @@
 				<u-image class="nav-pic" style="margin-top: 5upx;" :src="`../../static/${theme}/navIcon/price_icon.png`" width="60" height="60"></u-image>
 				<text class="nav-txt" style="margin-top: 5upx;">产品报价</text>
 			</view>
-			<view class="nav-item" @click="toPage('/pages/sales/chooseCustomer')">
+			<!-- <view class="nav-item" @click="toPage('/pages/sales/chooseCustomer')">
 				<u-image class="nav-pic" :src="`../../static/${theme}/navIcon/sale_icon.png`" width="70" height="70"></u-image>
 				<text class="nav-txt">新增销售单</text>
-			</view>
+			</view> -->
 		</view>
 		<!-- 销售单 -->
 		<view class="sales-list">
@@ -38,7 +38,7 @@
 				<view class="title-all" @click="toPage('/pages/sales/list')">查看全部<u-icon name="arrow-right" color="rgb(144, 147, 153)" size="28"></u-icon></view>
 			</view>
 			<!-- 销售单列表 -->
-			<listComponent height="458" />
+			<listComponent ref="salesList" height="458" />
 		</view>
 	</view>
 </template>
@@ -62,7 +62,17 @@
 			}
 		},
 		onLoad() {
+			const _this = this
 			this.theme = getApp().globalData.theme
+			this.$nextTick(function(){
+				// 监听整改完成后刷新事件
+				uni.$on('refreshBL', function(data){
+					_this.$refs.salesList.getList(1)
+				})
+			})
+		},
+		onUnload() {
+			uni.$off('refreshBL')
 		},
 		onShow() {
 			this.getBizData()
@@ -143,7 +153,8 @@
 		}
 		.nav-cont{
 			.nav-item{
-				width: 49%;
+				// width: 49%;
+				width: 100%;
 				border-radius: 25upx;
 				background-color: #ffffff;
 				padding: 14upx 0;

+ 11 - 1
pages/sales/list.vue

@@ -12,7 +12,7 @@
 		</u-dropdown>
 		<!-- 销售单列表 -->
 		<view class="list-box">
-			<listComponent ref="salesList" height="80" :params="searchParams" />
+			<listComponent ref="salesList" height="280" :params="searchParams" />
 		</view>
 		<!-- 查询右侧弹框 -->
 		<salesSearch :openModal="openModal" :defaultParams="searchForm" @refresh="refresh" @close="openModal=false" />
@@ -44,8 +44,18 @@
 			}
 		},
 		onLoad() {
+			const _this = this
 			this.getLookUpItem('SALES_BILL_STATUS')
 			this.getLookUpItem('FINANCIAL_RECEIVE_STATUS')
+			this.$nextTick(function(){
+				// 监听整改完成后刷新事件
+				uni.$on('refreshBL', function(data){
+					_this.$refs.salesList.getList(1)
+				})
+			})
+		},
+		onUnload() {
+			uni.$off('refreshBL')
 		},
 		methods: {
 			// 获取查询参数 刷新列表

+ 15 - 9
pages/sales/listComponent.vue

@@ -25,14 +25,14 @@
 							<view class="flex_1">收款方式:<text>{{item.settleStyleEntity&&item.settleStyleEntity.name||'--'}}</text></view>
 						</view>
 					</view>
-					<view class="button-box">
+					<!-- <view class="button-box">
 						<u-button @click="handleFun('audit', item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="item.billStatus == 'WAIT_AUDIT'">审核</u-button>
 						<u-button @click="handleFun('out', item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="item.billStatus == 'WAIT_OUT_WAREHOUSE'">出库</u-button>
 						<u-button @click="handleEdit(item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="((item.salesBillSource == 'SATELLITE' || item.salesBillSource == 'SALES') && (item.billStatus == 'WAIT_AUDIT' || item.billStatus == 'WAIT_SUBMIT' || item.billStatus == 'AUDIT_REJECT'))">编辑</u-button>
 						<u-button @click="handleFun('del', item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="((item.salesBillSource == 'SATELLITE' || item.salesBillSource == 'SALES') && item.billStatus != 'FINISH')">删除</u-button>
 						<u-button @click="handleEdit(item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="(item.salesBillSource == 'PURCHASE' && (item.billStatus == 'WAIT_AUDIT' || item.billStatus == 'SUPERIOR_CHANGE'))">改单</u-button>
 						<u-button @click="handleFun('cancel', item)" size="mini" :hair-line="false" plain type="primary" hover-class="none" v-if="(item.salesBillSource == 'PURCHASE' && (item.billStatus == 'WAIT_AUDIT' || item.billStatus == 'SUPERIOR_CHANGE'))">取消</u-button>
-					</view>
+					</view> -->
 				</view>
 				<view v-if="listData && listData.length == 0">
 					<u-empty :text="noDataText" mode="list" :img-width="200" :margin-top="30"></u-empty>
@@ -78,16 +78,18 @@
 				dataInfo: null,
 				outModal: false,  // 出库弹框
 				delModal: false,  // 删除/取消弹框
-				delText: '确认要删除吗?'
-			}
-		},
-		computed: {
-			scrollH(){
-				const winH = window.innerHeight * 2
-				return winH - this.height
+				delText: '确认要删除吗?',
+				scrollH: 300
 			}
 		},
 		mounted() {
+			const _this = this
+			uni.getSystemInfo({
+			    success: function (res) {
+					const winH = res.windowHeight * 2
+					_this.scrollH = winH - _this.height - 85
+			    }
+			})
 			this.getList()
 		},
 		methods:{
@@ -127,6 +129,10 @@
 			getDetail(data){
 				uni.navigateTo({ url: '/pages/sales/edit?pageType=detail&data='+JSON.stringify(data) })
 			},
+			// 编辑
+			handleEdit(data){
+				uni.navigateTo({ url: '/pages/sales/edit?pageType=edit&data='+JSON.stringify(data) })
+			},
 			// 操作
 			handleFun(type, data){
 				this.dataInfo = data

+ 0 - 3
pages/sales/orderInfoModal.vue

@@ -96,9 +96,6 @@
 	.orderInfoModal{
 		width: 100%;
 		height: 100%;
-		position: absolute;
-		left: 0;
-		top: 0;
 		.order-info-con{
 			width: 78%;
 			margin: 20% auto 0;