Просмотр исходного кода

Merge branch 'master' into zhongqi-delivery

shish 7 месяцев назад
Родитель
Сommit
2d06734919

+ 1 - 1
ghsApp/src/admin/billing/affirm.vue

@@ -62,7 +62,7 @@
             </view>
             <view class="summary-bar" v-if="hasFinance==1">
               <view class="operate-view"></view>
-              <view class="describe-view" style="color:#3385ff;font-weight:bold;">
+              <view class="describe-view" style="color:#3385ff;font-weight:bold;font-size:30upx;">
                   <text v-if="showFinance==1" @click="getMyFinance">成本 ¥{{ allCount.avCost }},利润 ¥{{ parseFloat((Number(allPrice)-Number(allCount.avCost)).toFixed(2)) }}</text>
                   <text v-else @click="getMyFinance">查看财务</text>
               </view>

+ 2 - 2
hdApp/src/admin/billing/affirm.vue

@@ -1249,7 +1249,7 @@ console.log(params)
 
 .time-button {
 	width: calc(25% - 6upx);
-	height: 60upx;
+	height: 80upx;
 	display: flex;
 	align-items: center;
 	justify-content: center;
@@ -1283,7 +1283,7 @@ console.log(params)
 	
 	.footer-button {
 		flex: 1;
-		height: 70upx;
+		height: 93upx;
 		display: flex;
 		align-items: center;
 		justify-content: center;

+ 334 - 58
hdApp/src/admin/goods/result.vue

@@ -53,18 +53,18 @@
 						<tui-list-cell class="line-cell" :hover="false" :arrow="true">
 							<view class="tui-title" v-if="form.sendType == 1">取花日期</view>
 							<view class="tui-title" v-else>配送日期</view>
-							<picker mode="date" :value="form.reachDate" @change="selTimeFn" class="tui-input">
-								<view v-if="form.reachDate">{{ form.reachDate }}</view>
-								<view v-else>今天</view>
-							</picker>
+							<view class="uni-input" v-if="form.reachDate==''" @click="bindReachDateChange">
+								<view style="width:410upx;font-size:32upx;color:#CCCCCC;">今天</view>
+							</view>
+							<view class="uni-input" @click="bindReachDateChange">
+								<view style="width:410upx;font-size:32upx;">{{form.reachDate}}</view>
+							</view>
 						</tui-list-cell>
 
-						<tui-list-cell class="line-cell" :hover="false" :arrow="false">
+						<tui-list-cell class="line-cell" :hover="false" :arrow="true">
 							<view class="tui-title" v-if="form.sendType == 1">取花时间</view>
 							<view class="tui-title" v-else>配送时间</view>
-							<picker mode="multiSelector" :value="form.reachPeriod" :range="timeOptions" @change="bindTimeChange">
-								<view class="uni-input" style="width:450upx;">{{form.reachPeriod}}<text style="margin-left:10upx;">前</text></view>
-							</picker>
+							<view class="uni-input" style="width:450upx;font-size:32upx;" @click="openTimePopup">{{form.reachPeriod}}</view>
 						</tui-list-cell>
 
 						<tui-list-cell class="line-cell" :hover="false">
@@ -89,56 +89,131 @@
 							<button @click="form.needPrint = 1" class="admin-button-com middle" :class="form.needPrint == 1 ? 'blue' : 'default'" style="margin-left:30upx;">打印</button>
 						</tui-list-cell>
 
-					</view>
-				</form>
-				<view class="button-group">
-					<button class="admin-button-com big default" @click="goBack" style="width:200upx;">取消</button>
-					<button class="admin-button-com big blue" @click="confirmOrder" style="width:200upx;margin-left:50upx;">确认</button>
 				</view>
+			</form>
+			<view class="button-group">
+				<button class="admin-button-com big default" @click="goBack" style="width:200upx;">取消</button>
+				<button class="admin-button-com big blue" @click="confirmOrder" style="width:200upx;margin-left:50upx;">确认</button>
 			</view>
 		</view>
 		</view>
 	</view>
+
+	<!-- 配送时间选择弹框 -->
+	<uni-popup ref="timePopup" type="bottom" background-color="#fff">
+		<view class="time-picker-popup">
+			<view class="popup-header">
+				<text class="popup-title">选择配送时间</text>
+				<text class="popup-close" @click="closeTimePopup">×</text>
+			</view>
+			
+			<view class="time-sections">
+				<!-- 小时选择 -->
+				<view class="time-section">
+					<view class="section-title">小时</view>
+					<view class="hours-wrapper">
+						<scroll-view 
+							scroll-y="true" 
+							class="hours-scroll"
+							enhanced="true"
+							show-scrollbar="true"
+						>
+							<view class="hours-buttons">
+								<button 
+									v-for="(hour, index) in timeOptions[0]" 
+									:key="index"
+									class="time-button" 
+									:class="{ active: selectedHour == hour }"
+									@click="selectedHour = hour"
+								>{{ hour }}</button>
+							</view>
+						</scroll-view>
+					</view>
+				</view>
+				
+				<!-- 分钟选择 -->
+				<view class="time-section">
+					<view class="section-title">分钟</view>
+					<view class="minutes-wrapper">
+						<scroll-view 
+							scroll-y="true" 
+							class="minutes-scroll"
+							enhanced="true"
+							show-scrollbar="true"
+						>
+							<view class="minutes-buttons">
+								<button 
+									v-for="(minute, index) in timeOptions[1]" 
+									:key="index"
+									class="time-button" 
+									:class="{ active: selectedMinute == minute }"
+									@click="selectedMinute = minute"
+								>{{ minute }}</button>
+							</view>
+						</scroll-view>
+					</view>
+				</view>
+			</view>
+			
+			<!-- 操作按钮 -->
+			<view class="popup-footer">
+				<button class="footer-button default" @click="closeTimePopup">取消</button>
+				<button class="footer-button blue" @click="confirmTime">确认</button>
+			</view>
+		</view>
+	</uni-popup>
+
+	<!-- 配送日期选择器蒙板 -->
+	<view v-if="reachDatePickerShow" class="date-picker-mask" @click="reachDatePickerShow = false"></view>
+
+	<mx-date-picker :show="reachDatePickerShow" format="yyyy-mm-dd" type="date" :value="reachDatePickerValue" :show-tips="true" @confirm="confirmReachDatePicker" @cancel="reachDatePickerShow = false" />
+	</view>
 </template>
 <script>
 import TuiListCell from "@/components/plugin/list-cell";
 import { createOrder } from "@/api/order";
 import { mapGetters } from "vuex";
+import MxDatePicker from '@/components/mx-datepicker/mx-datepicker.vue';
 
 export default {
 	name: "result",
 	components: {
-		TuiListCell
-	},
-	data() {
-		return {
-			form: {
-				hasPay: 4,
-				payWay: 0,
-				num: 1,
-				sendType: 0,
-				reachDate: '',
-				reachPeriod: "12:00",
-				remark: '',
-				needWork:1,
-        		needPrint:2
-			},
-			goodsPrice: '',
-			payWayindex: 0,
-			payWayList: [
-				{name: "线下微信", id: 0},
-				{name: "线下支付宝", id: 1},
-				{name: "现金", id: 4},
-				{name: "银行卡", id: 5}
-			],
-			timeOptions: [
-				['00', '01', '02','03','04','05','06','07','08','09','10','11','12','13', '14','15','16','17','18','19','20','21','22','23'],
-				['00', '05', '10','15','20','25','30','35','40','45','50','55']
-			],
-			goodsName:'',
-			goodsId:0
-		};
+		TuiListCell,
+		MxDatePicker
 	},
+		data() {
+			return {
+				form: {
+					hasPay: 4,
+					payWay: 0,
+					num: 1,
+					sendType: 0,
+					reachDate: '',
+					reachPeriod: "12:00",
+					remark: '',
+					needWork:1,
+					needPrint:2
+				},
+				goodsPrice: '',
+				payWayindex: 0,
+				payWayList: [
+					{name: "线下微信", id: 0},
+					{name: "线下支付宝", id: 1},
+					{name: "现金", id: 4},
+					{name: "银行卡", id: 5}
+				],
+				timeOptions: [
+					['00', '01', '02','03','04','05','06','07','08','09','10','11','12','13', '14','15','16','17','18','19','20','21','22','23'],
+					['00', '05', '10','15','20','25','30','35','40','45','50','55']
+				],
+				goodsName:'',
+				goodsId:0,
+				selectedHour: '12', // 选中的小时
+				selectedMinute: '00', // 选中的分钟
+				reachDatePickerShow: false,
+				reachDatePickerValue: ''
+			};
+		},
 	computed: {
 		...mapGetters(["getLoginInfo", "getMyShopInfo"]),
 		orderTotalPrice() {
@@ -172,7 +247,8 @@ export default {
 				this.$msg('请设置快捷开单的客户')
 				return false
 			}
-      		let params = {...this.form,modifyPrice: this.orderTotalPrice,version:3,orderType:1,product:json,customId:customId};
+			//dealPrice=1 表示花束卖的价跟原价不一致,也要强制提交
+      		let params = {...this.form,modifyPrice: this.orderTotalPrice,version:3,orderType:1,product:json,customId:customId,dealPrice:1};
 
 			this.$util.confirmModal({content:'确认提交'},() => {        
 				uni.showLoading({mask:true})
@@ -197,12 +273,36 @@ export default {
 		selTimeFn(e) {
 			this.form.reachDate = e.detail.value;
 		},
+		bindReachDateChange(){
+			this.reachDatePickerShow = true
+			this.reachDatePickerValue = this.form.reachDate
+		},
+		confirmReachDatePicker(e) {
+			this.form.reachDate = e.value
+			this.reachDatePickerShow = false
+		},
 		bindTimeChange(event) {
 			let val = event.detail.value;
 			let before = Number(val[0]);
 			let after = Number(val[1]);
 			let timeOptions = this.timeOptions;
 			this.form.reachPeriod = timeOptions[0][before]+':'+timeOptions[1][after];
+		},
+		openTimePopup() {
+			// 初始化为当前选中的时间
+			const [hour, minute] = this.form.reachPeriod.split(':')
+			this.selectedHour = hour
+			this.selectedMinute = minute
+			this.$refs.timePopup.open()
+		},
+		// 关闭时间选择弹框
+		closeTimePopup() {
+			this.$refs.timePopup.close()
+		},
+		// 确认时间选择
+		confirmTime() {
+			this.form.reachPeriod = `${this.selectedHour}:${this.selectedMinute}`
+			this.closeTimePopup()
 		}
 	}
 };
@@ -248,31 +348,207 @@ export default {
 				.tui-title {
 					width: 210upx;
 					color: $fontColor2;
-					&.required::before {
-						content: '*';
-						color: #ff0000;
-						margin-right: 4upx;
-					}
 				}
 				.tui-input {
 					width: calc(100% - 210upx);
 					font-size: 28upx;
 				}
-				.tui-placeholder {
-					color: #ccc;
-				}
 				.phcolor {
 					color: #ccc;
 				}
 			}
+			.button-group {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				margin-top: 40upx;
+				padding: 0 30upx;
+			}
+		}
+	}
+}
+
+/* 时间选择弹窗样式 */
+.time-picker-popup {
+	width: 100%;
+	background: #fff;
+	border-radius: 20upx 20upx 0 0;
+	display: flex;
+	flex-direction: column;
+	max-height: 94vh;
+	padding: 0 0 120upx 0;
+}
+
+.popup-header {
+	display: flex;
+	justify-content: space-between;
+	align-items: center;
+	margin-bottom: 0;
+	padding: 30upx 20upx 20upx 20upx;
+	border-bottom: 2upx solid #f0f2f6;
+	flex-shrink: 0;
+}
+
+.popup-title {
+	font-size: 36upx;
+	color: #333;
+	font-weight: bold;
+}
+
+.popup-close {
+	font-size: 48upx;
+	color: #999;
+	line-height: 1;
+	cursor: pointer;
+}
+
+.time-sections {
+	display: flex;
+	flex-direction: column;
+	gap: 20upx;
+	margin-bottom: 0;
+	flex: 1;
+	padding: 20upx 20upx 0 20upx;
+	overflow: hidden;
+}
+
+.time-section {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	min-height: 200upx;
+	
+	.section-title {
+		font-size: 28upx;
+		color: #333;
+		font-weight: 600;
+		margin-bottom: 12upx;
+		text-align: left;
+	}
+}
+
+.hours-wrapper {
+	width: 100%;
+	flex: 1;
+	background: #f8f9fa;
+	border: 2upx solid #e9ecef;
+	border-radius: 8upx;
+	position: relative;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+	min-height: 150upx;
+}
+
+.minutes-wrapper {
+	width: 100%;
+	flex: 1;
+	background: #f8f9fa;
+	border: 2upx solid #e9ecef;
+	border-radius: 8upx;
+	position: relative;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+	min-height: 150upx;
+}
+
+.hours-scroll,
+.minutes-scroll {
+	width: 100%;
+	height: 100%;
+	padding: 8upx;
+	box-sizing: border-box;
+}
+
+.hours-buttons,
+.minutes-buttons {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 8upx;
+	justify-content: flex-start;
+}
+
+.time-button {
+	width: calc(25% - 6upx);
+	height: 80upx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	background: #ffffff;
+	border: 2upx solid #e9ecef;
+	border-radius: 6upx;
+	font-size: 26upx;
+	color: #666;
+	box-sizing: border-box;
+	transition: all 0.2s;
+	flex-shrink: 0;
+	
+	&.active {
+		background: #3385FF;
+		border-color: #3385FF;
+		color: #fff;
+		font-weight: 500;
+	}
+	
+	&:active {
+		background: #e8f5ff;
+	}
+}
+
+.popup-footer {
+	display: flex;
+	gap: 12upx;
+	padding: 15upx 20upx 20upx 20upx;
+	border-top: 2upx solid #f0f2f6;
+	flex-shrink: 0;
+	
+	.footer-button {
+		flex: 1;
+		height: 93upx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		border: none;
+		border-radius: 8upx;
+		font-size: 28upx;
+		font-weight: 500;
+		transition: all 0.2s;
+		
+		&.default {
+			background: #f5f5f5;
+			color: #666;
 		}
-		.button-group {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			margin-top: 40upx;
-			padding: 0 30upx;
+		
+		&.blue {
+			background: #3385FF;
+			color: #fff;
 		}
+		
+		&:active {
+			opacity: 0.8;
+		}
+	}
+}
+
+/* 日期选择器蒙板 */
+.date-picker-mask {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+	z-index: 98;
+	animation: fadeIn 0.3s ease-in-out;
+}
+
+@keyframes fadeIn {
+	from {
+		opacity: 0;
+	}
+	to {
+		opacity: 1;
 	}
 }
 </style>

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

@@ -389,7 +389,7 @@ export default {
     },
     sendOrderFn(item){
       let that = this
-      that.$util.confirmModal({content:'自配送?'},() => {
+      that.$util.confirmModal({content:'确认自配送?'},() => {
         sendOrder({id:item.id}).then(res=>{
           if(res.code == 1){
             that.$msg('操作成功')

+ 303 - 11
hdApp/src/admin/order/components/app-delivery-modify.vue

@@ -14,18 +14,18 @@
           <tui-list-cell class="line-cell" :hover="false" :arrow="true">
             <view class="tui-title" v-if="form.sendType == 1">取花日期</view>
             <view class="tui-title" v-else>配送日期</view>
-            <picker mode="date" :value="form.reachDate" @change="selTimeFn" class="tui-input">
-              <view v-if="form.reachDate">{{ form.reachDate }}</view>
-              <view v-else>今天</view>
-            </picker>
+            <view class="uni-input" v-if="form.reachDate==''" @click="bindReachDateChange">
+              <view style="width:410upx;font-size:32upx;color:#CCCCCC;">今天</view>
+            </view>
+            <view class="uni-input" @click="bindReachDateChange">
+              <view style="width:410upx;font-size:32upx;">{{form.reachDate}}</view>
+            </view>
           </tui-list-cell>
 
-          <tui-list-cell class="line-cell" :hover="false" :arrow="false">
+          <tui-list-cell class="line-cell" :hover="false" :arrow="true">
             <view class="tui-title" v-if="form.sendType == 1">取花时间</view>
             <view class="tui-title" v-else>配送时间</view>
-            <picker mode="multiSelector" :value="form.reachPeriod" :range="timeOptions" @change="bindTimeChange">
-              <view class="uni-input" style="width:450upx;">{{form.reachPeriod}}<text style="margin-left:10upx;">前</text></view>
-            </picker>
+            <view class="uni-input" style="width:450upx;font-size:32upx;" @click="openTimePopup">{{form.reachPeriod}}</view>
           </tui-list-cell>
       </template>
 
@@ -101,7 +101,76 @@
     <!-- 省市联动 -->
     <simple-address ref="simpleAddress" :region="regionTree" :pickerValueDefault="cityPickerValueDefault" @onConfirm="getCityConfirm" ></simple-address>
     <!-- 选择地区 -->
-		<app-area-sel :show.sync="showRegion" :city="form.city" @change="changeAreaFn" />
+	<app-area-sel :show.sync="showRegion" :city="form.city" @change="changeAreaFn" />
+
+    <!-- 配送日期选择器蒙板 -->
+    <view v-if="reachDatePickerShow" class="date-picker-mask" @click="reachDatePickerShow = false"></view>
+
+    <mx-date-picker :show="reachDatePickerShow" format="yyyy-mm-dd" type="date" :value="reachDatePickerValue" :show-tips="true" @confirm="confirmReachDatePicker" @cancel="reachDatePickerShow = false" />
+
+    <!-- 配送时间选择弹框 -->
+    <uni-popup ref="timePopup" type="bottom" background-color="#fff">
+      <view class="time-picker-popup">
+        <view class="popup-header">
+          <text class="popup-title">选择配送时间</text>
+          <text class="popup-close" @click="closeTimePopup">×</text>
+        </view>
+        
+        <view class="time-sections">
+          <!-- 小时选择 -->
+          <view class="time-section">
+            <view class="section-title">小时</view>
+            <view class="hours-wrapper">
+              <scroll-view 
+                scroll-y="true" 
+                class="hours-scroll"
+                enhanced="true"
+                show-scrollbar="true"
+              >
+                <view class="hours-buttons">
+                  <button 
+                    v-for="(hour, index) in timeOptions[0]" 
+                    :key="index"
+                    class="time-button" 
+                    :class="{ active: selectedHour == hour }"
+                    @click="selectedHour = hour"
+                  >{{ hour }}</button>
+                </view>
+              </scroll-view>
+            </view>
+          </view>
+          
+          <!-- 分钟选择 -->
+          <view class="time-section">
+            <view class="section-title">分钟</view>
+            <view class="minutes-wrapper">
+              <scroll-view 
+                scroll-y="true" 
+                class="minutes-scroll"
+                enhanced="true"
+                show-scrollbar="true"
+              >
+                <view class="minutes-buttons">
+                  <button 
+                    v-for="(minute, index) in timeOptions[1]" 
+                    :key="index"
+                    class="time-button" 
+                    :class="{ active: selectedMinute == minute }"
+                    @click="selectedMinute = minute"
+                  >{{ minute }}</button>
+                </view>
+              </scroll-view>
+            </view>
+          </view>
+        </view>
+        
+        <!-- 操作按钮 -->
+        <view class="popup-footer">
+          <button class="footer-button default" @click="closeTimePopup">取消</button>
+          <button class="footer-button blue" @click="confirmTime">确认</button>
+        </view>
+      </view>
+    </uni-popup>
   </view>
 </template>
 
@@ -111,6 +180,7 @@ import AppDatePicker from "@/components/app-date-picker";
 import SimpleAddress from "@/components/plugin/simple-address";
 import AppAreaSel from "@/components/app-area-sel";
 import AppBindInfo from "@/components/app-bind-info";
+import MxDatePicker from '@/components/mx-datepicker/mx-datepicker.vue';
 import {getShop} from "@/api/common"
 import {getRegion} from "@/api/shop"
 export default {
@@ -120,7 +190,8 @@ export default {
     TuiListCell,
     AppDatePicker,
     SimpleAddress,
-    AppBindInfo
+    AppBindInfo,
+    MxDatePicker
   },
 	props: {
 		info: {
@@ -163,7 +234,11 @@ export default {
       timeOptions: [
         ['00', '01', '02','03','04','05','06','07','08','09','10','11','12','13', '14','15','16','17','18','19','20','21','22','23'],
         ['00', '05', '10','15','20','25','30','35','40','45','50','55']
-      ]
+      ],
+      selectedHour: '12', // 选中的小时
+      selectedMinute: '00', // 选中的分钟
+      reachDatePickerShow: false,
+      reachDatePickerValue: ''
     };
   },
   mounted() {
@@ -264,6 +339,30 @@ export default {
 			const cityIndex = districtStr.indexOf('市');
 			this.form.dist = cityIndex !== -1 ? districtStr.substring(cityIndex + 1) : districtStr;
 		},
+    bindReachDateChange(){
+			this.reachDatePickerShow = true
+			this.reachDatePickerValue = this.form.reachDate
+		},
+		confirmReachDatePicker(e) {
+			this.form.reachDate = e.value
+			this.reachDatePickerShow = false
+		},
+    openTimePopup() {
+      // 初始化为当前选中的时间
+      const [hour, minute] = this.form.reachPeriod.split(':')
+      this.selectedHour = hour
+      this.selectedMinute = minute
+      this.$refs.timePopup.open()
+    },
+    // 关闭时间选择弹框
+    closeTimePopup() {
+      this.$refs.timePopup.close()
+    },
+    // 确认时间选择
+    confirmTime() {
+      this.form.reachPeriod = `${this.selectedHour}:${this.selectedMinute}`
+      this.closeTimePopup()
+    }
   }
 };
 </script>
@@ -330,5 +429,198 @@ export default {
       color: $fontColor2;
     }
   }
+
+  /* 时间选择弹窗样式 */
+  .time-picker-popup {
+    width: 100%;
+    background: #fff;
+    border-radius: 20upx 20upx 0 0;
+    display: flex;
+    flex-direction: column;
+    max-height: 94vh;
+    padding: 0 0 120upx 0;
+  }
+
+  .popup-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 0;
+    padding: 30upx 20upx 20upx 20upx;
+    border-bottom: 2upx solid #f0f2f6;
+    flex-shrink: 0;
+  }
+
+  .popup-title {
+    font-size: 36upx;
+    color: #333;
+    font-weight: bold;
+  }
+
+  .popup-close {
+    font-size: 48upx;
+    color: #999;
+    line-height: 1;
+    cursor: pointer;
+  }
+
+  .time-sections {
+    display: flex;
+    flex-direction: column;
+    gap: 20upx;
+    margin-bottom: 0;
+    flex: 1;
+    padding: 20upx 20upx 0 20upx;
+    overflow: hidden;
+  }
+
+  .time-section {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    min-height: 200upx;
+    
+    .section-title {
+      font-size: 28upx;
+      color: #333;
+      font-weight: 600;
+      margin-bottom: 12upx;
+      text-align: left;
+    }
+  }
+
+  .hours-wrapper {
+    width: 100%;
+    flex: 1;
+    background: #f8f9fa;
+    border: 2upx solid #e9ecef;
+    border-radius: 8upx;
+    position: relative;
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    min-height: 150upx;
+  }
+
+  .minutes-wrapper {
+    width: 100%;
+    flex: 1;
+    background: #f8f9fa;
+    border: 2upx solid #e9ecef;
+    border-radius: 8upx;
+    position: relative;
+    overflow: hidden;
+    display: flex;
+    flex-direction: column;
+    min-height: 150upx;
+  }
+
+  .hours-scroll,
+  .minutes-scroll {
+    width: 100%;
+    height: 100%;
+    padding: 8upx;
+    box-sizing: border-box;
+  }
+
+  .hours-buttons,
+  .minutes-buttons {
+    display: flex;
+    flex-wrap: wrap;
+    gap: 8upx;
+    justify-content: flex-start;
+  }
+
+  .time-button {
+    width: calc(25% - 6upx);
+    height: 80upx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: #ffffff;
+    border: 2upx solid #e9ecef;
+    border-radius: 6upx;
+    font-size: 26upx;
+    color: #666;
+    box-sizing: border-box;
+    transition: all 0.2s;
+    flex-shrink: 0;
+    
+    &.active {
+      background: #3385FF;
+      border-color: #3385FF;
+      color: #fff;
+      font-weight: 500;
+    }
+    
+    &:active {
+      background: #e8f5ff;
+    }
+  }
+
+  .popup-footer {
+    display: flex;
+    gap: 12upx;
+    padding: 15upx 20upx 20upx 20upx;
+    border-top: 2upx solid #f0f2f6;
+    flex-shrink: 0;
+    
+    .footer-button {
+      flex: 1;
+      height: 93upx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      border: none;
+      border-radius: 8upx;
+      font-size: 28upx;
+      font-weight: 500;
+      transition: all 0.2s;
+      
+      &.default {
+        background: #f5f5f5;
+        color: #666;
+      }
+      
+      &.blue {
+        background: #3385FF;
+        color: #fff;
+      }
+      
+      &:active {
+        opacity: 0.8;
+      }
+    }
+  }
+
+  /* 日期选择器蒙板 */
+  .date-picker-mask {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background-color: rgba(0, 0, 0, 0.5);
+    z-index: 99;
+    animation: fadeIn 0.3s ease-in-out;
+  }
+
+  @keyframes fadeIn {
+    from {
+      opacity: 0;
+    }
+    to {
+      opacity: 1;
+    }
+  }
+
+  @keyframes fadeOut {
+    from {
+      opacity: 1;
+    }
+    to {
+      opacity: 0;
+    }
+  }
 }
 </style>

+ 46 - 41
mallApp/src/pages/billing/affirmGhs.vue

@@ -69,38 +69,52 @@
 							</text>
 							<text v-else style="color: #3385FF;width:100%;">到店取货,没有配送费</text>
 						</view>
-						<view v-if="form.sendType == 2">
-							<view v-if="form.openIntraCity == 0">
-								<text style="color: #3385FF;width:100%;font-size:32upx;font-weight:bold;">运费自理或到付(请联系客服)</text>
-							</view>
-							<view v-if="form.openIntraCity == 2">
-								<text style="color: red;width:100%;font-size:32upx;font-weight:bold;">跑腿配送暂不可用,请选其它方式</text>
-							</view>
-							<!-- 跑腿平台报价列表 -->
-							<view v-if="form.openIntraCity == 1 && deliveryQuotes.length > 0" class="delivery-quotes-container">
-								<view class="delivery-quotes-grid">
-									<view 
-										v-for="(item, index) in deliveryQuotes" 
-										:key="index"
-										class="delivery-quote-item"
-										:class="{ 
-											'active': selectedDeliveryIndex === index, 
-											'disabled': !item.isAble,
-											'fixed-width': deliveryQuotes.length <= 2
-										}"
-										@click="selectDelivery(item, index)"
-									>
-										<view class="platform-name">{{ item.displayName || item.name }}</view>
-										<view class="platform-price">{{ item.priceText }}元</view>
-										<view v-if="item.type" class="platform-type">{{ item.type }}</view>
+					</tui-list-cell>
+					<tui-list-cell class="line-cell" :hover="false" :arrow="true" v-if="form.sendType == 2 || form.sendType == 0" @click="modifyAddress">
+						<view class="tui-title">收花地址</view>
+						<view v-if="!$util.isEmpty(userInfo.lat) && !$util.isEmpty(userInfo.long)">
+							<view><text>{{userInfo.address}}</text></view>
+							<view v-if="userInfo.showAddress!=userInfo.fullAddress" style="color:#848181;"><text>{{userInfo.showAddress}}</text></view>
+						</view>
+						<view v-else>
+							<view><text style="color:#CCCCCC;">请填写地址</text></view>
+						</view>
+					</tui-list-cell>
+					<block v-if="form.sendType == 2">
+						<tui-list-cell class="line-cell" :hover="false" :arrow="false">
+							<view>
+								<view v-if="form.openIntraCity == 0">
+									<text style="color: #3385FF;width:100%;font-size:32upx;font-weight:bold;">运费自理或到付(请联系客服)</text>
+								</view>
+								<view v-if="form.openIntraCity == 2">
+									<text style="color: red;width:100%;font-size:32upx;font-weight:bold;">跑腿配送暂不可用,请选其它方式</text>
+								</view>
+								<!-- 跑腿平台报价列表 -->
+								<view v-if="form.openIntraCity == 1 && deliveryQuotes.length > 0" class="delivery-quotes-container">
+									<view class="delivery-quotes-grid">
+										<view 
+											v-for="(item, index) in deliveryQuotes" 
+											:key="index"
+											class="delivery-quote-item"
+											:class="{ 
+												'active': selectedDeliveryIndex === index, 
+												'disabled': !item.isAble,
+												'fixed-width': deliveryQuotes.length <= 2
+											}"
+											@click="selectDelivery(item, index)"
+										>
+											<view class="platform-name">{{ item.displayName || item.name }}</view>
+											<view class="platform-price">{{ item.priceText }}元</view>
+											<view v-if="item.type" class="platform-type">{{ item.type }}</view>
+										</view>
 									</view>
 								</view>
+								<view v-else-if="form.openIntraCity == 1 && deliveryQuotesLoading" style="text-align: center; padding: 20upx 0; color: #999;">
+									正在获取报价...
+								</view>
 							</view>
-							<view v-else-if="form.openIntraCity == 1 && deliveryQuotesLoading" style="text-align: center; padding: 20upx 0; color: #999;">
-								正在获取报价...
-							</view>
-						</view>
-					</tui-list-cell>
+						</tui-list-cell>
+					</block>
 					<block v-if="form.openIntraCity == 1">
 						<tui-list-cell class="line-cell" :hover="false" v-if="displaySendCost == true && Number(showDistance)>0">
 							<view class="tui-title">距离</view>
@@ -118,16 +132,6 @@
 							</view>
 						</tui-list-cell>
 					</block>
-					<tui-list-cell class="line-cell" :hover="false" :arrow="true" v-if="form.sendType == 2 || form.sendType == 0" @click="modifyAddress">
-						<view class="tui-title">收花地址</view>
-						<view v-if="!$util.isEmpty(userInfo.lat) && !$util.isEmpty(userInfo.long)">
-							<view><text>{{userInfo.address}}</text></view>
-							<view v-if="userInfo.showAddress!=userInfo.fullAddress" style="color:#848181;"><text>{{userInfo.showAddress}}</text></view>
-						</view>
-						<view v-else>
-							<view><text style="color:#CCCCCC;">请填写地址</text></view>
-						</view>
-					</tui-list-cell>
 
 					<tui-list-cell class="line-cell" :hover="false" v-if="(form.sendType == 2 || form.sendType == 0)&& Number(form.packCost)>0">
 					<view class="tui-title">打包费</view>
@@ -1212,8 +1216,9 @@ export default {
 
 .delivery-policy-link {
 	color: rgb(201, 52, 52);
-	font-size: 28upx;
-	margin-left: 26upx;
+	font-size: 32upx;
+	margin-left: 10upx;
+	font-weight:bold;
 	text-decoration: underline;
 }
 

+ 3 - 2
mallApp/src/pages/order/components/app-delivery.vue

@@ -1055,8 +1055,9 @@ export default {
 
 .delivery-policy-link {
 	color: rgb(201, 52, 52);
-	font-size: 28upx;
-	margin-left: 26upx;
+	font-size: 32upx;
+	margin-left:10upx;
+  font-weight:bold;
 	text-decoration: underline;
 }
 

+ 18 - 7
mallApp/src/pages/user/address.vue

@@ -2,22 +2,29 @@
 	<view class="app-content">
 		<form @submit="formSubmit">
 			<view class="module-com input-line-wrap">
+
+				<tui-list-cell class="line-cell" :hover="false" v-if="hasMap == 1">
+					<view class="tui-title">地址类型</view>
+					<button :class="[couldNavigation==1?'blue':'default']" class="admin-button-com middle" @click.stop="setStyle(1)" style="width:180upx;">支持导航</button>
+					<button :class="[couldNavigation==0?'blue':'default']" class="admin-button-com middle" style="width:180upx;margin-left:70upx;" @click.stop="setStyle(0)">不用导航</button>
+				</tui-list-cell>
+
 				<tui-list-cell class="line-cell" :hover="false" :arrow="true" @click="openAddres">
 					<view class="tui-title">城市</view>
 					<view class="tui-input" v-if="form.province || form.city">{{ form.province + '-' + form.city }}</view>
 					<view class="tui-placeholder" v-else>请选择</view>
 					<input v-model="form.province" name="province" hidden />
 				</tui-list-cell>
-				<tui-list-cell v-if="hasMap == 0" class="line-cell" :hover="false">
-					<view class="tui-title">地址</view>
-					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" @input="modifyShow" placeholder="请填写地址" />
-				</tui-list-cell>
-				<tui-list-cell v-else class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
+				<tui-list-cell v-if="couldNavigation == 1" class="line-cell" :hover="false" :arrow="true" @click="selectRegion">
 					<view class="tui-title">地址</view>
 					<view v-if="form.address" class="tui-input">{{ form.address }}</view>
 					<view v-else class="tui-placeholder">请填写地址</view>
 					<input v-model="form.address" name="address" hidden />
 				</tui-list-cell>
+				<tui-list-cell v-else class="line-cell" :hover="false">
+					<view class="tui-title">地址</view>
+					<input v-model="form.address" placeholder-class="phcolor" class="tui-input" name="address" @input="modifyShow" placeholder="请填写地址" />
+				</tui-list-cell>
 				<tui-list-cell class="line-cell" :hover="false">
 					<view class="tui-title ">门牌</view>
 					<input v-model="form.floor" placeholder-class="phcolor" class="tui-input" name="floor" placeholder="楼号门牌号(选填)" @input="modifyShow" />
@@ -63,7 +70,8 @@ export default {
 			},
 			regionData: [],
 			cityPickerValueDefault: [0, 0],
-			hasMap:0 // 是否具备定位功能 0不具备 1具备
+			hasMap:0,// 是否具备定位功能 0不具备 1具备
+			couldNavigation:1
 		}
 	},
 	onLoad() {
@@ -76,9 +84,12 @@ export default {
 		if(this.option.hdId){
 			uni.setStorageSync('hdId',this.option.hdId)
 		}
-
 	},
 	methods: {
+		setStyle(flag){
+			this.couldNavigation = flag
+			this.form.address = ''
+		},
 		init() {
 			getHasMap().then(res=>{
 				this.hasMap = res.data.hasMap