From 73af3ed9fbcc616cdecc739fc4307163c19c5764 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 07 六月 2024 14:35:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/business/OperaVisitsDesWindow.vue                                                    |  526 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/ProjectsServiceImpl.java    |    2 
 h5/pages/staff/meetingCalendar.vue                                                                        |  789 +
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java              |   53 
 h5/pages/staff/vehicle/sendACar.vue                                                                       |   22 
 admin/src/views/business/retention.vue                                                                    |  241 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java |   87 
 server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java                           |    1 
 h5/pages/applicationRecord/applicationRecord.vue                                                          |    8 
 h5/pages/laborApplication/laborApplication.vue                                                            | 1640 ++--
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarUseBookServiceImpl.java   |   40 
 admin/src/views/task/visReportDetail.vue                                                                  |  594 +
 server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java       |    9 
 h5/api/visitor.js                                                                                         |    7 
 h5/api/staff.js                                                                                           |   73 
 admin/src/components/common/CommonHeader.vue                                                              |   10 
 h5/pages/staff/memberSel.vue                                                                              |    6 
 admin/src/api/index.js                                                                                    |    3 
 h5/pages.json                                                                                             |  266 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java    |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java               |    7 
 h5/pages/staff/meetingSubOrder.vue                                                                        |  183 
 h5/pages/visitorApproval/visitorApproval.vue                                                              |  336 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java       |    2 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java                  |    7 
 h5/pages/staff/index.vue                                                                                  |   24 
 h5/pages/driver/reservedDetail.vue                                                                        |  666 
 server/system_service/src/main/java/com/doumee/service/system/impl/NoticesServiceImpl.java                |   82 
 admin/src/views/business/approvalReport.vue                                                               |  523 
 h5/pages/visitorApplication/visitorApplication.vue                                                        | 2610 +++---
 admin/src/views/index.vue                                                                                 |   95 
 admin/src/views/business/visitorSources.vue                                                               |  188 
 h5/pages/staff/task/index.vue                                                                             |  323 
 h5/n_pages/applicationRecord/applicationRecord.vue                                                        |  822 +-
 admin/src/views/platform/set/index.vue                                                                    |  112 
 h5/pages/staff/snapshot.vue                                                                               |   85 
 admin/src/views/platform/index.vue                                                                        |   46 
 h5/pages/driver/reservedRecord.vue                                                                        |  311 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java               |    2 
 h5/pages/staff/vehicle/sendACarDetail.vue                                                                 |  271 
 admin/src/api/business/index.js                                                                           |   14 
 admin/src/views/task/dangetDetail.vue                                                                     |  846 ++
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java              |  106 
 h5/pages/appointmentDetails/appointmentDetails.vue                                                        |   12 
 admin/src/views/business/reportRecord.vue                                                                 |  145 
 h5/pages/staff/meetingSub.vue                                                                             |   23 
 server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java                   |    2 
 admin/src/views/business/strandedPersonnel.vue                                                            |  205 
 admin/src/views/business/approvalConfiguration.vue                                                        |  554 
 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                |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/InternalWebController.java                 |   10 
 h5/pages/staff/task/visitorApprove.vue                                                                    |  806 +
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/Visits.java                     |   10 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java      |  325 
 server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java         |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java         |   12 
 server/system_service/src/main/java/com/doumee/dao/system/model/Notices.java                              |   10 
 admin/src/api/business/approve.js                                                                         |   36 
 admin/src/components/business/OperaCarUseBookWindow.vue                                                   |   17 
 h5/n_pages/visitorApplication/visitorApplication.vue                                                      | 2511 +++---
 h5/pages/visitorSubGuide/index.vue                                                                        |   34 
 h5/pages/staff/meetingManager.vue                                                                         |  301 
 admin/src/layouts/AppLayout.vue                                                                           |    2 
 admin/src/views/business/carEvent.vue                                                                     |  306 
 admin/src/views/task/visSubDetail.vue                                                                     |  647 +
 h5/pages/staff/visitorReport.vue                                                                          |   14 
 server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java               |   11 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveTemplServiceImpl.java |    7 
 server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomTimeServiceImpl.java    |    9 
 h5/pages/staff/task/visitorReport.vue                                                                     |  517 +
 server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java                             |   38 
 admin/src/api/platform/index.js                                                                           |   26 
 admin/src/views/operation/serviceCar/apprConfig.vue                                                       |  603 +
 h5/n_pages/visitorApproval/visitorApproval.vue                                                            |  722 
 /dev/null                                                                                                 |  417 -
 server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java                                    |   38 
 admin/src/views/task/index.vue                                                                            |  230 
 h5/pages/notice/notice.vue                                                                                |    2 
 h5/pages/staff/meetingDetail.vue                                                                          |  392 
 server/system_service/src/main/java/com/doumee/service/system/NoticesService.java                         |    6 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java         |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java       |   22 
 h5/pages/staff/task/vDangetAppr.vue                                                                       | 1201 +++
 h5/api/meeting.js                                                                                         |   31 
 85 files changed, 14,420 insertions(+), 7,889 deletions(-)

diff --git a/admin/src/api/business/approve.js b/admin/src/api/business/approve.js
index 6efee93..4c96cf1 100644
--- a/admin/src/api/business/approve.js
+++ b/admin/src/api/business/approve.js
@@ -1,8 +1,40 @@
 import request from '../../utils/request'
 
-
 // 鍒涘缓
 export function approveDo (data) {
   return request.post('/visitsAdmin/cloudService/business/approve/approved', data)
 }
-
+// 浠诲姟涓績 鍒楄〃 澶撮儴
+export function taskCenterHead (data) {
+  return request.get('/visitsAdmin/cloudService/business/staging/taskCenterHead', {
+    params: {
+      ...data
+    }
+  })
+}
+// 浠诲姟涓績 鍒楄〃
+export function taskCenterPage (data) {
+  return request.post('/visitsAdmin/cloudService/business/staging/taskPage', data)
+}
+// 璁垮璁板綍璇︽儏
+export function getVisitedDetail (data) {
+  return request.get('/visitsAdmin/cloudService/web/visitor/detail', {
+    params: { ...data }
+  })
+}
+// 璁垮鎶ュ璇︽儏
+export function getVisitedReDetail (data) {
+  return request.get('visitsAdmin/cloudService/business/visits/' + data.id)
+}
+// 闅愭偅璇︽儏
+export function hiddenDangerDetail (id) {
+  return request.get('/visitsAdmin/cloudService/business/hiddenDanger/' + id)
+}
+// 浠诲姟涓績 闅愭偅杞氦
+export function transferHiddenDanger (data) {
+  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/transferHiddenDanger', data)
+}
+// 浠诲姟涓績 澶勭悊
+export function dealHiddenDanger (data) {
+  return request.post('/visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger', data)
+}
diff --git a/admin/src/api/business/index.js b/admin/src/api/business/index.js
new file mode 100644
index 0000000..9527106
--- /dev/null
+++ b/admin/src/api/business/index.js
@@ -0,0 +1,14 @@
+import request from '../../utils/request'
+export * from './approve'
+
+// 瀹℃壒妯℃澘淇℃伅 鍙戝竷
+export function approveTemplSave (data) {
+  return request.post('/visitsAdmin/cloudService/business/approveTempl/save', data, {
+    trim: true
+  })
+}
+// 瀹℃壒妯℃澘淇℃伅 璇︽儏
+export function approveTemplByType (type) {
+  return request.get(`/visitsAdmin/cloudService/business/approveTempl/${type}`)
+}
+export const uploadUrl = 'visitsAdmin/cloudService/public/upload'
diff --git a/admin/src/api/index.js b/admin/src/api/index.js
index e068dbd..22239b3 100644
--- a/admin/src/api/index.js
+++ b/admin/src/api/index.js
@@ -1 +1,4 @@
 export const uploadFile = '/admin_interface/visitsAdmin/cloudService/public/upload'
+
+export * from './business/index'
+export * from './platform'
diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
new file mode 100644
index 0000000..c399bb2
--- /dev/null
+++ b/admin/src/api/platform/index.js
@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 鏈堝彴鍒楄〃
+export function getPlatform (data) {
+  return request.post('/visitsAdmin/cloudService/business/platform/page', data, {
+    trim: true
+  })
+}
+// 鏈堝彴鍒楄〃 缂栬緫
+export function PlatformEdit (data) {
+  return request.post('/visitsAdmin/cloudService/business/platform/updateById', data, {
+    trim: true
+  })
+}
+// 鏈堝彴鍒楄〃 鍒犻櫎
+export function PlatformDel (id) {
+  return request.get('/visitsAdmin/cloudService/business/platform/delete/' + id, {
+    trim: true
+  })
+}
+// 鏈堝彴璋冨害涓績 鍒楄〃
+export function getPlatformJob (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformJob/page', data, {
+    trim: true
+  })
+}
diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue
index 0e55630..b92af71 100644
--- a/admin/src/components/business/OperaCarUseBookWindow.vue
+++ b/admin/src/components/business/OperaCarUseBookWindow.vue
@@ -298,14 +298,6 @@
 </script>
 
 <style lang="scss" scoped>
-.side_title{
-  font-weight: 600;
-  font-size: 18px;
-  color: #111111;
-  margin-bottom: 20px;
-  margin-left: 20px;
-  margin-top: 20px;
-}
 .upload_box {
   width: 84px;
   height: 84px;
@@ -324,7 +316,14 @@
     font-size: 12px;
   }
 }
-
+.side_title{
+  font-weight: 600;
+  font-size: 18px;
+  color: #111111;
+  margin-bottom: 20px;
+  margin-left: 20px;
+  margin-top: 20px;
+}
 .modal_wrap {
   display: flex;
   height: 100%;
diff --git a/admin/src/components/business/OperaVisitsDesWindow.vue b/admin/src/components/business/OperaVisitsDesWindow.vue
index 07d7420..bf9674b 100644
--- a/admin/src/components/business/OperaVisitsDesWindow.vue
+++ b/admin/src/components/business/OperaVisitsDesWindow.vue
@@ -1,173 +1,191 @@
 <template>
-    <GlobalWindow
-        :title="title"
-        width="70%"
-        :visible.sync="visible"
-        append-to-body
-        :confirm-working="isWorking"
-        @confirm="confirm"
-    >
-        <div class="list">
-            <div class="list_item">
-                <div class="list_item_label">鎷滆淇℃伅</div>
-                <div class="list_item_val" v-if="info" style="display: inline-block">
-                    <div class="list_item_val_item">鎷滆瀵规柟锛歿{info.receptMemberName}} - {{info.receptMemberDepartment}}</div>
-                    <div class="list_item_val_item">棰勭害鏃堕棿锛歿{info.starttime}} 鑷� {{info.endtime}}</div>
-                    <div class="list_item_val_item" v-if="info.inDate && info.outDate">绛惧埌鏃堕棿锛歿{info.inDate}} 鑷� {{info.outDate}}</div>
-                    <div class="list_item_val_item" v-else>绛惧埌鏃堕棿锛�-</div>
-                    <div class="list_item_val_item">鎷滆浜嬬敱锛歿{info.reason}}</div>
-                    <div class="list_item_val_item">鐢宠浜哄憳锛歿{info.name}} {{info.companyName}}</div>
-                    <div class="list_item_val_item">鐢宠闂ㄧ锛歿{info.deviceRoleList ? info.deviceRoleList.map(item => item.name).join(' | ') : '-'}}</div>
-                    <div class="list_item_val_item">鍒涘缓鏃堕棿锛歿{info.createDate}}</div>
-                </div>
-                <div class="list_item_val" v-if="info" style="display: inline-block;float: right">
-                  <div class="list_item_val_item"   id="qrcode2" ref="qrcode2"></div>
-                </div>
-              </div>
-            <div class="list_item">
-                <div class="list_item_label">璁垮淇℃伅</div>
-                <div class="list_item_table" v-if="info">
-                    <el-table
-                        :data="info.withUserList ? info.withUserList : []"
-                        border
-                        :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
-                        style="width: 100%">
-                      <el-table-column prop="status"   label="鐘舵��" min-width="100px">
-                        <template slot-scope="{row}">
-                          <span style="color: rgba(245, 154, 35, 0.996);" v-if="row.status === 0">寰呮彁浜ゅ鎵�</span>
-                          <span v-if="row.status === 1">瀹℃壒涓�</span>
-                          <span v-if="row.status === 2">瀹℃牳閫氳繃</span>
-                          <span style="color: red;" v-if="row.status === 3">瀹℃牳涓嶉�氳繃</span>
-                          <span v-if="row.status === 4">鍙栨秷</span>
-                          <span v-if="row.status === 5">棰勭害鎴愬姛</span>
-                          <span v-if="row.status === 6">棰勭害澶辫触</span>
-                          <span v-if="row.status === 7">鎷滆涓�</span>
-                          <span v-if="row.status === 8">宸茬绂�</span>
-                          <span v-if="row.status === 9">宸插け鏁�</span>
-                        </template>
-                      </el-table-column>
-                        <el-table-column
-                            width="150"
-                            label="濮撳悕">
-                            <template slot-scope="{row}">
-                                <span>{{row.name}}</span>
-                                <span style="border-radius: 5px; padding: 2px 5px; box-sizing: border-box; border: 1px solid #0d68ff; color: #0d68ff; margin-left: 5px;" v-if="info.memberId === row.memberId">鐢宠浜�</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column
-                            label="鎬у埆">
-                            <template slot-scope="{row}">
-                                <span v-if="row.sex === 1">鐢�</span>
-                                <span v-if="row.sex === 2">濂�</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column
-                            prop="birthday"
-                            label="骞撮緞">
-                            <template slot-scope="{row}">
-                                <span>{{getAge(row.birthday)}}</span>
-                            </template>
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            prop="phone"
-                            label="鎵嬫満鍙�">
-                        </el-table-column>
-                        <el-table-column
-                            label="璇佷欢绫诲瀷">
-                            <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
-                            width="160"
-                            prop="idcardDecode"
-                            label="韬唤璇佸彿鐮�">
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            prop="companyName"
-                            label="缁勭粐">
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            prop="carNos"
-                            label="闅忚杞﹁締">
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            label="璁垮浜岀淮鐮�">
-                            <template slot-scope="{row}">
-                              <div   :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div>
-                            </template>
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            label="浜鸿劯鐓х墖">
-                            <template slot-scope="{row}">
-                                <el-image
-                                    v-if="row.faceImg"
-                                    style="width: 100px; height: 100px"
-                                    :src="info.prefixUrl + row.faceImg"
-                                    :preview-src-list="[info.prefixUrl + row.faceImg]">
-                                </el-image>
-                            </template>
-                        </el-table-column>
-                        <el-table-column
-                            width="150"
-                            label="鍋ュ悍璇�">
-                            <template slot-scope="{row}">
-                                <el-image
-                                    v-if="row.imgurl"
-                                    style="width: 100px; height: 100px"
-                                    :src="info.prefixUrl + row.imgurl"
-                                    :preview-src-list="[info.prefixUrl + row.imgurl]">
-                                </el-image>
-                            </template>
-                        </el-table-column>
-                    </el-table>
-                </div>
-            </div>
-<!--            <div class="list_item">-->
-<!--                <div class="list_item_label">瀹℃壒娴佺▼</div>-->
-<!--                <div class="list_item_status">-->
-<!--                    <div class="list_item_status_item" v-for="(item, index) in 3" :key="index">-->
-<!--                        <div class="dian"></div>-->
-<!--                        <div class="xian"></div>-->
-<!--                        <div class="status_info">-->
-<!--                            <span class="status_info_a">寮犱笁鎻愪氦鐨勫姵鍔″叆鍘傜敵璇�</span>-->
-<!--                            <span class="status_info_b">鐜嬬粡鐞嗭紙宸插悓鎰忥級</span>-->
-<!--                            <div class="status_info_c">鏉ヨ鍙傝宸ュ巶锛屾湜棰嗗鎵瑰噯</div>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </div>-->
+  <GlobalWindow
+    :title="title"
+    width="70%"
+    :visible.sync="visible"
+    append-to-body
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <div class="list">
+      <div class="list_item">
+        <div class="list_item_label">鎷滆淇℃伅</div>
+        <div class="list_item_val" v-if="info" style="display: inline-block">
+          <div class="list_item_val_item">
+            鎷滆瀵规柟锛歿{ info.receptMemberName }} -
+            {{ info.receptMemberDepartment }}
+          </div>
+          <div class="list_item_val_item">
+            棰勭害鏃堕棿锛歿{ info.starttime }} 鑷� {{ info.endtime }}
+          </div>
+          <div class="list_item_val_item" v-if="info.inDate && info.outDate">
+            绛惧埌鏃堕棿锛歿{ info.inDate }} 鑷� {{ info.outDate }}
+          </div>
+          <div class="list_item_val_item" v-else>绛惧埌鏃堕棿锛�-</div>
+          <div class="list_item_val_item">鎷滆浜嬬敱锛歿{ info.reason }}</div>
+          <div class="list_item_val_item">
+            鐢宠浜哄憳锛歿{ info.name }} {{ info.companyName }}
+          </div>
+          <div class="list_item_val_item">
+            鐢宠闂ㄧ锛歿{
+              info.deviceRoleList
+                ? info.deviceRoleList.map((item) => item.name).join(" | ")
+                : "-"
+            }}
+          </div>
+          <div class="list_item_val_item">鍒涘缓鏃堕棿锛歿{ info.createDate }}</div>
         </div>
-    </GlobalWindow>
+        <div
+          class="list_item_val"
+          v-if="info"
+          style="display: inline-block; float: right"
+        >
+          <div class="list_item_val_item" id="qrcode2" ref="qrcode2"></div>
+        </div>
+      </div>
+      <div class="list_item">
+        <div class="list_item_label">璁垮淇℃伅</div>
+        <div class="list_item_table" v-if="info">
+          <el-table
+            :data="info.withUserList ? info.withUserList : []"
+            border
+            :header-cell-style="{
+              background: '#dcdde2',
+              color: 'rgb(51, 51, 51)',
+            }"
+            style="width: 100%"
+          >
+            <el-table-column prop="status" label="鐘舵��" min-width="100px">
+              <template slot-scope="{ row }">
+                <span
+                  style="color: rgba(245, 154, 35, 0.996)"
+                  v-if="row.status === 0"
+                  >寰呮彁浜ゅ鎵�</span
+                >
+                <span v-if="row.status === 1">瀹℃壒涓�</span>
+                <span v-if="row.status === 2">瀹℃牳閫氳繃</span>
+                <span style="color: red" v-if="row.status === 3"
+                  >瀹℃牳涓嶉�氳繃</span
+                >
+                <span v-if="row.status === 4">鍙栨秷</span>
+                <span v-if="row.status === 5">棰勭害鎴愬姛</span>
+                <span v-if="row.status === 6">棰勭害澶辫触</span>
+                <span v-if="row.status === 7">鎷滆涓�</span>
+                <span v-if="row.status === 8">宸茬绂�</span>
+                <span v-if="row.status === 9">宸插け鏁�</span>
+              </template>
+            </el-table-column>
+            <el-table-column width="150" label="濮撳悕">
+              <template slot-scope="{ row }">
+                <span>{{ row.name }}</span>
+                <span
+                  style="
+                    border-radius: 5px;
+                    padding: 2px 5px;
+                    box-sizing: border-box;
+                    border: 1px solid #0d68ff;
+                    color: #0d68ff;
+                    margin-left: 5px;
+                  "
+                  v-if="info.memberId === row.memberId"
+                  >鐢宠浜�</span
+                >
+              </template>
+            </el-table-column>
+            <el-table-column label="鎬у埆">
+              <template slot-scope="{ row }">
+                <span v-if="row.sex === 1">鐢�</span>
+                <span v-if="row.sex === 2">濂�</span>
+              </template>
+            </el-table-column>
+            <el-table-column prop="birthday" label="骞撮緞">
+              <template slot-scope="{ row }">
+                <span>{{ getAge(row.birthday) }}</span>
+              </template>
+            </el-table-column>
+            <el-table-column width="150" prop="phone" label="鎵嬫満鍙�">
+            </el-table-column>
+            <el-table-column label="璇佷欢绫诲瀷">
+              <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 width="160" prop="idcardDecode" label="韬唤璇佸彿鐮�">
+            </el-table-column>
+            <el-table-column width="150" prop="companyName" label="缁勭粐">
+            </el-table-column>
+            <el-table-column width="150" prop="carNos" label="闅忚杞﹁締">
+            </el-table-column>
+            <el-table-column width="150" label="璁垮浜岀淮鐮�">
+              <template slot-scope="{ row }">
+                <div :id="`qrcode${row.id}`" :ref="`qrcode${row.id}`"></div>
+              </template>
+            </el-table-column>
+            <el-table-column width="150" label="浜鸿劯鐓х墖">
+              <template slot-scope="{ row }">
+                <el-image
+                  v-if="row.faceImg"
+                  style="width: 100px; height: 100px"
+                  :src="info.prefixUrl + row.faceImg"
+                  :preview-src-list="[info.prefixUrl + row.faceImg]"
+                >
+                </el-image>
+              </template>
+            </el-table-column>
+            <el-table-column width="150" label="鍋ュ悍璇�">
+              <template slot-scope="{ row }">
+                <el-image
+                  v-if="row.imgurl"
+                  style="width: 100px; height: 100px"
+                  :src="info.prefixUrl + row.imgurl"
+                  :preview-src-list="[info.prefixUrl + row.imgurl]"
+                >
+                </el-image>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <!--            <div class="list_item">-->
+      <!--                <div class="list_item_label">瀹℃壒娴佺▼</div>-->
+      <!--                <div class="list_item_status">-->
+      <!--                    <div class="list_item_status_item" v-for="(item, index) in 3" :key="index">-->
+      <!--                        <div class="dian"></div>-->
+      <!--                        <div class="xian"></div>-->
+      <!--                        <div class="status_info">-->
+      <!--                            <span class="status_info_a">寮犱笁鎻愪氦鐨勫姵鍔″湪鍥敵璇�</span>-->
+      <!--                            <span class="status_info_b">鐜嬬粡鐞嗭紙宸插悓鎰忥級</span>-->
+      <!--                            <div class="status_info_c">鏉ヨ鍙傝宸ュ巶锛屾湜棰嗗鎵瑰噯</div>-->
+      <!--                        </div>-->
+      <!--                    </div>-->
+      <!--                </div>-->
+      <!--            </div>-->
+    </div>
+  </GlobalWindow>
 </template>
 
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { queryById } from '@/api/business/visits'
-import QRCode from "qrcodejs2";
+import QRCode from "qrcodejs2"
 export default {
   name: 'OperaVisitsWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       list: [],
       info: null,
-      innerVisible:false
+      innerVisible: false
     }
   },
-  created () {
+  created() {
   },
   methods: {
-    getAge (val) {
+    getAge(val) {
       if (!val) return ''
       const currentYear = new Date().getFullYear() // 褰撳墠鐨勫勾浠�
       const calculationYear = new Date(val).getFullYear() // 璁$畻鐨勫勾浠�
@@ -180,9 +198,9 @@
         return calculationAge - 1
       }
     },
-    crateQrcodeShow (div,qrcode1) {
-      if(qrcode1 ==null ||qrcode1 ==''){
-        return;
+    crateQrcodeShow(div, qrcode1) {
+      if (qrcode1 == null || qrcode1 == '') {
+        return
       }
       this.qr = new QRCode(div, {
         width: 90,
@@ -191,7 +209,7 @@
       })
     },
 
-    open (title, id) {
+    open(title, id) {
       this.title = title
       this.visible = true
       queryById(id)
@@ -201,10 +219,10 @@
           this.$nextTick(() => {
             // this.$refs.qrcode2.innerHTML = ''
             // this.crateQrcodeShow('qrcode2',res.qrcode)
-            if(this.info.withUserList ){
+            if (this.info.withUserList) {
               this.info.withUserList.forEach(row => {
-                this.$refs['qrcode'+row.id].innerHTML = ''
-                this.crateQrcodeShow('qrcode'+row.id,row.qrcode)
+                this.$refs['qrcode' + row.id].innerHTML = ''
+                this.crateQrcodeShow('qrcode' + row.id, row.qrcode)
               })
             }
           })
@@ -214,103 +232,103 @@
 }
 </script>
 <style>
-    .el-image-viewer__wrapper {
-        z-index: 3000 !important;
-    }
+.el-image-viewer__wrapper {
+  z-index: 3000 !important;
+}
 </style>
 <style lang="scss" scoped>
-    .list {
-        width: 100%;
-        display: flex;
-        flex-direction: column;
-        .list_item {
-            width: 100%;
-            margin-bottom: 30px;
-            &:last-child {
-                margin-bottom: 0 !important;
-            }
-            .list_item_label {
-                font-size: 18px;
-                font-weight: 600;
-                color: #000000;
-                margin-bottom: 15px;
-            }
-            .list_item_info {
-                font-size: 14px;
-                color: #222222;
-                margin-bottom: 10px;
-            }
-            .list_item_status {
-                width: 100%;
-                display: flex;
-                flex-direction: column;
-                .list_item_status_item {
-                    width: 100%;
-                    max-height: 100px;
-                    position: relative;
-                    margin-bottom: 30px;
-                    .dian {
-                        width: 15px;
-                        height: 15px;
-                        border-radius: 50%;
-                        background: #ffb447;
-                        position: absolute;
-                        left: 0;
-                        top: 50%;
-                        transform: translate(0, -50%);
-                    }
-                    .xian {
-                        width: 1px;
-                        height: calc(100% + 30px);
-                        background: #ffb447;
-                        position: absolute;
-                        top: 50%;
-                        left: 7px;
-                        transform: translate(-50%, 0);
-                    }
-                    .status_info {
-                        /*width: 100%;*/
-                        height: 100%;
-                        display: flex;
-                        flex-direction: column;
-                        margin-left: 30px;
-                        box-sizing: border-box;
-                        .status_info_a {
-                            font-size: 16px;
-                            color: black;
-                            margin-bottom: 10px;
-                        }
-                        .status_info_b {
-                            font-size: 13px;
-                            color: #666666;
-                            margin-bottom: 10px;
-                        }
-                        .status_info_c {
-                            padding: 5px 10px;
-                            background: #ececec;
-                            font-size: 13px;
-                            color: black;
-                            border-radius: 5px;
-                            box-sizing: border-box;
-                        }
-                    }
-                }
-            }
-            .list_item_val {
-                width: 100%;
-                margin-bottom: 15px;
-                &:last-child {
-                    margin-bottom: 0 !important;
-                }
-                .list_item_val_item {
-                    font-size: 14px;
-                    color: #222222;
-                    margin-bottom: 5px;
-                    &:last-child {
-                        margin-bottom: 0 !important;
-                    }
-                }
-            }
-        }
+.list {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  .list_item {
+    width: 100%;
+    margin-bottom: 30px;
+    &:last-child {
+      margin-bottom: 0 !important;
     }
+    .list_item_label {
+      font-size: 18px;
+      font-weight: 600;
+      color: #000000;
+      margin-bottom: 15px;
+    }
+    .list_item_info {
+      font-size: 14px;
+      color: #222222;
+      margin-bottom: 10px;
+    }
+    .list_item_status {
+      width: 100%;
+      display: flex;
+      flex-direction: column;
+      .list_item_status_item {
+        width: 100%;
+        max-height: 100px;
+        position: relative;
+        margin-bottom: 30px;
+        .dian {
+          width: 15px;
+          height: 15px;
+          border-radius: 50%;
+          background: #ffb447;
+          position: absolute;
+          left: 0;
+          top: 50%;
+          transform: translate(0, -50%);
+        }
+        .xian {
+          width: 1px;
+          height: calc(100% + 30px);
+          background: #ffb447;
+          position: absolute;
+          top: 50%;
+          left: 7px;
+          transform: translate(-50%, 0);
+        }
+        .status_info {
+          /*width: 100%;*/
+          height: 100%;
+          display: flex;
+          flex-direction: column;
+          margin-left: 30px;
+          box-sizing: border-box;
+          .status_info_a {
+            font-size: 16px;
+            color: black;
+            margin-bottom: 10px;
+          }
+          .status_info_b {
+            font-size: 13px;
+            color: #666666;
+            margin-bottom: 10px;
+          }
+          .status_info_c {
+            padding: 5px 10px;
+            background: #ececec;
+            font-size: 13px;
+            color: black;
+            border-radius: 5px;
+            box-sizing: border-box;
+          }
+        }
+      }
+    }
+    .list_item_val {
+      width: 100%;
+      margin-bottom: 15px;
+      &:last-child {
+        margin-bottom: 0 !important;
+      }
+      .list_item_val_item {
+        font-size: 14px;
+        color: #222222;
+        margin-bottom: 5px;
+        &:last-child {
+          margin-bottom: 0 !important;
+        }
+      }
+    }
+  }
+}
 </style>
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index 7855c29..fcf9f75 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -205,11 +205,11 @@
   justify-content: space-between;
 
   .logo {
-    background: url("../../assets/images/top_ic_chilun@2x.png") no-repeat;
+    /* background: url("../../assets/images/top_ic_chilun@2x.png") no-repeat; */
     box-sizing: border-box;
     min-width: 280px;
-    height: 70px;
-    padding: 17px 30px;
+    height: 56px;
+    padding: 10px 30px;
     // flex-shrink: 0;
     line-height: 36px;
     font-size: 22px;
@@ -225,13 +225,13 @@
   .user {
     width: 712px;
     box-sizing: border-box;
-    height: 70px;
+    height: 56px;
     padding-right: 25px;
     background: url("../../assets/images/top_ic_bolang@2x.png") no-repeat;
     flex-shrink: 0;
     text-align: right;
     .el-dropdown {
-      top: 10px;
+      top: 2px;
       color: #fff;
     }
     img {
diff --git a/admin/src/layouts/AppLayout.vue b/admin/src/layouts/AppLayout.vue
index d4c0be8..0072133 100644
--- a/admin/src/layouts/AppLayout.vue
+++ b/admin/src/layouts/AppLayout.vue
@@ -1,7 +1,7 @@
 <template>
   <div>
     <CommonHeader />
-    <div style="height:10px; background: #fff"></div>
+    <!-- <div style="height:10px; background: #fff"></div> -->
     <el-container class="app-layout">
       <el-aside :class="{collapse:menuData.collapse}">
         <Menu/>
diff --git a/admin/src/views/business/approvalConfiguration.vue b/admin/src/views/business/approvalConfiguration.vue
index f7f134f..622d55f 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -1,16 +1,17 @@
 <template>
   <TableLayout>
     <template v-slot:table-wrap>
+      <el-tabs v-model="activeType" @tab-click="handleClick">
+        <el-tab-pane label="鏅�氳瀹�" name="0"></el-tab-pane>
+        <el-tab-pane label="鏂藉伐璁垮" name="1"></el-tab-pane>
+      </el-tabs>
       <div class="config">
         <div class="config_list">
           <div class="config_list_head">
             <span>閰嶇疆娴佺▼</span>
-            <el-button style="background: #435ebe" type="primary"
-              >鍙戝竷</el-button
-            >
           </div>
           <div class="config_content">
-            <div class="item active">
+            <div class="item">
               <div class="head">鍙戣捣浜�</div>
               <div class="content">璁垮</div>
             </div>
@@ -18,55 +19,41 @@
               <div class="line"></div>
               <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
             </div>
-            <template v-for="(item, index) in apprList">
+            <div v-for="(item, index) in apprList" :key="index">
               <div
                 class="item yellow"
-                :class="{ active: item.active }"
+                :class="{
+                  active: activeIndex == index,
+                  blue: item.type == '1',
+                }"
                 @click="flowClick(index)"
-                :key="index"
               >
-                <div class="head">瀹℃壒浜�</div>
+                <div class="head">{{ item.remark }}</div>
                 <div class="content">
-                  <div>琚浜�</div>
-                  <i class="el-icon-arrow-right"></i>
-                </div>
-              </div>
-              <div class="arrows" :key="index">
-                <div class="line"></div>
-                <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
-                <i
-                  v-if="apprList.length - 1 === index"
-                  @click="handleAddAppr()"
-                  class="el-icon-circle-plus add"
-                ></i>
-              </div>
-            </template>
-            <template v-if="false">
-              <div
-                class="item yellow"
-                :class="{ active: activeSel === 'one' }"
-                @click="flowClick('one')"
-              >
-                <div class="head">瀹℃壒浜�</div>
-                <div class="content">
-                  <div>鏉庣惓-缁煎悎绉�</div>
+                  <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"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else-if="item.objIds && item.objIds.length > 1">
+                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}绛�</span>
+                    <span v-if="item.approveType == 0"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else>璇烽�夋嫨</div>
                   <i class="el-icon-arrow-right"></i>
                 </div>
               </div>
               <div class="arrows">
-                <div class="line"></div>
-                <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
-              </div>
-            </template>
-            <div
-              class="item blue"
-              :class="{ active: activeSel === 'two' }"
-              @click="flowClick('two')"
-            >
-              <div class="head">鎶勯�佷汉</div>
-              <div class="content">
-                <div>璇烽�夋嫨</div>
-                <i class="el-icon-arrow-right"></i>
+                <template v-if="apprList.length - 1 !== index">
+                  <div class="line"></div>
+                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
+                </template>
+                <i
+                  v-if="apprList.length - 2 === index"
+                  @click="handleAddAppr()"
+                  class="el-icon-circle-plus add"
+                ></i>
               </div>
             </div>
           </div>
@@ -74,56 +61,97 @@
         <div class="config_data">
           <div class="config_data_item">
             <div class="config_data_item_label">閫夋嫨璇ヨ妭鐐圭殑瀹℃壒浜�</div>
-            <el-radio-group v-model="radio">
+            <div class="df_ac mb10">
+              <div>瀹℃壒鑺傜偣鍚嶇О</div>
+              <el-input
+                class="w200 ml10"
+                v-model="apprList[activeIndex].remark"
+              ></el-input>
+            </div>
+            <!-- 鎶勯�佷汉 -->
+            <template v-if="apprList[activeIndex].type == '1'">
+              <div class="config_data_item_reviewed_content">
+                <div
+                  v-for="mem in apprList[activeIndex].objIds"
+                  :key="mem.id"
+                  class="config_data_item_reviewed_content_item"
+                >
+                  <span>{{ mem.name }}</span>
+                  <i class="el-icon-close"></i>
+                </div>
+                <span class="add" @click="selStaff">+娣诲姞</span>
+              </div>
+            </template>
+            <el-radio-group
+              v-if="apprList[activeIndex].type == '0'"
+              v-model="apprList[activeIndex].memberType"
+            >
               <el-radio :label="0">琚浜�</el-radio>
               <el-radio :label="1">鎸囧畾浜哄憳</el-radio>
               <el-radio :label="2">閮ㄩ棬涓荤</el-radio>
             </el-radio-group>
-            <div class="config_data_item_reviewed" v-if="radio === 1">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 1"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>鎸囧畾瀹℃牳浜�</span>
                 <span>涓嶈秴杩�20浜�</span>
               </div>
               <div class="config_data_item_reviewed_content">
-                <div class="config_data_item_reviewed_content_item">
-                  <span>鏍撳瓙鍝�</span>
-                  <i class="el-icon-close"></i>
+                <div
+                  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" @click="memDel(memIndex)"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
             </div>
-            <div class="config_data_item_reviewed" v-if="radio === 2">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 2"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>閮ㄩ棬涓荤</span>
               </div>
               <div class="config_data_item_reviewed_r">
                 <span>琚浜虹殑</span>
                 <el-select
-                  v-model="value"
+                  v-model="apprList[activeIndex].level"
                   placeholder="璇烽�夋嫨"
                   style="margin: 0 20px 0 10px"
                 >
-                  <el-option
-                    v-for="item in options"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  >
-                  </el-option>
+                  <el-option label="鐩存帴涓荤" :value="0" />
+                  <el-option label="浜岀骇涓荤" :value="1" />
+                  <el-option label="涓夌骇涓荤" :value="2" />
+                  <el-option label="鍥涚骇涓荤" :value="4" />
                 </el-select>
-                <el-checkbox v-model="checked"
+                <el-checkbox
+                  v-model="apprList[activeIndex].noleaderOpt"
+                  :true-label="1"
+                  :false-label="0"
                   >鎵句笉鍒颁富绠℃椂锛岀敱涓婄骇涓荤浠e鏍�</el-checkbox
                 >
               </div>
             </div>
           </div>
-          <div class="config_data_item" v-if="radio !== 0">
+          <div
+            class="config_data_item"
+            v-if="
+              (apprList[activeIndex].memberType == 1 ||
+                apprList[activeIndex].memberType == 2) &&
+              apprList[activeIndex].type == '0'
+            "
+          >
             <div class="config_data_item_label">
               瀹℃壒鏂瑰紡
               <span>瀹℃壒浜轰负澶氫釜鏃讹紝閲囩敤鐨勫鎵规柟寮�</span>
             </div>
             <el-radio-group
-              v-model="radio1"
+              v-model="apprList[activeIndex].approveType"
               style="display: flex; flex-direction: column"
             >
               <el-radio :label="0" style="margin-bottom: 20px"
@@ -132,56 +160,68 @@
               <el-radio :label="1">浼氱锛堟墍鏈夊鎵逛汉閮藉悓鎰忔墠鍙�氳繃锛�</el-radio>
             </el-radio-group>
           </div>
-          <div class="df_ac">
-            <span class="mr10"><strong>鍏佽淇敼鐢宠椤�</strong></span>
-            <el-switch v-model="param.aa" active-value="1" inactive-value="0">
-            </el-switch>
-          </div>
-          <div class="df_ac mt10">
-            <span class="mr20">閫夋嫨淇敼椤�</span>
-            <el-select
-              v-model="param.list"
-              collapse-tags
-              multiple
-              placeholder="璇烽�夋嫨,澶氶��"
-            >
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </div>
-          <div class="config_data_submit" v-if="radio !== 0">
-            <el-button style="background: #435ebe" type="primary"
+          <div class="config_data_submit">
+            <el-button
+              @click="onSubmit"
+              style="background: #435ebe"
+              type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
+            >
+            <el-button
+              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
+              type="danger"
+              plain
+              @click="handleDel"
+              >鍒犻櫎鑺傜偣</el-button
             >
           </div>
         </div>
       </div>
     </template>
     <!--  -->
-    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="800px">
-      <tree-transfer
-        v-model="param.menuIds"
-        :title="['鏈��', '宸查��']"
-        :from_data="fromData"
-        :to_data="selData"
-        :defaultProps="{ label: 'label' }"
-        mode="transfer"
-        height="500px"
-        filter
-        openAll
-        ref="treeTransfer"
-      >
-      </tree-transfer>
+    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="1000px">
+      <div class="staff_modal">
+        <div class="left">
+          <div
+            style="
+              width: 100%;
+              height: 50px;
+              background: rgba(242, 242, 242, 1);
+              line-height: 50px;
+              text-align: center;
+              font-size: 14px;
+            "
+          >
+            浼佷笟缁勭粐鏋舵瀯
+          </div>
+          <div style="width: 100%; height: 100%; overflow-y: scroll">
+            <Tree
+              :list="companyTree"
+              :defaultProps="{
+                name: 'name',
+                status: 'fsStatus',
+                children: 'childList',
+                id: 'id',
+              }"
+              @callback="callback"
+            />
+          </div>
+        </div>
+        <el-transfer
+          filterable
+          :title="['鏈��', '宸查��']"
+          openAll
+          :props="{ label: 'name', key: 'keyTemp' }"
+          filter-placeholder="鎼滅储鍛樺伐"
+          v-model="searchForm.objIds"
+          :data="memberList"
+          class="transfer"
+        >
+        </el-transfer>
+      </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowTransfer = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="isShowTransfer = false"
-          >纭� 瀹�</el-button
-        >
+        <el-button type="primary" @click="TransferSub">纭� 瀹�</el-button>
       </span>
     </el-dialog>
   </TableLayout>
@@ -189,97 +229,193 @@
 
 <script>
 import TableLayout from '@/layouts/TableLayout'
-import treeTransfer from 'el-tree-transfer'
+// import treeTransfer from 'el-tree-transfer'
+import Tree from '@/components/common/Tree'
+import { approveTemplSave, approveTemplByType } from '@/api'
+import { fetchList } from '@/api/business/company'
+import { fetchList as memberListPost } from '@/api/business/member'
 export default {
   name: 'config',
   components: {
     TableLayout,
-    treeTransfer
+    Tree
   },
   data () {
     return {
+      activeType: '0',
       apprList: [
-        { name: '', active: false },
-        { name: '', active: false }
+        { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
+        { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
       ],
-
-      value: '',
-      radio: 0,
-      radio1: 0,
-      checked: '',
+      activeIndex: 0,
 
       param: {},
+      searchForm: {},
       isShowTransfer: false,
-      fromData: [
-        {
-          id: '1',
-          pid: 0,
-          label: '涓�绾� 1',
-          children: [
-            {
-              id: '1-1',
-              pid: '1',
-              label: '浜岀骇 1-1',
-              disabled: true,
-              children: []
-            },
-            {
-              id: '1-2',
-              pid: '1',
-              label: '浜岀骇 1-2',
-              children: [
-                {
-                  id: '1-2-1',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-1'
-                },
-                {
-                  id: '1-2-2',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-2'
-                }
-              ]
-            }
-          ]
-        }
-      ],
-      options: [{
-        value: '閫夐」1',
-        label: '榛勯噾绯�'
-      }, {
-        value: '閫夐」2',
-        label: '鍙岀毊濂�'
-      }, {
-        value: '閫夐」3',
-        label: '铓典粩鐓�'
-      }, {
-        value: '閫夐」4',
-        label: '榫欓』闈�'
-      }, {
-        value: '閫夐」5',
-        label: '鍖椾含鐑ら腑'
-      }],
-      selData: []
+      memberList: [],
+      companyTree: []
     }
   },
+  created () {
+    this.getfindCompanyTreePage()
+    this.initDate()
+  },
   methods: {
+    handleClick () {
+      this.apprList = []
+      const arr = [
+        { remark: '瀹℃壒浜�', active: false, type: 0, objIds: [] },
+        { remark: '鎶勯�佷汉', active: false, type: 1, objIds: [] }
+      ]
+      this.apprList = [...arr]
+      this.initDate()
+    },
     flowClick (i) {
+      this.activeIndex = i
       this.apprList.forEach((item, index) => {
         if (i === index) {
           item.active = true
+          if (item.objIds && item.objIds.length > 0) {
+            const objIds = item.objIds.map(i => {
+              return i.id + '-' + i.name
+            })
+            this.$set(this.searchForm, 'objIds', objIds)
+          } else {
+            this.$set(this.searchForm, 'objIds', [])
+          }
         } else {
           item.active = false
         }
       })
     },
+    initDate () {
+      const { activeType } = this
+      approveTemplByType(activeType).then(res => {
+        if (res && res.paramList) {
+          const arr = res.paramList || []
+          arr.forEach(item => {
+            if (item.memberList && item.memberList.length > 0) {
+              item.objIds = item.memberList.map(i => {
+                return {
+                  id: i.id,
+                  name: i.name
+                }
+              })
+            }
+          })
+          this.apprList = arr
+        }
+
+        // console.log(res);
+      })
+      this.flowClick(0)
+      this.$forceUpdate()
+    },
+    onSubmit () {
+      const { apprList, activeType } = this
+      const temp = JSON.parse(JSON.stringify(apprList))
+      temp.forEach((item, index) => {
+        item.level = index + 1
+        if (item.objIds && item.objIds.length > 0) {
+          item.objIds = item.objIds.map(i => i.id).join(',')
+        }
+      })
+      approveTemplSave({
+        type: activeType,
+        paramList: temp
+      }).then(res => {
+        // if (res.code === 200) {
+        this.$message.success('淇濆瓨鎴愬姛')
+        // }
+      })
+    },
+    handleDel () {
+      const { activeIndex } = this
+      this.apprList.splice(activeIndex, 1)
+      this.activeIndex = 0
+    },
     handleAddAppr () {
-      this.apprList.push({ name: '', active: false })
+      this.apprList.splice(this.apprList.length - 1, 0, { remark: '瀹℃壒浜�', active: false, type: 0, objIds: [] })
+      // this.apprList.push({ remark: '瀹℃壒浜�', active: false, type: '0' })
     },
 
+    // 鑾峰彇缁勭粐鏍�
+    getfindCompanyTreePage () {
+      fetchList()
+        .then(res => {
+          if (res && res.length > 0) {
+            res[0].fsStatus = 1
+            this.companyTree = res
+            // // this.searchForm.erpOrgId = res[0].erpId
+            // this.search()
+            // this.department = this.getDepartmentTree(res)
+          }
+        })
+    },
+    getMemberList () {
+      memberListPost({
+        model: {
+          companyId: this.searchForm.companyId || '',
+          canVisit: '',
+          companyType: 1,
+          erpOrgId: '',
+          hasFace: '',
+          hkStatus: '',
+          includeChild: false,
+          type: 2
+        },
+        page: 1,
+        capacity: 30
+      }).then(res => {
+        this.memberList = res.records || []
+        this.memberList.forEach(item => {
+          item.keyTemp = item.id + '-' + item.name + '-' + item.companyName || ''
+        })
+        // console.log('defaultProps', res)
+      })
+    },
+    callback (row) {
+      console.log(row)
+      this.$set(this.searchForm, 'companyId', row.id)
+      this.$set(this.searchForm, 'erpOrgId', row.erpId)
+      this.getMemberList()
+    },
+    TransferSub () {
+      const { activeIndex } = this
+      if (this.searchForm.objIds && this.searchForm.objIds.length > 0) {
+        if (this.searchForm.objIds.length > 20) return this.$message.warning('鏈�澶氶�夋嫨20浜�')
+        const arr = this.searchForm.objIds.map(ii => {
+          const obj = ii.split('-')
+          return {
+            id: Number(obj[0]),
+            name: obj[1],
+            companyName: obj[2] || ''
+          }
+        })
+        this.apprList.forEach((item, index) => {
+          if (activeIndex === index) {
+            item.objIds = arr
+          }
+        })
+      }
+      this.isShowTransfer = false
+      console.log(this.searchForm.objIds)
+    },
+    memDel (memIndex) {
+      const { activeIndex } = this
+      this.apprList.forEach((item, index) => {
+        if (activeIndex === index) {
+          item.objIds.splice(memIndex, 1)
+          const objIds = item.objIds.map(i => {
+            return i.id + '-' + i.name
+          })
+          this.$set(this.searchForm, 'objIds', objIds)
+        }
+      })
+    },
     selStaff () {
       this.isShowTransfer = true
+      this.getMemberList()
     },
     seleItem (i) {
       this.list.forEach((item, index) => {
@@ -452,45 +588,61 @@
             }
           }
         }
-        .config_data_item_reviewed_content {
-          width: 400px;
-          margin-top: 10px;
-          height: 110px;
-          padding: 12px;
-          box-sizing: border-box;
-          border-radius: 2px;
-          border: 1px solid #dfe2e8;
-          display: flex;
-          align-items: flex-start;
-          flex-wrap: wrap;
-          .add {
-            font-size: 12px;
-            font-weight: 400;
-            color: #435ebe;
-            cursor: pointer;
-            margin-top: 3px;
-          }
-          .config_data_item_reviewed_content_item {
-            padding: 3px 5px;
-            background: #f4f7fc;
-            border-radius: 2px;
-            box-sizing: border-box;
-            margin-right: 10px;
-            margin-bottom: 10px;
-            span {
-              font-size: 12px;
-              font-weight: 400;
-              color: #333333;
-            }
-            i {
-              color: #949ba2;
-              margin-left: 10px;
-              cursor: pointer;
-            }
-          }
-        }
       }
     }
   }
 }
+.config_data_item_reviewed_content {
+  width: 400px;
+  margin-top: 10px;
+  height: 110px;
+  padding: 12px;
+  box-sizing: border-box;
+  border-radius: 2px;
+  border: 1px solid #dfe2e8;
+  display: flex;
+  align-items: flex-start;
+  flex-wrap: wrap;
+  .add {
+    font-size: 12px;
+    font-weight: 400;
+    color: #435ebe;
+    cursor: pointer;
+    margin-top: 3px;
+  }
+  .config_data_item_reviewed_content_item {
+    padding: 3px 5px;
+    background: #f4f7fc;
+    border-radius: 2px;
+    box-sizing: border-box;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    span {
+      font-size: 12px;
+      font-weight: 400;
+      color: #333333;
+    }
+    i {
+      color: #949ba2;
+      margin-left: 10px;
+      cursor: pointer;
+    }
+  }
+}
+.staff_modal {
+  display: flex;
+  .left {
+    width: 300px;
+    margin-right: 20px;
+  }
+  .transfer {
+    height: 600px;
+    ::v-deep .el-transfer-panel__body {
+      height: 500px;
+    }
+    ::v-deep .el-transfer-panel__list.is-filterable {
+      height: 480px;
+    }
+  }
+}
 </style>
diff --git a/admin/src/views/business/approvalReport.vue b/admin/src/views/business/approvalReport.vue
index d39caa1..81e1aa2 100644
--- a/admin/src/views/business/approvalReport.vue
+++ b/admin/src/views/business/approvalReport.vue
@@ -5,45 +5,51 @@
         <div class="config_list">
           <div class="config_list_head">
             <span>閰嶇疆娴佺▼</span>
-            <el-button style="background: #435ebe" type="primary"
-              >鍙戝竷</el-button
-            >
           </div>
           <div class="config_content">
-            <div class="item active">
+            <div class="item">
               <div class="head">鍙戣捣浜�</div>
-              <div class="content">鍐呴儴鍛樺伐</div>
+              <div class="content">璁垮</div>
             </div>
             <div class="arrows">
               <div class="line"></div>
               <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
             </div>
-            <template>
+            <div v-for="(item, index) in apprList" :key="index">
               <div
                 class="item yellow"
-                :class="{ active: activeSel === 'one' }"
-                @click="flowClick('one')"
+                :class="{
+                  active: activeIndex == index,
+                  blue: item.type == '1',
+                }"
+                @click="flowClick(index)"
               >
-                <div class="head">瀹℃壒浜�</div>
+                <div class="head">{{ item.remark }}</div>
                 <div class="content">
-                  <div>鏉庣惓-缁煎悎绉�</div>
+                  <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"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else-if="item.objIds && item.objIds.length > 1">
+                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}绛�</span>
+                    <span v-if="item.approveType == 0"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else>璇烽�夋嫨</div>
                   <i class="el-icon-arrow-right"></i>
                 </div>
               </div>
               <div class="arrows">
-                <div class="line"></div>
-                <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
-              </div>
-            </template>
-            <div
-              class="item blue"
-              :class="{ active: activeSel === 'two' }"
-              @click="flowClick('two')"
-            >
-              <div class="head">鎶勯�佷汉</div>
-              <div class="content">
-                <div>璇烽�夋嫨</div>
-                <i class="el-icon-arrow-right"></i>
+                <template v-if="apprList.length - 1 !== index">
+                  <div class="line"></div>
+                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
+                </template>
+                <i
+                  v-if="apprList.length - 2 === index"
+                  @click="handleAddAppr()"
+                  class="el-icon-circle-plus add"
+                ></i>
               </div>
             </div>
           </div>
@@ -51,56 +57,97 @@
         <div class="config_data">
           <div class="config_data_item">
             <div class="config_data_item_label">閫夋嫨璇ヨ妭鐐圭殑瀹℃壒浜�</div>
-            <el-radio-group v-model="radio">
+            <div class="df_ac mb10">
+              <div>瀹℃壒鑺傜偣鍚嶇О</div>
+              <el-input
+                class="w200 ml10"
+                v-model="apprList[activeIndex].remark"
+              ></el-input>
+            </div>
+            <!-- 鎶勯�佷汉 -->
+            <template v-if="apprList[activeIndex].type == '1'">
+              <div class="config_data_item_reviewed_content">
+                <div
+                  v-for="mem in apprList[activeIndex].objIds"
+                  :key="mem.id"
+                  class="config_data_item_reviewed_content_item"
+                >
+                  <span>{{ mem.name }}</span>
+                  <i class="el-icon-close"></i>
+                </div>
+                <span class="add" @click="selStaff">+娣诲姞</span>
+              </div>
+            </template>
+            <el-radio-group
+              v-if="apprList[activeIndex].type == '0'"
+              v-model="apprList[activeIndex].memberType"
+            >
               <el-radio :label="0">琚浜�</el-radio>
               <el-radio :label="1">鎸囧畾浜哄憳</el-radio>
               <el-radio :label="2">閮ㄩ棬涓荤</el-radio>
             </el-radio-group>
-            <div class="config_data_item_reviewed" v-if="radio === 1">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 1"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>鎸囧畾瀹℃牳浜�</span>
                 <span>涓嶈秴杩�20浜�</span>
               </div>
               <div class="config_data_item_reviewed_content">
-                <div class="config_data_item_reviewed_content_item">
-                  <span>鏍撳瓙鍝�</span>
-                  <i class="el-icon-close"></i>
+                <div
+                  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" @click="memDel(memIndex)"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
             </div>
-            <div class="config_data_item_reviewed" v-if="radio === 2">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 2"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>閮ㄩ棬涓荤</span>
               </div>
               <div class="config_data_item_reviewed_r">
                 <span>琚浜虹殑</span>
                 <el-select
-                  v-model="value"
+                  v-model="apprList[activeIndex].level"
                   placeholder="璇烽�夋嫨"
                   style="margin: 0 20px 0 10px"
                 >
-                  <el-option
-                    v-for="item in options"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  >
-                  </el-option>
+                  <el-option label="鐩存帴涓荤" :value="0" />
+                  <el-option label="浜岀骇涓荤" :value="1" />
+                  <el-option label="涓夌骇涓荤" :value="2" />
+                  <el-option label="鍥涚骇涓荤" :value="4" />
                 </el-select>
-                <el-checkbox v-model="checked"
+                <el-checkbox
+                  v-model="apprList[activeIndex].noleaderOpt"
+                  :true-label="1"
+                  :false-label="0"
                   >鎵句笉鍒颁富绠℃椂锛岀敱涓婄骇涓荤浠e鏍�</el-checkbox
                 >
               </div>
             </div>
           </div>
-          <div class="config_data_item" v-if="radio !== 0">
+          <div
+            class="config_data_item"
+            v-if="
+              (apprList[activeIndex].memberType == 1 ||
+                apprList[activeIndex].memberType == 2) &&
+              apprList[activeIndex].type == '0'
+            "
+          >
             <div class="config_data_item_label">
               瀹℃壒鏂瑰紡
               <span>瀹℃壒浜轰负澶氫釜鏃讹紝閲囩敤鐨勫鎵规柟寮�</span>
             </div>
             <el-radio-group
-              v-model="radio1"
+              v-model="apprList[activeIndex].approveType"
               style="display: flex; flex-direction: column"
             >
               <el-radio :label="0" style="margin-bottom: 20px"
@@ -109,34 +156,68 @@
               <el-radio :label="1">浼氱锛堟墍鏈夊鎵逛汉閮藉悓鎰忔墠鍙�氳繃锛�</el-radio>
             </el-radio-group>
           </div>
-          <div class="config_data_submit" v-if="radio !== 0">
-            <el-button style="background: #435ebe" type="primary"
+          <div class="config_data_submit">
+            <el-button
+              @click="onSubmit"
+              style="background: #435ebe"
+              type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
+            >
+            <el-button
+              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
+              type="danger"
+              plain
+              @click="handleDel"
+              >鍒犻櫎鑺傜偣</el-button
             >
           </div>
         </div>
       </div>
     </template>
     <!--  -->
-    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="800px">
-      <tree-transfer
-        v-model="param.menuIds"
-        :title="['鏈��', '宸查��']"
-        :from_data="fromData"
-        :to_data="selData"
-        :defaultProps="{ label: 'label' }"
-        mode="transfer"
-        height="500px"
-        filter
-        openAll
-        ref="treeTransfer"
-      >
-      </tree-transfer>
+    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="1000px">
+      <div class="staff_modal">
+        <div class="left">
+          <div
+            style="
+              width: 100%;
+              height: 50px;
+              background: rgba(242, 242, 242, 1);
+              line-height: 50px;
+              text-align: center;
+              font-size: 14px;
+            "
+          >
+            浼佷笟缁勭粐鏋舵瀯
+          </div>
+          <div style="width: 100%; height: 100%; overflow-y: scroll">
+            <Tree
+              :list="companyTree"
+              :defaultProps="{
+                name: 'name',
+                status: 'fsStatus',
+                children: 'childList',
+                id: 'id',
+              }"
+              @callback="callback"
+            />
+          </div>
+        </div>
+        <el-transfer
+          filterable
+          :title="['鏈��', '宸查��']"
+          openAll
+          :props="{ label: 'name', key: 'keyTemp' }"
+          filter-placeholder="鎼滅储鍛樺伐"
+          v-model="searchForm.objIds"
+          :data="memberList"
+          class="transfer"
+        >
+        </el-transfer>
+      </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowTransfer = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="isShowTransfer = false"
-          >纭� 瀹�</el-button
-        >
+        <el-button type="primary" @click="TransferSub">纭� 瀹�</el-button>
       </span>
     </el-dialog>
   </TableLayout>
@@ -144,87 +225,184 @@
 
 <script>
 import TableLayout from '@/layouts/TableLayout'
-import treeTransfer from 'el-tree-transfer'
+// import treeTransfer from 'el-tree-transfer'
+import Tree from '@/components/common/Tree'
+import { approveTemplSave, approveTemplByType } from '@/api'
+import { fetchList } from '@/api/business/company'
+import { fetchList as memberListPost } from '@/api/business/member'
 export default {
   name: 'config',
   components: {
     TableLayout,
-    treeTransfer
+    Tree
   },
   data () {
     return {
-
-      value: '',
-      radio: 0,
-      radio1: 0,
-      checked: '',
-      checkList: [],
+      activeType: '2',
+      apprList: [
+        { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
+        { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
+      ],
+      activeIndex: 0,
 
       param: {},
-      activeSel: 'one',
-      activeName: 'first',
+      searchForm: {},
       isShowTransfer: false,
-      fromData: [
-        {
-          id: '1',
-          pid: 0,
-          label: '涓�绾� 1',
-          children: [
-            {
-              id: '1-1',
-              pid: '1',
-              label: '浜岀骇 1-1',
-              disabled: true,
-              children: []
-            },
-            {
-              id: '1-2',
-              pid: '1',
-              label: '浜岀骇 1-2',
-              children: [
-                {
-                  id: '1-2-1',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-1'
-                },
-                {
-                  id: '1-2-2',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-2'
-                }
-              ]
-            }
-          ]
-        }
-      ],
-      options: [{
-        value: '閫夐」1',
-        label: '榛勯噾绯�'
-      }, {
-        value: '閫夐」2',
-        label: '鍙岀毊濂�'
-      }, {
-        value: '閫夐」3',
-        label: '铓典粩鐓�'
-      }, {
-        value: '閫夐」4',
-        label: '榫欓』闈�'
-      }, {
-        value: '閫夐」5',
-        label: '鍖椾含鐑ら腑'
-      }],
-      selData: []
+      memberList: [],
+      companyTree: []
     }
   },
+  created () {
+    this.getfindCompanyTreePage()
+    this.initDate()
+  },
   methods: {
-    flowClick (val) {
-      this.activeSel = val
+    flowClick (i) {
+      this.activeIndex = i
+      this.apprList.forEach((item, index) => {
+        if (i === index) {
+          item.active = true
+          if (item.objIds && item.objIds.length > 0) {
+            const objIds = item.objIds.map(i => {
+              return i.id + '-' + i.name
+            })
+            this.$set(this.searchForm, 'objIds', objIds)
+          } else {
+            this.$set(this.searchForm, 'objIds', [])
+          }
+        } else {
+          item.active = false
+        }
+      })
+    },
+    initDate () {
+      const { activeType } = this
+      approveTemplByType(activeType).then(res => {
+        if (res && res.paramList) {
+          const arr = res.paramList || []
+          arr.forEach(item => {
+            if (item.memberList && item.memberList.length > 0) {
+              item.objIds = item.memberList.map(i => {
+                return {
+                  id: i.id,
+                  name: i.name
+                }
+              })
+            }
+          })
+          this.apprList = arr
+        }
+
+        // console.log(res);
+      })
+      this.flowClick(0)
+      this.$forceUpdate()
+    },
+    onSubmit () {
+      const { apprList, activeType } = this
+      const temp = JSON.parse(JSON.stringify(apprList))
+      temp.forEach((item, index) => {
+        item.level = index + 1
+        if (item.objIds && item.objIds.length > 0) {
+          item.objIds = item.objIds.map(i => i.id).join(',')
+        }
+      })
+      approveTemplSave({
+        type: activeType,
+        paramList: temp
+      }).then(res => {
+        if (res.code === 200) {
+          this.$message.success('淇濆瓨鎴愬姛')
+        }
+      })
+    },
+    handleDel () {
+      const { activeIndex } = this
+      this.apprList.splice(activeIndex, 1)
+      this.activeIndex = 0
+    },
+    handleAddAppr () {
+      this.apprList.splice(this.apprList.length - 2, 0, { remark: '瀹℃壒浜�', active: false, type: 0, objIds: [] })
+      // this.apprList.push({ remark: '瀹℃壒浜�', active: false, type: '0' })
     },
 
+    // 鑾峰彇缁勭粐鏍�
+    getfindCompanyTreePage () {
+      fetchList()
+        .then(res => {
+          if (res && res.length > 0) {
+            res[0].fsStatus = 1
+            this.companyTree = res
+            // // this.searchForm.erpOrgId = res[0].erpId
+            // this.search()
+            // this.department = this.getDepartmentTree(res)
+          }
+        })
+    },
+    getMemberList () {
+      memberListPost({
+        model: {
+          companyId: this.searchForm.companyId || '',
+          canVisit: '',
+          companyType: 1,
+          erpOrgId: '',
+          hasFace: '',
+          hkStatus: '',
+          includeChild: false,
+          type: 2
+        },
+        page: 1,
+        capacity: 30
+      }).then(res => {
+        this.memberList = res.records || []
+        this.memberList.forEach(item => {
+          item.keyTemp = item.id + '-' + item.name + '-' + item.companyName || ''
+        })
+        // console.log('defaultProps', res)
+      })
+    },
+    callback (row) {
+      console.log(row)
+      this.$set(this.searchForm, 'companyId', row.id)
+      this.$set(this.searchForm, 'erpOrgId', row.erpId)
+      this.getMemberList()
+    },
+    TransferSub () {
+      const { activeIndex } = this
+      if (this.searchForm.objIds && this.searchForm.objIds.length > 0) {
+        if (this.searchForm.objIds.length > 20) return this.$message.warning('鏈�澶氶�夋嫨20浜�')
+        const arr = this.searchForm.objIds.map(ii => {
+          const obj = ii.split('-')
+          return {
+            id: Number(obj[0]),
+            name: obj[1],
+            companyName: obj[2] || ''
+          }
+        })
+        this.apprList.forEach((item, index) => {
+          if (activeIndex === index) {
+            item.objIds = arr
+          }
+        })
+      }
+      this.isShowTransfer = false
+      console.log(this.searchForm.objIds)
+    },
+    memDel (memIndex) {
+      const { activeIndex } = this
+      this.apprList.forEach((item, index) => {
+        if (activeIndex === index) {
+          item.objIds.splice(memIndex, 1)
+          const objIds = item.objIds.map(i => {
+            return i.id + '-' + i.name
+          })
+          this.$set(this.searchForm, 'objIds', objIds)
+        }
+      })
+    },
     selStaff () {
       this.isShowTransfer = true
+      this.getMemberList()
     },
     seleItem (i) {
       this.list.forEach((item, index) => {
@@ -290,10 +468,19 @@
         display: flex;
         flex-direction: column;
         align-items: center;
+        position: relative;
         .line {
           width: 1px;
           height: 60px;
           background-color: #ccc;
+        }
+        .add {
+          font-size: 40px;
+          color: #2080f7;
+          position: absolute;
+          cursor: pointer;
+          z-index: 999;
+          top: 10px;
         }
         img {
           width: 12px;
@@ -388,45 +575,61 @@
             }
           }
         }
-        .config_data_item_reviewed_content {
-          width: 400px;
-          margin-top: 10px;
-          height: 110px;
-          padding: 12px;
-          box-sizing: border-box;
-          border-radius: 2px;
-          border: 1px solid #dfe2e8;
-          display: flex;
-          align-items: flex-start;
-          flex-wrap: wrap;
-          .add {
-            font-size: 12px;
-            font-weight: 400;
-            color: #435ebe;
-            cursor: pointer;
-            margin-top: 3px;
-          }
-          .config_data_item_reviewed_content_item {
-            padding: 3px 5px;
-            background: #f4f7fc;
-            border-radius: 2px;
-            box-sizing: border-box;
-            margin-right: 10px;
-            margin-bottom: 10px;
-            span {
-              font-size: 12px;
-              font-weight: 400;
-              color: #333333;
-            }
-            i {
-              color: #949ba2;
-              margin-left: 10px;
-              cursor: pointer;
-            }
-          }
-        }
       }
     }
   }
 }
+.config_data_item_reviewed_content {
+  width: 400px;
+  margin-top: 10px;
+  height: 110px;
+  padding: 12px;
+  box-sizing: border-box;
+  border-radius: 2px;
+  border: 1px solid #dfe2e8;
+  display: flex;
+  align-items: flex-start;
+  flex-wrap: wrap;
+  .add {
+    font-size: 12px;
+    font-weight: 400;
+    color: #435ebe;
+    cursor: pointer;
+    margin-top: 3px;
+  }
+  .config_data_item_reviewed_content_item {
+    padding: 3px 5px;
+    background: #f4f7fc;
+    border-radius: 2px;
+    box-sizing: border-box;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    span {
+      font-size: 12px;
+      font-weight: 400;
+      color: #333333;
+    }
+    i {
+      color: #949ba2;
+      margin-left: 10px;
+      cursor: pointer;
+    }
+  }
+}
+.staff_modal {
+  display: flex;
+  .left {
+    width: 300px;
+    margin-right: 20px;
+  }
+  .transfer {
+    height: 600px;
+    ::v-deep .el-transfer-panel__body {
+      height: 500px;
+    }
+    ::v-deep .el-transfer-panel__list.is-filterable {
+      height: 480px;
+    }
+  }
+}
 </style>
diff --git a/admin/src/views/business/carEvent.vue b/admin/src/views/business/carEvent.vue
index b18baf6..5ba7970 100644
--- a/admin/src/views/business/carEvent.vue
+++ b/admin/src/views/business/carEvent.vue
@@ -1,118 +1,186 @@
 <template>
-    <TableLayout :permissions="['business:carevent:query']">
-        <!-- 鎼滅储琛ㄥ崟 -->
-        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="杞︾墝鍙�" prop="plateNos">
-                <el-input v-model="searchForm.plateNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿" @keypress.enter.native="search"></el-input>
-            </el-form-item>
-            <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
-                <el-input v-model="searchForm.keyWords" 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>
-            <el-form-item label="浜哄憳绫诲瀷" prop="memberType">
-                <el-select v-model="searchForm.memberType" placeholder="璇烽�夋嫨">
-                    <el-option label="鍔冲姟璁垮" value="0"></el-option>
-                    <el-option label="鏅�氳瀹�" value="1"></el-option>
-                    <el-option label="鍐呴儴浜哄憳" value="2"></el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
-                <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
-                    <el-option label="鍏ュ満鍘嬬嚎浜嬩欢" value="771760130"></el-option>
-                    <el-option label="鍏ュ満鏀捐浜嬩欢" value="771760131"></el-option>
-                    <el-option label="鍑哄満鍘嬬嚎浜嬩欢" value="771760133"></el-option>
-                    <el-option label="鍑哄満鏀捐浜嬩欢" value="771760134"></el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="璧峰鏃堕棿" prop="eventType">
-                <el-date-picker
-                    @change="seleTime"
-                    v-model="time"
-                    type="datetimerange"
-                    format="yyyy-MM-dd HH:mm:ss"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    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-button label="0">褰撳ぉ</el-radio-button>
-                <el-radio-button label="1">杩�7澶�</el-radio-button>
-                <el-radio-button label="2">杩�30澶�</el-radio-button>
-            </el-radio-group>
-            <section>
-                <el-button type="primary" @click="search">鎼滅储</el-button>
-                <el-button @click="reset">閲嶇疆</el-button>
-            </section>
-        </el-form>
-        <!-- 琛ㄦ牸鍜屽垎椤� -->
-        <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:carevent:exportExcel']">
-              <li><el-button type="primary"   v-permissions="['business:carevent:sync']" @click="$refs.OperaCarEventHkWindow.open('鍚屾杩囪溅璁板綍')">鍚屾</el-button></li>
-              <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:carevent:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
-            </ul>
-            <el-table
-                v-loading="isWorking.search"
-                :data="tableData.list"
-                stripe
-            >
-                <el-table-column prop="plateNos" label="杞︾墝鍙�" min-width="100px"></el-table-column>
-                <el-table-column prop="parkName" label="鍋滆溅搴撳悕绉�" min-width="100px"></el-table-column>
-                <el-table-column prop="gateName" label="鍑哄叆鍙e悕绉�" min-width="100px"></el-table-column>
-                <el-table-column prop="eventTypeName" label="浜嬩欢绫诲瀷" min-width="100px"></el-table-column>
-                <el-table-column label="鍑哄叆绫诲瀷" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.inoutType === 0">杩涘満</span>
-                        <span v-if="row.inoutType === 1">鍑哄満</span>
-                    </template>
-                </el-table-column>
-              <el-table-column label="褰掑睘鐢ㄦ埛绫诲瀷" min-width="100px">
-                <template slot-scope="{row}">
-                  <span v-if="row.personType == 0">鍔冲姟璁垮</span>
-                  <span v-if="row.personType == 1">鏅�氳瀹�</span>
-                  <span v-if="row.personType == 2">鍐呴儴浜哄憳</span>
-                </template>
-              </el-table-column>
-              <el-table-column prop="personName" label="濮撳悕" min-width="100px"></el-table-column>
-              <el-table-column prop="personPhone" label="鎵嬫満鍙�" min-width="100px"></el-table-column>
-              <el-table-column prop="personCompanyName" label="缁勭粐" min-width="100px"></el-table-column>
-              <el-table-column label="杞︾墝鎶撴媿鍥�" min-width="100px">
-                <template slot-scope="{row}">
-                  <div  v-if="row.platePicUrl!=null">
-                    <el-image
-                        style="width: 80px; height: 80px"
-                        :src="row.platePicUrl"
-                        :preview-src-list="[row.platePicUrl]">
-                    </el-image>
-                  </div>
-                </template>
-              </el-table-column>
-                <el-table-column label="鎶撴媿鍥剧墖" min-width="100px">
-                    <template slot-scope="{row}">
-                      <div  v-if="row.vehiclePicUrl!=null">
-                        <el-image
-                            style="width: 80px; height: 80px"
-                            :src="row.vehiclePicUrl"
-                            :preview-src-list="[row.vehiclePicUrl]">
-                        </el-image>
-                      </div>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="happenTime" label="浜嬩欢鏃堕棿" min-width="100px"></el-table-column>
-            </el-table>
-            <pagination
-                @size-change="handleSizeChange"
-                @current-change="handlePageChange"
-                :pagination="tableData.pagination"
-            >
-            </pagination>
+  <TableLayout :permissions="['business:carevent:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form
+      ref="searchForm"
+      slot="search-form"
+      :model="searchForm"
+      label-width="100px"
+      inline
+    >
+      <el-form-item label="杞︾墝鍙�" prop="plateNos">
+        <el-input
+          v-model="searchForm.plateNos"
+          placeholder="璇疯緭鍏ヨ溅鐗屽彿"
+          @keypress.enter.native="search"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
+        <el-input
+          v-model="searchForm.keyWords"
+          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>
+      <el-form-item label="浜哄憳绫诲瀷" prop="memberType">
+        <el-select v-model="searchForm.memberType" placeholder="璇烽�夋嫨">
+          <el-option label="鍔冲姟璁垮" value="0"></el-option>
+          <el-option label="鏅�氳瀹�" value="1"></el-option>
+          <el-option label="鍐呴儴浜哄憳" value="2"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="浜嬩欢绫诲瀷" prop="eventType">
+        <el-select v-model="searchForm.eventType" placeholder="璇烽�夋嫨">
+          <el-option label="鍦ㄥ洯鍘嬬嚎浜嬩欢" value="771760130"></el-option>
+          <el-option label="鍦ㄥ洯鏀捐浜嬩欢" value="771760131"></el-option>
+          <el-option label="绂诲洯鍘嬬嚎浜嬩欢" value="771760133"></el-option>
+          <el-option label="绂诲洯鏀捐浜嬩欢" value="771760134"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璧峰鏃堕棿" prop="eventType">
+        <el-date-picker
+          @change="seleTime"
+          v-model="time"
+          type="datetimerange"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          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-button label="0">褰撳ぉ</el-radio-button>
+        <el-radio-button label="1">杩�7澶�</el-radio-button>
+        <el-radio-button label="2">杩�30澶�</el-radio-button>
+      </el-radio-group>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:carevent:exportExcel']">
+        <li>
+          <el-button
+            type="primary"
+            v-permissions="['business:carevent:sync']"
+            @click="$refs.OperaCarEventHkWindow.open('鍚屾杩囪溅璁板綍')"
+            >鍚屾</el-button
+          >
+        </li>
+        <li>
+          <el-button
+            type="primary"
+            :loading="isWorking.export"
+            v-permissions="['business:carevent:exportExcel']"
+            @click="exportExcel"
+            >瀵煎嚭</el-button
+          >
+        </li>
+      </ul>
+      <el-table v-loading="isWorking.search" :data="tableData.list" stripe>
+        <el-table-column
+          prop="plateNos"
+          label="杞︾墝鍙�"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="parkName"
+          label="鍋滆溅搴撳悕绉�"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="gateName"
+          label="鍑哄叆鍙e悕绉�"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="eventTypeName"
+          label="浜嬩欢绫诲瀷"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column label="鍑哄叆绫诲瀷" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.inoutType === 0">杩涘満</span>
+            <span v-if="row.inoutType === 1">绂诲洯</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="褰掑睘鐢ㄦ埛绫诲瀷" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.personType == 0">鍔冲姟璁垮</span>
+            <span v-if="row.personType == 1">鏅�氳瀹�</span>
+            <span v-if="row.personType == 2">鍐呴儴浜哄憳</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="personName"
+          label="濮撳悕"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="personPhone"
+          label="鎵嬫満鍙�"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="personCompanyName"
+          label="缁勭粐"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column label="杞︾墝鎶撴媿鍥�" min-width="100px">
+          <template slot-scope="{ row }">
+            <div v-if="row.platePicUrl != null">
+              <el-image
+                style="width: 80px; height: 80px"
+                :src="row.platePicUrl"
+                :preview-src-list="[row.platePicUrl]"
+              >
+              </el-image>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎶撴媿鍥剧墖" min-width="100px">
+          <template slot-scope="{ row }">
+            <div v-if="row.vehiclePicUrl != null">
+              <el-image
+                style="width: 80px; height: 80px"
+                :src="row.vehiclePicUrl"
+                :preview-src-list="[row.vehiclePicUrl]"
+              >
+              </el-image>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="happenTime"
+          label="浜嬩欢鏃堕棿"
+          min-width="100px"
+        ></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
 
-          <OperaCarEventHkWindow ref="OperaCarEventHkWindow" @success="search()" />
-        </template>
-    </TableLayout>
+      <OperaCarEventHkWindow ref="OperaCarEventHkWindow" @success="search()" />
+    </template>
+  </TableLayout>
 </template>
 
 <script>
@@ -124,8 +192,8 @@
 export default {
   name: 'CarEvent',
   extends: BaseTable,
-  components: { TableLayout, Pagination ,OperaCarEventHkWindow},
-  data () {
+  components: { TableLayout, Pagination, OperaCarEventHkWindow },
+  data() {
     return {
       // 鎼滅储
       searchForm: {
@@ -141,7 +209,7 @@
       time: []
     }
   },
-  created () {
+  created() {
     this.config({
       module: '鍋滆溅鍦轰簨浠舵帹閫佽褰曡〃',
       api: '/business/carEvent',
@@ -152,14 +220,14 @@
     this.search()
   },
   methods: {
-    reset () {
+    reset() {
       this.$refs.searchForm.resetFields()
       this.searchForm.radio = '0'
       this.changeRadio('0')
       this.time = []
       this.search()
     },
-    changeRadio (e) {
+    changeRadio(e) {
       if (e === '0') {
         this.searchForm.startTime = timeForMat(0)[0]
         this.searchForm.endTime = timeForMat(0)[1]
@@ -175,7 +243,7 @@
       }
       this.search()
     },
-    seleTime (e) {
+    seleTime(e) {
       this.searchForm.startTime = e[0]
       this.searchForm.endTime = e[1]
       this.searchForm.radio = null
diff --git a/admin/src/views/business/reportRecord.vue b/admin/src/views/business/reportRecord.vue
index 348d2ef..98ee6a0 100644
--- a/admin/src/views/business/reportRecord.vue
+++ b/admin/src/views/business/reportRecord.vue
@@ -1,30 +1,106 @@
 <template>
   <div class="main_app">
-    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" />
-    <el-table v-loading="loading" :data="list" stripe row-key="id" default-expand-all>
-      <el-table-column prop="" label="鍏ュ洯杞﹁締" min-width="100" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="鍏徃鍚嶇О" min-width="120" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="鑱旂郴浜轰俊鎭�" min-width="100" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="鎵嬫満鍙�" min-width="120" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="琚浜�" min-width="120" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="鎷滆鏃堕棿" min-width="120" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" label="鎷滆浜嬬敱" min-width="80" show-overflow-tooltip></el-table-column>
-      <el-table-column prop="" fixed="right" label="鐘舵��" min-width="100"></el-table-column>
+    <QueryForm
+      v-model="filters"
+      :query-form-config="queryFormConfig"
+      @handleQuery="getList(1)"
+      @clear="clear"
+    />
+    <el-table
+      v-loading="loading"
+      :data="dataList"
+      stripe
+      row-key="id"
+      default-expand-all
+    >
+      <el-table-column
+        prop="carNos"
+        label="鍏ュ洯杞﹁締"
+        min-width="100px"
+      ></el-table-column>
+      <el-table-column
+        prop="companyName"
+        label="鍏徃鍚嶇О"
+        min-width="100px"
+      ></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="receptMemberName"
+        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>
+      </el-table-column>
+      <el-table-column
+        prop="reason"
+        label="鎷滆浜嬬敱"
+        min-width="100px"
+      ></el-table-column>
+      <el-table-column
+        prop="status"
+        fixed="right"
+        label="鐘舵��"
+        min-width="100px"
+      >
+        <template slot-scope="{ row }">
+          <span style="color: rgba(245, 154, 35, 0.996)" v-if="row.status === 0"
+            >寰呮彁浜ゅ鎵�</span
+          >
+          <span v-if="row.status === 1" style="color: rgba(245, 154, 35, 0.996)"
+            >瀹℃壒涓�</span
+          >
+          <span v-if="row.status === 2" style="color: rgba(245, 154, 35, 0.996)"
+            >瀹℃牳閫氳繃</span
+          >
+          <span style="color: gray" v-if="row.status === 3">瀹℃牳涓嶉�氳繃</span>
+          <span v-if="row.status === 4" style="color: gray">鍙栨秷</span>
+          <span v-if="row.status === 5" style="color: green">棰勭害鎴愬姛</span>
+          <span v-if="row.status === 6" style="color: gray">棰勭害澶辫触</span>
+          <span v-if="row.status === 7" style="color: green">鎷滆涓�</span>
+          <span v-if="row.status === 8" style="color: red">宸茬绂�</span>
+          <span v-if="row.status === 9" style="color: gray">宸插け鏁�</span>
+        </template>
+      </el-table-column>
       <el-table-column label="鎿嶄綔" width="230" fixed="right">
-        <template slot-scope="{row}">
-          <el-button type="text" @click="handleDetail(row)" v-permissions="['business:company:update']">鏌ョ湅璇︽儏</el-button>
+        <template slot-scope="{ row }">
+          <el-button
+            type="text"
+            @click="handleDetail(row)"
+            v-permissions="['business:company:update']"
+            >鏌ョ湅璇︽儏</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
-    <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" />
-    <ReportDetail v-if="isShowDetail" ref="DetailRef" />
+    <pagination
+      @size-change="handleSizeChange"
+      @current-change="getList"
+      :pagination="pagination"
+    />
+    <ReportDetail v-if="isShowReport" ref="VisReportDetailRef" />
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
-import ReportDetail from './page-components/ReportDetail.vue'
+// import ReportDetail from './page-components/ReportDetail.vue'
+import ReportDetail from '@/views/task/visReportDetail.vue'
+import { fetchList } from '@/api/business/visits'
 export default {
   components: {
     ReportDetail,
@@ -33,18 +109,19 @@
   },
   data () {
     return {
-      isShowDetail: false,
+      isShowReport: false,
       activeTab: '0',
       filters: {},
+      dataList: [],
       queryFormConfig: {
         formItems: [
           {
-            filed: 'idCard',
+            filed: 'carNos',
             type: 'input',
             label: '杞︾墝鍙�'
           },
           {
-            filed: 'name',
+            filed: 'companyName',
             type: 'input',
             label: '鍏徃鍚嶇О'
           }
@@ -60,19 +137,38 @@
         capacity: 10,
         page: 1
       },
-      list: [{}],
       total: 0
     }
   },
+  created () {
+    this.getList()
+  },
   methods: {
-    handleDetail () {
-      this.isShowDetail = true
+    handleDetail (row) {
+      this.isShowReport = true
       this.$nextTick(() => {
-        this.$refs.DetailRef.isShowModal = true
+        this.$nextTick(() => {
+          this.$refs.VisReportDetailRef.id = row.id
+          this.$refs.VisReportDetailRef.type = 1
+          this.$refs.VisReportDetailRef.getDetail()
+          this.$refs.VisReportDetailRef.isShowModal = true
+        })
       })
     },
-    getList (page) {},
-    clear () { },
+    getList (page) {
+      const { pagination, filters } = this
+      pagination.page = page || pagination.page
+      fetchList({
+        model: { ...filters, type: 2 },
+        ...pagination
+      }).then(res => {
+        this.dataList = res.records || []
+      })
+    },
+    clear () {
+      this.filters = {}
+      this.getList(0)
+    },
     handleSizeChange (capacity) {
       this.pagination.capacity = capacity
     }
@@ -81,5 +177,4 @@
 </script>
 
 <style lang="scss" scoped>
-
 </style>
diff --git a/admin/src/views/business/retention.vue b/admin/src/views/business/retention.vue
index a5f1420..965b213 100644
--- a/admin/src/views/business/retention.vue
+++ b/admin/src/views/business/retention.vue
@@ -1,99 +1,144 @@
 <template>
-    <TableLayout :permissions="['business:retention:query']">
-        <!-- 鎼滅储琛ㄥ崟 -->
-        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
-                <el-input v-model="searchForm.keyWords" 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>
-            <el-form-item label="浜哄憳绫诲瀷" prop="type">
-                <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
-                    <el-option label="鍔冲姟璁垮" value="0"></el-option>
-                    <el-option label="鏅�氳瀹�" value="1"></el-option>
-                    <el-option label="鍐呴儴鍛樺伐" value="2"></el-option>
-                </el-select>
-            </el-form-item>
-            <el-form-item label="璧峰鏃堕棿" prop="startTime">
-                <el-date-picker
-                    @change="seleTime"
-                    v-model="time"
-                    type="datetimerange"
-                    format="yyyy-MM-dd HH:mm:ss"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    range-separator="鑷�"
-                    start-placeholder="寮�濮嬫棩鏈�"
-                    end-placeholder="缁撴潫鏃ユ湡">
-                </el-date-picker>
-            </el-form-item>
-            <section>
-                <el-button type="primary" @click="search">鎼滅储</el-button>
-                <el-button @click="reset">閲嶇疆</el-button>
-            </section>
-        </el-form>
-        <!-- 琛ㄦ牸鍜屽垎椤� -->
-        <template v-slot:table-wrap>
-            <ul class="toolbar" v-permissions="['business:retention:exportExcel']">
-                <li><el-button type="primary" :loading="isWorking.export" v-permissions="['business:retention:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
-            </ul>
-            <el-table
-                v-loading="isWorking.search"
-                :data="tableData.list"
-                stripe
-                @selection-change="handleSelectionChange"
+  <TableLayout :permissions="['business:retention:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form
+      ref="searchForm"
+      slot="search-form"
+      :model="searchForm"
+      label-width="100px"
+      inline
+    >
+      <el-form-item label="濮撳悕/鎵嬫満鍙�" prop="keyWords">
+        <el-input
+          v-model="searchForm.keyWords"
+          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>
+      <el-form-item label="浜哄憳绫诲瀷" prop="type">
+        <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+          <el-option label="鍔冲姟璁垮" value="0"></el-option>
+          <el-option label="鏅�氳瀹�" value="1"></el-option>
+          <el-option label="鍐呴儴鍛樺伐" value="2"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璧峰鏃堕棿" prop="startTime">
+        <el-date-picker
+          @change="seleTime"
+          v-model="time"
+          type="datetimerange"
+          format="yyyy-MM-dd HH:mm:ss"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          range-separator="鑷�"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        >
+        </el-date-picker>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:retention:exportExcel']">
+        <li>
+          <el-button
+            type="primary"
+            :loading="isWorking.export"
+            v-permissions="['business:retention:exportExcel']"
+            @click="exportExcel"
+            >瀵煎嚭</el-button
+          >
+        </li>
+      </ul>
+      <el-table
+        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="companyName" label="缁勭粐" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.type === 2 || row.type === 0">{{
+              row.companyName
+            }}</span>
+            <span v-else>{{ row.visitCompanyName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="type" label="浜哄憳绫诲瀷" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.type === 0">鍔冲姟璁垮</span>
+            <span v-if="row.type === 1">鏅�氳瀹�</span>
+            <span v-if="row.type === 2">鍐呴儴鍛樺伐</span>
+          </template>
+        </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="idcardDecode"
+          label="韬唤璇佸彿"
+          min-width="130px"
+        ></el-table-column>
+        <el-table-column label="杩涘満闂ㄧ" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.type === 1">-</span>
+            <span v-else>{{ row.deviceName }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="eventDate"
+          label="杩涘満鏃堕棿"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column label="浜鸿劯鐓х墖" min-width="100px">
+          <template slot-scope="{ row }">
+            <el-image
+              v-if="row.faceImgFull != null"
+              style="width: 80px; height: 80px"
+              :src="row.faceImgFull"
+              :preview-src-list="[row.faceImgFull]"
             >
-                <el-table-column type="selection" width="55"></el-table-column>
-                <el-table-column prop="companyName" label="缁勭粐" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.type === 2 || row.type === 0">{{row.companyName}}</span>
-                        <span v-else>{{row.visitCompanyName}}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="type" label="浜哄憳绫诲瀷" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.type === 0">鍔冲姟璁垮</span>
-                        <span v-if="row.type === 1">鏅�氳瀹�</span>
-                        <span v-if="row.type === 2">鍐呴儴鍛樺伐</span>
-                    </template>
-                </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="idcardDecode" label="韬唤璇佸彿" min-width="130px"></el-table-column>
-                <el-table-column label="杩涘満闂ㄧ" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.type === 1">-</span>
-                        <span v-else>{{row.deviceName}}</span>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="eventDate" label="杩涘満鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column label="浜鸿劯鐓х墖" min-width="100px">
-                  <template slot-scope="{row}">
-                    <el-image v-if="row.faceImgFull!=null"
-                      style="width: 80px; height: 80px"
-                      :src="row.faceImgFull"
-                      :preview-src-list="[row.faceImgFull]">
-                    </el-image>
-                  </template>
-                </el-table-column>
-              <el-table-column
-                  label="鎿嶄綔"
-                  min-width="120"
-                  fixed="right"
-              >
-                <template slot-scope="{row}">
-                  <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:retention:delete']">鏍囪绂诲満</el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-            <pagination
-                @size-change="handleSizeChange"
-                @current-change="handlePageChange"
-                :pagination="tableData.pagination"
+            </el-image>
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
+          <template slot-scope="{ row }">
+            <el-button
+              type="text"
+              @click="deleteById(row)"
+              icon="el-icon-delete"
+              v-permissions="['business:retention:delete']"
+              >鏍囪绂诲満</el-button
             >
-            </pagination>
-        </template>
-    </TableLayout>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
 </template>
 
 <script>
@@ -104,7 +149,7 @@
   name: 'Retention',
   extends: BaseTable,
   components: { TableLayout, Pagination },
-  data () {
+  data() {
     return {
       // 鎼滅储
       searchForm: {
@@ -117,9 +162,9 @@
       time: []
     }
   },
-  created () {
+  created() {
     this.config({
-      module: '鍦ㄥ巶浜哄憳淇℃伅 琛紙婊炵暀锛�',
+      module: '鍦ㄥ洯浜哄憳淇℃伅 琛紙婊炵暀锛�',
       api: '/business/retention',
       'field.id': 'id',
       'field.main': 'id'
@@ -127,14 +172,14 @@
     this.search()
   },
   methods: {
-    reset () {
+    reset() {
       this.$refs.searchForm.resetFields()
       this.searchForm.startTime = ''
       this.searchForm.endTime = ''
       this.time = []
       this.search()
     },
-    seleTime (e) {
+    seleTime(e) {
       this.searchForm.startTime = e[0]
       this.searchForm.endTime = e[1]
     }
diff --git a/admin/src/views/business/strandedPersonnel.vue b/admin/src/views/business/strandedPersonnel.vue
index 2916436..596ee84 100644
--- a/admin/src/views/business/strandedPersonnel.vue
+++ b/admin/src/views/business/strandedPersonnel.vue
@@ -1,80 +1,129 @@
 <template>
-    <TableLayout :permissions="['business:member:query']">
-        <!-- 鎼滅储琛ㄥ崟 -->
-        <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-            <el-form-item label="濮撳悕" prop="name">
-                <el-input v-model="searchForm.name" 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>
-            <el-form-item label="鐢ㄦ埛绫诲瀷" prop="type">
-                <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
-                    <el-option label="璁垮" value="1"></el-option>
-                    <el-option label="鍔冲姟" value="0"></el-option>
-                </el-select>
-            </el-form-item>
-            <section>
-                <el-button type="primary" @click="search">鎼滅储</el-button>
-                <el-button @click="reset">閲嶇疆</el-button>
-            </section>
-        </el-form>
-        <!-- 琛ㄦ牸鍜屽垎椤� -->
-        <template v-slot:table-wrap>
-<!--            <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">-->
-<!--                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws">绂诲満</el-button></li>-->
-<!--            </ul>-->
-            <el-table
-                v-loading="isWorking.search"
-                :data="tableData.list"
-                stripe
-                @selection-change="handleSelectionChange"
+  <TableLayout :permissions="['business:member:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form
+      ref="searchForm"
+      slot="search-form"
+      :model="searchForm"
+      label-width="100px"
+      inline
+    >
+      <el-form-item label="濮撳悕" prop="name">
+        <el-input
+          v-model="searchForm.name"
+          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>
+      <el-form-item label="鐢ㄦ埛绫诲瀷" prop="type">
+        <el-select v-model="searchForm.type" placeholder="璇烽�夋嫨">
+          <el-option label="璁垮" value="1"></el-option>
+          <el-option label="鍔冲姟" value="0"></el-option>
+        </el-select>
+      </el-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <!--            <ul class="toolbar" v-permissions="['business:member:create', 'business:member:delete']">-->
+      <!--                <li><el-button type="primary" v-permissions="['business:member:create']" @click="thaws">绂诲満</el-button></li>-->
+      <!--            </ul>-->
+      <el-table
+        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="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 label="鐢ㄦ埛绫诲瀷" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.type === 0">鍔冲姟璁垮</span>
+            <span v-if="row.type === 1">鏅�氳瀹�</span>
+            <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="inDate"
+          label="鍦ㄥ洯鏃堕棿"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column
+          prop="outDate"
+          label="鎺堟潈鍒版湡鏃堕棿"
+          min-width="100px"
+        ></el-table-column>
+        <el-table-column label="瓒呮椂鏃堕暱" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.outStatus === 1"
+              >{{ row.timeOut.toString().replace("-", "") }}鍒嗛挓</span
             >
-<!--                <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 label="鐢ㄦ埛绫诲瀷" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.type === 0">鍔冲姟璁垮</span>
-                        <span v-if="row.type === 1">鏅�氳瀹�</span>
-                        <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
-                    </template>
-                </el-table-column>
-                <el-table-column prop="inDate" label="鍏ュ満鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column prop="outDate" label="鎺堟潈鍒版湡鏃堕棿" min-width="100px"></el-table-column>
-                <el-table-column label="瓒呮椂鏃堕暱" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.outStatus === 1">{{row.timeOut.toString().replace('-', '')}}鍒嗛挓</span>
-                        <span v-else>-</span>
-                    </template>
-                </el-table-column>
-                <el-table-column label="鐘舵��" min-width="100px">
-                    <template slot-scope="{row}">
-                        <span v-if="row.outStatus === 0">鏈秴鏃�</span>
-                        <span style="color: red;" v-else-if="row.outStatus === 1">宸茶秴鏃�</span>
-                        <span v-else-if="row.outStatus === 2">鍗冲皢瓒呮椂</span>
-                    </template>
-                </el-table-column>
-                <el-table-column
-                    v-if="containPermissions(['business:member:update', 'business:member:delete'])"
-                    label="鎿嶄綔"
-                    min-width="120"
-                    fixed="right"
-                >
-                    <template slot-scope="{row}">
-                        <el-button type="text" icon="el-icon-edit" v-permissions="['business:member:update']" @click="departure(row.id)">绂诲巶</el-button>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <pagination
-                @size-change="handleSizeChange"
-                @current-change="handlePageChange"
-                :pagination="tableData.pagination"
+            <span v-else>-</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="鐘舵��" min-width="100px">
+          <template slot-scope="{ row }">
+            <span v-if="row.outStatus === 0">鏈秴鏃�</span>
+            <span style="color: red" v-else-if="row.outStatus === 1"
+              >宸茶秴鏃�</span
             >
-            </pagination>
-        </template>
-    </TableLayout>
+            <span v-else-if="row.outStatus === 2">鍗冲皢瓒呮椂</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-if="
+            containPermissions([
+              'business:member:update',
+              'business:member:delete',
+            ])
+          "
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{ row }">
+            <el-button
+              type="text"
+              icon="el-icon-edit"
+              v-permissions="['business:member:update']"
+              @click="departure(row.id)"
+              >绂诲巶</el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
 </template>
 
 <script>
@@ -87,7 +136,7 @@
   name: 'strandedPersonnel',
   extends: BaseTable,
   components: { TableLayout, Pagination },
-  data () {
+  data() {
     return {
       // 鎼滅储
       searchForm: {
@@ -99,7 +148,7 @@
       user: []
     }
   },
-  created () {
+  created() {
     this.config({
       module: '浜哄憳淇℃伅琛�',
       api: '/business/strandedPersonnel',
@@ -122,7 +171,7 @@
           })
       }).catch(() => {
 
-      });
+      })
     },
     // thaws () {
     //   if (this.tableData.selectedRows.length === 0) return this.$message.warning('鑷冲皯閫夋嫨涓�椤瑰唴瀹�')
@@ -146,7 +195,7 @@
     //
     //   })
     // },
-    getUser () {
+    getUser() {
       findAllList({})
         .then(res => {
           this.user = res.map(item => {
diff --git a/admin/src/views/business/visitorSources.vue b/admin/src/views/business/visitorSources.vue
index 6833446..b0dc5c6 100644
--- a/admin/src/views/business/visitorSources.vue
+++ b/admin/src/views/business/visitorSources.vue
@@ -1,69 +1,105 @@
 <template>
-    <div class="box">
-        <el-form :model="form" ref="form" label-width="140px">
-            <div><span style="font-size: 15px;font-weight: bold">浜哄憳鎺堟潈閰嶇疆锛�</span></div>
-          <el-form-item label="" prop="frezzDays" label-width="50px">
-            浜哄憳闂ㄧ鎺堟潈鍐荤粨锛氳繛缁�
-            <el-input style="width: 50px;" type="text" v-model="form.frezzDays" placeholder="" v-trim/>
-            澶╋紝鏃犻棬绂�/杞﹁締闂告満浜嬩欢
-          </el-form-item>
-            <div><span style="font-size: 15px;font-weight: bold">璁垮閰嶇疆锛�</span></div>
-            <el-form-item label="鏉ヨ棰勭害鏂瑰紡:" prop="reservationWay">
-                <el-radio-group v-model="form.reservationWay">
-                    <el-radio :label="0">棰勭害鍏嶇櫥璁�</el-radio>
-                    <el-radio :label="1">棰勭害鍚庣櫥璁�(闇�瑕侀厤澶囪瀹㈡満)</el-radio>
-                </el-radio-group>
-            </el-form-item>
-            <el-form-item label="琚浜烘牎楠屾柟寮�:" prop="checkVisit">
-                <el-radio-group v-model="form.checkVisit">
-                    <el-radio :label="0">浠呮墜鏈哄彿</el-radio>
-                    <el-radio :label="1">鎵嬫満鍙�&濮撳悕</el-radio>
-                </el-radio-group>
-            </el-form-item>
-            <el-form-item label="鍋ュ悍璇佹槸鍚﹀繀濉�:" prop="healthCard">
-                <el-radio-group v-model="form.healthCard">
-                    <el-radio :label="0">鍚�</el-radio>
-                    <el-radio :label="1">鏄�</el-radio>
-                </el-radio-group>
-            </el-form-item>
-            <el-form-item label="鍏佽鑷�夐棬绂佺粍:" prop="doorsVisitRequired">
-                <el-switch
-                    v-model="form.doorsVisitRequired"
-                    active-color="#13ce66"
-                    inactive-color="#ff4949"
-                    :active-value="1"
-                    :inactive-value="0">
-                </el-switch>
-            </el-form-item>
-            <el-form-item label="璁垮鏄惁绛旈:" prop="isAnswer">
-                <el-switch
-                    v-model="form.isAnswer"
-                    active-color="#13ce66"
-                    inactive-color="#ff4949"
-                    :active-value="1"
-                    :inactive-value="0">
-                </el-switch>
-            </el-form-item>
-            <el-form-item label="璁垮绛旈涓婚:" prop="theme">
-                <el-input style="width: 50%;" type="textarea" v-model="form.theme" placeholder="璇疯緭鍏ョ瓟棰樻爣棰�" v-trim/>
-            </el-form-item>
-            <el-form-item label="璁垮绛旈璇存槑:" prop="description">
-                <el-input style="width: 50%;" type="textarea" v-model="form.description" placeholder="璇疯緭鍏�" v-trim/>
-            </el-form-item>
-            <el-form-item label="鍏ュ巶椤荤煡:" prop="visitNotice">
-                <el-tiptap style="width: 50%;" v-model="form.visitNotice" :extensions="extensions" />
-            </el-form-item>
-            <el-form-item label="璁垮棰勭害鎸囧崡:" prop="visitNotice">
-                <el-tiptap style="width: 50%;" v-model="form.visitTips" :extensions="extensions" />
-            </el-form-item>
-            <el-form-item label="璁垮鍏ュ洯瀵艰鍥�:" prop="visitNotice">
-                <el-tiptap style="width: 50%;" v-model="form.visitMap" :extensions="extensions" />
-            </el-form-item>
-            <el-form-item>
-                <el-button type="primary" @click="submit">淇濆瓨閰嶇疆椤�</el-button>
-            </el-form-item>
-        </el-form>
-    </div>
+  <div class="box">
+    <el-form :model="form" ref="form" label-width="140px">
+      <div>
+        <span style="font-size: 15px; font-weight: bold">浜哄憳鎺堟潈閰嶇疆锛�</span>
+      </div>
+      <el-form-item label="" prop="frezzDays" label-width="50px">
+        浜哄憳闂ㄧ鎺堟潈鍐荤粨锛氳繛缁�
+        <el-input
+          style="width: 50px"
+          type="text"
+          v-model="form.frezzDays"
+          placeholder=""
+          v-trim
+        />
+        澶╋紝鏃犻棬绂�/杞﹁締闂告満浜嬩欢
+      </el-form-item>
+      <div>
+        <span style="font-size: 15px; font-weight: bold">璁垮閰嶇疆锛�</span>
+      </div>
+      <el-form-item label="鏉ヨ棰勭害鏂瑰紡:" prop="reservationWay">
+        <el-radio-group v-model="form.reservationWay">
+          <el-radio :label="0">棰勭害鍏嶇櫥璁�</el-radio>
+          <el-radio :label="1">棰勭害鍚庣櫥璁�(闇�瑕侀厤澶囪瀹㈡満)</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="琚浜烘牎楠屾柟寮�:" prop="checkVisit">
+        <el-radio-group v-model="form.checkVisit">
+          <el-radio :label="0">浠呮墜鏈哄彿</el-radio>
+          <el-radio :label="1">鎵嬫満鍙�&濮撳悕</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="鍋ュ悍璇佹槸鍚﹀繀濉�:" prop="healthCard">
+        <el-radio-group v-model="form.healthCard">
+          <el-radio :label="0">鍚�</el-radio>
+          <el-radio :label="1">鏄�</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="鍏佽鑷�夐棬绂佺粍:" prop="doorsVisitRequired">
+        <el-switch
+          v-model="form.doorsVisitRequired"
+          active-color="#13ce66"
+          inactive-color="#ff4949"
+          :active-value="1"
+          :inactive-value="0"
+        >
+        </el-switch>
+      </el-form-item>
+      <el-form-item label="璁垮鏄惁绛旈:" prop="isAnswer">
+        <el-switch
+          v-model="form.isAnswer"
+          active-color="#13ce66"
+          inactive-color="#ff4949"
+          :active-value="1"
+          :inactive-value="0"
+        >
+        </el-switch>
+      </el-form-item>
+      <el-form-item label="璁垮绛旈涓婚:" prop="theme">
+        <el-input
+          style="width: 50%"
+          type="textarea"
+          v-model="form.theme"
+          placeholder="璇疯緭鍏ョ瓟棰樻爣棰�"
+          v-trim
+        />
+      </el-form-item>
+      <el-form-item label="璁垮绛旈璇存槑:" prop="description">
+        <el-input
+          style="width: 50%"
+          type="textarea"
+          v-model="form.description"
+          placeholder="璇疯緭鍏�"
+          v-trim
+        />
+      </el-form-item>
+      <el-form-item label="鍦ㄥ洯椤荤煡:" prop="visitNotice">
+        <el-tiptap
+          style="width: 50%"
+          v-model="form.visitNotice"
+          :extensions="extensions"
+        />
+      </el-form-item>
+      <el-form-item label="璁垮棰勭害鎸囧崡:" prop="visitNotice">
+        <el-tiptap
+          style="width: 50%"
+          v-model="form.visitTips"
+          :extensions="extensions"
+        />
+      </el-form-item>
+      <el-form-item label="璁垮鍏ュ洯瀵艰鍥�:" prop="visitNotice">
+        <el-tiptap
+          style="width: 50%"
+          v-model="form.visitMap"
+          :extensions="extensions"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" @click="submit">淇濆瓨閰嶇疆椤�</el-button>
+      </el-form-item>
+    </el-form>
+  </div>
 </template>
 
 <script>
@@ -96,7 +132,7 @@
 export default {
   name: 'visitorSources',
 
-  data () {
+  data() {
     return {
       form: {
         id: null,
@@ -125,7 +161,7 @@
         new BulletList(),
         new OrderedList(),
         new Image({
-          uploadRequest (file) {
+          uploadRequest(file) {
             const fd = new FormData()
             fd.append('folder', 'visit/')
             fd.append('file', file)
@@ -147,12 +183,12 @@
     }
   },
 
-  created () {
+  created() {
     this.getData()
   },
 
   methods: {
-    getData () {
+    getData() {
       getVisitConfigDTO({})
         .then(res => {
           this.form.checkVisit = res.checkVisit
@@ -168,7 +204,7 @@
           this.form.frezzDays = res.frezzDays
         })
     },
-    submit () {
+    submit() {
       updateVisitConfig({
         isAnswer: this.form.isAnswer,
         healthCard: this.form.healthCard,
@@ -191,10 +227,10 @@
 </script>
 
 <style lang="scss" scoped>
-    .box {
-        width: 100%;
-        padding: 30px;
-        box-sizing: border-box;
-        background: #ffffff;
-    }
+.box {
+  width: 100%;
+  padding: 30px;
+  box-sizing: border-box;
+  background: #ffffff;
+}
 </style>
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 9284bd4..72f3b49 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -1,41 +1,45 @@
 <template>
   <div class="home">
     <div class="home_total">
-      <div class="home_total_head">鍦ㄥ巶浜哄憳鎬昏</div>
+      <div class="home_total_head">鍦ㄥ洯浜哄憳鎬昏</div>
       <div class="home_total_list">
         <div class="home_total_list_item a">
-          <span>{{head && head.workerCount ? head.workerCount : 0}}</span>
+          <span>{{ head && head.workerCount ? head.workerCount : 0 }}</span>
           <span>鍐呴儴鍛樺伐</span>
         </div>
         <div class="home_total_list_item b">
-          <span>{{head && head.visitorCount ? head.visitorCount : 0}}</span>
+          <span>{{ head && head.visitorCount ? head.visitorCount : 0 }}</span>
           <span>璁垮</span>
         </div>
         <div class="home_total_list_item c">
-          <span>{{head && head.lwCount ? head.lwCount : 0}}</span>
+          <span>{{ head && head.lwCount ? head.lwCount : 0 }}</span>
           <span>鍔冲姟浜哄憳</span>
         </div>
         <div class="home_total_list_item d">
-          <span>{{head && head.presenceCarCount ? head.presenceCarCount : 0}}</span>
+          <span>{{
+            head && head.presenceCarCount ? head.presenceCarCount : 0
+          }}</span>
           <span>鍦ㄥ満杞﹁締</span>
         </div>
         <div class="home_total_list_item e">
-          <span>{{head && head.longCarCount ? head.longCarCount : 0}}</span>
+          <span>{{ head && head.longCarCount ? head.longCarCount : 0 }}</span>
           <span>闀挎湡杞﹁締</span>
         </div>
         <div class="home_total_list_item f">
-          <span>{{head && head.visitorCarCount ? head.visitorCarCount : 0}}</span>
+          <span>{{
+            head && head.visitorCarCount ? head.visitorCarCount : 0
+          }}</span>
           <span>棰勭害杞﹁締</span>
         </div>
         <div class="home_total_list_item g">
-          <span>{{head && head.supplierCount ? head.supplierCount : 0}}</span>
+          <span>{{ head && head.supplierCount ? head.supplierCount : 0 }}</span>
           <span>渚涘簲鍟�</span>
         </div>
       </div>
     </div>
     <div class="home_charts">
       <div class="home_charts_item">
-        <div class="home_charts_item_label">鍦ㄥ巶浜哄憳鍗犳瘮</div>
+        <div class="home_charts_item_label">鍦ㄥ洯浜哄憳鍗犳瘮</div>
         <div class="home_charts_item_charts" id="chart1"></div>
       </div>
       <div class="home_charts_item">
@@ -44,61 +48,56 @@
       </div>
     </div>
     <div class="home_table">
-      <div class="home_table_head">瓒呮椂棰勮浜哄憳({{total}})</div>
+      <div class="home_table_head">瓒呮椂棰勮浜哄憳({{ total }})</div>
       <div class="home_table_box">
         <el-table
           :data="list"
-          :header-cell-style="{background: '#dcdde2', color: 'rgb(51, 51, 51)'}"
+          :header-cell-style="{
+            background: '#dcdde2',
+            color: 'rgb(51, 51, 51)',
+          }"
           border
-          style="width: 100%">
-          <el-table-column
-            prop="name"
-            label="璁垮濮撳悕">
+          style="width: 100%"
+        >
+          <el-table-column prop="name" label="璁垮濮撳悕"> </el-table-column>
+          <el-table-column prop="phone" label="璁垮鐢佃瘽"> </el-table-column>
+          <el-table-column prop="companyName" label="璁垮缁勭粐">
           </el-table-column>
-          <el-table-column
-            prop="phone"
-            label="璁垮鐢佃瘽">
-          </el-table-column>
-          <el-table-column
-            prop="companyName"
-            label="璁垮缁勭粐">
-          </el-table-column>
-          <el-table-column
-            label="浜哄憳绫诲瀷">
-            <template slot-scope="{row}">
+          <el-table-column label="浜哄憳绫诲瀷">
+            <template slot-scope="{ row }">
               <span v-if="row.type === 0">鍔冲姟璁垮</span>
               <span v-if="row.type === 1">鏅�氳瀹�</span>
               <span v-if="row.type === 2">鍐呴儴浜哄憳</span>
             </template>
           </el-table-column>
-          <el-table-column
-            prop="outDate"
-            label="鎺堟潈鍒版湡鏃堕棿">
+          <el-table-column prop="outDate" label="鎺堟潈鍒版湡鏃堕棿">
           </el-table-column>
-          <el-table-column
-            label="鐘舵��">
-            <template slot-scope="{row}">
+          <el-table-column label="鐘舵��">
+            <template slot-scope="{ row }">
               <span v-if="row.outStatus === 0">鏈秴鏃�</span>
-              <span style="color: red;" v-if="row.outStatus === 1">宸茶秴鏃�</span>
+              <span style="color: red" v-if="row.outStatus === 1">宸茶秴鏃�</span>
               <span v-if="row.outStatus === 2">鍗冲皢瓒呮椂</span>
             </template>
           </el-table-column>
-          <el-table-column
-            prop="address"
-            label="澶勭悊"
-            width="80">
+          <el-table-column prop="address" label="澶勭悊" width="80">
             <template slot-scope="scope">
-              <el-button type="text" @click="departure(scope.row.id)" v-if="scope.row.outStatus === 1">绂诲巶</el-button>
+              <el-button
+                type="text"
+                @click="departure(scope.row.id)"
+                v-if="scope.row.outStatus === 1"
+                >绂诲巶</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
         <el-pagination
-          style="margin-top: 20px;"
+          style="margin-top: 20px"
           @current-change="handleCurrentChange"
           :current-page="page"
           :page-size="10"
           layout="total, prev, pager, next, jumper"
-          :total="total">
+          :total="total"
+        >
         </el-pagination>
       </div>
     </div>
@@ -110,21 +109,21 @@
 import { body, head, timeoutPage, level } from '@/api/business/staging'
 export default {
   name: 'Index',
-  data () {
+  data() {
     return {
       head: null,
       list: [],
       total: 0,
       data1: [],
-      data2: [[],[]],
+      data2: [[], []],
       page: 1
     }
   },
-  created () {
+  created() {
     this.getHeader()
     this.getData()
   },
-  mounted () {
+  mounted() {
     // this.getcharts2()
   },
   methods: {
@@ -141,7 +140,7 @@
           })
       }).catch(() => {
 
-      });
+      })
     },
     getData() {
       timeoutPage({
@@ -181,11 +180,11 @@
         this.getcharts1()
       })
     },
-    handleCurrentChange (page) {
+    handleCurrentChange(page) {
       this.page = page
       this.getData()
     },
-    getcharts1 () {
+    getcharts1() {
       const myChart = echarts.init(document.getElementById('chart1'))
       // 缁樺埗鍥捐〃
       myChart.setOption({
@@ -232,7 +231,7 @@
         ]
       })
     },
-    getcharts2 () {
+    getcharts2() {
       const myChart = echarts.init(document.getElementById('chart2'))
       myChart.setOption({
         tooltip: {
diff --git a/admin/src/views/operation/serviceCar/apprConfig.vue b/admin/src/views/operation/serviceCar/apprConfig.vue
index 70a430b..9f2d3e6 100644
--- a/admin/src/views/operation/serviceCar/apprConfig.vue
+++ b/admin/src/views/operation/serviceCar/apprConfig.vue
@@ -1,64 +1,59 @@
 <template>
   <TableLayout>
     <template v-slot:table-wrap>
-      <el-tabs v-model="activeName">
-        <el-tab-pane label="瀹ゅ唴鐢ㄨ溅" name="first"></el-tab-pane>
-        <el-tab-pane label="瀹ゅ鐢ㄨ溅" name="second"></el-tab-pane>
+      <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-tabs>
       <div class="config">
         <div class="config_list">
           <div class="config_list_head">
-            <span>娴佺▼閰嶇疆</span>
-            <el-button type="primary">鍙戝竷</el-button>
+            <span>閰嶇疆娴佺▼</span>
           </div>
           <div class="config_content">
-            <div class="item active">
+            <div class="item">
               <div class="head">鍙戣捣浜�</div>
-              <div class="content">鍐呴儴鍛樺伐</div>
+              <div class="content">璁垮</div>
             </div>
             <div class="arrows">
               <div class="line"></div>
               <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
             </div>
-            <div
-              class="item yellow"
-              :class="{ active: activeSel === 'one' }"
-              @click="flowClick('one')"
-            >
-              <div class="head">瀹℃壒浜�</div>
-              <div class="content">
-                <div>鏌愭煇-缁煎悎绉�</div>
-                <i class="el-icon-arrow-right"></i>
+            <div v-for="(item, index) in apprList" :key="index">
+              <div
+                class="item yellow"
+                :class="{
+                  active: activeIndex == index,
+                  blue: item.type == '1',
+                }"
+                @click="flowClick(index)"
+              >
+                <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"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else-if="item.objIds && item.objIds.length > 1">
+                    <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}绛�</span>
+                    <span v-if="item.approveType == 0"> 鎴栫</span>
+                    <span v-if="item.approveType == 1"> 浼氱</span>
+                  </div>
+                  <div v-else>璇烽�夋嫨</div>
+                  <i class="el-icon-arrow-right"></i>
+                </div>
               </div>
-            </div>
-            <div class="arrows">
-              <div class="line"></div>
-              <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
-            </div>
-            <div
-              class="item yellow"
-              :class="{ active: activeSel === 'one' }"
-              @click="flowClick('one')"
-            >
-              <div class="head">瀹℃壒浜�</div>
-              <div class="content">
-                <div>鏉庣惓-缁煎悎绉�</div>
-                <i class="el-icon-arrow-right"></i>
-              </div>
-            </div>
-            <div class="arrows">
-              <div class="line"></div>
-              <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
-            </div>
-            <div
-              class="item blue"
-              :class="{ active: activeSel === 'two' }"
-              @click="flowClick('two')"
-            >
-              <div class="head">鎶勯�佷汉</div>
-              <div class="content">
-                <div>鎸囨淳椹鹃┒鍛�</div>
-                <i class="el-icon-arrow-right"></i>
+              <div class="arrows">
+                <template v-if="apprList.length - 1 !== index">
+                  <div class="line"></div>
+                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
+                </template>
+                <i
+                  v-if="apprList.length - 2 === index"
+                  @click="handleAddAppr()"
+                  class="el-icon-circle-plus add"
+                ></i>
               </div>
             </div>
           </div>
@@ -66,55 +61,97 @@
         <div class="config_data">
           <div class="config_data_item">
             <div class="config_data_item_label">閫夋嫨璇ヨ妭鐐圭殑瀹℃壒浜�</div>
-            <el-radio-group v-model="radio">
+            <div class="df_ac mb10">
+              <div>瀹℃壒鑺傜偣鍚嶇О</div>
+              <el-input
+                class="w200 ml10"
+                v-model="apprList[activeIndex].remark"
+              ></el-input>
+            </div>
+            <!-- 鎶勯�佷汉 -->
+            <template v-if="apprList[activeIndex].type == '1'">
+              <div class="config_data_item_reviewed_content">
+                <div
+                  v-for="mem in apprList[activeIndex].objIds"
+                  :key="mem.id"
+                  class="config_data_item_reviewed_content_item"
+                >
+                  <span>{{ mem.name }}</span>
+                  <i class="el-icon-close"></i>
+                </div>
+                <span class="add" @click="selStaff">+娣诲姞</span>
+              </div>
+            </template>
+            <el-radio-group
+              v-if="apprList[activeIndex].type == '0'"
+              v-model="apprList[activeIndex].memberType"
+            >
+              <!-- <el-radio :label="0">琚浜�</el-radio> -->
               <el-radio :label="1">鎸囧畾浜哄憳</el-radio>
               <el-radio :label="2">閮ㄩ棬涓荤</el-radio>
             </el-radio-group>
-            <div class="config_data_item_reviewed" v-if="radio === 1">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 1"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>鎸囧畾瀹℃牳浜�</span>
                 <span>涓嶈秴杩�20浜�</span>
               </div>
               <div class="config_data_item_reviewed_content">
-                <div class="config_data_item_reviewed_content_item">
-                  <span>鏍撳瓙鍝�</span>
-                  <i class="el-icon-close"></i>
+                <div
+                  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" @click="memDel(memIndex)"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
             </div>
-            <div class="config_data_item_reviewed" v-if="radio === 2">
+            <div
+              class="config_data_item_reviewed"
+              v-if="apprList[activeIndex].memberType == 2"
+            >
               <div class="config_data_item_reviewed_label">
                 <span>閮ㄩ棬涓荤</span>
               </div>
               <div class="config_data_item_reviewed_r">
                 <span>琚浜虹殑</span>
                 <el-select
-                  v-model="value"
+                  v-model="apprList[activeIndex].level"
                   placeholder="璇烽�夋嫨"
                   style="margin: 0 20px 0 10px"
                 >
-                  <el-option
-                    v-for="item in options"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  >
-                  </el-option>
+                  <el-option label="鐩存帴涓荤" :value="0" />
+                  <el-option label="浜岀骇涓荤" :value="1" />
+                  <el-option label="涓夌骇涓荤" :value="2" />
+                  <el-option label="鍥涚骇涓荤" :value="4" />
                 </el-select>
-                <el-checkbox v-model="checked"
+                <el-checkbox
+                  v-model="apprList[activeIndex].noleaderOpt"
+                  :true-label="1"
+                  :false-label="0"
                   >鎵句笉鍒颁富绠℃椂锛岀敱涓婄骇涓荤浠e鏍�</el-checkbox
                 >
               </div>
             </div>
           </div>
-          <div class="config_data_item" v-if="radio !== 0">
+          <div
+            class="config_data_item"
+            v-if="
+              (apprList[activeIndex].memberType == 1 ||
+                apprList[activeIndex].memberType == 2) &&
+              apprList[activeIndex].type == '0'
+            "
+          >
             <div class="config_data_item_label">
               瀹℃壒鏂瑰紡
               <span>瀹℃壒浜轰负澶氫釜鏃讹紝閲囩敤鐨勫鎵规柟寮�</span>
             </div>
             <el-radio-group
-              v-model="radio1"
+              v-model="apprList[activeIndex].approveType"
               style="display: flex; flex-direction: column"
             >
               <el-radio :label="0" style="margin-bottom: 20px"
@@ -123,56 +160,77 @@
               <el-radio :label="1">浼氱锛堟墍鏈夊鎵逛汉閮藉悓鎰忔墠鍙�氳繃锛�</el-radio>
             </el-radio-group>
           </div>
-          <div class="df_ac">
-            <span class="mr10"><strong>鍏佽淇敼鐢宠椤�</strong></span>
-            <el-switch v-model="param.aa" active-value="1" inactive-value="0">
-            </el-switch>
+          <div v-if="apprList[activeIndex].type == '0'" class="df_ac mb10">
+            <div>鍏佽淇敼"椹鹃┒鍛�"</div>
+            <el-switch
+              class="ml10"
+              active-value="0"
+              inactive-value="1"
+              v-model="apprList[activeIndex].driverParam"
+            ></el-switch>
           </div>
-          <div class="df_ac mt10">
-            <span class="mr20">閫夋嫨淇敼椤�</span>
-            <el-select
-              v-model="param.list"
-              collapse-tags
-              multiple
-              placeholder="璇烽�夋嫨,澶氶��"
-            >
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-          </div>
-          <div class="config_data_submit" v-if="radio !== 0">
-            <el-button style="background: #435ebe" type="primary"
+          <div class="config_data_submit">
+            <el-button
+              @click="onSubmit"
+              style="background: #435ebe"
+              type="primary"
               >淇濆瓨閰嶇疆椤�</el-button
+            >
+            <el-button
+              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
+              type="danger"
+              plain
+              @click="handleDel"
+              >鍒犻櫎鑺傜偣</el-button
             >
           </div>
         </div>
       </div>
     </template>
     <!--  -->
-    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="800px">
-      <tree-transfer
-        v-model="param.menuIds"
-        :title="['鏈��', '宸查��']"
-        :from_data="fromData"
-        :to_data="selData"
-        :defaultProps="{ label: 'label' }"
-        mode="transfer"
-        height="500px"
-        filter
-        openAll
-        ref="treeTransfer"
-      >
-      </tree-transfer>
+    <el-dialog title="閫夋嫨鍛樺伐" :visible.sync="isShowTransfer" width="1000px">
+      <div class="staff_modal">
+        <div class="left">
+          <div
+            style="
+              width: 100%;
+              height: 50px;
+              background: rgba(242, 242, 242, 1);
+              line-height: 50px;
+              text-align: center;
+              font-size: 14px;
+            "
+          >
+            浼佷笟缁勭粐鏋舵瀯
+          </div>
+          <div style="width: 100%; height: 100%; overflow-y: scroll">
+            <Tree
+              :list="companyTree"
+              :defaultProps="{
+                name: 'name',
+                status: 'fsStatus',
+                children: 'childList',
+                id: 'id',
+              }"
+              @callback="callback"
+            />
+          </div>
+        </div>
+        <el-transfer
+          filterable
+          :title="['鏈��', '宸查��']"
+          openAll
+          :props="{ label: 'name', key: 'keyTemp' }"
+          filter-placeholder="鎼滅储鍛樺伐"
+          v-model="searchForm.objIds"
+          :data="memberList"
+          class="transfer"
+        >
+        </el-transfer>
+      </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowTransfer = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="isShowTransfer = false"
-          >纭� 瀹�</el-button
-        >
+        <el-button type="primary" @click="TransferSub">纭� 瀹�</el-button>
       </span>
     </el-dialog>
   </TableLayout>
@@ -180,89 +238,195 @@
 
 <script>
 import TableLayout from '@/layouts/TableLayout'
-import treeTransfer from 'el-tree-transfer'
+// import treeTransfer from 'el-tree-transfer'
+import Tree from '@/components/common/Tree'
+import { approveTemplSave, approveTemplByType } from '@/api'
+import { fetchList } from '@/api/business/company'
+import { fetchList as memberListPost } from '@/api/business/member'
 export default {
   name: 'config',
   components: {
     TableLayout,
-    treeTransfer
+    Tree
   },
-  data() {
+  data () {
     return {
-
-      value: '',
-      radio: 0,
-      radio1: 0,
-      checked: '',
-      checkList: [],
+      activeType: '3',
+      apprList: [
+        { remark: '瀹℃壒浜�', active: false, type: '0', objIds: [] },
+        { remark: '鎶勯�佷汉', active: false, type: '1', objIds: [] }
+      ],
+      activeIndex: 0,
 
       param: {},
-      activeSel: 'one',
-      activeName: 'first',
+      searchForm: {},
       isShowTransfer: false,
-      fromData: [
-        {
-          id: '1',
-          pid: 0,
-          label: '涓�绾� 1',
-          children: [
-            {
-              id: '1-1',
-              pid: '1',
-              label: '浜岀骇 1-1',
-              disabled: true,
-              children: []
-            },
-            {
-              id: '1-2',
-              pid: '1',
-              label: '浜岀骇 1-2',
-              children: [
-                {
-                  id: '1-2-1',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-1'
-                },
-                {
-                  id: '1-2-2',
-                  pid: '1-2',
-                  children: [],
-                  label: '浜岀骇 1-2-2'
-                }
-              ]
-            }
-          ]
-        }
-      ],
-      options: [{
-        value: '閫夐」1',
-        label: '榛勯噾绯�'
-      }, {
-        value: '閫夐」2',
-        label: '鍙岀毊濂�'
-      }, {
-        value: '閫夐」3',
-        label: '铓典粩鐓�'
-      }, {
-        value: '閫夐」4',
-        label: '榫欓』闈�'
-      }, {
-        value: '閫夐」5',
-        label: '鍖椾含鐑ら腑'
-      }],
-      selData: []
+      memberList: [],
+      companyTree: []
     }
   },
+  created () {
+    this.getfindCompanyTreePage()
+    this.initDate()
+  },
   methods: {
-    flowClick(val) {
-      this.activeSel = val
+    handleClick () {
+      this.apprList = []
+      const arr = [
+        { remark: '瀹℃壒浜�', active: false, type: 0, objIds: [] },
+        { remark: '鎶勯�佷汉', active: false, type: 1, objIds: [] }
+      ]
+      this.apprList = [...arr]
+      this.initDate()
+    },
+    flowClick (i) {
+      this.activeIndex = i
+      this.apprList.forEach((item, index) => {
+        if (i === index) {
+          item.active = true
+          if (item.objIds && item.objIds.length > 0) {
+            const objIds = item.objIds.map(i => {
+              return i.id + '-' + i.name
+            })
+            this.$set(this.searchForm, 'objIds', objIds)
+          } else {
+            this.$set(this.searchForm, 'objIds', [])
+          }
+        } else {
+          item.active = false
+        }
+      })
+    },
+    initDate () {
+      const { activeType } = this
+      approveTemplByType(activeType).then(res => {
+        if (res && res.paramList) {
+          const arr = res.paramList || []
+          arr.forEach(item => {
+            if (item.memberList && item.memberList.length > 0) {
+              item.objIds = item.memberList.map(i => {
+                return {
+                  id: i.id,
+                  name: i.name
+                }
+              })
+            }
+          })
+          this.apprList = arr
+        }
+
+        // console.log(res);
+      })
+      this.flowClick(0)
+      this.$forceUpdate()
+    },
+    onSubmit () {
+      const { apprList, activeType } = this
+      const temp = JSON.parse(JSON.stringify(apprList))
+      temp.forEach((item, index) => {
+        item.level = index + 1
+        if (item.objIds && item.objIds.length > 0) {
+          item.objIds = item.objIds.map(i => i.id).join(',')
+        }
+      })
+      approveTemplSave({
+        type: activeType,
+        paramList: temp
+      }).then(res => {
+        // if (res.code === 200) {
+        this.$tip.success('淇濆瓨鎴愬姛')
+        // }
+      })
+    },
+    handleDel () {
+      const { activeIndex } = this
+      this.apprList.splice(activeIndex, 1)
+      this.activeIndex = 0
+    },
+    handleAddAppr () {
+      this.apprList.splice(this.apprList.length - 1, 0, { remark: '瀹℃壒浜�', active: false, type: 0, objIds: [] })
+      // this.apprList.push({ remark: '瀹℃壒浜�', active: false, type: '0' })
     },
 
-    selStaff() {
-      this.isShowTransfer = true
+    // 鑾峰彇缁勭粐鏍�
+    getfindCompanyTreePage () {
+      fetchList()
+        .then(res => {
+          if (res && res.length > 0) {
+            res[0].fsStatus = 1
+            this.companyTree = res
+            // // this.searchForm.erpOrgId = res[0].erpId
+            // this.search()
+            // this.department = this.getDepartmentTree(res)
+          }
+        })
     },
-    seleItem(i) {
+    getMemberList () {
+      memberListPost({
+        model: {
+          companyId: this.searchForm.companyId || '',
+          canVisit: '',
+          companyType: 1,
+          erpOrgId: '',
+          hasFace: '',
+          hkStatus: '',
+          includeChild: false,
+          type: 2
+        },
+        page: 1,
+        capacity: 30
+      }).then(res => {
+        this.memberList = res.records || []
+        this.memberList.forEach(item => {
+          item.keyTemp = item.id + '-' + item.name + '-' + item.companyName || ''
+        })
+        // console.log('defaultProps', res)
+      })
+    },
+    callback (row) {
+      console.log(row)
+      this.$set(this.searchForm, 'companyId', row.id)
+      this.$set(this.searchForm, 'erpOrgId', row.erpId)
+      this.getMemberList()
+    },
+    TransferSub () {
+      const { activeIndex } = this
+      if (this.searchForm.objIds && this.searchForm.objIds.length > 0) {
+        if (this.searchForm.objIds.length > 20) return this.$message.warning('鏈�澶氶�夋嫨20浜�')
+        const arr = this.searchForm.objIds.map(ii => {
+          const obj = ii.split('-')
+          return {
+            id: Number(obj[0]),
+            name: obj[1],
+            companyName: obj[2] || ''
+          }
+        })
+        this.apprList.forEach((item, index) => {
+          if (activeIndex === index) {
+            item.objIds = arr
+          }
+        })
+      }
+      this.isShowTransfer = false
+      console.log(this.searchForm.objIds)
+    },
+    memDel (memIndex) {
+      const { activeIndex } = this
+      this.apprList.forEach((item, index) => {
+        if (activeIndex === index) {
+          item.objIds.splice(memIndex, 1)
+          const objIds = item.objIds.map(i => {
+            return i.id + '-' + i.name
+          })
+          this.$set(this.searchForm, 'objIds', objIds)
+        }
+      })
+    },
+    selStaff () {
+      this.isShowTransfer = true
+      this.getMemberList()
+    },
+    seleItem (i) {
       this.list.forEach((item, index) => {
         item.active = index === i
       })
@@ -326,10 +490,19 @@
         display: flex;
         flex-direction: column;
         align-items: center;
+        position: relative;
         .line {
           width: 1px;
           height: 60px;
           background-color: #ccc;
+        }
+        .add {
+          font-size: 40px;
+          color: #2080f7;
+          position: absolute;
+          cursor: pointer;
+          z-index: 999;
+          top: 10px;
         }
         img {
           width: 12px;
@@ -424,45 +597,61 @@
             }
           }
         }
-        .config_data_item_reviewed_content {
-          width: 400px;
-          margin-top: 10px;
-          height: 110px;
-          padding: 12px;
-          box-sizing: border-box;
-          border-radius: 2px;
-          border: 1px solid #dfe2e8;
-          display: flex;
-          align-items: flex-start;
-          flex-wrap: wrap;
-          .add {
-            font-size: 12px;
-            font-weight: 400;
-            color: #435ebe;
-            cursor: pointer;
-            margin-top: 3px;
-          }
-          .config_data_item_reviewed_content_item {
-            padding: 3px 5px;
-            background: #f4f7fc;
-            border-radius: 2px;
-            box-sizing: border-box;
-            margin-right: 10px;
-            margin-bottom: 10px;
-            span {
-              font-size: 12px;
-              font-weight: 400;
-              color: #333333;
-            }
-            i {
-              color: #949ba2;
-              margin-left: 10px;
-              cursor: pointer;
-            }
-          }
-        }
       }
     }
   }
 }
+.config_data_item_reviewed_content {
+  width: 400px;
+  margin-top: 10px;
+  height: 110px;
+  padding: 12px;
+  box-sizing: border-box;
+  border-radius: 2px;
+  border: 1px solid #dfe2e8;
+  display: flex;
+  align-items: flex-start;
+  flex-wrap: wrap;
+  .add {
+    font-size: 12px;
+    font-weight: 400;
+    color: #435ebe;
+    cursor: pointer;
+    margin-top: 3px;
+  }
+  .config_data_item_reviewed_content_item {
+    padding: 3px 5px;
+    background: #f4f7fc;
+    border-radius: 2px;
+    box-sizing: border-box;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    span {
+      font-size: 12px;
+      font-weight: 400;
+      color: #333333;
+    }
+    i {
+      color: #949ba2;
+      margin-left: 10px;
+      cursor: pointer;
+    }
+  }
+}
+.staff_modal {
+  display: flex;
+  .left {
+    width: 300px;
+    margin-right: 20px;
+  }
+  .transfer {
+    height: 600px;
+    ::v-deep .el-transfer-panel__body {
+      height: 500px;
+    }
+    ::v-deep .el-transfer-panel__list.is-filterable {
+      height: 480px;
+    }
+  }
+}
 </style>
diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue
index d5f30a6..85fa291 100644
--- a/admin/src/views/platform/index.vue
+++ b/admin/src/views/platform/index.vue
@@ -1,10 +1,9 @@
 <template>
   <div class="main_app">
-    <div class="main_head mb20">
-      <el-tabs v-model="currentPlatform" class="tabs">
-        <!-- <el-tab-pane label="鐢ㄦ埛绠$悊" name="first" v-for="item in platformList" :key="item.id"></el-tab-pane> -->
-        <el-tab-pane label="鐢ㄦ埛绠$悊" name="first"></el-tab-pane>
-      </el-tabs>
+    <div class="mb20">
+      <el-select v-model="platformId" @change="getList()">
+        <el-option v-for="item in PlatformList" :key="item.id" :value="item.id" :label="item.name" />
+      </el-select>
       <el-button type="primary" class="ml20" @click="handleSet"
         >閰嶇疆鏈堝彴</el-button
       >
@@ -213,11 +212,13 @@
 </template>
 
 <script>
+import { getPlatform, getPlatformJob } from '@/api'
 export default {
-  data() {
+  data () {
     return {
-      currentPlatform: '',
-      platformList: [],
+      platformId: '',
+      PlatformList: [],
+      dataList: [],
 
       isShowSet: false, // 鏈堝彴閰嶇疆
       setParam: {},
@@ -227,22 +228,41 @@
       queuingForm: {}
     }
   },
+  created () {
+    this.getPlatList()
+    this.getList()
+  },
   methods: {
-    handleQueuing(row) {
+    handleQueuing (row) {
       this.isShowQueuing = true
     },
-    handleFinish(item) {
+    getList () {
+      const { platformId } = this
+      getPlatformJob({
+        model: { platformId }
+      }).then(res => {
+        this.dataList = res.records
+      })
+    },
+    handleFinish (item) {
       this.$confirm('楂樻灦搴�6鍙锋湀鍙� 鐨朅12345 浣滀笟缁撴潫', '娓╅Θ鎻愮ず', {
         confirmButtonText: '纭畾',
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       })
     },
-    handleSet() {
+    getPlatList () {
+      getPlatform({
+        model: {}
+      }).then(res => {
+        this.PlatformList = res.records
+      })
+    },
+    handleSet () {
       this.isShowSet = true
     },
-    setReset() { },
-    setSub() { }
+    setReset () { },
+    setSub () { }
   }
 }
 </script>
diff --git a/admin/src/views/platform/set/index.vue b/admin/src/views/platform/set/index.vue
index a596791..9c2c790 100644
--- a/admin/src/views/platform/set/index.vue
+++ b/admin/src/views/platform/set/index.vue
@@ -6,7 +6,7 @@
       @handleQuery="getList(1)"
       @clear="clear"
     />
-    <el-table v-loading="loading" :data="list" stripe>
+    <el-table v-loading="loading" :data="dataList" stripe>
       <el-table-column
         prop="name"
         label="鏈堝彴鍚嶇О"
@@ -18,21 +18,31 @@
         label="宸ヤ綔鏃堕棿"
         min-width="100"
         show-overflow-tooltip
-      />
+      >
+        <template v-slot="scope">
+          <span>{{ scope.row.startTime }}-{{ scope.row.endTime }}</span>
+        </template>
+      </el-table-column>
       <el-table-column
-        prop="name"
-        label="鍚屾椂浣滀笟鎶ヨ鏃堕棿"
+        prop="workingNum"
+        label="鍚屾椂浣滀笟杞﹁締鏁�"
         min-width="100"
         show-overflow-tooltip
       />
       <el-table-column
-        prop="name"
+        prop="alermTime"
+        label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓)"
+        min-width="100"
+        show-overflow-tooltip
+      />
+      <el-table-column
+        prop="wariCallTime"
         label="鍙彿绛夊緟鏃堕棿(鍒嗛挓)"
         min-width="80"
         show-overflow-tooltip
       />
       <el-table-column
-        prop="name"
+        prop=""
         label="鏈堝彴浣滀笟鏁堢巼(涓囨敮/灏忔椂)"
         min-width="120"
         show-overflow-tooltip
@@ -46,8 +56,9 @@
         <template v-slot="scope">
           <el-switch
             v-model="scope.row.status"
-            active-value="1"
-            inactive-value="0"
+            active-value="0"
+            inactive-value="1"
+            @change="e => changeStatus(scope.row)"
           >
           </el-switch>
         </template>
@@ -84,25 +95,32 @@
         label-width="140px"
       >
         <el-form-item label="鏈堝彴鍚嶇О">
-          <el-input v-model="param.aaa" class="w300" disabled></el-input>
+          <el-input v-model="param.name" class="w300" disabled></el-input>
         </el-form-item>
         <el-form-item label="宸ヤ綔鏃堕棿">
           <el-time-picker
-            is-range
-            class="w300"
-            v-model="param.val"
+            class="w100"
+            v-model="param.startTime"
+            range-separator="鑷�"
+            value-format="HH:mm"
+            format="HH:mm"
+          />
+          鑷�
+          <el-time-picker
+            class="w100"
+            v-model="param.endTime"
             range-separator="鑷�"
             value-format="HH:mm"
             format="HH:mm"
           />
         </el-form-item>
         <el-form-item label="鍚屾椂浣滀笟杞﹁締鏁�">
-          <el-input v-model="param.aaa" class="w300"></el-input>
+          <el-input v-model="param.workingNum" class="w300"></el-input>
           <span class="ml10">涓�</span>
         </el-form-item>
         <el-form-item label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿">
           <el-input
-            v-model="param.aaa"
+            v-model="param.alermTime"
             placeholder="璇疯緭鍏�"
             class="w300"
           ></el-input>
@@ -110,7 +128,7 @@
         </el-form-item>
         <el-form-item label="鍙彿绛夊緟鏃堕棿" prop="name">
           <el-input
-            v-model="param.aaa"
+            v-model="param.wariCallTime"
             placeholder="璇疯緭鍏�"
             class="w300"
           ></el-input>
@@ -125,6 +143,14 @@
           />
           <span class="ml10">涓囨敮/灏忔椂</span>
         </el-form-item>
+         <el-form-item label="浣滀笟瓒呮椂鎶ヨ鏃堕棿">
+          <el-input
+            v-model="param.aaa"
+            placeholder="璇疯緭鍏�"
+            class="w300"
+          ></el-input>
+          <span class="ml10">鍒嗛挓</span>
+        </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isShowEdit = false">鍙栨秷</el-button>
@@ -137,6 +163,7 @@
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
+import { getPlatform, PlatformEdit, PlatformDel } from '@/api'
 export default {
   components: {
     Pagination,
@@ -160,21 +187,66 @@
         capacity: 10,
         page: 1
       },
-      list: [{}],
+      dataList: [{}],
       total: 0,
       isShowEdit: false,
       param: {},
       rules: {}
     }
   },
+  created () {
+    this.getList()
+  },
   methods: {
-    getList (page) { },
-    handleSub () { },
-    clear () { },
+    getList (page) {
+      const { filters, pagination } = this
+      pagination.page = page || pagination.page
+      getPlatform({
+        model: { ...filters },
+        ...pagination
+      }).then(res => {
+        this.dataList = res.records
+      })
+    },
+    handleDel (item) {
+      this.$confirm('纭畾鍒犻櫎璇ユ湀鍙板悧, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(res => {
+        PlatformDel(item.id).then(() => {
+          this.getList()
+          this.$tip.success('鍒犻櫎鎴愬姛')
+        })
+      })
+    },
+    handleSub () {
+      const { param } = this
+      PlatformEdit({
+        ...param
+      }).then(res => {
+        this.isShowEdit = false
+        this.$tip.success('鎻愪氦鎴愬姛')
+        this.getList()
+      })
+    },
+    changeStatus (item) {
+      PlatformEdit({
+        ...item,
+        status: item.stauts == 1 ? 0 : 1
+      }).then(res => {
+        this.$tip.success('鏇存柊鎴愬姛')
+        this.getList()
+      })
+    },
+    clear () {
+      this.filters = {}
+      this.getList(0)
+    },
     handleEdit (row) {
       this.isShowEdit = true
+      this.param = { ...row }
     },
-    handleDel () { },
     handleSizeChange (capacity) {
       this.pagination.capacity = capacity
     }
diff --git a/admin/src/views/task/dangetDetail.vue b/admin/src/views/task/dangetDetail.vue
new file mode 100644
index 0000000..76d3a71
--- /dev/null
+++ b/admin/src/views/task/dangetDetail.vue
@@ -0,0 +1,846 @@
+<template>
+  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
+    <div class="modal_wrap">
+      <div class="modal_content">
+        <div class="header">
+          <div class="left">
+            <div class="h1">{{ cateList[type] }}</div>
+            <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+          </div>
+          <div class="right">{{ statusMap[info.status] }}</div>
+        </div>
+        <div class="info">
+          <div class="title">闅愭偅闅忔墜鎷嶄俊鎭�</div>
+          <div class="list">
+            <div class="item">
+              <div class="label">鎻愭姤浜�</div>
+              <div class="value">
+                {{ info.memberName }} {{ info.memberPhone }}
+              </div>
+            </div>
+            <div class="item">
+              <div class="label">闅愭偅鍖哄煙</div>
+              <div class="value">{{ info.areaName }}</div>
+            </div>
+            <div class="item">
+              <div class="label">闅愭偅绫诲瀷</div>
+              <div class="value">{{ info.categoryName }}</div>
+            </div>
+            <div class="item">
+              <div class="label">闅愭偅鎻忚堪</div>
+              <div class="value">{{ info.content }}</div>
+            </div>
+            <div class="item file">
+              <div class="label">鐜板満鎯呭喌</div>
+              <div class="value">
+                <div class="file_list">
+                  <template v-for="item in info.submitFileList">
+                    <img
+                      v-if="item.type == 0"
+                      :key="item.id"
+                      :src="item.fileurlFull"
+                      mode="widthFix"
+                      class="img"
+                    />
+                    <video
+                      v-if="item.type == 1"
+                      :key="item.id"
+                      :src="item.fileurlFull"
+                      class="img"
+                      controls
+                    />
+                  </template>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="side">
+        <div class="side_title">瀹℃壒娴佺▼</div>
+        <div
+          class="list"
+          v-if="
+            info.approveDateVO != null && info.approveDateVO.approveList != null
+          "
+        >
+          <div
+            class="item"
+            v-for="(item, index) in info.approveDateVO.approveList"
+            :key="item.id"
+          >
+            <div
+              class="separate"
+              v-if="index < info.approveDateVO.approveList.length - 1"
+            ></div>
+            <div class="info">
+              <img
+                src="@/assets/icons/ic_tongguo.png"
+                class="iconnew"
+                v-if="item.status == 2"
+              />
+              <img
+                src="@/assets/icons/ic_dangqian.png"
+                class="iconnew"
+                v-if="item.status == 1"
+              />
+              <img
+                src="@/assets/icons/ic_jujue.png"
+                class="iconnew"
+                v-if="item.status == 3"
+              />
+              <img
+                src="@/assets/icons/ic_grey.png"
+                class="iconnew"
+                v-if="item.status == null || item.status == 0"
+              />
+              <div style="display: inline" v-if="item.approveType != 1">
+                <img
+                  v-if="item.faceImg != null && item.faceImg != ''"
+                  :src="item.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.faceImg == null || item.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div style="display: inline" v-if="item.approveType == 1">
+                <img
+                  v-if="item.type != 1"
+                  src="@/assets/icons/ic_duoren.png"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.type == 1"
+                  src="@/assets/icons/ic_chaosong.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div class="content">
+                <div class="line">
+                  <div class="name">{{ item.title }}</div>
+                  <div class="time">{{ item.checkDate }}</div>
+                </div>
+                <div class="line">
+                  <div class="company">
+                    {{ item.memberName }}
+                    <div
+                      style="display: inline"
+                      v-if="item.statusInfo != null && item.statusInfo != ''"
+                    >
+                      锛�<span class="status-green">{{
+                        item.statusInfo || ""
+                      }}</span
+                      >锛�
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div
+              v-if="
+                item.approveType != 1 &&
+                item.checkInfo != null &&
+                item.checkInfo != ''
+              "
+              class="remark"
+            >
+              {{ item.checkInfo || "" }}
+            </div>
+            <div v-if="item.approveType == 1" class="childList">
+              <div
+                class="m_content company"
+                v-for="item1 in item.approveList"
+                :key="item1.id"
+              >
+                <img
+                  v-if="item1.faceImg != null && item1.faceImg != ''"
+                  :src="item1.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item1.faceImg == null || item1.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+                <span> {{ item1.memberName }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!--  -->
+    <template v-slot:footer>
+      <el-button @click="handleAppr" type="primary" class="status-red"
+        >澶勭悊</el-button
+      >
+      <el-button @click="isShowTransfer = true" type="primary" plain
+        >杞氦</el-button
+      >
+      <el-button @click="isShowBack = true" type="danger" plain>閫�鍥�</el-button>
+      <el-button @click="isShowModal = false">杩斿洖</el-button>
+    </template>
+    <!--  鍚屾剰/鎷掔粷 -->
+    <el-dialog
+      append-to-body
+      title="闅愭偅杞氦"
+      :visible.sync="isShowTransfer"
+      width="600px"
+    >
+      <el-form
+        :model="transferForm"
+        :rules="handleRules"
+        ref="transferForm"
+        label-width="100px"
+        class="demo-ruleForm"
+      >
+        <el-form-item label="闅愭偅杞氦浜�" prop="checkUserId">
+          <el-select
+            v-model="transferForm.checkUserId"
+            filterable
+            placeholder="璇烽�夋嫨 鍗曢��"
+          >
+            <el-option
+              v-for="item in memberList"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowTransfer = false">鍙栨秷</el-button>
+        <el-button :loading="subLoading" type="primary" @click="onTransfer"
+          >纭畾</el-button
+        >
+      </span>
+    </el-dialog>
+    <!-- 闅愭偅 -->
+    <el-dialog
+      append-to-body
+      title="闅愭偅鏁存敼"
+      :visible.sync="isShowProblem"
+      width="600px"
+    >
+      <el-form
+        :model="handleParam"
+        :rules="handleRules"
+        ref="handleForm"
+        label-width="100px"
+      >
+        <el-form-item label="鏁存敼鏃堕棿" prop="dealTime">
+          <el-date-picker
+            class="w300"
+            value-format="yyyy-MM-dd hh:mm:ss"
+            type="datetime"
+            placeholder="閫夋嫨鏃ユ湡"
+            v-model="handleParam.dealTime"
+          />
+        </el-form-item>
+        <el-form-item label="鏁存敼鍓�" prop="dealBeforeFileList">
+          <div class="upload_wrap">
+            <el-upload
+              class="avatar-uploader"
+              :action="uploadUrl"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="param.url" :src="param.url" class="avatar" />
+              <div v-else class="upload_box">
+                <el-icon class="el-icon-plus icon" />
+                <div class="text">鍥剧墖/瑙嗛</div>
+              </div>
+            </el-upload>
+            <template v-if="handleParam.dealBeforeFileList">
+              <div
+                class="img_wrap"
+                v-for="(img, i) in handleParam.dealBeforeFileList"
+                :key="i"
+              >
+                <img v-if="img.type == 0" :src="img.fileurlFull" alt="" />
+                <video
+                  v-if="img.type == 1"
+                  :src="img.fileurlFull"
+                  controls
+                  alt=""
+                />
+              </div>
+            </template>
+          </div>
+        </el-form-item>
+        <el-form-item label="鏁存敼鍚�" prop="dealAfterFileList">
+          <div class="upload_wrap">
+            <el-upload
+              class="avatar-uploader"
+              :action="uploadUrl"
+              :show-file-list="false"
+              :on-success="handleAfterSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="param.url" :src="param.url" class="avatar" />
+              <div v-else class="upload_box">
+                <el-icon class="el-icon-plus icon" />
+                <div class="text">鍥剧墖/瑙嗛</div>
+              </div>
+            </el-upload>
+            <template v-if="handleParam.dealAfterFileList">
+              <div
+                class="img_wrap"
+                v-for="(img, i) in handleParam.dealAfterFileList"
+                :key="i"
+              >
+                <img v-if="img.type == 0" :src="img.fileurlFull" alt="" />
+                <video
+                  v-if="img.type == 1"
+                  :src="img.fileurlFull"
+                  controls
+                  alt=""
+                />
+              </div>
+            </template>
+          </div>
+        </el-form-item>
+        <el-form-item label="鏁存敼璇存槑">
+          <el-input
+            type="textarea"
+            placeholder="璇峰~鍐欒鏄�"
+            :rows="4"
+            v-model="handleParam.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="subLoading" @click="onSubAppr"
+          >纭畾</el-button
+        >
+      </span>
+    </el-dialog>
+    <el-dialog
+      append-to-body
+      title="闅愭偅閫�鍥�"
+      :visible.sync="isShowBack"
+      width="600px"
+    >
+      <el-form
+        :model="backForm"
+        :rules="handleRules"
+        ref="backForm"
+        label-width="100px"
+      >
+        <el-form-item label="鏁存敼鏃堕棿" prop="dealTime">
+          <el-date-picker
+            class="w300"
+            value-format="yyyy-MM-dd hh:mm:ss"
+            type="datetime"
+            placeholder="閫夋嫨鏃ユ湡"
+            v-model="backForm.dealTime"
+          />
+        </el-form-item>
+        <el-form-item label="鏁存敼鍓�">
+          <div class="upload_wrap">
+            <el-upload
+              class="avatar-uploader"
+              :action="uploadUrl"
+              :show-file-list="false"
+              :on-success="handleBackSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <div class="upload_box">
+                <el-icon class="el-icon-plus icon" />
+                <div class="text">鍥剧墖/瑙嗛</div>
+              </div>
+            </el-upload>
+            <template v-if="backForm.dealBeforeFileList">
+              <div
+                class="img_wrap"
+                v-for="(img, i) in backForm.dealBeforeFileList"
+                :key="i"
+              >
+                <img v-if="img.type == 0" :src="img.fileurlFull" alt="" />
+                <video
+                  v-if="img.type == 1"
+                  :src="img.fileurlFull"
+                  controls
+                  alt=""
+                />
+              </div>
+            </template>
+          </div>
+        </el-form-item>
+        <el-form-item label="鏁存敼璇存槑">
+          <el-input
+            type="textarea"
+            placeholder="璇峰~鍐欒鏄�"
+            :rows="4"
+            v-model="backForm.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowBack = false">鍙栨秷</el-button>
+        <el-button type="primary" :loading="subLoading" @click="onSubBack"
+          >纭畾</el-button
+        >
+      </span>
+    </el-dialog>
+  </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { memberList } from '@/api/business/hiddenDangerParam'
+import {
+  uploadFile,
+  hiddenDangerDetail,
+  dealHiddenDanger,
+  transferHiddenDanger
+} from '@/api/index'
+
+export default {
+  components: { GlobalWindow },
+  data () {
+    return {
+      id: '',
+      type: '',
+      uploadUrl: uploadFile,
+
+      title: '璁垮棰勭害璇︽儏',
+      isShowModal: false,
+      info: {},
+      isShowAppr: false,
+      apprTitle: '鍚屾剰',
+      subLoading: false,
+      param: {},
+      handleParam: {},
+      backForm: {},
+      isShowBack: false,
+      isShowTransfer: false,
+      transferForm: {},
+      memberList: [],
+      isShowProblem: false,
+      rules: {
+        checkInfo: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      },
+      handleRules: {
+        dealTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        dealBeforeFileList: [{ type: 'array', required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        checkUserId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        dealAfterFileList: [{ type: 'array', required: true, message: '璇烽�夋嫨', trigger: 'change' }]
+      },
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷'
+      },
+      cateList: {
+        0: '璁垮鐢宠',
+        1: '璁垮鎶ュ',
+        2: '鐢ㄨ溅鐢宠',
+        3: '闅愭偅闅忔墜鎷�',
+        4: '鐗╂祦杞︾敵璇�'
+      }
+    }
+  },
+  created() {
+    this.getMemberList()
+  },
+  methods: {
+    onSubAppr () {
+      this.$refs.handleForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.subLoading = true
+        dealHiddenDanger({
+          ...this.handleParam,
+          status: 1,
+          id: this.id
+        })
+          .then(res => {
+            this.subLoading = false
+            this.$tip.apiSuccess('澶勭悊鎴愬姛')
+            this.getDetail()
+            this.isShowProblem = false
+          })
+          .finally(() => {
+            this.subLoading = false
+          })
+      })
+    },
+    onSubBack () {
+      this.$refs.backForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.subLoading = true
+        dealHiddenDanger({
+          ...this.backForm,
+          status: 2,
+          id: this.id
+        })
+          .then(res => {
+            this.subLoading = false
+            this.$tip.apiSuccess('閫�鍥炴垚鍔�')
+            this.getDetail()
+            this.isShowProblem = false
+          })
+          .finally(() => {
+            this.subLoading = false
+          })
+      })
+    },
+    onTransfer () {
+      this.$refs.transferForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.subLoading = true
+        transferHiddenDanger({
+          ...this.transferForm,
+          id: this.id
+        })
+          .then(res => {
+            this.subLoading = false
+            if (res.code !== 200) return
+            this.$tip.apiSuccess('杞氦鎴愬姛')
+            this.getDetail()
+            this.isShowTransfer = false
+          })
+          .finally(() => {
+            this.subLoading = false
+          })
+      })
+    },
+    getMemberList () {
+      memberList({}).then(res => {
+        this.memberList = res || []
+      })
+    },
+    getDetail () {
+      const { id } = this
+      hiddenDangerDetail(id).then(res => {
+        this.info = res
+      })
+    },
+    handleAppr (val) {
+      this.isShowProblem = true
+    },
+    confirm () {
+      console.log('--')
+    },
+    handleTransfer () {
+      this.isShowProblem = true
+    },
+    reject () { },
+    handleAvatarSuccess (res) {
+      if (res.code === 200) {
+        const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
+        const arr = this.handleParam.dealBeforeFileList || []
+        arr.push({
+          type: str ? 0 : 1,
+          fileurl: res.data.imgaddr,
+          fileurlFull: res.data.url
+        })
+        this.$set(this.handleParam, 'dealBeforeFileList', arr)
+      }
+    },
+    handleAfterSuccess (res) {
+      if (res.code === 200) {
+        const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
+        const arr = this.handleParam.dealAfterFileList || []
+        arr.push({
+          type: str ? 0 : 1,
+          fileurl: res.data.imgaddr,
+          fileurlFull: res.data.url
+        })
+        this.$set(this.handleParam, 'dealAfterFileList', arr)
+      }
+    },
+    handleBackSuccess (res) {
+      if (res.code === 200) {
+        const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
+        const arr = this.backForm.dealBeforeFileList || []
+        arr.push({
+          type: str ? 0 : 1,
+          fileurl: res.data.imgaddr,
+          fileurlFull: res.data.url
+        })
+        this.$set(this.backForm, 'dealBeforeFileList', arr)
+      }
+    },
+    beforeAvatarUpload () { }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload_wrap {
+  display: flex;
+  flex-wrap: wrap;
+  .img_wrap {
+    width: 85px;
+    margin-right: 10px;
+    margin-bottom: 10px;
+    img,
+    video {
+      width: 100%;
+    }
+  }
+}
+.upload_box {
+  width: 84px;
+  height: 84px;
+  border-radius: 4px;
+  background-color: #f7f7f7;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  color: #999999;
+  border: 1px solid #e4e4e4;
+  .icon {
+    font-size: 24px;
+  }
+  .text {
+    font-size: 12px;
+  }
+}
+.side_title {
+  font-weight: 600;
+  font-size: 18px;
+  color: #111111;
+  margin-bottom: 20px;
+  margin-left: 20px;
+  margin-top: 20px;
+}
+.modal_wrap {
+  display: flex;
+  height: 100%;
+  .modal_content {
+    flex: 1;
+    padding: 0px 30px;
+    border-radius: 8px;
+    overflow: hidden;
+    height: 100%;
+
+    .title {
+      font-weight: 600;
+      font-size: 18px;
+      color: #333333;
+      margin-bottom: 20px;
+      margin-top: 30px;
+    }
+    .info {
+      .list {
+        display: flex;
+        flex-wrap: wrap;
+
+        .item {
+          display: flex;
+          width: 40%;
+          margin-bottom: 20px;
+          &:nth-of-type(2n) {
+            width: 60%;
+          }
+
+          .label {
+            color: #888888;
+            width: 100px;
+          }
+          .file_list {
+            display: flex;
+            .img {
+              width: 200px;
+              margin-right: 12px;
+              margin-bottom: 12px;
+            }
+          }
+          .value {
+            color: #111111;
+          }
+        }
+        .file {
+          width: 100%;
+        }
+      }
+    }
+
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 20px 30px;
+      margin: 0 -30px;
+      border-radius: 8px 8px 0 0;
+      background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+      .h1 {
+        font-weight: 600;
+        font-size: 22px;
+        color: #111111;
+        margin-bottom: 8px;
+      }
+
+      .time {
+        font-size: 14px;
+        color: #999999;
+      }
+
+      .right {
+        height: 40px;
+        font-size: 16px;
+        color: #ffffff;
+        line-height: 40px;
+        padding: 0 20px;
+        background: #207ff7;
+        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+        border-radius: 16px 0px 16px 0px;
+      }
+    }
+    .table_info {
+      .name_wrap {
+        display: flex;
+        align-items: center;
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin-right: 12px;
+        }
+        .content {
+          .line {
+            display: flex;
+          }
+          .tag {
+            color: #b2cbf9;
+            border: 1px solid #b2cbf9;
+            padding: 0px 4px;
+            border-radius: 4px;
+            margin-left: 6px;
+          }
+        }
+      }
+    }
+  }
+
+  .side {
+    height: 100%;
+    width: 420px;
+    background: #ffffff;
+    border-left: 20px solid #f7f7f7;
+    .list {
+      .item {
+        padding: 8px 0;
+        position: relative;
+        .separate {
+          position: absolute;
+          border-left: 2px dashed #cccccc;
+          left: 31px;
+          height: calc(100% - 36px);
+          top: 49px;
+        }
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin: 0 12px 0 16px;
+          //border: 1px solid;
+        }
+        .childList {
+          display: flex;
+          flex-wrap: wrap;
+          margin-left: 100px;
+        }
+        .company {
+          font-size: 13px;
+          color: #888888;
+          .status {
+            color: #00ba67;
+          }
+        }
+        .m_content {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          margin-bottom: 4px;
+        }
+        .info {
+          display: flex;
+          align-items: center;
+          margin-left: 20px;
+          .icon {
+            position: relative;
+            z-index: 11;
+            color: #53b76f;
+            font-size: 24px;
+          }
+          .icon1 {
+            position: relative;
+            z-index: 11;
+            color: deepskyblue;
+            font-size: 24px;
+          }
+          .icon2 {
+            position: relative;
+            z-index: 11;
+            color: #dc362e;
+            font-size: 24px;
+          }
+          .iconnew {
+            width: 24px;
+            height: 24px;
+          }
+          .icon3 {
+            position: relative;
+            z-index: 11;
+            color: gray;
+            font-size: 24px;
+          }
+          .content {
+            flex: 1;
+            .line {
+              display: flex;
+              justify-content: space-between;
+              align-content: center;
+              margin-bottom: 6px;
+              .name {
+                font-weight: 600;
+                font-size: 16px;
+                color: #111111;
+              }
+              .time {
+                color: #888888;
+              }
+            }
+          }
+        }
+        .remark {
+          background: #f7f7f7;
+          border-radius: 4px;
+          padding: 13px 15px;
+          color: #666666;
+          margin-left: 100px;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index d2673f6..fd6b9ad 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -7,41 +7,91 @@
       @clear="clear"
     />
     <!--  -->
-    <el-tabs v-model="activeTab">
+    <el-tabs v-model="filters.queryType" @tab-click="(e) => getList(1)">
       <el-tab-pane label="寰呭鐞�" name="0">
         <template #label>
           <span
             >寰呭鐞�
-            <el-badge :value="11" class="item" type="danger"> </el-badge>
+            <el-badge
+              v-if="headData.noticeWaitNum"
+              :value="headData.noticeWaitNum"
+              class="item"
+              type="danger"
+            >
+            </el-badge>
           </span>
         </template>
       </el-tab-pane>
-      <el-tab-pane label="宸插鐞�" name="1"></el-tab-pane>
-      <el-tab-pane label="鎴戝彂璧风殑" name="2"></el-tab-pane>
-      <el-tab-pane label="鎶勯�佹垜鐨�" name="3"></el-tab-pane>
+      <el-tab-pane :value="headData.noticeDealNum" label="宸插鐞�" name="1">
+        <template #label>
+          <span
+            >宸插鐞�
+            <el-badge
+              v-if="headData.noticeDealNum"
+              :value="headData.noticeDealNum"
+              class="item"
+              type="danger"
+            >
+            </el-badge>
+          </span>
+        </template>
+      </el-tab-pane>
+      <el-tab-pane :value="headData.noticeCreateNum" label="鎴戝彂璧风殑" name="2">
+        <template #label>
+          <span
+            >鎴戝彂璧风殑
+            <el-badge
+              v-if="headData.noticeCreateNum"
+              :value="headData.noticeCreateNum"
+              class="item"
+              type="danger"
+            >
+            </el-badge>
+          </span>
+        </template>
+      </el-tab-pane>
+      <el-tab-pane :value="headData.noticeCopyNum" label="鎶勯�佹垜鐨�" name="3">
+        <template #label>
+          <span
+            >鎶勯�佹垜鐨�
+            <el-badge
+              v-if="headData.noticeCopyNum"
+              :value="headData.noticeCopyNum"
+              class="item"
+              type="danger"
+            >
+            </el-badge>
+          </span>
+        </template>
+      </el-tab-pane>
     </el-tabs>
     <el-table
       v-loading="loading"
-      :data="list"
+      :data="dataList"
       stripe
       row-key="id"
       default-expand-all
     >
-      <el-table-column
-        prop="name"
-        label="浠诲姟绫诲瀷"
-        min-width="100"
-      ></el-table-column>
-      <el-table-column
-        prop="name"
-        label="鎻愪氦浜�"
-        min-width="80"
-      ></el-table-column>
-      <el-table-column
-        prop="companyNamePath"
-        label="鎻愪氦鏃堕棿"
-        min-width="100"
-      ></el-table-column>
+      <el-table-column prop="name" label="浠诲姟绫诲瀷" min-width="100">
+        <template v-slot="scope">
+          <span
+            v-if="
+              (scope.row.objType || scope.row.objType == 0) &&
+              cateList[scope.row.objType].name
+            "
+            >{{ cateList[scope.row.objType].name }}</span
+          >
+        </template>
+      </el-table-column>
+      <el-table-column label="鎻愪氦浜�" min-width="80">
+        <template v-slot="scope">
+          <span v-if="scope.row.title">{{
+            scope.row.title.split(" - ")[1]
+          }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createDate" label="鎻愪氦鏃堕棿" min-width="100">
+      </el-table-column>
       <el-table-column label="鎿嶄綔" width="230" fixed="right">
         <template slot-scope="{ row }">
           <el-button
@@ -59,62 +109,160 @@
       :pagination="pagination"
     />
     <TaskDetail v-if="isShowDetail" ref="DetailRef" />
+    <VisReportDetail v-if="isShowReport" ref="VisReportDetailRef" />
+    <DangetDetail v-if="isShowDanger" ref="DangetDetailRef" />
+    <!-- 鐢ㄨ溅鐢宠 -->
+    <OperaCarUseBookWindow ref="OperaDetailsWindow" @success="getList"/>
+    <!-- 闅愭偅 -->
+    <OperaHiddenDangerWindow ref="OperaHiddenDangerWindow" @success="getList"/>
+    <!-- 棰勭害璇︽儏 -->
+     <OperaVisitsDesWindow ref="OperaVisitsDesWindow" />
   </div>
 </template>
 
 <script>
 import Pagination from '@/components/common/Pagination'
 import QueryForm from '@/components/common/QueryForm'
-import TaskDetail from './taskDetail.vue'
+import TaskDetail from './visSubDetail.vue'
+import VisReportDetail from './visReportDetail.vue'
+import DangetDetail from './dangetDetail.vue'
+import OperaCarUseBookWindow from '@/components/business/OperaCarUseBookWindow'
+import OperaHiddenDangerWindow from '@/components/business/OperaHiddenDangerWindow'
+import OperaVisitsDesWindow from '@/components/business/OperaVisitsDesWindow'
+import {
+  taskCenterHead,
+  taskCenterPage
+} from '@/api'
 export default {
   components: {
     TaskDetail,
+    VisReportDetail,
+    DangetDetail,
     QueryForm,
-    Pagination
+    Pagination,
+    OperaCarUseBookWindow,
+    OperaHiddenDangerWindow,
+    OperaVisitsDesWindow
   },
   data () {
     return {
       isShowDetail: false,
-      activeTab: '0',
-      filters: {},
+      isShowReport: false,
+      isShowDanger: false,
+      filters: {
+        queryType: '0'
+      },
       queryFormConfig: {
         formItems: [
           {
-            filed: 'taskType',
+            filed: 'type',
             type: 'select',
             label: '浠诲姟绫诲瀷',
-            options: []
+            clearable: false,
+            options: [
+              { label: '璁垮鐢宠', value: '0' },
+              { label: '璁垮鎶ュ', value: '1' },
+              { label: '鐢ㄨ溅鐢宠', value: '2' },
+              { label: '闅愭偅闅忔墜鎷�', value: '3' },
+              { label: '鐗╂祦杞︾敵璇�', value: '4' }
+            ]
           },
           {
-            filed: 'status',
+            filed: 'selDate',
             type: 'daterange',
             label: ''
           }
         ],
         online: true
       },
-      loading: false,
-      sorting: false,
-      searchForm: {
-        // type: 1
-      },
       pagination: {
         capacity: 10,
         page: 1
       },
-      list: [{}],
-      total: 0
+      loading: false,
+      dataList: [],
+      headData: {},
+      total: 0,
+
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 }
+      ]
     }
   },
+  created () {
+    this.getHeadData()
+    this.getList()
+  },
   methods: {
-    handleDetail () {
-      this.isShowDetail = true
-      this.$nextTick(() => {
-        this.$refs.DetailRef.isShowModal = true
+    handleDetail (row) {
+      if (row.objType === 2) {
+        this.$refs.OperaDetailsWindow.open('鍏姟杞︾敵璇疯鎯�', row)
+        return
+      }
+      if (row.objType === 1) {
+        this.isShowReport = true
+        this.$nextTick(() => {
+          this.$refs.VisReportDetailRef.id = row.objId
+          this.$refs.VisReportDetailRef.type = row.objType
+          this.$refs.VisReportDetailRef.getDetail()
+          this.$refs.VisReportDetailRef.isShowModal = true
+        })
+        return
+      }
+      if (row.objType === 3) {
+        const obj = { ...row, id: row.objId }
+        this.$refs.OperaHiddenDangerWindow.open('闅愭偅闅忔墜鎷嶈鎯�', obj)
+        return
+      }
+      if (row.objType === 0) {
+        this.isShowDetail = true
+        this.$nextTick(() => {
+          this.$refs.DetailRef.id = row.objId
+          this.$refs.DetailRef.type = row.objType
+          this.$refs.DetailRef.getDetail()
+          this.$refs.DetailRef.isShowModal = true
+        })
+      }
+    },
+    getList (page) {
+      console.log(this.filters)
+      const { filters, pagination } = this
+      if (filters.selDate && filters.selDate.length > 0) {
+        filters.startDate = filters.selDate[0]
+        filters.endDate = filters.selDate[1]
+      } else {
+        filters.startDate = null
+        filters.endDate = null
+      }
+      pagination.page = page || pagination.page
+      taskCenterPage({
+        model: { ...filters, queryType: Number(filters.queryType) },
+        ...pagination
+      }).then(res => {
+        console.log('res', res)
+        this.dataList = res.records || []
+        this.dataList.forEach(i => {
+          i.param1 = JSON.parse(i.param1)
+        })
       })
     },
-    getList (page) { },
-    clear () { },
+    getHeadData () {
+      taskCenterHead({
+        isDetail: '1'
+      }).then(res => {
+        this.headData = res
+      })
+    },
+    clear () {
+      this.filters = {
+        queryType: '0'
+      }
+      this.getList(0)
+    },
     handleSizeChange (capacity) {
       this.pagination.capacity = capacity
     }
diff --git a/admin/src/views/task/taskDetail.vue b/admin/src/views/task/taskDetail.vue
deleted file mode 100644
index 3337491..0000000
--- a/admin/src/views/task/taskDetail.vue
+++ /dev/null
@@ -1,417 +0,0 @@
-<template>
-  <GlobalWindow
-    :title="title"
-    text="鍚屾剰"
-    backText="鎷掔粷"
-    :visible.sync="isShowModal"
-    @confirm="confirm"
-    @close="reject"
-  >
-    <div class="modal_wrap">
-      <div class="modal_content">
-        <div class="header">
-          <div class="left">
-            <div class="h1">璁垮棰勭害</div>
-            <div class="time">鎻愪氦鏃堕棿锛�</div>
-          </div>
-          <div class="right">寰呭鏍�</div>
-        </div>
-        <div class="info">
-          <div class="title">璁垮棰勭害淇℃伅</div>
-          <div class="list">
-            <div class="item">
-              <div class="label">琚浜�</div>
-              <div class="value"></div>
-            </div>
-            <div class="item">
-              <div class="label">鏉ヨ鏃堕棿</div>
-              <div class="value"></div>
-            </div>
-            <div class="item">
-              <div class="label">鏉ヨ浜嬬敱</div>
-              <div class="value"></div>
-            </div>
-            <div class="item">
-              <div class="label">闅忚杞﹁締</div>
-              <div class="value"></div>
-            </div>
-            <div class="item">
-              <div class="label">鏂藉伐浜哄憳</div>
-              <div class="value"></div>
-            </div>
-            <div class="item">
-              <div class="label">鏂藉伐鍐呭</div>
-              <div class="value"></div>
-            </div>
-          </div>
-        </div>
-        <div class="table_info">
-          <div class="title">璁垮淇℃伅</div>
-          <el-table :data="detail.datalist" border fit>
-            <el-table-column label="濮撳悕" prop="" min-width="150">
-              <template slot-scope="{ row }">
-                <div class="name_wrap">
-                  <image src="" class="avatar" mode="" />
-                  <div class="content">
-                    <div class="line">
-                      <div class="name">鏉庝笢</div>
-                      <div class="tag">鐢宠浜�</div>
-                    </div>
-                    <div class="line placeholder9">1888888</div>
-                  </div>
-                </div>
-              </template>
-            </el-table-column>
-            <el-table-column label="鎬у埆" prop="" min-width="40" />
-            <el-table-column label="璇佷欢绫诲瀷" prop="" min-width="80" />
-            <el-table-column label="璇佷欢鍙风爜" prop="" min-width="120" />
-            <el-table-column label="鍏徃鍚嶇О" prop="" min-width="120" />
-            <el-table-column label="浜鸿劯鐓х墖" prop="" min-width="80">
-              <template slot-scope="{ row }">
-                <el-image :src="row.url" :preview-src-list="[row.url]"> </el-image>
-              </template>
-            </el-table-column>
-          </el-table>
-        </div>
-      </div>
-      <div class="side">
-        <div class="side_title">瀹℃壒娴佺▼</div>
-        <div class="list">
-          <div class="item">
-            <div class="separate"></div>
-            <div class="info">
-              <i class="el-icon-success icon"></i>
-              <img src="" class="avatar" alt="" />
-              <div class="content">
-                <div class="line">
-                  <div class="name">鍒樻煇鍒樻煇</div>
-                  <div class="time">2020-02-02 12:20</div>
-                </div>
-                <div class="line">
-                  <div class="company">涓浗绉诲姩鏈夐檺鍏徃</div>
-                </div>
-              </div>
-            </div>
-          </div>
-          <div class="item">
-            <!-- <div v-if="" class="separate"></div> -->
-            <div class="info">
-              <i class="el-icon-success icon"></i>
-              <img src="" class="avatar" alt="" />
-              <div class="content">
-                <div class="line">
-                  <div class="name">鍒樻煇鍒樻煇</div>
-                  <div class="time">2020-02-02 12:20</div>
-                </div>
-                <div class="line">
-                  <div class="company">
-                    涓浗绉诲姩鏈夐檺鍏徃( <span class="status">宸插悓鎰�</span> )
-                  </div>
-                </div>
-              </div>
-            </div>
-            <div class="remark">鎻愪氦绾﹀ソ鐨�</div>
-          </div>
-        </div>
-      </div>
-    </div>
-    <!--  -->
-    <template #btns>
-      <el-button type="primary" plain @click="handleTransfer">杞氦</el-button>
-    </template>
-    <!--  鍚屾剰/鎷掔粷 -->
-    <el-dialog
-      append-to-body
-      :title="apprTitle"
-      :visible.sync="isShowAppr"
-      width="480px"
-    >
-      <el-input
-        type="textarea"
-        :placeholder="apprTitle + '璇存槑锛岄潪蹇呭~'"
-        :rows="4"
-        v-model="param.explain"
-      />
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="isShowAppr = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="isShowAppr = false">纭畾</el-button>
-      </span>
-    </el-dialog>
-    <!-- 闅愭偅 -->
-    <el-dialog
-      append-to-body
-      title="闅愭偅"
-      :visible.sync="isShowProblem"
-      width="480px"
-    >
-      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
-        <el-form-item label="閫�鍥炴椂闂�">
-          <el-date-picker
-            class="w300"
-            value-format="yyyy-MM-dd"
-            type="date"
-            placeholder="閫夋嫨鏃ユ湡"
-            v-model="param.date"
-          />
-        </el-form-item>
-        <el-form-item label="鏁存敼鍓�">
-          <div class="df_ac">
-            <img src="@/assets/avatar/man.png" />
-            <el-upload
-              class="avatar-uploader"
-              action="https://jsonplaceholder.typicode.com/posts/"
-              :show-file-list="false"
-              :on-success="handleAvatarSuccess"
-              :before-upload="beforeAvatarUpload"
-            >
-              <img v-if="param.url" :src="param.url" class="avatar" />
-              <div v-else class="upload_box">
-                <el-icon class="el-icon-plus icon" />
-                <div class="text">鍥剧墖/瑙嗛</div>
-              </div>
-            </el-upload>
-          </div>
-        </el-form-item>
-        <el-form-item label="閫�鍥炶鏄�">
-          <el-input
-            type="textarea"
-            placeholder="璇峰~鍐欒鏄�"
-            :rows="4"
-            v-model="param.explain"
-          />
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="isShowProblem = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="isShowProblem = false"
-          >纭畾</el-button
-        >
-      </span>
-    </el-dialog>
-  </GlobalWindow>
-</template>
-
-<script>
-import GlobalWindow from '@/components/common/GlobalWindow'
-export default {
-  components: { GlobalWindow },
-  data() {
-    return {
-      title: '璁垮棰勭害璇︽儏',
-      isShowModal: false,
-      detail: {
-        datalist: [{}]
-      },
-
-      isShowAppr: false,
-      apprTitle: '鍚屾剰',
-      param: {},
-
-      isShowProblem: false,
-      rules: {}
-    }
-  },
-  methods: {
-    confirm() {
-      console.log('--')
-    },
-    handleTransfer() {
-      this.isShowProblem = true
-    },
-    reject() { },
-    handleAvatarSuccess() { },
-    beforeAvatarUpload() { }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.upload_box {
-  width: 84px;
-  height: 84px;
-  border-radius: 4px;
-  background-color: #f7f7f7;
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  color: #999999;
-  border: 1px solid #e4e4e4;
-  .icon {
-    font-size: 24px;
-  }
-  .text {
-    font-size: 12px;
-  }
-}
-.modal_wrap {
-  display: flex;
-  height: 100%;
-  .modal_content {
-    flex: 1;
-    padding: 0px 30px;
-    border-radius: 8px;
-    overflow: hidden;
-    height: 100%;
-
-    .title {
-      font-weight: 600;
-      font-size: 18px;
-      color: #333333;
-      margin-bottom: 20px;
-      margin-top: 30px;
-    }
-
-    .info {
-      .list {
-        display: flex;
-        flex-wrap: wrap;
-
-        .item {
-          display: flex;
-          width: 40%;
-          margin-bottom: 20px;
-          &:nth-of-type(2n) {
-            width: 60%;
-          }
-
-          .label {
-            color: #888888;
-            width: 68px;
-          }
-
-          .value {
-            color: #111111;
-          }
-        }
-      }
-    }
-
-    .header {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      padding: 20px 30px;
-      margin: 0 -30px;
-      border-radius: 8px 8px 0 0;
-      background: linear-gradient(to right, #f2f6fe, #cadffa);
-
-      .h1 {
-        font-weight: 600;
-        font-size: 22px;
-        color: #111111;
-        margin-bottom: 8px;
-      }
-
-      .time {
-        font-size: 14px;
-        color: #999999;
-      }
-
-      .right {
-        height: 40px;
-        font-size: 16px;
-        color: #ffffff;
-        line-height: 40px;
-        padding: 0 20px;
-        background: #207ff7;
-        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
-        border-radius: 16px 0px 16px 0px;
-      }
-    }
-    .table_info {
-      .name_wrap {
-        display: flex;
-        align-items: center;
-        .avatar {
-          width: 40px;
-          height: 40px;
-          border-radius: 50%;
-          margin-right: 12px;
-        }
-        .content {
-          .line {
-            display: flex;
-          }
-          .tag {
-            color: #b2cbf9;
-            border: 1px solid #b2cbf9;
-            padding: 0px 4px;
-            border-radius: 4px;
-            margin-left: 6px;
-          }
-        }
-      }
-    }
-  }
-
-  .side {
-    height: 100%;
-    width: 420px;
-    background: #ffffff;
-    border-left: 20px solid #f7f7f7;
-    .list {
-      .item {
-        padding: 8px 0;
-        position: relative;
-        .separate {
-          position: absolute;
-          border-left: 2px dashed #cccccc;
-          left: 51px;
-          height: calc(100% - 24px);
-          top: 46px;
-        }
-        .info {
-          display: flex;
-          align-items: center;
-          margin-left: 40px;
-          .icon {
-            position: relative;
-            z-index: 11;
-            color: #53b76f;
-            font-size: 24px;
-          }
-          .avatar {
-            width: 40px;
-            height: 40px;
-            border-radius: 50%;
-            margin: 0 12px 0 16px;
-            border: 1px solid;
-          }
-          .content {
-            flex: 1;
-            .line {
-              display: flex;
-              justify-content: space-between;
-              align-content: center;
-              margin-bottom: 6px;
-              .name {
-                font-weight: 600;
-                font-size: 16px;
-                color: #111111;
-              }
-              .time {
-                color: #888888;
-              }
-              .company {
-                font-size: 13px;
-                color: #888888;
-                .status {
-                  color: #00ba67;
-                }
-              }
-            }
-          }
-        }
-        .remark {
-          background: #f7f7f7;
-          border-radius: 4px;
-          padding: 13px 15px;
-          color: #666666;
-          margin-left: 120px;
-        }
-      }
-    }
-  }
-}
-</style>
diff --git a/admin/src/views/task/visReportDetail.vue b/admin/src/views/task/visReportDetail.vue
new file mode 100644
index 0000000..fa7d122
--- /dev/null
+++ b/admin/src/views/task/visReportDetail.vue
@@ -0,0 +1,594 @@
+<template>
+  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
+    <div class="modal_wrap">
+      <div class="modal_content">
+        <div class="header">
+          <div class="left">
+            <div class="h1">{{ cateList[type] }}</div>
+            <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+          </div>
+          <div class="right">{{ statusMap[info.status] }}</div>
+        </div>
+        <div class="info">
+          <div class="title">璁垮鎶ュ淇℃伅</div>
+          <div class="list">
+            <div class="item">
+              <div class="label">琚浜�</div>
+              <div class="value">{{ info.receptMemberName }} {{ info.receptMemberDepartment }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏉ヨ鏃堕棿</div>
+              <div class="value">{{ info.starttime }}鑷硔{ info.endtime }}</div>
+            </div>
+             <div class="item">
+              <div class="label">鏉ヨ鍗曚綅</div>
+              <div class="value">{{ info.companyName }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏉ヨ浜嬬敱</div>
+              <div class="value">{{ info.reason }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鑱旂郴浜�</div>
+              <div class="value">{{ info.name }} {{ info.phone }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鍏ュ洯杞﹁締</div>
+              <div class="value">{{ info.carNos }}</div>
+            </div>
+            <div class="item">
+              <div class="label">闅忚溅浜烘暟</div>
+              <div class="value">{{ info.memberNum || 0 }}浜�</div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="side">
+        <div class="side_title">瀹℃壒娴佺▼</div>
+        <div
+          class="list"
+          v-if="
+            info.approveDateVO != null && info.approveDateVO.approveList != null
+          "
+        >
+          <div
+            class="item"
+            v-for="(item, index) in info.approveDateVO.approveList"
+            :key="item.id"
+          >
+            <div
+              class="separate"
+              v-if="index < info.approveDateVO.approveList.length - 1"
+            ></div>
+            <div class="info">
+              <img
+                src="@/assets/icons/ic_tongguo.png"
+                class="iconnew"
+                v-if="item.status == 2"
+              />
+              <img
+                src="@/assets/icons/ic_dangqian.png"
+                class="iconnew"
+                v-if="item.status == 1"
+              />
+              <img
+                src="@/assets/icons/ic_jujue.png"
+                class="iconnew"
+                v-if="item.status == 3"
+              />
+              <img
+                src="@/assets/icons/ic_grey.png"
+                class="iconnew"
+                v-if="item.status == null || item.status == 0"
+              />
+              <div style="display: inline" v-if="item.approveType != 1">
+                <img
+                  v-if="item.faceImg != null && item.faceImg != ''"
+                  :src="item.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.faceImg == null || item.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div style="display: inline" v-if="item.approveType == 1">
+                <img
+                  v-if="item.type != 1"
+                  src="@/assets/icons/ic_duoren.png"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.type == 1"
+                  src="@/assets/icons/ic_chaosong.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div class="content">
+                <div class="line">
+                  <div class="name">{{ item.title }}</div>
+                  <div class="time">{{ item.checkDate }}</div>
+                </div>
+                <div class="line">
+                  <div class="company">
+                    {{ item.memberName }}
+                    <div
+                      style="display: inline"
+                      v-if="item.statusInfo != null && item.statusInfo != ''"
+                    >
+                      锛�<span class="status-green">{{
+                        item.statusInfo || ""
+                      }}</span
+                      >锛�
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div
+              v-if="
+                item.approveType != 1 &&
+                item.checkInfo != null &&
+                item.checkInfo != ''
+              "
+              class="remark"
+            >
+              {{ item.checkInfo || "" }}
+            </div>
+            <div v-if="item.approveType == 1" class="childList">
+              <div
+                class="m_content company"
+                v-for="item1 in item.approveList"
+                :key="item1.id"
+              >
+                <img
+                  v-if="item1.faceImg != null && item1.faceImg != ''"
+                  :src="item1.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item1.faceImg == null || item1.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+                <span> {{ item1.memberName }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!--  -->
+    <template v-slot:footer>
+      <el-button
+        @click="handleAppr(2)"
+        type="primary"
+        class="status-red"
+        v-if="
+          info.approveDateVO != null &&
+          info.approveDateVO.canBeApproved != null &&
+          info.approveDateVO.canBeApproved == 1
+        "
+        >鍚屾剰</el-button
+      >
+      <el-button
+        @click="handleAppr(3)"
+        type="danger"
+        v-if="
+          info.approveDateVO != null &&
+          info.approveDateVO.canBeApproved != null &&
+          info.approveDateVO.canBeApproved == 1
+        "
+        >鎷掔粷</el-button
+      >
+      <el-button @click="isShowModal = false">杩斿洖</el-button>
+    </template>
+    <!--  鍚屾剰/鎷掔粷 -->
+    <el-dialog
+      append-to-body
+      :title="apprTitle"
+      :visible.sync="isShowAppr"
+      width="480px"
+    >
+      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+        <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '鍚屾剰璇存槑' : '鎷掔粷璇存槑'">
+          <el-input
+            type="textarea"
+            :placeholder="
+              param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑蹇呭~'
+            "
+            :rows="4"
+            v-model="param.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowAppr = false">鍙栨秷</el-button>
+        <el-button :loading="subLoading" type="primary" @click="onSubAppr">纭畾</el-button>
+      </span>
+    </el-dialog>
+    <!-- 闅愭偅 -->
+    <el-dialog
+      append-to-body
+      title="闅愭偅"
+      :visible.sync="isShowProblem"
+      width="480px"
+    >
+      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
+        <el-form-item label="閫�鍥炴椂闂�">
+          <el-date-picker
+            class="w300"
+            value-format="yyyy-MM-dd"
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+            v-model="param.date"
+          />
+        </el-form-item>
+        <el-form-item label="鏁存敼鍓�">
+          <div class="df_ac">
+            <img src="@/assets/avatar/man.png" />
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="param.url" :src="param.url" class="avatar" />
+              <div v-else class="upload_box">
+                <el-icon class="el-icon-plus icon" />
+                <div class="text">鍥剧墖/瑙嗛</div>
+              </div>
+            </el-upload>
+          </div>
+        </el-form-item>
+        <el-form-item label="閫�鍥炶鏄�">
+          <el-input
+            type="textarea"
+            placeholder="璇峰~鍐欒鏄�"
+            :rows="4"
+            v-model="param.explain"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="isShowProblem = false"
+          >纭畾</el-button
+        >
+      </span>
+    </el-dialog>
+  </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import {
+  getVisitedReDetail,
+  approveDo
+} from '@/api'
+export default {
+  components: { GlobalWindow },
+  data () {
+    return {
+      id: '',
+      type: '',
+
+      title: '璁垮棰勭害璇︽儏',
+      isShowModal: false,
+      info: {},
+      isShowAppr: false,
+      apprTitle: '鍚屾剰',
+      subLoading: false,
+      param: {},
+
+      isShowProblem: false,
+      rules: {
+        checkInfo: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      },
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷'
+      },
+      cateList: {
+        0: '璁垮鐢宠',
+        1: '璁垮鎶ュ',
+        2: '鐢ㄨ溅鐢宠',
+        3: '闅愭偅闅忔墜鎷�',
+        4: '鐗╂祦杞︾敵璇�'
+      }
+    }
+  },
+  methods: {
+    onSubAppr () {
+      this.$refs.ruleForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$dialog.actionConfirm('鎿嶄綔纭', this.param.status === 2 ? '鎮ㄧ‘璁ゅ悓鎰忚鐢宠鍚楋紵' : '鎮ㄧ‘璁ゆ嫆缁濊鐢宠鍚楋紵')
+          .then(() => {
+            this.subLoading = true
+            approveDo({
+              objId: this.id,
+              objType: 2,
+              status: this.param.status,
+              checkInfo: this.param.checkInfo
+            })
+              .then(res => {
+                this.subLoading = false
+                this.$tip.apiSuccess('澶勭悊鎴愬姛')
+                this.getDetail()
+                this.isShowAppr = false
+              })
+              .finally(() => {
+                this.subLoading = false
+              })
+          })
+      })
+    },
+    getDetail () {
+      const { id } = this
+      getVisitedReDetail({ id }).then(res => {
+        this.info = res
+      })
+    },
+    handleAppr (val) {
+      this.$set(this.param, 'status', val)
+      this.isShowAppr = true
+    },
+    confirm () {
+      console.log('--')
+    },
+    handleTransfer () {
+      this.isShowProblem = true
+    },
+    reject () { },
+    handleAvatarSuccess () { },
+    beforeAvatarUpload () { }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload_box {
+  width: 84px;
+  height: 84px;
+  border-radius: 4px;
+  background-color: #f7f7f7;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  color: #999999;
+  border: 1px solid #e4e4e4;
+  .icon {
+    font-size: 24px;
+  }
+  .text {
+    font-size: 12px;
+  }
+}
+.side_title {
+  font-weight: 600;
+  font-size: 18px;
+  color: #111111;
+  margin-bottom: 20px;
+  margin-left: 20px;
+  margin-top: 20px;
+}
+.modal_wrap {
+  display: flex;
+  height: 100%;
+  .modal_content {
+    flex: 1;
+    padding: 0px 30px;
+    border-radius: 8px;
+    overflow: hidden;
+    height: 100%;
+
+    .title {
+      font-weight: 600;
+      font-size: 18px;
+      color: #333333;
+      margin-bottom: 20px;
+      margin-top: 30px;
+    }
+    .info {
+      .list {
+        display: flex;
+        flex-wrap: wrap;
+
+        .item {
+          display: flex;
+          width: 40%;
+          margin-bottom: 20px;
+          &:nth-of-type(2n) {
+            width: 60%;
+          }
+
+          .label {
+            color: #888888;
+            width: 100px;
+          }
+
+          .value {
+            color: #111111;
+          }
+        }
+      }
+    }
+
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 20px 30px;
+      margin: 0 -30px;
+      border-radius: 8px 8px 0 0;
+      background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+      .h1 {
+        font-weight: 600;
+        font-size: 22px;
+        color: #111111;
+        margin-bottom: 8px;
+      }
+
+      .time {
+        font-size: 14px;
+        color: #999999;
+      }
+
+      .right {
+        height: 40px;
+        font-size: 16px;
+        color: #ffffff;
+        line-height: 40px;
+        padding: 0 20px;
+        background: #207ff7;
+        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+        border-radius: 16px 0px 16px 0px;
+      }
+    }
+    .table_info {
+      .name_wrap {
+        display: flex;
+        align-items: center;
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin-right: 12px;
+        }
+        .content {
+          .line {
+            display: flex;
+          }
+          .tag {
+            color: #b2cbf9;
+            border: 1px solid #b2cbf9;
+            padding: 0px 4px;
+            border-radius: 4px;
+            margin-left: 6px;
+          }
+        }
+      }
+    }
+  }
+
+  .side {
+    height: 100%;
+    width: 420px;
+    background: #ffffff;
+    border-left: 20px solid #f7f7f7;
+    .list {
+      .item {
+        padding: 8px 0;
+        position: relative;
+        .separate {
+          position: absolute;
+          border-left: 2px dashed #cccccc;
+          left: 31px;
+          height: calc(100% - 36px);
+          top: 49px;
+        }
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin: 0 12px 0 16px;
+          //border: 1px solid;
+        }
+        .childList {
+          display: flex;
+          flex-wrap: wrap;
+          margin-left: 100px;
+        }
+        .company {
+          font-size: 13px;
+          color: #888888;
+          .status {
+            color: #00ba67;
+          }
+        }
+        .m_content {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          margin-bottom: 4px;
+        }
+        .info {
+          display: flex;
+          align-items: center;
+          margin-left: 20px;
+          .icon {
+            position: relative;
+            z-index: 11;
+            color: #53b76f;
+            font-size: 24px;
+          }
+          .icon1 {
+            position: relative;
+            z-index: 11;
+            color: deepskyblue;
+            font-size: 24px;
+          }
+          .icon2 {
+            position: relative;
+            z-index: 11;
+            color: #dc362e;
+            font-size: 24px;
+          }
+          .iconnew {
+            width: 24px;
+            height: 24px;
+          }
+          .icon3 {
+            position: relative;
+            z-index: 11;
+            color: gray;
+            font-size: 24px;
+          }
+          .content {
+            flex: 1;
+            .line {
+              display: flex;
+              justify-content: space-between;
+              align-content: center;
+              margin-bottom: 6px;
+              .name {
+                font-weight: 600;
+                font-size: 16px;
+                color: #111111;
+              }
+              .time {
+                color: #888888;
+              }
+            }
+          }
+        }
+        .remark {
+          background: #f7f7f7;
+          border-radius: 4px;
+          padding: 13px 15px;
+          color: #666666;
+          margin-left: 100px;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/admin/src/views/task/visSubDetail.vue b/admin/src/views/task/visSubDetail.vue
new file mode 100644
index 0000000..b9595dc
--- /dev/null
+++ b/admin/src/views/task/visSubDetail.vue
@@ -0,0 +1,647 @@
+<template>
+  <GlobalWindow :title="title" :visible.sync="isShowModal" @confirm="confirm">
+    <div class="modal_wrap">
+      <div class="modal_content">
+        <div class="header">
+          <div class="left">
+            <div class="h1">{{ cateList[type] }}</div>
+            <div class="time">鎻愪氦鏃堕棿锛歿{ info.createDate }}</div>
+          </div>
+          <div class="right">{{ statusMap[info.status] }}</div>
+        </div>
+        <div class="info">
+          <div class="title">璁垮棰勭害淇℃伅</div>
+          <div class="list">
+            <div class="item">
+              <div class="label">琚浜�</div>
+              <div class="value">{{ info.visitUserName }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏉ヨ鏃堕棿</div>
+              <div class="value">{{ info.visitTime }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏉ヨ浜嬬敱</div>
+              <div class="value">{{ info.visitReason }}</div>
+            </div>
+            <div class="item">
+              <div class="label">闅忚杞﹁締</div>
+              <div class="value">{{ info.carNos }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏂藉伐浜哄憳</div>
+              <div class="value">{{ info.type == "0" ? "鍚�" : "鏄�" }}</div>
+            </div>
+            <div class="item">
+              <div class="label">鏂藉伐鍐呭</div>
+              <div class="value">{{ info.constructionReason }}</div>
+            </div>
+          </div>
+        </div>
+        <div class="table_info">
+          <div class="title">璁垮淇℃伅</div>
+          <el-table :data="[info]" border fit>
+            <el-table-column label="濮撳悕" prop="" min-width="150">
+              <template slot-scope="{ row }">
+                <div class="name_wrap">
+                  <image
+                    :src="
+                      row.prefix
+                        ? row.prefix
+                        : require('@/assets/avatar/man.png')
+                    "
+                    class="avatar"
+                    mode=""
+                  />
+                  <div class="content">
+                    <div class="line">
+                      <div class="name">{{ row.name }}</div>
+                      <div class="tag">鐢宠浜�</div>
+                    </div>
+                    <div class="line placeholder9">{{ row.phone }}</div>
+                  </div>
+                </div>
+              </template>
+            </el-table-column>
+            <!-- <el-table-column label="鎬у埆" prop="" min-width="40" /> -->
+            <el-table-column
+              label="璇佷欢绫诲瀷"
+              prop="idcardTypeName"
+              min-width="80"
+            />
+            <el-table-column
+              label="璇佷欢鍙风爜"
+              prop="idCardDecode"
+              min-width="120"
+            />
+            <el-table-column
+              label="鍏徃鍚嶇О"
+              prop="companyName"
+              min-width="120"
+            />
+            <el-table-column label="浜鸿劯鐓х墖" prop="" min-width="80">
+              <template slot-scope="{ row }">
+                <el-image :src="row.prefix" :preview-src-list="[row.prefix]">
+                </el-image>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+      <div class="side">
+        <div class="side_title">瀹℃壒娴佺▼</div>
+        <div
+          class="list"
+          v-if="
+            info.approveDateVO != null && info.approveDateVO.approveList != null
+          "
+        >
+          <div
+            class="item"
+            v-for="(item, index) in info.approveDateVO.approveList"
+            :key="item.id"
+          >
+            <div
+              class="separate"
+              v-if="index < info.approveDateVO.approveList.length - 1"
+            ></div>
+            <div class="info">
+              <img
+                src="@/assets/icons/ic_tongguo.png"
+                class="iconnew"
+                v-if="item.status == 2"
+              />
+              <img
+                src="@/assets/icons/ic_dangqian.png"
+                class="iconnew"
+                v-if="item.status == 1"
+              />
+              <img
+                src="@/assets/icons/ic_jujue.png"
+                class="iconnew"
+                v-if="item.status == 3"
+              />
+              <img
+                src="@/assets/icons/ic_grey.png"
+                class="iconnew"
+                v-if="item.status == null || item.status == 0"
+              />
+              <div style="display: inline" v-if="item.approveType != 1">
+                <img
+                  v-if="item.faceImg != null && item.faceImg != ''"
+                  :src="item.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.faceImg == null || item.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div style="display: inline" v-if="item.approveType == 1">
+                <img
+                  v-if="item.type != 1"
+                  src="@/assets/icons/ic_duoren.png"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item.type == 1"
+                  src="@/assets/icons/ic_chaosong.png"
+                  class="avatar"
+                  alt=""
+                />
+              </div>
+              <div class="content">
+                <div class="line">
+                  <div class="name">{{ item.title }}</div>
+                  <div class="time">{{ item.checkDate }}</div>
+                </div>
+                <div class="line">
+                  <div class="company">
+                    {{ item.memberName }}
+                    <div
+                      style="display: inline"
+                      v-if="item.statusInfo != null && item.statusInfo != ''"
+                    >
+                      锛�<span class="status-green">{{
+                        item.statusInfo || ""
+                      }}</span
+                      >锛�
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div
+              v-if="
+                item.approveType != 1 &&
+                item.checkInfo != null &&
+                item.checkInfo != ''
+              "
+              class="remark"
+            >
+              {{ item.checkInfo || "" }}
+            </div>
+            <div v-if="item.approveType == 1" class="childList">
+              <div
+                class="m_content company"
+                v-for="item1 in item.approveList"
+                :key="item1.id"
+              >
+                <img
+                  v-if="item1.faceImg != null && item1.faceImg != ''"
+                  :src="item1.faceImg"
+                  class="avatar"
+                  alt=""
+                />
+                <img
+                  v-if="item1.faceImg == null || item1.faceImg == ''"
+                  src="@/assets/avatar/man.png"
+                  class="avatar"
+                  alt=""
+                />
+                <span> {{ item1.memberName }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <!--  -->
+    <template v-slot:footer>
+      <el-button
+        @click="handleAppr(2)"
+        type="primary"
+        class="status-red"
+        v-if="
+          info.approveDateVO != null &&
+          info.approveDateVO.canBeApproved != null &&
+          info.approveDateVO.canBeApproved == 1
+        "
+        >鍚屾剰</el-button
+      >
+      <el-button
+        @click="handleAppr(3)"
+        type="danger"
+        v-if="
+          info.approveDateVO != null &&
+          info.approveDateVO.canBeApproved != null &&
+          info.approveDateVO.canBeApproved == 1
+        "
+        >鎷掔粷</el-button
+      >
+      <el-button @click="isShowModal = false">杩斿洖</el-button>
+    </template>
+    <!--  鍚屾剰/鎷掔粷 -->
+    <el-dialog
+      append-to-body
+      :title="apprTitle"
+      :visible.sync="isShowAppr"
+      width="480px"
+    >
+      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+        <el-form-item :prop="param.status == 3 ? 'checkInfo' : ''" :label="param.status == 2 ? '鍚屾剰璇存槑' : '鎷掔粷璇存槑'">
+          <el-input
+            type="textarea"
+            :placeholder="
+              param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑蹇呭~'
+            "
+            :rows="4"
+            v-model="param.checkInfo"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowAppr = false">鍙栨秷</el-button>
+        <el-button :loading="subLoading" type="primary" @click="onSubAppr">纭畾</el-button>
+      </span>
+    </el-dialog>
+    <!-- 闅愭偅 -->
+    <el-dialog
+      append-to-body
+      title="闅愭偅"
+      :visible.sync="isShowProblem"
+      width="480px"
+    >
+      <el-form :model="param" :rules="rules" ref="ruleForm" label-width="100px">
+        <el-form-item label="閫�鍥炴椂闂�">
+          <el-date-picker
+            class="w300"
+            value-format="yyyy-MM-dd"
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+            v-model="param.date"
+          />
+        </el-form-item>
+        <el-form-item label="鏁存敼鍓�">
+          <div class="df_ac">
+            <img src="@/assets/avatar/man.png" />
+            <el-upload
+              class="avatar-uploader"
+              action="https://jsonplaceholder.typicode.com/posts/"
+              :show-file-list="false"
+              :on-success="handleAvatarSuccess"
+              :before-upload="beforeAvatarUpload"
+            >
+              <img v-if="param.url" :src="param.url" class="avatar" />
+              <div v-else class="upload_box">
+                <el-icon class="el-icon-plus icon" />
+                <div class="text">鍥剧墖/瑙嗛</div>
+              </div>
+            </el-upload>
+          </div>
+        </el-form-item>
+        <el-form-item label="閫�鍥炶鏄�">
+          <el-input
+            type="textarea"
+            placeholder="璇峰~鍐欒鏄�"
+            :rows="4"
+            v-model="param.explain"
+          />
+        </el-form-item>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="isShowProblem = false">鍙栨秷</el-button>
+        <el-button type="primary" @click="isShowProblem = false"
+          >纭畾</el-button
+        >
+      </span>
+    </el-dialog>
+  </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import {
+  getVisitedDetail,
+  approveDo
+} from '@/api'
+export default {
+  components: { GlobalWindow },
+  data () {
+    return {
+      id: '',
+      type: '',
+
+      title: '璁垮棰勭害璇︽儏',
+      isShowModal: false,
+      info: {},
+      isShowAppr: false,
+      apprTitle: '鍚屾剰',
+      subLoading: false,
+      param: {},
+
+      isShowProblem: false,
+      rules: {
+        checkInfo: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
+      },
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷'
+      },
+      cateList: {
+        0: '璁垮鐢宠',
+        1: '璁垮鎶ュ',
+        2: '鐢ㄨ溅鐢宠',
+        3: '闅愭偅闅忔墜鎷�',
+        4: '鐗╂祦杞︾敵璇�'
+      }
+    }
+  },
+  methods: {
+    onSubAppr () {
+      this.$refs.ruleForm.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$dialog.actionConfirm('鎿嶄綔纭', this.param.status === 2 ? '鎮ㄧ‘璁ゅ悓鎰忚鐢宠鍚楋紵' : '鎮ㄧ‘璁ゆ嫆缁濊鐢宠鍚楋紵')
+          .then(() => {
+            this.subLoading = true
+            approveDo({
+              objId: this.id,
+              objType: this.info.type,
+              status: this.param.status,
+              checkInfo: this.param.checkInfo
+            })
+              .then(res => {
+                this.subLoading = false
+                this.$tip.apiSuccess('澶勭悊鎴愬姛')
+                this.getDetail()
+                this.isShowAppr = false
+              })
+              .finally(() => {
+                this.subLoading = false
+              })
+          })
+      })
+    },
+    getDetail () {
+      const { id, type } = this
+      console.log(id, type)
+      switch (type) {
+      case 0:
+        getVisitedDetail({ id }).then(res => {
+          this.info = res
+        })
+        break
+
+      default:
+        break
+      }
+    },
+    handleAppr (val) {
+      this.$set(this.param, 'status', val)
+      this.isShowAppr = true
+    },
+    confirm () {
+      console.log('--')
+    },
+    handleTransfer () {
+      this.isShowProblem = true
+    },
+    reject () { },
+    handleAvatarSuccess () { },
+    beforeAvatarUpload () { }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload_box {
+  width: 84px;
+  height: 84px;
+  border-radius: 4px;
+  background-color: #f7f7f7;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  color: #999999;
+  border: 1px solid #e4e4e4;
+  .icon {
+    font-size: 24px;
+  }
+  .text {
+    font-size: 12px;
+  }
+}
+.side_title {
+  font-weight: 600;
+  font-size: 18px;
+  color: #111111;
+  margin-bottom: 20px;
+  margin-left: 20px;
+  margin-top: 20px;
+}
+.modal_wrap {
+  display: flex;
+  height: 100%;
+  .modal_content {
+    flex: 1;
+    padding: 0px 30px;
+    border-radius: 8px;
+    overflow: hidden;
+    height: 100%;
+
+    .title {
+      font-weight: 600;
+      font-size: 18px;
+      color: #333333;
+      margin-bottom: 20px;
+      margin-top: 30px;
+    }
+    .info {
+      .list {
+        display: flex;
+        flex-wrap: wrap;
+
+        .item {
+          display: flex;
+          width: 40%;
+          margin-bottom: 20px;
+          &:nth-of-type(2n) {
+            width: 60%;
+          }
+
+          .label {
+            color: #888888;
+            width: 100px;
+          }
+
+          .value {
+            color: #111111;
+          }
+        }
+      }
+    }
+
+    .header {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 20px 30px;
+      margin: 0 -30px;
+      border-radius: 8px 8px 0 0;
+      background: linear-gradient(to right, #f2f6fe, #cadffa);
+
+      .h1 {
+        font-weight: 600;
+        font-size: 22px;
+        color: #111111;
+        margin-bottom: 8px;
+      }
+
+      .time {
+        font-size: 14px;
+        color: #999999;
+      }
+
+      .right {
+        height: 40px;
+        font-size: 16px;
+        color: #ffffff;
+        line-height: 40px;
+        padding: 0 20px;
+        background: #207ff7;
+        box-shadow: 4px 4px 0px 0px rgba(32, 127, 247, 0.16);
+        border-radius: 16px 0px 16px 0px;
+      }
+    }
+    .table_info {
+      .name_wrap {
+        display: flex;
+        align-items: center;
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin-right: 12px;
+        }
+        .content {
+          .line {
+            display: flex;
+          }
+          .tag {
+            color: #b2cbf9;
+            border: 1px solid #b2cbf9;
+            padding: 0px 4px;
+            border-radius: 4px;
+            margin-left: 6px;
+          }
+        }
+      }
+    }
+  }
+
+  .side {
+    height: 100%;
+    width: 420px;
+    background: #ffffff;
+    border-left: 20px solid #f7f7f7;
+    .list {
+      .item {
+        padding: 8px 0;
+        position: relative;
+        .separate {
+          position: absolute;
+          border-left: 2px dashed #cccccc;
+          left: 31px;
+          height: calc(100% - 36px);
+          top: 49px;
+        }
+        .avatar {
+          width: 40px;
+          height: 40px;
+          border-radius: 50%;
+          margin: 0 12px 0 16px;
+          //border: 1px solid;
+        }
+        .childList {
+          display: flex;
+          flex-wrap: wrap;
+          margin-left: 100px;
+        }
+        .company {
+          font-size: 13px;
+          color: #888888;
+          .status {
+            color: #00ba67;
+          }
+        }
+        .m_content {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+          justify-content: center;
+          margin-bottom: 4px;
+        }
+        .info {
+          display: flex;
+          align-items: center;
+          margin-left: 20px;
+          .icon {
+            position: relative;
+            z-index: 11;
+            color: #53b76f;
+            font-size: 24px;
+          }
+          .icon1 {
+            position: relative;
+            z-index: 11;
+            color: deepskyblue;
+            font-size: 24px;
+          }
+          .icon2 {
+            position: relative;
+            z-index: 11;
+            color: #dc362e;
+            font-size: 24px;
+          }
+          .iconnew {
+            width: 24px;
+            height: 24px;
+          }
+          .icon3 {
+            position: relative;
+            z-index: 11;
+            color: gray;
+            font-size: 24px;
+          }
+          .content {
+            flex: 1;
+            .line {
+              display: flex;
+              justify-content: space-between;
+              align-content: center;
+              margin-bottom: 6px;
+              .name {
+                font-weight: 600;
+                font-size: 16px;
+                color: #111111;
+              }
+              .time {
+                color: #888888;
+              }
+            }
+          }
+        }
+        .remark {
+          background: #f7f7f7;
+          border-radius: 4px;
+          padding: 13px 15px;
+          color: #666666;
+          margin-left: 100px;
+        }
+      }
+    }
+  }
+}
+</style>
diff --git a/h5/api/meeting.js b/h5/api/meeting.js
index 4f7a800..29ba261 100644
--- a/h5/api/meeting.js
+++ b/h5/api/meeting.js
@@ -48,6 +48,13 @@
     data
   })
 }
+// 浼氳瀹� h5璇︽儏
+export const getAppRoomDetail = (id) => {
+  return http({
+    url: 'meetingAdmin/cloudService/business/bookings/'+id,
+    method: 'get'
+  })
+}
 // 浼氳瀹� 绠$悊
 export const myMeetingPage = (data) => {
   return http({
@@ -56,3 +63,27 @@
     data
   })
 }
+// 浼氳瀹� 褰撴湀
+export const monthMeetingPage = (data) => {
+  return http({
+    url: 'meetingAdmin/cloudService/web/meeting/monthMeeting',
+    method: 'get',
+    data
+  })
+}
+// 浼氳瀹� 淇敼
+export const updateById = (data) => {
+  return http({
+    url: 'meetingAdmin/cloudService/business/rooms/updateById',
+    method: 'post',
+    data
+  })
+}
+// 浼氳瀹� 鎾ゅ洖
+export const cancelById = (data) => {
+  return http({
+    url: 'meetingAdmin/cloudService/business/meeting/reservationCancel',
+    method: 'get',
+    data
+  })
+}
diff --git a/h5/api/staff.js b/h5/api/staff.js
index 456d6f8..feebb25 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -76,6 +76,13 @@
     data
   })
 }
+// 闅愭偅 璇︽儏
+export const hiddenDangerDetail = (id) => {
+  return http({
+    url:  `visitsAdmin/cloudService/business/hiddenDanger/${id}`,
+    method: 'get'
+  })
+}
 // 闅愭偅 绫诲瀷
 export const DangerConfigType = (data) => {
   return http({
@@ -92,7 +99,22 @@
     data
   })
 }
-
+// 闅愭偅 澶勭悊
+export const dealHiddenDanger = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/hiddenDanger/dealHiddenDanger',
+    method: 'post',
+    data
+  })
+}
+// 闅愭偅 杞氦
+export const transferHiddenDanger = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/hiddenDanger/transferHiddenDanger',
+    method: 'post',
+    data
+  })
+}
 // 杞﹁締 鍒楄〃
 export const getCarsList = (data) => {
   return http({
@@ -127,14 +149,6 @@
   })
 }
 
-// 浠诲姟涓績
-export const taskCenter = (data) => {
-  return http({
-    url: 'visitsAdmin/cloudService/web/member/taskCenter',
-    method: 'post',
-    data
-  })
-}
 // 鏌ヨ杞﹁締 娲捐溅璁板綍
 export const carUseBookPaiche = (data) => {
   return http({
@@ -149,4 +163,45 @@
     url: 'visitsAdmin/cloudService/business/carUseBook/'+id,
     method: 'get'
   })
+}
+//  瀹℃壒
+export const carUseBookAppr = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/approve/approved',
+    method: 'post',
+    data
+  })
+}
+// 鏌ヨ杞﹁締 娲捐溅璁板綍 鎾ら攢鐢宠
+export const carUseBookBack = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/carUseBook/revoke',
+    method: 'get',
+    data
+  })
+}
+// 鏌ヨ杞﹁締 鍙告満鍒楄〃
+export const driveListPost = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/member/driveList',
+    method: 'post',
+    data
+  })
+}
+
+//  浠诲姟涓績 澶撮儴鏁版嵁
+export const stagingHead = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/staging/taskCenterHead',
+    method: 'get',
+    data
+  })
+}
+//  浠诲姟涓績 鍒嗛〉鏁版嵁
+export const stagingTaskPage = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/staging/taskPage',
+    method: 'post',
+    data
+  })
 }
\ No newline at end of file
diff --git a/h5/api/visitor.js b/h5/api/visitor.js
index a684fe0..830597a 100644
--- a/h5/api/visitor.js
+++ b/h5/api/visitor.js
@@ -55,4 +55,11 @@
     method: 'get',
     data
   })
+}
+// 璁垮鎶ュ璇︽儏
+export const getVisitedReDetail = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/business/visits/'+data.id,
+    method: 'get'
+  })
 }
\ No newline at end of file
diff --git a/h5/n_pages/applicationRecord/applicationRecord.vue b/h5/n_pages/applicationRecord/applicationRecord.vue
index 9e82a7f..ca251ce 100644
--- a/h5/n_pages/applicationRecord/applicationRecord.vue
+++ b/h5/n_pages/applicationRecord/applicationRecord.vue
@@ -1,410 +1,430 @@
 <template>
-	<view class="box">
-		<scroll-view scroll-x class="box_head">
-			<view class="box_head_search">
-				<view class="box_head_search_ipt">
-					<image src="@/static/n/ic_search@2x.png" mode="widthFix"></image>
-					<input type="text" placeholder="鎼滅储浠诲姟鍚嶇О" />
-				</view>
-				<view class="box_head_search_sha" @click="show = true">
-					<image src="@/static/n/ic_shaixuan@2x.png" mode="widthFix"></image>
-					<text>绛涢��</text>
-				</view>
-			</view>
-			<view class="box_head_list">
-				<view class="box_head_item active">寰呭鐞� 12</view>
-				<view class="box_head_item">宸插鐞�</view>
-				<view class="box_head_item">鎴戝彂璧风殑</view>
-			</view>
-		</scroll-view>
-		<view class="box_list">
-			<view class="box_list_item" v-for="(item, index) in 3" :key="index">
-				<view class="box_list_item_head">
-					<text>涓佹仼鍑殑鍔冲姟鍏ュ巶鐢宠</text>
-					<text class="loading">寰呭鏍�</text>
-				</view>
-				<view class="box_list_item_nr">
-					<view class="box_list_item_nr_item">
-						<text>琚闂汉锛�</text>
-						<text>浜轰簨閮�-鐜嬩簹钃�</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>杩涘巶鏃堕棿锛�</text>
-						<text>12-12 09:00</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>绂诲巶鏃堕棿锛�</text>
-						<text>12-12 12:00</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>鍏ュ巶浜烘暟锛�</text>
-						<text>10</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>鏉ヨ浜嬬敱锛�</text>
-						<text>涓氬姟鏉ュ線</text>
-					</view>
-					<view class="box_list_item_nr_x"></view>
-					<view class="box_list_item_nr_text">
-						2023-12-12 09:00鎻愪氦
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 绛涢�� -->
-		<u-popup :show="show" mode="bottom" :round="10" :closeable="true" @close="show = false">
-			<view class="search">
-				<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_val">
-							<view class="search_list_item_val_row" @click="tiemShow = true" :style="{ color: search.startTime ? '#000' : '' }">{{search.startTime ? search.startTime : '寮�濮嬫棩鏈�'}}</view>
-							<view class="search_list_item_val_z">-</view>
-							<view class="search_list_item_val_row" @click="tiemShow1 = true" :style="{ color: search.endTime ? '#000' : '' }">{{search.endTime ? search.endTime : '缁撴潫鏃ユ湡'}}</view>
-						</view>
-					</view>
-					<view class="search_list_item">
-						<view class="search_list_item_label">璁㈠崟鏉ユ簮</view>
-						<view class="search_list_item_cates">
-							<view :class="index === i ? 'search_list_item_cates_row active' : 'search_list_item_cates_row'"
-							v-for="(item, index) in cate"
-							:key="index"
-							@click="clickItem(index)">
-								{{item.name}}
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="search_footer">
-					<view class="search_footer_item" @click="show = false">鍙栨秷</view>
-					<view class="search_footer_item t">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-		<u-datetime-picker
-			:show="tiemShow"
-			v-model="time"
-			mode="datetime"
-			@confirm="confirmLeft"
-			@cancel="tiemShow = false"
-		></u-datetime-picker>
-		<u-datetime-picker
-			:show="tiemShow1"
-			v-model="time1"
-			mode="datetime"
-			@confirm="confirmRight"
-			@cancel="tiemShow1 = false"
-		></u-datetime-picker>
-	</view>
+  <view class="box">
+    <scroll-view scroll-x class="box_head">
+      <view class="box_head_search">
+        <view class="box_head_search_ipt">
+          <image src="@/static/n/ic_search@2x.png" mode="widthFix"></image>
+          <input type="text" placeholder="鎼滅储浠诲姟鍚嶇О" />
+        </view>
+        <view class="box_head_search_sha" @click="show = true">
+          <image src="@/static/n/ic_shaixuan@2x.png" mode="widthFix"></image>
+          <text>绛涢��</text>
+        </view>
+      </view>
+      <view class="box_head_list">
+        <view class="box_head_item active">寰呭鐞� 12</view>
+        <view class="box_head_item">宸插鐞�</view>
+        <view class="box_head_item">鎴戝彂璧风殑</view>
+      </view>
+    </scroll-view>
+    <view class="box_list">
+      <view class="box_list_item" v-for="(item, index) in 3" :key="index">
+        <view class="box_list_item_head">
+          <text>涓佹仼鍑殑鍔冲姟鍏ュ洯鐢宠</text>
+          <text class="loading">寰呭鏍�</text>
+        </view>
+        <view class="box_list_item_nr">
+          <view class="box_list_item_nr_item">
+            <text>琚闂汉锛�</text>
+            <text>浜轰簨閮�-鐜嬩簹钃�</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>杩涘巶鏃堕棿锛�</text>
+            <text>12-12 09:00</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>绂诲洯鏃堕棿锛�</text>
+            <text>12-12 12:00</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>鍏ュ洯浜烘暟锛�</text>
+            <text>10</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>鏉ヨ浜嬬敱锛�</text>
+            <text>涓氬姟鏉ュ線</text>
+          </view>
+          <view class="box_list_item_nr_x"></view>
+          <view class="box_list_item_nr_text"> 2023-12-12 09:00鎻愪氦 </view>
+        </view>
+      </view>
+    </view>
+    <!-- 绛涢�� -->
+    <u-popup
+      :show="show"
+      mode="bottom"
+      :round="10"
+      :closeable="true"
+      @close="show = false"
+    >
+      <view class="search">
+        <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_val">
+              <view
+                class="search_list_item_val_row"
+                @click="tiemShow = true"
+                :style="{ color: search.startTime ? '#000' : '' }"
+                >{{ search.startTime ? search.startTime : "寮�濮嬫棩鏈�" }}</view
+              >
+              <view class="search_list_item_val_z">-</view>
+              <view
+                class="search_list_item_val_row"
+                @click="tiemShow1 = true"
+                :style="{ color: search.endTime ? '#000' : '' }"
+                >{{ search.endTime ? search.endTime : "缁撴潫鏃ユ湡" }}</view
+              >
+            </view>
+          </view>
+          <view class="search_list_item">
+            <view class="search_list_item_label">璁㈠崟鏉ユ簮</view>
+            <view class="search_list_item_cates">
+              <view
+                :class="
+                  index === i
+                    ? 'search_list_item_cates_row active'
+                    : 'search_list_item_cates_row'
+                "
+                v-for="(item, index) in cate"
+                :key="index"
+                @click="clickItem(index)"
+              >
+                {{ item.name }}
+              </view>
+            </view>
+          </view>
+        </view>
+        <view class="search_footer">
+          <view class="search_footer_item" @click="show = false">鍙栨秷</view>
+          <view class="search_footer_item t">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <u-datetime-picker
+      :show="tiemShow"
+      v-model="time"
+      mode="datetime"
+      @confirm="confirmLeft"
+      @cancel="tiemShow = false"
+    ></u-datetime-picker>
+    <u-datetime-picker
+      :show="tiemShow1"
+      v-model="time1"
+      mode="datetime"
+      @confirm="confirmRight"
+      @cancel="tiemShow1 = false"
+    ></u-datetime-picker>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				show: false,
-				tiemShow: false,
-				tiemShow1: false,
-				time: '',
-				i: null,
-				time: '',
-				time1: '',
-				search: {
-					startTime: '',
-					endTime: ''
-				},
-				cate: [
-					{ name: '璁垮鐢宠', id: 1 },
-					{ name: '鍔冲姟鐢宠', id: 2 },
-					{ name: '鐢ㄨ溅鐢宠', id: 3 }
-				]
-			};
-		},
-		methods: {
-			clickItem(index) {
-				this.i = index
-			},
-			confirmLeft(e) {
-				console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss'))
-				this.search.startTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
-				this.tiemShow = false
-			},
-			confirmRight(e) {
-				this.search.endTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
-				this.tiemShow1 = false
-			}
-		}
-	}
+export default {
+  data() {
+    return {
+      show: false,
+      tiemShow: false,
+      tiemShow1: false,
+      time: '',
+      i: null,
+      time: '',
+      time1: '',
+      search: {
+        startTime: '',
+        endTime: ''
+      },
+      cate: [
+        { name: '璁垮鐢宠', id: 1 },
+        { name: '鍔冲姟鐢宠', id: 2 },
+        { name: '鐢ㄨ溅鐢宠', id: 3 }
+      ]
+    }
+  },
+  methods: {
+    clickItem(index) {
+      this.i = index
+    },
+    confirmLeft(e) {
+      console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss'))
+      this.search.startTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      this.tiemShow = false
+    },
+    confirmRight(e) {
+      this.search.endTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      this.tiemShow1 = false
+    }
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7 !important;
-	}
+page {
+  background-color: #f7f7f7 !important;
+}
 </style>
 <style lang="scss" scoped>
-	.box {
-		width: 100%;
-		.box_head {
-			width: 100%;
-			height: 190rpx;
-			padding: 12rpx 30rpx;
-			box-sizing: border-box;
-			background: #FFFFFF;
-			position: sticky;
-			top: 0;
-			left: 0;
-			.box_head_search {
-				width: 100%;
-				height: 76rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				margin-bottom: 24rpx;
-				.box_head_search_ipt {
-					flex: 1;
-					height: 100%;
-					padding: 0 30rpx;
-					box-sizing: border-box;
-					display: flex;
-					align-items: center;
-					background: #F7F7F7;
-					border-radius: 8rpx;
-					margin-right: 30rpx;
-					image {
-						flex-shrink: 0;
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 16rpx;
-					}
-					input {
-						flex: 1;
-						height: 100%;
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #B2B2B2;
-					}
-				}
-				.box_head_search_sha {
-					flex-shrink: 0;
-					display: flex;
-					align-items: center;
-					image {
-						width: 28rpx;
-						height: 28rpx;
-						margin-right: 8rpx;
-					}
-					text {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #333333;
-					}
-				}
-			}
-			.box_head_list {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				.active {
-					border: 1rpx solid #025EEF !important;
-					color: #025EEF !important;
-				}
-				.box_head_item {
-					padding: 0 30rpx;
-					height: 60rpx;
-					line-height: 60rpx;
-					box-sizing: border-box;
-					border-radius: 30rpx;
-					border: 1rpx solid #999999;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #333333;
-					margin-right: 20rpx;
-				}
-			}
-		}
-		.box_list {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			.box_list_item {
-				width: 100%;
-				margin-bottom: 20rpx;
-				&:last-child {
-					margin: 0 !important;
-				}
-				.box_list_item_head {
-					width: 100%;
-					height: 100rpx;
-					padding: 0 30rpx;
-					box-sizing: border-box;
-					background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
-					border-radius: 8rpx 8rpx 0rpx 0rpx;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.loading {
-						color: #025EEF;
-					}
-					.success {
-						color: #03C68F;
-					}
-					.error {
-						color: #E0312A;
-					}
-					text {
-						&:nth-child(1) {
-							font-size: 32rpx;
-							font-weight: 500;
-							color: #222222;
-						}
-						&:nth-child(2) {
-							font-size: 26rpx;
-							font-weight: 400;
-						}
-					}
-				}
-				.box_list_item_nr {
-					padding: 30rpx;
-					width: 100%;
-					box-sizing: border-box;
-					background-color: #FFFFFF;
-					.box_list_item_nr_x {
-						width: 100%;
-						height: 1rpx;
-						background-color: #E5E5E5;
-					}
-					.box_list_item_nr_text {
-						width: 100%;
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #999999;
-						margin-top: 32rpx;
-					}
-					.box_list_item_nr_item {
-						width: 100%;
-						display: flex;
-						align-items: center;
-						margin-bottom: 20rpx;
-						text {
-							&:nth-child(1) {
-								font-size: 26rpx;
-								font-weight: 400;
-								color: #666666;
-							}
-							&:nth-child(2) {
-								font-size: 26rpx;
-								font-weight: 400;
-								color: #333333;
-							}
-						}
-					}
-				}
-			}
-		}
-		.search {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			.search_head {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.search_list {
-				width: 100%;
-				margin-top: 34rpx;
-				.search_list_item {
-					width: 100%;
-					display: flex;
-					flex-direction: column;
-					margin-bottom: 48rpx;
-					.search_list_item_label {
-						font-size: 30rpx;
-						font-weight: 400;
-						color: #222222;
-						margin-bottom: 24rpx;
-					}
-					.search_list_item_cates {
-						width: 100%;
-						display: flex;
-						align-items: center;
-						flex-wrap: wrap;
-						.active {
-							background: #025EEF !important;
-							color: #ffffff !important;
-						}
-						.search_list_item_cates_row {
-							padding: 0 26rpx;
-							height: 64rpx;
-							line-height: 64rpx;
-							background: #F7F7F7;
-							border-radius: 36rpx;
-							margin-right: 20rpx;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #333333;
-							&:last-child {
-								margin: 0;
-							}
-						}
-					}
-					.search_list_item_val {
-						width: 100%;
-						height: 64rpx;
-						background: #F7F7F7;
-						border-radius: 36rpx;
-						border: 1rpx solid #E5E5E5;
-						display: flex;
-						align-items: center;
-						.search_list_item_val_row {
-							flex: 1;
-							height: 100%;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #999999;
-						}
-						.search_list_item_val_z {
-							flex-shrink: 0;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #999999;
-							margin: 0 30rpx;
-						}
-					}
-				}
-			}
-			.search_footer {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.t {
-					background: #025EEF !important;
-					color: #ffffff !important;
-				}
-				.search_footer_item {
-					flex: 1;
-					height: 88rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					font-size: 32rpx;
-					font-weight: 400;
-					color: #025EEF;
-					margin-right: 18rpx;
-					border: 1rpx solid #025EEF;
-					border-radius: 44rpx;
-					&:last-child {
-						margin: 0 !important;
-					}
-				}
-			}
-		}
-	}
+.box {
+  width: 100%;
+  .box_head {
+    width: 100%;
+    height: 190rpx;
+    padding: 12rpx 30rpx;
+    box-sizing: border-box;
+    background: #ffffff;
+    position: sticky;
+    top: 0;
+    left: 0;
+    .box_head_search {
+      width: 100%;
+      height: 76rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-bottom: 24rpx;
+      .box_head_search_ipt {
+        flex: 1;
+        height: 100%;
+        padding: 0 30rpx;
+        box-sizing: border-box;
+        display: flex;
+        align-items: center;
+        background: #f7f7f7;
+        border-radius: 8rpx;
+        margin-right: 30rpx;
+        image {
+          flex-shrink: 0;
+          width: 28rpx;
+          height: 28rpx;
+          margin-right: 16rpx;
+        }
+        input {
+          flex: 1;
+          height: 100%;
+          font-size: 26rpx;
+          font-weight: 400;
+          color: #b2b2b2;
+        }
+      }
+      .box_head_search_sha {
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
+        image {
+          width: 28rpx;
+          height: 28rpx;
+          margin-right: 8rpx;
+        }
+        text {
+          font-size: 26rpx;
+          font-weight: 400;
+          color: #333333;
+        }
+      }
+    }
+    .box_head_list {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      .active {
+        border: 1rpx solid #025eef !important;
+        color: #025eef !important;
+      }
+      .box_head_item {
+        padding: 0 30rpx;
+        height: 60rpx;
+        line-height: 60rpx;
+        box-sizing: border-box;
+        border-radius: 30rpx;
+        border: 1rpx solid #999999;
+        font-size: 26rpx;
+        font-weight: 400;
+        color: #333333;
+        margin-right: 20rpx;
+      }
+    }
+  }
+  .box_list {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    .box_list_item {
+      width: 100%;
+      margin-bottom: 20rpx;
+      &:last-child {
+        margin: 0 !important;
+      }
+      .box_list_item_head {
+        width: 100%;
+        height: 100rpx;
+        padding: 0 30rpx;
+        box-sizing: border-box;
+        background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
+        border-radius: 8rpx 8rpx 0rpx 0rpx;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .loading {
+          color: #025eef;
+        }
+        .success {
+          color: #03c68f;
+        }
+        .error {
+          color: #e0312a;
+        }
+        text {
+          &:nth-child(1) {
+            font-size: 32rpx;
+            font-weight: 500;
+            color: #222222;
+          }
+          &:nth-child(2) {
+            font-size: 26rpx;
+            font-weight: 400;
+          }
+        }
+      }
+      .box_list_item_nr {
+        padding: 30rpx;
+        width: 100%;
+        box-sizing: border-box;
+        background-color: #ffffff;
+        .box_list_item_nr_x {
+          width: 100%;
+          height: 1rpx;
+          background-color: #e5e5e5;
+        }
+        .box_list_item_nr_text {
+          width: 100%;
+          font-size: 26rpx;
+          font-weight: 400;
+          color: #999999;
+          margin-top: 32rpx;
+        }
+        .box_list_item_nr_item {
+          width: 100%;
+          display: flex;
+          align-items: center;
+          margin-bottom: 20rpx;
+          text {
+            &:nth-child(1) {
+              font-size: 26rpx;
+              font-weight: 400;
+              color: #666666;
+            }
+            &:nth-child(2) {
+              font-size: 26rpx;
+              font-weight: 400;
+              color: #333333;
+            }
+          }
+        }
+      }
+    }
+  }
+  .search {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    .search_head {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .search_list {
+      width: 100%;
+      margin-top: 34rpx;
+      .search_list_item {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        margin-bottom: 48rpx;
+        .search_list_item_label {
+          font-size: 30rpx;
+          font-weight: 400;
+          color: #222222;
+          margin-bottom: 24rpx;
+        }
+        .search_list_item_cates {
+          width: 100%;
+          display: flex;
+          align-items: center;
+          flex-wrap: wrap;
+          .active {
+            background: #025eef !important;
+            color: #ffffff !important;
+          }
+          .search_list_item_cates_row {
+            padding: 0 26rpx;
+            height: 64rpx;
+            line-height: 64rpx;
+            background: #f7f7f7;
+            border-radius: 36rpx;
+            margin-right: 20rpx;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #333333;
+            &:last-child {
+              margin: 0;
+            }
+          }
+        }
+        .search_list_item_val {
+          width: 100%;
+          height: 64rpx;
+          background: #f7f7f7;
+          border-radius: 36rpx;
+          border: 1rpx solid #e5e5e5;
+          display: flex;
+          align-items: center;
+          .search_list_item_val_row {
+            flex: 1;
+            height: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #999999;
+          }
+          .search_list_item_val_z {
+            flex-shrink: 0;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #999999;
+            margin: 0 30rpx;
+          }
+        }
+      }
+    }
+    .search_footer {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .t {
+        background: #025eef !important;
+        color: #ffffff !important;
+      }
+      .search_footer_item {
+        flex: 1;
+        height: 88rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        font-size: 32rpx;
+        font-weight: 400;
+        color: #025eef;
+        margin-right: 18rpx;
+        border: 1rpx solid #025eef;
+        border-radius: 44rpx;
+        &:last-child {
+          margin: 0 !important;
+        }
+      }
+    }
+  }
+}
 </style>
diff --git a/h5/n_pages/visitorApplication/visitorApplication.vue b/h5/n_pages/visitorApplication/visitorApplication.vue
index 61f9b11..b6fcc14 100644
--- a/h5/n_pages/visitorApplication/visitorApplication.vue
+++ b/h5/n_pages/visitorApplication/visitorApplication.vue
@@ -1,1220 +1,1361 @@
 <template>
-	<view class="visit">
-		<view class="head">鎷滆淇℃伅</view>
-		<view class="list">
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>琚浜哄鍚�</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="show1 = true">
-					<text :style="{color: form1.receptMemberName ? '#000000' : ''}">{{form1.receptMemberName ? form1.receptMemberName : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鍏ュ巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="show4 = true">
-					<text :style="{color: form1.starttime ? '#000000' : ''}">{{form1.starttime ? form1.starttime : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>绂诲巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="show5 = true">
-					<text :style="{color: form1.endtime ? '#000000' : ''}">{{form1.endtime ? form1.endtime : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item" @click="show = true">
-				<view class="list_item_label">
-					<text>璁块棶闂ㄧ</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<text :style="{color: form1.doorSelectName ? '#000000' : ''}">{{form1.doorSelectName ? form1.doorSelectName : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鎷滆浜嬬敱</text>
-					<text></text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ユ潵璁夸簨鐢�" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-		</view>
-		
-		<view class="list">
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>璁垮濮撳悕</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ヨ瀹㈢殑鐪熷疄濮撳悕" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>璁垮鎵嬫満鍙�</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ヨ瀹㈢殑鎵嬫満鍙�" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>璇佷欢绫诲瀷</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="show4 = true">
-					<text :style="{color: form1.starttime ? '#000000' : ''}">{{form1.starttime ? form1.starttime : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>璇佷欢鍙风爜</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ヨ瀹㈢殑璇佷欢鍙风爜" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鍏徃鍚嶇О</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ヨ瀹㈢殑鍏徃鍚嶇О" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>闅忚杞﹁締</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.reason" placeholder="璇疯緭鍏ヨ溅鐗屽彿" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="cell" style="padding: 24rpx 0;">
-				<view class="title1">
-					<text class="title1_a">浜鸿劯鐓х墖<b>*</b></text>
-					<text class="title1_b">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏�</text>
-					<text class="title1_b">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
-				</view>
-				<view class="content">
-					<view class="content_uplaod" @click="upload('faceImg')">
-						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-					</view>
-					<!-- <view class="content_uplaod" @click="upload('faceImg')" v-else>
+  <view class="visit">
+    <view class="head">鎷滆淇℃伅</view>
+    <view class="list">
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>琚浜哄鍚�</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="show1 = true">
+          <text :style="{ color: form1.receptMemberName ? '#000000' : '' }">{{
+            form1.receptMemberName ? form1.receptMemberName : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鍏ュ洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="show4 = true">
+          <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
+            form1.starttime ? form1.starttime : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>绂诲洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="show5 = true">
+          <text :style="{ color: form1.endtime ? '#000000' : '' }">{{
+            form1.endtime ? form1.endtime : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item" @click="show = true">
+        <view class="list_item_label">
+          <text>璁块棶闂ㄧ</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <text :style="{ color: form1.doorSelectName ? '#000000' : '' }">{{
+            form1.doorSelectName ? form1.doorSelectName : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鎷滆浜嬬敱</text>
+          <text></text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ユ潵璁夸簨鐢�"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+    </view>
+
+    <view class="list">
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>璁垮濮撳悕</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ヨ瀹㈢殑鐪熷疄濮撳悕"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>璁垮鎵嬫満鍙�</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ヨ瀹㈢殑鎵嬫満鍙�"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>璇佷欢绫诲瀷</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="show4 = true">
+          <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
+            form1.starttime ? form1.starttime : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>璇佷欢鍙风爜</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ヨ瀹㈢殑璇佷欢鍙风爜"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鍏徃鍚嶇О</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ヨ瀹㈢殑鍏徃鍚嶇О"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>闅忚杞﹁締</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.reason"
+            placeholder="璇疯緭鍏ヨ溅鐗屽彿"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="cell" style="padding: 24rpx 0">
+        <view class="title1">
+          <text class="title1_a">浜鸿劯鐓х墖<b>*</b></text>
+          <text class="title1_b">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏�</text>
+          <text class="title1_b">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
+        </view>
+        <view class="content">
+          <view class="content_uplaod" @click="upload('faceImg')">
+            <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+          </view>
+          <!-- <view class="content_uplaod" @click="upload('faceImg')" v-else>
 						<image :src="visitorData.faceImgUrl" mode="widthFix"></image>
 					</view> -->
-				</view>
-			</view>
-			<view class="cell" style="padding: 24rpx 0;">
-				<view class="title">鍋ュ悍璇�<b>*</b></view>
-				<view class="content">
-					<view class="content_uplaod" @click="upload('imgurl')">
-						<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-					</view>
-					<!-- <view class="content_uplaod" @click="upload('imgurl')" v-else>
+        </view>
+      </view>
+      <view class="cell" style="padding: 24rpx 0">
+        <view class="title">鍋ュ悍璇�<b>*</b></view>
+        <view class="content">
+          <view class="content_uplaod" @click="upload('imgurl')">
+            <u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
+          </view>
+          <!-- <view class="content_uplaod" @click="upload('imgurl')" v-else>
 						<image :src="visitorData.imgurlUrl" mode="widthFix"></image>
 					</view> -->
-				</view>
-			</view>
-		</view>
-		<view class="cate">
-			<view class="cate_head">闅忚浜哄憳淇℃伅</view>
-			<view class="cate_list">
-				<view class="cate_list_item" v-for="(item,index) in personnel" :key="index">
-					<text>{{item.name}}</text>
-					<u-icon name="close" color="#999999" size="20" @click="deleUser(index)"></u-icon>
-				</view>
-			</view>
-			<view class="cate_add" @click="show3 = true">+娣诲姞闅忚浜哄憳</view>
-		</view>
-		<view class="zw"></view>
-		<view class="footer">
-			<view class="footer_btn" @click="submit">鎻愪氦</view>
-		</view>
-		<!-- 鍏ュ満鏃堕棿 -->
-		<u-datetime-picker
-			:show="show4"
-			:minDate="new Date().getTime()"
-			mode="datetime"
-			@cancel="show4 = false"
-			@confirm="setinDate"
-		></u-datetime-picker>
-		<!-- 绂诲満鏃堕棿 -->
-		<u-datetime-picker
-			:show="show5"
-			:minDate="new Date().getTime()"
-			mode="datetime"
-			@cancel="show5 = false"
-			@confirm="setoutDate"
-		></u-datetime-picker>
-		<!-- 闂ㄧ -->
-		<u-popup :show="show" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show = false">
-			<view class="menjin">
-				<view class="respondent-title">
-					閫夋嫨闂ㄧ
-				</view>
-				<scroll-view scroll-y class="list">
-					<view class="list_item" v-for="(item, index) in columns" :key="index" @click="seleMJ(index)">
-						<text>{{item.name}}</text>
-						<image src="@/static/video@2x.png" mode="widthFix" v-show="!item.active"></image>
-						<image src="@/static/video_sel@2x.png" mode="widthFix" v-show="item.active"></image>
-					</view>
-				</scroll-view>
-				<view class="menjin_footer">
-					<view class="menjin_footer_item" @click="show = false">鍙栨秷</view>
-					<view class="menjin_footer_item" @click="submitMJ">纭</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 閫夋嫨闅忚浜哄憳 -->
-		<u-popup :show="show1" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show1 = false">
-			<view class="popup-content">
-				<view class="respondent-title">
-					閫夋嫨
-				</view>
-				<view class="search-box">
-					<view class="search-box-top">
-						<view class="search-box-top-ipt">
-							<image src="@/static/ic_search@2x.png" mode="widthFix"></image>
-							<input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
-						</view>
-						<!-- <text @click="show1 = false; show3 = true">鏂板</text> -->
-					</view>
-					<view class="search-box-total">鍏�0鏉℃暟鎹�</view>
-				</view>
-				<scroll-view scroll-y class="list">
-					<view class="item" v-for="(item, index) in 8" :key="index">
-						<view class="item_a">
-							<!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
-							<image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_b">
-							<image src="@/static/ic_mima@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_c">
-							<text>鐢ㄦ埛鍚�</text>
-							<text>琛屾斂閮�</text>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="footer1">
-					<!-- <view class="footer_left">
+        </view>
+      </view>
+    </view>
+    <view class="cate">
+      <view class="cate_head">闅忚浜哄憳淇℃伅</view>
+      <view class="cate_list">
+        <view
+          class="cate_list_item"
+          v-for="(item, index) in personnel"
+          :key="index"
+        >
+          <text>{{ item.name }}</text>
+          <u-icon
+            name="close"
+            color="#999999"
+            size="20"
+            @click="deleUser(index)"
+          ></u-icon>
+        </view>
+      </view>
+      <view class="cate_add" @click="show3 = true">+娣诲姞闅忚浜哄憳</view>
+    </view>
+    <view class="zw"></view>
+    <view class="footer">
+      <view class="footer_btn" @click="submit">鎻愪氦</view>
+    </view>
+    <!-- 鍏ュ洯鏃堕棿 -->
+    <u-datetime-picker
+      :show="show4"
+      :minDate="new Date().getTime()"
+      mode="datetime"
+      @cancel="show4 = false"
+      @confirm="setinDate"
+    ></u-datetime-picker>
+    <!-- 绂诲洯鏃堕棿 -->
+    <u-datetime-picker
+      :show="show5"
+      :minDate="new Date().getTime()"
+      mode="datetime"
+      @cancel="show5 = false"
+      @confirm="setoutDate"
+    ></u-datetime-picker>
+    <!-- 闂ㄧ -->
+    <u-popup
+      :show="show"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show = false"
+    >
+      <view class="menjin">
+        <view class="respondent-title"> 閫夋嫨闂ㄧ </view>
+        <scroll-view scroll-y class="list">
+          <view
+            class="list_item"
+            v-for="(item, index) in columns"
+            :key="index"
+            @click="seleMJ(index)"
+          >
+            <text>{{ item.name }}</text>
+            <image
+              src="@/static/video@2x.png"
+              mode="widthFix"
+              v-show="!item.active"
+            ></image>
+            <image
+              src="@/static/video_sel@2x.png"
+              mode="widthFix"
+              v-show="item.active"
+            ></image>
+          </view>
+        </scroll-view>
+        <view class="menjin_footer">
+          <view class="menjin_footer_item" @click="show = false">鍙栨秷</view>
+          <view class="menjin_footer_item" @click="submitMJ">纭</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 閫夋嫨闅忚浜哄憳 -->
+    <u-popup
+      :show="show1"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show1 = false"
+    >
+      <view class="popup-content">
+        <view class="respondent-title"> 閫夋嫨 </view>
+        <view class="search-box">
+          <view class="search-box-top">
+            <view class="search-box-top-ipt">
+              <image src="@/static/ic_search@2x.png" mode="widthFix"></image>
+              <input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
+            </view>
+            <!-- <text @click="show1 = false; show3 = true">鏂板</text> -->
+          </view>
+          <view class="search-box-total">鍏�0鏉℃暟鎹�</view>
+        </view>
+        <scroll-view scroll-y class="list">
+          <view class="item" v-for="(item, index) in 8" :key="index">
+            <view class="item_a">
+              <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
+              <image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_b">
+              <image src="@/static/ic_mima@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_c">
+              <text>鐢ㄦ埛鍚�</text>
+              <text>琛屾斂閮�</text>
+            </view>
+          </view>
+        </scroll-view>
+        <view class="footer1">
+          <!-- <view class="footer_left">
 						<text class="footer_left_a">宸查�夋嫨锛�0浜�</text>
 						<text class="footer_left_b">鏉庝紵锛�</text>
 					</view> -->
-					<view class="footer_btn">纭</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 娣诲姞闅忚浜哄憳 -->
-		<u-popup :show="show3" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show3 = false">
-			<view class="adduser">
-				<view class="adduser_head">闅忚浜哄憳</view>
-				<view class="adduser_list">
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>濮撳悕</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.name" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ョ湡瀹炲鍚�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鎵嬫満鍙�</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="number" v-model="withUserList.phone" maxlength="11" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢绫诲瀷</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt" @click="show6 = true">
-							<text :style="{color: withUserList.idcardTypeName ? '#000000' : ''}">{{withUserList.idcardTypeName ? withUserList.idcardTypeName : '璇烽�夋嫨'}}</text>
-							<u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢鍙风爜</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.idcardNo" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍏徃</text>
-							<text></text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.companyName" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>闅忚杞﹁締</text>
-							<text></text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.carNos" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label1">
-							<text class="cc">浜鸿劯鐓х墖<b>*</b></text>
-							<text class="aa">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏�</text>
-							<text class="aa">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-if="!withUserList.faceImgUrl">
-								<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-							</view>
-							<view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-else>
-								<image :src="withUserList.faceImgUrl" mode="widthFix"></image>
-							</view>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍋ュ悍璇佺収鐗�</text>
-							<text v-if="visit === '1'">*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-if="!withUserList.imgurlUrl">
-								<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-							</view>
-							<view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-else>
-								<image :src="withUserList.imgurlUrl" mode="widthFix"></image>
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="adduser_footer">
-					<view class="adduser_footer_item" @click="show3 = false">鍙栨秷</view>
-					<view class="adduser_footer_item t" @click="submitUser">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-		<u-picker keyName="name" :show="show6" :columns="columns1" @confirm="seleIdcard" @cancel="show6 = false"></u-picker>
-	</view>
+          <view class="footer_btn">纭</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 娣诲姞闅忚浜哄憳 -->
+    <u-popup
+      :show="show3"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show3 = false"
+    >
+      <view class="adduser">
+        <view class="adduser_head">闅忚浜哄憳</view>
+        <view class="adduser_list">
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>濮撳悕</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.name"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ョ湡瀹炲鍚�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鎵嬫満鍙�</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="number"
+                v-model="withUserList.phone"
+                maxlength="11"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢绫诲瀷</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt" @click="show6 = true">
+              <text
+                :style="{ color: withUserList.idcardTypeName ? '#000000' : '' }"
+                >{{
+                  withUserList.idcardTypeName
+                    ? withUserList.idcardTypeName
+                    : "璇烽�夋嫨"
+                }}</text
+              >
+              <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢鍙风爜</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.idcardNo"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍏徃</text>
+              <text></text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.companyName"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ュ叕鍙稿悕绉�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>闅忚杞﹁締</text>
+              <text></text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.carNos"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ヨ溅鐗屽彿"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label1">
+              <text class="cc">浜鸿劯鐓х墖<b>*</b></text>
+              <text class="aa">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏�</text>
+              <text class="aa">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('faceImg')"
+                v-if="!withUserList.faceImgUrl"
+              >
+                <u-icon
+                  name="plus"
+                  color="rgb(153, 153, 153)"
+                  size="28"
+                ></u-icon>
+              </view>
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('faceImg')"
+                v-else
+              >
+                <image :src="withUserList.faceImgUrl" mode="widthFix"></image>
+              </view>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍋ュ悍璇佺収鐗�</text>
+              <text v-if="visit === '1'">*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('imgurl')"
+                v-if="!withUserList.imgurlUrl"
+              >
+                <u-icon
+                  name="plus"
+                  color="rgb(153, 153, 153)"
+                  size="28"
+                ></u-icon>
+              </view>
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('imgurl')"
+                v-else
+              >
+                <image :src="withUserList.imgurlUrl" mode="widthFix"></image>
+              </view>
+            </view>
+          </view>
+        </view>
+        <view class="adduser_footer">
+          <view class="adduser_footer_item" @click="show3 = false">鍙栨秷</view>
+          <view class="adduser_footer_item t" @click="submitUser">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <u-picker
+      keyName="name"
+      :show="show6"
+      :columns="columns1"
+      @confirm="seleIdcard"
+      @cancel="show6 = false"
+    ></u-picker>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				show: false,
-				show1: false,
-				show3: false,
-				show4: false,
-				show5: false,
-				show6: false,
-				fileList: [],
-				columns1: [[{name: '韬唤璇�', id: 0}, {name: '娓境璇佷欢', id: 1},{name: '鎶ょ収', id: 2}]],
-				columns: [],
-				personnel: [],
-				userAnswerId: '',
-				form1: {
-					phone1: '',
-					receptMemberId: '',
-					receptMemberName: '',
-					starttime: '',
-					endtime: '',
-					doors: '',
-					doorSelectName: '',
-					reason: '',
-					carNos: ''
-				},
-				withUserList: {
-					name: '',
-					phone: '',
-					idcardType: '',
-					idcardTypeName: '',
-					companyName: '',
-					idcardNo: '',
-					faceImg: '',
-					faceImgUrl: '',
-					imgurl: '',
-					imgurlUrl: ''
-				},
-				visit: '',
-				form: {},
-				accessControl: '',
-				verify: ''
-			};
-		},
-		onLoad(options) {
-			// this.form = JSON.parse(options.data)
-			// this.getvisit()
-			// this.getVisit1()
-			// this.getUserValid()
-		},
-		methods: {
-			submit() {
-				if (!this.form1.receptMemberId) return uni.showToast({
-					title: '琚浜轰笉鑳戒负绌�',
-					icon: 'none'
-				})
-				if (!this.form1.starttime) return uni.showToast({
-					title: '鍏ュ満鏃堕棿涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.endtime) return uni.showToast({
-					title: '绂诲満鏃堕棿涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.doorSelectName) return uni.showToast({
-					title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.reason) return uni.showToast({
-					title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				this.$u.api.createFk({
-					...this.form,
-					...this.form1,
-					openid: this.$store.state.openId,
-					withUserList: this.personnel
-				}).then(res => {
-					if (res.code === 200) {
-						console.log(res)
-					}
-				})
-			},
-			deleUser(i) {
-				this.personnel.splice(i, 1)
-			},
-			getVisit1() {
-				// 鏄惁闇�瑕佺瓟棰�
-				this.$u.api.getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'HEALTH_CARD'
-				}).then(res => {
-					if (res.code === 200) {
-						this.visit = res.data.code
-					}
-				})
-			},
-			submitUser() {
-				if (!this.withUserList.name) return uni.showToast({
-					title: '濮撳悕涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.phone) return uni.showToast({
-					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
-					icon: 'none'
-				})
-				if (!String(this.withUserList.idcardType)) return uni.showToast({
-					title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.idcardNo) return uni.showToast({
-					title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.faceImg) return uni.showToast({
-					title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (this.visit === '1') {
-					if (!this.withUserList.imgurl) return uni.showToast({
-						title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
-						icon: 'none'
-					})
-				}
-				let arr = JSON.parse(JSON.stringify(this.withUserList))
-				this.personnel.push(arr)
-				this.show3 = false
-				this.withUserList.name = ''
-				this.withUserList.phone = ''
-				this.withUserList.idcardType = ''
-				this.withUserList.idcardTypeName = ''
-				this.withUserList.companyName = ''
-				this.withUserList.idcardNo = ''
-				this.withUserList.faceImg = ''
-				this.withUserList.faceImgUrl = ''
-				this.withUserList.imgurl = ''
-				this.withUserList.imgurlUrl = ''
-			},
-			upload(type) {
-				uni.chooseImage({
-					success: (chooseImageRes) => {
-						uni.showLoading({ title: '涓婁紶涓�', mask: true });
-						for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
-							uni.uploadFile({
-								url: `${this.$baseUrl}public/api/uploadFtp.do`,
-								filePath: chooseImageRes.tempFilePaths[i],
-								name: 'file',
-								formData: {
-									folderCode: 'MEMBER_IMG'
-								},
-								success: (uploadFileRes) => {
-									let res = JSON.parse(uploadFileRes.data)
-									if (type === 'faceImg') {
-										this.withUserList.faceImg = res.data.halfPath
-										this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
-									} else {
-										this.withUserList.imgurl = res.data.halfPath
-										this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
-									}
-								},
-								complete() {
-									if (i === chooseImageRes.tempFilePaths.length - 1) {
-										uni.hideLoading();
-									}
-								}
-							});
-						}
-					}
-				});
-			},
-			submitMJ() {
-				let arr = []
-				let names = []
-				this.columns.forEach(item => {
-					if (item.active) {
-						arr.push(item.id)
-						names.push(item.name)
-					}
-				})
-				if (arr.length === 0) return uni.showToast({
-					title: '璇烽�夋嫨闂ㄧ',
-					icon: 'none'
-				})
-				this.form1.doorSelectName = names.join(',')
-				this.form1.doors = arr.join(',')
-				this.show = false
-			},
-			seleMJ(i) {
-				this.columns.forEach((item,index) => {
-					if (index === i) {
-						item.active = !item.active
-					}
-				})
-			},
-			setinDate(e) {
-				this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss');
-				this.show4 = false
-			},
-			setoutDate(e) {
-				this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss');
-				this.show5 = false
-			},
-			// 鏌ヨ鐢ㄦ埛
-			getUser() {
-				console.log(this.verify)
-				console.log(this.form1.phone1)
-				console.log(this.form1.receptMemberName)
-				if (this.verify === '0') {
-					if (this.form1.phone1) {
-						this.$u.api.getVisitedMember({
-							mobile: this.form1.phone1
-						}).then(res => {
-							if (res.code === 200) {
-								this.form1.receptMemberId = res.data.id
-								this.form1.receptMemberName = res.data.name
-							}
-						})
-					}
-				} else {
-					if (this.form1.phone1 && this.form1.receptMemberName) {
-						this.$u.api.getVisitedMember({
-							mobile: this.form1.phone1,
-							name: this.form1.receptMemberName
-						}).then(res => {
-							if (res.code === 200) {
-								this.form1.receptMemberId = res.data.id
-								this.form1.receptMemberName = res.data.name
-							}
-						})
-					}
-				}
-			},
-			// 琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
-			getUserValid() {
-				this.$u.api.getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'BEVISITED_USER_VALID'
-				}).then(res => {
-					if (res.code === 200) {
-						console.log(res)
-						this.verify = res.data.code
-					}
-				})
-			},
-			// 鑾峰彇鏄惁闇�瑕侀�夋嫨闂ㄧ/闂ㄧ鍒楄〃
-			getvisit() {
-				this.$u.api.getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'SELECT_DOORS_VISIT_REQUIRED'
-				}).then(res => {
-					if (res.code === 200) {
-						this.accessControl = res.data.code
-						if (res.data.code === '1') {
-							this.$u.api.deviceRoleList({ type: 1 })
-								.then(device => {
-									if (device.code === 200) {
-										if (device.data.length > 0) {
-											device.data.forEach(item => {
-												item.active = false
-											})
-											this.columns = device.data
-										}
-									}
-								})
-						}
-					}
-				})
-			},
-			confirm(e) {
-				this.show = false
-			}
-		}
-	}
+export default {
+  data() {
+    return {
+      show: false,
+      show1: false,
+      show3: false,
+      show4: false,
+      show5: false,
+      show6: false,
+      fileList: [],
+      columns1: [[{ name: '韬唤璇�', id: 0 }, { name: '娓境璇佷欢', id: 1 }, { name: '鎶ょ収', id: 2 }]],
+      columns: [],
+      personnel: [],
+      userAnswerId: '',
+      form1: {
+        phone1: '',
+        receptMemberId: '',
+        receptMemberName: '',
+        starttime: '',
+        endtime: '',
+        doors: '',
+        doorSelectName: '',
+        reason: '',
+        carNos: ''
+      },
+      withUserList: {
+        name: '',
+        phone: '',
+        idcardType: '',
+        idcardTypeName: '',
+        companyName: '',
+        idcardNo: '',
+        faceImg: '',
+        faceImgUrl: '',
+        imgurl: '',
+        imgurlUrl: ''
+      },
+      visit: '',
+      form: {},
+      accessControl: '',
+      verify: ''
+    }
+  },
+  onLoad(options) {
+    // this.form = JSON.parse(options.data)
+    // this.getvisit()
+    // this.getVisit1()
+    // this.getUserValid()
+  },
+  methods: {
+    submit() {
+      if (!this.form1.receptMemberId) return uni.showToast({
+        title: '琚浜轰笉鑳戒负绌�',
+        icon: 'none'
+      })
+      if (!this.form1.starttime) return uni.showToast({
+        title: '鍏ュ洯鏃堕棿涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.endtime) return uni.showToast({
+        title: '绂诲洯鏃堕棿涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.doorSelectName) return uni.showToast({
+        title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.reason) return uni.showToast({
+        title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      this.$u.api.createFk({
+        ...this.form,
+        ...this.form1,
+        openid: this.$store.state.openId,
+        withUserList: this.personnel
+      }).then(res => {
+        if (res.code === 200) {
+          console.log(res)
+        }
+      })
+    },
+    deleUser(i) {
+      this.personnel.splice(i, 1)
+    },
+    getVisit1() {
+      // 鏄惁闇�瑕佺瓟棰�
+      this.$u.api.getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'HEALTH_CARD'
+      }).then(res => {
+        if (res.code === 200) {
+          this.visit = res.data.code
+        }
+      })
+    },
+    submitUser() {
+      if (!this.withUserList.name) return uni.showToast({
+        title: '濮撳悕涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.phone) return uni.showToast({
+        title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+        icon: 'none'
+      })
+      if (!String(this.withUserList.idcardType)) return uni.showToast({
+        title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.idcardNo) return uni.showToast({
+        title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.faceImg) return uni.showToast({
+        title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (this.visit === '1') {
+        if (!this.withUserList.imgurl) return uni.showToast({
+          title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+          icon: 'none'
+        })
+      }
+      let arr = JSON.parse(JSON.stringify(this.withUserList))
+      this.personnel.push(arr)
+      this.show3 = false
+      this.withUserList.name = ''
+      this.withUserList.phone = ''
+      this.withUserList.idcardType = ''
+      this.withUserList.idcardTypeName = ''
+      this.withUserList.companyName = ''
+      this.withUserList.idcardNo = ''
+      this.withUserList.faceImg = ''
+      this.withUserList.faceImgUrl = ''
+      this.withUserList.imgurl = ''
+      this.withUserList.imgurlUrl = ''
+    },
+    upload(type) {
+      uni.chooseImage({
+        success: (chooseImageRes) => {
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+            uni.uploadFile({
+              url: `${this.$baseUrl}public/api/uploadFtp.do`,
+              filePath: chooseImageRes.tempFilePaths[i],
+              name: 'file',
+              formData: {
+                folderCode: 'MEMBER_IMG'
+              },
+              success: (uploadFileRes) => {
+                let res = JSON.parse(uploadFileRes.data)
+                if (type === 'faceImg') {
+                  this.withUserList.faceImg = res.data.halfPath
+                  this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+                } else {
+                  this.withUserList.imgurl = res.data.halfPath
+                  this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+                }
+              },
+              complete() {
+                if (i === chooseImageRes.tempFilePaths.length - 1) {
+                  uni.hideLoading()
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+    submitMJ() {
+      let arr = []
+      let names = []
+      this.columns.forEach(item => {
+        if (item.active) {
+          arr.push(item.id)
+          names.push(item.name)
+        }
+      })
+      if (arr.length === 0) return uni.showToast({
+        title: '璇烽�夋嫨闂ㄧ',
+        icon: 'none'
+      })
+      this.form1.doorSelectName = names.join(',')
+      this.form1.doors = arr.join(',')
+      this.show = false
+    },
+    seleMJ(i) {
+      this.columns.forEach((item, index) => {
+        if (index === i) {
+          item.active = !item.active
+        }
+      })
+    },
+    setinDate(e) {
+      this.form1.starttime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      this.show4 = false
+    },
+    setoutDate(e) {
+      this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      this.show5 = false
+    },
+    // 鏌ヨ鐢ㄦ埛
+    getUser() {
+      console.log(this.verify)
+      console.log(this.form1.phone1)
+      console.log(this.form1.receptMemberName)
+      if (this.verify === '0') {
+        if (this.form1.phone1) {
+          this.$u.api.getVisitedMember({
+            mobile: this.form1.phone1
+          }).then(res => {
+            if (res.code === 200) {
+              this.form1.receptMemberId = res.data.id
+              this.form1.receptMemberName = res.data.name
+            }
+          })
+        }
+      } else {
+        if (this.form1.phone1 && this.form1.receptMemberName) {
+          this.$u.api.getVisitedMember({
+            mobile: this.form1.phone1,
+            name: this.form1.receptMemberName
+          }).then(res => {
+            if (res.code === 200) {
+              this.form1.receptMemberId = res.data.id
+              this.form1.receptMemberName = res.data.name
+            }
+          })
+        }
+      }
+    },
+    // 琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
+    getUserValid() {
+      this.$u.api.getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'BEVISITED_USER_VALID'
+      }).then(res => {
+        if (res.code === 200) {
+          console.log(res)
+          this.verify = res.data.code
+        }
+      })
+    },
+    // 鑾峰彇鏄惁闇�瑕侀�夋嫨闂ㄧ/闂ㄧ鍒楄〃
+    getvisit() {
+      this.$u.api.getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'SELECT_DOORS_VISIT_REQUIRED'
+      }).then(res => {
+        if (res.code === 200) {
+          this.accessControl = res.data.code
+          if (res.data.code === '1') {
+            this.$u.api.deviceRoleList({ type: 1 })
+              .then(device => {
+                if (device.code === 200) {
+                  if (device.data.length > 0) {
+                    device.data.forEach(item => {
+                      item.active = false
+                    })
+                    this.columns = device.data
+                  }
+                }
+              })
+          }
+        }
+      })
+    },
+    confirm(e) {
+      this.show = false
+    }
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7 !important;
-	}
-	.u-upload__button {
-		margin: 0 !important;
-	}
-	.content_uplaod {
-		width: 120rpx;
-		height: 120rpx;
-		background-color: #ececec;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		overflow: hidden;
-	}
-	.content_uplaod image {
-		width: 100%;
-		height: 100%;
-	}
-	.title {
-		font-size: 30rpx;
-		font-weight: 400;
-		color: #222222;
-		display: flex;
-		align-items: center;
-	}
-	
-	.title b {
-		color: red;
-		font-weight: bold;
-	}
-	
-	.title1 {
-		display: flex;
-		flex-direction: column;
-		.title1_a {
-			font-size: 30rpx;
-			font-weight: 400;
-			color: #222222;
-			display: flex;
-			align-items: center;
-			margin-bottom: 20rpx;
-			b {
-				color: red;
-				font-weight: bold;
-			}
-		}
-		.title1_b {
-			font-size: 24rpx;
-			font-weight: 400;
-			color: #999999;
-		}
-	}
+page {
+  background-color: #f7f7f7 !important;
+}
+.u-upload__button {
+  margin: 0 !important;
+}
+.content_uplaod {
+  width: 120rpx;
+  height: 120rpx;
+  background-color: #ececec;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  overflow: hidden;
+}
+.content_uplaod image {
+  width: 100%;
+  height: 100%;
+}
+.title {
+  font-size: 30rpx;
+  font-weight: 400;
+  color: #222222;
+  display: flex;
+  align-items: center;
+}
+
+.title b {
+  color: red;
+  font-weight: bold;
+}
+
+.title1 {
+  display: flex;
+  flex-direction: column;
+  .title1_a {
+    font-size: 30rpx;
+    font-weight: 400;
+    color: #222222;
+    display: flex;
+    align-items: center;
+    margin-bottom: 20rpx;
+    b {
+      color: red;
+      font-weight: bold;
+    }
+  }
+  .title1_b {
+    font-size: 24rpx;
+    font-weight: 400;
+    color: #999999;
+  }
+}
 </style>
 <style lang="scss" scoped>
-	.visit {
-		width: 100%;
-		.menjin {
-			width: 100%;
-			.respondent-title {
-				width: 100%;
-				height: 100rpx;
-				line-height: 100rpx;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.list {
-				width: 100%;
-				height: 400rpx;
-				display: flex;
-				flex-direction: column;
-				.list_item {
-					width: 100%;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					text {
-						font-size: 28rpx;
-						color: #000000;
-					}
-					image {
-						width: 30rpx;
-						height: 30rpx;
-					}
-				}
-			}
-			.menjin_footer {
-				width: 100%;
-				padding: 30rpx;
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.menjin_footer_item {
-					flex: 1;
-					height: 80rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					border-radius: 10rpx;
-					background-color: #025EEF;
-					color: #ffffff;
-					font-size: 26rpx;
-					margin-left: 30rpx;
-					&:first-child {
-						margin-left: 0 !important;
-					}
-				}
-			}
-		}
-		.adduser {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.adduser_head {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.adduser_list {
-				width: 100%;
-				margin-top: 40rpx;
-				.adduser_list_item {
-					width: 100%;
-					padding: 24rpx 0;
-					box-sizing: border-box;
-					border-bottom: 1rpx solid #E5E5E5;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.adduser_list_item_label1 {
-						flex-shrink: 0;
-						display: flex;
-						flex-direction: column;
-						.cc {
-							font-size: 30rpx;
-							font-family: PingFangSC, PingFang SC;
-							font-weight: 400;
-							color: #222222;
-							margin-bottom: 20rpx;
-							b {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #E0312A;
-							}
-						}
-						.aa {
-							font-size: 24rpx;
-							font-weight: 400;
-							color: #999999;
-						}
-					}
-					.adduser_list_item_label {
-						flex-shrink: 0;
-						display: flex;
-						align-items: center;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #E0312A;
-							}
-						}
-					}
-					.adduser_list_item_ipt {
-						flex: 1;
-						text-align: right;
-						font-size: 28rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-left: 30rpx;	
-						display: flex;
-						align-items: center;
-						justify-content: flex-end;
-						.adduser_list_item_ipt1_upload {
-							width: 120rpx;
-							height: 120rpx;
-							background-color: #ececec;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							overflow: hidden;
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-						text {
-							font-size: 28rpx;
-							font-family: PingFangSC, PingFang SC;
-							font-weight: 400;
-							color: #999999;
-						}
-					}
-				}
-			}
-			.adduser_footer {
-				width: 100%;
-				margin-top: 60rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.t {
-					background: #025EEF !important;
-					color: #ffffff !important;
-				}
-				.adduser_footer_item {
-					width: 336rpx;
-					height: 88rpx;
-					line-height: 88rpx;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #025EEF;
-					font-size: 32rpx;
-					font-family: PingFangSC, PingFang SC;
-					font-weight: 400;
-					color: #025EEF;
-					margin-right: 18rpx;
-					&:last-child {
-						margin: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.addcar {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.addcar_head {
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.addcar_ipt {
-				width: 100%;
-				height: 100rpx;
-				line-height: 100rpx;
-				text-align: center;
-				background: #F7F7F7;
-				border-radius: 50rpx;
-				margin-top: 60rpx;
-				input {
-					width: 100%;
-					height: 100%;
-					font-size: 28rpx;
-					font-weight: 400;
-					color: #000000;
-					text-align: center;
-				}
-			}
-			.addcar_footer {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				margin-top: 60rpx;
-				.t {
-					background: #025EEF !important;
-					color: #ffffff !important;
-				}
-				.addcar_footer_item {
-					flex: 1;
-					height: 88rpx;
-					line-height: 88rpx;
-					font-size: 32rpx;
-					font-weight: 400;
-					color: #025EEF;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #025EEF;
-					margin-right: 18rpx;
-					&:last-child {
-						margin-right: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.popup-content {
-			padding: 30rpx 30rpx 0 30rpx;
-			overflow: hidden;
-			display: flex;
-			flex-flow: column;
-			.respondent-title {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.search-box {
-				width: 100%;
-				margin-top: 40rpx;
-				.search-box-top {
-					width: 100%;
-					height: 68rpx;
-					display: flex;
-					align-items: center;
-					.search-box-top-ipt {
-						flex: 1;
-						height: 100%;
-						padding: 0 30rpx;
-						box-sizing: border-box;
-						background: #F7F7F7;
-						border-radius: 4rpx;
-						display: flex;
-						align-items: center;
-						image {
-							width: 36rpx;
-							height: 36rpx;
-							flex-shrink: 0;
-							margin-right: 22rpx;
-						}
-						input {
-							flex: 1;
-							height: 100%;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #B2B2B2;
-						}
-					}
-					text {
-						flex-shrink: 0;
-						margin-left: 30rpx;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #025EEF;
-					}
-				}
-				.search-box-total {
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #666666;
-					margin-top: 24rpx;
-				}
-			}
-			.list {
-				width: 100%;
-				height: 800rpx;
-				margin-top: 30rpx;
-				padding: 0 !important;
-				.item {
-					width: 100%;
-					height: 102rpx;
-					display: flex;
-					align-items: center;
-					border-bottom: 1rpx solid #E5E5E5;
-					&:last-child {
-						border: none;
-					}
-					.item_a {
-						flex-shrink: 0;
-						width: 36rpx;
-						height: 36rpx;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_b {
-						flex-shrink: 0;
-						width: 80rpx;
-						height: 80rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						overflow: hidden;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_c {
-						flex: 1;
-						display: flex;
-						align-items: flex-start;
-						flex-direction: column;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 26rpx;
-								font-weight: 400;
-								color: #777777;
-							}
-						}
-					}
-				}
-			}
-			.footer1 {
-				width: 100%;
-				height: 100rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				padding: 14rpx 0 0 0;
-				box-sizing: border-box;
-				.footer_left {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					.footer_left_a {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-					}
-					.footer_left_b {
-						font-size: 24rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #999999;
-					}
-				}
-				.footer_btn {
-					flex-shrink: 0;
-					width: 100%;
-					height: 72rpx;
-					line-height: 72rpx;
-					text-align: center;
-					background: #025EEF;
-					border-radius: 8rpx;
-					font-size: 28rpx;
-					font-weight: 500;
-					color: #FFFFFF;
-					border-radius: 44rpx;
-				}
-			}
-		}
-		    
+.visit {
+  width: 100%;
+  .menjin {
+    width: 100%;
+    .respondent-title {
+      width: 100%;
+      height: 100rpx;
+      line-height: 100rpx;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .list {
+      width: 100%;
+      height: 400rpx;
+      display: flex;
+      flex-direction: column;
+      .list_item {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        text {
+          font-size: 28rpx;
+          color: #000000;
+        }
+        image {
+          width: 30rpx;
+          height: 30rpx;
+        }
+      }
+    }
+    .menjin_footer {
+      width: 100%;
+      padding: 30rpx;
+      box-sizing: border-box;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .menjin_footer_item {
+        flex: 1;
+        height: 80rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-radius: 10rpx;
+        background-color: #025eef;
+        color: #ffffff;
+        font-size: 26rpx;
+        margin-left: 30rpx;
+        &:first-child {
+          margin-left: 0 !important;
+        }
+      }
+    }
+  }
+  .adduser {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .adduser_head {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .adduser_list {
+      width: 100%;
+      margin-top: 40rpx;
+      .adduser_list_item {
+        width: 100%;
+        padding: 24rpx 0;
+        box-sizing: border-box;
+        border-bottom: 1rpx solid #e5e5e5;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .adduser_list_item_label1 {
+          flex-shrink: 0;
+          display: flex;
+          flex-direction: column;
+          .cc {
+            font-size: 30rpx;
+            font-family: PingFangSC, PingFang SC;
+            font-weight: 400;
+            color: #222222;
+            margin-bottom: 20rpx;
+            b {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #e0312a;
+            }
+          }
+          .aa {
+            font-size: 24rpx;
+            font-weight: 400;
+            color: #999999;
+          }
+        }
+        .adduser_list_item_label {
+          flex-shrink: 0;
+          display: flex;
+          align-items: center;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #e0312a;
+            }
+          }
+        }
+        .adduser_list_item_ipt {
+          flex: 1;
+          text-align: right;
+          font-size: 28rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-left: 30rpx;
+          display: flex;
+          align-items: center;
+          justify-content: flex-end;
+          .adduser_list_item_ipt1_upload {
+            width: 120rpx;
+            height: 120rpx;
+            background-color: #ececec;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            overflow: hidden;
+            image {
+              width: 100%;
+              height: 100%;
+            }
+          }
+          text {
+            font-size: 28rpx;
+            font-family: PingFangSC, PingFang SC;
+            font-weight: 400;
+            color: #999999;
+          }
+        }
+      }
+    }
+    .adduser_footer {
+      width: 100%;
+      margin-top: 60rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .t {
+        background: #025eef !important;
+        color: #ffffff !important;
+      }
+      .adduser_footer_item {
+        width: 336rpx;
+        height: 88rpx;
+        line-height: 88rpx;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #025eef;
+        font-size: 32rpx;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #025eef;
+        margin-right: 18rpx;
+        &:last-child {
+          margin: 0 !important;
+        }
+      }
+    }
+  }
 
-		.head {
-			width: 100%;
-			padding: 20rpx 30rpx;
-			box-sizing: border-box;
-			font-size: 28rpx;
-			font-weight: 400;
-			color: #666666;
-		}
+  .addcar {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .addcar_head {
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .addcar_ipt {
+      width: 100%;
+      height: 100rpx;
+      line-height: 100rpx;
+      text-align: center;
+      background: #f7f7f7;
+      border-radius: 50rpx;
+      margin-top: 60rpx;
+      input {
+        width: 100%;
+        height: 100%;
+        font-size: 28rpx;
+        font-weight: 400;
+        color: #000000;
+        text-align: center;
+      }
+    }
+    .addcar_footer {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 60rpx;
+      .t {
+        background: #025eef !important;
+        color: #ffffff !important;
+      }
+      .addcar_footer_item {
+        flex: 1;
+        height: 88rpx;
+        line-height: 88rpx;
+        font-size: 32rpx;
+        font-weight: 400;
+        color: #025eef;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #025eef;
+        margin-right: 18rpx;
+        &:last-child {
+          margin-right: 0 !important;
+        }
+      }
+    }
+  }
 
-		.list {
-			width: 100%;
-			padding: 0 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			margin-bottom: 20rpx;
-			
-			&:last-child {
-				margin: 0 !important;
-			}
+  .popup-content {
+    padding: 30rpx 30rpx 0 30rpx;
+    overflow: hidden;
+    display: flex;
+    flex-flow: column;
+    .respondent-title {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .search-box {
+      width: 100%;
+      margin-top: 40rpx;
+      .search-box-top {
+        width: 100%;
+        height: 68rpx;
+        display: flex;
+        align-items: center;
+        .search-box-top-ipt {
+          flex: 1;
+          height: 100%;
+          padding: 0 30rpx;
+          box-sizing: border-box;
+          background: #f7f7f7;
+          border-radius: 4rpx;
+          display: flex;
+          align-items: center;
+          image {
+            width: 36rpx;
+            height: 36rpx;
+            flex-shrink: 0;
+            margin-right: 22rpx;
+          }
+          input {
+            flex: 1;
+            height: 100%;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #b2b2b2;
+          }
+        }
+        text {
+          flex-shrink: 0;
+          margin-left: 30rpx;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #025eef;
+        }
+      }
+      .search-box-total {
+        font-size: 26rpx;
+        font-weight: 400;
+        color: #666666;
+        margin-top: 24rpx;
+      }
+    }
+    .list {
+      width: 100%;
+      height: 800rpx;
+      margin-top: 30rpx;
+      padding: 0 !important;
+      .item {
+        width: 100%;
+        height: 102rpx;
+        display: flex;
+        align-items: center;
+        border-bottom: 1rpx solid #e5e5e5;
+        &:last-child {
+          border: none;
+        }
+        .item_a {
+          flex-shrink: 0;
+          width: 36rpx;
+          height: 36rpx;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_b {
+          flex-shrink: 0;
+          width: 80rpx;
+          height: 80rpx;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          overflow: hidden;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_c {
+          flex: 1;
+          display: flex;
+          align-items: flex-start;
+          flex-direction: column;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 26rpx;
+              font-weight: 400;
+              color: #777777;
+            }
+          }
+        }
+      }
+    }
+    .footer1 {
+      width: 100%;
+      height: 100rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 14rpx 0 0 0;
+      box-sizing: border-box;
+      .footer_left {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        .footer_left_a {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+        }
+        .footer_left_b {
+          font-size: 24rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #999999;
+        }
+      }
+      .footer_btn {
+        flex-shrink: 0;
+        width: 100%;
+        height: 72rpx;
+        line-height: 72rpx;
+        text-align: center;
+        background: #025eef;
+        border-radius: 8rpx;
+        font-size: 28rpx;
+        font-weight: 500;
+        color: #ffffff;
+        border-radius: 44rpx;
+      }
+    }
+  }
 
-			.list_item {
-				width: 100%;
-				height: 98rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
+  .head {
+    width: 100%;
+    padding: 20rpx 30rpx;
+    box-sizing: border-box;
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #666666;
+  }
 
-				.list_item_label {
-					flex-shrink: 0;
-					display: flex;
-					align-items: center;
+  .list {
+    width: 100%;
+    padding: 0 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    margin-bottom: 20rpx;
 
-					text {
-						&:nth-child(1) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #222222;
-						}
+    &:last-child {
+      margin: 0 !important;
+    }
 
-						&:nth-child(2) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #E42D2D;
-						}
-					}
-				}
+    .list_item {
+      width: 100%;
+      height: 98rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
 
-				.list_item_content {
-					flex: 1;
-					height: 100%;
-					margin-left: 30rpx;
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
+      .list_item_label {
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
 
-					text {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #999999;
-						margin-right: 6rpx;
-					}
+        text {
+          &:nth-child(1) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #222222;
+          }
 
-					input {
-						width: 100%;
-						height: 100%;
-						text-align: right;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-					}
-				}
-			}
-		}
+          &:nth-child(2) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #e42d2d;
+          }
+        }
+      }
 
-		.cate {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			margin-top: 20rpx;
+      .list_item_content {
+        flex: 1;
+        height: 100%;
+        margin-left: 30rpx;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
 
-			.cate_head {
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
+        text {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #999999;
+          margin-right: 6rpx;
+        }
 
-			.cate_list {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				flex-wrap: wrap;
-				margin-top: 30rpx;
+        input {
+          width: 100%;
+          height: 100%;
+          text-align: right;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+        }
+      }
+    }
+  }
 
-				.cate_list_item {
-					height: 64rpx;
-					padding: 0 20rpx;
-					box-sizing: border-box;
-					background-color: #EEEEEE;
-					border-radius: 4rpx;
-					margin-right: 20rpx;
-					margin-bottom: 20rpx;
-					display: flex;
-					align-items: center;
+  .cate {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    margin-top: 20rpx;
 
-					&:last-child {
-						margin-right: 0 !important;
-					}
+    .cate_head {
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
 
-					text {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-right: 30rpx;
-					}
-				}
-			}
+    .cate_list {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      flex-wrap: wrap;
+      margin-top: 30rpx;
 
-			.cate_add {
-				width: 200rpx;
-				height: 50rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				background: rgba(2, 94, 239, 0);
-				border-radius: 25rpx;
-				border: 1rpx solid #025EEF;
-				font-size: 22rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 400;
-				margin-top: 20rpx;
-				color: #025EEF;
-				margin: 0 auto;
-			}
-		}
+      .cate_list_item {
+        height: 64rpx;
+        padding: 0 20rpx;
+        box-sizing: border-box;
+        background-color: #eeeeee;
+        border-radius: 4rpx;
+        margin-right: 20rpx;
+        margin-bottom: 20rpx;
+        display: flex;
+        align-items: center;
 
-		.zw {
-			width: 100%;
-			height: calc(env(safe-area-inset-bottom) + 118rpx);
-		}
+        &:last-child {
+          margin-right: 0 !important;
+        }
 
-		.footer {
-			width: 100%;
-			padding: 0 30rpx;
-			padding-bottom: env(safe-area-inset-bottom);
-			box-sizing: border-box;
-			position: fixed;
-			left: 0;
-			bottom: 30rpx;
+        text {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-right: 30rpx;
+        }
+      }
+    }
 
-			.footer_btn {
-				width: 100%;
-				height: 88rpx;
-				line-height: 88rpx;
-				text-align: center;
-				background: #025EEF;
-				border-radius: 44rpx;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #FFFFFF;
-			}
-		}
-	}
+    .cate_add {
+      width: 200rpx;
+      height: 50rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(2, 94, 239, 0);
+      border-radius: 25rpx;
+      border: 1rpx solid #025eef;
+      font-size: 22rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      margin-top: 20rpx;
+      color: #025eef;
+      margin: 0 auto;
+    }
+  }
+
+  .zw {
+    width: 100%;
+    height: calc(env(safe-area-inset-bottom) + 118rpx);
+  }
+
+  .footer {
+    width: 100%;
+    padding: 0 30rpx;
+    padding-bottom: env(safe-area-inset-bottom);
+    box-sizing: border-box;
+    position: fixed;
+    left: 0;
+    bottom: 30rpx;
+
+    .footer_btn {
+      width: 100%;
+      height: 88rpx;
+      line-height: 88rpx;
+      text-align: center;
+      background: #025eef;
+      border-radius: 44rpx;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #ffffff;
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/h5/n_pages/visitorApproval/visitorApproval.vue b/h5/n_pages/visitorApproval/visitorApproval.vue
index bae4881..ca23113 100644
--- a/h5/n_pages/visitorApproval/visitorApproval.vue
+++ b/h5/n_pages/visitorApproval/visitorApproval.vue
@@ -1,372 +1,368 @@
 <template>
-	<view class="box">
-		<view class="box_list">
-			<view class="box_list_name">涓佹仼鍑殑銆屾嫓璁跨敵璇枫��</view>
-			<view class="box_list_job">鍌ㄨ繍绉�</view>
-			<view class="box_list_status">寰呭鐞�</view>
-			<view class="box_list_status1">
-				<!-- <image src="@/static/ic_passed@2x.png" mode="widthFix"></image> -->
-				<!-- <image src="@/static/ic_refused@2x.png" mode="widthFix"></image> -->
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item">
-				<text>鎷滆浜�</text>
-				<text>寤栨垚鐟�</text>
-			</view>
-			<view class="box_list_item">
-				<text>棰勮鍏�/绂诲巶鏃堕棿</text>
-				<text>05/01 8:00 - 05/01 18:00</text>
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item1">
-				<view class="box_list_item1_head">
-					璁垮淇℃伅
-				</view>
-				<view class="box_list_item_img">
-					<image src="@/static/logo@2x.png" mode="widthFix"></image>
-				</view>
-				<view class="box_list_item_info">
-					<text>瀛欏織 18177665678</text>
-					<text>韬唤璇� 3309****2910</text>
-					<text>鐨朅88789</text>
-				</view>
-			</view>
-			<view class="box_list_item1">
-				<view class="box_list_item1_head">
-					闅忚浜哄憳
-				</view>
-				<view class="box_list_item_img">
-					<image src="@/static/logo@2x.png" mode="widthFix"></image>
-				</view>
-				<view class="box_list_item_info">
-					<text>鏉庡皬鍙� 18177665678</text>
-					<text>韬唤璇� 3309****2910</text>
-					<text>鐨朅88789</text>
-				</view>
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item">
-				<text>鍏徃鍚嶇О</text>
-				<text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
-			</view>
-			<view class="box_list_item">
-				<text>鏉ヨ浜嬬敱</text>
-				<text>鍟嗛噺鍚堝悓浜嬪疁</text>
-			</view>
-			<view class="box_list_item">
-				<text>鍋ュ悍璇�</text>
-				<view class="box_list_item_img">
-					<image src="@/static/logo@2x.png" mode="widthFix"></image>
-				</view>
-			</view>
-		</view>
-		<view class="box_list">
-			<view class="box_list_title">娴佺▼</view>
-			<view class="box_list_list">
-				<view class="box_list_list_item">
-					<view class="left">
-						<view class="left_d"></view>
-						<view class="left_x"></view>
-					</view>
-					<view class="right">
-						<view class="right_top">
-							<text>鏍撳瓙鍝ユ彁浜ょ殑鐢宠</text>
-							<text>2023-05-01 08:00</text>
-						</view>
-						<view class="right_bottom">
-							<text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
-						</view>
-					</view>
-				</view>
-				<view class="box_list_list_item">
-					<view class="left">
-						<view class="left_d"></view>
-						<view class="left_x"></view>
-					</view>
-					<view class="right">
-						<view class="right_top">
-							<text>鎷滆鍛樺伐</text>
-							<text>2023-05-01 08:00</text>
-						</view>
-						<view class="right_bottom">
-							<text>鐜嬩簹钃�(<text class="blue">瀹℃牳閫氳繃</text>)</text>
-						</view>
-					</view>
-				</view>
-				<view class="box_list_list_item">
-					<view class="left">
-						<view class="left_d"></view>
-						<view class="left_x"></view>
-					</view>
-					<view class="right">
-						<view class="right_top">
-							<text>瀹℃壒浜�</text>
-							<text>2023-05-01 08:00</text>
-						</view>
-						<view class="right_bottom">
-							<text>椹��(<text class="blue">寰呭鏍�</text>)</text>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
+  <view class="box">
+    <view class="box_list">
+      <view class="box_list_name">涓佹仼鍑殑銆屾嫓璁跨敵璇枫��</view>
+      <view class="box_list_job">鍌ㄨ繍绉�</view>
+      <view class="box_list_status">寰呭鐞�</view>
+      <view class="box_list_status1">
+        <!-- <image src="@/static/ic_passed@2x.png" mode="widthFix"></image> -->
+        <!-- <image src="@/static/ic_refused@2x.png" mode="widthFix"></image> -->
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item">
+        <text>鎷滆浜�</text>
+        <text>寤栨垚鐟�</text>
+      </view>
+      <view class="box_list_item">
+        <text>棰勮鍏�/绂诲洯鏃堕棿</text>
+        <text>05/01 8:00 - 05/01 18:00</text>
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item1">
+        <view class="box_list_item1_head"> 璁垮淇℃伅 </view>
+        <view class="box_list_item_img">
+          <image src="@/static/logo@2x.png" mode="widthFix"></image>
+        </view>
+        <view class="box_list_item_info">
+          <text>瀛欏織 18177665678</text>
+          <text>韬唤璇� 3309****2910</text>
+          <text>鐨朅88789</text>
+        </view>
+      </view>
+      <view class="box_list_item1">
+        <view class="box_list_item1_head"> 闅忚浜哄憳 </view>
+        <view class="box_list_item_img">
+          <image src="@/static/logo@2x.png" mode="widthFix"></image>
+        </view>
+        <view class="box_list_item_info">
+          <text>鏉庡皬鍙� 18177665678</text>
+          <text>韬唤璇� 3309****2910</text>
+          <text>鐨朅88789</text>
+        </view>
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item">
+        <text>鍏徃鍚嶇О</text>
+        <text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
+      </view>
+      <view class="box_list_item">
+        <text>鏉ヨ浜嬬敱</text>
+        <text>鍟嗛噺鍚堝悓浜嬪疁</text>
+      </view>
+      <view class="box_list_item">
+        <text>鍋ュ悍璇�</text>
+        <view class="box_list_item_img">
+          <image src="@/static/logo@2x.png" mode="widthFix"></image>
+        </view>
+      </view>
+    </view>
+    <view class="box_list">
+      <view class="box_list_title">娴佺▼</view>
+      <view class="box_list_list">
+        <view class="box_list_list_item">
+          <view class="left">
+            <view class="left_d"></view>
+            <view class="left_x"></view>
+          </view>
+          <view class="right">
+            <view class="right_top">
+              <text>鏍撳瓙鍝ユ彁浜ょ殑鐢宠</text>
+              <text>2023-05-01 08:00</text>
+            </view>
+            <view class="right_bottom">
+              <text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
+            </view>
+          </view>
+        </view>
+        <view class="box_list_list_item">
+          <view class="left">
+            <view class="left_d"></view>
+            <view class="left_x"></view>
+          </view>
+          <view class="right">
+            <view class="right_top">
+              <text>鎷滆鍛樺伐</text>
+              <text>2023-05-01 08:00</text>
+            </view>
+            <view class="right_bottom">
+              <text>鐜嬩簹钃�(<text class="blue">瀹℃牳閫氳繃</text>)</text>
+            </view>
+          </view>
+        </view>
+        <view class="box_list_list_item">
+          <view class="left">
+            <view class="left_d"></view>
+            <view class="left_x"></view>
+          </view>
+          <view class="right">
+            <view class="right_top">
+              <text>瀹℃壒浜�</text>
+              <text>2023-05-01 08:00</text>
+            </view>
+            <view class="right_bottom">
+              <text>椹��(<text class="blue">寰呭鏍�</text>)</text>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				
-			};
-		}
-	}
+export default {
+  data() {
+    return {
+
+    }
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7;
-	}
+page {
+  background-color: #f7f7f7;
+}
 </style>
 <style lang="scss" scoped>
-	.box {
-		width: 100%;
-		.p {
-			padding: 0 30rpx !important;
-		}
-		.box_list {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			display: flex;
-			flex-direction: column;
-			margin-bottom: 20rpx;
-			position: relative;
-			.box_list_title {
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-				margin-bottom: 24rpx;
-			}
-			.box_list_list {
-				width: 100%;
-				display: flex;
-				flex-direction: column;
-				.box_list_list_item {
-					width: 100%;
-					display: flex;
-					align-items: flex-start;
-					margin-bottom: 36rpx;
-					&:last-child {
-						margin: 0;
-					}
-					.left {
-						flex-shrink: 0;
-						height: 100%;
-						position: relative;
-						.left_d {
-							width: 16rpx;
-							height: 16rpx;
-							background: #81AFF7;
-							border-radius: 50%;
-							position: relative;
-							z-index: 2;
-						}
-						.left_x {
-							position: absolute;
-							top: 0;
-							left: 8rpx;
-							width: 1rpx;
-							height: 130rpx;
-							background-color: #EEEEEE;
-						}
-					}
-					.right {
-						flex: 1;
-						display: flex;
-						flex-direction: column;
-						margin-left: 30rpx;
-						.right_top {
-							width: 100%;
-							display: flex;
-							align-items: center;
-							justify-content: space-between;
-							text {
-								&:first-child {
-									font-size: 30rpx;
-									font-family: PingFangSC, PingFang SC;
-									font-weight: 400;
-									color: #333333;
-								}
-								&:last-child {
-									font-size: 24rpx;
-									font-family: PingFangSC, PingFang SC;
-									font-weight: 400;
-									color: #999999;
-								}
-							}
-						}
-						.right_bottom {
-							width: 100%;
-							margin-top: 10rpx;
-							text {
-								font-size: 26rpx;
-								font-weight: 400;
-								color: #777777;
-							}
-							.blue {
-								color: #025EEF !important;
-							}
-						}
-					}
-				}
-			}
-			.box_list_item1 {
-				width: 100%;
-				padding: 30rpx 0;
-				box-sizing: border-box;
-				display: flex;
-				align-items: flex-start;
-				flex-wrap: wrap;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
-				.box_list_item1_head {
-					width: 100%;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #777777;
-					margin-bottom: 24rpx;
-				}
-				.box_list_item_img {
-					width: 100rpx;
-					height: 100rpx;
-					flex-shrink: 0;
-					border-radius: 8rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					overflow: hidden;
-					border: 1rpx solid #EEEEEE;
-					margin-right: 20rpx;
-					image {
-						width: 100%;
-						height: 100%;
-					} 
-				}
-				.box_list_item_info {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					text {
-						&:nth-child(1) {
-							font-size: 28rpx;
-							font-weight: 400;
-							color: #222222;
-						}
-						&:nth-child(2) {
-							font-size: 28rpx;
-							font-weight: 400;
-							color: #222222;
-							margin-top: 20rpx;
-						}
-						&:nth-child(3) {
-							font-size: 28rpx;
-							font-weight: 400;
-							color: #222222;
-							margin-top: 20rpx;
-						}
-					}
-				}
-			}
-			.box_list_item {
-				width: 100%;
-				padding: 30rpx 0;
-				box-sizing: border-box;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
-				.box_list_item_img {
-					width: 100rpx;
-					height: 100rpx;
-					border-radius: 8rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					overflow: hidden;
-					border: 1rpx solid #EEEEEE;
-					margin-top: 24rpx;
-					image {
-						width: 100%;
-						height: 100%;
-					} 
-				}
-				text {
-					&:nth-child(1) {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #777777;
-					}
-					&:nth-child(2) {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-						margin-top: 20rpx;
-					}
-					&:nth-child(3) {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-						margin-top: 20rpx;
-					}
-					&:nth-child(4) {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-						margin-top: 20rpx;
-					}
-				}
-			}
-			.box_list_name {
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.box_list_job {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-				margin-top: 20rpx;
-			}
-			.box_list_status1 {
-				position: absolute;
-				right: 30rpx;
-				top: 50%;
-				transform: translate(0, -50%);
-				width: 120rpx;
-				height: 120rpx;
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.box_list_status {
-				position: absolute;
-				right: 0;
-				top: 0;
-				width: 140rpx;
-				height: 60rpx;
-				line-height: 60rpx;
-				text-align: center;
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #025EEF;
-				background: rgba(66,117,252,0.12);
-				border-radius: 0rpx 0rpx 0rpx 30rpx;
-			}
-		}
-	}
+.box {
+  width: 100%;
+  .p {
+    padding: 0 30rpx !important;
+  }
+  .box_list {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    display: flex;
+    flex-direction: column;
+    margin-bottom: 20rpx;
+    position: relative;
+    .box_list_title {
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
+    .box_list_list {
+      width: 100%;
+      display: flex;
+      flex-direction: column;
+      .box_list_list_item {
+        width: 100%;
+        display: flex;
+        align-items: flex-start;
+        margin-bottom: 36rpx;
+        &:last-child {
+          margin: 0;
+        }
+        .left {
+          flex-shrink: 0;
+          height: 100%;
+          position: relative;
+          .left_d {
+            width: 16rpx;
+            height: 16rpx;
+            background: #81aff7;
+            border-radius: 50%;
+            position: relative;
+            z-index: 2;
+          }
+          .left_x {
+            position: absolute;
+            top: 0;
+            left: 8rpx;
+            width: 1rpx;
+            height: 130rpx;
+            background-color: #eeeeee;
+          }
+        }
+        .right {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          margin-left: 30rpx;
+          .right_top {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            text {
+              &:first-child {
+                font-size: 30rpx;
+                font-family: PingFangSC, PingFang SC;
+                font-weight: 400;
+                color: #333333;
+              }
+              &:last-child {
+                font-size: 24rpx;
+                font-family: PingFangSC, PingFang SC;
+                font-weight: 400;
+                color: #999999;
+              }
+            }
+          }
+          .right_bottom {
+            width: 100%;
+            margin-top: 10rpx;
+            text {
+              font-size: 26rpx;
+              font-weight: 400;
+              color: #777777;
+            }
+            .blue {
+              color: #025eef !important;
+            }
+          }
+        }
+      }
+    }
+    .box_list_item1 {
+      width: 100%;
+      padding: 30rpx 0;
+      box-sizing: border-box;
+      display: flex;
+      align-items: flex-start;
+      flex-wrap: wrap;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
+      .box_list_item1_head {
+        width: 100%;
+        font-size: 26rpx;
+        font-weight: 400;
+        color: #777777;
+        margin-bottom: 24rpx;
+      }
+      .box_list_item_img {
+        width: 100rpx;
+        height: 100rpx;
+        flex-shrink: 0;
+        border-radius: 8rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        overflow: hidden;
+        border: 1rpx solid #eeeeee;
+        margin-right: 20rpx;
+        image {
+          width: 100%;
+          height: 100%;
+        }
+      }
+      .box_list_item_info {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        text {
+          &:nth-child(1) {
+            font-size: 28rpx;
+            font-weight: 400;
+            color: #222222;
+          }
+          &:nth-child(2) {
+            font-size: 28rpx;
+            font-weight: 400;
+            color: #222222;
+            margin-top: 20rpx;
+          }
+          &:nth-child(3) {
+            font-size: 28rpx;
+            font-weight: 400;
+            color: #222222;
+            margin-top: 20rpx;
+          }
+        }
+      }
+    }
+    .box_list_item {
+      width: 100%;
+      padding: 30rpx 0;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
+      .box_list_item_img {
+        width: 100rpx;
+        height: 100rpx;
+        border-radius: 8rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        overflow: hidden;
+        border: 1rpx solid #eeeeee;
+        margin-top: 24rpx;
+        image {
+          width: 100%;
+          height: 100%;
+        }
+      }
+      text {
+        &:nth-child(1) {
+          font-size: 26rpx;
+          font-weight: 400;
+          color: #777777;
+        }
+        &:nth-child(2) {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+          margin-top: 20rpx;
+        }
+        &:nth-child(3) {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+          margin-top: 20rpx;
+        }
+        &:nth-child(4) {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+          margin-top: 20rpx;
+        }
+      }
+    }
+    .box_list_name {
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .box_list_job {
+      font-size: 26rpx;
+      font-weight: 400;
+      color: #666666;
+      margin-top: 20rpx;
+    }
+    .box_list_status1 {
+      position: absolute;
+      right: 30rpx;
+      top: 50%;
+      transform: translate(0, -50%);
+      width: 120rpx;
+      height: 120rpx;
+      image {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .box_list_status {
+      position: absolute;
+      right: 0;
+      top: 0;
+      width: 140rpx;
+      height: 60rpx;
+      line-height: 60rpx;
+      text-align: center;
+      font-size: 26rpx;
+      font-weight: 400;
+      color: #025eef;
+      background: rgba(66, 117, 252, 0.12);
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+    }
+  }
+}
 </style>
diff --git a/h5/pages.json b/h5/pages.json
index 0afcd34..72bb9f4 100644
--- a/h5/pages.json
+++ b/h5/pages.json
@@ -111,7 +111,6 @@
 				"navigationStyle": "custom"
 			}
 		},
-		// 浼氳瀹� 
 		{
 			"path": "pages/meeting/index/index",
 			"style": {
@@ -176,7 +175,6 @@
 				"navigationBarTitleText": "瀹夋嘲鐗╂祦",
 				"enablePullDownRefresh": false
 			}
-
 		},
 		{
 			"path": "pages/staff/visitorReport",
@@ -184,235 +182,230 @@
 				"navigationBarTitleText": "璁垮鎶ュ",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/snapshot",
 			"style": {
 				"navigationBarTitleText": "闅愭偅闅忔墜鎷�",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/memberSel",
 			"style": {
 				"navigationBarTitleText": "閫夋嫨浜哄憳",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/meetingSub",
 			"style": {
 				"navigationBarTitleText": "棰勭害浼氳瀹�",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/meetingSubOrder",
 			"style": {
 				"navigationBarTitleText": "纭棰勭害",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/vehicle/index",
 			"style": {
 				"navigationBarTitleText": "鐢ㄨ溅鐢宠",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/vehicle/shinei",
 			"style": {
 				"navigationBarTitleText": "鐢ㄨ溅鐢宠",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/vehicle/apply",
 			"style": {
 				"navigationBarTitleText": "鐢ㄨ溅鐢宠",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/vehicle/shiwai",
 			"style": {
 				"navigationBarTitleText": "鐢ㄨ溅鐢宠",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/task/index",
 			"style": {
 				"navigationBarTitleText": "浠诲姟涓績",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/task/visitorApprove",
 			"style": {
 				"navigationBarTitleText": "璁垮瀹℃壒",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
+			"path": "pages/staff/task/visitorReport",
+			"style": {
+				"navigationBarTitleText": "璁垮鎶ュ",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staff/task/vDangetAppr",
+			"style": {
+				"navigationBarTitleText": "闅愭偅澶勭悊",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
 			"path": "pages/staff/vehicle/sendACar",
 			"style": {
 				"navigationBarTitleText": "娲捐溅璁板綍",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/meetingCalendar",
 			"style": {
 				"navigationBarTitleText": "浼氳鏃ュ巻",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/meetingDetail",
 			"style": {
 				"navigationBarTitleText": "浼氳璇︽儏",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/staff/meetingManager",
 			"style": {
 				"navigationBarTitleText": "浼氳瀹ょ鐞�",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/driver/index",
 			"style": {
 				"navigationBarTitleText": "鐗╂祦杞︿腑蹇�",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/driver/reserved",
 			"style": {
 				"navigationBarTitleText": "鍏ュ洯棰勭害",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/driver/reservedGuide",
 			"style": {
 				"navigationBarTitleText": "棰勭害鎸囧崡",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/driver/reservedRecord",
 			"style": {
 				"navigationBarTitleText": "棰勭害璁板綍",
 				"enablePullDownRefresh": false
 			}
-
-		}, {
+		},
+		{
 			"path": "pages/driver/queueUp",
 			"style": {
 				"navigationBarTitleText": "鎺掗槦鎯呭喌",
 				"enablePullDownRefresh": false
 			}
-
+		},
+		{
+			"path": "pages/driver/queueUpRecord",
+			"style": {
+				"navigationBarTitleText": "浣滀笟涓溅杈�",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/driver/taskDetail",
+			"style": {
+				"navigationBarTitleText": "浠诲姟璇︽儏",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/driver/reservedDetail",
+			"style": {
+				"navigationBarTitleText": "璁垮瀹℃壒",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/driver/taskConfirm",
+			"style": {
+				"navigationBarTitleText": "纭浠诲姟",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/auth/auth",
+			"style": {
+				"navigationBarTitleText": "寰俊鎺堟潈",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staffLogin/forgetPsd",
+			"style": {
+				"navigationBarTitleText": "鎵惧洖瀵嗙爜",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staff/snapshotResult",
+			"style": {
+				"navigationBarTitleText": "闅愭偅闅忔墜鎷�",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staff/vehicle/applePeo",
+			"style": {
+				"navigationBarTitleText": "閫夋嫨浜哄憳",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staff/vehicle/sendACarDetail",
+			"style": {
+				"navigationBarTitleText": "鐢ㄨ溅瀹℃壒",
+				"enablePullDownRefresh": false
+			}
+		},
+		{
+			"path": "pages/staff/meetingSel",
+			"style": {
+				"navigationBarTitleText": "閫夋嫨浜哄憳",
+				"enablePullDownRefresh": false
+			}
 		}
-	    ,{
-            "path" : "pages/driver/queueUpRecord",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "浣滀笟涓溅杈�",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/driver/taskDetail",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "浠诲姟璇︽儏",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/driver/reservedDetail",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "璁垮瀹℃壒",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/driver/taskConfirm",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "纭浠诲姟",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/auth/auth",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "寰俊鎺堟潈",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/staffLogin/forgetPsd",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "鎵惧洖瀵嗙爜",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/staff/snapshotResult",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "闅愭偅闅忔墜鎷�",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/staff/vehicle/applePeo",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "閫夋嫨浜哄憳",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/staff/vehicle/sendACarDetail",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "鐢ㄨ溅瀹℃壒",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-        ,{
-            "path" : "pages/staff/meetingSel",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "閫夋嫨浜哄憳",
-                "enablePullDownRefresh": false
-            }
-            
-        }
-    ],
-	"subPackages": [{
+	],
+	"subPackages": [
+		{
 			"root": "n_pages",
-			"pages": [{
+			"pages": [
+				{
 					"path": "login/login",
 					"style": {
 						"navigationBarTitleText": "鐧诲綍",
@@ -457,7 +450,8 @@
 		{
 			"root": "packagesMine",
 			"name": "mine",
-			"pages": [{
+			"pages": [
+				{
 					"path": "notice/notice",
 					"style": {
 						"navigationBarTitleText": "閫氱煡",
@@ -509,4 +503,4 @@
 		"backgroundColor": "#ffffff"
 	},
 	"uniIdRouter": {}
-}
+}
\ No newline at end of file
diff --git a/h5/pages/applicationRecord/applicationRecord.vue b/h5/pages/applicationRecord/applicationRecord.vue
index 8855dd0..5317783 100644
--- a/h5/pages/applicationRecord/applicationRecord.vue
+++ b/h5/pages/applicationRecord/applicationRecord.vue
@@ -36,7 +36,7 @@
         :key="index"
       >
         <view class="box_list_item_head">
-          <text>{{ item.name }}鐨勫姵鍔″叆鍘傜敵璇�</text>
+          <text>{{ item.name }}鐨勫姵鍔″叆鍥敵璇�</text>
           <text class="loading">{{ statusMap[item.status] }}</text>
         </view>
         <view class="box_list_item_nr">
@@ -53,7 +53,7 @@
             <text>{{ item.starttime }}</text>
           </view>
           <view class="box_list_item_nr_item">
-            <text>绂诲巶鏃堕棿锛�</text>
+            <text>绂诲洯鏃堕棿锛�</text>
             <text>{{ item.endtime }}</text>
           </view>
           <view class="box_list_item_nr_item">
@@ -122,9 +122,9 @@
         },
       }).then(res => {
         if (res.data.records.length > 0) {
-          if(pagination.page === 1){
+          if (pagination.page === 1) {
             this.list = res.data.records
-          }else{
+          } else {
             this.list = [...list, ...res.data.records]
           }
           this.total = res.data.total
diff --git a/h5/pages/appointmentDetails/appointmentDetails.vue b/h5/pages/appointmentDetails/appointmentDetails.vue
index 997d0f0..c757a11 100644
--- a/h5/pages/appointmentDetails/appointmentDetails.vue
+++ b/h5/pages/appointmentDetails/appointmentDetails.vue
@@ -3,7 +3,7 @@
     <view class="head_wrap head_success" v-if="info.status == 2">
       <view class="h1">璁垮棰勭害瀹℃牳閫氳繃</view>
       <view class="h2"
-        >鎮ㄧ殑鏉ヨ鐢宠宸插鏍搁�氳繃锛岃鍦ㄨ瀹㈡満绛惧埌鍏ュ巶銆傚閬囩壒娈婃儏鍐碉紝鍙仈绯昏璁夸汉鎴栧畨淇濅汉鍛�</view
+        >鎮ㄧ殑鏉ヨ鐢宠宸插鏍搁�氳繃锛岃鍦ㄨ瀹㈡満绛惧埌鍏ュ洯銆傚閬囩壒娈婃儏鍐碉紝鍙仈绯昏璁夸汉鎴栧畨淇濅汉鍛�</view
       >
     </view>
     <view class="qr_wrap" v-if="info.status == 2">
@@ -48,11 +48,13 @@
       </view>
       <view class="box_list_item">
         <view class="box_list_item_label">鏂藉伐浜哄憳锛�</view>
-        <view class="box_list_item_val">{{ info.type == 0 ? '鍚�' : '鏄�'}}</view>
+        <view class="box_list_item_val">{{
+          info.type == 0 ? "鍚�" : "鏄�"
+        }}</view>
       </view>
-			<view class="box_list_item" v-if="info.type == '1'">
+      <view class="box_list_item" v-if="info.type == '1'">
         <view class="box_list_item_label">鏂藉伐鍐呭锛�</view>
-        <view class="box_list_item_val">{{ info.constructionReason}}</view>
+        <view class="box_list_item_val">{{ info.constructionReason }}</view>
       </view>
       <view class="box_list_item">
         <view class="box_list_item_label">闅忚杞﹁締锛�</view>
@@ -145,7 +147,7 @@
     .box_head_qrcode {
       width: 320rpx;
       height: 320rpx;
-			margin: 20rpx auto;
+      margin: 20rpx auto;
     }
     .text {
       font-size: 30rpx;
diff --git a/h5/pages/driver/reservedDetail.vue b/h5/pages/driver/reservedDetail.vue
index 85c3da7..cc7ab63 100644
--- a/h5/pages/driver/reservedDetail.vue
+++ b/h5/pages/driver/reservedDetail.vue
@@ -1,372 +1,392 @@
 <template>
-	<view class="main_app">
-		<view class="status_wrap">
-			<view class="name">涓佹仼鍑殑璁垮鐢宠</view>
-			<view class="desc">绛夊緟鎴戝鐞�</view>
-			<view class="status">瀹℃壒涓�</view>
-		</view>
-		<!--  -->
-		<view class="emyty"></view>
-		<view class="module_list">
-			<view class="item">
-				<view class="label">鎷滆浜�</view>
-				<view class="value">寤栨垚鐟�</view>
-			</view>
-			<view class="item">
-				<view class="label">棰勮鍏�/绂诲巶鏃堕棿</view>
-				<view class="value">05/01 8:00 - 05/01 18:00</view>
-			</view>
-			<view class="emyty"></view>
-			<view class="item">
-				<view class="label">璁垮淇℃伅</view>
-				<view class="value">
-					<image class="avatar" src="@/static/logo@2x.png" mode="widthFix"></image>
-					<view class="info">
-						<text class="name">瀛欏織 18177665678</text>
-						<text>韬唤璇佸彿锛�3309****2910</text>
-						<text>鍏ュ洯杞﹁締锛氱殩A88789</text>
-					</view>
-				</view>
-			</view>
-			<view class="item">
-				<view class="label">鍏徃鍚嶇О</view>
-				<view class="value">涓浗绉诲姩</view>
-			</view>
-			<view class="item">
-				<view class="label">鏂藉伐浜哄憳</view>
-				<view class="value">鍚�</view>
-			</view>
-			<view class="item">
-				<view class="label">鏉ヨ浜嬬敱</view>
-				<view class="value">涓氬姟娲借皥</view>
-			</view>
-		</view>
-		<!-- 娴佺▼ -->
-		<view class="flow_wrap">
-			<view class="flow_title">娴佺▼</view>
-			<view class="list">
-				<view class="item">
-					<view class="avatar">
-						<image class="img" src="@/static/logo@2x.png" mode="widthFix" />
-						<image class="status" src="@/static/staff/liucheng_success@2x.png" mode="widthFix" />
-						<view class="separate"></view>
-					</view>
-					<view class="content">
-						<view class="head">
-							<view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-							<view class="time">time</view>
-						</view>
-						<view class="name_wrap">
-							<text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-						</view>
-						<view class="remark">鍚屾剰鏀捐</view>
-					</view>
-				</view>
-				<view class="item">
-					<view class="avatar">
-						<image class="img" src="@/static/logo@2x.png" mode="widthFix" />
-						<image class="status" src="@/static/staff/liucheng_success@2x.png" mode="widthFix" />
-					</view>
-					<view class="content">
-						<view class="head">
-							<view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-							<view class="time">time</view>
-						</view>
-						<view class="name_wrap">
-							<text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-						</view>
-						<view class="carbon">
-							<view class="carbon_item" v-for="i in 12">
-								<image src="@/static/logo@2x.png" mode="widthFix"></image>
-								<view class="text">name</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="emyty"></view>
-		<view class="main_footer">
-			<view class="btn" @click="handleSub('0')">鎷掔粷</view>
-			<view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
-		</view>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name">涓佹仼鍑殑璁垮鐢宠</view>
+      <view class="desc">绛夊緟鎴戝鐞�</view>
+      <view class="status">瀹℃壒涓�</view>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">鎷滆浜�</view>
+        <view class="value">寤栨垚鐟�</view>
+      </view>
+      <view class="item">
+        <view class="label">棰勮鍏�/绂诲洯鏃堕棿</view>
+        <view class="value">05/01 8:00 - 05/01 18:00</view>
+      </view>
+      <view class="emyty"></view>
+      <view class="item">
+        <view class="label">璁垮淇℃伅</view>
+        <view class="value">
+          <image
+            class="avatar"
+            src="@/static/logo@2x.png"
+            mode="widthFix"
+          ></image>
+          <view class="info">
+            <text class="name">瀛欏織 18177665678</text>
+            <text>韬唤璇佸彿锛�3309****2910</text>
+            <text>鍏ュ洯杞﹁締锛氱殩A88789</text>
+          </view>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鍏徃鍚嶇О</view>
+        <view class="value">涓浗绉诲姩</view>
+      </view>
+      <view class="item">
+        <view class="label">鏂藉伐浜哄憳</view>
+        <view class="value">鍚�</view>
+      </view>
+      <view class="item">
+        <view class="label">鏉ヨ浜嬬敱</view>
+        <view class="value">涓氬姟娲借皥</view>
+      </view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">娴佺▼</view>
+      <view class="list">
+        <view class="item">
+          <view class="avatar">
+            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
+            <image
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+            <view class="separate"></view>
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
+              <view class="time">time</view>
+            </view>
+            <view class="name_wrap">
+              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
+            </view>
+            <view class="remark">鍚屾剰鏀捐</view>
+          </view>
+        </view>
+        <view class="item">
+          <view class="avatar">
+            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
+            <image
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
+              <view class="time">time</view>
+            </view>
+            <view class="name_wrap">
+              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
+            </view>
+            <view class="carbon">
+              <view class="carbon_item" v-for="i in 12">
+                <image src="@/static/logo@2x.png" mode="widthFix"></image>
+                <view class="text">name</view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view class="main_footer">
+      <view class="btn" @click="handleSub('0')">鎷掔粷</view>
+      <view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
+    </view>
 
-		<!--  -->
-		<u-popup :show="showApprModal" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="showApprModal = false">
-			<view class="appr_modal">
-				<view class="title">鍚屾剰</view>
-				<textarea placeholder="鍚屾剰璇存槑锛岄潪蹇呭~" placeholder-class="placeholder9" />
-				<view class="main_footer">
-					<view class="btn" @click="showApprModal = false">鍙栨秷</view>
-					<view class="btn agree">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-	</view>
+    <!--  -->
+    <u-popup
+      :show="showApprModal"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="showApprModal = false"
+    >
+      <view class="appr_modal">
+        <view class="title">鍚屾剰</view>
+        <textarea
+          placeholder="鍚屾剰璇存槑锛岄潪蹇呭~"
+          placeholder-class="placeholder9"
+        />
+        <view class="main_footer">
+          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
+          <view class="btn agree">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
 </template>
 
 <script>
 export default {
-	data() {
-		return {
-			showApprModal: false,
-			param: {}
-		}
-	},
-	methods: {
-		handleSub(flag) {
-			// this.param.flag = 
-			if (flag === '1') {
+  data() {
+    return {
+      showApprModal: false,
+      param: {}
+    }
+  },
+  methods: {
+    handleSub(flag) {
+      // this.param.flag = 
+      if (flag === '1') {
 
-			} else {
+      } else {
 
-			}
-			this.showApprModal = true
-		}
-	},
+      }
+      this.showApprModal = true
+    }
+  },
 }
 </script>
 <style>
 page {
-	background-color: #F7F7F7;
+  background-color: #f7f7f7;
 }
 </style>
 <style lang="scss">
 .main_app {
-	background-color: #fff;
-	padding-bottom: 0;
+  background-color: #fff;
+  padding-bottom: 0;
 
-	.flow_wrap {
-		padding: 30rpx 0;
+  .flow_wrap {
+    padding: 30rpx 0;
 
-		.flow_title {
-			font-weight: 500;
-			font-size: 32rpx;
-			color: #222222;
-			margin-bottom: 24rpx;
-		}
+    .flow_title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
 
-		.list {
-			.item {
-				display: flex;
-				margin-bottom: 48rpx;
+    .list {
+      .item {
+        display: flex;
+        margin-bottom: 48rpx;
 
-				.avatar {
-					width: 80rpx;
-					height: 80rpx;
-					position: relative;
-					margin-right: 20rpx;
+        .avatar {
+          width: 80rpx;
+          height: 80rpx;
+          position: relative;
+          margin-right: 20rpx;
 
-					.img {
-						width: 80rpx;
-						height: 80rpx;
-						border-radius: 50%;
-					}
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+          }
 
-					.status {
-						width: 28rpx;
-						height: 28rpx;
-						border-radius: 50%;
-						position: absolute;
-						right: 0;
-						bottom: 0;
-					}
+          .status {
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
 
-					.separate {
-						position: absolute;
-						width: 4rpx;
-						height: 100%;
-						background-color: #EEEEEE;
-						left: 50%;
-						transform: translate(-50%, 0);
-						bottom: -80rpx;
-					}
-				}
+          .separate {
+            position: absolute;
+            width: 4rpx;
+            height: 100%;
+            background-color: #eeeeee;
+            left: 50%;
+            transform: translate(-50%, 0);
+            bottom: -80rpx;
+          }
+        }
 
-				.content {
-					flex: 1;
+        .content {
+          flex: 1;
 
-					.head {
-						display: flex;
-						justify-content: space-between;
-						margin-bottom: 4rpx;
+          .head {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 4rpx;
 
-						.event {
-							font-size: 30rpx;
-						}
+            .event {
+              font-size: 30rpx;
+            }
 
-						.time {
-							font-size: 26rpx;
-							color: #999999;
-						}
-					}
+            .time {
+              font-size: 26rpx;
+              color: #999999;
+            }
+          }
 
-					.name_wrap {
-						font-size: 26rpx;
-						color: #777777;
+          .name_wrap {
+            font-size: 26rpx;
+            color: #777777;
 
-						.status {
-							color: $uni-color-primary;
-						}
-					}
+            .status {
+              color: $uni-color-primary;
+            }
+          }
 
-					.remark {
-						margin-top: 12rpx;
-						background-color: #f7f7f7;
-						padding: 14rpx 20rpx;
-						border-radius: 8rpx;
-						font-size: 26rpx;
-						color: #666666;
-						line-height: 36rpx;
-					}
-				}
-				.carbon{
-					display: flex;
-					width: 590rpx;
-					overflow-x: auto;
-					margin-top: 12rpx;
-					.carbon_item{
-						text-align: center;
-						flex-shrink: 0;
-						width: 100rpx;
-						image{
-							width: 60rpx;
-							height: 60rpx;
-							margin: 0 auto;
-						}
-						view{
-							font-size: 26rpx;
-							color: #777777;
-							
-						}
-					}
-				}
-			}
-		}
-	}
+          .remark {
+            margin-top: 12rpx;
+            background-color: #f7f7f7;
+            padding: 14rpx 20rpx;
+            border-radius: 8rpx;
+            font-size: 26rpx;
+            color: #666666;
+            line-height: 36rpx;
+          }
+        }
+        .carbon {
+          display: flex;
+          width: 590rpx;
+          overflow-x: auto;
+          margin-top: 12rpx;
+          .carbon_item {
+            text-align: center;
+            flex-shrink: 0;
+            width: 100rpx;
+            image {
+              width: 60rpx;
+              height: 60rpx;
+              margin: 0 auto;
+            }
+            view {
+              font-size: 26rpx;
+              color: #777777;
+            }
+          }
+        }
+      }
+    }
+  }
 
-	.module_list {
-		.item {
-			padding: 30rpx 0;
-			border-bottom: 1rpx solid #E5E5E5;
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
 
-			.label {
-				font-size: 26rpx;
-				color: #666666;
-				margin-bottom: 20rpx;
-			}
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
 
-			.value {
-				font-size: 30rpx;
-				display: flex;
-				align-items: center;
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
 
-				.avatar {
-					margin-right: 20rpx;
-					width: 120rpx;
-					height: 120rpx;
-					border-radius: 8rpx;
-					border: 2rpx solid #E5E5E5;
-				}
+        .avatar {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
 
-				.info {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					font-size: 26rpx;
-					color: #666666;
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
 
-					.name {
-						font-size: 30rpx;
-						color: #333333;
-					}
-				}
-			}
-		}
-	}
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
 
-	.status_wrap {
-		position: relative;
-		padding: 30rpx 0;
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
 
-		.name {
-			font-weight: 500;
-			font-size: 32rpx;
-			margin-bottom: 20rpx;
-			color: #222222;
-		}
+    .name {
+      font-weight: 500;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
 
-		.desc {
-			font-size: 26rpx;
-			color: #ED4545;
-		}
+    .desc {
+      font-size: 26rpx;
+      color: #ed4545;
+    }
 
-		.status {
-			position: absolute;
-			right: -30rpx;
-			top: 0;
-			height: 60rpx;
-			line-height: 60rpx;
-			padding: 0 32rpx;
-			border-radius: 0rpx 0rpx 0rpx 30rpx;
-			background-color: #e9edff;
-			color: $uni-color-primary;
-		}
-	}
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+  }
 
-	.main_footer {
-		padding-bottom: 64rpx;
-		display: flex;
-		justify-content: space-between;
+  .main_footer {
+    padding-bottom: 64rpx;
+    display: flex;
+    justify-content: space-between;
 
-		.btn {
-			width: 336rpx;
-			height: 88rpx;
-			line-height: 88rpx;
-			background: #FFFFFF;
-			border-radius: 44rpx;
-			border: 1rpx solid #999999;
-			font-size: 32rpx;
-			text-align: center;
-			margin: 16rpx 0;
-		}
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 0;
+    }
 
-		.agree {
-			background: $uni-color-primary;
-			color: #fff;
-			border: 1rpx solid $uni-color-primary;
-		}
-	}
+    .agree {
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
 
-	.appr_modal {
-		padding: 36rpx 30rpx 0;
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
 
-		.title {
-			font-weight: 500;
-			font-size: 32rpx;
-			color: #222222;
-			margin-bottom: 40rpx;
-			text-align: center;
-		}
+    .title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
 
-		textarea {
-			box-sizing: border-box;
-			width: 690rpx;
-			background-color: #f7f7f7;
-			font-size: 28rpx;
-			color: #333333;
-			padding: 24rpx;
-			border-radius: 8rpx;
-			margin-bottom: 30rpx;
-		}
-	}
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+  }
 
-	.emyty {
-		width: 750rpx;
-		height: 20rpx;
-		background-color: #f7f7f7;
-		margin: 0 -30rpx;
-	}
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
 }
 </style>
diff --git a/h5/pages/driver/reservedRecord.vue b/h5/pages/driver/reservedRecord.vue
index 5fcf708..befa0a5 100644
--- a/h5/pages/driver/reservedRecord.vue
+++ b/h5/pages/driver/reservedRecord.vue
@@ -1,160 +1,179 @@
 <template>
-	<view class="main_app">
-		<!--  -->
-		<view class="box_list">
-			<view class="box_list_item" v-for="(item, index) in 3" :key="index" @click="handleDetail()">
-				<view class="box_list_item_head">
-					<text>涓佹仼鍑殑鍔冲姟鍏ュ巶鐢宠</text>
-					<text class="loading">寰呭鏍�</text>
-				</view>
-				<view class="box_list_item_nr">
-					<view class="box_list_item_nr_item">
-						<text>琚闂汉锛�</text>
-						<text>浜轰簨閮�-鐜嬩簹钃�</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>杩涘巶鏃堕棿锛�</text>
-						<text>12-12 09:00</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>绂诲巶鏃堕棿锛�</text>
-						<text>12-12 12:00</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>鏉ヨ浜嬬敱锛�</text>
-						<text>涓氬姟鏉ュ線</text>
-					</view>
-					<view class="box_list_item_nr_item">
-						<text>闅忚杞﹁締锛�</text>
-						<text>鐨朅88888</text>
-					</view>
-				</view>
-			</view>
-		</view>
-		<!-- 閫夋嫨杞﹁締 -->
-		<u-picker keyName="name" closeOnClickOverlay @close="isShowCar = false" :show="isShowCar" :columns="carList" @confirm="seletedCar" @cancel="isShowCar = false"></u-picker>
-		<!-- 鏃ユ湡 -->
-		<u-datetime-picker :show="isShowDate" :minDate="minDate" @confirm="confirmDate" @cancel="isShowDate = false" mode="date"></u-datetime-picker>
-	</view>
+  <view class="main_app">
+    <!--  -->
+    <view class="box_list">
+      <view
+        class="box_list_item"
+        v-for="(item, index) in 3"
+        :key="index"
+        @click="handleDetail()"
+      >
+        <view class="box_list_item_head">
+          <text>涓佹仼鍑殑鍔冲姟鍏ュ洯鐢宠</text>
+          <text class="loading">寰呭鏍�</text>
+        </view>
+        <view class="box_list_item_nr">
+          <view class="box_list_item_nr_item">
+            <text>琚闂汉锛�</text>
+            <text>浜轰簨閮�-鐜嬩簹钃�</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>杩涘巶鏃堕棿锛�</text>
+            <text>12-12 09:00</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>绂诲洯鏃堕棿锛�</text>
+            <text>12-12 12:00</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>鏉ヨ浜嬬敱锛�</text>
+            <text>涓氬姟鏉ュ線</text>
+          </view>
+          <view class="box_list_item_nr_item">
+            <text>闅忚杞﹁締锛�</text>
+            <text>鐨朅88888</text>
+          </view>
+        </view>
+      </view>
+    </view>
+    <!-- 閫夋嫨杞﹁締 -->
+    <u-picker
+      keyName="name"
+      closeOnClickOverlay
+      @close="isShowCar = false"
+      :show="isShowCar"
+      :columns="carList"
+      @confirm="seletedCar"
+      @cancel="isShowCar = false"
+    ></u-picker>
+    <!-- 鏃ユ湡 -->
+    <u-datetime-picker
+      :show="isShowDate"
+      :minDate="minDate"
+      @confirm="confirmDate"
+      @cancel="isShowDate = false"
+      mode="date"
+    ></u-datetime-picker>
+  </view>
 </template>
 
 <script>
 export default {
-	data() {
-		return {
-			isShowCar: false,
-			isShowDate: false,
-			param: {},
-			carList: [[{ name: 'aa', value: '11' }]],
-			timeList: [{ time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }]
-		};
-	},
-	methods: {
-		handleDetail() {
-			uni.navigateTo({
-				url: "/pages/driver/reservedDetail"
-			})
-		},
-		confirmDate(e) {
-			console.log(e.value);
-			this.param.aa = dayjs(e.value).format('YYYY-MM-DD');
-			this.isShowDate = false;
-		},
-		seletedCar(e) {
-			console.log(e.value);
-			this.param.aa = dayjs(e.value).format('YYYY-MM-DD');
-			this.isShowDate = false;
-		}
-	}
+  data() {
+    return {
+      isShowCar: false,
+      isShowDate: false,
+      param: {},
+      carList: [[{ name: 'aa', value: '11' }]],
+      timeList: [{ time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }, { time: '08:30-09:00' }]
+    }
+  },
+  methods: {
+    handleDetail() {
+      uni.navigateTo({
+        url: "/pages/driver/reservedDetail"
+      })
+    },
+    confirmDate(e) {
+      console.log(e.value)
+      this.param.aa = dayjs(e.value).format('YYYY-MM-DD')
+      this.isShowDate = false
+    },
+    seletedCar(e) {
+      console.log(e.value)
+      this.param.aa = dayjs(e.value).format('YYYY-MM-DD')
+      this.isShowDate = false
+    }
+  }
 };
 </script>
 
 <style lang="scss">
-	.main_app{
-		background: #F7F7F7;
-		padding: 0;
-	}
+.main_app {
+  background: #f7f7f7;
+  padding: 0;
+}
 .app_header {
-	display: flex;
-	align-items: center;
-	margin: 0 -15rpx;
-	background-color: #fff;
-	.item {
-		width: 360rpx;
-		height: 72rpx;
-		margin: 15rpx;
-		padding: 0 30rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		align-items: center;
-	}
+  display: flex;
+  align-items: center;
+  margin: 0 -15rpx;
+  background-color: #fff;
+  .item {
+    width: 360rpx;
+    height: 72rpx;
+    margin: 15rpx;
+    padding: 0 30rpx;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    align-items: center;
+  }
 }
 .box_list {
-	width: 100%;
-	padding: 30rpx;
-	box-sizing: border-box;
-	.box_list_item {
-		width: 100%;
-		margin-bottom: 20rpx;
-		&:last-child {
-			margin: 0 !important;
-		}
-		.box_list_item_head {
-			width: 100%;
-			height: 100rpx;
-			padding: 0 30rpx;
-			box-sizing: border-box;
-			background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
-			border-radius: 8rpx 8rpx 0rpx 0rpx;
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			.loading {
-				color: #4c99a8;
-			}
-			.success {
-				color: #03c68f;
-			}
-			.error {
-				color: #e0312a;
-			}
-			text {
-				&:nth-child(1) {
-					font-size: 32rpx;
-					font-weight: 500;
-					color: #222222;
-				}
-				&:nth-child(2) {
-					font-size: 26rpx;
-					font-weight: 400;
-				}
-			}
-		}
-		.box_list_item_nr {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			.box_list_item_nr_item {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				margin-bottom: 20rpx;
-				text {
-					&:nth-child(1) {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #666666;
-					}
-					&:nth-child(2) {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #333333;
-					}
-				}
-			}
-		}
-	}
+  width: 100%;
+  padding: 30rpx;
+  box-sizing: border-box;
+  .box_list_item {
+    width: 100%;
+    margin-bottom: 20rpx;
+    &:last-child {
+      margin: 0 !important;
+    }
+    .box_list_item_head {
+      width: 100%;
+      height: 100rpx;
+      padding: 0 30rpx;
+      box-sizing: border-box;
+      background: linear-gradient(270deg, #fefeff 0%, #e1f7fe 100%);
+      border-radius: 8rpx 8rpx 0rpx 0rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .loading {
+        color: #4c99a8;
+      }
+      .success {
+        color: #03c68f;
+      }
+      .error {
+        color: #e0312a;
+      }
+      text {
+        &:nth-child(1) {
+          font-size: 32rpx;
+          font-weight: 500;
+          color: #222222;
+        }
+        &:nth-child(2) {
+          font-size: 26rpx;
+          font-weight: 400;
+        }
+      }
+    }
+    .box_list_item_nr {
+      padding: 30rpx;
+      width: 100%;
+      box-sizing: border-box;
+      background-color: #ffffff;
+      .box_list_item_nr_item {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        margin-bottom: 20rpx;
+        text {
+          &:nth-child(1) {
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #666666;
+          }
+          &:nth-child(2) {
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
 }
 </style>
diff --git a/h5/pages/laborApplication/laborApplication.vue b/h5/pages/laborApplication/laborApplication.vue
index 0cd0c33..cf1d7ff 100644
--- a/h5/pages/laborApplication/laborApplication.vue
+++ b/h5/pages/laborApplication/laborApplication.vue
@@ -1,818 +1,878 @@
 <template>
-	<view class="visit">
-		<view class="head">鎷滆淇℃伅</view>
-		<view class="list">
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>琚浜烘墜鏈�</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<input type="number" maxlength="11" placeholder="璇疯緭鍏ユ墜鏈哄彿" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>琚浜哄鍚�</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" placeholder="璇疯緭鍏ュ鍚�" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鍔冲姟鐝</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<view class="list_item_content_item active">鐧界彮</view>
-					<view class="list_item_content_item">澶滅彮</view>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>棰勮鍏ュ巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<text>璇烽�夋嫨</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>棰勮绂诲巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<text>璇烽�夋嫨</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item" @click="show = true">
-				<view class="list_item_label">
-					<text>璁块棶闂ㄧ</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<text>璇烽�夋嫨</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鎷滆浜嬬敱</text>
-					<text></text>
-				</view>
-				<view class="list_item_content">
-					<input type="text" placeholder="璇疯緭鍏ユ潵璁夸簨鐢憋紝鎮ㄦ潵鍋氫粈涔堢殑" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-		</view>
-		<view class="cate">
-			<view class="cate_head">杞﹁締淇℃伅</view>
-			<view class="cate_list">
-				<view class="cate_list_item">
-					<text>鐨朅D12178</text>
-					<u-icon name="close" color="#999999" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="cate_add" @click="show2 = true">+娣诲姞杞﹁締</view>
-		</view>
-		<view class="cate">
-			<view class="cate_head">闅忚浜哄憳淇℃伅</view>
-			<view class="cate_list">
-				<view class="cate_list_item">
-					<text>浣曟睙瀹�</text>
-					<u-icon name="close" color="#999999" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="cate_add" @click="show1 = true">+娣诲姞闅忚浜哄憳</view>
-		</view>
-		<view class="zw"></view>
-		<view class="footer">
-			<view class="footer_btn">鎻愪氦</view>
-		</view>
-		<!-- 闂ㄧ -->
-		<u-picker :show="show" :columns="columns" :immediateChange="true" keyName="name" @cancel="show = false"
-			@confirm="confirm"></u-picker>
-		<!-- 闅忚浜哄憳 -->
-		<!-- 閫夋嫨闅忚浜哄憳 -->
-		<u-popup :show="show1" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show1 = false">
-			<view class="popup-content">
-				<view class="respondent-title">
-					閫夋嫨闅忚浜哄憳
-				</view>
-				<view class="search-box">
-					<view class="search-box-top">
-						<view class="search-box-top-ipt">
-							<image src="@/static/ic_search@2x.png" mode="widthFix"></image>
-							<input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
-						</view>
-						<text @click="show1 = false; show3 = true">鏂板</text>
-					</view>
-					<view class="search-box-total">鍏�0鏉℃暟鎹�</view>
-				</view>
-				<scroll-view scroll-y class="list">
-					<view class="item" v-for="(item, index) in 8" :key="index">
-						<view class="item_a">
-							<!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
-							<image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_b">
-							<image src="@/static/ic_mima@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_c">
-							<text>鐢ㄦ埛鍚�</text>
-							<text>宸叉媺榛�</text>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="footer1">
-					<view class="footer_left">
-						<text class="footer_left_a">宸查�夋嫨锛�0浜�</text>
-						<text class="footer_left_b">鏉庝紵锛�</text>
-					</view>
-					<view class="footer_btn">纭 0/0</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 杞﹁締 -->
-		<u-popup :show="show2" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show2 = false">
-			<view class="addcar">
-				<view class="addcar_head">娣诲姞杞﹁締</view>
-				<view class="addcar_ipt">
-					<input type="text" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
-				</view>
-				<view class="addcar_footer">
-					<view class="addcar_footer_item">鍙栨秷</view>
-					<view class="addcar_footer_item t">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 娣诲姞闅忚浜哄憳 -->
-		<u-popup :show="show3" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show3 = false">
-			<view class="adduser">
-				<view class="adduser_head">闅忚浜哄憳</view>
-				<view class="adduser_list">
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>濮撳悕</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" placeholder-style="color: #999999;" placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鎵嬫満鍙�</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="number" maxlength="11" placeholder-style="color: #999999;" placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢绫诲瀷</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<text>韬唤璇�</text>
-							<u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢鍙风爜</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" placeholder-style="color: #999999;" placeholder="璇疯緭鍏ユ偍鐨勮瘉浠跺彿鐮�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍏徃</text>
-							<text></text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" placeholder-style="color: #999999;" placeholder="璇疯緭鍏ユ偍鐨勫叕鍙稿悕绉�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>浜鸿劯鐓х墖</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt1">
-							<u-upload
-								:fileList="fileList"
-								@afterRead="afterRead"
-								@delete="deletePic"
-								name="1"
-								multiple
-								:maxCount="1"
-							></u-upload>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍋ュ悍璇佺収鐗�</text>
-							<text></text>
-						</view>
-						<view class="adduser_list_item_ipt1">
-							<u-upload
-								:fileList="fileList"
-								@afterRead="afterRead"
-								@delete="deletePic"
-								name="1"
-								multiple
-								:maxCount="1"
-							></u-upload>
-						</view>
-					</view>
-				</view>
-				<view class="adduser_footer">
-					<view class="adduser_footer_item">鍙栨秷</view>
-					<view class="adduser_footer_item t">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-	</view>
+  <view class="visit">
+    <view class="head">鎷滆淇℃伅</view>
+    <view class="list">
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>琚浜烘墜鏈�</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="number"
+            maxlength="11"
+            placeholder="璇疯緭鍏ユ墜鏈哄彿"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>琚浜哄鍚�</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            placeholder="璇疯緭鍏ュ鍚�"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鍔冲姟鐝</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <view class="list_item_content_item active">鐧界彮</view>
+          <view class="list_item_content_item">澶滅彮</view>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>棰勮鍏ュ洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <text>璇烽�夋嫨</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>棰勮绂诲洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <text>璇烽�夋嫨</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item" @click="show = true">
+        <view class="list_item_label">
+          <text>璁块棶闂ㄧ</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <text>璇烽�夋嫨</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鎷滆浜嬬敱</text>
+          <text></text>
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            placeholder="璇疯緭鍏ユ潵璁夸簨鐢憋紝鎮ㄦ潵鍋氫粈涔堢殑"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+    </view>
+    <view class="cate">
+      <view class="cate_head">杞﹁締淇℃伅</view>
+      <view class="cate_list">
+        <view class="cate_list_item">
+          <text>鐨朅D12178</text>
+          <u-icon name="close" color="#999999" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="cate_add" @click="show2 = true">+娣诲姞杞﹁締</view>
+    </view>
+    <view class="cate">
+      <view class="cate_head">闅忚浜哄憳淇℃伅</view>
+      <view class="cate_list">
+        <view class="cate_list_item">
+          <text>浣曟睙瀹�</text>
+          <u-icon name="close" color="#999999" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="cate_add" @click="show1 = true">+娣诲姞闅忚浜哄憳</view>
+    </view>
+    <view class="zw"></view>
+    <view class="footer">
+      <view class="footer_btn">鎻愪氦</view>
+    </view>
+    <!-- 闂ㄧ -->
+    <u-picker
+      :show="show"
+      :columns="columns"
+      :immediateChange="true"
+      keyName="name"
+      @cancel="show = false"
+      @confirm="confirm"
+    ></u-picker>
+    <!-- 闅忚浜哄憳 -->
+    <!-- 閫夋嫨闅忚浜哄憳 -->
+    <u-popup
+      :show="show1"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show1 = false"
+    >
+      <view class="popup-content">
+        <view class="respondent-title"> 閫夋嫨闅忚浜哄憳 </view>
+        <view class="search-box">
+          <view class="search-box-top">
+            <view class="search-box-top-ipt">
+              <image src="@/static/ic_search@2x.png" mode="widthFix"></image>
+              <input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
+            </view>
+            <text
+              @click="
+                show1 = false;
+                show3 = true;
+              "
+              >鏂板</text
+            >
+          </view>
+          <view class="search-box-total">鍏�0鏉℃暟鎹�</view>
+        </view>
+        <scroll-view scroll-y class="list">
+          <view class="item" v-for="(item, index) in 8" :key="index">
+            <view class="item_a">
+              <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
+              <image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_b">
+              <image src="@/static/ic_mima@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_c">
+              <text>鐢ㄦ埛鍚�</text>
+              <text>宸叉媺榛�</text>
+            </view>
+          </view>
+        </scroll-view>
+        <view class="footer1">
+          <view class="footer_left">
+            <text class="footer_left_a">宸查�夋嫨锛�0浜�</text>
+            <text class="footer_left_b">鏉庝紵锛�</text>
+          </view>
+          <view class="footer_btn">纭 0/0</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 杞﹁締 -->
+    <u-popup
+      :show="show2"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show2 = false"
+    >
+      <view class="addcar">
+        <view class="addcar_head">娣诲姞杞﹁締</view>
+        <view class="addcar_ipt">
+          <input type="text" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
+        </view>
+        <view class="addcar_footer">
+          <view class="addcar_footer_item">鍙栨秷</view>
+          <view class="addcar_footer_item t">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 娣诲姞闅忚浜哄憳 -->
+    <u-popup
+      :show="show3"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show3 = false"
+    >
+      <view class="adduser">
+        <view class="adduser_head">闅忚浜哄憳</view>
+        <view class="adduser_list">
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>濮撳悕</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                placeholder-style="color: #999999;"
+                placeholder="璇疯緭鍏ユ偍鐨勭湡瀹炲鍚�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鎵嬫満鍙�</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="number"
+                maxlength="11"
+                placeholder-style="color: #999999;"
+                placeholder="璇疯緭鍏ユ偍鐨勬墜鏈哄彿"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢绫诲瀷</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <text>韬唤璇�</text>
+              <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢鍙风爜</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                placeholder-style="color: #999999;"
+                placeholder="璇疯緭鍏ユ偍鐨勮瘉浠跺彿鐮�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍏徃</text>
+              <text></text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                placeholder-style="color: #999999;"
+                placeholder="璇疯緭鍏ユ偍鐨勫叕鍙稿悕绉�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>浜鸿劯鐓х墖</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt1">
+              <u-upload
+                :fileList="fileList"
+                @afterRead="afterRead"
+                @delete="deletePic"
+                name="1"
+                multiple
+                :maxCount="1"
+              ></u-upload>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍋ュ悍璇佺収鐗�</text>
+              <text></text>
+            </view>
+            <view class="adduser_list_item_ipt1">
+              <u-upload
+                :fileList="fileList"
+                @afterRead="afterRead"
+                @delete="deletePic"
+                name="1"
+                multiple
+                :maxCount="1"
+              ></u-upload>
+            </view>
+          </view>
+        </view>
+        <view class="adduser_footer">
+          <view class="adduser_footer_item">鍙栨秷</view>
+          <view class="adduser_footer_item t">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				show: false,
-				show1: false,
-				show2: false,
-				show3: false,
-				fileList: [],
-				columns: [
-					[{
-							name: '涓滈棬',
-							id: 1
-						},
-						{
-							name: '瑗块棬',
-							id: 2
-						}
-					]
-				]
-			};
-		},
-		methods: {
-			confirm(e) {
-				console.log(e)
-				this.show = false
-			},
-			// 鍒犻櫎鍥剧墖
-			deletePic(event) {
-				this[`fileList${event.name}`].splice(event.index, 1)
-			},
-			// 鏂板鍥剧墖
-			async afterRead(event) {
-				// 褰撹缃� multiple 涓� true 鏃�, file 涓烘暟缁勬牸寮忥紝鍚﹀垯涓哄璞℃牸寮�
-				let lists = [].concat(event.file)
-				let fileListLen = this[`fileList${event.name}`].length
-				lists.map((item) => {
-					this[`fileList${event.name}`].push({
-						...item,
-						status: 'uploading',
-						message: '涓婁紶涓�'
-					})
-				})
-				for (let i = 0; i < lists.length; i++) {
-					const result = await this.uploadFilePromise(lists[i].url)
-					let item = this[`fileList${event.name}`][fileListLen]
-					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
-						status: 'success',
-						message: '',
-						url: result
-					}))
-					fileListLen++
-				}
-			},
-			uploadFilePromise(url) {
-				return new Promise((resolve, reject) => {
-					let a = uni.uploadFile({
-						url: 'http://192.168.2.21:7001/upload', // 浠呬负绀轰緥锛岄潪鐪熷疄鐨勬帴鍙e湴鍧�
-						filePath: url,
-						name: 'file',
-						formData: {
-							user: 'test'
-						},
-						success: (res) => {
-							setTimeout(() => {
-								resolve(res.data.data)
-							}, 1000)
-						}
-					});
-				})
-			},
-		}
-	}
+export default {
+  data() {
+    return {
+      show: false,
+      show1: false,
+      show2: false,
+      show3: false,
+      fileList: [],
+      columns: [
+        [{
+          name: '涓滈棬',
+          id: 1
+        },
+        {
+          name: '瑗块棬',
+          id: 2
+        }
+        ]
+      ]
+    }
+  },
+  methods: {
+    confirm(e) {
+      console.log(e)
+      this.show = false
+    },
+    // 鍒犻櫎鍥剧墖
+    deletePic(event) {
+      this[`fileList${event.name}`].splice(event.index, 1)
+    },
+    // 鏂板鍥剧墖
+    async afterRead(event) {
+      // 褰撹缃� multiple 涓� true 鏃�, file 涓烘暟缁勬牸寮忥紝鍚﹀垯涓哄璞℃牸寮�
+      let lists = [].concat(event.file)
+      let fileListLen = this[`fileList${event.name}`].length
+      lists.map((item) => {
+        this[`fileList${event.name}`].push({
+          ...item,
+          status: 'uploading',
+          message: '涓婁紶涓�'
+        })
+      })
+      for (let i = 0; i < lists.length; i++) {
+        const result = await this.uploadFilePromise(lists[i].url)
+        let item = this[`fileList${event.name}`][fileListLen]
+        this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+          status: 'success',
+          message: '',
+          url: result
+        }))
+        fileListLen++
+      }
+    },
+    uploadFilePromise(url) {
+      return new Promise((resolve, reject) => {
+        let a = uni.uploadFile({
+          url: 'http://192.168.2.21:7001/upload', // 浠呬负绀轰緥锛岄潪鐪熷疄鐨勬帴鍙e湴鍧�
+          filePath: url,
+          name: 'file',
+          formData: {
+            user: 'test'
+          },
+          success: (res) => {
+            setTimeout(() => {
+              resolve(res.data.data)
+            }, 1000)
+          }
+        })
+      })
+    },
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7 !important;
-	}
-	.u-upload__button {
-		margin: 0 !important;
-	}
+page {
+  background-color: #f7f7f7 !important;
+}
+.u-upload__button {
+  margin: 0 !important;
+}
 </style>
 <style lang="scss" scoped>
-	.visit {
-		width: 100%;
-		
-		.adduser {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.adduser_head {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.adduser_list {
-				width: 100%;
-				margin-top: 40rpx;
-				.adduser_list_item {
-					width: 100%;
-					padding: 24rpx 0;
-					box-sizing: border-box;
-					border-bottom: 1rpx solid #E5E5E5;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.adduser_list_item_label {
-						flex-shrink: 0;
-						display: flex;
-						align-items: center;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #E0312A;
-							}
-						}
-					}
-					.adduser_list_item_ipt {
-						flex: 1;
-						text-align: right;
-						font-size: 28rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-left: 30rpx;	
-						display: flex;
-						align-items: center;
-						justify-content: flex-end;
-						text {
-							font-size: 28rpx;
-							font-family: PingFangSC, PingFang SC;
-							font-weight: 400;
-							color: #333333;
-						}
-					}
-				}
-			}
-			.adduser_footer {
-				width: 100%;
-				margin-top: 60rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.t {
-					background: #025EEF !important;
-					color: #ffffff !important;
-				}
-				.adduser_footer_item {
-					width: 336rpx;
-					height: 88rpx;
-					line-height: 88rpx;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #025EEF;
-					font-size: 32rpx;
-					font-family: PingFangSC, PingFang SC;
-					font-weight: 400;
-					color: #025EEF;
-					margin-right: 18rpx;
-					&:last-child {
-						margin: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.addcar {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.addcar_head {
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.addcar_ipt {
-				width: 100%;
-				height: 100rpx;
-				line-height: 100rpx;
-				text-align: center;
-				background: #F7F7F7;
-				border-radius: 50rpx;
-				margin-top: 60rpx;
-				input {
-					width: 100%;
-					height: 100%;
-					font-size: 28rpx;
-					font-weight: 400;
-					color: #999999;
-					text-align: center;
-				}
-			}
-			.addcar_footer {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				margin-top: 60rpx;
-				.t {
-					background: #025EEF !important;
-					color: #ffffff !important;
-				}
-				.addcar_footer_item {
-					flex: 1;
-					height: 88rpx;
-					line-height: 88rpx;
-					font-size: 32rpx;
-					font-weight: 400;
-					color: #025EEF;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #025EEF;
-					margin-right: 18rpx;
-					&:last-child {
-						margin-right: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.popup-content {
-			padding: 30rpx 30rpx 0 30rpx;
-			overflow: hidden;
-			display: flex;
-			flex-flow: column;
-			.respondent-title {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.search-box {
-				width: 100%;
-				margin-top: 40rpx;
-				.search-box-top {
-					width: 100%;
-					height: 68rpx;
-					display: flex;
-					align-items: center;
-					.search-box-top-ipt {
-						flex: 1;
-						height: 100%;
-						padding: 0 30rpx;
-						box-sizing: border-box;
-						background: #F7F7F7;
-						border-radius: 4rpx;
-						display: flex;
-						align-items: center;
-						image {
-							width: 36rpx;
-							height: 36rpx;
-							flex-shrink: 0;
-							margin-right: 22rpx;
-						}
-						input {
-							flex: 1;
-							height: 100%;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #B2B2B2;
-						}
-					}
-					text {
-						flex-shrink: 0;
-						margin-left: 30rpx;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #025EEF;
-					}
-				}
-				.search-box-total {
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #666666;
-					margin-top: 24rpx;
-				}
-			}
-			.list {
-				width: 100%;
-				height: 800rpx;
-				margin-top: 30rpx;
-				padding: 0 !important;
-				.item {
-					width: 100%;
-					height: 102rpx;
-					display: flex;
-					align-items: center;
-					border-bottom: 1rpx solid #E5E5E5;
-					.item_a {
-						flex-shrink: 0;
-						width: 36rpx;
-						height: 36rpx;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_b {
-						flex-shrink: 0;
-						width: 80rpx;
-						height: 80rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						overflow: hidden;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_c {
-						flex: 1;
-						display: flex;
-						align-items: center;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 20rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #999999;
-								padding: 1rpx 4rpx;
-								box-sizing: border-box;
-								background-color: #EEEEEE;
-								margin-left: 12rpx;
-							}
-						}
-					}
-				}
-			}
-			.footer1 {
-				width: 100%;
-				height: 100rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				padding: 14rpx 0 0 0;
-				box-sizing: border-box;
-				.footer_left {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					.footer_left_a {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-					}
-					.footer_left_b {
-						font-size: 24rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #999999;
-					}
-				}
-				.footer_btn {
-					flex-shrink: 0;
-					width: 216rpx;
-					height: 72rpx;
-					line-height: 72rpx;
-					text-align: center;
-					background: #025EEF;
-					border-radius: 8rpx;
-					font-size: 28rpx;
-					font-weight: 500;
-					color: #FFFFFF;
-				}
-			}
-		}
-		    
+.visit {
+  width: 100%;
 
-		.head {
-			width: 100%;
-			padding: 20rpx 30rpx;
-			box-sizing: border-box;
-			font-size: 28rpx;
-			font-weight: 400;
-			color: #666666;
-		}
+  .adduser {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .adduser_head {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .adduser_list {
+      width: 100%;
+      margin-top: 40rpx;
+      .adduser_list_item {
+        width: 100%;
+        padding: 24rpx 0;
+        box-sizing: border-box;
+        border-bottom: 1rpx solid #e5e5e5;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .adduser_list_item_label {
+          flex-shrink: 0;
+          display: flex;
+          align-items: center;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #e0312a;
+            }
+          }
+        }
+        .adduser_list_item_ipt {
+          flex: 1;
+          text-align: right;
+          font-size: 28rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-left: 30rpx;
+          display: flex;
+          align-items: center;
+          justify-content: flex-end;
+          text {
+            font-size: 28rpx;
+            font-family: PingFangSC, PingFang SC;
+            font-weight: 400;
+            color: #333333;
+          }
+        }
+      }
+    }
+    .adduser_footer {
+      width: 100%;
+      margin-top: 60rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .t {
+        background: #025eef !important;
+        color: #ffffff !important;
+      }
+      .adduser_footer_item {
+        width: 336rpx;
+        height: 88rpx;
+        line-height: 88rpx;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #025eef;
+        font-size: 32rpx;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #025eef;
+        margin-right: 18rpx;
+        &:last-child {
+          margin: 0 !important;
+        }
+      }
+    }
+  }
 
-		.list {
-			width: 100%;
-			padding: 0 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
+  .addcar {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .addcar_head {
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .addcar_ipt {
+      width: 100%;
+      height: 100rpx;
+      line-height: 100rpx;
+      text-align: center;
+      background: #f7f7f7;
+      border-radius: 50rpx;
+      margin-top: 60rpx;
+      input {
+        width: 100%;
+        height: 100%;
+        font-size: 28rpx;
+        font-weight: 400;
+        color: #999999;
+        text-align: center;
+      }
+    }
+    .addcar_footer {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 60rpx;
+      .t {
+        background: #025eef !important;
+        color: #ffffff !important;
+      }
+      .addcar_footer_item {
+        flex: 1;
+        height: 88rpx;
+        line-height: 88rpx;
+        font-size: 32rpx;
+        font-weight: 400;
+        color: #025eef;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #025eef;
+        margin-right: 18rpx;
+        &:last-child {
+          margin-right: 0 !important;
+        }
+      }
+    }
+  }
 
-			.list_item {
-				width: 100%;
-				height: 98rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
+  .popup-content {
+    padding: 30rpx 30rpx 0 30rpx;
+    overflow: hidden;
+    display: flex;
+    flex-flow: column;
+    .respondent-title {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .search-box {
+      width: 100%;
+      margin-top: 40rpx;
+      .search-box-top {
+        width: 100%;
+        height: 68rpx;
+        display: flex;
+        align-items: center;
+        .search-box-top-ipt {
+          flex: 1;
+          height: 100%;
+          padding: 0 30rpx;
+          box-sizing: border-box;
+          background: #f7f7f7;
+          border-radius: 4rpx;
+          display: flex;
+          align-items: center;
+          image {
+            width: 36rpx;
+            height: 36rpx;
+            flex-shrink: 0;
+            margin-right: 22rpx;
+          }
+          input {
+            flex: 1;
+            height: 100%;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #b2b2b2;
+          }
+        }
+        text {
+          flex-shrink: 0;
+          margin-left: 30rpx;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #025eef;
+        }
+      }
+      .search-box-total {
+        font-size: 26rpx;
+        font-weight: 400;
+        color: #666666;
+        margin-top: 24rpx;
+      }
+    }
+    .list {
+      width: 100%;
+      height: 800rpx;
+      margin-top: 30rpx;
+      padding: 0 !important;
+      .item {
+        width: 100%;
+        height: 102rpx;
+        display: flex;
+        align-items: center;
+        border-bottom: 1rpx solid #e5e5e5;
+        .item_a {
+          flex-shrink: 0;
+          width: 36rpx;
+          height: 36rpx;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_b {
+          flex-shrink: 0;
+          width: 80rpx;
+          height: 80rpx;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          overflow: hidden;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_c {
+          flex: 1;
+          display: flex;
+          align-items: center;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 20rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #999999;
+              padding: 1rpx 4rpx;
+              box-sizing: border-box;
+              background-color: #eeeeee;
+              margin-left: 12rpx;
+            }
+          }
+        }
+      }
+    }
+    .footer1 {
+      width: 100%;
+      height: 100rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 14rpx 0 0 0;
+      box-sizing: border-box;
+      .footer_left {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        .footer_left_a {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+        }
+        .footer_left_b {
+          font-size: 24rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #999999;
+        }
+      }
+      .footer_btn {
+        flex-shrink: 0;
+        width: 216rpx;
+        height: 72rpx;
+        line-height: 72rpx;
+        text-align: center;
+        background: #025eef;
+        border-radius: 8rpx;
+        font-size: 28rpx;
+        font-weight: 500;
+        color: #ffffff;
+      }
+    }
+  }
 
-				.list_item_label {
-					flex-shrink: 0;
-					display: flex;
-					align-items: center;
+  .head {
+    width: 100%;
+    padding: 20rpx 30rpx;
+    box-sizing: border-box;
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #666666;
+  }
 
-					text {
-						&:nth-child(1) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #222222;
-						}
+  .list {
+    width: 100%;
+    padding: 0 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
 
-						&:nth-child(2) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #E42D2D;
-						}
-					}
-				}
+    .list_item {
+      width: 100%;
+      height: 98rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
 
-				.list_item_content {
-					flex: 1;
-					height: 100%;
-					margin-left: 30rpx;
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
-					
-					.active {
-						background: #025EEF !important;
-						color: #FFFFFF !important;
-					}
-					
-					.list_item_content_item {
-						width: 104rpx;
-						height: 64rpx;
-						line-height: 64rpx;
-						text-align: center;
-						background: #EEEEEE;
-						border-radius: 4rpx;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #333333;
-						margin-left: 20rpx;
-					}
+      .list_item_label {
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
 
-					text {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #999999;
-						margin-right: 6rpx;
-					}
+        text {
+          &:nth-child(1) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #222222;
+          }
 
-					input {
-						width: 100%;
-						height: 100%;
-						text-align: right;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-					}
-				}
-			}
-		}
+          &:nth-child(2) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #e42d2d;
+          }
+        }
+      }
 
-		.cate {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			margin-top: 20rpx;
+      .list_item_content {
+        flex: 1;
+        height: 100%;
+        margin-left: 30rpx;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
 
-			.cate_head {
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
+        .active {
+          background: #025eef !important;
+          color: #ffffff !important;
+        }
 
-			.cate_list {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				flex-wrap: wrap;
-				margin-top: 30rpx;
+        .list_item_content_item {
+          width: 104rpx;
+          height: 64rpx;
+          line-height: 64rpx;
+          text-align: center;
+          background: #eeeeee;
+          border-radius: 4rpx;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #333333;
+          margin-left: 20rpx;
+        }
 
-				.cate_list_item {
-					height: 64rpx;
-					padding: 0 20rpx;
-					box-sizing: border-box;
-					background-color: #EEEEEE;
-					border-radius: 4rpx;
-					margin-right: 20rpx;
-					margin-bottom: 20rpx;
-					display: flex;
-					align-items: center;
+        text {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #999999;
+          margin-right: 6rpx;
+        }
 
-					&:last-child {
-						margin-right: 0 !important;
-					}
+        input {
+          width: 100%;
+          height: 100%;
+          text-align: right;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+        }
+      }
+    }
+  }
 
-					text {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-right: 30rpx;
-					}
-				}
-			}
+  .cate {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    margin-top: 20rpx;
 
-			.cate_add {
-				width: 200rpx;
-				height: 50rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				background: rgba(2, 94, 239, 0);
-				border-radius: 25rpx;
-				border: 1rpx solid #025EEF;
-				font-size: 22rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 400;
-				margin-top: 20rpx;
-				color: #025EEF;
-				margin: 0 auto;
-			}
-		}
+    .cate_head {
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
 
-		.zw {
-			width: 100%;
-			height: calc(env(safe-area-inset-bottom) + 118rpx);
-		}
+    .cate_list {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      flex-wrap: wrap;
+      margin-top: 30rpx;
 
-		.footer {
-			width: 100%;
-			padding: 0 30rpx;
-			padding-bottom: env(safe-area-inset-bottom);
-			box-sizing: border-box;
-			position: fixed;
-			left: 0;
-			bottom: 30rpx;
+      .cate_list_item {
+        height: 64rpx;
+        padding: 0 20rpx;
+        box-sizing: border-box;
+        background-color: #eeeeee;
+        border-radius: 4rpx;
+        margin-right: 20rpx;
+        margin-bottom: 20rpx;
+        display: flex;
+        align-items: center;
 
-			.footer_btn {
-				width: 100%;
-				height: 88rpx;
-				line-height: 88rpx;
-				text-align: center;
-				background: #025EEF;
-				border-radius: 44rpx;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #FFFFFF;
-			}
-		}
-	}
+        &:last-child {
+          margin-right: 0 !important;
+        }
+
+        text {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-right: 30rpx;
+        }
+      }
+    }
+
+    .cate_add {
+      width: 200rpx;
+      height: 50rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(2, 94, 239, 0);
+      border-radius: 25rpx;
+      border: 1rpx solid #025eef;
+      font-size: 22rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      margin-top: 20rpx;
+      color: #025eef;
+      margin: 0 auto;
+    }
+  }
+
+  .zw {
+    width: 100%;
+    height: calc(env(safe-area-inset-bottom) + 118rpx);
+  }
+
+  .footer {
+    width: 100%;
+    padding: 0 30rpx;
+    padding-bottom: env(safe-area-inset-bottom);
+    box-sizing: border-box;
+    position: fixed;
+    left: 0;
+    bottom: 30rpx;
+
+    .footer_btn {
+      width: 100%;
+      height: 88rpx;
+      line-height: 88rpx;
+      text-align: center;
+      background: #025eef;
+      border-radius: 44rpx;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #ffffff;
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/h5/pages/notice/notice.vue b/h5/pages/notice/notice.vue
index b114ef8..befb446 100644
--- a/h5/pages/notice/notice.vue
+++ b/h5/pages/notice/notice.vue
@@ -40,7 +40,7 @@
       window.location.href = authURL
     },
     getInfo() {
-      // 鍏ュ満椤荤煡璇︽儏
+      // 鍏ュ洯椤荤煡璇︽儏
       getSystemDictData({
         dictCode: 'SYSTEM',
         label: 'VISIT_NOTICE'
diff --git a/h5/pages/staff/index.vue b/h5/pages/staff/index.vue
index cdde5d3..dedc392 100644
--- a/h5/pages/staff/index.vue
+++ b/h5/pages/staff/index.vue
@@ -48,7 +48,7 @@
 				<image class="img" src="@/static/staff/ic_renwuzhongxin.png"></image>
 				<view class="h1">浠诲姟涓績</view>
 				<view class="h2">TASK CENTER</view>
-				<view class="task_num">99+</view>
+				<view class="task_num">{{ taskNum }}</view>
 			</view>
 			<view class="img_wrap" @click="jump('/pages/staff/meetingCalendar')">
 				<image class="img" src="@/static/staff/ic_wodehuiyi.png"></image>
@@ -74,15 +74,17 @@
 </template>
 
 <script>
-import { logoutPost } from '@/api'
+import { logoutPost, stagingHead } from '@/api'
 export default {
 	data() {
 		return {
-			userInfo: uni.getStorageSync('userInfo')
+			userInfo: uni.getStorageSync('userInfo'),
+			taskNum: 0
 		};
 	},
 	onLoad(){
 		console.log('userInfo', this.userInfo);
+		this.getTaskInfo()
 	},
 	methods: {
 		jump(path){
@@ -97,6 +99,13 @@
 				url: '/pages/staffLogin/login'
 			})
 		},
+		getTaskInfo() {
+      stagingHead({
+        isDetail: '0'
+      }).then(res => {
+        this.taskNum = res.data.taskNum
+      })
+    },
 	}
 };
 </script>
@@ -210,11 +219,12 @@
 		}
 		.task_num{
 			position: absolute;
-			left: 164rpx;
-			top: 20rpx;
-			width: 60rpx;
-			height: 48rpx;
+			left: 168rpx;
+			top: 26rpx;
+			width: 52rpx;
+			height: 52rpx;
 			border-radius: 50%;
+			/* border: 1px solid; */
 			background-color: #fff;
 			color: #db534c;
 			display: flex;
diff --git a/h5/pages/staff/meetingCalendar.vue b/h5/pages/staff/meetingCalendar.vue
index 7af417d..346a6b3 100644
--- a/h5/pages/staff/meetingCalendar.vue
+++ b/h5/pages/staff/meetingCalendar.vue
@@ -1,342 +1,489 @@
 <template>
-	<view class="main_app">
-		<view class="tabs">
-			<view class="tab" :class="{ active: activeTab === '0' }" @click="tabClick('0')">
-				<text class="name">浼氳鏃ュ巻</text>
-				<view class="line"></view>
-			</view>
-			<view class="tab" :class="{ active: activeTab === '1' }" @click="tabClick('1')">
-				<text class="name">棰勭害璁板綍</text>
-				<view class="line"></view>
-			</view>
-		</view>
-		<!--  -->
-		<template v-if="activeTab == '0'">
-			<!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
-			<!-- 鏃ュ巻 -->
-			<view class="container_b">
-				<Calendar
-					ref="Calendar"
-					:currentTime="currentTime1"
-					:mark="mark"
-					:showLunar="false"
-					@dayChange="dayChange"
-					@monthChange="monthChange"
-					:rangeMode="false"
-					:maskColor="'#ffffff'"
-					:dateStart="dateStart"
-					:dateEnd="dateEnd"
-					:canDrag="false"
-				></Calendar>
-			</view>
-			<!--  -->
-			<view class="card_list">
-				<view class="card_title">
-					<view class="name">
-						<view class="icon"></view>
-						<view class="text">浠婃棩浼氳</view>
-					</view>
-					<view class="meeting">
-						<view class="text mr24">鍏ㄩ儴浼氳瀹�</view>
-						<u-icon name="arrow-down" size="12" color="#999999" />
-					</view>
-				</view>
-				<view class="list">
-					<view class="item">
-						<view class="head">
-							<view class="name">aaaaa閫夊瀷</view>
-							<view class="status">鍗冲皢寮�濮�</view>
-						</view>
-						<view class="line">
-							<view class="label">浼氳鏃堕棿锛�</view>
-							<view class="value">12:00-12</view>
-						</view>
-						<view class="line">
-							<view class="label">浼氳瀹わ細</view>
-							<view class="value">202浼氳瀹�</view>
-						</view>
-						<view class="line">
-							<view class="label">棰勭害浜猴細</view>
-							<view class="value">鏉ㄦ煇鏌�</view>
-						</view>
-						<view class="line">
-							<view class="label">澶囨敞锛�</view>
-							<view class="value">--</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</template>
-		<!--  -->
-		<template v-if="activeTab === '1'">
-			<view class="card_list">
-				<view class="list">
-					<view class="item" @click="handleDetail()">
-						<view class="head">
-							<view class="name">aaaaa閫夊瀷</view>
-							<view class="status">鍗冲皢寮�濮�</view>
-						</view>
-						<view class="line">
-							<view class="label">浼氳鏃堕棿锛�</view>
-							<view class="value">12:00-12</view>
-						</view>
-						<view class="line">
-							<view class="label">浼氳瀹わ細</view>
-							<view class="value">202浼氳瀹�</view>
-						</view>
-						<view class="line">
-							<view class="label">棰勭害浜猴細</view>
-							<view class="value">鏉ㄦ煇鏌�</view>
-						</view>
-						<view class="line">
-							<view class="label">澶囨敞锛�</view>
-							<view class="value">--</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</template>
-	</view>
+  <view class="main_app">
+    <view class="tabs">
+      <view
+        class="tab"
+        :class="{ active: activeTab === '0' }"
+        @click="tabClick('0')"
+      >
+        <text class="name">浼氳鏃ュ巻</text>
+        <view class="line"></view>
+      </view>
+      <view
+        class="tab"
+        :class="{ active: activeTab === '1' }"
+        @click="tabClick('1')"
+      >
+        <text class="name">棰勭害璁板綍</text>
+        <view class="line"></view>
+      </view>
+    </view>
+    <!--  -->
+    <template v-if="activeTab == '0'">
+      <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
+      <!-- 鏃ュ巻 -->
+      <view class="container_b">
+        <Calendar
+          ref="Calendar"
+          :currentTime="currentDate"
+          :mark="monthMark"
+          :showLunar="false"
+          @dayChange="dayChange"
+          @monthChange="monthChange"
+          :rangeMode="false"
+          :maskColor="'#ffffff'"
+          :dateStart="dateStart"
+          :dateEnd="dateEnd"
+          :canDrag="false"
+        ></Calendar>
+      </view>
+      <!--  -->
+      <view class="card_list">
+        <view class="card_title">
+          <view class="name">
+            <view class="icon"></view>
+            <view class="text">浠婃棩浼氳</view>
+          </view>
+          <view class="meeting">
+            <view class="text mr24" @click="isShowStatus = true">{{
+              activeRoom.name
+            }}</view>
+            <u-icon name="arrow-down" size="12" color="#999999" />
+          </view>
+        </view>
+        <view class="list">
+          <view
+            @click="handleDetail(item.id)"
+            class="item"
+            v-for="item in myMeetingList"
+            :key="item.id"
+          >
+            <view class="head">
+              <view class="name">{{ item.meetingName }}</view>
+              <view class="status" v-if="item.meetingStatus == '1'"
+                >鏈紑濮�</view
+              >
+              <view class="status red" v-if="item.meetingStatus == '2'"
+                >杩涜涓�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '3'"
+                >宸茬粨鏉�</view
+              >
+              <view class="status padding" v-if="item.meetingStatus == '4'"
+                >鍗冲皢寮�濮�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '5'"
+                >宸叉挙閿�</view
+              >
+            </view>
+            <view class="line">
+              <view class="label">浼氳鏃堕棿锛�</view>
+              <view class="value">{{ item.meetingTime }}</view>
+            </view>
+            <view class="line">
+              <view class="label">浼氳瀹わ細</view>
+              <view class="value">{{ item.roomName }}</view>
+            </view>
+            <view class="line">
+              <view class="label">棰勭害浜猴細</view>
+              <view class="value">{{ item.bookingUser }}</view>
+            </view>
+            <view class="line">
+              <view class="label">澶囨敞锛�</view>
+              <view class="value">{{ item.remark || item.meetingRemark }}</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </template>
+    <!--  -->
+    <template v-if="activeTab === '1'">
+      <view class="card_list">
+        <view class="list">
+          <view
+            class="item"
+            v-for="item in recordList"
+            :key="item.id"
+            @click="handleDetail(item.id)"
+          >
+            <view class="head">
+              <view class="name">{{ item.meetingName }}</view>
+              <view class="status" v-if="item.meetingStatus == '1'"
+                >鏈紑濮�</view
+              >
+              <view class="status red" v-if="item.meetingStatus == '2'"
+                >杩涜涓�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '3'"
+                >宸茬粨鏉�</view
+              >
+              <view class="status padding" v-if="item.meetingStatus == '4'"
+                >鍗冲皢寮�濮�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '5'"
+                >宸叉挙閿�</view
+              >
+            </view>
+            <view class="line">
+              <view class="label">浼氳鏃堕棿锛�</view>
+              <view class="value">{{ item.meetingTime }}</view>
+            </view>
+            <view class="line">
+              <view class="label">浼氳瀹わ細</view>
+              <view class="value">{{ item.roomName }}</view>
+            </view>
+            <view class="line">
+              <view class="label">棰勭害浜猴細</view>
+              <view class="value">{{ item.bookingUser }}</view>
+            </view>
+            <view class="line">
+              <view class="label">澶囨敞锛�</view>
+              <view class="value">{{ item.remark || item.meetingRemark }}</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </template>
+
+    <u-picker
+      keyName="name"
+      :show="isShowStatus"
+      :columns="meetingList"
+      @confirm="seletedStatus"
+      @cancel="isShowStatus = false"
+    ></u-picker>
+  </view>
 </template>
 
 <script>
-import Calendar from '@/components/Li-Calendar/Li-Calendar.vue';
-import { getDay } from '@/utils/utils.js';
+import Calendar from '@/components/Li-Calendar/Li-Calendar.vue'
+import dayja from 'dayjs'
+import { myMeetingPage, monthMeetingPage, roomsListPost } from '@/api'
 function getDate(date, AddDayCount = 0) {
-	if (!date) {
-		date = new Date();
-	}
-	if (typeof date !== 'object') {
-		date = date.replace(/-/g, '/');
-	}
-	const dd = new Date(date);
+  if (!date) {
+    date = new Date()
+  }
+  if (typeof date !== 'object') {
+    date = date.replace(/-/g, '/')
+  }
+  const dd = new Date(date)
 
-	dd.setDate(dd.getDate() + AddDayCount); // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈�
+  dd.setDate(dd.getDate() + AddDayCount) // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈�
 
-	const y = dd.getFullYear();
-	const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1; // 鑾峰彇褰撳墠鏈堜唤鐨勬棩鏈燂紝涓嶈冻10琛�0
-	const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate(); // 鑾峰彇褰撳墠鍑犲彿锛屼笉瓒�10琛�0
-	return {
-		fullDate: y + '-' + m + '-' + d,
-		year: y,
-		month: m,
-		date: d,
-		day: dd.getDay()
-	};
+  const y = dd.getFullYear()
+  const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 鑾峰彇褰撳墠鏈堜唤鐨勬棩鏈燂紝涓嶈冻10琛�0
+  const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 鑾峰彇褰撳墠鍑犲彿锛屼笉瓒�10琛�0
+  return {
+    fullDate: y + '-' + m + '-' + d,
+    year: y,
+    month: m,
+    date: d,
+    day: dd.getDay()
+  }
 }
 export default {
-	components: {
-		Calendar
+  components: {
+    Calendar
+  },
+  data() {
+    return {
+      activeTab: '0',
+      recordList: [],
+      recordPage: 1,
+      myPage: 1,
+      myMeetingList: [],
+      currentDate: '',
+      dateStart: '1999-05-01',
+      dateEnd: '2999-06-15',
+      monthMark: [],
+
+      isShowStatus: false,
+      activeRoom: {
+        name: '鍏ㄩ儴浼氳瀹�',
+        id: ''
+      },
+      meetingList: [],
+
+    }
+  },
+  onLoad() {
+    this.currentDate = dayja().format('YYYY-MM-DD')
+    this.initData()
+    this.getRoomList()
+  },
+	onShow() {
+		this.tabClick('0')
 	},
-	data() {
-		return {
-			activeTab: '0',
-			currentTime1: '',
-			dateStart: '1999-05-01',
-			dateEnd: '2999-06-15',
-			mark: [],
-			selected: [
-				{
-					date: getDate(new Date(), -3).fullDate
-					// info: '鎵撳崱'
-				},
-				{
-					date: getDate(new Date(), -2).fullDate,
-					// info: '绛惧埌',
-					data: {
-						custom: '鑷畾涔変俊鎭�',
-						name: '鑷畾涔夋秷鎭ご'
-					}
-				},
-				{
-					date: getDate(new Date(), -1).fullDate,
-					info: '宸叉墦鍗�'
-				}
-			]
-		};
-	},
-	methods: {
-		tabClick(val) {
-			this.activeTab = val;
-		},
-		handleDetail(item) {
-			uni.navigateTo({
-				// url: `/pages/staff/meetingDetail?id=${item.id}`,
-				url: `/pages/staff/meetingDetail`
-			});
-		},
-		changeCalendar(e) {
-			console.log(e);
-		},
-		// 鐐瑰嚮鏌愬ぉ
-		dayChange(data) {
-			console.log(data);
-			let date = data.time;
-			let yyyy = data.time.substring(0, 4);
-			let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')));
-			let dd = Number(data.time.substring(data.time.lastIndexOf('-') + 1, data.time.length));
-			mm = mm < 10 ? `0${mm}` : mm;
-			dd = dd < 10 ? `0${dd}` : dd;
-			let riqi = `${yyyy}-${mm}-${dd}`;
-			this.currentTime = riqi;
-			this.list = [];
-			this.next = false;
-			this.page = 0;
-			// this.getRoomList()
-		},
-		// 涓嬩竴鏈�
-		monthChange(data) {
-			let date = data.date.replace(/[/]/g, '-');
-			let yyyy = date.substring(0, 4);
-			let mm = Number(date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')));
-			let dd = Number(date.substring(date.lastIndexOf('-') + 1, date.length));
-			mm = mm < 10 ? `0${mm}` : mm;
-			dd = dd < 10 ? `0${dd}` : dd;
-			let riqi = `${yyyy}-${mm}-${dd}`;
-			console.log('鏃ユ湡', riqi);
-			this.currentTime1 = riqi;
-			// this.getDateNum()
-		}
-	}
+  onReachBottom() {
+    const { activeTab } = this
+    if (activeTab == '0') {
+      this.myPage = this.myPage + 1
+      this.getDayMeeting()
+    } else {
+      this.recordPage = this.recordPage + 1
+      this.getRecordList()
+    }
+  },
+  methods: {
+    initData() {
+      // 褰撴湀鏁版嵁
+      monthMeetingPage({
+        yearMonth: this.currentDate.slice(0, 7)
+      }).then(res => {
+        this.monthMark = res.data.filter(i => i.meetingNum > 0).map(j => {
+          return {
+            time: j.monthDate,
+            pointText: j.meetingNum,
+            pointTextColor: 'red'
+          }
+        })
+      })
+    },
+		getRoomList() {
+      roomsListPost({}).then(res => {
+        this.meetingList = [[{ id: '', name: '鍏ㄩ儴浼氳瀹�' }, ...res.data]]
+				console.log('meetingList', this.meetingList);
+      })
+    },
+    tabClick(val) {
+      this.activeTab = val
+      if (val === '1') {
+        this.recordPage = 1
+        this.getRecordList()
+      } else {
+        this.myMeetingList = []
+        this.activeRoom = {
+          name: '鍏ㄩ儴浼氳瀹�',
+          id: ''
+        }
+        this.myPage = 1
+        this.getDayMeeting()
+      }
+    },
+    seletedStatus(e) {
+			this.myMeetingList = []
+      this.activeRoom = { ...e.value[0] }
+      this.isShowStatus = false
+      this.getDayMeeting()
+    },
+    handleDetail(id) {
+      uni.navigateTo({
+        url: `/pages/staff/meetingDetail?id=${id}`,
+        // url: `/pages/staff/meetingDetail`
+      })
+    },
+    changeCalendar(e) {
+      console.log(e)
+    },
+    // 鐐瑰嚮鏌愬ぉ
+    dayChange(data) {
+      let date = data.time
+      let yyyy = data.time.substring(0, 4)
+      let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')))
+      let dd = Number(data.time.substring(data.time.lastIndexOf('-') + 1, data.time.length))
+      mm = mm < 10 ? `0${mm}` : mm
+      dd = dd < 10 ? `0${dd}` : dd
+      let riqi = `${yyyy}-${mm}-${dd}`
+      this.currentDate = riqi
+      this.myMeetingList = []
+      this.activeStatus = {
+        name: '鍏ㄩ儴浼氳瀹�',
+        key: ''
+      }
+      this.myPage = 1
+      this.getDayMeeting()
+    },
+    // 涓嬩竴鏈�
+    monthChange(data) {
+      let date = data.date.replace(/[/]/g, '-')
+      let yyyy = date.substring(0, 4)
+      let mm = Number(date.substring(date.indexOf('-') + 1, date.lastIndexOf('-')))
+      let dd = Number(date.substring(date.lastIndexOf('-') + 1, date.length))
+      mm = mm < 10 ? `0${mm}` : mm
+      dd = dd < 10 ? `0${dd}` : dd
+      let riqi = `${yyyy}-${mm}-${dd}`
+      console.log('鏃ユ湡', riqi)
+      this.currentDate = riqi
+      this.initData()
+    },
+    getRecordList() {
+      const { activeStatus } = this
+      myMeetingPage({
+        capacity: 10,
+        page: this.recordPage,
+        model: {
+          // status: activeStatus.key || null,
+          // roomsId: this.roomId,
+          queryType: 2
+        }
+      }).then(res => {
+        this.recordList = [...this.recordList, ...res.data.records]
+      })
+    },
+    getDayMeeting() {
+      const { myPage, activeRoom, currentDate } = this
+      // 褰撳ぉ鎴戝弬涓庣殑浼氳
+      myMeetingPage({
+        model: {
+          queryType: '1',
+          roomsId: activeRoom.id,
+          queryDate: currentDate
+        },
+        page: myPage,
+        capacity: 10
+      }).then(res => {
+        this.myMeetingList = [ ...this.myMeetingList, ...res.data.records ]
+      })
+    },
+  }
 };
 </script>
 
 <style lang="scss">
 page {
-	background-color: #f7f7f7;
+  background-color: #f7f7f7;
 }
 .main_app {
-	padding: 0;
-	background-color: #f7f7f7;
-	::v-deep .uni-calendar-item--checked {
-		background-color: $uni-color-primary;
-		border-radius: 8rpx;
-	}
-	::v-deep .uni-calendar-item--isDay-text {
-		color: $uni-color-primary;
-	}
-	::v-deep .uni-calendar-item--isDay {
-		background-color: $uni-color-primary;
-		color: #fff;
-		border-radius: 8rpx;
-	}
-	.tabs {
-		display: flex;
-		background-color: #fff;
-		.tab {
-			flex: 1;
-			height: 88rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			font-size: 28rpx;
-			color: #666666;
-			position: relative;
-			.line {
-				width: 60rpx;
-				height: 4rpx;
-				background: #fff;
-				border-radius: 3rpx;
-				position: absolute;
-				bottom: 0;
-				left: 50%;
-				transform: translate(-50%, 0);
-			}
-		}
-		.active {
-			font-weight: 500;
-			font-size: 30rpx;
-			color: #222222;
-			.line {
-				background-color: $uni-color-primary;
-			}
-		}
-	}
-	//
-	.card_list {
-		padding: 30rpx;
-		.card_title {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			margin-bottom: 22rpx;
-			.name {
-				display: flex;
-				align-items: center;
-				.icon {
-					width: 6rpx;
-					height: 32rpx;
-					background: $uni-color-primary;
-					border-radius: 4rpx;
-					margin-right: 16rpx;
-				}
-				.text {
-					font-weight: 600;
-					font-size: 32rpx;
-					color: #222222;
-				}
-			}
-			.meeting {
-				display: flex;
-				height: 52rpx;
-				line-height: 52rpx;
-				background: #ffffff;
-				border-radius: 26rpx;
-				border: 2rpx solid #eeeeee;
-				padding: 0 24rpx;
-				.text {
-					font-size: 24rpx;
-					color: #333333;
-				}
-			}
-		}
-		.list {
-			.item {
-				padding: 0rpx 30rpx 30rpx;
-				background: #ffffff;
-				border-radius: 8rpx;
-				.head {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					border-bottom: 1rpx solid #e5e5e5;
-					padding: 22rpx 0;
-					margin-bottom: 22rpx;
-					.name {
-						font-weight: 600;
-						font-size: 32rpx;
-						color: #222222;
-					}
-					.status {
-						height: 38rpx;
-						line-height: 38rpx;
-						padding: 0 16rpx;
-						border-radius: 4rpx;
-						border: 1rpx solid #999999;
-						font-size: 22rpx;
-						color: #999999;
-					}
-				}
-				.line {
-					display: flex;
-					margin-bottom: 12rpx;
-					.label {
-						width: 140rpx;
-						color: #666666;
-					}
-					.value {
-						flex: 1;
-					}
-				}
-			}
-		}
-	}
+  padding: 0;
+  background-color: #f7f7f7;
+  ::v-deep .uni-calendar-item--checked {
+    background-color: $uni-color-primary;
+    border-radius: 8rpx;
+  }
+  ::v-deep .uni-calendar-item--isDay-text {
+    color: $uni-color-primary;
+  }
+  ::v-deep .uni-calendar-item--isDay {
+    background-color: $uni-color-primary;
+    color: #fff;
+    border-radius: 8rpx;
+  }
+  .tabs {
+    display: flex;
+    background-color: #fff;
+    .tab {
+      flex: 1;
+      height: 88rpx;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      font-size: 28rpx;
+      color: #666666;
+      position: relative;
+      .line {
+        width: 60rpx;
+        height: 4rpx;
+        background: #fff;
+        border-radius: 3rpx;
+        position: absolute;
+        bottom: 0;
+        left: 50%;
+        transform: translate(-50%, 0);
+      }
+    }
+    .active {
+      font-weight: 500;
+      font-size: 30rpx;
+      color: #222222;
+      .line {
+        background-color: $uni-color-primary;
+      }
+    }
+  }
+  //
+  .card_list {
+    padding: 30rpx;
+    .card_title {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-bottom: 22rpx;
+      .name {
+        display: flex;
+        align-items: center;
+        .icon {
+          width: 6rpx;
+          height: 32rpx;
+          background: $uni-color-primary;
+          border-radius: 4rpx;
+          margin-right: 16rpx;
+        }
+        .text {
+          font-weight: 600;
+          font-size: 32rpx;
+          color: #222222;
+        }
+      }
+      .meeting {
+        display: flex;
+        height: 52rpx;
+        line-height: 52rpx;
+        background: #ffffff;
+        border-radius: 26rpx;
+        border: 2rpx solid #eeeeee;
+        padding: 0 24rpx;
+        .text {
+          font-size: 24rpx;
+          color: #333333;
+        }
+      }
+    }
+    .list {
+      .item {
+        padding: 0rpx 30rpx 30rpx;
+        background: #ffffff;
+        border-radius: 8rpx;
+        margin-bottom: 24rpx;
+        .head {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          border-bottom: 1rpx solid #e5e5e5;
+          padding: 22rpx 0;
+          margin-bottom: 22rpx;
+          .name {
+            font-weight: 600;
+            font-size: 32rpx;
+            color: #222222;
+          }
+          .status {
+            height: 38rpx;
+            line-height: 38rpx;
+            padding: 0 16rpx;
+            border-radius: 4rpx;
+            border: 1rpx solid #999999;
+            font-size: 22rpx;
+            color: #999999;
+          }
+          .padding {
+            color: $uni-color-primary;
+            border: 1rpx solid $uni-color-primary;
+          }
+          .red {
+            color: #e23f29;
+            border: 1rpx solid #e23f29;
+          }
+        }
+        .line {
+          display: flex;
+          margin-bottom: 12rpx;
+          .label {
+            width: 140rpx;
+            color: #666666;
+          }
+          .value {
+            flex: 1;
+          }
+        }
+      }
+    }
+  }
 }
 .container_b {
-	width: 100%;
-	padding: 30rpx;
-	background: #ffffff;
-	padding-top: 20rpx;
-	box-sizing: border-box;
+  width: 100%;
+  padding: 30rpx;
+  background: #ffffff;
+  padding-top: 20rpx;
+  box-sizing: border-box;
 }
 </style>
diff --git a/h5/pages/staff/meetingDetail.vue b/h5/pages/staff/meetingDetail.vue
index d2a52c6..d5a05e9 100644
--- a/h5/pages/staff/meetingDetail.vue
+++ b/h5/pages/staff/meetingDetail.vue
@@ -1,168 +1,244 @@
 <template>
-	<view class="main_app">
-		<view class="head_app">
-			<view class="title">璁ㄨ鏅鸿兘浼氳瀹ょ郴缁熼�夊瀷</view>
-			<view class="text">201浼氳瀹わ綔2023骞�5鏈�4鏃� 10:00-12:00</view>
-		</view>
-		<!--  -->
-		<view class="empty"></view>
-		<view class="module_list">
-			<view class="item">
-				<view class="label">浼氳鍐呭</view>
-				<view class="value">
-					<!-- <text>涓昏璁ㄨ鏅鸿兘浼氳瀹ょ郴缁熼�夊瀷锛岃澶у涓�瀹氳鎸夋椂鏉ュ紑浼氾紝鏃堕棿瀹濊吹銆傛劅璋㈠ぇ瀹讹紒</text> -->
-					<u-textarea border="none" v-model="param.aaa" count :maxlength="300" placeholder="璇疯緭鍏ヤ細璁唴瀹�" placeholder-class="placeholder9"	 />
-				</view>
-			</view>
-			<view class="item">
-				<view class="label">鍙備細浜哄憳</view>
-				<view class="value">
-					<view class="personnel">
-						<view class="per_item" v-for="i in 10">
-							<image src="../../static/logo@2x.png" class="avatar" mode=""></image>
-							<view class="name">鑳″叓涓�</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="item">
-				<view class="label">鏈嶅姟椤�</view>
-				<view class="value">甯崱 |  鎶曞奖浠� |  绗旇鏈數鑴�</view>
-			</view>
-			<view class="item">
-				<view class="label">澶囨敞</view>
-				<view class="value">浠婂ぉ浜哄锛岃鎸夋椂鍙傚姞</view>
-			</view>
-			<view class="item">
-				<view class="label">棰勭害浜�</view>
-				<view class="value">琛屾斂閮� 璧靛己 18832319899</view>
-			</view>
-		</view>
-		<view class="empty empty2"></view>
-		<view class="main_footer">
-			<view class="btn" @click="handleSub('0')">鎾ゅ洖</view>
-			<view class="btn agree" @click="handleSub('1')">淇敼</view>
-		</view>
-	</view>
+  <view class="main_app">
+    <view class="head_app">
+      <view class="title">{{ detail.meetingName }}</view>
+      <view class="text"
+        >{{ detail.roomName }}锝渰{ detail.meetingDate }}
+        {{ detail.meetingTime }}</view
+      >
+    </view>
+    <!--  -->
+    <view class="empty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">浼氳鍐呭</view>
+        <view class="value">
+          <!-- <text>涓昏璁ㄨ鏅鸿兘浼氳瀹ょ郴缁熼�夊瀷锛岃澶у涓�瀹氳鎸夋椂鏉ュ紑浼氾紝鏃堕棿瀹濊吹銆傛劅璋㈠ぇ瀹讹紒</text> -->
+          <u-textarea
+            border="none"
+            v-model="detail.meetingContent"
+            disabled
+            :maxlength="300"
+            placeholder="璇疯緭鍏ヤ細璁唴瀹�"
+            placeholder-class="placeholder9"
+          />
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鍙備細浜哄憳</view>
+        <view class="value">
+          <view class="personnel">
+            <view
+              class="per_item"
+              v-for="mem in detail.userResponseList"
+              :key="mem.id"
+            >
+              <image :src="mem.avatar" class="avatar" mode=""></image>
+              <view class="name">{{ mem.realname }}</view>
+            </view>
+          </view>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鏈嶅姟椤�</view>
+        <view class="value">
+          <template v-for="(ser, serI) in detail.projectsResponseList">
+            <text :key="ser.id">{{ ser.name }}</text>
+            <text
+              :key="ser.id"
+              class="mr12 ml12"
+              v-if="serI != detail.projectsResponseList.length - 1"
+            >
+              |
+            </text>
+          </template>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">澶囨敞</view>
+        <view class="value">{{ detail.remark || detail.meetingRemark }}</view>
+      </view>
+      <view class="item">
+        <view class="label">棰勭害浜�</view>
+        <view class="value"
+          >{{ detail.bookingUser.companyName || "" }}
+          {{ detail.bookingUser.realname }}
+          {{ detail.bookingUser.mobile }}</view
+        >
+      </view>
+    </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 agree" @click="handleEdit">淇敼</view>
+    </view>
+    <view class="main_footer" v-if="detail.meetingStatus == '2'">
+      <view class="btn agree" @click="handleSub('2')">缁撴潫</view>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				param: {}
-			};
-		},
-		methods: {
-			handleSub() {
-				
-			}
-		}
-	}
+import { meetingDetail, cancelById } from '@/api'
+export default {
+  data() {
+    return {
+      param: {},
+      detail: {},
+      id: ''
+    }
+  },
+  onLoad(option) {
+    this.id = option.id
+    this.getDetail()
+  },
+  methods: {
+    getDetail() {
+      const { id } = this
+      meetingDetail({ id }).then(res => {
+        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()
+                })
+              }
+            })
+          }
+        }
+      })
+
+    },
+    handleEdit() {
+      const { id } = this
+      uni.navigateTo({
+        url: `/pages/staff/meetingSubOrder?id=${id}`
+      })
+    },
+    handleSub() {
+
+    }
+  }
+}
 </script>
 
 <style lang="scss">
-	page{
-		background-color: #f7f7f7;
-	}
-	.main_app{
-		padding: 0 ;
-		.head_app{
-			padding: 30rpx;
-			background-color: #fff;
-			.title{
-				font-weight: 600;
-				font-size: 36rpx;
-				color: #222222;
-				margin-bottom: 30rpx;
-			}
-			.text{
-				font-size: 28rpx;
-				color: #666666;
-			}
-		}
-	}
-	.module_list {
-		background-color: #fff;
-		padding: 0 30rpx;
-		.item {
-			padding: 30rpx 0;
-			border-bottom: 1rpx solid #E5E5E5;
-	
-			.label {
-				font-size: 26rpx;
-				color: #666666;
-				margin-bottom: 20rpx;
-			}
-	
-			.value {
-				font-size: 30rpx;
-				display: flex;
-				align-items: center;
-				::v-deep textarea{
-					padding: 0;
-					background-color: #fff !important;
-				}
-				.personnel{
-					display: flex;
-					width: 100%;
-					overflow-x: auto;
-					.per_item{
-						flex-shrink: 0;
-							display: flex;
-							flex-direction: column;
-							justify-content: center;
-							align-items: center;
-							margin-right: 24rpx;
-							.avatar{
-								width: 72rpx;
-								height: 72rpx;
-								border-radius: 50%;
-							}
-							.name{
-								font-size: 26rpx;
-								color: #777777;
-							}
-					}
-				}
-			}
-		}
-	}
-	.main_footer {
-		padding-bottom: 64rpx;
-		display: flex;
-		justify-content: space-between;
-		position: fixed;
-		bottom: 0;
-		left: 0;
-		width: 100%;
-		background-color: #fff;
-		padding: 0 30rpx;
-		.btn {
-			width: 336rpx;
-			height: 88rpx;
-			line-height: 88rpx;
-			background: #FFFFFF;
-			border-radius: 44rpx;
-			border: 1rpx solid #999999;
-			font-size: 32rpx;
-			text-align: center;
-			margin: 16rpx 0;
-		}
-
-		.agree {
-			background: $uni-color-primary;
-			color: #fff;
-			border: 1rpx solid $uni-color-primary;
-		}
-	}
-.empty{
-	width: 750rpx;
-		height: 20rpx;
-		background-color: #f7f7f7;
-		margin: 0 -30rpx;
+page {
+  background-color: #f7f7f7;
 }
-.empty2{
-	height: 280rpx !important;
+.main_app {
+  padding: 0;
+  .head_app {
+    padding: 30rpx;
+    background-color: #fff;
+    .title {
+      font-weight: 600;
+      font-size: 36rpx;
+      color: #222222;
+      margin-bottom: 30rpx;
+    }
+    .text {
+      font-size: 28rpx;
+      color: #666666;
+    }
+  }
+}
+.module_list {
+  background-color: #fff;
+  padding: 0 30rpx;
+  .item {
+    padding: 30rpx 0;
+    border-bottom: 1rpx solid #e5e5e5;
+
+    .label {
+      font-size: 26rpx;
+      color: #666666;
+      margin-bottom: 20rpx;
+    }
+
+    .value {
+      font-size: 30rpx;
+      display: flex;
+      align-items: center;
+      ::v-deep textarea {
+        padding: 0;
+        background-color: #fff !important;
+      }
+      .personnel {
+        display: flex;
+        width: 100%;
+        overflow-x: auto;
+        .per_item {
+          flex-shrink: 0;
+          display: flex;
+          flex-direction: column;
+          justify-content: center;
+          align-items: center;
+          margin-right: 24rpx;
+          .avatar {
+            width: 72rpx;
+            height: 72rpx;
+            border-radius: 50%;
+          }
+          .name {
+            font-size: 26rpx;
+            color: #777777;
+          }
+        }
+      }
+    }
+  }
+}
+.main_footer {
+  padding-bottom: 64rpx;
+  display: flex;
+  justify-content: space-between;
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  background-color: #fff;
+  padding: 0 30rpx;
+  .btn {
+    flex: 1;
+    height: 88rpx;
+    line-height: 88rpx;
+    background: #ffffff;
+    border-radius: 44rpx;
+    border: 1rpx solid #999999;
+    font-size: 32rpx;
+    text-align: center;
+    margin: 16rpx 8rpx;
+  }
+
+  .agree {
+    background: $uni-color-primary;
+    color: #fff;
+    border: 1rpx solid $uni-color-primary;
+  }
+}
+.empty {
+  width: 750rpx;
+  height: 20rpx;
+  background-color: #f7f7f7;
+  margin: 0 -30rpx;
+}
+.empty2 {
+  height: 280rpx !important;
 }
 </style>
diff --git a/h5/pages/staff/meetingManager.vue b/h5/pages/staff/meetingManager.vue
index 21a04b5..3a75d64 100644
--- a/h5/pages/staff/meetingManager.vue
+++ b/h5/pages/staff/meetingManager.vue
@@ -1,66 +1,87 @@
 <template>
   <view class="main_app">
-    <!--  -->
-    <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
-    <!-- 鏃ュ巻 -->
-    <view class="container_b">
-      <Calendar
-        ref="Calendar"
-        :currentTime="currentDate"
-        :mark="mark"
-        :showLunar="false"
-        @dayChange="dayChange"
-        @monthChange="monthChange"
-        :rangeMode="false"
-        :maskColor="'#ffffff'"
-        :dateStart="dateStart"
-        :dateEnd="dateEnd"
-        :canDrag="false"
-      ></Calendar>
-    </view>
-    <!--  -->
-    <view class="card_list">
-      <view class="card_title">
-        <view class="name">
-          <view class="icon"></view>
-          <view class="text">浠婃棩浼氳</view>
-        </view>
-        <view class="meeting" @click="isShowStatus = true">
-          <view class="text mr24">{{ activeStatus.name }}</view>
-          <u-icon name="arrow-down" size="12" color="#999999" />
-        </view>
+    <template>
+      <!-- <uni-calendar @change="changeCalendar" :selected="selected" /> -->
+      <!-- 鏃ュ巻 -->
+      <view class="container_b">
+        <Calendar
+          ref="Calendar"
+          :currentTime="currentDate"
+          :mark="monthMark"
+          :showLunar="false"
+          @dayChange="dayChange"
+          @monthChange="monthChange"
+          :rangeMode="false"
+          :maskColor="'#ffffff'"
+          :dateStart="dateStart"
+          :dateEnd="dateEnd"
+          :canDrag="false"
+        ></Calendar>
       </view>
-      <view class="list">
-        <view class="item">
-          <view class="head">
-            <view class="name">aaaaa閫夊瀷</view>
-            <view class="status">鍗冲皢寮�濮�</view>
+      <!--  -->
+      <view class="card_list">
+        <view class="card_title">
+          <view class="name">
+            <view class="icon"></view>
+            <view class="text">浠婃棩浼氳</view>
           </view>
-          <view class="line">
-            <view class="label">浼氳鏃堕棿锛�</view>
-            <view class="value">12:00-12</view>
+          <view class="meeting">
+            <view class="text mr24" @click="isShowStatus = true">{{
+              activeRoom.name
+            }}</view>
+            <u-icon name="arrow-down" size="12" color="#999999" />
           </view>
-          <view class="line">
-            <view class="label">浼氳瀹わ細</view>
-            <view class="value">202浼氳瀹�</view>
-          </view>
-          <view class="line">
-            <view class="label">棰勭害浜猴細</view>
-            <view class="value">鏉ㄦ煇鏌�</view>
-          </view>
-          <view class="line">
-            <view class="label">澶囨敞锛�</view>
-            <view class="value">--</view>
+        </view>
+        <view class="list">
+          <view
+            @click="handleDetail(item.id)"
+            class="item"
+            v-for="item in myMeetingList"
+            :key="item.id"
+          >
+            <view class="head">
+              <view class="name">{{ item.meetingName }}</view>
+              <view class="status" v-if="item.meetingStatus == '1'"
+                >鏈紑濮�</view
+              >
+              <view class="status red" v-if="item.meetingStatus == '2'"
+                >杩涜涓�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '3'"
+                >宸茬粨鏉�</view
+              >
+              <view class="status padding" v-if="item.meetingStatus == '4'"
+                >鍗冲皢寮�濮�</view
+              >
+              <view class="status" v-if="item.meetingStatus == '5'"
+                >宸叉挙閿�</view
+              >
+            </view>
+            <view class="line">
+              <view class="label">浼氳鏃堕棿锛�</view>
+              <view class="value">{{ item.meetingTime }}</view>
+            </view>
+            <view class="line">
+              <view class="label">浼氳瀹わ細</view>
+              <view class="value">{{ item.roomName }}</view>
+            </view>
+            <view class="line">
+              <view class="label">棰勭害浜猴細</view>
+              <view class="value">{{ item.bookingUser }}</view>
+            </view>
+            <view class="line">
+              <view class="label">澶囨敞锛�</view>
+              <view class="value">{{ item.remark || item.meetingRemark }}</view>
+            </view>
           </view>
         </view>
       </view>
-    </view>
-
+    </template>
     <!--  -->
-		<u-picker
+    <u-picker
       keyName="name"
       :show="isShowStatus"
-      :columns="statusList"
+      :columns="meetingList"
       @confirm="seletedStatus"
       @cancel="isShowStatus = false"
     ></u-picker>
@@ -69,70 +90,100 @@
 
 <script>
 import Calendar from '@/components/Li-Calendar/Li-Calendar.vue'
-import dayjs from 'dayjs'
-import { myMeetingPage } from '@/api'
+import dayja from 'dayjs'
+import { myMeetingPage, monthMeetingPage, roomsListPost } from '@/api'
+function getDate(date, AddDayCount = 0) {
+  if (!date) {
+    date = new Date()
+  }
+  if (typeof date !== 'object') {
+    date = date.replace(/-/g, '/')
+  }
+  const dd = new Date(date)
 
+  dd.setDate(dd.getDate() + AddDayCount) // 鑾峰彇AddDayCount澶╁悗鐨勬棩鏈�
+
+  const y = dd.getFullYear()
+  const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 鑾峰彇褰撳墠鏈堜唤鐨勬棩鏈燂紝涓嶈冻10琛�0
+  const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 鑾峰彇褰撳墠鍑犲彿锛屼笉瓒�10琛�0
+  return {
+    fullDate: y + '-' + m + '-' + d,
+    year: y,
+    month: m,
+    date: d,
+    day: dd.getDay()
+  }
+}
 export default {
   components: {
     Calendar
   },
   data() {
     return {
+      activeTab: '0',
+      recordList: [],
+      recordPage: 1,
+      myPage: 1,
+      myMeetingList: [],
       currentDate: '',
-      dateStart: '2024-01-01',
+      dateStart: '1999-05-01',
       dateEnd: '2999-06-15',
-			mark: [
-				{
-					time: '2024-05-30'
-				},
-				{
-					time: '2024-05-22',
-					pointText: 'aaa',
-					pointTextColor: '#fff'
-				},
-				{
-					time: '2024-05-28',
-					text: ['111','222'],
-					pointTextColor: '#fff'
-				}
-			],
-			activeStatus: {
-				name: '鍏ㄩ儴浼氳瀹�'
-			},
-			isShowStatus: false,
-			statusList: [[
-				{ name: '鍏ㄩ儴浼氳瀹�', key: '' },
-				{ name: '鏈紑濮�', key: '1' },
-				{ name: '宸茬粨鏉�', key: '2' },
-			]],
-			dataList: [],
-			page: 1
+      monthMark: [],
+
+      isShowStatus: false,
+      activeRoom: {
+        name: '鍏ㄩ儴浼氳瀹�',
+        id: ''
+      },
+      meetingList: [],
+
     }
   },
   onLoad() {
-		this.currentDate = dayjs().format('YYYY-MM-DD')
-		this.getList()
+    this.currentDate = dayja().format('YYYY-MM-DD')
+    this.initData()
+    this.getRoomList()
+  },
+	onShow() {
+		this.myPage = 1
+    this.myMeetingList = []
+    this.getDayMeeting()
+	},
+  onReachBottom() {
+    this.myPage = this.myPage + 1
+      this.getDayMeeting()
   },
   methods: {
-    getList() {
-			const { activeStatus } = this
-      myMeetingPage({
-        capacity: 10,
-        page: this.page,
-        model: {
-          queryDate: this.currentDate,
-					status: activeStatus.key || null,
-          // roomsId: this.roomId,
-          queryType: 1
-        }
+    initData() {
+      // 褰撴湀鏁版嵁
+      monthMeetingPage({
+        yearMonth: this.currentDate.slice(0, 7)
       }).then(res => {
-				this.dataList = res.data.records
-			})
+        this.monthMark = res.data.filter(i => i.meetingNum > 0).map(j => {
+          return {
+            time: j.monthDate,
+            pointText: j.meetingNum,
+            pointTextColor: 'red'
+          }
+        })
+      })
     },
-    handleDetail(item) {
+		getRoomList() {
+      roomsListPost({}).then(res => {
+        this.meetingList = [[{ id: '', name: '鍏ㄩ儴浼氳瀹�' }, ...res.data]]
+				console.log('meetingList', this.meetingList);
+      })
+    },
+    seletedStatus(e) {
+			this.myMeetingList = []
+      this.activeRoom = { ...e.value[0] }
+      this.isShowStatus = false
+      this.getDayMeeting()
+    },
+    handleDetail(id) {
       uni.navigateTo({
-        // url: `/pages/staff/meetingDetail?id=${item.id}`,
-        url: `/pages/staff/meetingDetail`
+        url: `/pages/staff/meetingDetail?id=${id}`,
+        // url: `/pages/staff/meetingDetail`
       })
     },
     changeCalendar(e) {
@@ -140,7 +191,6 @@
     },
     // 鐐瑰嚮鏌愬ぉ
     dayChange(data) {
-      console.log(data)
       let date = data.time
       let yyyy = data.time.substring(0, 4)
       let mm = Number(data.time.substring(data.time.indexOf('-') + 1, data.time.lastIndexOf('-')))
@@ -148,11 +198,14 @@
       mm = mm < 10 ? `0${mm}` : mm
       dd = dd < 10 ? `0${dd}` : dd
       let riqi = `${yyyy}-${mm}-${dd}`
-      this.currentTime = riqi
-      this.list = []
-      this.next = false
-      this.page = 0
-      // this.getRoomList()
+      this.currentDate = riqi
+      this.myMeetingList = []
+      this.activeStatus = {
+        name: '鍏ㄩ儴浼氳瀹�',
+        key: ''
+      }
+      this.myPage = 1
+      this.getDayMeeting()
     },
     // 涓嬩竴鏈�
     monthChange(data) {
@@ -164,14 +217,25 @@
       dd = dd < 10 ? `0${dd}` : dd
       let riqi = `${yyyy}-${mm}-${dd}`
       console.log('鏃ユ湡', riqi)
-      this.currentTime1 = riqi
-      // this.getDateNum()
+      this.currentDate = riqi
+      this.initData()
     },
-		seletedStatus(e) {
-			this.activeStatus = { ...e.value[0] }
-			this.isShowStatus = false
-			this.getList()
-		},
+
+    getDayMeeting() {
+      const { myPage, activeRoom, currentDate } = this
+      // 褰撳ぉ鎴戝弬涓庣殑浼氳
+      myMeetingPage({
+        model: {
+          queryType: '1',
+          roomsId: activeRoom.id,
+          queryDate: currentDate
+        },
+        page: myPage,
+        capacity: 10
+      }).then(res => {
+        this.myMeetingList = [ ...this.myMeetingList, ...res.data.records ]
+      })
+    },
   }
 };
 </script>
@@ -190,10 +254,6 @@
   ::v-deep .uni-calendar-item--isDay-text {
     color: $uni-color-primary;
   }
-	::v-deep .calendar-point {
-    /* background-color: $uni-color-primary; */
-  }
-	
   ::v-deep .uni-calendar-item--isDay {
     background-color: $uni-color-primary;
     color: #fff;
@@ -274,6 +334,7 @@
         padding: 0rpx 30rpx 30rpx;
         background: #ffffff;
         border-radius: 8rpx;
+        margin-bottom: 24rpx;
         .head {
           display: flex;
           justify-content: space-between;
@@ -295,6 +356,14 @@
             font-size: 22rpx;
             color: #999999;
           }
+          .padding {
+            color: $uni-color-primary;
+            border: 1rpx solid $uni-color-primary;
+          }
+          .red {
+            color: #e23f29;
+            border: 1rpx solid #e23f29;
+          }
         }
         .line {
           display: flex;
diff --git a/h5/pages/staff/meetingSub.vue b/h5/pages/staff/meetingSub.vue
index fd13806..c33f1b5 100644
--- a/h5/pages/staff/meetingSub.vue
+++ b/h5/pages/staff/meetingSub.vue
@@ -67,18 +67,18 @@
     >
       <view class="detail_modal">
         <view class="title">浼氳瀹ら绾︽儏鍐�</view>
-        <view class="h1">璁ㄨxxxxx閫夊瀷</view>
+        <view class="h1">{{ activeInfo.meetingName }}</view>
         <view class="line">
           <view class="label">浼氳鏃堕棿</view>
-          <view class="value">00000</view>
+          <view class="value">{{ activeInfo.meetingTime }}</view>
         </view>
         <view class="line">
           <view class="label">浼氳瀹�</view>
-          <view class="value">00000</view>
+          <view class="value">{{ activeInfo.roomName }}</view>
         </view>
         <view class="line">
           <view class="label">棰勭害浜�</view>
-          <view class="value">00000</view>
+          <view class="value">{{ activeInfo.bookingUserName }}</view>
         </view>
         <view class="btn" @click="isShowDetail = false">鍏抽棴</view>
       </view>
@@ -101,6 +101,7 @@
       },
 			selDatetime: '',
       isShowDetail: false,
+      activeInfo: {},
       meetingList: [],
       timeList: [],
 
@@ -140,9 +141,10 @@
 			const obj = {
 				startTime: selTimeList[0].startTime,
 				endTime: selTimeList[selTimeList.length - 1].endTime,
+        bookingTimeList: selTimeList.map(i=>i.id).join(',')
 			}
 			uni.navigateTo({
-				url: `/pages/staff/meetingSubOrder?yudingDate=${activeRoom.yudingDate}&roomName=${activeRoom.roomName}&roomId=${activeRoom.roomId}&startTime=${obj.startTime}&endTime=${obj.endTime}`
+				url: `/pages/staff/meetingSubOrder?yudingDate=${activeRoom.yudingDate}&roomName=${activeRoom.roomName}&roomId=${activeRoom.roomId}&startTime=${obj.startTime}&endTime=${obj.endTime}&bookingTimeList=${obj.bookingTimeList}`
 			})
       // this.$jump('/pages/staff/vehicle/apply')
     },
@@ -169,11 +171,11 @@
       })
     },
     datetimeClick(item, index) {
-      if (item.isUse == '1') return
-			if(item.isChoose){
-				this.getDetail(item.id)
+      if(item.bookingTimeId){
+				this.getDetail(item.bookingTimeId)
 				return
 			}
+      if (item.isUse == '1') return
       const { timeList } = this
       const selTimeList = timeList.filter(i => i.checked == '1')
       if (selTimeList.length === 0) {
@@ -229,7 +231,10 @@
 		getDetail(id) {
 			meetingDetail({
 				id
-			})
+			}).then(res => {
+        this.activeInfo = res.data
+        this.isShowDetail = true
+      })
 		},
   }
 }
diff --git a/h5/pages/staff/meetingSubOrder.vue b/h5/pages/staff/meetingSubOrder.vue
index 7180c9a..18d5a41 100644
--- a/h5/pages/staff/meetingSubOrder.vue
+++ b/h5/pages/staff/meetingSubOrder.vue
@@ -5,7 +5,9 @@
         <view class="name">浼氳鏃堕棿</view>
         <view class="line">
           <view class="label">
-            {{ param.activeDate }} {{ param.startTime }}-{{ param.endTime }}
+            {{ param.activeDate || param.meetingDate }} 
+            <text class="ml12" v-if="!param.id">{{ param.startTime }}-{{ param.endTime }}</text>
+            <text class="ml12" v-if="param.id">{{ param.meetingTime }}</text>
           </view>
           <u-icon name="arrow-right" color="#999999" size="14" />
         </view>
@@ -60,8 +62,8 @@
         <view class="line" @click="selPeople">
           <view class="label">
             <text v-if="param.sysList && param.sysList.length > 0">
-							{{ param.sysList.map(i=>i.realname).join(',') }}
-						</text>
+              {{ param.sysList.map((i) => i.realname).join(",") }}
+            </text>
             <text
               v-else
               class="placeholder9"
@@ -83,10 +85,10 @@
           <view class="label">
             <view
               class="service_item"
-							:class="{active: item.checked}"
+              :class="{ active: item.checked }"
               v-for="(item, index) in info.projectList"
               :key="index"
-							@click="serviceClick(item)"
+              @click="serviceClick(item)"
             >
               {{ item.projectName }}
             </view>
@@ -108,7 +110,8 @@
         </view>
       </view>
 
-      <view class="sub_btn" @click="onSubmit"> 纭棰勭害 </view>
+      <view v-if="param.id" class="sub_btn" @click="onUpdate">纭淇敼</view>
+      <view v-else class="sub_btn" @click="onSubmit"> 纭棰勭害 </view>
     </view>
   </view>
 </template>
@@ -116,7 +119,10 @@
 <script>
 import {
   reservationMeeting,
-  getRoomDetail
+  getRoomDetail,
+  meetingDetail,
+  updateById,
+  getAppRoomDetail
 } from '@/api'
 import dayjs from 'dayjs'
 export default {
@@ -124,68 +130,141 @@
     return {
       param: {},
       userInfo: uni.getStorageSync('userInfo'),
-			info: {},
+      info: {},
     }
   },
   onLoad(option) {
-    this.param = { ...option }
-    this.$set(this.param, 'activeDate', dayjs(option.yudingDate).format('YYYY骞碝鏈圖鏃�'))
-		this.initOption()
+    if (option.id) {
+      uni.setNavigationBarTitle({
+        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() {
+  mounted() {
     this.$eventBus.$on('meetingPeo', (res) => {
-      this.$set(this.param, 'sysList', res)
+      this.$set(this.param, 'sysList', res.map(i => {
+        i.userId = i.id
+        return i
+      }))
       // this.$set(this.param, 'memberIds', res.map(i => i.id).join(','))
       // this.$set(this.param, 'memberNames', res.map(i => i.name).join(','))
     })
   },
   methods: {
-		onSubmit() {
-			const { param, info } = this
-			if (!param.name) return uni.showToast({
+    getDetail(id) {
+      meetingDetail({ id }).then(res => {
+        this.param = { ...res.data,name: res.data.meetingName, content: res.data.meetingContent, sysList: res.data.userResponseList }
+        // this.param = { ...res.data }
+        if(this.param.sysList && this.param.sysList.length > 0){
+          this.param.sysList.forEach(i => {
+            i.userId = i.id
+          })
+        }
+        getRoomDetail({ roomId: res.data.roomId }).then(ress => {
+          this.info = ress.data
+          if (this.info && this.info.projectList) {
+            this.info.projectList.forEach(i => {
+              i.checked = false
+              if(res.data.projectsResponseList && res.data.projectsResponseList.length > 0){
+                res.data.projectsResponseList.forEach(item2 => {
+                  if(i.projectId === item2.id){
+                    i.checked = true
+                  }
+                })
+              }
+            })
+          }
+        })
+      })
+    },
+    onUpdate() {
+      const { param, info } = this
+      if (!param.name) return uni.showToast({
         title: '璇疯緭鍏ヤ細璁富棰�',
         icon: 'none'
       })
-			reservationMeeting({
-				...param,
-				startTime: `${param.yudingDate} ${param.startTime}:00`,
-				endTime: `${param.yudingDate} ${param.endTime}:00`,
-				projectList: info.projectList.filter(i => i.checked),
-			}).then(res => {
-				if(res.code === 200){
-
-				}
-			})
-		},
+      reservationMeeting({
+        ...param,
+        projectList: info.projectList.filter(i => i.checked),
+      }).then(res => {
+        if (res.code === 200) {
+          setTimeout(() => {
+            uni.showToast({
+              title: '淇敼鎴愬姛',
+              icon: 'success',
+              duration: 2000
+            })
+          })
+          uni.redirectTo({
+            url: '/pages/staff/index'
+          })
+        }
+      })
+    },
+    onSubmit() {
+      const { param, info } = this
+      if (!param.name) return uni.showToast({
+        title: '璇疯緭鍏ヤ細璁富棰�',
+        icon: 'none'
+      })
+      reservationMeeting({
+        ...param,
+        startTime: `${param.yudingDate} ${param.startTime}:00`,
+        endTime: `${param.yudingDate} ${param.endTime}:00`,
+        projectList: info.projectList.filter(i => i.checked),
+      }).then(res => {
+        if (res.code === 200) {
+          setTimeout(() => {
+            uni.showToast({
+              title: '棰勭害鎴愬姛',
+              icon: 'success',
+              duration: 2000
+            })
+          })
+          uni.redirectTo({
+            url: '/pages/staff/index'
+          })
+        }
+      })
+    },
     selPeople() {
-			const { param } = this
-			let startTime = param.yudingDate + ' ' + param.startTime
-			let endTime = param.yudingDate + ' ' + param.endTime
+      const { param } = this
+      let startTime = param.yudingDate + ' ' + param.startTime
+      let endTime = param.yudingDate + ' ' + param.endTime
       uni.navigateTo({
         url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}`
       })
     },
-		serviceClick(item) {
-			const { info } = this
-			info.projectList.forEach(ite => {
-				if(ite.projectId === item.projectId){
-					ite.checked = !ite.checked
-				}
-			})
-			this.$forceUpdate()
-		},
+    serviceClick(item) {
+      const { info } = this
+      info.projectList.forEach(ite => {
+        if (ite.projectId === item.projectId) {
+          ite.checked = !ite.checked
+        }
+      })
+      this.$forceUpdate()
+    },
     initOption() {
-			const roomId = Number(this.param.roomId)
+      const roomId = Number(this.param.roomId)
       getRoomDetail({ roomId }).then(res => {
-        res.data.projectList.forEach(item => {
-          item.active = false
-        })
         this.info = res.data
-				if(this.info && this.info.projectList){
-					this.info.projectList.forEach(i => {
-						i.checked = false
-					})
-				}
+        if (this.info && this.info.projectList) {
+          this.info.projectList.forEach(i => {
+            i.checked = false
+
+          })
+        }
       })
     }
   }
@@ -215,10 +294,10 @@
           padding: 0 24rpx;
           margin-right: 20rpx;
         }
-				.active{
-					background-color: #4d99a8;
-					color: #fff;
-				}
+        .active {
+          background-color: #4d99a8;
+          color: #fff;
+        }
       }
     }
   }
diff --git a/h5/pages/staff/memberSel.vue b/h5/pages/staff/memberSel.vue
index ee96a16..2e2dc60 100644
--- a/h5/pages/staff/memberSel.vue
+++ b/h5/pages/staff/memberSel.vue
@@ -116,10 +116,8 @@
 			console.log( e.detail.value[0]);
 			const id = Number(e.detail.value[0])
 			const item = this.memberList.find(i => i.id === id)
-			console.log('item', item);
-			uni.navigateTo({
-				url: `/pages/staff/snapshot?id=${item.id}&name=${item.name}`
-			})
+      this.$eventBus.$emit('snapshotSel', item)
+			uni.navigateBack()
     },
     initData() {
       const { param } = this
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index 9b8a315..a72a86b 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -55,23 +55,32 @@
             class="adduser_list_item_ipt1_upload"
             v-for="(item, i) in submitFileList"
             :key="i"
-            ><image :src="item.fileurlFull" mode="widthFix"></image
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video
+              v-if="item.type == 1"
+              :src="item.fileurlFull"
+            ></video
           ></view>
         </view>
       </view>
       <view class="empty"></view>
-       <view class="upload_line" style="padding: 15px 0 0;">
-        <view class="name" style="margin-bottom: 10rpx;">
-          <text style="color: #e42d2d;">*</text>
+      <view class="upload_line" style="padding: 15px 0 0">
+        <view class="name" style="margin-bottom: 10rpx">
+          <text style="color: #e42d2d">*</text>
           <text>鎯呭喌璇存槑</text>
         </view>
-        <view class="value"
-          ><textarea
+        <view class="value">
+          <textarea
             placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧"
             minlength="10"
             v-model="param.content"
             placeholder-style="color: #999999;"
-        /></view>
+          />
+        </view>
       </view>
       <view class="empty"></view>
       <view class="line">
@@ -184,17 +193,19 @@
     }
   },
   onLoad(option) {
-    if (option && option.id) {
-      this.$set(this.param, 'checkUserId', option.id)
-      this.$set(this.param, 'applyCheckUserId', option.id)
-      this.$set(this.param, 'checkorName', option.name)
-    }
     this.initConfig()
     const userInfo = uni.getStorageSync('userInfo') || {}
     this.$set(this.param, 'memberName', userInfo.realname)
     this.$set(this.param, 'memberPhone', userInfo.mobile)
     this.$set(this.param, 'memberId', userInfo.id)
     this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+  },
+  mounted() {
+    this.$eventBus.$on('snapshotSel', (option) => {
+      this.$set(this.param, 'checkUserId', option.id)
+      this.$set(this.param, 'applyCheckUserId', option.id)
+      this.$set(this.param, 'checkorName', option.name)
+    })
   },
   methods: {
     onSubmit() {
@@ -258,7 +269,7 @@
     uploadImage() {
       this.showUpload = false
       uni.chooseImage({
-        count: 6,
+        count: 1,
         success: (chooseImageRes) => {
           console.log('chooseImageRes.tempFilePaths', chooseImageRes.tempFilePaths)
           uni.showLoading({ title: '涓婁紶涓�', mask: true })
@@ -296,30 +307,27 @@
       uni.chooseVideo({
         success: (chooseImageRes) => {
           uni.showLoading({ title: '涓婁紶涓�', mask: true })
-          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
-            uni.uploadFile({
-              url: `${uploadUrl}`,
-              filePath: chooseImageRes.tempFilePaths[i],
-              name: 'file',
-              formData: {
-                folderCode: 'HIDDEN_DANGER_FILE'
-              },
-              success: (uploadFileRes) => {
-                let res = JSON.parse(uploadFileRes.data)
-                console.log('uploadFileRes', res)
-                let obj = { type: '1' }
-                obj.fileurl = res.data.halfPath
-                obj.fileurlFull = res.data.addr
-                that.submitFileList.push(obj)
-                console.log(that.submitFileList)
-              },
-              complete() {
-                if (i === chooseImageRes.tempFilePaths.length - 1) {
-                  uni.hideLoading()
-                }
+          uni.uploadFile({
+            url: `${uploadUrl}`,
+            filePath: chooseImageRes.tempFilePath,
+            name: 'file',
+            formData: {
+              folderCode: 'HIDDEN_DANGER_FILE'
+            },
+            success: (uploadFileRes) => {
+              let res = JSON.parse(uploadFileRes.data)
+              console.log('res', res)
+              let obj = {
+                type: '1'
               }
-            })
-          }
+              obj.fileurl = res.data.halfPath
+              obj.fileurlFull = res.data.addr
+              this.submitFileList.push(obj)
+            },
+            complete() {
+              uni.hideLoading()
+            }
+          })
         }
       })
     },
@@ -366,7 +374,7 @@
   }
   .upload_line {
     padding: 30rpx 0;
-    .wrap{
+    .wrap {
       display: flex;
       flex-wrap: wrap;
     }
@@ -387,6 +395,9 @@
         width: 100%;
         height: 100%;
       }
+      video {
+        width: 100%;
+      }
     }
   }
 }
diff --git a/h5/pages/staff/task/index.vue b/h5/pages/staff/task/index.vue
index b9ed742..8410340 100644
--- a/h5/pages/staff/task/index.vue
+++ b/h5/pages/staff/task/index.vue
@@ -4,62 +4,128 @@
       <view class="box_head_search">
         <view class="box_head_search_ipt">
           <image src="@/static/n/ic_search@2x.png" mode="widthFix"></image>
-          <input type="text" placeholder="鎼滅储浠诲姟鍚嶇О" />
+          <input
+            v-model="search.title"
+            @blur="querylist"
+            type="text"
+            placeholder="鎼滅储浠诲姟鍚嶇О"
+          />
         </view>
-        <view class="box_head_search_sha" @click="show = true">
+        <view class="box_head_search_sha" @click="showFilter = true">
           <image src="@/static/n/ic_shaixuan@2x.png" mode="widthFix"></image>
           <text>绛涢��</text>
         </view>
       </view>
       <view class="box_head_list">
-        <view class="box_head_item active">寰呭鐞� 12</view>
-        <view class="box_head_item">宸插鐞�</view>
-        <view class="box_head_item">鎴戝彂璧风殑</view>
-        <view class="box_head_item">鎶勯�佹垜鐨�</view>
+        <view
+          @click="statusClick(0)"
+          :class="{ active: search.queryType === 0 }"
+          class="box_head_item"
+          >寰呭鐞� {{ headData.noticeWaitNum }}</view
+        >
+        <view
+          @click="statusClick(1)"
+          :class="{ active: search.queryType === 1 }"
+          class="box_head_item"
+          >宸插鐞� {{ headData.noticeDealNum }}</view
+        >
+        <view
+          @click="statusClick(2)"
+          :class="{ active: search.queryType === 2 }"
+          class="box_head_item"
+          >鎴戝彂璧风殑 {{ headData.noticeCreateNum }}</view
+        >
+        <view
+          @click="statusClick(3)"
+          :class="{ active: search.queryType === 3 }"
+          class="box_head_item"
+          >鎶勯�佹垜鐨� {{ headData.noticeCopyNum }}</view
+        >
       </view>
     </scroll-view>
     <view class="box_list">
-      <view class="box_list_item" v-for="(item, index) in 3" :key="index">
+      <view class="chaosong" v-if="search.queryType === 3">
+        <view class="left">
+          <image
+            @click="readySearch(0)"
+            v-if="search.noRead && search.noRead == 1"
+            src="@/static/meeting/icon/ic_choose_sel@2x.png"
+            class="checked"
+          />
+          <image
+            @click="readySearch(1)"
+            v-else
+            src="@/static/meeting/icon/ic_choose@2x.png"
+            class="checked"
+          />
+          <text>浠呯湅鏈</text>
+        </view>
+        <view class="right">鍏ㄩ儴鏍囪宸茶</view>
+      </view>
+      <view
+        class="box_list_item"
+        v-for="(item, index) in dataList"
+        :key="index"
+      >
         <view class="box_list_item_head">
-          <text>涓佹仼鍑殑鍔冲姟鍏ュ巶鐢宠</text>
-          <text class="loading">寰呭鏍�</text>
+          <view class="df_ac">
+            <text v-if="item.readed == 0" class="readed"></text>
+            <text class="tt">{{ item.title }}</text>
+          </view>
+          <view class="info loading">{{ item.info }}</view>
         </view>
         <view class="box_list_item_nr">
-          <view class="box_list_item_nr_item">
-            <text>琚闂汉锛�</text>
-            <text>浜轰簨閮�-鐜嬩簹钃�</text>
+          <view v-if="item.param1.name" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.name }}</text>
           </view>
-          <view class="box_list_item_nr_item">
-            <text>杩涘巶鏃堕棿锛�</text>
-            <text>12-12 09:00</text>
+          <view v-if="item.param1.area" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.area }}</text>
           </view>
-          <view class="box_list_item_nr_item">
-            <text>绂诲巶鏃堕棿锛�</text>
-            <text>12-12 12:00</text>
+          <view v-if="item.param1.cate" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.cate }}</text>
           </view>
-          <view class="box_list_item_nr_item">
-            <text>鏉ヨ浜嬬敱锛�</text>
-            <text>涓氬姟鏉ュ線</text>
+          <view v-if="item.param1.sTime" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.sTime }}</text>
           </view>
-          <view class="box_list_item_nr_item">
-            <text>闅忚杞﹁締锛�</text>
-            <text>鐨朅88888</text>
+          <view v-if="item.param1.eTime" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.eTime }}</text>
+          </view>
+          <view v-if="item.param1.usrNum" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.usrNum }}</text>
+          </view>
+          <view v-if="item.param1.reason" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.reason }}</text>
+          </view>
+          <view v-if="item.param1.carNos" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.carNos }}</text>
+          </view>
+          <view v-if="item.param1.mdd" class="box_list_item_nr_item">
+            <text></text>
+            <text>{{ item.param1.mdd }}</text>
           </view>
           <view class="box_list_item_nr_x"></view>
           <view class="box_list_item_nr_text">
-            <text class="time">2023-12-12 09:00鎻愪氦</text>
-            <text class="btn" @click="handleAppr()">鍘诲鐞�</text>
+            <text class="time">{{ item.createDate }}鎻愪氦</text>
+            <text class="btn" @click="handleAppr(item)">鍘诲鐞�</text>
           </view>
         </view>
       </view>
     </view>
     <!-- 绛涢�� -->
     <u-popup
-      :show="show"
+      :show="showFilter"
       mode="bottom"
       :round="10"
       :closeable="true"
-      @close="show = false"
+      @close="showFilter = false"
     >
       <view class="search">
         <view class="search_head">浠诲姟绛涢��</view>
@@ -70,15 +136,19 @@
               <view
                 class="search_list_item_val_row"
                 @click="tiemShow = true"
-                :style="{ color: search.startTime ? '#000' : '' }"
-                >{{ search.startTime ? search.startTime : "寮�濮嬫棩鏈�" }}</view
+                :style="{ color: modelParam.startDate ? '#000' : '' }"
+                >{{
+                  modelParam.startDate ? modelParam.startDate : "寮�濮嬫棩鏈�"
+                }}</view
               >
               <view class="search_list_item_val_z">-</view>
               <view
                 class="search_list_item_val_row"
                 @click="tiemShow1 = true"
-                :style="{ color: search.endTime ? '#000' : '' }"
-                >{{ search.endTime ? search.endTime : "缁撴潫鏃ユ湡" }}</view
+                :style="{ color: modelParam.endDate ? '#000' : '' }"
+                >{{
+                  modelParam.endDate ? modelParam.endDate : "缁撴潫鏃ユ湡"
+                }}</view
               >
             </view>
           </view>
@@ -87,11 +157,11 @@
             <view class="search_list_item_cates">
               <view
                 :class="
-                  index === i
+                  item.id === modelParam.type
                     ? 'search_list_item_cates_row active'
                     : 'search_list_item_cates_row'
                 "
-                v-for="(item, index) in cate"
+                v-for="(item, index) in cateList"
                 :key="index"
                 @click="clickItem(index)"
               >
@@ -101,22 +171,24 @@
           </view>
         </view>
         <view class="search_footer">
-          <view class="search_footer_item" @click="show = false">鍙栨秷</view>
-          <view class="search_footer_item t">鎻愪氦</view>
+          <view class="search_footer_item" @click="showFilter = false"
+            >鍙栨秷</view
+          >
+          <view class="search_footer_item t" @click="modalSub">鎻愪氦</view>
         </view>
       </view>
     </u-popup>
     <u-datetime-picker
       :show="tiemShow"
-      v-model="time"
-      mode="datetime"
+      v-model="modelParam.startDate"
+      mode="date"
       @confirm="confirmLeft"
       @cancel="tiemShow = false"
     ></u-datetime-picker>
     <u-datetime-picker
       :show="tiemShow1"
-      v-model="time1"
-      mode="datetime"
+      v-model="modelParam.endDate"
+      mode="date"
       @confirm="confirmRight"
       @cancel="tiemShow1 = false"
     ></u-datetime-picker>
@@ -124,57 +196,136 @@
 </template>
 
 <script>
-import { taskCenter } from '@/api'
+import { stagingHead, stagingTaskPage } from '@/api'
+import dayjs from 'dayjs'
 export default {
   data() {
     return {
-      show: false,
+      showFilter: false,
+      search: {
+        queryType: 0
+      },
+      modelParam: {
+        startDate: dayjs().format('YYYY-MM-DD'),
+        endDate: dayjs().format('YYYY-MM-DD'),
+      },
       tiemShow: false,
       tiemShow1: false,
-      time: '',
-      i: null,
-      time: '',
-      time1: '',
-      search: {
-        startTime: '',
-        endTime: ''
+
+      pagination: {
+        capacity: 20,
+        page: 0
       },
-      pagination: {},
+      headData: {},
       dataList: [],
-      cate: [
-        { name: '璁垮鐢宠', id: 1 },
-        { name: '鍔冲姟鐢宠', id: 2 },
-        { name: '鐢ㄨ溅鐢宠', id: 3 }
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 },
       ]
     }
   },
   onLoad() {
+    this.getHeadList()
+    this.pagination.page = 0
+    this.getList()
+  },
+  onReachBottom() {
+    // this.pagination.page = 0
+    // this.dataList = []
+    this.getList()
+  },
+  onShow() {
+    this.pagination.page = 0
+    this.dataList = []
+    this.getHeadList()
     this.getList()
   },
   methods: {
+    statusClick(val) {
+      this.pagination.page = 0
+      this.dataList = []
+      this.$set(this.search, 'queryType', val)
+      this.getList()
+    },
+    readySearch(val) {
+      this.pagination.page = 0
+      this.dataList = []
+      this.$set(this.search, 'noRead', val)
+      this.getList()
+    },
+    modalSub() {
+      this.search = { ...this.search, ...this.modelParam }
+      this.pagination.page = 0
+      this.dataList = []
+      this.getList()
+      this.showFilter = false
+    },
+    querylist() {
+      this.pagination.page = 0
+      this.dataList = []
+      this.getList()
+    },
     getList() {
-      const { pagination } = this
-      taskCenter({
-        model: {}
+      const { pagination, search } = this
+      pagination.page++
+      stagingTaskPage({
+        ...pagination,
+        model: {
+          ...search
+        }
       }).then(res => {
-        this.dataList = res.data.records
+        this.dataList = [...this.dataList, ...res.data.records]
+        this.dataList.forEach(i => {
+          i.param1 = JSON.parse(i.param1)
+        })
+        console.log('dataList', this.dataList)
+      })
+    },
+    getHeadList() {
+      stagingHead({
+        isDetail: '1'
+      }).then(res => {
+        this.headData = res.data
       })
     },
     handleAppr(item) {
-      uni.navigateTo({
-        url: '/pages/staff/task/visitorApprove'
-      })
+      const { objType, objId } = item
+      if (objType === 2) {
+        uni.navigateTo({
+          url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&appr=1`
+        })
+      } else if (objType === 1) {
+        uni.navigateTo({
+          url: `/pages/staff/task/visitorReport?id=${objId}&objType=${objType}`
+        })
+      } else if (objType === 3) {
+        uni.navigateTo({
+          url: `/pages/staff/task/vDangetAppr?id=${objId}&objType=${objType}`
+        })
+      } else {
+        uni.navigateTo({
+          url: `/pages/staff/task/visitorApprove?id=${objId}&objType=${objType}`
+        })
+      }
     },
     clickItem(index) {
-      this.i = index
+      this.$set(this.modelParam, 'type', this.cateList[index].id)
     },
     confirmLeft(e) {
-      console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss'))
-      this.search.startTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      console.log(uni.$u.timeFormat(e.value, 'yyyy-mm-dd'))
+      setTimeout(() => {
+        this.modelParam.startDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
+      })
       this.tiemShow = false
     },
     confirmRight(e) {
-      this.search.endTime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM:ss')
+      // 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.tiemShow1 = false
     }
   }
@@ -275,6 +426,23 @@
     width: 100%;
     padding: 30rpx;
     box-sizing: border-box;
+    .chaosong {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      color: #666666;
+      font-size: 24rpx;
+      margin-bottom: 20rpx;
+      .left {
+        display: flex;
+        align-items: center;
+        .checked {
+          width: 32rpx;
+          height: 32rpx;
+          margin-right: 10rpx;
+        }
+      }
+    }
     .box_list_item {
       width: 100%;
       margin-bottom: 20rpx;
@@ -291,6 +459,12 @@
         display: flex;
         align-items: center;
         justify-content: space-between;
+        .readed {
+          width: 12rpx;
+          height: 12rpx;
+          border-radius: 50%;
+          background-color: #e0312a;
+        }
         .loading {
           color: #4c99a8;
         }
@@ -300,16 +474,14 @@
         .error {
           color: #e0312a;
         }
-        text {
-          &:nth-child(1) {
-            font-size: 32rpx;
-            font-weight: 500;
-            color: #222222;
-          }
-          &:nth-child(2) {
-            font-size: 26rpx;
-            font-weight: 400;
-          }
+        .tt {
+          font-size: 32rpx;
+          font-weight: 500;
+          color: #222222;
+        }
+        .info {
+          font-size: 26rpx;
+          font-weight: 400;
         }
       }
       .box_list_item_nr {
@@ -410,6 +582,7 @@
             font-size: 26rpx;
             font-weight: 400;
             color: #333333;
+            margin-bottom: 20rpx;
             &:last-child {
               margin: 0;
             }
diff --git a/h5/pages/staff/task/vDangetAppr.vue b/h5/pages/staff/task/vDangetAppr.vue
new file mode 100644
index 0000000..686d964
--- /dev/null
+++ b/h5/pages/staff/task/vDangetAppr.vue
@@ -0,0 +1,1201 @@
+<template>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name">{{ info.name }}鎻愪氦鐨剓{ cateList[type].name }}</view>
+      <view v-if="info.status == '0'" class="status">{{
+        statusMap[info.status]
+      }}</view>
+      <image
+        v-if="info.status == '2'"
+        src="@/static/ic_passed@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+      <image
+        v-if="info.status == '3' || info.status == '6'"
+        src="@/static/ic_refused@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+      <view>{{ info.content }}</view>
+      <view class="file_list">
+        <template v-for="item in info.submitFileList">
+          <image
+            v-if="item.type == 0"
+            :key="item.id"
+            :src="item.fileurlFull"
+            mode="widthFix"
+            class="img"
+          />
+          <video
+            v-if="item.type == 1"
+            :key="item.id"
+            :src="item.fileurlFull"
+            class="img"
+            controls
+          />
+        </template>
+      </view>
+      <view class="text_wrap">
+        <view class="line">
+          <text class="label">闅愭偅鍖哄煙锛�</text>
+          <text>{{ info.areaName }}</text>
+        </view>
+        <view class="line">
+          <text class="label">鎻愭姤浜猴細</text>
+          <text>{{ info.memberName }} {{ info.memberPhone }}</text>
+        </view>
+      </view>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view v-if="info.status == 1" class="module_list">
+      <view class="item">
+        <view class="label">澶勭悊缁撴灉</view>
+        <!-- <view class="value">{{ info. }}</view> -->
+      </view>
+      <view class="item">
+        <view class="label">鏁存敼鍓�</view>
+        <view class="value">
+          <view
+            class="adduser_list_item_ipt1_upload"
+            v-for="(item, i) in dealBeforeFileList"
+            :key="i"
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
+          ></view>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鏁存敼鍚�</view>
+        <view class="value">
+          <view
+            class="adduser_list_item_ipt1_upload"
+            v-for="(item, i) in dealAfterFileList"
+            :key="i"
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
+          ></view>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鏁存敼璇存槑</view>
+        <view class="value">{{ info.checkInfo }}</view>
+      </view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">澶勭悊娴佺▼</view>
+      <view
+        class="list"
+        v-if="
+          info.approveDateVO != null && info.approveDateVO.approveList != null
+        "
+      >
+        <view
+          class="item"
+          v-for="(item, index) in info.approveDateVO.approveList"
+          :key="item.id"
+        >
+          <view class="separate"></view>
+          <view class="avatar">
+            <image
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+            />
+            <image
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{ item.checkDate }}</view>
+            </view>
+            <view class="name_wrap">
+              <text
+                >{{ item.memberName
+                }}<text class="status" v-if="item.statusInfo"
+                  >({{ item.statusInfo }})</text
+                ></text
+              >
+            </view>
+            <view v-if="item.checkInfo" class="remark">{{
+              item.checkInfo
+            }}</view>
+            <!-- 鎶勯�佷汉 -->
+            <view v-if="item.approveType == 1" class="children">
+              <view
+                class="child"
+                v-for="child in item.approveList"
+                :key="child.id"
+              >
+                <image
+                  class="child_img"
+                  :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "
+                />
+                <view>{{ child.memberName }}</view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view class="main_footer">
+      <view class="btn" @click="isShowBack = true">閫�鍥�</view>
+      <view class="btn transfer" @click="handleTransfer">杞氦</view>
+      <view class="btn handle" @click="isShowHandle = true">澶勭悊</view>
+    </view>
+
+    <u-popup
+      :show="isShowBack"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="isShowBack = false"
+    >
+      <view class="appr_modal">
+        <view class="title">闅愭偅閫�鍥�</view>
+        <view class="df_sb">
+          <view>閫�鍥炴椂闂�</view>
+          <view @click="isShowBackDate = true" v-if="backParam.dealTime">{{
+            backParam.dealTime.slice(0, 16)
+          }}</view>
+          <view @click="isShowBackDate = true" v-else class="placeholder9"
+            >璇烽�夋嫨</view
+          >
+        </view>
+
+        <view class="label">鍥剧墖/瑙嗛</view>
+        <view class="upload_wrap">
+          <view class="adduser_list_item_ipt1_upload" @click="showUpload = true"
+            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon
+          ></view>
+          <view
+            class="adduser_list_item_ipt1_upload"
+            v-for="(item, i) in submitFileList"
+            :key="i"
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
+          ></view>
+        </view>
+        <view class="label">閫�鍥炶鏄�</view>
+        <textarea
+          v-model="backParam.checkInfo"
+          placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧"
+          placeholder-class="placeholder9"
+        />
+        <view class="back_footer">
+          <view class="btn" @click="isShowBack = false">鍙栨秷</view>
+          <view class="btn agree" @click="onSubBack">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 澶勭悊 -->
+    <u-popup
+      :show="isShowHandle"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="isShowBack = false"
+    >
+      <view class="appr_modal">
+        <view class="title">闅愭偅鏁存敼</view>
+        <view class="df_sb">
+          <view>鏁存敼鏃堕棿</view>
+          <view @click="isShowHandleDate = true" v-if="handleParam.dealTime">{{
+            handleParam.dealTime.slice(0, 16)
+          }}</view>
+          <view @click="isShowHandleDate = true" v-else class="placeholder9"
+            >璇烽�夋嫨</view
+          >
+        </view>
+
+        <view class="label"><text>*</text>鏁存敼鍓�</view>
+        <view class="upload_wrap">
+          <view
+            class="adduser_list_item_ipt1_upload"
+            @click="showUploadBe = true"
+            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon
+          ></view>
+          <view
+            class="adduser_list_item_ipt1_upload"
+            v-for="(item, i) in dealBeforeFileList"
+            :key="i"
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
+          ></view>
+        </view>
+        <view class="label"><text>*</text>鏁存敼鍚�</view>
+        <view class="upload_wrap">
+          <view
+            class="adduser_list_item_ipt1_upload"
+            @click="showUploadAf = true"
+            ><u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon
+          ></view>
+          <view
+            class="adduser_list_item_ipt1_upload"
+            v-for="(item, i) in dealAfterFileList"
+            :key="i"
+            ><image
+              v-if="item.type == 0"
+              :src="item.fileurlFull"
+              mode="widthFix"
+            ></image
+            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
+          ></view>
+        </view>
+        <view class="label">鏁存敼璇存槑</view>
+        <textarea
+          v-model="handleParam.checkInfo"
+          placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧"
+          placeholder-class="placeholder9"
+        />
+        <view class="back_footer">
+          <view class="btn" @click="isShowHandle = false">鍙栨秷</view>
+          <view class="btn agree" @click="onSubmit">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 涓婁紶 -->
+    <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+      <view class="sel_upload_wrap">
+        <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
+        <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
+      </view>
+    </u-popup>
+    <u-popup
+      :show="showUploadBe"
+      @close="showUploadBe = false"
+      closeOnClickOverlay
+    >
+      <view class="sel_upload_wrap">
+        <view class="btn" @click="uploadBeImage">閫夋嫨鍥剧墖</view>
+        <view class="btn" @click="uploadBeVideo">閫夋嫨瑙嗛</view>
+      </view>
+    </u-popup>
+    <u-popup
+      :show="showUploadAf"
+      @close="showUploadAf = false"
+      closeOnClickOverlay
+    >
+      <view class="sel_upload_wrap">
+        <view class="btn" @click="uploadAfImage">閫夋嫨鍥剧墖</view>
+        <view class="btn" @click="uploadAfVideo">閫夋嫨瑙嗛</view>
+      </view>
+    </u-popup>
+    <!-- 杞氦 -->
+    <u-popup
+      :show="isShowTransfer"
+      :round="10"
+      safeAreaInsetBottom
+      mode="bottom"
+      @close="isShowTransfer = false"
+    >
+      <view class="appr_modal">
+        <view class="title">閫夋嫨鍛樺伐</view>
+        <view class="search_inp df_ac">
+          <image
+            class="mr12 search"
+            src="@/static/ic_search@2x.png"
+            mode="widthFix"
+          ></image>
+          <input
+            v-model="transferModel.name"
+            @blur="getMemList()"
+            type="text"
+            placeholder="鎼滅储閮ㄩ棬/浜哄憳"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+        <view class="member_list">
+          <view v-for="item in memberList" :key="item.id" class="line">
+            <image
+              :src="
+                item.faceImgFull
+                  ? item.faceImgFull
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+              class="avatar"
+              mode=""
+            ></image>
+            <view class="content">
+              <view class="info">
+                <text class="name">{{ item.name }}</text>
+                <!-- <text class="tag">tag</text> -->
+              </view>
+              <view class="depart">{{ item.companyName }}</view>
+            </view>
+            <image
+              @click="changeMem(item)"
+              v-if="transferParam.id == item.id"
+              src="@/static/meeting/icon/ic_choose_sel@2x.png"
+              mode="widthFix"
+              class="checked"
+            ></image>
+            <image
+              @click="changeMem(item)"
+              v-else
+              src="@/static/meeting/icon/ic_choose@2x.png"
+              mode="widthFix"
+              class="checked"
+            ></image>
+            <text></text>
+          </view>
+          <view class="empty"></view>
+        </view>
+        <view class="Transfer_footer">
+          <view class="btn" @click="isShowTransfer = fale">鍙栨秷</view>
+          <view class="btn active" @click="enterTransfer">纭杞氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 閫�鍥炴椂闂� -->
+    <u-datetime-picker
+      :show="isShowBackDate"
+      @confirm="confirmBackDate"
+      @cancel="isShowBackDate = false"
+      mode="datetime"
+    ></u-datetime-picker>
+
+    <u-datetime-picker
+      :show="isShowHandleDate"
+      @confirm="confirmHandleDate"
+      @cancel="isShowHandleDate = false"
+      mode="datetime"
+    ></u-datetime-picker>
+  </view>
+</template>
+
+<script>
+import {
+  hiddenDangerDetail,
+  uploadUrl,
+  findHiddenAreaMemberList,
+  dealHiddenDanger,
+  transferHiddenDanger
+} from '@/api'
+import dayjs from 'dayjs'
+export default {
+  data() {
+    return {
+      isShowBack: false,
+      param: {},
+      info: {},
+
+      id: '',
+      type: '',
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 },
+      ],
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷',
+      },
+
+
+      showUpload: false,
+      isShowBackDate: false,
+      submitFileList: [],
+      backParam: {},
+
+      isShowHandle: false,
+      handleParam: {},
+      isShowHandleDate: false,
+      showUploadBe: false,
+      showUploadAf: false,
+      dealBeforeFileList: [],
+      dealAfterFileList: [],
+
+      isShowTransfer: false,
+      transferParam: {},
+      transferModel: {},
+      pagination: {
+        page: 1,
+        capacity: 50
+      },
+      memberList: []
+    }
+  },
+  onLoad(op) {
+    this.id = op.id
+    this.type = op.objType
+    this.getDetail()
+  },
+  methods: {
+    getDetail() {
+      const { id } = this
+      hiddenDangerDetail(id).then(res => {
+        this.info = res.data
+      })
+    },
+    onSubmit() {
+      const { dealBeforeFileList, dealAfterFileList, handleParam } = this
+      dealHiddenDanger({
+        ...handleParam,
+        dealBeforeFileList: dealBeforeFileList,
+        dealAfterFileList: dealAfterFileList,
+        status: 1,
+        id: this.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.isShowHandle = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    enterTransfer() {
+      const { transferParam, id } = this
+      transferHiddenDanger({
+        checkUserId: transferParam.id,
+        id
+      }).then(res => {
+        if (res.code === 200) {
+          this.isShowTransfer = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    changeMem(e) {
+      this.transferParam = e
+    },
+    handleTransfer() {
+      this.isShowTransfer = true
+      this.getMemList()
+    },
+    getMemList() {
+      findHiddenAreaMemberList({
+        model: { ...this.transferModel },
+        ...this.pagination,
+      }).then(res => {
+        this.memberList = res.data || []
+      })
+    },
+    confirmBackDate(e) {
+      this.$set(this.backParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
+      this.isShowBackDate = false
+    },
+    confirmHandleDate(e) {
+      this.$set(this.handleParam, 'dealTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
+      this.isShowHandleDate = false
+    },
+    onSubBack() {
+      const { submitFileList, backParam } = this
+      dealHiddenDanger({
+        ...backParam,
+        dealBeforeFileList: submitFileList,
+        status: 2,
+        id: this.id
+      }).then(res => {
+        if (res.code === 200) {
+          this.isShowBack = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    uploadBeImage() {
+      this.showUploadBe = false
+      uni.chooseImage({
+        count: 1,
+        success: (chooseImageRes) => {
+          console.log('chooseImageRes.tempFilePaths', chooseImageRes.tempFilePaths)
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+            uni.uploadFile({
+              url: `${uploadUrl}`,
+              filePath: chooseImageRes.tempFilePaths[i],
+              name: 'file',
+              formData: {
+                folderCode: 'HIDDEN_DANGER_FILE'
+              },
+              success: (uploadFileRes) => {
+                let res = JSON.parse(uploadFileRes.data)
+                console.log('res', res)
+                let obj = {
+                  type: '0'
+                }
+                obj.fileurl = res.data.halfPath
+                obj.fileurlFull = res.data.addr
+                this.dealBeforeFileList.push(obj)
+              },
+              complete() {
+                if (i === chooseImageRes.tempFilePaths.length - 1) {
+                  uni.hideLoading()
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+    uploadBeVideo() {
+      this.showUploadBe = false
+      let that = this
+      uni.chooseVideo({
+        success: (chooseImageRes) => {
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          uni.uploadFile({
+            url: `${uploadUrl}`,
+            filePath: chooseImageRes.tempFilePath,
+            name: 'file',
+            formData: {
+              folderCode: 'HIDDEN_DANGER_FILE'
+            },
+            success: (uploadFileRes) => {
+              let res = JSON.parse(uploadFileRes.data)
+              console.log('res', res)
+              let obj = {
+                type: '1'
+              }
+              obj.fileurl = res.data.halfPath
+              obj.fileurlFull = res.data.addr
+              this.dealBeforeFileList.push(obj)
+            },
+            complete() {
+              uni.hideLoading()
+            }
+          })
+        }
+      })
+    },
+    uploadAfImage() {
+      this.showUploadAf = false
+      uni.chooseImage({
+        count: 1,
+        success: (chooseImageRes) => {
+          console.log('chooseImageRes.tempFilePaths', chooseImageRes.tempFilePaths)
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+            uni.uploadFile({
+              url: `${uploadUrl}`,
+              filePath: chooseImageRes.tempFilePaths[i],
+              name: 'file',
+              formData: {
+                folderCode: 'HIDDEN_DANGER_FILE'
+              },
+              success: (uploadFileRes) => {
+                let res = JSON.parse(uploadFileRes.data)
+                console.log('res', res)
+                let obj = {
+                  type: '0'
+                }
+                obj.fileurl = res.data.halfPath
+                obj.fileurlFull = res.data.addr
+                this.dealAfterFileList.push(obj)
+              },
+              complete() {
+                if (i === chooseImageRes.tempFilePaths.length - 1) {
+                  uni.hideLoading()
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+    uploadAfVideo() {
+      this.showUploadAf = false
+      let that = this
+      uni.chooseVideo({
+        success: (chooseImageRes) => {
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          uni.uploadFile({
+            url: `${uploadUrl}`,
+            filePath: chooseImageRes.tempFilePath,
+            name: 'file',
+            formData: {
+              folderCode: 'HIDDEN_DANGER_FILE'
+            },
+            success: (uploadFileRes) => {
+              let res = JSON.parse(uploadFileRes.data)
+              console.log('res', res)
+              let obj = {
+                type: '1'
+              }
+              obj.fileurl = res.data.halfPath
+              obj.fileurlFull = res.data.addr
+              this.dealAfterFileList.push(obj)
+            },
+            complete() {
+              uni.hideLoading()
+            }
+          })
+        }
+      })
+    },
+    uploadImage() {
+      this.showUpload = false
+      uni.chooseImage({
+        count: 1,
+        success: (chooseImageRes) => {
+          console.log('chooseImageRes.tempFilePaths', chooseImageRes.tempFilePaths)
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+            uni.uploadFile({
+              url: `${uploadUrl}`,
+              filePath: chooseImageRes.tempFilePaths[i],
+              name: 'file',
+              formData: {
+                folderCode: 'HIDDEN_DANGER_FILE'
+              },
+              success: (uploadFileRes) => {
+                let res = JSON.parse(uploadFileRes.data)
+                console.log('res', res)
+                let obj = {
+                  type: '0'
+                }
+                obj.fileurl = res.data.halfPath
+                obj.fileurlFull = res.data.addr
+                this.submitFileList.push(obj)
+              },
+              complete() {
+                if (i === chooseImageRes.tempFilePaths.length - 1) {
+                  uni.hideLoading()
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+    uploadVideo() {
+      this.showUpload = false
+      let that = this
+      uni.chooseVideo({
+        success: (chooseImageRes) => {
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          uni.uploadFile({
+            url: `${uploadUrl}`,
+            filePath: chooseImageRes.tempFilePath,
+            name: 'file',
+            formData: {
+              folderCode: 'HIDDEN_DANGER_FILE'
+            },
+            success: (uploadFileRes) => {
+              let res = JSON.parse(uploadFileRes.data)
+              console.log('res', res)
+              let obj = {
+                type: '1'
+              }
+              obj.fileurl = res.data.halfPath
+              obj.fileurlFull = res.data.addr
+              this.submitFileList.push(obj)
+            },
+            complete() {
+              uni.hideLoading()
+            }
+          })
+        }
+      })
+    },
+  },
+}
+</script>
+<style>
+page {
+  background-color: #f7f7f7;
+}
+</style>
+<style lang="scss">
+.main_app {
+  background-color: #fff;
+  padding-bottom: 0;
+
+  .flow_wrap {
+    padding: 30rpx 0;
+
+    .flow_title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
+
+    .list {
+      .item {
+        display: flex;
+        margin-bottom: 48rpx;
+        position: relative;
+        .separate {
+          position: absolute;
+          width: 4rpx;
+          height: 100%;
+          background-color: #eeeeee;
+          left: 40rpx;
+          transform: translate(-50%, 0);
+          top: 80rpx;
+        }
+        .avatar {
+          width: 80rpx;
+          height: 80rpx;
+          position: relative;
+          margin-right: 20rpx;
+
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+          }
+
+          .status {
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
+        }
+
+        .content {
+          flex: 1;
+
+          .head {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 4rpx;
+
+            .event {
+              font-size: 30rpx;
+            }
+
+            .time {
+              font-size: 26rpx;
+              color: #999999;
+            }
+          }
+
+          .name_wrap {
+            font-size: 26rpx;
+            color: #777777;
+
+            .status {
+              color: $uni-color-primary;
+            }
+          }
+          .children {
+            display: flex;
+            flex-wrap: wrap;
+            margin-top: 12rpx;
+            .child {
+              display: flex;
+              flex-direction: column;
+              justify-content: center;
+              align-items: center;
+              margin-right: 12rpx;
+              .child_img {
+                width: 48rpx;
+                height: 48rpx;
+                border-radius: 50%;
+              }
+            }
+          }
+
+          .remark {
+            margin-top: 12rpx;
+            background-color: #f7f7f7;
+            padding: 14rpx 20rpx;
+            border-radius: 8rpx;
+            font-size: 26rpx;
+            color: #666666;
+            line-height: 36rpx;
+          }
+        }
+        .carbon {
+          display: flex;
+          width: 590rpx;
+          overflow-x: auto;
+          margin-top: 12rpx;
+          .carbon_item {
+            text-align: center;
+            flex-shrink: 0;
+            width: 100rpx;
+            image {
+              width: 60rpx;
+              height: 60rpx;
+              margin: 0 auto;
+            }
+            view {
+              font-size: 26rpx;
+              color: #777777;
+            }
+          }
+        }
+        &:nth-last-child(1) {
+          .separate {
+            height: 0;
+          }
+        }
+      }
+    }
+  }
+
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
+
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
+
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
+
+        .avatar {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
+
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
+
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
+
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
+
+    .name {
+      font-weight: 500;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
+
+    .desc {
+      font-size: 26rpx;
+      color: #ed4545;
+    }
+    .gray {
+      color: #999999;
+    }
+    .file_list {
+      display: flex;
+      flex-wrap: wrap;
+      margin-bottom: 20rpx;
+      .img {
+        width: 140rpx;
+        margin-right: 12rpx;
+        margin-bottom: 12rpx;
+        border-radius: 8rpx;
+      }
+    }
+    .text_wrap {
+      padding: 20rpx;
+      background-color: #f8f7f7;
+      border-radius: 8rpx;
+      margin-top: 20rpx;
+      .line {
+        margin-bottom: 12rpx;
+        display: flex;
+        font-size: 24rpx;
+        .label {
+          color: #999999;
+          width: 140rpx;
+        }
+      }
+    }
+
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+    .status_img {
+      position: absolute;
+      right: 0rpx;
+      top: 20rpx;
+      width: 120rpx;
+    }
+  }
+
+  .main_footer {
+    position: fixed;
+    bottom: 0;
+    width: 100%;
+    left: 0;
+    padding: 30rpx 10rpx 60rpx;
+    display: flex;
+    justify-content: space-between;
+    background: #ffffff;
+    .btn {
+      flex: 1;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 8rpx;
+    }
+    .transfer {
+      color: $uni-color-primary;
+      border: 1rpx solid $uni-color-primary;
+    }
+
+    .handle {
+      flex: 2;
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
+
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
+    .title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
+    .label {
+      text {
+        color: #ed4545;
+      }
+    }
+    .df_sb {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      height: 90rpx;
+      border-bottom: 1rpx solid #e4e4e4;
+      margin-bottom: 30rpx;
+    }
+    .back_footer {
+      display: flex;
+      .btn {
+        flex: 1;
+        height: 88rpx;
+        line-height: 88rpx;
+        background: #ffffff;
+        border-radius: 44rpx;
+        border: 1rpx solid #999999;
+        font-size: 32rpx;
+        text-align: center;
+        margin: 16rpx 8rpx;
+      }
+      .agree {
+        background: $uni-color-primary;
+        color: #fff;
+        border: 1rpx solid $uni-color-primary;
+      }
+    }
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      min-height: 200rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+    .upload_wrap {
+      display: flex;
+      flex-wrap: wrap;
+      margin-bottom: 30rpx;
+    }
+    .adduser_list_item_ipt1_upload {
+      margin-top: 24rpx;
+      width: 120rpx;
+      height: 120rpx;
+      margin-right: 24rpx;
+      border: 2rpx solid #e5e5e5;
+      background: #f7f7f7;
+      color: #666666;
+      font-size: 22rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      overflow: hidden;
+      image {
+        width: 100%;
+        height: 100%;
+      }
+      video {
+        width: 100%;
+      }
+    }
+  }
+
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
+}
+.sel_upload_wrap {
+  width: 100%;
+  border-top: 1px solid #333333;
+  box-shadow: 0 1 1 #333333;
+  .btn {
+    height: 90rpx;
+    line-height: 90rpx;
+    text-align: center;
+  }
+}
+.member_list {
+  height: 920rpx;
+  overflow: auto;
+  .line {
+    display: flex;
+    align-items: center;
+    border-bottom: 1rpx solid #e5e5e5;
+    padding: 30rpx 0;
+    .avatar {
+      width: 64rpx;
+      height: 64rpx;
+      border-radius: 50%;
+      overflow: hidden;
+      margin-right: 20rpx;
+    }
+    .content {
+      flex: 1;
+      .depart {
+        font-size: 24rpx;
+        color: #666666;
+      }
+      .info {
+        display: flex;
+        margin-bottom: 16rpx;
+        .name {
+          font-size: 30rpx;
+        }
+        .tag {
+          font-size: 24rpx;
+          border-radius: 4rpx;
+          border: 1rpx solid #f62710;
+          color: #f62710;
+          padding: 0rpx 6rpx;
+          margin-left: 8rpx;
+        }
+      }
+    }
+    .checked {
+      width: 48rpx;
+    }
+  }
+  .empty {
+    width: 100%;
+    height: 280rpx;
+  }
+}
+.search_inp {
+  height: 72rpx;
+  background: #f7f7f7;
+  border-radius: 4rpx;
+  padding-left: 16rpx;
+  .search {
+    width: 28rpx;
+  }
+  input {
+    flex: 1;
+    font-size: 28rpx;
+    color: #333333;
+  }
+}
+.Transfer_footer {
+  display: flex;
+  .btn {
+    flex: 1;
+    height: 88rpx;
+    line-height: 88rpx;
+    background: #ffffff;
+    border-radius: 44rpx;
+    border: 1rpx solid #999999;
+    font-size: 32rpx;
+    text-align: center;
+    margin: 16rpx 8rpx;
+  }
+  .active {
+    background: $uni-color-primary;
+    color: #fff;
+    border: 1rpx solid $uni-color-primary;
+  }
+}
+</style>
diff --git a/h5/pages/staff/task/visitorApprove.vue b/h5/pages/staff/task/visitorApprove.vue
index c60e169..8f0b95e 100644
--- a/h5/pages/staff/task/visitorApprove.vue
+++ b/h5/pages/staff/task/visitorApprove.vue
@@ -1,372 +1,524 @@
 <template>
-	<view class="main_app">
-		<view class="status_wrap">
-			<view class="name">涓佹仼鍑殑璁垮鐢宠</view>
-			<view class="desc">绛夊緟鎴戝鐞�</view>
-			<view class="status">瀹℃壒涓�</view>
-		</view>
-		<!--  -->
-		<view class="emyty"></view>
-		<view class="module_list">
-			<view class="item">
-				<view class="label">鎷滆浜�</view>
-				<view class="value">寤栨垚鐟�</view>
-			</view>
-			<view class="item">
-				<view class="label">棰勮鍏�/绂诲巶鏃堕棿</view>
-				<view class="value">05/01 8:00 - 05/01 18:00</view>
-			</view>
-			<view class="emyty"></view>
-			<view class="item">
-				<view class="label">璁垮淇℃伅</view>
-				<view class="value">
-					<image class="avatar" src="@/static/logo@2x.png" mode="widthFix"></image>
-					<view class="info">
-						<text class="name">瀛欏織 18177665678</text>
-						<text>韬唤璇佸彿锛�3309****2910</text>
-						<text>鍏ュ洯杞﹁締锛氱殩A88789</text>
-					</view>
-				</view>
-			</view>
-			<view class="item">
-				<view class="label">鍏徃鍚嶇О</view>
-				<view class="value">涓浗绉诲姩</view>
-			</view>
-			<view class="item">
-				<view class="label">鏂藉伐浜哄憳</view>
-				<view class="value">鍚�</view>
-			</view>
-			<view class="item">
-				<view class="label">鏉ヨ浜嬬敱</view>
-				<view class="value">涓氬姟娲借皥</view>
-			</view>
-		</view>
-		<!-- 娴佺▼ -->
-		<view class="flow_wrap">
-			<view class="flow_title">娴佺▼</view>
-			<view class="list">
-				<view class="item">
-					<view class="avatar">
-						<image class="img" src="@/static/logo@2x.png" mode="widthFix" />
-						<image class="status" src="@/static/staff/liucheng_success@2x.png" mode="widthFix" />
-						<view class="separate"></view>
-					</view>
-					<view class="content">
-						<view class="head">
-							<view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-							<view class="time">time</view>
-						</view>
-						<view class="name_wrap">
-							<text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-						</view>
-						<view class="remark">鍚屾剰鏀捐</view>
-					</view>
-				</view>
-				<view class="item">
-					<view class="avatar">
-						<image class="img" src="@/static/logo@2x.png" mode="widthFix" />
-						<image class="status" src="@/static/staff/liucheng_success@2x.png" mode="widthFix" />
-					</view>
-					<view class="content">
-						<view class="head">
-							<view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-							<view class="time">time</view>
-						</view>
-						<view class="name_wrap">
-							<text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-						</view>
-						<view class="carbon">
-							<view class="carbon_item" v-for="i in 12">
-								<image src="../../../static/logo@2x.png" mode="widthFix"></image>
-								<view class="text">name</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="emyty"></view>
-		<view class="main_footer">
-			<view class="btn" @click="handleSub('0')">鎷掔粷</view>
-			<view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
-		</view>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name">{{ info.name }}鎻愪氦鐨剓{ cateList[type].name }}</view>
+      <view
+        class="desc"
+        :class="{
+          gray: info.status == '2' || info.status == '5' || info.status == '4',
+        }"
+        >{{ statusMap[info.status] }}</view
+      >
+      <view v-if="info.status == '0'" class="status">{{
+        statusMap[info.status]
+      }}</view>
+      <image
+        v-if="info.status == '2'"
+        src="@/static/ic_passed@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+      <image
+        v-if="info.status == '3' || info.status == '6'"
+        src="@/static/ic_refused@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">琚浜�</view>
+        <view class="value">{{ info.visitUserName }}</view>
+      </view>
+      <view class="item">
+        <view class="label">棰勮鍏�/绂诲洯鏃堕棿</view>
+        <view class="value" v-if="info.visitTime">{{ info.visitTime }}</view>
+      </view>
+      <view class="emyty"></view>
+      <view class="item">
+        <view class="label">璁垮淇℃伅</view>
+        <view class="value">
+          <image
+            class="avatar"
+            :src="
+              info.prefix
+                ? info.prefix + info.faceImg
+                : require('@/static/meeting/common/default_user@2x.png')
+            "
+            mode="widthFix"
+          ></image>
+          <view class="info">
+            <text class="name">{{ info.name }} {{ info.phone }}</text>
+            <text>韬唤璇佸彿锛歿{ info.idCardDecode }}</text>
+            <text>鍏ュ洯杞﹁締锛歿{ info.carNos }}</text>
+          </view>
+        </view>
+      </view>
+      <view class="item">
+        <view class="label">鍏徃鍚嶇О</view>
+        <view class="value">{{ info.companyName }}</view>
+      </view>
+      <view class="item">
+        <view class="label">鏂藉伐浜哄憳</view>
+        <view class="value">{{ info.type == 0 ? "鍚�" : "鏄�" }}</view>
+      </view>
+      <view class="item">
+        <view class="label">鏉ヨ浜嬬敱</view>
+        <view class="value">{{ info.visitReason }}</view>
+      </view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">娴佺▼</view>
+      <view
+        class="list"
+        v-if="
+          info.approveDateVO != null && info.approveDateVO.approveList != null
+        "
+      >
+        <view
+          class="item"
+          v-for="(item, index) in info.approveDateVO.approveList"
+          :key="item.id"
+        >
+          <view class="separate"></view>
+          <view class="avatar">
+            <image
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+            />
+            <image
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{ item.checkDate }}</view>
+            </view>
+            <view class="name_wrap">
+              <text
+                >{{ item.memberName
+                }}<text class="status" v-if="item.statusInfo"
+                  >({{ item.statusInfo }})</text
+                ></text
+              >
+            </view>
+            <view v-if="item.checkInfo" class="remark">{{
+              item.checkInfo
+            }}</view>
+            <!-- 鎶勯�佷汉 -->
+            <view v-if="item.approveType == 1" class="children">
+              <view
+                class="child"
+                v-for="child in item.approveList"
+                :key="child.id"
+              >
+                <image
+                  class="child_img"
+                  :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "
+                />
+                <view>{{ child.memberName }}</view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view class="main_footer">
+      <view class="btn" @click="handleSub(3)">鎷掔粷</view>
+      <view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
+    </view>
 
-		<!--  -->
-		<u-popup :show="showApprModal" :round="10" :safeAreaInsetBottom="true" mode="bottom" @close="showApprModal = false">
-			<view class="appr_modal">
-				<view class="title">鍚屾剰</view>
-				<textarea placeholder="鍚屾剰璇存槑锛岄潪蹇呭~" placeholder-class="placeholder9" />
-				<view class="main_footer">
-					<view class="btn" @click="showApprModal = false">鍙栨秷</view>
-					<view class="btn agree">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-	</view>
+    <u-popup
+      :show="showApprModal"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="showApprModal = false"
+    >
+      <view class="appr_modal">
+        <view class="title">{{ param.status == 2 ? "鍚屾剰" : "鎷掔粷" }}</view>
+        <textarea
+          v-model="param.checkInfo"
+          :placeholder="
+            param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑锛屽繀濉�'
+          "
+          placeholder-class="placeholder9"
+        />
+        <view class="main_footer">
+          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
+          <view class="btn agree" @click="onSubmit">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
 </template>
 
 <script>
+import {
+  getVisitedDetail, // 璁垮棰勭害璇︽儏
+  carUseBookAppr
+} from '@/api'
 export default {
-	data() {
-		return {
-			showApprModal: false,
-			param: {}
-		}
-	},
-	methods: {
-		handleSub(flag) {
-			// this.param.flag = 
-			if (flag === '1') {
+  data() {
+    return {
+      showApprModal: false,
+      param: {},
+      info: {},
 
-			} else {
-
-			}
-			this.showApprModal = true
-		}
-	},
+      id: '',
+      type: '',
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 },
+      ],
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷',
+      }
+    }
+  },
+  onLoad(op) {
+    this.id = op.id
+    this.type = op.objType
+    this.getDetail()
+  },
+  methods: {
+    getDetail() {
+      const { id } = this
+      getVisitedDetail({ id }).then(res => {
+        this.info = res.data
+      })
+    },
+    onSubmit() {
+      const { param, info } = this
+      carUseBookAppr({
+        status: param.status,
+        objType: info.type,
+        objId: this.id,
+        // driverId: param.driverId,
+        checkInfo: param.checkInfo
+      }).then(res => {
+        if (res.code === 200) {
+          this.showApprModal = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    handleSub(status) {
+      // this.param.flag = 
+      this.param = {
+        status
+      }
+      this.showApprModal = true
+      this.showApprModal = true
+    },
+  },
 }
 </script>
 <style>
 page {
-	background-color: #F7F7F7;
+  background-color: #f7f7f7;
 }
 </style>
 <style lang="scss">
 .main_app {
-	background-color: #fff;
-	padding-bottom: 0;
+  background-color: #fff;
+  padding-bottom: 0;
 
-	.flow_wrap {
-		padding: 30rpx 0;
+  .flow_wrap {
+    padding: 30rpx 0;
 
-		.flow_title {
-			font-weight: 500;
-			font-size: 32rpx;
-			color: #222222;
-			margin-bottom: 24rpx;
-		}
+    .flow_title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
 
-		.list {
-			.item {
-				display: flex;
-				margin-bottom: 48rpx;
+    .list {
+      .item {
+        display: flex;
+        margin-bottom: 48rpx;
+        position: relative;
+        .separate {
+          position: absolute;
+          width: 4rpx;
+          height: 100%;
+          background-color: #eeeeee;
+          left: 40rpx;
+          transform: translate(-50%, 0);
+          top: 80rpx;
+        }
+        .avatar {
+          width: 80rpx;
+          height: 80rpx;
+          position: relative;
+          margin-right: 20rpx;
 
-				.avatar {
-					width: 80rpx;
-					height: 80rpx;
-					position: relative;
-					margin-right: 20rpx;
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+          }
 
-					.img {
-						width: 80rpx;
-						height: 80rpx;
-						border-radius: 50%;
-					}
+          .status {
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
+        }
 
-					.status {
-						width: 28rpx;
-						height: 28rpx;
-						border-radius: 50%;
-						position: absolute;
-						right: 0;
-						bottom: 0;
-					}
+        .content {
+          flex: 1;
 
-					.separate {
-						position: absolute;
-						width: 4rpx;
-						height: 100%;
-						background-color: #EEEEEE;
-						left: 50%;
-						transform: translate(-50%, 0);
-						bottom: -80rpx;
-					}
-				}
+          .head {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 4rpx;
 
-				.content {
-					flex: 1;
+            .event {
+              font-size: 30rpx;
+            }
 
-					.head {
-						display: flex;
-						justify-content: space-between;
-						margin-bottom: 4rpx;
+            .time {
+              font-size: 26rpx;
+              color: #999999;
+            }
+          }
 
-						.event {
-							font-size: 30rpx;
-						}
+          .name_wrap {
+            font-size: 26rpx;
+            color: #777777;
 
-						.time {
-							font-size: 26rpx;
-							color: #999999;
-						}
-					}
+            .status {
+              color: $uni-color-primary;
+            }
+          }
+          .children {
+            display: flex;
+            flex-wrap: wrap;
+            margin-top: 12rpx;
+            .child {
+              display: flex;
+              flex-direction: column;
+              justify-content: center;
+              align-items: center;
+              margin-right: 12rpx;
+              .child_img {
+                width: 48rpx;
+                height: 48rpx;
+                border-radius: 50%;
+              }
+            }
+          }
 
-					.name_wrap {
-						font-size: 26rpx;
-						color: #777777;
+          .remark {
+            margin-top: 12rpx;
+            background-color: #f7f7f7;
+            padding: 14rpx 20rpx;
+            border-radius: 8rpx;
+            font-size: 26rpx;
+            color: #666666;
+            line-height: 36rpx;
+          }
+        }
+        .carbon {
+          display: flex;
+          width: 590rpx;
+          overflow-x: auto;
+          margin-top: 12rpx;
+          .carbon_item {
+            text-align: center;
+            flex-shrink: 0;
+            width: 100rpx;
+            image {
+              width: 60rpx;
+              height: 60rpx;
+              margin: 0 auto;
+            }
+            view {
+              font-size: 26rpx;
+              color: #777777;
+            }
+          }
+        }
+        &:nth-last-child(1) {
+          .separate {
+            height: 0;
+          }
+        }
+      }
+    }
+  }
 
-						.status {
-							color: $uni-color-primary;
-						}
-					}
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
 
-					.remark {
-						margin-top: 12rpx;
-						background-color: #f7f7f7;
-						padding: 14rpx 20rpx;
-						border-radius: 8rpx;
-						font-size: 26rpx;
-						color: #666666;
-						line-height: 36rpx;
-					}
-				}
-				.carbon{
-					display: flex;
-					width: 590rpx;
-					overflow-x: auto;
-					margin-top: 12rpx;
-					.carbon_item{
-						text-align: center;
-						flex-shrink: 0;
-						width: 100rpx;
-						image{
-							width: 60rpx;
-							height: 60rpx;
-							margin: 0 auto;
-						}
-						view{
-							font-size: 26rpx;
-							color: #777777;
-							
-						}
-					}
-				}
-			}
-		}
-	}
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
 
-	.module_list {
-		.item {
-			padding: 30rpx 0;
-			border-bottom: 1rpx solid #E5E5E5;
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
 
-			.label {
-				font-size: 26rpx;
-				color: #666666;
-				margin-bottom: 20rpx;
-			}
+        .avatar {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
 
-			.value {
-				font-size: 30rpx;
-				display: flex;
-				align-items: center;
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
 
-				.avatar {
-					margin-right: 20rpx;
-					width: 120rpx;
-					height: 120rpx;
-					border-radius: 8rpx;
-					border: 2rpx solid #E5E5E5;
-				}
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
 
-				.info {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					font-size: 26rpx;
-					color: #666666;
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
 
-					.name {
-						font-size: 30rpx;
-						color: #333333;
-					}
-				}
-			}
-		}
-	}
+    .name {
+      font-weight: 500;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
 
-	.status_wrap {
-		position: relative;
-		padding: 30rpx 0;
+    .desc {
+      font-size: 26rpx;
+      color: #ed4545;
+    }
+    .gray {
+      color: #999999;
+    }
 
-		.name {
-			font-weight: 500;
-			font-size: 32rpx;
-			margin-bottom: 20rpx;
-			color: #222222;
-		}
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+    .status_img {
+      position: absolute;
+      right: 0rpx;
+      top: 20rpx;
+      width: 120rpx;
+    }
+  }
 
-		.desc {
-			font-size: 26rpx;
-			color: #ED4545;
-		}
+  .main_footer {
+    padding-bottom: 64rpx;
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+    left: 0;
+    padding: 30rpx 10rpx 60rpx;
+    display: flex;
+    justify-content: space-between;
+    background: #ffffff;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 0;
+    }
 
-		.status {
-			position: absolute;
-			right: -30rpx;
-			top: 0;
-			height: 60rpx;
-			line-height: 60rpx;
-			padding: 0 32rpx;
-			border-radius: 0rpx 0rpx 0rpx 30rpx;
-			background-color: #e9edff;
-			color: $uni-color-primary;
-		}
-	}
+    .agree {
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
 
-	.main_footer {
-		padding-bottom: 64rpx;
-		display: flex;
-		justify-content: space-between;
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
 
-		.btn {
-			width: 336rpx;
-			height: 88rpx;
-			line-height: 88rpx;
-			background: #FFFFFF;
-			border-radius: 44rpx;
-			border: 1rpx solid #999999;
-			font-size: 32rpx;
-			text-align: center;
-			margin: 16rpx 0;
-		}
+    .title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
 
-		.agree {
-			background: $uni-color-primary;
-			color: #fff;
-			border: 1rpx solid $uni-color-primary;
-		}
-	}
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+  }
 
-	.appr_modal {
-		padding: 36rpx 30rpx 0;
-
-		.title {
-			font-weight: 500;
-			font-size: 32rpx;
-			color: #222222;
-			margin-bottom: 40rpx;
-			text-align: center;
-		}
-
-		textarea {
-			box-sizing: border-box;
-			width: 690rpx;
-			background-color: #f7f7f7;
-			font-size: 28rpx;
-			color: #333333;
-			padding: 24rpx;
-			border-radius: 8rpx;
-			margin-bottom: 30rpx;
-		}
-	}
-
-	.emyty {
-		width: 750rpx;
-		height: 20rpx;
-		background-color: #f7f7f7;
-		margin: 0 -30rpx;
-	}
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
 }
 </style>
diff --git a/h5/pages/staff/task/visitorReport.vue b/h5/pages/staff/task/visitorReport.vue
new file mode 100644
index 0000000..b877e17
--- /dev/null
+++ b/h5/pages/staff/task/visitorReport.vue
@@ -0,0 +1,517 @@
+<template>
+  <view class="main_app">
+    <view class="status_wrap">
+      <view class="name"
+        >{{ info.createMemberName }}鎻愪氦鐨剓{ cateList[type].name }}</view
+      >
+      <view
+        class="desc"
+        :class="{
+          gray: info.status == '2' || info.status == '5' || info.status == '4',
+        }"
+        >{{ statusMap[info.status] }}</view
+      >
+      <view v-if="info.status == '0'" class="status">{{
+        statusMap[info.status]
+      }}</view>
+      <image
+        v-if="info.status == '2'"
+        src="@/static/ic_passed@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+      <image
+        v-if="info.status == '3' || info.status == '6'"
+        src="@/static/ic_refused@2x.png"
+        mode="widthFix"
+        class="status_img"
+      ></image>
+    </view>
+    <!--  -->
+    <view class="emyty"></view>
+    <view class="module_list">
+      <view class="item">
+        <view class="label">琚浜�</view>
+        <view class="value"
+          >{{ info.receptMemberName }} {{ info.receptMemberDepartment }}</view
+        >
+      </view>
+      <view class="item">
+        <view class="label">棰勮鍏�/绂诲洯鏃堕棿</view>
+        <view class="value" v-if="info.starttime"
+          >{{ info.starttime.slice(0, 16) }} 鑷�
+          {{ info.endtime.slice(0, 16) }}</view
+        >
+      </view>
+      <view class="emyty"></view>
+
+      <view class="item">
+        <view class="label">鑱旂郴浜轰俊鎭�</view>
+        <view class="value">{{ info.name }} {{ info.phone }}</view>
+      </view>
+      <view class="item">
+        <view class="label">鍏ュ洯杞﹁締</view>
+        <view class="value">{{ info.carNos }}</view>
+      </view>
+      <view class="item">
+        <view class="label">闅忚溅浜烘暟</view>
+        <view class="value">{{ info.memberNum }}浜�</view>
+      </view>
+      <view class="item">
+        <view class="label">鏉ヨ浜嬬敱</view>
+        <view class="value">{{ info.reason }}</view>
+      </view>
+    </view>
+    <!-- 娴佺▼ -->
+    <view class="flow_wrap">
+      <view class="flow_title">娴佺▼</view>
+      <view
+        class="list"
+        v-if="
+          info.approveDateVO != null && info.approveDateVO.approveList != null
+        "
+      >
+        <view
+          class="item"
+          v-for="(item, index) in info.approveDateVO.approveList"
+          :key="item.id"
+        >
+          <view class="separate"></view>
+          <view class="avatar">
+            <image
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
+            />
+            <image
+              class="status"
+              src="@/static/staff/liucheng_success@2x.png"
+              mode="widthFix"
+            />
+          </view>
+          <view class="content">
+            <view class="head">
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{ item.checkDate }}</view>
+            </view>
+            <view class="name_wrap">
+              <text
+                >{{ item.memberName
+                }}<text class="status" v-if="item.statusInfo"
+                  >({{ item.statusInfo }})</text
+                ></text
+              >
+            </view>
+            <view v-if="item.checkInfo" class="remark">{{
+              item.checkInfo
+            }}</view>
+            <!-- 鎶勯�佷汉 -->
+            <view v-if="item.approveType == 1" class="children">
+              <view
+                class="child"
+                v-for="child in item.approveList"
+                :key="child.id"
+              >
+                <image
+                  class="child_img"
+                  :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "
+                />
+                <view>{{ child.memberName }}</view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view class="emyty"></view>
+    <view class="main_footer">
+      <view class="btn" @click="handleSub(3)">鎷掔粷</view>
+      <view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
+    </view>
+
+    <u-popup
+      :show="showApprModal"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="showApprModal = false"
+    >
+      <view class="appr_modal">
+        <view class="title">{{ param.status == 2 ? "鍚屾剰" : "鎷掔粷" }}</view>
+        <textarea
+          v-model="param.checkInfo"
+          :placeholder="
+            param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑锛屽繀濉�'
+          "
+          placeholder-class="placeholder9"
+        />
+        <view class="main_footer">
+          <view class="btn" @click="showApprModal = false">鍙栨秷</view>
+          <view class="btn agree" @click="onSubmit">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+  </view>
+</template>
+
+<script>
+import {
+  getVisitedReDetail, // 璁垮棰勭害璇︽儏
+  carUseBookAppr
+} from '@/api'
+export default {
+  data() {
+    return {
+      showApprModal: false,
+      param: {},
+      info: {},
+
+      id: '',
+      type: '',
+      cateList: [
+        { name: '璁垮鐢宠', id: 0 },
+        { name: '璁垮鎶ュ', id: 1 },
+        { name: '鐢ㄨ溅鐢宠', id: 2 },
+        { name: '闅愭偅闅忔墜鎷�', id: 3 },
+        { name: '鐗╂祦杞︾敵璇�', id: 4 },
+      ],
+      statusMap: {
+        0: '寰呭鎵�',
+        1: '瀹℃壒涓�',
+        2: '瀹℃壒閫氳繃',
+        3: '瀹℃壒鏈�氳繃',
+        4: '宸插彇娑�',
+        5: '浠栦汉鎴栫',
+        6: '浠栦汉鎷掔粷',
+      }
+    }
+  },
+  onLoad(op) {
+    this.id = op.id
+    this.type = op.objType
+    this.getDetail()
+  },
+  methods: {
+    getDetail() {
+      const { id } = this
+      getVisitedReDetail({ id }).then(res => {
+        this.info = res.data
+      })
+    },
+    onSubmit() {
+      const { param, info } = this
+      carUseBookAppr({
+        status: param.status,
+        objType: 2,
+        objId: this.id,
+        // driverId: param.driverId,
+        checkInfo: param.checkInfo
+      }).then(res => {
+        if (res.code === 200) {
+          this.showApprModal = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    handleSub(status) {
+      // this.param.flag = 
+      this.param = {
+        status
+      }
+      this.showApprModal = true
+      this.showApprModal = true
+    },
+  },
+}
+</script>
+<style>
+page {
+  background-color: #f7f7f7;
+}
+</style>
+<style lang="scss">
+.main_app {
+  background-color: #fff;
+  padding-bottom: 0;
+
+  .flow_wrap {
+    padding: 30rpx 0;
+
+    .flow_title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 24rpx;
+    }
+
+    .list {
+      .item {
+        display: flex;
+        margin-bottom: 48rpx;
+        position: relative;
+        .separate {
+          position: absolute;
+          width: 4rpx;
+          height: 100%;
+          background-color: #eeeeee;
+          left: 40rpx;
+          transform: translate(-50%, 0);
+          top: 80rpx;
+        }
+        .avatar {
+          width: 80rpx;
+          height: 80rpx;
+          position: relative;
+          margin-right: 20rpx;
+
+          .img {
+            width: 80rpx;
+            height: 80rpx;
+            border-radius: 50%;
+          }
+
+          .status {
+            width: 28rpx;
+            height: 28rpx;
+            border-radius: 50%;
+            position: absolute;
+            right: 0;
+            bottom: 0;
+          }
+        }
+
+        .content {
+          flex: 1;
+
+          .head {
+            display: flex;
+            justify-content: space-between;
+            margin-bottom: 4rpx;
+
+            .event {
+              font-size: 30rpx;
+            }
+
+            .time {
+              font-size: 26rpx;
+              color: #999999;
+            }
+          }
+
+          .name_wrap {
+            font-size: 26rpx;
+            color: #777777;
+
+            .status {
+              color: $uni-color-primary;
+            }
+          }
+          .children {
+            display: flex;
+            flex-wrap: wrap;
+            margin-top: 12rpx;
+            .child {
+              display: flex;
+              flex-direction: column;
+              justify-content: center;
+              align-items: center;
+              margin-right: 12rpx;
+              .child_img {
+                width: 48rpx;
+                height: 48rpx;
+                border-radius: 50%;
+              }
+            }
+          }
+
+          .remark {
+            margin-top: 12rpx;
+            background-color: #f7f7f7;
+            padding: 14rpx 20rpx;
+            border-radius: 8rpx;
+            font-size: 26rpx;
+            color: #666666;
+            line-height: 36rpx;
+          }
+        }
+        .carbon {
+          display: flex;
+          width: 590rpx;
+          overflow-x: auto;
+          margin-top: 12rpx;
+          .carbon_item {
+            text-align: center;
+            flex-shrink: 0;
+            width: 100rpx;
+            image {
+              width: 60rpx;
+              height: 60rpx;
+              margin: 0 auto;
+            }
+            view {
+              font-size: 26rpx;
+              color: #777777;
+            }
+          }
+        }
+        &:nth-last-child(1) {
+          .separate {
+            height: 0;
+          }
+        }
+      }
+    }
+  }
+
+  .module_list {
+    .item {
+      padding: 30rpx 0;
+      border-bottom: 1rpx solid #e5e5e5;
+
+      .label {
+        font-size: 26rpx;
+        color: #666666;
+        margin-bottom: 20rpx;
+      }
+
+      .value {
+        font-size: 30rpx;
+        display: flex;
+        align-items: center;
+
+        .avatar {
+          margin-right: 20rpx;
+          width: 120rpx;
+          height: 120rpx;
+          border-radius: 8rpx;
+          border: 2rpx solid #e5e5e5;
+        }
+
+        .info {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          font-size: 26rpx;
+          color: #666666;
+
+          .name {
+            font-size: 30rpx;
+            color: #333333;
+          }
+        }
+      }
+    }
+  }
+
+  .status_wrap {
+    position: relative;
+    padding: 30rpx 0;
+
+    .name {
+      font-weight: 500;
+      font-size: 32rpx;
+      margin-bottom: 20rpx;
+      color: #222222;
+    }
+
+    .desc {
+      font-size: 26rpx;
+      color: #ed4545;
+    }
+    .gray {
+      color: #999999;
+    }
+
+    .status {
+      position: absolute;
+      right: -30rpx;
+      top: 0;
+      height: 60rpx;
+      line-height: 60rpx;
+      padding: 0 32rpx;
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+      background-color: #e9edff;
+      color: $uni-color-primary;
+    }
+    .status_img {
+      position: absolute;
+      right: 0rpx;
+      top: 20rpx;
+      width: 120rpx;
+    }
+  }
+
+  .main_footer {
+    padding-bottom: 64rpx;
+    display: flex;
+    justify-content: space-between;
+    width: 100%;
+    left: 0;
+    padding: 30rpx 10rpx 60rpx;
+    display: flex;
+    justify-content: space-between;
+    background: #ffffff;
+    .btn {
+      width: 336rpx;
+      height: 88rpx;
+      line-height: 88rpx;
+      background: #ffffff;
+      border-radius: 44rpx;
+      border: 1rpx solid #999999;
+      font-size: 32rpx;
+      text-align: center;
+      margin: 16rpx 0;
+    }
+
+    .agree {
+      background: $uni-color-primary;
+      color: #fff;
+      border: 1rpx solid $uni-color-primary;
+    }
+  }
+
+  .appr_modal {
+    padding: 36rpx 30rpx 0;
+
+    .title {
+      font-weight: 500;
+      font-size: 32rpx;
+      color: #222222;
+      margin-bottom: 40rpx;
+      text-align: center;
+    }
+
+    textarea {
+      box-sizing: border-box;
+      width: 690rpx;
+      background-color: #f7f7f7;
+      font-size: 28rpx;
+      color: #333333;
+      padding: 24rpx;
+      border-radius: 8rpx;
+      margin-bottom: 30rpx;
+    }
+  }
+
+  .emyty {
+    width: 750rpx;
+    height: 20rpx;
+    background-color: #f7f7f7;
+    margin: 0 -30rpx;
+  }
+}
+</style>
diff --git a/h5/pages/staff/vehicle/sendACar.vue b/h5/pages/staff/vehicle/sendACar.vue
index f11605d..3df0a80 100644
--- a/h5/pages/staff/vehicle/sendACar.vue
+++ b/h5/pages/staff/vehicle/sendACar.vue
@@ -61,10 +61,11 @@
     <!-- 鏃ユ湡 -->
     <u-datetime-picker
       mode="date"
+      v-model="param.queryDate"
       :show="isShowDate"
       :minDate="minDate"
+      closeOnClickOverlay
       @close="isShowDate = false"
-      :closeOnClickOverlay="true"
       @confirm="seletedDate"
       @cancel="isShowDate = false"
     />
@@ -81,6 +82,7 @@
       isShowDate: false,
       carsList: [],
       param: {
+        queryDate: dayjs().format('YYYY-MM-DD'),
         memberId: uni.getStorageSync('userInfo').memberId
       },
       minDate: '',
@@ -89,7 +91,7 @@
         capacity: 10
       },
       total: 0,
-      dataList: []
+      dataList: [],
     }
   },
   onLoad() {
@@ -107,6 +109,10 @@
     getList() {
       const { param, pagination } = this
       pagination.page = pagination.page + 1
+      if(param.queryDate){
+        param.queryStartTime = param.queryDate + ' 00:00:00'
+        param.queryEndTime = param.queryDate + ' 23:59:59'
+      }
       carUseBookPaiche({
         ...pagination,
         model: { ...param }
@@ -126,21 +132,17 @@
 		},
     seletedCar(e) {
       const item = e.value[0]
+      this.pagination.page = 0
       this.$set(this.param, 'carCode', item.code)
       this.$set(this.param, 'carId', item.id)
       this.isShowCar = false
-      if (this.param.carId && this.param.queryDate) {
-        this.pagination.page = 0
-        this.getList()
-      }
+      this.getList()
     },
     seletedDate(e) {
       this.param.queryDate = dayjs(e.value).format('YYYY-MM-DD')
+      this.pagination.page = 0
       this.isShowDate = false
-      if (this.param.carId && this.param.queryDate) {
-        this.pagination.page = 0
-        this.getList()
-      }
+      this.getList()
     },
     endtimeClose() {
       this.param.endTime = ''
diff --git a/h5/pages/staff/vehicle/sendACarDetail.vue b/h5/pages/staff/vehicle/sendACarDetail.vue
index af0f3ec..e266b61 100644
--- a/h5/pages/staff/vehicle/sendACarDetail.vue
+++ b/h5/pages/staff/vehicle/sendACarDetail.vue
@@ -16,19 +16,25 @@
     <view class="module_list">
       <view class="item">
         <view class="label">棰勮鐢ㄨ溅鏃舵</view>
-        <view class="value">{{ info.startTime.slice(0, 16) }}鑷硔{ info.endTime.slice(0, 16) }}</view>
+        <view class="value" v-if="info.startTime"
+          >{{ info.startTime.slice(0, 16) }}鑷硔{
+            info.endTime.slice(0, 16)
+          }}</view
+        >
       </view>
-			<view class="item">
+      <view class="item">
         <view class="label">棰勮鍑哄彂鏃堕棿</view>
         <view class="value">{{ info.planUseDate }}</view>
       </view>
-			<view class="item">
+      <view class="item">
         <view class="label">涔樿溅浜哄憳</view>
         <view class="value">{{ info.memberNames }}</view>
       </view>
       <view class="item">
         <view class="label">鐩殑鍦�</view>
-        <view class="value">{{ info.type == '1' ? '甯傚' : '瀹ゅ唴' }}锛歿{ info.addr }}</view>
+        <view class="value"
+          >{{ info.type == "1" ? "甯傚" : "瀹ゅ唴" }}锛歿{ info.addr }}</view
+        >
       </view>
       <view class="item">
         <view class="label">鐢ㄨ溅浜嬬敱</view>
@@ -46,31 +52,27 @@
     <!-- 娴佺▼ -->
     <view class="flow_wrap">
       <view class="flow_title">娴佺▼</view>
-      <view class="list">
-        <view class="item">
+      <view
+        class="list"
+        v-if="
+          info.approveDateVO != null && info.approveDateVO.approveList != null
+        "
+      >
+        <view
+          class="item"
+          v-for="(item, index) in info.approveDateVO.approveList"
+          :key="item.id"
+        >
+          <view class="separate"></view>
           <view class="avatar">
-            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
             <image
-              class="status"
-              src="@/static/staff/liucheng_success@2x.png"
-              mode="widthFix"
+              class="img"
+              :src="
+                item.faceImg
+                  ? item.faceImg
+                  : require('@/static/meeting/common/default_user@2x.png')
+              "
             />
-            <view class="separate"></view>
-          </view>
-          <view class="content">
-            <view class="head">
-              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-              <view class="time">time</view>
-            </view>
-            <view class="name_wrap">
-              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
-            </view>
-            <view class="remark">鍚屾剰鏀捐</view>
-          </view>
-        </view>
-        <view class="item">
-          <view class="avatar">
-            <image class="img" src="@/static/logo@2x.png" mode="widthFix" />
             <image
               class="status"
               src="@/static/staff/liucheng_success@2x.png"
@@ -79,19 +81,36 @@
           </view>
           <view class="content">
             <view class="head">
-              <view class="event">鏌愭煇鎻愪氦鐨勬嫓璁跨敵璇�</view>
-              <view class="time">time</view>
+              <view class="event">{{ item.title }}</view>
+              <view class="time">{{ item.checkDate }}</view>
             </view>
             <view class="name_wrap">
-              <text>鏉庝笢(<text class="status">澶勭悊涓�</text>)</text>
+              <text
+                >{{ item.memberName
+                }}<text class="status" v-if="item.statusInfo"
+                  >({{ item.statusInfo }})</text
+                ></text
+              >
             </view>
-            <view class="carbon">
-              <view class="carbon_item" v-for="i in 12">
+            <view v-if="item.checkInfo" class="remark">{{
+              item.checkInfo
+            }}</view>
+            <!-- 鎶勯�佷汉 -->
+            <view v-if="item.approveType == 1" class="children">
+              <view
+                class="child"
+                v-for="child in item.approveList"
+                :key="child.id"
+              >
                 <image
-                  src="../../../static/logo@2x.png"
-                  mode="widthFix"
-                ></image>
-                <view class="text">name</view>
+                  class="child_img"
+                  :src="
+                    child.faceImg
+                      ? child.faceImg
+                      : require('@/static/meeting/common/default_user@2x.png')
+                  "
+                />
+                <view>{{ child.memberName }}</view>
               </view>
             </view>
           </view>
@@ -100,10 +119,34 @@
     </view>
     <view class="emyty"></view>
     <view class="main_footer">
-      <view class="btn" @click="handleSub('0')">鎷掔粷</view>
-      <view class="btn agree" @click="handleSub('1')">鍚屾剰</view>
+      <template v-if="appr == '1'">
+        <view class="btn" @click="handleSub(3)">鎷掔粷</view>
+        <view class="btn agree" @click="handleSub(2)">鍚屾剰</view>
+      </template>
+      <view v-else class="btn agree" @click="isShowBack = true">鎾ら攢鐢ㄨ溅</view>
     </view>
 
+    <!-- 鎾ら攢 -->
+    <u-popup
+      :show="isShowBack"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      mode="bottom"
+      @close="isShowBack = false"
+    >
+      <view class="appr_modal">
+        <view class="title">鎾ら攢鐢ㄨ溅</view>
+        <view class="line"> 鎾ら攢璇存槑 </view>
+        <textarea
+          v-model="backParam.info"
+          placeholder="闈炲繀濉�"
+          placeholder-class="placeholder9"
+        />
+        <view class="main_footer">
+          <view class="btn agree" @click="onSubBack">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
     <!--  -->
     <u-popup
       :show="showApprModal"
@@ -113,34 +156,60 @@
       @close="showApprModal = false"
     >
       <view class="appr_modal">
-        <view class="title">鍚屾剰</view>
+        <view class="title">{{ param.status == 2 ? "鍚屾剰" : "鎷掔粷" }}</view>
+        <view v-if="param.status == 2" class="line" @click="isShowDrive = true">
+          <text v-if="param.driverName">{{ param.driverName }}</text>
+          <text v-else class="placeholder9">娲捐溅鍙告満</text>
+          <u-icon class="ml12" name="arrow-right" color="#999999" />
+        </view>
         <textarea
-          placeholder="鍚屾剰璇存槑锛岄潪蹇呭~"
+          v-model="param.checkInfo"
+          :placeholder="
+            param.status == 2 ? '鍚屾剰璇存槑锛岄潪蹇呭~' : '鎷掔粷璇存槑锛屽繀濉�'
+          "
           placeholder-class="placeholder9"
         />
         <view class="main_footer">
           <view class="btn" @click="showApprModal = false">鍙栨秷</view>
-          <view class="btn agree">鎻愪氦</view>
+          <view class="btn agree" @click="onSubmit">鎻愪氦</view>
         </view>
       </view>
     </u-popup>
+    <!-- 鍙告満 -->
+    <u-picker
+      keyName="name"
+      :show="isShowDrive"
+      @close="isShowDrive = false"
+      :closeOnClickOverlay="true"
+      :columns="driveList"
+      @confirm="seletedDrive"
+      @cancel="isShowDrive = false"
+    ></u-picker>
   </view>
 </template>
 
 <script>
-import { carUseBookDetail } from '@/api'
+import { carUseBookDetail, carUseBookAppr, driveListPost, carUseBookBack } from '@/api'
 export default {
   data() {
     return {
       showApprModal: false,
+      isShowBack: false,
+      backParam: {},
+      isShowDrive: false,
       id: '',
+      appr: '',
       info: {},
-      param: {},
+      param: {
+        status: ''
+      },
+      driveList: []
 
     }
   },
   onLoad(option) {
     this.id = option.id
+    this.appr = option.appr || ''
     this.getDetail()
   },
   methods: {
@@ -150,15 +219,69 @@
         this.info = { ...res.data }
       })
     },
-    handleSub(flag) {
+    onSubBack() {
+      carUseBookBack({
+        id: this.id,
+        info: this.backParam.info
+      }).then(res => {
+        if (res.code === 200) {
+          uni.showToast({
+            title: '鎾ら攢鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          })
+          this.isShowBack = false
+          setTimeout(() => {
+            uni.navigateBack()
+          }, 1000)
+        }
+      })
+    },
+    onSubmit() {
+      const { param, info } = this
+      carUseBookAppr({
+        status: param.status,
+        objType: info.type == 1 ? 4 : 3,
+        objId: this.id,
+        driverId: param.driverId,
+        checkInfo: param.checkInfo
+      }).then(res => {
+        if (res.code === 200) {
+          this.showApprModal = false
+          setTimeout(() => {
+            uni.showToast({
+              title: '鎿嶄綔鎴愬姛',
+              icon: 'success'
+            })
+          })
+          uni.navigateBack()
+        }
+      })
+    },
+    handleSub(status) {
       // this.param.flag = 
-      if (flag === '1') {
-
+      this.param = {
+        status
+      }
+      this.showApprModal = true
+      if (status === 2) { // 鍚屾剰
+        this.getDriveList()
       } else {
 
       }
       this.showApprModal = true
-    }
+    },
+    getDriveList() {
+      driveListPost({}).then(res => {
+        this.driveList = [res.data]
+      })
+    },
+    seletedDrive(e) {
+      console.log(e.value[0])
+      this.$set(this.param, 'driverId', e.value[0].id)
+      this.$set(this.param, 'driverName', e.value[0].name)
+      this.isShowDrive = false
+    },
   },
 }
 </script>
@@ -186,7 +309,16 @@
       .item {
         display: flex;
         margin-bottom: 48rpx;
-
+        position: relative;
+        .separate {
+          position: absolute;
+          width: 4rpx;
+          height: 100%;
+          background-color: #eeeeee;
+          left: 40rpx;
+          transform: translate(-50%, 0);
+          top: 80rpx;
+        }
         .avatar {
           width: 80rpx;
           height: 80rpx;
@@ -206,16 +338,6 @@
             position: absolute;
             right: 0;
             bottom: 0;
-          }
-
-          .separate {
-            position: absolute;
-            width: 4rpx;
-            height: 100%;
-            background-color: #eeeeee;
-            left: 50%;
-            transform: translate(-50%, 0);
-            bottom: -80rpx;
           }
         }
 
@@ -243,6 +365,23 @@
 
             .status {
               color: $uni-color-primary;
+            }
+          }
+          .children {
+            display: flex;
+            flex-wrap: wrap;
+            margin-top: 12rpx;
+            .child {
+              display: flex;
+              flex-direction: column;
+              justify-content: center;
+              align-items: center;
+              margin-right: 12rpx;
+              .child_img {
+                width: 48rpx;
+                height: 48rpx;
+                border-radius: 50%;
+              }
             }
           }
 
@@ -274,6 +413,11 @@
               font-size: 26rpx;
               color: #777777;
             }
+          }
+        }
+        &:nth-last-child(1) {
+          .separate {
+            height: 0;
           }
         }
       }
@@ -356,7 +500,7 @@
     justify-content: space-between;
 
     .btn {
-      width: 336rpx;
+      flex: 1;
       height: 88rpx;
       line-height: 88rpx;
       background: #ffffff;
@@ -364,7 +508,7 @@
       border: 1rpx solid #999999;
       font-size: 32rpx;
       text-align: center;
-      margin: 16rpx 0;
+      margin: 16rpx;
     }
 
     .agree {
@@ -376,7 +520,14 @@
 
   .appr_modal {
     padding: 36rpx 30rpx 0;
-
+    .line {
+      height: 90rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e4e4e4;
+      margin-bottom: 20rpx;
+    }
     .title {
       font-weight: 500;
       font-size: 32rpx;
diff --git a/h5/pages/staff/visitorReport.vue b/h5/pages/staff/visitorReport.vue
index 0da47cb..040b1fa 100644
--- a/h5/pages/staff/visitorReport.vue
+++ b/h5/pages/staff/visitorReport.vue
@@ -18,7 +18,7 @@
       <view class="list_item">
         <view class="list_item_label">
           <text>*</text>
-          <text>鍏ュ巶鏃堕棿</text>
+          <text>鍏ュ洯鏃堕棿</text>
         </view>
         <view class="list_item_content" @click="show4 = true">
           <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
@@ -30,7 +30,7 @@
       <view class="list_item">
         <view class="list_item_label">
           <text>*</text>
-          <text>绂诲巶鏃堕棿</text>
+          <text>绂诲洯鏃堕棿</text>
         </view>
         <view class="list_item_content" @click="openLC">
           <text :style="{ color: form1.endtime ? '#000000' : '' }">{{
@@ -124,7 +124,7 @@
     <view class="footer"
       ><view class="footer_btn" @click="submit">鎻愪氦</view></view
     >
-    <!-- 鍏ュ満鏃堕棿 -->
+    <!-- 鍏ュ洯鏃堕棿 -->
     <u-datetime-picker
       :show="show4"
       :minDate="new Date().getTime()"
@@ -132,7 +132,7 @@
       @cancel="show4 = false"
       @confirm="setinDate"
     ></u-datetime-picker>
-    <!-- 绂诲満鏃堕棿 -->
+    <!-- 绂诲洯鏃堕棿 -->
     <u-datetime-picker
       v-if="form1.starttime"
       :show="show5"
@@ -276,12 +276,12 @@
         })
       if (!this.form1.starttime)
         return uni.showToast({
-          title: '鍏ュ満鏃堕棿涓嶈兘涓虹┖',
+          title: '鍏ュ洯鏃堕棿涓嶈兘涓虹┖',
           icon: 'none'
         })
       if (!this.form1.endtime)
         return uni.showToast({
-          title: '绂诲満鏃堕棿涓嶈兘涓虹┖',
+          title: '绂诲洯鏃堕棿涓嶈兘涓虹┖',
           icon: 'none'
         })
       if (!this.form1.name) return uni.showToast({
@@ -385,7 +385,7 @@
     openLC() {
       if (!this.form1.starttime)
         return uni.showToast({
-          title: '璇峰厛閫夋嫨鍏ュ巶鏃堕棿',
+          title: '璇峰厛閫夋嫨鍏ュ洯鏃堕棿',
           icon: 'none'
         })
       this.show5 = true
diff --git a/h5/pages/visitorApplication/visitorApplication.vue b/h5/pages/visitorApplication/visitorApplication.vue
index 6478aba..aa41896 100644
--- a/h5/pages/visitorApplication/visitorApplication.vue
+++ b/h5/pages/visitorApplication/visitorApplication.vue
@@ -1,8 +1,8 @@
 <template>
-	<view class="visit">
-		<view class="head">鎷滆淇℃伅</view>
-		<view class="list">
-			<!-- <view class="list_item">
+  <view class="visit">
+    <view class="head">鎷滆淇℃伅</view>
+    <view class="list">
+      <!-- <view class="list_item">
 				<view class="list_item_label">
 					<text>琚浜烘墜鏈�</text>
 					<text>*</text>
@@ -20,37 +20,43 @@
 					<input type="text" placeholder="璇疯緭鍏ュ鍚�" v-model="form1.receptMemberName" @blur="getUser" placeholder-style="color: #999999;" />
 				</view>
 			</view> -->
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>琚浜�</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="showName = true">
-					<text :style="{color: form1.receptMemberName ? '#000000' : ''}">{{form1.receptMemberName ? form1.receptMemberName : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鍏ュ巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="show4 = true">
-					<text :style="{color: form1.starttime ? '#000000' : ''}">{{form1.starttime ? form1.starttime : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>绂诲巶鏃堕棿</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="openLC">
-					<text :style="{color: form1.endtime ? '#000000' : ''}">{{form1.endtime ? form1.endtime : '璇烽�夋嫨'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<!-- <view class="list_item" v-if="accessControl === '1'" @click="show = true">
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>琚浜�</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="showName = true">
+          <text :style="{ color: form1.receptMemberName ? '#000000' : '' }">{{
+            form1.receptMemberName ? form1.receptMemberName : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鍏ュ洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="show4 = true">
+          <text :style="{ color: form1.starttime ? '#000000' : '' }">{{
+            form1.starttime ? form1.starttime : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>绂诲洯鏃堕棿</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="openLC">
+          <text :style="{ color: form1.endtime ? '#000000' : '' }">{{
+            form1.endtime ? form1.endtime : "璇烽�夋嫨"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <!-- <view class="list_item" v-if="accessControl === '1'" @click="show = true">
 				<view class="list_item_label">
 					<text>璁块棶闂ㄧ</text>
 					<text>*</text>
@@ -60,1227 +66,1363 @@
 					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
 				</view>
 			</view> -->
-			<div class="empty"></div>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鎷滆浜嬬敱</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content" @click="showReason = true">
-					<text :style="{color: form1.reason ? '#000000' : ''}">{{form1.reason ? form1.reason : '璇烽�夋嫨鎷滆浜嬬敱'}}</text>
-					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>鏄惁鏂藉伐浣滀笟</text>
-					<text>*</text>
-				</view>
-				<view class="list_item_content">
-					<switch color="#4e99a9" style="transform:scale(0.8)" @change="constructionChange" />
-				</view>
-			</view>
-			<view v-if="form1.type == '1'" class="list_item">
-				<view class="list_item_label">
-					<text>鏂藉伐鍐呭</text>
-					<!-- <text>*</text> -->
-				</view>
-				<view class="list_item_content">
-					<input type="text" v-model="form1.constructionReason" placeholder="璇疯緭鍏ユ柦宸ュ唴瀹�" placeholder-style="color: #999999;" />
-				</view>
-			</view>
-			<view class="list_item">
-				<view class="list_item_label">
-					<text>闅忚杞﹁締</text>
-					<text></text>
-				</view>
-				<view class="list_item_content" @click="openInput(1)">
-					<text :style="{color: form1.carNos ? '#000000' : ''}">{{form1.carNos ? form1.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�'}}</text>
-					<!-- <input type="text" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> -->
-				</view>
-			</view>
-		</view>
-		<view class="zw"></view>
-		<view class="footer">
-			<view class="footer_btn" @click="onSubmit">鎻愪氦</view>
-		</view>
-		<!-- 鍏ュ満鏃堕棿 -->
-		<u-datetime-picker
-			:show="show4"
-			:minDate="new Date().getTime()"
-			mode="datetime"
-			@cancel="show4 = false"
-			@confirm="setstarttime"
-		></u-datetime-picker>
-		<!-- 绂诲満鏃堕棿 -->
-		<u-datetime-picker
-			v-if="form1.starttime"
-			:show="show5"
-			:minDate="formatTimeStamp(form1.starttime)"
-			mode="datetime"
-			@cancel="show5 = false"
-			@confirm="setendtime"
-		></u-datetime-picker>
-		<!-- 闂ㄧ -->
-		<u-popup :show="show" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="closeMJ">
-			<view class="menjin">
-				<view class="respondent-title">
-					閫夋嫨闂ㄧ
-				</view>
-				<scroll-view scroll-y class="list">
-					<view class="list_item" v-for="(item, index) in columns" :key="index" @click="seleMJ(index)">
-						<text>{{item.name}}</text>
-						<image src="@/static/checkbox@2x.png" mode="widthFix" v-show="!item.active"></image>
-						<image src="@/static/checkbo1x_sel@2x.png" mode="widthFix" v-show="item.active"></image>
-					</view>
-				</scroll-view>
-				<view class="menjin_footer">
-					<view class="menjin_footer_item" @click="closeMJ">鍙栨秷</view>
-					<view class="menjin_footer_item" @click="submitMJ">纭</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 閫夋嫨闅忚浜哄憳 -->
-		<u-popup :show="show1" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show1 = false">
-			<view class="popup-content">
-				<view class="respondent-title">
-					閫夋嫨闅忚浜哄憳
-				</view>
-				<view class="search-box">
-					<view class="search-box-top">
-						<view class="search-box-top-ipt">
-							<image src="@/static/ic_search@2x.png" mode="widthFix"></image>
-							<input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
-						</view>
-						<text @click="show1 = false; show3 = true">鏂板</text>
-					</view>
-					<view class="search-box-total">鍏�0鏉℃暟鎹�</view>
-				</view>
-				<scroll-view scroll-y class="list">
-					<view class="item" v-for="(item, index) in 8" :key="index">
-						<view class="item_a">
-							<!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
-							<image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_b">
-							<image src="@/static/ic_mima@2x.png" mode="widthFix" />
-						</view>
-						<view class="item_c">
-							<text>鐢ㄦ埛鍚�</text>
-							<text>宸叉媺榛�</text>
-						</view>
-					</view>
-				</scroll-view>
-				<view class="footer1">
-					<view class="footer_left">
-						<text class="footer_left_a">宸查�夋嫨锛�0浜�</text>
-						<text class="footer_left_b">鏉庝紵锛�</text>
-					</view>
-					<view class="footer_btn">纭 0/0</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 杞﹁締 -->
-		<u-popup :show="show2" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show2 = false">
-			<view class="addcar">
-				<view class="addcar_head">娣诲姞杞﹁締</view>
-				<view class="addcar_ipt">
-					<input type="text" v-model="carName" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
-				</view>
-				<view class="addcar_footer">
-					<view class="addcar_footer_item" @click="show2 = false">鍙栨秷</view>
-					<view class="addcar_footer_item t" @click="submitCart">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-		<!-- 娣诲姞闅忚浜哄憳 -->
-		<u-popup :show="show3" :round="10" :safeAreaInsetBottom="true" :closeable="true" mode="bottom" @close="show3 = false">
-			<view class="adduser">
-				<view class="adduser_head">闅忚浜哄憳</view>
-				<view class="adduser_list">
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>濮撳悕</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.name" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ョ湡瀹炲鍚�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鎵嬫満鍙�</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="number" v-model="withUserList.phone" maxlength="11" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ユ墜鏈哄彿" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢绫诲瀷</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt" @click="show6 = true">
-							<text :style="{color: withUserList.idcardTypeName ? '#000000' : ''}">{{withUserList.idcardTypeName ? withUserList.idcardTypeName : '璇烽�夋嫨'}}</text>
-							<u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>璇佷欢鍙风爜</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.idcardNo" maxlength="18" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍏徃</text>
-							<text>*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<input type="text" v-model="withUserList.companyName" placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ュ叕鍙稿悕绉�" />
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>闅忚杞﹁締</text>
-							<text></text>
-						</view>
-						<view class="adduser_list_item_ipt" @click="openInput(2)">
-							<text :style="{color: withUserList.carNos ? '#000000' : ''}">{{withUserList.carNos ? withUserList.carNos : '璇疯緭鍏ヨ溅鐗屽彿鐮�'}}</text>
-							<!-- <input type="text" v-model="withUserList.carNos" disabled placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ヨ溅鐗屽彿" /> -->
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label1">
-							<text class="cc">浜鸿劯鐓х墖<b>*</b></text>
-							<text class="aa">1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏嶅啝鐓х墖锛�</text>
-							<text class="aa">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊锛�</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-if="!withUserList.faceImgUrl">
-								<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-							</view>
-							<view class="adduser_list_item_ipt1_upload" @click="upload('faceImg')" v-else>
-								<image :src="withUserList.faceImgUrl" mode="widthFix"></image>
-							</view>
-						</view>
-					</view>
-					<view class="adduser_list_item">
-						<view class="adduser_list_item_label">
-							<text>鍋ュ悍璇佺収鐗�</text>
-							<text v-if="visit === '1'">*</text>
-						</view>
-						<view class="adduser_list_item_ipt">
-							<view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-if="!withUserList.imgurlUrl">
-								<u-icon name="plus" color="rgb(153, 153, 153)" size="28"></u-icon>
-							</view>
-							<view class="adduser_list_item_ipt1_upload" @click="upload('imgurl')" v-else>
-								<image :src="withUserList.imgurlUrl" mode="widthFix"></image>
-							</view>
-						</view>
-					</view>
-				</view>
-				<view class="adduser_footer">
-					<view class="adduser_footer_item" @click="show3 = false">鍙栨秷</view>
-					<view class="adduser_footer_item t" @click="submitUser">鎻愪氦</view>
-				</view>
-			</view>
-		</u-popup>
-		<u-picker keyName="name" :show="show6" :columns="columns1" @confirm="seleIdcard" @cancel="show6 = false"></u-picker>
-		<u-picker keyName="name" :show="showName" :columns="VisitPoeple" @confirm="selectedName" @cancel="showName = false"></u-picker>
-		<u-picker keyName="title" :show="showReason" :columns="VisitReason" @confirm="selectedReason" @cancel="showReason = false"></u-picker>
-		<!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
-		<keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
-		<qf-image-cropper ref="cropper" :width="280" :height="280" :radius="30" @crop="uploadImg"></qf-image-cropper>
-	</view>
+      <div class="empty"></div>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鎷滆浜嬬敱</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content" @click="showReason = true">
+          <text :style="{ color: form1.reason ? '#000000' : '' }">{{
+            form1.reason ? form1.reason : "璇烽�夋嫨鎷滆浜嬬敱"
+          }}</text>
+          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>鏄惁鏂藉伐浣滀笟</text>
+          <text>*</text>
+        </view>
+        <view class="list_item_content">
+          <switch
+            color="#4e99a9"
+            style="transform: scale(0.8)"
+            @change="constructionChange"
+          />
+        </view>
+      </view>
+      <view v-if="form1.type == '1'" class="list_item">
+        <view class="list_item_label">
+          <text>鏂藉伐鍐呭</text>
+          <!-- <text>*</text> -->
+        </view>
+        <view class="list_item_content">
+          <input
+            type="text"
+            v-model="form1.constructionReason"
+            placeholder="璇疯緭鍏ユ柦宸ュ唴瀹�"
+            placeholder-style="color: #999999;"
+          />
+        </view>
+      </view>
+      <view class="list_item">
+        <view class="list_item_label">
+          <text>闅忚杞﹁締</text>
+          <text></text>
+        </view>
+        <view class="list_item_content" @click="openInput(1)">
+          <text :style="{ color: form1.carNos ? '#000000' : '' }">{{
+            form1.carNos ? form1.carNos : "璇疯緭鍏ヨ溅鐗屽彿鐮�"
+          }}</text>
+          <!-- <input type="text" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-model="form1.carNos" maxlength="8" placeholder-style="color: #999999;" /> -->
+        </view>
+      </view>
+    </view>
+    <view class="zw"></view>
+    <view class="footer">
+      <view class="footer_btn" @click="onSubmit">鎻愪氦</view>
+    </view>
+    <!-- 鍏ュ洯鏃堕棿 -->
+    <u-datetime-picker
+      :show="show4"
+      :minDate="new Date().getTime()"
+      mode="datetime"
+      @cancel="show4 = false"
+      @confirm="setstarttime"
+    ></u-datetime-picker>
+    <!-- 绂诲洯鏃堕棿 -->
+    <u-datetime-picker
+      v-if="form1.starttime"
+      :show="show5"
+      :minDate="formatTimeStamp(form1.starttime)"
+      mode="datetime"
+      @cancel="show5 = false"
+      @confirm="setendtime"
+    ></u-datetime-picker>
+    <!-- 闂ㄧ -->
+    <u-popup
+      :show="show"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="closeMJ"
+    >
+      <view class="menjin">
+        <view class="respondent-title"> 閫夋嫨闂ㄧ </view>
+        <scroll-view scroll-y class="list">
+          <view
+            class="list_item"
+            v-for="(item, index) in columns"
+            :key="index"
+            @click="seleMJ(index)"
+          >
+            <text>{{ item.name }}</text>
+            <image
+              src="@/static/checkbox@2x.png"
+              mode="widthFix"
+              v-show="!item.active"
+            ></image>
+            <image
+              src="@/static/checkbo1x_sel@2x.png"
+              mode="widthFix"
+              v-show="item.active"
+            ></image>
+          </view>
+        </scroll-view>
+        <view class="menjin_footer">
+          <view class="menjin_footer_item" @click="closeMJ">鍙栨秷</view>
+          <view class="menjin_footer_item" @click="submitMJ">纭</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 閫夋嫨闅忚浜哄憳 -->
+    <u-popup
+      :show="show1"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show1 = false"
+    >
+      <view class="popup-content">
+        <view class="respondent-title"> 閫夋嫨闅忚浜哄憳 </view>
+        <view class="search-box">
+          <view class="search-box-top">
+            <view class="search-box-top-ipt">
+              <image src="@/static/ic_search@2x.png" mode="widthFix"></image>
+              <input type="text" placeholder="鎼滅储濮撳悕/鎵嬫満鍙�" />
+            </view>
+            <text
+              @click="
+                show1 = false;
+                show3 = true;
+              "
+              >鏂板</text
+            >
+          </view>
+          <view class="search-box-total">鍏�0鏉℃暟鎹�</view>
+        </view>
+        <scroll-view scroll-y class="list">
+          <view class="item" v-for="(item, index) in 8" :key="index">
+            <view class="item_a">
+              <!-- <image src="@/static/checkbox.png" mode="widthFix" v-if="!item.active" /> -->
+              <image src="@/static/checkbox_sel@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_b">
+              <image src="@/static/ic_mima@2x.png" mode="widthFix" />
+            </view>
+            <view class="item_c">
+              <text>鐢ㄦ埛鍚�</text>
+              <text>宸叉媺榛�</text>
+            </view>
+          </view>
+        </scroll-view>
+        <view class="footer1">
+          <view class="footer_left">
+            <text class="footer_left_a">宸查�夋嫨锛�0浜�</text>
+            <text class="footer_left_b">鏉庝紵锛�</text>
+          </view>
+          <view class="footer_btn">纭 0/0</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 杞﹁締 -->
+    <u-popup
+      :show="show2"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show2 = false"
+    >
+      <view class="addcar">
+        <view class="addcar_head">娣诲姞杞﹁締</view>
+        <view class="addcar_ipt">
+          <input type="text" v-model="carName" placeholder="璇疯緭鍏ヨ溅鐗屽彿" />
+        </view>
+        <view class="addcar_footer">
+          <view class="addcar_footer_item" @click="show2 = false">鍙栨秷</view>
+          <view class="addcar_footer_item t" @click="submitCart">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <!-- 娣诲姞闅忚浜哄憳 -->
+    <u-popup
+      :show="show3"
+      :round="10"
+      :safeAreaInsetBottom="true"
+      :closeable="true"
+      mode="bottom"
+      @close="show3 = false"
+    >
+      <view class="adduser">
+        <view class="adduser_head">闅忚浜哄憳</view>
+        <view class="adduser_list">
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>濮撳悕</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.name"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ョ湡瀹炲鍚�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鎵嬫満鍙�</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="number"
+                v-model="withUserList.phone"
+                maxlength="11"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ユ墜鏈哄彿"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢绫诲瀷</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt" @click="show6 = true">
+              <text
+                :style="{ color: withUserList.idcardTypeName ? '#000000' : '' }"
+                >{{
+                  withUserList.idcardTypeName
+                    ? withUserList.idcardTypeName
+                    : "璇烽�夋嫨"
+                }}</text
+              >
+              <u-icon name="arrow-right" color="#CCCCCC" size="16"></u-icon>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>璇佷欢鍙风爜</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.idcardNo"
+                maxlength="18"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍏徃</text>
+              <text>*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <input
+                type="text"
+                v-model="withUserList.companyName"
+                placeholder-style="color: #999999;font-size: 28rpx;"
+                placeholder="璇疯緭鍏ュ叕鍙稿悕绉�"
+              />
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>闅忚杞﹁締</text>
+              <text></text>
+            </view>
+            <view class="adduser_list_item_ipt" @click="openInput(2)">
+              <text :style="{ color: withUserList.carNos ? '#000000' : '' }">{{
+                withUserList.carNos ? withUserList.carNos : "璇疯緭鍏ヨ溅鐗屽彿鐮�"
+              }}</text>
+              <!-- <input type="text" v-model="withUserList.carNos" disabled placeholder-style="color: #999999;font-size: 28rpx;" placeholder="璇疯緭鍏ヨ溅鐗屽彿" /> -->
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label1">
+              <text class="cc">浜鸿劯鐓х墖<b>*</b></text>
+              <text class="aa"
+                >1銆佽鎻愪緵浜斿畼娓呮櫚锛屼汉鑴稿眳涓殑姝i潰浜鸿劯鍏嶅啝鐓х墖锛�</text
+              >
+              <text class="aa">2銆佺収鐗囨棤閫嗗厜銆佹棤PS銆佹棤杩囧害缇庨澶勭悊锛�</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('faceImg')"
+                v-if="!withUserList.faceImgUrl"
+              >
+                <u-icon
+                  name="plus"
+                  color="rgb(153, 153, 153)"
+                  size="28"
+                ></u-icon>
+              </view>
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('faceImg')"
+                v-else
+              >
+                <image :src="withUserList.faceImgUrl" mode="widthFix"></image>
+              </view>
+            </view>
+          </view>
+          <view class="adduser_list_item">
+            <view class="adduser_list_item_label">
+              <text>鍋ュ悍璇佺収鐗�</text>
+              <text v-if="visit === '1'">*</text>
+            </view>
+            <view class="adduser_list_item_ipt">
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('imgurl')"
+                v-if="!withUserList.imgurlUrl"
+              >
+                <u-icon
+                  name="plus"
+                  color="rgb(153, 153, 153)"
+                  size="28"
+                ></u-icon>
+              </view>
+              <view
+                class="adduser_list_item_ipt1_upload"
+                @click="upload('imgurl')"
+                v-else
+              >
+                <image :src="withUserList.imgurlUrl" mode="widthFix"></image>
+              </view>
+            </view>
+          </view>
+        </view>
+        <view class="adduser_footer">
+          <view class="adduser_footer_item" @click="show3 = false">鍙栨秷</view>
+          <view class="adduser_footer_item t" @click="submitUser">鎻愪氦</view>
+        </view>
+      </view>
+    </u-popup>
+    <u-picker
+      keyName="name"
+      :show="show6"
+      :columns="columns1"
+      @confirm="seleIdcard"
+      @cancel="show6 = false"
+    ></u-picker>
+    <u-picker
+      keyName="name"
+      :show="showName"
+      :columns="VisitPoeple"
+      @confirm="selectedName"
+      @cancel="showName = false"
+    ></u-picker>
+    <u-picker
+      keyName="title"
+      :show="showReason"
+      :columns="VisitReason"
+      @confirm="selectedReason"
+      @cancel="showReason = false"
+    ></u-picker>
+    <!-- <tly-picture-cut ref="tlyPictureCut" :pictureSrc="photoSrc" @createImg="uploadImg"></tly-picture-cut> -->
+    <keyboardInput ref="keyboard" @export="setPlate" @close="closeInput" />
+    <qf-image-cropper
+      ref="cropper"
+      :width="280"
+      :height="280"
+      :radius="30"
+      @crop="uploadImg"
+    ></qf-image-cropper>
+  </view>
 </template>
 
 <script>
-	import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue";
-	import keyboardInput from "@/components/keyboard-input/keyboard-input.vue";
-	import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
-	import { getDaysAfterDate } from '@/utils/utils.js'
-	import {
-		getVisitedMember,
-		getSystemDictData,
-		getVisitedVisitReason,
-		createFk
- } from '@/api'
-	export default {
-		data() {
-			return {
-				photoSrc: '',
-				type: '',
-				inputType: '',
-				showName: false,
-				show: false,
-				show1: false,
-				show2: false,
-				show3: false,
-				show4: false,
-				show5: false,
-				show6: false,
-				show7: false,
-				showReason: false,
-				fileList: [],
-				columns1: [
-					[{name: '韬唤璇�', id: 0}, {name: '娓境璇佷欢', id: 1},{name: '鎶ょ収', id: 2}],
-				],
-				VisitReason: [],
-				VisitPoeple: [],
-				columns: [],
-				cars: [],
-				day: null,
-				maxTime: '',
-				carName: '',
-				personnel: [],
-				userAnswerId: '',
-				form1: {
-					phone1: '',
-					receptMemberId: '',
-					receptMemberName: '',
-					starttime: '',
-					endtime: '',
-					doors: '',
-					doorSelectName: '',
-					reason: '',
-					carNos: '',
-					type: 0
-				},
-				withUserList: {
-					name: '',
-					phone: '',
-					idcardType: '',
-					idcardTypeName: '',
-					companyName: '',
-					idcardNo: '',
-					faceImg: '',
-					faceImgUrl: '',
-					imgurl: '',
-					imgurlUrl: ''
-				},
-				visit: '',
-				form: {},
-				accessControl: '',
-				verify: ''
-			};
-		},
-		components: { tlyPictureCut, keyboardInput, QfImageCropper },
-		onLoad(options) {
-			if (options.data) {
-				this.form = JSON.parse(options.data)
-			}
-			// this.getvisit()
-			// this.getVisit1()
-			// this.getUserValid()
-			this.getUser()
-		},
-		methods: {
-			openInput(type) {
-				this.inputType = type
-				this.$refs.keyboard.open()
-			},
-			setPlate(e) {
-				if (this.inputType === 1) {
-					this.form1.carNos = e
-				} else if (this.inputType === 2) {
-					this.withUserList.carNos = e
-				}
-				this.$forceUpdate()
-				this.closeInput()
-			},
-			closeInput() {
-				this.$refs.keyboard.close()
-			},
-			constructionChange(e) {
-				console.log(e.detail.value);
-				this.form1.type = Number(e.detail.value)
-				console.log(this.form1.type);
-			},
-			uploadImg(file) {
-				this.$refs.cropper.close()
-				uni.showLoading({ title: '涓婁紶涓�', mask: true });
-				uni.uploadFile({
-					url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
-					filePath: file.tempFilePath,
-					name: 'file',
-					formData: {
-						folderCode: 'MEMBER_IMG'
-					},
-					success: (uploadFileRes) => {
-						let res = JSON.parse(uploadFileRes.data)
-						this.withUserList.faceImg = res.data.halfPath
-						this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
-					},
-					complete() {
-						uni.hideLoading();
-					}
-				});
-			},
-			closeMJ() {
-				this.show = false
-				this.columns.forEach(item => {
-					item.active = false
-				})
-			},
-			onSubmit() {
-				if (!this.form1.receptMemberId) return uni.showToast({
-					title: '璇峰~鍐欐湁鏁堢殑璁块棶浜�',
-					icon: 'none'
-				})
-				if (!this.form1.starttime) return uni.showToast({
-					title: '鍏ュ満鏃堕棿涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.endtime) return uni.showToast({
-					title: '绂诲満鏃堕棿涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
-					title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.form1.reason) return uni.showToast({
-					title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				// this.form1.starttime = this.form1.starttime + ':00'
-				// this.form1.endtime = this.form1.endtime + ':00'
-				let data = JSON.parse(JSON.stringify(this.form1))
-				data.starttime = data.starttime + ':00'
-				data.endtime = data.endtime + ':00'
-				createFk({
-					...this.form,
-					...data,
-					openid: this.$store.state.openId,
-					withUserList: this.personnel
-				}).then(res => {
-					if (res.code === 200) {
-						uni.reLaunch({
-							url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
-						})
-					}
-				})
-			},
-			deleUser(i) {
-				this.personnel.splice(i, 1)
-			},
-			getVisit1() {
-				// 鏄惁闇�瑕佺瓟棰�
-				this.$u.api.getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'HEALTH_CARD'
-				}).then(res => {
-					if (res.code === 200) {
-						this.visit = res.data.code
-					}
-				})
-				// 璧峰鏃堕棿鏃堕暱
-				getSystemDictData({
-					dictCode: 'VISIT_CONFIG',
-					label: 'VALIDATE_VISIT'
-				}).then(res => {
-					if (res.code === 200) {
-						this.day = Number(res.data.code)
-						// console.log(nextDay('after', true, this.day))
-					}
-				})
-			},
-			submitUser() {
-				if (!this.withUserList.name) return uni.showToast({
-					title: '濮撳悕涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.phone) return uni.showToast({
-					title: '鎵嬫満鍙蜂笉鑳戒负绌�',
-					icon: 'none'
-				})
-				const regExp = /^1[3456789]\d{9}$/;
-				if (!regExp.test(this.withUserList.phone)) return uni.showToast({
-					title: '鎵嬫満鍙锋牸寮忛敊璇�',
-					icon: 'none'
-				})
-				if (!String(this.withUserList.idcardType)) return uni.showToast({
-					title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.idcardNo) return uni.showToast({
-					title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (this.withUserList.idcardType === 0) {
-					const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/;
-					if (!regex.test(this.withUserList.idcardNo)) return uni.showToast({
-						title: '璇佷欢鍙风爜鏍煎紡閿欒',
-						icon: 'none'
-					})
-				}
-				if (!this.withUserList.companyName) return uni.showToast({
-					title: '鍏徃涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (!this.withUserList.faceImg) return uni.showToast({
-					title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
-					icon: 'none'
-				})
-				if (this.visit === '1') {
-					if (!this.withUserList.imgurl) return uni.showToast({
-						title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
-						icon: 'none'
-					})
-				}
-				let arr = JSON.parse(JSON.stringify(this.withUserList))
-				this.personnel.push(arr)
-				this.show3 = false
-				this.withUserList.name = ''
-				this.withUserList.phone = ''
-				this.withUserList.idcardType = ''
-				this.withUserList.idcardTypeName = ''
-				this.withUserList.companyName = ''
-				this.withUserList.idcardNo = ''
-				this.withUserList.faceImg = ''
-				this.withUserList.faceImgUrl = ''
-				this.withUserList.imgurl = ''
-				this.withUserList.imgurlUrl = ''
-			},
-			upload(type) {
-				this.type = type
-				if (type === 'faceImg') {
-					this.$refs.cropper.open()
-					return
-				}
-				uni.chooseImage({
-					success: (chooseImageRes) => {
-						uni.showLoading({ title: '涓婁紶涓�', mask: true });
-						for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
-							uni.uploadFile({
-								url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
-								filePath: chooseImageRes.tempFilePaths[i],
-								name: 'file',
-								formData: {
-									folderCode: 'MEMBER_IMG'
-								},
-								success: (uploadFileRes) => {
-									let res = JSON.parse(uploadFileRes.data)
-									if (type === 'faceImg') {
-										this.withUserList.faceImg = res.data.halfPath
-										this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
-									} else {
-										this.withUserList.imgurl = res.data.halfPath
-										this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
-									}
-								},
-								complete() {
-									if (i === chooseImageRes.tempFilePaths.length - 1) {
-										uni.hideLoading();
-									}
-								}
-							});
-						}
-					}
-				});
-			},
-			seleIdcard(e) {
-				this.withUserList.idcardType = e.value[0].id
-				this.withUserList.idcardTypeName = e.value[0].name
-				this.show6 = false
-			},
-			selectedName(e) {
-				this.form1.receptMemberName = e.value[0].name
-				this.form1.receptMemberId = e.value[0].id
-				this.form1.receptMemberDepartment = e.value[0].companyId
-				this.showName = false
-			},
-			selectedReason(e) {
-				this.form1.reason = e.value[0].title
-				console.log(e.value[0].title);
-				this.showReason = false
-			},
-			submitCart() {
-				if (!this.carName) return uni.showToast({
-					title: '璇疯緭鍏ヨ溅鐗屽彿鐮�',
-					icon: 'none'
-				})
-				this.cars.push(this.carName)
-				this.form1.carNos = this.cars.join(',')
-				this.carName = ''
-				this.show2 = false
-			},
-			deleCars(i) {
-				this.cars.splice(i, 1)
-				this.form1.carNos = this.cars.join(',')
-			},
-			submitMJ() {
-				let arr = []
-				let names = []
-				this.columns.forEach(item => {
-					if (item.active) {
-						arr.push(item.id)
-						names.push(item.name)
-					}
-				})
-				if (arr.length === 0) return uni.showToast({
-					title: '璇烽�夋嫨闂ㄧ',
-					icon: 'none'
-				})
-				this.form1.doorSelectName = names.join(',')
-				this.form1.doors = arr.join(',')
-				this.show = false
-			},
-			seleMJ(i) {
-				this.columns.forEach((item,index) => {
-					if (index === i) {
-						item.active = !item.active
-					}
-				})
-			},
-			openLC() {
-				if (!this.form1.starttime) return uni.showToast({
-					title: '璇峰厛閫夋嫨鍏ュ巶鏃堕棿',
-					icon: 'none'
-				})
-				this.show5 = true
-			},
-			setstarttime(e) {
-				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);
-				this.show4 = false
-			},
-			setendtime(e) {
-				this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM');
-				this.show5 = false
-			},
-			formatTimeStamp(date) {
-			    return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g,'/')}`))
-			},
-			// 鏌ヨ鐢ㄦ埛
-			getUser() {
-				getVisitedMember().then(res => {
-					this.VisitPoeple = [res.data || []]
-				})
-				getVisitedVisitReason({}).then(res => {
-					this.VisitReason = [res.data || []]
-				})
-			},
-			// 琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
-			getUserValid() {
-				getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'BEVISITED_USER_VALID'
-				}).then(res => {
-					if (res.code === 200) {
-						this.verify = res.data.code
-					}
-				})
-			},
-			// 鑾峰彇鏄惁闇�瑕侀�夋嫨闂ㄧ/闂ㄧ鍒楄〃
-			getvisit() {
-				getSystemDictData({
-					dictCode: 'SYSTEM',
-					label: 'SELECT_DOORS_VISIT_REQUIRED'
-				}).then(res => {
-					if (res.code === 200) {
-						this.accessControl = res.data.code
-						if (res.data.code === '1') {
-							this.$u.api.deviceRoleList({ type: 1 })
-								.then(device => {
-									if (device.code === 200) {
-										if (device.data.length > 0) {
-											device.data.forEach(item => {
-												item.active = false
-											})
-											this.columns = device.data
-										}
-									}
-								})
-						}
-					}
-				})
-			},
-			confirm(e) {
-				this.show = false
-			}
-		}
-	}
+import tlyPictureCut from "@/components/tly-picture-cut/tlyPictureCut.vue"
+import keyboardInput from "@/components/keyboard-input/keyboard-input.vue"
+import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue'
+import { getDaysAfterDate } from '@/utils/utils.js'
+import {
+  getVisitedMember,
+  getSystemDictData,
+  getVisitedVisitReason,
+  createFk
+} from '@/api'
+export default {
+  data() {
+    return {
+      photoSrc: '',
+      type: '',
+      inputType: '',
+      showName: false,
+      show: false,
+      show1: false,
+      show2: false,
+      show3: false,
+      show4: false,
+      show5: false,
+      show6: false,
+      show7: false,
+      showReason: false,
+      fileList: [],
+      columns1: [
+        [{ name: '韬唤璇�', id: 0 }, { name: '娓境璇佷欢', id: 1 }, { name: '鎶ょ収', id: 2 }],
+      ],
+      VisitReason: [],
+      VisitPoeple: [],
+      columns: [],
+      cars: [],
+      day: null,
+      maxTime: '',
+      carName: '',
+      personnel: [],
+      userAnswerId: '',
+      form1: {
+        phone1: '',
+        receptMemberId: '',
+        receptMemberName: '',
+        starttime: '',
+        endtime: '',
+        doors: '',
+        doorSelectName: '',
+        reason: '',
+        carNos: '',
+        type: 0
+      },
+      withUserList: {
+        name: '',
+        phone: '',
+        idcardType: '',
+        idcardTypeName: '',
+        companyName: '',
+        idcardNo: '',
+        faceImg: '',
+        faceImgUrl: '',
+        imgurl: '',
+        imgurlUrl: ''
+      },
+      visit: '',
+      form: {},
+      accessControl: '',
+      verify: ''
+    }
+  },
+  components: { tlyPictureCut, keyboardInput, QfImageCropper },
+  onLoad(options) {
+    if (options.data) {
+      this.form = JSON.parse(options.data)
+    }
+    // this.getvisit()
+    // this.getVisit1()
+    // this.getUserValid()
+    this.getUser()
+  },
+  methods: {
+    openInput(type) {
+      this.inputType = type
+      this.$refs.keyboard.open()
+    },
+    setPlate(e) {
+      if (this.inputType === 1) {
+        this.form1.carNos = e
+      } else if (this.inputType === 2) {
+        this.withUserList.carNos = e
+      }
+      this.$forceUpdate()
+      this.closeInput()
+    },
+    closeInput() {
+      this.$refs.keyboard.close()
+    },
+    constructionChange(e) {
+      console.log(e.detail.value)
+      this.form1.type = Number(e.detail.value)
+      console.log(this.form1.type)
+    },
+    uploadImg(file) {
+      this.$refs.cropper.close()
+      uni.showLoading({ title: '涓婁紶涓�', mask: true })
+      uni.uploadFile({
+        url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
+        filePath: file.tempFilePath,
+        name: 'file',
+        formData: {
+          folderCode: 'MEMBER_IMG'
+        },
+        success: (uploadFileRes) => {
+          let res = JSON.parse(uploadFileRes.data)
+          this.withUserList.faceImg = res.data.halfPath
+          this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+        },
+        complete() {
+          uni.hideLoading()
+        }
+      })
+    },
+    closeMJ() {
+      this.show = false
+      this.columns.forEach(item => {
+        item.active = false
+      })
+    },
+    onSubmit() {
+      if (!this.form1.receptMemberId) return uni.showToast({
+        title: '璇峰~鍐欐湁鏁堢殑璁块棶浜�',
+        icon: 'none'
+      })
+      if (!this.form1.starttime) return uni.showToast({
+        title: '鍏ュ洯鏃堕棿涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.endtime) return uni.showToast({
+        title: '绂诲洯鏃堕棿涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.doorSelectName && this.accessControl == 1) return uni.showToast({
+        title: '璁块棶闂ㄧ涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.form1.reason) return uni.showToast({
+        title: '鎷滆浜嬬敱涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      // this.form1.starttime = this.form1.starttime + ':00'
+      // this.form1.endtime = this.form1.endtime + ':00'
+      let data = JSON.parse(JSON.stringify(this.form1))
+      data.starttime = data.starttime + ':00'
+      data.endtime = data.endtime + ':00'
+      createFk({
+        ...this.form,
+        ...data,
+        openid: this.$store.state.openId,
+        withUserList: this.personnel
+      }).then(res => {
+        if (res.code === 200) {
+          uni.reLaunch({
+            url: `/pages/appointmentDetails/appointmentDetails?id=${res.data}`
+          })
+        }
+      })
+    },
+    deleUser(i) {
+      this.personnel.splice(i, 1)
+    },
+    getVisit1() {
+      // 鏄惁闇�瑕佺瓟棰�
+      this.$u.api.getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'HEALTH_CARD'
+      }).then(res => {
+        if (res.code === 200) {
+          this.visit = res.data.code
+        }
+      })
+      // 璧峰鏃堕棿鏃堕暱
+      getSystemDictData({
+        dictCode: 'VISIT_CONFIG',
+        label: 'VALIDATE_VISIT'
+      }).then(res => {
+        if (res.code === 200) {
+          this.day = Number(res.data.code)
+          // console.log(nextDay('after', true, this.day))
+        }
+      })
+    },
+    submitUser() {
+      if (!this.withUserList.name) return uni.showToast({
+        title: '濮撳悕涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.phone) return uni.showToast({
+        title: '鎵嬫満鍙蜂笉鑳戒负绌�',
+        icon: 'none'
+      })
+      const regExp = /^1[3456789]\d{9}$/
+      if (!regExp.test(this.withUserList.phone)) return uni.showToast({
+        title: '鎵嬫満鍙锋牸寮忛敊璇�',
+        icon: 'none'
+      })
+      if (!String(this.withUserList.idcardType)) return uni.showToast({
+        title: '璇佷欢绫诲瀷涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.idcardNo) return uni.showToast({
+        title: '璇佷欢鍙风爜涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (this.withUserList.idcardType === 0) {
+        const regex = /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}[\dxX]$/
+        if (!regex.test(this.withUserList.idcardNo)) return uni.showToast({
+          title: '璇佷欢鍙风爜鏍煎紡閿欒',
+          icon: 'none'
+        })
+      }
+      if (!this.withUserList.companyName) return uni.showToast({
+        title: '鍏徃涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (!this.withUserList.faceImg) return uni.showToast({
+        title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+        icon: 'none'
+      })
+      if (this.visit === '1') {
+        if (!this.withUserList.imgurl) return uni.showToast({
+          title: '浜鸿劯鐓х墖涓嶈兘涓虹┖',
+          icon: 'none'
+        })
+      }
+      let arr = JSON.parse(JSON.stringify(this.withUserList))
+      this.personnel.push(arr)
+      this.show3 = false
+      this.withUserList.name = ''
+      this.withUserList.phone = ''
+      this.withUserList.idcardType = ''
+      this.withUserList.idcardTypeName = ''
+      this.withUserList.companyName = ''
+      this.withUserList.idcardNo = ''
+      this.withUserList.faceImg = ''
+      this.withUserList.faceImgUrl = ''
+      this.withUserList.imgurl = ''
+      this.withUserList.imgurlUrl = ''
+    },
+    upload(type) {
+      this.type = type
+      if (type === 'faceImg') {
+        this.$refs.cropper.open()
+        return
+      }
+      uni.chooseImage({
+        success: (chooseImageRes) => {
+          uni.showLoading({ title: '涓婁紶涓�', mask: true })
+          for (let i = 0; i < chooseImageRes.tempFilePaths.length; i++) {
+            uni.uploadFile({
+              url: `${this.$baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`,
+              filePath: chooseImageRes.tempFilePaths[i],
+              name: 'file',
+              formData: {
+                folderCode: 'MEMBER_IMG'
+              },
+              success: (uploadFileRes) => {
+                let res = JSON.parse(uploadFileRes.data)
+                if (type === 'faceImg') {
+                  this.withUserList.faceImg = res.data.halfPath
+                  this.withUserList.faceImgUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+                } else {
+                  this.withUserList.imgurl = res.data.halfPath
+                  this.withUserList.imgurlUrl = res.data.prefixPath + res.data.folder + res.data.halfPath
+                }
+              },
+              complete() {
+                if (i === chooseImageRes.tempFilePaths.length - 1) {
+                  uni.hideLoading()
+                }
+              }
+            })
+          }
+        }
+      })
+    },
+    seleIdcard(e) {
+      this.withUserList.idcardType = e.value[0].id
+      this.withUserList.idcardTypeName = e.value[0].name
+      this.show6 = false
+    },
+    selectedName(e) {
+      this.form1.receptMemberName = e.value[0].name
+      this.form1.receptMemberId = e.value[0].id
+      this.form1.receptMemberDepartment = e.value[0].companyId
+      this.showName = false
+    },
+    selectedReason(e) {
+      this.form1.reason = e.value[0].title
+      console.log(e.value[0].title)
+      this.showReason = false
+    },
+    submitCart() {
+      if (!this.carName) return uni.showToast({
+        title: '璇疯緭鍏ヨ溅鐗屽彿鐮�',
+        icon: 'none'
+      })
+      this.cars.push(this.carName)
+      this.form1.carNos = this.cars.join(',')
+      this.carName = ''
+      this.show2 = false
+    },
+    deleCars(i) {
+      this.cars.splice(i, 1)
+      this.form1.carNos = this.cars.join(',')
+    },
+    submitMJ() {
+      let arr = []
+      let names = []
+      this.columns.forEach(item => {
+        if (item.active) {
+          arr.push(item.id)
+          names.push(item.name)
+        }
+      })
+      if (arr.length === 0) return uni.showToast({
+        title: '璇烽�夋嫨闂ㄧ',
+        icon: 'none'
+      })
+      this.form1.doorSelectName = names.join(',')
+      this.form1.doors = arr.join(',')
+      this.show = false
+    },
+    seleMJ(i) {
+      this.columns.forEach((item, index) => {
+        if (index === i) {
+          item.active = !item.active
+        }
+      })
+    },
+    openLC() {
+      if (!this.form1.starttime) return uni.showToast({
+        title: '璇峰厛閫夋嫨鍏ュ洯鏃堕棿',
+        icon: 'none'
+      })
+      this.show5 = true
+    },
+    setstarttime(e) {
+      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)
+      this.show4 = false
+    },
+    setendtime(e) {
+      this.form1.endtime = uni.$u.timeFormat(e.value, 'yyyy-mm-dd hh:MM')
+      this.show5 = false
+    },
+    formatTimeStamp(date) {
+      return Date.parse(new Date(`${date}`)) || Date.parse(new Date(`${date.replace(/-/g, '/')}`))
+    },
+    // 鏌ヨ鐢ㄦ埛
+    getUser() {
+      getVisitedMember().then(res => {
+        this.VisitPoeple = [res.data || []]
+      })
+      getVisitedVisitReason({}).then(res => {
+        this.VisitReason = [res.data || []]
+      })
+    },
+    // 琚嫓璁夸汉淇℃伅鏍¢獙鏂瑰紡锛�0鎵嬫満鍙峰崟鐙牎楠� 1鎵嬫満鍙峰拰濮撳悕缁勫悎鏍¢獙锛�
+    getUserValid() {
+      getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'BEVISITED_USER_VALID'
+      }).then(res => {
+        if (res.code === 200) {
+          this.verify = res.data.code
+        }
+      })
+    },
+    // 鑾峰彇鏄惁闇�瑕侀�夋嫨闂ㄧ/闂ㄧ鍒楄〃
+    getvisit() {
+      getSystemDictData({
+        dictCode: 'SYSTEM',
+        label: 'SELECT_DOORS_VISIT_REQUIRED'
+      }).then(res => {
+        if (res.code === 200) {
+          this.accessControl = res.data.code
+          if (res.data.code === '1') {
+            this.$u.api.deviceRoleList({ type: 1 })
+              .then(device => {
+                if (device.code === 200) {
+                  if (device.data.length > 0) {
+                    device.data.forEach(item => {
+                      item.active = false
+                    })
+                    this.columns = device.data
+                  }
+                }
+              })
+          }
+        }
+      })
+    },
+    confirm(e) {
+      this.show = false
+    }
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7 !important;
-	}
-	.u-upload__button {
-		margin: 0 !important;
-	}
+page {
+  background-color: #f7f7f7 !important;
+}
+.u-upload__button {
+  margin: 0 !important;
+}
 </style>
 <style lang="scss" scoped>
-	.visit {
-		width: 100%;
-		.menjin {
-			width: 100%;
-			.respondent-title {
-				width: 100%;
-				height: 100rpx;
-				line-height: 100rpx;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.list {
-				width: 100%;
-				height: 400rpx;
-				display: flex;
-				flex-direction: column;
-				.list_item {
-					width: 100%;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					text {
-						font-size: 28rpx;
-						color: #000000;
-					}
-					image {
-						width: 30rpx;
-						height: 30rpx;
-					}
-				}
-			}
-			.menjin_footer {
-				width: 100%;
-				padding: 30rpx;
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.menjin_footer_item {
-					flex: 1;
-					height: 80rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					border-radius: 10rpx;
-					background-color: #025EEF;
-					color: #ffffff;
-					font-size: 26rpx;
-					margin-left: 30rpx;
-					&:first-child {
-						margin-left: 0 !important;
-					}
-				}
-			}
-		}
-		.adduser {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.adduser_head {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.adduser_list {
-				width: 100%;
-				margin-top: 40rpx;
-				.adduser_list_item {
-					width: 100%;
-					padding: 24rpx 0;
-					box-sizing: border-box;
-					border-bottom: 1rpx solid #E5E5E5;
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-					.adduser_list_item_label1 {
-						flex: 1;
-						display: flex;
-						flex-direction: column;
-						.cc {
-							font-size: 30rpx;
-							font-family: PingFangSC, PingFang SC;
-							font-weight: 400;
-							color: #222222;
-							margin-bottom: 20rpx;
-							b {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #E0312A;
-							}
-						}
-						.aa {
-							font-size: 24rpx;
-							font-weight: 400;
-							color: #999999;
-						}
-					}
-					.adduser_list_item_label {
-						flex-shrink: 0;
-						display: flex;
-						align-items: center;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #E0312A;
-							}
-						}
-					}
-					.adduser_list_item_ipt {
-						flex-shrink: 0;
-						text-align: right;
-						font-size: 28rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-left: 30rpx;	
-						display: flex;
-						align-items: center;
-						justify-content: flex-end;
-						.adduser_list_item_ipt1_upload {
-							width: 120rpx;
-							height: 120rpx;
-							background-color: #ececec;
-							display: flex;
-							align-items: center;
-							justify-content: center;
-							overflow: hidden;
-							image {
-								width: 100%;
-								height: 100%;
-							}
-						}
-						text {
-							font-size: 28rpx;
-							font-family: PingFangSC, PingFang SC;
-							font-weight: 400;
-							color: #999999;
-						}
-					}
-				}
-			}
-			.adduser_footer {
-				width: 100%;
-				margin-top: 60rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				.t {
-					background: #4d99a9 !important;
-					color: #ffffff !important;
-				}
-				.adduser_footer_item {
-					width: 336rpx;
-					height: 88rpx;
-					line-height: 88rpx;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #4d99a9;
-					font-size: 32rpx;
-					font-family: PingFangSC, PingFang SC;
-					font-weight: 400;
-					color: #4d99a9;
-					margin-right: 18rpx;
-					&:last-child {
-						margin: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.addcar {
-			padding: 30rpx;
-			width: 100%;
-			box-sizing: border-box;
-			.addcar_head {
-				text-align: center;
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
-			.addcar_ipt {
-				width: 100%;
-				height: 100rpx;
-				line-height: 100rpx;
-				text-align: center;
-				background: #F7F7F7;
-				border-radius: 50rpx;
-				margin-top: 60rpx;
-				input {
-					width: 100%;
-					height: 100%;
-					font-size: 28rpx;
-					font-weight: 400;
-					color: #000000;
-					text-align: center;
-				}
-			}
-			.addcar_footer {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				margin-top: 60rpx;
-				.t {
-					background: #4d99a9 !important;
-					color: #ffffff !important;
-				}
-				.addcar_footer_item {
-					flex: 1;
-					height: 88rpx;
-					line-height: 88rpx;
-					font-size: 32rpx;
-					font-weight: 400;
-					color: #025EEF;
-					text-align: center;
-					border-radius: 44rpx;
-					border: 1rpx solid #025EEF;
-					margin-right: 18rpx;
-					&:last-child {
-						margin-right: 0 !important;
-					}
-				}
-			}
-		}
-		
-		.popup-content {
-			padding: 30rpx 30rpx 0 30rpx;
-			overflow: hidden;
-			display: flex;
-			flex-flow: column;
-			.respondent-title {
-				width: 100%;
-				text-align: center;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.search-box {
-				width: 100%;
-				margin-top: 40rpx;
-				.search-box-top {
-					width: 100%;
-					height: 68rpx;
-					display: flex;
-					align-items: center;
-					.search-box-top-ipt {
-						flex: 1;
-						height: 100%;
-						padding: 0 30rpx;
-						box-sizing: border-box;
-						background: #F7F7F7;
-						border-radius: 4rpx;
-						display: flex;
-						align-items: center;
-						image {
-							width: 36rpx;
-							height: 36rpx;
-							flex-shrink: 0;
-							margin-right: 22rpx;
-						}
-						input {
-							flex: 1;
-							height: 100%;
-							font-size: 26rpx;
-							font-weight: 400;
-							color: #B2B2B2;
-						}
-					}
-					text {
-						flex-shrink: 0;
-						margin-left: 30rpx;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #025EEF;
-					}
-				}
-				.search-box-total {
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #666666;
-					margin-top: 24rpx;
-				}
-			}
-			.list {
-				width: 100%;
-				height: 800rpx;
-				margin-top: 30rpx;
-				padding: 0 !important;
-				.item {
-					width: 100%;
-					height: 102rpx;
-					display: flex;
-					align-items: center;
-					border-bottom: 1rpx solid #E5E5E5;
-					.item_a {
-						flex-shrink: 0;
-						width: 36rpx;
-						height: 36rpx;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_b {
-						flex-shrink: 0;
-						width: 80rpx;
-						height: 80rpx;
-						display: flex;
-						align-items: center;
-						justify-content: center;
-						overflow: hidden;
-						margin-right: 24rpx;
-						image {
-							width: 100%;
-							height: 100%;
-						}
-					}
-					.item_c {
-						flex: 1;
-						display: flex;
-						align-items: center;
-						text {
-							&:nth-child(1) {
-								font-size: 30rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #222222;
-							}
-							&:nth-child(2) {
-								font-size: 20rpx;
-								font-family: PingFangSC, PingFang SC;
-								font-weight: 400;
-								color: #999999;
-								padding: 1rpx 4rpx;
-								box-sizing: border-box;
-								background-color: #EEEEEE;
-								margin-left: 12rpx;
-							}
-						}
-					}
-				}
-			}
-			.footer1 {
-				width: 100%;
-				height: 100rpx;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				padding: 14rpx 0 0 0;
-				box-sizing: border-box;
-				.footer_left {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					.footer_left_a {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-					}
-					.footer_left_b {
-						font-size: 24rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #999999;
-					}
-				}
-				.footer_btn {
-					flex-shrink: 0;
-					width: 216rpx;
-					height: 72rpx;
-					line-height: 72rpx;
-					text-align: center;
-					background: #025EEF;
-					border-radius: 8rpx;
-					font-size: 28rpx;
-					font-weight: 500;
-					color: #FFFFFF;
-				}
-			}
-		}
-		    
+.visit {
+  width: 100%;
+  .menjin {
+    width: 100%;
+    .respondent-title {
+      width: 100%;
+      height: 100rpx;
+      line-height: 100rpx;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .list {
+      width: 100%;
+      height: 400rpx;
+      display: flex;
+      flex-direction: column;
+      .list_item {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        text {
+          font-size: 28rpx;
+          color: #000000;
+        }
+        image {
+          width: 30rpx;
+          height: 30rpx;
+        }
+      }
+    }
+    .menjin_footer {
+      width: 100%;
+      padding: 30rpx;
+      box-sizing: border-box;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .menjin_footer_item {
+        flex: 1;
+        height: 80rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-radius: 10rpx;
+        background-color: #025eef;
+        color: #ffffff;
+        font-size: 26rpx;
+        margin-left: 30rpx;
+        &:first-child {
+          margin-left: 0 !important;
+        }
+      }
+    }
+  }
+  .adduser {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .adduser_head {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .adduser_list {
+      width: 100%;
+      margin-top: 40rpx;
+      .adduser_list_item {
+        width: 100%;
+        padding: 24rpx 0;
+        box-sizing: border-box;
+        border-bottom: 1rpx solid #e5e5e5;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        .adduser_list_item_label1 {
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          .cc {
+            font-size: 30rpx;
+            font-family: PingFangSC, PingFang SC;
+            font-weight: 400;
+            color: #222222;
+            margin-bottom: 20rpx;
+            b {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #e0312a;
+            }
+          }
+          .aa {
+            font-size: 24rpx;
+            font-weight: 400;
+            color: #999999;
+          }
+        }
+        .adduser_list_item_label {
+          flex-shrink: 0;
+          display: flex;
+          align-items: center;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #e0312a;
+            }
+          }
+        }
+        .adduser_list_item_ipt {
+          flex-shrink: 0;
+          text-align: right;
+          font-size: 28rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-left: 30rpx;
+          display: flex;
+          align-items: center;
+          justify-content: flex-end;
+          .adduser_list_item_ipt1_upload {
+            width: 120rpx;
+            height: 120rpx;
+            background-color: #ececec;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            overflow: hidden;
+            image {
+              width: 100%;
+              height: 100%;
+            }
+          }
+          text {
+            font-size: 28rpx;
+            font-family: PingFangSC, PingFang SC;
+            font-weight: 400;
+            color: #999999;
+          }
+        }
+      }
+    }
+    .adduser_footer {
+      width: 100%;
+      margin-top: 60rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      .t {
+        background: #4d99a9 !important;
+        color: #ffffff !important;
+      }
+      .adduser_footer_item {
+        width: 336rpx;
+        height: 88rpx;
+        line-height: 88rpx;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #4d99a9;
+        font-size: 32rpx;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #4d99a9;
+        margin-right: 18rpx;
+        &:last-child {
+          margin: 0 !important;
+        }
+      }
+    }
+  }
 
-		.head {
-			width: 100%;
-			padding: 20rpx 30rpx;
-			box-sizing: border-box;
-			font-size: 28rpx;
-			font-weight: 400;
-			color: #666666;
-		}
+  .addcar {
+    padding: 30rpx;
+    width: 100%;
+    box-sizing: border-box;
+    .addcar_head {
+      text-align: center;
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
+    .addcar_ipt {
+      width: 100%;
+      height: 100rpx;
+      line-height: 100rpx;
+      text-align: center;
+      background: #f7f7f7;
+      border-radius: 50rpx;
+      margin-top: 60rpx;
+      input {
+        width: 100%;
+        height: 100%;
+        font-size: 28rpx;
+        font-weight: 400;
+        color: #000000;
+        text-align: center;
+      }
+    }
+    .addcar_footer {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      margin-top: 60rpx;
+      .t {
+        background: #4d99a9 !important;
+        color: #ffffff !important;
+      }
+      .addcar_footer_item {
+        flex: 1;
+        height: 88rpx;
+        line-height: 88rpx;
+        font-size: 32rpx;
+        font-weight: 400;
+        color: #025eef;
+        text-align: center;
+        border-radius: 44rpx;
+        border: 1rpx solid #025eef;
+        margin-right: 18rpx;
+        &:last-child {
+          margin-right: 0 !important;
+        }
+      }
+    }
+  }
 
-		.list {
-			width: 100%;
-			padding: 0 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			.empty{
-				width: 750rpx;
-				height: 20rpx;
-				background-color: #f7f7f7;
-				margin: 0 -30rpx;
-			}
-			.list_item {
-				width: 100%;
-				// min-height: 98rpx;
-				padding: 30rpx 0;
-				box-sizing: border-box;
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
+  .popup-content {
+    padding: 30rpx 30rpx 0 30rpx;
+    overflow: hidden;
+    display: flex;
+    flex-flow: column;
+    .respondent-title {
+      width: 100%;
+      text-align: center;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .search-box {
+      width: 100%;
+      margin-top: 40rpx;
+      .search-box-top {
+        width: 100%;
+        height: 68rpx;
+        display: flex;
+        align-items: center;
+        .search-box-top-ipt {
+          flex: 1;
+          height: 100%;
+          padding: 0 30rpx;
+          box-sizing: border-box;
+          background: #f7f7f7;
+          border-radius: 4rpx;
+          display: flex;
+          align-items: center;
+          image {
+            width: 36rpx;
+            height: 36rpx;
+            flex-shrink: 0;
+            margin-right: 22rpx;
+          }
+          input {
+            flex: 1;
+            height: 100%;
+            font-size: 26rpx;
+            font-weight: 400;
+            color: #b2b2b2;
+          }
+        }
+        text {
+          flex-shrink: 0;
+          margin-left: 30rpx;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #025eef;
+        }
+      }
+      .search-box-total {
+        font-size: 26rpx;
+        font-weight: 400;
+        color: #666666;
+        margin-top: 24rpx;
+      }
+    }
+    .list {
+      width: 100%;
+      height: 800rpx;
+      margin-top: 30rpx;
+      padding: 0 !important;
+      .item {
+        width: 100%;
+        height: 102rpx;
+        display: flex;
+        align-items: center;
+        border-bottom: 1rpx solid #e5e5e5;
+        .item_a {
+          flex-shrink: 0;
+          width: 36rpx;
+          height: 36rpx;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_b {
+          flex-shrink: 0;
+          width: 80rpx;
+          height: 80rpx;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          overflow: hidden;
+          margin-right: 24rpx;
+          image {
+            width: 100%;
+            height: 100%;
+          }
+        }
+        .item_c {
+          flex: 1;
+          display: flex;
+          align-items: center;
+          text {
+            &:nth-child(1) {
+              font-size: 30rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #222222;
+            }
+            &:nth-child(2) {
+              font-size: 20rpx;
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              color: #999999;
+              padding: 1rpx 4rpx;
+              box-sizing: border-box;
+              background-color: #eeeeee;
+              margin-left: 12rpx;
+            }
+          }
+        }
+      }
+    }
+    .footer1 {
+      width: 100%;
+      height: 100rpx;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      padding: 14rpx 0 0 0;
+      box-sizing: border-box;
+      .footer_left {
+        flex: 1;
+        display: flex;
+        flex-direction: column;
+        .footer_left_a {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+        }
+        .footer_left_b {
+          font-size: 24rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #999999;
+        }
+      }
+      .footer_btn {
+        flex-shrink: 0;
+        width: 216rpx;
+        height: 72rpx;
+        line-height: 72rpx;
+        text-align: center;
+        background: #025eef;
+        border-radius: 8rpx;
+        font-size: 28rpx;
+        font-weight: 500;
+        color: #ffffff;
+      }
+    }
+  }
 
-				.list_item_label {
-					flex-shrink: 0;
-					display: flex;
-					align-items: center;
+  .head {
+    width: 100%;
+    padding: 20rpx 30rpx;
+    box-sizing: border-box;
+    font-size: 28rpx;
+    font-weight: 400;
+    color: #666666;
+  }
 
-					text {
-						&:nth-child(1) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #222222;
-						}
+  .list {
+    width: 100%;
+    padding: 0 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    .empty {
+      width: 750rpx;
+      height: 20rpx;
+      background-color: #f7f7f7;
+      margin: 0 -30rpx;
+    }
+    .list_item {
+      width: 100%;
+      // min-height: 98rpx;
+      padding: 30rpx 0;
+      box-sizing: border-box;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
 
-						&:nth-child(2) {
-							font-size: 30rpx;
-							font-weight: 400;
-							color: #E42D2D;
-						}
-					}
-				}
+      .list_item_label {
+        flex-shrink: 0;
+        display: flex;
+        align-items: center;
 
-				.list_item_content {
-					flex: 1;
-					height: 100%;
-					margin-left: 30rpx;
-					display: flex;
-					align-items: center;
-					justify-content: flex-end;
+        text {
+          &:nth-child(1) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #222222;
+          }
 
-					text {
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #999999;
-						margin-right: 6rpx;
-					}
+          &:nth-child(2) {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #e42d2d;
+          }
+        }
+      }
 
-					input {
-						width: 100%;
-						height: 100%;
-						text-align: right;
-						font-size: 28rpx;
-						font-weight: 400;
-						color: #222222;
-					}
-				}
-			}
-		}
+      .list_item_content {
+        flex: 1;
+        height: 100%;
+        margin-left: 30rpx;
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
 
-		.cate {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			.cate_head {
-				font-size: 32rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 500;
-				color: #222222;
-			}
+        text {
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #999999;
+          margin-right: 6rpx;
+        }
 
-			.cate_list {
-				width: 100%;
-				display: flex;
-				align-items: center;
-				flex-wrap: wrap;
-				margin-top: 30rpx;
+        input {
+          width: 100%;
+          height: 100%;
+          text-align: right;
+          font-size: 28rpx;
+          font-weight: 400;
+          color: #222222;
+        }
+      }
+    }
+  }
 
-				.cate_list_item {
-					height: 64rpx;
-					padding: 0 20rpx;
-					box-sizing: border-box;
-					background-color: #EEEEEE;
-					border-radius: 4rpx;
-					margin-right: 20rpx;
-					margin-bottom: 20rpx;
-					display: flex;
-					align-items: center;
+  .cate {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    .cate_head {
+      font-size: 32rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 500;
+      color: #222222;
+    }
 
-					&:last-child {
-						margin-right: 0 !important;
-					}
+    .cate_list {
+      width: 100%;
+      display: flex;
+      align-items: center;
+      flex-wrap: wrap;
+      margin-top: 30rpx;
 
-					text {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #333333;
-						margin-right: 30rpx;
-					}
-				}
-			}
+      .cate_list_item {
+        height: 64rpx;
+        padding: 0 20rpx;
+        box-sizing: border-box;
+        background-color: #eeeeee;
+        border-radius: 4rpx;
+        margin-right: 20rpx;
+        margin-bottom: 20rpx;
+        display: flex;
+        align-items: center;
 
-			.cate_add {
-				width: 200rpx;
-				height: 50rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				background: rgba(2, 94, 239, 0);
-				border-radius: 25rpx;
-				border: 1rpx solid #4c99a8;
-				font-size: 22rpx;
-				font-family: PingFangSC, PingFang SC;
-				font-weight: 400;
-				margin-top: 20rpx;
-				color: #4c99a8;
-				margin: 0 auto;
-			}
-		}
+        &:last-child {
+          margin-right: 0 !important;
+        }
 
-		.zw {
-			width: 100%;
-			height: calc(env(safe-area-inset-bottom) + 118rpx);
-		}
+        text {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #333333;
+          margin-right: 30rpx;
+        }
+      }
+    }
 
-		.footer {
-			width: 100%;
-			padding: 0 30rpx;
-			padding-bottom: env(safe-area-inset-bottom);
-			box-sizing: border-box;
-			position: fixed;
-			left: 0;
-			bottom: 30rpx;
+    .cate_add {
+      width: 200rpx;
+      height: 50rpx;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      background: rgba(2, 94, 239, 0);
+      border-radius: 25rpx;
+      border: 1rpx solid #4c99a8;
+      font-size: 22rpx;
+      font-family: PingFangSC, PingFang SC;
+      font-weight: 400;
+      margin-top: 20rpx;
+      color: #4c99a8;
+      margin: 0 auto;
+    }
+  }
 
-			.footer_btn {
-				width: 100%;
-				height: 88rpx;
-				line-height: 88rpx;
-				text-align: center;
-				background: #4c99a8;
-				border-radius: 44rpx;
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #FFFFFF;
-			}
-		}
-	}
+  .zw {
+    width: 100%;
+    height: calc(env(safe-area-inset-bottom) + 118rpx);
+  }
+
+  .footer {
+    width: 100%;
+    padding: 0 30rpx;
+    padding-bottom: env(safe-area-inset-bottom);
+    box-sizing: border-box;
+    position: fixed;
+    left: 0;
+    bottom: 30rpx;
+
+    .footer_btn {
+      width: 100%;
+      height: 88rpx;
+      line-height: 88rpx;
+      text-align: center;
+      background: #4c99a8;
+      border-radius: 44rpx;
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #ffffff;
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/h5/pages/visitorApproval/visitorApproval.vue b/h5/pages/visitorApproval/visitorApproval.vue
index 4d59e66..4bba4aa 100644
--- a/h5/pages/visitorApproval/visitorApproval.vue
+++ b/h5/pages/visitorApproval/visitorApproval.vue
@@ -1,177 +1,177 @@
 <template>
-	<view class="box">
-		<view class="box_list">
-			<view class="box_list_name">涓佹仼鍑殑銆屾嫓璁跨敵璇枫��</view>
-			<view class="box_list_job">鍌ㄨ繍绉�</view>
-			<!-- <view class="box_list_status">寰呭鐞�</view> -->
-			<view class="box_list_status1">
-				<image src="@/static/ic_passed@2x.png" mode="widthFix"></image>
-				<!-- <image src="@/static/ic_refused@2x.png" mode="widthFix"></image> -->
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item">
-				<text>鎷滆浜�</text>
-				<text>寤栨垚鐟�</text>
-			</view>
-			<view class="box_list_item">
-				<text>棰勮鍏�/绂诲巶鏃堕棿</text>
-				<text>05/01 8:00 - 05/01 18:00</text>
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item">
-				<text>璁垮淇℃伅</text>
-				<text>瀛欏織 18177665678</text>
-				<text>3309****2910</text>
-			</view>
-			<view class="box_list_item">
-				<text>闅忚浜哄憳</text>
-				<text>鏉庣櫧 18177665678</text>
-				<text>3309****2910</text>
-			</view>
-			<view class="box_list_item">
-				<text>鏉滅敨 18177665678</text>
-				<text>3309****2910</text>
-			</view>
-		</view>
-		<view class="box_list p">
-			<view class="box_list_item">
-				<text>鍏徃鍚嶇О</text>
-				<text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
-			</view>
-			<view class="box_list_item">
-				<text>鏉ヨ浜嬬敱</text>
-				<text>鍟嗛噺鍚堝悓浜嬪疁</text>
-			</view>
-			<view class="box_list_item">
-				<text>浜鸿劯鐓х墖</text>
-				<view class="box_list_item_img">
-					<image src="@/static/logo@2x.png" mode="widthFix"></image>
-				</view>
-			</view>
-			<view class="box_list_item">
-				<text>鍋ュ悍璇�</text>
-				<view class="box_list_item_img">
-					<image src="@/static/logo@2x.png" mode="widthFix"></image>
-				</view>
-			</view>
-		</view>
-	</view>
+  <view class="box">
+    <view class="box_list">
+      <view class="box_list_name">涓佹仼鍑殑銆屾嫓璁跨敵璇枫��</view>
+      <view class="box_list_job">鍌ㄨ繍绉�</view>
+      <!-- <view class="box_list_status">寰呭鐞�</view> -->
+      <view class="box_list_status1">
+        <image src="@/static/ic_passed@2x.png" mode="widthFix"></image>
+        <!-- <image src="@/static/ic_refused@2x.png" mode="widthFix"></image> -->
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item">
+        <text>鎷滆浜�</text>
+        <text>寤栨垚鐟�</text>
+      </view>
+      <view class="box_list_item">
+        <text>棰勮鍏�/绂诲洯鏃堕棿</text>
+        <text>05/01 8:00 - 05/01 18:00</text>
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item">
+        <text>璁垮淇℃伅</text>
+        <text>瀛欏織 18177665678</text>
+        <text>3309****2910</text>
+      </view>
+      <view class="box_list_item">
+        <text>闅忚浜哄憳</text>
+        <text>鏉庣櫧 18177665678</text>
+        <text>3309****2910</text>
+      </view>
+      <view class="box_list_item">
+        <text>鏉滅敨 18177665678</text>
+        <text>3309****2910</text>
+      </view>
+    </view>
+    <view class="box_list p">
+      <view class="box_list_item">
+        <text>鍏徃鍚嶇О</text>
+        <text>瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</text>
+      </view>
+      <view class="box_list_item">
+        <text>鏉ヨ浜嬬敱</text>
+        <text>鍟嗛噺鍚堝悓浜嬪疁</text>
+      </view>
+      <view class="box_list_item">
+        <text>浜鸿劯鐓х墖</text>
+        <view class="box_list_item_img">
+          <image src="@/static/logo@2x.png" mode="widthFix"></image>
+        </view>
+      </view>
+      <view class="box_list_item">
+        <text>鍋ュ悍璇�</text>
+        <view class="box_list_item_img">
+          <image src="@/static/logo@2x.png" mode="widthFix"></image>
+        </view>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-	export default {
-		data() {
-			return {
-				
-			};
-		}
-	}
+export default {
+  data() {
+    return {
+
+    }
+  }
+}
 </script>
 <style>
-	page {
-		background-color: #F7F7F7;
-	}
+page {
+  background-color: #f7f7f7;
+}
 </style>
 <style lang="scss" scoped>
-	.box {
-		width: 100%;
-		.p {
-			padding: 0 30rpx !important;
-		}
-		.box_list {
-			width: 100%;
-			padding: 30rpx;
-			box-sizing: border-box;
-			background-color: #ffffff;
-			display: flex;
-			flex-direction: column;
-			margin-bottom: 20rpx;
-			position: relative;
-			.box_list_item {
-				width: 100%;
-				padding: 30rpx 0;
-				box-sizing: border-box;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				border-bottom: 1rpx solid #E5E5E5;
-				.box_list_item_img {
-					width: 100rpx;
-					height: 100rpx;
-					border-radius: 8rpx;
-					display: flex;
-					align-items: center;
-					justify-content: center;
-					overflow: hidden;
-					border: 1rpx solid #EEEEEE;
-					margin-top: 24rpx;
-					image {
-						width: 100%;
-						height: 100%;
-					} 
-				}
-				text {
-					&:nth-child(1) {
-						font-size: 26rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #777777;
-					}
-					&:nth-child(2) {
-						font-size: 28rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #222222;
-						margin-top: 20rpx;
-					}
-					&:nth-child(3) {
-						font-size: 28rpx;
-						font-family: PingFangSC, PingFang SC;
-						font-weight: 400;
-						color: #222222;
-						margin-top: 20rpx;
-					}
-				}
-			}
-			.box_list_name {
-				font-size: 32rpx;
-				font-weight: 500;
-				color: #222222;
-			}
-			.box_list_job {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-				margin-top: 20rpx;
-			}
-			.box_list_status1 {
-				position: absolute;
-				right: 30rpx;
-				top: 50%;
-				transform: translate(0, -50%);
-				width: 120rpx;
-				height: 120rpx;
-				image {
-					width: 100%;
-					height: 100%;
-				}
-			}
-			.box_list_status {
-				position: absolute;
-				right: 0;
-				top: 0;
-				width: 140rpx;
-				height: 60rpx;
-				line-height: 60rpx;
-				text-align: center;
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #025EEF;
-				background: rgba(66,117,252,0.12);
-				border-radius: 0rpx 0rpx 0rpx 30rpx;
-			}
-		}
-	}
+.box {
+  width: 100%;
+  .p {
+    padding: 0 30rpx !important;
+  }
+  .box_list {
+    width: 100%;
+    padding: 30rpx;
+    box-sizing: border-box;
+    background-color: #ffffff;
+    display: flex;
+    flex-direction: column;
+    margin-bottom: 20rpx;
+    position: relative;
+    .box_list_item {
+      width: 100%;
+      padding: 30rpx 0;
+      box-sizing: border-box;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-between;
+      border-bottom: 1rpx solid #e5e5e5;
+      .box_list_item_img {
+        width: 100rpx;
+        height: 100rpx;
+        border-radius: 8rpx;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        overflow: hidden;
+        border: 1rpx solid #eeeeee;
+        margin-top: 24rpx;
+        image {
+          width: 100%;
+          height: 100%;
+        }
+      }
+      text {
+        &:nth-child(1) {
+          font-size: 26rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #777777;
+        }
+        &:nth-child(2) {
+          font-size: 28rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #222222;
+          margin-top: 20rpx;
+        }
+        &:nth-child(3) {
+          font-size: 28rpx;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 400;
+          color: #222222;
+          margin-top: 20rpx;
+        }
+      }
+    }
+    .box_list_name {
+      font-size: 32rpx;
+      font-weight: 500;
+      color: #222222;
+    }
+    .box_list_job {
+      font-size: 26rpx;
+      font-weight: 400;
+      color: #666666;
+      margin-top: 20rpx;
+    }
+    .box_list_status1 {
+      position: absolute;
+      right: 30rpx;
+      top: 50%;
+      transform: translate(0, -50%);
+      width: 120rpx;
+      height: 120rpx;
+      image {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .box_list_status {
+      position: absolute;
+      right: 0;
+      top: 0;
+      width: 140rpx;
+      height: 60rpx;
+      line-height: 60rpx;
+      text-align: center;
+      font-size: 26rpx;
+      font-weight: 400;
+      color: #025eef;
+      background: rgba(66, 117, 252, 0.12);
+      border-radius: 0rpx 0rpx 0rpx 30rpx;
+    }
+  }
+}
 </style>
diff --git a/h5/pages/visitorSubGuide/index.vue b/h5/pages/visitorSubGuide/index.vue
index 5760f18..856379f 100644
--- a/h5/pages/visitorSubGuide/index.vue
+++ b/h5/pages/visitorSubGuide/index.vue
@@ -1,27 +1,27 @@
 <template>
-	<view class="box">
-    <view class="line" v-for="item,i in guideList" :key="i">{{ item }}</view>
+  <view class="box">
+    <view class="line" v-for="(item, i) in guideList" :key="i">{{ item }}</view>
   </view>
 </template>
 <script>
-	export default {
-		data() {
-			return {
-				guideList: [
-          '1銆佽瀹㈤槄璇诲叆鍘傞』鐭ワ紝濉啓瀹夊叏绛旈銆�',
-          '2銆佺瓟棰樺畬鎴愰绾︺��',
-          '3銆侀绾﹀畬鎴愯鑷宠瀹㈡満绛惧埌銆�',
-          '4銆佸埛鑴稿叆鍥��',
-          '5銆佸嚭鍥绂�',
-        ]
-			};
-		}
-	}
+export default {
+  data() {
+    return {
+      guideList: [
+        '1銆佽瀹㈤槄璇诲叆鍥』鐭ワ紝濉啓瀹夊叏绛旈銆�',
+        '2銆佺瓟棰樺畬鎴愰绾︺��',
+        '3銆侀绾﹀畬鎴愯鑷宠瀹㈡満绛惧埌銆�',
+        '4銆佸埛鑴稿叆鍥��',
+        '5銆佸嚭鍥绂�',
+      ]
+    }
+  }
+}
 </script>
 <style lang="scss" scoped>
-.box{
+.box {
   padding: 30rpx;
-  .line{
+  .line {
     margin-bottom: 16rpx;
   }
 }
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 629e321..0c70925 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
@@ -138,6 +138,7 @@
         LoginUserInfo user = getLoginUser(token);
         bookingsRequest.setCreator(user.getId());
         bookingsRequest.setEditor(user.getId());
+        bookingsRequest.setLoginUserInfo(user);
         return ApiResponse.success("鎿嶄綔鎴愬姛",bookingsService.reservationMeeting(bookingsRequest));
     }
 
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 e8e58bc..c5f169e 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
@@ -22,9 +22,10 @@
 
 
 
-    @Select(" select a.id , 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 ," +
+    @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()  or a.`STATUS` = 1  THEN 3 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  " +
             " ${ew.customSqlSegment} ")
@@ -32,7 +33,7 @@
 
 
 
-    @Select(" select a.id , b.id as roomId,  b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y骞�%m鏈�%d鏃�') as meetingDate ," +
+    @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 ," +
             " a.CONTENT as meetingContent, c.MOBILE as bookingUserMobile , e.`NAME` as bookingUserDepartment , a.CREATOR as bookingUserId  , a.remark  " +
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java
index 46178bd..401eae4 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingDetailResponse.java
@@ -8,6 +8,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -35,6 +36,14 @@
     @ApiModelProperty(value = "浼氳鏃ユ湡")
     private String meetingDate;
 
+
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    private Date startTime;
+
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    private Date endTime;
+
+
     @ApiModelProperty(value = "浼氳鏃堕棿 ( a ~ b)")
     private String meetingTime;
 
diff --git a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java
index 4c21bae..01d666c 100644
--- a/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java
+++ b/server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java
@@ -33,6 +33,8 @@
     @ApiModelProperty(value = "浼氳鏃堕棿 ( a ~ b)")
     private String meetingTime;
 
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
 
     @ApiModelProperty(value = "浼氳寮�濮嬫椂闂�",hidden = true)
     private Date startTime;
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 08a1744..021421e 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
@@ -745,7 +745,7 @@
                 .apply(" id in ( select u.OBJ_ID from meeting_user_rel u where u.USER_ID = '" + userId + "' and u.ISDELETED = 0 and OBJ_TYPE = 1  ) ")
                 .eq("ISDELETED",MeetConstants.ZERO)
 //                .eq("STATUS",MeetConstants.ZERO)
-                .apply(" ROOM_ID in ( select r.id from rooms r where r.ISDELETED = 0 and r.STATUS = 0  )")
+                .apply(" ROOM_ID in ( select r.id from meeting_rooms r where r.ISDELETED = 0 and r.STATUS = 0  )")
                 .like(StringUtils.isNotBlank(dateMsg), "START_TIME", dateMsg));
     }
 
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 3e90f10..16806fc 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
@@ -178,7 +178,7 @@
     public List<ProjectsResponse> getProjectsList(Integer objId,Integer objType) {
         return projectsMapper.getProjectsList(new QueryWrapper<ProjectsResponse>()
                         .eq("ISDELETED",MeetConstants.ZERO)
-                .exists(" select 1 from meeting_project_rel p where p.PROJECT_ID = projects.id and p.OBJ_ID = "+objId+" and p.OBJ_TYPE = "+objType+"  ")
+                .exists(" select 1 from meeting_project_rel p where p.PROJECT_ID = meeting_projects.id and p.OBJ_ID = "+objId+" and p.OBJ_TYPE = "+objType+"  ")
         );
     }
 }
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 f6500ee..f4b43de 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
@@ -163,13 +163,8 @@
             bookList.stream().forEach(a -> {
                 if (Constants.equalsInteger(s.getId(), a.getRoomTimeId())) {
                     s.setIsUse(true);
-                }
-                if (roomTime.getBookingId() != null && Constants.equalsInteger(roomTime.getBookingId(), a.getId())) {
-                    if (Constants.equalsInteger(a.getRoomTimeId(), s.getId())) {
-                        s.setIsChoose(true);
-                       // s.setIsUse(false);
-                        s.setBookingTimeId(a.getBookingTimeId());
-                    }
+                    s.setIsChoose(true);
+                    s.setBookingTimeId(a.getId());
                 }
             });
 
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java b/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
index a62bf46..5a6fbd5 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/FtpUtil.java
@@ -15,6 +15,7 @@
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
+import org.apache.xpath.operations.Bool;
 import sun.misc.BASE64Encoder;
 
 /** */
@@ -237,7 +238,6 @@
 		// 璁剧疆PassiveMode浼犺緭
 		try {
 			ftpClient.enterLocalPassiveMode();
-
 			// 璁剧疆浠ヤ簩杩涘埗娴佺殑鏂瑰紡浼犺緭
 			ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
 			ftpClient.setControlEncoding("GBK");
@@ -266,6 +266,42 @@
 		}
 		return false;
 	}
+
+	public boolean uploadInputstreamBatch(InputStream inputStream, String remote, Boolean close)  {
+		// 璁剧疆PassiveMode浼犺緭
+		try {
+			ftpClient.enterLocalPassiveMode();
+			// 璁剧疆浠ヤ簩杩涘埗娴佺殑鏂瑰紡浼犺緭
+			ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+			ftpClient.setControlEncoding("GBK");
+			// 瀵硅繙绋嬬洰褰曠殑澶勭悊
+			String remoteFileName = remote;
+			if (remote.contains("/")) {
+				remoteFileName = remote.substring(remote.lastIndexOf("/") + 1);
+				// 鍒涘缓鏈嶅姟鍣ㄨ繙绋嬬洰褰曠粨鏋勶紝鍒涘缓澶辫触鐩存帴杩斿洖
+				if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) {
+					log.error("鍒涘缓ftp鐩綍澶辫触======================="+remote);
+					return false;
+				}
+			}
+			boolean result = ftpClient.storeFile(remoteFileName, inputStream);
+			inputStream.close();
+			if(close){
+				ftpClient.logout();
+			}
+			if(result){
+				log.info("涓婁紶鏂囦欢鎴愬姛======================"+remote);
+			}else{
+				log.error("涓婁紶鏂囦欢澶辫触======================="+remote);
+			}
+			return result;
+		}catch (Exception e){
+			e.printStackTrace();
+			log.error("涓婁紶鏂囦欢澶辫触======================="+remote);
+		}
+		return false;
+	}
+
 	public int getNumFromStr(String str,char searchstr) {
 		int count = 0;
 		char[] charArray = str.toCharArray();
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
new file mode 100644
index 0000000..d08a08c
--- /dev/null
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/NoticesDTO.java
@@ -0,0 +1,38 @@
+package com.doumee.dao.system.dto;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * Created by IntelliJ IDEA.
+ *
+ * @Author : Rk
+ * @create 2024/6/5 9:27
+ */
+@Data
+public class NoticesDTO {
+
+    @ApiModelProperty(value = "鐢ㄦ埛涓婚敭",hidden = true)
+    private Integer memberId;
+
+    @ApiModelProperty(value = "鏌ヨ绫诲瀷: 0=寰呭鐞嗭紱1=宸插鐞嗭紱2=鎴戝彂甯冪殑锛�3=鎶勯�佹垜")
+    private Integer queryType;
+
+    @ApiModelProperty(value = "寮�濮嬫棩鏈�")
+    private Date startDate;
+
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡")
+    private Date endDate;
+
+    @ApiModelProperty(value = "0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
+    private Integer type;
+
+    @ApiModelProperty(value = "鍙湅鏈锛�1=鏄紱0=鍚�")
+    private Integer noRead;
+
+    @ApiModelProperty(value = "浠诲姟鍚嶇О/鏍囬")
+    private String title;
+}
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 2b76c44..ab03953 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
@@ -79,8 +79,8 @@
     @ExcelColumn(name="鍏宠仈瀵硅薄鍚嶇О")
     private String objName;
 
-    @ApiModelProperty(value = "绫诲瀷")
-    @ExcelColumn(name="绫诲瀷")
+    @ApiModelProperty(value = "绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
+    @ExcelColumn(name="绫诲瀷 0璁垮瀹℃壒 1璁垮鎶ュ 2鐢ㄨ溅瀹℃壒 3闅愭偅澶勭悊 4鐗╂祦杞﹀鎵� 5绯荤粺绯荤粺")
     private Integer type;
 
     @ApiModelProperty(value = "绫诲瀷鎻忚堪")
@@ -88,15 +88,15 @@
     private String typeDetail;
 
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟1" ,notes = "瀛樺偍 娑堟伅灞曠ずJSON ")
+    @ApiModelProperty(value = "瀛樺偍 娑堟伅灞曠ずJSON" ,notes = "瀛樺偍 娑堟伅灞曠ずJSON ")
     @ExcelColumn(name="鍏宠仈鍙傛暟1")
     private String param1;
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟2",notes = "鐢ㄤ簬瀛樺偍 涓氬姟鐘舵�佷俊鎭� 0 =寰呭鐞�;1=宸插悓鎰�/宸插鐞�;2=宸叉嫆缁�/宸查��鍥�;3=宸茶浆浜�;4=宸叉挙閿�")
+    @ApiModelProperty(value = "鐢ㄤ簬瀛樺偍 涓氬姟鐘舵�佷俊鎭� 0 =寰呭鐞�;1=宸插悓鎰�/宸插鐞�;2=宸叉嫆缁�/宸查��鍥�;3=宸茶浆浜�;4=宸叉挙閿�",notes = "鐢ㄤ簬瀛樺偍 涓氬姟鐘舵�佷俊鎭� 0 =寰呭鐞�;1=宸插悓鎰�/宸插鐞�;2=宸叉嫆缁�/宸查��鍥�;3=宸茶浆浜�;4=宸叉挙閿�")
     @ExcelColumn(name="鍏宠仈鍙傛暟2")
     private String param2;
 
-    @ApiModelProperty(value = "鍏宠仈鍙傛暟3")
+    @ApiModelProperty(value = "鍙戣捣浜�",notes = "鍙戣捣浜�")
     @ExcelColumn(name="鍏宠仈鍙傛暟3")
     private String param3;
 
diff --git a/server/system_service/src/main/java/com/doumee/service/system/NoticesService.java b/server/system_service/src/main/java/com/doumee/service/system/NoticesService.java
index d217439..0c45a5a 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/NoticesService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/NoticesService.java
@@ -2,6 +2,7 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.dao.system.dto.NoticesDTO;
 import com.doumee.dao.system.model.Notices;
 
 import java.util.List;
@@ -97,5 +98,10 @@
     long count(Notices notices);
 
 
+    PageData<Notices> taskCanterPage(PageWrap<NoticesDTO> pageWrap);
 
+
+    void signReadById(Integer noticesId);
+
+    void signRead(Integer memberId);
 }
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 67cbee2..68ab7e8 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
@@ -4,21 +4,26 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.LoginUserInfo;
 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.system.dto.NoticesDTO;
 import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Notices;
 import com.doumee.service.system.NoticesService;
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 绯荤粺娑堟伅淇℃伅琛⊿ervice瀹炵幇
@@ -93,8 +98,6 @@
         IPage<Notices> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
         Utils.MP.blankToNull(pageWrap.getModel());
-        LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
-
         queryWrapper.selectAll(Notices.class);
         if (pageWrap.getModel().getIsdeleted() != null) {
             queryWrapper.eq(Notices::getIsdeleted, pageWrap.getModel().getIsdeleted());
@@ -140,7 +143,82 @@
         return noticesMapper.selectCount(wrapper);
     }
 
+    @Override
+    public PageData<Notices> taskCanterPage(PageWrap<NoticesDTO> pageWrap) {
+        IPage<Notices> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        MPJLambdaWrapper<Notices> queryWrapper = new MPJLambdaWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.selectAll(Notices.class);
+        NoticesDTO noticesDTO = pageWrap.getModel();
+        if(Objects.isNull(noticesDTO)
+            || Objects.isNull(noticesDTO.getMemberId())
+            || Objects.isNull(noticesDTO.getQueryType())){
+                queryWrapper.eq("1","2");
+        }
+        if(noticesDTO.getQueryType().equals(Constants.ZERO)){
+            queryWrapper.eq(Notices::getStatus,Constants.ZERO);
+            queryWrapper.eq(Notices::getSendacopy,Constants.ZERO);
+            queryWrapper.eq(Notices::getUserId, noticesDTO.getMemberId());
+        } else if(noticesDTO.getQueryType().equals(Constants.ONE)){
+            queryWrapper.eq(Notices::getStatus,Constants.ONE);
+            queryWrapper.eq(Notices::getSendacopy,Constants.ZERO);
+        } else if(noticesDTO.getQueryType().equals(Constants.TWO)){
+            queryWrapper.eq(Notices::getParam3, noticesDTO.getMemberId());
+        } else if (noticesDTO.getQueryType().equals(Constants.THREE)) {
+            queryWrapper.eq(Notices::getUserId, noticesDTO.getMemberId());
+            queryWrapper.eq(Notices::getSendacopy,Constants.ONE);
+            if(Objects.nonNull(noticesDTO.getNoRead())&&Constants.equalsInteger(noticesDTO.getNoRead(),Constants.ONE)){
+                queryWrapper.eq(Notices::getReaded,Constants.ONE);
+            }
+        }else{
+            queryWrapper.eq("1","2");
+        }
+        queryWrapper.ge(noticesDTO.getStartDate() != null, Notices::getCreateDate, Utils.Date.getStart(noticesDTO.getStartDate() ));
+        queryWrapper.le(noticesDTO.getStartDate() != null,  Notices::getCreateDate, Utils.Date.getEnd(noticesDTO.getStartDate() ));
+        queryWrapper.ge(noticesDTO.getEndDate() != null, Notices::getCreateDate, Utils.Date.getStart(noticesDTO.getEndDate() ));
+        queryWrapper.le(noticesDTO.getEndDate() != null,  Notices::getCreateDate, Utils.Date.getEnd(noticesDTO.getEndDate() ));
+        queryWrapper.eq(Objects.nonNull(noticesDTO.getType()),Notices::getType,noticesDTO.getType());
+        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));
+        return pageData;
+    }
 
 
+    /**
+     * 鏍囪宸茶
+     * @param noticesId
+     */
+    @Override
+    public void signReadById(Integer noticesId){
+        if(Objects.isNull(noticesId)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        Notices notices = noticesMapper.selectById(noticesId);
+        if(Objects.isNull(notices)){
+            throw new BusinessException(ResponseStatus.DATA_EMPTY);
+        }
+        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));
+            }
+        }else{
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闈炴妱閫佹暟鎹�,鏃犳硶杩涜鏍囪");
+        }
+    }
+
+    /**
+     * 鎵归噺鏍囪宸茶
+     * @param memberId
+     */
+    @Override
+    public void signRead(Integer memberId) {
+        noticesMapper.update(null, new UpdateWrapper<Notices>().lambda()
+                .set(Notices::getReaded, Constants.ONE)
+                .eq(Notices::getSendacopy,Constants.ONE)
+                .eq(Notices::getReaded,Constants.ZERO)
+                .eq(Notices::getUserId, memberId));
+    }
 
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
index cd86296..41eeaf0 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/api/business/VisitsController.java
@@ -104,7 +104,7 @@
     @GetMapping("/{id}")
     @RequiresPermissions("business:visits:query")
     public ApiResponse<Visits> findById(@PathVariable Integer id) {
-        return ApiResponse.success(visitsService.findById(id));
+        return ApiResponse.success(visitsService.findById(id,null));
     }
 
     @ApiOperation("婊炵暀浜哄憳")
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
index 76addf2..59dc1b8 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/ApproveTemplCloudController.java
@@ -96,10 +96,10 @@
         return ApiResponse.success(approveTemplService.findOne(templ));
     }
 
-    @ApiOperation("鏍规嵁ID鏌ヨ")
-    @GetMapping("/{id}")
-    @CloudRequiredPermission("business:approvetempl:query")
-    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        return ApiResponse.success(approveTemplService.findById(id));
-    }
+//    @ApiOperation("鏍规嵁ID鏌ヨ")
+//    @GetMapping("/{id}")
+//    @CloudRequiredPermission("business:approvetempl:query")
+//    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+//        return ApiResponse.success(approveTemplService.findById(id));
+//    }
 }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
index 0270a01..6c0dcb7 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/HiddenDangerCloudController.java
@@ -80,7 +80,7 @@
     @ApiOperation("鏍规嵁ID鏌ヨ")
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:hiddendanger:query")
-    public ApiResponse findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
+    public ApiResponse<HiddenDanger> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
         return ApiResponse.success(hiddenDangerService.findById(id));
     }
 
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
index 4141bb9..4dddf78 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/StagingCloudController.java
@@ -1,18 +1,31 @@
 package com.doumee.cloud.admin;
 
 import com.doumee.api.BaseController;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
 import com.doumee.dao.admin.response.StagingDataVO;
 import com.doumee.dao.business.model.Visits;
+import com.doumee.dao.system.dto.NoticesDTO;
+import com.doumee.dao.system.model.Notices;
+import com.doumee.dao.web.response.InternalHomeVO;
+import com.doumee.service.business.ApproveService;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.VisitsService;
+import com.doumee.service.system.NoticesService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
 
 /**
  * Created by IntelliJ IDEA.
@@ -32,6 +45,11 @@
     @Autowired
     private VisitsService visitsService;
 
+    @Autowired
+    private NoticesService noticesService;
+
+    @Autowired
+    private ApproveService approveService;
 
 
     @ApiOperation("澶撮儴鏁版嵁")
@@ -63,4 +81,39 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+
+
+    @ApiOperation(value = "浠诲姟涓績澶撮儴", notes = "H5")
+    @GetMapping("/taskCenterHead")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "isDetail", value = " 鏄惁鏌ヨ璇︾粏 1鏄紱0鍚�", required = true),
+    })
+    public ApiResponse<InternalHomeVO> taskCenterHead(@RequestParam Integer isDetail,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getLoginUser(token).getMemberId(),isDetail));
+    }
+
+
+    @ApiOperation("浠诲姟涓績鍒嗛〉")
+    @PostMapping("/taskPage")
+    public ApiResponse<PageData<Notices>> taskPage (@RequestBody PageWrap<NoticesDTO> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        pageWrap.getModel().setMemberId(loginUserInfo.getMemberId());
+        return ApiResponse.success(noticesService.taskCanterPage(pageWrap));
+    }
+
+    @ApiOperation("鏍囪宸茶")
+    @GetMapping("/signRead")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "noticesId", value = "璁板綍涓婚敭", required = false),
+            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "signType", value = "鏍囪绫诲瀷锛�0=鍗曚釜鏍囪;1=鏍囪鍏ㄩ儴鏈", required = false),
+    })
+    public ApiResponse signRead (Integer noticesId,@RequestParam Integer signType, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        if(Constants.equalsInteger(signType,Constants.ZERO)){
+            noticesService.signReadById(noticesId);
+        }else{
+            noticesService.signRead(loginUserInfo.getMemberId());
+        }
+        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 1b048b2..ff53508 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
@@ -6,6 +6,7 @@
 import com.doumee.core.annotation.excel.ExcelExporter;
 import com.doumee.core.annotation.pr.PreventRepeat;
 import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
@@ -96,6 +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());
         return ApiResponse.success(visitsService.findPage(pageWrap));
     }
 
@@ -110,7 +112,8 @@
     @GetMapping("/{id}")
     @CloudRequiredPermission("business:visits:query")
     public ApiResponse<Visits> findById(@PathVariable Integer id,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){
-        return ApiResponse.success(visitsService.findById(id));
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        return ApiResponse.success(visitsService.findById(id,loginUserInfo.getMemberId()));
     }
 
     @ApiOperation("婊炵暀浜哄憳")
@@ -126,7 +129,9 @@
     @ApiOperation(value = "璁垮鎶ュ", notes = "璁垮鎶ュ")
     @PostMapping("/createVisit")
     public ApiResponse createVisit(@RequestBody Visits visits,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        visits.setMemberId(getLoginUser(token).getMemberId());
+        LoginUserInfo loginUserInfo = getLoginUser(token);
+        visits.setMemberId(loginUserInfo.getMemberId());
+        visits.setCreateMemberId(loginUserInfo.getMemberId());
         visits.setReceptMemberId(visits.getMemberId());
         return ApiResponse.success("鏌ヨ鎴愬姛", visitsService.visitReporting(visits));
     }
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java
index b8d7082..eb12019 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/common/PublicCloudController.java
@@ -1,13 +1,18 @@
 package com.doumee.cloud.common;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.doumee.api.BaseController;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.annotation.trace.Trace;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.FtpUtil;
 import com.doumee.core.utils.aliyun.ALiYunUtil;
+import com.doumee.dao.system.model.SystemDict;
+import com.doumee.dao.system.model.SystemDictData;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -26,10 +31,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * @author Eva.Caesar Liu
@@ -50,6 +52,102 @@
 
     public static FtpUtil ftp  = null;
 
+    @ApiOperation(value = "鎵归噺涓婁紶鏂囦欢鍒癋TP")
+    @RequestMapping(method= RequestMethod.POST,value="/uploadBatch")
+    @ResponseBody
+    public void uploadBatch(HttpServletRequest request, HttpServletResponse response, String folder) throws Exception {
+        if(Objects.isNull(folder)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST);
+        }
+        SystemDictData folderData =  systemDictDataBiz.queryByCode(Constants.FTP,folder);
+        if(Objects.isNull(folderData)||StringUtils.isBlank(folderData.getCode())){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鐩爣鏂囦欢澶归敊璇�");
+        }
+        folder = systemDictDataBiz.queryByCode(Constants.FTP,folder).getCode();
+        String prefixPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode();
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("text/html;charset=UTF-8");
+        Map<String, Object> context = new HashMap<>();
+        try {
+            if(ftp == null){
+                ftp = new FtpUtil(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_HOST).getCode(),
+                        Integer.parseInt(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PORT).getCode()),
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_USERNAME).getCode(),
+                        systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_PWD).getCode());
+            }else{
+                ftp.connect();
+            }
+
+            context.put("success", true);
+            context.put("code", 200);
+            context.put("errno",0);
+            CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
+            if (multipartResovler.isMultipart(request)) {
+                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+                List<MultipartFile> fileList = multipartRequest.getFiles("file");
+                Iterator<String> it = multipartRequest.getFileNames();
+                JSONArray jsonArray = new JSONArray();
+
+                if (fileList.size() > 0) {
+                    //閬嶅巻鏂囦欢鍒楄〃
+                    Iterator<MultipartFile> fileIte = fileList.iterator();
+                    Integer index = Constants.ONE;
+                    while (fileIte.hasNext()) {
+                        //鑾峰緱姣忎竴涓枃浠�
+                        MultipartFile file = fileIte.next();
+                        String originname = file.getOriginalFilename();
+                        InputStream is = file.getInputStream();
+                        String endType = originname.substring(originname.lastIndexOf("."), originname.length());
+                        String date = DateUtil.getNowShortDate();
+                        String fName = date + "/" + UUID.randomUUID() + endType;
+                        String fileName = folder + "/" + fName;
+                        boolean r = ftp.uploadInputstreamBatch(is, fileName, Constants.equalsInteger(index ,fileList.size()));
+                        if (r) {
+                            JSONObject fileJSON = new JSONObject();
+                            fileJSON.put("url", prefixPath + fileName);
+                            fileJSON.put("imgaddr", fName);
+                            fileJSON.put("imgname", fileName);
+                            fileJSON.put("originname", originname);
+                            jsonArray.add(fileJSON);
+                        }
+                        index = index + 1;
+                    }
+
+                }
+
+//                while (it.hasNext()) {
+//                    MultipartFile file = multipartRequest.getFile(it.next());
+//                    String originname = file.getOriginalFilename();
+//                    is = file.getInputStream();
+//                    String endType = originname.substring(originname.lastIndexOf("."),originname.length());
+//                    String date = DateUtil.getNowShortDate();
+//                    String fName =  date+"/"+ UUID.randomUUID()+endType;
+//                    String fileName = folder+"/"+fName;
+//                    boolean r = ftp.uploadInputstream(is,fileName);
+//                    if(r){
+//                        JSONObject fileJSON = new JSONObject();
+//                        fileJSON.put("url", prefixPath+fileName);
+//                        fileJSON.put("imgaddr", fName);
+//                        fileJSON.put("imgname", fileName);
+//                        fileJSON.put("originname", originname);
+//                        jsonArray.add(fileJSON);
+//                    }
+//                }
+                context.put("data",jsonArray);
+            }
+        } catch (Exception e) {
+            log.error("銆愪笂浼燜TP澶辫触銆�======================"+e.getMessage());
+            context.put("code", 0);
+            context.put("message", "涓婁紶澶辫触");
+            context.put("errno",0);
+            writerJson(response, context);
+            return;
+
+        }
+        writerJson(response, context);
+        return;
+    }
+
     @ApiOperation(value = "涓婁紶鏂囦欢鍒癋TP")
     @RequestMapping(method= RequestMethod.POST,value="/upload")
     @ResponseBody
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 1739bfd..e0e31ec 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
@@ -61,11 +61,11 @@
     private ApproveService approveService;
 
 
-    @ApiOperation(value = "鍐呴儴浜哄憳棣栭〉", notes = "H5")
-    @GetMapping("/internalHome")
-    public ApiResponse<InternalHomeVO> internalHome(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
-        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getLoginUser(token).getMemberId()));
-    }
+//    @ApiOperation(value = "鍐呴儴浜哄憳棣栭〉", notes = "H5")
+//    @GetMapping("/internalHome")
+//    public ApiResponse<InternalHomeVO> internalHome(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+//        return ApiResponse.success("鏌ヨ鎴愬姛",approveService.getHomeData(getLoginUser(token).getMemberId()));
+//    }
 
     @ApiOperation("浠诲姟涓績")
     @PostMapping("/taskCenter")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
index f725a46..453b324 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/ApproveParam.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;
@@ -10,6 +11,7 @@
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 瀹℃壒妯$増閰嶇疆淇℃伅琛�
@@ -91,4 +93,9 @@
     @ExcelColumn(name="鏃犱富绠¢�夐」 0娴佺▼缁撴潫 1鐢变笂绾т富绠′唬鏇垮鏍�")
     private Integer noleaderOpt;
 
+
+    @ApiModelProperty(value = "瀹℃壒浜哄垪琛�")
+    @TableField(exist = false)
+    private List<Member> memberList;
+
 }
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 bf78546..1e2dbda 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.doumee.core.annotation.excel.ExcelColumn;
 import com.doumee.core.model.LoginUserModel;
+import com.doumee.dao.business.vo.ApproveDataVO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -292,4 +293,13 @@
     @ApiModelProperty(value = "绂诲満鐘舵�侊紱0=鏈鍦�", example = "1",hidden = true)
     @TableField(exist = false)
     private Integer levelStatus;
+
+    @ApiModelProperty(value = "鍒涘缓浜哄鍚�", example = "1")
+    @TableField(exist = false)
+    private String createMemberName;
+
+    @ApiModelProperty(value = "瀹℃壒淇℃伅鏁版嵁")
+    @TableField(exist = false)
+    private ApproveDataVO approveDateVO;
+
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java
index fac3cd2..086bb3c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/web/response/InternalHomeVO.java
@@ -13,4 +13,15 @@
     private Integer taskNum;
 
 
+    @ApiModelProperty(value = "寰呭鐞嗗緟鍔炴暟閲�")
+    private Long noticeWaitNum;
+
+    @ApiModelProperty(value = "宸插鐞嗗緟鍔炴暟閲�")
+    private Long noticeDealNum;
+
+    @ApiModelProperty(value = "鎴戝彂璧风殑寰呭姙鏁伴噺")
+    private Integer noticeCreateNum;
+
+    @ApiModelProperty(value = "鎶勯�佺殑寰呭姙鏁伴噺")
+    private Long noticeCopyNum;
 }
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
index fb8029d..8254608 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/ApproveService.java
@@ -105,7 +105,7 @@
      * @param memberId
      * @return
      */
-    InternalHomeVO getHomeData(Integer memberId);
+    InternalHomeVO getHomeData(Integer memberId,Integer isDetail);
 
     void createApproveFlow(Integer tempType,Integer businessId,Integer createMemberId);
 
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 b89edf1..35fdec6 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
@@ -79,7 +79,7 @@
      * @param id 涓婚敭
      * @return Visits
      */
-    Visits findById(Integer id);
+    Visits findById(Integer id,Integer memberId);
 
     /**
      * 鏉′欢鏌ヨ鍗曟潯璁板綍
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 19b432d..62379b0 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
@@ -1,6 +1,7 @@
 package com.doumee.service.business.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.api.R;
 import com.doumee.biz.system.SystemDictDataBiz;
 import com.doumee.core.constants.ResponseStatus;
 import com.doumee.core.exception.BusinessException;
@@ -30,8 +31,10 @@
 import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import io.swagger.models.auth.In;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.xpath.operations.Bool;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -45,6 +48,7 @@
  * @date 2023/12/28 14:09
  */
 @Service
+@Slf4j
 public class ApproveServiceImpl implements ApproveService {
 
     @Autowired
@@ -232,13 +236,46 @@
     /**
      * 鍐呴儴浜哄憳H5椤甸潰棣栭〉
      * @param memberId
+     * @param isDetail 鏄惁鏌ヨ璇︾粏 1鏄紱0鍚�
      * @return
      */
     @Override
-    public InternalHomeVO getHomeData(Integer memberId){
+    public InternalHomeVO getHomeData(Integer memberId,Integer isDetail){
         InternalHomeVO internalHomeVO = new InternalHomeVO();
         internalHomeVO.setHomeImg(systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.HOME_IMAGE).getCode());
-        internalHomeVO.setTaskNum(approveMapper.selectCount(new QueryWrapper<Approve>().lambda().eq(Approve::getChekorId,memberId).eq(Approve::getStatus,Constants.ZERO)));
+        //浠诲姟鏁版嵁
+        List<Notices> noticesList = noticesJoinMapper.
+                selectList(new QueryWrapper<Notices>().lambda()
+                        .eq(Notices::getUserId,memberId).orderByDesc(Notices::getCreateDate));
+        internalHomeVO.setTaskNum(noticesList.size());
+        if(Constants.equalsInteger(Constants.ONE,isDetail)){
+            if(CollectionUtils.isNotEmpty(noticesList)){
+                //寰呮垜澶勭悊鐨勬暟鎹�
+                internalHomeVO.setNoticeWaitNum(
+                        noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId)
+                                &&Constants.equalsInteger(i.getStatus(),Constants.ZERO)
+                                &&Constants.equalsInteger(i.getSendacopy(),Constants.ZERO)
+                        ).count()
+                );
+                internalHomeVO.setNoticeDealNum(
+                        noticesList.stream().filter(i->Constants.equalsInteger(i.getUserId(),memberId)
+                                &&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)
+                        ).count()
+                );
+            }
+        }
+
         return internalHomeVO;
     }
 
@@ -308,6 +345,27 @@
      * @param approveList
      */
     public void organizeApproveData(ApproveTempl approveTempl,List<ApproveParam> approveParamList,Member createMember,Integer businessId,List<Approve> approveList){
+
+        //鍒涘缓榛樿浜轰俊鎭�
+        Approve createUserApprove = new Approve();
+        createUserApprove.setRemark("鍙戣捣鐢宠");
+        createUserApprove.setCreateDate(new Date());
+        createUserApprove.setIsdeleted(Constants.ZERO);
+        createUserApprove.setTemplatId(approveTempl.getId());
+        createUserApprove.setChekorId(createMember.getId());
+        createUserApprove.setStatus(Constants.approveStatus.pass);
+        createUserApprove.setTitle("鍙戣捣鐢宠");
+        createUserApprove.setStatusInfo("");
+        createUserApprove.setIsEndCheck(Constants.ZERO);
+        createUserApprove.setObjId(businessId);
+        createUserApprove.setLevel(-1);
+        createUserApprove.setObjType(approveTempl.getType());
+        createUserApprove.setApproveType(Constants.TWO);
+        createUserApprove.setDriverParam(Constants.ZERO);
+        createUserApprove.setAddrParam(Constants.ZERO);
+        createUserApprove.setType(Constants.ZERO);
+        approveList.add(createUserApprove);
+
         //瀹℃壒涓氬姟鏁版嵁
         for (int i = 0; i < approveParamList.size(); i++) {
             ApproveParam approveParam = approveParamList.get(i);
@@ -321,6 +379,24 @@
                 if(i==0){
                     if(jsonMap.isEmpty()){
                         title = this.createNoticesData(noticeType,businessId,title,jsonMap);
+                    }
+                    if(j==0){
+                        //榛樿鐢熸垚涓�鏉� 鐢宠浜虹殑鏁版嵁 鏍囪鍒犻櫎鐘舵�佺敤浜庡鐞嗗埌 浠诲姟涓績锛堟垜鍙戣捣锛変娇鐢�
+                        Notices notices = new Notices();
+                        notices.setCreateDate(new Date());
+                        notices.setIsdeleted(Constants.ONE);
+                        notices.setObjId(businessId);
+                        notices.setObjType(noticeType);
+                        notices.setType(noticeType);
+                        notices.setTitle(title);
+                        notices.setParam1(JSONObject.toJSONString(jsonMap));
+                        notices.setStatus(Constants.ZERO);
+                        notices.setReaded(Constants.ZERO);
+                        notices.setSendacopy(Constants.ZERO);
+                        notices.setParam2("0");
+                        notices.setParam3(createMember.getId().toString());
+                        notices.setInfo("澶勭悊涓�");
+                        noticesJoinMapper.insert(notices);
                     }
                     Notices notices = new Notices();
                     notices.setCreateDate(new Date());
@@ -336,6 +412,7 @@
                     notices.setReaded(Constants.ZERO);
                     notices.setSendacopy(Constants.ZERO);
                     notices.setParam2("0");
+                    notices.setParam3("");
                     notices.setInfo("寰呭鐞�");
                     noticesJoinMapper.insert(notices);
                 }
@@ -580,7 +657,6 @@
             waitModel.setApproveList(copyList);
             approveDateVO.getApproveList().add(waitModel);
         }
-
         return approveDateVO;
     }
 
@@ -874,7 +950,19 @@
         if(!approve.getStatus().equals(Constants.ONE)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒璁板綍鐘舵�侀敊璇�!");
         }
-
+        //鏍规嵁瀹℃壒璁板綍鏌ヨ 褰撳墠澶勭悊鏁版嵁瀵瑰簲鐨� 閫氱煡璁板綍
+        Integer noticeType = Constants.approveTypeToNoticeType(approve.getObjType());
+        Notices  notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>().lambda()
+                .eq(Notices::getObjId,approve.getObjId())
+                .eq(Notices::getObjType,noticeType)
+                .eq(Notices::getUserId,approve.getChekorId())
+                .eq(Notices::getSendacopy,Constants.ZERO)
+                .eq(Notices::getIsdeleted,Constants.ZERO)
+        );
+        if(Objects.isNull(notices)){
+            log.info("鏈煡璇㈠埌閫氱煡璁板綍");
+            return;
+        }
         //澶勭悊瀹℃壒淇℃伅
         approve.setStatus(approveDTO.getStatus());
         approve.setCheckInfo(approveDTO.getCheckInfo());
@@ -882,9 +970,6 @@
         approve.setCheckorName(approveDTO.getLoginUserInfo().getRealname());
         approve.setCheckDate(new Date());
         approve.setStatusInfo(approveDTO.getStatus()==Constants.TWO?"宸插悓鎰�":approveDTO.getCheckInfo());
-        Visits visits = new Visits();
-        CarUseBook carUseBook = new CarUseBook();
-        this.dealBusinessData(approveDTO,approve,visits,carUseBook);
         //鏈骇鎵�鏈� 寰呭鎵硅褰�
         List<Approve> approveList = approveJoinMapper.selectJoinList(Approve.class,
                 new MPJLambdaWrapper<Approve>()
@@ -894,7 +979,17 @@
                         .eq(Approve::getObjType,approveDTO.getObjType())
                         .eq(Approve::getLevel,approve.getLevel())
                         .eq(Approve::getStatus,Constants.ONE)
+                        .eq(Approve::getType,Constants.ZERO)
                         .ne(Approve::getId,approve.getId())
+        );
+        //涓氬姟鏁版嵁涓嬮厤缃殑鎵�鏈夋妱閫佽褰�
+        List<Approve> approveCopyList = approveJoinMapper.selectJoinList(Approve.class,
+                new MPJLambdaWrapper<Approve>()
+                        .selectAll(Approve.class)
+                        .eq(Approve::getIsdeleted,Constants.ZERO)
+                        .eq(Approve::getObjId,approveDTO.getObjId())
+                        .eq(Approve::getObjType,approveDTO.getObjType())
+                        .eq(Approve::getType,Constants.ONE)
         );
         //澶勭悊鏈瀹℃壒鐨勪笟鍔℃暟鎹�
         approveMapper.updateById(approve);
@@ -910,17 +1005,39 @@
                     .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::getReaded,Constants.ONE)
+                        .set(Notices::getParam2,approve.getStatus())
+                        .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::getSendacopy,Constants.ONE)
+                            .set(Notices::getParam2,approve.getStatus())
+                            .eq(Notices::getObjId,notices.getObjId())
+                            .eq(Notices::getObjType,notices.getObjType())
+                            .eq(Notices::getReaded,Constants.ZERO)
+                            .ne(Notices::getId,notices.getId())
+                    );
+                }
+            }
+            return;
         }else{
             //澶勭悊鍏朵粬涓氬姟鏁版嵁
-            if((approve.getApproveType().equals(Constants.ZERO)
-                    || approve.getApproveType().equals(Constants.TWO)) &&approve.getIsEndCheck()==Constants.ONE){
+            if((Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)
+                    || Constants.equalsInteger( approve.getApproveType(),Constants.TWO)) && Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){
                 //鎴栫 / 鍗曚汉瀹� 涓� 缁堝
                 approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                         .lambda()
                         .set(Approve::getStatus,Constants.approveStatus.otherDeal)
                         .in(Approve::getId,approveList.stream().map(m->m.getId()).collect(Collectors.toList())));
                 dealBusinessBean = true;
-
             }else if((approve.getApproveType().equals(Constants.ZERO)
                     || approve.getApproveType().equals(Constants.TWO)) &&approve.getIsEndCheck()!=Constants.ONE){
                 //鎴栫 / 鍗曚汉瀹� 闈炵粓瀹� 鍒欏紑鍚笅涓�姝ヤ笟鍔℃祦绋�
@@ -938,122 +1055,146 @@
                         .eq(Approve::getObjType,approve.getObjType())
                         .eq(Approve::getLevel,(approve.getLevel()+1))
                 );
-                //TODO 鏇存柊娑堟伅鏁版嵁  鍙戦�佷笅涓�绾ф暟鎹秷鎭�
-            }else if(approve.getApproveType().equals(Constants.ONE)&&approve.getIsEndCheck()==Constants.ONE){
-            //浼氱 涓旂粓瀹�
-                if(approveList.size()==Constants.ZERO){
+            }else if(approve.getApproveType().equals(Constants.ONE)){
+                //浼氱 涓旂粓瀹�
+                //鏃犱粬浜哄鎵圭殑鎯呭喌 鍒欎慨鏀规暟鎹姸鎬�
+                if(Constants.equalsInteger(approveList.size(),Constants.ZERO)&&Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)){
                     dealBusinessBean = true;
                 }
             }
+            this.passNextNotices(dealBusinessBean,notices,approve,approveList,approveCopyList);
         }
-
-        if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit)
-                ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit)
-                ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){
-            // 璁垮 涓夌被涓氬姟鏁版嵁
-            visitsMapper.updateById(visits);
-            if(dealBusinessBean){
-                //TODO 鍙戦�佸鎵归�氳繃娑堟伅
-
-            }else if(approveDTO.getStatus().equals(Constants.THREE)){
-                //TODO 瀹℃壒鏈�氳繃閫氱煡
-
-            }
-        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
-                Constants.approveObjectType.unCityUseCar)){
-            // 甯傚唴澶栫敤杞︾敵璇�
-            if(dealBusinessBean){
-                //TODO 鍙戦�佸鎵归�氳繃娑堟伅
-                carUseBookMapper.updateById(carUseBook);
-            }else if(approveDTO.getStatus().equals(Constants.THREE)){
-                //TODO 瀹℃壒鏈�氳繃閫氱煡
-
-            }
-        }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
-            //TODO  鐗╂祦杞﹂绾�
-
+        //澶勭悊涓氬姟鏁版嵁
+        if(dealBusinessBean){
+            this.dealBusinessData(approveDTO,approve);
         }
     }
 
-    public void passNextNotices(Boolean dealBusinessBean,Approve approve){
-        //鏍规嵁瀹℃壒璁板綍鏌ヨ 閫氱煡璁板綍
-        Integer noticeType = Constants.approveTypeToNoticeType(approve.getObjType());
-        Notices  notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>().lambda()
-                .eq(Notices::getObjId,approve.getObjId())
-                .eq(Notices::getObjType,noticeType)
-                .eq(Notices::getUserId,approve.getChekorId())
-                .eq(Notices::getSendacopy,Constants.ZERO)
-                .eq(Notices::getIsdeleted,Constants.ZERO)
+    /**
+     * 澶勭悊寰呭姙淇℃伅
+     * @param dealBusinessBean  鏄惁闇�瑕佽繘琛屾洿鏂颁笟鍔℃暟鎹姸鎬�
+     * @param approve  瀹℃壒璁板綍
+     * @param approveList  鍚岀骇寰呭鎵规暟鎹�
+     */
+    public void passNextNotices(Boolean dealBusinessBean,Notices notices,Approve approve,List<Approve> approveList,List<Approve> copyList){
+        //1銆佷慨鏀硅嚜宸辩殑鏁版嵁璁板綍
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                .set(Notices::getEditDate,new Date())
+                .set(Notices::getReaded,Constants.ONE)
+                .set(dealBusinessBean,Notices::getParam2,approve.getStatus())
+                .eq(Notices::getId,notices.getId())
         );
-        if(Objects.isNull(notices)){
-            return;
-        }
-
-
         if(Constants.equalsInteger(approve.getApproveType(),Constants.ZERO)){
             //鎴栫
-            //1銆佷慨鏀硅嚜宸辩殑鏁版嵁璁板綍
-
             //2銆佹洿鏂颁粬浜虹殑鍚岀骇璁板綍 涓烘妱閫�
-
+            noticesJoinMapper.update(null,new UpdateWrapper<Notices>().lambda()
+                    .set(Notices::getEditDate,new Date())
+                    .set(Notices::getReaded,Constants.ONE)
+                    .set(Notices::getSendacopy,Constants.ONE)
+                    .set(dealBusinessBean,Notices::getParam2,approve.getStatus())
+                    .eq(Notices::getObjId,notices.getObjId())
+                    .eq(Notices::getObjType,notices.getObjType())
+                    .ne(Notices::getId,notices.getId())
+            );
             //3銆佸鏋滀笉鏄粓瀹$敓鎴愪笅涓�绾х殑鏁版嵁璁板綍
-
-
+            if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)&&!dealBusinessBean){
+              this.saveNextNotice(notices,approve);
+            }
         }else if(Constants.equalsInteger(approve.getApproveType(),Constants.ONE)){
             //浼氱
-            //1銆佷慨鏀硅嚜宸辩殑鏁版嵁璁板綍
-
-            //2銆佹牴鎹槸鍚︿负鏈�鍚庝竴浣嶅鎵逛汉   濡傛灉涓嶆槸 鍒欑粨鏉�
-
-            //3銆� 濡傛灉鏄渶鍚庝竴浣嶅鎵逛汉 涓斾笉鏄粓瀹″紑鍚笅涓�绾ф暟鎹�
-
+            //2銆佸鏋滄槸鏈�鍚庝竴浣嶅鎵逛汉 涓斾笉鏄粓瀹″紑鍚笅涓�绾ф暟鎹�
+            if(Constants.equalsInteger(Constants.ZERO,approveList.size())){
+                if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
+                    this.saveNextNotice(notices,approve);
+                }
+            }
         }else{
             //鍗曚汉绛�
-            //1銆佷慨鏀硅嚜宸辩殑鏁版嵁璁板綍
-
             //2銆� 鏄惁鏄粓瀹� 寮�鍚笅涓�绾ф暟鎹�
+            if(Constants.equalsInteger(approve.getIsEndCheck(),Constants.ZERO)){
+                this.saveNextNotice(notices,approve);
+            }
+        }
+        //缁堝涓氬姟 涓� 澶勭悊鏁版嵁  杩涜鎶勯�佸彂閫�
+        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);
+                    }
+                }
+            }
 
 
         }
-        //涓氬姟閫氳繃 淇敼瀹℃壒瀵瑰簲娑堟伅璁板綍
-        if(Constants.equalsInteger(approve.getStatus(),Constants.approveStatus.pass)){
-
-        }
-        //
-
-        //缁堝涓氬姟 鍙戦�佹妱閫�
-        if (Constants.equalsInteger(approve.getIsEndCheck(),Constants.ONE)) {
-
-
-
-        }
-
-
-
-
-
-
-
     }
 
-    public void dealBusinessData(ApproveDTO approveDTO,Approve approve,Visits visits,CarUseBook carUseBook){
+
+    public void saveNextNotice(Notices notices,Approve approve){
+        List<Approve> nextApproveList = approveJoinMapper.selectList(new QueryWrapper<Approve>()
+                .lambda()
+                .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)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"瀹℃壒娴佹暟鎹紓甯�");
+        }
+        Notices newNotices = new Notices();
+        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);
+            }else{
+                notices.setId(null);
+                notices.setUserId(nextDealApprove.getChekorId());
+                noticesJoinMapper.insert(notices);
+            }
+        }
+    }
+
+    public void dealBusinessData(ApproveDTO approveDTO,Approve approve){
         if(approveDTO.getObjType().equals(Constants.approveObjectType.unConstructionVisit)
                 ||approveDTO.getObjType().equals(Constants.approveObjectType.constructionVisit)
                 ||approveDTO.getObjType().equals(Constants.approveObjectType.visitReporting)){
             // 璁垮 涓夌被涓氬姟鏁版嵁
-            visits = visitsMapper.selectById(approveDTO.getObjId());
+            Visits visits = visitsMapper.selectById(approveDTO.getObjId());
             if(Objects.isNull(visits)){
                 throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌鐢宠璁板綍");
             }
             visits.setStatus(approveDTO.getStatus());
             visits.setEditDate(new Date());
             visits.setEditor(approveDTO.getLoginUserInfo().getMemberId());
-
-
+            visitsMapper.updateById(visits);
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.cityUseCar)||approveDTO.getObjType().equals(
                 Constants.approveObjectType.unCityUseCar)){
             // 甯傚唴澶栫敤杞︾敵璇�
-            carUseBook = carUseBookMapper.selectById(approveDTO.getObjId());
+            CarUseBook carUseBook = carUseBookMapper.selectById(approveDTO.getObjId());
             if(Objects.isNull(carUseBook)){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鐢ㄨ溅璁板綍");
             }
@@ -1068,7 +1209,7 @@
                 }
                 carUseBook.setDriverId(carDriver.getId());
             }
-
+            carUseBookMapper.updateById(carUseBook);
         }else if(approveDTO.getObjType().equals(Constants.approveObjectType.logisticsCarUse)){
             //TODO  鐗╂祦杞﹂绾�
 
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 83bbb7b..3f3d105 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
@@ -17,6 +17,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -158,6 +159,12 @@
                     .eq(ApproveParam::getTemplId,model.getId())
                     .orderByAsc(ApproveParam::getLevel)
             );
+            for (ApproveParam approveParam :approveParamList) {
+                if(StringUtils.isNotBlank(approveParam.getObjIds())){
+                    approveParam.setMemberList(memberMapper.selectList(new QueryWrapper<Member>()
+                            .lambda().eq(Member::getIsdeleted,Constants.ZERO).in(Member::getId,approveParam.getObjIds().split(","))));
+                }
+            }
             model.setParamList(approveParamList);
         }
         return model;
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 fba319f..4c324ed 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
@@ -10,13 +10,11 @@
 import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
-import com.doumee.dao.business.ApproveMapper;
-import com.doumee.dao.business.CarDriverMapper;
-import com.doumee.dao.business.CarUseBookMapper;
-import com.doumee.dao.business.CarsMapper;
+import com.doumee.dao.business.*;
 import com.doumee.dao.business.join.ApproveJoinMapper;
 import com.doumee.dao.business.join.CarUseBookJoinMapper;
 import com.doumee.dao.business.model.*;
+import com.doumee.dao.business.vo.ApproveDataVO;
 import com.doumee.dao.business.vo.DateIntervalVO;
 import com.doumee.dao.system.model.SystemDictData;
 import com.doumee.dao.system.model.SystemUser;
@@ -27,6 +25,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -70,6 +69,9 @@
 
     @Autowired
     private CarDriverMapper carDriverMapper;
+
+    @Autowired
+    private MemberMapper memberMapper;
 
 
     @Override
@@ -179,11 +181,29 @@
                 .eq(CarUseBook::getId,id)
                 .last("limit 1"  );
         CarUseBook model = carUseBookMapper.selectJoinOne(CarUseBook.class,queryWrapper);
-        model.setApproveDateVO(
-               approveService.arrangeApprovedData(id,
-                       model.getType().equals(Constants.ZERO)?3:4,
-                       memberId)
-        );
+        ApproveDataVO approveDataVO = approveService.arrangeApprovedData(id,
+                model.getType().equals(Constants.ZERO)?3:4,
+                memberId);
+        List<Approve> approveList = approveDataVO.getApproveList();
+        if(Constants.equalsInteger(model.getStatus(),Constants.FOUR)){
+            String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
+                    +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
+            Member member = memberMapper.selectById(model.getCancelUser());
+            Approve approve = new Approve();
+            approve.setApproveType(Constants.ZERO);
+            approve.setCreateDate(model.getCancelTime());
+            approve.setTitle("鎾ら攢浜�");
+            approve.setStatusInfo("宸叉挙閿�");
+            approve.setStatus(Constants.FOUR);
+            approve.setType(Constants.ZERO);
+            approve.setMemberName(member.getName());
+            if(StringUtils.isNotBlank(member.getFaceImg())){
+                approve.setFaceImg(path + member.getFaceImg());
+            }
+            approve.setCheckInfo(model.getCancelInfo());
+            approveList.add(approve);
+        }
+        model.setApproveDateVO(approveDataVO);
         return  model;
     }
 
@@ -419,9 +439,11 @@
        //澶勭悊瀹℃壒璁板綍
        approveJoinMapper.update(null,new UpdateWrapper<Approve>()
                 .lambda()
+                .set(Approve::getIsdeleted,Constants.ONE)
                 .set(Approve::getStatus,Constants.FOUR)
                 .set(Approve::getCheckInfo,"鐢ㄨ溅鐢宠鍙栨秷")
                 .in(Approve::getStatus,Constants.ZERO,Constants.ONE)
+               .in(Approve::getObjType,Constants.approveObjectType.cityUseCar,Constants.approveObjectType.unCityUseCar)
                 .eq(Approve::getObjId,id)
         );
     }
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 7b8bb07..c263aac 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
@@ -1,5 +1,6 @@
 package com.doumee.service.business.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -10,6 +11,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.Utils;
 import com.doumee.dao.business.HiddenDangerLogMapper;
 import com.doumee.dao.business.HiddenDangerMapper;
@@ -17,13 +19,17 @@
 import com.doumee.dao.business.MemberMapper;
 import com.doumee.dao.business.model.*;
 import com.doumee.dao.system.MultifileMapper;
+import com.doumee.dao.system.join.NoticesJoinMapper;
 import com.doumee.dao.system.model.Multifile;
+import com.doumee.dao.system.model.Notices;
 import com.doumee.service.business.HiddenDangerLogService;
 import com.doumee.service.business.HiddenDangerService;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import org.apache.commons.lang3.StringUtils;
 import org.checkerframework.checker.units.qual.C;
+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;
 import org.springframework.util.CollectionUtils;
@@ -54,6 +60,9 @@
     private HiddenDangerLogMapper hiddenDangerLogMapper;
 
 
+    @Autowired
+    private NoticesJoinMapper noticesJoinMapper;
+
     @Override
     public Integer create(HiddenDanger hiddenDanger) {
         if(Objects.isNull(hiddenDanger)
@@ -67,12 +76,17 @@
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
+        hiddenDanger.setMemberId(hiddenDanger.getLoginUserInfo().getMemberId());
         hiddenDanger.setIsdeleted(Constants.ZERO);
         hiddenDanger.setCreateDate(new Date());
         hiddenDanger.setEditDate(new Date());
         HiddenDangerParam hiddenDangerParam = hiddenDangerParamMapper.selectById(hiddenDanger.getAreaId());
         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(),"鏈煡璇㈠埌闅愭偅绫诲瀷");
         }
         hiddenDanger.setCreator(hiddenDanger.getLoginUserInfo().getId());
         hiddenDanger.setAreaName(hiddenDangerParam.getName());
@@ -96,7 +110,7 @@
         hiddenDangerLog.setObjType(Constants.ZERO);
         hiddenDangerLogMapper.insert(hiddenDangerLog);
 
-        List<Multifile> multifiles  = hiddenDanger.getMultifileList();
+        List<Multifile> multifiles  = hiddenDanger.getSubmitFileList();
         if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifiles)){
             for (int i = 0; i < multifiles.size(); i++) {
                     Multifile multifile = multifiles.get(i);
@@ -109,6 +123,46 @@
                 multifileMapper.insert(multifile);
             }
         }
+        String title = "[闅愭偅闅忔墜鎷峕鎻愭姤浜�-"+hiddenDanger.getLoginUserInfo().getRealname();
+        //json鏁版嵁
+        Map<String,Object> jsonMap = new HashMap<>();
+        jsonMap.put("area", "鍙戠幇鍖哄煙:" + hiddenDangerParam.getName());
+        jsonMap.put("cate", "闅愭偅绫诲瀷:" + hiddenDangerCate.getName());
+        jsonMap.put("sTime", "鍙戠幇鏃堕棿:" + DateUtil.DateToStr(hiddenDanger.getSubmitTime() , "yyyy-MM-dd HH:mm"));
+        //榛樿鐢熸垚涓�鏉� 鐢宠浜虹殑鏁版嵁 鏍囪鍒犻櫎鐘舵�佺敤浜庡鐞嗗埌 浠诲姟涓績锛堟垜鍙戣捣锛変娇鐢�
+        Notices createNotices = new Notices();
+        createNotices.setCreateDate(new Date());
+        createNotices.setIsdeleted(Constants.ONE);
+        createNotices.setObjId(hiddenDanger.getId());
+        createNotices.setObjType(Constants.THREE);
+        createNotices.setType(Constants.THREE);
+        createNotices.setTitle(title);
+        createNotices.setParam1(JSONObject.toJSONString(jsonMap));
+        createNotices.setStatus(Constants.ZERO);
+        createNotices.setReaded(Constants.ZERO);
+        createNotices.setSendacopy(Constants.ZERO);
+        createNotices.setParam2("0");
+        createNotices.setParam3(hiddenDanger.getLoginUserInfo().getMemberId().toString());
+        createNotices.setInfo("澶勭悊涓�");
+        noticesJoinMapper.insert(createNotices);
+
+        //瀛樺偍澶勭悊浜虹殑閫氱煡娑堟伅
+        Notices notices = new Notices();
+        notices.setId(null);
+        notices.setCreateDate(new Date());
+        notices.setIsdeleted(Constants.ZERO);
+        notices.setTitle(title);
+        notices.setParam1(JSONObject.toJSONString(jsonMap));
+        notices.setParam2("0");
+        notices.setObjId(hiddenDanger.getId());
+        notices.setObjType(Constants.THREE);
+        notices.setType(Constants.THREE);
+        notices.setEditDate(new Date());
+        notices.setUserId(hiddenDanger.getCheckUserId());
+        notices.setStatus(Constants.ZERO);
+        notices.setSendacopy(Constants.ZERO);
+        notices.setReaded(Constants.ZERO);
+        noticesJoinMapper.insert(notices);
 
 
         return hiddenDanger.getId();
@@ -307,6 +361,17 @@
         hiddenDangerLog.setTitle(hiddenDanger.getStatus().equals(Constants.ONE)?"闅愭偅澶勭悊":"闅愭偅閫�鍥�");
         hiddenDangerLog.setObjType(hiddenDanger.getStatus().equals(Constants.ONE)?Constants.FOUR:Constants.TWO);
         hiddenDangerLogMapper.insert(hiddenDangerLog);
+        //澶勭悊寰呭姙淇℃伅
+        noticesJoinMapper.update(null,new UpdateWrapper<Notices>()
+                .lambda()
+                .set(Notices::getReaded,Constants.ONE)
+                .set(Notices::getStatus,Constants.ONE)
+                .set(Notices::getParam2,hiddenDanger.getStatus())
+                .eq(Notices::getObjId,hiddenDanger.getId())
+                .eq(Notices::getObjType,Constants.THREE)
+                .eq(Notices::getUserId,hiddenDanger.getLoginUserInfo().getMemberId())
+        );
+
     }
 
     private void isParamValid(HiddenDanger hiddenDanger) {
@@ -432,6 +497,26 @@
         hiddenDangerLog.setHiddenDangerId(hiddenDanger.getId());
         hiddenDangerLog.setObjType(Constants.ONE);
         hiddenDangerLogMapper.insert(hiddenDangerLog);
+        Notices notices = noticesJoinMapper.selectOne(new QueryWrapper<Notices>()
+                .lambda()
+                .eq(Notices::getObjId,hiddenDanger.getId())
+                .eq(Notices::getObjType,Constants.THREE)
+                .eq(Notices::getUserId,hiddenDanger.getLoginUserInfo().getMemberId())
+                .last(" limit  1 ")
+        );
+        if(Objects.nonNull(notices)){
+            Notices newNotices = new Notices();
+            BeanUtils.copyProperties(notices,newNotices);
+            newNotices.setId(null);
+            newNotices.setCreateDate(new Date());
+            newNotices.setParam2("3");
+            newNotices.setUserId(hiddenDanger.getCheckUserId());
+            noticesJoinMapper.insert(newNotices);
+            notices.setStatus(Constants.ONE);
+            notices.setEditDate(new Date());
+            notices.setReaded(Constants.ONE);
+            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 c17b755..82ee127 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
@@ -1112,7 +1112,7 @@
         queryWrapper.selectAll(Member.class)
                 .selectAs(Company::getName,Member::getCompanyName)
                 .eq(Member::getType,Constants.TWO)
-                .exists("select d.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
+                .exists("select b.id from car_driver b where b.isdeleted=0 and b.member_id=t.id");
 
         if(null != member.getType()) {
             queryWrapper.eq(Member::getType,member.getType());
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 63bf0b8..7d8d473 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
@@ -266,6 +266,7 @@
         //鍒涘缓鏃堕棿
         visits.setCreateDate(date);
         //璁垮鎶ュ
+        visits.setIsdeleted(Constants.ZERO);
         visits.setType(Constants.TWO);
         visits.setReceptMemberId(visitMember.getId());
         visits.setStatus(Constants.VisitStatus.waitCheck);
@@ -274,6 +275,7 @@
         //鍒濆鍖栬瀹俊鎭�
 //        initVisitInfo(visits,date);
         visitsMapper.insert(visits);
+        approveService.createApproveFlow(visits.getType(),visits.getId(),visits.getReceptMemberId());
         return visits.getId();
     }
 
@@ -621,12 +623,12 @@
             }
         }
         //璁垮鎶ュ
-        if(visits.getType().equals(Constants.TWO)
+        if(Constants.equalsInteger(visits.getType(),Constants.TWO)
             && (StringUtils.isBlank( visits.getName())
                 ||  StringUtils.isBlank( visits.getPhone())
-                ||  StringUtils.isBlank( visits.getCompanyName()))
+                ||  StringUtils.isBlank( visits.getCompanyName())
                 ||  StringUtils.isBlank( visits.getCarNos())
-                ||  Objects.isNull(visits.getReceptMemberId())
+                ||  Objects.isNull(visits.getReceptMemberId()))
         ){
             throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝淇℃伅濉啓涓嶆纭紒");
         }else if(visits.getType().equals(Constants.ONE) && StringUtils.isBlank(visits.getConstructionReason())){
@@ -1085,14 +1087,16 @@
     }
 
     @Override
-    public Visits findById(Integer id) {
+    public Visits findById(Integer id,Integer memberId) {
 
         MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>();
         queryWrapper.selectAll(Visits.class);
         queryWrapper.selectAs(Member::getName,Visits::getReceptMemberName);
         queryWrapper.selectAs(Company::getName,Visits::getReceptMemberDepartment);
+        queryWrapper.select("t3.name",Visits::getCreateMemberName);
         queryWrapper.leftJoin(Member.class,Member::getId,Visits::getReceptMemberId);
         queryWrapper.leftJoin(Company.class,Company::getErpId,Member::getErpOrgId);
+        queryWrapper.leftJoin("Member t3 on t.CREATE_MEMBER_ID=t3.id");
 
         queryWrapper.eq(Visits::getId,id);
         Visits result = visitsJoinMapper.selectJoinOne(Visits.class,queryWrapper);
@@ -1119,6 +1123,13 @@
         result.setWithUserList(visitsList);
         result.setPrefixUrl(systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() +
                 systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode());
+
+        result.setApproveDateVO(
+                approveService.arrangeApprovedData(id,
+                        result.getType(),
+                        memberId)
+        );
+
         return result;
     }
 
@@ -1147,10 +1158,9 @@
         queryWrapper.leftJoin(Company.class,Company::getId,Member::getCompanyId);
 
         queryWrapper.eq(Visits::getIsdeleted,Constants.ZERO);
-        queryWrapper.eq(pageWrap.getModel().getType()!=null,Visits::getType,pageWrap.getModel().getType());
         queryWrapper.eq(Objects.nonNull(pageWrap.getModel().getType()),Visits::getType,pageWrap.getModel().getType());
         queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getOpenid()),Visits::getOpenid,pageWrap.getModel().getOpenid());
-        queryWrapper.eq(StringUtils.isBlank(pageWrap.getModel().getOpenid()),"1","2");
+//        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()))
                 .eq(StringUtils.isNotBlank(pageWrap.getModel().getIdcardNo()),Visits::getIdcardNo,DESUtil.encrypt(Constants.EDS_PWD, pageWrap.getModel().getIdcardNo()))

--
Gitblit v1.9.3