Browse Source

货架订单

lilei 2 years ago
parent
commit
e7e4f62fbe

+ 31 - 0
api/shelf.js

@@ -130,4 +130,35 @@ export const updateShelfPriceShow = (params) => {
     data: params,
     method: 'post'
   })
+}
+
+
+// 货架订单-分页列表
+export const orderBillQueryPage = (params) => {
+  const url = `orderBill/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios.request({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 货架订单明细-合计
+export const orderBillDetailCount = (params) => {
+  return axios.request({
+    url: `orderBill/queryDetailCount`,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 货架订单-合计
+export const orderBillQueryCount = (params) => {
+  return axios.request({
+    url: `orderBill/queryCount`,
+    data: params,
+    method: 'post'
+  })
 }

+ 1 - 1
config/index.js

@@ -6,7 +6,7 @@ const getConfig = (theme) => {
 			themePath: 'default',
 			pro_URL: 'https://iscm.360arrow.com/qpls-md/', // 生产地址
 			uat_URL: 'http://p.iscm.360arrow.com/qpls-md/', // 预发布地址
-			dev_URL: 'http://192.168.0.215:8503/qpls-md/', // 本地地址
+			dev_URL: 'http://192.168.0.183:8503/qpls-md/', // 本地地址
 			appName: 'iSCM智慧供应链', // app 名称
 			company: '陕西山海高科信息技术有限公司',
 			loadText:{

+ 31 - 0
pages.json

@@ -589,6 +589,37 @@
             }
             
         }
+        ,{
+            "path" : "pages/shelfOrder/shelfOrder",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "货架订单",
+                "enablePullDownRefresh": false,
+				"app-plus":{
+					"titleNView": {
+						"titleAlign": "left",
+						"buttons": [ //原生标题栏按钮配置,
+							{
+								"text": "\ue694 查询" ,//原生标题栏增加分享按钮,点击事件可通过页面的 onNavigationBarButtonTap 函数进行监听u
+								"fontSrc": "/static/iconfont/iconfont.ttf",
+								"fontSize": "14",
+								"width":"80px"
+							}
+						]
+					}
+				}
+            }
+            
+        }
+        ,{
+            "path" : "pages/shelfOrder/orderDetail",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "货架订单详情",
+                "enablePullDownRefresh": false
+            }
+            
+        }
     ],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",

+ 84 - 46
pages/index/index.vue

@@ -1,65 +1,81 @@
 <template>
 	<view class="homePage-container">
-		 <!-- 数字货架 -->
-		 <div class="panel-box" v-if="$hasPermissions('M_ERManage_mobile')">
-		 	<div class="panel-title"><div class="texts">补货管理</div></div>
-		 	<div class="panel-body"><iconItemsList :list="storageRacksNavList"></iconItemsList></div>
-		 </div>
-		 <!-- 调回管理 -->
-		 <div class="graid-box">
-			 <div class="graid-box-1" @click="toPage('/pages/shuntBackManage/shuntBackList')" v-if="$hasPermissions('M_BackToManage_mobile')">
-				 <div class="icon">
-					 <u-icon name="huowu-tuihui" custom-prefix="iscm-icon" size="70"></u-icon>
-				 </div>
-				 <div class="title">调回管理</div>
+		 <view id="tjCons">
+			 <!-- 数字货架 -->
+			 <div class="panel-box" v-if="$hasPermissions('M_ERManage_mobile')">
+			 	<div class="panel-title"><div class="texts">补货管理</div></div>
+			 	<div class="panel-body"><iconItemsList :list="storageRacksNavList"></iconItemsList></div>
 			 </div>
-			 <div class="graid-box-1" @click="toPage('/pages/latePlay/chooseBulk')" v-if="$hasPermissions('M_printLabel_mobile')">
-				 <div class="icon">
-				 	<u-icon name="dayin" custom-prefix="iscm-icon" size="65"></u-icon>
+			 <!-- 调回管理 -->
+			 <div class="graid-box">
+				 <div class="graid-box-1" @click="toPage('/pages/shuntBackManage/shuntBackList')" v-if="$hasPermissions('M_BackToManage_mobile')">
+					 <div class="icon">
+						 <u-icon name="huowu-tuihui" custom-prefix="iscm-icon" size="70"></u-icon>
+					 </div>
+					 <div class="title">调回管理</div>
 				 </div>
-				 <div class="title">补打贴签</div>
-			 </div>
-			 <div class="graid-box-1" @click="toPage('/pages/shelfSetting/shelfList')" v-if="$hasPermissions('M_shelfSetting_mobile')">
-				 <div class="icon">
-					<u-icon name="ison_shelf" custom-prefix="iscm-icon" size="65"></u-icon>
+				 <div class="graid-box-1" @click="toPage('/pages/latePlay/chooseBulk')" v-if="$hasPermissions('M_printLabel_mobile')">
+					 <div class="icon">
+						<u-icon name="dayin" custom-prefix="iscm-icon" size="65"></u-icon>
+					 </div>
+					 <div class="title">补打贴签</div>
 				 </div>
-				 <div class="title">货架设置</div>
-			 </div>
-			 <div class="graid-box-1" @click="toPage('/pages/approveStore/list')" v-if="$hasPermissions('M_auditStore_mobile')">
-				 <div class="icon">
-				 	<u-icon name="mendianzhuanxiangshenhe" custom-prefix="iscm-icon" size="70"></u-icon>
-					<u-badge type="error" size="mini" :offset="[-5,20]" :count="storeAuthNums"></u-badge>
+				 <div class="graid-box-1" @click="toPage('/pages/shelfSetting/shelfList')" v-if="$hasPermissions('M_shelfSetting_mobile')">
+					 <div class="icon">
+						<u-icon name="ison_shelf" custom-prefix="iscm-icon" size="65"></u-icon>
+					 </div>
+					 <div class="title">货架设置</div>
 				 </div>
-				 <div class="title">门店审核</div>
-			 </div>
-			 <div class="graid-box-1" @click="toPage('/pages/stockCheck/shelfList')" v-if="$hasPermissions('M_stockCheck_mobile')">
-				 <div class="icon">
-					<u-icon name="icon_warehousing" custom-prefix="iscm-icon" size="65"></u-icon>
-					<u-badge type="error" size="mini" :offset="[-5,20]" :count="stockCheckNums"></u-badge>
+				 <div class="graid-box-1" @click="toPage('/pages/approveStore/list')" v-if="$hasPermissions('M_auditStore_mobile')">
+					 <div class="icon">
+						<u-icon name="mendianzhuanxiangshenhe" custom-prefix="iscm-icon" size="70"></u-icon>
+						<u-badge type="error" size="mini" :offset="[-5,20]" :count="storeAuthNums"></u-badge>
+					 </div>
+					 <div class="title">门店审核</div>
 				 </div>
-				 <div class="title">库存盘点</div>
-			 </div>
-			 <div class="graid-box-1" @click="toPage('/pages/stockCheck/shelfList')" v-if="$hasPermissions('M_shelfOrder_mobile')">
-				 <div class="icon">
-					<u-icon name="icon_order" custom-prefix="iscm-icon" size="65"></u-icon>
-					<u-badge type="error" size="mini" :offset="[-5,20]" :count="stockCheckNums"></u-badge>
+				 <div class="graid-box-1" @click="toPage('/pages/stockCheck/shelfList')" v-if="$hasPermissions('M_stockCheck_mobile')">
+					 <div class="icon">
+						<u-icon name="icon_warehousing" custom-prefix="iscm-icon" size="65"></u-icon>
+						<u-badge type="error" size="mini" :offset="[-5,20]" :count="stockCheckNums"></u-badge>
+					 </div>
+					 <div class="title">库存盘点</div>
+				 </div>
+				 <div class="graid-box-1" @click="toPage('/pages/stockCheck/shelfList')" v-if="$hasPermissions('M_shelfOrder_mobile')">
+					 <div class="icon">
+						<u-icon name="icon_order" custom-prefix="iscm-icon" size="65"></u-icon>
+						<u-badge type="error" size="mini" :offset="[-5,20]" :count="stockCheckNums"></u-badge>
+					 </div>
+					 <div class="title">货架订单</div>
 				 </div>
-				 <div class="title">货架订单</div>
+				 <!-- <div class="graid-box-1" @click="toPage('/pages/index/printAbc')">
+					 <div class="title">打印ABC</div>
+				 </div> -->
 			 </div>
-			 <!-- <div class="graid-box-1" @click="toPage('/pages/index/printAbc')">
-				 <div class="title">打印ABC</div>
-			 </div> -->
-		 </div>
+			 <!-- 货架订单 -->
+			 <view class="sales-list">
+			 	<view class="title">
+			 		<text class="title-name" @click="$refs.salesList.refash()">
+			 			货架订单 
+			 			<u-icon name="reload" color="#2979ff" size="28"></u-icon>
+			 		</text>
+			 		<view class="title-all" @click="toPage('/pages/shelfOrder/shelfOrder')">查看全部<u-icon name="arrow-right" color="rgb(144, 147, 153)" size="28"></u-icon></view>
+			 	</view>
+			 </view>
+		 </view>
+		 <!-- 销售单列表 -->
+		 <listComponent ref="salesList" :height="listHeight" />
 	</view>
 </template>
 <script>
 	import iconItemsList from '@/components/icon-items-list/icon-items-list.vue';
+	import listComponent from '@/pages/shelfOrder/listComponent.vue'
 	import { shelfReplenishStateCount } from '@/api/shelfReplenish'
 	import { queryStockCheckWaitStateNum } from '@/api/stockCheck'
 	import { xprhStoreApplyQueryPage } from '@/api/approveStore'
 	export default {
 		components: {
 			iconItemsList,
+			listComponent
 		},
 		data() {
 			return {
@@ -67,9 +83,16 @@
 				storageRacksNavList: [],
 				theme: '',
 				storeAuthNums: 0,
-				stockCheckNums: 0
+				stockCheckNums: 0,
+				listHeight: 400
 			}
 		},
+		onReady() {
+			const query = uni.createSelectorQuery().in(this);
+			query.select('#tjCons').boundingClientRect(data => {
+			  this.listHeight = Math.floor(data.height)
+			}).exec();
+		},
 		onLoad() {
 			// 设置底部tabbar 样式
 			const theme = getApp().globalData.theme
@@ -159,7 +182,7 @@
 			border-radius: 30upx;
 			padding: 10upx 20upx;
 			box-shadow: 3upx 2upx 6upx #eee;
-			
+			margin-bottom: 20upx;
 			.graid-box-1{
 				padding: 30rpx 0;
 				width: 25%;
@@ -182,7 +205,7 @@
 			border-radius: 30upx;
 			padding: 10upx 20upx;
 			box-shadow: 3upx 2upx 6upx #eee;
-			margin-bottom: 30upx;
+			margin-bottom: 20upx;
 			.panel-title {
 				display: flex;
 				align-items: center;
@@ -209,5 +232,20 @@
 				}
 			}
 		}
+		.sales-list{
+			.title{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				.title-name{
+					font-size: 32upx;
+					color: #333;
+					font-weight: 1000;
+				}
+				.title-all{
+					color: rgb(144, 147, 153);
+				}
+			}
+		}
 	}
 </style>

+ 8 - 2
pages/sales/index.vue

@@ -75,7 +75,7 @@
 		onReady() {
 			const query = uni.createSelectorQuery().in(this);
 			query.select('#tjCons').boundingClientRect(data => {
-			  this.listHeight = Math.floor(data.height + 5)
+			  this.listHeight = Math.floor(data.height)
 			}).exec();
 		},
 		onLoad() {
@@ -182,7 +182,13 @@
 <style lang="scss">
 	.sales-warp{
 		width: 100%;
-		padding: 20rpx 20upx;
+		height: 100vh;
+		padding: 0 20upx;
+		> view{
+			&:first-child{
+				padding-top: 20upx;
+			}
+		}
 		.color_6{
 			color: #666;
 		}

+ 3 - 2
pages/sales/listComponent.vue

@@ -237,14 +237,14 @@
 						.u-line{
 							display: inline-block;
 							width: 6upx;
-							height: 30upx;
+							height: 28upx;
 							vertical-align: bottom;
 							margin: 0 10upx;
 							border-radius: 5upx;
 						}
 						.buyer{
 							flex-grow: 1;
-							font-size: 30upx;
+							font-size: 28upx;
 							font-weight: bold;
 						}
 						>view{
@@ -252,6 +252,7 @@
 								width: 150upx;
 								text-align: right;
 								color: #666;
+								font-size: 26upx;
 							}
 						}
 					}

+ 90 - 0
pages/shelfOrder/chooseShelf.vue

@@ -0,0 +1,90 @@
+<template>
+	<view class="salesSearch-wrap">
+		<u-popup v-model="isShow" closeable class="search-popup" mode="right" @close="isShow=false" length="85%">
+			<view class="form-title">选择货架(可多选)</view>
+			<view class="form-content">
+				<shelfList :checkEdList="defaultParams" @ok="submit"></shelfList>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import shelfList from './shelfList.vue'
+	export default{
+		components: {
+			shelfList,
+		},
+		props: {
+			openModal: { //  弹框显示状态
+				type: Boolean,
+				default: false
+			},
+			defaultParams: {  //  默认查询条件
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+		},
+		data(){
+			return{
+				isShow: this.openModal,
+				customBtnStyle: {  //  自定义按钮样式
+					borderColor: this.$config('primaryColor'),
+					backgroundColor: this.$config('primaryColor'),
+					color: '#fff'
+				},
+				showDate: false, // 是否显示时间弹窗
+				settleStyleName: '',
+				settleStyleModal: false,
+			}
+		},
+		methods: {
+			// 查询
+			submit(data) {
+				this.$emit('refresh', data)
+				this.isShow = false
+			},
+		},
+		watch: {
+			//  父页面传过来的弹框状态
+			openModal (newValue, oldValue) {
+				this.isShow = newValue
+			},
+			//  重定义的弹框状态
+			isShow (newValue, oldValue) {
+				if (!newValue) {
+					this.$emit('close')
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.salesSearch-wrap{
+		.search-popup {
+			.form-title{
+				text-align: center;
+				padding: 20upx;
+			}
+			.form-content {
+				display: block;
+				padding: 20upx;
+				box-sizing: content-box;
+				 
+			}
+			.uni-list-btns {
+				display: flex;
+				padding: 20upx;
+				.handle-btn {
+					font-size: 28upx;
+					margin: 0 30upx;
+					width: 100%;
+					flex: 1;
+				}
+			}
+		}
+	}
+</style>

+ 227 - 0
pages/shelfOrder/listComponent.vue

@@ -0,0 +1,227 @@
+<template>
+	<view class="sales-list-component">
+		<scroll-view class="sales-list-con" :style="{height: scrollH+'upx'}" scroll-y @scrolltolower="onreachBottom">
+			<view class="sales-list-main">
+				<view class="sales-list-item" v-for="(item, index) in listData" :key="item.id" @click="getDetail(item)">
+					<view class="list-item-tit flex align_center justify_between">
+						<view class="u-line" :style="{background: $config('primaryColor')}"></view>
+						<view class="buyer">{{item.shelfName||'--'}}</view>
+						<view>{{item.billStateDictValue}} <u-icon name="arrow-right" color="#969da3" size="28"></u-icon></view>
+					</view>
+					<view class="detail-list">
+						<view class="flex align_center justify_between" v-for="de in item.orderBillDetailApiEntityList">
+							<view class="limgs">
+								<u-image :src="de.images?de.images:`../../static/${$config('themePath')}/def_img@2x.png`" width="128" height="128" border-radius="10"></u-image>
+							</view>
+							<view class="pinfo">
+								<view class="pname">{{de.productCode}}</view>
+								<view>{{de.productName}}</view>
+							</view>
+							<view class="prices">
+								<view>¥{{de.settlePrice}}</view>
+								<view><text>X</text>{{de.totalQty}}{{de.unit}}</view>
+							</view>
+						</view>
+					</view>
+					<view class="list-item-con">
+						<view class="list-item-line flex align_center justify_between">
+							<view class="color_6 font_13">{{item.createDate || '--'}}</view>
+							<view>
+								合计:¥{{item.settleAmount}}
+							</view>
+						</view>
+					</view>
+				</view>
+				<view v-if="listData && listData.length == 0 && status!='loading'">
+					<u-empty :text="noDataText" mode="list" :img-width="200" :margin-top="30"></u-empty>
+				</view>
+				<view style="padding-bottom: 20upx;">
+					<u-loadmore v-if="totalNum>listData.length || status=='loading'" :status="status" />
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import { toThousands } from '@/libs/tools'
+	import { orderBillQueryPage } from '@/api/shelf'
+	export default{
+		components: {},
+		props: {
+			height: {  // 非滚动区域高度   upx
+				type: [String ,Number],
+				default: 300
+			},
+			params: {  // 列表查询条件
+				type: Object,
+				default: () => {
+					return {}
+				}
+			}
+		},
+		data(){
+			return{
+				listData: [],
+				pageNo: 1,
+				pageSize: 10,
+				totalNum: 0,
+				status: 'loadmore',
+				noDataText: '暂无数据',
+				toThousands,
+				dataInfo: null,
+				scrollH: 300,
+			}
+		},
+		watch:{
+			height(a,b){
+				const sys = uni.getSystemInfoSync()
+				if(sys.platform == 'android'){
+					this.scrollH = (sys.windowHeight - sys.statusBarHeight - a) * 2
+				}else{
+					if(sys.safeArea.top){
+						this.scrollH = (sys.windowHeight - a) * 2 + sys.statusBarHeight - 34
+					}else{
+						this.scrollH = (sys.windowHeight - a) * 2 - 14
+					}
+				}
+			},
+		},
+		mounted() {
+			this.getList()
+		},
+		methods:{
+			refash(){
+				this.listData = []
+				this.totalNum = 0
+				this.getList(1)
+			},
+			// 列表
+			getList(pageNo){
+				const _this = this
+				if (pageNo) {
+					this.pageNo = pageNo
+				}
+				let params = {
+					pageNo: this.pageNo,
+					pageSize: this.pageSize
+				}
+				this.status = "loading"
+				console.log(Object.assign(params, this.params))
+				orderBillQueryPage(Object.assign(params, this.params)).then(res => {
+					if (res.status == 200) {
+						if(this.pageNo>1){
+							this.listData = this.listData.concat(res.data.list || [])
+						}else{
+							this.listData = res.data.list || []
+						}
+						this.totalNum = res.data.count || 0
+					} else {
+						this.listData = []
+						this.totalNum = 0
+						this.noDataText = res.message
+					}
+					this.status = "loadmore"
+				})
+			},
+			// scroll-view到底部加载更多
+			onreachBottom() {
+				if(this.listData.length < this.totalNum){
+					this.pageNo += 1
+					this.getList()
+				}
+			},
+			// 查看详情
+			getDetail(data){
+				uni.navigateTo({ url: '/pages/shelfOrder/orderDetail?pageType=detail&orderBillSn='+data.orderBillSn })
+			},
+		}
+	}
+</script>
+
+<style lang="less">
+	.sales-list-component{
+		.color_6{
+			color: #666;
+		}
+		.font_13{
+			font-size: 26upx;
+		}
+		.sales-list-con{
+			.sales-list-main{
+				.sales-list-item{
+					background: #ffffff;
+					padding: 20upx;
+					margin: 25upx 0;
+					border-radius: 25upx;
+					box-shadow: 1px 1px 3px #EEEEEE;
+					.list-item-tit{
+						padding-bottom: 18upx;
+						padding-top: 10upx;
+						border-bottom: 1px solid #e4e7ed;
+						.u-line{
+							display: inline-block;
+							width: 6upx;
+							height: 28upx;
+							vertical-align: bottom;
+							margin: 0 10upx;
+							border-radius: 5upx;
+						}
+						.buyer{
+							flex-grow: 1;
+							font-size: 28upx;
+							font-weight: bold;
+						}
+						>view{
+							&:last-child{
+								width: 150upx;
+								text-align: right;
+								color: #666;
+								font-size: 26upx;
+							}
+						}
+					}
+					.detail-list{
+						> view{
+							padding: 20upx 0;
+							border-bottom: 1rpx solid #f8f8f8;
+						}
+						.pinfo{
+							padding: 0 15rpx;
+							.pname{
+								font-weight: bold;
+								margin-bottom: 6rpx;
+							}
+						}
+						.prices{
+							width: 20%;
+							text{
+								font-size: 20rpx;
+								color: #999;
+								margin-right: 20rpx;
+							}
+							text-align: right;
+							> view{
+								&:first-child{
+									margin-bottom: 10rpx;
+								}
+								&:last-child{
+									font-size: 24rpx;
+								}
+							}
+						}
+					}
+					.list-item-con{
+						padding: 10upx 0;
+						.list-item-line{
+							padding: 8upx 0;
+						}
+						text{
+							color: #666;
+						}
+					}
+				}
+			}
+		}
+	}
+</style>

+ 185 - 0
pages/shelfOrder/orderDetail.vue

@@ -0,0 +1,185 @@
+<template>
+	<view class="shelfOrderDetail-wrap">
+		<view class="shelfOrderDetail-info">
+			<view class="list-item-tit flex align_center">
+				<view class="u-line" :style="{background: $config('primaryColor')}"></view>
+				<view class="buyer">基础信息</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">订单编号</view>
+				<view>{{ detailData&&detailData.orderBillNo || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">货架名称</view>
+				<view>{{ detailData&&detailData.shelfName || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">下单时间</view>
+				<view>{{ detailData&&detailData.orderDate || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">下单人员</view>
+				<view>{{ detailData&&detailData.orderPersonName || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">订单状态</view>
+				<view>{{ detailData&&detailData.billStateDictValue || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">VIN</view>
+				<view>{{ detailData&&detailData.vin || '--' }}</view>
+			</view>
+			<view class="info-item flex align_center">
+				<view class="info-name">车型</view>
+				<view>{{ detailData&&detailData.vehicleModel || '--' }}</view>
+			</view>
+		</view>
+		<view class="shelfOrderDetail-info">
+			<view class="list-item-tit flex align_center">
+				<view class="u-line" :style="{background: $config('primaryColor')}"></view>
+				<view class="buyer">产品列表</view>
+			</view>
+			<view class="countData flex align_center" v-if="countDetail">
+				<view>总款数:<text>{{countDetail.productCategory}}</text>;</view>
+				<view>总数量:<text>{{countDetail.totalQty}}</text>;</view>
+				<view>总结算金额:<text>¥{{countDetail.settleAmount}}</text>;</view>
+			</view>
+			<view 
+			class="panel-box flex justify_between" 
+			v-for="item in detailList" :key="item.id">
+				<view class="pimgs">
+					<u-image :src="item.images||`../../static/${theme}/def_img@2x.png`" width="120" height="120" border-radius="10"></u-image>
+				</view>
+				<view class="info-con flex_1">
+					<view><text class="pcode">{{item.shelfPlaceCode}}</text>{{item.productCode || '--'}}</view>
+					<view class="padding_7">{{item.productName || '--'}}</view>
+					<view class="prices flex align_center justify_between">
+						<view><text class="p1">¥{{item.settlePrice}}</text><text class="p2">X</text>{{item.totalQty}}{{item.unit}}</view>
+						<view>¥{{item.settleAmount}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { orderBillQueryPage, orderBillDetailCount } from '@/api/shelf'
+	export default{
+		data(){
+			return {
+				detailData:null,
+				detailList: [],
+				orderBillSn: null,
+				countDetail: null
+			}
+		},
+		onLoad(opts) {
+			this.orderBillSn = opts.orderBillSn
+			this.getDetail()
+		},
+		methods: {
+		  getDetail () {
+		    orderBillQueryPage({ pageNo: 1, pageSize: 1, orderBillSn: this.orderBillSn}).then(res => {
+		      this.detailData = res.data.list && res.data.list[0]
+		      this.detailList = this.detailData.orderBillDetailApiEntityList
+		    })
+		    orderBillDetailCount({ orderBillSn: this.orderBillSn}).then(res => {
+		      this.countDetail = res.data || null
+		    })
+		  },
+		},
+	}
+</script>
+
+<style lang="scss">
+	.shelfOrderDetail-wrap{
+		width: 100%;
+		.panel-box {
+			padding: 20upx 20upx;
+			display: flex;
+			justify-content: space-between;
+			.info-con{
+				margin-left: 20upx;
+				.padding_7{
+					padding: 14upx 0 0;
+					font-size: 28upx;
+				}
+				.pcode{
+					font-weight: normal;
+					margin-right: 10rpx;
+					padding: 0 10rpx;
+					background: rgba(3, 54, 146, 0.15);
+					border-radius: 30rpx;
+					color: #033692;
+					font-size: 24rpx;
+				}
+				.prices{
+					padding-top: 15rpx;
+					.p1{
+						color:#ff0000;
+						margin-right: 30rpx;
+					}
+					.p2{
+						color: #999;
+						font-size: 20rpx;
+						margin-right: 10rpx;
+					}
+				}
+			}
+			border-bottom: 1px solid #e4e7ed;
+			&:last-child{
+				border: 0;
+			}
+		}
+		.list-item-tit{
+			padding-bottom: 18upx;
+			padding-top: 10upx;
+			border-bottom: 1px solid #e4e7ed;
+			.u-line{
+				display: inline-block;
+				width: 6upx;
+				height: 28upx;
+				vertical-align: bottom;
+				margin: 0 10upx;
+				border-radius: 5upx;
+			}
+			.buyer{
+				flex-grow: 1;
+				font-size: 28upx;
+				font-weight: bold;
+			}
+		}
+		.shelfOrderDetail-info{
+			background-color: #ffffff;
+			padding: 10upx 20upx 20upx;
+			border-radius: 20upx;
+			box-shadow: 3upx 2upx 6upx #eee;
+			margin: 20upx;
+			.info-item{
+				border-bottom: 1px solid #e4e7ed;
+				padding: 20upx 0;
+				.info-name{
+					color: #999;
+					padding-right: 20rpx;
+					width: 150rpx;
+				}
+				&:last-child{
+					border: 0;
+				}
+			}
+			.countData{
+				background: #fff;
+				display: flex;
+				padding: 15upx;
+				border-radius: 15rpx;
+				text{
+					color: #ffb355;
+				}
+				font-size: 24rpx;
+				border-bottom: 1px solid #e4e7ed;
+				padding: 20upx 0;
+			}
+		}
+	}
+</style>

+ 184 - 0
pages/shelfOrder/search.vue

@@ -0,0 +1,184 @@
+<template>
+	<view class="salesSearch-wrap">
+		<u-popup v-model="isShow" class="search-popup" mode="right" @close="isShow=false" length="85%">
+			<u-form class="form-content" :model="form" ref="uForm" label-width="150">
+				<u-form-item label="下单时间" prop="date" class="form-item">
+					<u-input clearable v-model="form.date" disabled placeholder="请选择下单时间区间" class="form-item-inp" @click="showDate=true" />
+					<u-icon v-show="form.date.length != 0" name="close-circle-fill" color="#c8c0cc" size="32" class="close-circle" @click="clearTime"></u-icon>
+				</u-form-item>
+				<u-form-item label="产品编码" prop="productCode" class="form-item">
+					<u-input v-model="form.productCode" :maxlength="30" placeholder="请输入产品编码" />
+				</u-form-item>
+				<u-form-item label="产品名称" prop="productName" class="form-item">
+					<u-input v-model="form.productName" :maxlength="30" placeholder="请输入产品名称" />
+				</u-form-item>
+				<u-form-item label="订单状态" prop="billState" class="form-item">
+					<u-input v-model="settleStyleName" @click="settleStyleModal=true" disabled placeholder="请选择订单状态" class="form-item-inp" />
+					<u-icon v-show="settleStyleName.length != 0" name="close-circle-fill" color="#c8c0cc" size="32" class="close-circle" @click="clearSettleStyle"></u-icon>
+				</u-form-item>
+			</u-form>
+			<view class="uni-list-btns">
+				<u-button class="handle-btn" size="medium" shape="circle" hover-class="none" @click="resetForm">重置</u-button>
+				<u-button class="handle-btn search-btn" shape="circle" size="medium" hover-class="none" :custom-style="customBtnStyle" @click="handleSearch">查询</u-button>
+			</view>
+		</u-popup>
+		<!-- 选择日期范围 -->
+		<u-calendar v-model="showDate" @change="dateChange" mode="range"></u-calendar>
+		<!-- 选择收款方式 -->
+		<u-picker v-model="settleStyleModal" @confirm="settleStyleChange" :range="billStatusOpt" range-key="dispName" mode="selector"></u-picker>
+	</view>
+</template>
+
+<script>
+	export default{
+		props: {
+			openModal: { //  弹框显示状态
+				type: Boolean,
+				default: false
+			},
+			defaultParams: {  //  默认查询条件
+				type: Object,
+				default: () => {
+					return {}
+				}
+			},
+			billStatusOpt: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			}
+		},
+		data(){
+			return{
+				isShow: this.openModal,
+				form: {
+					date: '',
+					orderStartDate: '',
+					orderEndDate: '',
+					productCode: '', //  产品编码
+					productName: '', //  产品名称
+					billState: undefined //  订单状态
+				},
+				customBtnStyle: {  //  自定义按钮样式
+					borderColor: this.$config('primaryColor'),
+					backgroundColor: this.$config('primaryColor'),
+					color: '#fff'
+				},
+				showDate: false, // 是否显示时间弹窗
+				settleStyleName: '',
+				settleStyleModal: false,
+			}
+		},
+		mounted() {
+			this.init()
+		},
+		methods: {
+			//  初始化数据
+			init(){
+				if(this.defaultParams.orderStartDate && this.defaultParams.orderEndDate){
+					this.form.date = this.defaultParams.orderStartDate + ' ~ ' + this.defaultParams.orderEndDate
+				}else{
+					this.form.date = ''
+				}
+				this.form.orderStartDate = this.defaultParams.orderStartDate ? this.defaultParams.beginDate : ''
+				this.form.orderEndDate = this.defaultParams.orderEndDate ? this.defaultParams.orderEndDate : ''
+				this.form.productCode = this.defaultParams.productCode ? this.defaultParams.productCode : ''
+				this.form.productName = this.defaultParams.productName ? this.defaultParams.productName : ''
+				this.form.billState = this.defaultParams.billState ? this.defaultParams.billState : ''
+			},
+			// 查询
+			handleSearch() {
+				let params = JSON.parse(JSON.stringify(this.form))
+				delete params.date
+				this.$emit('refresh', params)
+				this.isShow = false
+			},
+			// 重置
+			resetForm() {
+				this.settleStyleName = ''
+				this.form.orderStartDate = ''
+				this.form.orderEndDate = ''
+				this.$refs.uForm.resetFields()
+				this.$emit('refresh', null)
+				this.isShow = false
+				this.clearTime()
+			},
+			//  清空订单状态
+			clearSettleStyle(){
+				this.settleStyleName = ''
+				this.form.billState = undefined
+			},
+			// 订单状态  change
+			settleStyleChange(ind){
+				this.form.billState = this.billStatusOpt[ind].code || undefined
+				this.settleStyleName = this.billStatusOpt[ind].dispName || ''
+			},
+			// 订单状态
+			getTypeList () {
+				// 订单状态有值时,匹配对应name
+				if(this.defaultParams.billState || this.defaultParams.billState==0){
+					this.billStatusOpt.map(item => {
+						if(item.code == this.defaultParams.billState){
+							this.settleStyleName = item.dispName
+						}
+					})
+				}
+			},
+			// 时间  change
+			dateChange(date){
+				this.form.date = date.startDate + ' ~ ' + date.endDate
+				this.form.orderStartDate = date.startDate
+				this.form.orderEndDate = date.endDate
+			},
+			//  清空创建时间
+			clearTime(){
+				this.form.date = ''
+				this.form.orderStartDate = ''
+				this.form.orderEndDate = ''
+			}
+		},
+		watch: {
+			//  父页面传过来的弹框状态
+			openModal (newValue, oldValue) {
+				this.isShow = newValue
+			},
+			//  重定义的弹框状态
+			isShow (newValue, oldValue) {
+				if (!newValue) {
+					this.$emit('close')
+				}else{
+					this.getTypeList()
+				}
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.salesSearch-wrap{
+		.search-popup {
+			.form-content {
+				display: block;
+				padding: 0 20upx;
+				box-sizing: content-box;
+				.form-item-inp{
+					display: inline-block;
+					width: 88%;
+					vertical-align: top;
+				}
+			}
+			.uni-list-btns {
+				display: flex;
+				padding: 20upx;
+				margin-top: 200upx;
+				.handle-btn {
+					font-size: 28upx;
+					margin: 0 30upx;
+					width: 100%;
+					flex: 1;
+				}
+			}
+		}
+	}
+</style>

+ 235 - 0
pages/shelfOrder/shelfList.vue

@@ -0,0 +1,235 @@
+<template>
+	<view class="moreShelfPart flex flex_column">
+		<view class="moreShelfPart-search">
+			<u-search
+			placeholder="请输入货架名称搜索" 
+			v-model="shelfName" 
+			:show-action="false" 
+			@input="$u.debounce(getShelfList, 800)"
+			@custom="$u.debounce(getShelfList, 500)" 
+			@search="$u.debounce(getShelfList, 500)" 
+			@clear="clearSearch" 
+			:action-style="{'color': '#fff', 'font-size': '24upx', 'background-color': '#57a3f3', 'border-radius': '6upx', 'padding': '12upx 0'}">
+			</u-search>
+		</view>
+		<view class="moreShelfPart-body">
+			<scroll-view
+			class="nav-right" 
+			scroll-y 
+			@scrolltolower="onreachBottom">
+				<u-checkbox-group wrap class="nav-right-item" @change="checkboxGroupChange">
+					<u-checkbox 
+						v-model="item.checked" 
+						v-for="(item, index) in shelfList" 
+						:key="item.shelfSn"
+						:name="item.shelfSn"
+					>{{item.shelfName}}</u-checkbox>
+				</u-checkbox-group>
+				<view v-if="shelfList&&shelfList.length==0">
+					<u-empty v-if="status!='loading'" :src="`/static/${$config('themePath')}/def_no_data@3x.png`" icon-size="180" :text="noDataText" mode="list" :margin-top="50"></u-empty>
+				</view>
+				<view style="padding: 20upx;" v-else>
+					<u-loadmore :status="status" />
+				</view>
+			</scroll-view>
+		</view>
+		<view class="batchPrint-manualPrint-footer">
+			<view style="color: #999;">
+				已选 {{checkList.length}} 个货架
+			</view>
+			<view>
+				<u-button class="handle-btn" :loading="loading" shape="circle" size="medium" hover-class="none" @click="resetForm">重置</u-button>
+				<u-button class="handle-btn" :loading="loading" shape="circle" size="medium" hover-class="none" :custom-style="customBtnStyle" @click="submit">确定</u-button>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import { getShelfList } from '@/api/shelf'
+	export default {
+		props: {
+			checkEdList: {  //  默认查询条件
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+		},
+		data() {
+			return {
+				shelfName: '',
+				isGobleSearch: false,
+				shelfList: [],
+				pageNo:1,
+				pageSize: 1000,
+				total: 0, // 列表总数
+				noDataText: '暂无货架',
+				status: 'loading',
+				tempData: null,
+				allChecked: false,
+				customBtnStyle: {  //  自定义按钮样式
+					borderColor: this.$config('primaryColor'),
+					backgroundColor: this.$config('primaryColor'),
+					color: '#fff'
+				},
+				checkList: [],
+				loading: false
+			}
+		},
+		mounted() {
+			this.clearSearch()
+			this.checkList = this.checkEdList
+		},
+		methods: {
+			checkboxGroupChange(e) {
+				console.log(e);
+				this.getChecked()
+			},
+			clearSearch(){
+				this.shelfName = ''
+				this.pageNo = 1
+				this.total = 0
+				this.shelfList = []
+				this.getShelfList()
+			},
+			resetForm(){
+				this.checkList = []
+				this.$emit("ok", [])
+			},
+			getChecked(){
+				const ret = this.shelfList.filter(item => item.checked)
+				const list = []
+				ret.map(item => {
+					list.push(item.shelfSn)
+				})
+				this.checkList = list
+				return list
+			},
+			submit(){
+				this.$emit("ok", this.getChecked())
+			},
+			setChecked(){
+				this.shelfList.map(item => {
+					item.checked = this.checkEdList.find(k => k == item.shelfSn) ? true : false
+				})
+			},
+			// 获取数字货架列表
+			getShelfList(){
+				const _this = this
+				if(this.shelfName == ''){
+					this.pageNo = 1
+					this.total = 0
+				}
+				let params = {
+				    pageNo: this.pageNo,
+				    pageSize: this.pageSize,
+					shelfName: this.shelfName
+				}
+				_this.status = 'loading'
+				getShelfList(params).then(res => {
+					uni.hideLoading()
+					if(res.status == 200){
+						let list = res.data.list
+						if (list && list.length){
+							// 分页 拼接数据
+							if(_this.pageNo>1){
+								_this.shelfList = _this.shelfList.concat(res.data.list || [])
+							}else{
+								_this.shelfList = res.data.list
+							}
+							_this.total = res.data.count
+							console.log(res.data.count)
+							if (_this.shelfList.length == res.data.count) {
+								_this.status = 'nomore'
+							} else {
+								_this.status = 'loadmore'
+							}
+						} else {
+							_this.shelfList = list || []
+							_this.total = 0
+							_this.status = 'nomore'
+							_this.noDataText = '没有查询到相关货架'
+						}
+						_this.noDataText = '暂无货架'
+						_this.setChecked()
+					}else{
+						_this.status = 'loadmore'
+						_this.shelfList = []
+						_this.total = 0
+						_this.noDataText = res.message ? res.message : '网络似乎出错了,请稍后再试'
+					}
+				})
+			},
+			// 加载更多
+			onreachBottom () {
+				if(this.shelfList.length < this.total ){
+					if(this.isGobleSearch&&this.shelfName==''){
+						return
+					}
+					this.pageNo++
+					this.getShelfList()
+				}else{
+					this.status = "nomore"
+				}
+			},
+		}
+	}
+</script>
+
+<style lang="less">
+	.moreShelfPart{
+		width: 100%;
+		height: calc(100vh - 120rpx) ;
+		.moreShelfPart-search{
+			padding: 0 20rpx;
+			background-color: #FFFFFF;
+		}
+		.moreShelfPart-body{
+			flex-grow: 1;
+			background-color: #fff;
+		}
+		.nav-right{
+			padding: 0 20upx;
+			height: calc(100vh - 250rpx);
+			box-sizing: border-box;
+			 
+			.nav-right-item{
+				 /deep/ .u-checkbox{
+					 border-bottom: 1rpx solid #f8f8f8;
+					 padding: 20upx 10upx;
+				 }
+				 /deep/ .u-checkbox__label{
+					 flex-grow: 1;
+					 margin-right: 0;
+				 }
+			}
+		}
+		.batchPrint-manualPrint-footer{
+			padding: 10upx;
+			background-color: #fff;
+			width: 100%;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			border-top: 1rpx solid #f8f8f8;
+			> view{
+				&:first-child{
+					flex-grow: 1;
+					width: 40%;
+					font-size: 24rpx;
+				}
+				&:last-child{
+					width: 60%;
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					.handle-btn{
+						width: 50%;
+						margin-right: 15rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 144 - 0
pages/shelfOrder/shelfOrder.vue

@@ -0,0 +1,144 @@
+<template>
+	<view class="sales-list-wrap">
+		<view class="head-info" id="tjCons">
+			<view class="search-top-box" @click="openShlefModal=true">
+				<text>{{searchForm.shelfSnList.length?('已选'+searchForm.shelfSnList.length+'个货架'):'全部货架'}}</text>
+				<u-icon name="arrow-right"></u-icon>
+			</view>
+			<view class="countData" v-if="countData">
+				<view>总款数:<text>{{countData.productCategory}}</text>;</view>
+				<view>总数量:<text>{{countData.totalQty}}</text>;</view>
+				<view>总结算金额:<text>¥{{countData.settleAmount}}</text>;</view>
+			</view>
+		</view>
+		<!-- 销售单列表 -->
+		<view class="list-box">
+			<listComponent ref="salesList" :height="listHeight" :params="searchParams" />
+		</view>
+		<!-- 查询右侧弹框 -->
+		<search :openModal="openModal" :billStatusOpt="billStatusOpt" :defaultParams="searchForm" @refresh="refresh" @close="openModal=false" />
+		<!-- 选择货架 -->
+		<chooseShelf :openModal="openShlefModal" :defaultParams="searchForm.shelfSnList" @refresh="refreshList" @close="openShlefModal=false" />
+	</view>
+</template>
+
+<script>
+	import ListComponent from './listComponent.vue'
+	import search from './search.vue'
+	import chooseShelf from './chooseShelf.vue'
+	import { getLookUpItem } from '@/api/data'
+	import { orderBillQueryPage, orderBillQueryCount } from '@/api/shelf'
+	export default{
+		components: { ListComponent, search, chooseShelf },
+		data(){
+			return{
+				listData: [],
+				pageNo: 1,
+				pageSize: 15,
+				totalNum: 0,
+				noDataText: '暂无数据',
+				billStatusOpt: [],
+				searchForm: {
+					shelfSnList: []
+				},
+				searchParams: {},
+				listHeight: 200,
+				openModal: false,
+				openShlefModal: false,
+				countData: null
+			}
+		},
+		onNavigationBarButtonTap(e){  // 标题栏 按钮操作
+			this.openModal = true
+		},
+		onReady() {
+			const query = uni.createSelectorQuery().in(this);
+			query.select('#tjCons').boundingClientRect(data => {
+			  this.listHeight = Math.floor(data.height + 10)
+			}).exec();
+		},
+		onLoad() {
+			const _this = this
+			this.getLookUpItem('ORDER_BILL_STATE')
+			this.$nextTick(function(){
+				// 监听整改完成后刷新事件
+				uni.$on('refreshSalesBL', function(data){
+					_this.$refs.salesList.getList(1)
+					_this.getCount()
+				})
+			})
+			this.getCount()
+		},
+		onUnload() {
+			uni.$off('refreshSalesBL')
+		},
+		methods: {
+			getCount(){
+				orderBillQueryCount(this.searchParams).then(res => {
+					this.countData = res.data || null
+				})
+			},
+			// 获取查询参数 刷新列表
+			refresh(params){
+				const _this = this
+				this.searchParams = Object.assign(this.searchForm,params)
+				this.searchParams.orderStartDate = params&&params.orderStartDate ? (params.orderStartDate + ' 00:00:00') : ''
+				this.searchParams.orderEndDate = params&&params.orderEndDate ? (params.orderEndDate + ' 23:59:59') : ''
+				this.$nextTick(function(){
+					_this.$refs.salesList.refash()
+					_this.getCount()
+				})
+			},
+			refreshList(data){
+				this.searchForm.shelfSnList = data
+				this.refresh(this.searchForm)
+			},
+			// 状态  change
+			handleChange(type){
+				this.$refs.salesList.refash()
+				this.getCount()
+			},
+			// 配送方式
+			getLookUpItem (type) {
+				getLookUpItem({ lookupCode: type, pageNo: 1, pageSize: 1000 }).then(res => {
+					if (res.status == 200 && res.data && res.data.list) {
+						res.data.list.map(item => {
+							item.label = item.dispName
+							item.value = item.code
+						})
+						this.billStatusOpt = res.data.list
+					} else {
+						this.billStatusOpt = []
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.sales-list-wrap{
+		width: 100%;
+		.head-info{
+			.search-top-box{
+				background-color: #fff;
+				text-align: center;
+				padding-bottom: 20rpx;
+			}
+			.countData{
+				background: #fff;
+				margin: 20upx 20upx 0;
+				display: flex;
+				padding: 15upx;
+				border-radius: 15rpx;
+				text{
+					color: #ffb355;
+				}
+				font-size: 24rpx;
+			}
+		}
+		.list-box{
+			padding: 0 25upx;
+		}
+	}
+</style>

+ 1 - 0
store/index.js

@@ -111,6 +111,7 @@ const store = new Vuex.Store({
 		vuex_shelfSettleType: [], // 门店审核结算方式
 		vuex_tempPrintList:[], // 临时打印数据
 		vuex_tempData: null, // 临时数据
+		vuex_shelfOrderState: null, // 货架订单状态
 	},
 	mutations: {
 		$uStore(state, payload) {

+ 6 - 0
证书/ios/AuthKey_GWHMFQ99LL.p8

@@ -0,0 +1,6 @@
+-----BEGIN PRIVATE KEY-----
+MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgJ2s+3nwJU4GcK+OY
+jjN5ciHq9YcSCxCcR5dDL1RkIgegCgYIKoZIzj0DAQehRANCAARXh8C0AesqFP53
+J3cjyIFyqFY3W0y0d+KIw6kCBeAUeJ+1ZfcaglUEWoo+FqKBLo0i9zBK/7aAGlhh
+0kOQ4VC6
+-----END PRIVATE KEY-----