From 8aff182ef3a075540119a98a9ae03d80dd97318e Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 14 十月 2024 18:15:26 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 admin/src/components/business/operaVisitsWindow.vue                    |    1 
 admin/src/views/platform/set/group.vue                                 |   23 
 admin/src/views/platform/components/PlatformQueuing.vue                |    1 
 screen/src/assets/images/SecurityControl/staff_ic_fangke@2x.png        |    0 
 screen/src/assets/images/SecurityControl/ic_title_green@2x.png         |    0 
 admin/src/views/business/approvalConfiguration.vue                     |    9 
 admin/src/components/business/OperaMemberRoleWindow.vue                |  117 ++--
 screen/src/views/SecurityControl.vue                                   |  845 ++++++++++++++++++++++++++++++
 admin/src/components/system/role/PermissionConfigWindow.vue            |   21 
 screen/src/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png |    0 
 admin/src/components/business/OperaPlatformApproveTemplWindow.vue      |    4 
 screen/src/views/PlatformCall.vue                                      |    2 
 admin/src/components/operation/OperCarUseBookParamWindow.vue           |    2 
 admin/src/components/business/OperaDeviceRoleWindow.vue                |   26 
 admin/src/components/common/CommonHeader.vue                           |    2 
 admin/.env.development                                                 |    4 
 admin/src/views/task/driverDetail.vue                                  |    2 
 admin/src/views/platform/queueUp.vue                                   |   23 
 h5/utils/config.js                                                     |    4 
 screen/src/assets/images/SecurityControl/jiankong_ic_open@2x.png       |    0 
 h5/pages/staff/task/visitorReport.vue                                  |  297 +++++----
 screen/src/utils/scale_screen.js                                       |    2 
 screen/src/assets/images/SecurityControl/bg@2x.png                     |    0 
 screen/src/views/LogisticsEfficiency.vue                               |   62 +
 admin/src/views/operation/serviceCar/apprConfig.vue                    |   11 
 screen/src/router/index.js                                             |    5 
 admin/src/views/business/approvalReport.vue                            |   13 
 admin/src/components/system/user/RoleConfigWindow.vue                  |   21 
 admin/src/components/common/UploadFaceImg.vue                          |   10 
 admin/src/views/platform/platformReason.vue                            |    3 
 screen/src/assets/images/SecurityControl/staff_ic_neibu@2x.png         |    0 
 screen/src/assets/images/SecurityControl/title_short@2x.png            |    0 
 admin/src/components/business/OperaMemberWindow.vue                    |  135 ++--
 admin/src/views/task/index.vue                                         |    2 
 screen/src/assets/images/SecurityControl/anfang_ic_data@2x.png         |    0 
 35 files changed, 1,356 insertions(+), 291 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index 0571e3b..18fd4c2 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -3,6 +3,6 @@
 
 VUE_APP_API_URL  = 'http://localhost:10010'
 # VUE_APP_API_URL  = 'http://192.168.0.139:10010'
-# VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
-VUE_APP_API_URL  = 'https://dmtest.ahapp.net/antai_admin_interface/'
+VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
+# VUE_APP_API_URL  = 'https://dmtest.ahapp.net/antai_admin_interface/'
 
diff --git a/admin/src/components/business/OperaDeviceRoleWindow.vue b/admin/src/components/business/OperaDeviceRoleWindow.vue
index 49b5a38..84844fb 100644
--- a/admin/src/components/business/OperaDeviceRoleWindow.vue
+++ b/admin/src/components/business/OperaDeviceRoleWindow.vue
@@ -32,6 +32,7 @@
                     :filter-method="filterMethod"
                     filter-placeholder="璇疯緭鍏ラ棬绂佺偣鎴栧尯鍩熷悕绉�"
                     v-model="form.doorIds"
+                    class="transfer"
                     :data="device">
                 </el-transfer>
             </el-form-item>
@@ -196,8 +197,25 @@
 }
 </script>
 
-<style>
-    .el-transfer-panel {
-        width: 350px !important;
-    }
+<style lang="scss" scoped>
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::v-deep .el-transfer-panel__body {
+    height: 500px;
+  }
+
+  ::v-deep .el-transfer-panel__list.is-filterable {
+    height: 480px;
+  }
+}
 </style>
diff --git a/admin/src/components/business/OperaMemberRoleWindow.vue b/admin/src/components/business/OperaMemberRoleWindow.vue
index 930d160..89cacdb 100644
--- a/admin/src/components/business/OperaMemberRoleWindow.vue
+++ b/admin/src/components/business/OperaMemberRoleWindow.vue
@@ -1,50 +1,32 @@
 <template>
-    <GlobalWindow
-        :title="title"
-        :visible.sync="visible"
-        width="70%"
-        :confirm-working="isWorking"
-        @confirm="confirm"
-    >
-      <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛�<br>
-        1.闂ㄧ鏉冮檺閰嶇疆鎴愬姛鍚庯紝鎺堟潈浠诲姟鍗宠繘鍏ユ潈闄愪笅鍙戦槦鍒楋紝鍙墠寰�銆愪汉鍛樻巿鏉冭褰曘�戞煡鐪嬩笅鍙戣繘搴�;<br>
-        2.濡傛灉闇�瑕佹竻绌哄綋鍓嶉�変腑浜哄憳涓嬪彂鏉冮檺锛屼互涓嬨�愬凡閫夐棬绂佺偣鍒嗙粍銆戜负绌烘彁浜ゅ嵆鍙��
-      </p>
-      <p class="tip" v-if="form.names != null">姝e湪涓�<em>銆恵{ form.names.map(item => `${item}`).join('锛�') }}銆�</em> 閰嶇疆闂ㄧ鏉冮檺</p>
-        <el-form :model="form" ref="form" :rules="rules">
-            <el-form-item label="闂ㄧ鏈夋晥鏈燂細" prop="timeType">
-                <el-radio-group v-model="form.timeType">
-                    <el-radio :label="0">闀挎湡鏈夋晥</el-radio>
-                    <el-radio :label="1">鑷畾涔夋椂闂�</el-radio>
-                    <el-radio :label="2" v-if="companyType=== 0">鍩硅鏈夋晥鏈�</el-radio>
-                </el-radio-group>
-                <div v-if="form.timeType ==1" style="margin-top: 10px" >
-                  <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>
-                </div>
-            </el-form-item>
-            <el-form-item label="闂ㄧ鐐瑰垎缁勶細" prop="roleIds">
-                <el-transfer
-                    style="margin-top: 15px;font-size: 12px"
-                    :titles="['鏈�夐棬绂佺偣鍒嗙粍', '宸查�夐棬绂佺偣鍒嗙粍']"
-                    filterable
-                    :filter-method="filterMethod"
-                    filter-placeholder="璇疯緭鍏ラ棬绂佺偣鍒嗙粍鍚嶇О"
-                    v-model="form.roleIds"
-                    :data="roles">
-                </el-transfer>
-            </el-form-item>
+  <GlobalWindow :title="title" :visible.sync="visible" width="900px" :confirm-working="isWorking" @confirm="confirm">
+    <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛�<br>
+      1.闂ㄧ鏉冮檺閰嶇疆鎴愬姛鍚庯紝鎺堟潈浠诲姟鍗宠繘鍏ユ潈闄愪笅鍙戦槦鍒楋紝鍙墠寰�銆愪汉鍛樻巿鏉冭褰曘�戞煡鐪嬩笅鍙戣繘搴�;<br>
+      2.濡傛灉闇�瑕佹竻绌哄綋鍓嶉�変腑浜哄憳涓嬪彂鏉冮檺锛屼互涓嬨�愬凡閫夐棬绂佺偣鍒嗙粍銆戜负绌烘彁浜ゅ嵆鍙��
+    </p>
+    <p class="tip" v-if="form.names != null">姝e湪涓�<em>銆恵{ form.names.map(item => `${item}`).join('锛�') }}銆�</em> 閰嶇疆闂ㄧ鏉冮檺</p>
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="闂ㄧ鏈夋晥鏈燂細" prop="timeType">
+        <el-radio-group v-model="form.timeType">
+          <el-radio :label="0">闀挎湡鏈夋晥</el-radio>
+          <el-radio :label="1">鑷畾涔夋椂闂�</el-radio>
+          <el-radio :label="2" v-if="companyType === 0">鍩硅鏈夋晥鏈�</el-radio>
+        </el-radio-group>
+        <div v-if="form.timeType == 1" style="margin-top: 10px">
+          <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>
+        </div>
+      </el-form-item>
+      <el-form-item label="闂ㄧ鐐瑰垎缁勶細" prop="roleIds">
+        <el-transfer style="margin-top: 15px;font-size: 12px" :titles="['鏈�夐棬绂佺偣鍒嗙粍', '宸查�夐棬绂佺偣鍒嗙粍']" filterable
+          :filter-method="filterMethod" filter-placeholder="璇疯緭鍏ラ棬绂佺偣鍒嗙粍鍚嶇О" v-model="form.roleIds" class="transfer"
+          :data="roles">
+        </el-transfer>
+      </el-form-item>
 
-        </el-form>
-    </GlobalWindow>
+    </el-form>
+  </GlobalWindow>
 </template>
 
 <script>
@@ -55,7 +37,7 @@
   name: 'OperaDeviceRoleWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     var validateTime = (rule, value, callback) => {
       if (this.form.timeType == null) {
         callback(new Error('璇峰~鍐欐纭殑闂ㄧ鏈夋晥鏈熸椂闂�'))
@@ -83,7 +65,7 @@
       },
       roles: [],
       rules: {
-      // 楠岃瘉瑙勫垯
+        // 楠岃瘉瑙勫垯
         timeType: [
           { required: true, validator: validateTime, message: '璇烽�変腑闂ㄧ鏈夋晥鏈�' }
         ],
@@ -96,18 +78,18 @@
       }
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/business/member',
       'field.id': 'id'
     })
   },
   methods: {
-    filterMethod (query, item) {
+    filterMethod(query, item) {
       if (!query) return item
       return item.label.indexOf(query) > -1
     },
-    seleTime (e) {
+    seleTime(e) {
       if (e && e.length >= 2) {
         this.form.startTime = e[0]
         this.form.endTime = e[1]
@@ -116,7 +98,7 @@
         this.form.endTime = null
       }
     },
-    confirm () {
+    confirm() {
       this.$refs.form.validate((valid) => {
         if (!valid) {
           return
@@ -126,13 +108,13 @@
             .then(() => {
               this.confirmDo()
             })
-            .catch(() => {})
+            .catch(() => { })
         } else {
           this.confirmDo()
         }
       })
     },
-    confirmDo () {
+    confirmDo() {
       // 璋冪敤鏂板缓鎺ュ彛
       this.isWorking = true
       this.api.batchRoleAuth({
@@ -155,7 +137,7 @@
         })
     },
     // 鑾峰彇璁惧
-    getLists () {
+    getLists() {
       getDeviceRoleList({ type: 2 })
         .then(res => {
           this.roles = res.map(item => {
@@ -167,7 +149,7 @@
           })
         })
     },
-    open (title, ids, names, companyType) {
+    open(title, ids, names, companyType) {
       this.roles = []
       this.getLists()
       this.title = title
@@ -189,6 +171,7 @@
 
 <style scoped lang="scss">
 @import "@/assets/style/variables.scss";
+
 // 瑙掕壊閰嶇疆
 .global-window {
   .tip {
@@ -198,10 +181,12 @@
       font-weight: bold;
     }
   }
+
   .tip-warn {
     margin: 4px 0 12px 0;
     font-size: 12px;
     color: #999;
+
     i {
       color: orange;
       margin-right: 4px;
@@ -211,7 +196,25 @@
     }
   }
 }
-.el-transfer-panel {
-  width: 350px !important;
+
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::v-deep .el-transfer-panel__body {
+    height: 500px;
+  }
+
+  ::v-deep .el-transfer-panel__list.is-filterable {
+    height: 480px;
+  }
 }
 </style>
diff --git a/admin/src/components/business/OperaMemberWindow.vue b/admin/src/components/business/OperaMemberWindow.vue
index df26e7c..b356deb 100644
--- a/admin/src/components/business/OperaMemberWindow.vue
+++ b/admin/src/components/business/OperaMemberWindow.vue
@@ -1,56 +1,45 @@
 <template>
-    <GlobalWindow
-        :title="title"
-        width="60%"
-        :visible.sync="visible"
-        :confirm-working="isWorking"
-        @confirm="confirm"
-    >
-        <el-form :model="form" ref="form" :rules="rules">
-            <el-form-item label="濮撳悕" prop="name">
-                <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" v-trim/>
-            </el-form-item>
-            <el-form-item label="鎵�灞炵粍缁�" prop="companyId">
-              <el-cascader
-                  v-model="form.company"
-                  :options="department"
-                  @change="handleChangeCompany"
-                  :show-all-levels="false"
-                  clearable
-                  filterable
-                  :props="departprops"
-              ></el-cascader>
-              <div style="font-size: 12px;color: #F56C6C"  >
-                娉細浠呮敮鎸侀�夋嫨 銆恵{companyType ===0?'鐩稿叧鏂圭粍缁�':'鍐呴儴缁勭粐'}}銆�
-              </div>
-            </el-form-item>
-            <el-form-item label="鎵嬫満鍙�" prop="phone">
-                <el-input v-model="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim/>
-              <div style="color: #F56C6C;font-size: 12px">娉細鍛樺伐鎵嬫満鍙峰皢浣滀负骞冲彴鐧诲綍璐﹀彿锛屽垵濮嬪瘑鐮佷负绯荤粺榛樿瀵嗙爜閰嶇疆椤�</div>
-            </el-form-item>
-            <el-form-item label="韬唤璇佸彿" prop="idcardNo" v-if="form.id ==null">
-                <el-input v-model="form.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" v-trim/>
-            </el-form-item>
-            <el-form-item label="淇敼韬唤璇佸彿" prop="idcardNoNew" v-if="form.id !=null">
-                <el-input v-model="form.idcardNoNew" placeholder="鍙慨鏀硅韩浠借瘉鍙�" v-trim/>
-              <div style="font-size: 12px" v-if="form.id !=null">
-                娉細褰撳墠韬唤璇佸彿涓�<span style="color: #F56C6C">銆恵{form.idcardDecode}}銆�</span>锛屽闇�淇敼锛岃鍦ㄨ緭鍏ユ爮濉啓鏂扮殑韬唤璇佸彿!
-              </div>
-            </el-form-item>
-            <el-form-item label="宸ュ彿" prop="code">
-                <el-input v-model="form.code" placeholder="璇疯緭鍏ュ憳宸ュ伐鍙�" v-trim/>
-            </el-form-item>
-          <el-form-item label="浜鸿劯鐓х墖" prop="faceImgFull" >
-            <UploadFaceImg
-                :file="{ 'imgurlfull': form.faceImgFull, 'imgurl': form.faceImg }"
-                :uploadData="uploadData"
-                @uploadSuccess="uploadAvatarSuccess"
-                @uploadEnd="isUploading = false"
-                @uploadBegin="isUploading = true"
-            />
-          </el-form-item>
-</el-form>
-</GlobalWindow>
+  <GlobalWindow :title="title" width="60%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="濮撳悕" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" v-trim />
+      </el-form-item>
+      <el-form-item label="鎵�灞炵粍缁�" prop="companyId">
+        <el-cascader v-model="form.company" :options="department" @change="handleChangeCompany" :show-all-levels="false"
+          clearable filterable :props="departprops"></el-cascader>
+        <div style="font-size: 12px;color: #F56C6C">
+          娉細浠呮敮鎸侀�夋嫨 銆恵{ companyType === 0 ? '鐩稿叧鏂圭粍缁�' : '鍐呴儴缁勭粐' }}銆�
+        </div>
+      </el-form-item>
+      <el-form-item label="鎵嬫満鍙�" prop="phone">
+        <el-input v-model="form.phone" placeholder="璇疯緭鍏ユ墜鏈哄彿" v-trim />
+        <div style="color: #F56C6C;font-size: 12px">娉細鍛樺伐鎵嬫満鍙峰皢浣滀负骞冲彴鐧诲綍璐﹀彿锛屽垵濮嬪瘑鐮佷负绯荤粺榛樿瀵嗙爜閰嶇疆椤�</div>
+      </el-form-item>
+      <el-form-item label="韬唤璇佸彿" v-if="form.id == null">
+        <el-input v-model="form.idcardNo" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙�" v-trim />
+      </el-form-item>
+      <el-form-item label="淇敼韬唤璇佸彿" v-if="form.id != null">
+        <el-input v-model="form.idcardNoNew" placeholder="鍙慨鏀硅韩浠借瘉鍙�" v-trim />
+        <div style="font-size: 12px" v-if="form.id != null">
+          娉細褰撳墠韬唤璇佸彿涓�<span style="color: #F56C6C">銆恵{ form.idcardDecode }}銆�</span>锛屽闇�淇敼锛岃鍦ㄨ緭鍏ユ爮濉啓鏂扮殑韬唤璇佸彿!
+        </div>
+      </el-form-item>
+      <el-form-item label="宸ュ彿" prop="code">
+        <el-input v-model="form.code" placeholder="璇疯緭鍏ュ憳宸ュ伐鍙�" v-trim />
+      </el-form-item>
+      <el-form-item label="浜鸿劯鐓х墖" prop="faceImgFull">
+        <div class="upload_wrap">
+          <UploadFaceImg :file="{ 'imgurlfull': form.faceImgFull, 'imgurl': form.faceImg }" :uploadData="uploadData"
+            @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" @uploadBegin="isUploading = true" />
+          <div class="content">
+            <div>1銆佽閫夋嫨娴呰壊鎴栦腑鎬ц儗鏅紝浣跨敤鍧囧寑鍏夌嚎鎷嶇収銆�</div>
+            <div>2銆佽淇濇寔闈㈤儴姝e闀滃ご锛屽嬁閬尅闈㈤儴锛屼繚鎸佷腑绔嬭〃鎯呫��</div>
+            <div>3銆佽閬垮厤鍚庢湡淇浘锛岀‘淇濅汉鑴歌疆寤撴竻鏅般�佸畬鏁达紝灏藉彲鑳藉噺灏戦潪鑴搁儴鍐呭鍗犳瘮銆�</div>
+          </div>
+        </div>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
 </template>
 
 <script>
@@ -58,12 +47,12 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
 import UploadFaceImg from '@/components/common/UploadFaceImg'
-import {checkMobile, validIdCardNo, validIdCardNoNew} from '@/utils/form'
+import { checkMobile, validIdCardNo, validIdCardNoNew } from '@/utils/form'
 export default {
   name: 'OperaCompanyWindow',
   extends: BaseOpera,
-  components: { GlobalWindow, UploadAvatarImage,UploadFaceImg },
-  data () {
+  components: { GlobalWindow, UploadAvatarImage, UploadFaceImg },
+  data() {
     return {
       uploadData: {
         folder: 'member'
@@ -73,7 +62,7 @@
         value: 'id',
         checkStrictly: true
       },
-      companyType:0,
+      companyType: 0,
       department: [],
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -102,14 +91,14 @@
       }
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/business/member.js',
       'field.id': 'id'
     })
   },
   methods: {
-    handleChangeCompany (value) {
+    handleChangeCompany(value) {
       if (this.form.company && this.form.company.length > 1) {
         this.form.companyId = this.form.company[this.form.company.length - 1]
       }
@@ -119,7 +108,7 @@
      * @title 绐楀彛鏍囬
      * @target 缂栬緫鐨勫璞�
      */
-    open (title, target, depart,companyType) {
+    open(title, target, depart, companyType) {
       this.title = title
       this.department = depart
       this.visible = true
@@ -140,7 +129,7 @@
           this.form[key] = target[key]
           this.form.idcardNo = ''
         }
-        this.form.company =[]
+        this.form.company = []
         if (target.companyId && target.companyPath) {
           var array = target.companyPath.split('/')
           array.forEach(item => {
@@ -152,10 +141,34 @@
       })
     },
     // 涓婁紶鍥剧墖
-    uploadAvatarSuccess (file) {
+    uploadAvatarSuccess(file) {
       this.form.faceImg = file.imgurl
       this.form.faceImgFull = file.imgurlfull
     }
   }
 }
 </script>
+<style lang="scss" scoped>
+.upload_wrap{
+  display: flex;
+  align-items: center;
+  .avatar-uploader{
+    display: flex;
+    align-items: center;
+    justify-content: center;
+  }
+  ::v-deep .avatar{
+    max-width: 90px;
+    max-height: 90px;
+  }
+  .content{
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    font-size: 12px;
+    color: #999999;
+    margin-left: 12px;
+    line-height: 24px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/admin/src/components/business/OperaPlatformApproveTemplWindow.vue b/admin/src/components/business/OperaPlatformApproveTemplWindow.vue
index 5f559b7..3aa3d5c 100644
--- a/admin/src/components/business/OperaPlatformApproveTemplWindow.vue
+++ b/admin/src/components/business/OperaPlatformApproveTemplWindow.vue
@@ -82,10 +82,10 @@
               <!-- 鎶勯�佷汉 -->
               <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"
+                  <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"></i>
+                    <i @click="memDel(memIndex)" class="el-icon-close"></i>
                   </div>
                   <span class="add" @click="selStaff">+娣诲姞</span>
                 </div>
diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
index 05fcc48..7eff5ec 100644
--- a/admin/src/components/business/operaVisitsWindow.vue
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -288,7 +288,6 @@
 .upload_wrap{
   display: flex;
   align-items: center;
-  justify-content: center;
   .avatar-uploader{
     display: flex;
     align-items: center;
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index cc86262..cab4be2 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -9,7 +9,7 @@
             <div class="linellae"></div>
           </div>
           <div class="item" @click="getHeaderNav('0')">瀹夐槻涓績</div>
-          <div class="item" @click="getHeaderNav('1')">娑堥槻涓績</div>
+          <div class="item" @click="getHeaderNav('1')">娑堟帶涓績</div>
           <div class="item" @click="getHeaderNav('2')">鑳界涓績</div>
           <div class="item" @click="getHeaderNav('3')">椹鹃┒鑸�</div>
         </div>
diff --git a/admin/src/components/common/UploadFaceImg.vue b/admin/src/components/common/UploadFaceImg.vue
index 4bc0b0d..926bb2d 100644
--- a/admin/src/components/common/UploadFaceImg.vue
+++ b/admin/src/components/common/UploadFaceImg.vue
@@ -24,8 +24,9 @@
       <ImageCropper ref="iconShot" v-if="updateImg" :imgSrc="img" >
       </ImageCropper>
       <span slot="footer" class="dialog-footer">
-            <el-button @click="updateImg = false">鍙� 娑�</el-button>
-            <el-button type="primary" @click="uploadIcon">纭� 瀹�</el-button>
+            <el-button v-if="loading">鍙� 娑�</el-button>
+            <el-button v-else @click="updateImg = false">鍙� 娑�</el-button>
+            <el-button :loading="loading" type="primary" @click="uploadIcon">纭� 瀹�</el-button>
           </span>
     </el-dialog>
   </div>
@@ -50,6 +51,7 @@
   },
   data () {
     return {
+      loading: false,
       fileInfo:{},
       img: null,
       updateImg: false,
@@ -75,7 +77,9 @@
                 { type: this.fileInfo.type } // 璁剧疆File绫诲瀷鐨勬枃浠剁被鍨�
             )
         )
+        this.loading = true
         upload(formData).then(res => {
+          this.loading = false
           console.log(res)
           this.file.imgurl = res.imgaddr
           this.file.imgurlfull = res.url
@@ -84,6 +88,8 @@
           this.updateImg = false
           this.$emit('uploadSuccess', { imgurl: res.imgaddr, imgurlfull: res.url, name: res.originname })
           this.$emit('uploadEnd')
+        }, () => {
+          this.loading = false
         })
       })
     },
diff --git a/admin/src/components/operation/OperCarUseBookParamWindow.vue b/admin/src/components/operation/OperCarUseBookParamWindow.vue
index 10d590b..c571bcb 100644
--- a/admin/src/components/operation/OperCarUseBookParamWindow.vue
+++ b/admin/src/components/operation/OperCarUseBookParamWindow.vue
@@ -533,7 +533,7 @@
     },
     initData () {
       getCarList({
-        type: 1
+        type: 0
       }).then(res => {
         this.carsList = res
       })
diff --git a/admin/src/components/system/role/PermissionConfigWindow.vue b/admin/src/components/system/role/PermissionConfigWindow.vue
index 17476a0..63f4835 100644
--- a/admin/src/components/system/role/PermissionConfigWindow.vue
+++ b/admin/src/components/system/role/PermissionConfigWindow.vue
@@ -12,6 +12,7 @@
       ref="permissionTransfer"
       v-model="selectedIds"
       filterable
+      class="transfer"
       :filter-method="filterPermissions"
       :titles="['鏈巿鏉冩潈闄�', '宸叉巿鏉冩潈闄�']"
       :props="{
@@ -121,4 +122,24 @@
     }
   }
 }
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::v-deep .el-transfer-panel__body {
+    height: 500px;
+  }
+
+  ::v-deep .el-transfer-panel__list.is-filterable {
+    height: 480px;
+  }
+}
 </style>
diff --git a/admin/src/components/system/user/RoleConfigWindow.vue b/admin/src/components/system/user/RoleConfigWindow.vue
index 35fb877..fa1461f 100644
--- a/admin/src/components/system/user/RoleConfigWindow.vue
+++ b/admin/src/components/system/user/RoleConfigWindow.vue
@@ -11,6 +11,7 @@
     <div class="df_center">
       <el-transfer
       v-model="selectedIds"
+      class="transfer"
       :titles="['鏈巿鏉冭鑹�', '宸叉巿鏉冭鑹�']"
       :props="{
         key: 'id',
@@ -126,4 +127,24 @@
     }
   }
 }
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::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/approvalConfiguration.vue b/admin/src/views/business/approvalConfiguration.vue
index f894e52..32fcdba 100644
--- a/admin/src/views/business/approvalConfiguration.vue
+++ b/admin/src/views/business/approvalConfiguration.vue
@@ -686,9 +686,18 @@
   }
   .transfer {
     height: 600px;
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    ::v-deep .el-transfer-panel{
+      flex: 1;
+      height: 100%;
+    }
     ::v-deep .el-transfer-panel__body {
       height: 500px;
     }
+
     ::v-deep .el-transfer-panel__list.is-filterable {
       height: 480px;
     }
diff --git a/admin/src/views/business/approvalReport.vue b/admin/src/views/business/approvalReport.vue
index cb2cfef..8760ccc 100644
--- a/admin/src/views/business/approvalReport.vue
+++ b/admin/src/views/business/approvalReport.vue
@@ -107,12 +107,12 @@
             <template v-if="apprList[activeIndex].type == '1'">
               <div class="config_data_item_reviewed_content">
                 <div
-                  v-for="mem in apprList[activeIndex].objIds"
+                  v-for="mem,memIndex in apprList[activeIndex].objIds"
                   :key="mem.id"
                   class="config_data_item_reviewed_content_item"
                 >
                   <span>{{ mem.name }}</span>
-                  <i class="el-icon-close"></i>
+                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                 </div>
                 <span class="add" @click="selStaff">+娣诲姞</span>
               </div>
@@ -672,9 +672,18 @@
   }
   .transfer {
     height: 600px;
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    ::v-deep .el-transfer-panel{
+      flex: 1;
+      height: 100%;
+    }
     ::v-deep .el-transfer-panel__body {
       height: 500px;
     }
+
     ::v-deep .el-transfer-panel__list.is-filterable {
       height: 480px;
     }
diff --git a/admin/src/views/operation/serviceCar/apprConfig.vue b/admin/src/views/operation/serviceCar/apprConfig.vue
index a26b625..bd527f8 100644
--- a/admin/src/views/operation/serviceCar/apprConfig.vue
+++ b/admin/src/views/operation/serviceCar/apprConfig.vue
@@ -154,7 +154,7 @@
                 <span>閮ㄩ棬涓荤</span>
               </div>
               <div class="config_data_item_reviewed_r">
-                <span>琚浜虹殑</span>
+                <span>鐢宠浜虹殑</span>
                 <el-select
                   v-model="apprList[activeIndex].objLevel"
                   placeholder="璇烽�夋嫨"
@@ -691,9 +691,18 @@
   }
   .transfer {
     height: 600px;
+    width: 100%;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    ::v-deep .el-transfer-panel{
+      flex: 1;
+      height: 100%;
+    }
     ::v-deep .el-transfer-panel__body {
       height: 500px;
     }
+
     ::v-deep .el-transfer-panel__list.is-filterable {
       height: 480px;
     }
diff --git a/admin/src/views/platform/components/PlatformQueuing.vue b/admin/src/views/platform/components/PlatformQueuing.vue
index a82175c..70c5764 100644
--- a/admin/src/views/platform/components/PlatformQueuing.vue
+++ b/admin/src/views/platform/components/PlatformQueuing.vue
@@ -259,6 +259,7 @@
       .footer {
         .detail {
           color: $primaryColor;
+          cursor: pointer;
         }
       }
     }
diff --git a/admin/src/views/platform/platformReason.vue b/admin/src/views/platform/platformReason.vue
index ff23a60..580b420 100644
--- a/admin/src/views/platform/platformReason.vue
+++ b/admin/src/views/platform/platformReason.vue
@@ -38,7 +38,8 @@
         <el-table-column prop="reason" label="鍏ュ洯鍘熷洜" fixed min-width="100px"></el-table-column>
         <el-table-column prop="groupName" label="瀵瑰簲浣滀笟鏈堝彴缁�" fixed min-width="150px"></el-table-column>
         <el-table-column prop="limitNum" label="浣滀笟閲�(涓囧彧/澶�)" min-width="120px"></el-table-column>
-        <el-table-column prop="reason" label="璇存槑" fixed min-width="100px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�" fixed min-width="80px"></el-table-column>
+        <el-table-column prop="remark" label="璇存槑" fixed min-width="100px"></el-table-column>
         <el-table-column label="绂�/鍚敤" min-width="120px" >
           <template slot-scope="{row}">
             <el-switch
diff --git a/admin/src/views/platform/queueUp.vue b/admin/src/views/platform/queueUp.vue
index 173ad1f..4fb7695 100644
--- a/admin/src/views/platform/queueUp.vue
+++ b/admin/src/views/platform/queueUp.vue
@@ -21,7 +21,7 @@
         <span></span>
       </div>
     </div>
-    <el-table v-if="activeGroup.type == 2" class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
+    <el-table class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
       <el-table-column type="index" label="搴忓彿" width="80" />
       <el-table-column label="杞︾墝鍙�" width="130">
         <template slot-scope="{ row }">
@@ -33,8 +33,21 @@
           </div>
         </template>
       </el-table-column>
-      <el-table-column prop="contractNum" label="鍚堝悓鍗曞彿" min-width="120" />
-      <el-table-column prop="totalNum" label="鎬昏繍杈撻噺(涓囨敮)" min-width="110" />
+      <el-table-column prop="carrierName" label="杩愯緭鍏徃" min-width="120">
+        <template v-slot="scope">
+          <span>{{ scope.row.carrierName || '-' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="contractNum" label="杩愯緭鍗曞彿/鍚堝悓鍙�" min-width="120">
+        <template v-slot="scope">
+          <span>{{ scope.row.billCode || scope.row.carrierName || '-' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="totalNum" label="鎬昏繍杈撻噺(涓囨敮)" min-width="110">
+        <template v-slot="scope">
+          <span>{{ scope.row.totalNum || '-' }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="椹鹃┒鍛�" min-width="130">
         <template slot-scope="{ row }">
           <span class="mr10">{{ row.driverName }}</span>
@@ -50,7 +63,7 @@
         </template>
       </el-table-column>
     </el-table>
-    <el-table v-else class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
+    <!-- <el-table v-else class="mb20" v-loading="loading" :data="dataList" stripe row-key="id" default-expand-all>
       <el-table-column type="index" label="搴忓彿" width="80" />
       <el-table-column label="杞︾墝鍙�" width="130">
         <template slot-scope="{ row }">
@@ -78,7 +91,7 @@
           <el-button v-else type="text" @click="subDetail(row)">棰勭害璇︽儏</el-button>
         </template>
       </el-table-column>
-    </el-table>
+    </el-table> -->
     <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="pagination" />
 
     <!--  -->
diff --git a/admin/src/views/platform/set/group.vue b/admin/src/views/platform/set/group.vue
index 27c9270..cd46a7d 100644
--- a/admin/src/views/platform/set/group.vue
+++ b/admin/src/views/platform/set/group.vue
@@ -72,6 +72,7 @@
             :titles="['寰呮坊鍔犳湀鍙�', '宸叉坊鍔犳湀鍙�']"
             v-model="param.sel"
             :data="data"
+            class="transfer"
 
           >
           </el-transfer>
@@ -144,5 +145,25 @@
 }
 </script>
 
-<style>
+<style lang="scss" scoped>
+.transfer {
+  height: 600px;
+  width: 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  ::v-deep .el-transfer-panel {
+    flex: 1;
+    height: 100%;
+  }
+
+  ::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/task/driverDetail.vue b/admin/src/views/task/driverDetail.vue
index 82ff153..54037d9 100644
--- a/admin/src/views/task/driverDetail.vue
+++ b/admin/src/views/task/driverDetail.vue
@@ -14,7 +14,7 @@
           <div class="right" :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ statusMap[info.status] }}</div>
         </div>
         <div class="info">
-          <div class="title">鍏姟杞︾敵璇蜂俊鎭�</div>
+          <div class="title">鐗╂祦杞﹂绾︿俊鎭�</div>
           <div class="list">
             <div class="item">
               <div class="label">鐢宠浜�</div>
diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue
index 686c2a4..b0051f5 100644
--- a/admin/src/views/task/index.vue
+++ b/admin/src/views/task/index.vue
@@ -250,7 +250,7 @@
     getList (page) {
       this.getHeadData()
       const { filters, pagination } = this
-      if (filters.selTime && filters.selTime.length > 0) {
+      if (filters.selTime && filters.selTime.length > 0 && filters.queryType != 0) {
         filters.startDate = filters.selTime[0]
         filters.endDate = filters.selTime[1]
       } else {
diff --git a/h5/pages/staff/task/visitorReport.vue b/h5/pages/staff/task/visitorReport.vue
index 1308a5f..15e713a 100644
--- a/h5/pages/staff/task/visitorReport.vue
+++ b/h5/pages/staff/task/visitorReport.vue
@@ -222,143 +222,166 @@
   padding-bottom: 0;
 
   .flow_wrap {
-    padding: 30rpx 0;
-
-    .flow_title {
-      font-weight: 600;
-      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;
-							font-size: 26rpx;
-							color: #777777;
-              .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;
-          }
-        }
-      }
-    }
+  	padding: 30rpx 0;
+  
+  	.flow_title {
+  		font-weight: 600;
+  		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;
+  				display: flex;
+  				align-items: center;
+  				justify-content: center;
+  
+  				.img {
+  					width: 80rpx;
+  					height: 80rpx;
+  					border-radius: 50%;
+  				}
+  
+  				.img_name {
+  					font-size: 32rpx;
+  					color: #FFFFFF;
+  				}
+  
+  				.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;
+  						font-size: 26rpx;
+  						color: #777777;
+  
+  						.child_img {
+  							width: 48rpx;
+  							height: 48rpx;
+  							border-radius: 50%;
+  							margin-bottom: 2rpx;
+  						}
+  
+  						.child_name {
+  							margin-bottom: 2rpx;
+  							width: 48rpx;
+  							height: 48rpx;
+  							text-align: center;
+  							justify-content: center;
+  							padding-top: 4rpx;
+  							font-size: 28rpx;
+  							border-radius: 50%;
+  							color: #FFFFFF;
+  							background-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;
+  					}
+  				}
+  			}
+  
+  			&:nth-last-child(1) {
+  				.separate {
+  					height: 0;
+  				}
+  			}
+  		}
+  	}
   }
 
   .module_list {
diff --git a/h5/utils/config.js b/h5/utils/config.js
index d600971..fc2d158 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,6 +1,6 @@
 
-// export const baseUrl = 'admin_interface/'
-export const baseUrl = 'http://192.168.0.173/gateway_interface/'
+export const baseUrl = 'admin_interface/'
+// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
 
 export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
 export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
diff --git a/screen/src/assets/images/SecurityControl/anfang_ic_data@2x.png b/screen/src/assets/images/SecurityControl/anfang_ic_data@2x.png
new file mode 100644
index 0000000..84cbc94
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/anfang_ic_data@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/bg@2x.png b/screen/src/assets/images/SecurityControl/bg@2x.png
new file mode 100644
index 0000000..58acee1
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/bg@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/ic_title_green@2x.png b/screen/src/assets/images/SecurityControl/ic_title_green@2x.png
new file mode 100644
index 0000000..a173111
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/ic_title_green@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/jiankong_ic_open@2x.png b/screen/src/assets/images/SecurityControl/jiankong_ic_open@2x.png
new file mode 100644
index 0000000..ee45f00
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/jiankong_ic_open@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/staff_ic_fangke@2x.png b/screen/src/assets/images/SecurityControl/staff_ic_fangke@2x.png
new file mode 100644
index 0000000..4984c50
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/staff_ic_fangke@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/staff_ic_neibu@2x.png b/screen/src/assets/images/SecurityControl/staff_ic_neibu@2x.png
new file mode 100644
index 0000000..ea2002e
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/staff_ic_neibu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png b/screen/src/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png
new file mode 100644
index 0000000..7741062
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png
Binary files differ
diff --git a/screen/src/assets/images/SecurityControl/title_short@2x.png b/screen/src/assets/images/SecurityControl/title_short@2x.png
new file mode 100644
index 0000000..88b887c
--- /dev/null
+++ b/screen/src/assets/images/SecurityControl/title_short@2x.png
Binary files differ
diff --git a/screen/src/router/index.js b/screen/src/router/index.js
index 69da7a3..c56a2b5 100644
--- a/screen/src/router/index.js
+++ b/screen/src/router/index.js
@@ -23,6 +23,11 @@
       name: 'LogisticsControl',
       component: () => import('../views/LogisticsEfficiency.vue')
     },
+    {
+      path: '/SecurityControl',
+      name: 'SecurityControl',
+      component: () => import('../views/SecurityControl.vue')
+    },
   ]
 })
 
diff --git a/screen/src/utils/scale_screen.js b/screen/src/utils/scale_screen.js
index 40a7ff9..6917201 100644
--- a/screen/src/utils/scale_screen.js
+++ b/screen/src/utils/scale_screen.js
@@ -1,7 +1,7 @@
 
 // rem绛夋瘮閫傞厤閰嶇疆鏂囦欢
 // 鍩哄噯澶у皬
-const baseSize = 16
+const baseSize = 14
 // 璁剧疆 rem 鍑芥暟
 function setRem() {
   // 褰撳墠椤甸潰瀹藉害鐩稿浜� 1920瀹界殑缂╂斁姣斾緥锛屽彲鏍规嵁鑷繁闇�瑕佷慨鏀广��
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index f042f7b..ea14ba6 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -1,9 +1,8 @@
 <template>
-  <v-scale-screen width="1920" height="960" :fullScreen="true">
+  <v-scale-screen width="1920" height="960">
     <div class="main_app">
       <img src="@/assets/images/energy_ef/bg@2x.png" class="main_bg" alt="" />
       <div class="main_header">
-        <!-- <img src="@/assets/images/maintitle.gif" class="main_header_bg" alt="" /> -->
         <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
         <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-璋冨害鑳芥晥璺熻釜</div>
         <div class="time_wrap">
@@ -222,7 +221,16 @@
                 </div>
                 <Percent :rate="80" />
               </div>
-              <div class="list"></div>
+              <div class="list">
+                <div class="item">
+                  <div class="la">榛勫北(鏂板埗鐨栫儫)</div>
+                  <div class="val">400涓囨敮</div>
+                </div>
+                <div class="item">
+                  <div class="la">榛勫北(鏂板埗鐨栫儫)</div>
+                  <div class="val">400涓囨敮</div>
+                </div>
+              </div>
             </div>
           </div>
         </div>
@@ -723,16 +731,20 @@
 
         .list {
           margin-left: 36px;
+
           .item {
             margin-bottom: 14px;
             font-size: 14px;
-            &:nth-last-child(1){
+
+            &:nth-last-child(1) {
               margin: 0;
             }
+
             .line {
               display: flex;
               align-items: center;
               margin-bottom: 6px;
+
               .icon {
                 width: 12px;
                 height: 12px;
@@ -741,15 +753,51 @@
                 background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
               }
             }
-            .num{
+
+            .num {
               margin-left: 20px;
             }
           }
         }
       }
     }
-    .right_box_three{
 
+    .right_box_three {
+      .repertory {
+        .header {
+          padding: 15px;
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          font-size: 14px;
+          color: #D2E0FF;
+          margin-bottom: 11px;
+          .num {
+            font-weight: 500;
+            font-size: 16px;
+            color: #FFFFFF;
+          }
+        }
+        .list{
+          margin-top: 22px;
+          .item{
+            width: 100%;
+            height: 36px;
+            display: flex;
+            align-items: center;
+            &:nth-of-type(2n+1){
+              background: rgba(0,152,255,0.13);
+            }
+            .la{
+              flex: 5;
+              padding-left: 20px;
+            }
+            .val{
+              flex: 2;
+            }
+          }
+        }
+      }
     }
   }
 }
@@ -867,7 +915,7 @@
   color: #FFFFFF;
   position: relative;
   z-index: -2;
-
+  font-size: 14px;
   .main_bg {
     position: absolute;
     left: 0;
diff --git a/screen/src/views/PlatformCall.vue b/screen/src/views/PlatformCall.vue
index 312e4c6..143dcc8 100644
--- a/screen/src/views/PlatformCall.vue
+++ b/screen/src/views/PlatformCall.vue
@@ -192,7 +192,7 @@
 
 </script>
 <template>
-  <v-scale-screen width="1920" height="1080" :fullScreen="true">
+  <v-scale-screen width="1920" height="1080">
     <div class="main_app">
       <div class="main_header">
         <img class="bg" src="@/assets/images/call/title@2x.png" alt="">
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
new file mode 100644
index 0000000..e2188dc
--- /dev/null
+++ b/screen/src/views/SecurityControl.vue
@@ -0,0 +1,845 @@
+<template>
+  <v-scale-screen width="1920" height="960">
+    <div class="main_app">
+      <img src="@/assets/images/SecurityControl/bg@2x.png" class="main_bg" alt="" />
+      <div class="main_header">
+        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <div class="title">瀹夋嘲鏅烘収鐗╂祦鍥尯-瀹夐槻鏅鸿兘鐩戞祴</div>
+        <div class="time_wrap">
+          <span class="date">{{ date }}</span>
+          <span class="week">{{ week }}</span>
+          <span class="time">{{ time }}</span>
+        </div>
+      </div>
+      <div class="main_content">
+        <div class="left_box">
+          <div class="left_box_one">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>瀹炴椂鍥尯杞﹁締</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" />
+                <div>瀹炴椂鍥尯杞﹁締</div>
+              </div>
+              <div class="num_wrap">
+                <div class="la">鎬昏溅浣嶏細</div>
+                <div class="val">100</div>
+              </div>
+            </div>
+            <div class="stall_static">
+              <div class="residue">
+                <div class="la">鍓╀綑杞︿綅</div>
+                <div class="val">50</div>
+              </div>
+              <div class="total">
+                <div class="la">杞︿綅鎬绘暟</div>
+                <div class="val">50</div>
+              </div>
+              <div class="rate">
+                <div class="la">
+                  <span>杞︿綅浣跨敤鐜�</span>
+                  <span class="num">50%</span>
+                </div>
+                <div class="val">
+                  <Percent :rate="50" />
+                </div>
+              </div>
+            </div>
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" />
+                <div>褰撳墠鍦ㄥ洯绉佸杞﹀垎甯�</div>
+              </div>
+            </div>
+            <div class="private_car">
+              <div class="item">
+                <img src="" class="icon" alt="">
+                <div class="num">20</div>
+                <div class="name">鍛樺伐杞﹁締</div>
+              </div>
+              <div class="item">
+                <img src="" class="icon" alt="">
+                <div class="num">20</div>
+                <div class="name">鐩稿叧鏂硅溅杈�</div>
+              </div>
+              <div class="item">
+                <img src="" class="icon" alt="">
+                <div class="num">20</div>
+                <div class="name">鏉ヨ杞﹁締</div>
+              </div>
+            </div>
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" />
+                <div>褰撳墠鍦ㄥ洯璐ц溅鍒嗗竷</div>
+              </div>
+            </div>
+            <div class="car_static">
+              <div class="echart_wrap">
+                <div class="pie_text">
+                  <div class="fs30"><strong>300</strong></div>
+                  <div>璐ц溅</div>
+                </div>
+                <div class="echart" id="echart1"></div>
+              </div>
+              <div class="list">
+                <div class="item">
+                  <div class="line">
+                    <div :style="{ background: colors[0] }" class="icon"></div>
+                    <div class="text">鍐呰繍杞﹁締</div>
+                  </div>
+                  <div :style="{ color: colors[0] }" class="num">100</div>
+                </div>
+                <div class="item">
+                  <div class="line">
+                    <div :style="{ background: colors[1] }" class="icon"></div>
+                    <div class="text">澶栧崗杩愯緭杞﹁締</div>
+                  </div>
+                  <div :style="{ color: colors[1] }" class="num">100</div>
+                </div>
+                <div class="item">
+                  <div class="line">
+                    <div :style="{ background: colors[2] }" class="icon"></div>
+                    <div class="text">甯傚叕鍙稿嵏璐ц溅杈�</div>
+                  </div>
+                  <div :style="{ color: colors[2] }" class="num">100</div>
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="list">
+              <div class="item">
+                <div class="name_wrap">
+                  <div class="name">褰撳墠鍦ㄥ洯浜烘暟</div>
+                  <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
+                </div>
+                <div class="num_wrap">
+                  <div class="num">200</div>
+                  <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
+                </div>
+              </div>
+              <div class="item">
+                <div class="name_wrap">
+                  <div class="name">褰撳墠鍦ㄥ洯杞﹁締鏁�</div>
+                  <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
+                </div>
+                <div class="num_wrap">
+                  <div class="num">200</div>
+                  <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
+                </div>
+              </div>
+              <div class="item">
+                <div class="name_wrap">
+                  <div class="name">褰撳墠璁惧鎬绘暟</div>
+                  <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
+                </div>
+                <div class="num_wrap">
+                  <div class="num">200</div>
+                  <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
+                </div>
+              </div>
+              <div class="item">
+                <div class="name_wrap">
+                  <div class="name">褰撳墠鍛婅鎬绘暟</div>
+                  <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
+                </div>
+                <div class="num_wrap">
+                  <div class="num">200</div>
+                  <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
+                </div>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="right_box">
+          <div class="right_box_one">
+            <div class="com_header">
+              <div class="title">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <div>鍦ㄥ洯浜哄憳鍒嗘瀽</div>
+              </div>
+              <img src="@/assets/images/title@2x.png" class="bg" alt="" />
+            </div>
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" />
+                <div>褰撳墠鍦ㄥ洯浜哄憳鍒嗗竷</div>
+              </div>
+            </div>
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鍐呴儴鍛樺伐</div>
+                  <div class="num"><span>1000</span> | 66.6%</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png" alt="">
+                <div class="content">
+                  <div class="name">闀挎湡鐩稿叧鏂�</div>
+                  <div class="num today"><span>1000</span> | 66.6%</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/SecurityControl/staff_ic_fangke@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鍦ㄥ洯璁垮</div>
+                  <div class="num finish"><span>1000</span> | 66.6%</div>
+                </div>
+              </div>
+            </div>
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/SecurityControl/ic_title_green@2x.png" class="icon" alt="" />
+                <div>浠婃棩璁垮鍒嗘瀽</div>
+              </div>
+            </div>
+            <div class="visitor_list">
+              <div class="item">
+                <div class="name">寰呰闂�</div>
+                <div class="num_wrap">
+                  <span class="num">22</span>
+                  <span>浜�</span>
+                </div>
+              </div>
+              <div class="spacing"></div>
+              <div class="item">
+                <div class="name">宸茬櫥鏈�</div>
+                <div class="num_wrap">
+                  <span class="num">22</span>
+                  <span>浜�</span>
+                </div>
+              </div>
+              <div class="spacing"></div>
+              <div class="item">
+                <div class="name">宸茬寮�</div>
+                <div class="num_wrap">
+                  <span class="num">22</span>
+                  <span>浜�</span>
+                </div>
+              </div>
+              <div class="spacing"></div>
+              <div class="item">
+                <div class="name">婊炵暀</div>
+                <div class="num_wrap">
+                  <span class="num">22</span>
+                  <span>浜�</span>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="right_box_two">
+
+          </div>
+          <div class="right_box_three">
+
+          </div>
+        </div>
+      </div>
+    </div>
+  </v-scale-screen>
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue'
+import VScaleScreen from 'v-scale-screen'
+import Percent from '@/components/percent.vue'
+import dayjs from 'dayjs'
+
+import * as echarts from 'echarts'
+const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
+const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
+const date = ref(dayjs().format('YYYY.MM.DD'))
+const week = ref(weekMap[new Date().getDay()])
+const time = ref(dayjs().format('HH:mm:ss'))
+setInterval(() => {
+  date.value = dayjs().format('YYYY-MM-DD')
+  week.value = weekMap[new Date().getDay()]
+  time.value = dayjs().format('HH:mm:ss')
+
+}, 1000)
+
+const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
+const initEnergy = () => {
+  var myChart = echarts.init(document.querySelector('.energyRef'))
+  // 缁樺埗鍥捐〃
+  const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
+  myChart.setOption({
+    grid: {
+      top: '20%',
+      left: '2%',
+      right: '2%',
+      bottom: '4%',
+      containLabel: true
+    },
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'line'
+      },
+    },
+    xAxis: {
+      type: 'category',
+      data: [1, 2, 3, 4, 4, 5]
+    },
+    yAxis: {
+      type: 'value',
+      name: 'kw路h',
+      nameTextStyle: {
+        padding: [0, 0, 4, -30]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          //杩欓噷杈撳叆绾挎潯鐨勬牱寮�
+          color: 'rgba(255,255,255,0.14)',
+        }
+      }
+    },
+    series: [
+      {
+        data: [1, 2, 3, 4, 5],
+        type: 'bar',
+        barWidth: 10,
+        itemStyle: {
+          normal: {
+            color: new echarts.graphic.LinearGradient(
+              0, 0, 0, 1,
+              [
+                { offset: 0, color: arr[1] },
+                { offset: 1, color: '#080807' }
+              ]
+            ),
+            barBorderRadius: [10, 10, 0, 0]
+          }
+        }
+      }
+    ]
+  })
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+const initEchart1 = () => {
+  const myChart = echarts.init(document.getElementById('echart1'))
+  const option = {
+    series: [
+      {
+        type: 'pie',
+        radius: ['86%', '100%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        padAngle: 5,
+        itemStyle: {
+          borderRadius: 10
+        },
+        color: colors,
+        labelLine: {
+          show: false
+        },
+        data: [
+          { value: 1048, name: 'Search Engine' },
+          { value: 735, name: 'Direct' },
+          { value: 580, name: 'Email' }
+        ]
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+
+onMounted(() => {
+  // initEnergy()
+  initEchart1()
+})
+
+
+</script>
+
+<style lang="scss" scoped>
+div {
+  box-sizing: border-box;
+}
+
+.main_content {
+  display: flex;
+  padding: 20px 25px 0;
+
+  .left_box {
+    width: 360px;
+
+    .left_box_one {
+      width: 100%;
+      position: relative;
+      margin-bottom: 20px;
+      font-size: 14px;
+      color: #D2E0FF;
+
+      .second_title {
+        margin-top: 24px;
+        margin-bottom: 20px;
+      }
+
+      .stall_static {
+        display: flex;
+        margin-bottom: 40px;
+        padding: 0 20px;
+
+        .residue {
+          flex: 5;
+
+          .val {
+            color: #01D9FE;
+          }
+        }
+
+        .total {
+          flex: 5;
+        }
+
+        .rate {
+          flex: 12;
+
+          .la {
+            display: flex;
+            justify-content: space-between;
+
+            .num {
+              font-weight: 500;
+              color: #FFFFFF;
+            }
+          }
+        }
+
+        .val {
+          font-weight: bold;
+          font-size: 18px;
+          color: #FFFFFF;
+          margin-top: 6px;
+          display: flex;
+          align-items: center;
+          height: 24px;
+        }
+      }
+
+      .private_car {
+        padding: 4px 32px;
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 36px;
+
+        .item {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+
+          .icon {
+            width: 52px;
+            height: 52px;
+            margin-bottom: 10px;
+          }
+
+          .num {
+            line-height: 28px;
+            height: 28px;
+            margin-bottom: 2px;
+            font-weight: bold;
+            font-size: 18px;
+            color: #01D9FE;
+          }
+
+        }
+      }
+
+      .car_static {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        padding: 16px 24px;
+
+        .echart_wrap {
+          position: relative;
+
+          .pie_text {
+            width: 82px;
+            height: 82px;
+            border: 1px dashed rgba(1, 217, 254, 0.7);
+            border-radius: 50%;
+            position: absolute;
+
+            left: 50%;
+            top: 50%;
+            transform: translate(-50%, -50%);
+            z-index: 999;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+            font-size: 12px;
+
+            .fs30 {
+              font-weight: bold;
+              font-size: 18px;
+              margin-bottom: 4px;
+            }
+          }
+        }
+
+        .echart {
+          width: 110px;
+          height: 110px;
+        }
+
+        .list {
+          margin-left: 36px;
+          flex: 1;
+          display: flex;
+          flex-direction: column;
+          justify-content: space-between;
+          height: 110px;
+
+          .item {
+            width: 100%;
+            font-size: 14px;
+            display: flex;
+            justify-content: space-between;
+
+            .line {
+              display: flex;
+              align-items: center;
+              margin-bottom: 6px;
+
+              .icon {
+                width: 12px;
+                height: 12px;
+                border-radius: 50%;
+                margin-right: 10px;
+                background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
+              }
+            }
+
+            .num {
+              margin-left: 20px;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  .center_box {
+    flex: 1;
+    margin: 0 20px;
+
+    .center_box_one {
+      padding: 8px 60px;
+
+      .list {
+        display: flex;
+        justify-content: space-between;
+
+        .item {
+          display: flex;
+          flex-direction: column;
+          align-items: center;
+
+          .name_wrap {
+            width: 120px;
+            height: 32px;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-weight: 500;
+            font-size: 13px;
+            margin-bottom: 10px;
+            position: relative;
+          }
+
+          .num_wrap {
+            width: 86px;
+            height: 75px;
+            position: relative;
+            font-size: 30px;
+
+            .num {
+              font-weight: 600;
+              text-align: center;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  .right_box {
+    width: 360px;
+
+    .right_box_one {
+      margin-bottom: 20px;
+
+      .second_title {
+        margin-top: 20px;
+      }
+
+      .static_wrap {
+        padding: 14px 0 0 46px;
+
+        .item {
+          display: flex;
+          align-items: center;
+          display: flex;
+          margin-bottom: 10px;
+
+          img {
+            width: 70px;
+            height: 70px;
+            margin-right: 20px;
+          }
+
+          .content {
+            color: #FFFFFF;
+
+            .num {
+              margin-top: 8px;
+              font-size: 16px;
+              color: #00F2F3;
+
+              span {
+                font-size: 20px;
+                margin-right: 4px;
+                font-weight: 600;
+              }
+            }
+
+            .today {
+              color: #09FACD;
+            }
+
+            .finish {
+              color: #FEAF01;
+            }
+          }
+        }
+      }
+
+      .visitor_list {
+        display: flex;
+        justify-content: space-between;
+        padding: 20px;
+        .item {
+          font-size: 12px;
+          color: #D2E0FF;
+
+          .num_wrap {
+            display: flex;
+            align-items: flex-end;
+            margin-top: 8px;
+            .num{
+              font-size: 22px;
+              line-height: 22px;
+              color: #FFFFFF;
+            }
+          }
+        }
+        .spacing{
+          width: 1px;
+          height: 40px;
+          background-color: #405173;
+          margin: 0 24px;
+        }
+      }
+    }
+
+    .right_box_two {}
+
+    .right_box_three {}
+  }
+}
+
+.main_header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 90px;
+  position: relative;
+  padding: 0px 40px 16px;
+  font-weight: 600;
+  font-size: 36px;
+
+  .title {
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 70%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+  }
+
+  .time_wrap {
+    font-size: 26px;
+    font-weight: 600;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 50%,
+        #85b4ff 80%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+    display: flex;
+    align-items: center;
+
+    .time {
+      width: 180px;
+      display: flex;
+      justify-content: flex-end;
+      padding-bottom: 10px;
+      font-size: 36px;
+    }
+
+    .week {
+      margin-left: 36px;
+    }
+  }
+
+  .main_header_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.com_header {
+  height: 40px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 15px 0 13px;
+  position: relative;
+
+  .title {
+    display: flex;
+    align-items: center;
+    font-weight: bold;
+    font-size: 16px;
+    background-image: -webkit-linear-gradient(top,
+        #ffffff 0%,
+        #c8ddff 66%,
+        #85b4ff 72%,
+        #74a9ff 100%);
+    -webkit-background-clip: text;
+    -webkit-text-fill-color: transparent;
+
+    .icon {
+      width: 16px;
+      height: 16px;
+      margin-right: 14px;
+    }
+  }
+
+  .tabs {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    color: #d2e0ff;
+
+    .separate {
+      width: 1px;
+      height: 14px;
+      background-color: #d2e0ff;
+      margin: 0 6px;
+    }
+
+    .active {
+      color: #0094eb;
+    }
+  }
+}
+
+.second_title {
+  height: 24px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 0 20px;
+  position: relative;
+
+  .title {
+    display: flex;
+    align-items: center;
+    font-weight: 500;
+    font-size: 16px;
+    color: #FFFFFF;
+
+    .icon {
+      width: 16px;
+      height: 16px;
+      margin-right: 10px;
+    }
+  }
+
+  .num_wrap {
+    font-weight: 400;
+    font-size: 14px;
+    color: #D2E0FF;
+    display: flex;
+    align-items: center;
+
+    .val {
+      font-weight: bold;
+      font-size: 16px;
+      color: #FFFFFF;
+    }
+  }
+}
+
+.main_app {
+  width: 1920px;
+  height: 960px;
+  /* width: 100%;
+  height: 100vh; */
+  background: #0b2539;
+  color: #FFFFFF;
+  position: relative;
+  z-index: -2;
+  font-size: 14px;
+
+  .main_bg {
+    position: absolute;
+    left: 0;
+    top: 0;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+    z-index: -1;
+  }
+}
+
+.bg {
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  object-fit: cover;
+  z-index: -1;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3