shish 7 місяців тому
батько
коміт
68153496a4

+ 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>

+ 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}}</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: 60upx;
+    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: 70upx;
+      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>