Browse Source

预订单

shish 4 years ago
parent
commit
44715c95cc

+ 19 - 5
ghsApp/src/admin/changePrice/components/Item.vue

@@ -1,7 +1,10 @@
 <template>
 <view class="product">
-	<view class="item-cmd_bx" :class="[info.status ==2?'sold-out':'']">
+	<view class="item-cmd_bx">
 		<view class="img_bx">
+			<view v-if="info.status == 2" class="sold-out">
+				<view class="sold-out-xj">已下架</view>
+			</view>
 			<image :src="info.cover" style="width:160upx;height:160upx;"></image>
 		</view>
 		<view class="cmd-info_bx" @click="pageTo({url: '/admin/item/detail',query: {id: info.id}})">
@@ -11,7 +14,6 @@
 				<view>
 					<view class="open-bx" >
 						还剩 <text style="margin-left:8upx;color:#333333;">{{ parseFloat(info.stock) }}</text>
-						<text style="margin-left:30upx;color:#999999" v-if="info.status ==2">已下架</text>
 						<view class="price-area">
 						<input class="change-input" @click.stop @blur="savePrice"
 						@focus="modifyPrice = ''" placeholder-style="color:#CCCCCC" v-model="modifyPrice" type="digit" placeholder="填价格" />
@@ -99,9 +101,6 @@ export default {
 		font-size:22upx;
 	}
 }
-.sold-out{
-	background:#F6F6F6;
-}
 .item-cmd_bx {
 	height:160upx;
 	position: relative;
@@ -112,6 +111,21 @@ export default {
 		position: absolute;
 		left: 0upx;
 		top: 0upx;
+		.sold-out{
+			width:160upx;
+			height:160upx;
+			background-color:black;
+			position:absolute;
+			top:0;
+			left:0;
+			opacity: 0.6;
+			color:white;
+			text-align:center;
+			.sold-out-xj{
+				line-height:160upx;
+				font-size:28upx;
+			}
+		}
 	}
 	.cmd-info_bx {
 		position: relative;

+ 17 - 6
ghsApp/src/admin/changePrice/list.vue

@@ -25,12 +25,23 @@
 				<!--内容部分 start -->
 				<block v-if="!$util.isEmpty(globalClassItemList)">
 					<view class="item_list_bx selectAll" v-for="(classItem, classIndex) in globalClassItemList" :key="classIndex" :id="`class_${classIndex}`">
-						<view class="item_list_title" v-if="!$util.isEmpty(classItem.child)"> {{ classItem.className }}</view>
-						<template v-for="(productItem, productIndex) in classItem.child">
-							<view style="height:230upx" :id="`class_${classIndex}`" :key="productIndex">
-								<ItemComponent v-if="classItem.isActive" :isPrice="false" :info="productItem" @savePrice="savePrice" ></ItemComponent>
+						<view class="item_list_title"> {{ classItem.className }}</view>
+
+						<view v-if="classItem.child && !$util.isEmpty(classItem.child)">
+
+							<template v-for="(productItem, productIndex) in classItem.child">
+								<view style="height:230upx" :id="`class_${classIndex}`" :key="productIndex">
+									<ItemComponent v-if="classItem.isActive" :isPrice="false" :info="productItem" @savePrice="savePrice" ></ItemComponent>
+								</view>
+							</template>
+
+						</view>
+						<view v-else>
+							<view style="height:260upx;text-align:center;color:#CCCCCC;position: relative;">
+								<view style="position: absolute;margin:auto;top:130upx;left:0;right:0;bottom:0;">暂无花材</view>
 							</view>
-						</template>
+						</view>
+
 					</view>
 				</block>
 				<block v-else>
@@ -268,7 +279,7 @@ export default {
 		}
 	}
 	.right-box {
-		height: calc(100vh - 170upx);
+		height: calc(100vh - 200upx);
 		flex: 1;
 		box-sizing: border-box;
 	}

+ 12 - 0
ghsApp/src/admin/home/components/OrderItem.vue

@@ -8,6 +8,8 @@
 
         <image style="width: 38upx;height:38upx;border-radius:38upx;" mode="aspectFit" :src="item.customAvatarUrl"></image>
           <view class="tit"> {{ item.customName || "" }}</view>
+
+          <text class="other-book" v-if="item.book == 1" >预订单</text>
           <view class="other-refund" v-if="item.refund==2">有退款</view>
           <view class="other-status" v-if="item.debt == 1">欠款</view>
           <view :class="['status',item.status == '3' ? 'buleColor' : item.status == '6' ? 'defColor' : '']">{{ statusFormat(item.status) }}</view>
@@ -141,6 +143,16 @@ export default {
     font-weight: 650;
     margin-left: 15upx;
   }
+  & > .other-book{
+    flex: 1.5;
+    text-align: center;
+    color: white;
+    border:1upx solid green;
+    border-radius:30upx;
+    padding:5upx 10upx;
+    font-size:20upx;
+    background:green;
+  }
   & > .other-refund{
     flex: 1.5;
     text-align: center;

+ 2 - 12
ghsApp/src/admin/home/order.vue

@@ -7,24 +7,14 @@
       <i class="iconfont iconsanjiao_xia"></i>
       </view>
 
-      <view>
-        <AppSearchModule placeholder="输入英文字母搜索" @input="searchFn"/>
-      </view>
+      <view> <AppSearchModule placeholder="输入英文字母搜索" @input="searchFn"/> </view>
 
       <view class="select-dn_bx">
         <DateSelect class="bar" top="0" @selectDateFn="selectDateFn" defaultShowName='时间' />
       </view>
     </view>
     <view class="app-tabs">
-      <app-tabs
-        :tabs="tabs"
-        :isFixed="false"
-        :top="50"
-        :currentTab="tabIndex"
-        :height="100"
-        @change="change"
-        itemWidth="20%"
-      />
+      <app-tabs :tabs="tabs" :isFixed="false" :top="50" :currentTab="tabIndex" :height="100" @change="change" itemWidth="20%" />
     </view>
     <div class="list-wrap">
       <block v-if="!$util.isEmpty(list.data)">

+ 0 - 3
ghsApp/src/admin/item/components/ItemStock.vue

@@ -106,9 +106,6 @@ export default {
 	height:160upx;
 	position: relative;
 	margin-bottom: 20upx;
-	.sold-out{
-		background-color: black;
-	}
 	.img_bx {
 		height: 160upx;
 		width: 160upx;

+ 6 - 0
ghsApp/src/pagesOrder/detail.vue

@@ -39,6 +39,12 @@
 					<view>开单人员:</view>
 					<view>{{ detailInfo.shopAdminName }}</view>
 				</view>
+				<view class="order-info_box" v-if="detailInfo.book == 1">
+				<view>订单类型:</view>
+				<view>
+					<text style="color:white;border:1px solid green;border-radius:20upx;font-size:20upx;padding:5upx 12upx;background:green;">预订单</text>
+				</view>
+				</view>
 				<view class="order-info_box">
 					<view>送货时间:</view>
 					<view>{{ detailInfo.sendTimeWant }}</view>

File diff suppressed because it is too large
+ 0 - 0
ghsPad/dist/dev/app-plus/app-config-service.js


File diff suppressed because it is too large
+ 0 - 0
ghsPad/dist/dev/app-plus/manifest.json


+ 178 - 194
hdApp/src/admin/billing/affirmGhs.vue

@@ -1,184 +1,6 @@
-<style lang="scss" scoped>
-.admin-button-com {
-	margin-right: 20upx;
-}
-.affirm-page {
-	position: relative;
-	height: 100%;
-	display: flex;
-	flex-direction: column;
-	.affirm-view {
-		flex: 1;
-		padding: 20upx;
-		background-color: #f0f2f6;
-		.commodity-view {
-			display: flex;
-			flex-direction: column;
-			.commodity-list {
-				padding: 20upx;
-				.commodity-item {
-					display: flex;
-					margin-bottom: 20upx;
-					.item-icon {
-						flex-shrink: 0;
-						width: 140upx;
-						height: 140upx;
-					}
-					.item-info {
-						display: flex;
-						flex-direction: column;
-						justify-content: center;
-						flex: 1;
-						margin-left: 20upx;
-						.info-line {
-							margin-bottom: 20upx;
-							display: flex;
-							justify-content: space-between;
-							align-items: flex-end;
-							.item-name {
-								color: #666;
-								font-size: 28upx;
-								overflow: hidden;
-								white-space: nowrap;
-								text-overflow: ellipsis;
-								width:400upx;
-							}
-							.item-price {
-								color: #333;
-								font-size: 22upx;
-								.price {
-									font-size: 32upx;
-									font-weight: bold;
-								}
-							}
-							.item-type {
-								color: #999;
-								font-size: 24upx;
-							}
-							.item-count {
-								color: #666;
-								font-size: 24upx;
-							}
-						}
-					}
-				}
-			}
-			.summary-bar {
-				padding: 0 20upx;
-				height: 90upx;
-				display: flex;
-
-				align-items: center;
-				justify-content: space-between;
-				border-top: 1px solid #eeeeee;
-				.operate-view {
-					display: flex;
-
-					align-items: center;
-					color: #3385ff;
-					font-size: 26upx;
-					.iconfont {
-						margin-right: 20upx;
-						font-size: 40upx;
-					}
-				}
-				.describe-view {
-					display: flex;
-
-					align-items: center;
-					color: #333;
-					font-size: 24upx;
-					.price {
-						font-weight: bold;
-						font-size: 36upx;
-					}
-				}
-			}
-		}
-
-		.module-com {
-			background-color: #fff;
-			margin-bottom: 20upx;
-			border-radius: 10upx;
-			overflow: hidden;
-      		padding-top: 20upx;
-			.ghs-msg{
-				padding: 0 20upx 20upx;
-				font-size: 32upx;
-				&.active{
-					color: #868686;
-					font-size: 24upx;
-				}
-				i{color: #62ed73;font-size: 48upx}
-			}
-
-			.member-wrap {
-				.member-det {
-					font-size: 24upx;
-					margin-left: 20upx;
-				}
-			}
-			.remark-wrap {
-				align-items: flex-start;
-				.remark {
-					height: 240upx;
-				}
-			}
-		}
-	}
-	.under-bar {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 0 20upx;
-		width: 100%;
-		height: 100upx;
-		background-color: #fff;
-
-		box-shadow: 0upx -1px 6upx 0upx rgba(4, 0, 0, 0.06);
-		.price-view {
-			display: flex;
-			align-items: center;
-			font-size: 24upx;
-			.price-title {
-				color: #333;
-			}
-			.price-number {
-				margin: 0 20upx;
-				color: #ff2842;
-				.large {
-					font-size: 40upx;
-				}
-			}
-		}
-		.admin-button-com {
-			width: 200upx;
-		}
-	}
-  .coupon_box{
-    flex: 1;
-    text-align: right;
-    padding-right: 45upx;
-	.has-hb{
-		background:red;
-		color:white;
-		border:1upx solid red;
-		border-radius: 30upx;
-		font-size:20upx;
-		padding:5upx 15upx 5upx 15upx;
-	}
-	.selected{
-		color:red;
-		float:left;
-	}
-  }
-}
-</style>
-
 <template>
 	<view class="affirm-page">
 		<view class="affirm-view overscroll">
-			<!-- 门店信息 -->
 			<form>
 				<view class="module-com">
 					<view class="flex-space ghs-msg">
@@ -222,31 +44,17 @@
 						</view>
 					</view>
 				</view>
-				<!-- 登录信息 -->
-				<view class="module-com input-line-wrap">
 
-					<!--
-					<tui-list-cell class="line-cell" :hover="false" :arrow="false">
-						<view class="tui-title ">送货</view>
-						<button @click="form.sendType=1" class="admin-button-com mini-btn" :class="form.sendType==1?'blue':'default'">配送</button>
-						<button @tap="form.sendType=2" class="admin-button-com mini-btn" :class="form.sendType==2?'blue':'default'">自取</button>
-					</tui-list-cell> 
-					-->
+				<view class="module-com input-line-wrap">
 
 					<tui-list-cell class="line-cell" :hover="false" :arrow="true">
 						<view class="tui-title ">配送时间</view>
-						
 						<picker mode="date" :value="sendTimeWant" @change="bindDateChange" style="width:400upx;">
                         <view class="uni-input">{{sendTimeWant || '今天'}}</view>
                     	</picker>
 
 					</tui-list-cell>
 
-					<tui-list-cell class="line-cell" :hover="false" :arrow="false" v-show="form.sendType == 1">
-						<view class="tui-title ">运费</view>
-						<input type="number" placeholder="" @input="countAllPrices" v-model="form.sendCost" placeholder-class="tui-placeholder" disabled>
-					</tui-list-cell>
-
           			<tui-list-cell v-if="hasHb == 1" class="line-cell" :hover="false" :arrow="true" @click="goSelectCoupon">
 						<view class="tui-title ">红包</view>
 						<view class="coupon_box"><text class="selected" v-if="selectedHb.hbId && selectedHb.hbId>0">-{{selectedHb.couponAmount}}</text><text class="has-hb" v-else>有红包</text></view>
@@ -566,4 +374,180 @@ export default {
 		}
 	}
 };
-</script>
+</script>
+<style lang="scss" scoped>
+.admin-button-com {
+	margin-right: 20upx;
+}
+.affirm-page {
+	position: relative;
+	height: 100%;
+	display: flex;
+	flex-direction: column;
+	.affirm-view {
+		flex: 1;
+		padding: 20upx;
+		background-color: #f0f2f6;
+		.commodity-view {
+			display: flex;
+			flex-direction: column;
+			.commodity-list {
+				padding: 20upx;
+				.commodity-item {
+					display: flex;
+					margin-bottom: 20upx;
+					.item-icon {
+						flex-shrink: 0;
+						width: 140upx;
+						height: 140upx;
+					}
+					.item-info {
+						display: flex;
+						flex-direction: column;
+						justify-content: center;
+						flex: 1;
+						margin-left: 20upx;
+						.info-line {
+							margin-bottom: 20upx;
+							display: flex;
+							justify-content: space-between;
+							align-items: flex-end;
+							.item-name {
+								color: #666;
+								font-size: 28upx;
+								overflow: hidden;
+								white-space: nowrap;
+								text-overflow: ellipsis;
+								width:400upx;
+							}
+							.item-price {
+								color: #333;
+								font-size: 22upx;
+								.price {
+									font-size: 32upx;
+									font-weight: bold;
+								}
+							}
+							.item-type {
+								color: #999;
+								font-size: 24upx;
+							}
+							.item-count {
+								color: #666;
+								font-size: 24upx;
+							}
+						}
+					}
+				}
+			}
+			.summary-bar {
+				padding: 0 20upx;
+				height: 90upx;
+				display: flex;
+
+				align-items: center;
+				justify-content: space-between;
+				border-top: 1px solid #eeeeee;
+				.operate-view {
+					display: flex;
+
+					align-items: center;
+					color: #3385ff;
+					font-size: 26upx;
+					.iconfont {
+						margin-right: 20upx;
+						font-size: 40upx;
+					}
+				}
+				.describe-view {
+					display: flex;
+
+					align-items: center;
+					color: #333;
+					font-size: 24upx;
+					.price {
+						font-weight: bold;
+						font-size: 36upx;
+					}
+				}
+			}
+		}
+
+		.module-com {
+			background-color: #fff;
+			margin-bottom: 20upx;
+			border-radius: 10upx;
+			overflow: hidden;
+      		padding-top: 20upx;
+			.ghs-msg{
+				padding: 0 20upx 20upx;
+				font-size: 32upx;
+				&.active{
+					color: #868686;
+					font-size: 24upx;
+				}
+				i{color: #62ed73;font-size: 48upx}
+			}
+
+			.member-wrap {
+				.member-det {
+					font-size: 24upx;
+					margin-left: 20upx;
+				}
+			}
+			.remark-wrap {
+				align-items: flex-start;
+				.remark {
+					height: 240upx;
+				}
+			}
+		}
+	}
+	.under-bar {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20upx;
+		width: 100%;
+		height: 100upx;
+		background-color: #fff;
+
+		box-shadow: 0upx -1px 6upx 0upx rgba(4, 0, 0, 0.06);
+		.price-view {
+			display: flex;
+			align-items: center;
+			font-size: 24upx;
+			.price-title {
+				color: #333;
+			}
+			.price-number {
+				margin: 0 20upx;
+				color: #ff2842;
+				.large {
+					font-size: 40upx;
+				}
+			}
+		}
+		.admin-button-com {
+			width: 200upx;
+		}
+	}
+  .coupon_box{
+    flex: 1;
+    text-align: right;
+    padding-right: 45upx;
+	.has-hb{
+		background:red;
+		color:white;
+		border:1upx solid red;
+		border-radius: 30upx;
+		font-size:20upx;
+		padding:5upx 15upx 5upx 15upx;
+	}
+	.selected{
+		color:red;
+		float:left;
+	}
+  }
+}
+</style>

+ 262 - 239
hdApp/src/admin/billing/affirmGhsBook.vue

@@ -1,184 +1,6 @@
-<style lang="scss" scoped>
-.admin-button-com {
-	margin-right: 20upx;
-}
-.affirm-page {
-	position: relative;
-	height: 100%;
-	display: flex;
-	flex-direction: column;
-	.affirm-view {
-		flex: 1;
-		padding: 20upx;
-		background-color: #f0f2f6;
-		.commodity-view {
-			display: flex;
-			flex-direction: column;
-			.commodity-list {
-				padding: 20upx;
-				.commodity-item {
-					display: flex;
-					margin-bottom: 20upx;
-					.item-icon {
-						flex-shrink: 0;
-						width: 140upx;
-						height: 140upx;
-					}
-					.item-info {
-						display: flex;
-						flex-direction: column;
-						justify-content: center;
-						flex: 1;
-						margin-left: 20upx;
-						.info-line {
-							margin-bottom: 20upx;
-							display: flex;
-							justify-content: space-between;
-							align-items: flex-end;
-							.item-name {
-								color: #666;
-								font-size: 28upx;
-								overflow: hidden;
-								white-space: nowrap;
-								text-overflow: ellipsis;
-								width:400upx;
-							}
-							.item-price {
-								color: #333;
-								font-size: 22upx;
-								.price {
-									font-size: 32upx;
-									font-weight: bold;
-								}
-							}
-							.item-type {
-								color: #999;
-								font-size: 24upx;
-							}
-							.item-count {
-								color: #666;
-								font-size: 24upx;
-							}
-						}
-					}
-				}
-			}
-			.summary-bar {
-				padding: 0 20upx;
-				height: 90upx;
-				display: flex;
-
-				align-items: center;
-				justify-content: space-between;
-				border-top: 1px solid #eeeeee;
-				.operate-view {
-					display: flex;
-
-					align-items: center;
-					color: #3385ff;
-					font-size: 26upx;
-					.iconfont {
-						margin-right: 20upx;
-						font-size: 40upx;
-					}
-				}
-				.describe-view {
-					display: flex;
-
-					align-items: center;
-					color: #333;
-					font-size: 24upx;
-					.price {
-						font-weight: bold;
-						font-size: 36upx;
-					}
-				}
-			}
-		}
-
-		.module-com {
-			background-color: #fff;
-			margin-bottom: 20upx;
-			border-radius: 10upx;
-			overflow: hidden;
-      		padding-top: 20upx;
-			.ghs-msg{
-				padding: 0 20upx 20upx;
-				font-size: 32upx;
-				&.active{
-					color: #868686;
-					font-size: 24upx;
-				}
-				i{color: #62ed73;font-size: 48upx}
-			}
-
-			.member-wrap {
-				.member-det {
-					font-size: 24upx;
-					margin-left: 20upx;
-				}
-			}
-			.remark-wrap {
-				align-items: flex-start;
-				.remark {
-					height: 240upx;
-				}
-			}
-		}
-	}
-	.under-bar {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 0 20upx;
-		width: 100%;
-		height: 100upx;
-		background-color: #fff;
-
-		box-shadow: 0upx -1px 6upx 0upx rgba(4, 0, 0, 0.06);
-		.price-view {
-			display: flex;
-			align-items: center;
-			font-size: 24upx;
-			.price-title {
-				color: #333;
-			}
-			.price-number {
-				margin: 0 20upx;
-				color: #ff2842;
-				.large {
-					font-size: 40upx;
-				}
-			}
-		}
-		.admin-button-com {
-			width: 200upx;
-		}
-	}
-  .coupon_box{
-    flex: 1;
-    text-align: right;
-    padding-right: 45upx;
-	.has-hb{
-		background:red;
-		color:white;
-		border:1upx solid red;
-		border-radius: 30upx;
-		font-size:20upx;
-		padding:5upx 15upx 5upx 15upx;
-	}
-	.selected{
-		color:red;
-		float:left;
-	}
-  }
-}
-</style>
-
 <template>
 	<view class="affirm-page">
 		<view class="affirm-view overscroll">
-			<!-- 门店信息 -->
 			<form>
 				<view class="module-com">
 					<view class="flex-space ghs-msg">
@@ -215,50 +37,51 @@
 						</view>
 						<view class="summary-bar">
 							<view class="operate-view" @click="gobackEvent">
-								<text class="iconfont icongouwuche"></text>
-								修改花材
+								<text class="iconfont icongouwuche"></text>修改花材
 							</view>
 							<view class="describe-view">共{{ allCountFun.bigLength }}扎,合计 ¥<text class="price">{{ allPriceFun }}</text></view>
 						</view>
 					</view>
 				</view>
-				<!-- 登录信息 -->
-				<view class="module-com input-line-wrap">
 
-					<!--
-					<tui-list-cell class="line-cell" :hover="false" :arrow="false">
-						<view class="tui-title ">送货</view>
-						<button @click="form.sendType=1" class="admin-button-com mini-btn" :class="form.sendType==1?'blue':'default'">配送</button>
-						<button @tap="form.sendType=2" class="admin-button-com mini-btn" :class="form.sendType==2?'blue':'default'">自取</button>
-					</tui-list-cell> 
-					-->
+				<view class="module-com input-line-wrap">
 
 					<tui-list-cell class="line-cell" :hover="false" :arrow="true">
 						<view class="tui-title ">配送时间</view>
-						
 						<picker mode="date" :value="sendTimeWant" @change="bindDateChange" style="width:400upx;">
-                        <view class="uni-input">{{sendTimeWant || '今天'}}</view>
+							<view class="uni-input" v-if="sendTimeWant==''" style="color:#CCCCCC;">请选择日期</view>
+							<view class="uni-input">{{sendTimeWant}}</view>
                     	</picker>
+					</tui-list-cell>
 
+					<tui-list-cell class="line-cell" :hover="false" :arrow="false" >
+						<view class="tui-title">花材(预付)</view>
+						<text style="color: #3385FF">¥{{ parseFloat(productPrice) }}</text>
 					</tui-list-cell>
 
-					<tui-list-cell class="line-cell" :hover="false" :arrow="false" v-show="form.sendType == 1">
-						<view class="tui-title ">运费</view>
-						<input type="number" placeholder="" @input="countAllPrices" v-model="form.sendCost" placeholder-class="tui-placeholder" disabled>
+					<tui-list-cell class="line-cell" :hover="false" :arrow="false" >
+						<view class="tui-title">重量(公斤)</view>
+						<text style="color: #3385FF">
+							{{ currentWeight }}
+							<text v-if="currentWeight < miniKilo" style="margin-left:15upx;color:#CCCCCC;font-size:24upx;">不足{{miniKilo}}KG按{{miniKilo}}KG算</text>
+						</text>
 					</tui-list-cell>
 
-          			<tui-list-cell v-if="hasHb == 1" class="line-cell" :hover="false" :arrow="true" @click="goSelectCoupon">
-						<view class="tui-title ">红包</view>
-						<view class="coupon_box"><text class="selected" v-if="selectedHb.hbId && selectedHb.hbId>0">-{{selectedHb.couponAmount}}</text><text class="has-hb" v-else>有红包</text></view>
+					<tui-list-cell class="line-cell" :hover="false" :arrow="false" >
+						<view class="tui-title">服务费</view>
+						<text style="color: #3385FF">
+							¥{{ totalFee }}
+							<text style="margin-left:15upx;color:#CCCCCC;font-size:24upx;">{{parseFloat(kiloFee)}}元/公斤</text>
+						</text>
 					</tui-list-cell>
 
 					<tui-list-cell class="line-cell" :hover="false" :arrow="false" >
-						<view class="tui-title">总金额</view>
-						<text style="color: #3385FF">{{ modifyPrice }}</text>
+						<view class="tui-title">合计</view>
+						<text style="color: #3385FF">¥{{ modifyPrice }}</text>
 					</tui-list-cell>
 
 					<tui-list-cell class="line-cell" :hover="false" :arrow="false">
-						<textarea style="height: 100upx" v-model="remark" placeholder="这里写备注"/>
+						<textarea style="height: 100upx" v-model="remark" placeholder="这里写备注..."/>
 					</tui-list-cell>
 
 				</view>
@@ -292,9 +115,8 @@ import { getGhsDataApi } from "@/api/ghs/index";
 import { freight,createOrder } from "@/api/purchase/index";
 import { mapActions, mapGetters } from "vuex";
 import { shopHouponHas } from '@/api/coupon'
-
 export default {
-	name: "BillingAffirm", // 开单确认
+	name: "affirmGhsBook",
 	components: {
 		TuiListCell,
 		AppAvatarModule,
@@ -318,7 +140,7 @@ export default {
 			sendTimeWant:'',
 			remark:'',
 			form: {
-				debt:1,//结算方式 1欠款订单 0正常订单
+				debt:1,
 				shopId: "",
 				shopName: "",
 				receiveProvince: "",
@@ -341,55 +163,77 @@ export default {
 			monthLater:'',
 			modifyPrice:0,
 			hasHb:0,
-			selectedHb:{couponAmount:0,hbId:0,couponSelInx:0}
+			selectedHb:{couponAmount:0,hbId:0,couponSelInx:0},
+			currentWeight:0,
+			//预订单最低公斤数
+			miniKilo:0,
+			//用于计算的重量
+			calcWeight:0,
+			//每公斤服务费
+			kiloFee:0,
+			//总服务费
+			totalFee:0,
+			productPrice:0
 		};
 	},
 	onLoad(e) {
 		this.getGhsData(e.id);
 	},
 	onShow() {
+
+		this.miniKilo = this.option.miniKilo || 0
+		this.kiloFee = this.option.kiloFee || 0
+
 		let selectList = this.$util.copyObject(this.selectList);
 		let list = [];
-		for (let i=0;i<selectList.length;i++){
-			if(list==''){
-				list.push(selectList[i])
-			}else{
-				let has = false
-				list.map(res=>{
-					if(res.id == selectList[i].id){
-						res.bigCount = (res.bigCount+selectList[i].bigCount)
-						res.smallCount = (res.smallCount+selectList[i].smallCount)
-						has = true
-					}
-				})
-				if(has == false){
+		if (!this.$util.isEmpty(selectList)){
+			for (let i=0;i<selectList.length;i++){
+				if(list==''){
 					list.push(selectList[i])
+				}else{
+					let has = false
+					list.map(res=>{
+						if(res.id == selectList[i].id){
+							res.bigCount = (res.bigCount+selectList[i].bigCount)
+							res.smallCount = (res.smallCount+selectList[i].smallCount)
+							has = true
+						}
+					})
+					if(has == false){
+						list.push(selectList[i])
+					}
 				}
 			}
+
+			
+			//计算重量
+			this.currentWeight = 0
+			for (let i=0;i<list.length;i++){
+				let small = Number(list[i].smallCount) / Number(list[i].ratio)
+				small = small.toFixed(2)
+				let count = Number(small) + Number(list[i].bigCount)
+				count = count.toFixed(2)
+				let thisWeight = Number(list[i].weight)*Number(count)
+				thisWeight = thisWeight.toFixed(2)
+				this.currentWeight = Number(this.currentWeight) + Number(thisWeight)
+				this.currentWeight = parseFloat(this.currentWeight.toFixed(2))
+			}
+			this.calcWeight = Number(this.currentWeight) > Number(this.miniKilo) ? Number(this.currentWeight) : Number(this.miniKilo)
+			this.totalFee = Number(this.calcWeight) * Number(this.kiloFee)
+			this.totalFee = parseFloat(this.totalFee.toFixed(2))
 		}
 		this.list = list;
-		if(this.selectedHb.hbId && this.selectedHb.hbId > 0) {
-			this.form.hbId = this.selectedHb.hbId
-			this.calcPrice()
-		}else{
-			this.form.hbId = 0
-			this.hasCoupon()
-			this.calcPrice()
-		}
+
+		this.productPrice = this.allPrice.toFixed(2)
+		this.modifyPrice = Number(this.productPrice) + Number(this.totalFee)
+		this.modifyPrice = parseFloat(this.modifyPrice.toFixed(2))
+
 	},
 	computed: {
 		...mapGetters(["getMerchantInfo", "getLoginInfo"])
 	},
 	methods: {
 		...mapActions(["initMerchantInfo"]),
-		calcPrice(){
-			let allPrice = this.allPrice.toFixed(2)
-			this.modifyPrice = Number(allPrice)
-			if(this.selectedHb.hbId && this.selectedHb.hbId > 0) {
-				this.modifyPrice = (this.modifyPrice - Number(this.selectedHb.couponAmount)).toFixed(2)
-			}
-			this.modifyPrice = parseFloat(this.modifyPrice)
-		},
 		init() {
 			this._getDet()
 		},
@@ -417,9 +261,6 @@ export default {
 		getGhsData(id) {
 			getGhsDataApi({id:id}).then(res => {
 				this.ghsInfo = res.data;
-				//注释计算运费
-				//this.purchaseFreight(this.ghsInfo);
-				this.calcPrice()
 			});
 		},
 		countAllPrices(e){
@@ -472,6 +313,10 @@ export default {
 			const product = this.list.map(ele => {
 				return { productId: ele.id, bigNum: ele.bigCount, smallNum: ele.smallCount,classId:ele.classId,itemId:ele.itemId };
 			});
+			if(this.sendTimeWant==''){
+				this.$msg('请选择配送时间')
+				return false
+			}
 			let xj = uni.getStorageSync("ghsXj"+this.ghsInfo.id)
 			let params = {
 				getType:this.form.sendType,
@@ -481,7 +326,9 @@ export default {
 				product:JSON.stringify(product),
 				ghsId:this.ghsInfo.id,
 				hbId: this.form.hbId,
-				xj:JSON.stringify(xj)
+				xj:JSON.stringify(xj),
+				//预订单
+				book:1
 			}
 			let self = this;
 			uni.showModal({
@@ -562,8 +409,184 @@ export default {
 			}
 		},
 		gobackEvent() {
-			this.$util.pageTo({url: "/pagesPurchase/ghsProduct",query: {id:this.options.id},type: 2})
+			this.$util.pageTo({url: "/pagesPurchase/bookProduct",query: {id:this.options.id},type: 2})
 		}
 	}
 };
-</script>
+</script>
+<style lang="scss" scoped>
+.admin-button-com {
+	margin-right: 20upx;
+}
+.affirm-page {
+	position: relative;
+	height: 100%;
+	display: flex;
+	flex-direction: column;
+	.affirm-view {
+		flex: 1;
+		padding: 20upx;
+		background-color: #f0f2f6;
+		.commodity-view {
+			display: flex;
+			flex-direction: column;
+			.commodity-list {
+				padding: 20upx;
+				.commodity-item {
+					display: flex;
+					margin-bottom: 20upx;
+					.item-icon {
+						flex-shrink: 0;
+						width: 140upx;
+						height: 140upx;
+					}
+					.item-info {
+						display: flex;
+						flex-direction: column;
+						justify-content: center;
+						flex: 1;
+						margin-left: 20upx;
+						.info-line {
+							margin-bottom: 20upx;
+							display: flex;
+							justify-content: space-between;
+							align-items: flex-end;
+							.item-name {
+								color: #666;
+								font-size: 28upx;
+								overflow: hidden;
+								white-space: nowrap;
+								text-overflow: ellipsis;
+								width:400upx;
+							}
+							.item-price {
+								color: #333;
+								font-size: 22upx;
+								.price {
+									font-size: 32upx;
+									font-weight: bold;
+								}
+							}
+							.item-type {
+								color: #999;
+								font-size: 24upx;
+							}
+							.item-count {
+								color: #666;
+								font-size: 24upx;
+							}
+						}
+					}
+				}
+			}
+			.summary-bar {
+				padding: 0 20upx;
+				height: 90upx;
+				display: flex;
+
+				align-items: center;
+				justify-content: space-between;
+				border-top: 1px solid #eeeeee;
+				.operate-view {
+					display: flex;
+
+					align-items: center;
+					color: #3385ff;
+					font-size: 26upx;
+					.iconfont {
+						margin-right: 20upx;
+						font-size: 40upx;
+					}
+				}
+				.describe-view {
+					display: flex;
+
+					align-items: center;
+					color: #333;
+					font-size: 24upx;
+					.price {
+						font-weight: bold;
+						font-size: 36upx;
+					}
+				}
+			}
+		}
+
+		.module-com {
+			background-color: #fff;
+			margin-bottom: 20upx;
+			border-radius: 10upx;
+			overflow: hidden;
+      		padding-top: 20upx;
+			.ghs-msg{
+				padding: 0 20upx 20upx;
+				font-size: 32upx;
+				&.active{
+					color: #868686;
+					font-size: 24upx;
+				}
+				i{color: #62ed73;font-size: 48upx}
+			}
+
+			.member-wrap {
+				.member-det {
+					font-size: 24upx;
+					margin-left: 20upx;
+				}
+			}
+			.remark-wrap {
+				align-items: flex-start;
+				.remark {
+					height: 240upx;
+				}
+			}
+		}
+	}
+	.under-bar {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 0 20upx;
+		width: 100%;
+		height: 100upx;
+		background-color: #fff;
+
+		box-shadow: 0upx -1px 6upx 0upx rgba(4, 0, 0, 0.06);
+		.price-view {
+			display: flex;
+			align-items: center;
+			font-size: 24upx;
+			.price-title {
+				color: #333;
+			}
+			.price-number {
+				margin: 0 20upx;
+				color: #ff2842;
+				.large {
+					font-size: 40upx;
+				}
+			}
+		}
+		.admin-button-com {
+			width: 200upx;
+		}
+	}
+  .coupon_box{
+    flex: 1;
+    text-align: right;
+    padding-right: 45upx;
+	.has-hb{
+		background:red;
+		color:white;
+		border:1upx solid red;
+		border-radius: 30upx;
+		font-size:20upx;
+		padding:5upx 15upx 5upx 15upx;
+	}
+	.selected{
+		color:red;
+		float:left;
+	}
+  }
+}
+</style>

+ 208 - 0
hdApp/src/admin/changePrice/components/Item.vue

@@ -0,0 +1,208 @@
+<template>
+<view class="product">
+	<view class="item-cmd_bx">
+		<view class="img_bx">
+			<view v-if="info.status == 2" class="sold-out">
+				<view class="sold-out-xj">已下架</view>
+			</view>
+			<image :src="info.cover" style="width:160upx;height:160upx;"></image>
+		</view>
+		<view class="cmd-info_bx" @click="pageTo({url: '/admin/item/detail',query: {id: info.id}})">
+			<view class="tit">{{ info.itemName || "" }}</view>
+			<view class="kc">¥{{ parseFloat(info.price) }}</view>
+			<view class="num-open_bx">
+				<view>
+					<view class="open-bx" >
+						还剩 <text style="margin-left:8upx;color:#333333;">{{ parseFloat(info.stock) }}</text>
+						<view class="price-area">
+						<input class="change-input" @click.stop @blur="savePrice"
+						@focus="modifyPrice = ''" placeholder-style="color:#CCCCCC" v-model="modifyPrice" type="digit" placeholder="填价格" />
+						<view v-if="Number(modifyPrice)>0" class="change-text">成本{{parseFloat((Number(modifyPrice)-Number(info.addPrice)).toFixed(2))}} 加价{{parseFloat(info.addPrice)}}</view>
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+	<view class="level-price">
+		散客 ¥<text style="margin-right:35upx;">{{skPrice}}</text>
+		普店 ¥<text style="margin-right:35upx;">{{pdPrice}}</text>
+		银店 ¥<text style="margin-right:35upx;">{{ydPrice}}</text>
+		金店 ¥<text style="margin-right:8upx;">{{jdPrice}}</text>
+	</view>
+</view>
+</template>
+<script>
+export default {
+	name: "Commodity",
+	components: {
+	},
+	props: {
+		isPrice: {
+			type: Boolean,
+			default: true
+		},
+		isEdit: {
+			type: Boolean,
+			default: true
+		},
+		info: {
+			required: true
+		}
+	},
+	data() {
+		return {
+			modifyPrice:'',
+			skPrice:0,
+			pdPrice:0,
+			ydPrice:0,
+			jdPrice:0
+		};
+	},
+	watch: {
+		modifyPrice: {
+			handler(newValue) {
+				this.changeLevelPrice(newValue)			
+			}
+		}
+	},
+	mounted(){
+		this.skPrice = parseFloat(this.info.skPrice)
+		this.pdPrice = parseFloat(this.info.price)
+		this.ydPrice = parseFloat(this.info.hjPrice)
+		this.jdPrice = parseFloat(this.info.zsPrice)
+	},
+	methods: {
+		savePrice() {
+			this.$emit("savePrice",this.modifyPrice,this.info.id);
+		},
+		changeLevelPrice(pdPrice){
+			if(Number(pdPrice) <= 0 ||this.$util.isEmpty(pdPrice)){
+				pdPrice = this.info.price
+			}
+			this.pdPrice = parseFloat(pdPrice)
+			let skSub = (this.info.addPrice - this.info.skAddPrice).toFixed(2)
+			let ydSub = (this.info.addPrice - this.info.hjAddPrice).toFixed(2)
+			let jdSub = (this.info.addPrice - this.info.zsAddPrice).toFixed(2)
+			this.skPrice = parseFloat((pdPrice - skSub).toFixed(2))
+			this.ydPrice = parseFloat((pdPrice - ydSub).toFixed(2))
+			this.jdPrice = parseFloat((pdPrice - jdSub).toFixed(2))
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.product{
+	height:230upx;
+	.level-price{
+		color:#999999;
+		text-align: right;
+		font-size:22upx;
+	}
+}
+.item-cmd_bx {
+	height:160upx;
+	position: relative;
+	margin-bottom: 20upx;
+	.img_bx {
+		height: 160upx;
+		width: 160upx;
+		position: absolute;
+		left: 0upx;
+		top: 0upx;
+		.sold-out{
+			width:160upx;
+			height:160upx;
+			background-color:black;
+			position:absolute;
+			top:0;
+			left:0;
+			opacity: 0.6;
+			color:white;
+			text-align:center;
+			.sold-out-xj{
+				line-height:160upx;
+				font-size:28upx;
+			}
+		}
+	}
+	.cmd-info_bx {
+		position: relative;
+		padding-left: 177upx;
+		&.active{
+			&:before{
+				content: ' ';
+				height: 22upx;
+				width: 22upx;
+				border-width: 2upx 2upx 0 0;
+				border-color: #b2b2b2;
+				border-style: solid;
+				-webkit-transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+				transform: matrix(0.5, 0.5, -0.5, 0.5, 0, 0);
+				position: absolute;
+				top: 50%;
+				margin-top: -12upx;
+				right: 30upx;
+			}
+		}
+
+		& .tit {
+			font-size: 30upx;
+			font-weight: bold;
+			color: #333333;
+			padding-top: 0upx;
+			overflow: hidden;
+			white-space: nowrap;
+			text-overflow: ellipsis;
+			width:360upx;
+		}
+		& .kc {
+			color:red;
+			font-size: 32upx;
+			padding: 17upx 0 24upx;
+			font-weight: 700;
+		}
+		& .num-open_bx {
+			display: flex;
+			align-items: center;
+			& .price {
+				font-size: 30upx;
+				color: red;
+				flex: 1;
+			}
+			& .open-bx {
+				color:#999999;
+				width:300upx;
+				text{
+					font-size: 24upx;
+				}
+				*.warn {
+					color: $redColor;
+				}
+				.price-area{
+					width:190upx;
+					position: absolute;
+					top:50upx;
+					right:0upx;
+					.change-input {
+						width: 150upx;
+						height: 60upx;
+						line-height: 60upx;
+						text-align: center;
+						background: #ffffff;
+						border: 1upx solid #b4b4b4;
+						border-radius: 4upx;
+						font-size: 25upx;
+						color:#777777;
+						display:inline-block;
+					}
+					.change-text{
+						font-size:22upx;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 329 - 0
hdApp/src/admin/changePrice/list.vue

@@ -0,0 +1,329 @@
+<template>
+<view class="app-content" style="background:white;">
+	<view class="billing_box_bg">
+    <view class="input-wrap">
+			<view class="search-bar">
+				<app-search-module v-model="py" placeholder="输入英文字母搜索" @input="searchFn"/>
+			</view>
+			<view style="padding:0 0upx 0 20upx;" >
+				<button class="admin-button-com middle blue" @click="downloadTable()">价格表</button>
+			</view>
+		</view>
+
+		<view class="scroll-middle_bx">
+			<scroll-view scroll-y scroll-with-animation class="tab-view" :scroll-top="scrollTop">
+				<div v-for="(item, index) in globalClassItemList" :key="index" class="tab-bar-item" :class="[classIndex == index ? 'active' : '']" :data-current="index" @tap.stop="swichClass(index)">
+					<text>{{ item.className || "" }}</text>
+				</div>
+			</scroll-view>
+				<scroll-view scroll-y class="right-box" 
+					:scroll-into-view="scroll_into_view" 
+					scroll-with-animation="true"
+					@scroll="scroll_detail"
+					lower-threshold="100"
+					@scrolltolower="scroll_bottom">
+				<!--内容部分 start -->
+				<block v-if="!$util.isEmpty(globalClassItemList)">
+					<view class="item_list_bx selectAll" v-for="(classItem, classIndex) in globalClassItemList" :key="classIndex" :id="`class_${classIndex}`">
+						<view class="item_list_title"> {{ classItem.className }}</view>
+
+						<view v-if="classItem.child && !$util.isEmpty(classItem.child)">
+
+							<template v-for="(productItem, productIndex) in classItem.child">
+								<view style="height:230upx" :id="`class_${classIndex}`" :key="productIndex">
+									<ItemComponent v-if="classItem.isActive" :isPrice="false" :info="productItem" @savePrice="savePrice" ></ItemComponent>
+								</view>
+							</template>
+
+						</view>
+						<view v-else>
+							<view style="height:260upx;text-align:center;color:#CCCCCC;position: relative;">
+								<view style="position: absolute;margin:auto;top:130upx;left:0;right:0;bottom:0;">暂无花材</view>
+							</view>
+						</view>
+
+					</view>
+				</block>
+				<block v-else>
+					<view style="width: 100%">
+						<app-wrapper-empty  title="暂无数据" :is-empty="$util.isEmpty(globalClassItemList)"/>
+					</view>
+				</block>
+				<!--内容部分 end -->
+
+			</scroll-view>
+		</view>
+
+      <div class="app-footer">
+        <button class="admin-button-com big blue" @click="commitPrice">保存修改</button>
+      </div>
+
+	</view>
+</view>
+</template>
+<script>
+import AppSearchModule from "@/components/module/app-search";
+import AppWrapperEmpty from "@/components/app-wrapper-empty";
+import ItemComponent from "./components/Item";
+import productMins from "@/mixins/product";
+import { mapGetters } from "vuex";
+import { batchChangePrice,generatePriceTable } from '@/api/product/index'
+export default {
+	name: "item_list",
+	components: {
+		AppSearchModule,
+		AppWrapperEmpty,
+		ItemComponent
+	},
+	mixins: [productMins],
+	data() {
+		return {
+			autoLoad: false, //不自动请求数据  自定义请求
+			selectJobType: "stock",
+			tabIndex: 0,
+			priceArr:[]
+		};
+	},
+	computed:{
+		...mapGetters(["getMyShopInfo","getLoginInfo"]),
+	},
+	onLoad() {
+		this.initProduct()
+	},
+	methods: {
+		downloadTable(){
+			let level = 0
+			let levelList = ['散客价', '普店价', '银店价','金店价']
+			uni.showActionSheet({
+				itemList: levelList,
+				success: function (respond) {
+					level = respond.tapIndex
+					uni.showLoading({title:'下载中',mask:true})
+					generatePriceTable({level:level}).then(res => {
+						if(res.code == 1){
+							uni.hideLoading()
+							let file = res.data.file
+							let shortFile = res.data.shortFile
+							uni.downloadFile({
+								url: file,
+								header: {"Content-Type": 'application/vnd.ms-excel'},
+								filePath: `${wx.env.USER_DATA_PATH}/${shortFile}`,
+								success: (res) => {
+									if (res.statusCode === 200) {
+										wx.saveFileToDisk({
+											filePath: res.filePath,
+											success: function(res) {
+												console.log(res)
+											},
+											fail:function(res) {
+												console.log(res)
+											}
+										})
+									}
+								},
+								fail:()=>{
+									uni.showToast({title:'请用电脑打开小程序下载',mask:true,icon:'none'})
+								}
+							});
+						}					
+					})
+				}
+			})
+		},
+		initProduct(){
+			this.shopId = this.getMyShopInfo.id;
+			let type = '';
+			this.initData({ type, shopId: this.shopId,status:0});
+		},
+		commitPrice(){
+			if(this.priceArr.length == 0){
+				uni.showToast({title:"没有修改",icon:"none"})
+				return;
+			}
+			let data = JSON.stringify(this.priceArr);
+			batchChangePrice({data}).then(res => {
+					if(res.code == 1){
+						this.priceArr = [];
+						this.initProduct()
+					}
+					this.$msg(res.msg)					
+				})
+		},
+		savePrice(price,id){
+			console.log('price',price,id)
+
+			if(this.priceArr.length > 0){
+				this.priceArr.forEach(function(value,index,array){
+					if(value.id == id){
+						array.splice(index,1)
+					}
+				});
+			}
+			this.priceArr.push({id:id,price:price});
+			console.log(this.priceArr,'price')
+		},
+		affirm(val) {
+			if (val.index === 0) {
+				this.modalCancel();
+			}
+		},
+		change(e) {
+			if (this.tabIndex == e.index) {
+				return false;
+			} else {
+				uni.showLoading({
+					title: "加载中"
+				});
+				this.tabIndex = e.index;
+				let type = "";
+				this.initData({ type, shopId: this.shopId });
+			}
+		},
+		scrollTop() {},
+		initProductInfo() {
+			this.globalClassItemListContrapose = [];
+			this.page = 1;
+			this.isMore = true;
+		},
+		selectSussess(val) {
+			uni.showLoading({ title: "加载中" })
+			this.initProductInfo();
+			let type = "";
+			this.shopId = val.selectItem.id;
+			this.initData({ type, shopId: this.shopId })
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped>
+.billing_box_bg {
+	height: 100%;
+	background: white;
+	display: flex;
+	background:white;
+	flex-direction: column;
+	.input-wrap {
+		display: flex;
+		padding: 22upx 20upx 22upx 30upx;
+		.search-bar {
+			flex: 1;
+		}
+		.city-select {
+			display: flex;
+			flex-shrink: 0;
+			align-items: center;
+			margin-right: 15upx;
+			margin-left: 45upx;
+			background-color: #ffff;
+			.iconfont {
+				margin-left: 20upx;
+				font-size: 30upx;
+			}
+		}
+	}
+	.scroll-middle_bx {
+		flex: 1;
+		display: flex;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+	}
+	.tab-view {
+		height: calc(100vh - 140upx);
+		width: 170upx;
+		flex-shrink: 0;
+		background-color: #f0f2f6;
+		.tab-bar-item {
+			position: relative;
+			width: 170upx;
+			height: 90upx;
+			box-sizing: border-box;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			font-size: 26upx;
+			color: #444;
+			font-weight: 400;
+			.tag {
+				display: flex;
+				padding: 0 20upx;
+				align-items: center;
+				position: absolute;
+				right: 0;
+				top: 0;
+				height: 32upx;
+				background: #ff2842;
+				border-radius: 16upx;
+				color: #fff;
+				font-size: 20upx;
+			}
+      &:last-child{
+        margin-bottom: 110upx;
+      }
+		}
+
+		.active {
+			position: relative;
+			color: $mainColor;
+			font-size: 26upx;
+			background: #fff;
+		}
+
+		.active::before {
+			content: "";
+			position: absolute;
+			border-left: 8upx solid $mainColor;
+			height: 100%;
+			left: 0;
+		}
+	}
+	.right-box {
+		height: calc(100vh - 170upx);
+		flex: 1;
+		box-sizing: border-box;
+	}
+	.item_list_bx {
+		padding: 40upx 16upx;
+	}
+	.item_list_title {
+		margin-bottom: 20upx;
+		font-size: 24upx;
+		font-weight: 600;
+		color: #666666;
+	}
+	.select-cmd_bx {
+		& .kc {
+			color: #999999;
+			font-size: 28upx;
+			font-weight: 400;
+			margin-bottom: 60upx;
+			text-align: center;
+			margin-top: 10upx;
+		}
+		& .num_bx {
+			display: flex;
+			align-items: center;
+			margin-bottom: 80upx;
+			& > input {
+				width: 212upx;
+				height: 80upx;
+				border: 1upx solid #dddddd;
+				border-radius: 4upx;
+				text-align: center;
+				margin-right: 24upx;
+			}
+		}
+	}
+	.app-footer {
+		justify-content: space-evenly;
+		z-index: 9999;
+		.admin-button-com {
+			width: 60%;
+		}
+		button{
+			width:600upx;
+		}
+	}
+}
+</style>

+ 1 - 1
hdApp/src/admin/home/workbench.vue

@@ -99,7 +99,7 @@ export default {
         { name: "供应商", img: `${this.$constant.imgUrl}/ghs/home/icon_ghs.png`, url: "/pagesPurchase/order" },
         { name: "商品", img: `${this.$constant.imgUrl}/ghs/home/hcgl.png`, url: "/admin/goodsManage/list" },
         { name: "商品分类", img: `${this.$constant.imgUrl}/ghs/home/hcgl.png`, url: "/admin/goodsManage/category" },
-        { name: "员工", img: `${this.$constant.imgUrl}/ghs/home/yggl.png`, url: "/admin/staff/list" },
+        { name: "改价", img: `${this.$constant.imgUrl}/ghs/home/gj.png`, url: "/admin/changePrice/list" },
         { name: "报损单", img: `${this.$constant.imgUrl}/ghs/home/kcyjs.png`, url: "/admin/breakage/list" }
       ],
       totalData: [

+ 10 - 0
hdApp/src/api/product/index.js

@@ -86,4 +86,14 @@ export const  pxClassDel = data => {
 
 export const getProductDetail = data => {
 	return https.get("/product/detail", data);
+};
+
+//批量改价
+export const batchChangePrice = data => {
+	return https.post("/product/batch-change-price", data);
+};
+
+//生成价格表 shish 20210922
+export const generatePriceTable = data => {
+	return https.get("/product/generate-price-table", data);
 };

+ 5 - 2
hdApp/src/mixins/cgProduct.js

@@ -213,8 +213,11 @@ export default {
 		...mapActions(["setSelectInfoByType", "resetSelectInfoByType"]),
 		//记忆已选的花材
 		rememberProduct(){
-			if(this.pageType == 'cg' && !this.$util.isEmpty(this.option.id)){
-				uni.setStorageSync('selectList'+this.pageType+'_ghs_'+this.option.id, this.selectList)
+			//采购或预订的记忆花材
+			if(this.pageType == 'cg' || this.pageType == 'bookCg' ){
+				if(!this.$util.isEmpty(this.option.id)){
+					uni.setStorageSync('selectList'+this.pageType+'_ghs_'+this.option.id, this.selectList)
+				}
 			}else{
 				uni.setStorageSync('selectList'+this.pageType, this.selectList)
 			}

+ 6 - 0
hdApp/src/pages.json

@@ -26,6 +26,12 @@
 				{"path": "add","style": {"navigationBarTitleText": "添加花材"}}
 			]
 		},
+		{
+			"root": "admin/changePrice",
+			"pages": [
+				{"path": "list","style": {"navigationBarTitleText": "批量改价"}}
+			]
+		},
 		{
 			"root": "admin/itemClass",
 			"pages": [

+ 8 - 1
hdApp/src/pagesPurchase/bookProduct.vue

@@ -170,6 +170,10 @@ export default {
 			showInvite:false,
 			//推荐新人福利
 			tjFl:0,
+			//预订单最低公斤数
+			miniKilo:0,
+			//每公斤服务费
+			kiloFee:0
 		};
 	},
 	onPullDownRefresh() {
@@ -378,6 +382,9 @@ export default {
 					}
 					this.tjFl = res.data.tjFl
 					this.newCustomGift.xrFlAmount = res.data.xrFlAmount
+					//预订单最低公斤数
+					this.miniKilo = res.data.miniKilo || 0
+					this.kiloFee = res.data.kiloFee || 0
 				}).catch(err => {})
 			}
 		},
@@ -505,7 +512,7 @@ export default {
 				}
 				this.setSelectInfoByType({ type: this.pageType, info: list });
 
-				this.pageTo({url: '/admin/billing/affirmGhsBook',query:{id:this.options.id},type: 2})
+				this.pageTo({url: '/admin/billing/affirmGhsBook',query:{id:this.options.id,miniKilo:this.miniKilo,kiloFee:this.kiloFee},type: 2})
 
 			} else {
 				this.$msg("请选择花材");

+ 1 - 1
hdApp/src/pagesPurchase/order.vue

@@ -9,7 +9,7 @@
               <view class="store_title">{{ghsInfo.name}}</view>
               <view class="accumulative"></view>
             </view>
-            <view class="cg-button" @click="enterShop(ghsInfo)">采购</view>
+            <view class="cg-button" @click="enterShop(ghsInfo)">进店</view>
             <view class="book-button" @click="bookItem(ghsInfo)">预订</view>
             <view class="store_btn">
               <view class="btn_entrance" @click="pageTo({ url: '/admin/clear/list',query: {ghsId: ghsInfo.id}})">结账记录</view>

+ 8 - 19
hdApp/src/pagesPurchase/orderItem.vue

@@ -2,26 +2,21 @@
   <view class="order-item-view" @click="clickItemEvent">
     <view class="item-header">
       <view class="title">
-        <image
-          class="icon"
-          :src="info.ghsAvatar"
-          alt=""
-        />
+        <image class="icon" :src="info.ghsAvatar" alt="" />
         <text class="name">
-          {{ info.ghsName}}
+          <text>{{ info.ghsName}}</text>
         </text>
       </view>
-      <view v-if="info.refund == 2" class="status" style="color:red;border:1px solid red;border-radius:20upx;font-size:20upx;padding:5upx 12upx;margin-right:50upx;">有退款 </view>
-      <view v-if="info.debt == 1" class="status" style="color:red;border:1px solid red;border-radius:20upx;font-size:20upx;padding:5upx 12upx;margin-right:50upx;">欠款 </view>
+      <text v-if="info.book == 1" class="status" style="color:white;border:1px solid green;border-radius:20upx;font-size:20upx;padding:5upx 12upx;margin-right:40upx;background:green;">预订单</text>
+      <view v-if="info.refund == 2" class="status" style="color:red;border:1px solid red;border-radius:20upx;font-size:20upx;padding:5upx 12upx;margin-right:40upx;">有退款 </view>
+      <view v-if="info.debt == 1" class="status" style="color:red;border:1px solid red;border-radius:20upx;font-size:20upx;padding:5upx 12upx;margin-right:40upx;">欠款 </view>
       <view class="status">{{ getStatusName }} </view>
     </view>
-    <view
-      class="item-main"
-    >
+    <view class="item-main" >
       <view class="item-info">
         <view class="info-row">
           <text class="info-label"> 日期:</text>
-          <text class="info-value">{{ info.addTime }}</text>
+          <text class="info-value">{{ info.addTime ? info.addTime.substring(0, 16) : '' }}</text>
         </view>
         <view class="info-row">
           <text class="info-label"> 单号:</text>
@@ -36,7 +31,6 @@
           <text v-if="info.smallNum > 0" class="info-value">{{ info.bigNum }}/{{info.smallNum}}</text>
           <text class="info-value">{{info.bigNum}}</text>
         </view>
-
       </view>
       <view class="item-price">¥{{ parseFloat(info.actPrice)||0 }} <text class="iconfont iconxiangyou"></text>
       </view>
@@ -45,7 +39,6 @@
 </template>
 <script>
 import { PURCHASE_ORDER_STATUS } from "@/utils/declare";
-
 export default {
   props: {
     info: {
@@ -101,8 +94,6 @@ export default {
     justify-content: space-between;
     align-items: center;
     margin-bottom: 20upx;
-    // padding-bottom: 30upx;
-    // border-bottom: 1px solid #f0f0f0;
     .title {
       display: flex;
       align-items: center;
@@ -133,7 +124,6 @@ export default {
     align-items: flex-end;
     .item-info {
       flex: 1;
-
       font-size: 26upx;
       .info-row {
         margin-top: 12upx;
@@ -153,7 +143,6 @@ export default {
       display: flex;
       align-items: center;
       flex-shrink: 0;
-
       font-size: 30upx;
       font-weight: 600;
       color: #333333;
@@ -165,4 +154,4 @@ export default {
     }
   }
 }
-</style>
+</style>

+ 10 - 5
hdApp/src/pagesPurchase/purDetails.vue

@@ -11,14 +11,14 @@
         </view>
         <view>
           <i @click.stop="callUp(detailInfo.ghsMobile)" class="iconfont icondianhua1"></i>
-        	<i @click.stop="navigate(detailInfo.lat,detailInfo.long,detailInfo.supplierName)" class="iconfont icondianhua" style="font-size:53upx;margin-left:15upx;margin-right:9upx;color:#3385ff;"></i>
+        	<i @click.stop="navigate(detailInfo.lat,detailInfo.long,detailInfo.supplierName)" class="iconfont icondianhua" style="font-size:53upx;margin-left:25upx;margin-right:9upx;color:#3385ff;"></i>
         </view>
       </view>
 
       <view class="bills-info_box content-box">
         <view class="order-info_box">
           <view>订单日期:</view>
-          <view>{{ detailInfo.updateTime.substring(0, 16) }}</view>
+          <view>{{ detailInfo.updateTime ? detailInfo.updateTime.substring(0, 16) : '' }}</view>
         </view>
         <view class="order-info_box">
           <view>订单编号:</view>
@@ -29,7 +29,7 @@
         </view>
         <view v-if="detailInfo.status==1" class="order-info_box">
           <view>过期时间:</view>
-          <view>{{ detailInfo.deadline.substring(0, 16) }}</view>
+          <view>{{ detailInfo.deadline ? detailInfo.deadline.substring(0, 16) : '' }}</view>
         </view>
         <view v-if="detailInfo.ghsShopAdminId != 0" class="order-info_box">
           <view>商家开单:</view>
@@ -54,7 +54,12 @@
           <view>采购人员:</view>
           <view>{{ detailInfo.adminName }}</view>
         </view>
-
+        <view class="order-info_box" v-if="detailInfo.book == 1">
+          <view>订单类型:</view>
+          <view>
+            <text style="color:white;border:1px solid green;border-radius:20upx;font-size:20upx;padding:5upx 12upx;background:green;">预订单</text>
+          </view>
+        </view>
         <view class="order-info_box">
           <view>配送时间:</view>
           <view>{{ detailInfo.sendTimeWant }}</view>
@@ -419,7 +424,7 @@ export default {
               color: #333;
               font-size: 22upx;
               .price {
-                font-size: 30upx;
+                font-size: 25upx;
                 font-weight: bold;
               }
             }

+ 3 - 3
hdApp/src/pagesPurchase/wechatPay.vue

@@ -19,16 +19,16 @@
           <div v-else class="order-num app-color-3" style="margin-top:12upx;font-size:26upx;">订单已失效</div>
         </block>
         <block>
-          <view class="balance">余额:¥{{balance}}</view>
+          <!-- <view class="balance">余额:¥{{balance}}</view> -->
           <div class="call-one-btn">
 
             <view v-if="Number(balance) >= Number(realPrice)">
-              <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" v-if="Number(balance) >0" @click="balancePay">余额支付</button>
+              <!-- <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" v-if="Number(balance) >0" @click="balancePay">余额支付</button> -->
               <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" @click="_wxPay">微信支付</button>
             </view>
             <view v-else>
               <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" @click="_wxPay">微信支付</button>
-              <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" v-if="Number(balance) >0" @click="balancePay">余额支付</button>
+              <!-- <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" v-if="Number(balance) >0" @click="balancePay">余额支付</button> -->
             </view>
 
             <button class="button-com pay-wx" :class="[count >0 ? 'green':'default']" :disabled="count >0 ? false : true" @click="debtPay" v-if="hasDebtPay === '1'">记欠款</button>

+ 7 - 2
hdApp/src/pagesPurchase/xj.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="billing_box_bg">
     	<view class="input-wrap">
-			<text>剩余:{{parseFloat(option.stock)}}扎</text><text style="margin-left:50upx;">单价:¥{{parseFloat(option.price)}}</text>
+			<text>剩余:{{parseFloat(xjStock)}}扎</text><text style="margin-left:50upx;">单价:¥{{parseFloat(xjPrice)}}</text>
 		</view>
 		<view class="scroll-middle_bx">
 			<block>
@@ -50,6 +50,8 @@ export default {
 			xjList:[],
 			xjData:[],
 			numList:[],
+			xjStock:0,
+			xjPrice:0
 		};
 	},
 	computed:{
@@ -57,13 +59,16 @@ export default {
 	},
 	onLoad() {
 
+		this.xjStock = this.option.stock
+		this.xjPrice = this.option.price
+
 		let history = uni.getStorageSync("ghsXj"+this.option.ghsId)
 		if(!this.$util.isEmpty(history)){
 			history.forEach((item,index)=>{
 				this.numList[item.id] = item.num
 			})
 		}
-
+		console.log('this.numList',this.numList)
 	},
 	onPullDownRefresh() {
 	},

Some files were not shown because too many files changed in this diff