From 249a271a867df4802a8d59371e0ff10d3eb54298 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 09 八月 2024 18:07:24 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/business/operaVisitsWindow.vue                                                                         |   42 
 h5/pages/staff/vehicle/shiwai.vue                                                                                           |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java                                   |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java                             |    2 
 server/system_service/src/main/java/com/doumee/dao/system/join/NoticesJoinMapper.java                                       |    1 
 admin/src/views/business/visits.vue                                                                                         |   36 
 h5/static/ic_enter_shiwai@2x.png                                                                                            |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/DateIntervalVO.java                                  |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java                    |   59 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java                                    |   14 
 server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java                                             |   20 
 h5/pages/applicationRecord/applicationRecord.vue                                                                            |    8 
 server/system_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java                                        |    4 
 admin/src/api/business/carUseBook.js                                                                                        |   13 
 server/db/business.platform.permissions.sql                                                                                 |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java                             |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java                       |    2 
 admin/src/views/meeting/bookings.vue                                                                                        |  195 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java                             |    2 
 h5/pages/staff/vehicle/apply.vue                                                                                            |   22 
 server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java                                               |    1 
 h5/pages.json                                                                                                               |   10 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java                      |  214 ++
 h5/pages/staffLogin/login.vue                                                                                               |   20 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java                         |   90 
 admin/src/api/business/visits.js                                                                                            |    2 
 h5/pages/login/login.vue                                                                                                    |  110 +
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java                                    |   11 
 h5/pages/staff/index.vue                                                                                                    |   69 
 server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java                                             |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceRoleMapper.java                                   |    1 
 admin/src/views/business/approvalReport.vue                                                                                 |   77 
 h5/pages/staff/task/index.vue                                                                                               |   93 
 server/system_service/src/main/java/com/doumee/dao/business/dao/CompanyMapper.java                                          |    1 
 server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java                                              |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java                                       |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java              |   12 
 h5/pages/staff/snapshot.vue                                                                                                 |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java                     |    2 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/RoomTime.java                                    |    4 
 h5/pages/staff/vehicle/sendACarDetail.vue                                                                                   |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarsMapper.java                                         |    1 
 h5/pages/answer/answer.vue                                                                                                  |   78 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitEventMapper.java                                   |    1 
 admin/src/views/task/dangetDetail.vue                                                                                       |   14 
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                                    |    3 
 server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                                                 |    0 
 h5/pages/appointmentDetails/appointmentDetails.vue                                                                          |   21 
 h5/pages/staff/meetingSub.vue                                                                                               |   32 
 server/visits/openapi/src/main/java/com/doumee/api/web/ApiController.java                                                   |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java                                 |    1 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java                                 |    9 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java                                  |    3 
 h5/static/ic_driver@2x.png                                                                                                  |    0 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java                                   |    3 
 h5/store/index.js                                                                                                           |    2 
 server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java                                                |    3 
 admin/src/components/operation/OperCarUseBookParamWindow.vue                                                                |  142 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java                        |  354 ++-
 server/db/business.platform_interface_log.permissions.sql                                                                   |    6 
 server/db/business.platform_wms_detail.permissions.sql                                                                      |    6 
 server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java                                                |    1 
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java                              |   51 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/RetentionMapper.java                                    |    2 
 admin/src/api/business/approve.js                                                                                           |    6 
 server/system_service/src/main/resources/mappers/SystemUserMapper.xml                                                       |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java                                       |    1 
 h5/pages/staff/meetingManager.vue                                                                                           |    6 
 admin/src/components/common/UploadAvatarImage.vue                                                                           |    8 
 server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java                                       |    7 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java                   |    6 
 admin/src/views/login.vue                                                                                                   |    2 
 admin/src/api/meeting/bookings.js                                                                                           |   13 
 server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java                                               |    6 
 server/visits/openapi/src/main/java/com/doumee/api/web/BizResourceController.java                                           |    8 
 admin/src/views/operation/serviceCar/apprConfig.vue                                                                         |   82 
 server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java                                           |    1 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ProblemWebController.java                                    |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java                                    |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java  |    4 
 h5/static/ic_staff@2x.png                                                                                                   |    0 
 server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml                                                           |    2 
 server/db/business.platform_log.permissions.sql                                                                             |    6 
 admin/src/views/task/index.vue                                                                                              |   15 
 h5/pages/notice/notice.vue                                                                                                  |   27 
 h5/pages/staff/meetingDetail.vue                                                                                            |  145 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java                    |    2 
 admin/src/components/business/OperaHiddenDangerWindow.vue                                                                   |   27 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java                         |   49 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParkBookMapper.java                                     |    1 
 h5/pages/staff/vehicle/applePeo.vue                                                                                         |   52 
 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/main.js                                                                                                                  |   11 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java                      |    2 
 h5/pages/staff/meetingCalendar.vue                                                                                          |    8 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java                                     |    1 
 admin/src/views/meeting/components/OperaBookingsDetailWindow.vue                                                            |   62 
 h5/static/ic_enter_shinei@2x.png                                                                                            |    0 
 admin/src/assets/style/style.scss                                                                                           |    4 
 server/db/business.platform_queue.permissions.sql                                                                           |    6 
 h5/pages/staff/vehicle/shinei.vue                                                                                           |  162 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java                   |   12 
 admin/src/api/business/hiddenDangerParam.js                                                                                 |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java                                      |    1 
 admin/src/components/business/OperaHiddenDangerParamWindow.vue                                                              |   21 
 h5/components/Li-Calendar/Li-Calendar.vue                                                                                   |    4 
 h5/pages/index/index.vue                                                                                                    |  341 ++-
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java                     |   44 
 server/db/business.platform_books.permissions.sql                                                                           |    6 
 server/db/business.platform_broadcast_log.permissions.sql                                                                   |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java                    |    1 
 server/db/business.platform_device.permissions.sql                                                                          |    6 
 h5/api/staff.js                                                                                                             |   10 
 admin/src/components/operation/HiddenDangerParam.vue                                                                        |   15 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java                                        |    4 
 h5/manifest.json                                                                                                            |    4 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java              |   15 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java                                  |    5 
 h5/pages/staff/meetingSubOrder.vue                                                                                          |   43 
 server/db/business.platform_show_param.permissions.sql                                                                      |    6 
 h5/pages/staff/meetingSel.vue                                                                                               |  122 +
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/TrainTimeServiceImpl.java                      |    2 
 h5/utils/service.js                                                                                                         |    3 
 server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java                                  |    7 
 server/visits/openapi/src/main/java/com/doumee/api/web/ErpResourceController.java                                           |    2 
 admin/src/views/meeting/rooms.vue                                                                                           |   17 
 admin/src/api/meeting/rooms.js                                                                                              |    2 
 server/db/business.platform_job.permissions.sql                                                                             |    6 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java                                    |   16 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java                                   |    4 
 h5/pages/visitorApplication/visitorApplication.vue                                                                          |    3 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java                                  |   10 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/BookingTime.java                                 |    4 
 server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java                                   |   33 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java                                      |    1 
 server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java                                       |   10 
 admin/src/views/operation/serviceCar/apprRecord.vue                                                                         |  270 ++
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java   |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java              |    4 
 admin/src/assets/style/element-variables.scss                                                                               |    3 
 admin/src/views/business/reportRecord.vue                                                                                   |   11 
 h5/pages/staff/vehicle/index.vue                                                                                            |   32 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java                                   |    2 
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                                                |    2 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java                               |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java                                       |    2 
 admin/src/views/business/approvalConfiguration.vue                                                                          |   79 
 admin/src/components/business/OperaCarDriverWindow.vue                                                                      |    3 
 server/system_service/src/main/java/com/doumee/config/jwt/JwtProperties.java                                                |    0 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceEventMapper.java                                  |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                                       |    4 
 admin/src/components/common/upload.vue                                                                                      |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java |    4 
 server/db/business.platform_group.permissions.sql                                                                           |    6 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginByOpenidDTO.java                                         |   20 
 server/db/business.platform_wms_job.permissions.sql                                                                         |    6 
 h5/static/ic_visitor@2x.png                                                                                                 |    0 
 admin/src/components/business/OperaCarUseBookWindow.vue                                                                     |   69 
 admin/src/views/meeting/devices.vue                                                                                         |    1 
 admin/src/views/task/visSubDetail.vue                                                                                       |   17 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java                             |    2 
 admin/src/components/common/QueryForm/queryForm.vue                                                                         |   27 
 server/system_service/src/main/java/com/doumee/dao/system/dto/LoginAuthDTO.java                                             |   24 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java                      |    1 
 server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java                               |   24 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java                                       |    6 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java           |   16 
 /dev/null                                                                                                                   |  126 -
 server/meeting/meeting_service/src/main/java/com/doumee/dao/web/request/MeetingPageRequest.java                             |    5 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java                              |   22 
 server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java                                           |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParksMapper.java                                        |    1 
 h5/App.vue                                                                                                                  |   67 
 server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java                                             |    1 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java            |    2 
 admin/src/views/operation/danger/record.vue                                                                                 |    7 
 h5/api/meeting.js                                                                                                           |   10 
 183 files changed, 3,175 insertions(+), 1,409 deletions(-)

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 5fea156..b7527f0 100644
--- a/admin/src/api/business/carUseBook.js
+++ b/admin/src/api/business/carUseBook.js
@@ -6,6 +6,13 @@
     trim: true
   })
 }
+// 瀵煎嚭
+export function carUseBookRecordEx (data) {
+  return request.post('/visitsAdmin/cloudService/business/carUseBook/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
 // 鏌ヨ
 export function findLogList (data) {
   return request.post('/visitsAdmin/cloudService/business/carUseBookLog/findList', data, {
@@ -33,6 +40,12 @@
 export function deleteById (id) {
   return request.get(`/visitsAdmin/cloudService/business/carUseBook/delete/${id}`)
 }
+// 鎾ら攢
+export function revokeById (params) {
+  return request.get('/visitsAdmin/cloudService/business/carUseBook/revoke', {
+    params
+  })
+}
 // 鏍规嵁ID鏌ヨ
 export function detail (id) {
   return request.get(`/visitsAdmin/cloudService/business/carUseBook/${id}`)
diff --git a/admin/src/api/business/hiddenDangerParam.js b/admin/src/api/business/hiddenDangerParam.js
index 89d4128..9373c06 100644
--- a/admin/src/api/business/hiddenDangerParam.js
+++ b/admin/src/api/business/hiddenDangerParam.js
@@ -11,6 +11,12 @@
     trim: true
   })
 }
+export function exportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
 export function memberList (data) {
   return request.post('/visitsAdmin/cloudService/business/hiddenDangerParam/findHiddenAreaMemberList', data, {
     trim: true
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/OperaCarDriverWindow.vue b/admin/src/components/business/OperaCarDriverWindow.vue
index ac8c22b..72cd9a5 100644
--- a/admin/src/components/business/OperaCarDriverWindow.vue
+++ b/admin/src/components/business/OperaCarDriverWindow.vue
@@ -88,7 +88,8 @@
     },
     loadMember () {
       allList({
-        type: 2
+        type: 2,
+        companyType: 1
       })
         .then(res => {
           this.memberList = res
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
index ba39fd1..6af1e03 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>
@@ -110,8 +110,8 @@
     </div>
     <!--  -->
     <template   v-slot:footer>
-      <el-button @click="isShowProblem = true"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">鍚屾剰</el-button>
-      <el-button @click="isBackProblem=true"  type="danger"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  >鎷掔粷</el-button>
+      <el-button @click="agreeOpen"  type="primary"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  class="status-red">鍚屾剰</el-button>
+      <el-button @click="jectOpen"  type="danger"  v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 "  >鎷掔粷</el-button>
       <el-button @click="visible=false">杩斿洖</el-button>
     </template>
     <el-dialog
@@ -122,9 +122,10 @@
         :visible.sync="isShowProblem"
         width="480px"
     >
-      <el-form :model="dealForm" ref="dealForm" >
-        <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.drvierParam ===1">
-          <el-select v-model="transForm.driverId" style="width: 300px"  filterable clearable placeholder="璇烽�夋嫨娲鹃仯鍙告満">
+      <el-form :model="dealForm" :rules="rules" ref="dealForm" >
+        <!-- <el-form-item label="娲捐溅鍙告満" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> -->
+        <el-form-item label="娲捐溅鍙告満" prop="driverId" 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"
                 :key="item.id"
@@ -138,7 +139,7 @@
               type="textarea"
               placeholder="璇峰~鍐欒鏄�"
               :rows="4"
-              v-model="backForm.checkInfo"
+              v-model="dealForm.checkInfo"
           />
         </el-form-item>
       </el-form>
@@ -199,6 +200,9 @@
       },
       backForm: {
         checkInfo: null
+      },
+      rules: {
+        driverId: [{ required: true, message: '璇烽�夋嫨娲鹃仯鍙告満', trigger: 'blur' }]
       }
     }
   },
@@ -222,9 +226,9 @@
             this.dealing = true
             approveDo({
               objId: this.dataId,
-              objType: this.model.type == 1?4:3,
+              objType: this.model.type == 1 ? 4 : 3,
               status: 2,
-              driverId: this.dealForm.driveId,
+              driverId: this.dealForm.driverId,
               checkInfo: this.dealForm.checkInfo
             })
               .then(res => {
@@ -238,27 +242,42 @@
           })
       })
     },
+    agreeOpen () {
+      this.isShowProblem = true
+      this.dealForm = {
+        driveId: null,
+        checkInfo: null
+      }
+      this.loadMemberList()
+    },
+    jectOpen () {
+      this.isBackProblem = true
+      this.dealForm = {
+        driveId: null,
+        checkInfo: null
+      }
+    },
     backDo () {
       this.$refs.backForm.validate((valid) => {
         if (!valid) {
           return
         }
         approveDo({
-              objId: this.dataId,
-              objType: this.model.type == 1?4:3,
-              status: 3,
-              checkInfo: this.dealForm.checkInfo
-          }).then(res => {
-              this.$tip.apiSuccess('閫�鍥炴垚鍔�')
-              this.getDetail()
-              this.isBackProblem = false
-            })
-            .catch(e => {
-            })
-            .finally(() => {
-              this.dealing = false
-            })
+          objId: this.dataId,
+          objType: this.model.type == 1 ? 4 : 3,
+          status: 3,
+          checkInfo: this.backForm.checkInfo
+        }).then(res => {
+          this.$tip.apiSuccess('閫�鍥炴垚鍔�')
+          this.getDetail()
+          this.isBackProblem = false
+        })
+          .catch(e => {
           })
+          .finally(() => {
+            this.dealing = false
+          })
+      })
     },
     open (title, target) {
       this.title = title
@@ -283,10 +302,6 @@
           this.model = res
           this.dealForm.driveId = res.driveId
         })
-    },
-    handleTransfer () {
-      this.isShowTransfer = true
-      this.loadMemberList()
     },
     loadMemberList () {
       driveList({}).then(res => {
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/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
index 1f2e576..3e2b4df 100644
--- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -61,17 +61,17 @@
     })
   },
   methods: {
-    open (title, target,type) {
+    open (title, target, type) {
       this.title = title
       this.visible = true
-      this.form.type=type
+      this.form.type = type
       this.loadMember()
       // 鏂板缓缁勭粐
       if (target == null) {
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form[this.configData['field.id']] = null
-          this.form.type=type
+          this.form.type = type
         })
         return
       }
@@ -79,20 +79,21 @@
       this.$nextTick(() => {
         for (const key in this.form) {
           this.form[key] = target[key]
-          this.form.type=type
-          if (this.type ==0 && target.memberIds != null && target.memberIds != '') {
-            let t = target.memberIds.split(',')
-            this.form.memberIdList =[]
-            t.forEach(item =>{
+          this.form.type = type
+          if (this.form.type == 0 && target.memberIds != null && target.memberIds != '') {
+            const t = target.memberIds.split(',')
+            this.form.memberIdList = []
+            t.forEach(item => {
               this.form.memberIdList.push(parseInt(item))
-            });
+            })
           }
         }
       })
     },
     loadMember () {
       allList({
-        type: 2
+        type: 2,
+        companyType: 1
       })
         .then(res => {
           this.memberList = res
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..784cdcd 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,19 +244,21 @@
         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
         }
+        const { param } = this
+        if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('鍏ュ洯鏃堕棿鍜岀鍥椂闂翠笉鍙法澶�')
         // 璋冪敤鏂板缓鎺ュ彛
         this.isWorking = true
         createFk({
@@ -262,7 +271,6 @@
             this.$emit('close')
           })
           .catch(e => {
-            this.$tip.apiFailed(e)
           })
           .finally(() => {
             this.isWorking = false
@@ -281,6 +289,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/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index f96d588..947776d 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -158,6 +158,8 @@
       const memberNames = item.memberNames.split(',')
       if (memberIds && memberIds.length === 1) {
         this.$set(this.param, 'checkUserId', memberIds[0])
+      } else {
+        this.$set(this.param, 'checkUserId', '')
       }
       memberIds.forEach((mem, i) => {
         arr.push({
@@ -255,10 +257,15 @@
   display: flex;
   flex-wrap: wrap;
   .item {
-    width: 140px;
-    max-height: 140px;
+    width: 92px;
+    max-height: 92px;
     margin-left: 10px;
     position: relative;
+    border: 1px dashed #d9d9d9;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
     .close{
       font-size: 20px;
       position: absolute;
@@ -269,8 +276,8 @@
       cursor: pointer;
     }
     .img {
-      width: 140px;
-      max-height: 90px;
+      width: 92px;
+      max-height: 92px;
     }
   }
 }
diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue
index d8bc84d..10d590b 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,18 +527,19 @@
         this.timeList = res || []
         this.timeList.forEach((i, j) => {
           i.checked = '0',
-            i.index = j
+          i.index = j
         })
       })
     },
-    initData() {
+    initData () {
       getCarList({
         type: 1
       }).then(res => {
         this.carsList = res
       })
       findTypeMemberInfo({
-        type: '2'
+        type: '2',
+        companyType: 1
       }).then(res => {
         this.memberList = res || []
       })
@@ -539,6 +608,10 @@
     background-color: #cccccc;
     color: #999999;
   }
+  .hasSub {
+      color: #fff;
+      background: #cccccc;
+    }
 }
 .color_op {
   display: flex;
@@ -564,6 +637,10 @@
     color: #fff;
     width: 120px;
     text-align: center;
+    cursor: pointer;
+  }
+  .disable{
+    background: #cccccc;
   }
 }
 .have_info {
@@ -600,4 +677,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..c295e5a 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -30,18 +30,57 @@
               >
                 <div class="head">{{ item.remark }}</div>
                 <div class="content">
-                  <div v-if="item.objIds && item.objIds.length === 1 ">
-                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else-if="item.objIds && item.objIds.length > 1">
-                    <span>{{ item.objIds[0].name }} 绛�</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else>璇烽�夋嫨</div>
-                  <i class="el-icon-arrow-right"></i>
+                  <!-- 瀹℃壒 -->
+                  <template v-if="item.type == 0">
+                    <template v-if="item.memberType == '0'">
+                    <div>琚浜�</div>
+                  </template>
+                    <template v-if="item.memberType == '2'">
+                      <div>閮ㄩ棬涓荤</div>
+                    </template>
+                    <template v-if="item.memberType == '1'">
+                      <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                      <i class="el-icon-arrow-right"></i>
+                    </template>
+                  </template>
+                  <!-- 鎶勯�� -->
+                  <template v-if="item.type == 1">
+                    <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                    <i
+                      v-if="item.memberType == '1'"
+                      class="el-icon-arrow-right"
+                    ></i>
+                  </template>
                 </div>
               </div>
               <div class="arrows">
@@ -72,12 +111,12 @@
             <template v-if="apprList[activeIndex].type == '1'">
               <div class="config_data_item_reviewed_content">
                 <div
-                  v-for="mem in apprList[activeIndex].objIds"
+                  v-for="mem, memIndex in apprList[activeIndex].objIds"
                   :key="mem.id"
                   class="config_data_item_reviewed_content_item"
                 >
                   <span>{{ mem.name }}</span>
-                  <i class="el-icon-close"></i>
+                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
@@ -120,7 +159,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"
                 >
@@ -163,6 +202,7 @@
           <div class="config_data_submit">
             <el-button
               @click="onSubmit"
+              :loading="subLoading"
               style="background: #435ebe"
               type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
@@ -243,6 +283,7 @@
   data () {
     return {
       activeType: '0',
+      subLoading: false,
       apprList: [
         { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
         { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -323,13 +364,15 @@
           item.objIds = ''
         }
       })
+      this.subLoading = true
       approveTemplSave({
         type: activeType,
         paramList: temp
       }).then(res => {
-        // if (res.code === 200) {
-        this.$message.success('淇濆瓨鎴愬姛')
-        // }
+        this.subLoading = false
+        this.$tip.success('淇濆瓨鎴愬姛')
+      }, () => {
+        this.subLoading = false
       })
     },
     handleDel () {
diff --git a/admin/src/views/business/approvalReport.vue b/admin/src/views/business/approvalReport.vue
index 49fee30..b5b2c9f 100644
--- a/admin/src/views/business/approvalReport.vue
+++ b/admin/src/views/business/approvalReport.vue
@@ -26,18 +26,57 @@
               >
                 <div class="head">{{ item.remark }}</div>
                 <div class="content">
-                  <div v-if="item.objIds && item.objIds.length === 1 ">
-                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else-if="item.objIds && item.objIds.length > 1">
-                    <span>{{ item.objIds[0].name }} 绛�</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else>璇烽�夋嫨</div>
-                  <i class="el-icon-arrow-right"></i>
+                  <!-- 瀹℃壒 -->
+                  <template v-if="item.type == 0">
+                    <template v-if="item.memberType == '0'">
+                    <div>琚浜�</div>
+                  </template>
+                    <template v-if="item.memberType == '2'">
+                      <div>閮ㄩ棬涓荤</div>
+                    </template>
+                    <template v-if="item.memberType == '1'">
+                      <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                      <i class="el-icon-arrow-right"></i>
+                    </template>
+                  </template>
+                  <!-- 鎶勯�� -->
+                  <template v-if="item.type == 1">
+                    <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                    <i
+                      v-if="item.memberType == '1'"
+                      class="el-icon-arrow-right"
+                    ></i>
+                  </template>
                 </div>
               </div>
               <div class="arrows">
@@ -96,7 +135,7 @@
               </div>
               <div class="config_data_item_reviewed_content">
                 <div
-                  v-for="mem,memIndex in apprList[activeIndex].objIds"
+                  v-for="(mem, memIndex) in apprList[activeIndex].objIds"
                   :key="mem.id"
                   class="config_data_item_reviewed_content_item"
                 >
@@ -116,7 +155,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"
                 >
@@ -159,6 +198,7 @@
           <div class="config_data_submit">
             <el-button
               @click="onSubmit"
+              :loading="subLoading"
               style="background: #435ebe"
               type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
@@ -239,6 +279,7 @@
   data () {
     return {
       activeType: '2',
+      subLoading: false,
       apprList: [
         { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
         { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -310,13 +351,15 @@
           item.objIds = ''
         }
       })
+      this.subLoading = true
       approveTemplSave({
         type: activeType,
         paramList: temp
       }).then(res => {
-        if (res.code === 200) {
-          this.$message.success('淇濆瓨鎴愬姛')
-        }
+        this.subLoading = false
+        this.$tip.success('淇濆瓨鎴愬姛')
+      }, () => {
+        this.subLoading = false
       })
     },
     handleDel () {
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 706d8fc..83a83f6 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,19 +42,32 @@
         </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
-          v-model="searchForm.status"
+          v-model="searchForm.meetingStatus"
           filterable
           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">
@@ -52,6 +76,7 @@
           type="datetimerange"
           range-separator="鑷�"
           value-format="yyyy-MM-dd HH:mm:ss"
+          :default-time="['00:00:00', '23:59:59']"
           start-placeholder="寮�濮嬫椂闂�"
           end-placeholder="缁撴潫鏃堕棿"
           @change="selectDate"
@@ -77,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"
@@ -90,42 +135,81 @@
         @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.meetingStatus == 1">鏈紑濮�</span>
+            <span v-if="row.meetingStatus == 2">杩涜涓�</span>
+            <span v-if="row.meetingStatus == 3">宸茬粨鏉�</span>
+            <span v-if="row.meetingStatus == 4">鍗冲皢寮�濮�</span>
+            <span v-if="row.meetingStatus == 5">宸叉挙閿�</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="150px"
+        ></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.meetingStatus == '1'" 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.meetingStatus == '1'"  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>
@@ -137,8 +221,15 @@
       </pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaBookingsWindow ref="operaBookingsWindow" @success="handlePageChange"/>
-    <OperaBookingsDetailWindow ref="operaBookingsDetailWindow"/>
+    <OperaBookingsWindow
+      ref="operaBookingsWindow"
+      @success="handlePageChange"
+    />
+    <OperaBookingsDetailWindow
+      @success="search"
+      ref="operaBookingsDetailWindow"
+    />
+
   </TableLayout>
 </template>
 
@@ -166,7 +257,7 @@
         // departmentId: [],
         department: [],
         realName: '',
-        status: '',
+        meetingStatus: '',
         createDate: '',
         editor: '',
         editDate: '',
@@ -190,9 +281,11 @@
         { name: '寮�鍙戦儴闂�', id: '0' }
       ],
       status: [
-        { name: '鍏ㄩ儴', id: '' },
-        { name: '姝e父', id: '0' },
-        { name: '鍙栨秷', id: '1' }
+        { name: '鏈紑濮�', id: 1 },
+        { name: '鍗冲皢寮�濮�', id: 4 },
+        { name: '杩涜涓�', id: 2 },
+        { name: '宸叉挙閿�', id: 5 },
+        { name: '宸茬粨鏉�', id: 3 }
       ],
       link: 'https://dmtest.ahapp.net/meeting_h5/' // H5_LINK_ADDR
     }
@@ -278,7 +371,6 @@
           this.$message.success('浼氳淇℃伅澶嶅埗鎴愬姛锛屽幓鍒嗕韩缁欏悓浜嬪惂~')
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
     cancelMeeting (id) {
@@ -290,7 +382,6 @@
               this.handlePageChange()
             })
             .catch(e => {
-              this.$message.error(e)
             })
         })
     },
@@ -300,7 +391,6 @@
           this.$refs.operaBookingsDetailWindow.open('浼氳璇︽儏', res)
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
     editBookings (id) {
@@ -309,7 +399,6 @@
           this.$refs.operaBookingsWindow.open('缂栬緫浼氳棰勭害', res)
         })
         .catch(e => {
-          this.$message.error(e)
         })
     },
     handlePageChange (pageIndex) {
@@ -340,3 +429,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..2975fec 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, memberType: 2, companyType: 1 }
     })
       .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..c2f1e3c 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,8 @@
     userList({
       page: 1,
       capacity: 9999,
-      model: { realname: this.filterText },
+      memberType: 2,
+      model: { realname: this.filterText }
     })
       .then(res => {
         this.userList = res.records
@@ -175,16 +176,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 +210,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/danger/record.vue b/admin/src/views/operation/danger/record.vue
index da410d6..d59d296 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -3,7 +3,7 @@
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
       <el-form-item label="鎻愭姤浜�" prop="memberName">
-        <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+        <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName">
         <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
@@ -43,6 +43,7 @@
             type="datetimerange"
             format="yyyy-MM-dd HH:mm:ss"
             value-format="yyyy-MM-dd HH:mm:ss"
+            :default-time="['00:00:00', '23:59:59']"
             range-separator="鑷�"
             start-placeholder="寮�濮嬫棩鏈�"
             end-placeholder="缁撴潫鏃ユ湡">
@@ -155,9 +156,7 @@
         .then(() => {
           this.exLoading = true
           exportExcel({
-            page: this.pagination.page,
-            capacity: 1000000,
-            model: this.filters
+            model: this.searchForm
           })
             .then(response => {
               this.download(response)
diff --git a/admin/src/views/operation/serviceCar/apprConfig.vue b/admin/src/views/operation/serviceCar/apprConfig.vue
index e977f26..daef69a 100644
--- a/admin/src/views/operation/serviceCar/apprConfig.vue
+++ b/admin/src/views/operation/serviceCar/apprConfig.vue
@@ -2,8 +2,8 @@
   <TableLayout>
     <template v-slot:table-wrap>
       <el-tabs v-model="activeType" @tab-click="handleClick">
-        <el-tab-pane label="瀹ゅ唴鐢ㄨ溅" name="3"></el-tab-pane>
-        <el-tab-pane label="瀹ゅ鐢ㄨ溅" name="4"></el-tab-pane>
+        <el-tab-pane label="甯傚唴鐢ㄨ溅" name="3"></el-tab-pane>
+        <el-tab-pane label="甯傚鐢ㄨ溅" name="4"></el-tab-pane>
       </el-tabs>
       <div class="config">
         <div class="config_list">
@@ -30,18 +30,54 @@
               >
                 <div class="head">{{ item.remark }}</div>
                 <div class="content">
-                  <div v-if="item.objIds && item.objIds.length === 1 ">
-                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else-if="item.objIds && item.objIds.length > 1">
-                    <span>{{ item.objIds[0].name }} 绛�</span>
-                    <span v-if="item.approveType == 0 && item.type == '0'"> 鎴栫</span>
-                    <span v-if="item.approveType == 1 && item.type == '0'"> 浼氱</span>
-                  </div>
-                  <div v-else>璇烽�夋嫨</div>
-                  <i class="el-icon-arrow-right"></i>
+                  <!-- 瀹℃壒 -->
+                  <template v-if="item.type == 0">
+                    <template v-if="item.memberType == '2'">
+                      <div>閮ㄩ棬涓荤</div>
+                    </template>
+                    <template v-if="item.memberType == '1'">
+                      <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                        <span v-if="item.approveType == 0 && item.type == '0'">
+                          鎴栫</span
+                        >
+                        <span v-if="item.approveType == 1 && item.type == '0'">
+                          浼氱</span
+                        >
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                      <i class="el-icon-arrow-right"></i>
+                    </template>
+                  </template>
+                  <!-- 鎶勯�� -->
+                  <template v-if="item.type == 1">
+                    <div v-if="item.objIds && item.objIds.length === 1">
+                        <span
+                          >{{ item.objIds[0].name }}
+                          {{ item.objIds[0].companyName }}</span
+                        >
+                      </div>
+                      <div v-else-if="item.objIds && item.objIds.length > 1">
+                        <span>{{ item.objIds[0].name }} 绛�</span>
+                      </div>
+                      <div v-else>璇烽�夋嫨</div>
+                    <i
+                      v-if="item.memberType == '1'"
+                      class="el-icon-arrow-right"
+                    ></i>
+                  </template>
                 </div>
               </div>
               <div class="arrows">
@@ -72,12 +108,12 @@
             <template v-if="apprList[activeIndex].type == '1'">
               <div class="config_data_item_reviewed_content">
                 <div
-                  v-for="mem in apprList[activeIndex].objIds"
+                  v-for="mem, memIndex in apprList[activeIndex].objIds"
                   :key="mem.id"
                   class="config_data_item_reviewed_content_item"
                 >
                   <span>{{ mem.name }}</span>
-                  <i class="el-icon-close"></i>
+                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
@@ -120,7 +156,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"
                 >
@@ -164,14 +200,15 @@
             <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>
           <div class="config_data_submit">
             <el-button
               @click="onSubmit"
+              :loading="subLoading"
               style="background: #435ebe"
               type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
@@ -252,6 +289,7 @@
   data () {
     return {
       activeType: '3',
+      subLoading: false,
       apprList: [
         { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
         { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
@@ -332,13 +370,15 @@
           item.objIds = ''
         }
       })
+      this.subLoading = true
       approveTemplSave({
         type: activeType,
         paramList: temp
       }).then(res => {
-        // if (res.code === 200) {
+        this.subLoading = false
         this.$tip.success('淇濆瓨鎴愬姛')
-        // }
+      }, () => {
+        this.subLoading = false
       })
     },
     handleDel () {
diff --git a/admin/src/views/operation/serviceCar/apprRecord.vue b/admin/src/views/operation/serviceCar/apprRecord.vue
index c204187..08e9f8a 100644
--- a/admin/src/views/operation/serviceCar/apprRecord.vue
+++ b/admin/src/views/operation/serviceCar/apprRecord.vue
@@ -1,45 +1,81 @@
 <template>
   <TableLayout :permissions="['business:empower: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="memberName">
-        <el-input v-model="searchForm.memberName" placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input>
+        <el-input
+          v-model="searchForm.memberName"
+          placeholder="璇疯緭鍏ュ鍚�/鎵嬫満鍙�"
+          @keypress.enter.native="search"
+        ></el-input>
       </el-form-item>
       <el-form-item label="鐢宠浜虹粍缁�" prop="companyName">
-        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ョ敵璇蜂汉缁勭粐" clearable @keypress.enter.native="search"></el-input>
+        <el-input
+          v-model="searchForm.companyName"
+          placeholder="璇疯緭鍏ョ敵璇蜂汉缁勭粐"
+          clearable
+          @keypress.enter.native="search"
+        ></el-input>
       </el-form-item>
       <el-form-item label="杞︾墝鍙�" prop="carCode">
-        <el-input v-model="searchForm.carCode" placeholder="璇疯緭鍏ヨ溅鐗屽彿" clearable @keypress.enter.native="search"></el-input>
+        <el-input
+          v-model="searchForm.carCode"
+          placeholder="璇疯緭鍏ヨ溅鐗屽彿"
+          clearable
+          @keypress.enter.native="search"
+        ></el-input>
       </el-form-item>
       <el-form-item label="鐘舵��" prop="status">
-        <el-select v-model="searchForm.status"  @change="search" clearable placeholder="鐘舵��">
+        <el-select
+          v-model="searchForm.status"
+          @change="search"
+          clearable
+          placeholder="鐘舵��"
+        >
           <el-option label="鐢宠涓�" value="0"></el-option>
           <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">
-        <el-select v-model="searchForm.type"  @change="search" clearable placeholder="鐩殑鍦扮被鍨�">
+        <el-select
+          v-model="searchForm.type"
+          @change="search"
+          clearable
+          placeholder="鐩殑鍦扮被鍨�"
+        >
           <el-option label="甯傚唴鐢ㄨ溅" value="0"></el-option>
           <el-option label="甯傚鐢ㄨ溅" value="1"></el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鍑哄彂鏃堕棿" prop="startTime">
         <el-date-picker
-            @change="seleTime"
-            v-model="time"
-            @keypress.enter.native="search"
-            type="datetimerange"
-            format="yyyy-MM-dd HH:mm:ss"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            range-separator="鑷�"
-            start-placeholder="寮�濮嬫棩鏈�"
-            end-placeholder="缁撴潫鏃ユ湡">
+          @change="seleTime"
+          v-model="time"
+          @keypress.enter.native="search"
+          type="datetimerange"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          :default-time="['00:00:00', '23:59:59']"
+          range-separator="鑷�"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        >
         </el-date-picker>
       </el-form-item>
-      <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio">
+      <el-radio-group
+        v-model="searchForm.radio"
+        size="small"
+        @input="changeRadio"
+      >
         <el-radio-button label="0">褰撳ぉ</el-radio-button>
         <el-radio-button label="1">杩�7澶�</el-radio-button>
         <el-radio-button label="2">杩�30澶�</el-radio-button>
@@ -51,66 +87,154 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:carusebook:create','business:carusebook:exportExcel']">
-        <li><el-button type="primary" @click="handleEdit" icon="el-icon-plus" v-permissions="['business:carusebook:create']">鏂板缓</el-button></li>
-        <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:carusebook:exportExcel']">瀵煎嚭</el-button></li>
+      <ul
+        class="toolbar"
+        v-permissions="[
+          'business:carusebook:create',
+          'business:carusebook:exportExcel',
+        ]"
+      >
+        <li>
+          <el-button
+            type="primary"
+            @click="handleEdit"
+            icon="el-icon-plus"
+            v-permissions="['business:carusebook:create']"
+            >鏂板缓</el-button
+          >
+        </li>
+        <li>
+          <el-button
+            type="primary"
+            @click="handleEx"
+            v-permissions="['business:carusebook:exportExcel']"
+            >瀵煎嚭</el-button
+          >
+        </li>
       </ul>
       <el-table
-          v-loading="isWorking.search"
-          :data="tableData.list"
-          stripe
-          @selection-change="handleSelectionChange"
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+        @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="memberName" label="鎻愭姤浜�" min-width="80px"></el-table-column>
-        <el-table-column prop="companyName" label="鎵�灞炵粍缁�" min-width="150px"></el-table-column>
-        <el-table-column prop="carCode" label="杞︾墝鍙�" min-width="100px"></el-table-column>
+        <el-table-column
+          prop="memberName"
+          label="鎻愭姤浜�"
+          min-width="80px"
+        ></el-table-column>
+        <el-table-column
+          prop="companyName"
+          label="鎵�灞炵粍缁�"
+          min-width="150px"
+        ></el-table-column>
+        <el-table-column
+          prop="carCode"
+          label="杞︾墝鍙�"
+          min-width="100px"
+        ></el-table-column>
         <el-table-column label="鐢ㄨ溅鏃堕棿" min-width="170px">
-          <template slot-scope="{row}">
-                <span>璧�:{{row.startTime || ''}}</span><br>
-                <span>姝�:{{row.endTime  || ''}}</span>
+          <template slot-scope="{ row }">
+            <span>璧�:{{ row.startTime || "" }}</span
+            ><br />
+            <span>姝�:{{ row.endTime || "" }}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="planUseDate" label="鍑哄彂鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column
+          prop="planUseDate"
+          label="鍑哄彂鏃堕棿"
+          min-width="150px"
+        ></el-table-column>
         <el-table-column label="鐩殑鍦�" min-width="200px">
-          <template slot-scope="{row}">
+          <template slot-scope="{ row }">
             <span class="status-green" v-if="row.type === 0">銆愬競鍐呫��</span>
-            <span class="status-red"   v-if="row.type === 1">銆愬競澶栥��</span>
-            <span >{{ row.addr }}</span>
+            <span class="status-red" v-if="row.type === 1">銆愬競澶栥��</span>
+            <span>{{ row.addr }}</span>
           </template>
         </el-table-column>
         <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>
+          <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-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 === 3">瀹℃壒涓嶉�氳繃</span>
+            <span class="status-red" v-if="row.status === 4">宸叉挙閿�</span>
           </template>
         </el-table-column>
 
-        <el-table-column prop="createDate" label="鐢宠鏃堕棿" min-width="150px"></el-table-column>
-        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="150px"></el-table-column>
         <el-table-column
-            label="鎿嶄綔"
-            min-width="100"
-            align="center"
-            fixed="right"
+          prop="createDate"
+          label="鐢宠鏃堕棿"
+          min-width="150px"
+        ></el-table-column>
+        <el-table-column
+          prop="editDate"
+          label="鎿嶄綔鏃堕棿"
+          min-width="150px"
+        ></el-table-column>
+        <el-table-column
+          label="鎿嶄綔"
+          min-width="160"
+          align="center"
+          fixed="right"
         >
-          <template slot-scope="{row}">
-            <el-button type="text" icon="el-icon-edit" @click="$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�',row)" >鏌ョ湅璇︽儏</el-button>
+          <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> -->
+            <el-button
+              v-if="
+                (row.status === 0 || 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>
       <pagination
-          @size-change="handleSizeChange"
-          @current-change="handlePageChange"
-          :pagination="tableData.pagination"
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
       >
       </pagination>
     </template>
-    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="handlePageChange"/>
-    <OperaCarUseBookParamWindow ref="OperaParamWindow" @success="search"/>
+    <!--  -->
+    <el-dialog title="鐢ㄨ溅鎾ら攢" :visible.sync="isShowBack" width="520px">
+      <el-form
+        :model="backParam"
+        :rules="rules"
+        ref="backForm"
+        label-width="100px"
+        class="demo-ruleForm"
+      >
+        <el-form-item label="璇存槑" prop="info">
+          <el-input
+            type="textarea"
+            :rows="4"
+            v-model="backParam.info"
+            placeholder="璇疯緭鍏ユ挙閿�璇存槑"
+          ></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowBack = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="backSubmit">纭畾</el-button>
+      </span>
+    </el-dialog>
+    <OperaCarUseBookWindow
+      ref="OperaDetailsWindow"
+      @success="handlePageChange"
+    />
+    <OperaCarUseBookParamWindow ref="OperaParamWindow" @success="search" />
   </TableLayout>
 </template>
 
@@ -122,6 +246,7 @@
 import OperaCarUseBookParamWindow from '@/components/operation/OperCarUseBookParamWindow.vue'
 import { timeForMat } from '@/utils/util'
 import { allList } from '@/api/business/hiddenDangerParam'
+import { carUseBookRecordEx, revokeById } from '@/api/business/carUseBook'
 export default {
   name: 'Empower',
   extends: BaseTable,
@@ -140,7 +265,13 @@
       },
       cateList: [],
       areaList: [],
-      time: []
+      time: [],
+
+      isShowBack: false,
+      backParam: {},
+      rules: {
+        info: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      }
     }
   },
   created () {
@@ -155,6 +286,39 @@
     this.loadParams()
   },
   methods: {
+    rowRevokeClick (row) {
+      this.isShowBack = true
+      this.backParam = {}
+      this.$set(this.backParam, 'id', row.id)
+      this.$nextTick(() => {
+        this.$refs.backForm.clearValidate()
+      })
+    },
+    backSubmit () {
+      revokeById({ ...this.backParam }).then(res => {
+        this.$tip.success('鎾ら攢鎴愬姛')
+        this.isShowBack = false
+        this.search()
+      })
+    },
+    handleEx () {
+      this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵')
+        .then(() => {
+          this.exLoading = true
+          carUseBookRecordEx({
+            model: this.searchForm
+          })
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.exLoading = false
+            })
+        })
+    },
     changeRadio (e) {
       this.searchForm.radio = e
       if (e === '0') {
diff --git a/admin/src/views/task/dangetDetail.vue b/admin/src/views/task/dangetDetail.vue
index 76d3a71..7a7012b 100644
--- a/admin/src/views/task/dangetDetail.vue
+++ b/admin/src/views/task/dangetDetail.vue
@@ -34,7 +34,7 @@
               <div class="label">鐜板満鎯呭喌</div>
               <div class="value">
                 <div class="file_list">
-                  <template v-for="item in info.submitFileList">
+                  <div class="file" v-for="item in info.submitFileList">
                     <img
                       v-if="item.type == 0"
                       :key="item.id"
@@ -49,7 +49,7 @@
                       class="img"
                       controls
                     />
-                  </template>
+                  </div>
                 </div>
               </div>
             </div>
@@ -458,7 +458,7 @@
       }
     }
   },
-  created() {
+  created () {
     this.getMemberList()
   },
   methods: {
@@ -666,10 +666,14 @@
           }
           .file_list {
             display: flex;
-            .img {
-              width: 200px;
+            .file {
+              width: 92px;
               margin-right: 12px;
               margin-bottom: 12px;
+              .img{
+                max-height: 92px;
+                max-width: 92px;
+              }
             }
           }
           .value {
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index d4a61d0..8d1c350 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,8 +202,16 @@
       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)
+        this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', { ...row, id: row.objId })
         return
       }
       if (row.objType === 1) {
@@ -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..d8e4b15 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>
@@ -238,7 +244,7 @@
     <!--  鍚屾剰/鎷掔粷 -->
     <el-dialog
       append-to-body
-      :title="apprTitle"
+      :title="param.status == 2 ? '鍚屾剰' : '鎷掔粷'"
       :visible.sync="isShowAppr"
       width="480px"
     >
@@ -400,6 +406,9 @@
     handleAppr (val) {
       this.$set(this.param, 'status', val)
       this.isShowAppr = true
+      this.$nextTick(() => {
+        this.$refs.ruleForm.clearValidate()
+      })
     },
     confirm () {
       console.log('--')
diff --git a/h5/App.vue b/h5/App.vue
index 31e5e5c..0d25d8c 100644
--- a/h5/App.vue
+++ b/h5/App.vue
@@ -2,46 +2,7 @@
 import { wxAuthorize, refreshToken } from '@/api'
 export default {
   onLaunch: function () {
-    var that = this
-    if (!that.$store.state.openid) {
-      let url = window.location.href
-      let code = ''
-      if (url.indexOf('code=') !== -1) {
-        const query = url.split('?')
-        console.log('app-app', url)
-        for (const q of query) {
-          if (q.indexOf('code=') !== -1) {
-            code = q.substring(q.indexOf('code=') + 5, q.length)
-          }
-        }
-        wxAuthorize({
-          code: code
-        }).then(res => {
-          console.log('app_ress', res)
-          if (res.code === 200) {
-            that.$store.commit('setOpenId', res.data.openid)
-            if (res.data.member) {
-              that.$store.commit('setMember', res.data.member)
-            }
-          }
-        })
-      } else {
-        // const appID = 'wx4d7c10bdec51942b'
-        // let uri = encodeURIComponent(url)
-        // let authURL =
-        //   `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
-        // window.location.href = authURL
-      }
-    }
-    // 鍒锋柊token
-    const token = uni.getStorageSync('token')
-    if (token) {
-      //  refreshToken().then(res => {
-      //  	if(res.code && res.code === 200){
-      // 		this.$store.commit('setToken', res.data)
-      // 	}
-      // })
-    }
+    
   },
   onShow: function () {
     console.log('App Show')
@@ -220,24 +181,42 @@
   font-size: 28rpx;
   color: #333333;
 }
+.popupShow {
+  overflow: hidden;
+  position: fixed;
+  width: 100%;
+}
 .placeholder6 {
   color: #666666;
   font-size: 28rpx;
 }
-.primaryColor{
+.primaryColor {
   color: $uni-color-primary;
+}
+.avatar {
+  width: 64rpx;
+  height: 64rpx;
+  border-radius: 50%;
+  overflow: hidden;
+  margin-right: 20rpx;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-color: $uni-color-primary;
+  color: #fff;
+  font-size: 30rpx;
 }
 .placeholder9 {
   color: #999999;
   font-size: 28rpx;
 }
-.fs24{
+.fs24 {
   font-size: 24rpx;
 }
 .mr24 {
   margin-right: 24rpx;
 }
-.mt24{
+.mt24 {
   margin-top: 24rpx;
 }
 
@@ -247,7 +226,7 @@
 .ml12 {
   margin-left: 12rpx;
 }
-.mt6{
+.mt6 {
   margin-top: 6rpx;
 }
 .mr6 {
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/main.js b/h5/main.js
index e9b21e4..4c90c6f 100644
--- a/h5/main.js
+++ b/h5/main.js
@@ -4,25 +4,18 @@
 import './uni.promisify.adaptor'
 import uView from "uview-ui"
 import store from './store/index.js'
-
 import Tabbar from '@/components/tarbar.vue'
 import navigation from '@/components/Header.vue'
 
 Vue.config.productionTip = false
 
+// 寮傛hook
 
-// Vue.prototype.$baseUrl = 'https://dmtest.ahapp.net/h5_api/';
-// Vue.prototype.$baseUrl = 'http://facepay.huasunsolar.com/web_interface/';
-// Vue.prototype.$baseUrl = 'http://218.23.218.228:8018/web_interface/'
 Vue.use(uView)
 Vue.component('Tabbar', Tabbar)
 Vue.component('navigation', navigation)
 Vue.prototype.$store = store
-Vue.prototype.$jump = (url) => {
-	uni.navigateTo({
-		url
-	})
-}
+Vue.prototype.$jump = (url) => {uni.navigateTo({url})}
 Vue.prototype.$goBack = () => { uni.navigateBack() }
 Vue.prototype.$eventBus = new Vue()
 Vue.prototype.$onWait = new Promise((resolve) => {
diff --git a/h5/manifest.json b/h5/manifest.json
index 6e448ff..22a90b7 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -91,8 +91,8 @@
             "proxy" : {
                 "/admin_interface" : {
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
-                    "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    // "target" : "http://192.168.0.135:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    // "target" : "http://192.168.0.173/admin_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.135:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
                         "^/admin_interface" : "" // 閲嶅啓鍦板潃锛屽鏋滃疄闄呮帴鍙d腑鏄笉甯�/dev-api锛岄渶瑕佸皢杩欎釜鍓嶇紑缃┖锛屽洜涓鸿繖涓墠缂�鍙槸涓轰簡璇嗗埆鐢紝璇嗗埆瀹屼箣鍚庡氨娌$敤浜�
diff --git a/h5/pages.json b/h5/pages.json
index 8fc4ef3..31a0fd0 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -4,6 +4,13 @@
 	},
 	"pages": [
 		{
+			"path": "pages/login/login",
+			"style": {
+				"navigationBarTitleText": "閫夋嫨韬唤",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/index/index",
 			"style": {
 				"navigationBarTitleText": "璁垮涓績",
@@ -21,8 +28,7 @@
 			"path": "pages/staffLogin/login",
 			"style": {
 				"navigationBarTitleText": "鐧诲綍",
-				"enablePullDownRefresh": false,
-				"navigationStyle": "custom"
+				"enablePullDownRefresh": false	
 			}
 		},
 		{
diff --git a/h5/pages/answer/answer.vue b/h5/pages/answer/answer.vue
index e1cc20a..92d91bb 100644
--- a/h5/pages/answer/answer.vue
+++ b/h5/pages/answer/answer.vue
@@ -8,12 +8,12 @@
       <view class="box_list_answer" v-if="list && list.length > 0">
         <view v-if="status == 1 || status == 2" class="score_static">
           <text class="name">鏈寰楀垎锛�</text>
-          <text class="num" :class="{warry: status == 2}">{{ score }}鍒�</text>
+          <text class="num" :class="{ warry: status == 2 }">{{ score }}鍒�</text>
         </view>
         <!--    鍗曢��/鍒ゆ柇   -->
         <view v-for="(item, index) in list" :key="index" class="list_item">
           <view class="box_list_answer_name">
-            <text>{{ index + 1 }}銆亄{ item.title}}</text>
+            <text>{{ index + 1 }}銆亄{ item.title }}</text>
             <text v-if="item.score"> ({{ item.score }}鍒�)</text>
             <text style="color: #ed4545">*</text>
           </view>
@@ -83,14 +83,18 @@
             </view>
             <view
               class="box_list_answer_tips"
+              style="margin-bottom: 0rpx"
               v-if="
                 item.selAnswer &&
                 item.answer !== item.selAnswer &&
                 status != '0'
               "
             >
-              <image src="@/static/ic_wrong@2x.png" />
-              <text>鍥炵瓟閿欒</text>
+              <view class="line">
+                <image src="@/static/ic_wrong@2x.png" />
+                <text>鍥炵瓟閿欒</text>
+              </view>
+              <view class="line">姝g‘绛旀锛歿{ item.answer }}</view>
             </view>
             <view
               class="box_list_answer_tips"
@@ -100,8 +104,10 @@
                 status != '0'
               "
             >
-              <image src="@/static/ic_success@2.png" />
-              <text class="success">鍥炵瓟姝g‘</text>
+              <view class="line">
+                <image src="@/static/ic_success@2.png" />
+                <text class="success">鍥炵瓟姝g‘</text>
+              </view>
             </view>
           </template>
           <template v-if="item.type == 2">
@@ -116,8 +122,7 @@
                 src="@/static/checkbo1x_sel@2x.png"
                 v-if="
                   (line.checked && status != '2') ||
-                  (item.selAnswer === item.answer &&
-                    line.checked)
+                  (item.selAnswer === item.answer && line.checked)
                 "
               />
               <image
@@ -135,8 +140,7 @@
               <text
                 v-if="
                   (line.checked && status != '2') ||
-                  (item.selAnswer === item.answer &&
-                    line.checked)
+                  (item.selAnswer === item.answer && line.checked)
                 "
                 style="color: rgba(77, 153, 168, 1)"
                 ><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{
@@ -165,8 +169,11 @@
                 status != '0'
               "
             >
-              <image src="@/static/ic_wrong@2x.png" />
-              <text>鍥炵瓟閿欒</text>
+              <view class="line">
+                <image src="@/static/ic_wrong@2x.png" />
+                <text>鍥炵瓟閿欒</text>
+              </view>
+              <view class="line">姝g‘绛旀锛歿{ item.answer }}</view>
             </view>
             <view
               class="box_list_answer_tips"
@@ -176,8 +183,10 @@
                 status != '0'
               "
             >
-              <image src="@/static/ic_success@2.png" />
-              <text class="success">鍥炵瓟姝g‘</text>
+              <view class="line">
+                <image src="@/static/ic_success@2.png" />
+                <text class="success">鍥炵瓟姝g‘</text>
+              </view>
             </view>
           </template>
         </view>
@@ -237,12 +246,12 @@
       score: 0
     }
   },
-  computed:{
-    answerIng(){
+  computed: {
+    answerIng() {
       let count = 0
       this.list.forEach(item => {
-        if(item.selAnswer || item.selAnswer == 0){
-          count ++
+        if (item.selAnswer || item.selAnswer == 0) {
+          count++
         }
       })
       return count === this.list.length
@@ -295,7 +304,6 @@
               item.status = '0'
               item.selAnswer = null
             })
-            console.log(res.data)
             this.list = res.data
           }
           // res.param.problemsDOList.forEach(item => {
@@ -307,7 +315,7 @@
     },
     // 鍗曢�夐�夋嫨涓鐩�
     select(line, i) {
-      if(this.status === '2') return
+      if (this.status != '0') return
       this.list.forEach((item, index) => {
         if (index === i) {
           item.selAnswer = line.code
@@ -316,7 +324,7 @@
       // this.problemIndex = index
     },
     changeBox(index, jeck) {
-      if(this.status === '2') return
+      if (this.status != '0') return
       this.list.forEach((item, i) => {
         if (index === i) {
           item.options.forEach((item2, j) => {
@@ -356,7 +364,7 @@
     },
     // 涓嬩竴棰�
     onSubmit() {
-      if(!this.answerIng) return
+      if (!this.answerIng) return
       const { list } = this
       // 楠岃瘉鎵�鏈夐鐩兘鏈夐�夐」
       let count = 0
@@ -376,7 +384,7 @@
       list.forEach(item => {
         if (item.selAnswer !== item.answer) {
           flag++
-        }else{
+        } else {
           this.score += item.score
         }
       })
@@ -468,9 +476,17 @@
         box-sizing: border-box;
         background: #f7f7f7;
         border-radius: 8rpx;
-        display: flex;
-        align-items: center;
         margin-bottom: 24rpx;
+        .line {
+          display: flex;
+          align-items: center;
+          font-size: 28rpx;
+          color: #333333;
+          margin-bottom: 20rpx;
+          &:nth-last-child(1){
+            margin-bottom: 0;
+          }
+        }
         image {
           width: 28rpx;
           height: 28rpx;
@@ -486,18 +502,18 @@
         }
       }
     }
-    .score_static{
+    .score_static {
       display: flex;
       font-size: 32rpx;
       margin-bottom: 40rpx;
-      .name{
+      .name {
         font-weight: 600;
       }
-      .num{
+      .num {
         color: $uni-color-primary;
       }
-      .warry{
-        color: #ED4545;
+      .warry {
+        color: #ed4545;
       }
     }
     .list_item {
@@ -541,7 +557,7 @@
       font-size: 30rpx;
       color: #ffffff;
     }
-    .disable{
+    .disable {
       background-color: #cccccc;
     }
   }
diff --git a/h5/pages/applicationRecord/applicationRecord.vue b/h5/pages/applicationRecord/applicationRecord.vue
index a390d45..3cac6b9 100644
--- a/h5/pages/applicationRecord/applicationRecord.vue
+++ b/h5/pages/applicationRecord/applicationRecord.vue
@@ -36,8 +36,8 @@
         :key="index"
       >
         <view class="box_list_item_head">
-          <text>{{ item.name }}鐨勫姵鍔″叆鍥敵璇�</text>
-          <text class="loading">{{ statusMap[item.status] }}</text>
+          <text>{{ item.name }}鎻愪氦鐨勮瀹㈢敵璇�</text>
+          <text class="loading" :class="{error: item.status == 3}">{{ statusMap[item.status] }}</text>
         </view>
         <view class="box_list_item_nr">
           <view class="box_list_item_nr_item">
@@ -93,7 +93,7 @@
         0: '寰呭鏍�',
         1: '宸叉彁浜�',
         2: '瀹℃牳閫氳繃',
-        3: '瀹℃牳涓嶉�氳繃',
+        3: '瀹℃牳椹冲洖',
         4: '鍙栨秷',
         5: '涓嬪彂鎴愬姛',
         6: '涓嬪彂澶辫触',
@@ -111,7 +111,7 @@
   methods: {
     handleDetail(id) {
       uni.navigateTo({
-        url: "/pages/appointmentDetails/appointmentDetails?id=" + id
+        url: "/pages/appointmentDetails/appointmentDetails?detail=1&id=" + id
       })
     },
     tabsClick(val) {
diff --git a/h5/pages/appointmentDetails/appointmentDetails.vue b/h5/pages/appointmentDetails/appointmentDetails.vue
index ce81109..4577ecd 100644
--- a/h5/pages/appointmentDetails/appointmentDetails.vue
+++ b/h5/pages/appointmentDetails/appointmentDetails.vue
@@ -20,9 +20,9 @@
     </view>
     <view class="box_list">
       <view class="box_list_label">鎷滆淇℃伅</view>
-      <view class="box_list_tips" v-if="info.status == 6 || info.status == 3"
+      <!-- <view class="box_list_tips" v-if="info.status == 6 || info.status == 3"
         >璇锋敞鎰忔煡鐪嬪嚭鍏ラ棬绂佷笅鍙戞儏鍐碉紝濡傝嫢涓嬪彂澶辫触闇�閲嶆柊鐢宠</view
-      >
+      > -->
       <view class="box_list_item">
         <view class="box_list_item_label">琚浜哄憳锛�</view>
         <view class="box_list_item_val"
@@ -77,10 +77,25 @@
   data() {
     return {
       info: {},
-      show: false
+      show: false,
+      detail: ''
     }
   },
+  onBackPress(options) {
+    if (this.detail == 1) {
+      uni.redirectTo({
+        url: '/pages/applicationRecord/applicationRecord'
+      })
+    } else {
+      uni.redirectTo({
+        url: '/pages/index/index'
+      })
+    }
+
+    return true
+  },
   onLoad(option) {
+    this.detail = option.detail || ''
     this.getDetail(option.id)
     // visitorSubDetail({ id: option.id })
     // 	.then(res => {
diff --git a/h5/pages/index/index.vue b/h5/pages/index/index.vue
index cc4c1c6..3c7ac9a 100644
--- a/h5/pages/index/index.vue
+++ b/h5/pages/index/index.vue
@@ -1,162 +1,205 @@
 <template>
-	<view class="box">
-		<view class="box_head">
-			<text>瀹夋嘲鐗╂祦鏅烘収鍥尯</text>
-			<text class="h2">璁垮涓撳尯</text>
-			<image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
-		</view>
-		<view class="main_title">涓氬姟鍔炵悊</view>
-		<view class="box_list">
-			<view class="box_list_item" @click="jump(1)">
-				<image src="@/static/ic_laifangdengji.png" mode="widthFix" />
-			</view>
-			<view class="box_list_item" @click="jump(2)">
-				<image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
-			</view>
-			<view class="box_list_item" @click="jump(3)">
-				<image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
-			</view>
-			<view class="box_list_item" @click="jump(4)">
-				<image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
-			</view>
-		</view>
-		<!-- <view class="box_btn">閫�鍑虹櫥褰�</view> -->
-		<view class="copyright">
-			<image src="@/static/logo_s@2x.png" mode="widthFix" />
-			<text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
-		</view>
-	</view>
+  <view class="box">
+    <view class="box_head">
+      <text>瀹夋嘲鐗╂祦鏅烘収鍥尯</text>
+      <text class="h2">璁垮涓撳尯</text>
+      <image mode="widthFix" class="banner_bg" src="@/static/banner.jpg" />
+    </view>
+    <view class="main_title">涓氬姟鍔炵悊</view>
+    <view class="box_list">
+      <view class="box_list_item" @click="jump(1)">
+        <image src="@/static/ic_laifangdengji.png" mode="widthFix" />
+      </view>
+      <view class="box_list_item" @click="jump(2)">
+        <image src="@/static/ic_yuyuejilu.png" mode="widthFix" />
+      </view>
+      <view class="box_list_item" @click="jump(3)">
+        <image src="@/static/ic_yuanqudaolan.png" mode="widthFix" />
+      </view>
+      <view class="box_list_item" @click="jump(4)">
+        <image src="@/static/ic_yuyuezhinan.png" mode="widthFix" />
+      </view>
+    </view>
+    <!-- <view class="box_btn">閫�鍑虹櫥褰�</view> -->
+    <view class="copyright">
+      <image src="@/static/logo_s@2x.png" mode="widthFix" />
+      <text>瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃鐗堟潈鎵�鏈�</text>
+    </view>
+  </view>
 </template>
 
 <script>
-import image from 'uview-ui/libs/config/props/image'
+import { wxAuthorize } from '@/api'
+export default {
 
-	export default {
+  data() {
+    return {
 
-		data() {
-			return {
-
-			}
-		},
-
-		methods: {
-			jump(type) {
-				switch (type) {
-					case 1:
-						uni.navigateTo({
-							url: '/pages/notice/notice'
-						})
-						break
-					case 2:
-						uni.navigateTo({
-							url: '/pages/applicationRecord/applicationRecord'
-						})
-						break
-					case 3:
-						uni.navigateTo({
-							url: '/pages/guidemap/guidemap'
-						})
-						break
-					case 4:
-						uni.navigateTo({
-							url: '/pages/visitorSubGuide/index'
-						})
-						break
-				}
-			}
-		}
-	}
+    }
+  },
+  onBackPress(options) {
+    uni.redirectTo({
+      url: '/pages/login/login'
+    })
+    return true
+  },
+  onLoad() {
+    var that = this
+    // 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)
+        for (const q of query) {
+          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)
+          // }
+          // 鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐
+        }
+        wxAuthorize({
+          code: code,
+          source: 1
+        }).then(res => {
+          console.log('app_ress', res)
+          if (res.code === 200) {
+            that.$store.commit('setOpenId', res.data.openid)
+            if (res.data.member) {
+              that.$store.commit('setMember', res.data.member)
+            }
+          }
+        })
+      } else {
+        // const appID = 'wx4d7c10bdec51942b'
+        // let uri = encodeURIComponent(url)
+        // let authURL =
+        //   `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
+        // window.location.href = authURL
+      }
+    // }
+  },
+  methods: {
+    jump(type) {
+      switch (type) {
+        case 1:
+          uni.navigateTo({
+            url: '/pages/notice/notice'
+          })
+          break
+        case 2:
+          uni.navigateTo({
+            url: '/pages/applicationRecord/applicationRecord'
+          })
+          break
+        case 3:
+          uni.navigateTo({
+            url: '/pages/guidemap/guidemap'
+          })
+          break
+        case 4:
+          uni.navigateTo({
+            url: '/pages/visitorSubGuide/index'
+          })
+          break
+      }
+    }
+  }
+}
 </script>
 
 <style lang="scss" scoped>
-	.box {
-		width: 100%;
-		height: auto;
-		padding: 30rpx;
-		box-sizing: border-box;
+.box {
+  width: 100%;
+  height: auto;
+  padding: 30rpx;
+  box-sizing: border-box;
 
-		.box_btn {
-			position: fixed;
-			bottom: 70rpx;
-			left: 50%;
-			transform: translate(-50%, 0);
-			width: 208rpx;
-			height: 72rpx;
-			line-height: 72rpx;
-			text-align: center;
-			border-radius: 36rpx;
-			border: 1rpx solid #999999;
-			font-size: 28rpx;
-			font-weight: 400;
-			color: #333333;
-		}
+  .box_btn {
+    position: fixed;
+    bottom: 70rpx;
+    left: 50%;
+    transform: translate(-50%, 0);
+    width: 208rpx;
+    height: 72rpx;
+    line-height: 72rpx;
+    text-align: center;
+    border-radius: 36rpx;
+    border: 1rpx solid #999999;
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #333333;
+  }
 
-		.box_head {
-			width: 100%;
-			height: 270rpx;
-			padding: 0 44rpx;
-			box-sizing: border-box;
-			border-radius: 8rpx;
-			display: flex;
-			flex-direction: column;
-			position: relative;
-			.banner_bg{
-				position: absolute;
-				top: 0;
-				left: 0;
-				width: 100%;
-				z-index: -1;
-			}
-			.h2 {
-				font-size: 28rpx;
-				font-family: SourceHanSansSC, SourceHanSansSC;
-				font-weight: 400;
-				color: #FFFFFF;
-				margin-top: 14rpx;
-			}
-			text {
-				&:first-child {
-					font-size: 44rpx;
-					font-family: SourceHanSansSC, SourceHanSansSC;
-					font-weight: bold;
-					color: #FFFFFF;
-					margin-top: 54rpx;
-				}
-			}
-		}
-		.main_title{
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #222222;
-			margin: 40rpx 0 32rpx;
-		}
-		.box_list {
-			width: 100%;
-			display: flex;
-			align-items: center;
-			flex-wrap: wrap;
-			justify-content: space-between;
-			margin-top: 40rpx;
+  .box_head {
+    width: 100%;
+    height: 270rpx;
+    padding: 0 44rpx;
+    box-sizing: border-box;
+    border-radius: 8rpx;
+    display: flex;
+    flex-direction: column;
+    position: relative;
+    .banner_bg {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 100%;
+      z-index: -1;
+    }
+    .h2 {
+      font-size: 28rpx;
+      font-family: SourceHanSansSC, SourceHanSansSC;
+      font-weight: 400;
+      color: #ffffff;
+      margin-top: 14rpx;
+    }
+    text {
+      &:first-child {
+        font-size: 44rpx;
+        font-family: SourceHanSansSC, SourceHanSansSC;
+        font-weight: bold;
+        color: #ffffff;
+        margin-top: 54rpx;
+      }
+    }
+  }
+  .main_title {
+    font-weight: 600;
+    font-size: 32rpx;
+    color: #222222;
+    margin: 40rpx 0 32rpx;
+  }
+  .box_list {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    flex-wrap: wrap;
+    justify-content: space-between;
+    margin-top: 40rpx;
 
-			.box_list_item {
-				width: 100%;
-				margin-bottom: 20rpx;
-				image {
-					width: 100%;
-				}
-			}
-		}
-		.copyright{
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			margin-top: 84rpx;
-			font-size: 24rpx;
-			color: #666666;
-			image{
-				width: 40rpx;
-				height: 40rpx;
-			}
-		}
-	}
+    .box_list_item {
+      width: 100%;
+      margin-bottom: 20rpx;
+      image {
+        width: 100%;
+      }
+    }
+  }
+  .copyright {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    margin-top: 84rpx;
+    font-size: 24rpx;
+    color: #666666;
+    image {
+      width: 40rpx;
+      height: 40rpx;
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/h5/pages/login/login.vue b/h5/pages/login/login.vue
new file mode 100644
index 0000000..c459474
--- /dev/null
+++ b/h5/pages/login/login.vue
@@ -0,0 +1,110 @@
+<template>
+  <view class="main_app">
+    <image class="login_bg" src="@/static/login_bg@2x.png" />
+    <view class="h1">瀹夋嘲鐗╂祦鏅烘収鍥尯</view>
+    <view class="placeholder6 place">璇烽�夋嫨鎮ㄧ殑韬唤</view>
+    <view class="item" @click="jump('/pages/index/index')">
+      <image class="avatar" src="@/static/ic_visitor@2x.png" />
+      <view class="content">
+        <view class="name">鎴戞槸璁垮</view>
+        <view class="placeholder6">VISITOR</view>
+      </view>
+      <u-icon name="arrow-right" size="24" color="#979797" />
+    </view>
+    <view class="item" @click="staffLogin">
+      <image class="avatar" src="@/static/ic_staff@2x.png" />
+      <view class="content">
+        <view class="name">鎴戞槸鍛樺伐</view>
+        <view class="placeholder6">STAFF</view>
+      </view>
+      <u-icon name="arrow-right" size="24" color="#979797" />
+    </view>
+    <view class="item">
+      <image class="avatar" src="@/static/ic_driver@2x.png" />
+      <view class="content">
+        <view class="name">鎴戞槸鐗╂祦杞﹀徃鏈�</view>
+        <view class="placeholder6">DRIVER</view>
+      </view>
+      <u-icon name="arrow-right" size="24" color="#979797" />
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  methods: {
+    jump(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'
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="scss" >
+.main_app {
+  width: 100%;
+  height: 100vh;
+  padding-top: 80rpx;
+  background: linear-gradient(
+    180deg,
+    rgba(39, 155, 170, 0.2) 0%,
+    rgba(39, 155, 170, 0) 100%
+  );
+  .login_bg {
+    position: absolute;
+    top: 0;
+    width: 750rpx;
+    z-index: -1;
+  }
+  .h1 {
+    font-weight: 600;
+    font-size: 48rpx;
+    color: #222222;
+    line-height: 66rpx;
+    margin-bottom: 16rpx;
+  }
+  .place {
+    margin-bottom: 98rpx;
+  }
+  .item {
+    width: 690rpx;
+    height: 200rpx;
+    background: #ffffff;
+    border-radius: 8rpx;
+    display: flex;
+    align-items: center;
+    padding: 40rpx;
+    font-size: 26rpx;
+    margin-bottom: 40rpx;
+    .avatar {
+      width: 120rpx;
+      height: 120rpx;
+      margin-right: 30rpx;
+    }
+    .content {
+      flex: 1;
+      .name {
+        font-weight: 600;
+        font-size: 38rpx;
+        color: #222222;
+        margin-bottom: 20rpx;
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/h5/pages/notice/notice.vue b/h5/pages/notice/notice.vue
index 4ad99a7..f108547 100644
--- a/h5/pages/notice/notice.vue
+++ b/h5/pages/notice/notice.vue
@@ -9,7 +9,7 @@
       </view>
       <view class="empty"></view>
     </scroll-view>
-    <view class="button" :class="{disable: num > 0}" @click="toapply">
+    <view class="button" :class="{ disable: num > 0 }" @click="toapply">
       宸茬煡鏅擄紝涓嬩竴姝�
       <text v-if="num > 0">({{ num }}绉�)</text>
     </view>
@@ -33,12 +33,6 @@
     if (!this.$store.state.openId) {
       this.initToken()
     }
-    timer = setInterval(() => {
-      this.num--
-      if (this.num === 0) {
-        clearInterval(timer)
-      }
-    }, 1000)
   },
   methods: {
     initToken() {
@@ -59,6 +53,21 @@
           this.content = res.data.code
         }
       })
+      // 鍊掕鏃舵椂闂�
+      getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'NOTICE_CUTNTDOWN'
+      }).then(res => {
+        if (res.code === 200) {
+          this.num = res.data.code
+          timer = setInterval(() => {
+            this.num--
+            if (this.num === 0) {
+              clearInterval(timer)
+            }
+          }, 1000)
+        }
+      })
       // 鏄惁闇�瑕佺瓟棰�
       getSystemDictData({
         dictCode: 'SYSTEM',
@@ -70,7 +79,7 @@
       })
     },
     toapply() {
-      if(this.num > 0) return
+      if (this.num > 0) return
       if (this.answer === '0') {
         uni.navigateTo({
           url: '/pages/userinfo/userinfo'
@@ -125,7 +134,7 @@
     bottom: 30rpx;
     left: 30rpx;
   }
-  .disable{
+  .disable {
     background-color: #cccccc;
   }
 }
diff --git a/h5/pages/staff/index.vue b/h5/pages/staff/index.vue
index 341f9b3..a33d932 100644
--- a/h5/pages/staff/index.vue
+++ b/h5/pages/staff/index.vue
@@ -63,7 +63,9 @@
         <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>
@@ -89,22 +91,67 @@
 </template>
 
 <script>
-import { logoutPost, stagingHead } from '@/api'
+import { logoutPost, stagingHead, wxAuthorize, refreshToken } from '@/api'
 export default {
   data() {
     return {
       userInfo: uni.getStorageSync('userInfo'),
-      taskNum: 0
+      taskInfo: 0
     }
   },
   onLoad() {
-    console.log('userInfo', this.userInfo)
-
-  },
-  onShow() {
-    // if (this.userInfo && this.userInfo.name) {
-      this.getTaskInfo()
+    var that = this
+    // 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)
+      for (const q of query) {
+        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)
+        // }
+        // 鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐
+      }
+      wxAuthorize({
+        code: code,
+        source: 2
+      }).then(res => {
+        console.log('app_ress', res)
+        if (res.code === 200) {
+          that.$store.commit('setOpenId', res.data.openid)
+          if (res.data.member) {
+            that.$store.commit('setMember', res.data.member)
+          }
+        }
+      })
+    } else {
+      // const appID = 'wx4d7c10bdec51942b'
+      // let uri = encodeURIComponent(url)
+      // let authURL =
+      //   `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=${uri}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
+      // window.location.href = authURL
+    }
     // }
+    this.getTaskInfo()
+    // 鍒锋柊token
+    setTimeout(() => {
+      refreshToken().then(res => {
+        if (res.code && res.code === 200) {
+          this.$store.commit('setToken', res.data)
+        }
+      })
+    }, 3000)
+  },
+  mounted() {
+    this.$eventBus.$on('taskBack', () => {
+      console.log('----');
+      this.getTaskInfo()
+    })
   },
   methods: {
     jump(path) {
@@ -121,9 +168,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 22ba2db..ba35cde 100644
--- a/h5/pages/staff/meetingSel.vue
+++ b/h5/pages/staff/meetingSel.vue
@@ -1,5 +1,5 @@
 <template>
-  <view class="main_app">
+  <view class="main_app" :class="{ popupShow: isShowSelMem }">
     <view class="search_inp df_ac">
       <image
         class="mr12 search"
@@ -15,20 +15,18 @@
       />
     </view>
     <view class="member_list">
-      <view v-for="item in memberList" :key="item.id" class="line">
+      <view v-for="(item, index) in memberList" :key="item.id" class="line">
         <image
-          :src="
-            item.avatar
-              ? item.prefixUrl + item.avatar
-              : require('@/static/default_avatar.png')
-          "
+          v-if="item.avatar"
+          :src="item.prefixUrl + item.avatar"
           class="avatar"
           mode=""
         ></image>
+        <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>
         <view class="content">
           <view class="info">
             <text class="name">{{ item.realname }}</text>
-            <!-- <text class="tag">tag</text> -->
+            <text class="tag" v-if="item.status == '1'">鏈変細璁�</text>
           </view>
           <view class="depart">{{ item.departmentName }}</view>
         </view>
@@ -55,7 +53,9 @@
       <view class="sel_mem">
         <text>宸查�夋嫨锛�</text>
         <view class="members">
-					 <text v-for="(item, i) in selList" :key="i">{{ item.realname }}锛�</text>
+          <text v-for="(item, i) in selList" :key="i"
+            >{{ item.realname }}锛�</text
+          >
         </view>
         <image
           @click="isShowSelMem = true"
@@ -64,38 +64,39 @@
           mode=""
         ></image>
       </view>
-      <view class="btn" @click="onSubmit">纭({{ selList.length }}/20)</view>
+      <view class="btn" @click="onSubmit"
+        >纭({{ selList.length }}/{{ param.limitNum }})</view
+      >
     </view>
     <!--  -->
-     <u-popup
+    <u-popup
+      catchtouchmove
       :show="isShowSelMem"
       :round="12"
       mode="bottom"
-      @close="isShowSelMem = false"
+      @close="closeModal"
     >
       <view class="modal">
         <view class="modal_header">
           <text class="status">宸查�夋嫨锛歿{ selList.length }}浜�</text>
-          <text class="btn" @click="isShowSelMem = false">纭</text>
+          <text class="btn" @click="subSelMem">纭</text>
         </view>
         <view class="modal_mem_list">
           <view class="line" v-for="(item, i) in selList" :key="i">
             <image
-              :src="
-                item.faceImgFull
-                  ? item.faceImgFull
-                  : require('@/static/logo@2x.png')
-              "
+              v-if="item.avatar"
+              :src="item.prefixUrl + item.avatar"
               class="avatar"
               mode=""
             ></image>
+            <view v-else class="avatar">{{ item.realname.slice(0, 1) }}</view>
             <view class="content">
               <view class="info">
                 <text class="name">{{ item.realname }}</text>
               </view>
               <view class="depart">{{ item.departmentName }}</view>
             </view>
-            <view class="btn" @click="handleRemove(item)">绉婚櫎</view>
+            <view class="btn" @click="handleRemove(i)">绉婚櫎</view>
           </view>
         </view>
       </view>
@@ -105,12 +106,15 @@
 
 <script>
 import { userPagePost } from '@/api'
+import dayjs from 'dayjs'
 export default {
   data() {
     return {
       memberList: [],
       selList: [],
-      param: {},
+      param: {
+        limitNum: ''
+      },
       pagination: {
         page: 1,
         capacity: 20
@@ -120,15 +124,42 @@
     }
   },
   onLoad(option) {
-    this.param = { ...option, keyword: '' }
+    this.param = {
+      limitNum: option.limitNum,
+      keyword: '',
+      startTime: dayjs(Number(option.startTime)).format('YYYY-MM-DD HH:mm:ss'),
+      endTime: dayjs(Number(option.endTime)).format('YYYY-MM-DD HH:mm:ss'),
+    }
     this.initData()
+  },
+  mounted() {
+    this.$eventBus.$on('meetingPeoDetail', (res) => {
+      setTimeout(() => {
+        res.forEach(item => {
+          this.memberList.forEach(mem => {
+            if (item.id == mem.id) {
+              mem.checked = true
+            }
+          })
+        })
+        this.selList = this.memberList.filter(i => i.checked)
+        this.$nextTick(() => {
+          this.$forceUpdate()
+        })
+      }, 1000)
+    })
   },
   methods: {
     onSubmit() {
-			this.$eventBus.$emit('meetingPeo', this.selList)
+      this.$eventBus.$emit('meetingPeo', this.selList)
       uni.navigateBack()
     },
-		changeMem(item, index) {
+    changeMem(item, index) {
+      const { selList, param } = this
+      if (this.selList.length == param.limitNum && !item.checked) return uni.showToast({
+        title: `璇ヤ細璁彲瀹圭撼${param.limitNum}浜篳,
+        icon: 'none'
+      })
       item.checked = !item.checked
       this.selList = this.memberList.filter(i => i.checked)
       // const arr = e.detail.value
@@ -154,17 +185,31 @@
 
       }).then(res => {
         this.memberList = res.data.records || []
-				this.memberList.map(i => {
-					i.checked = false
-				})
+        this.memberList.map(i => {
+          i.checked = false
+        })
       })
     },
-		handleRemove(item) {
-      this.memberList.forEach(ite => {
-        if (item.id === ite.id) {
-          ite.checked = false
-        }
+    closeModal() {
+      this.selList = this.memberList.filter(i => i.checked)
+      this.isShowSelMem = false
+    },
+    subSelMem() {
+      const { selList, memberList } = this
+      memberList.forEach(ite => {
+        ite.checked = false
+        selList.forEach(item => {
+          if (ite.id === item.id) {
+            ite.checked = true
+          } else { }
+        })
       })
+      this.isShowSelMem = false
+      this.$forceUpdate()
+    },
+    handleRemove(i) {
+      this.selList.splice(i, 1)
+
       // console.log(this.memberList);
       this.$forceUpdate()
     },
@@ -175,10 +220,12 @@
 <style lang="scss">
 .modal {
   padding: 40rpx 30rpx;
+  max-height: 1000rpx;
   .modal_header {
     display: flex;
     justify-content: space-between;
     align-items: center;
+    padding-bottom: 20rpx;
     .status {
       font-weight: 600;
     }
@@ -187,6 +234,8 @@
     }
   }
   .modal_mem_list {
+    max-height: 860rpx;
+    overflow: auto;
     .line {
       display: flex;
       align-items: center;
@@ -198,6 +247,11 @@
         border-radius: 50%;
         overflow: hidden;
         margin-right: 20rpx;
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        background-color: $uni-color-primary;
+        color: #fff;
       }
       .content {
         flex: 1;
@@ -229,7 +283,7 @@
 .sub_wrap {
   position: fixed;
   bottom: 0;
-	background-color: #fff;
+  background-color: #fff;
   left: 0;
   width: 100%;
   box-shadow: 0rpx 0rpx 6rpx 0rpx #b2b2b2;
@@ -293,10 +347,12 @@
           color: #f62710;
           padding: 0rpx 6rpx;
           margin-left: 8rpx;
+          display: flex;
+          align-items: center;
         }
       }
     }
-		.checked{
+    .checked {
       width: 48rpx;
     }
   }
diff --git a/h5/pages/staff/meetingSub.vue b/h5/pages/staff/meetingSub.vue
index 34a81db..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({
@@ -146,11 +147,16 @@
         startTime: selTimeList[0].startTime,
         endTime: selTimeList[selTimeList.length - 1].endTime,
         bookingTimeList: selTimeList.map(i => i.id).join(','),
+        yudingDate: activeRoom.yudingDate,
+        roomName: activeRoom.roomName,
+        limitNum: activeRoom.limitNum,
+        roomId: activeRoom.roomId,
       }
+      setTimeout(() => {
+        this.$eventBus.$emit('meetingSub', obj)
+      }, 500)
       uni.navigateTo({
-        url: `/pages/staff/meetingSubOrder?yudingDate=${activeRoom.yudingDate}&roomName=${activeRoom.roomName}
-        &roomId=${activeRoom.roomId}&startTime=${obj.startTime}&endTime=${obj.endTime}
-        &bookingTimeList=${obj.bookingTimeList}&limitNum=${activeRoom.limitNum}`
+        url: `/pages/staff/meetingSubOrder`
       })
       // this.$jump('/pages/staff/vehicle/apply')
     },
@@ -327,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;
@@ -343,18 +351,22 @@
     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-color: #2d5c65;
+    background: #CCCCCC;
   }
 }
 .meeting_list {
diff --git a/h5/pages/staff/meetingSubOrder.vue b/h5/pages/staff/meetingSubOrder.vue
index e306e60..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">
@@ -140,16 +140,6 @@
         title: '浼氳璇︽儏'
       })
       this.getDetail(option.id)
-    } else {
-      this.param = { ...option }
-      const bookingTimeList = option.bookingTimeList.split(',').map(i => {
-        return {
-          timeId: Number(i)
-        }
-      })
-      this.$set(this.param, 'bookingTimeList', bookingTimeList)
-      this.$set(this.param, 'activeDate', dayjs(option.yudingDate).format('YYYY骞碝鏈圖鏃�'))
-      this.initOption()
     }
   },
   mounted() {
@@ -160,6 +150,17 @@
       }))
       // this.$set(this.param, 'memberIds', res.map(i => i.id).join(','))
       // this.$set(this.param, 'memberNames', res.map(i => i.name).join(','))
+    })
+    this.$eventBus.$on('meetingSub', (res) => {
+      this.param = { ...res }
+      this.$set(this.param, 'activeDate', dayjs(res.yudingDate).format('YYYY骞碝鏈圖鏃�'))
+      const bookingTimeList = res.bookingTimeList.split(',').map(i => {
+        return {
+          timeId: Number(i)
+        }
+      })
+      this.$set(this.param, 'bookingTimeList', bookingTimeList)
+      this.initOption()
     })
   },
   methods: {
@@ -214,6 +215,7 @@
       })
     },
     handleBack() {
+      if(this.param.id) return
       uni.navigateBack( )
     },
     onSubmit() {
@@ -222,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`,
@@ -248,10 +250,15 @@
     },
     selPeople() {
       const { param } = this
-      let startTime = param.yudingDate + ' ' + param.startTime
-      let endTime = param.yudingDate + ' ' + param.endTime
+      let startTime = new Date(param.yudingDate + ' ' + param.startTime).getTime()
+      let endTime = new Date(param.yudingDate + ' ' + param.endTime).getTime()
+      if(this.param.sysList && this.param.sysList.length > 0){
+        setTimeout(() => {
+          this.$eventBus.$emit('meetingPeoDetail', this.param.sysList || [])
+        }, 500)
+      }
       uni.navigateTo({
-        url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}`
+        url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}&limitNum=${this.param.limitNum}`
       })
     },
     serviceClick(item) {
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..b0b64bb 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() {
@@ -249,6 +244,12 @@
     // this.pagination.page = 0
     // this.dataList = []
     this.getList()
+  },
+  onBackPress(options) {
+    setTimeout(()=>{
+      this.$eventBus.$emit('taskBack')
+    })
+    return false
   },
   onShow() {
     this.pagination.page = 0
@@ -267,6 +268,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() {
@@ -296,7 +304,6 @@
             i.param1 = JSON.parse(i.param1)
           }
         })
-        console.log('dataList', this.dataList)
       })
     },
     getHeadList() {
@@ -306,8 +313,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 +349,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 +612,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 +623,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/applePeo.vue b/h5/pages/staff/vehicle/applePeo.vue
index a39eada..ec74350 100644
--- a/h5/pages/staff/vehicle/applePeo.vue
+++ b/h5/pages/staff/vehicle/applePeo.vue
@@ -1,5 +1,5 @@
 <template>
-  <view class="main_app">
+  <view class="main_app" :class="{ popupShow: isShowSelMem }">
     <view class="search_inp df_ac">
       <image
         class="mr12 search"
@@ -17,14 +17,12 @@
     <view class="member_list">
       <view v-for="(item, index) in memberList" :key="item.id" class="line">
         <image
-          :src="
-            item.faceImgFull
-              ? item.faceImgFull
-              : require('@/static/logo@2x.png')
-          "
+          v-if="item.faceImgFull"
+          :src="item.faceImgFull"
           class="avatar"
           mode=""
         ></image>
+        <view v-else class="avatar">{{ item.name.slice(0, 1) }}</view>
         <view class="content">
           <view class="info">
             <text class="name">{{ item.name }}</text>
@@ -65,19 +63,19 @@
           mode=""
         ></image>
       </view>
-      <view class="btn" @click="onSubmit">纭({{ selList.length }}/20)</view>
+      <view class="btn" @click="onSubmit">纭</view>
     </view>
     <!--  -->
     <u-popup
       :show="isShowSelMem"
       :round="12"
       mode="bottom"
-      @close="isShowSelMem = false"
+      @close="closeModal"
     >
       <view class="modal">
         <view class="modal_header">
           <text class="status">宸查�夋嫨锛歿{ selList.length }}浜�</text>
-          <text class="btn" @click="isShowSelMem = false">纭</text>
+          <text class="btn" @click="subSelMem">纭</text>
         </view>
         <view class="modal_mem_list">
           <view class="line" v-for="(item, i) in selList" :key="i">
@@ -96,7 +94,7 @@
               </view>
               <view class="depart">{{ item.componey }}</view>
             </view>
-            <view class="btn" @click="handleRemove(item)">绉婚櫎</view>
+            <view class="btn" @click="handleRemove(i)">绉婚櫎</view>
           </view>
         </view>
       </view>
@@ -143,13 +141,13 @@
   },
   methods: {
     initData() {
-      const { param, pagination } = this
+      const { param } = this
       findTypeMemberInfo({
         // model: {
         name: param.name,
         // },
         type: '2',
-        ...pagination
+        companyType: 1,
       }).then(res => {
         this.memberList = res.data || []
         this.memberList.forEach(i => {
@@ -165,6 +163,23 @@
       this.$eventBus.$emit('applePeo', this.selList)
       uni.navigateBack()
     },
+    closeModal() {
+      this.selList = this.memberList.filter(i => i.checked)
+      this.isShowSelMem = false
+    },
+    subSelMem() {
+      const { selList, memberList } = this
+      memberList.forEach(ite => {
+        ite.checked = false
+        selList.forEach(item => {
+          if (ite.id === item.id) {
+            ite.checked = true
+          } else { }
+        })
+      })
+      this.isShowSelMem = false
+      this.$forceUpdate()
+    },
     changeMem(item, index) {
       // this.memberList.forEach(mem => {
       //   if(item.id === mem.id){
@@ -175,13 +190,8 @@
       this.selList = this.memberList.filter(i => i.checked)
       this.$forceUpdate()
     },
-    handleRemove(item) {
-      this.memberList.forEach(ite => {
-        if (item.id === ite.id) {
-          ite.checked = false
-        }
-      })
-      // console.log(this.memberList);
+    handleRemove(i) {
+      this.selList.splice(i, 1)
       this.$forceUpdate()
     },
   }
@@ -191,10 +201,12 @@
 <style lang="scss">
 .modal {
   padding: 40rpx 30rpx;
+  max-height: 1000rpx;
   .modal_header {
     display: flex;
     justify-content: space-between;
     align-items: center;
+    padding-bottom: 20rpx;
     .status {
       font-weight: 600;
     }
@@ -203,6 +215,8 @@
     }
   }
   .modal_mem_list {
+    max-height: 860rpx;
+    overflow: auto;
     .line {
       display: flex;
       align-items: center;
diff --git a/h5/pages/staff/vehicle/apply.vue b/h5/pages/staff/vehicle/apply.vue
index c2e224f..87d9c52 100644
--- a/h5/pages/staff/vehicle/apply.vue
+++ b/h5/pages/staff/vehicle/apply.vue
@@ -91,13 +91,15 @@
             }"
           >
             <text v-if="param.memberNames">
-              <text v-for="mem,i in param.memberList" :key="mem.id">
-								<template v-if="i < 2">
-									<text>{{ mem.name }}</text>
-									<text v-if="i < 1 && param.memberList.length > 1">,</text>
-								</template>
-							</text>
-							<text v-if="param.memberList.length > 2">绛墈{ param.memberList.length }}浜�</text>
+              <text v-for="(mem, i) in param.memberList" :key="mem.id">
+                <template v-if="i < 2">
+                  <text>{{ mem.name }}</text>
+                  <text v-if="i < 1 && param.memberList.length > 1">,</text>
+                </template>
+              </text>
+              <text v-if="param.memberList.length > 2"
+                >绛墈{ param.memberList.length }}浜�</text
+              >
             </text>
             <text v-else>璇烽�夋嫨</text>
           </text>
@@ -135,11 +137,13 @@
     </view>
     <view class="sub_btn" @click="handleSub">鎻愪氦</view>
     <!--  -->
+    <!-- :minDate="new Date(param.startTime).getTime()"
+      :maxDate="new Date(param.endTime).getTime()" -->
     <u-datetime-picker
       :show="isShowDatetime"
+      @confirm="confirmDate"
       :minDate="new Date(param.startTime).getTime()"
       :maxDate="new Date(param.endTime).getTime()"
-      @confirm="confirmDate"
       @cancel="isShowDatetime = false"
       mode="datetime"
     ></u-datetime-picker>
@@ -207,7 +211,7 @@
       })
     },
     selPeople() {
-      if(this.param.memberList && this.param.memberList.length > 0){
+      if (this.param.memberList && this.param.memberList.length > 0) {
         setTimeout(() => {
           this.$eventBus.$emit('applePeoDetail', this.param.memberList || [])
         }, 500)
diff --git a/h5/pages/staff/vehicle/index.vue b/h5/pages/staff/vehicle/index.vue
index f38ca36..60124ef 100644
--- a/h5/pages/staff/vehicle/index.vue
+++ b/h5/pages/staff/vehicle/index.vue
@@ -1,7 +1,7 @@
 <template>
   <view class="main_app">
     <image
-      src="../../../static/staff/yongche_bg.png"
+      src="@/static/staff/yongche_bg.png"
       class="banner"
       mode="widthFix"
     ></image>
@@ -10,20 +10,34 @@
       <view class="title">閫夋嫨鐩殑鍦扮被鍒�</view>
       <view class="item" @click="$jump('/pages/staff/vehicle/shinei')">
         <image
-          src="../../../static/bg_shineiyongche@2x.png"
+          src="@/static/bg_shineiyongche@2x.png"
           class="img"
           mode="widthFix"
         ></image>
-        <view class="h1">甯傚唴鐢ㄨ溅</view>
+        <view class="h1">
+          <text>甯傚唴鐢ㄨ溅</text>
+          <image
+            src="@/static/ic_enter_shinei@2x.png"
+            class="icon"
+            mode="widthFix"
+          ></image>
+        </view>
         <view class="h2">URBAN AREA</view>
       </view>
       <view class="item" @click="$jump('/pages/staff/vehicle/shiwai')">
         <image
-          src="../../../static/bg_shiwaiyongche@2x.png"
+          src="@/static/bg_shiwaiyongche@2x.png"
           class="img"
           mode="widthFix"
         ></image>
-        <view class="h1">甯傚鐢ㄨ溅</view>
+        <view class="h1">
+          <text>甯傚鐢ㄨ溅</text>
+          <image
+            src="@/static/ic_enter_shiwai@2x.png"
+            class="icon"
+            mode="widthFix"
+          ></image>
+        </view>
         <view class="h2">SUBURB AREA</view>
       </view>
     </view>
@@ -70,6 +84,12 @@
         color: #222222;
         line-height: 48rpx;
         margin-bottom: 10rpx;
+        display: flex;
+        align-items: center;
+        .icon{
+          width: 32rpx;
+          margin-left: 10rpx;
+        }
       }
       .h2 {
         font-size: 22rpx;
@@ -91,7 +111,7 @@
       font-size: 34rpx;
       color: #222222;
       line-height: 48rpx;
-			text-align: center;
+      text-align: center;
     }
   }
   .banner {
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/pages/visitorApplication/visitorApplication.vue b/h5/pages/visitorApplication/visitorApplication.vue
index 439734d..b309a87 100644
--- a/h5/pages/visitorApplication/visitorApplication.vue
+++ b/h5/pages/visitorApplication/visitorApplication.vue
@@ -119,6 +119,7 @@
       v-if="form1.starttime"
       :show="show5"
       :minDate="formatTimeStamp(form1.starttime)"
+      :maxDate="formatTimeStamp(form1.starttime.slice(0,10) + ' 23:59')"
       mode="datetime"
       @cancel="show5 = false"
       @confirm="setendtime"
@@ -775,7 +776,7 @@
       this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
       // this.maxTime = getDaysAfterDate(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM'), this.day)
       this.maxTime = this.form1.starttime
-      console.log(this.form1.starttime)
+      console.log(this.form1.starttime.slice(0,10))
       this.show4 = false
     },
     setendtime(e) {
diff --git a/h5/static/ic_driver@2x.png b/h5/static/ic_driver@2x.png
new file mode 100644
index 0000000..0997cdf
--- /dev/null
+++ b/h5/static/ic_driver@2x.png
Binary files differ
diff --git a/h5/static/ic_enter_shinei@2x.png b/h5/static/ic_enter_shinei@2x.png
new file mode 100644
index 0000000..9fec9a7
--- /dev/null
+++ b/h5/static/ic_enter_shinei@2x.png
Binary files differ
diff --git a/h5/static/ic_enter_shiwai@2x.png b/h5/static/ic_enter_shiwai@2x.png
new file mode 100644
index 0000000..9683583
--- /dev/null
+++ b/h5/static/ic_enter_shiwai@2x.png
Binary files differ
diff --git a/h5/static/ic_staff@2x.png b/h5/static/ic_staff@2x.png
new file mode 100644
index 0000000..8006cfd
--- /dev/null
+++ b/h5/static/ic_staff@2x.png
Binary files differ
diff --git a/h5/static/ic_visitor@2x.png b/h5/static/ic_visitor@2x.png
new file mode 100644
index 0000000..fe007c8
--- /dev/null
+++ b/h5/static/ic_visitor@2x.png
Binary files differ
diff --git a/h5/store/index.js b/h5/store/index.js
index 884b032..44fb682 100644
--- a/h5/store/index.js
+++ b/h5/store/index.js
@@ -71,7 +71,7 @@
 			state.sessionKey = val
 			uni.setStorageSync('sessionKey', val)
 		},
-		// 娓呯┖鎵�鏈夌紦瀛�
+		// 娓呯┖鐧诲綍缂撳瓨
 		empty(state) {
 			state.token = ''
 			state.userInfo = {}
diff --git a/h5/utils/service.js b/h5/utils/service.js
index 4131187..fee9e39 100644
--- a/h5/utils/service.js
+++ b/h5/utils/service.js
@@ -36,8 +36,9 @@
 						})
 					}
 					if (data.code === 5112) {
+						uni.clearStorageSync()
 						uni.navigateTo({
-							url: '/pages/staffLogin/login'
+							url: '/pages/login/login'
 						})
 					}
 					resolve(data)
diff --git a/server/db/business.platform.permissions.sql b/server/db/business.platform.permissions.sql
new file mode 100644
index 0000000..f01cac6
--- /dev/null
+++ b/server/db/business.platform.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platform:create', '鏂板缓鏈堝彴淇℃伅琛�', '鏈堝彴淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platform:delete', '鍒犻櫎鏈堝彴淇℃伅琛�', '鏈堝彴淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platform:update', '淇敼鏈堝彴淇℃伅琛�', '鏈堝彴淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platform:query', '鏌ヨ鏈堝彴淇℃伅琛�', '鏈堝彴淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platform:exportExcel', '瀵煎嚭鏈堝彴淇℃伅琛�(Excel)', '鏈堝彴淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_books.permissions.sql b/server/db/business.platform_books.permissions.sql
new file mode 100644
index 0000000..a18bd53
--- /dev/null
+++ b/server/db/business.platform_books.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbooks:create', '鏂板缓鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbooks:delete', '鍒犻櫎鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbooks:update', '淇敼鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbooks:query', '鏌ヨ鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbooks:exportExcel', '瀵煎嚭鏈堝彴鍏ュ洯棰勭害淇℃伅琛�(Excel)', '鏈堝彴鍏ュ洯棰勭害淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_broadcast_log.permissions.sql b/server/db/business.platform_broadcast_log.permissions.sql
new file mode 100644
index 0000000..77cf723
--- /dev/null
+++ b/server/db/business.platform_broadcast_log.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbroadcastlog:create', '鏂板缓鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbroadcastlog:delete', '鍒犻櫎鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbroadcastlog:update', '淇敼鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbroadcastlog:query', '鏌ヨ鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformbroadcastlog:exportExcel', '瀵煎嚭鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�(Excel)', '鏈堝彴_LED鍜屽箍鎾彁閱掍笅鍙戣褰�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_device.permissions.sql b/server/db/business.platform_device.permissions.sql
new file mode 100644
index 0000000..f02d771
--- /dev/null
+++ b/server/db/business.platform_device.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformdevice:create', '鏂板缓鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformdevice:delete', '鍒犻櫎鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformdevice:update', '淇敼鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformdevice:query', '鏌ヨ鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformdevice:exportExcel', '瀵煎嚭鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃(Excel)', '鏈堝彴_鍏宠仈鐩戞帶鐐筁ED鍜屽箍鎾俊鎭〃', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_group.permissions.sql b/server/db/business.platform_group.permissions.sql
new file mode 100644
index 0000000..74ea480
--- /dev/null
+++ b/server/db/business.platform_group.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformgroup:create', '鏂板缓鏈堝彴_鍒嗙粍淇℃伅琛�', '鏈堝彴_鍒嗙粍淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformgroup:delete', '鍒犻櫎鏈堝彴_鍒嗙粍淇℃伅琛�', '鏈堝彴_鍒嗙粍淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformgroup:update', '淇敼鏈堝彴_鍒嗙粍淇℃伅琛�', '鏈堝彴_鍒嗙粍淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformgroup:query', '鏌ヨ鏈堝彴_鍒嗙粍淇℃伅琛�', '鏈堝彴_鍒嗙粍淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformgroup:exportExcel', '瀵煎嚭鏈堝彴_鍒嗙粍淇℃伅琛�(Excel)', '鏈堝彴_鍒嗙粍淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_interface_log.permissions.sql b/server/db/business.platform_interface_log.permissions.sql
new file mode 100644
index 0000000..5d26bac
--- /dev/null
+++ b/server/db/business.platform_interface_log.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platforminterfacelog:create', '鏂板缓浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platforminterfacelog:delete', '鍒犻櫎浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platforminterfacelog:update', '淇敼浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platforminterfacelog:query', '鏌ヨ浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platforminterfacelog:exportExcel', '瀵煎嚭浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍(Excel)', '浣滀笟璋冨害骞冲彴鎺ュ彛浜や簰璁板綍', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_job.permissions.sql b/server/db/business.platform_job.permissions.sql
new file mode 100644
index 0000000..28c4bc1
--- /dev/null
+++ b/server/db/business.platform_job.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformjob:create', '鏂板缓鏈堝彴璋冨害浣滀笟淇℃伅琛�', '鏈堝彴璋冨害浣滀笟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformjob:delete', '鍒犻櫎鏈堝彴璋冨害浣滀笟淇℃伅琛�', '鏈堝彴璋冨害浣滀笟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformjob:update', '淇敼鏈堝彴璋冨害浣滀笟淇℃伅琛�', '鏈堝彴璋冨害浣滀笟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformjob:query', '鏌ヨ鏈堝彴璋冨害浣滀笟淇℃伅琛�', '鏈堝彴璋冨害浣滀笟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformjob:exportExcel', '瀵煎嚭鏈堝彴璋冨害浣滀笟淇℃伅琛�(Excel)', '鏈堝彴璋冨害浣滀笟淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_log.permissions.sql b/server/db/business.platform_log.permissions.sql
new file mode 100644
index 0000000..fff9343
--- /dev/null
+++ b/server/db/business.platform_log.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformlog:create', '鏂板缓鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformlog:delete', '鍒犻櫎鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformlog:update', '淇敼鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformlog:query', '鏌ヨ鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformlog:exportExcel', '瀵煎嚭鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�(Excel)', '鏈堝彴_浣滀笟鎿嶄綔鍘嗗彶琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_queue.permissions.sql b/server/db/business.platform_queue.permissions.sql
new file mode 100644
index 0000000..4f34009
--- /dev/null
+++ b/server/db/business.platform_queue.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformqueue:create', '鏂板缓鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformqueue:delete', '鍒犻櫎鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformqueue:update', '淇敼鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformqueue:query', '鏌ヨ鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformqueue:exportExcel', '瀵煎嚭鏈堝彴_鍙彿鎺掗槦淇℃伅琛�(Excel)', '鏈堝彴_鍙彿鎺掗槦淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_show_param.permissions.sql b/server/db/business.platform_show_param.permissions.sql
new file mode 100644
index 0000000..f782681
--- /dev/null
+++ b/server/db/business.platform_show_param.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformshowparam:create', '鏂板缓鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformshowparam:delete', '鍒犻櫎鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformshowparam:update', '淇敼鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformshowparam:query', '鏌ヨ鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformshowparam:exportExcel', '瀵煎嚭鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�(Excel)', '鏈堝彴_鏄剧ず閰嶇疆淇℃伅琛�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_wms_detail.permissions.sql b/server/db/business.platform_wms_detail.permissions.sql
new file mode 100644
index 0000000..5e7aa24
--- /dev/null
+++ b/server/db/business.platform_wms_detail.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsdetail:create', '鏂板缓鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsdetail:delete', '鍒犻櫎鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsdetail:update', '淇敼鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsdetail:query', '鏌ヨ鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsdetail:exportExcel', '瀵煎嚭鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�(Excel)', '鏈堝彴_WMS浣滀笟閫氱煡鍗曟槑缁�', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/db/business.platform_wms_job.permissions.sql b/server/db/business.platform_wms_job.permissions.sql
new file mode 100644
index 0000000..0c08dc3
--- /dev/null
+++ b/server/db/business.platform_wms_job.permissions.sql
@@ -0,0 +1,6 @@
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsjob:create', '鏂板缓鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsjob:delete', '鍒犻櫎鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsjob:update', '淇敼鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsjob:query', '鏌ヨ鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+INSERT INTO `SYSTEM_PERMISSION`(`CODE`, `NAME`, `MODULE`, `REMARK`, `FIXED`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('business:platformwmsjob:exportExcel', '瀵煎嚭鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁(Excel)', '鏈堝彴_WMS浣滀笟閫氱煡鍗曡鏁版嵁', '', 0, 1, CURRENT_TIMESTAMP, NULL, NULL, 0);
+
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java
index d7ce866..ba5284e 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/business/MeetingController.java
@@ -7,6 +7,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.business.model.Bookings;
 import com.doumee.dao.web.request.BookingsRequest;
 import com.doumee.dao.web.request.MeetingPageRequest;
@@ -45,7 +46,6 @@
     @ApiOperation(value = "褰撴湀浼氳琛�", notes = "褰撴湀浼氳琛�")
     @GetMapping("/monthMeeting")
     @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "String", name = "yearMonth", value = "骞存湀  yyyy-MM", required = true)
     })
     public ApiResponse<List<MonthDataResponse>> monthDay(@RequestParam String yearMonth) {
@@ -66,9 +66,6 @@
 
     @ApiOperation("鎴戠殑浼氳鍒楄〃")
     @PostMapping("/myMeetingPage")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
     public ApiResponse<IPage<MeetingListResponse>> myMeetingPage(@RequestBody PageWrap<MeetingPageRequest> pageWrap) {
         LoginUserInfo user = getLoginUser(null);
         pageWrap.getModel().setUserId(user.getId());
@@ -81,7 +78,6 @@
     @ApiOperation("浼氳璇︽儏")
     @GetMapping("/meetingDetail")
     @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
     })
     public ApiResponse<MeetingDetailResponse> meetingDetail(@RequestParam Integer id) {
@@ -91,7 +87,6 @@
     @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜")
     @GetMapping("/getQrCode")
     @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
     })
     public ApiResponse<String> getQrCode(@RequestParam Integer id) {
@@ -102,9 +97,7 @@
     @ApiOperation("鑾峰彇浼氳寮�闂ㄤ簩缁寸爜-鍥剧墖娴�")
     @GetMapping("/getQrCodeImg")
     @ApiImplicitParams({
-//            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
             @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
     })
     public void getQrCodeImg(@RequestParam Integer id,@RequestParam String token, HttpServletResponse response) throws  Exception {
         LoginUserInfo user = getLoginUser(null);
@@ -117,9 +110,6 @@
 
     @ApiOperation("浼氳棰勭害")
     @PostMapping("/reservationMeeting")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-    })
     public ApiResponse<Integer> reservationMeeting(@RequestBody BookingsRequest bookingsRequest) {
         LoginUserInfo user = getLoginUser(null);
         bookingsRequest.setCreator(user.getId());
@@ -128,14 +118,21 @@
     }
 
     @ApiOperation("鍙栨秷浼氳棰勭害")
-    @GetMapping("/reservationCancel")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
-    })
-    public ApiResponse reservationCancel(@RequestParam Integer id) {
+    @PostMapping("/reservationCancel")
+    public ApiResponse reservationCancel(@RequestBody BusinessOverDTO businessOverDTO) {
         LoginUserInfo user = getLoginUser(null);
-        bookingsService.reservationCancel(id,user.getId());
+        businessOverDTO.setUserId(user.getId());
+        bookingsService.reservationCancel(businessOverDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
+    @ApiOperation("鎻愬墠缁撴潫浼氳")
+    @PostMapping("/reservationOver")
+    public ApiResponse reservationOver(@RequestBody BusinessOverDTO businessOverDTO) {
+        LoginUserInfo user = getLoginUser(null);
+        businessOverDTO.setUserId(user.getId());
+        bookingsService.reservationOver(businessOverDTO);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java
index ce4d517..5555a88 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/api/common/HomeController.java
@@ -60,7 +60,7 @@
         bookquery.eq(Bookings::getIsdeleted, Constants.ZERO);
         bookquery.eq(Bookings::getStatus, Constants.ZERO);
         bookquery.apply("DATE_FORMAT(t.START_TIME,'%Y-%m-%d') = DATE_FORMAT(now(),'%Y-%m-%d') " );
-        Integer   todayBookingsNum= bookingsJoinMapper.selectCount(bookquery);
+        Long  todayBookingsNum= bookingsJoinMapper.selectCount(bookquery);
         json.put("todayBookingsNum",todayBookingsNum);
 
         //浠婃棩浼氳鏃堕暱锛堝皬鏃讹級
@@ -136,7 +136,7 @@
         MPJLambdaWrapper<Rooms> rm1 = new MPJLambdaWrapper<>();
         rm1.eq(Rooms::getIsdeleted, Constants.ZERO);
         rm1.eq(Rooms::getStatus, Constants.ZERO);
-        Integer roomNum=  roomsJoinMapper.selectCount(rm1);
+        Long roomNum=  roomsJoinMapper.selectCount(rm1);
         json.put("roomNum",roomNum);
 
         //鍛樺伐鏁伴噺
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java
index 412059b..db86fe6 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java
@@ -8,6 +8,7 @@
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.QrCodeUtils;
+import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.business.model.Bookings;
 import com.doumee.dao.web.request.BookingsRequest;
 import com.doumee.dao.web.request.MeetingPageRequest;
@@ -130,18 +131,25 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛",bookingsService.reservationMeeting(bookingsRequest));
     }
 
+
     @ApiOperation("鍙栨秷浼氳棰勭害")
-    @GetMapping("/reservationCancel")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
-    })
-    public ApiResponse reservationCancel(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-//        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+    @PostMapping("/reservationCancel")
+    public ApiResponse reservationCancel(@RequestBody BusinessOverDTO businessOverDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         LoginUserInfo user = getLoginUser(token);
-        bookingsService.reservationCancel(id,user.getId());
+        businessOverDTO.setUserId(user.getId())   ;
+        bookingsService.reservationCancel(businessOverDTO);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+    @ApiOperation("鎻愬墠缁撴潫浼氳")
+    @PostMapping("/reservationOver")
+    public ApiResponse reservationOver(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo user = getLoginUser(token);
+        businessOverDTO.setUserId(user.getId());
+        bookingsService.reservationOver(businessOverDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
+
 
 }
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java
index 0c70925..c72c15d 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java
@@ -8,6 +8,7 @@
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.business.model.Bookings;
 import com.doumee.dao.system.vo.UserResponse;
 import com.doumee.dao.web.request.BookingsRequest;
@@ -143,16 +144,23 @@
     }
 
     @ApiOperation("鍙栨秷浼氳棰勭害")
-    @GetMapping("/reservationCancel")
-    @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "id", value = "浼氳涓婚敭", required = true),
-    })
-    public ApiResponse reservationCancel(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+    @PostMapping("/reservationCancel")
+    public ApiResponse reservationCancel(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         LoginUserInfo user = getLoginUser(token);
-        bookingsService.reservationCancel(id,user.getId());
+        businessOverDTO.setUserId(user.getId());
+        bookingsService.reservationCancel(businessOverDTO);
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
 
+    @ApiOperation("鎻愬墠缁撴潫浼氳")
+    @PostMapping("/reservationOver")
+    public ApiResponse reservationOver(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo user = getLoginUser(token);
+        businessOverDTO.setUserId(user.getId());
+        bookingsService.reservationOver(businessOverDTO);
+        return ApiResponse.success("鎿嶄綔鎴愬姛");
+    }
+
 
 }
diff --git a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java
index 2146546..b4b243e 100644
--- a/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java
+++ b/server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/RoomsApi.java
@@ -2,7 +2,6 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.doumee.api.BaseController;
-import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
 import com.doumee.core.model.LoginUserInfo;
diff --git a/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml b/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
index aa4dfc5..b93e438 100644
--- a/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
+++ b/server/meeting/meeting_admin/src/main/resources/bootstrap-dev.yml
@@ -16,6 +16,7 @@
       config:
         server-addr: http://175.27.187.84:8848 #閰嶇疆Nacos鍦板潃
         namespace: dmvisit
+#        namespace: dev_renkang
         username: nacos
         password: nacos
 #        file-extension: yaml
@@ -23,6 +24,7 @@
 #        data-id: com.doumee.meeting.admin
       discovery:
         server-addr: http://175.27.187.84:8848 #閰嶇疆Nacos鍦板潃
+#        namespace: dev_renkang
         namespace: dmvisit
         username: nacos
         password: nacos
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java b/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
deleted file mode 100644
index 065a6cd..0000000
--- a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.doumee.config.Jwt;
-
-import io.swagger.models.auth.In;
-import lombok.Data;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * jwt鐨勭浜岄儴鍒�
- *
- * @author fengshuonan
- * @Date 2019/7/20 20:45
- */
-@Data
-public class JwtPayLoad {
-
-    /**
-     * 鐢ㄦ埛id
-     */
-    private Integer memberId;
-    private long expire;
-
-
-    public JwtPayLoad() {
-    }
-
-    public JwtPayLoad(Integer memberId) {
-        this.memberId = memberId;
-    }
-
-    /**
-     * payload杞寲涓簃ap褰㈠紡
-     *
-     * @author fengshuonan
-     * @Date 2019/7/20 20:50
-     */
-    public Map<String, Object> toMap() {
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("memberId", this.memberId);
-        return map;
-    }
-
-    /**
-     * payload杞寲涓簃ap褰㈠紡
-     *
-     * @author fengshuonan
-     * @Date 2019/7/20 20:50
-     */
-    public static JwtPayLoad toBean(Map<String, Object> map) {
-        if (map == null || map.size() == 0) {
-            return new JwtPayLoad();
-        } else {
-            JwtPayLoad jwtPayLoad = new JwtPayLoad();
-            jwtPayLoad.setMemberId((Integer) map.get("memberId"));
-
-            return jwtPayLoad;
-        }
-    }
-
-
-
-}
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
deleted file mode 100644
index e368861..0000000
--- a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * Copyright 2018-2020 stylefeng & fengshuonan (sn93@qq.com)
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.doumee.config.Jwt;
-
-
-import io.jsonwebtoken.*;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.Date;
-import java.util.Map;
-
-/**
- * <p>鍚庡彴绯荤粺jwt token宸ュ叿绫�</p>
- * <pre>
- *     jwt鐨刢laim閲屼竴鑸寘鍚互涓嬪嚑绉嶆暟鎹�:
- *         1. iss -- token鐨勫彂琛岃��
- *         2. sub -- 璇WT鎵�闈㈠悜鐨勭敤鎴�
- *         3. aud -- 鎺ユ敹璇WT鐨勪竴鏂�
- *         4. exp -- token鐨勫け鏁堟椂闂�
- *         5. nbf -- 鍦ㄦ鏃堕棿娈典箣鍓�,涓嶄細琚鐞�
- *         6. iat -- jwt鍙戝竷鏃堕棿
- *         7. jti -- jwt鍞竴鏍囪瘑,闃叉閲嶅浣跨敤
- * </pre>
- *
- * @author fengshuonan
- * @Date 2017/8/25 10:59
- */
-public class JwtTokenUtil {
-    //Header 鍚嶇О
-    public static final String HEADER_KEY = "token";
-    //鍙栧�煎悕绉�
-    public static final String UserId_Name = "AppUserId";
-    //鍔犲瘑瀵嗛挜
-    private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
-    //杩囨湡鏃堕棿(s) 86400L=1澶� 604800L=7澶�
-    private static final long expire = 86400L;
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
-     */
-    public static String generateToken(JwtPayLoad jwtPayLoad) {
-        Long expiredSeconds = getExpireSeconds();
-        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
-        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
-    }
-
-    /**
-     * 楠岃瘉token鏄惁澶辨晥
-     */
-    public static Boolean isTokenExpired(String token) {
-        try {
-            final Date expiration = getExpirationDateFromToken(token);
-            return expiration.before(new Date());
-        } catch (ExpiredJwtException expiredJwtException) {
-            return true;
-        }
-    }
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
-     */
-    public static String generateTokenOld(JwtPayLoad jwtPayLoad) {
-        Long expiredSeconds = getExpireSeconds();
-        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
-        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
-    }
-
-    /**
-     * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
-     */
-    public static JwtPayLoad getJwtPayLoad(String token) {
-        Claims claimFromToken = getClaimFromToken(token);
-        return JwtPayLoad.toBean(claimFromToken);
-    }
-
-    /**
-     * 瑙f瀽token鏄惁姝g‘(true-姝g‘, false-閿欒)
-     */
-    public static Boolean checkToken(String token) {
-        try {
-            String jwtSecret = getJwtSecret();
-            Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
-            return true;
-        } catch (JwtException e) {
-            return false;
-        }
-    }
-
-    /**
-     * 楠岃瘉token鏄惁澶辨晥
-     */
-    public static Boolean isTokenExpiredOld(String token) {
-        try {
-            final Date expiration = getExpirationDateFromToken(token);
-            return expiration.before(new Date());
-        } catch (ExpiredJwtException expiredJwtException) {
-            return true;
-        }
-    }
-
-    // 浠巘oken涓幏鍙栫敤鎴稩D
-    public static String getUserId(String token){
-        return getClaimFromToken(token).getSubject();
-    }
-
-    /**
-     * 鑾峰彇jwt澶辨晥鏃堕棿
-     */
-    public static Date getExpirationDateFromToken(String token) {
-        return getClaimFromToken(token).getExpiration();
-    }
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岃繃鏈熸椂闂�
-     */
-    public static String generateToken(Integer userId, Date exppiredDate, Map<String, Object> claims) {
-
-        final Date createdDate = new Date();
-        String secret = getJwtSecret();
-
-        if (claims == null) {
-            return Jwts.builder()
-                    .setSubject(userId.toString())
-                    .setIssuedAt(createdDate)
-                    .setExpiration(exppiredDate)
-                    .signWith(SignatureAlgorithm.HS512, secret)
-                    .compact();
-        } else {
-            return Jwts.builder()
-                    .setClaims(claims)
-                    .setSubject(userId.toString())
-                    .setIssuedAt(createdDate)
-                    .setExpiration(exppiredDate)
-                    .signWith(SignatureAlgorithm.HS512, secret)
-                    .compact();
-        }
-    }
-
-    /**
-     * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
-     */
-    public static Claims getClaimFromToken(String token) {
-        if (StringUtils.isBlank(token)) {
-            throw new IllegalArgumentException("token鍙傛暟涓虹┖锛�");
-        }
-        String jwtSecret = getJwtSecret();
-        return Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
-    }
-
-    /**
-     * 鑾峰彇绯荤粺鍦板瘑閽�
-     */
-    private static String getJwtSecret() {
-        return jwtSecret;
-    }
-
-    /**
-     * 鑾峰彇绯荤粺鍦板瘑閽ヨ繃鏈熸椂闂达紙鍗曚綅锛氱锛�
-     */
-    private static Long getExpireSeconds() {
-        return expire;
-    }
-}
\ No newline at end of file
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java b/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
deleted file mode 100644
index 70ad1ce..0000000
--- a/server/meeting/meeting_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package com.doumee.config.Jwt;
-
-import com.doumee.config.annotation.LoginRequired;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import com.doumee.core.utils.Constants;
-import io.jsonwebtoken.JwtException;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-//@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-
-
-    @Autowired
-    private JdbcTemplate dao;
-
-    /**
-     * 娣诲姞鎷︽埅鍣�
-     */
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        //API鎺ュ彛JwtToken鎷︽埅鍣�
-        HandlerInterceptor TokenInterceptor = new HandlerInterceptor() {
-            @Override
-            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-                // 濡傛灉涓嶆槸鏄犲皠鍒版柟娉曠洿鎺ラ�氳繃
-                if (!(handler instanceof HandlerMethod)) {
-                    return true;
-                }
-                HandlerMethod handlerMethod = (HandlerMethod) handler;
-
-                Class<?> beanType = handlerMethod.getBeanType();
-
-//                Method method = handlerMethod.getMethod();
-
-                // 鏈� @LoginRequired 娉ㄨВ锛岄渶瑕佺櫥褰曡璇�
-                if (beanType.isAnnotationPresent(LoginRequired.class)) {
-                    //鑾峰彇token
-                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
-                    if (StringUtils.isNotBlank(token)) {
-                        checkLogin(request,response);
-                    } else {
-                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
-                    }
-                }else if (handlerMethod.hasMethodAnnotation(LoginRequired.class)){
-                    //鑾峰彇token
-                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
-                    if (StringUtils.isNotBlank(token)) {
-                        checkLogin(request,response);
-                    } else {
-                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
-                    }
-                }
-                return true;
-            }
-        };
-        registry.addInterceptor(TokenInterceptor).addPathPatterns("/web/**");
-    }
-
-
-
-    public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
-        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
-        try {
-            //鍒ゆ柇Token鏄惁瓒呮椂
-            boolean expiration = JwtTokenUtil.isTokenExpired(token);
-            if (expiration) {
-                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
-            }
-            //鑾峰彇璐﹀彿ID
-            Integer memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
-            Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,1)  from `system_user` where id  = ?", Integer.class, memberId);
-            if(isDeleted== Constants.ONE){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
-            }
-            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,1)  from `system_user` where id  = ?", Integer.class, memberId);
-            if(isForbidden== Constants.ONE){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
-            }
-            Integer count = dao.queryForObject("select count(1) from `system_user` where id  = ?", Integer.class, memberId);
-            if (count != null && count > 0) {
-                request.setAttribute(JwtTokenUtil.UserId_Name, memberId);
-                return true;
-            }else{
-                throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鐢ㄦ埛淇℃伅鍑洪敊");
-            }
-        } catch (IllegalArgumentException | JwtException e) {
-            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
-        }
-    }
-
-    @Bean
-    public RestTemplate getRestTemplate(){
-        return new RestTemplate();
-    }
-
-
-}
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java
new file mode 100644
index 0000000..ac5dc37
--- /dev/null
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java
@@ -0,0 +1,22 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.DESUtil;
+import com.doumee.dao.admin.response.DevWgResponseParam;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+
+@Data
+@ApiModel("浼氳缁撴潫璇锋眰绫�")
+public class BusinessOverDTO {
+    @ApiModelProperty(value = "涓氬姟涓婚敭")
+    private  Integer id  ;
+    @ApiModelProperty(value = "涓氬姟鎿嶄綔澶囨敞")
+    private  String businessRemark;
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",required = true)
+    private  Integer userId  ;
+
+}
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
index c5f169e..b2e7e2f 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
@@ -24,7 +24,8 @@
 
     @Select(" select a.id , a.START_TIME , a.END_TIME , b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate , a.START_TIME as startTime, a.status ," +
             " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUser ," +
-            " CASE  WHEN a.START_TIME > now() and a.`STATUS` = 0  THEN 1  WHEN a.END_TIME < now()  or a.`STATUS` = 1  THEN 3 ELSE 2  END meetingStatus , b.IMGURL as imgUrl ," +
+            " CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
+            " b.IMGURL as imgUrl ," +
             " a.remark  " +
             " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
             " inner join system_user c on a.CREATOR = c.id  " +
@@ -35,12 +36,12 @@
 
     @Select(" select a.id , a.START_TIME , a.END_TIME , b.id as roomId,  b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y骞�%m鏈�%d鏃�') as meetingDate ," +
             " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUserName ," +
-            " CASE  WHEN a.START_TIME > now() and a.`STATUS` = 0  THEN 1  WHEN a.END_TIME < now()  or a.`STATUS` = 1  THEN 3 ELSE 2  END meetingStatus ," +
+            "  CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN a.END_TIME < now() AND a.`STATUS` = 0  THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
             " a.CONTENT as meetingContent, c.MOBILE as bookingUserMobile , e.`NAME` as bookingUserDepartment , a.CREATOR as bookingUserId  , a.remark  " +
             " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
-            " inner join system_user c on a.CREATOR = c.id " +
-            " inner join system_department_user d on c.id = d.USER_ID " +
-            " INNER JOIN system_department e on d.DEPARTMENT_ID = e.ID   " +
+            " left join system_user c on a.CREATOR = c.id " +
+            " left join system_department_user d on c.id = d.USER_ID " +
+            " left JOIN system_department e on d.DEPARTMENT_ID = e.ID   " +
             "  where a.id = #{id} ")
     MeetingDetailResponse meetingDetail(@Param("id") Integer id);
 
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/BookingTime.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/BookingTime.java
index 771bb2d..6fe3f53 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/BookingTime.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/BookingTime.java
@@ -1,5 +1,6 @@
 package com.doumee.dao.business.model;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
 import io.swagger.annotations.ApiModel;
@@ -58,4 +59,7 @@
     @ExcelColumn(name="鏃堕棿娈电紪鐮侊紙鍏宠仈room_time琛級")
     private Integer timeId;
 
+    @ApiModelProperty(value = "缁撴潫鏃堕棿  HH:mm",hidden = true)
+    @TableField(exist = false)
+    private String endTime;
 }
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java
index 7b1a7b2..87769ee 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java
@@ -81,7 +81,7 @@
     @ApiModelProperty(value = "浼氳鍐呭")
     private String content;
 
-    @ApiModelProperty(value = "鐘舵�� 0鍚敤 1绂佺敤")
+    @ApiModelProperty(value = "鐘舵�� 0宸查绾� 1宸叉挙閿� 2宸茬粨鏉� ")
     private Integer status;
 
     @ApiModelProperty(value = "鍙栨秷浜�")
@@ -93,7 +93,17 @@
     @ApiModelProperty(value = "鍙戦�侀�氱煡锛�0=鏈彂閫� 1=宸插彂閫�")
     private Integer sendNotice;
 
+    @ApiModelProperty(value = "鍙栨秷澶囨敞")
+    private String cancelInfo;
 
+    @ApiModelProperty(value = "鎻愬墠缁撴潫浜�")
+    private Integer doneUserId;
+
+    @ApiModelProperty(value = "鎻愬墠缁撴潫鏃堕棿")
+    private Date doneDate;
+
+    @ApiModelProperty(value = "鍙栨秷澶囨敞")
+    private String doneInfo;
 
     @ApiModelProperty(value = "棰勭害浜�")
     @TableField(exist = false)
@@ -162,4 +172,8 @@
     @ApiModelProperty(value = "weekday")
     @TableField(exist = false)
     private String weekday;
+
+    @ApiModelProperty(value = "浼氳鐘舵��: 1=鏈紑濮嬶紱2=杩涜涓紱3=宸茬粨鏉� ; 4=鍗冲皢寮�濮�; 5=宸叉挙閿�")
+    @TableField(exist = false)
+    private Integer meetingStatus;
 }
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/RoomTime.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/RoomTime.java
index 7fdf791..eb6c94e 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/RoomTime.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/RoomTime.java
@@ -59,8 +59,8 @@
     @ExcelColumn(name="寮�鏀惧紑濮嬫椂闂�")
     private String startTime;
 
-    @ApiModelProperty(value = "寮�鍙戠粨鏉熸椂闂�")
-    @ExcelColumn(name="寮�鍙戠粨鏉熸椂闂�")
+    @ApiModelProperty(value = "寮�鏀剧粨鏉熸椂闂�")
+    @ExcelColumn(name="寮�鏀剧粨鏉熸椂闂�")
     private String endTime;
 
     @ApiModelProperty(value = "鐘舵�� 0鍙�� 1涓嶅彲閫� ", example = "1")
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/request/MeetingPageRequest.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/request/MeetingPageRequest.java
index 4a13c06..75332e5 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/request/MeetingPageRequest.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/request/MeetingPageRequest.java
@@ -31,4 +31,9 @@
 
     @ApiModelProperty(value = "浼氳瀹や富閿�")
     private Integer roomsId;
+
+    @ApiModelProperty(value = "浼氳鐘舵��: 1=鏈紑濮嬶紱2=杩涜涓紱3=宸茬粨鏉� ; 4=鍗冲皢寮�濮�; 5=宸叉挙閿�")
+    private Integer meetingStatus;
+
+
 }
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java
index 40450f7..7ea8a40 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java
@@ -4,6 +4,7 @@
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.admin.response.DevWgResponseParam;
 import com.doumee.dao.business.model.Bookings;
 import com.doumee.dao.business.vo.RoomStatisticsVo;
@@ -168,7 +169,7 @@
      * @param id
      * @param userId
      */
-    void reservationCancel(Integer id,Integer userId);
+    void reservationCancel(BusinessOverDTO businessOverDTO);
 
 
     /**
@@ -207,4 +208,6 @@
     void sendBookingsNotice();
 
     IPage<UserResponse> getUserPage(PageWrap<UserPageRequest> pageWrap);
+
+    void reservationOver(BusinessOverDTO businessOverDTO);
 }
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
index 021421e..7a3ccc1 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -16,6 +16,7 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.MeetConstants;
 import com.doumee.core.wx.SendWxMessage;
+import com.doumee.dao.admin.request.BusinessOverDTO;
 import com.doumee.dao.admin.request.QrOpenDoorDto;
 import com.doumee.dao.admin.response.DevWgResponseParam;
 import com.doumee.dao.business.*;
@@ -188,6 +189,7 @@
         bookquery.selectAs(BookingTime::getTimeId, Bookings::getRoomTimeId);
         bookquery.selectAs(BookingTime::getId, Bookings::getBookingTimeId);
         bookquery.eq(Bookings::getIsdeleted, MeetConstants.ZERO);
+        bookquery.eq(BookingTime::getIsdeleted, MeetConstants.ZERO);
         bookquery.eq(Bookings::getRoomId, bookings.getRoomId());
         bookquery.eq(Bookings::getStatus, MeetConstants.ZERO);
         //bookquery.ge(Bookings::getStartTime, bookings.getStartTime());
@@ -199,6 +201,14 @@
         List<Bookings> bookList = bookingsJoinMapper.selectJoinList(Bookings.class, bookquery);
         for (int i = 0; i < bookings.getBookingTimeList().size(); i++) {
             BookingTime s = bookings.getBookingTimeList().get(i);
+            RoomTime roomTime = roomTimeJoinMapper.selectById(s.getTimeId());
+            if(Objects.isNull(roomTime)){
+                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀛樺湪鏈煡璇㈠埌鐨勯厤缃棩鏈燂紝璇峰埛鏂伴噸璇�");
+            }
+            String endRoomTime = gsDate + " " + roomTime.getEndTime()+":00";
+            if(DateUtil.StringToDate(endRoomTime, "yyyy-MM-dd HH:mm:ss").getTime()<=System.currentTimeMillis()){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),endRoomTime + "宸茶秴杩囧綋鍓嶆椂闂达紝鏃犳硶杩涜棰勭害");
+            }
             if (!Objects.isNull(bookList) && bookList.size() > MeetConstants.ZERO) {
                 List<Bookings> detailDataDtoStream =
                         bookList.stream().filter(a -> MeetConstants.equalsInteger(s.getTimeId(), a.getRoomTimeId())
@@ -213,7 +223,6 @@
                                         .filter(a -> MeetConstants.equalsInteger(a.getRoomTimeId(), s.getTimeId()))
                                         .collect(Collectors.toList());
                         if (chriList.size() > 0) {
-                            RoomTime roomTime = roomTimeJoinMapper.selectById(s.getTimeId());
                             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヤ細璁細" + roomTime.getStartTime() + "-" + roomTime.getEndTime() + "鏃堕棿娈靛唴宸茶浣跨敤");
                         }
                     } else {
@@ -223,7 +232,6 @@
                                         .filter(a -> MeetConstants.equalsInteger(a.getRoomTimeId(), s.getTimeId()))
                                         .collect(Collectors.toList());
                         if (chriList.size() > 0) {
-                            RoomTime roomTime = roomTimeJoinMapper.selectById(s.getTimeId());
                             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇ヤ細璁細" + roomTime.getStartTime() + "-" + roomTime.getEndTime() + "鏃堕棿娈靛唴宸茶浣跨敤");
                         }
                     }
@@ -245,14 +253,13 @@
 
 
         bookings.getBookingTimeList().stream().forEach(s -> {
+            s.setId(null);
             s.setCreator(user.getId());
             s.setCreateDate(new Date());
             s.setIsdeleted(MeetConstants.ZERO);
             s.setBookingId(bookings.getId());
             bookingTimeJoinMapper.insert(s);
         });
-
-
     }
 
     public void updateManager(Bookings bookings, LoginUserInfo user) {
@@ -265,16 +272,18 @@
             userRel.setIsdeleted(MeetConstants.ONE);
             userRelJoinMapper.update(userRel, updateWrapper);
         }
-        bookings.getSysList().stream().forEach(s -> {
-            s.setIsdeleted(MeetConstants.ZERO);
-            s.setCreateDate(new Date());
-            s.setCreator(user.getId());
-            s.setUserId(s.getUserId());
-            s.setObjId(bookings.getId());
-            s.setObjType(MeetConstants.ONE);
-            userRelJoinMapper.insert(s);
-        });
-
+        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(bookings.getSysList())){
+            bookings.getSysList().stream().forEach(s -> {
+                s.setId(null);
+                s.setIsdeleted(MeetConstants.ZERO);
+                s.setCreateDate(new Date());
+                s.setCreator(user.getId());
+                s.setUserId(s.getUserId());
+                s.setObjId(bookings.getId());
+                s.setObjType(MeetConstants.ONE);
+                userRelJoinMapper.insert(s);
+            });
+        }
     }
 
     public void updateProjectRel(Bookings rooms, LoginUserInfo user) {
@@ -288,7 +297,7 @@
             projectRelJoinMapper.update(projectRel, updateWrapper);
 
             rooms.getProjectList().stream().forEach(s -> {
-
+                s.setId(null);
                 s.setIsdeleted(MeetConstants.ZERO);
                 s.setCreateDate(new Date());
                 s.setCreator(user.getId());
@@ -455,7 +464,7 @@
         queryWrapper.selectAs(Rooms::getName, Bookings::getRoomName);
         queryWrapper.selectAs(SystemUser::getRealname, Bookings::getRealName);
         queryWrapper.selectAs(Company::getName, Bookings::getDepartmentName);
-
+        queryWrapper.select(" CASE WHEN t.START_TIME > now() AND t.`STATUS` = 0 THEN 1  WHEN ( (t.END_TIME < now()  AND t.`STATUS` = 0 ) or t.`STATUS` = 2 ) THEN 3 WHEN t.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ");
         queryWrapper.leftJoin(Rooms.class, Rooms::getId, Bookings::getRoomId);
         queryWrapper.leftJoin(SystemUser.class, SystemUser::getId, Bookings::getCreator);
         queryWrapper.leftJoin(Company.class,Company::getId,SystemUser::getCompanyId);
@@ -466,7 +475,29 @@
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()), Bookings::getName, pageWrap.getModel().getName());
         queryWrapper.eq(pageWrap.getModel().getStatus() != null, Bookings::getStatus, pageWrap.getModel().getStatus());
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getRealName()), SystemUser::getRealname, pageWrap.getModel().getRealName());
-        queryWrapper.eq(pageWrap.getModel().getDepartmentId() != null, SystemUser::getId, pageWrap.getModel().getDepartmentId());
+        queryWrapper.eq(pageWrap.getModel().getDepartmentId() != null, Company::getId, pageWrap.getModel().getDepartmentId());
+
+
+        queryWrapper.apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.ONE),
+                " ( now() < t.START_TIME and t.status = 0 ) "
+        )
+        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.TWO),
+                " ( now() >= t.START_TIME and t.END_TIME >= now() and t.status = 0 ) "
+        )
+        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.THREE),
+                " ( ( now() > t.END_TIME  and  t.`STATUS` = 0  ) or   t.`STATUS` = 2  )  "
+        )
+        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FOUR),
+                " now() < t.START_TIME  AND SUBDATE( t.START_TIME, INTERVAL 120 MINUTE ) < NOW() "
+        )
+        .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                        &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FIVE),
+                " t.STATUS = 1  "
+        );
 
         if (pageWrap.getModel().getStartTime() != null) {
             queryWrapper.ge(Bookings::getStartTime, pageWrap.getModel().getStartTime());
@@ -483,6 +514,15 @@
         SimpleDateFormat format1 = new SimpleDateFormat("HH:mm");
         IPage<Bookings> result = bookingsJoinMapper.selectJoinPage(page, Bookings.class, queryWrapper);
         result.getRecords().stream().forEach(s -> {
+
+            if(s.getMeetingStatus().equals(Constants.ZERO)){
+                if(s.getMeetingStatus()==Constants.ONE){
+                    //寮�濮嬪墠120鍒嗛挓 澶т簬褰撳墠鏃堕棿 鍒欐樉绀哄嵆灏嗗紑濮�
+                    if(DateUtil.afterMinutesDate(s.getStartTime(),-120).getTime()>System.currentTimeMillis()){
+                        s.setMeetingStatus(4);
+                    }
+                }
+            }
             MPJLambdaWrapper<Multifile> bookquery = new MPJLambdaWrapper<>();
             bookquery.eq(Multifile::getIsdeleted, MeetConstants.ZERO);
             bookquery.eq(Multifile::getObjId, s.getId());
@@ -758,38 +798,59 @@
      */
     @Override
     public IPage<MeetingListResponse> getMyMeetingPage(PageWrap<MeetingPageRequest> pageWrap) {
-        IPage<MeetingListResponse> page = bookingsMapper.myMeetingPage(pageWrap.toPage(), new QueryWrapper<MeetingListResponse>()
+
+        QueryWrapper queryWrapper = new QueryWrapper<MeetingListResponse>()
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getRoomsName()),
                         j -> j.like("a.NAME",pageWrap.getModel().getRoomsName()).or()
                                 .like(" b.NAME", pageWrap.getModel().getRoomsName()))
-                        .exists(pageWrap.getModel().getQueryType().equals(MeetConstants.ONE) && !Objects.isNull(pageWrap.getModel().getUserId()),
-                                " select 1 from meeting_user_rel u where a.id = u.OBJ_ID and  u.USER_ID = '" + pageWrap.getModel().getUserId() + "' and u.ISDELETED = 0 and OBJ_TYPE = 1  ")
-                        .eq(pageWrap.getModel().getQueryType().equals(MeetConstants.TWO) && !Objects.isNull(pageWrap.getModel().getUserId()), "a.CREATOR", pageWrap.getModel().getUserId())
-                        .like(StringUtils.isNotBlank(pageWrap.getModel().getQueryDate()), "a.START_TIME", pageWrap.getModel().getQueryDate())
-                        .eq(!Objects.isNull(pageWrap.getModel().getRoomsId()), "b.id", pageWrap.getModel().getRoomsId())
-                        .apply(!Objects.isNull(pageWrap.getModel().getStatus()) && pageWrap.getModel().getStatus().equals(MeetConstants.ONE), " now() < a.END_TIME and a.STATUS = 0   ")
-                        .and(!Objects.isNull(pageWrap.getModel().getStatus()) && pageWrap.getModel().getStatus().equals(MeetConstants.TWO),
-                                j -> j.apply("now() >= a.END_TIME ").or()
-                                        .eq(" a.STATUS", MeetConstants.ONE))
-                        .eq("b.ISDELETED",MeetConstants.ZERO)
-                        .eq("b.STATUS",MeetConstants.ZERO)
-                        .eq("a.ISDELETED",MeetConstants.ZERO)
-                        .orderByDesc(!Objects.isNull(pageWrap.getModel().getStatus())&&pageWrap.getModel().getStatus().equals(MeetConstants.TWO),"a.START_TIME")
-                        .orderByAsc(Objects.isNull(pageWrap.getModel().getStatus())||pageWrap.getModel().getStatus().equals(MeetConstants.ONE),"a.START_TIME")
-        );
+                .exists(pageWrap.getModel().getQueryType().equals(MeetConstants.ONE) && !Objects.isNull(pageWrap.getModel().getUserId()),
+                        " select 1 from meeting_user_rel u where a.id = u.OBJ_ID and  u.USER_ID = '" + pageWrap.getModel().getUserId() + "' and u.ISDELETED = 0 and OBJ_TYPE = 1  ")
+                .eq(pageWrap.getModel().getQueryType().equals(MeetConstants.TWO) && !Objects.isNull(pageWrap.getModel().getUserId()), "a.CREATOR", pageWrap.getModel().getUserId())
+                .like(StringUtils.isNotBlank(pageWrap.getModel().getQueryDate()), "a.START_TIME", pageWrap.getModel().getQueryDate())
+                .eq(!Objects.isNull(pageWrap.getModel().getRoomsId()), "b.id", pageWrap.getModel().getRoomsId())
+                .apply(!Objects.isNull(pageWrap.getModel().getStatus()) && pageWrap.getModel().getStatus().equals(MeetConstants.ONE), " now() < a.END_TIME and a.STATUS = 0   ")
+                .and(!Objects.isNull(pageWrap.getModel().getStatus()) && pageWrap.getModel().getStatus().equals(MeetConstants.TWO),
+                        j -> j.apply("now() >= a.END_TIME ").or()
+                                .eq(" a.STATUS", MeetConstants.ONE))
+                .eq("b.ISDELETED",MeetConstants.ZERO)
+                .eq("b.STATUS",MeetConstants.ZERO)
+                .eq("a.ISDELETED",MeetConstants.ZERO)
+                .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                                &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.ONE),
+                        " ( now() < a.START_TIME and a.status = 0 ) "
+                )
+                .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                                &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.TWO),
+                        " ( now() >= a.START_TIME and a.END_TIME >= now() and a.status = 0 ) "
+                )
+                .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                                &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.THREE),
+                        " ( ( now() > a.END_TIME  and  a.`STATUS` = 0  ) or   a.`STATUS` = 2  )  "
+                )
+                .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                                &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FOUR),
+                        " now() < a.START_TIME  AND SUBDATE( a.START_TIME, INTERVAL 120 MINUTE ) < NOW() "
+                )
+                .apply(Objects.nonNull(pageWrap.getModel().getMeetingStatus())
+                                &&Constants.equalsInteger(pageWrap.getModel().getMeetingStatus(),Constants.FIVE),
+                        " a.STATUS = 1  "
+                )
+//                        .orderByDesc(!Objects.isNull(pageWrap.getModel().getStatus())&&pageWrap.getModel().getStatus().equals(MeetConstants.TWO),"a.START_TIME")
+//                        .orderByAsc(Objects.isNull(pageWrap.getModel().getStatus())||pageWrap.getModel().getStatus().equals(MeetConstants.ONE),"a.START_TIME")
+                .orderByDesc(Constants.equalsInteger(pageWrap.getModel().getQueryType(),MeetConstants.TWO),"a.CREATE_DATE")
+                .orderByAsc(Constants.equalsInteger(pageWrap.getModel().getQueryType(),MeetConstants.ONE),"a.START_TIME");
+
+        IPage<MeetingListResponse> page = bookingsMapper.myMeetingPage(pageWrap.toPage(), queryWrapper);
         String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
         page.getRecords().forEach(i -> {
             i.setPrefixUrl(path);
             if(i.getMeetingStatus().equals(Constants.ZERO)){
-                if(i.getStatus()==Constants.ONE){
-                    i.setMeetingStatus(5);
-                }else{
-                    //寮�濮嬪墠5鍒嗛挓 澶т簬褰撳墠鏃堕棿 鍒欐樉绀哄嵆灏嗗紑濮�
-                    if(DateUtil.afterMinutesDate(i.getStartTime(),-5).getTime()>System.currentTimeMillis()){
+                if(i.getMeetingStatus()==Constants.ONE){
+                    //寮�濮嬪墠120鍒嗛挓 澶т簬褰撳墠鏃堕棿 鍒欐樉绀哄嵆灏嗗紑濮�
+                    if(DateUtil.afterMinutesDate(i.getStartTime(),-120).getTime()>System.currentTimeMillis()){
                         i.setMeetingStatus(4);
                     }
                 }
-
             }
 
         });
@@ -928,18 +989,15 @@
 
     /**
      * 浼氳棰勭害璁板綍鍙栨秷
-     *
-     * @param id
-     * @param userId
      */
     @Override
     @Transactional(rollbackFor = {Exception.class,BusinessException.class})
-    public void reservationCancel(Integer id, Integer userId) {
-        Bookings bookings = bookingsMapper.selectById(id);
+    public void reservationCancel(BusinessOverDTO businessOverDTO) {
+        Bookings bookings = bookingsMapper.selectById(businessOverDTO.getId());
         if (Objects.isNull(bookings)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏈煡璇㈠埌棰勭害璁板綍");
         }
-        if (!bookings.getCreator().equals(userId)) {
+        if (!bookings.getCreator().equals(businessOverDTO.getUserId())) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "闈炰綘鐨勯绾﹁褰�,鏃犳硶杩涜鍙栨秷");
         }
         if (System.currentTimeMillis() > bookings.getStartTime().getTime()) {
@@ -949,10 +1007,11 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏈鎿嶄綔澶辫触,棰勭害鐘舵�佸凡娴佽浆");
         }
         bookings.setCancelTime(new Date());
-        bookings.setCancelUser(userId);
+        bookings.setCancelUser(businessOverDTO.getUserId());
+        bookings.setCancelInfo(businessOverDTO.getBusinessRemark());
         bookings.setStatus(MeetConstants.ONE);
         bookings.setEditDate(new Date());
-        bookings.setEditor(userId);
+        bookings.setEditor(businessOverDTO.getUserId());
         bookingsMapper.updateById(bookings);
         //鍙栨秷浼氳 鍙戦�佸彇娑堥�氱煡
         this.sendNotice(bookings, 3);
@@ -960,6 +1019,63 @@
         sendWxMessage.bookingsCancel(systemUserMapper.selectById(bookings.getCreator()), bookings, roomsMapper.selectById(bookings.getRoomId()));
     }
 
+
+    @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    public void reservationOver(BusinessOverDTO businessOverDTO) {
+        if(Objects.isNull(businessOverDTO)
+            || Objects.isNull(businessOverDTO.getUserId())
+            || Objects.isNull(businessOverDTO.getId())
+        ){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Bookings bookings = bookingsMapper.selectById(businessOverDTO.getId());
+        if (Objects.isNull(bookings)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鏈煡璇㈠埌棰勭害璁板綍");
+        }
+        Long userRelList = userRelMapper.selectCount(new QueryWrapper<UserRel>().lambda()
+                .eq(UserRel::getIsdeleted,Constants.ZERO)
+                .eq(UserRel::getObjId,bookings.getRoomId())
+                .eq(UserRel::getObjType,Constants.ONE)
+                .eq(UserRel::getUserId,businessOverDTO.getUserId()));
+
+        if (!bookings.getCreator().equals(businessOverDTO.getUserId()) && userRelList <= 0) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "闈炰綘鐨勯绾﹁褰�,鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if (System.currentTimeMillis() < bookings.getStartTime().getTime()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳鏈紑濮�,鏃犳硶杩涜缁撴潫锛屽闇�璇ユ搷浣滆浣跨敤鍙栨秷鍔熻兘");
+        }
+        if (System.currentTimeMillis() > bookings.getEndTime().getTime()) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浼氳宸茬粨鏉燂紝鏃犳硶杩涜璇ユ搷浣�");
+        }
+        if(!bookings.getStatus().equals(MeetConstants.ZERO)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏈鎿嶄綔澶辫触,浼氳鐘舵�佸凡娴佽浆");
+        }
+        bookings.setDoneDate(new Date());
+        bookings.setDoneUserId(businessOverDTO.getUserId());
+        bookings.setStatus(MeetConstants.TWO);
+        bookings.setEditDate(new Date());
+        bookings.setEditor(businessOverDTO.getUserId());
+        bookingsMapper.updateById(bookings);
+
+        //鏌ヨ鎵�鏈夌殑棰勭害鏃堕棿
+        List<BookingTime> bookingTimeList = bookingTimeJoinMapper.selectJoinList(BookingTime.class,
+                new MPJLambdaWrapper<BookingTime>()
+                        .selectAll(BookingTime.class)
+                        .selectAs(RoomTime::getEndTime,BookingTime::getEndTime)
+                        .leftJoin(RoomTime.class,RoomTime::getId,BookingTime::getTimeId)
+                        .eq(BookingTime::getBookingId,bookings.getId()));
+        //鑾峰彇褰撳ぉ  鍙湁褰撳ぉ鏃ユ湡鍐呭彲浠ュ鐞�
+        String today = DateUtil.dateToString(new Date(),"yyyy-mm-dd");
+        //寰幆鏍囪鏁版嵁涓哄凡鍒犻櫎 涓嶅啀鍗犵敤
+        for (BookingTime bookingTime:bookingTimeList) {
+            if(DateUtil.getDateFromString(today + " " + bookingTime.getEndTime() +":00").getTime()>System.currentTimeMillis()){
+                bookingTime.setIsdeleted(Constants.ZERO);
+                bookingTimeJoinMapper.updateById(bookingTime);
+            }
+        }
+
+    }
 
     /**
      * 瀹氭椂鍙戦�佷細璁� 鍗冲皢寮�濮嬮�氱煡
@@ -1020,7 +1136,7 @@
         Notices notices = new Notices(noticeObjectType,bookings.getId(),noticeObjectType.getInfo(),bookings.getCreator(), Constants.ZERO);
         noticeList.add(notices);
         if(noticeList.size()>0){
-            noticesMapper.insertBatchSomeColumn(noticeList);
+            noticesMapper.insert(noticeList);
         }
     }
 
@@ -1131,7 +1247,7 @@
     public IPage<UserResponse> getUserPage(PageWrap<UserPageRequest> pageWrap) {
         IPage<UserResponse> page = systemUserMapper.getUserPage(pageWrap.toPage(),new QueryWrapper<UserResponse>()
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getKeyword()), i -> i.like("c.realName", pageWrap.getModel().getKeyword())
-                        .or().like("e.name", pageWrap.getModel().getKeyword())
+                        .or().like("d.COMPANY_NAME_PATH", pageWrap.getModel().getKeyword())
                 )
                 .eq("c.DELETED",0)
                 .eq("c.status",0)
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java
index 16806fc..dd087e4 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java
@@ -3,6 +3,7 @@
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.core.wx.MeetConstants;
 import com.doumee.dao.business.ProjectsMapper;
@@ -39,6 +40,7 @@
     public Integer create(Projects projects) {
 
         Projects insert = new Projects();
+        insert.setIsdeleted(Constants.ZERO);
         insert.setCreator(projects.getCreator());
         insert.setEditor(projects.getEditor());
         insert.setName(projects.getName());
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java
index f4b43de..7a608f2 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java
@@ -127,6 +127,7 @@
         bookquery.selectAs(BookingTime::getTimeId, Bookings::getRoomTimeId);
         bookquery.selectAs(BookingTime::getId, Bookings::getBookingTimeId);
         bookquery.eq(Bookings::getIsdeleted, Constants.ZERO);
+        bookquery.eq(BookingTime::getIsdeleted, Constants.ZERO);
         bookquery.eq(Bookings::getRoomId, roomTime.getRoomId());
         bookquery.eq(Bookings::getStatus,Constants.ZERO);
         bookquery.apply("DATE_FORMAT(t.START_TIME,'%Y-%m-%d') = DATE_FORMAT('" + DateUtil.dateToString(roomTime.getYudingDate(), "yyyy-MM-dd") + "','%Y-%m-%d') ");
diff --git a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
index 73b0de7..15152c8 100644
--- a/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
+++ b/server/system_gateway/src/main/java/com/doumee/api/gateway/JwtAuthController.java
@@ -14,7 +14,6 @@
 import com.doumee.service.system.SystemLoginService;
 import com.doumee.service.system.SystemUserService;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.server.reactive.ServerHttpRequest;
diff --git a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtProperties.java b/server/system_service/src/main/java/com/doumee/config/jwt/JwtProperties.java
similarity index 100%
rename from server/system_gateway/src/main/java/com/doumee/config/jwt/JwtProperties.java
rename to server/system_service/src/main/java/com/doumee/config/jwt/JwtProperties.java
diff --git a/server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
similarity index 100%
rename from server/system_gateway/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
rename to server/system_service/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
diff --git a/server/system_service/src/main/java/com/doumee/config/mybatis/EasySqlInjector.java b/server/system_service/src/main/java/com/doumee/config/mybatis/EasySqlInjector.java
deleted file mode 100644
index baabea5..0000000
--- a/server/system_service/src/main/java/com/doumee/config/mybatis/EasySqlInjector.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.doumee.config.mybatis;
-
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.core.injector.AbstractMethod;
-import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
-import com.github.yulichang.injector.MPJSqlInjector;
-
-import java.util.List;
-
-public class EasySqlInjector extends MPJSqlInjector {
-    @Override
-    public List<AbstractMethod> getMethodList(Class<?> mapperClass ) {
-        // 娉ㄦ剰锛氭SQL娉ㄥ叆鍣ㄧ户鎵夸簡DefaultSqlInjector(榛樿娉ㄥ叆鍣�)锛岃皟鐢ㄤ簡DefaultSqlInjector鐨刧etMethodList鏂规硶锛屼繚鐣欎簡mybatis-plus鐨勮嚜甯︽柟娉�
-        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
-        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
-        return methodList;
-    }
-
-}
\ No newline at end of file
diff --git a/server/system_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java b/server/system_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java
index e91bb1e..ace8365 100644
--- a/server/system_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java
+++ b/server/system_service/src/main/java/com/doumee/config/mybatis/MyBatisPlusConfig.java
@@ -20,9 +20,5 @@
         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
         return interceptor;
     }
-    @Bean
-    public EasySqlInjector sqlInjector() {
-        return new EasySqlInjector();
-    }
 
 }
diff --git a/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java b/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
index b686a17..4796b3f 100644
--- a/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
+++ b/server/system_service/src/main/java/com/doumee/core/constants/ResponseStatus.java
@@ -27,6 +27,7 @@
     NOT_ALLOWED(5110, "涓嶅厑璁哥殑鎿嶄綔"),
     TOKEN_EXCEED_TIME(5111, "TOKEN杩囨湡"),
     NO_LOGIN(5112, "鏈櫥褰�"),
+    NO_ALLOW_LOGIN(5113, "璇ョ被鐢ㄦ埛涓嶅厑璁哥櫥褰�"),
     ;
 
     private int code;
diff --git a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index aeb2b8b..6d84788 100644
--- a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -4,6 +4,7 @@
 import com.doumee.dao.system.model.SystemPermission;
 import com.doumee.dao.system.model.SystemRole;
 import com.doumee.dao.system.model.SystemUser;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.beans.BeanUtils;
 
@@ -38,6 +39,8 @@
     private String sessionId;
 
     private Date loginDate;
+    @ApiModelProperty(value = "璐︽埛鏉ユ簮锛�0=鍚庡彴娣诲姞 锛� 2=鍙告満娉ㄥ唽")
+    private Integer source;
 
     private List<String> roles;
 
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 6ba808c..42bbf6a 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -94,6 +94,7 @@
     public static final String ERP ="ERP" ;
     public static final Integer THREE =3 ;
     public static final Integer FOUR =4 ;
+    public static final Integer FIVE =5 ;
     public static final String ORG_USER_ORIGIN = "ORG_USER_ORIGIN";
     public static final String VIRTUAL_CARD_INDEX = "02098469790";
     public static final String RETRY_CONNECT_NUM ="RETRY_CONNECT_NUM" ;
@@ -404,7 +405,7 @@
 
 
 public interface  memberType{
-    int lw_visitor = 0;//鍔冲姟璁垮
+    int driver = 0;//鍙告満浜哄憳
     int visitor = 1;//鏅�氳瀹�
     int internal = 2;//鍐呴儴浜哄憳
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/business/dao/CompanyMapper.java b/server/system_service/src/main/java/com/doumee/dao/business/dao/CompanyMapper.java
index 9765f4d..bbf64fd 100644
--- a/server/system_service/src/main/java/com/doumee/dao/business/dao/CompanyMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/business/dao/CompanyMapper.java
@@ -11,5 +11,4 @@
  */
 public interface CompanyMapper extends BaseMapper<Company> {
 
-    void insertBatchSomeColumn(List<Company> addList);
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java b/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
index 6b5e635..1b1d62b 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/MultifileMapper.java
@@ -11,5 +11,4 @@
  */
 public interface MultifileMapper extends BaseMapper<Multifile> {
 
-    void insertBatchSomeColumn(List<Multifile> fileList);
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java b/server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java
index f0ba404..d4cec01 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/SystemUserMapper.java
@@ -26,7 +26,6 @@
     List<SystemUserListVO> selectManageList(@Param("dto") QuerySystemUserDTO dto, @Param("orderByClause") String orderByClause);
 
 
-    void insertBatchSomeColumn(List<SystemUser> userList);
 
 
 
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginAuthDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginAuthDTO.java
new file mode 100644
index 0000000..e328a6c
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginAuthDTO.java
@@ -0,0 +1,24 @@
+package com.doumee.dao.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("寰俊鐧诲綍鎺堟潈鍙傛暟")
+public class LoginAuthDTO implements Serializable {
+
+    @ApiModelProperty(value = "缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "绫诲瀷")
+    private Integer soucre;
+
+}
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginByOpenidDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginByOpenidDTO.java
new file mode 100644
index 0000000..378715b
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginByOpenidDTO.java
@@ -0,0 +1,20 @@
+package com.doumee.dao.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author Eva.Caesar Liu
+ * @date 2023/05/04 18:21
+ */
+@Data
+@ApiModel("鍏紬鍙风櫥褰曞弬鏁�")
+public class LoginByOpenidDTO implements Serializable {
+
+    @ApiModelProperty(value = "userId" , hidden = true)
+    private Integer userId;
+}
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java
index d08a08c..7e7ae5b 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java
@@ -1,8 +1,10 @@
 package com.doumee.dao.system.dto;
 
 import com.doumee.core.annotation.excel.ExcelColumn;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -22,9 +24,13 @@
     private Integer queryType;
 
     @ApiModelProperty(value = "寮�濮嬫棩鏈�")
+    @JsonFormat(pattern="yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date startDate;
 
     @ApiModelProperty(value = "缁撴潫鏃ユ湡")
+    @JsonFormat(pattern="yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
     @ApiModelProperty(value = "0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
index 8db1308..1b6daf9 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/QuerySystemUserDTO.java
@@ -42,4 +42,11 @@
     @ApiModelProperty(value = "鐢ㄦ埛鐘舵��")
     private Integer status;
 
+    @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=鍙告満 锛� 2=鍐呴儴浜哄憳" ,hidden = true)
+    private Integer memberType;
+
+    @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=鍔冲姟锛�1=鍐呴儴" ,hidden = true)
+    private Integer companyType;
+
+
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/join/NoticesJoinMapper.java b/server/system_service/src/main/java/com/doumee/dao/system/join/NoticesJoinMapper.java
index 3588b69..dd4650f 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/join/NoticesJoinMapper.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/join/NoticesJoinMapper.java
@@ -11,5 +11,4 @@
  */
 public interface NoticesJoinMapper extends MPJJoinMapper<Notices> {
 
-    void insertBatchSomeColumn(List<Notices> noticeList);
 }
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
index 55ddcb5..1feeb42 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java
@@ -87,7 +87,6 @@
     @TableField(exist = false)
     private String typeDetail;
 
-
     @ApiModelProperty(value = "瀛樺偍 娑堟伅灞曠ずJSON" ,notes = "瀛樺偍 娑堟伅灞曠ずJSON ")
     @ExcelColumn(name="鍏宠仈鍙傛暟1")
     private String param1;
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
index 09c5017..196e1e6 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -104,7 +104,9 @@
     private Integer status;
     @ApiModelProperty(value = "浼佷笟缂栫爜锛堝叧鑱攃ompany锛�")
     private Integer companyId;
-    @ApiModelProperty(value = "0 鍚敤 1 绂佺敤")
+    @ApiModelProperty(value = "璐︽埛鏉ユ簮锛�0=鍚庡彴娣诲姞 锛� 2=鍙告満娉ㄥ唽")
+    private Integer source;
+    @ApiModelProperty(value = "鍏徃鍚嶇О")
     @TableField(exist = false)
     private String companyName;
     @ApiModelProperty(value = "鏁版嵁鏉冮檺鍐呴儴闂ㄧ紪鐮侀泦鍚�")
diff --git a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
index a413735..15316fd 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -1,6 +1,7 @@
 package com.doumee.service.system;
 
 import com.doumee.core.model.LoginUserInfo;
+import com.doumee.dao.system.dto.LoginByOpenidDTO;
 import com.doumee.dao.system.dto.LoginDTO;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 
@@ -19,5 +20,14 @@
      * @date 2023/03/21 14:49
      */
     String loginByPassword (LoginDTO dto, HttpServletRequest request);
+
     LoginUserInfo loginByPasswordNew (LoginDTO dto, ServerHttpRequest request);
+
+    /**
+     * 鏍规嵁 openId鐧诲綍
+     * @param userId
+     * @param request
+     * @return
+     */
+    String loginByUserId(Integer userId);
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
index 23d63ba..c7c5d13 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java
@@ -181,6 +181,11 @@
         queryWrapper.eq(StringUtils.isNotBlank(noticesDTO.getTitle()),Notices::getTitle,noticesDTO.getTitle());
         queryWrapper.orderByDesc(Notices::getCreateDate);
         PageData<Notices> pageData = PageData.from(noticesMapper.selectJoinPage(page,Notices.class, queryWrapper));
+        if(noticesDTO.getQueryType().equals(Constants.ZERO)){
+            for (Notices notices:pageData.getRecords()) {
+                notices.setInfo("寰呮垜澶勭悊");
+            }
+        }
         return pageData;
     }
 
@@ -201,7 +206,7 @@
         if(Constants.equalsInteger(notices.getSendacopy(),Constants.ONE)){
             if(Constants.equalsInteger(Constants.ZERO,notices.getReaded())){
                 noticesMapper.update(null,new UpdateWrapper<Notices>().lambda()
-                        .set(Notices::getReaded,Constants.ONE).eq(Notices::getId,notices));
+                        .set(Notices::getReaded,Constants.ONE).eq(Notices::getId,noticesId));
             }
         }else{
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴妱閫佹暟鎹�,鏃犳硶杩涜鏍囪");
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index e54e578..452cc27 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -1,15 +1,19 @@
 package com.doumee.service.system.impl;
 
+import com.doumee.config.jwt.JwtTokenUtil;
 import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.dao.CompanyMapper;
 import com.doumee.dao.business.model.Company;
+import com.doumee.dao.system.dto.LoginByOpenidDTO;
 import com.doumee.dao.system.dto.LoginDTO;
 import com.doumee.dao.system.model.*;
 import com.doumee.service.common.CaptchaService;
 import com.doumee.service.system.*;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
@@ -22,6 +26,7 @@
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
@@ -58,6 +63,11 @@
 
     @Autowired
     private CompanyMapper companyMapper;
+
+    @Resource
+    private JwtTokenUtil jwtTokenUtil;
+
+
 
     @Override
     public String loginByPassword(LoginDTO dto, HttpServletRequest request) {
@@ -127,7 +137,6 @@
                 throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(),"瀵逛笉璧凤紝楠岃瘉鐮佷笉姝g‘锛�");
             }
         }
-
         // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
         SystemUser queryDto = new SystemUser();
         queryDto.setUsername(dto.getUsername());
@@ -135,6 +144,9 @@
         SystemUser user = systemUserService.findOne(queryDto);
         if (user == null) {
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        if(!Constants.equalsInteger(user.getSource(),Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN);
         }
         String pwd = Utils.Secure.encryptPassword(new String(dto.getPassword()), user.getSalt());
         // 姣旇緝瀵嗙爜
@@ -158,4 +170,41 @@
         return  userInfo;
     }
 
+
+    /**
+     * 鍐呴儴浜哄憳 涓� 鍙告満 鏍规嵁code鏌ヨopenId鍚庤繘琛岀櫥褰曟帴鍙�
+     * @return
+     */
+    @Override
+    public String loginByUserId(Integer userId) {
+        SystemLoginLog loginLog = new SystemLoginLog();
+        loginLog.setLoginTime(new Date());
+        loginLog.setSystemVersion(systemVersion);
+        loginLog.setLocation(Utils.Location.getLocationString(loginLog.getIp()));
+        loginLog.setServerIp(Utils.Server.getIP());
+
+        // 鏍规嵁鐢ㄦ埛鍚嶆煡璇㈢敤鎴峰璞�
+        SystemUser user = systemUserService.findById(userId);
+        if (user == null) {
+            throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
+        }
+        Company company = new Company();
+        if(Objects.nonNull(user.getCompanyId())){
+            company = companyMapper.selectById(user.getCompanyId());
+        }
+        // 鑾峰彇鐧诲綍鐢ㄦ埛淇℃伅
+        List<SystemRole> roles = systemRoleService.findByUserId(user.getId());
+        List<SystemPermission> permissions = systemPermissionService.findByUserId(user.getId());
+
+        SystemRole rt = new SystemRole();
+        rt.setDeleted(Boolean.FALSE);
+        //鏁版嵁閮ㄩ棬鏉冮檺闆嗗悎
+        user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
+
+        LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
+        String token = jwtTokenUtil.generateToken(userInfo);
+
+        return  token;
+    }
+
 }
diff --git a/server/system_service/src/main/resources/mappers/SystemUserMapper.xml b/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
index 269920c..62eb9c4 100644
--- a/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
+++ b/server/system_service/src/main/resources/mappers/SystemUserMapper.xml
@@ -32,11 +32,13 @@
     LEFT JOIN `SYSTEM_USER` create_user ON create_user.ID = usr.CREATE_USER
     LEFT JOIN `SYSTEM_USER` update_user ON update_user.ID = usr.UPDATE_USER
     LEFT JOIN `company` sd ON sd.ID = usr.COMPANY_ID AND sd.ISDELETED = 0
+    LEFT JOIN `member` m ON usr.MEMBER_ID = m.id
     <if test="dto.roleId != null">
       RIGHT JOIN system_user_role sur on sur.USER_ID = usr.ID and sur.ROLE_ID = #{dto.roleId}
     </if>
     <where>
       usr.DELETED = 0
+      and usr.SOURCE = 0
 <!--      <if test="dto.positionId != null">-->
 <!--        AND spu.POSITION_ID = #{dto.positionId}-->
 <!--      </if>-->
@@ -61,6 +63,12 @@
       <if test="dto.status != null ">
         AND  usr.`status` = #{dto.status}
       </if>
+      <if test="dto.memberType != null ">
+        AND  m.`type` = #{dto.memberType}
+      </if>
+      <if test="dto.companyType != null ">
+        AND  sd.`type` = #{dto.companyType}
+      </if>
     </where>
     ${orderByClause}
   </select>
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
index c0f201a..881133f 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CarUseBookCloudController.java
@@ -102,7 +102,7 @@
 
     @ApiOperation("鐢宠鎾ら攢")
     @GetMapping("/revoke")
-    public ApiResponse  revoke (@RequestParam Integer id, @RequestParam String info, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+    public ApiResponse  revoke (@RequestParam Integer id,String info, @RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         carUseBookService.revoke(id,info,getLoginUser(token));
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
index ff53508..8e69cbf 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/VisitsCloudController.java
@@ -97,7 +97,7 @@
     @PostMapping("/page")
     @CloudRequiredPermission("business:visits:query")
     public ApiResponse<PageData<Visits>> findPage (@RequestBody PageWrap<Visits> pageWrap,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        pageWrap.getModel().setMemberId(getLoginUser(token).getMemberId());
+        pageWrap.getModel().setReceptMemberId(getLoginUser(token).getMemberId());
         return ApiResponse.success(visitsService.findPage(pageWrap));
     }
 
@@ -124,6 +124,13 @@
         return ApiResponse.success(visitsService.retentionPage(pageWrap));
     }
 
+    @ApiOperation(value = "PC绔瀹㈣褰曟彁浜�", notes = "璁垮鎻愪氦")
+    @PostMapping("/createFk")
+    public ApiResponse createFk(@RequestBody Visits visits) {
+        visits.setSourceType(Constants.ZERO);
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false,Constants.ONE));
+    }
+
 
 
     @ApiOperation(value = "璁垮鎶ュ", notes = "璁垮鎶ュ")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ApiController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ApiController.java
deleted file mode 100644
index 5b84557..0000000
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ApiController.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.doumee.cloud.web;
-
-import com.doumee.config.Jwt.JwtTokenUtil;
-import com.doumee.dao.business.model.Member;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-import javax.servlet.http.HttpServletRequest;
-
-/**
- * Controller鍩虹被
- * @author Eva.Caesar Liu
- * @date 2022/03/15 09:54
- */
-@Slf4j
-public class ApiController {
-
-
-    /**
-     * 寰楀埌request瀵硅薄
-     *
-     * @return
-     */
-    public HttpServletRequest getRequest() {
-        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-        return request;
-    }
-
-    /**
-     * 鑾峰彇鐢ㄦ埛ID
-     *
-     * @return
-     */
-    protected Integer getMemberId() {
-        Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserId_Name);
-        return obj != null ? Integer.valueOf( obj.toString() ): null;
-    }
-    /**
-     * 鑾峰彇鐢ㄦ埛
-     *
-     * @return
-     */
-    protected Member getMember() {
-        Member member = (Member) this.getRequest().getAttribute(JwtTokenUtil.MEMBER);
-        return member != null ? member : null;
-    }
-}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
index e0e31ec..45e0748 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java
@@ -1,7 +1,6 @@
 package com.doumee.cloud.web;
 
 import com.doumee.api.BaseController;
-import com.doumee.cloud.web.ApiController;
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.annotation.trace.Trace;
@@ -95,7 +94,7 @@
     @PostMapping("/createVisit")
     public ApiResponse createVisit(@RequestBody Visits visits,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
         visits.setCreateMemberId(getLoginUser(token).getMemberId());
-        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false));
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false,Constants.ZERO));
     }
 
     @ApiOperation(value = "瀹℃壒娴佽褰曞鎵�", notes = "鍐呴儴浜哄憳")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ProblemWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ProblemWebController.java
index c7ffcb1..d258b5e 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ProblemWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/ProblemWebController.java
@@ -1,6 +1,5 @@
 package com.doumee.cloud.web;
 
-import com.doumee.cloud.web.ApiController;
 import com.doumee.config.annotation.LoginNoRequired;
 import com.doumee.core.annotation.trace.Trace;
 import com.doumee.core.model.ApiResponse;
@@ -33,7 +32,7 @@
 @LoginNoRequired
 @RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX+"/web/problem")
 @Slf4j
-public class ProblemWebController extends ApiController {
+public class ProblemWebController {
 
     @Autowired
     private ProblemsService problemsService;
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
index 26c00bd..2ac7672 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -29,9 +29,11 @@
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.server.ServerWebExchange;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Created by IntelliJ IDEA.
@@ -60,10 +62,11 @@
     @ApiOperation(value = "璁垮寰俊鎺堟潈", notes = "璁垮寰俊鎺堟潈鑾峰彇openId")
     @GetMapping("/wxAuthorize")
     @ApiImplicitParams({
-            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "鎺堟潈鐮�", required = true)
+            @ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "鎺堟潈鐮�", required = true),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "source", value = "鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐", required = true)
     })
-    public ApiResponse<WxAuthorizeVO> wxAuthorize(@RequestParam String code) {
-        WxAuthorizeVO wxAuthorizeVO =  memberService.wxAuthorize(code);
+    public ApiResponse<WxAuthorizeVO> wxAuthorize(@RequestParam String code,@RequestParam Integer source) {
+        WxAuthorizeVO wxAuthorizeVO =  memberService.wxAuthorize(code,source);
         return ApiResponse.success("鏌ヨ鎴愬姛",wxAuthorizeVO);
     }
 
@@ -79,7 +82,7 @@
     @PostMapping("/createFk")
     public ApiResponse createFk(@RequestBody Visits visits) {
         visits.setSourceType(Constants.ZERO);
-        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false));
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.createFk(visits,false,Constants.ZERO));
     }
 
 
@@ -94,7 +97,8 @@
     @ApiOperation(value = "璁垮璁板綍璇︽儏", notes = "璁垮璁板綍璇︽儏")
     @GetMapping("/detail")
     public ApiResponse<VisitDetailVO> detail(@RequestParam Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.getVisitDetail(id,getLoginUser(token).getMemberId()));
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.getVisitDetail(id, Objects.isNull(loginUserInfo)?null:loginUserInfo.getMemberId()));
     }
 
 
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 9dc10e9..86e11a3 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: dev
+    active: test
   application:
     name: visitsAdmin
     # 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java b/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
deleted file mode 100644
index 93c6ad9..0000000
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtPayLoad.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.doumee.config.Jwt;
-
-import lombok.Data;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * jwt鐨勭浜岄儴鍒�
- *
- * @author fengshuonan
- * @Date 2019/7/20 20:45
- */
-@Data
-public class JwtPayLoad {
-
-    /**
-     * 鐢ㄦ埛id
-     */
-    private String memberId;
-    private long expire;
-
-
-    public JwtPayLoad() {
-    }
-
-    public JwtPayLoad(String memberId) {
-        this.memberId = memberId;
-    }
-
-    /**
-     * payload杞寲涓簃ap褰㈠紡
-     *
-     * @author fengshuonan
-     * @Date 2019/7/20 20:50
-     */
-    public Map<String, Object> toMap() {
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("memberId", this.memberId);
-        return map;
-    }
-
-    /**
-     * payload杞寲涓簃ap褰㈠紡
-     *
-     * @author fengshuonan
-     * @Date 2019/7/20 20:50
-     */
-    public static JwtPayLoad toBean(Map<String, Object> map) {
-        if (map == null || map.size() == 0) {
-            return new JwtPayLoad();
-        } else {
-            JwtPayLoad jwtPayLoad = new JwtPayLoad();
-            jwtPayLoad.setMemberId((String) map.get("memberId"));
-
-            return jwtPayLoad;
-        }
-    }
-
-
-
-}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java b/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
deleted file mode 100644
index abf47d7..0000000
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * Copyright 2018-2020 stylefeng & fengshuonan (sn93@qq.com)
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.doumee.config.Jwt;
-
-
-import io.jsonwebtoken.*;
-import org.apache.commons.lang3.StringUtils;
-
-import java.util.Date;
-import java.util.Map;
-
-/**
- * <p>鍚庡彴绯荤粺jwt token宸ュ叿绫�</p>
- * <pre>
- *     jwt鐨刢laim閲屼竴鑸寘鍚互涓嬪嚑绉嶆暟鎹�:
- *         1. iss -- token鐨勫彂琛岃��
- *         2. sub -- 璇WT鎵�闈㈠悜鐨勭敤鎴�
- *         3. aud -- 鎺ユ敹璇WT鐨勪竴鏂�
- *         4. exp -- token鐨勫け鏁堟椂闂�
- *         5. nbf -- 鍦ㄦ鏃堕棿娈典箣鍓�,涓嶄細琚鐞�
- *         6. iat -- jwt鍙戝竷鏃堕棿
- *         7. jti -- jwt鍞竴鏍囪瘑,闃叉閲嶅浣跨敤
- * </pre>
- *
- * @author fengshuonan
- * @Date 2017/8/25 10:59
- */
-public class JwtTokenUtil {
-    //Header 鍚嶇О
-    public static final String HEADER_KEY = "token";
-    //鍙栧�煎悕绉�
-    public static final String UserId_Name = "AppUserId";
-    //鍙栧�煎悕绉�
-    public static final String MEMBER = "MEMBER";
-    //鍔犲瘑瀵嗛挜
-    private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1";
-    //杩囨湡鏃堕棿(s) 86400L=1澶� 604800L=7澶�
-    private static final long expire = 86400L;
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
-     */
-    public static String generateToken(JwtPayLoad jwtPayLoad) {
-        Long expiredSeconds = getExpireSeconds();
-        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
-        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
-    }
-
-    /**
-     * 楠岃瘉token鏄惁澶辨晥
-     */
-    public static Boolean isTokenExpired(String token) {
-        try {
-            final Date expiration = getExpirationDateFromToken(token);
-            return expiration.before(new Date());
-        } catch (ExpiredJwtException expiredJwtException) {
-            return true;
-        }
-    }
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岄粯璁よ繃鏈熸椂闂�
-     */
-    public static String generateTokenOld(JwtPayLoad jwtPayLoad) {
-        Long expiredSeconds = getExpireSeconds();
-        final Date expirationDate = new Date(System.currentTimeMillis() + expiredSeconds * 1000);
-        return generateToken(jwtPayLoad.getMemberId(), expirationDate, jwtPayLoad.toMap());
-    }
-
-    /**
-     * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
-     */
-    public static JwtPayLoad getJwtPayLoad(String token) {
-        Claims claimFromToken = getClaimFromToken(token);
-        return JwtPayLoad.toBean(claimFromToken);
-    }
-
-    /**
-     * 瑙f瀽token鏄惁姝g‘(true-姝g‘, false-閿欒)
-     */
-    public static Boolean checkToken(String token) {
-        try {
-            String jwtSecret = getJwtSecret();
-            Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
-            return true;
-        } catch (JwtException e) {
-            return false;
-        }
-    }
-
-    /**
-     * 楠岃瘉token鏄惁澶辨晥
-     */
-    public static Boolean isTokenExpiredOld(String token) {
-        try {
-            final Date expiration = getExpirationDateFromToken(token);
-            return expiration.before(new Date());
-        } catch (ExpiredJwtException expiredJwtException) {
-            return true;
-        }
-    }
-
-    // 浠巘oken涓幏鍙栫敤鎴稩D
-    public static String getUserId(String token){
-        return getClaimFromToken(token).getSubject();
-    }
-
-    /**
-     * 鑾峰彇jwt澶辨晥鏃堕棿
-     */
-    public static Date getExpirationDateFromToken(String token) {
-        return getClaimFromToken(token).getExpiration();
-    }
-
-    /**
-     * 鐢熸垚token,鏍规嵁userId鍜岃繃鏈熸椂闂�
-     */
-    public static String generateToken(String userId, Date exppiredDate, Map<String, Object> claims) {
-
-        final Date createdDate = new Date();
-        String secret = getJwtSecret();
-
-        if (claims == null) {
-            return Jwts.builder()
-                    .setSubject(userId.toString())
-                    .setIssuedAt(createdDate)
-                    .setExpiration(exppiredDate)
-                    .signWith(SignatureAlgorithm.HS512, secret)
-                    .compact();
-        } else {
-            return Jwts.builder()
-                    .setClaims(claims)
-                    .setSubject(userId.toString())
-                    .setIssuedAt(createdDate)
-                    .setExpiration(exppiredDate)
-                    .signWith(SignatureAlgorithm.HS512, secret)
-                    .compact();
-        }
-    }
-
-    /**
-     * 鑾峰彇jwt鐨刾ayload閮ㄥ垎
-     */
-    public static Claims getClaimFromToken(String token) {
-        if (StringUtils.isBlank(token)) {
-            throw new IllegalArgumentException("token鍙傛暟涓虹┖锛�");
-        }
-        String jwtSecret = getJwtSecret();
-        return Jwts.parser().setSigningKey(jwtSecret).parseClaimsJws(token).getBody();
-    }
-
-    /**
-     * 鑾峰彇绯荤粺鍦板瘑閽�
-     */
-    private static String getJwtSecret() {
-        return jwtSecret;
-    }
-
-    /**
-     * 鑾峰彇绯荤粺鍦板瘑閽ヨ繃鏈熸椂闂达紙鍗曚綅锛氱锛�
-     */
-    private static Long getExpireSeconds() {
-        return expire;
-    }
-}
\ No newline at end of file
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java b/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
deleted file mode 100644
index ae63836..0000000
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.doumee.config.Jwt;
-
-import com.doumee.biz.system.SystemDictDataBiz;
-import com.doumee.config.annotation.ErpLoginRequired;
-import com.doumee.config.annotation.LoginRequired;
-import com.doumee.core.constants.ResponseStatus;
-import com.doumee.core.exception.BusinessException;
-import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.redis.RedisUtil;
-import com.doumee.dao.business.model.Member;
-import io.jsonwebtoken.JwtException;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.jdbc.core.BeanPropertyRowMapper;
-import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.method.HandlerMethod;
-import org.springframework.web.servlet.HandlerInterceptor;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.Objects;
-
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-
-
-    @Autowired
-    private JdbcTemplate dao;
-
-    @Autowired
-    private SystemDictDataBiz systemDictDataBiz;
-
-    @Autowired
-    private RedisTemplate<String,Object> redisTemplate;
-
-    /**
-     * 娣诲姞鎷︽埅鍣�
-     */
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        //API鎺ュ彛JwtToken鎷︽埅鍣�
-        HandlerInterceptor TokenInterceptor = new HandlerInterceptor() {
-            @Override
-            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-                // 濡傛灉涓嶆槸鏄犲皠鍒版柟娉曠洿鎺ラ�氳繃
-                if (!(handler instanceof HandlerMethod)) {
-                    return true;
-                }
-                HandlerMethod handlerMethod = (HandlerMethod) handler;
-
-                Class<?> beanType = handlerMethod.getBeanType();
-
-//                Method method = handlerMethod.getMethod();
-
-                // 鏈� @LoginRequired 娉ㄨВ锛岄渶瑕佺櫥褰曡璇�
-                if (beanType.isAnnotationPresent(LoginRequired.class) || handlerMethod.hasMethodAnnotation(LoginRequired.class)) {
-                    //鑾峰彇token
-                    String token = request.getHeader(JwtTokenUtil.HEADER_KEY);  // 浠� http 璇锋眰澶翠腑鍙栧嚭 token
-                    if (StringUtils.isNotBlank(token)) {
-                        checkLogin(request,response);
-                    } else {
-                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
-                    }
-                } else if(beanType.isAnnotationPresent(ErpLoginRequired.class) || handlerMethod.hasMethodAnnotation(ErpLoginRequired.class)){
-                    try {
-                        //ERP 涓氬姟娉ㄨВ
-                        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
-                        String redisToken = RedisUtil.getObject(redisTemplate,Constants.RedisKeys.ERP_TOKEN,String.class);
-                        if(StringUtils.isBlank(redisToken)||!token.equals(redisToken)){
-                            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎺堟潈宸插け鏁�");
-                        }
-                        request.setAttribute(JwtTokenUtil.HEADER_KEY,token);
-                    } catch (IllegalArgumentException | JwtException e) {
-                        throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鎺堟潈宸插け鏁�");
-                    }
-//                    request.setAttribute("token", token);
-                }
-                return true;
-            }
-        };
-        registry.addInterceptor(TokenInterceptor).addPathPatterns("/web/**","/visitbiz/**");
-    }
-
-
-
-    public Boolean checkLogin(HttpServletRequest request, HttpServletResponse response){
-        String token = request.getHeader(JwtTokenUtil.HEADER_KEY);
-        try {
-            //鍒ゆ柇Token鏄惁瓒呮椂
-            boolean expiration = JwtTokenUtil.isTokenExpired(token);
-            if (expiration) {
-                throw new BusinessException(ResponseStatus.TOKEN_EXCEED_TIME.getCode(),"闀挎椂闂存湭鎿嶄綔,璇烽噸鏂扮櫥褰�");
-            }
-            //鑾峰彇璐﹀彿ID
-            String memberId = JwtTokenUtil.getJwtPayLoad(token).getMemberId();
-            Member member = dao.queryForObject(" select  *  from `member` where id  = ?  limit 1  ", new BeanPropertyRowMapper<>(Member.class),memberId );
-            if(Objects.isNull(member)){
-                throw new BusinessException(ResponseStatus.DATA_EMPTY);
-            }
-            if(member.getIsdeleted()== Constants.ONE){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
-            }
-            if(member.getStatus() != Constants.ZERO){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
-            }
-            request.setAttribute(JwtTokenUtil.UserId_Name, memberId);
-            request.setAttribute(JwtTokenUtil.MEMBER, member);
-            return true;
-        } catch (IllegalArgumentException | JwtException e) {
-            throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"鏈櫥褰�");
-        }
-    }
-
-    @Bean
-    public RestTemplate getRestTemplate(){
-        return new RestTemplate();
-    }
-
-
-}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
index 4a829af..a2847db 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveMapper.java
@@ -12,7 +12,6 @@
  */
 public interface ApproveMapper extends BaseMapper<Approve> {
 
-    void insertBatchSomeColumn(List<Approve> list);
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
index 0dfa3e2..f1b1bcc 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ApproveParamMapper.java
@@ -11,5 +11,4 @@
  */
 public interface ApproveParamMapper extends BaseMapper<ApproveParam> {
 
-    void insertBatchSomeColumn(List<ApproveParam> paramList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java
index f502dbe..42c0607 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarEventMapper.java
@@ -11,5 +11,4 @@
  */
 public interface CarEventMapper extends BaseMapper<CarEvent> {
 
-    void insertBatchSomeColumn(List<CarEvent> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarsMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarsMapper.java
index 3c37d8a..aedf353 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarsMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/CarsMapper.java
@@ -11,5 +11,4 @@
  */
 public interface CarsMapper extends BaseMapper<Cars> {
 
-    void insertBatchSomeColumn(List<Cars> allHkList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceEventMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceEventMapper.java
index c1f1f90..1675b89 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceEventMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceEventMapper.java
@@ -11,5 +11,4 @@
  * @date 2023/11/30 15:33
  */
 public interface DeviceEventMapper extends BaseMapper<DeviceEvent> {
-    void insertBatchSomeColumn(List<DeviceEvent> addList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java
index 1bb0a15..d01fd13 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceMapper.java
@@ -11,6 +11,4 @@
  */
 public interface DeviceMapper extends BaseMapper<Device> {
 
-    Integer insertBatchSomeColumn(Collection<Device> entityList);
-
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceRoleMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceRoleMapper.java
index 0f4f984..9231588 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceRoleMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/DeviceRoleMapper.java
@@ -11,5 +11,4 @@
  */
 public interface DeviceRoleMapper extends BaseMapper<DeviceRole> {
 
-    void insertBatchSomeColumn(List<DeviceRole> addList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java
index bea29ec..7e1b31c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/EmpowerMapper.java
@@ -11,5 +11,4 @@
  */
 public interface EmpowerMapper extends BaseMapper<Empower> {
 
-    void insertBatchSomeColumn(List<Empower> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java
index 0032769..5954790 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberCardMapper.java
@@ -11,6 +11,4 @@
  * @date 2023/11/30 15:33
  */
 public interface MemberCardMapper extends BaseMapper<MemberCard> {
-
-    void insertBatchSomeColumn(List<MemberCard> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
index a0bf352..f0cb9ad 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberMapper.java
@@ -17,5 +17,4 @@
  */
 public interface MemberMapper extends MPJBaseMapper<Member> {
 
-    void insertBatchSomeColumn(List<Member> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java
index cff3a2e..419b97b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/MemberRoleMapper.java
@@ -12,6 +12,5 @@
  */
 public interface MemberRoleMapper extends BaseMapper<MemberRole> {
 
-    void insertBatchSomeColumn(List<MemberRole> list);
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParkBookMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParkBookMapper.java
index 1357775..021bb94 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParkBookMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParkBookMapper.java
@@ -12,5 +12,4 @@
  */
 public interface ParkBookMapper extends BaseMapper<ParkBook> {
 
-    void insertBatchSomeColumn(List<ParkBook> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParksMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParksMapper.java
index c9b7e2e..aebe554 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParksMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/ParksMapper.java
@@ -11,5 +11,4 @@
  */
 public interface ParksMapper extends BaseMapper<Parks> {
 
-    void insertBatchSomeColumn(List<Parks> addList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/RetentionMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/RetentionMapper.java
index ff7693c..edc3988 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/RetentionMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/RetentionMapper.java
@@ -10,6 +10,4 @@
  * @date 2023/11/30 15:33
  */
 public interface RetentionMapper extends BaseMapper<Retention> {
-
-    void insertBatchSomeColumn(List<Retention> retentionList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java
index 3602f89..b10839f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/TrainTimeMapper.java
@@ -11,5 +11,4 @@
  */
 public interface TrainTimeMapper extends BaseMapper<TrainTime> {
 
-    void insertBatchSomeColumn(List<TrainTime> newList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitEventMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitEventMapper.java
index b802f66..d667c84 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitEventMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitEventMapper.java
@@ -11,5 +11,4 @@
  */
 public interface VisitEventMapper extends BaseMapper<VisitEvent> {
 
-    void insertBatchSomeColumn(List<VisitEvent> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
index 977569f..cd622be 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/VisitsMapper.java
@@ -11,5 +11,4 @@
  */
 public interface VisitsMapper extends BaseMapper<Visits> {
 
-    void insertBatchSomeColumn(List<Visits> withUserList);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
index 86d86d7..650aaf6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/ApproveJoinMapper.java
@@ -12,7 +12,5 @@
  */
 public interface ApproveJoinMapper extends MPJJoinMapper<Approve> {
 
-    void insertBatchSomeColumn(List<Approve> list);
-
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
index f920075..d59bbc1 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/join/EmpowerJoinMapper.java
@@ -11,5 +11,4 @@
  * @date 2023/11/30 15:33
  */
 public interface EmpowerJoinMapper extends MPJJoinMapper<Empower> {
-    void insertBatchSomeColumn(List<Empower> list);
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
index 49deff2..48c6832 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/CarUseBook.java
@@ -134,8 +134,8 @@
     @ExcelColumn(name="鐢宠浜虹紪鐮�(鍏宠仈member)")
     private Integer memberId;
 
-    @ApiModelProperty(value = "鍙告満缂栫爜锛堝叧鑱攃ar_driver锛�", example = "1")
-    @ExcelColumn(name="鍙告満缂栫爜锛堝叧鑱攃ar_driver锛�")
+    @ApiModelProperty(value = "鍙告満缂栫爜锛堝叧鑱攎emberId锛�", example = "1")
+    @ExcelColumn(name="鍙告満缂栫爜锛堝叧鑱攎emberId锛�")
     private Integer driverId;
 
     @ApiModelProperty(value = "鍙告満濮撳悕", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
index d90363d..dabcfcb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Member.java
@@ -75,8 +75,8 @@
     @ExcelColumn(name="鍋ュ悍鐮�")
     private String imgurl;
 
-    @ApiModelProperty(value = "绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
-    @ExcelColumn(name="绫诲瀷 0鍔冲姟璁垮 1鏅�氳瀹� 2鍐呴儴浜哄憳")
+    @ApiModelProperty(value = "绫诲瀷 0鍙告満浜哄憳 1鏅�氳瀹�  2鍐呴儴浜哄憳", example = "1")
+    @ExcelColumn(name="绫诲瀷 0鍙告満浜哄憳 1鏅�氳瀹� 2鍐呴儴浜哄憳")
     private Integer type;
 
     @ApiModelProperty(value = "璁垮鍚嶇О/鍐呴儴浜哄憳")
@@ -218,7 +218,7 @@
     @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉")
     @TableField(exist = false)
     private String editorName;
-    @ApiModelProperty(value = "缁勭粐绫诲瀷")
+    @ApiModelProperty(value = "缁勭粐绫诲瀷 0鍔冲姟鍏徃 1鍐呴儴缁勭粐")
     @TableField(exist = false)
     private Integer companyType;
     @ApiModelProperty(value = "缁勭粐缂栫爜璺緞")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
index 1e2dbda..5c3e688 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java
@@ -144,8 +144,8 @@
     @ExcelColumn(name="鎺ュ緟浜哄憳")
     private Integer receptMemberId;
 
-    @ApiModelProperty(value = "瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�", example = "1")
-    @ExcelColumn(name="瀹℃牳鐘舵�� 0寰呭鏍� 1宸叉彁浜RP瀹℃壒  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�")
+    @ApiModelProperty(value = "瀹℃牳鐘舵�� 0寰呭鏍� 1瀹℃壒涓�  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�", example = "1")
+    @ExcelColumn(name="瀹℃牳鐘舵�� 0寰呭鏍� 1瀹℃壒涓�  2瀹℃牳閫氳繃 3瀹℃牳涓嶉�氳繃 4鍙栨秷 5涓嬪彂鎴愬姛 6涓嬪彂澶辫触 7鎷滆涓� 8宸茬绂�")
     private Integer status;
 
     @ApiModelProperty(value = "鍒濆浜虹紪鐮�", example = "1")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/DateIntervalVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/DateIntervalVO.java
index db66388..727a985 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/DateIntervalVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/vo/DateIntervalVO.java
@@ -28,4 +28,7 @@
     @ApiModelProperty(value = "鏄惁鍗犵敤")
     private Integer isUse;
 
+    @ApiModelProperty(value = "鐢ㄨ溅璁板綍涓婚敭")
+    private Integer carUseBookId;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
index 3796270..74fc2e3 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/VisitDetailVO.java
@@ -7,6 +7,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -17,6 +18,8 @@
  */
 @Data
 public class VisitDetailVO {
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private Date createTime;
 
     @ApiModelProperty(value = "瀹℃壒鐘舵��")
     private Integer status;
@@ -76,6 +79,8 @@
     @ApiModelProperty(value = "瀹℃壒淇℃伅鏁版嵁")
     private ApproveDataVO approveDateVO;
 
+    @ApiModelProperty(value = "璇佷欢绫诲瀷 0韬唤璇� 1娓境璇佷欢 2鎶ょ収", example = "1")
+    private Integer idcardType;
 
 
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index 03fd6bc..24554db 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -16,6 +16,7 @@
 import com.doumee.dao.web.reqeust.VisitMemberDTO;
 import com.doumee.dao.web.response.MemberVO;
 import com.doumee.dao.web.response.WxAuthorizeVO;
+import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -173,20 +174,13 @@
      * @param code
      * @return
      */
-    WxAuthorizeVO wxAuthorize(String code);
+    WxAuthorizeVO wxAuthorize(String code,Integer source);
 
 
 
     List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO);
 
 
-    /**
-     * 璐﹀彿瀵嗙爜
-     * 鍐呴儴浜哄憳/鍔冲姟璁垮鐧诲綍
-     * @param accountLoginDTO
-     * @return
-     */
-    WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO);
 
     /**
      * 鍐呴儴鍙嫓璁夸汉鍛樺垎椤�
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
index 3aaab3a..1dddc75 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformInterfaceLogService.java
@@ -94,4 +94,6 @@
      * @return long
      */
     long count(PlatformInterfaceLog platformInterfaceLog);
+
+    void clearThreeMonthLog();
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
index 35fdec6..569c7ca 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/VisitsService.java
@@ -9,6 +9,7 @@
 import com.doumee.dao.web.reqeust.VisitRecordDTO;
 import com.doumee.dao.web.response.VisitDetailVO;
 import com.doumee.dao.web.response.VisitRecordVO;
+import io.swagger.models.auth.In;
 
 import java.util.List;
 
@@ -27,7 +28,7 @@
      */
     Integer create(Visits visits);
 
-    Integer createFk(Visits visits,Boolean isERP);
+    Integer createFk(Visits visits, Boolean isERP, Integer source);
 
     /**
      * 璁垮鎶ュ
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
index 261c650..72c55b6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ext/ERPSyncService.java
@@ -53,7 +53,7 @@
      * @param accessSecret
      * @return
      */
-    AccessTokenResponse createERPToken(String accessKey, String accessSecret);
+//    AccessTokenResponse createERPToken(String accessKey, String accessSecret);
 
 
     /**
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
index 87ad1ae..1af24c0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -36,6 +36,7 @@
 import org.apache.xpath.operations.Bool;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -257,17 +258,19 @@
                                 &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
                         ).count()
                 );
+                //宸插鐞嗘暟鎹�
                 internalHomeVO.setNoticeDealNum(
                         noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId)
+                                &&StringUtils.equals(i.getParam4(),i.getUserId().toString())
                                 &&Constants.equalsInteger(i.getStatus(),Constants.ONE)
                                 &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
                         ).count()
                 );
-
+                //鎴戝彂璧风殑鏁版嵁
                 internalHomeVO.setNoticeCreateNum(
                         noticesJoinMapper.selectCount(new QueryWrapper<Notices>().lambda().eq(Notices::getParam3,memberId))
                 );
-
+                //鎶勯�佹垜鐨勬暟鎹�
                 internalHomeVO.setNoticeCopyNum(
                         noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId)
                                 &&Constants.equalsInteger(i.getSendacopy(),Constants.ONE)
@@ -372,9 +375,9 @@
 
         //澶勭悊鎶勯�佹暟鎹�
         if(CollectionUtils.isNotEmpty(approveCopyList)){
-            this.organizeApproveCopyData(approveTempl,approveParamList,businessId,approveList);
+            this.organizeApproveCopyData(approveTempl,approveCopyList,businessId,approveList);
         }
-        approveMapper.insertBatchSomeColumn(approveList);
+        approveJoinMapper.insert(approveList);
 
     }
 
@@ -396,6 +399,7 @@
         createUserApprove.setIsdeleted(Constants.ZERO);
         createUserApprove.setTemplatId(approveTempl.getId());
         createUserApprove.setChekorId(createMember.getId());
+        createUserApprove.setCheckDate(createUserApprove.getCreateDate());
         createUserApprove.setStatus(Constants.approveStatus.pass);
         createUserApprove.setTitle("鍙戣捣鐢宠");
         createUserApprove.setStatusInfo("");
@@ -409,15 +413,21 @@
         createUserApprove.setType(Constants.ZERO);
         approveList.add(createUserApprove);
 
+        //鏌ヨ鎵�鏈夊緟澶勭悊浜�
+
         //瀹℃壒涓氬姟鏁版嵁
         for (int i = 0; i < approveParamList.size(); i++) {
             ApproveParam approveParam = approveParamList.get(i);
             List<Integer> ids = this.getApproveUserIds(approveParam,createMember);
+            List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().in(Member::getId,ids));
+            List<String> memberNameList =memberList.stream().map(m->m.getName()).collect(Collectors.toList());
+            String memberNames = String.join(",",memberNameList);
             Integer noticeType = Constants.approveTypeToNoticeType(approveTempl.getType());
             String title = "銆愯瀹㈢敵璇枫�戠敵璇蜂汉 - ";
             Map<String,Object> jsonMap = new HashMap<>();
-            for (int j = 0; j < ids.size(); j++) {
-                Integer memberId = ids.get(j);
+            for (int j = 0; j < memberList.size(); j++) {
+                Member member = memberList.get(j);
+                Integer memberId = member.getId();
                 //鐢熸垚寰呭姙 notices 琛ㄦ暟鎹�
                 if(i==0){
                     if(jsonMap.isEmpty()){
@@ -441,6 +451,9 @@
                         notices.setInfo("澶勭悊涓�");
                         noticesJoinMapper.insert(notices);
                     }
+                    if(CollectionUtils.isEmpty(memberList)){
+                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌瀹℃壒浜轰俊鎭�");
+                    }
                     Notices notices = new Notices();
                     notices.setCreateDate(new Date());
                     notices.setIsdeleted(Constants.ZERO);
@@ -456,7 +469,13 @@
                     notices.setSendacopy(Constants.ZERO);
                     notices.setParam2("0");
                     notices.setParam3("");
-                    notices.setInfo("寰呭鐞�");
+                    notices.setParam5(memberNames);
+                    notices.setRemark(member.getName());
+                    if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
+                        notices.setInfo("寰�"+memberNameList.get(0)+"澶勭悊涓�");
+                    }else{
+                        notices.setInfo("寰�"+memberNameList.get(0)+"绛�"+memberList.size()+"浜哄鐞嗕腑");
+                    }
                     noticesJoinMapper.insert(notices);
                 }
                 Approve approve = new Approve();
@@ -467,6 +486,7 @@
                 approve.setChekorId(memberId);
                 approve.setStatus(i==0?Constants.ONE:Constants.ZERO);
                 approve.setStatusInfo(i==0?"瀹℃壒涓�":"寰呭鎵�");
+                approve.setTitle("瀹℃壒浜�");
                 approve.setIsEndCheck((i+1) == approveParamList.size()?Constants.ONE:Constants.ZERO);
                 approve.setObjId(businessId);
                 approve.setLevel(i+1);
@@ -549,18 +569,18 @@
             if(CollectionUtils.isNotEmpty(memberList)){
                 userIds.addAll(memberList.stream().map(m->m.getId()).collect(Collectors.toList()));
             }
-            //鍏姟鐢ㄨ溅 榛樿鍔犲叆 鍙告満鎶勯��
-            if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){
-                CarUseBook carUseBook = carUseBookMapper.selectById(businessId);
-                if(Objects.isNull(carUseBook)){
-                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
-                }
-                CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId());
-                if(Objects.isNull(carDriver)){
-                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鍙告満淇℃伅");
-                }
-                userIds.add(carDriver.getMemberId());
-            }
+            //鍏姟鐢ㄨ溅 榛樿鍔犲叆 鍙告満鎶勯��  2024骞�6鏈�28鏃�16:49:08 鍙告満鎶勯�佷慨鏀瑰埌 瀹℃壒涓氬姟鏃惰繘琛屽彂閫�
+//            if(approveTempl.getType()==Constants.THREE||approveTempl.getType()==Constants.FOUR){
+//                CarUseBook carUseBook = carUseBookMapper.selectById(businessId);
+//                if(Objects.isNull(carUseBook)){
+//                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鐢ㄨ溅鐢宠淇℃伅");
+//                }
+//                CarDriver carDriver = carDriverMapper.selectById(carUseBook.getDriverId());
+//                if(Objects.isNull(carDriver)){
+//                    throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"涓烘煡璇㈠埌鍙告満淇℃伅");
+//                }
+//                userIds.add(carDriver.getMemberId());
+//            }
 
             if(CollectionUtils.isNotEmpty(userIds)){
                 for (Integer memberId:userIds) {
@@ -569,6 +589,7 @@
                     approve.setIsdeleted(Constants.ZERO);
                     approve.setTemplatId(approveTempl.getId());
                     approve.setChekorId(memberId);
+                    approve.setObjType(approveTempl.getType());
                     approve.setObjId(businessId);
                     approve.setType(Constants.ONE);
                     approveList.add(approve);
@@ -602,7 +623,7 @@
             if(Objects.isNull(memberCompany)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
             }
-            Company auditCompany = this.getAuditCompanyHead(memberCompany.getParentId(),approveParam.getObjLevel());
+            Company auditCompany = this.getAuditCompanyHead(memberCompany.getId(),approveParam.getObjLevel());
             if(Objects.isNull(auditCompany)){
                 //瀹℃壒閮ㄩ棬涓虹┖ 鑷姩娴佽浆涓嬩竴绾у鎵归厤缃�
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬鏈煡璇㈠埌]");
@@ -611,7 +632,7 @@
                 Member headMember = memberMapper.selectById(auditCompany.getHeadId());
                 if(Objects.isNull(headMember)){
                     //鏈煡璇㈠埌閮ㄩ棬璐熻矗浜�  鏍规嵁閰嶇疆澶勭悊   鐢变笂绾т富绠′唬鏇垮鏍�/鐩存帴缁撴潫娴佺▼
-                    if(approveParam.getNoleaderOpt().equals(Constants.ONE)&&!Objects.isNull(auditCompany.getParentId())){
+                    if(Constants.equalsInteger(approveParam.getNoleaderOpt(),Constants.ONE)&&Objects.nonNull(auditCompany.getParentId())){
                         auditCompany = companyMapper.selectOne(new QueryWrapper<Company>().lambda().eq(Company::getId,auditCompany.getParentId()));
                         //鏃犵埗绾� 鐩存帴娴佷紶涓嬩竴绾у鎵�
                         if(Objects.isNull(auditCompany)){
@@ -626,9 +647,11 @@
                             userIds.add(headMember.getId());
                         }
                     }else{
-                        //娣诲姞瀹℃壒浜�
-                        userIds.add(headMember.getId());
+                        throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴侀厤缃敊璇痆鎸囧畾瀹℃壒閮ㄩ棬涓荤鏈煡璇㈠埌]");
                     }
+                }else{
+                    //娣诲姞瀹℃壒浜�
+                    userIds.add(headMember.getId());
                 }
             }
         }
@@ -643,9 +666,9 @@
      * @param objLevel  鏌ヨ绾у埆
      */
     public Company getAuditCompanyHead(Integer companyId, Integer objLevel){
-        Integer queryLevel = Constants.ZERO;
         Company auditCompany =  companyMapper.selectById(companyId);
-        while(queryLevel.equals(objLevel)){
+        Integer queryLevel = Constants.ONE;
+        while(queryLevel<objLevel){
             auditCompany = companyMapper.selectById(auditCompany.getParentId());
             if(Objects.isNull(auditCompany)){
                 return null;
@@ -674,6 +697,8 @@
                         .eq(Approve::getObjId,businessId)
                         .eq(Approve::getObjType,businessType)
                         .orderByAsc(Approve::getLevel)
+                        .orderByAsc(Approve::getStatus)
+
         );
 
         //鏌ユ壘鍏ㄩ儴levelList
@@ -684,11 +709,6 @@
             for(Approve level:levelList){
                 List<Approve> tlist = getLevelInfoFromList(level,approveGroupList);
                 approveDateVO.getApproveList().addAll(tlist);
-                if(tlist.size() ==0
-                        ||Constants.equalsInteger(Constants.approveStatus.unPass,  tlist.get(0).getStatus())
-                        ||Constants.equalsInteger(Constants.approveStatus.cancel,  tlist.get(0).getStatus())){
-                    break;
-                }
             }
         }
 
@@ -696,12 +716,14 @@
         if (CollectionUtils.isNotEmpty(copyList)) {
             Approve waitModel = new Approve();
             waitModel.setApproveType(Constants.ONE);
+            waitModel.setCheckDate(copyList.get(Constants.ZERO).getCheckDate());
             waitModel.setTitle("鎶勯�佷汉");
             waitModel.setStatus(copyList.get(Constants.ZERO).getStatus());
             waitModel.setType(Constants.ONE);
             waitModel.setApproveList(copyList);
             approveDateVO.getApproveList().add(waitModel);
         }
+        System.out.println(JSONObject.toJSONString(approveDateVO));
         return approveDateVO;
     }
 
@@ -781,19 +803,14 @@
                 if(CollectionUtils.isNotEmpty(approveList)){
                     waitModel.setCreateDate(approveList.get(Constants.ZERO).getCreateDate());
                 }
-                waitModel.setMemberName("宸叉妱閫�"+ approveList.size() +"浜�");
+                if(Constants.equalsInteger(waitModel.getStatus(),Constants.approveStatus.pass)){
+                    waitModel.setMemberName("宸叉妱閫�"+ approveList.size() +"浜�");
+                }else if(Constants.equalsInteger(waitModel.getStatus(),Constants.approveStatus.wait)){
+                    waitModel.setMemberName("澶勭悊涓�");
+                }
                 waitModel.setApproveList(approveList);
                 list.add(waitModel);
             }
-            //濡傛灉鏄垨绛�
-//            if(otherPassList.size()>0){
-//                Approve waitModel = new Approve();
-//                waitModel.setApproveType(Constants.ONE);
-//                waitModel.setStatusInfo(StringUtils.defaultString(level.getTitle(),"瀹℃壒浜�")+"锛堟妱閫佹垨绛惧鎵逛汉锛�");
-//                waitModel.setStatus(Constants.ONE);
-//                waitModel.setApproveList(otherPassList);
-//                list.add(waitModel);
-//            }
         }
 
 
@@ -816,7 +833,7 @@
             }else if(Constants.equalsInteger(Constants.approveStatus.auditIng,approve.getStatus())||Constants.equalsInteger(Constants.approveStatus.wait,approve.getStatus())){
                 waitList.add(approve);
             }else if(Constants.equalsInteger(Constants.approveStatus.unPass,approve.getStatus())){
-                refuseModel = approve;
+                BeanUtils.copyProperties(approve,refuseModel);
             }
         }
     }
@@ -1009,6 +1026,8 @@
                 .eq(Notices::getUserId,approve.getChekorId())
                 .eq(Notices::getSendacopy,Constants.ZERO)
                 .eq(Notices::getIsdeleted,Constants.ZERO)
+                .eq(Notices::getStatus,Constants.ZERO)
+                .last(" limit 1 ")
         );
         if(Objects.isNull(notices)){
             log.info("鏈煡璇㈠埌閫氱煡璁板綍");
@@ -1020,7 +1039,7 @@
         approve.setCheorId(approveDTO.getLoginUserInfo().getMemberId().toString());
         approve.setCheckorName(approveDTO.getLoginUserInfo().getRealname());
         approve.setCheckDate(new Date());
-        approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"宸插悓鎰�":approveDTO.getCheckInfo());
+        approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"宸插悓鎰�":"宸查┏鍥�");
         //鏈骇鎵�鏈� 寰呭鎵硅褰�
         List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class,
                 new MPJLambdaWrapper<Approve>()
@@ -1048,40 +1067,41 @@
         Boolean dealBusinessBean = false;
         //瀹℃壒椹冲洖鎯呭喌
         if(approveDTO.getStatus().equals(Constants.THREE)){
+            dealBusinessBean = true;
             //淇敼鍏朵粬鎵�鏈夊緟瀹℃壒鍜屽鎵逛腑璁板綍鏁版嵁
             approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                     .lambda()
                     .set(Approve::getStatus,Constants.approveStatus.otherUnPass)
+                    .set(Approve::getCheckDate,new Date())
                     .in(Approve::getStatus,Constants.approveStatus.auditIng,Constants.approveStatus.wait)
                     .eq(Approve::getObjId,approve.getObjId())
                     .eq(Approve::getObjType,approve.getObjType())
                     .ne(Approve::getId,approve.getId()));
             //澶勭悊鎵�鏈塏otice閫氱煡涓哄凡澶勭悊
-            if(approve.getApproveType().equals(Constants.ZERO)){
-                //淇敼鑷繁鐨勯�氱煡璁板綍
+            //淇敼鑷繁鐨勯�氱煡璁板綍
+            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                    .set(Notices::getEditDate,new Date())
+                    .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId())
+                    .set(Notices::getInfo,"瀹℃壒鏈�氳繃")
+                    .set(Notices::getReaded,Constants.ONE)
+                    .set(Notices::getParam2,Constants.TWO)
+                    .set(Notices::getStatus,Constants.ONE)
+                    .eq(Notices::getId,notices.getId())
+            );
+            //淇敼 鏈鐞嗙殑 閫氱煡鏁版嵁 涓烘妱閫�
+            if (!Constants.equalsInteger(approve.getApproveType(),Constants.TWO)){
                 noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                         .set(Notices::getEditDate,new Date())
-                        .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId())
-                        .set(Notices::getReaded,Constants.ONE)
-                        .set(Notices::getParam2,Constants.TWO)
+                        .set(Notices::getSendacopy,Constants.ONE)
                         .set(Notices::getStatus,Constants.ONE)
-                        .eq(Notices::getId,notices.getId())
+                        .set(Notices::getParam2,Constants.TWO)
+                        .set(Notices::getInfo,"瀹℃壒鏈�氳繃")
+                        .eq(Notices::getObjId,notices.getObjId())
+                        .eq(Notices::getObjType,notices.getObjType())
+                        .eq(Notices::getReaded,Constants.ZERO)
+                        .ne(Notices::getId,notices.getId())
                 );
-                //淇敼 鏈鐞嗙殑 閫氱煡鏁版嵁 涓烘妱閫�
-                if (!Constants.equalsInteger(approve.getApproveType(),Constants.TWO)){
-                    noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
-                            .set(Notices::getEditDate,new Date())
-                            .set(Notices::getSendacopy,Constants.ONE)
-                            .set(Notices::getStatus,Constants.ONE)
-                            .set(Notices::getParam2,Constants.TWO)
-                            .eq(Notices::getObjId,notices.getObjId())
-                            .eq(Notices::getObjType,notices.getObjType())
-                            .eq(Notices::getReaded,Constants.ZERO)
-                            .ne(Notices::getId,notices.getId())
-                    );
-                }
             }
-            return;
         }else{
             //澶勭悊鍏朵粬涓氬姟鏁版嵁
             if((Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)
@@ -1091,6 +1111,7 @@
                     approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                             .lambda()
                             .set(Approve::getStatus,Constants.approveStatus.otherDeal)
+                            .set(Approve::getCheckDate,new Date())
                             .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList())));
                 }
                 dealBusinessBean = true;
@@ -1102,22 +1123,60 @@
                     approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                             .lambda()
                             .set(Approve::getStatus,Constants.approveStatus.otherDeal)
+                            .set(Approve::getCheckDate,new Date())
                             .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList())));
                 }
                 /**寮�鍚笅涓�绾у埆鐨勬暟鎹负寰呭鏍�**/
                 approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                         .lambda()
                         .set(Approve::getStatus,Constants.approveStatus.auditIng)
+                        .set(Approve::getTitle,"瀹℃壒浜�")
+                        .set(Approve::getCheckDate,new Date())
                         .eq(Approve::getStatus,Constants.approveStatus.wait)
                         .eq(Approve::getObjId,approve.getObjId())
                         .eq(Approve::getObjType,approve.getObjType())
                         .eq(Approve::getLevel,(approve.getLevel()+1))
                 );
+                if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit)
+                        ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit)
+                        ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)) {
+                    Visits visits = visitsMapper.selectById(approve.getObjId());
+                    if(Objects.nonNull(visits)){
+                        if(Constants.equalsInteger(visits.getStatus(),Constants.ZERO)){
+                             visitsMapper.update(null,new UpdateWrapper<Visits>().lambda().set(Visits::getStatus,Constants.ONE).eq(Visits::getId,visits.getId()));
+                        }else{
+                            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌涓氬姟鏁版嵁瀵硅薄!璇峰埛鏂伴噸璇�");
+                        }
+                    }
+
+
+                }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
+                        Constants.approveObjectType.unCityUseCar)){
+                    this.updDriver(approveDTO,approve,false);
+                }
             }else if(approve.getApproveType().equals(Constants.ONE)){
                 //浼氱 涓旂粓瀹�
                 //鏃犱粬浜哄鎵圭殑鎯呭喌 鍒欎慨鏀规暟鎹姸鎬�
                 if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){
                     dealBusinessBean = true;
+                }else{
+                    if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
+                        /**寮�鍚笅涓�绾у埆鐨勬暟鎹负寰呭鏍�**/
+                        approveJoinMapper.update(null,new UpdateWrapper<Approve>()
+                                .lambda()
+                                .set(Approve::getStatus,Constants.approveStatus.auditIng)
+                                .set(Approve::getTitle,"瀹℃壒浜�")
+                                .set(Approve::getCheckDate,new Date())
+                                .eq(Approve::getStatus,Constants.approveStatus.wait)
+                                .eq(Approve::getObjId,approve.getObjId())
+                                .eq(Approve::getObjType,approve.getObjType())
+                                .eq(Approve::getLevel,(approve.getLevel()+1))
+                        );
+                    }
+                    if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
+                            Constants.approveObjectType.unCityUseCar)){
+                        this.updDriver(approveDTO,approve,false);
+                    }
                 }
             }
             this.passNextNotices(dealBusinessBean,notices,approve,approveList,approveCopyList,approveDTO);
@@ -1135,6 +1194,14 @@
      * @param approveList  鍚岀骇寰呭鎵规暟鎹�
      */
     public void passNextNotices(Boolean dealBusinessBean,Notices notices,Approve approve,List<Approve> approveList,List<Approve> copyList,ApproveDTO approveDTO){
+        //鏈紑鍚笅涓�绾ф椂锛屾搷浣滃悗鐨勫緟瀹℃壒浜�
+        String memberNames =notices.getParam5()
+                .replaceAll(","+notices.getRemark(),"")
+                .replaceAll(notices.getRemark()+",","")
+                .replaceAll(notices.getRemark(),"");
+
+
+
         //1銆佷慨鏀硅嚜宸辩殑鏁版嵁璁板綍
         noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                 .set(Notices::getEditDate,new Date())
@@ -1146,98 +1213,114 @@
         );
         if(Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)){
             //鎴栫
-            //2銆佹洿鏂颁粬浜虹殑鍚岀骇璁板綍 涓烘妱閫�
+            //2銆佹洿鏂颁粬浜虹殑鍚岀骇璁板綍 涓烘妱閫�  骞舵洿鏂� info 淇℃伅
             noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
                     .set(Notices::getEditDate,new Date())
-                    .set(Notices::getReaded,Constants.ONE)
+                    .set(Notices::getReaded,Constants.ZERO)
                     .set(Notices::getSendacopy,Constants.ONE)
                     .set(Notices::getStatus,Constants.ONE)
                     .set(Notices::getParam4,approveDTO.getLoginUserInfo().getMemberId())
                     .set(dealBusinessBean,Notices::getParam2,Constants.ONE)
                     .eq(Notices::getObjId,notices.getObjId())
+                    .eq(Notices::getStatus,Constants.ZERO)
                     .eq(Notices::getObjType,notices.getObjType())
                     .ne(Notices::getId,notices.getId())
             );
             //3銆佸鏋滀笉鏄粓瀹$敓鎴愪笅涓�绾х殑鏁版嵁璁板綍
             if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)&&!dealBusinessBean){
-              this.saveNextNotice(notices,approve);
+                memberNames = this.saveNextNotice(notices,approve);
             }
         }else if(Constants.equalsInteger(approve.getApproveType(),Constants.ONE)){
             //浼氱
             //2銆佸鏋滄槸鏈�鍚庝竴浣嶅鎵逛汉 涓斾笉鏄粓瀹″紑鍚笅涓�绾ф暟鎹�
             if(Constants.equalsInteger(Constants.ZERO,approveList.size())){
                 if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
-                    this.saveNextNotice(notices,approve);
+                    memberNames = this.saveNextNotice(notices,approve);
                 }
             }
         }else{
             //鍗曚汉绛�
             //2銆� 鏄惁鏄粓瀹� 寮�鍚笅涓�绾ф暟鎹�
             if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
-                this.saveNextNotice(notices,approve);
+                memberNames = this.saveNextNotice(notices,approve);
             }
         }
+        String info = "";
+        List<String> memberNameList = Arrays.asList(memberNames.split(","));
+        if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
+            info = "寰� "+memberNameList.get(0)+" 澶勭悊涓�";
+        }else{
+            info = "寰� "+memberNameList.get(0)+" 绛�"+memberNameList.size()+"浜哄鐞嗕腑";
+        }
+        //鏇存柊璇ヤ笟鍔℃暟鎹殑鎵�鏈夎褰曚俊鎭�
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                        .set(!dealBusinessBean,Notices::getInfo,info)
+                        .set(dealBusinessBean,Notices::getInfo,"瀹℃壒閫氳繃")
+                        .set(Notices::getParam5,memberNames)
+                        .eq(Notices::getObjId,notices.getObjId())
+                        .eq(Notices::getObjType,notices.getObjType()));
+
         //缁堝涓氬姟 涓� 澶勭悊鏁版嵁  杩涜鎶勯�佸彂閫�
         if (Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE) && dealBusinessBean) {
             if(CollectionUtils.isNotEmpty(copyList)){
-                Notices copyNotices = new Notices();
                 for (Approve copyApprove:copyList) {
-                    if(Objects.isNull(copyNotices)){
-                        BeanUtils.copyProperties(notices,copyNotices);
-                        notices.setId(null);
-                        notices.setCreateDate(new Date());
-                        notices.setEditDate(new Date());
-                        notices.setParam2("2");
-                        notices.setParam3("");
-                        notices.setUserId(copyApprove.getChekorId());
-                        notices.setStatus(Constants.ZERO);
-                        notices.setSendacopy(Constants.ONE);
-                        notices.setReaded(Constants.ZERO);
-                        noticesJoinMapper.insert(notices);
-                    }else{
-                        notices.setId(null);
-                        notices.setUserId(copyApprove.getChekorId());
-                        noticesJoinMapper.insert(notices);
-                    }
+                    Notices copyNotices = new Notices();
+                    BeanUtils.copyProperties(notices,copyNotices);
+                    copyNotices.setId(null);
+                    copyNotices.setCreateDate(new Date());
+                    copyNotices.setEditDate(new Date());
+                    copyNotices.setParam2("2");
+                    copyNotices.setParam3("");
+                    copyNotices.setInfo("瀹℃壒閫氳繃");
+                    copyNotices.setUserId(copyApprove.getChekorId());
+                    copyNotices.setStatus(Constants.ZERO);
+                    copyNotices.setSendacopy(Constants.ONE);
+                    copyNotices.setReaded(Constants.ZERO);
+                    noticesJoinMapper.insert(copyNotices);
                 }
             }
-
-
         }
     }
 
 
-    public void saveNextNotice(Notices notices,Approve approve){
-        List<Approve> nextApproveList = approveJoinMapper.selectList(new QueryWrapper<Approve>()
-                .lambda()
+
+    public String saveNextNotice(Notices notices,Approve approve){
+        List<Approve> nextApproveList = approveJoinMapper.selectJoinList(Approve.class,new MPJLambdaWrapper<Approve>()
+                .selectAll(Approve.class)
+                .selectAs(Member::getName,Approve::getMemberName)
+                .leftJoin(Member.class,Member::getId,Approve::getChekorId)
                 .eq(Approve::getObjId,approve.getObjId())
                 .eq(Approve::getObjType,approve.getObjType())
                 .eq(Approve::getType,Constants.ZERO)
                 .eq(Approve::getLevel,(approve.getLevel() + Constants.ONE))
         );
-        if(CollectionUtils.isNotEmpty(nextApproveList)){
+        if(CollectionUtils.isEmpty(nextApproveList)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴佹暟鎹紓甯�");
         }
-        Notices newNotices = new Notices();
+        List<String> memberNameList =nextApproveList.stream().map(m->m.getMemberName()).collect(Collectors.toList());
+        String memberNames = String.join(",",memberNameList);
         for (Approve nextDealApprove:nextApproveList) {
-            if(Objects.isNull(newNotices)){
-                BeanUtils.copyProperties(notices,newNotices);
-                notices.setId(null);
-                notices.setCreateDate(new Date());
-                notices.setParam2("0");
-                notices.setParam3("");
-                notices.setEditDate(new Date());
-                notices.setUserId(nextDealApprove.getChekorId());
-                notices.setStatus(Constants.ZERO);
-                notices.setSendacopy(Constants.ZERO);
-                notices.setReaded(Constants.ZERO);
-                noticesJoinMapper.insert(notices);
+            Notices newNotices = new Notices();
+            BeanUtils.copyProperties(notices,newNotices);
+            newNotices.setId(null);
+            newNotices.setCreateDate(new Date());
+            newNotices.setParam2("0");
+            newNotices.setParam3("");
+            newNotices.setEditDate(new Date());
+            newNotices.setUserId(nextDealApprove.getChekorId());
+            newNotices.setStatus(Constants.ZERO);
+            newNotices.setSendacopy(Constants.ZERO);
+            newNotices.setReaded(Constants.ZERO);
+            notices.setParam5(memberNames);
+            notices.setRemark(nextDealApprove.getMemberName());
+            if(Constants.equalsInteger(memberNameList.size(),Constants.ONE)){
+                notices.setInfo("寰� "+memberNameList.get(0)+" 澶勭悊涓�");
             }else{
-                notices.setId(null);
-                notices.setUserId(nextDealApprove.getChekorId());
-                noticesJoinMapper.insert(notices);
+                notices.setInfo("寰� "+memberNameList.get(0)+" 绛�"+memberNameList.size()+"浜哄鐞嗕腑");
             }
+            noticesJoinMapper.insert(newNotices);
         }
+        return memberNames;
     }
 
     public void dealBusinessData(ApproveDTO approveDTO,Approve approve){
@@ -1255,29 +1338,52 @@
             visitsMapper.updateById(visits);
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                 Constants.approveObjectType.unCityUseCar)){
-            // 甯傚唴澶栫敤杞︾敵璇�
-            CarUseBook carUseBook = carUseBookMapper.selectById(approveDTO.getObjId());
-            if(Objects.isNull(carUseBook)){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鐢ㄨ溅璁板綍");
-            }
-            carUseBook.setStatus(approveDTO.getStatus());
-            carUseBook.setEditDate(new Date());
-            carUseBook.setEditor(approveDTO.getLoginUserInfo().getMemberId());
-            //濡傛灉閰嶇疆淇敼鍙告満 涓� 鍏ュ弬浜嗘洿鎹㈠悗鍙告満淇℃伅
-            if(approveDTO.getStatus()==Constants.TWO&&Constants.equalsInteger(approve.getDriverParam(),Constants.ONE)){
-                CarDriver carDriver = carDriverMapper.selectById(approveDTO.getDriverId());
-                if(Objects.isNull(carDriver)){
-                    throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鍙告満淇℃伅");
-                }
-                carUseBook.setDriverId(carDriver.getId());
-            }
-            carUseBookMapper.updateById(carUseBook);
+            this.updDriver(approveDTO,approve,true);
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
             //TODO  鐗╂祦杞﹂绾�
 
         }else{
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        if(Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)){
+            //澶勭悊閫氳繃 鏄剧ず鎵�鏈夌殑鎶勯�佽褰�
+            approveMapper.update(null,new UpdateWrapper<Approve>().lambda().set(Approve::getStatus,Constants.TWO)
+                    .set(Approve::getCheckDate,new Date())
+                    .eq(Approve::getObjId,approve.getObjId())
+                    .eq(Approve::getObjType,approve.getObjType())
+                    .eq(Approve::getType,Constants.ONE)
+            );
+        }
+    }
+
+
+    public void updDriver(ApproveDTO approveDTO,Approve approve,Boolean dealBusinessBean){
+        // 甯傚唴澶栫敤杞︾敵璇�
+        CarUseBook carUseBook = carUseBookMapper.selectById(approveDTO.getObjId());
+        if(Objects.isNull(carUseBook)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鐢ㄨ溅璁板綍");
+        }
+        if(dealBusinessBean){
+            carUseBook.setStatus(approveDTO.getStatus());
+        }else{
+            if(Constants.equalsInteger(approveDTO.getStatus(),Constants.TWO)){
+                carUseBook.setStatus(Constants.ONE);
+            }
+        }
+        carUseBook.setEditDate(new Date());
+        carUseBook.setEditor(approveDTO.getLoginUserInfo().getMemberId());
+        //濡傛灉閰嶇疆淇敼鍙告満 涓� 鍏ュ弬浜嗘洿鎹㈠悗鍙告満淇℃伅
+        if(approveDTO.getStatus()==Constants.TWO&&Constants.equalsInteger(approve.getDriverParam(),Constants.ONE)){
+            CarDriver carDriver = carDriverMapper.selectOne(new QueryWrapper<CarDriver>().lambda()
+                    .eq(CarDriver::getIsdeleted,Constants.ZERO)
+                    .eq(CarDriver::getStatus,Constants.ZERO)
+                    .eq(CarDriver::getMemberId,approveDTO.getDriverId()));
+            if(Objects.isNull(carDriver)){
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鍙告満淇℃伅");
+            }
+             carUseBook.setDriverId(carDriver.getMemberId());
+        }
+        carUseBookMapper.updateById(carUseBook);
     }
 
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
index 7b9bfbb..f1b227b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java
@@ -9,10 +9,8 @@
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.ApproveParamMapper;
 import com.doumee.dao.business.ApproveTemplMapper;
-import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.join.MemberJoinMapper;
 import com.doumee.dao.business.model.*;
-import com.doumee.dao.business.vo.ApproveParamDataVO;
 import com.doumee.service.business.ApproveTemplService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -28,8 +26,6 @@
 
 import java.util.Date;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * 瀹℃壒妯$増淇℃伅琛⊿ervice瀹炵幇
@@ -94,7 +90,7 @@
             approveParamMapper.delete(new UpdateWrapper<ApproveParam>().lambda()
                     .eq(ApproveParam::getTemplId,template.getId()));
             //鎵归噺鎻掑叆鏂扮殑閰嶇疆
-            approveParamMapper.insertBatchSomeColumn(model.getParamList());
+            approveParamMapper.insert(model.getParamList());
         }
         return 1;
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
index 25eeca6..cffa394 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java
@@ -29,6 +29,7 @@
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
@@ -75,13 +76,13 @@
 
 
     @Override
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
     public Integer create(CarUseBook carUseBook)  throws Exception {
         if(Objects.isNull(carUseBook)
             || Objects.isNull(carUseBook.getCarId())
                 || Objects.isNull(carUseBook.getStartTime())
                 || Objects.isNull(carUseBook.getEndTime())
                 || Objects.isNull(carUseBook.getCreator())
-                || Objects.isNull(carUseBook.getMemberId())
                 || Objects.isNull(carUseBook.getPlanUseDate())
                 || Objects.isNull(carUseBook.getType())
                 || StringUtils.isEmpty(carUseBook.getMemberIds())
@@ -90,6 +91,9 @@
                 || StringUtils.isEmpty(carUseBook.getAddr())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        if(Objects.nonNull(carUseBook.getCreator())&&Objects.isNull(carUseBook.getMemberId())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"褰撳墠鐧诲綍鐢ㄦ埛鏃犳硶杩涜璇ユ搷浣�!");
         }
         if(carUseBook.getEndTime().getTime()<=System.currentTimeMillis()){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"閫夋嫨鏃ユ湡寮傚父[缁撴潫鏃堕棿灏忎簬褰撳墠鏃堕棿],璇峰埛鏂伴噸璇�");
@@ -106,6 +110,7 @@
         if(Objects.isNull(cars)||!cars.getType().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"杞﹁締淇℃伅寮傚父");
         }
+        carUseBook.setCarCode(cars.getCode());
         //鏍规嵁杞﹁締鏌ヨ鍙告満淇℃伅
         CarDriver carDriver = carDriverMapper.selectOne(new QueryWrapper<CarDriver>().lambda()
                 .eq(CarDriver::getCarId,cars.getId())
@@ -181,6 +186,9 @@
                 .eq(CarUseBook::getId,id)
                 .last("limit 1"  );
         CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
+        if(Objects.isNull(model)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
         ApproveDataVO approveDataVO = approveService.arrangeApprovedData(id,
                 Constants.equalsInteger(model.getType(),Constants.ZERO)?3:4,
                 memberId);
@@ -204,6 +212,7 @@
                 }
             }
             approve.setCheckInfo(model.getCancelInfo());
+            approve.setCheckDate(model.getCancelTime());
             approveList.add(approve);
         }
         model.setApproveDateVO(approveDataVO);
@@ -368,28 +377,29 @@
                         .or().like(CarUseBook::getEndTime,dateDay)
                         .or().apply("  START_TIME < '"+dateDay+" 00:00:00' and END_TIME  > '"+dateDay+" 23:59:59'  "))
         );
-        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)){
-            for (DateIntervalVO dateIntervalVO:dateIntervalVOList) {
-                //鍒ゆ柇鏃堕棿鏄惁澶т簬褰撳墠
-                if(DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime()<=System.currentTimeMillis()){
-                    dateIntervalVO.setIsUse(Constants.ONE);
-                    continue;
-                }
+        for (DateIntervalVO dateIntervalVO:dateIntervalVOList) {
+            if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(carUseBookList)){
                 for (CarUseBook i:carUseBookList  ) {
                     if(
-                        (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() <= i.getStartTime().getTime() &&
-                                i.getStartTime().getTime() < DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
-                        ||
-                        (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() < i.getEndTime().getTime() &&
-                                i.getEndTime().getTime() <= DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
-                        ||
-                        (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() >= i.getStartTime().getTime() &&
-                                        DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime() <= i.getEndTime().getTime())
+                            (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() <= i.getStartTime().getTime() &&
+                                    i.getStartTime().getTime() < DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
+                                    ||
+                                    (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() < i.getEndTime().getTime() &&
+                                            i.getEndTime().getTime() <= DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime())
+                                    ||
+                                    (DateUtil.getDateFromString(dateIntervalVO.getStartTime()).getTime() >= i.getStartTime().getTime() &&
+                                            DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime() <= i.getEndTime().getTime())
                     ){
+                        dateIntervalVO.setCarUseBookId(i.getId());
                         dateIntervalVO.setIsUse(Constants.ONE);
                         break;
                     }
                 }
+            }
+            //鍒ゆ柇鏃堕棿鏄惁澶т簬褰撳墠
+            if(Constants.equalsInteger(dateIntervalVO.getIsUse(),Constants.ZERO)  && DateUtil.getDateFromString(dateIntervalVO.getEndTime()).getTime()<=System.currentTimeMillis()){
+                dateIntervalVO.setIsUse(Constants.ONE);
+                continue;
             }
         }
         return dateIntervalVOList;
@@ -433,7 +443,7 @@
        carUseBook.setCancelTime(new Date());
        carUseBook.setCancelStatus(Constants.ONE);
        carUseBook.setStatus(Constants.FOUR);
-       carUseBook.setCancelUser(loginUserInfo.getId());
+       carUseBook.setCancelUser(loginUserInfo.getMemberId());
        carUseBook.setCancelType(Constants.ONE);
        if(loginUserInfo.getId().equals(carUseBook.getCreator())){
            carUseBook.setCancelType(Constants.ZERO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
index 99d30ff..696ce97 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerParamServiceImpl.java
@@ -47,6 +47,13 @@
         if(loginUserInfo == null){
             loginUserInfo = model.getLoginUserInfo();
         }
+        if(hiddenDangerParamMapper.selectCount(new QueryWrapper<HiddenDangerParam>().lambda()
+                .eq(HiddenDangerParam::getType,model.getType())
+                .eq(HiddenDangerParam::getName,model.getName())
+                .eq(HiddenDangerParam::getIsdeleted,Constants.ZERO)
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ュ悕绉板凡瀛樺湪!");
+        }
         if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
             //濡傛灉鏄尯鍩熼厤缃�
             List<Integer> ids = model.getMemberIdList();
@@ -122,6 +129,14 @@
         if(hiddenDangerParam == null || Constants.equalsInteger(hiddenDangerParam.getIsdeleted(),Constants.ONE)){
             throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝璇ラ厤缃俊鎭笉瀛樺湪锛岃杩斿洖鍒锋柊椤甸潰閲嶈瘯锛�");
         }
+        if(hiddenDangerParamMapper.selectCount(new QueryWrapper<HiddenDangerParam>().lambda()
+                .eq(HiddenDangerParam::getType,model.getType())
+                .eq(HiddenDangerParam::getName,model.getName())
+                .eq(HiddenDangerParam::getIsdeleted,Constants.ZERO)
+                .ne(HiddenDangerParam::getId,model.getId())
+        )>Constants.ZERO){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀵逛笉璧凤紝璇ュ悕绉板凡瀛樺湪!");
+        }
         if(Constants.equalsInteger(hiddenDangerParam.getType(),Constants.ZERO)){
             //濡傛灉鏄尯鍩熼厤缃�,鏍¢獙瀹夊叏鍛樹俊鎭槸鍚︽纭�
             List<Integer> ids =model.getMemberIdList();
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
index f0024a9..3d3bcbe 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -84,6 +84,7 @@
         if(Objects.isNull(hiddenDangerParam)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌闅愭偅鍖哄煙");
         }
+
         HiddenDangerParam hiddenDangerCate = hiddenDangerParamMapper.selectById(hiddenDanger.getCateId());
         if(Objects.isNull(hiddenDangerCate)){
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌闅愭偅绫诲瀷");
@@ -143,7 +144,7 @@
         createNotices.setSendacopy(Constants.ZERO);
         createNotices.setParam2("0");
         createNotices.setParam3(hiddenDanger.getLoginUserInfo().getMemberId().toString());
-        createNotices.setInfo("澶勭悊涓�");
+        createNotices.setInfo("寰� "+member.getName()+" 澶勭悊");
         noticesJoinMapper.insert(createNotices);
 
         //瀛樺偍澶勭悊浜虹殑閫氱煡娑堟伅
@@ -162,6 +163,7 @@
         notices.setStatus(Constants.ZERO);
         notices.setSendacopy(Constants.ZERO);
         notices.setReaded(Constants.ZERO);
+        notices.setInfo("寰� "+member.getName()+" 澶勭悊");
         noticesJoinMapper.insert(notices);
 
 
@@ -317,6 +319,7 @@
                 .eq(pageWrap.getModel().getCheckInfo() != null, HiddenDanger::getCheckInfo, pageWrap.getModel().getCheckInfo())
                 .eq(pageWrap.getModel().getCheckUserId() != null, HiddenDanger::getCheckUserId, pageWrap.getModel().getCheckUserId())
                 .eq(pageWrap.getModel().getAreaName() != null, HiddenDanger::getAreaName, pageWrap.getModel().getAreaName())
+                .like(pageWrap.getModel().getCompanyName() != null,"t4.company_name_path",pageWrap.getModel().getCompanyName())
 
                 .and(StringUtils.isNotBlank(pageWrap.getModel().getMemberName()), ms->ms.like(Member::getName,pageWrap.getModel().getMemberName())
                         .or().like(Member::getPhone,pageWrap.getModel().getMemberName()))
@@ -448,7 +451,7 @@
             }
         }
         if(fileList.size()>0){
-            multifileMapper.insertBatchSomeColumn(fileList);
+            multifileMapper.insert(fileList);
         }
     }
 
@@ -509,12 +512,15 @@
             BeanUtils.copyProperties(notices,newNotices);
             newNotices.setId(null);
             newNotices.setCreateDate(new Date());
-            newNotices.setParam2("3");
+            newNotices.setParam2("0");
             newNotices.setUserId(hiddenDanger.getCheckUserId());
+            newNotices.setInfo("寰� "+member.getName()+" 澶勭悊");
             noticesJoinMapper.insert(newNotices);
             notices.setStatus(Constants.ONE);
+            notices.setParam2("3");
             notices.setEditDate(new Date());
             notices.setReaded(Constants.ONE);
+            notices.setInfo("寰� "+member.getName()+" 澶勭悊");
             noticesJoinMapper.updateById(notices);
         }
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 57e507d..398ac8f 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,6 +2,7 @@
 
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.PhoneUtil;
+import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -9,8 +10,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.DataSyncConfig;
-import com.doumee.config.Jwt.JwtPayLoad;
-import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.annotation.excel.ExcelImporter;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -64,10 +63,12 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.util.Date;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -128,6 +129,9 @@
     @Lazy
     private SmsEmailService smsEmailService;
 
+    @Autowired
+    private SystemLoginService systemLoginService; 
+    
     @Value("${debug_model}")
     private Boolean isDebug;
     @Override
@@ -740,7 +744,7 @@
                     memberRole.setRoleId(deviceRole.getId());
                     memberRoleList.add(memberRole);
                 }
-                memberRoleMapper.insertBatchSomeColumn(memberRoleList);
+                memberRoleMapper.insert(memberRoleList);
             }
             member.setRoleId(ids);
             return  1;
@@ -1104,7 +1108,9 @@
         if(StringUtils.isNotBlank(member.getName())){
             queryWrapper.like(Member::getName,member.getName());
         }
-
+        if(Objects.nonNull(member.getCompanyType())){
+            queryWrapper.eq(Company::getType,member.getCompanyType());
+        }
         if(null != member.getType()) {
             queryWrapper.eq(Member::getType,member.getType());
         }
@@ -1112,6 +1118,7 @@
             queryWrapper.eq(Member::getCompanyId,member.getCompanyId());
         }
         queryWrapper.eq(Member::getIsdeleted,Constants.ZERO);
+        queryWrapper.eq(Member::getWorkStatus,Constants.ZERO);
         List<Member> list =  memberJoinMapper.selectJoinList(Member.class,queryWrapper);
 //        if(list!=null){
 //            for(Member m : list){
@@ -1551,7 +1558,7 @@
                         list.add(model);
                     }
                     //瀵煎叆鏂板鐨勬巿鏉冧俊鎭�
-                    empowerMapper.insertBatchSomeColumn(list);
+                    empowerMapper.insert(list);
                 }
             }
         }
@@ -1621,7 +1628,10 @@
      * @return
      */
     @Override
-    public WxAuthorizeVO wxAuthorize(String code){
+    public WxAuthorizeVO wxAuthorize(String code, Integer source){
+        if(StringUtils.isBlank(code)||Objects.isNull(source)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
         String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode();
         String appSecret = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode();
         String getTokenUrl = WXConstant.GET_USER_INFO_URL.replace("CODE", code)
@@ -1640,6 +1650,7 @@
                 .selectAs(Company::getName,Member::getCompanyName)
                 .leftJoin(Company.class,Company::getId,Member::getCompanyId)
                 .eq(Member::getOpenid,openId)
+                .eq(Member::getType,source)
                 .eq(Member::getIsdeleted,Constants.ZERO)
                 .orderByDesc(Member::getCreateDate)
                 .last(" limit 1 ")
@@ -1658,12 +1669,16 @@
             String prefixUrl = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                     systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
             member.setPrefixUrl(prefixUrl);
-//            JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
-//            String token = JwtTokenUtil.generateToken(payLoad);
-//            //瀛樺偍token鑷硆edis
-//            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
-//            wxAuthorizeVO.setToken(token);
             wxAuthorizeVO.setMember(member);
+            //鍙告満 涓� 鍐呴儴浜哄憳 鎻愪緵token
+            if(Constants.equalsInteger(source,Constants.ZERO)||Constants.equalsInteger(source,Constants.TWO)){
+                SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda().eq(SystemUser::getMemberId,member.getId())
+                        .eq(SystemUser::getStatus,Constants.ZERO).last(" limit 1 "));
+                if(Objects.nonNull(systemUser)){
+                    String token = systemLoginService.loginByUserId(systemUser.getId());
+                    wxAuthorizeVO.setToken(token);
+                }
+            }
         }
         return wxAuthorizeVO;
     }
@@ -1734,51 +1749,6 @@
 
 
 
-    @Override
-    public WxAuthorizeVO accountLogin(AccountLoginDTO accountLoginDTO){
-        System.out.println(DESUtil.decrypt(Constants.EDS_PWD,"eIaPD5AR5DBuTBE9MW14QRG07IDKXCdh"));
-        if(accountLoginDTO.getAccount().length()!=18
-            //&&!IdcardUtil.isValidCard(accountLoginDTO.getAccount())
-        ){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
-        }
-        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
-                .eq(Member::getIdcardNo, DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getAccount()))
-                .ne(Member::getType,Constants.memberType.visitor)
-        );
-        if(Objects.isNull(member)){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鐢ㄦ埛,璇疯仈绯荤鐞嗗憳");
-        }
-        if(member.getIsdeleted() == Constants.ONE){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
-        }
-        if(member.getStatus() != Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐢ㄦ埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
-        }
-        String md5Password = DESUtil.encrypt(Constants.EDS_PWD, accountLoginDTO.getPassword());
-        if(!md5Password.equals(member.getPassward())){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璐︽埛瀵嗙爜閿欒!");
-        }
-        if(StringUtils.isNotBlank(accountLoginDTO.getOpenId())){
-            //鍏堟竻绌哄師鏈夎瀹㈢殑openid缁戝畾鍏崇郴
-            memberMapper.update(null, new UpdateWrapper<Member>().lambda()
-                    .ne(Member::getType,Constants.memberType.visitor)
-                    .eq(Member::getOpenid,accountLoginDTO.getOpenId())
-                    .set(Member::getOpenid,null)
-            );
-            //鏇存柊褰撳墠鐧诲綍鐢ㄦ埛 openId
-            member.setOpenid(accountLoginDTO.getOpenId());
-            memberMapper.updateById(member);
-        }
-        WxAuthorizeVO wxAuthorizeVO = new WxAuthorizeVO();
-        JwtPayLoad payLoad = new JwtPayLoad(Integer.toString(member.getId()));
-        String token = JwtTokenUtil.generateToken(payLoad);
-        //瀛樺偍token鑷硆edis
-        RedisUtil.addObject(redisTemplate,Constants.RedisKeys.INTERNAL_TOKEN+"_"+member.getId(),token,Constants.RedisKeys.EXPIRE_TIME);
-        wxAuthorizeVO.setToken(token);
-        return wxAuthorizeVO;
-    }
-
 
 
     @Override
@@ -1787,7 +1757,7 @@
         List<Member> memberList = memberMapper.selectList(new QueryWrapper<Member>().lambda().eq(Member::getIsdeleted,Constants.ZERO));
         if(CollectionUtils.isNotEmpty(memberList)){
             stagingHeadVO.setWorkerCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.internal)).count());
-            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.lw_visitor)).count());
+            stagingHeadVO.setLwCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.driver)).count());
             stagingHeadVO.setVisitorCount(memberList.stream().filter(m->m.getType().equals(Constants.memberType.visitor)).count());
         }
         //鍦ㄥ満杞﹁締
@@ -1811,7 +1781,7 @@
                 new MPJLambdaWrapper<Member>()
                         .select("count(1) as memberCount, t1.name as companyName")
                         .leftJoin(Company.class,Company::getId,Member::getCompanyId)
-                        .eq(Member::getType,Constants.memberType.lw_visitor)
+                        .eq(Member::getType,Constants.memberType.driver)
                         .groupBy(Company::getId,Company::getName)
         );
         List<Map<String,Object>> retentionMaps = retentionJoinMapper.selectMaps(new MPJLambdaWrapper<Retention>()
@@ -1886,7 +1856,7 @@
                     throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"瀵逛笉璧凤紝鍛樺伐淇℃伅銆�"+insert.getName()+"銆戝悓姝ュ畨闃插钩鍙板け璐ワ紝璇风◢鍚庨噸璇曪紒");
                 }
             }
-            memberMapper.insertBatchSomeColumn(newList);
+            memberMapper.insert(newList);
             List<SystemUser> userList = new ArrayList<>();
             for(Member insert: newList){
                 //鍒涘缓绯荤粺鐧婚檰璐﹀彿锛堥粯璁ゆ棤浠讳綍瑙掕壊锛�
@@ -1896,7 +1866,7 @@
                 }
             }
             if(userList.size()>0){
-                systemUserMapper.insertBatchSomeColumn(userList);
+                systemUserMapper.insert(userList);
             }
         }catch (Exception e){
             //濡傛灉鍙戠敓寮傚父锛屽垹闄ゅ凡缁忓垱寤虹殑浜哄憳淇℃伅
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java
index e2b08a6..40f01f6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ParkBookServiceImpl.java
@@ -222,7 +222,7 @@
                 parkBook.setRemark("寰呭悓姝ュ畨闃插钩鍙�");
                 parkBookList.add(parkBook);
             }
-            parkBookMapper.insertBatchSomeColumn(parkBookList);
+            parkBookMapper.insert(parkBookList);
         }
         return 0;
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
index fc07100..e1cb423 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformInterfaceLogServiceImpl.java
@@ -1,9 +1,12 @@
 package com.doumee.service.business.impl;
 
+import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.PlatformInterfaceLogMapper;
+import com.doumee.dao.business.model.InterfaceLog;
 import com.doumee.dao.business.model.PlatformInterfaceLog;
 import com.doumee.service.business.PlatformInterfaceLogService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -125,4 +128,17 @@
         QueryWrapper<PlatformInterfaceLog> wrapper = new QueryWrapper<>(platformInterfaceLog);
         return platformInterfaceLogMapper.selectCount(wrapper);
     }
+
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
+
+    @Override
+    public void clearThreeMonthLog() {
+        int days =15;
+        try {
+            days = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HK_LOG_DEL_DAYS_LIMIT).getCode());
+        }catch (Exception e){}
+        platformInterfaceLogMapper.delete(new UpdateWrapper<PlatformInterfaceLog>().lambda()
+                .apply("to_days(create_date)+"+days+" < to_days(now())") );
+    }
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
index 0392a44..7c16f43 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ProblemLogServiceImpl.java
@@ -183,7 +183,7 @@
             if(Objects.isNull(member)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鍔冲姟浜哄憳");
             }
-            if(!member.getType().equals(Constants.memberType.lw_visitor)){
+            if(!member.getType().equals(Constants.memberType.driver)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炲姵鍔′汉鍛樼被鍨嬶紝绛旈澶辫触");
             }
             if(!member.getStatus().equals(Constants.ZERO)){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/TrainTimeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/TrainTimeServiceImpl.java
index aa6d84b..ee00da0 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/TrainTimeServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/TrainTimeServiceImpl.java
@@ -231,7 +231,7 @@
             if(newList == null || newList.size() ==0){
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏈夋晥鏁版嵁涓虹┖锛�");
             }
-            trainTimeMapper.insertBatchSomeColumn(newList);
+            trainTimeMapper.insert(newList);
             return "瀵煎叆鎴愬姛";
         }catch (BusinessException e){
             throw e;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
index e21b168..e34a01b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitReasonServiceImpl.java
@@ -47,6 +47,7 @@
         update.setEditor(userInfo.getId());
         update.setEditDate(new Date());
         update.setIsdeleted(Constants.ONE);
+        update.setId(id);
         visitReasonMapper.updateById(update);
 
     }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index a6e1338..af5ee41 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -170,7 +170,7 @@
                 }
                 visits.setWithUserList(visitsList);
             }
-            this.createFk(visits,true);
+            this.createFk(visits,true,Constants.ONE);
     }
 
     @Transactional(propagation = Propagation.NOT_SUPPORTED)
@@ -197,16 +197,15 @@
      */
     @Override
     @Transactional(rollbackFor = {BusinessException.class,Exception.class})
-    public Integer createFk(Visits visits,Boolean isERP) {
+    public Integer createFk(Visits visits,Boolean isERP,Integer source) {
         isValidBaseParam(visits);
         //妫�鏌ユ槸鍚﹀繀椤荤瓟棰橈紝骞朵笖绗﹀悎绛旈瑕佹眰
-        ProblemLog problemLog = isValidProblemLog(visits);
+        ProblemLog problemLog = isValidProblemLog(visits,source);
         //鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅
         getHkDeviceRoles(visits,isERP);
         //妫�楠屾嫓璁夸汉鏄惁鍚堟硶
         Member visitMember = isValideVisitedUser(visits.getReceptMemberId());
         if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType())&&visits.getIdcardNo().length()!=18
-//            &&!IdcardUtil.isValidCard(visits.getIdcardNo())
         ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
         }
@@ -454,7 +453,7 @@
                 approve.setObjId(visitId);
                 approveList.add(approve);
             }
-            approveMapper.insertBatchSomeColumn(approveList);
+            approveMapper.insert(approveList);
         }
     }
 
@@ -481,7 +480,7 @@
                 approve.setObjId(visitId);
                 approveList.add(approve);
             }
-            approveMapper.insertBatchSomeColumn(approveList);
+            approveMapper.insert(approveList);
         }
     }
 
@@ -634,12 +633,16 @@
         }else if(visits.getType().equals(Constants.ONE) && StringUtils.isBlank(visits.getConstructionReason())){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏈~鍐欐柦宸ヤ簨鐢憋紒");
         }
-        if(visits.getEndtime().getTime() < System.currentTimeMillis()){
-            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍏ュ巶鏃堕棿蹇呴』澶т簬褰撳墠鏃堕棿锛�");//
-        }
         if(visits.getEndtime().getTime() <= visits.getStarttime().getTime()){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绂诲巶鏃堕棿蹇呴』澶т簬鍏ュ巶鏃堕棿锛�");//
         }
+        if(visits.getEndtime().getTime() <= System.currentTimeMillis()){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鍏ュ巶鏃堕棿蹇呴』澶т簬褰撳墠鏃堕棿锛�");//
+        }
+        if(!DateUtil.getDateLong(visits.getEndtime()).equals(DateUtil.getDateLong(visits.getStarttime()))){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝棰勭害鏃ユ湡涓嶅彲浠ヨ法澶╋紒");
+        };
+
         if(visits.getSourceType().equals(Constants.ZERO)){
             String code = systemDictDataBiz.queryByCode(Constants.VISIT_CONFIG,Constants.VALIDATE_VISIT).getCode();
             int codenum =0;
@@ -718,7 +721,7 @@
                 v.setSourceType(visits.getSourceType());
             }
             //鎵归噺鎻掑叆鏁版嵁
-            visitsMapper.insertBatchSomeColumn(visits.getWithUserList());
+            visitsMapper.insert(visits.getWithUserList());
         }
     }
 
@@ -883,11 +886,10 @@
         }else{
             if(!Constants.equalsInteger(Constants.ZERO,member.getStatus() )){
                 //濡傛灉鐢ㄦ埛鐘舵�佸紓甯革紝鍒欐彁绀�
-                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿銆�"+cardno+"銆戣绂佹璁块棶鐢宠锛屽鏈夌枒闂紝璇疯仈绯绘偍鐨勬嫓璁夸汉杩涜鏍稿疄");
+                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝銆�"+member.getName()+"銆戣韩浠借瘉鍙枫��"+cardno+"銆戝湪榛戝悕鍗曞唴锛屾棤娉曠敵璇疯繘鍏ュ洯鍖�");
             }
             //鏍告煡棰勭害鐢ㄦ埛鏄惁瀛樺湪鏈绂荤殑棰勭害璁板綍
 //            isExsitNoOutVisisRecord(member);
-
             member.setFaceImg(visits.getFaceImg());
             member.setImgurl(StringUtils.isNotBlank(visits.getImgurl())?visits.getImgurl():null);
             member.setEditDate(visits.getCreateDate());
@@ -993,7 +995,16 @@
         return  member;
     }
 
-    private ProblemLog isValidProblemLog(Visits visits) {
+    /**
+     * 鏄惁闇�瑕佺瓟棰�
+     * @param visits
+     * @param source
+     * @return
+     */
+    private ProblemLog isValidProblemLog(Visits visits,Integer source) {
+        if(!Constants.equalsInteger(source,Constants.ZERO)){
+            return null;
+        }
         String required = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROBLEM_VISIT_REQUIRED).getCode();
         if(StringUtils.equals(required,Constants.ONE+"")&&visits.getSourceType()==Constants.ZERO&&!visits.getType().equals(Constants.TWO)){
             //濡傛灉蹇呴』绛旈锛屾煡鎵剧瓟棰樿褰�
@@ -1158,8 +1169,10 @@
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
 
         queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
-        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Visits::getType,pageWrap.getModel().getType());
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType())&&Constants.equalsInteger(pageWrap.getModel().getType(),Constants.TWO),Visits::getType,pageWrap.getModel().getType());
+        queryWrapper.ne(Objects.nonNull(pageWrap.getModel().getType())&&!Constants.equalsInteger(pageWrap.getModel().getType(),Constants.TWO),Visits::getType,Constants.TWO);
         queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getOpenid()),Visits::getOpenid,pageWrap.getModel().getOpenid());
+        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCarNos()),Visits::getCarNos,pageWrap.getModel().getCarNos());
 //        queryWrapper.eq(StringUtils.isBlank(pageWrap.getModel().getOpenid()),"1","2");
         queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getName()),ms->ms.like(Visits::getName,pageWrap.getModel().getName())
                 .or().like(Visits::getPhone,pageWrap.getModel().getName()))
@@ -1168,6 +1181,7 @@
                 .eq(Objects.nonNull(pageWrap.getModel().getStatus()),Visits::getStatus,pageWrap.getModel().getStatus());
         queryWrapper.isNull(Visits::getParentId);
         queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getMemberId()),Visits::getMemberId,pageWrap.getModel().getMemberId());
+        queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getReceptMemberId()),Visits::getReceptMemberId,pageWrap.getModel().getReceptMemberId());
         queryWrapper.orderByDesc(Visits::getCreateDate);
         IPage<Visits> result = visitsJoinMapper.selectJoinPage(page, Visits.class,queryWrapper);
 
@@ -1243,12 +1257,14 @@
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌琚鍛樺伐淇℃伅");
         }
         VisitDetailVO visitDetailVO = new VisitDetailVO();
+        visitDetailVO.setCreateTime(visits.getCreateDate());
         visitDetailVO.setStatus(visits.getStatus());
         visitDetailVO.setCarNos(visits.getCarNos());
         visitDetailVO.setPhone(visits.getPhone());
         visitDetailVO.setVisitUserName(member.getName());
         visitDetailVO.setVisitReason(visits.getReason());
         visitDetailVO.setQrcode(visits.getQrcode());
+        visitDetailVO.setIdcardType(visits.getIdcardType());
         visitDetailVO.setVisitTime(DateUtil.DateToStr(visits.getStarttime(),"yyyy-MM-dd HH:mm") + " 鑷� " + DateUtil.DateToStr(visits.getEndtime(),"yyyy-MM-dd HH:mm") );
         //琚浜哄憳閮ㄩ棬
         Company company = companyMapper.selectById(member.getCompanyId());
@@ -1262,6 +1278,7 @@
         visitDetailVO.setConstructionReason(visits.getConstructionReason());
         visitDetailVO.setImgUrl(visits.getImgurl());
         visitDetailVO.setIdCardDecode(visits.getIdcardDecode());
+        visitDetailVO.setFaceImg(visits.getFaceImg());
         visitDetailVO.setPrefix(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                 systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode());
         if(StringUtils.isNotBlank(visits.getDoors())){
@@ -1281,13 +1298,13 @@
                 .eq(Visits::getParentId,id)));
 
 
-        if(Objects.nonNull(memberId)){
+//        if(Objects.nonNull(memberId)){
             visitDetailVO.setApproveDateVO(
                     approveService.arrangeApprovedData(id,
                             visits.getType(),
                             memberId)
             );
-        }
+//        }
         return visitDetailVO;
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
index ebaf70d..92901c9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java
@@ -7,8 +7,6 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.config.DataSyncConfig;
-import com.doumee.config.Jwt.JwtPayLoad;
-import com.doumee.config.Jwt.JwtTokenUtil;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.erp.ErpConstants;
 import com.doumee.core.erp.ErpTool;
@@ -153,7 +151,7 @@
             List<Company>  allList = companyMapper.selectList(new QueryWrapper<Company>().lambda().eq(Company::getType,Constants.ONE));
             dealCompanyChangeList(list,addList,updateList,delIds,allList);
             if(addList.size()>0){
-                companyMapper.insertBatchSomeColumn(addList);
+                companyMapper.insert(addList);
             }
             if(updateList.size()>0){
                 for(Company c : updateList){
@@ -306,7 +304,7 @@
                     .eq(Member::getType, Constants.memberType.internal));
             dealUserChangeList(list,addList,updateList,delList,allList,param);
             if(addList.size()>0){
-                memberMapper.insertBatchSomeColumn(addList);
+                memberMapper.insert(addList);
                /* for (Member member:addList) {
                     dealRoleEmpower(member );
                 }*/
@@ -474,31 +472,30 @@
         return  false;
     }
 
-    @Override
-    public AccessTokenResponse createERPToken(String accessKey, String accessSecret){
-        AccessTokenResponse result = new AccessTokenResponse();
-        try{
-            String erpAccessKey = systemDictDataBiz.queryByCode(Constants.ERP_CONFIG,Constants.ERP_ACCESS_KEY).getCode();
-            String erpAccessSecret = systemDictDataBiz.queryByCode(Constants.ERP_CONFIG,Constants.ERP_ACCESS_SECRET).getCode();
-            if(!(accessKey.equals(erpAccessKey)&&erpAccessSecret.equals(accessSecret))){
-                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绉橀挜鍖归厤澶辫触");
-            }
-            JwtPayLoad payLoad = new JwtPayLoad(erpAccessKey+"-"+erpAccessSecret);
-            String token = JwtTokenUtil.generateToken(payLoad);
-            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.ERP_TOKEN,token,Constants.RedisKeys.EXPIRE_TIME);
-            result.setToken(token);
-            result.setExpireTime(Constants.RedisKeys.EXPIRE_TIME);
-            return result;
-        }catch (BusinessException e){
-            throw e;
-        }finally {
-            Map<String,String> param = new HashMap<>();
-            param.put("accessKey",accessKey);
-            param.put("accessSecret",accessSecret);
-            saveInterfaceLog(param,"/visitBiz/accesstoken",JSONObject.toJSONString(result),Constants.ZERO);
-        }
-
-    }
+//    @Override
+//    public AccessTokenResponse createERPToken(String accessKey, String accessSecret){
+//        AccessTokenResponse result = new AccessTokenResponse();
+//        try{
+//            String erpAccessKey = systemDictDataBiz.queryByCode(Constants.ERP_CONFIG,Constants.ERP_ACCESS_KEY).getCode();
+//            String erpAccessSecret = systemDictDataBiz.queryByCode(Constants.ERP_CONFIG,Constants.ERP_ACCESS_SECRET).getCode();
+//            if(!(accessKey.equals(erpAccessKey)&&erpAccessSecret.equals(accessSecret))){
+//                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"绉橀挜鍖归厤澶辫触");
+//
+//            String token = JwtTokenUtil.generateToken(payLoad);
+//            RedisUtil.addObject(redisTemplate,Constants.RedisKeys.ERP_TOKEN,token,Constants.RedisKeys.EXPIRE_TIME);
+//            result.setToken(token);
+//            result.setExpireTime(Constants.RedisKeys.EXPIRE_TIME);
+//            return result;
+//        }catch (BusinessException e){
+//            throw e;
+//        }finally {
+//            Map<String,String> param = new HashMap<>();
+//            param.put("accessKey",accessKey);
+//            param.put("accessSecret",accessSecret);
+//            saveInterfaceLog(param,"/visitBiz/accesstoken",JSONObject.toJSONString(result),Constants.ZERO);
+//        }
+//
+//    }
 
     /**
      * 闂ㄧ缁勫叏閲忔帴鍙�
@@ -926,7 +923,7 @@
                 }
             }
             if(memberCardList.size()>0){
-                memberCardMapper.insertBatchSomeColumn(memberCardList);
+                memberCardMapper.insert(memberCardList);
             }
         }
     }
@@ -1010,7 +1007,7 @@
                         parkBook.setRemark("寰呭悓姝ュ畨闃插钩鍙�");
                         parkBookList.add(parkBook);
                     }
-                    parkBookMapper.insertBatchSomeColumn(parkBookList);
+                    parkBookMapper.insert(parkBookList);
                 }else{
                     throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝鍋滆溅搴撲俊鎭笉瀛樺湪锛屾巿鏉冨け璐�");
                 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
index 0268516..4e05b11 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDeviceServiceImpl.java
@@ -71,7 +71,7 @@
                 }
             }
             if(addList.size()>0){
-                deviceMapper.insertBatchSomeColumn(addList);
+                deviceMapper.insert(addList);
             }
             if(editList.size()>0){
                 for(Device d : editList){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
index cd1be6c..334dce7 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncDoorsServiceImpl.java
@@ -88,7 +88,7 @@
                 }
             }
             if(addList.size()>0){
-                deviceMapper.insertBatchSomeColumn(addList);
+                deviceMapper.insert(addList);
             }
             if(editList.size()>0){
                 for(Device d : editList){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
index b68b0b4..7710cd4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncParkServiceImpl.java
@@ -228,7 +228,7 @@
                 }
             }
             if(addList.size()>0){
-                parksMapper.insertBatchSomeColumn(addList);
+                parksMapper.insert(addList);
             }
             if(editList.size()>0){
                 for(Parks d : editList){
@@ -367,7 +367,7 @@
 
                     List<CarEvent> sublist = allHkList.subList(startIndex, endIndex);
                     if(sublist.size()>0){
-                        carEventMapper.insertBatchSomeColumn(sublist);//鎻掑叆鏂版暟鎹�
+                        carEventMapper.insert(sublist);//鎻掑叆鏂版暟鎹�
                     }
                     startIndex = endIndex;
                     endIndex += sublistSize;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
index 6e23fda..03abcc6 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPrivilegeServiceImpl.java
@@ -96,7 +96,7 @@
                 }
             }
             if(addList.size()>0){
-                DeviceRoleMapper.insertBatchSomeColumn(addList);
+                DeviceRoleMapper.insert(addList);
             }
             if(editList.size()>0){
                 for(DeviceRole d : editList){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
index a68cbb0..e34a2ef 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -99,7 +99,7 @@
             }
             if(list.size()>0){
                 //鎻掑叆闂ㄧ璁板綍
-                deviceEventMapper.insertBatchSomeColumn(list);
+                deviceEventMapper.insert(list);
             }
             if(delRetentionLis.size()>0){
                 //鍏堝垹闄ゅ師鏈夌殑鍦ㄥ満浜哄憳(鍐呴儴浜哄憳锛�
@@ -109,7 +109,7 @@
             }
             if(retentionList.size()>0){
                 //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
-                retentionMapper.insertBatchSomeColumn(retentionList);
+                retentionMapper.insert(retentionList);
             }
             log.error("銆愭捣搴烽棬绂佷簨浠舵帹閫併��========鎴愬姛=======");
         }catch (Exception e) {
@@ -289,7 +289,7 @@
             }
             if(list.size()>0){
                 //鎻掑叆闂ㄧ璁板綍
-                visitEventMapper.insertBatchSomeColumn(list);
+                visitEventMapper.insert(list);
             }
             if(delRetentionLis.size()>0){
                 //鍏堝垹闄ゅ師鏈夌殑鍦ㄥ満浜哄憳(鏅�氳瀹級
@@ -299,7 +299,7 @@
             }
             if(retentionList.size()>0){
                 //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
-                retentionMapper.insertBatchSomeColumn(retentionList);
+                retentionMapper.insert(retentionList);
             }
             log.error("銆愭捣搴疯瀹簨浠舵帹閫併��========鎴愬姛=======");
         }catch (Exception e){
@@ -461,7 +461,7 @@
             }
             if(list.size()>0){
                 //鎻掑叆闂ㄧ璁板綍
-                carEventMapper.insertBatchSomeColumn(list);
+                carEventMapper.insert(list);
             }
             if(delRetentionList.size()>0){
                 //鍏堝垹闄ゅ師鏈夌殑鍦ㄥ満浜哄憳(鍐呴儴浜哄憳锛�
@@ -471,7 +471,7 @@
             }
             if(retentionList.size()>0){
                 //鍐嶆彃鍏ユ渶鏂扮殑鍦ㄥ巶浜哄憳
-                retentionMapper.insertBatchSomeColumn(retentionList);
+                retentionMapper.insert(retentionList);
             }
             log.error("銆愭捣搴峰仠杞﹀満浜嬩欢鎺ㄩ�併��========鎴愬姛=======");
         }catch (Exception e){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
index a8ab55b..09da7f9 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/ferp/HkSyncOrgUserToHKServiceImpl.java
@@ -518,7 +518,7 @@
                         .eq(Empower::getMemberId,member.getId())
                         .eq(Empower::getIsdeleted,Constants.ZERO)
                         .in(Empower::getDeviceId,deviceIds) );
-                empowerMapper.insertBatchSomeColumn(list);
+                empowerMapper.insert(list);
             }
         }
     }
@@ -577,7 +577,7 @@
                     .eq(Empower::getMemberId,member.getId())
                     .eq(Empower::getIsdeleted,Constants.ZERO)
                     .in(Empower::getDeviceId,deviceIds) );
-            empowerMapper.insertBatchSomeColumn(list);
+            empowerMapper.insert(list);
         }
     }
 
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
index df05a04..f471370 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncOrgUserFromHKServiceImpl.java
@@ -101,7 +101,7 @@
                 throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍缁勭粐淇℃伅锛�");
             }
             companyMapper.delete(new UpdateWrapper<>());//娓呯┖鍘熸湁鏁版嵁
-            companyMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+            companyMapper.insert(allHkList);//鎻掑叆鏂版暟鎹�
         }catch (BusinessException e){
             throw  e;
         }catch (Exception e){
@@ -190,7 +190,7 @@
                 throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈悓姝ュ埌浠讳綍缁勭粐淇℃伅锛�");
             }
             memberMapper.delete(new UpdateWrapper<>());//娓呯┖鍘熸湁鏁版嵁
-            memberMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+            memberMapper.insert(allHkList);//鎻掑叆鏂版暟鎹�
         }catch (BusinessException e){
             throw  e;
         }catch (Exception e){
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
index 0ef439e..e4992e8 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVehicleFromHKServiceImpl.java
@@ -99,7 +99,7 @@
             }
             //娓呯┖鍘熸湁鐨勬暟鎹�
             carsMapper.delete(new UpdateWrapper<>());
-            carsMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+            carsMapper.insert(allHkList);//鎻掑叆鏂版暟鎹�
         }catch (BusinessException e){
             throw  e;
         }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
index 4679a06..188e7f4 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/fhk/HkSyncVisitFromHKServiceImpl.java
@@ -108,7 +108,7 @@
                     .ge(Visits::getStarttime,start)
                     .eq(Visits::getType,Constants.ONE)
                     .le(Visits::getStarttime,end));
-            visitsMapper.insertBatchSomeColumn(allHkList);//鎻掑叆鏂版暟鎹�
+            visitsMapper.insert(allHkList);//鎻掑叆鏂版暟鎹�
         }catch (BusinessException e){
             throw  e;
         }
diff --git a/server/visits/openapi/src/main/java/com/doumee/api/web/ApiController.java b/server/visits/openapi/src/main/java/com/doumee/api/web/ApiController.java
index ecceb79..1a02b2a 100644
--- a/server/visits/openapi/src/main/java/com/doumee/api/web/ApiController.java
+++ b/server/visits/openapi/src/main/java/com/doumee/api/web/ApiController.java
@@ -1,6 +1,5 @@
 package com.doumee.api.web;
 
-import com.doumee.config.Jwt.JwtTokenUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
@@ -26,10 +25,10 @@
         return request;
     }
 
-    protected String getToken() {
-        Object obj = this.getRequest().getAttribute(JwtTokenUtil.HEADER_KEY);
-        return obj != null ? obj.toString() : null;
-    }
+//    protected String getToken() {
+//        Object obj = this.getRequest().getAttribute(JwtTokenUtil.HEADER_KEY);
+//        return obj != null ? obj.toString() : null;
+//    }
 
 
 }
diff --git a/server/visits/openapi/src/main/java/com/doumee/api/web/BizResourceController.java b/server/visits/openapi/src/main/java/com/doumee/api/web/BizResourceController.java
index c077a10..bca5a78 100644
--- a/server/visits/openapi/src/main/java/com/doumee/api/web/BizResourceController.java
+++ b/server/visits/openapi/src/main/java/com/doumee/api/web/BizResourceController.java
@@ -39,7 +39,7 @@
 @RestController
 @RequestMapping("/visitbiz")
 @Slf4j
-public class BizResourceController extends ApiController {
+public class BizResourceController{
 
     @Autowired
     private ERPSyncService erpSyncService;
@@ -51,7 +51,7 @@
     private VisitsService visitsService;
 
 
-    @ApiOperation(value = "璋冪敤鍑嵁鑾峰彇鎺ュ彛", notes = "璁垮绔彁渚涳紝渚汦RP绔皟鐢紝鍚慐RP鎻愪緵缁熸帴鍙h皟鐢ㄥ嚟璇�")
+   /* @ApiOperation(value = "璋冪敤鍑嵁鑾峰彇鎺ュ彛", notes = "璁垮绔彁渚涳紝渚汦RP绔皟鐢紝鍚慐RP鎻愪緵缁熸帴鍙h皟鐢ㄥ嚟璇�")
     @GetMapping("/accesstoken")
     @ApiImplicitParams({
             @ApiImplicitParam(paramType = "query", dataType = "String", name = "accessKey", value = "璁块棶key锛岀敱璁垮绔彁渚�", required = true),
@@ -60,7 +60,7 @@
     public ApiResponse<AccessTokenResponse> accesstoken(@RequestParam  String accessKey, @RequestParam  String accessSecret) {
         ApiResponse response = ApiResponse.success(null);
         try {
-            response.setData(erpSyncService.createERPToken(accessKey,accessSecret));
+//            response.setData(erpSyncService.createERPToken(accessKey,accessSecret));
         }catch (BusinessException e){
             response = ApiResponse.failed(e.getCode(), e.getMessage());
         }catch (Exception e){
@@ -317,7 +317,7 @@
         map.put("FTP璧勬簮璁块棶鏄犲皠鍦板潃",
         systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode());
         return  ApiResponse.success(map);
-    }
+    }*/
 
 
 
diff --git a/server/visits/openapi/src/main/java/com/doumee/api/web/ErpResourceController.java b/server/visits/openapi/src/main/java/com/doumee/api/web/ErpResourceController.java
index fcb986a..c8f4f5e 100644
--- a/server/visits/openapi/src/main/java/com/doumee/api/web/ErpResourceController.java
+++ b/server/visits/openapi/src/main/java/com/doumee/api/web/ErpResourceController.java
@@ -36,7 +36,7 @@
 @RestController
 @RequestMapping("/erp/resource")
 @Slf4j
-public class ErpResourceController extends ApiController {
+public class ErpResourceController{
     @ApiOperation(value = "鍏ㄩ噺缁勭粐淇℃伅鎺ュ彛", notes = "ERP绔彁渚涳紝渚涜瀹㈢鎷夊彇鍏ㄩ儴缁勭粐淇℃伅锛岀敤浜庡垵濮嬪寲鍙婂懆鏈熸�ф暟鎹牳鏌�")
     @PostMapping("/org/list")
     public ERPApiResponse<PageData<ErpOrgListResponse>> orgList (@RequestBody PageWrap<OrgListRequest> pageWrap) {

--
Gitblit v1.9.3