From 3e84978d39cf6399e2335f9a5b10ca144ee9f606 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 07 十一月 2024 14:28:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 h5/pages/staff/vehicle/shiwai.vue                            |   44 +
 admin/src/views/vehicle/category.vue                         |   18 
 h5/utils/service.js                                          |    2 
 h5/pages/staff/vehicle/shinei.vue                            |  835 +++++++++++++++++++++++++-----------------------
 screen/src/views/SecurityControl.vue                         |    1 
 admin/src/api/business/category.js                           |    8 
 admin/src/components/operation/OperCarUseBookParamWindow.vue |   14 
 screen/src/assets/base.css                                   |   13 
 admin/src/views/vehicle/cars.vue                             |    2 
 screen/src/views/LogisticsCenter.vue                         |    4 
 admin/public/template/cars.xlsx                              |    0 
 admin/src/components/business/OperaCarUseBookWindow.vue      |    4 
 admin/src/views/operation/serviceCar/apprRecord.vue          |   10 
 h5/pages/staff/vehicle/apply.vue                             |    2 
 screen/src/views/FireFighting.vue                            |    9 
 15 files changed, 530 insertions(+), 436 deletions(-)

diff --git a/admin/public/template/cars.xlsx b/admin/public/template/cars.xlsx
index 96713fd..1b3c485 100644
--- a/admin/public/template/cars.xlsx
+++ b/admin/public/template/cars.xlsx
Binary files differ
diff --git a/admin/src/api/business/category.js b/admin/src/api/business/category.js
index 76cddde..8582179 100644
--- a/admin/src/api/business/category.js
+++ b/admin/src/api/business/category.js
@@ -12,7 +12,13 @@
     trim: true
   })
 }
-
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/category/exportChildExcel', data, {
+    trim: true,
+    download: true
+  })
+}
 // 鍒涘缓
 export function create (data) {
   return request.post('/visitsAdmin/cloudService/business/category/create', data)
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
index 41c721b..fe82ece 100644
--- a/admin/src/components/business/OperaCarUseBookWindow.vue
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -52,11 +52,11 @@
             </div>
             <div class="item">
               <div class="label">棰勮鍑哄彂鏃堕棿</div>
-              <div class="value">{{ model.planUseDate || '' }}</div>
+              <div class="value" v-if="model.planUseDate">{{ model.planUseDate.slice(0,16) }}</div>
             </div>
             <div class="item">
               <div class="label">鐢ㄨ溅鏃舵</div>
-              <div class="value">濮�:{{ model.startTime || '' }}<br>姝�:{{ model.endTime || '' }}</div>
+              <div class="value">濮�:<span v-if="model.startTime">{{ model.startTime.slice(0,16) }}</span><br>姝�:<span v-if="model.endTime">{{ model.endTime.slice(0,16) }}</span></div>
             </div>
           </div>
         </div>
diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue
index 5e67444..f4120a7 100644
--- a/admin/src/components/operation/OperCarUseBookParamWindow.vue
+++ b/admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -139,7 +139,10 @@
       </div>
 
       <span slot="footer" class="dialog-footer">
-        <div>宸查�夋嫨锛歿{ selDatetime }}</div>
+        <div style="text-align: left;">
+          <div>宸查�夋嫨锛歿{ selDatetime }}</div>
+          <div class="red">{{ selPastDatetime }}</div>
+        </div>
         <div class="btn" :class="{ disable: info && info.length > 0 }" @click="subTime">纭鏃堕棿</div>
       </span>
     </el-dialog>
@@ -376,7 +379,6 @@
         })
       }
       console.log('form', this.form)
-
     },
     datetimeClick(item, index) {
       if (item.carUseBookId) {
@@ -443,8 +445,14 @@
       if (str && str == 1) {
         this.$set(this.form, 'endTime', '')
       }
+
       if (form.startTime && form.endTime) {
         this.selDatetime = form.startTime + ' - ' + form.endTime
+        if(new Date(form.startTime).getTime() < new Date().getTime()){
+          this.selPastDatetime = '褰撳墠閫夋嫨鍖呭惈宸茬粡杩囧幓鏃堕棿锛岃纭鍚庡啀鎻愪氦锛�'
+        }else{
+          this.selPastDatetime = ''
+        }
         carUseBookList({
           carId: form.carId,
           startTime: form.startTime + ':00',
@@ -452,6 +460,8 @@
         }).then(res => {
           this.info = res || []
         })
+      }else{
+        this.selPastDatetime = ''
       }
     },
     gettimes() {
diff --git a/admin/src/views/operation/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index f8099c4..3700bac 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -136,16 +136,20 @@
         ></el-table-column>
         <el-table-column label="鐢ㄨ溅鏃堕棿" min-width="170px">
           <template slot-scope="{ row }">
-            <span>璧�:{{ row.startTime || "" }}</span
+            <span v-if="row.startTime">璧�:{{ row.startTime.slice(0,16) }}</span
             ><br />
-            <span>姝�:{{ row.endTime || "" }}</span>
+            <span v-if="row.endTime">姝�:{{ row.endTime.slice(0,16) }}</span>
           </template>
         </el-table-column>
         <el-table-column
           prop="planUseDate"
           label="鍑哄彂鏃堕棿"
           min-width="150px"
-        ></el-table-column>
+        >
+        <template slot-scope="{ row }">
+          <span v-if="row.planUseDate">{{ row.planUseDate.slice(0,16) }}</span>
+        </template>
+      </el-table-column>
         <el-table-column label="鐩殑鍦�" min-width="200px">
           <template slot-scope="{ row }">
             <span class="status-green" v-if="row.type === 0">銆愬競鍐呫��</span>
diff --git a/admin/src/views/vehicle/cars.vue b/admin/src/views/vehicle/cars.vue
index 415f184..cddc4f7 100644
--- a/admin/src/views/vehicle/cars.vue
+++ b/admin/src/views/vehicle/cars.vue
@@ -10,7 +10,7 @@
           @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="" prop="catePName" title="鍒嗙被鍚嶇О">
-        <el-cascader v-model="searchForm.cateIds" @change="changeSel" clearable :options="cateList" :props="{
+        <el-cascader v-model="searchForm.cateIds" @change="changeSel" placeholder="璇烽�夋嫨鍒嗙被" clearable :options="cateList" :props="{
           label: 'name',
           value: 'id',
           children: 'childCategoryList',
diff --git a/admin/src/views/vehicle/category.vue b/admin/src/views/vehicle/category.vue
index 73b3540..ecf4b97 100644
--- a/admin/src/views/vehicle/category.vue
+++ b/admin/src/views/vehicle/category.vue
@@ -18,8 +18,11 @@
             <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']">
                 <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus"
                         v-permissions="['business:category:create']">鏂板缓</el-button></li>
+                <li v-permissions="['business:category:exportExcel']"><el-button type="primary" @click="exportExcel"
+                        >瀵煎嚭</el-button></li>
             </ul>
-            <el-table row-key="id" :tree-props="{children: 'childCategoryList'}" v-loading="isWorking.search" :data="dataList" stripe @selection-change="handleSelectionChange">
+            <el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
+                :data="dataList" stripe @selection-change="handleSelectionChange">
                 <el-table-column prop="name" label="鍒嗙被鍚嶇О" min-width="100px"></el-table-column>
                 <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column>
                 <!-- <el-table-column prop="status" label="鐘舵��" min-width="100px">
@@ -27,7 +30,7 @@
                         <span v-if="row.status === 0">鍚敤</span>
                         <span v-if="row.status === 1">绂佺敤</span>
                     </template>
-                </el-table-column> -->
+</el-table-column> -->
                 <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
                 <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])"
                     label="鎿嶄綔" min-width="120" fixed="right">
@@ -43,7 +46,8 @@
             </pagination>
         </template>
         <!-- 鏂板缓/淇敼 -->
-        <OperaCategoryWindow v-if="isShowEdit" @close="isShowEdit = false" ref="operaCategoryWindow" @success="getList" />
+        <OperaCategoryWindow v-if="isShowEdit" @close="isShowEdit = false" ref="operaCategoryWindow"
+            @success="getList" />
     </TableLayout>
 </template>
 
@@ -74,6 +78,12 @@
         }
     },
     created() {
+        this.config({
+      module: '杞﹁締淇℃伅琛�',
+      api: '/business/category',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
         this.getList()
     },
     methods: {
@@ -83,7 +93,7 @@
             this.$nextTick(() => {
                 this.$refs.operaCategoryWindow.open(str)
                 this.$refs.operaCategoryWindow.getList()
-                if(row && row.id){
+                if (row && row.id) {
                     this.$refs.operaCategoryWindow.getDetail(row.id)
                 }
             })
diff --git a/h5/pages/staff/vehicle/apply.vue b/h5/pages/staff/vehicle/apply.vue
index 87d9c52..2007cfa 100644
--- a/h5/pages/staff/vehicle/apply.vue
+++ b/h5/pages/staff/vehicle/apply.vue
@@ -172,7 +172,7 @@
     console.log(option)
     this.param = { ...option }
     this.minDate = new Date().getTime()
-
+		this.param.planUseDate = dayjs(this.param.startTime).format('YYYY-MM-DD HH:mm')
   },
   methods: {
     handleSub() {
diff --git a/h5/pages/staff/vehicle/shinei.vue b/h5/pages/staff/vehicle/shinei.vue
index 35e29fe..35d1c20 100644
--- a/h5/pages/staff/vehicle/shinei.vue
+++ b/h5/pages/staff/vehicle/shinei.vue
@@ -1,398 +1,437 @@
-<template>
-  <view class="main_app">
-    <view class="app_header">
-      <view class="item" @click="isShowCar = true">
-        <text v-if="param.carCode">{{ param.carCode }}</text>
-        <text v-else class="placeholder9">閫夋嫨杞﹁締</text>
-        <u-icon name="arrow-down" color="#999999" />
-      </view>
-      <view class="item" @click="isShowDate = true">
-        <text v-if="param.queryDate">{{ param.queryDate }}</text>
-        <text v-else class="placeholder9">閫夋嫨鏃ユ湡</text>
-        <u-icon name="arrow-down" color="#999999" />
-      </view>
-    </view>
-    <!--  -->
-    <view class="time_list">
-      <view
-        class="item"
-        :class="{
-          disable: item.isUse == 1,
-          active: item.checked == '1',
-          hasSub: item.carUseBookId,
-        }"
-        @click="datetimeClick(item, i)"
-        v-for="(item, i) in timeList"
-        :key="i"
-        >{{ item.startHours }}-{{ item.endHours }}</view
-      >
-    </view>
-    <!--  -->
-    <view class="main_footer">
-      <view class="df_ac">
-        <view>宸查�夋嫨锛�</view>
-        <view class="sel_time">{{ selDatetime }}</view>
-      </view>
-      <view class="btns">
-        <view class="left">
-          <view class="item" v-for="item in colorOptions" :key="item.name">
-            <view class="box" :style="{ background: item.color }"></view>
-            <view class="">{{ item.name }}</view>
-          </view>
-        </view>
-        <view class="sub" @click="onSubmit">纭棰勭害</view>
-      </view>
-    </view>
-    <!--  -->
-    <!-- 閫夋嫨杞﹁締 -->
-    <u-picker
-      keyName="code"
-      :show="isShowCar"
-      :columns="carsList"
-      @confirm="seletedCar"
-      @cancel="isShowCar = false"
-    ></u-picker>
-    <!-- 鏃ユ湡 -->
-    <u-datetime-picker
-      :show="isShowDate"
-      :minDate="minDate"
-      @confirm="confirmDate"
-      @cancel="isShowDate = false"
-      mode="date"
-    ></u-datetime-picker>
-    <!-- 璇︽儏 -->
-    <u-popup
-      :show="isShowDetail"
-      :round="12"
-      mode="bottom"
-      @close="isShowDetail = false"
-    >
-      <view class="detail_modal">
-        <view class="title">杞﹁締棰勭害鎯呭喌</view>
-        <view class="h1">{{ activeInfo.carCode }}</view>
-        <view class="line">
-          <view class="label">棰勮鐢ㄨ溅鏃舵</view>
-          <view class="value" v-if="activeInfo.startTime"
-            >{{ activeInfo.startTime.slice(5, 16) }} -
-            {{ activeInfo.endTime.slice(5, 16) }}</view
-          >
-        </view>
-        <view class="line">
-          <view class="label">鐩殑鍦�</view>
-          <view class="value">{{ activeInfo.addr }}</view>
-        </view>
-        <view class="line">
-          <view class="label">涔樿溅浜烘暟</view>
-          <view class="value" v-if="activeInfo.memberIds"
-            >{{ activeInfo.memberIds.split(",").length }}浜�</view
-          >
-        </view>
-        <view class="line">
-          <view class="label">鐢ㄨ溅浜嬬敱</view>
-          <view class="value">{{ activeInfo.content || "" }}</view>
-        </view>
-        <view class="line">
-          <view class="label">鐢宠浜�</view>
-          <view class="value"
-            >{{ activeInfo.memberName }}
-            <text class="primaryColor ml12">{{
-              activeInfo.memberPhone
-            }}</text></view
-          >
-        </view>
-        <view class="btn" @click="isShowDetail = false">鍏抽棴</view>
-      </view>
-    </u-popup>
-  </view>
-</template>
-
-<script>
-import dayjs from 'dayjs'
-import { getCarsList, carCanReservationDate, carUseBookDetail } from '@/api'
-export default {
-  data() {
-    return {
-      isShowCar: false,
-      isShowDate: false,
-      param: {},
-      isShowDetail: false,
-      activeInfo: {},
-
-      minDate: '',
-      carsList: [[{ name: 'aa', value: '11' }]],
-      timeList: [],
-      selDatetime: '',
-
-      colorOptions: [
-        { color: this.$store.state.primaryColor, name: '宸查�夋嫨' },
-        { color: '#F7F7F7', name: '鍙绾�' },
-        { color: '#cccccc', name: '涓嶅彲棰勭害' },
-      ]
-    }
-  },
-  onLoad() {
-    this.minDate = new Date().getTime()
-    this.initData()
-  },
-  methods: {
-    onSubmit() {
-      const { param } = this
-      const selTimeList = this.timeList.filter(i => i.checked == '1')
-      if (selTimeList.length == 0) {
-        return uni.showToast({
-          title: '璇峰厛閫夋嫨鐢ㄨ溅鏃堕棿娈�',
-          icon: 'none'
-        })
-      }
-      const obj = {
-        carCode: param.carCode,
-        carId: param.carId,
-        startTime: selTimeList[0].startTime,
-        endTime: selTimeList[selTimeList.length - 1].endTime,
-        dateDay: param.queryDate,
-        type: '0'
-      }
-      uni.navigateTo({
-        url: `/pages/staff/vehicle/apply?carCode=${obj.carCode}&carId=${obj.carId}&startTime=${obj.startTime}&endTime=${obj.endTime}&dateDay=${obj.dateDay}&type=${obj.type}`
-      })
-      // this.$jump('/pages/staff/vehicle/apply')
-    },
-    datetimeClick(item, index) {
-      if (item.carUseBookId) {
-        this.getDetail(item.carUseBookId)
-        return
-      }
-      if (item.isUse == '1') return
-      const { timeList } = this
-      const selTimeList = timeList.filter(i => i.checked == '1')
-      if (selTimeList.length === 0) {
-        this.timeList.forEach((ite, i) => {
-          if (i === index) {
-            ite.checked = '1'
-            this.$forceUpdate()
-          }
-        })
-      } else {
-        const findIndex = selTimeList.findIndex(i => i.index === index)
-        console.log('findIndex', findIndex)
-        if (findIndex === -1) {
-          const startNum = index - selTimeList[0].index
-          const endNum = index - selTimeList[selTimeList.length - 1].index
-          if (startNum == 1 || startNum == -1 || endNum == 1 || endNum == -1) {
-            console.log('鐩搁偦')
-            item.checked = true
-            this.$forceUpdate()
-          } else {
-            return uni.showToast({
-              title: '璇烽�夋嫨鐩搁偦鐨勬椂闂存',
-              icon: 'none'
-            })
-          }
-        } else {
-          if (index === selTimeList[0].index || index === selTimeList[selTimeList.length - 1].index) {
-            item.checked = false
-            this.$forceUpdate()
-          } else {
-            return uni.showToast({
-              title: '璇峰厛鍙栨秷鏈�澶栧眰鐨勬椂闂存',
-              icon: 'none'
-            })
-          }
-
-        }
-      }
-      const selTimeLists = this.timeList.filter(i => i.checked == '1')
-      // console.log('selTimeList', selTimeList);
-      if (selTimeLists.length === 0) {
-        this.selDatetime = ''
-      } else {
-        this.selDatetime = this.param.queryDate.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[selTimeLists.length - 1].endHours
-      }
-    },
-    getDetail(id) {
-      carUseBookDetail(
-        id
-      ).then(res => {
-        this.activeInfo = res.data
-        this.isShowDetail = true
-      })
-    },
-    confirmDate(e) {
-      this.param.queryDate = dayjs(e.value).format('YYYY-MM-DD')
-      this.isShowDate = false
-      if (this.param.carId && this.param.queryDate) {
-        this.gettimes()
-      }
-    },
-    initData() {
-      getCarsList({
-        type: 0
-      }).then(res => {
-        this.carsList = [res.data]
-      })
-    },
-    gettimes() {
-      const { param } = this
-      carCanReservationDate({
-        dateDay: param.queryDate,
-        carId: param.carId
-      }).then(res => {
-        if (res.code === 200) {
-          this.timeList = res.data || []
-          this.timeList.forEach((i, j) => {
-            i.checked = '0',
-              i.index = j
-            if (dayjs().format('YYYY-MM-DD') == param.queryDate) {
-              let endTime = new Date(i.endTime).getTime()
-              let nowTime = new Date().getTime()
-              if (endTime < nowTime) {
-                i.isUse = 1
-              }
-            }
-          })
-        }
-      })
-    },
-    seletedCar(e) {
-      const item = e.value[0]
-      this.$set(this.param, 'carCode', item.code)
-      this.$set(this.param, 'carId', item.id)
-      if (this.param.carId && this.param.queryDate) {
-        this.gettimes()
-      }
-      this.isShowCar = false
-    }
-  }
-};
-</script>
-
-<style lang="scss">
-.main_app {
-  .app_header {
-    display: flex;
-    align-items: center;
-    margin: 0 -15rpx;
-    .item {
-      width: 330rpx;
-      height: 72rpx;
-      margin: 15rpx;
-      padding: 0 30rpx;
-      border-radius: 36rpx;
-      border: 1rpx solid #e5e5e5;
-      display: flex;
-      align-items: center;
-      justify-content: space-between;
-      align-items: center;
-    }
-  }
-  .main_footer {
-    position: absolute;
-    width: 100%;
-    left: 0;
-    bottom: 0;
-    padding: 20rpx 30rpx 84rpx;
-    box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
-    .sel_time {
-      color: $uni-color-primary;
-    }
-    .btns {
-      margin-top: 10rpx;
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      .left {
-        display: flex;
-        .item {
-          display: flex;
-          align-items: center;
-          margin-right: 20rpx;
-          .box {
-            margin-right: 10rpx;
-            width: 32rpx;
-            height: 32rpx;
-          }
-        }
-      }
-      .sub {
-        width: 184rpx;
-        height: 72rpx;
-        line-height: 72rpx;
-        text-align: center;
-        background: $uni-color-primary;
-        box-shadow: 0rpx -1rpx 0rpx 0rpx #eeeeee;
-        border-radius: 36rpx;
-        font-size: 30rpx;
-        color: #ffffff;
-      }
-    }
-  }
-  .time_list {
-    display: flex;
-    padding: 30rpx 0 240rpx;
-    flex-wrap: wrap;
-    .item {
-      width: 220rpx;
-      height: 80rpx;
-      line-height: 80rpx;
-      text-align: center;
-      background: #f7f7f7;
-      border-radius: 4rpx;
-      margin-bottom: 24rpx;
-      font-size: 30rpx;
-      margin-right: 15rpx;
-      &:nth-of-type(3n) {
-        margin-right: 0;
-      }
-    }
-    .active {
-      background-color: $uni-color-primary;
-      color: #fff;
-    }
-    .disable {
-      background: #f7f7f7;
-      color: #cccccc;
-    }
-    .hasSub {
-      color: #fff;
-      background: #cccccc;
-    }
-  }
-}
-.detail_modal {
-  padding: 40rpx 30rpx;
-  .title {
-    text-align: center;
-    font-weight: 600;
-    font-size: 32rpx;
-    margin-bottom: 40rpx;
-  }
-  .h1 {
-    font-weight: 600;
-    font-size: 32rpx;
-    margin-bottom: 30rpx;
-  }
-  .line {
-    display: flex;
-    margin-bottom: 20rpx;
-    .label {
-      width: 180rpx;
-      color: #888888;
-    }
-    .value {
-      color: #333333;
-    }
-  }
-  .btn {
-    margin-top: 230rpx;
-    width: 690rpx;
-    height: 88rpx;
-    line-height: 88rpx;
-    text-align: center;
-    background: $uni-color-primary;
-    border-radius: 44rpx;
-    font-weight: 600;
-    font-size: 32rpx;
-    color: #ffffff;
-  }
-}
-</style>
+<template>
+	<view class="main_app">
+		<view class="app_header">
+			<view class="item" @click="isShowCar = true">
+				<text v-if="param.carCode">{{ param.carCode }}</text>
+				<text v-else class="placeholder9">閫夋嫨杞﹁締</text>
+				<u-icon name="arrow-down" color="#999999" />
+			</view>
+			<view class="item" @click="showDate">
+				<text v-if="param.queryDate">{{ param.queryDate }}</text>
+				<text v-else class="placeholder9">閫夋嫨鏃ユ湡</text>
+				<u-icon name="arrow-down" color="#999999" />
+			</view>
+		</view>
+		<!-- pastFlag -->
+		<view class="time_list">
+			<view class="item" :class="{
+          disable: item.pastFlag,
+          active: item.checked == '1',
+          hasSub: item.carUseBookId,
+        }" @click="datetimeClick(item, i)" v-for="(item, i) in timeList" :key="i">
+				{{ item.startHours }}-{{ item.endHours }}
+			</view>
+		</view>
+		<!--  -->
+		<view class="main_footer">
+			<view class="df_ac">
+				<view>宸查�夋嫨锛�</view>
+				<view class="sel_time">{{ selDatetime }}</view>
+			</view>
+			<view class="df_ac red">
+				{{selPastDatetime}}
+			</view>
+			<view class="btns">
+				<view class="left">
+					<view class="item" v-for="item in colorOptions" :key="item.name">
+						<view class="box" :style="{ background: item.color }"></view>
+						<view class="">{{ item.name }}</view>
+					</view>
+				</view>
+				<view class="sub" @click="onSubmit">纭棰勭害</view>
+			</view>
+		</view>
+		<!--  -->
+		<!-- 閫夋嫨杞﹁締 -->
+		<u-picker keyName="code" :show="isShowCar" :columns="carsList" @confirm="seletedCar"
+			@cancel="isShowCar = false"></u-picker>
+		<!-- 鏃ユ湡 -->
+		<u-datetime-picker ref="startPick" :show="isShowDate" :minDate="minDate" @confirm="confirmDate"
+			@cancel="isShowDate = false" mode="date"></u-datetime-picker>
+		<!-- 璇︽儏 -->
+		<u-popup :show="isShowDetail" :round="12" mode="bottom" @close="isShowDetail = false">
+			<view class="detail_modal">
+				<view class="title">杞﹁締棰勭害鎯呭喌</view>
+				<view class="h1">{{ activeInfo.carCode }}</view>
+				<view class="line">
+					<view class="label">棰勮鐢ㄨ溅鏃舵</view>
+					<view class="value" v-if="activeInfo.startTime">{{ activeInfo.startTime.slice(5, 16) }} -
+						{{ activeInfo.endTime.slice(5, 16) }}
+					</view>
+				</view>
+				<view class="line">
+					<view class="label">鐩殑鍦�</view>
+					<view class="value">{{ activeInfo.addr }}</view>
+				</view>
+				<view class="line">
+					<view class="label">涔樿溅浜烘暟</view>
+					<view class="value" v-if="activeInfo.memberIds">{{ activeInfo.memberIds.split(",").length }}浜�</view>
+				</view>
+				<view class="line">
+					<view class="label">鐢ㄨ溅浜嬬敱</view>
+					<view class="value">{{ activeInfo.content || "" }}</view>
+				</view>
+				<view class="line">
+					<view class="label">鐢宠浜�</view>
+					<view class="value">{{ activeInfo.memberName }}
+						<text class="primaryColor ml12">{{
+              activeInfo.memberPhone
+            }}</text>
+					</view>
+				</view>
+				<view class="btn" @click="isShowDetail = false">鍏抽棴</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import dayjs from 'dayjs'
+	import {
+		getCarsList,
+		carCanReservationDate,
+		carUseBookDetail
+	} from '@/api'
+	export default {
+		data() {
+			return {
+				isShowCar: false,
+				isShowDate: false,
+				param: {},
+				isShowDetail: false,
+				activeInfo: {},
+
+				minDate: '',
+				carsList: [
+					[{
+						name: 'aa',
+						value: '11'
+					}]
+				],
+				timeList: [],
+				selDatetime: '',
+				selPastDatetime: '',
+
+				colorOptions: [{
+						color: this.$store.state.primaryColor,
+						name: '宸查�夋嫨'
+					},
+					{
+						color: '#F7F7F7',
+						name: '鍙绾�'
+					},
+					{
+						color: '#cccccc',
+						name: '涓嶅彲棰勭害'
+					},
+				]
+			}
+		},
+		onLoad() {
+			this.minDate = new Date().getTime() - (6 * 24 * 60 * 60 * 1000)
+			this.initData()
+		},
+		methods: {
+			onSubmit() {
+				const {
+					param
+				} = this
+				const selTimeList = this.timeList.filter(i => i.checked == '1')
+				if (selTimeList.length == 0) {
+					return uni.showToast({
+						title: '璇峰厛閫夋嫨鐢ㄨ溅鏃堕棿娈�',
+						icon: 'none'
+					})
+				}
+				const obj = {
+					carCode: param.carCode,
+					carId: param.carId,
+					startTime: selTimeList[0].startTime,
+					endTime: selTimeList[selTimeList.length - 1].endTime,
+					dateDay: param.queryDate,
+					type: '0'
+				}
+				uni.navigateTo({
+					url: `/pages/staff/vehicle/apply?carCode=${obj.carCode}&carId=${obj.carId}&startTime=${obj.startTime}&endTime=${obj.endTime}&dateDay=${obj.dateDay}&type=${obj.type}`
+				})
+				// this.$jump('/pages/staff/vehicle/apply')
+			},
+			showDate() {
+				this.isShowDate = true
+				if (!this.param.queryDate) {
+					this.$refs.startPick.innerValue = new Date().getTime()
+				}
+			},
+			datetimeClick(item, index) {
+				if (item.carUseBookId) {
+					this.getDetail(item.carUseBookId)
+					return
+				}
+				if (item.isUse == '1') return
+				const {
+					timeList
+				} = this
+				const selTimeList = timeList.filter(i => i.checked == '1')
+				if (selTimeList.length === 0) {
+					this.timeList.forEach((ite, i) => {
+						if (i === index) {
+							ite.checked = '1'
+							this.$forceUpdate()
+						}
+					})
+				} else {
+					const findIndex = selTimeList.findIndex(i => i.index === index)
+					console.log('findIndex', findIndex)
+					if (findIndex === -1) {
+						const startNum = index - selTimeList[0].index
+						const endNum = index - selTimeList[selTimeList.length - 1].index
+						if (startNum == 1 || startNum == -1 || endNum == 1 || endNum == -1) {
+							console.log('鐩搁偦')
+							item.checked = true
+							this.$forceUpdate()
+						} else {
+							return uni.showToast({
+								title: '璇烽�夋嫨鐩搁偦鐨勬椂闂存',
+								icon: 'none'
+							})
+						}
+					} else {
+						if (index === selTimeList[0].index || index === selTimeList[selTimeList.length - 1].index) {
+							item.checked = false
+							this.$forceUpdate()
+						} else {
+							return uni.showToast({
+								title: '璇峰厛鍙栨秷鏈�澶栧眰鐨勬椂闂存',
+								icon: 'none'
+							})
+						}
+
+					}
+				}
+				const selTimeLists = this.timeList.filter(i => i.checked == '1')
+				// console.log('selTimeList', selTimeList);
+				if (selTimeLists.length === 0) {
+					this.selDatetime = ''
+					this.selPastDatetime = ''
+				} else {
+					let pastList = selTimeLists.filter(i => i.pastFlag)
+					if (pastList.length > 0) {
+						this.selPastDatetime = '褰撳墠閫夋嫨鍖呭惈宸茬粡杩囧幓鏃堕棿锛岃纭鍚庡啀鎻愪氦锛�'
+					} else {
+						this.selPastDatetime = ''
+					}
+					this.selDatetime = this.param.queryDate.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[
+						selTimeLists.length - 1].endHours
+				}
+			},
+			getDetail(id) {
+				carUseBookDetail(
+					id
+				).then(res => {
+					this.activeInfo = res.data
+					this.isShowDetail = true
+				})
+			},
+			confirmDate(e) {
+				this.param.queryDate = dayjs(e.value).format('YYYY-MM-DD')
+				this.isShowDate = false
+				if (this.param.carId && this.param.queryDate) {
+					this.gettimes()
+				}
+			},
+			initData() {
+				getCarsList({
+					type: 0
+				}).then(res => {
+					this.carsList = [res.data]
+				})
+			},
+			gettimes() {
+				const {
+					param
+				} = this
+				carCanReservationDate({
+					dateDay: param.queryDate,
+					carId: param.carId
+				}).then(res => {
+					if (res.code === 200) {
+						this.timeList = res.data || []
+						this.timeList.forEach((i, j) => {
+							i.checked = '0',
+								i.index = j
+							// if (dayjs().format('YYYY-MM-DD') == param.queryDate) {
+							// let endTime = new Date(i.endTime).getTime()
+							// let nowTime = new Date().getTime()
+							i.pastFlag = new Date().getTime() > new Date(i.startTime).getTime()
+							// if (endTime < nowTime) {
+							//   i.isUse = 1
+							// }
+							// }
+						})
+					}
+				})
+			},
+			seletedCar(e) {
+				const item = e.value[0]
+				this.$set(this.param, 'carCode', item.code)
+				this.$set(this.param, 'carId', item.id)
+				if (this.param.carId && this.param.queryDate) {
+					this.gettimes()
+				}
+				this.isShowCar = false
+			}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.main_app {
+		.app_header {
+			display: flex;
+			align-items: center;
+			margin: 0 -15rpx;
+
+			.item {
+				width: 330rpx;
+				height: 72rpx;
+				margin: 15rpx;
+				padding: 0 30rpx;
+				border-radius: 36rpx;
+				border: 1rpx solid #e5e5e5;
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				align-items: center;
+			}
+		}
+
+		.main_footer {
+			position: absolute;
+			width: 100%;
+			left: 0;
+			bottom: 0;
+			padding: 20rpx 30rpx 84rpx;
+			box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
+
+			.sel_time {
+				color: $uni-color-primary;
+			}
+
+			.btns {
+				margin-top: 10rpx;
+				display: flex;
+				justify-content: space-between;
+				align-items: center;
+
+				.left {
+					display: flex;
+
+					.item {
+						display: flex;
+						align-items: center;
+						margin-right: 20rpx;
+
+						.box {
+							margin-right: 10rpx;
+							width: 32rpx;
+							height: 32rpx;
+						}
+					}
+				}
+
+				.sub {
+					width: 184rpx;
+					height: 72rpx;
+					line-height: 72rpx;
+					text-align: center;
+					background: $uni-color-primary;
+					box-shadow: 0rpx -1rpx 0rpx 0rpx #eeeeee;
+					border-radius: 36rpx;
+					font-size: 30rpx;
+					color: #ffffff;
+				}
+			}
+		}
+
+		.time_list {
+			display: flex;
+			padding: 30rpx 0 240rpx;
+			flex-wrap: wrap;
+
+			.item {
+				width: 220rpx;
+				height: 80rpx;
+				line-height: 80rpx;
+				text-align: center;
+				background: #f7f7f7;
+				border-radius: 4rpx;
+				margin-bottom: 24rpx;
+				font-size: 30rpx;
+				margin-right: 15rpx;
+
+				&:nth-of-type(3n) {
+					margin-right: 0;
+				}
+			}
+
+			.disable {
+				background: #f7f7f7;
+				color: #cccccc;
+			}
+
+			.active {
+				background-color: $uni-color-primary;
+				color: #fff;
+			}
+
+			.hasSub {
+				color: #999999;
+				background: #cccccc;
+			}
+		}
+	}
+
+	.detail_modal {
+		padding: 40rpx 30rpx;
+
+		.title {
+			text-align: center;
+			font-weight: 600;
+			font-size: 32rpx;
+			margin-bottom: 40rpx;
+		}
+
+		.h1 {
+			font-weight: 600;
+			font-size: 32rpx;
+			margin-bottom: 30rpx;
+		}
+
+		.line {
+			display: flex;
+			margin-bottom: 20rpx;
+
+			.label {
+				width: 180rpx;
+				color: #888888;
+			}
+
+			.value {
+				color: #333333;
+			}
+		}
+
+		.btn {
+			margin-top: 230rpx;
+			width: 690rpx;
+			height: 88rpx;
+			line-height: 88rpx;
+			text-align: center;
+			background: $uni-color-primary;
+			border-radius: 44rpx;
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #ffffff;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/staff/vehicle/shiwai.vue b/h5/pages/staff/vehicle/shiwai.vue
index 8470ad9..6eb83c4 100644
--- a/h5/pages/staff/vehicle/shiwai.vue
+++ b/h5/pages/staff/vehicle/shiwai.vue
@@ -21,7 +21,7 @@
           <text>*</text>
           <text>棰勮鐢ㄨ溅鏃舵</text>
         </view>
-        <view class="value" @click="isShowDate = true">
+        <view class="value" @click="showDate">
           <text
             class="mr6"
             :style="{ color: param.startTime ? '#000000' : '#999999' }"
@@ -66,11 +66,14 @@
       </view>
     </view>
     <view class="main_footer">
-      <text>宸查�夋嫨锛�</text>
-      <text class="sel" v-if="param.startTime"
-        >{{ param.startHours }}鑷硔{ param.endHours }}</text
-      >
-      <text class="btn" :class="{disable: info && info.length > 0}" @click="onSubmit">纭棰勭害</text>
+      <view class="df_sb">
+				<text>宸查�夋嫨锛�</text>
+				<text class="sel" v-if="param.startTime"
+				  >{{ param.startHours }}鑷硔{ param.endHours }}</text
+				>
+				<text class="btn" :class="{disable: info && info.length > 0}" @click="onSubmit">纭棰勭害</text>
+			</view>
+			<view class="red">{{placeStr}}</view>
     </view>
     <!--  -->
     <!-- 閫夋嫨杞﹁締 -->
@@ -97,6 +100,7 @@
 		<u-datetime-picker
 		   mode="datetime"
 		   :show="isShowDate"
+			ref="startPick"
 		   title="寮�濮嬫椂闂�"
 		   :minDate="minDate"
 		   @close="isShowDate = false"
@@ -130,15 +134,22 @@
       carsList: [],
       info: [],
 
-      minDate: ''
+      minDate: '',
+			placeStr: ''
     }
   },
   onLoad() {
-    this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:mm') + ':00').getTime()
-    console.log('minDate', this.minDate);
+    // this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:mm') + ':00').getTime()
+    this.minDate = new Date().getTime() - (6 * 24 * 60 * 60 * 1000)
     this.initData()
   },
   methods: {
+		showDate() {
+			this.isShowDate = true
+			if (!this.param.startTime) {
+				this.$refs.startPick.innerValue = new Date().getTime()
+			}
+		},
     onSubmit() {
       const { param, info } = this
       if (info.length > 0) return
@@ -198,6 +209,12 @@
       if (this.param.carId && this.param.startTime) {
         this.getInfo()
       }
+			console.log(e);
+			if(new Date(this.param.startTime).getTime() < new Date().getTime() - 60 * 1000){
+				this.placeStr = '褰撳墠閫夋嫨鍖呭惈宸茬粡杩囧幓鏃堕棿锛岃纭鍚庡啀鎻愪氦锛�'
+			}else{
+				this.placeStr = ''
+			}
       this.$forceUpdate()
     },
     endtimeClose() {
@@ -328,9 +345,12 @@
   bottom: 0;
   padding: 20rpx 30rpx 84rpx;
   box-shadow: 0rpx -3rpx 6rpx 0rpx #eeeeee;
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
+  
+	.df_sb{
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+	}
   .btn {
     width: 184rpx;
     height: 72rpx;
diff --git a/h5/utils/service.js b/h5/utils/service.js
index a6791d1..70e1617 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -34,7 +34,7 @@
 								duration: 2000
 							})
 						})
-						if (data.code === 500) {
+						if (data.code === 500 || data.code === 5112) {
 							uni.clearStorageSync()
 							return uni.navigateTo({
 								url: '/pages/login/login'
diff --git a/screen/src/assets/base.css b/screen/src/assets/base.css
index f0b43dd..da3c493 100644
--- a/screen/src/assets/base.css
+++ b/screen/src/assets/base.css
@@ -5,6 +5,19 @@
     background-color 0.5s;
   margin: 0;
 }
+html {
+  -ms-overflow-style: none;
+  overflow: -moz-scrollbars-none;
+}
+
+html::-webkit-scrollbar {
+  width: 0px
+}
+
+::-webkit-scrollbar {
+  display: none;
+}
+
 p{
   padding: 0;
   margin: 0;
diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue
index 25fd46a..c403ab2 100644
--- a/screen/src/views/FireFighting.vue
+++ b/screen/src/views/FireFighting.vue
@@ -3,7 +3,7 @@
     <div class="main_app">
       <img src="@/assets/images/FireFighting/bg@2x.png" class="main_bg" alt="" />
       <div class="main_header">
-        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" />
         <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-娑堥槻鎬佸娍鐩戞帶</div>
         <div class="time_wrap">
           <span class="date">{{ date }}</span>
@@ -913,7 +913,6 @@
     .left_box_one {
       width: 100%;
       margin-bottom: 20px;
-      border: 1px solid;
 
       .list_wrap {
         padding: 10px 0;
@@ -977,7 +976,6 @@
       .police_wrap {
         padding: 15px 20px 0;
         height: 225px;
-        border: 1px solid;
 
         .item {
           margin-bottom: 5px;
@@ -996,7 +994,6 @@
 
     .left_box_three {
       .dispose_wrap {
-        border: 1px solid;
         height: 210px;
         width: 100%;
 
@@ -1176,7 +1173,7 @@
                   font-weight: 500;
 
                   span {
-                    font-style: 14px;
+                    font-size: 14px;
                     font-weight: 400;
                   }
                 }
@@ -1404,7 +1401,7 @@
         overflow: auto;
         margin-top: 15px;
         scrollbar-width: none;
-
+        
         .item {
           display: flex;
           font-size: 13px;
diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue
index 101762b..b29190e 100644
--- a/screen/src/views/LogisticsCenter.vue
+++ b/screen/src/views/LogisticsCenter.vue
@@ -1497,7 +1497,6 @@
       width: 100%;
       flex: 1;
 
-      /* border: 1px solid; */
       .echart_map {
         width: 100%;
         height: 100%;
@@ -1512,7 +1511,6 @@
     .right_box_one {
       margin-top: 20px;
       padding: 0px 10px 30px 20px;
-      border: 1px solid;
 
       .content_wrap {
         display: flex;
@@ -1609,7 +1607,6 @@
     }
 
     .right_box_two {
-      border: 1px solid;
       padding: 10px 15px;
 
       .echart4_wrap {
@@ -1624,7 +1621,6 @@
     }
 
     .right_box_three {
-      border: 1px solid;
 
       .echart5_wrap {
         height: 240px;
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
index beec715..8afd905 100644
--- a/screen/src/views/SecurityControl.vue
+++ b/screen/src/views/SecurityControl.vue
@@ -775,7 +775,6 @@
 .main_content {
   display: flex;
   padding: 20px 25px 0;
-  border: 1px solid;
 
   .left_box {
     width: 360px;

--
Gitblit v1.9.3