Jelajahi Sumber

日期和时间选择

shish 7 bulan lalu
induk
melakukan
b0545dce81
2 mengubah file dengan 286 tambahan dan 70 penghapusan
  1. 222 6
      hdApp/src/admin/billing/affirm.vue
  2. 64 64
      mallApp/src/pages/billing/affirmGhs.vue

+ 222 - 6
hdApp/src/admin/billing/affirm.vue

@@ -189,13 +189,11 @@
           </view>
 				</tui-list-cell>
 
-					<tui-list-cell class="line-cell" :hover="false" :arrow="true">
+				<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" :range="timeOptions" @change="bindTimeChange">
-							<view class="uni-input" style="width:450upx;">{{form.reachPeriod}}</view>
-						</picker>
-					</tui-list-cell>
+					<view class="tui-title" v-else>配送时间</view>
+					<view class="uni-input" style="width:450upx;font-size:32upx;" @click="openTimePopup">{{form.reachPeriod}}</view>
+				</tui-list-cell>
 
           <tui-list-cell class="line-cell" :arrow="true">
             <div class="tui-title">开单人</div>
@@ -274,6 +272,70 @@
 			</view>
 		</uni-popup>
 
+				<!-- 配送时间选择弹框 -->
+				<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="admin-button-com middle default" @click="closeTimePopup">取消</button>
+							<button class="admin-button-com middle blue" @click="confirmTime">确认</button>
+						</view>
+					</view>
+				</uni-popup>
+
 		<uni-popup ref="discountRef" background-color="#fff" type="center" :animation="false" class="class-popup-style">
       <view style="display:flex;padding:20upx;min-height:25vh;justify-content: space-between;align-items:center;flex-wrap:wrap;">
         <text v-for="(item, index) in discountList" :key="index" @click="setDiscount(item.value)" 
@@ -420,6 +482,8 @@ export default {
       forwardPayWay:0,//不影响原有的form.payWay方式,重新定义一个
       reduceStock:0,
       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', // 选中的分钟
     };
   },
   onLoad (option) {
@@ -540,6 +604,22 @@ export default {
 			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()
+		},
     showDiscount(){
       this.$refs.discountRef.open('center')
     },
@@ -1065,4 +1145,140 @@ console.log(params)
     opacity: 0;
   }
 }
+
+/* 时间选择弹窗样式 */
+.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;
+	gap: 30upx;
+	margin-bottom: 0;
+	justify-content: space-between;
+	flex: 1;
+	padding: 30upx 20upx 0 20upx;
+	overflow: hidden;
+}
+
+.time-section {
+	flex: 1;
+	display: flex;
+	flex-direction: column;
+	
+	.section-title {
+		font-size: 28upx;
+		color: #666;
+		margin-bottom: 15upx;
+		font-weight: 500;
+		text-align: center;
+	}
+}
+
+.hours-wrapper {
+	width: 100%;
+	flex: 1;
+	background: #f8f9fa;
+	border: 2upx solid #e9ecef;
+	border-radius: 8upx;
+	position: relative;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+}
+
+.minutes-wrapper {
+	width: 100%;
+	flex: 1;
+	background: #f8f9fa;
+	border: 2upx solid #e9ecef;
+	border-radius: 8upx;
+	position: relative;
+	overflow: hidden;
+	display: flex;
+	flex-direction: column;
+}
+
+.hours-scroll,
+.minutes-scroll {
+	width: 100%;
+	height: 100%;
+	padding: 10upx;
+	box-sizing: border-box;
+	min-height: 200upx;
+}
+
+.hours-buttons,
+.minutes-buttons {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 10upx;
+}
+
+.time-button {
+	width: calc(50% - 5upx);
+	height: 80upx;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	background: #ffffff;
+	border: 2upx solid #e9ecef;
+	border-radius: 8upx;
+	font-size: 30upx;
+	color: #333;
+	margin-bottom: 10upx;
+	box-sizing: border-box;
+	
+	&.active {
+		background: #e8f5ff;
+		border-color: #3385FF;
+		color: #3385FF;
+		font-weight: 500;
+	}
+	
+	&:active {
+		background: #e8f5ff;
+	}
+}
+
+.popup-footer {
+	display: flex;
+	gap: 20upx;
+	padding: 20upx;
+	border-top: 2upx solid #f0f2f6;
+	flex-shrink: 0;
+	
+	button {
+		flex: 1;
+	}
+}
 </style>

+ 64 - 64
mallApp/src/pages/billing/affirmGhs.vue

@@ -37,70 +37,6 @@
 
 				<view class="module-com input-line-wrap">
 
-					<!-- 配送时间选择弹框 -->
-					<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="admin-button-com middle default" @click="closeTimePopup">取消</button>
-								<button class="admin-button-com middle blue" @click="confirmTime">确认</button>
-							</view>
-						</view>
-					</uni-popup>
-
 					<tui-list-cell class="line-cell" :hover="false" :arrow="false" >
 						<block v-if="account == 4805">
 							<button class="admin-button-com big" :class="[form.sendType == 1 ? 'blue' : 'default']" style="width:180upx;"  @click="changeSendType(1)">到店自取</button>
@@ -231,6 +167,70 @@
 	
 	<mx-date-picker :show="showDatePicker" format="yyyy-mm-dd" type="date" :value="defaultPickerDate" :show-tips="true" @confirm="confirmDatePicker" @cancel="showDatePicker = 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="admin-button-com middle default" @click="closeTimePopup">取消</button>
+				<button class="admin-button-com middle blue" @click="confirmTime">确认</button>
+			</view>
+		</view>
+	</uni-popup>
+
 </view>
 </template>
 <script>