shish 2 mesi fa
parent
commit
1779884045

+ 53 - 19
ghsApp/src/admin/home/mall.vue

@@ -46,18 +46,21 @@
               </view>
             </tui-list-cell>
             <template v-if="openTimeVisible">
-              <tui-list-cell class="line-cell" :hover="false">
-                <view class="tui-title">开店时间</view>
-                <picker mode="time" :value="start_time" start="00:00" end="24:00" @change="startTimeChange">
-                  <view class="uni-input">{{ start_time }}</view>
-                </picker>
-              </tui-list-cell>
-              <tui-list-cell class="line-cell" :hover="false">
-                <view class="tui-title">关店时间</view>
-                <picker mode="time" :value="end_time" start="00:00" end="24:00" @change="endTimeChange">
-                  <view class="uni-input">{{ end_time }}</view>
-                </picker>
-              </tui-list-cell>
+              <view class="open-time-wheel-section">
+                <view class="open-time-wheel-row">
+                  <view class="open-time-wheel-col">
+                    <view class="open-time-wheel-label">开店时间</view>
+                    <view class="open-time-wheel-value">{{ start_time }}</view>
+                    <open-time-wheel :value="start_time" @change="onStartTimeChange" />
+                  </view>
+                  <view class="open-time-wheel-split"></view>
+                  <view class="open-time-wheel-col">
+                    <view class="open-time-wheel-label">关店时间</view>
+                    <view class="open-time-wheel-value">{{ end_time }}</view>
+                    <open-time-wheel :value="end_time" @change="onEndTimeChange" />
+                  </view>
+                </view>
+              </view>
             </template>
           </template>
         </view>
@@ -77,6 +80,7 @@ import { modifyWx, getDetail, updateShopOpenTime } from "@/api/shop"
 import { mapGetters } from "vuex";
 import { iconSrc } from '@/utils/iconSrc'
 import TuiListCell from '@/components/plugin/list-cell'
+import OpenTimeWheel from '@/components/module/open-time-wheel.vue'
 //图片上传插件来源:https://ext.dcloud.net.cn/plugin?id=2922 已改造,不能再升级 shish 20211228
 import htzImageUpload from '@/components/htz-image-upload/htz-image-upload.vue'
 export default {
@@ -103,7 +107,8 @@ export default {
   },
   components: {
     htzImageUpload,
-    TuiListCell
+    TuiListCell,
+    OpenTimeWheel
   },
   onLoad() {
     const token = uni.getStorageSync('token')
@@ -190,13 +195,13 @@ export default {
         this.openForm.openEndTime = this.end_time
       }
     },
-    startTimeChange(e) {
-      this.start_time = e.detail.value
-      this.openForm.openStartTime = e.detail.value
+    onStartTimeChange(time) {
+      this.start_time = time
+      this.openForm.openStartTime = time
     },
-    endTimeChange(e) {
-      this.end_time = e.detail.value
-      this.openForm.openEndTime = e.detail.value
+    onEndTimeChange(time) {
+      this.end_time = time
+      this.openForm.openEndTime = time
     },
     submitOpenTime() {
       if (!this.openForm.id) {
@@ -491,4 +496,33 @@ export default {
     width: 150upx;
   }
 }
+.open-time-wheel-section {
+  padding: 10upx 0 0;
+}
+.open-time-wheel-row {
+  display: flex;
+  align-items: stretch;
+}
+.open-time-wheel-col {
+  flex: 1;
+  min-width: 0;
+}
+.open-time-wheel-split {
+  width: 1upx;
+  margin: 20upx 0;
+  background-color: #eeeeee;
+}
+.open-time-wheel-label {
+  text-align: center;
+  font-size: 28upx;
+  color: #666666;
+}
+.open-time-wheel-value {
+  text-align: center;
+  font-size: 34upx;
+  font-weight: 600;
+  color: #3385FF;
+  margin-top: 8upx;
+  margin-bottom: 6upx;
+}
 </style>

+ 61 - 18
ghsApp/src/admin/shop/renew.vue

@@ -8,9 +8,6 @@
         </view>
 
         <view class="renew-body">
-            <!-- #ifdef APP-PLUS -->
-            <view class="app-pay-tip">请打开「销花宝微信小程序」付款</view>
-            <!-- #endif -->
             <view class="info-card">
                 <view class="info-row">
                     <text class="info-label">当前系统到期时间</text>
@@ -149,6 +146,7 @@
 import wexinPay from "@/utils/pay/wxPay"
 import { renewShop,needRemind } from "@/api/renew"
 import { postWxCode } from '@/api/mini'
+import { mapGetters } from 'vuex'
 export default {
     name: "renew",
     data(){
@@ -169,6 +167,7 @@ export default {
         }
     },
     computed: {
+        ...mapGetters({ dictInfo: 'getDictionariesInfo' }),
         isLifetimeSelected() {
             const m = {
                 lt8800: this.lt8800,
@@ -205,7 +204,10 @@ export default {
     },
     components: {
     },
-    onLoad(){
+    onLoad(options){
+        if (options && options.selectedKey) {
+            this.selectedKey = options.selectedKey
+        }
         let that = this
         needRemind().then(res=>{
             if(res.code == 1){
@@ -234,16 +236,68 @@ export default {
             }
             const p = map[this.selectedKey]
             if (!p) return
+            // #ifdef APP-PLUS
+            uni.showModal({
+                title: '提示',
+                content: '将跳转到小程序支付',
+                confirmText: '确定',
+                cancelText: '取消',
+                success: (res) => {
+                    if (res.confirm) {
+                        this.openRenewInMiniProgram()
+                    }
+                }
+            })
+            // #endif
+            // #ifdef MP-WEIXIN
             this.startRenew(p.renewType, p.renewPrice)
+            // #endif
         },
         init(){
 
         },
-        startRenew(type,price){
-            let that = this
+        openRenewInMiniProgram() {
+            const that = this
             // #ifdef APP-PLUS
-            that.$msg('请打开「销花宝微信小程序」付款')
+            if (!plus.runtime.isApplicationExist({ pname: 'com.tencent.mm', action: 'weixin://' })) {
+                that.$msg('请安装微信,再打开小程序')
+                return
+            }
+            const miniOriginalId = that.dictInfo.miniOriginalId
+                && that.dictInfo.miniOriginalId.current
+                && that.dictInfo.miniOriginalId.current.ghs
+                ? that.dictInfo.miniOriginalId.current.ghs
+                : ''
+            if (!miniOriginalId) {
+                that.$msg('小程序配置缺失')
+                return
+            }
+            const miniPath = '/admin/shop/renew?selectedKey=' + encodeURIComponent(that.selectedKey || 'lt8800')
+            const miniType = process.env.NODE_ENV === 'development' ? 2 : 0
+            plus.share.getServices(function(services) {
+                let sweixin = null
+                for (let i = 0; i < services.length; i++) {
+                    if (services[i].id === 'weixin') {
+                        sweixin = services[i]
+                        break
+                    }
+                }
+                if (!sweixin) {
+                    that.$msg('请安装微信')
+                    return
+                }
+                sweixin.launchMiniProgram({
+                    id: miniOriginalId,
+                    path: miniPath,
+                    type: miniType
+                })
+            }, function() {
+                that.$msg('请安装微信呢')
+            })
             // #endif
+        },
+        startRenew(type, price){
+            let that = this
             // #ifdef MP-WEIXIN
             uni.showLoading({mask:true})
             if(type == 1){
@@ -700,17 +754,6 @@ export default {
     box-sizing: border-box;
 }
 
-.app-pay-tip {
-    margin-bottom: 24upx;
-    padding: 24upx 28upx;
-    border-radius: 16upx;
-    background: #fff8e6;
-    color: #b45309;
-    font-size: 28upx;
-    line-height: 40upx;
-    text-align: center;
-}
-
 .renew-buy-btn {
     width: 100%;
     max-width: 100%;

+ 103 - 0
ghsApp/src/components/module/open-time-wheel.vue

@@ -0,0 +1,103 @@
+<template>
+  <picker-view
+    class="open-time-wheel"
+    :indicator-style="indicatorStyle"
+    :value="pickVal"
+    @change="handleChange"
+  >
+    <picker-view-column>
+      <view
+        class="open-time-wheel-item"
+        v-for="item in hourOptions"
+        :key="'hour-' + item"
+      >{{ item }}时</view>
+    </picker-view-column>
+    <picker-view-column>
+      <view
+        class="open-time-wheel-item"
+        v-for="item in minuteOptions"
+        :key="'minute-' + item"
+      >{{ item }}分</view>
+    </picker-view-column>
+  </picker-view>
+</template>
+
+<script>
+function buildTimeOptions(count) {
+  const list = []
+  for (let i = 0; i < count; i++) {
+    list.push(i < 10 ? '0' + i : '' + i)
+  }
+  return list
+}
+
+export default {
+  name: 'OpenTimeWheel',
+  props: {
+    value: {
+      type: String,
+      default: '09:00'
+    }
+  },
+  data() {
+    return {
+      hourOptions: buildTimeOptions(24),
+      minuteOptions: buildTimeOptions(60),
+      pickVal: [9, 0],
+      indicatorStyle: 'height: 72rpx;'
+    }
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.syncPickVal(val)
+      }
+    }
+  },
+  methods: {
+    parseTime(timeStr) {
+      const parts = (timeStr || '09:00').split(':')
+      const hour = Math.min(Math.max(parseInt(parts[0], 10) || 0, 0), 23)
+      const minute = Math.min(Math.max(parseInt(parts[1], 10) || 0, 0), 59)
+      return [hour, minute]
+    },
+    formatTime(pickVal) {
+      const hour = this.hourOptions[pickVal[0]] || '00'
+      const minute = this.minuteOptions[pickVal[1]] || '00'
+      return hour + ':' + minute
+    },
+    syncPickVal(timeStr) {
+      const nextVal = this.parseTime(timeStr)
+      if (nextVal[0] === this.pickVal[0] && nextVal[1] === this.pickVal[1]) {
+        return
+      }
+      this.$nextTick(() => {
+        this.pickVal = nextVal
+      })
+    },
+    handleChange(e) {
+      const nextVal = e.detail.value || [0, 0]
+      this.pickVal = nextVal
+      this.$emit('change', this.formatTime(nextVal))
+      this.$emit('input', this.formatTime(nextVal))
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.open-time-wheel {
+  width: 100%;
+  height: 360upx;
+}
+.open-time-wheel-item {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 72upx;
+  line-height: 72upx;
+  font-size: 30upx;
+  color: #333333;
+}
+</style>

+ 29 - 0
hdApp/src/admin/cg/item.vue

@@ -1,5 +1,10 @@
 <template>
   <view class="app-content">
+    <view class="page-top-bar">
+      <view class="page-top-icon-btn" @click="$refs.openTimePopup.open()">
+        <image class="page-top-icon" :src="iconSrc('shop_rest')" mode="aspectFit" />
+      </view>
+    </view>
 
     <view class="img_box" style="margin-top:30upx;">
       <image :src="flowerUrl" mode="heightFix" class="img_url"></image>
@@ -16,13 +21,20 @@
       <button class="admin-button-com big" style="width:60vw;" @click="copyLink">复制链接</button>
     </view>
 
+    <shop-open-time-popup ref="openTimePopup" />
+
   </view>
 </template>
 <script>
 import { mainGetItemPoster } from '@/api/main'
 import { getWeixinId } from "@/api/invite";
 import { mapGetters } from "vuex";
+import { iconSrc } from '@/utils/iconSrc'
+import ShopOpenTimePopup from '@/components/shop-open-time-popup.vue'
 export default {
+  components: {
+    ShopOpenTimePopup
+  },
   data() {
     return {
       flowerUrl:'',
@@ -34,6 +46,7 @@ export default {
     ...mapGetters({ loginInfo: "getLoginInfo",dictInfo:"getDictionariesInfo" })
   },
   methods: {
+    iconSrc,
     copyLink() {
       let text = "点击下面链接,打开商城\n\n"+this.flowerLink+"\n\n链接是我们小程序,放心点击"
       uni.setClipboardData({
@@ -152,6 +165,22 @@ export default {
 .app-content{
   overflow: hidden;
 }
+.page-top-bar {
+  display: flex;
+  justify-content: flex-end;
+  padding: 16upx 30upx 0;
+}
+.page-top-icon-btn {
+  width: 74upx;
+  height: 74upx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.page-top-icon {
+  width: 54upx;
+  height: 54upx;
+}
 .img_box{
   height:400upx;
   box-sizing: border-box;

+ 29 - 0
hdApp/src/admin/cg/mall.vue

@@ -1,5 +1,10 @@
 <template>
   <view class="app-content">
+    <view class="page-top-bar">
+      <view class="page-top-icon-btn" @click="$refs.openTimePopup.open()">
+        <image class="page-top-icon" :src="iconSrc('shop_rest')" mode="aspectFit" />
+      </view>
+    </view>
 
     <view class="img_box" style="margin-top:30upx;">
       <image :src="goodsUrl" mode="heightFix" class="img_url"></image>
@@ -19,13 +24,20 @@
       <button class="admin-button-com big" style="width:60vw;" @click="copyLink">复制链接</button>
     </view>
 
+    <shop-open-time-popup ref="openTimePopup" />
+
   </view>
 </template>
 <script>
 import { mainGetMallPoster } from '@/api/main/index'
 import { getWeixinId } from "@/api/invite/index";
 import { mapGetters } from "vuex";
+import { iconSrc } from '@/utils/iconSrc'
+import ShopOpenTimePopup from '@/components/shop-open-time-popup.vue'
 export default {
+  components: {
+    ShopOpenTimePopup
+  },
   data() {
     return {
       goodsUrl: '',
@@ -37,6 +49,7 @@ export default {
     ...mapGetters({ loginInfo: "getLoginInfo",dictInfo:"getDictionariesInfo" })
   },
   methods: {
+    iconSrc,
     copyLink() {
       let text = "点击下面链接,打开商城\n\n"+this.goodsLink+"\n\n链接是我们小程序,放心点击"
       uni.setClipboardData({
@@ -236,6 +249,22 @@ export default {
 .app-content{
   overflow: hidden;
 }
+.page-top-bar {
+  display: flex;
+  justify-content: flex-end;
+  padding: 16upx 30upx 0;
+}
+.page-top-icon-btn {
+  width: 74upx;
+  height: 74upx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+.page-top-icon {
+  width: 54upx;
+  height: 54upx;
+}
 .img_box{
   height:400upx;
   box-sizing: border-box;

+ 7 - 0
hdApp/src/api/shop/index.js

@@ -55,6 +55,13 @@ export const updateShop = data => {
 	return https.post('/shop/update', data)
 }
 
+/** *
+ * 修改门店营业时间
+ */
+export const updateShopOpenTime = data => {
+	return https.post('/shop/update-open-time', data)
+}
+
 /** *
  * 添加门店
  */

+ 103 - 0
hdApp/src/components/module/open-time-wheel.vue

@@ -0,0 +1,103 @@
+<template>
+  <picker-view
+    class="open-time-wheel"
+    :indicator-style="indicatorStyle"
+    :value="pickVal"
+    @change="handleChange"
+  >
+    <picker-view-column>
+      <view
+        class="open-time-wheel-item"
+        v-for="item in hourOptions"
+        :key="'hour-' + item"
+      >{{ item }}时</view>
+    </picker-view-column>
+    <picker-view-column>
+      <view
+        class="open-time-wheel-item"
+        v-for="item in minuteOptions"
+        :key="'minute-' + item"
+      >{{ item }}分</view>
+    </picker-view-column>
+  </picker-view>
+</template>
+
+<script>
+function buildTimeOptions(count) {
+  const list = []
+  for (let i = 0; i < count; i++) {
+    list.push(i < 10 ? '0' + i : '' + i)
+  }
+  return list
+}
+
+export default {
+  name: 'OpenTimeWheel',
+  props: {
+    value: {
+      type: String,
+      default: '09:00'
+    }
+  },
+  data() {
+    return {
+      hourOptions: buildTimeOptions(24),
+      minuteOptions: buildTimeOptions(60),
+      pickVal: [9, 0],
+      indicatorStyle: 'height: 72rpx;'
+    }
+  },
+  watch: {
+    value: {
+      immediate: true,
+      handler(val) {
+        this.syncPickVal(val)
+      }
+    }
+  },
+  methods: {
+    parseTime(timeStr) {
+      const parts = (timeStr || '09:00').split(':')
+      const hour = Math.min(Math.max(parseInt(parts[0], 10) || 0, 0), 23)
+      const minute = Math.min(Math.max(parseInt(parts[1], 10) || 0, 0), 59)
+      return [hour, minute]
+    },
+    formatTime(pickVal) {
+      const hour = this.hourOptions[pickVal[0]] || '00'
+      const minute = this.minuteOptions[pickVal[1]] || '00'
+      return hour + ':' + minute
+    },
+    syncPickVal(timeStr) {
+      const nextVal = this.parseTime(timeStr)
+      if (nextVal[0] === this.pickVal[0] && nextVal[1] === this.pickVal[1]) {
+        return
+      }
+      this.$nextTick(() => {
+        this.pickVal = nextVal
+      })
+    },
+    handleChange(e) {
+      const nextVal = e.detail.value || [0, 0]
+      this.pickVal = nextVal
+      this.$emit('change', this.formatTime(nextVal))
+      this.$emit('input', this.formatTime(nextVal))
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.open-time-wheel {
+  width: 100%;
+  height: 360upx;
+}
+.open-time-wheel-item {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 72upx;
+  line-height: 72upx;
+  font-size: 30upx;
+  color: #333333;
+}
+</style>

+ 255 - 0
hdApp/src/components/shop-open-time-popup.vue

@@ -0,0 +1,255 @@
+<template>
+  <uni-popup ref="openTimeRef" background-color="#fff" type="center" :animation="false" class="open-time-popup">
+    <view class="open-time-panel">
+      <view class="open-time-title">经营时间</view>
+      <view class="module-com input-line-wrap">
+        <tui-list-cell class="line-cell" :hover="false">
+          <view class="tui-title">状态</view>
+          <view class="select-button-wrap">
+            <button class="admin-button-com middle" :class="[openForm.open == 1 ? 'blue' : 'default']" @click="setOpenStatus(1)">营业</button>
+            <button class="admin-button-com middle" :class="[openForm.open == 0 ? 'blue' : 'default']" @click="setOpenStatus(0)">休息</button>
+          </view>
+        </tui-list-cell>
+        <template v-if="visible">
+          <tui-list-cell class="line-cell" :hover="false">
+            <view class="tui-title">时间</view>
+            <view class="select-button-wrap time-button-wrap">
+              <button class="admin-button-com middle" :class="[openForm.openType == 0 ? 'blue' : 'default']" @click="setOpenType(0)">24小时</button>
+              <button class="admin-button-com middle" :class="[openForm.openType == 1 ? 'blue' : 'default']" @click="setOpenType(1)">自定义</button>
+            </view>
+          </tui-list-cell>
+          <template v-if="openTimeVisible">
+            <view class="open-time-wheel-section">
+              <view class="open-time-wheel-row">
+                <view class="open-time-wheel-col">
+                  <view class="open-time-wheel-label">开店时间</view>
+                  <view class="open-time-wheel-value">{{ start_time }}</view>
+                  <open-time-wheel :value="start_time" @change="onStartTimeChange" />
+                </view>
+                <view class="open-time-wheel-split"></view>
+                <view class="open-time-wheel-col">
+                  <view class="open-time-wheel-label">关店时间</view>
+                  <view class="open-time-wheel-value">{{ end_time }}</view>
+                  <open-time-wheel :value="end_time" @change="onEndTimeChange" />
+                </view>
+              </view>
+            </view>
+          </template>
+        </template>
+      </view>
+      <view class="open-time-actions">
+        <button class="admin-button-com big default open-time-btn" @click="close">取消</button>
+        <button class="admin-button-com big blue open-time-btn" @click="submitOpenTime">保存</button>
+      </view>
+    </view>
+  </uni-popup>
+</template>
+
+<script>
+import { mapGetters } from 'vuex'
+import { getDetail, updateShopOpenTime } from '@/api/shop'
+import TuiListCell from '@/components/plugin/list-cell'
+import OpenTimeWheel from '@/components/module/open-time-wheel.vue'
+
+export default {
+  name: 'ShopOpenTimePopup',
+  components: {
+    TuiListCell,
+    OpenTimeWheel
+  },
+  data() {
+    return {
+      visible: true,
+      openTimeVisible: false,
+      start_time: '09:00',
+      end_time: '18:00',
+      openForm: {
+        id: 0,
+        open: 1,
+        openType: 0,
+        openStartTime: '',
+        openEndTime: ''
+      },
+      openTimeLoading: false
+    }
+  },
+  computed: {
+    ...mapGetters({ loginInfo: 'getLoginInfo' })
+  },
+  methods: {
+    open() {
+      const shopId = this.loginInfo && this.loginInfo.shopId
+      if (!shopId) {
+        this.$msg('未获取到门店信息')
+        return
+      }
+      if (this.openTimeLoading) {
+        return
+      }
+      this.openTimeLoading = true
+      getDetail({ shopId }).then(res => {
+        const data = res.data && res.data.info
+        if (this.$util.isEmpty(data)) {
+          this.$msg('获取门店详情失败')
+          return
+        }
+        this.applyOpenTimeData(data)
+        this.$nextTick(() => {
+          this.$refs.openTimeRef && this.$refs.openTimeRef.open()
+        })
+      }).catch(() => {
+        this.$msg('获取门店详情失败')
+      }).finally(() => {
+        this.openTimeLoading = false
+      })
+    },
+    applyOpenTimeData(data) {
+      this.openForm.id = data.id
+      this.openForm.open = data.open == null ? 1 : Number(data.open)
+      this.visible = this.openForm.open === 1
+      this.openForm.openType = 1
+      this.openTimeVisible = true
+      this.start_time = data.openStartTime || '09:00'
+      this.end_time = data.openEndTime || '18:00'
+      this.openForm.openStartTime = this.start_time
+      this.openForm.openEndTime = this.end_time
+      if (!data.openStartTime) {
+        this.openTimeVisible = false
+        this.openForm.openType = 0
+        this.start_time = '09:00'
+        this.openForm.openStartTime = this.start_time
+      }
+      if (!data.openEndTime) {
+        this.end_time = '18:00'
+        this.openForm.openEndTime = this.end_time
+      }
+    },
+    close() {
+      this.$refs.openTimeRef.close()
+    },
+    setOpenStatus(value) {
+      const selected = Number(value)
+      this.visible = selected === 1
+      this.openForm.open = selected
+    },
+    setOpenType(value) {
+      const selected = Number(value)
+      this.openTimeVisible = selected === 1
+      this.openForm.openType = selected === 0 ? 0 : 1
+      if (this.openTimeVisible) {
+        this.start_time = '09:00'
+        this.end_time = '18:00'
+        this.openForm.openStartTime = this.start_time
+        this.openForm.openEndTime = this.end_time
+      }
+    },
+    onStartTimeChange(time) {
+      this.start_time = time
+      this.openForm.openStartTime = time
+    },
+    onEndTimeChange(time) {
+      this.end_time = time
+      this.openForm.openEndTime = time
+    },
+    submitOpenTime() {
+      if (!this.openForm.id) {
+        this.$msg('门店信息异常')
+        return
+      }
+      const payload = {
+        shopId: this.openForm.id,
+        open: this.openForm.open,
+        openType: this.openForm.openType
+      }
+      if (this.openForm.openType === 1) {
+        payload.openStartTime = this.openForm.openStartTime
+        payload.openEndTime = this.openForm.openEndTime
+      } else {
+        payload.openStartTime = ''
+        payload.openEndTime = ''
+      }
+      updateShopOpenTime(payload).then(() => {
+        this.$msg('修改成功')
+        this.close()
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.open-time-popup {
+  z-index: 99999;
+  border-radius: 20upx;
+}
+.open-time-panel {
+  width: 640upx;
+  max-width: 90vw;
+  padding: 30upx 20upx 20upx;
+  box-sizing: border-box;
+}
+.open-time-title {
+  font-size: 34upx;
+  font-weight: bold;
+  text-align: center;
+  margin-bottom: 20upx;
+}
+.open-time-actions {
+  display: flex;
+  align-items: center;
+  margin-top: 30upx;
+  padding: 0 10upx;
+}
+.open-time-btn {
+  flex: 1;
+  margin: 0;
+}
+.open-time-btn + .open-time-btn {
+  margin-left: 20upx;
+}
+.select-button-wrap {
+  display: flex;
+  align-items: center;
+  .admin-button-com {
+    width: 150upx;
+    margin: 0;
+  }
+  .admin-button-com + .admin-button-com {
+    margin-left: 15upx;
+  }
+}
+.time-button-wrap {
+  .admin-button-com {
+    width: 150upx;
+  }
+}
+.open-time-wheel-section {
+  padding: 10upx 0 0;
+}
+.open-time-wheel-row {
+  display: flex;
+  align-items: stretch;
+}
+.open-time-wheel-col {
+  flex: 1;
+  min-width: 0;
+}
+.open-time-wheel-split {
+  width: 1upx;
+  margin: 20upx 0;
+  background-color: #eeeeee;
+}
+.open-time-wheel-label {
+  text-align: center;
+  font-size: 28upx;
+  color: #666666;
+}
+.open-time-wheel-value {
+  text-align: center;
+  font-size: 34upx;
+  font-weight: 600;
+  color: #3385FF;
+  margin-top: 8upx;
+  margin-bottom: 6upx;
+}
+</style>