From 5a85dcab83e969d6b21c599b512a15117e9b8651 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 04 七月 2024 08:54:30 +0800
Subject: [PATCH] ''

---
 admin/src/components/business/operaVisitsWindow.vue              |   40 +
 h5/pages/staff/vehicle/shiwai.vue                                |    3 
 h5/pages/staff/meetingCalendar.vue                               |    8 
 admin/src/views/business/visits.vue                              |   36 +
 admin/src/views/meeting/components/OperaBookingsDetailWindow.vue |   62 ++
 admin/src/assets/style/style.scss                                |    4 
 h5/pages/staff/vehicle/shinei.vue                                |  162 +++++-
 h5/pages/applicationRecord/applicationRecord.vue                 |    2 
 h5/components/Li-Calendar/Li-Calendar.vue                        |    4 
 admin/src/api/business/carUseBook.js                             |    4 
 h5/api/staff.js                                                  |   10 
 admin/src/views/meeting/bookings.vue                             |  205 ++++++-
 admin/.env.development                                           |    2 
 h5/pages/staff/vehicle/apply.vue                                 |    2 
 h5/pages.json                                                    |    3 
 h5/pages/staffLogin/login.vue                                    |   20 
 h5/pages/staff/meetingSubOrder.vue                               |   11 
 admin/src/api/business/visits.js                                 |    2 
 h5/pages/login/login.vue                                         |   18 
 h5/pages/staff/index.vue                                         |    9 
 h5/pages/staff/meetingSel.vue                                    |    2 
 h5/utils/service.js                                              |    1 
 admin/src/views/meeting/rooms.vue                                |   16 
 admin/src/api/meeting/rooms.js                                   |    2 
 h5/pages/staff/task/index.vue                                    |   86 ++-
 h5/pages/staff/snapshot.vue                                      |    4 
 h5/pages/staff/vehicle/sendACarDetail.vue                        |    9 
 admin/src/views/operation/serviceCar/apprRecord.vue              |   14 
 admin/src/assets/style/element-variables.scss                    |    3 
 admin/src/views/business/reportRecord.vue                        |   11 
 h5/pages/staff/meetingSub.vue                                    |   15 
 admin/src/views/business/approvalConfiguration.vue               |    2 
 admin/src/components/operation/OperCarUseBookParamWindow.vue     |  139 ++++
 admin/src/components/common/upload.vue                           |    1 
 admin/src/api/business/approve.js                                |    6 
 admin/src/components/business/OperaCarUseBookWindow.vue          |    4 
 h5/pages/staff/meetingManager.vue                                |    6 
 admin/src/views/meeting/devices.vue                              |    1 
 admin/src/views/task/visSubDetail.vue                            |   12 
 admin/src/components/common/UploadAvatarImage.vue                |    8 
 admin/src/components/common/QueryForm/queryForm.vue              |   27 
 admin/src/views/login.vue                                        |    2 
 admin/src/api/meeting/bookings.js                                |   13 
 admin/src/views/operation/serviceCar/apprConfig.vue              |    4 
 admin/src/views/task/index.vue                                   |   13 
 h5/pages/staff/meetingDetail.vue                                 |  145 ++++-
 admin/src/components/business/OperaHiddenDangerWindow.vue        |   27 
 h5/App.vue                                                       |    7 
 h5/pages/staff/task/vDangetAppr.vue                              |   90 ++-
 admin/src/components/business/operaVisitsReportWindow.vue        |    7 
 admin/src/views/meeting/components/OperaBookingsWindow.vue       |  145 ++++-
 admin/src/components/business/OperaCarsWindow.vue                |    2 
 h5/api/meeting.js                                                |   10 
 53 files changed, 1,090 insertions(+), 351 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 19f2ddf..844693b 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -1,4 +1,4 @@
 # 寮�鍙戠幆澧冮厤缃�
 NODE_ENV = 'development'
 
-VUE_APP_API_URL  = 'http://192.168.0.173/admin_interface'
+VUE_APP_API_URL  = 'http://192.168.0.135:10010'
diff --git a/admin/src/api/business/approve.js b/admin/src/api/business/approve.js
index 1bf61d9..5baffdf 100644
--- a/admin/src/api/business/approve.js
+++ b/admin/src/api/business/approve.js
@@ -41,3 +41,9 @@
 export function dealHiddenDanger (data) {
   return request.post('/visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger', data)
 }
+// 浠诲姟涓績鏍囪宸茶
+export function taskSignRead (params) {
+  return request.get('/visitsAdmin/cloudService/business/staging/signRead', {
+    params
+  })
+}
diff --git a/admin/src/api/business/carUseBook.js b/admin/src/api/business/carUseBook.js
index 4d9caf0..2bafdea 100644
--- a/admin/src/api/business/carUseBook.js
+++ b/admin/src/api/business/carUseBook.js
@@ -40,6 +40,10 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/carUseBook/delete/${id}`)
 }
+// 鎾ら攢
+export function revokeById (id) {
+  return request.get(`/visitsAdmin/cloudService/business/carUseBook/revoke?id=${id}`)
+}
 // 鏍规嵁ID鏌ヨ
 export function detail (id) {
   return request.get(`/visitsAdmin/cloudService/business/carUseBook/${id}`)
diff --git a/admin/src/api/business/visits.js b/admin/src/api/business/visits.js
index a6da90d..c0a99fa 100644
--- a/admin/src/api/business/visits.js
+++ b/admin/src/api/business/visits.js
@@ -55,7 +55,7 @@
 }
 // 鎻愪氦璁垮淇℃伅
 export const createFk = (data) => {
-  return request.post('/visitsAdmin/cloudService/web/visitor/createFk', data)
+  return request.post('/visitsAdmin/cloudService/business/visits/createFk', data)
 }
 // 璁垮鎶ュ
 export const createVisit = (data) => {
diff --git a/admin/src/api/meeting/bookings.js b/admin/src/api/meeting/bookings.js
index 72bfb1d..544beb4 100644
--- a/admin/src/api/meeting/bookings.js
+++ b/admin/src/api/meeting/bookings.js
@@ -25,8 +25,17 @@
 }
 // 鍙栨秷
 export function cancelById (data) {
-  debugger
-  return request.post('/meetingAdmin/cloudService/business/bookings/cancelById', data)
+  return request.post('/meetingAdmin/cloudService/business/meeting/reservationCancel', data)
+}
+// 缁撴潫
+export function overBookById (data) {
+  return request.post('/meetingAdmin/cloudService/business/meeting/reservationOver', data)
+}
+// 棰勫畾璇︽儏
+export function BookDetailById (params) {
+  return request.get('/meetingAdmin/cloudService/web/meeting/meetingDetail', {
+    params
+  })
 }
 
 // 鍒犻櫎
diff --git a/admin/src/api/meeting/rooms.js b/admin/src/api/meeting/rooms.js
index c129e77..9735b54 100644
--- a/admin/src/api/meeting/rooms.js
+++ b/admin/src/api/meeting/rooms.js
@@ -33,7 +33,7 @@
 
 // 鍒犻櫎
 export function deleteById (id) {
-  return request.get(`/meetingAdmin/cloudService/rooms/delete/${id}`)
+  return request.get(`/meetingAdmin/cloudService/business/rooms/delete/${id}`)
 }
 
 // 鎵归噺鍒犻櫎
diff --git a/admin/src/assets/style/element-variables.scss b/admin/src/assets/style/element-variables.scss
index ebd97d0..c17c714 100644
--- a/admin/src/assets/style/element-variables.scss
+++ b/admin/src/assets/style/element-variables.scss
@@ -9,4 +9,7 @@
 
 .el-drawer__header {
   color: #333333 !important;
+}
+.el-image-viewer__wrapper{
+  z-index: 3000 !important;
 }
\ No newline at end of file
diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss
index 0be2757..52c0841 100644
--- a/admin/src/assets/style/style.scss
+++ b/admin/src/assets/style/style.scss
@@ -142,6 +142,10 @@
   padding: 30px;
   margin: 0 16px;
 }
+.query_btns{
+  border-bottom: 1px solid #eee;
+  padding-bottom: 10px;
+}
 /** 鍩虹閫氱敤 **/
  // 澶у皬 澶栬竟璺�
  .flex1{
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
index 6da76fc..7685160 100644
--- a/admin/src/components/business/OperaCarUseBookWindow.vue
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -15,7 +15,7 @@
           <span class="right"  v-if="model.status === 1">瀹℃壒涓�</span>
           <span class="right" style="background:#53b76f " v-if="model.status === 2">瀹℃壒閫氳繃</span>
           <span class="right" style="background:#dc362e " v-if="model.status === 3">瀹℃壒涓嶉�氳繃</span>
-          <span class="right" style="background:#dc362e " v-if="model.status === 4">宸插彇娑�</span>
+          <span class="right" style="background:#B2B2B2; " v-if="model.status === 4">宸叉挙閿�</span>
         </div>
         <div class="info">
           <div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
@@ -124,7 +124,7 @@
     >
       <el-form :model="dealForm" ref="dealForm" >
         <!-- <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> -->
-        <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 0">
+        <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 1">
           <el-select v-model="dealForm.driverId" style="width: 300px"  filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
             <el-option
                 v-for="item in memberList"
diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue
index 3e70371..629bc85 100644
--- a/admin/src/components/business/OperaCarsWindow.vue
+++ b/admin/src/components/business/OperaCarsWindow.vue
@@ -19,7 +19,7 @@
             </el-radio-group>
           </el-form-item>
           <el-form-item label="閫夋嫨杞︿富锛�" prop="memberId">
-            <el-select v-model="form.memberId" filterable placeholder="璇烽�夋嫨">
+            <el-select v-model="form.memberId" clearable filterable placeholder="璇烽�夋嫨">
               <el-option
                   v-for="item in memberList"
                   :key="item.id"
diff --git a/admin/src/components/business/OperaHiddenDangerWindow.vue b/admin/src/components/business/OperaHiddenDangerWindow.vue
index d2895a6..4d7486e 100644
--- a/admin/src/components/business/OperaHiddenDangerWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -144,9 +144,9 @@
     </div>
     <!--  -->
     <template   v-slot:footer>
-      <el-button @click="isShowProblem = true"  type="primary"  v-if="model.status==0&& model.checkUserId == userInfo.memberId"  class="status-red">澶勭悊</el-button>
+      <el-button @click="openHandModal"  type="primary"  v-if="model.status==0&& model.checkUserId == userInfo.memberId"  class="status-red">澶勭悊</el-button>
       <el-button type="primary" plain v-if="model.status==0 && model.checkUserId == userInfo.memberId" @click="handleTransfer">杞氦</el-button>
-      <el-button @click="isBackProblem=true"  v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger"  >閫�鍥�</el-button>
+      <el-button @click="openBackModal"  v-if="model.status==0&& model.checkUserId == userInfo.memberId" type="danger"  >閫�鍥�</el-button>
       <el-button @click="visible=false">杩斿洖</el-button>
     </template>
 
@@ -236,7 +236,7 @@
               v-model="backForm.checkDate"
           />
         </el-form-item>
-        <el-form-item label="鏁存敼鍓�" prop="dealBeforeFileList">
+        <el-form-item label="鍥剧墖/瑙嗛" prop="dealBeforeFileList">
           <div class="df_ac">
             <upload  width="80px" height="80px" :list="backForm.dealBeforeFileList" :tips="'鍥剧墖/瑙嗛'"    accept=".png,.jpg,.jpeg,.mp4" folder="hiddendanger" @loading="uploading = true" @dele="dele($event,2)" @success="uploadFileList($event, 2)" />
           </div>
@@ -264,6 +264,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import upload from '@/components/common/upload'
+import dayjs from 'dayjs'
 import { memberList } from '@/api/business/hiddenDangerParam'
 import { mapState } from 'vuex'
 export default {
@@ -309,7 +310,7 @@
         /*,
         dealBeforeFileList: [
           { required: true, message: '璇蜂笂浼犳暣鏀瑰墠鎯呭喌' }
-        ]*/
+        ] */
       },
       memberList: [],
       transForm: {
@@ -338,6 +339,24 @@
     })
   },
   methods: {
+    openHandModal () {
+      const { model } = this
+      this.isShowProblem = true
+      this.$set(this.dealForm, 'checkDate', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+      if (model.submitFileList && model.submitFileList.length > 0) {
+        this.$set(this.dealForm, 'dealBeforeFileList', model.submitFileList.map(item => {
+          return {
+            fileurl: item.fileurl,
+            name: item.name,
+            url: item.fileurlFull
+          }
+        }))
+      }
+    },
+    openBackModal () {
+      this.isBackProblem = true
+      this.$set(this.backForm, 'checkDate', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+    },
     dele (index, type) {
       if (type == 0) {
         if (this.dealForm.dealBeforeFileList != null && this.dealForm.dealBeforeFileList.length > index) {
diff --git a/admin/src/components/business/operaVisitsReportWindow.vue b/admin/src/components/business/operaVisitsReportWindow.vue
index c0976eb..1884a39 100644
--- a/admin/src/components/business/operaVisitsReportWindow.vue
+++ b/admin/src/components/business/operaVisitsReportWindow.vue
@@ -5,6 +5,7 @@
     :visible.sync="isShowModal"
     :confirm-working="isWorking"
     @confirm="confirm"
+    @close="close"
   >
     <el-form :model="param" ref="paramRef" :rules="rules">
       <div class="title_tip">璁垮棰勭害</div>
@@ -43,6 +44,7 @@
       <el-form-item label="鎵嬫満鍙�" prop="phone">
         <el-input
           v-model="param.phone"
+          maxlength="11"
           placeholder="璇疯緭鍏ヨ仈绯讳汉鐨勬墜鏈哄彿"
         ></el-input>
       </el-form-item>
@@ -58,6 +60,7 @@
       <el-form-item label="闅忚溅浜烘暟" prop="memberNum">
         <el-input
           v-model="param.memberNum"
+          oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)"
           placeholder="璇疯緭鍏ラ殢杞︿汉鍛樻�绘暟"
         ></el-input>
       </el-form-item>
@@ -193,6 +196,10 @@
       this.$set(this.param, 'faceImg', file.imgurl)
       this.$set(this.param, 'faceImgUrl', file.imgurlfull)
     },
+    close () {
+      this.isShowModal = false
+      this.$emit('close')
+    },
     // 鍚屾淇℃伅
     confirm () {
       this.$refs.paramRef.validate((valid) => {
diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
index 046b710..2f97250 100644
--- a/admin/src/components/business/operaVisitsWindow.vue
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -5,6 +5,7 @@
     :visible.sync="isShowModal"
     :confirm-working="isWorking"
     @confirm="confirm"
+    @close="close"
   >
     <el-form :model="param" ref="paramRef" :rules="rules">
       <div class="title_tip">璁垮淇℃伅</div>
@@ -17,6 +18,7 @@
       <el-form-item label="璁垮鎵嬫満鍙�" prop="phone">
         <el-input
           v-model="param.phone"
+          maxlength="11"
           placeholder="璇疯緭鍏ヨ瀹㈢殑鎵嬫満鍙�"
         ></el-input>
       </el-form-item>
@@ -40,7 +42,7 @@
           placeholder="璇疯緭鍏ユ潵璁跨殑鍗曚綅鍏ㄧО"
         ></el-input>
       </el-form-item>
-      <el-form-item label="浜鸿劯鐓х墖">
+      <el-form-item label="浜鸿劯鐓х墖" prop="faceImgUrl">
         <div class="upload_wrap">
           <UploadFaceImg
             :file="{ imgurlfull: param.faceImgUrl, imgurl: param.faceImg }"
@@ -134,7 +136,7 @@
     GlobalWindow,
     UploadFaceImg
   },
-  data() {
+  data () {
     return {
       isShowModal: false,
       param: {
@@ -149,7 +151,7 @@
         folder: 'member'
       },
       startPickerOptions: {
-        disabledDate(time) {
+        disabledDate (time) {
           return time.getTime() < Date.now() - 8.64e7 // 绂佺敤瓒呰繃褰撳墠鏃堕棿鐨勬棩鏈�
         },
         selectableRange: '00:00:00 - 23:59:59' // 杩欎釜鍔犱笂涔嬪悗锛屾椂鍒嗙涓婇潰鎵嶆湁绂佹閫夋嫨鍙樼伆锛屽鏋滀笉鍔狅紝涔熷彲浠ョ姝㈤�夋嫨锛屼絾鏄笉浼氬彉鐏�
@@ -180,13 +182,14 @@
       }
     }
   },
-  created() {
+  created () {
     this.$set(this.param, 'receptMemberId', this.$store.state.userInfo.memberId)
+    this.$set(this.param, 'starttime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
     this.initData()
   },
   watch: {
     'param.starttime': {
-      handler(newValue, oldValue) {
+      handler (newValue, oldValue) {
         if (newValue) {
           const date = new Date()
           // const min = date.getMinutes()
@@ -210,7 +213,7 @@
       immediate: true
     },
     'param.endtime': {
-      handler(newValue, oldValue) {
+      handler (newValue, oldValue) {
         if (newValue) {
           const nowDate = dayjs(this.param.starttime).format('HH:mm:ss')
           let st = ''
@@ -228,7 +231,11 @@
     }
   },
   methods: {
-    initData() {
+    close () {
+      this.isShowModal = false
+      this.$emit('close')
+    },
+    initData () {
       getVisitedVisitReason({}).then(res => {
         this.VisitReason = res || []
       })
@@ -237,15 +244,15 @@
         console.log('memberList', this.memberList)
       })
     },
-    uploadAvatarSuccess(file) {
+    uploadAvatarSuccess (file) {
       this.$set(this.param, 'faceImg', file.imgurl)
       this.$set(this.param, 'faceImgUrl', file.imgurlfull)
     },
-    changeStarttime(e) {
-      this.$set(this.param, 'endtime', this.param.starttime)
+    changeStarttime (e) {
+      // this.$set(this.param, 'endtime', this.param.starttime)
     },
     // 鍚屾淇℃伅
-    confirm() {
+    confirm () {
       this.$refs.paramRef.validate((valid) => {
         if (!valid) {
           return
@@ -262,7 +269,6 @@
             this.$emit('close')
           })
           .catch(e => {
-            this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking = false
@@ -281,6 +287,16 @@
 .upload_wrap{
   display: flex;
   align-items: center;
+  justify-content: center;
+  .avatar-uploader{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  ::v-deep .avatar{
+    max-width: 90px;
+    max-height: 90px;
+  }
   .content{
     display: flex;
     flex-direction: column;
diff --git a/admin/src/components/common/QueryForm/queryForm.vue b/admin/src/components/common/QueryForm/queryForm.vue
index bb962f5..4755b31 100644
--- a/admin/src/components/common/QueryForm/queryForm.vue
+++ b/admin/src/components/common/QueryForm/queryForm.vue
@@ -54,6 +54,7 @@
           :label="item.label || '閫夋嫨鏃ユ湡'">
           <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss"
             value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange"
+            :default-time="['00:00:00', '23:59:59']"
             :picker-options="item.pickerOptions || pickerOptions" range-separator="鑷�"
             :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true"
             :start-placeholder="item.start || '寮�濮嬫椂闂�'" :end-placeholder="item.end || '缁撴潫鏃堕棿'" class="w400"
@@ -99,13 +100,13 @@
       default: () => { }
     }
   },
-  data() {
+  data () {
     return {
       showZk: false,
       pickerOptions: {
         shortcuts: [{
           text: '杩�7澶�',
-          onClick(picker) {
+          onClick (picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 6)
@@ -114,7 +115,7 @@
         },
         {
           text: '杩�30澶�',
-          onClick(picker) {
+          onClick (picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 29)
@@ -123,7 +124,7 @@
         },
         {
           text: '杩�60澶�',
-          onClick(picker) {
+          onClick (picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 59)
@@ -132,14 +133,14 @@
         },
         {
           text: '杩�90澶�',
-          onClick(picker) {
+          onClick (picker) {
             const end = new Date()
             const start = new Date()
             start.setTime(end.getTime() - 3600 * 1000 * 24 * 89)
             picker.$emit('pick', [start, end])
           }
         }],
-        disabledDate(time) {
+        disabledDate (time) {
           var curDate = new Date(new Date().toLocaleDateString()).getTime()
           var preDate = new Date(curDate + 24 * 60 * 60 * 1000 - 1)
           return time.getTime() > preDate
@@ -150,31 +151,31 @@
   emits: ['input', 'handleQuery', 'clear'],
   computed: {
     searchForm: {
-      get() {
+      get () {
         return this.value
       },
-      set(value) {
+      set (value) {
         this.$emit('input', value)
       }
     }
   },
   methods: {
-    handleQuery() {
+    handleQuery () {
       this.$emit('handleQuery')
     },
-    handlekeyup(pd) {
+    handlekeyup (pd) {
       if (pd) {
         this.$emit('handleQuery')
       }
     },
-    changeForm(filed) {
+    changeForm (filed) {
       this.$emit('changeForm', filed)
     },
-    zkBtn() {
+    zkBtn () {
       this.showZk = !this.showZk
       this.$emit('zkBtn', this.zk)
     },
-    clear() {
+    clear () {
       this.$emit('clear')
     }
   }
diff --git a/admin/src/components/common/UploadAvatarImage.vue b/admin/src/components/common/UploadAvatarImage.vue
index d541ed6..72f91b9 100644
--- a/admin/src/components/common/UploadAvatarImage.vue
+++ b/admin/src/components/common/UploadAvatarImage.vue
@@ -2,7 +2,7 @@
   <div>
     <el-upload
       class="avatar-uploader"
-      accept=".png,.jpg"
+      accept=".png,.jpg,.jpeg"
       :style="customStyle"
       :action="uploadImgUrl"
       :data="uploadData"
@@ -30,7 +30,7 @@
     tipsLabel: '',
     customStyle: {
       type: String,
-      default: 'width: 90px; height: 90px;'
+      default: 'width: 90px; max-height: 90px;'
     },
     uploadData: Object
   },
@@ -92,8 +92,8 @@
   text-align: center;
 }
 .avatar {
-  width: 100% !important;
-  height: auto !important;
+  width: 90px;
+  max-height: 90px;
   display: block;
 }
 .tips-style {
diff --git a/admin/src/components/common/upload.vue b/admin/src/components/common/upload.vue
index d6dfc8d..ccde115 100644
--- a/admin/src/components/common/upload.vue
+++ b/admin/src/components/common/upload.vue
@@ -72,7 +72,6 @@
             console.log(res.data.data)
           })
           .catch(e => {
-            this.$message.error(e)
           })
           .finally(() => {
             this.$refs.file.value = null
diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue
index d8bc84d..f78ebdd 100644
--- a/admin/src/components/operation/OperCarUseBookParamWindow.vue
+++ b/admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -17,7 +17,7 @@
           >
         </el-form-item>
         <el-form-item label="閫夋嫨杞﹁締" prop="carId">
-          <el-select v-model="form.carId" placeholder="閫夋嫨杞﹁締">
+          <el-select v-model="form.carId" @change="clearTime" placeholder="閫夋嫨杞﹁締">
             <el-option
               v-for="item in carsList"
               :key="item.id"
@@ -133,6 +133,7 @@
                 :class="{
                   disable: item.isUse == 1,
                   active: item.checked == '1',
+                  hasSub: item.carUseBookId,
                 }"
                 @click="datetimeClick(item, i)"
                 v-for="(item, i) in timeList"
@@ -161,6 +162,7 @@
       :visible.sync="isShowShiwai"
       append-to-body
       width="600px"
+      :before-close="clearTime"
     >
       <el-form :model="form" ref="modalRef" class="el_form" :rules="rules">
         <el-form-item label="鐢ㄨ溅寮�濮嬫椂闂�" prop="startTime">
@@ -189,7 +191,10 @@
       <div class="have_info" v-if="info && info.length > 0">
         <div class="tit">鎮ㄧ敵璇风殑鐢ㄨ溅鏃舵宸叉湁杞﹁締棰勭害</div>
         <div class="content" v-for="(item, i) in info" :key="i">
-          <div class="card">{{ item.carCode }}</div>
+          <div class="df_sb">
+            <span class="card" v-if="item.carCode">{{ item.carCode }}</span>
+            <span>{{ i + 1 }}/{{ info.length }}</span>
+          </div>
           <div class="line">
             <span>鐢ㄨ溅鏃舵</span>
             <span>
@@ -212,16 +217,48 @@
           </div>
           <div class="line">
             <span>鐢宠浜�</span>
-            <span>{{ item.memberName }} {{ item.memberMobile }}</span>
+            <span>{{ item.memberName }} <span class="primaryColor">{{ item.memberMobile }}</span></span>
           </div>
         </div>
       </div>
 
       <span slot="footer" class="dialog-footer">
         <div>宸查�夋嫨锛歿{ selDatetime }}</div>
-        <div class="btn" @click="subTime">纭鏃堕棿</div>
+        <div class="btn" :class="{disable: info && info.length > 0}" @click="subTime">纭鏃堕棿</div>
       </span>
     </el-dialog>
+    <!-- 璇︽儏 -->
+     <el-dialog
+      title="閫夋嫨鐢ㄨ溅鏃堕棿"
+      :visible.sync="isShowDetail"
+      append-to-body
+      width="600px"
+    >
+      <div class="detail_modal">
+        <div class="title">杞﹁締棰勭害鎯呭喌</div>
+        <div class="h1" v-if="activeInfo.carCode">{{ activeInfo.carCode }}</div>
+        <div class="line">
+          <div class="label">棰勮鐢ㄨ溅鏃舵</div>
+          <div class="value" v-if="activeInfo.startTime">{{ activeInfo.startTime.slice(5, 16) }} - {{ activeInfo.endTime.slice(5, 16) }}</div>
+        </div>
+        <div class="line">
+          <div class="label">鐩殑鍦�</div>
+          <div class="value">{{ activeInfo.addr }}</div>
+        </div>
+        <div class="line">
+          <div class="label">涔樿溅浜烘暟</div>
+          <div class="value" v-if="activeInfo.memberIds">{{ activeInfo.memberIds.split(',').length }}浜�</div>
+        </div>
+        <div class="line">
+          <div class="label">鐢ㄨ溅浜嬬敱</div>
+          <div class="value">{{ activeInfo.content || '' }}</div>
+        </div>
+        <div class="line">
+          <div class="label">鐢宠浜�</div>
+          <div class="value">{{ activeInfo.memberName }} <span class="primaryColor ml12">{{ activeInfo.memberPhone }}</span></div>
+        </div>
+      </div>
+     </el-dialog>
   </GlobalWindow>
 </template>
 
@@ -230,14 +267,15 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { allList } from '@/api/business/member'
 import { allList as getCarList } from '@/api/business/cars'
-import { carCanReservationDate, carUseBookCraete, carUseBookList } from '@/api/business/carUseBook'
+import { carCanReservationDate, carUseBookCraete, carUseBookList, detail } from '@/api/business/carUseBook'
 import { findTypeMemberInfo } from '@/api/business/memberCard'
 import dayjs from 'dayjs'
+
 export default {
   name: 'OperCarUseBookParamWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data() {
+  data () {
     return {
       // 琛ㄥ崟鏁版嵁
       isShowTime: false,
@@ -260,6 +298,9 @@
         endTime: '',
         memberIds: []
       },
+      activeInfo: {},
+      isShowDetail: false,
+      carBookInfo: {},
       pickerOptions: {
         disabledDate: (time) => {
           if (this.form.startTime) {
@@ -306,7 +347,7 @@
   },
   watch: {
     'form.planUseDate': {
-      handler(newValue, oldValue) {
+      handler (newValue, oldValue) {
         if (newValue) {
           this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + this.form.endTime.slice(11, 19))
           // this.startPickerOptions = this.startPickerOptions
@@ -316,7 +357,7 @@
       immediate: true
     },
     'form.startTime': {
-      handler(newValue, oldValue) {
+      handler (newValue, oldValue) {
         if (newValue) {
           this.$set(this.pickerOptions, 'selectableRange', this.form.startTime.slice(11, 19) + ' - ' + '23:59:59')
           // this.startPickerOptions = this.startPickerOptions
@@ -326,11 +367,11 @@
       immediate: true
     }
   },
-  created() {
+  created () {
     this.initData()
   },
   methods: {
-    open() {
+    open () {
       this.title = '鏂板缓鍏姟杞︾敤杞︾敵璇�'
       this.form = {
         type: 0,
@@ -341,7 +382,7 @@
       })
       this.visible = true
     },
-    confirm() {
+    confirm () {
       const form = JSON.parse(JSON.stringify(this.form))
       this.$refs.formRef.validate((valid) => {
         const memberList = []
@@ -365,18 +406,32 @@
         }
       })
     },
-    openTime() {
+    openTime () {
       const { form } = this
       if (!form.carId) {
         return this.$tip.error('璇峰厛閫夋嫨杞﹁締')
       }
       if (this.form.type === 0) {
+        this.$set(this.form, 'dateDay', '')
+        this.timeList = []
         this.isShowTime = true
       } else {
+        this.clearTime()
         this.isShowShiwai = true
       }
     },
-    subTime() {
+    clearTime () {
+      this.isShowShiwai = false
+      this.$set(this.form, 'startTime', '')
+      this.$set(this.form, 'endTime', '')
+      this.$nextTick(() => {
+        if (this.$refs.modalRef) {
+          this.$refs.modalRef.clearValidate()
+        }
+      })
+    },
+    subTime () {
+      if (this.info && this.info.length > 0) return
       if (this.form.type === 0) {
         const selTimeList = this.timeList.filter(i => i.checked == '1')
         if (selTimeList.length === 0) {
@@ -389,11 +444,24 @@
         this.$forceUpdate()
       } else {
         this.$refs.modalRef.validate((valid) => {
+          const { form } = this
+          if (new Date(form.startTime).getTime() > new Date(form.endTime).getTime()) {
+            return this.$tip.error('缁撴潫鏃堕棿搴斿ぇ浜庡紑濮嬫椂闂�')
+          }
           this.isShowShiwai = false
         })
       }
     },
-    datetimeClick(item, index) {
+    datetimeClick (item, index) {
+      if (item.carUseBookId) {
+        detail(
+          item.carUseBookId
+        ).then(res => {
+          this.activeInfo = res
+          this.isShowDetail = true
+        })
+        return
+      }
       if (item.isUse == '1') return
       const { timeList } = this
       const selTimeList = timeList.filter(i => i.checked == '1')
@@ -434,10 +502,10 @@
         this.selDatetime = this.form.dateDay.slice(5) + ' ' + selTimeLists[0].startHours + '-' + selTimeLists[selTimeLists.length - 1].endHours
       }
     },
-    seletedDate(e) {
+    seletedDate (e) {
       this.gettimes()
     },
-    seletedShiwaiDate() {
+    seletedShiwaiDate () {
       const { form } = this
       if (form.startTime && form.endTime) {
         this.selDatetime = form.startTime + '-' + form.endTime
@@ -450,7 +518,7 @@
         })
       }
     },
-    gettimes() {
+    gettimes () {
       const { form } = this
       carCanReservationDate({
         dateDay: form.dateDay,
@@ -459,11 +527,11 @@
         this.timeList = res || []
         this.timeList.forEach((i, j) => {
           i.checked = '0',
-            i.index = j
+          i.index = j
         })
       })
     },
-    initData() {
+    initData () {
       getCarList({
         type: 1
       }).then(res => {
@@ -539,6 +607,10 @@
     background-color: #cccccc;
     color: #999999;
   }
+  .hasSub {
+      color: #fff;
+      background: #cccccc;
+    }
 }
 .color_op {
   display: flex;
@@ -564,6 +636,10 @@
     color: #fff;
     width: 120px;
     text-align: center;
+    cursor: pointer;
+  }
+  .disable{
+    background: #cccccc;
   }
 }
 .have_info {
@@ -600,4 +676,29 @@
     }
   }
 }
+.detail_modal {
+  padding: 20px 15px;
+  .title {
+    text-align: center;
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 20px;
+  }
+  .h1 {
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 16px;
+  }
+  .line {
+    display: flex;
+    margin-bottom: 10px;
+    .label {
+      width: 120px;
+      color: #888888;
+    }
+    .value {
+      color: #333333;
+    }
+  }
+}
 </style>
diff --git a/admin/src/views/business/approvalConfiguration.vue b/admin/src/views/business/approvalConfiguration.vue
index 8e374e7..320a8b2 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -120,7 +120,7 @@
               <div class="config_data_item_reviewed_r">
                 <span>琚浜虹殑</span>
                 <el-select
-                  v-model="apprList[activeIndex].level"
+                  v-model="apprList[activeIndex].objLevel"
                   placeholder="璇烽�夋嫨"
                   style="margin: 0 20px 0 10px"
                 >
diff --git a/admin/src/views/business/reportRecord.vue b/admin/src/views/business/reportRecord.vue
index fcb9c59..82a650f 100644
--- a/admin/src/views/business/reportRecord.vue
+++ b/admin/src/views/business/reportRecord.vue
@@ -6,7 +6,7 @@
       @handleQuery="getList(1)"
       @clear="clear"
     />
-    <div style="margin: 16px 0 0" v-permissions="['business:visits:create', 'business:visits:exportExcel']">
+    <div class="query_btns" style="margin: 16px 0 0" v-permissions="['business:visits:create', 'business:visits:exportExcel']">
       <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" v-permissions="['business:visits:create']">鏂板缓</el-button>
       <el-button type="primary" :loading="exLoading" @click="exportExcel" v-permissions="['business:visits:exportExcel']">瀵煎嚭</el-button>
     </div>
@@ -17,6 +17,7 @@
       row-key="id"
       default-expand-all
     >
+      <el-table-column type="selection" width="55" align="center"></el-table-column>
       <el-table-column
         prop="carNos"
         label="鍏ュ洯杞﹁締"
@@ -42,7 +43,7 @@
         label="琚浜�"
         min-width="100px"
       ></el-table-column>
-      <el-table-column label="鎷滆鏃堕棿" min-width="170px">
+      <el-table-column label="鎷滆鏃堕棿" min-width="160px">
         <template slot-scope="{ row }">
           <span>璧凤細{{ row.starttime }}</span
           ><br />
@@ -52,13 +53,13 @@
       <el-table-column
         prop="reason"
         label="鎷滆浜嬬敱"
-        min-width="100px"
+        min-width="100"
       ></el-table-column>
       <el-table-column
         prop="status"
         fixed="right"
         label="鐘舵��"
-        min-width="100px"
+        min-width="100"
       >
         <template slot-scope="{ row }">
           <span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0"
@@ -79,7 +80,7 @@
           <span v-if="row.status === 9" style="color: gray">宸插け鏁�</span>
         </template>
       </el-table-column>
-      <el-table-column label="鎿嶄綔" width="230" fixed="right">
+      <el-table-column label="鎿嶄綔" width="100" fixed="right">
         <template slot-scope="{ row }">
           <el-button
             type="text"
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index 25ebbb8..bbf8005 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -8,8 +8,8 @@
             <el-form-item label="韬唤璇佸彿" prop="idcardNo">
                 <el-input v-model="searchForm.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" @keypress.enter.native="search"></el-input>
             </el-form-item>
-            <el-form-item label="缁勭粐鍚嶇О" prop="companyName">
-                <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ョ粍缁囧悕绉�" @keypress.enter.native="search"></el-input>
+            <el-form-item label="璁垮鍗曚綅" prop="companyName">
+                <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ヨ瀹㈠崟浣�" @keypress.enter.native="search"></el-input>
             </el-form-item>
             <el-form-item label="瀹℃壒鐘舵��" prop="status">
                 <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
@@ -46,7 +46,7 @@
                 <el-table-column type="selection" width="55"></el-table-column>
                 <el-table-column prop="name" label="璁垮濮撳悕" min-width="100px"></el-table-column>
                 <el-table-column prop="phone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="companyName" label="缁勭粐鍚嶇О" min-width="100px"></el-table-column>
+                <el-table-column prop="companyName" label="璁垮鍗曚綅" min-width="100px"></el-table-column>
                 <el-table-column prop="receptMemberName" label="琚浜�" min-width="100px"></el-table-column>
                 <el-table-column prop="reason" label="鎷滆浜嬬敱" min-width="100px"></el-table-column>
                 <el-table-column label="棰勭害鏃堕棿" min-width="170px">
@@ -64,14 +64,15 @@
                         <span v-else>-</span>
                     </template>
                 </el-table-column>
-                <el-table-column label="闅忚浜哄憳" min-width="100px">
+                <el-table-column label="鏂藉伐浜哄憳" min-width="100px">
                     <template slot-scope="{row}">
-                        <span>{{row.memberNum || '-'}}</span>
+                        <span v-if="row.type == 0">鍚�</span>
+                        <span v-if="row.type == 1">鏄�</span>
                     </template>
                 </el-table-column>
                 <el-table-column label="闅忚杞﹁締" min-width="100px">
                     <template slot-scope="{row}">
-                        <span>{{row.carNum}}</span>
+                        <span>{{row.carNos}}</span>
                     </template>
                 </el-table-column>
                 <el-table-column prop="status" fixed="right" label="鐘舵��" min-width="100px">
@@ -97,7 +98,8 @@
                     <template slot-scope="{row}">
                       <el-button type="text" @click="departure(row.id)" v-permissions="['business:visits:level']" icon="el-icon-delete" style="color: red" v-if="row.status == 7">绂诲巶</el-button>
                       <el-button type="text" @click="cancel(row.id)" v-permissions="['business:visits:cancel']" icon="el-icon-delete"   style="color: red" v-if="row.status == 5">鍙栨秷棰勭害</el-button>
-                        <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" icon="el-icon-view">璇︽儏</el-button>
+                        <!-- <el-button type="text" @click="$refs.OperaVisitsDesWindow.open('璇︽儏', row.id)" icon="el-icon-view">璇︽儏</el-button> -->
+                        <el-button type="text" @click="handleDetail(row)" icon="el-icon-view">璇︽儏</el-button>
 <!--                        <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:visits:delete']">鏌ヨ瀹℃壒缁撴灉</el-button>-->
                     </template>
                 </el-table-column>
@@ -109,7 +111,8 @@
             >
             </pagination>
             <!--      璇︽儏      -->
-            <OperaVisitsDesWindow ref="OperaVisitsDesWindow" />
+            <!-- <OperaVisitsDesWindow ref="OperaVisitsDesWindow" /> -->
+            <TaskDetail v-if="isShowDetail" ref="DetailRef" />
             <!-- 鏂板缓 -->
             <OperaVisitsWindow @close="isShowEdit = false" @success="search"  v-if="isShowEdit" ref="operaVisitsWindowRef" />
         </template>
@@ -122,20 +125,23 @@
 import Pagination from '@/components/common/Pagination'
 import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
 import OperaVisitsWindow from '@/components/business/operaVisitsWindow'
+import TaskDetail from '@/views/task/visSubDetail.vue'
 
 export default {
   name: 'Visits',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaVisitsDesWindow, OperaVisitsWindow },
+  components: { TableLayout, Pagination, TaskDetail, OperaVisitsWindow },
   data () {
     return {
       isShowEdit: false,
+      isShowDetail: false,
       // 鎼滅储
       searchForm: {
         name: '',
         companyName: '',
         idcardNo: '',
-        status: ''
+        status: '',
+        type: 0
       }
     }
   },
@@ -149,6 +155,16 @@
     this.search()
   },
   methods: {
+    handleDetail (row) {
+      this.isShowDetail = true
+      console.log('row', row);
+      this.$nextTick(() => {
+        this.$refs.DetailRef.id = row.id
+        this.$refs.DetailRef.type = 0
+        this.$refs.DetailRef.getDetail()
+        this.$refs.DetailRef.isShowModal = true
+      })
+    },
     handleEdit () {
       this.isShowEdit = true
       this.$nextTick(() => {
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index 87b3f52..16a3215 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -66,7 +66,7 @@
         })
         .catch(e => {
           this.refreshCaptcha()
-          this.$tip.apiFailed(e)
+          // this.$tip.apiFailed(e)
         })
         .finally(() => {
           this.loading = false
diff --git a/admin/src/views/meeting/bookings.vue b/admin/src/views/meeting/bookings.vue
index 6830547..4a9f8f8 100644
--- a/admin/src/views/meeting/bookings.vue
+++ b/admin/src/views/meeting/bookings.vue
@@ -1,7 +1,13 @@
 <template>
   <TableLayout :permissions="['business:bookings:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
-    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+    <el-form
+      ref="searchForm"
+      slot="search-form"
+      :model="searchForm"
+      label-width="100px"
+      inline
+    >
       <el-form-item label="浼氳瀹�" prop="roomId">
         <el-select
           v-model="searchForm.roomId"
@@ -9,7 +15,12 @@
           clearable
           placeholder="璇烽�夋嫨浼氳瀹�"
         >
-          <el-option v-for="item in rooms" :key="item.id" :value="item.id" :label="item.name" />
+          <el-option
+            v-for="item in rooms"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="棰勭害閮ㄩ棬" prop="department">
@@ -31,10 +42,18 @@
         </el-select> -->
       </el-form-item>
       <el-form-item label="浼氳涓婚" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヤ細璁富棰�" @keypress.enter.native="search"></el-input>
+        <el-input
+          v-model="searchForm.name"
+          placeholder="璇疯緭鍏ヤ細璁富棰�"
+          @keypress.enter.native="search"
+        ></el-input>
       </el-form-item>
       <el-form-item label="棰勭害浜�" prop="realName">
-        <el-input v-model="searchForm.realName" placeholder="璇疯緭鍏ラ绾︿汉" @keypress.enter.native="search"></el-input>
+        <el-input
+          v-model="searchForm.realName"
+          placeholder="璇疯緭鍏ラ绾︿汉"
+          @keypress.enter.native="search"
+        ></el-input>
       </el-form-item>
       <el-form-item label="浼氳鐘舵��" prop="status">
         <el-select
@@ -43,7 +62,12 @@
           clearable
           placeholder="璇烽�夋嫨鐘舵��"
         >
-          <el-option v-for="item in status" :key="item.id" :value="item.id" :label="item.name" />
+          <el-option
+            v-for="item in status"
+            :key="item.id"
+            :value="item.id"
+            :label="item.name"
+          />
         </el-select>
       </el-form-item>
       <el-form-item label="璧锋鏃堕棿" prop="startTime">
@@ -78,10 +102,30 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:bookings:create', 'business:bookings:exportExcel']">
-        <li><el-button type="primary" @click="$refs.operaBookingsWindow.open('鏂板缓浼氳')" v-permissions="['business:bookings:create']">鏂板缓</el-button></li>
+      <ul
+        class="toolbar"
+        v-permissions="[
+          'business:bookings:create',
+          'business:bookings:exportExcel',
+        ]"
+      >
+        <li>
+          <el-button
+            type="primary"
+            @click="$refs.operaBookingsWindow.open('鏂板缓浼氳')"
+            v-permissions="['business:bookings:create']"
+            >鏂板缓</el-button
+          >
+        </li>
         <!-- <li><el-button @click="deleteByIdInBatch" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button></li> -->
-        <li><el-button :loading="isWorking.export" v-permissions="['business:bookings:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+        <li>
+          <el-button
+            :loading="isWorking.export"
+            v-permissions="['business:bookings:exportExcel']"
+            @click="exportExcel"
+            >瀵煎嚭</el-button
+          >
+        </li>
       </ul>
       <el-table
         v-loading="isWorking.search"
@@ -91,42 +135,80 @@
         @selection-change="handleSelectionChange"
       >
         <!-- <el-table-column type="selection" align="center" width="55"></el-table-column> -->
-        <el-table-column prop="name" label="浼氳涓婚" align="center" min-width="120px" show-overflow-tooltip>
-          <template slot-scope="{row}">
+        <el-table-column
+          prop="name"
+          label="浼氳涓婚"
+          align="center"
+          min-width="120px"
+          show-overflow-tooltip
+        >
+          <template slot-scope="{ row }">
             <span class="long-title-style">{{ row.name }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="roomName" label="浼氳瀹�" align="center" min-width="120px" show-overflow-tooltip>
-          <template slot-scope="{row}">
+        <el-table-column
+          prop="roomName"
+          label="浼氳瀹�"
+          align="center"
+          min-width="120px"
+          show-overflow-tooltip
+        >
+          <template slot-scope="{ row }">
             <span class="long-title-style">{{ row.roomName }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="meetingTime" label="浼氳鏃堕棿" align="center" min-width="120px"></el-table-column>
-        <el-table-column prop="managerInfo" label="棰勭害浜�" align="center" min-width="100px"></el-table-column>
-        <el-table-column label="鐘舵��"  align="center" min-width="60px">
-          <template slot-scope="{row}">
-            <span v-if="row.status==0" style="color:rgb(127, 178, 53)">姝e父</span>
-            <span v-else style="color:rgb(234, 54, 38)">鍙栨秷</span>
+        <el-table-column
+          prop="meetingTime"
+          label="浼氳鏃堕棿"
+          align="center"
+          min-width="120px"
+        ></el-table-column>
+        <el-table-column
+          prop="managerInfo"
+          label="棰勭害浜�"
+          align="center"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column label="鐘舵��" align="center" min-width="60px">
+          <template slot-scope="{ row }">
+            <span v-if="row.status == 0" style="color: rgb(127, 178, 53)"
+              >姝e父</span
+            >
+            <span v-else style="color: rgb(234, 54, 38)">鍙栨秷</span>
             <!-- {{ row.status==0 ? '姝e父' : '鍙栨秷' }} -->
           </template>
         </el-table-column>
-        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="100px"></el-table-column>
+        <el-table-column
+          prop="createDate"
+          label="鍒涘缓鏃堕棿"
+          align="center"
+          min-width="100px"
+        ></el-table-column>
         <!-- <el-table-column prop="content" label="浼氳鍐呭" min-width="100px"></el-table-column> -->
         <el-table-column
-          v-if="containPermissions(['business:bookings:update', 'business:bookings:delete'])"
+          v-if="
+            containPermissions([
+              'business:bookings:update',
+              'business:bookings:delete',
+            ])
+          "
           label="鎿嶄綔"
-          min-width="120"
+          min-width="100"
           align="center"
           fixed="right"
         >
-          <template slot-scope="{row}">
-            <template v-if="row.status==0">
-              <el-button type="text" @click="$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', row)">鏌ョ湅</el-button>
-              <el-button v-if="row.flag == 0" type="text" @click="$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', row)" v-permissions="['business:bookings:update']">淇敼</el-button>
-              <el-button type="text" @click="copy(row)">澶嶅埗</el-button>
-              <el-button v-if="row.flag == 0"  type="text" @click="cancelMeeting(row.id)" v-permissions="['business:bookings:update']">鍙栨秷</el-button>
+          <template slot-scope="{ row }">
+            <template>
+              <el-button
+                type="text"
+                @click="$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', row)"
+                >鏌ョ湅璇︽儏</el-button
+              >
+              <!-- <el-button v-if="row.flag == 0" type="text" @click="$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', row)" v-permissions="['business:bookings:update']">淇敼</el-button> -->
+              <!-- <el-button type="text" @click="copy(row)">澶嶅埗</el-button> -->
+              <!-- <el-button v-if="row.flag == 0"  type="text" @click="cancelMeeting(row.id)" v-permissions="['business:bookings:update']">鍙栨秷</el-button> -->
             </template>
-            <el-button v-else type="text" @click="deleteById(row)" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button>
+            <!-- <el-button v-else type="text" @click="deleteById(row)" v-permissions="['business:bookings:delete']">鍒犻櫎</el-button> -->
           </template>
         </el-table-column>
       </el-table>
@@ -138,8 +220,15 @@
       </pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaBookingsWindow ref="operaBookingsWindow" @success="handlePageChange"/>
-    <OperaBookingsDetailWindow ref="operaBookingsDetailWindow"/>
+    <OperaBookingsWindow
+      ref="operaBookingsWindow"
+      @success="handlePageChange"
+    />
+    <OperaBookingsDetailWindow
+      @success="search"
+      ref="operaBookingsDetailWindow"
+    />
+
   </TableLayout>
 </template>
 
@@ -158,7 +247,7 @@
   name: 'Bookings',
   extends: BaseTable,
   components: { TableLayout, Pagination, OperaBookingsWindow, OperaBookingsDetailWindow },
-  data () {
+  data() {
     return {
       date: [],
       // 鎼滅储
@@ -198,12 +287,12 @@
       link: 'https://dmtest.ahapp.net/meeting_h5/' // H5_LINK_ADDR
     }
   },
-  provide () {
+  provide() {
     return {
       rooms: () => this.rooms
     }
   },
-  created () {
+  created() {
     this.config({
       module: '浼氳瀹ら瀹氫俊鎭〃',
       api: '/meeting/bookings',
@@ -226,7 +315,7 @@
     this.changeRadio('0')
   },
   methods: {
-    changeRadio (e) {
+    changeRadio(e) {
       if (e === '0') {
         this.searchForm.startTime = timeForMat(0)[0]
         this.searchForm.endTime = timeForMat(0)[1]
@@ -242,7 +331,7 @@
       }
       this.search()
     },
-    newTree (tree) {
+    newTree(tree) {
       if (tree == null) {
         return []
       }
@@ -259,12 +348,12 @@
         return newItem
       })
     },
-    selectDate (v) {
+    selectDate(v) {
       this.searchForm.endTime = v[1] + ' 23:59:59'
       this.searchForm.startTime = v[0] + ' 00:00:00'
       this.searchForm.radio = null
     },
-    reset () {
+    reset() {
       this.$refs.searchForm.resetFields()
       this.date = []
       this.searchForm.radio = '0'
@@ -272,17 +361,16 @@
       this.searchForm.endTime = ''
       this.changeRadio('0')
     },
-    copy (row) {
+    copy(row) {
       const text = `${row.realName} 閭�璇锋偍鍔犲叆浼氳\n浼氳涓婚锛�${row.name}\n浼氳瀹わ細${row.roomName}\n浼氳鏃堕棿锛�${row.meetingTime}\n鐐瑰嚮閾炬帴鐩存帴鍔犲叆浼氳锛歕n${this.link}?id=${row.id}`
       this.$copyText(text)
         .then(() => {
           this.$message.success('浼氳淇℃伅澶嶅埗鎴愬姛锛屽幓鍒嗕韩缁欏悓浜嬪惂~')
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
-    cancelMeeting (id) {
+    cancelMeeting(id) {
       this.$dialog.messageWaring('鍙栨秷浼氳', '鏄惁鍙栨秷褰撳墠浼氳锛�')
         .then(() => {
           cancelById({ id })
@@ -291,29 +379,26 @@
               this.handlePageChange()
             })
             .catch(e => {
-              this.$message.error(e)
             })
         })
     },
-    showDetail (id) {
+    showDetail(id) {
       bookingsDetail(id)
         .then(res => {
           this.$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', res)
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
-    editBookings (id) {
+    editBookings(id) {
       bookingsDetail(id)
         .then(res => {
           this.$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', res)
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
-    handlePageChange (pageIndex) {
+    handlePageChange(pageIndex) {
       this.__checkApi()
       this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex
       this.isWorking.search = true
@@ -341,3 +426,31 @@
   }
 }
 </script>
+
+<style lang="scss" scoped>
+.detail_modal {
+  padding: 20px 16px;
+  .title {
+    text-align: center;
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 20px;
+  }
+  .h1 {
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 15px;
+  }
+  .line {
+    display: flex;
+    margin-bottom: 10px;
+    .label {
+      width: 70px;
+      color: #888888;
+    }
+    .value {
+      color: #333333;
+    }
+  }
+}
+</style>
diff --git a/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue b/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
index a1de55f..d0e96a2 100644
--- a/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsDetailWindow.vue
@@ -13,15 +13,19 @@
     <div class="content-style">
       <div class="item">
         <div class="item-title">鍙備細浜哄憳</div>
-        <div>{{ form.sysList.map(item => `${item.realName}`).join('锛�') }}</div>
+        <div>
+          {{ form.sysList.map((item) => `${item.realName}`).join("锛�") }}
+        </div>
       </div>
       <div class="item">
         <div class="item-title">浼氳鍐呭</div>
-        <div class="item-value">{{ form.content || '鏃�' }}</div>
+        <div class="item-value">{{ form.content || "鏃�" }}</div>
       </div>
       <div v-if="form.projectList.length" class="item">
         <div class="">鏈嶅姟椤�</div>
-        <div class="item-value">{{ form.projectList.map(item => item.projectName).join(' | ') }}</div>
+        <div class="item-value">
+          {{ form.projectList.map((item) => item.projectName).join(" | ") }}
+        </div>
       </div>
       <div class="item" v-if="form.fileList.length">
         <div class="item-title">闄勪欢</div>
@@ -43,8 +47,33 @@
       <div class="item-value">{{ form.managerInfo }}</div>
     </div>
     <div slot="footer">
-      <el-button @click="visible=false">鍙栨秷</el-button>
+      <el-button type="primary" v-if="form.meetingStatus == 1" @click="openCancel('0')">鎾ら攢</el-button>
+      <el-button v-if="form.meetingStatus == 2" type="primary" @click="openCancel('1')">缁撴潫</el-button>
+      <el-button @click="visible = false">鍙栨秷</el-button>
     </div>
+    <!-- 鍙栨秷/缁撴潫 -->
+    <el-dialog
+      :title="cancelParam.falg == '1' ? '缁撴潫浼氳' : '鎾ら攢浼氳'"
+      :visible.sync="isShowCancel"
+      append-to-body
+      width="500px"
+    >
+      <el-form style="padding: 30px">
+        <el-form-item label="鎾ゅ洖璇存槑">
+          <el-input
+            type="textarea"
+            :rows="4"
+            placeholder="璇疯緭鍏ヨ鏄庛��"
+            v-model="cancelParam.businessRemark"
+          >
+          </el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowCancel = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="onSubCancel()">纭畾</el-button>
+      </span>
+    </el-dialog>
   </GlobalAlertWindow>
 </template>
 
@@ -52,6 +81,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
 import FileLink from '@/views/meeting/components/common/FileLink'
+import { cancelById, overBookById } from '@/api/meeting/bookings'
 export default {
   name: 'OperaBookingsDetailWindow',
   extends: BaseOpera,
@@ -69,6 +99,7 @@
         projectList: [],
         remark: '',
         roomId: '',
+        meetingStatus: '',
         startTime: '',
         endTime: '',
         times: [],
@@ -81,6 +112,11 @@
       sysList: [],
       projectList: [],
       timelist: [],
+
+      isShowCancel: false,
+      cancelParam: {
+        flag: '0'
+      },
       // 楠岃瘉瑙勫垯
       rules: {
 
@@ -92,9 +128,22 @@
       api: '/meeting/bookings',
       'field.id': 'id'
     })
-
   },
   methods: {
+    openCancel (flag) {
+      this.isShowCancel = true
+      this.cancelParam.flag = flag
+    },
+    onSubCancel () {
+      const { id } = this.form
+      const fn = this.cancelParam.flag === '0' ? cancelById : overBookById
+      fn({ id, businessRemark: this.cancelParam.businessRemark }).then(res => {
+        this.$tip.success('鎻愪氦鎴愬姛')
+        this.visible = false
+        this.isShowCancel = false
+        this.$emit('success')
+      })
+    }
     /**
      * 鎵撳紑绐楀彛
      * @title 绐楀彛鏍囬
@@ -124,7 +173,7 @@
     //   })
     // },
 
-  },
+  }
 }
 </script>
 
@@ -160,5 +209,4 @@
 .bottom-style {
   padding: 20px;
 }
-
 </style>
diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue
index b998662..c81231c 100644
--- a/admin/src/views/meeting/components/OperaBookingsWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -31,7 +31,11 @@
             class="time-item"
             v-for="(item, index) in timelist"
             :key="item.id"
-            :class="form.times.indexOf(index)!=-1?'time-item-sel': item.isUse ? 'time-item-disable' : ''"
+            :class="{
+              'time-item-sel': form.times.indexOf(index)!=-1,
+              'time-item-disable': item.isUse,
+              'disable': item.bookingTimeId
+            }"
             @click="selectTimes(index, item)"
           >{{ `${item.startTime}-${item.endTime}` }}</div>
         </div>
@@ -40,7 +44,7 @@
         <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁富棰�" :maxlength="30" v-trim/>
       </el-form-item>
 
-      <el-form-item label="鍙備細浜哄憳" prop="sysList">
+      <el-form-item label="鍙備細浜哄憳">
         <!-- <el-input style="width:40%" disabled v-model="sysList" placeholder="閫夋嫨鍙備細浜哄憳" v-trim/> -->
         <el-select
           v-model="form.sysList"
@@ -94,6 +98,32 @@
       </el-form-item>
       <input type="file" @change="upFiles" ref="upFile" style="display: none;" />
     </el-form>
+
+    <el-dialog
+      title="浼氳瀹ら绾︽儏鍐�"
+      :visible.sync="isShowDetail"
+      append-to-body
+      width="600px"
+    >
+      <div class="detail_modal">
+        <div class="h1">{{ activeInfo.meetingName }}</div>
+        <div class="line">
+          <div class="label">浼氳鏃堕棿</div>
+          <div class="value" v-if="activeInfo.meetingDate">
+            {{ activeInfo.meetingDate.slice(5) }} {{ activeInfo.meetingTime }}
+          </div>
+        </div>
+        <div class="line">
+          <div class="label">浼氳瀹�</div>
+          <div class="value">{{ activeInfo.roomName }}</div>
+        </div>
+        <div class="line">
+          <div class="label">棰勭害浜�</div>
+          <div class="value">{{ activeInfo.bookingUserName }}</div>
+        </div>
+        <el-button @click="isShowDetail = false">鍏抽棴</el-button>
+      </div>
+    </el-dialog>
   </GlobalAlertWindow>
 </template>
 
@@ -101,9 +131,10 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
 import FileLink from '@/views/meeting/components/common/FileLink'
-import { upload as upload } from '@/api/system/common'
+import { upload } from '@/api/system/common'
 import { fetchList as userList } from '@/api/system/user'
 import { findListByObjId } from '@/api/meeting/projects'
+import { BookDetailById } from '@/api/meeting/bookings'
 import { findList } from '@/api/meeting/roomTime'
 import { numRule, arrayRule } from '@/utils/form'
 export default {
@@ -126,8 +157,10 @@
         times: [],
         content: '',
         sysList: [],
-        fileList: [],
+        fileList: []
       },
+      activeInfo: {},
+      isShowDetail: false,
       isEdit: false,
       // room: [],
       sysList: [],
@@ -136,20 +169,20 @@
       // 楠岃瘉瑙勫垯
       rules: {
         roomId: [
-         { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
+          { required: true, validator: numRule, message: '璇烽�夋嫨鍏宠仈浼氳瀹�', tigger: 'change' }
         ],
         date: [
-         { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
+          { required: true, message: '璇烽�夋嫨棰勫畾鏃ユ湡', tigger: 'change' }
         ],
         times: [
-         { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
+          { required: true, validator: arrayRule, message: '璇烽�夋嫨棰勭害鏃堕棿', tigger: 'change' }
         ],
         sysList: [
-         { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
+          { required: true, validator: arrayRule, message: '璇烽�夋嫨鍙備細浜哄憳', tigger: 'change' }
         ],
         name: [
-         { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
-        ],
+          { required: true, message: '璇烽�夋嫨杈撳叆浼氳涓婚', tigger: 'blur' }
+        ]
         // content: [
         //  { required: true, message: '璇疯緭鍏ヤ細璁唴瀹�', tigger: 'blur' }
         // ],
@@ -165,10 +198,10 @@
     userList({
       page: 1,
       capacity: 9999,
-      model: { realname: this.filterText },
+      model: { realname: this.filterText }
     })
       .then(res => {
-        console.log('userList', res);
+        console.log('userList', res)
         this.sysList = res.records
       })
   },
@@ -178,7 +211,7 @@
      * @title 绐楀彛鏍囬
      * @target 缂栬緫鐨勫璞�
      */
-     open (title, target) {
+    open (title, target) {
       this.title = title
       this.visible = true
       this.timelist = []
@@ -187,8 +220,6 @@
       if (target == null) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
-          console.log(this.form.content);
-          debugger
           this.form[this.configData['field.id']] = null
         })
         return
@@ -208,7 +239,7 @@
         this.selectRoom(this.form.roomId)
       })
     },
-    selectRoom(objId) {
+    selectRoom (objId) {
       this.getTimes()
       findListByObjId({
         objId: objId,
@@ -218,11 +249,11 @@
           this.projectList = res
         })
     },
-    selectDate(v) {
+    selectDate (v) {
       // console.log(v);
       this.getTimes()
     },
-    getTimes(isInit=false) {
+    getTimes (isInit = false) {
       this.form.times = []
       this.timelist = []
 
@@ -259,33 +290,45 @@
           })
       }
     },
-    selectTimes(index, item) {
+    getDetail (id) {
+      BookDetailById({
+        id
+      }).then(res => {
+        this.activeInfo = res
+        this.isShowDetail = true
+      })
+    },
+    selectTimes (index, item) {
+      if (item.bookingTimeId) {
+        this.getDetail(item.bookingTimeId)
+        return
+      }
       if (this.isEdit) {
         return
       }
-      let tempIndex = this.form.times.indexOf(index)
+      const tempIndex = this.form.times.indexOf(index)
       if (tempIndex != -1) {
-        if (tempIndex==0) {
+        if (tempIndex == 0) {
           // console.log(this.form.times);
           // debugger
           this.form.times.splice(0, 1)
-        } else if (tempIndex==this.form.times.length-1) {
+        } else if (tempIndex == this.form.times.length - 1) {
           this.form.times.splice(tempIndex, 1)
         }
       } else {
         if (item.isUse) {
           return
         }
-        if (this.form.times.length && index+1 !== this.form.times[0] && index-1 !== this.form.times[this.form.times.length-1]) {
+        if (this.form.times.length && index + 1 !== this.form.times[0] && index - 1 !== this.form.times[this.form.times.length - 1]) {
           this.$message.error('棰勭害鏃堕棿蹇呴』鏄浉閭荤殑锛�')
           return
         }
         this.form.times.push(index)
-        this.form.times.sort((x,y)=> x - y)
+        this.form.times.sort((x, y) => x - y)
       }
       // console.log(this.form.times);
     },
-    upFiles(file) {
+    upFiles (file) {
       const formdate = new FormData()
       this.isUploading = true
       formdate.append('file', file.target.files[0])
@@ -318,21 +361,21 @@
         this.isWorking = true
         let sysList = [...this.form.sysList]
         sysList = sysList.map(item => {
-          return {userId: item}
+          return { userId: item }
         })
         let projectList = [...this.form.projectList]
         projectList = projectList.map(item => {
-          return {projectId: item}
+          return { projectId: item }
         })
-        let bookingTimeList = []
+        const bookingTimeList = []
         this.form.times.forEach(item => {
           bookingTimeList.push({
             timeId: this.timelist[item].id,
             id: this.timelist[item].bookingTimeId
           })
         })
-        let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
-        let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00'
+        const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+        const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
         this.api.create({
           ...this.form,
           sysList,
@@ -364,21 +407,21 @@
         this.isWorking = true
         let sysList = [...this.form.sysList]
         sysList = sysList.map(item => {
-          return {userId: item}
+          return { userId: item }
         })
         let projectList = [...this.form.projectList]
         projectList = projectList.map(item => {
-          return {projectId: item}
+          return { projectId: item }
         })
-        let bookingTimeList = []
+        const bookingTimeList = []
         this.form.times.forEach(item => {
           bookingTimeList.push({
             timeId: this.timelist[item].id,
             id: this.timelist[item].bookingTimeId
           })
         })
-        let startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
-        let endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length-1]].endTime + ':00'
+        const startTime = this.form.date + ' ' + this.timelist[this.form.times[0]].startTime + ':00'
+        const endTime = this.form.date + ' ' + this.timelist[this.form.times[this.form.times.length - 1]].endTime + ':00'
         this.api.updateById({
           ...this.form,
           sysList,
@@ -400,7 +443,7 @@
           })
       })
     }
-  },
+  }
 }
 </script>
 
@@ -433,10 +476,40 @@
     color: #fff;
   }
   .time-item-disable {
+    color: #e4e4e4;
+    border-color: #999;
+    background-color: #999;
+  }
+  .disable{
     border-color: #999;
     background-color: #999;
     color: #111;
   }
 }
+.detail_modal {
+  padding: 20px 16px;
+  .title {
+    text-align: center;
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 20px;
+  }
+  .h1 {
+    font-weight: 600;
+    font-size: 16px;
+    margin-bottom: 15px;
+  }
+  .line {
+    display: flex;
+    margin-bottom: 10px;
+    .label {
+      width: 70px;
+      color: #888888;
+    }
+    .value {
+      color: #333333;
+    }
+  }
+}
 
 </style>
diff --git a/admin/src/views/meeting/devices.vue b/admin/src/views/meeting/devices.vue
index cd564ba..236e75e 100644
--- a/admin/src/views/meeting/devices.vue
+++ b/admin/src/views/meeting/devices.vue
@@ -144,7 +144,6 @@
           this.$message.success('淇敼鎴愬姛')
         })
         .catch(e => {
-          this.$message.error(e)
         })
         .finally(() => {
           this.handlePageChange()
diff --git a/admin/src/views/meeting/rooms.vue b/admin/src/views/meeting/rooms.vue
index 0b49a6c..4fbc523 100644
--- a/admin/src/views/meeting/rooms.vue
+++ b/admin/src/views/meeting/rooms.vue
@@ -152,7 +152,7 @@
       }
     }
   },
-  provide() {
+  provide () {
     return {
       userList: () => this.userList
     }
@@ -167,7 +167,7 @@
     userList({
       page: 1,
       capacity: 9999,
-      model: { realname: this.filterText },
+      model: { realname: this.filterText }
     })
       .then(res => {
         this.userList = res.records
@@ -175,16 +175,16 @@
     this.search()
   },
   methods: {
-     // 椤电爜鍙樻洿澶勭悊
+    // 椤电爜鍙樻洿澶勭悊
     handlePageChange (pageIndex) {
       this.__checkApi()
       this.tableData.pagination.pageIndex = pageIndex || this.tableData.pagination.pageIndex
       this.isWorking.search = true
       let sysList = [...this.searchForm.sysList]
       sysList = sysList.map(item => {
-        return {userId: item}
+        return { userId: item }
       })
-      console.log(sysList);
+      console.log(sysList)
       this.api.fetchList({
         page: this.tableData.pagination.pageIndex,
         capacity: this.tableData.pagination.pageSize,
@@ -209,23 +209,21 @@
     //   console.log('21212');
     //   this.$refs.selectMember.open('閫夋嫨绠$悊鍛�')
     // },
-    changeStatus(item) {
+    changeStatus (item) {
       updateStatusById({
         id: item.id,
         status: item.status
       })
         .then(() => {
           this.$message.success('淇敼鎴愬姛')
-
         })
         .catch(e => {
-          this.$message.error(e)
         })
         .finally(() => {
           this.handlePageChange()
         })
     }
-  },
+  }
 }
 </script>
 
diff --git a/admin/src/views/operation/serviceCar/apprConfig.vue b/admin/src/views/operation/serviceCar/apprConfig.vue
index 9f397cf..4473aac 100644
--- a/admin/src/views/operation/serviceCar/apprConfig.vue
+++ b/admin/src/views/operation/serviceCar/apprConfig.vue
@@ -164,8 +164,8 @@
             <div>鍏佽淇敼"椹鹃┒鍛�"</div>
             <el-switch
               class="ml10"
-              active-value="0"
-              inactive-value="1"
+              :active-value="1"
+              :inactive-value="0"
               v-model="apprList[activeIndex].driverParam"
             ></el-switch>
           </div>
diff --git a/admin/src/views/operation/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index 6c8f7d5..85828a2 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -17,7 +17,7 @@
           <el-option label="瀹℃牳涓�" value="1"></el-option>
           <el-option label="瀹℃壒閫氳繃" value="2"></el-option>
           <el-option label="瀹℃壒涓嶉�氳繃" value="3"></el-option>
-          <el-option label="宸插彇娑�" value="4"></el-option>
+          <el-option label="宸叉挙閿�" value="4"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鐩殑鍦扮被鍨�" prop="type">
@@ -83,10 +83,10 @@
         <el-table-column label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <span class="status-blue"  v-if="row.status === 0">鐢宠涓�</span>
-            <span class="status-blue"  v-if="row.status === 1">寰呭鎵�</span>
+            <span class="status-blue"  v-if="row.status === 1">瀹℃牳涓�</span>
             <span class="status-green" v-if="row.status === 2">瀹℃壒閫氳繃</span>
             <span class="status-red"   v-if="row.status === 3">瀹℃壒涓嶉�氳繃</span>
-            <span class="status-red"   v-if="row.status === 4">宸插彇娑�</span>
+            <span class="status-red"   v-if="row.status === 4">宸叉挙閿�</span>
           </template>
         </el-table-column>
 
@@ -94,12 +94,13 @@
         <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
             label="鎿嶄綔"
-            min-width="100"
+            min-width="140"
             align="center"
             fixed="right"
         >
           <template slot-scope="{row}">
             <el-button type="text" icon="el-icon-edit" @click="$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�',row)" >鏌ョ湅璇︽儏</el-button>
+            <el-button v-if="(row.status === 1 || row.status === 2) && new Date().getTime() < new Date(row.startTime).getTime()" type="text" icon="el-icon-delete" @click="rowRevokeClick(row)" >鎾ら攢</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -123,7 +124,7 @@
 import OperaCarUseBookParamWindow from '@/components/operation/OperCarUseBookParamWindow.vue'
 import { timeForMat } from '@/utils/util'
 import { allList } from '@/api/business/hiddenDangerParam'
-import { carUseBookRecordEx } from '@/api/business/carUseBook'
+import { carUseBookRecordEx, revokeById } from '@/api/business/carUseBook'
 export default {
   name: 'Empower',
   extends: BaseTable,
@@ -157,6 +158,9 @@
     this.loadParams()
   },
   methods: {
+    rowRevokeClick (row) {
+      revokeById(row.id)
+    },
     handleEx () {
       this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
         .then(() => {
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index d4a61d0..2a8a038 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -121,7 +121,8 @@
 import dayjs from 'dayjs'
 import {
   taskCenterHeadPC,
-  taskCenterPage
+  taskCenterPage,
+  taskSignRead
 } from '@/api'
 export default {
   components: {
@@ -201,6 +202,14 @@
       this.getList()
     },
     handleDetail (row) {
+      if (this.filters.queryType == 3) {
+        taskSignRead({
+          noticesId: row.id,
+          signType: 0
+        }).then(res => {
+          this.getHeadData()
+        })
+      }
       if (row.objType === 2) {
         this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', row)
         return
@@ -260,7 +269,7 @@
       })
     },
     getHeadData () {
-      const {filters} = this
+      const { filters } = this
       if (filters.selTime && filters.selTime.length > 0) {
         filters.startDate = filters.selTime[0]
         filters.endDate = filters.selTime[1]
diff --git a/admin/src/views/task/visSubDetail.vue b/admin/src/views/task/visSubDetail.vue
index b9595dc..8f04d80 100644
--- a/admin/src/views/task/visSubDetail.vue
+++ b/admin/src/views/task/visSubDetail.vue
@@ -5,7 +5,7 @@
         <div class="header">
           <div class="left">
             <div class="h1">{{ cateList[type] }}</div>
-            <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+            <div class="time">鎻愪氦鏃堕棿锛歿{ info.createTime }}</div>
           </div>
           <div class="right">{{ statusMap[info.status] }}</div>
         </div>
@@ -68,7 +68,13 @@
               label="璇佷欢绫诲瀷"
               prop="idcardTypeName"
               min-width="80"
-            />
+            >
+              <template slot-scope="{ row }">
+                <span v-if="row.idcardType == 0">韬唤璇�</span>
+                <span v-if="row.idcardType == 1">娓境璇佷欢</span>
+                <span v-if="row.idcardType == 2">鎶ょ収</span>
+              </template>
+            </el-table-column>
             <el-table-column
               label="璇佷欢鍙风爜"
               prop="idCardDecode"
@@ -81,7 +87,7 @@
             />
             <el-table-column label="浜鸿劯鐓х墖" prop="" min-width="80">
               <template slot-scope="{ row }">
-                <el-image :src="row.prefix" :preview-src-list="[row.prefix]">
+                <el-image :src="row.prefix + row.faceImg" :preview-src-list="[row.prefix + row.faceImg]">
                 </el-image>
               </template>
             </el-table-column>
diff --git a/h5/App.vue b/h5/App.vue
index 622fd7a..a46a53b 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -6,6 +6,7 @@
     if (!that.$store.state.openid) {
       let url = window.location.href
       let code = ''
+      let source = ''
       if (url.indexOf('code=') !== -1) {
         const query = url.split('?')
         console.log('app-app', url)
@@ -13,9 +14,13 @@
           if (q.indexOf('code=') !== -1) {
             code = q.substring(q.indexOf('code=') + 5, q.length)
           }
+          if (q.indexOf('source=') !== -1) {
+            source = q.substring(q.indexOf('source=') + 7,q.indexOf('source=') + 8 )
+          }
         }
         wxAuthorize({
-          code: code
+          code: code,
+          source
         }).then(res => {
           console.log('app_ress', res)
           if (res.code === 200) {
diff --git a/h5/api/meeting.js b/h5/api/meeting.js
index 29ba261..c9f6413 100644
--- a/h5/api/meeting.js
+++ b/h5/api/meeting.js
@@ -83,7 +83,15 @@
 export const cancelById = (data) => {
   return http({
     url: 'meetingAdmin/cloudService/business/meeting/reservationCancel',
-    method: 'get',
+    method: 'post',
+    data
+  })
+}
+// 浼氳瀹� 缁撴潫
+export const closeMeetignById = (data) => {
+  return http({
+    url: 'meetingAdmin/cloudService/business/meeting/reservationOver',
+    method: 'post',
     data
   })
 }
diff --git a/h5/api/staff.js b/h5/api/staff.js
index c9688d4..d32ffdc 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -205,4 +205,12 @@
     method: 'post',
     data
   })
-}
\ No newline at end of file
+}
+//  浠诲姟涓績 鏍囪宸茶
+export const signReadTask = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/staging/signRead',
+    method: 'get',
+    data
+  })
+}
diff --git a/h5/components/Li-Calendar/Li-Calendar.vue b/h5/components/Li-Calendar/Li-Calendar.vue
index f8f970c..8503056 100644
--- a/h5/components/Li-Calendar/Li-Calendar.vue
+++ b/h5/components/Li-Calendar/Li-Calendar.vue
@@ -858,8 +858,8 @@
   /* color: #000; */
 }
 .calendar-today {
-  /* border-radius: 6upx;
-	background-color: $uni-color-primary; */
+   border-radius: 6rpx;
+	background-color: #e9f4f6; 
   color: $uni-color-primary;
   /* -moz-box-shadow: 0px 2upx 10upx #ABABAB;
 	-webkit-box-shadow: 0px 2upx 10upx #ABABAB;
diff --git a/h5/pages.json b/h5/pages.json
index 3384649..31a0fd0 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -28,8 +28,7 @@
 			"path": "pages/staffLogin/login",
 			"style": {
 				"navigationBarTitleText": "鐧诲綍",
-				"enablePullDownRefresh": false,
-				"navigationStyle": "custom"
+				"enablePullDownRefresh": false	
 			}
 		},
 		{
diff --git a/h5/pages/applicationRecord/applicationRecord.vue b/h5/pages/applicationRecord/applicationRecord.vue
index b9d0641..98b1598 100644
--- a/h5/pages/applicationRecord/applicationRecord.vue
+++ b/h5/pages/applicationRecord/applicationRecord.vue
@@ -36,7 +36,7 @@
         :key="index"
       >
         <view class="box_list_item_head">
-          <text>{{ item.name }}鐨勫姵鍔″叆鍥敵璇�</text>
+          <text>{{ item.name }}鎻愪氦鐨勮瀹㈢敵璇�</text>
           <text class="loading">{{ statusMap[item.status] }}</text>
         </view>
         <view class="box_list_item_nr">
diff --git a/h5/pages/login/login.vue b/h5/pages/login/login.vue
index 94f9275..c459474 100644
--- a/h5/pages/login/login.vue
+++ b/h5/pages/login/login.vue
@@ -11,7 +11,7 @@
       </view>
       <u-icon name="arrow-right" size="24" color="#979797" />
     </view>
-    <view class="item" @click="jump('/pages/staffLogin/login')">
+    <view class="item" @click="staffLogin">
       <image class="avatar" src="@/static/ic_staff@2x.png" />
       <view class="content">
         <view class="name">鎴戞槸鍛樺伐</view>
@@ -34,10 +34,22 @@
 export default {
   methods: {
     jump(url) {
-      console.log(url);
+      console.log(url)
       uni.navigateTo({
         url
       })
+    },
+    staffLogin() {
+      const userInfo = uni.getStorageSync('userInfo') || {}
+      if (userInfo && userInfo.memberId) {
+        uni.navigateTo({
+          url: '/pages/staff/index'
+        })
+      }else{
+        uni.navigateTo({
+          url: '/pages/staffLogin/login'
+        })
+      }
     }
   }
 }
@@ -66,7 +78,7 @@
     line-height: 66rpx;
     margin-bottom: 16rpx;
   }
-  .place{
+  .place {
     margin-bottom: 98rpx;
   }
   .item {
diff --git a/h5/pages/staff/index.vue b/h5/pages/staff/index.vue
index 054cca9..888b8bd 100644
--- a/h5/pages/staff/index.vue
+++ b/h5/pages/staff/index.vue
@@ -63,7 +63,7 @@
         <image class="img" src="@/static/staff/ic_renwuzhongxin.png"></image>
         <view class="h1">浠诲姟涓績</view>
         <view class="h2">TASK CENTER</view>
-        <view class="task_num">{{ taskNum }}</view>
+        <view class="task_num">{{ taskInfo.noticeWaitNum + taskInfo.noticeCopyNum }}</view>
       </view>
       <view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')">
         <image class="img" src="@/static/staff/ic_wodehuiyi.png"></image>
@@ -94,11 +94,10 @@
   data() {
     return {
       userInfo: uni.getStorageSync('userInfo'),
-      taskNum: 0
+      taskInfo: 0
     }
   },
   onLoad() {
-    console.log('userInfo', this.userInfo)
   },
   onShow() {
     if (this.userInfo && this.userInfo.memberId) {
@@ -120,9 +119,9 @@
     },
     getTaskInfo() {
       stagingHead({
-        isDetail: '0'
+        isDetail: '1'
       }).then(res => {
-        this.taskNum = res.data.taskNum
+        this.taskInfo = res.data
       })
     },
   }
diff --git a/h5/pages/staff/meetingCalendar.vue b/h5/pages/staff/meetingCalendar.vue
index 1a6b653..64a22be 100644
--- a/h5/pages/staff/meetingCalendar.vue
+++ b/h5/pages/staff/meetingCalendar.vue
@@ -463,6 +463,10 @@
             font-weight: 600;
             font-size: 32rpx;
             color: #222222;
+            flex: 1;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
           }
           .status {
             height: 38rpx;
@@ -472,6 +476,10 @@
             border: 1rpx solid #999999;
             font-size: 22rpx;
             color: #999999;
+            margin-left: 20rpx;
+            display: flex;
+            justify-content: center;
+            align-items: center;
           }
           .padding {
             color: $uni-color-primary;
diff --git a/h5/pages/staff/meetingDetail.vue b/h5/pages/staff/meetingDetail.vue
index 0222759..fd97fcf 100644
--- a/h5/pages/staff/meetingDetail.vue
+++ b/h5/pages/staff/meetingDetail.vue
@@ -10,7 +10,7 @@
     <!--  -->
     <view class="empty"></view>
     <view class="module_list">
-      <view class="item">
+      <view class="item" v-if="detail.meetingContent">
         <view class="label">浼氳鍐呭</view>
         <view class="value">
           <!-- <text>涓昏璁ㄨ鏅鸿兘浼氳瀹ょ郴缁熼�夊瀷锛岃澶у涓�瀹氳鎸夋椂鏉ュ紑浼氾紝鏃堕棿瀹濊吹銆傛劅璋㈠ぇ瀹讹紒</text> -->
@@ -24,7 +24,7 @@
           />
         </view>
       </view>
-      <view class="item">
+      <view class="item" v-if="detail.userResponseList && detail.userResponseList.length > 0">
         <view class="label">鍙備細浜哄憳</view>
         <view class="value">
           <view class="personnel">
@@ -33,13 +33,19 @@
               v-for="mem in detail.userResponseList"
               :key="mem.id"
             >
-              <image :src="mem.avatar ? mem.avatar : require('@/static/meeting/common/default_user@2x.png')" class="avatar" mode=""></image>
+              <image
+                v-if="mem.avatar"
+                :src="mem.avatar"
+                class="avatar"
+                mode=""
+              ></image>
+              <view v-else class="avatar">{{ mem.realname.slice(0, 1) }}</view>
               <view class="name">{{ mem.realname }}</view>
             </view>
           </view>
         </view>
       </view>
-      <view class="item">
+      <view class="item" v-if="detail.projectsResponseList && detail.projectsResponseList.length > 0">
         <view class="label">鏈嶅姟椤�</view>
         <view class="value">
           <template v-for="(ser, serI) in detail.projectsResponseList">
@@ -54,13 +60,13 @@
           </template>
         </view>
       </view>
-      <view class="item">
+      <view class="item" v-if="detail.remark || detail.meetingRemark">
         <view class="label">澶囨敞</view>
         <view class="value">{{ detail.remark || detail.meetingRemark }}</view>
       </view>
       <view class="item">
         <view class="label">棰勭害浜�</view>
-        <view class="value"
+        <view class="value" v-if="detail.bookingUser"
           >{{ detail.bookingUser.companyName || "" }}
           {{ detail.bookingUser.realname }}
           {{ detail.bookingUser.mobile }}</view
@@ -69,22 +75,72 @@
     </view>
     <view class="empty empty2"></view>
     <view class="main_footer" v-if="detail.meetingStatus == '1'">
-      <view class="btn" @click="handleCancel(detail.id)">鎾ゅ洖</view>
+      <view class="btn" @click="openCancel">鎾ゅ洖</view>
       <view class="btn agree" @click="handleEdit">淇敼</view>
     </view>
     <view class="main_footer" v-if="detail.meetingStatus == '2'">
-      <view class="btn agree" @click="handleSub('2')">缁撴潫</view>
+      <view class="btn agree" @click="openClose">缁撴潫</view>
     </view>
+    <!-- 鎾ゅ洖 -->
+    <u-popup
+      catchtouchmove
+      :show="isShowCancel"
+      closeable
+      :round="12"
+      mode="bottom"
+      @close="isShowCancel = false"
+    >
+      <view class="cancel_modal">
+        <view class="title">鎾ら攢棰勭害</view>
+        <view class="line">
+          <view class="label">鎾ゅ洖璇存槑</view>
+          <textarea
+            class="textarea"
+            placeholder="璇疯緭鍏�"
+            maxlength="300"
+            v-model="cancelParam.businessRemark"
+          />
+        </view>
+        <view class="sub_btn" @click="handleCancel('0')">鎻愪氦</view>
+      </view>
+    </u-popup>
+    <!-- 缁撴潫 -->
+    <u-popup
+      catchtouchmove
+      closeable
+      :show="isShowClose"
+      :round="12"
+      mode="bottom"
+      @close="isShowClose = false"
+    >
+      <view class="cancel_modal">
+        <view class="title">缁撴潫棰勭害</view>
+        <view class="line">
+          <view class="label">缁撴潫璇存槑</view>
+          <textarea
+            class="textarea"
+            placeholder="璇疯緭鍏�"
+            maxlength="300"
+            v-model="cancelParam.businessRemark"
+          />
+        </view>
+        <view class="sub_btn" @click="handleCancel('1')">鎻愪氦</view>
+      </view>
+    </u-popup>
   </view>
 </template>
 
 <script>
-import { meetingDetail, cancelById } from '@/api'
+import { meetingDetail, cancelById, closeMeetignById } from '@/api'
 export default {
   data() {
     return {
       param: {},
       detail: {},
+
+      cancelParam: {},
+      isShowCancel: false,
+      isShowClose: false,
       id: ''
     }
   },
@@ -99,30 +155,30 @@
         this.detail = res.data
       })
     },
-    handleCancel(id) {
-      uni.showModal({
-        title: '鎻愮ず',
-        // confirmText: '纭',
-        content: '纭鎾ゅ洖璇ヤ細璁悧',
-        success: function (res) {
-          if (res.confirm) {
-            cancelById({ id }).then(res => {
-              if (res.code === 200) {
-                setTimeout(() => {
-                  uni.showToast({
-                    title: '鎾ゅ洖鎴愬姛',
-                    icon: 'success'
-                  })
-                })
-                setTimeout(() => {
-                  uni.navigateBack()
-                })
-              }
+    openCancel() {
+      this.isShowCancel = true
+      this.cancelParam = {}
+    },
+    openClose() {
+      this.isShowClose = true
+      this.cancelParam = {}
+    },
+    handleCancel(str) {
+      const { id } = this.detail
+      let fn = str == '0' ? cancelById : closeMeetignById
+      fn({ id, ...this.cancelParam }).then(res => {
+        if (res.code === 200) {
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎻愪氦鎴愬姛',
+              icon: 'success'
             })
-          }
+          })
+          setTimeout(() => {
+            uni.navigateBack()
+          })
         }
       })
-
     },
     handleEdit() {
       const { id } = this
@@ -189,10 +245,12 @@
           flex-direction: column;
           justify-content: center;
           align-items: center;
+          justify-content: center;
           margin-right: 24rpx;
           .avatar {
             width: 72rpx;
             height: 72rpx;
+            margin: 0;
             border-radius: 50%;
           }
           .name {
@@ -241,4 +299,31 @@
 .empty2 {
   height: 280rpx !important;
 }
+.cancel_modal {
+  height: 440rpx;
+  padding: 30rpx;
+  .title {
+    padding: 0 30rpx 50rpx;
+    text-align: center;
+  }
+  .line {
+    .label {
+      margin-bottom: 10rpx;
+    }
+    textarea {
+      height: 120rpx;
+    }
+  }
+  .sub_btn {
+    background-color: $uni-color-primary;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    color: #fff;
+    border-radius: 44rpx;
+    width: 690rpx;
+    height: 88rpx;
+    margin: 20rpx auto;
+  }
+}
 </style>
diff --git a/h5/pages/staff/meetingManager.vue b/h5/pages/staff/meetingManager.vue
index 8772ad0..b7c7bef 100644
--- a/h5/pages/staff/meetingManager.vue
+++ b/h5/pages/staff/meetingManager.vue
@@ -179,7 +179,6 @@
     getRoomList() {
       roomsListPost({}).then(res => {
         this.meetingList = [[{ id: '', name: '鍏ㄩ儴浼氳瀹�' }, ...res.data]]
-        console.log('meetingList', this.meetingList)
       })
     },
     seletedStatus(e) {
@@ -355,9 +354,14 @@
             font-weight: 600;
             font-size: 32rpx;
             color: #222222;
+            flex: 1;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
           }
           .status {
             height: 38rpx;
+            margin-left: 20rpx;
             line-height: 38rpx;
             padding: 0 16rpx;
             border-radius: 4rpx;
diff --git a/h5/pages/staff/meetingSel.vue b/h5/pages/staff/meetingSel.vue
index 64654fa..ba35cde 100644
--- a/h5/pages/staff/meetingSel.vue
+++ b/h5/pages/staff/meetingSel.vue
@@ -347,6 +347,8 @@
           color: #f62710;
           padding: 0rpx 6rpx;
           margin-left: 8rpx;
+          display: flex;
+          align-items: center;
         }
       }
     }
diff --git a/h5/pages/staff/meetingSub.vue b/h5/pages/staff/meetingSub.vue
index 5bf6b0b..f4f8d62 100644
--- a/h5/pages/staff/meetingSub.vue
+++ b/h5/pages/staff/meetingSub.vue
@@ -57,7 +57,7 @@
             <view class="">{{ item.name }}</view>
           </view>
         </view>
-        <view class="sub" @click="onSubmit">纭棰勭害</view>
+        <view class="sub" :class="{disable: !selDatetime}" @click="onSubmit">纭棰勭害</view>
       </view>
     </view>
     <!--  -->
@@ -134,7 +134,8 @@
       this.getRoomTime()
     },
     onSubmit() {
-      const { activeRoom } = this
+      const { activeRoom, selDatetime } = this
+      if(!selDatetime) return
       const selTimeList = this.timeList.filter(i => i.checked == '1')
       if (selTimeList.length == -1) {
         return uni.showToast({
@@ -332,12 +333,14 @@
       font-size: 30rpx;
       color: #ffffff;
     }
+    .disable {
+      background-color: #cccccc;
+    }
   }
 }
 .time_list {
   display: flex;
-  justify-content: space-between;
-  padding: 30rpx;
+  padding: 30rpx 30rpx 240rpx;
   flex-wrap: wrap;
   .item {
     width: 220rpx;
@@ -348,6 +351,10 @@
     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;
diff --git a/h5/pages/staff/meetingSubOrder.vue b/h5/pages/staff/meetingSubOrder.vue
index 400120b..1d82d33 100644
--- a/h5/pages/staff/meetingSubOrder.vue
+++ b/h5/pages/staff/meetingSubOrder.vue
@@ -60,7 +60,7 @@
       <view class="item">
         <view class="name">
           鍙備細浜哄憳
-           <text class="star">*</text>
+           <text class="star"></text>
         </view>
         <view class="line" @click="selPeople">
           <view class="label">
@@ -215,6 +215,7 @@
       })
     },
     handleBack() {
+      if(this.param.id) return
       uni.navigateBack( )
     },
     onSubmit() {
@@ -223,10 +224,10 @@
         title: '璇疯緭鍏ヤ細璁富棰�',
         icon: 'none'
       })
-      if (!param.sysList || param.sysList.length == 0) return uni.showToast({
-        title: '璇烽�夋嫨鍙備細浜哄憳',
-        icon: 'none'
-      })
+      // if (!param.sysList || param.sysList.length == 0) return uni.showToast({
+      //   title: '璇烽�夋嫨鍙備細浜哄憳',
+      //   icon: 'none'
+      // })
       reservationMeeting({
         ...param,
         startTime: `${param.yudingDate} ${param.startTime}:00`,
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index 8ddde02..b0677bc 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -224,7 +224,7 @@
         icon: 'none'
       })
       if (!param.applyCheckUserId) return uni.showToast({
-        title: '璇烽�夋嫨鎺ュ彈浜�',
+        title: '璇烽�夋嫨鎺ユ敹浜�',
         icon: 'none'
       })
       if (!param.categoryName) return uni.showToast({
@@ -258,7 +258,7 @@
         this.$set(this.param, 'checkUserId', item.memberIds)
         this.$set(this.param, 'applyCheckUserId', item.memberIds)
         this.$set(this.param, 'checkorName', item.memberNames)
-      }else{
+      } else {
         this.$set(this.param, 'checkUserId', '')
         this.$set(this.param, 'applyCheckUserId', '')
         this.$set(this.param, 'checkorName', '')
diff --git a/h5/pages/staff/task/index.vue b/h5/pages/staff/task/index.vue
index f3545ba..942d23b 100644
--- a/h5/pages/staff/task/index.vue
+++ b/h5/pages/staff/task/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <view class="box">
+  <view class="box" :class="{ popupShow: showFilter }">
     <scroll-view scroll-x class="box_head">
       <view class="box_head_search">
         <view class="box_head_search_ipt">
@@ -21,7 +21,7 @@
           @click="statusClick(0)"
           :class="{ active: search.queryType === 0 }"
           class="box_head_item"
-          >寰呭鐞� {{ headData.noticeWaitNum || '' }}</view
+          >寰呭鐞� {{ headData.noticeWaitNum || "" }}</view
         >
         <view
           @click="statusClick(1)"
@@ -39,7 +39,7 @@
           @click="statusClick(3)"
           :class="{ active: search.queryType === 3 }"
           class="box_head_item"
-          >鎶勯�佹垜鐨� {{ headData.noticeCopyNum || '' }}</view
+          >鎶勯�佹垜鐨� {{ headData.noticeCopyNum || "" }}</view
         >
       </view>
     </scroll-view>
@@ -60,7 +60,7 @@
           />
           <text>浠呯湅鏈</text>
         </view>
-        <view class="right">鍏ㄩ儴鏍囪宸茶</view>
+        <view class="right" @click="handleReady">鍏ㄩ儴鏍囪宸茶</view>
       </view>
       <view
         class="box_list_item"
@@ -115,11 +115,7 @@
           <view class="box_list_item_nr_x"></view>
           <view class="box_list_item_nr_text">
             <text class="time">{{ item.createDate }}鎻愪氦</text>
-            <text
-              v-if="item.param2 == '0'"
-              class="btn"
-              >鍘诲鐞�</text
-            >
+            <text v-if="item.param2 == '0'" class="btn">鍘诲鐞�</text>
           </view>
         </view>
       </view>
@@ -141,17 +137,17 @@
       @close="showFilter = false"
     >
       <view class="search">
-        <view class="search_head">浠诲姟绛涢��</view>
+        <view class="search_head">绛涢��</view>
         <view class="search_list">
           <view class="search_list_item">
-            <view class="search_list_item_label">鍒涘缓鏃ユ湡</view>
+            <view class="search_list_item_label">鍒涘缓鏃堕棿</view>
             <view class="search_list_item_val">
               <view
                 class="search_list_item_val_row"
                 @click="tiemShow = true"
                 :style="{ color: modelParam.startDate ? '#000' : '' }"
                 >{{
-                  modelParam.startDate ? modelParam.startDate : "寮�濮嬫棩鏈�"
+                  modelParam.startDate ? modelParam.startDate : "寮�濮嬫椂闂�"
                 }}</view
               >
               <view class="search_list_item_val_z">-</view>
@@ -160,13 +156,13 @@
                 @click="tiemShow1 = true"
                 :style="{ color: modelParam.endDate ? '#000' : '' }"
                 >{{
-                  modelParam.endDate ? modelParam.endDate : "缁撴潫鏃ユ湡"
+                  modelParam.endDate ? modelParam.endDate : "缁撴潫鏃堕棿"
                 }}</view
               >
             </view>
           </view>
           <view class="search_list_item">
-            <view class="search_list_item_label">璁㈠崟鏉ユ簮</view>
+            <view class="search_list_item_label">浠诲姟绫诲瀷</view>
             <view class="search_list_item_cates">
               <view
                 :class="
@@ -184,23 +180,24 @@
           </view>
         </view>
         <view class="search_footer">
-          <view class="search_footer_item" @click="showFilter = false"
-            >鍙栨秷</view
-          >
+          <view class="search_footer_item" @click="modalReset">閲嶇疆</view>
           <view class="search_footer_item t" @click="modalSub">鎻愪氦</view>
         </view>
       </view>
     </u-popup>
     <u-datetime-picker
       :show="tiemShow"
-      v-model="modelParam.startDate"
+      v-model="startDate"
       mode="date"
       @confirm="confirmLeft"
       @cancel="tiemShow = false"
     ></u-datetime-picker>
     <u-datetime-picker
       :show="tiemShow1"
-      v-model="modelParam.endDate"
+      :minDate="
+        modelParam.startDate ? new Date(modelParam.startDate).getTime() : null
+      "
+      v-model="startDate"
       mode="date"
       @confirm="confirmRight"
       @cancel="tiemShow1 = false"
@@ -209,7 +206,7 @@
 </template>
 
 <script>
-import { stagingHead, stagingTaskPage } from '@/api'
+import { stagingHead, stagingTaskPage, signReadTask } from '@/api'
 import dayjs from 'dayjs'
 export default {
   data() {
@@ -218,10 +215,7 @@
       search: {
         queryType: 0
       },
-      modelParam: {
-        startDate: dayjs().format('YYYY-MM-DD'),
-        endDate: dayjs().format('YYYY-MM-DD'),
-      },
+      modelParam: {},
       tiemShow: false,
       tiemShow1: false,
 
@@ -237,7 +231,8 @@
         { name: '鐢ㄨ溅鐢宠', id: 2 },
         { name: '闅愭偅闅忔墜鎷�', id: 3 },
         { name: '鐗╂祦杞︾敵璇�', id: 4 },
-      ]
+      ],
+      startDate: dayjs().format('YYYY-MM-DD'),
     }
   },
   // onLoad() {
@@ -267,6 +262,13 @@
       this.pagination.page = 0
       this.dataList = []
       this.$set(this.search, 'noRead', val)
+      this.getList()
+    },
+    modalReset() {
+      this.modelParam = {}
+      this.pagination.page = 0
+      this.dataList = []
+      this.showFilter = false
       this.getList()
     },
     modalSub() {
@@ -306,8 +308,23 @@
         this.headData = res.data
       })
     },
+    handleReady() {
+      signReadTask({
+        signType: 1
+      }).then(res => {
+        this.getHeadList()
+      })
+    },
     handleAppr(item) {
       const { objType, objId } = item
+      if (this.search.queryType === 3) {
+        signReadTask({
+          noticesId: item.id,
+          signType: 0
+        }).then(res => {
+          this.getHeadList()
+        })
+      }
       if (objType === 2) {
         uni.navigateTo({
           url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&appr=1`
@@ -327,19 +344,21 @@
       }
     },
     clickItem(index) {
-      this.$set(this.modelParam, 'type', this.cateList[index].id)
+      if (this.cateList[index].id === this.modelParam.type) {
+        this.$set(this.modelParam, 'type', null)
+      } else {
+        this.$set(this.modelParam, 'type', this.cateList[index].id)
+      }
     },
     confirmLeft(e) {
-      console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
       setTimeout(() => {
-        this.modelParam.startDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
+        this.$set(this.modelParam, 'startDate', uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
       })
       this.tiemShow = false
     },
     confirmRight(e) {
-      // this.modelParam.endDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
       setTimeout(() => {
-        this.modelParam.endDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
+        this.$set(this.modelParam, 'endDate', uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
       })
       this.tiemShow1 = false
     }
@@ -588,8 +607,9 @@
             color: #ffffff !important;
           }
           .search_list_item_cates_row {
-            padding: 0 26rpx;
+            width: 216rpx;
             height: 64rpx;
+            text-align: center;
             line-height: 64rpx;
             background: #f7f7f7;
             border-radius: 36rpx;
@@ -598,8 +618,8 @@
             font-weight: 400;
             color: #333333;
             margin-bottom: 20rpx;
-            &:last-child {
-              margin: 0;
+            &:nth-of-type(3n) {
+              margin-right: 0;
             }
           }
         }
diff --git a/h5/pages/staff/task/vDangetAppr.vue b/h5/pages/staff/task/vDangetAppr.vue
index f9df6eb..6eb1460 100644
--- a/h5/pages/staff/task/vDangetAppr.vue
+++ b/h5/pages/staff/task/vDangetAppr.vue
@@ -33,13 +33,14 @@
           <image
             v-if="item.type == 0"
             :src="item.fileurlFull"
+            @click="priviewImage(item.fileurlFull)"
             mode="widthFix"
             class="img"
           />
           <video
             v-if="item.type == 1"
             :src="item.fileurlFull"
-            class="img"
+            class="video"
             controls
           />
         </view>
@@ -177,7 +178,15 @@
       </view>
     </view>
     <view class="emyty"></view>
-    <view v-if="info.approveDateVO!=null&& info.approveDateVO.canBeApproved!=null &&info.approveDateVO.canBeApproved ==1 && info.status == 0" class="main_footer" >
+    <view
+      v-if="
+        info.approveDateVO != null &&
+        info.approveDateVO.canBeApproved != null &&
+        info.approveDateVO.canBeApproved == 1 &&
+        info.status == 0
+      "
+      class="main_footer"
+    >
       <view class="btn" @click="handleBack">閫�鍥�</view>
       <view class="btn transfer" @click="handleTransfer">杞氦</view>
       <view class="btn handle" @click="handleOpen">澶勭悊</view>
@@ -516,6 +525,11 @@
     this.getDetail()
   },
   methods: {
+    priviewImage(url) {
+      uni.previewImage({
+        urls: [url]
+      })
+    },
     handleOpen() {
       this.isShowHandle = true
       console.log('info', this.info)
@@ -593,10 +607,10 @@
     },
     getMemList() {
       findHiddenAreaMemberList({
-        model: { 
+        model: {
           ...this.transferModel,
           id: this.info.areaId
-         },
+        },
         ...this.pagination,
       }).then(res => {
         this.memberList = res.data || []
@@ -1024,33 +1038,33 @@
     }
   }
   .adduser_list_item_ipt1_upload {
-      width: 120rpx;
-      height: 120rpx;
-      margin-right: 24rpx;
-      border: 2rpx solid #e5e5e5;
-      background: #f7f7f7;
-      color: #666666;
-      font-size: 22rpx;
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      justify-content: center;
-      position: relative;
-      .close {
-        position: absolute;
-        right: -20rpx;
-        top: -20rpx;
-        z-index: 9999;
-      }
-      image {
-        width: 100%;
-        height: 100%;
-      }
-      video {
-        width: 100%;
-        max-height: 120rpx;
-      }
+    width: 120rpx;
+    height: 120rpx;
+    margin-right: 24rpx;
+    border: 2rpx solid #e5e5e5;
+    background: #f7f7f7;
+    color: #666666;
+    font-size: 22rpx;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    position: relative;
+    .close {
+      position: absolute;
+      right: -20rpx;
+      top: -20rpx;
+      z-index: 9999;
     }
+    image {
+      width: 100%;
+      height: 100%;
+    }
+    video {
+      width: 100%;
+      max-height: 120rpx;
+    }
+  }
 
   .module_list {
     .item {
@@ -1113,13 +1127,12 @@
     }
     .file_list {
       display: flex;
-      flex-wrap: wrap;
       margin-bottom: 20rpx;
+      overflow-x: auto;
       .img_wrap {
         margin-top: 24rpx;
-        width: 120rpx;
-        height: 120rpx;
-        margin-right: 24rpx;
+        min-width: 160rpx;
+        height: 160rpx;
         border: 2rpx solid #e5e5e5;
         background: #f7f7f7;
         color: #666666;
@@ -1129,10 +1142,15 @@
         align-items: center;
         justify-content: center;
         position: relative;
+        margin-right: 16rpx;
+        flex-shrink: 0;
       }
       .img {
-        width: 120rpx;
-        max-height: 120rpx;
+        width: 100%;
+        max-height: 100%;
+      }
+      .video {
+        height: 160rpx;
       }
     }
     .text_wrap {
diff --git a/h5/pages/staff/vehicle/apply.vue b/h5/pages/staff/vehicle/apply.vue
index 159180f..87d9c52 100644
--- a/h5/pages/staff/vehicle/apply.vue
+++ b/h5/pages/staff/vehicle/apply.vue
@@ -142,6 +142,8 @@
     <u-datetime-picker
       :show="isShowDatetime"
       @confirm="confirmDate"
+      :minDate="new Date(param.startTime).getTime()"
+      :maxDate="new Date(param.endTime).getTime()"
       @cancel="isShowDatetime = false"
       mode="datetime"
     ></u-datetime-picker>
diff --git a/h5/pages/staff/vehicle/sendACarDetail.vue b/h5/pages/staff/vehicle/sendACarDetail.vue
index 60ae8bb..01c8c2e 100644
--- a/h5/pages/staff/vehicle/sendACarDetail.vue
+++ b/h5/pages/staff/vehicle/sendACarDetail.vue
@@ -118,7 +118,14 @@
       </view>
     </view>
     <view class="emyty"></view>
-    <view class="main_footer">
+    <view
+      class="main_footer"
+      v-if="
+        info.approveDateVO != null &&
+        info.approveDateVO.canBeApproved != null &&
+        info.approveDateVO.canBeApproved == 1
+      "
+    >
       <template v-if="appr == '1'">
         <view class="btn" @click="handleSub(3)">鎷掔粷</view>
         <view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
diff --git a/h5/pages/staff/vehicle/shinei.vue b/h5/pages/staff/vehicle/shinei.vue
index 9acf2f2..5413edf 100644
--- a/h5/pages/staff/vehicle/shinei.vue
+++ b/h5/pages/staff/vehicle/shinei.vue
@@ -16,7 +16,11 @@
     <view class="time_list">
       <view
         class="item"
-        :class="{ disable: item.isUse == 1, active: item.checked == '1' }"
+        :class="{
+          disable: item.isUse == 1,
+          active: item.checked == '1',
+          hasSub: item.carUseBookId,
+        }"
         @click="datetimeClick(item, i)"
         v-for="(item, i) in timeList"
         :key="i"
@@ -56,18 +60,63 @@
       @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 } from '@/api'
+import { getCarsList, carCanReservationDate, carUseBookDetail } from '@/api'
 export default {
   data() {
     return {
       isShowCar: false,
       isShowDate: false,
       param: {},
+      isShowDetail: false,
+      activeInfo: {},
 
       minDate: '',
       carsList: [[{ name: 'aa', value: '11' }]],
@@ -87,7 +136,7 @@
   },
   methods: {
     onSubmit() {
-			const { param } = this
+      const { param } = this
       const selTimeList = this.timeList.filter(i => i.checked == '1')
       if (selTimeList.length == 0) {
         return uni.showToast({
@@ -95,21 +144,25 @@
           icon: 'none'
         })
       }
-			const obj = {
-				carCode: param.carCode,
-				carId: param.carId ,
-				startTime: selTimeList[0].startTime,
-				endTime: selTimeList[selTimeList.length - 1].endTime,
-				dateDay: param.queryDate,
+      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}`
-			})
+      }
+      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.isUse == '1') return
+      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) {
@@ -156,16 +209,24 @@
         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()
-			}
+      if (this.param.carId && this.param.queryDate) {
+        this.gettimes()
+      }
     },
     initData() {
       getCarsList({
-         type: 1
+        type: 1
       }).then(res => {
         this.carsList = [res.data]
       })
@@ -181,6 +242,13 @@
           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
+              }
+            }
           })
         }
       })
@@ -189,9 +257,9 @@
       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()
-			}
+      if (this.param.carId && this.param.queryDate) {
+        this.gettimes()
+      }
       this.isShowCar = false
     }
   }
@@ -260,8 +328,7 @@
   }
   .time_list {
     display: flex;
-    justify-content: space-between;
-    padding: 30rpx 0;
+    padding: 30rpx 0 240rpx;
     flex-wrap: wrap;
     .item {
       width: 220rpx;
@@ -272,15 +339,60 @@
       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-color: #cccccc;
-      color: #999999;
+      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>
diff --git a/h5/pages/staff/vehicle/shiwai.vue b/h5/pages/staff/vehicle/shiwai.vue
index 6f7b9e9..ff51cda 100644
--- a/h5/pages/staff/vehicle/shiwai.vue
+++ b/h5/pages/staff/vehicle/shiwai.vue
@@ -125,7 +125,8 @@
     }
   },
   onLoad() {
-    this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:') + '00:00').getTime()
+    this.minDate = new Date(dayjs().format('YYYY-MM-DD HH:mm') + ':00').getTime()
+    console.log('minDate', this.minDate);
     this.initData()
   },
   methods: {
diff --git a/h5/pages/staffLogin/login.vue b/h5/pages/staffLogin/login.vue
index 572006f..d4a0c8b 100644
--- a/h5/pages/staffLogin/login.vue
+++ b/h5/pages/staffLogin/login.vue
@@ -84,7 +84,12 @@
   onLoad() {
     this.initCaptcha()
   },
-
+  onBackPress(options) {
+    uni.redirectTo({
+      url: '/pages/login/login'
+    })
+    return true
+  },
   methods: {
     ...mapMutations(["setToken", "setUserInfo"]),
     changeFalg() {
@@ -122,10 +127,10 @@
         title: '瀵嗙爜涓嶈兘涓虹┖',
         icon: 'none'
       })
-      // if (!form.code) return uni.showToast({
-      //   title: '楠岃瘉鐮佷笉鑳戒负绌�',
-      //   icon: 'none'
-      // })
+      if (!form.code) return uni.showToast({
+        title: '楠岃瘉鐮佷笉鑳戒负绌�',
+        icon: 'none'
+      })
       loginPost({
         ...form,
         uuid: this.captcha.uuid,
@@ -151,7 +156,7 @@
   width: 100%;
   height: 100vh;
   display: flex;
-  padding-top: 160rpx;
+  padding-top: 130rpx;
   box-sizing: border-box;
   align-items: center;
   flex-direction: column;
@@ -218,7 +223,6 @@
     margin-top: 60rpx;
     .for_psd {
       color: $uni-color-primary;
-      margin-top: 40rpx;
       width: 140rpx;
       text-align: center;
       margin: 40rpx auto;
@@ -242,7 +246,7 @@
     width: 100%;
     left: 0;
     text-align: center;
-    bottom: 108rpx;
+    bottom: 88rpx;
     display: flex;
     justify-content: center;
     align-items: center;
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 41d0bdf..fee9e39 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -36,6 +36,7 @@
 						})
 					}
 					if (data.code === 5112) {
+						uni.clearStorageSync()
 						uni.navigateTo({
 							url: '/pages/login/login'
 						})

--
Gitblit v1.9.3