From 44dd2c7c73d5fead948902cad2695ae30d4620e2 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 24 十月 2024 09:50:29 +0800
Subject: [PATCH] 大屏

---
 screen/src/assets/images/LogisticsCenter/bg_number@2x.png        |    0 
 h5_meeting/utils/config.js                                       |    4 
 screen/src/assets/images/LogisticsCenter/position.png            |    0 
 screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png |    0 
 screen/src/assets/images/FireFighting/xiaofang_ar_left@2x.png    |    0 
 h5_meeting/pages/index/index.vue                                 |    3 
 screen/src/views/LogisticsCenter.vue                             | 1312 ++++++++++++++++++++
 screen/src/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png |    0 
 admin/src/components/common/CommonHeader.vue                     |    2 
 pda/pages/index/center.vue                                       |    2 
 admin/src/components/operation/HiddenDangerParam.vue             |   23 
 admin/src/views/meeting/components/OperaRoomsWindow.vue          |    4 
 h5/manifest.json                                                 |    7 
 screen/src/views/EnergyConsum.vue                                |    9 
 h5/pages/staff/meetingSubOrder.vue                               |  706 +++++-----
 h5/utils/config.js                                               |    2 
 screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png |    0 
 screen/src/assets/images/LogisticsCenter/ic_jinriweichu@2x.png   |    0 
 screen/src/views/LogisticsEfficiency.vue                         |    7 
 screen/src/assets/images/FireFighting/xiaofang_ic_lixian@2x.png  |    0 
 screen/src/router/index.js                                       |   22 
 admin/package.json                                               |    1 
 screen/src/assets/images/ic_jindu@2x.png                         |    0 
 screen/src/assets/images/LogisticsCenter/bottom.png              |    0 
 screen/src/assets/images/FireFighting/ic_tibao@2x.png            |    0 
 admin/src/views/platform/LogisticsRecord/subscribe.vue           |    4 
 admin/src/views/platform/index.vue                               |    2 
 screen/src/assets/images/FireFighting/bg_wendu@2x.png            |    0 
 screen/src/assets/images/FireFighting/ic_location@2x.png         |    0 
 screen/src/assets/images/FireFighting/ic_shidu@2x.png            |    0 
 screen/src/assets/images/FireFighting/ic_chuli@2x.png            |    0 
 admin/src/views/task/dangetDetail.vue                            |   35 
 h5/.gitignore                                                    |    1 
 screen/src/assets/images/FireFighting/ic_weixiu@2x.png           |    0 
 screen/src/views/SecurityControl.vue                             |    7 
 screen/src/assets/images/LogisticsCenter/ic_search@2x.png        |    0 
 screen/src/assets/images/FireFighting/bg@2x.png                  |    0 
 screen/src/assets/images/LogisticsCenter/ic_title@2x.png         |    0 
 screen/src/assets/images/FireFighting/ic_wendu@2x.png            |    0 
 screen/src/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png  |    0 
 screen/src/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png  |    0 
 h5_meeting/manifest.json                                         |   44 
 admin/src/components/common/UploadAvatarImage.vue                |   49 
 screen/src/assets/images/LogisticsCenter/bg@2x.png               |    0 
 screen/src/assets/images/LogisticsCenter/ic_jinrichuku@2x.png    |    0 
 screen/src/assets/images/FireFighting/ic_title_green@2x.png      |    0 
 screen/src/assets/images/LogisticsCenter/ic_jinrijihua@2x.png    |    0 
 h5/pages/driver/queueUp.vue                                      |    2 
 /dev/null                                                        |    0 
 h5/pages/driver/queueUpRecord.vue                                |    7 
 screen/src/assets/images/FireFighting/ic_gaojing_blue@2x.png     |    0 
 screen/src/assets/images/FireFighting/xiaofang_ar_right@2x.png   |    0 
 screen/src/assets/images/FireFighting/ic_gaojing_red@2x.png      |    0 
 screen/src/assets/images/FireFighting/468@2x.png                 |    0 
 admin/src/views/meeting/components/OperaBookingsWindow.vue       |  145 -
 screen/src/views/FireFighting.vue                                | 1500 +++++++++++++++++++++++
 56 files changed, 3,391 insertions(+), 509 deletions(-)

diff --git a/admin/package.json b/admin/package.json
index 0d777f2..78ce443 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -4,6 +4,7 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
+    "dev": "vue-cli-service serve",
     "pro": "vue-cli-service serve --mode production",
     "test": "vue-cli-service serve --mode test",
     "build": "vue-cli-service build --mode production",
diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue
index 05c8f4c..19c4196 100644
--- a/admin/src/components/common/CommonHeader.vue
+++ b/admin/src/components/common/CommonHeader.vue
@@ -112,7 +112,7 @@
   mounted() {
     // console.log('userInfo',this.userInfo);
     if (!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0') {
-      this.visible.changePwd = true
+      // this.visible.changePwd = true
     }
 
   },
diff --git a/admin/src/components/common/UploadAvatarImage.vue b/admin/src/components/common/UploadAvatarImage.vue
index 72f91b9..dfd5d22 100644
--- a/admin/src/components/common/UploadAvatarImage.vue
+++ b/admin/src/components/common/UploadAvatarImage.vue
@@ -1,16 +1,9 @@
 <template>
   <div>
-    <el-upload
-      class="avatar-uploader"
-      accept=".png,.jpg,.jpeg"
-      :style="customStyle"
-      :action="uploadImgUrl"
-      :data="uploadData"
-      :show-file-list="false"
-      :on-success="handleAvatarSuccess"
-      :on-error="uploadError"
+    <el-upload class="avatar-uploader" accept=".png,.jpg,.jpeg" :style="customStyle" :action="uploadImgUrl"
+      :data="uploadData" :show-file-list="false" :on-success="handleAvatarSuccess" :on-error="uploadError"
       :before-upload="beforeAvatarUpload">
-      <img v-if=" file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
+      <img v-if="file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
       <div v-else :style="customStyle">
         <i class="el-icon-plus avatar-uploader-icon"></i>
         <div class="tips-style">{{ tipsLabel }}</div>
@@ -21,11 +14,12 @@
 </template>
 
 <script>
+import { Loading } from 'element-ui'
 export default {
   props: {
     file: {
       type: Object,
-      default: () => {}
+      default: () => { }
     },
     tipsLabel: '',
     customStyle: {
@@ -36,6 +30,7 @@
   },
   data() {
     return {
+      loading: null,
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload'
     }
   },
@@ -43,10 +38,13 @@
   methods: {
     // 涓婁紶鍥剧墖
     handleAvatarSuccess(res, file) {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        this.loading.close()
+      })
       if (res.code == 200) {
         let { data } = res
-        this.file.imgurl = data.imgaddr;
-        this.file.imgurlfull = data.url;
+        this.file.imgurl = data.imgaddr
+        this.file.imgurlfull = data.url
         this.$message.success('涓婁紶鎴愬姛')
         this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
       } else {
@@ -56,10 +54,19 @@
     },
     uploadError() {
       this.$message.error('涓婁紶澶辫触')
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        this.loading.close()
+      })
       this.$emit('uploadEnd')
     },
     // // 鎷︽埅
     beforeAvatarUpload(file) {
+      this.loading = Loading.service({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
       this.$emit('uploadBegin')
       return true
     }
@@ -69,10 +76,12 @@
 
 <style lang="scss" scoped>
 $image-width: 90px;
+
 .avatar-uploader {
   width: $image-width;
   height: $image-width;
 }
+
 ::v-deep .el-upload {
   border: 1px dashed #d9d9d9;
   border-radius: 6px;
@@ -80,9 +89,11 @@
   position: relative;
   overflow: hidden;
 }
+
 .avatar-uploader .el-upload:hover {
   border-color: #409EFF;
 }
+
 .avatar-uploader-icon {
   line-height: 90px;
   font-size: 28px;
@@ -91,11 +102,13 @@
   height: $image-width;
   text-align: center;
 }
+
 .avatar {
   width: 90px;
   max-height: 90px;
   display: block;
 }
+
 .tips-style {
   height: 13px;
   font-size: 13px;
@@ -105,22 +118,24 @@
 }
 </style>
 <style lang="scss" scoped>
-::v-deep .el-upload--picture-card{
+::v-deep .el-upload--picture-card {
   width: 90px !important;
   height: 90px !important;
 }
+
 ::v-deep .el-upload-list__item {
   width: 90px !important;
   height: 90px !important;
 }
+
 .icon {
-  -webkit-transform: translate(-50%,-50%);
-  -ms-transform: translate(-50%,-50%);
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
   transform: translate(0%, -85%);
 }
+
 ::v-deep .el-upload-list__item {
   width: 90px !important;
   height: 90px !important;
 }
 </style>
-
diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index 0205647..18cc589 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -61,6 +61,7 @@
             :action="uploadImgUrl"
             :show-file-list="false"
             :on-success="uploadAvatarSuccess"
+            :on-error="uploadError"
             :before-upload="beforeUpload"
           >
             <div class="upload_wrap">
@@ -104,6 +105,7 @@
 import dayjs from 'dayjs'
 import { allList, memberList } from '@/api/business/hiddenDangerParam'
 import { create } from '@/api/business/hiddenDanger'
+import { Loading } from 'element-ui'
 export default {
   extends: BaseOpera,
   components: {
@@ -112,6 +114,7 @@
   data () {
     return {
       isShowModal: false,
+      loadingInstance: false,
       param: {},
       userInfo: this.$store.state.userInfo,
       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
@@ -169,12 +172,30 @@
       this.memberList = arr
     },
     beforeUpload (file) {
-      if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/png', 'image/gif'].indexOf(file.type) == -1) {
+      if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg','image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) {
         this.$message.error('璇蜂笂浼犳纭殑瑙嗛/鍥剧墖鏍煎紡')
         return false
       }
+      this.loadingInstance = Loading.service({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+    },
+    uploadError() {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        if(this.loadingInstance){
+          this.loadingInstance.close()
+        }
+      })
     },
     uploadAvatarSuccess (file) {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        if(this.loadingInstance){
+          this.loadingInstance.close()
+        }
+      })
       console.log('file', file)
       const item = file.data[0]
       if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) {
diff --git a/admin/src/views/meeting/components/OperaBookingsWindow.vue b/admin/src/views/meeting/components/OperaBookingsWindow.vue
index 3f5b2c7..39adf61 100644
--- a/admin/src/views/meeting/components/OperaBookingsWindow.vue
+++ b/admin/src/views/meeting/components/OperaBookingsWindow.vue
@@ -1,88 +1,51 @@
 <template>
-  <GlobalAlertWindow
-    :title="title"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-    width="840px"
-  >
+  <GlobalAlertWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"
+    width="840px">
     <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�">
       <el-form-item label="鍏宠仈浼氳瀹�" prop="roomId">
-        <el-select
-          v-model="form.roomId"
-          filterable
-          clearable
-          :disabled="isEdit"
-          placeholder="璇烽�夋嫨鍏宠仈浼氳瀹�"
-          @change="selectRoom"
-        >
+        <el-select v-model="form.roomId" filterable clearable :disabled="isEdit" placeholder="璇烽�夋嫨鍏宠仈浼氳瀹�"
+          @change="selectRoom">
           <el-option v-for="item in rooms()" :key="item.id" :value="item.id" :label="item.name" />
         </el-select>
       </el-form-item>
       <el-form-item label="棰勫畾鏃ユ湡" prop="date">
-        <el-date-picker
-          :disabled="isEdit"
-          v-model="form.date"
-          value-format="yyyy-MM-dd"
-          placeholder="璇烽�夋嫨棰勫畾鏃ユ湡"
-          @change="selectDate"
-        ></el-date-picker>
+        <el-date-picker :disabled="isEdit" v-model="form.date" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨棰勫畾鏃ユ湡"
+          @change="selectDate"></el-date-picker>
       </el-form-item>
       <el-form-item label="棰勫畾鏃堕棿" prop="times">
         <div class="time-style">
-          <div
-            class="time-item"
-            v-for="(item, index) in timelist"
-            :key="item.id"
-            :class="{
-              'time-item-sel': form.times.indexOf(index)!=-1,
-              'time-item-disable': item.isUse,
-              'disable': item.bookingTimeId
-            }"
-            @click="selectTimes(index, item)"
-          >{{ `${item.startTime}-${item.endTime}` }}</div>
+          <div class="time-item" v-for="(item, index) in timelist" :key="item.id" :class="{
+            'time-item-sel': form.times.indexOf(index) != -1,
+            'time-item-disable': item.isUse,
+            'disable': item.bookingTimeId
+          }" @click="selectTimes(index, item)">{{ `${item.startTime}-${item.endTime}` }}</div>
         </div>
       </el-form-item>
       <el-form-item label="浼氳涓婚" prop="name">
-        <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁富棰�" :maxlength="30" v-trim/>
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ヤ細璁富棰�" :maxlength="30" v-trim />
       </el-form-item>
 
-      <el-form-item label="鍙備細浜哄憳">
-        <!-- <el-input style="width:40%" disabled v-model="sysList" placeholder="閫夋嫨鍙備細浜哄憳" v-trim/> -->
-        <el-select
-          v-model="form.sysList"
-          filterable
-          clearable
-          multiple
-          placeholder="閫夋嫨閮ㄩ棬鎴愬憳"
-        >
-          <el-option
-            v-for="item in sysList"
-            :key="item.id"
-            :value="item.id"
-            :label="item.department?`${item.department.name}-${item.realname}`:item.realname"
-          ></el-option>
-          <!-- <el-option :key="1" :value="1" label="绂佺敤" /> -->
-        </el-select>
-      </el-form-item>
+      <div class="df_ac">
+        <el-form-item label="鍙備細浜哄憳">
+          <el-select v-model="form.sysList" filterable clearable multiple placeholder="閫夋嫨閮ㄩ棬鎴愬憳">
+            <el-option v-for="item in sysList" :key="item.id" :value="item.id"
+              :label="item.department ? `${item.department.name}-${item.realname}` : item.realname"></el-option>
+            <!-- <el-option :key="1" :value="1" label="绂佺敤" /> -->
+          </el-select>
+        </el-form-item>
+        <el-form-item class="ml10" label-width="140px" label="鏄惁閫氱煡鍙備細浜哄憳">
+          <el-radio v-model="form.joinNotice" :label="1">涓嶉�氱煡</el-radio>
+          <el-radio v-model="form.joinNotice" :label="0">閫氱煡</el-radio>
+        </el-form-item>
+      </div>
       <el-form-item label="浼氳鍐呭" prop="content">
-        <el-input
-          type="textarea"
-          v-model="form.content"
-          :maxlength="300"
-          show-word-limit
-          :autosize="{ minRows: 4, maxRows: 12}"
-          placeholder="璇疯緭鍏ヤ細璁唴瀹�"
-          v-trim
-        />
+        <el-input type="textarea" v-model="form.content" :maxlength="300" show-word-limit
+          :autosize="{ minRows: 4, maxRows: 12 }" placeholder="璇疯緭鍏ヤ細璁唴瀹�" v-trim />
       </el-form-item>
       <el-form-item v-if="projectList.length" label="閫夋嫨鏈嶅姟椤圭洰" prop="projectList">
         <el-checkbox-group v-model="form.projectList">
-          <el-checkbox
-            v-for="project in projectList"
-            :label="project.id"
-            :key="project.id"
-          >{{project.name}}</el-checkbox>
+          <el-checkbox v-for="project in projectList" :label="project.id"
+            :key="project.id">{{ project.name }}</el-checkbox>
         </el-checkbox-group>
       </el-form-item>
       <el-form-item label="浼氳闄勪欢" prop="fileList">
@@ -90,24 +53,16 @@
           <el-button type="primary" icon="el-icon-upload" @click="$refs.upFile.click()">浼氳闄勪欢</el-button>
         </div>
         <div class="data-list">
-          <FileLink
-            :links="form.fileList"
-            linkName="fileFullUrl"
-          />
+          <FileLink :links="form.fileList" linkName="fileFullUrl" />
         </div>
       </el-form-item>
       <el-form-item label="浼氳澶囨敞" prop="remark">
-        <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ヤ細璁娉�" v-trim/>
+        <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ヤ細璁娉�" v-trim />
       </el-form-item>
       <input type="file" @change="upFiles" ref="upFile" style="display: none;" />
     </el-form>
 
-    <el-dialog
-      title="浼氳瀹ら绾︽儏鍐�"
-      :visible.sync="isShowDetail"
-      append-to-body
-      width="600px"
-    >
+    <el-dialog title="浼氳瀹ら绾︽儏鍐�" :visible.sync="isShowDetail" append-to-body width="600px">
       <div class="detail_modal">
         <div class="h1">{{ activeInfo.meetingName }}</div>
         <div class="line">
@@ -144,7 +99,7 @@
   name: 'OperaBookingsWindow',
   extends: BaseOpera,
   components: { GlobalAlertWindow, FileLink },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -158,6 +113,7 @@
         startTime: '',
         endTime: '',
         times: [],
+        joinNotice: 1,
         content: '',
         sysList: [],
         fileList: []
@@ -193,7 +149,7 @@
     }
   },
   inject: ['rooms'],
-  created () {
+  created() {
     this.config({
       api: '/meeting/bookings',
       'field.id': 'id'
@@ -214,7 +170,7 @@
      * @title 绐楀彛鏍囬
      * @target 缂栬緫鐨勫璞�
      */
-    open (title, target) {
+    open(title, target) {
       this.title = title
       this.visible = true
       this.timelist = []
@@ -242,7 +198,7 @@
         this.selectRoom(this.form.roomId)
       })
     },
-    selectRoom (objId) {
+    selectRoom(objId) {
       this.getTimes()
       findListByObjId({
         objId: objId,
@@ -252,11 +208,11 @@
           this.projectList = res
         })
     },
-    selectDate (v) {
+    selectDate(v) {
       // console.log(v);
       this.getTimes()
     },
-    getTimes (isInit = false) {
+    getTimes(isInit = false) {
       this.form.times = []
       this.timelist = []
 
@@ -293,7 +249,7 @@
           })
       }
     },
-    getDetail (id) {
+    getDetail(id) {
       BookDetailById({
         id
       }).then(res => {
@@ -301,7 +257,7 @@
         this.isShowDetail = true
       })
     },
-    selectTimes (index, item) {
+    selectTimes(index, item) {
       if (item.bookingTimeId) {
         this.getDetail(item.bookingTimeId)
         return
@@ -331,7 +287,7 @@
       }
       // console.log(this.form.times);
     },
-    upFiles (file) {
+    upFiles(file) {
       const formdate = new FormData()
       this.isUploading = true
       formdate.append('file', file.target.files[0])
@@ -352,7 +308,7 @@
       this.$refs.upFile.value = null
     },
     // 纭鏂板缓
-    __confirmCreate () {
+    __confirmCreate() {
       this.$refs.form.validate((valid) => {
         // debugger
         if (!valid) {
@@ -401,7 +357,7 @@
       })
     },
     // 纭淇敼
-    __confirmEdit () {
+    __confirmEdit() {
       this.$refs.form.validate((valid) => {
         if (!valid) {
           return
@@ -463,6 +419,7 @@
   display: flex;
   flex-wrap: wrap;
   cursor: pointer;
+
   .time-item {
     margin-right: 8px;
     margin-bottom: 8px;
@@ -479,46 +436,54 @@
     border: #cccccc solid 1px;
     cursor: pointer;
   }
+
   .time-item-sel {
     border-color: $primary-color;
     background-color: #f6f9fe;
     color: $primary-color;
   }
+
   .time-item-disable {
     color: #fff;
     border-color: #cccccc;
     background-color: #cccccc;
   }
-  .disable{
+
+  .disable {
     border-color: #bed6f9;
     background-color: #bed6f9;
     color: #fff;
   }
 }
+
 .detail_modal {
   padding: 20px 16px;
+
   .title {
     text-align: center;
     font-weight: 600;
     font-size: 16px;
     margin-bottom: 20px;
   }
+
   .h1 {
     font-weight: 600;
     font-size: 16px;
     margin-bottom: 15px;
   }
+
   .line {
     display: flex;
     margin-bottom: 10px;
+
     .label {
       width: 70px;
       color: #888888;
     }
+
     .value {
       color: #333333;
     }
   }
 }
-
 </style>
diff --git a/admin/src/views/meeting/components/OperaRoomsWindow.vue b/admin/src/views/meeting/components/OperaRoomsWindow.vue
index 46e53f5..798bb36 100644
--- a/admin/src/views/meeting/components/OperaRoomsWindow.vue
+++ b/admin/src/views/meeting/components/OperaRoomsWindow.vue
@@ -202,11 +202,13 @@
     },
     uploadAvatarSuccess(file) {
       console.log('file', file)
-      this.form.multifileList.push({
+      let temp = []
+      temp.push({
         fileurl: file.imgurl,
         fileurlFull: file.imgurlfull,
         type: 1
       })
+      this.form.multifileList = temp
       this.$set(this.form, 'videourl', file.imgurl)
       this.$set(this.form, 'videoFullUrl', file.imgurlfull)
     },
diff --git a/admin/src/views/platform/LogisticsRecord/subscribe.vue b/admin/src/views/platform/LogisticsRecord/subscribe.vue
index 4c2a070..3673592 100644
--- a/admin/src/views/platform/LogisticsRecord/subscribe.vue
+++ b/admin/src/views/platform/LogisticsRecord/subscribe.vue
@@ -278,9 +278,13 @@
         const param = this.param
         param.inReason = this.reasonList.find(item => param.reasonId == item.id).reason
         if (valid) {
+          this.subLoading = true
           platformBooksApply({ ...param }).then(res => {
             this.getList()
+            this.subLoading = false
             this.isShowEdit = false
+          }, () => {
+            this.subLoading = false
           })
         }
       })
diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue
index 7b3ed4a..6c7401a 100644
--- a/admin/src/views/platform/index.vue
+++ b/admin/src/views/platform/index.vue
@@ -313,7 +313,7 @@
               if (item.newStartDate) {
                 const timeNum = time.getTime() - new Date(item.newStartDate).getTime()
                 if (timeNum > 3600000) {
-                  item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖s绉�')
+                  item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖绉�')
                 } else {
                   item.startDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
                 }
diff --git a/admin/src/views/task/dangetDetail.vue b/admin/src/views/task/dangetDetail.vue
index 35c7845..2651ddb 100644
--- a/admin/src/views/task/dangetDetail.vue
+++ b/admin/src/views/task/dangetDetail.vue
@@ -258,6 +258,7 @@
               class="avatar-uploader"
               :action="uploadUrl"
               :show-file-list="false"
+              :on-error="uploadError"
               :on-success="handleAvatarSuccess"
               :before-upload="beforeAvatarUpload"
             >
@@ -291,6 +292,7 @@
               :action="uploadUrl"
               :show-file-list="false"
               :on-success="handleAfterSuccess"
+              :on-error="uploadError"
               :before-upload="beforeAvatarUpload"
             >
               <img v-if="param.url" :src="param.url" class="avatar" />
@@ -360,6 +362,7 @@
               :action="uploadUrl"
               :show-file-list="false"
               :on-success="handleBackSuccess"
+              :on-error="uploadError"
               :before-upload="beforeAvatarUpload"
             >
               <div class="upload_box">
@@ -406,6 +409,7 @@
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { memberList } from '@/api/business/hiddenDangerParam'
+import { Loading } from 'element-ui'
 import {
   uploadFile,
   hiddenDangerDetail,
@@ -420,7 +424,7 @@
       id: '',
       type: '',
       uploadUrl: uploadFile,
-
+      loadingInstance: false,
       title: '璁垮棰勭害璇︽儏',
       isShowModal: false,
       info: {},
@@ -560,6 +564,11 @@
     },
     reject () { },
     handleAvatarSuccess (res) {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        if(this.loadingInstance){
+          this.loadingInstance.close()
+        }
+      })
       if (res.code === 200) {
         const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
         const arr = this.handleParam.dealBeforeFileList || []
@@ -572,6 +581,11 @@
       }
     },
     handleAfterSuccess (res) {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        if(this.loadingInstance){
+          this.loadingInstance.close()
+        }
+      })
       if (res.code === 200) {
         const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
         const arr = this.handleParam.dealAfterFileList || []
@@ -584,6 +598,11 @@
       }
     },
     handleBackSuccess (res) {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        if(this.loadingInstance){
+          this.loadingInstance.close()
+        }
+      })
       if (res.code === 200) {
         const str = res.data.url.indexOf('png') > 0 || res.data.url.indexOf('jpg') > 0
         const arr = this.backForm.dealBeforeFileList || []
@@ -595,7 +614,19 @@
         this.$set(this.backForm, 'dealBeforeFileList', arr)
       }
     },
-    beforeAvatarUpload () { }
+    beforeAvatarUpload () {
+      this.loadingInstance = Loading.service({
+        lock: true,
+        text: 'Loading',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      })
+    },
+    uploadError() {
+      this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂�
+        this.loadingInstance.close()
+      })
+    },
   }
 }
 </script>
diff --git a/h5/.gitignore b/h5/.gitignore
index 951e49c..ee6dfa3 100644
--- a/h5/.gitignore
+++ b/h5/.gitignore
@@ -6,6 +6,7 @@
 uview-ui
 
 /dist
+/unpackage
 
 
 # local env files
diff --git a/h5/manifest.json b/h5/manifest.json
index aa547f7..cd8f8b1 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -125,14 +125,15 @@
             "historyApiFallback" : true,
             "disableHostCheck" : true,
             "proxy" : {
-                "/admin_interface" : {
+                "/gateway_interface" : {
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
                     // "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     // "target" : "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    // "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
-                        "^/admin_interface" : ""
+                        "^/gateway_interface" : ""
                     }
                 }
             },
diff --git a/h5/pages/driver/queueUp.vue b/h5/pages/driver/queueUp.vue
index b0cb1a9..d6bbd89 100644
--- a/h5/pages/driver/queueUp.vue
+++ b/h5/pages/driver/queueUp.vue
@@ -14,6 +14,7 @@
           <text v-if="activePlatform.signJobList">{{
             activePlatform.workJobList.length
           }}</text>
+					<text v-else>0</text>
           <text class="unit">杈�</text>
         </view>
         <image
@@ -28,6 +29,7 @@
           <text v-if="activePlatform.workJobList">{{
             activePlatform.signJobList.length
           }}</text>
+					<text v-else>0</text>
           <text class="unit">杈�</text>
         </view>
         <image
diff --git a/h5/pages/driver/queueUpRecord.vue b/h5/pages/driver/queueUpRecord.vue
index de92b96..c8f63d1 100644
--- a/h5/pages/driver/queueUpRecord.vue
+++ b/h5/pages/driver/queueUpRecord.vue
@@ -6,11 +6,11 @@
 		</view>
 		<!--  -->
 		<view class="main_list">
-			<view class="item" :class="{ active: item.driverId == driverInfo.memberId }" v-for="item in dataList" :key="item.id">
+			<view class="item" :class="{ active: item.drivierPhone == driverInfo.mobile }" v-for="item in dataList" :key="item.id">
 				<view class="status padding" v-if="item.status == 2">鎺掗槦涓�</view>
 				<view class="status" v-else :class="{ padding: item.status != 5 }">{{ statusMap[item.status] }}</view>
-				<view v-if="item.driverId == driverInfo.memberId" class="me">鎴�</view>
-				<image v-if="item.driverId == driverInfo.memberId" class="avatar" src="@/static/driver/ic_truck_mine@2x.png" mode=""></image>
+				<view v-if="item.drivierPhone == driverInfo.mobile" class="me">鎴�</view>
+				<image v-if="item.drivierPhone == driverInfo.mobile" class="avatar" src="@/static/driver/ic_truck_mine@2x.png" mode=""></image>
 				<image v-else class="avatar" src="@/static/driver/ic_truck@2x.png" mode=""></image>
 				<view class="content">
 					<view class="id_card" v-if="item.carCodeFront">{{ item.carCodeFront.slice(0, 4) }}**{{ item.carCodeFront.slice(6) }}</view>
@@ -23,6 +23,7 @@
 					</view>
 				</view>
 			</view>
+			
 		</view>
 	</view>
 </template>
diff --git a/h5/pages/staff/meetingSubOrder.vue b/h5/pages/staff/meetingSubOrder.vue
index a99b6a1..f8807b0 100644
--- a/h5/pages/staff/meetingSubOrder.vue
+++ b/h5/pages/staff/meetingSubOrder.vue
@@ -1,345 +1,361 @@
-<template>
-  <view class="main_app">
-    <view class="module_list">
-      <view class="item">
-        <view class="name">浼氳鏃堕棿</view>
-        <view class="line" @click="handleBack">
-          <view class="label">
-            {{ 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>
-      </view>
-      <view class="item">
-        <view class="name">浼氳瀹�</view>
-        <view class="line">
-          <view class="label">{{ param.roomName }}(鍙绾硔{ param.limitNum }}浜�)</view>
-        </view>
-      </view>
-      <view class="item">
-        <view class="name">棰勭害浜�</view>
-        <view class="line">
-          <view class="label">{{ userInfo.realname }}</view>
-        </view>
-      </view>
-      <view class="empty"></view>
-      <view class="item">
-        <view class="name">
-          <text>浼氳涓婚</text>
-          <text class="star">*</text>
-        </view>
-        <view class="line">
-          <input
-            type="text"
-            v-model="param.name"
-            placeholder="璇疯緭鍏ヤ細璁富棰�"
-            placeholder-class="placeholder9"
-            class="label"
-          />
-        </view>
-      </view>
-      <view class="item">
-        <view class="name">
-          <text>浼氳鍐呭</text>
-        </view>
-        <view class="line">
-          <u-textarea
-            border="none"
-            v-model="param.content"
-            count
-            :maxlength="300"
-            placeholder="璇疯緭鍏ヤ細璁唴瀹�"
-            placeholder-class="placeholder9"
-            class="label"
-          />
-        </view>
-      </view>
-      <view class="empty"></view>
-      <view class="item">
-        <view class="name">
-          鍙備細浜哄憳
-           <text class="star"></text>
-        </view>
-        <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>
-            <text
-              v-else
-              class="placeholder9"
-              >璇烽�夋嫨</text
-            >
-          </view>
-          <u-icon
-            name="arrow-right"
-            color="#999999"
-            size="14"
-          />
-        </view>
-      </view>
-      <view class="item" v-if="info.projectList && info.projectList.length > 0">
-        <view class="name">閫夋嫨鏈嶅姟椤�</view>
-        <view class="line">
-          <view class="label">
-            <view
-              class="service_item"
-              :class="{ active: item.checked }"
-              v-for="(item, index) in info.projectList"
-              :key="index"
-              @click="serviceClick(item)"
-            >
-              {{ item.projectName }}
-            </view>
-          </view>
-        </view>
-      </view>
-      <view class="item">
-        <view class="name">
-          <text>澶囨敞</text>
-        </view>
-        <view class="line">
-          <textarea
-            v-model="param.remark"
-            :maxlength="-1"
-            placeholder="璇疯緭鍏�"
-            placeholder-class="placeholder9"
-            class="label"
-          />
-        </view>
-      </view>
-
-      <view v-if="param.id" class="sub_btn" @click="onUpdate">纭淇敼</view>
-      <view v-else class="sub_btn" @click="onSubmit"> 纭棰勭害 </view>
-    </view>
-  </view>
-</template>
-
-<script>
-import {
-  reservationMeeting,
-  getRoomDetail,
-  meetingDetail,
-  updateById,
-  getAppRoomDetail
-} from '@/api'
-import dayjs from 'dayjs'
-export default {
-  data() {
-    return {
-      param: {},
-      userInfo: uni.getStorageSync('userInfo'),
-      info: {},
-    }
-  },
-  onLoad(option) {
-    if (option.id) {
-      uni.setNavigationBarTitle({
-        title: '浼氳璇︽儏'
-      })
-      this.getDetail(option.id)
-    }
-  },
-  mounted() {
-    this.$eventBus.$on('meetingPeo', (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(','))
-    })
-    this.$eventBus.$on('meetingSub', (res) => {
-      this.param = { ...res }
-      this.$set(this.param, 'activeDate', dayjs(res.yudingDate).format('YYYY骞碝鏈圖鏃�'))
-      const bookingTimeList = res.bookingTimeList.split(',').map(i => {
-        return {
-          timeId: Number(i)
-        }
-      })
-      this.$set(this.param, 'bookingTimeList', bookingTimeList)
-      this.initOption()
-    })
-  },
-  methods: {
-    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,
-        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'
-          })
-        }
-      })
-    },
-    handleBack() {
-      if(this.param.id) return
-      uni.navigateBack( )
-    },
-    onSubmit() {
-      const { param, info } = this
-      if (!param.name) return uni.showToast({
-        title: '璇疯緭鍏ヤ細璁富棰�',
-        icon: 'none'
-      })
-      // if (!param.sysList || param.sysList.length == 0) return uni.showToast({
-      //   title: '璇烽�夋嫨鍙備細浜哄憳',
-      //   icon: 'none'
-      // })
-      reservationMeeting({
-        ...param,
-        startTime: `${param.yudingDate} ${param.startTime}:00`,
-        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 = new Date(param.yudingDate + ' ' + param.startTime).getTime()
-      let endTime = new Date(param.yudingDate + ' ' + param.endTime).getTime()
-      if(this.param.sysList && this.param.sysList.length > 0){
-        setTimeout(() => {
-          this.$eventBus.$emit('meetingPeoDetail', this.param.sysList || [])
-        }, 500)
-      }
-      uni.navigateTo({
-        url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}&limitNum=${this.param.limitNum}`
-      })
-    },
-    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)
-      getRoomDetail({ roomId }).then(res => {
-        this.info = res.data
-        if (this.info && this.info.projectList) {
-          this.info.projectList.forEach(i => {
-            i.checked = false
-
-          })
-        }
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss">
-.module_list {
-  .item {
-    border-bottom: 1rpx solid #e5e5e5;
-    padding: 30rpx 0;
-    .name {
-      color: #666666;
-      margin-bottom: 30rpx;
-    }
-    .line {
-      display: flex;
-      .label {
-        flex: 1;
-        display: flex;
-        flex-wrap: wrap;
-        align-items: center;
-        .service_item {
-          height: 64rpx;
-          line-height: 64rpx;
-          background: #f7f7f7;
-          border-radius: 4rpx;
-          padding: 0 24rpx;
-          margin-right: 20rpx;
-          margin-bottom: 12rpx;
-        }
-        .active {
-          background-color: #4d99a8;
-          color: #fff;
-        }
-      }
-    }
-  }
-  padding-bottom: 100rpx;
-}
-.empty {
-  width: 750rpx;
-  height: 20rpx;
-  background-color: #f7f7f7;
-  margin: 0 -30rpx;
-}
-.sub_btn {
-  width: 690rpx;
-  height: 72rpx;
-  line-height: 72rpx;
-  text-align: center;
-  background: $uni-color-primary;
-  box-shadow: 0rpx -1rpx 0rpx 0rpx #eeeeee;
-  border-radius: 36rpx;
-  font-size: 30rpx;
-  color: #ffffff;
-  margin-top: 20rpx;
-}
-.star {
-  margin-left: 4rpx;
-  color: #e42d2d;
-}
-</style>
+<template>
+	<view class="main_app">
+		<view class="module_list">
+			<view class="item">
+				<view class="name">浼氳鏃堕棿</view>
+				<view class="line" @click="handleBack">
+					<view class="label">
+						{{ 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>
+			</view>
+			<view class="item">
+				<view class="name">浼氳瀹�</view>
+				<view class="line">
+					<view class="label">{{ param.roomName }}(鍙绾硔{ param.limitNum }}浜�)</view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">棰勭害浜�</view>
+				<view class="line">
+					<view class="label">{{ userInfo.realname }}</view>
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="item">
+				<view class="name">
+					<text>浼氳涓婚</text>
+					<text class="star">*</text>
+				</view>
+				<view class="line">
+					<input type="text" v-model="param.name" placeholder="璇疯緭鍏ヤ細璁富棰�" placeholder-class="placeholder9"
+						class="label" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					<text>浼氳鍐呭</text>
+				</view>
+				<view class="line">
+					<u-textarea border="none" v-model="param.content" count :maxlength="300" placeholder="璇疯緭鍏ヤ細璁唴瀹�"
+						placeholder-class="placeholder9" class="label" />
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="item">
+				<view class="name">
+					鍙備細浜哄憳
+					<text class="star"></text>
+				</view>
+				<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>
+						<text v-else class="placeholder9">璇烽�夋嫨</text>
+					</view>
+					<u-icon name="arrow-right" color="#999999" size="14" />
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">鏄惁閫氱煡鍙備細浜哄憳</view>
+				<view class="line">
+					<view class="label">
+						<u-switch v-model="param.joinNotice" activeColor="#4d99a8" :activeValue="0" :inactiveValue="1"></u-switch>
+						<!-- <u-radio-group v-model="param.joinNotice">
+							<u-radio label="涓嶉�氱煡" :name="1" activeColor="#4d99a8" class="mr24" />
+							<u-radio label="閫氱煡" :name="0" activeColor="#4d99a8" />
+						</u-radio-group> -->
+					</view>
+				</view>
+			</view>
+			<view class="item" v-if="info.projectList && info.projectList.length > 0">
+				<view class="name">閫夋嫨鏈嶅姟椤�</view>
+				<view class="line">
+					<view class="label">
+						<view class="service_item" :class="{ active: item.checked }" v-for="(item, index) in info.projectList"
+							:key="index" @click="serviceClick(item)">
+							{{ item.projectName }}
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="item">
+				<view class="name">
+					<text>澶囨敞</text>
+				</view>
+				<view class="line">
+					<textarea v-model="param.remark" :maxlength="-1" placeholder="璇疯緭鍏�" placeholder-class="placeholder9"
+						class="label" />
+				</view>
+			</view>
+
+			<view v-if="param.id" class="sub_btn" @click="onUpdate">纭淇敼</view>
+			<view v-else class="sub_btn" @click="onSubmit"> 纭棰勭害 </view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		reservationMeeting,
+		getRoomDetail,
+		meetingDetail,
+		updateById,
+		getAppRoomDetail
+	} from '@/api'
+	import dayjs from 'dayjs'
+	export default {
+		data() {
+			return {
+				param: {
+					joinNotice: 1
+				},
+				userInfo: uni.getStorageSync('userInfo'),
+				info: {},
+			}
+		},
+		onLoad(option) {
+			if (option.id) {
+				uni.setNavigationBarTitle({
+					title: '浼氳璇︽儏'
+				})
+				this.getDetail(option.id)
+			}
+		},
+		mounted() {
+			this.$eventBus.$on('meetingPeo', (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(','))
+			})
+			this.$eventBus.$on('meetingSub', (res) => {
+				this.param = {
+					...res
+				}
+				this.$set(this.param, 'activeDate', dayjs(res.yudingDate).format('YYYY骞碝鏈圖鏃�'))
+				const bookingTimeList = res.bookingTimeList.split(',').map(i => {
+					return {
+						timeId: Number(i)
+					}
+				})
+				this.$set(this.param, 'bookingTimeList', bookingTimeList)
+				this.initOption()
+			})
+		},
+		methods: {
+			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,
+					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'
+						})
+					}
+				})
+			},
+			handleBack() {
+				if (this.param.id) return
+				uni.navigateBack()
+			},
+			onSubmit() {
+				const {
+					param,
+					info
+				} = this
+				if (!param.name) return uni.showToast({
+					title: '璇疯緭鍏ヤ細璁富棰�',
+					icon: 'none'
+				})
+				// if (!param.sysList || param.sysList.length == 0) return uni.showToast({
+				//   title: '璇烽�夋嫨鍙備細浜哄憳',
+				//   icon: 'none'
+				// })
+				reservationMeeting({
+					...param,
+					startTime: `${param.yudingDate} ${param.startTime}:00`,
+					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 = new Date(param.yudingDate + ' ' + param.startTime).getTime()
+				let endTime = new Date(param.yudingDate + ' ' + param.endTime).getTime()
+				if (this.param.sysList && this.param.sysList.length > 0) {
+					setTimeout(() => {
+						this.$eventBus.$emit('meetingPeoDetail', this.param.sysList || [])
+					}, 500)
+				}
+				uni.navigateTo({
+					url: `/pages/staff/meetingSel?startTime=${startTime}&endTime=${endTime}&limitNum=${this.param.limitNum}`
+				})
+			},
+			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)
+				getRoomDetail({
+					roomId
+				}).then(res => {
+					this.info = res.data
+					if (this.info && this.info.projectList) {
+						this.info.projectList.forEach(i => {
+							i.checked = false
+
+						})
+					}
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.module_list {
+		.item {
+			border-bottom: 1rpx solid #e5e5e5;
+			padding: 30rpx 0;
+
+			.name {
+				color: #666666;
+				margin-bottom: 30rpx;
+			}
+
+			.line {
+				display: flex;
+
+				.label {
+					flex: 1;
+					display: flex;
+					flex-wrap: wrap;
+					align-items: center;
+
+					.service_item {
+						height: 64rpx;
+						line-height: 64rpx;
+						background: #f7f7f7;
+						border-radius: 4rpx;
+						padding: 0 24rpx;
+						margin-right: 20rpx;
+						margin-bottom: 12rpx;
+					}
+
+					.active {
+						background-color: #4d99a8;
+						color: #fff;
+					}
+				}
+			}
+		}
+
+		padding-bottom: 100rpx;
+	}
+
+	.empty {
+		width: 750rpx;
+		height: 20rpx;
+		background-color: #f7f7f7;
+		margin: 0 -30rpx;
+	}
+
+	.sub_btn {
+		width: 690rpx;
+		height: 72rpx;
+		line-height: 72rpx;
+		text-align: center;
+		background: $uni-color-primary;
+		box-shadow: 0rpx -1rpx 0rpx 0rpx #eeeeee;
+		border-radius: 36rpx;
+		font-size: 30rpx;
+		color: #ffffff;
+		margin-top: 20rpx;
+	}
+
+	.star {
+		margin-left: 4rpx;
+		color: #e42d2d;
+	}
+</style>
\ No newline at end of file
diff --git a/h5/utils/config.js b/h5/utils/config.js
index fc2d158..e4c0895 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,5 +1,5 @@
 
-export const baseUrl = 'admin_interface/'
+export const baseUrl = 'gateway_interface/'
 // export const baseUrl = 'http://192.168.0.173/gateway_interface/'
 
 export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
diff --git a/h5_meeting/manifest.json b/h5_meeting/manifest.json
index 376b116..8c272f0 100644
--- a/h5_meeting/manifest.json
+++ b/h5_meeting/manifest.json
@@ -85,26 +85,28 @@
             }
         }
     },
-    "h5": {
-    	"router": {
-    		"mode": "hash",
-    		"base": "./"
-    	},
-    	"devServer": {
-    		"port": 8091,
-    		"historyApiFallback": true,
-    		"disableHostCheck": true,
-    		"proxy": {
-    			"/gateway_interface": {
-    				"target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-    				"changeOrigin": true, // 鍏佽璺ㄥ煙 
-    				"pathRewrite": {
-    					"^/gateway_interface": "" 
-    				}
-    			}
-    		},
-    		"https": false
-    	}
+    "h5" : {
+        "router" : {
+            "mode" : "hash",
+            "base" : "./"
+        },
+        "devServer" : {
+            "port" : 8091,
+            "historyApiFallback" : true,
+            "disableHostCheck" : true,
+            "proxy" : {
+                "/gateway_interface" : {
+                    // "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    // "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "changeOrigin" : true, // 鍏佽璺ㄥ煙 
+                    "pathRewrite" : {
+                        "^/gateway_interface" : ""
+                    }
+                }
+            },
+            "https" : false
+        }
     },
     /* 蹇簲鐢ㄧ壒鏈夌浉鍏� */
     "quickapp" : {},
@@ -128,5 +130,5 @@
     "uniStatistics" : {
         "enable" : false
     },
-    "vueVersion" : "3"
+    "vueVersion" : "2"
 }
diff --git a/h5_meeting/pages/index/index.vue b/h5_meeting/pages/index/index.vue
index fded8ae..26e91b2 100644
--- a/h5_meeting/pages/index/index.vue
+++ b/h5_meeting/pages/index/index.vue
@@ -131,7 +131,8 @@
 						})
 					} else {
 						this.showQrbg = false
-						this.meetingInfo = {}
+						this.meetingInfo = {}
+						this.$forceUpdate()
 					}
 				})
 			},
diff --git a/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk b/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk
deleted file mode 100644
index eff3492..0000000
--- a/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk
+++ /dev/null
Binary files differ
diff --git "a/h5_meeting/unpackage/release/apk/\344\274\232\350\256\256\345\256\244.apk" "b/h5_meeting/unpackage/release/apk/\344\274\232\350\256\256\345\256\244.apk"
deleted file mode 100644
index eff3492..0000000
--- "a/h5_meeting/unpackage/release/apk/\344\274\232\350\256\256\345\256\244.apk"
+++ /dev/null
Binary files differ
diff --git a/h5_meeting/utils/config.js b/h5_meeting/utils/config.js
index dda51c1..1d8ad8b 100644
--- a/h5_meeting/utils/config.js
+++ b/h5_meeting/utils/config.js
@@ -1,7 +1,7 @@
 
-// export const baseUrl = 'gateway_interface/'
+// export const baseUrl = 'gateway_interface/'/
 export const baseUrl = 'http://192.168.5.13/gateway_interface/'
-// export const baseUrl = 'http://10.50.250.253:8088/gateway_interface/'
+// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
 
 export const statusMap = {
 	0: '寰呯‘璁�',
diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index cba71b9..a852ade 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -302,7 +302,7 @@
 						if (item.newStartDate) {
 							let timeNum = time.getTime() - new Date(item.newStartDate).getTime()
 							if (timeNum > 3600000) {
-								item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖s绉�')
+								item.startDateTemp = dayjs.duration(timeNum).format('H灏忔椂m鍒唖绉�')
 							} else {
 								item.startDateTemp = dayjs.duration(timeNum).format('m鍒唖绉�')
 							}
diff --git a/screen/src/assets/images/FireFighting/468@2x.png b/screen/src/assets/images/FireFighting/468@2x.png
new file mode 100644
index 0000000..53d5eb6
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/468@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/bg@2x.png b/screen/src/assets/images/FireFighting/bg@2x.png
new file mode 100644
index 0000000..fdbbddf
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/bg@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/bg_wendu@2x.png b/screen/src/assets/images/FireFighting/bg_wendu@2x.png
new file mode 100644
index 0000000..9932766
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/bg_wendu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_chuli@2x.png b/screen/src/assets/images/FireFighting/ic_chuli@2x.png
new file mode 100644
index 0000000..a4b4ffd
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_chuli@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_gaojing_blue@2x.png b/screen/src/assets/images/FireFighting/ic_gaojing_blue@2x.png
new file mode 100644
index 0000000..646cf85
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_gaojing_blue@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_gaojing_red@2x.png b/screen/src/assets/images/FireFighting/ic_gaojing_red@2x.png
new file mode 100644
index 0000000..7237b9d
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_gaojing_red@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_location@2x.png b/screen/src/assets/images/FireFighting/ic_location@2x.png
new file mode 100644
index 0000000..8fb0996
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_location@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_shidu@2x.png b/screen/src/assets/images/FireFighting/ic_shidu@2x.png
new file mode 100644
index 0000000..d358a33
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_shidu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_tibao@2x.png b/screen/src/assets/images/FireFighting/ic_tibao@2x.png
new file mode 100644
index 0000000..25bd1be
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_tibao@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_title_green@2x.png b/screen/src/assets/images/FireFighting/ic_title_green@2x.png
new file mode 100644
index 0000000..a173111
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_title_green@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_weixiu@2x.png b/screen/src/assets/images/FireFighting/ic_weixiu@2x.png
new file mode 100644
index 0000000..873e249
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_weixiu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/ic_wendu@2x.png b/screen/src/assets/images/FireFighting/ic_wendu@2x.png
new file mode 100644
index 0000000..9a9bfae
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/ic_wendu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ar_left@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ar_left@2x.png
new file mode 100644
index 0000000..a3b8d32
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ar_left@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ar_right@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ar_right@2x.png
new file mode 100644
index 0000000..260e9dd
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ar_right@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png
new file mode 100644
index 0000000..ec7f77f
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_baojing@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png
new file mode 100644
index 0000000..befea8e
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_lixian@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_lixian@2x.png
new file mode 100644
index 0000000..bb71625
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_lixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png
new file mode 100644
index 0000000..bb89c83
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png
new file mode 100644
index 0000000..2a0dfb4
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png
Binary files differ
diff --git a/screen/src/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png b/screen/src/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png
new file mode 100644
index 0000000..06261c9
--- /dev/null
+++ b/screen/src/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/bg@2x.png b/screen/src/assets/images/LogisticsCenter/bg@2x.png
new file mode 100644
index 0000000..70f4243
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/bg@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/bg_number@2x.png b/screen/src/assets/images/LogisticsCenter/bg_number@2x.png
new file mode 100644
index 0000000..b6d2078
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/bg_number@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/bottom.png b/screen/src/assets/images/LogisticsCenter/bottom.png
new file mode 100644
index 0000000..d9777b5
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/bottom.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/ic_jinrichuku@2x.png b/screen/src/assets/images/LogisticsCenter/ic_jinrichuku@2x.png
new file mode 100644
index 0000000..40937cf
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/ic_jinrichuku@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/ic_jinrijihua@2x.png b/screen/src/assets/images/LogisticsCenter/ic_jinrijihua@2x.png
new file mode 100644
index 0000000..4f73ceb
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/ic_jinrijihua@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/ic_jinriweichu@2x.png b/screen/src/assets/images/LogisticsCenter/ic_jinriweichu@2x.png
new file mode 100644
index 0000000..8d1288b
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/ic_jinriweichu@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/ic_search@2x.png b/screen/src/assets/images/LogisticsCenter/ic_search@2x.png
new file mode 100644
index 0000000..2fbea92
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/ic_search@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/ic_title@2x.png b/screen/src/assets/images/LogisticsCenter/ic_title@2x.png
new file mode 100644
index 0000000..fff0940
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/ic_title@2x.png
Binary files differ
diff --git a/screen/src/assets/images/LogisticsCenter/position.png b/screen/src/assets/images/LogisticsCenter/position.png
new file mode 100644
index 0000000..78379de
--- /dev/null
+++ b/screen/src/assets/images/LogisticsCenter/position.png
Binary files differ
diff --git a/screen/src/assets/images/ic_jindu@2x.png b/screen/src/assets/images/ic_jindu@2x.png
new file mode 100644
index 0000000..61fabcb
--- /dev/null
+++ b/screen/src/assets/images/ic_jindu@2x.png
Binary files differ
diff --git a/screen/src/router/index.js b/screen/src/router/index.js
index 8f104fe..367a3d5 100644
--- a/screen/src/router/index.js
+++ b/screen/src/router/index.js
@@ -6,28 +6,38 @@
   routes: [
     {
       path: '/',
-      component: () => import('../views/SecurityControl.vue')
+      component: () => import('../views/FireFighting.vue')
     },
     {
-      path: '/PlatformCall',
+      path: '/PlatformCall', // 鏈堝彴鍙彿澶у睆
       name: 'PlatformCall',
       component: () => import('../views/PlatformCall.vue')
     },
     {
-      path: '/EnergyConsum',
+      path: '/EnergyConsum', // 鑳借�楃湅鏉� - 缁胯壊浣庣⒊杩愯惀
       name: 'EnergyConsum',
       component: () => import('../views/EnergyConsum.vue')
     },
     {
-      path: '/LogisticsControl',
-      name: 'LogisticsControl',
+      path: '/LogisticsEfficiency', // 鐗╂祦杩愯璋冨害鐪嬫澘- 璋冨害鑳芥晥
+      name: 'LogisticsEfficiency',
       component: () => import('../views/LogisticsEfficiency.vue')
     },
     {
-      path: '/SecurityControl',
+      path: '/SecurityControl',  // 瀹夐槻绠℃帶澶у睆 -
       name: 'SecurityControl',
       component: () => import('../views/SecurityControl.vue')
     },
+    {
+      path: '/LogisticsCenter', //搴撳埗绠$悊鐪嬫澘-鐗╂祦涓績
+      name: 'LogisticsCenter',
+      component: () => import('../views/LogisticsCenter.vue')
+    },
+    {
+      path: '/FireFighting', //娑堥槻鐩戞帶
+      name: 'FireFighting',
+      component: () => import('../views/FireFighting.vue')
+    },
   ]
 })
 
diff --git a/screen/src/views/EnergyConsum.vue b/screen/src/views/EnergyConsum.vue
index d408457..c745f28 100644
--- a/screen/src/views/EnergyConsum.vue
+++ b/screen/src/views/EnergyConsum.vue
@@ -963,7 +963,7 @@
   display: flex;
   justify-content: space-between;
   align-items: center;
-  height: 92px;
+  height: 90px;
   position: relative;
   padding: 0px 40px 16px;
   font-weight: 600;
@@ -993,15 +993,14 @@
     align-items: center;
 
     .time {
-      width: 180px;
+      width: 130px;
       display: flex;
       justify-content: flex-end;
-      padding-bottom: 10px;
-      font-size: 36px;
+      font-size: 30px;
     }
 
     .week {
-      margin-left: 36px;
+      margin-left: 20px;
     }
   }
 
diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue
new file mode 100644
index 0000000..3f6231d
--- /dev/null
+++ b/screen/src/views/FireFighting.vue
@@ -0,0 +1,1500 @@
+<template>
+  <v-scale-screen width="1920" height="960">
+    <div class="main_app">
+      <img src="@/assets/images/FireFighting/bg@2x.png" class="main_bg" alt="" />
+      <div class="main_header">
+        <img src="@/assets/images/maintitle@2x.png" class="main_header_bg" alt="" />
+        <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="list_wrap">
+              <div class="list">
+                <div class="header line">
+                  <span class="item name">璁惧绫诲瀷</span>
+                  <span class="item">鎬绘暟</span>
+                  <span class="item">鎶ヨ</span>
+                  <span class="item">灞忚斀</span>
+                  <span class="item">鏁呴殰</span>
+                  <span class="item">绂荤嚎</span>
+                </div>
+                <template v-for="i in 5">
+                  <div class="line">
+                    <span class="item name">鐏伓鎶ヨ绯荤粺</span>
+                    <span class="item">11</span>
+                    <span class="item">11</span>
+                    <span class="item">11</span>
+                    <span class="item">11</span>
+                    <span class="item">11</span>
+                  </div>
+                  <div class="separate"></div>
+                </template>
+              </div>
+            </div>
+          </div>
+          <div class="left_box_two">
+            <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="police_wrap">
+              <div class="echart1" id="echart1"></div>
+            </div>
+          </div>
+          <div class="left_box_three">
+            <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="dispose_wrap">
+              <div class="echart2" id="echart2"></div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鍦ㄧ嚎</div>
+                  <div class="num">1000</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鎶ヨ</div>
+                  <div class="num">12</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鏁呴殰</div>
+                  <div class="num">12</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/FireFighting/xiaofang_ic_lixian@2x.png" alt="">
+                <div class="content">
+                  <div class="name">绂荤嚎</div>
+                  <div class="num">12</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt="">
+                <div class="content">
+                  <div class="name">灞忚斀</div>
+                  <div class="num">12</div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="center_box_two">
+            <div class="content_wrap">
+              <div class="header">
+                <div class="left">
+                  <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt="">
+                  <span>娓╁害/婀垮害浼犳劅鍣�</span>
+                </div>
+                <div class="right">
+                  <img class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" alt="">
+                  <div class="num">1/5</div>
+                  <img class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" alt="">
+                </div>
+              </div>
+              <div class="list_wrap">
+                <div class="title">
+                  <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt="">
+                  <span>鍗歌揣鍖�1</span>
+                </div>
+                <div class="list">
+                  <div class="item">
+                    <img class="icon" src="@/assets/images/FireFighting/ic_wendu@2x.png" alt="">
+                    <div class="content">
+                      <div class="num">23<span>掳C</span></div>
+                      <div class="la">闃堝�� 0锝�100掳C</div>
+                    </div>
+                  </div>
+                  <div class="item">
+                    <img class="icon" src="@/assets/images/FireFighting/ic_shidu@2x.png" alt="">
+                    <div class="content">
+                      <div class="num">23<span>%</span></div>
+                      <div class="la">闃堝�� 0锝�100%</div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+            <div class="content_wrap">
+              <div class="header">
+                <div class="left">
+                  <img class="icon" src="@/assets/images/FireFighting/468@2x.png" alt="">
+                  <span>瀹炴椂浼犳劅鍣ㄦ娴�</span>
+                </div>
+                <div class="right">
+                  <img class="icon" src="@/assets/images/FireFighting/xiaofang_ar_left@2x.png" alt="">
+                  <div class="num">1/5</div>
+                  <img class="icon" src="@/assets/images/FireFighting/xiaofang_ar_right@2x.png" alt="">
+                </div>
+              </div>
+              <div class="list_wrap">
+                <div class="title_wrap">
+                  <div class="title">
+                    <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt="">
+                    <span>1璺�/姘村帇</span>
+                  </div>
+                  <div class="title">
+                    <img class="icon" src="@/assets/images/FireFighting/ic_location@2x.png" alt="">
+                    <span>2璺�/娑蹭綅</span>
+                  </div>
+                </div>
+                <div class="list">
+                  <div class="watergage_wrap">
+                    <div class="watergage" id="watergage"></div>
+                    <div class="unit">2.50 <span>Mpa</span></div>
+                    <div class="place">闃堝�� 0锝�2.5Mpa</div>
+                  </div>
+                  <div class="item">
+                    <div class="liquidlevel_wrap">
+                      <div class="liquidlevel" id="liquidlevel"></div>
+                      <div class="unit">3.45 <span>M</span></div>
+                      <div class="place">闃堝�� 0锝�4.50M</div>
+                    </div>
+
+                  </div>
+                </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="content_wrap">
+              <div class="list">
+                <template v-for="i in 3">
+                  <div class="item">
+                    <div>宸茬淮淇�</div>
+                    <div class="num active">500</div>
+                  </div>
+                  <div v-if="i < 3" class="separate"></div>
+                </template>
+
+              </div>
+              <div class="footer">
+                <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt="">
+                <div class="content">
+                  <div>鏈湀鏂板缁翠繚</div>
+                  <div class="num">40 <span>涓�</span></div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="right_box_two">
+            <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="su_title">
+              <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt="">
+              <div class="name">闅愭偅闅忔墜鎷�</div>
+            </div>
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt="">
+                <div class="content">
+                  <div class="name">鎻愭姤闅愭偅鏁�</div>
+                  <div class="num"><span>10</span>涓�</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt="">
+                <div class="content">
+                  <div class="name">澶勭悊闅愭偅鏁�</div>
+                  <div class="num"><span class="today">3</span>涓�</div>
+                </div>
+              </div>
+            </div>
+            <div class="su_title">
+              <img class="icon" src="@/assets/images/FireFighting/ic_title_green@2x.png" alt="">
+              <div class="name">鍛婅淇℃伅</div>
+            </div>
+            <div class="list">
+              <div class="item" v-for="i in 5">
+                <div class="icon">
+                  <div class="circle"></div>
+                  <div class="line"></div>
+                </div>
+                <div class="content">
+                  <div class="header">
+                    <div class="time">
+                      <span>123</span>
+                      <span class="status">澶勭悊涓�</span>
+                    </div>
+                    <div class="have_time">宸茬粡鍙戠敓<span>1</span>鍒嗛挓</div>
+                  </div>
+                  <div class="wrap">
+                    <div class="title">
+                      <img class="xf" src="@/assets/images/FireFighting/ic_gaojing_red@2x.png" alt="">
+                      <span>娑堥槻璀﹀憡</span>
+                    </div>
+                    <div class="title">
+                      <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt="">
+                      <span>address</span>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </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()
+  })
+}
+const initWatergage = () => {
+  const myChart = echarts.init(document.getElementById('watergage'))
+  var data_value = 2
+  const option = {
+    barMaxWidth: 3,
+    polar: {
+      radius: '80%'
+    },
+    grid: {
+      top: '0%',
+      left: '0%',
+      right: '%',
+      bottom: '0%',
+      containLabel: true
+    },
+    angleAxis: {
+      show: false,
+      max: (360 * 100) / 270,
+      type: 'value',
+      startAngle: 225,
+    },
+    radiusAxis: {
+      show: false,
+      type: 'category',
+      z: 10
+    },
+    series: [
+      {
+        type: 'gauge',
+        min: 0,
+        max: 2.50,
+        splitNumber: 5,
+        radius: '100%',
+        center: ['50%', '50%'],
+        data: [data_value],
+        detail: {
+          formatter: (v) => v + '%',
+          color: '#152435',
+          fontSize: 1,
+
+        },
+        itemStyle: {
+          color: '#3DE6FF'
+        },
+        pointer: {
+          width: 2,
+          length: '90%',
+          offsetCenter: [0, '3%'],
+        },
+        axisLine: {
+          show: true,
+          lineStyle: {
+            width: 0,
+            color: [
+              [0.05, '#1b6dff'],
+              [0.10, '#2084ff'],
+              [0.15, '#2596ff'],
+              [0.20, '#2db0ff'],
+              [0.25, '#31c0ff'],
+              [0.30, '#36d3ff'],
+              [0.35, '#4fe6ec'],
+              [0.40, '#6ae7d2'],
+              [0.45, '#84e8b9'],
+              [0.50, '#a5e999'],
+              [0.55, '#ccea75'],
+              [0.60, '#f8eb4a'],
+              [0.65, '#ffdd4f'],
+              [0.70, '#ffcb5a'],
+              [0.75, '#ffae6e'],
+              [0.80, '#ff9c7b'],
+              [0.85, '#ff8d87'],
+              [0.90, '#ff7d91'],
+              [0.95, '#ff6f9b'],
+              [1, '#ff5ca9']
+            ]
+
+          }
+        },
+        axisTick: {
+          show: true,
+          length: 3,
+          splitNumber: 12,
+          lineStyle: {
+            width: 1,
+            color: 'auto',
+          },
+        },
+        axisLabel: {
+          distance: 12,
+          fontSize: 8,
+          color: 'auto',
+        },
+        splitLine: {
+          show: true,
+          length: -5,
+          lineStyle: {
+            width: 1,
+            color: 'auto',
+          }
+        },
+        z: 9,
+      },
+      {
+        type: 'bar',
+        barGap: '-100%',
+        coordinateSystem: 'polar',
+        roundCap: true,
+        data: [
+          {
+            value: 100,
+            itemStyle: {
+              color: new echarts.graphic.LinearGradient(0, 0, 1, 1, [
+                { offset: 0, color: '#0A5EFF' },
+                { offset: 0.45, color: '#20DDFF' },
+                { offset: 1, color: '#FC10CB' }
+              ])
+            }
+          }
+        ],
+        z: 3,
+      },
+      {
+        type: 'pie',
+        radius: ['2%', '6%'],
+        center: ['50%', '50%'],
+        labelLine: {
+          show: false
+        },
+        data: [
+          {
+            value: 100,
+            itemStyle: {
+              color: '#3DE6FF',
+              opacity: 0.5
+            }
+          }
+        ],
+        z: 2,
+      },
+      {
+        type: 'pie',
+        radius: 4,
+        labelLine: {
+          show: false
+        },
+        data: [
+          {
+            value: 20,
+            itemStyle: {
+              color: '#3DE6FF'
+            }
+          }
+        ],
+        z: 1,
+      },
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initLiquidlevel = () => {
+  const myChart = echarts.init(document.getElementById('liquidlevel'))
+  var data = 65
+  const option = {
+    tooltip: {
+      trigger: 'none',
+    },
+    xAxis: {
+      data: ['鐧惧垎姣�'],
+      axisTick: {
+        show: false,
+      },
+      axisLine: {
+        show: false,
+      },
+      axisLabel: {
+        show: false,
+        textStyle: {
+          color: '#e54035',
+        },
+      },
+    },
+    yAxis: {
+      splitLine: {
+        show: false,
+      },
+      axisTick: {
+        show: false,
+      },
+      axisLine: {
+        show: false,
+      },
+      axisLabel: {
+        show: false,
+      },
+    },
+    series: [
+      {
+        name: '鏈�涓婂眰绔嬩綋鍦�',
+        type: 'pictorialBar',
+        symbolSize: [260, 40],
+        symbolOffset: [0, -20],
+        z: 12,
+        itemStyle: {
+          normal: {
+            color: 'rgba(8,44,110, 1)',
+          },
+        },
+        data: [
+          {
+            value: 100,
+            symbolPosition: 'end',
+          },
+        ],
+      },
+      {
+        name: '涓棿绔嬩綋鍦�',
+        type: 'pictorialBar',
+        symbolSize: [260, 40],
+        symbolOffset: [0, -20],
+        z: 12,
+        itemStyle: {
+          normal: {
+            color: () =>
+              new echarts.graphic.LinearGradient(1, 1, 0, 0, [
+                {
+                  offset: 0,
+                  color: '#03C7F9',
+                },
+                {
+                  offset: 1,
+                  // color: '#03C7F922',
+                  color: 'rgb(8,44,110)',
+                },
+              ]),
+            shadowColor: '#03C7F9',
+            shadowBlur: 10,
+            shadowOffsetX: 0,
+            shadowOffsetY: 4,
+          },
+        },
+        data: [
+          {
+            value: data,
+            symbolPosition: 'end',
+          },
+        ],
+      },
+      {
+        name: '鏈�搴曢儴绔嬩綋鍦�',
+        type: 'pictorialBar',
+        symbolSize: [260, 40],
+        symbolOffset: [0, 20],
+        z: 12,
+        itemStyle: {
+          normal: {
+            color: () =>
+              new echarts.graphic.LinearGradient(0, 1, 1, 0, [
+                {
+                  offset: 0,
+                  color: '#03C7F9',
+                },
+                {
+                  offset: 0.9,
+                  // color: '#03C7F922',
+                  color: 'rgba(8,44,110, 0.85)',
+                },
+              ]),
+            // shadowColor: '#03C7F9',
+            // shadowBlur: 30,
+            // shadowOffsetX: 0,
+            // shadowOffsetY: -10,
+          },
+        },
+        data: [100 - data],
+      },
+      {
+        //搴曢儴绔嬩綋鏌�
+        stack: '1',
+        type: 'bar',
+        itemStyle: {
+          normal: {
+            // color: 'rgba(8,44,110, 0.94)',
+            color: () =>
+              new echarts.graphic.LinearGradient(0, 0, 1, 0, [
+                {
+                  offset: 0,
+                  color: 'rgba(18,85,213,0.77)',
+                },
+                {
+                  offset: 1,
+                  color: 'rgba(8,44,110, 0.77)',
+                },
+              ]),
+            opacity: 0.77,
+          },
+        },
+        label: {
+          distance: 15,
+          show: true,
+          position: data > 58 ? 'inside' : 'top',
+          formatter: '{c}' + '%',
+          fontSize: 80,
+          color: '#1AFCFF',
+          textShadowColor: '#03C7F9',
+          textShadowBlur: 30,
+          textShadowOffsetX: 5,
+          textShadowOffsetY: 10,
+        },
+
+        silent: true,
+        barWidth: 250,
+        barGap: '-100%', // Make series be overlap
+        data: [data],
+      },
+      {
+        //涓婇儴绔嬩綋鏌�
+        stack: '1',
+        type: 'bar',
+        itemStyle: {
+          normal: {
+            color: () =>
+              new echarts.graphic.LinearGradient(1, 0, 0, 0, [
+                {
+                  offset: 0,
+                  color: '#47C8FF77',
+                },
+                {
+                  offset: 0.05,
+                  color: '#47C8FF44',
+                },
+                {
+                  offset: 0.15,
+                  color: '#47C8FF00',
+                },
+                {
+                  offset: 0.85,
+                  color: '#47C8FF00',
+                },
+                {
+                  offset: 0.95,
+                  color: '#47C8FF44',
+                },
+                {
+                  offset: 1,
+                  color: '#47C8FF77',
+                },
+              ]),
+          },
+        },
+        silent: true,
+        barWidth: 300,
+        barGap: '-100%', // Make series be overlap
+        data: [100 - data],
+      },
+    ],
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+
+onMounted(() => {
+  // initEnergy()
+  // initEchart1()
+  initWatergage()
+  initLiquidlevel()
+})
+
+
+</script>
+
+<style lang="scss" scoped>
+div {
+  box-sizing: border-box;
+}
+
+.main_content {
+  display: flex;
+  padding: 20px 25px 0;
+
+  .left_box {
+    width: 450px;
+
+    .left_box_one {
+      width: 100%;
+      margin-bottom: 20px;
+      border: 1px solid;
+
+      .list_wrap {
+        padding: 10px 0;
+        height: 227px;
+        overflow: auto;
+
+        .list {
+          .line {
+            display: flex;
+            height: 32px;
+            align-items: center;
+            font-size: 14px;
+
+            .item {
+              flex: 1;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              white-space: nowrap;
+              overflow: hidden;
+              text-overflow: ellipsis;
+            }
+
+            .name {
+              flex: 2;
+            }
+
+            .warnning {
+              color: #FEAF01;
+            }
+          }
+
+          .header {
+            background: rgba(134, 156, 201, 0.1);
+            font-weight: 500;
+
+            .item {
+              border-right: 1px solid rgba(255, 255, 255, 0.2);
+
+              &:nth-last-child(1) {
+                border: none;
+              }
+            }
+          }
+
+          .separate {
+            width: 100%;
+            height: 2px;
+            background-color: rgba(255, 255, 255, 0.2);
+            /* background-color: red; */
+            border-right: 4px solid #00F2F3;
+            border-left: 4px solid #00F2F3;
+          }
+        }
+      }
+    }
+
+    .left_box_two {
+      margin-bottom: 20px;
+
+      .police_wrap {
+        height: 225px;
+
+        border: 1px solid;
+
+        .echart1 {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+
+    .left_box_three {
+      .dispose_wrap {
+        border: 1px solid;
+        height: 210px;
+        width: 100%;
+
+        .echart2 {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+  }
+
+  .center_box {
+    flex: 1;
+    padding: 16px 60px 0;
+    display: flex;
+    flex-direction: column;
+    justify-content: space-between;
+
+    .center_box_one {
+      .static_wrap {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin: 30px 0 54px;
+
+        .item {
+          display: flex;
+
+          img {
+            width: 61px;
+            height: 63px;
+            margin-right: 15px;
+          }
+
+          .content {
+            font-size: 15px;
+
+            .num {
+              font-size: 12px;
+              color: #D2E0FF;
+
+              span {
+                font-weight: bold;
+                font-size: 30px;
+                margin-right: 5px;
+                font-weight: 600;
+                background-image: -webkit-linear-gradient(top,
+                    #01D9FE 0%,
+                    #01D9FE 60%,
+                    #fff 100%);
+                -webkit-background-clip: text;
+                -webkit-text-fill-color: transparent;
+              }
+
+              .today {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #20FFC5 50%,
+                    #20FFC5 100%);
+              }
+
+              .finish {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #FFB120 50%,
+                    #FFB120 100%);
+              }
+            }
+          }
+        }
+      }
+    }
+
+    .center_box_two {
+      width: 100%;
+      display: flex;
+
+      .content_wrap {
+        flex: 1;
+        margin-right: 20px;
+
+        .title_wrap {
+          display: flex;
+
+          .title {
+            flex: 1;
+          }
+        }
+
+        &:nth-last-child(1) {
+          margin-right: 0;
+        }
+
+        .header {
+          display: flex;
+          justify-content: space-between;
+          align-items: center;
+          font-weight: bold;
+          font-size: 16px;
+          text-shadow: 0px 2px 8px #01ABFE;
+          margin-bottom: 20px;
+
+          .left {
+            display: flex;
+            align-items: center;
+
+            .icon {
+              width: 14px;
+              height: 28px;
+              margin-right: 10px;
+            }
+          }
+
+          .right {
+            display: flex;
+            align-items: center;
+
+            .num {
+              margin: 0 40px;
+            }
+
+            .icon {
+              width: 13px;
+              height: 16px;
+            }
+          }
+        }
+
+        .list_wrap {
+          height: 206px;
+          background-image: url('@/assets/images/FireFighting/bg_wendu@2x.png');
+          background-size: cover;
+
+          .title {
+            height: 46px;
+            display: flex;
+            align-items: center;
+            color: #D2E0FF;
+            padding-left: 20px;
+
+            .icon {
+              width: 16px;
+              margin-right: 8px;
+            }
+          }
+
+          .list {
+            height: 160px;
+            display: flex;
+            justify-content: space-evenly;
+
+            .item {
+              display: flex;
+              align-items: center;
+
+              .icon {
+                width: 70px;
+                height: 70px;
+                margin-right: 10px;
+              }
+
+              .content {
+                .num {
+                  font-size: 28px;
+                  font-weight: 500;
+
+                  span {
+                    font-style: 14px;
+                    font-weight: 400;
+                  }
+                }
+
+                .la {
+                  font-size: 13px;
+                  color: #869CC9;
+                }
+              }
+            }
+          }
+
+          .watergage_wrap {
+            text-align: center;
+
+            .watergage {
+              width: 130px;
+              height: 112px;
+            }
+
+            .unit {
+              font-weight: 500;
+              font-size: 18px;
+              position: relative;
+              bottom: 16px;
+              left: 4px;
+
+              span {
+                font-size: 12px;
+                font-weight: 400;
+              }
+            }
+
+            .place {
+              position: relative;
+              bottom: 16px;
+              left: 4px;
+              font-size: 13px;
+              color: #869CC9;
+            }
+          }
+
+          .liquidlevel_wrap {
+            transform: scale(0.24);
+            color: #fff;
+            text-align: center;
+            position: relative;
+            left: 20px;
+            bottom: 10px;
+            .unit {
+              font-weight: 500;
+              font-size: 80px;
+              position: relative;
+              bottom: 24px;
+              left: 4px;
+
+              span {
+                font-size: 52px;
+                font-weight: 400;
+              }
+            }
+
+            .place {
+              position: relative;
+              bottom: 10px;
+              left: 4px;
+              font-size:44px;
+              color: #869CC9;
+            }
+
+            .liquidlevel {
+              width: 320px;
+              height: 420px;
+
+            }
+          }
+
+
+        }
+      }
+
+    }
+  }
+
+  .right_box {
+    width: 450px;
+
+    .right_box_one {
+      .content_wrap {
+        height: 176px;
+
+        .list {
+          display: flex;
+          align-items: center;
+
+          .item {
+            height: 116px;
+            flex: 1;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+
+            .num {
+              margin-top: 12px;
+              font-weight: bold;
+              font-size: 32px;
+            }
+
+            .active {
+              color: #00F2F3;
+            }
+          }
+
+          .separate {
+            width: 1px;
+            height: 50px;
+            background-color: rgba(255, 255, 255, 0.21);
+          }
+        }
+
+        .footer {
+          display: flex;
+
+          .icon {
+            width: 40px;
+            height: 41px;
+            margin-right: 2px;
+          }
+
+          .content {
+            flex: 1;
+            font-size: 16px;
+            height: 40px;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            padding: 0 20px;
+            background: linear-gradient(270deg, rgba(1, 217, 254, 0) 0%, rgba(1, 217, 254, 0.19) 100%);
+            border: 1px solid;
+            border-image: linear-gradient(270deg, rgba(1, 217, 254, 0), rgba(1, 217, 254, 0.6)) 1 1;
+
+            .num {
+              font-size: 20px;
+              font-weight: bold;
+
+              span {
+                font-size: 13px;
+                color: #869CC9;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    .right_box_two {
+      .su_title {
+        display: flex;
+        align-items: center;
+        font-weight: 500;
+        font-size: 16px;
+        margin: 20px;
+
+        .icon {
+          width: 17px;
+          height: 17px;
+          margin-right: 7px;
+        }
+      }
+
+      .static_wrap {
+        display: flex;
+        justify-content: space-evenly;
+        align-items: center;
+        height: 110px;
+
+        .item {
+          display: flex;
+          align-items: center;
+
+          img {
+            width: 80px;
+            height: 80px;
+            margin-right: 8px;
+          }
+
+          .content {
+            font-size: 14px;
+
+            .num {
+              font-size: 12px;
+              color: #D2E0FF;
+              margin-top: 8px;
+
+              span {
+                font-weight: bold;
+                font-size: 24px;
+                margin-right: 4px;
+                font-weight: 600;
+                background-image: -webkit-linear-gradient(top,
+                    #01D9FE 0%,
+                    #01D9FE 60%,
+                    #fff 100%);
+                -webkit-background-clip: text;
+                -webkit-text-fill-color: transparent;
+              }
+
+              .today {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #FFB120 50%,
+                    #FFB120 100%);
+              }
+            }
+          }
+        }
+      }
+
+      .list {
+        height: 330px;
+        overflow: auto;
+        margin-top: 15px;
+        scrollbar-width: none;
+
+        .item {
+          display: flex;
+          font-size: 13px;
+          color: #D2E0FF;
+
+          .icon {
+            width: 40px;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            padding-top: 10px;
+
+            .circle {
+              width: 7px;
+              height: 7px;
+              border-radius: 50%;
+              background: #01D9FE;
+              box-shadow: 0px 0px 1px 4px #34788f;
+              /* opacity: 0.52; */
+            }
+
+            .line {
+              margin-top: 3px;
+              width: 1px;
+              flex: 1;
+              background-color: #153947;
+            }
+          }
+
+          .content {
+            flex: 1;
+
+            .header {
+              display: flex;
+              justify-content: space-between;
+              align-items: center;
+
+              .time {
+                display: flex;
+                align-items: center;
+
+                .status {
+                  height: 18px;
+                  line-height: 18px;
+                  border-radius: 2px;
+                  padding: 2px 4px;
+                  border: 1px solid #869CC9;
+                  font-size: 12px;
+                  margin-left: 8px;
+                }
+              }
+
+              .have_time {
+                font-size: 12px;
+                color: #D2E0FF;
+
+                span {
+                  color: #FEAF01;
+                }
+              }
+            }
+
+            .wrap {
+              height: 40px;
+              background: linear-gradient(270deg, rgba(254, 85, 1, 0) 0%, rgba(254, 85, 1, 0.19) 100%);
+              border-radius: 2px 0px 0px 2px;
+              display: flex;
+              align-items: center;
+              border: 1px solid;
+              margin-bottom: 20px;
+              margin-top: 8px;
+              padding: 0 10px;
+              border-image: linear-gradient(270deg, rgba(254, 85, 1, 0), rgba(254, 85, 1, 0.6)) 1 1;
+
+              .title {
+                flex: 4;
+                font-weight: bold;
+                font-size: 15px;
+                color: #FFFFFF;
+                display: flex;
+                align-items: center;
+
+                span {
+                  margin-left: 4px;
+                }
+
+                .xf {
+                  width: 14px;
+                  height: 14px;
+                }
+
+                .addr {
+                  width: 12px;
+                  height: 12px;
+                }
+              }
+
+              .address {
+                flex: 6;
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+.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: 130px;
+      display: flex;
+      justify-content: flex-end;
+      font-size: 30px;
+    }
+
+    .week {
+      margin-left: 20px;
+    }
+  }
+
+  .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;
+    }
+  }
+}
+
+.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
diff --git a/screen/src/views/LogisticsCenter.vue b/screen/src/views/LogisticsCenter.vue
new file mode 100644
index 0000000..096746a
--- /dev/null
+++ b/screen/src/views/LogisticsCenter.vue
@@ -0,0 +1,1312 @@
+<template>
+  <v-scale-screen width="1920" height="960">
+    <div class="main_app">
+      <img src="@/assets/images/LogisticsCenter/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="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="left_box_one">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈勾绱鍑哄簱閲�</div>
+              </div>
+            </div>
+            <div class="content_wrap">
+              <div class="num_wrap">
+                <div class="num_list">
+                  <div class="num" v-for="i in '200000'">
+                    {{ i }}
+                    <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt="">
+                  </div>
+                </div>
+                <div class="content">
+                  <div class="unit_wrap">
+                    <span class="la">鍚屾瘮</span>
+                    <img src="@/assets/images/ic_up.png" class="icon" alt="">
+                    <span>10.2%</span>
+                    <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span>
+                    <span>3900</span>
+                  </div>
+
+                </div>
+              </div>
+              <div class="echart_wrap">
+                <div class="echart1" id="echart1"></div>
+                <div class="list">
+                  <div class="item" v-for="item, i in StockOutData" :key="i">
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
+                    <div class="num">{{ item.value }}</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div class="left_box_two">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>杩�7鏃ュ埌璐ф儏鍐�</div>
+              </div>
+            </div>
+            <div class="energy_wrap">
+              <div class="energyRef"></div>
+            </div>
+          </div>
+          <div class="left_box_three">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>褰撳墠杩愯緭浠诲姟</div>
+              </div>
+              <div class="search_wrap">
+                <img src="@/assets/images/LogisticsCenter/ic_search@2x.png" alt="">
+                <span>璁㈠崟鏌ヨ</span>
+              </div>
+            </div>
+            <div class="list_wrap">
+              <div class="header line">
+                <span class="item">杩愯緭杞﹁締</span>
+                <span class="item">鐘舵��</span>
+                <span class="item">浣嶇疆</span>
+                <span class="item">浠诲姟涓嬭揪鏃堕棿</span>
+              </div>
+              <div class="line" v-for="i in 5">
+                <span class="item">鐨朅23bbb</span>
+                <span class="item">11</span>
+                <span class="item">11</span>
+                <span class="item">11</span>
+              </div>
+            </div>
+          </div>
+        </div>
+        <div class="center_box">
+          <div class="center_box_one">
+            <div class="header_wrap">
+              <div class="left">
+                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
+                <span>鍑哄簱鑳藉姏</span>
+              </div>
+              <div class="right">
+                <img src="@/assets/images/LogisticsCenter/position.png" class="posi" alt="">
+                <span>鍏ㄧ渷</span>
+                <img src="@/assets/images/LogisticsCenter/bottom.png" class="icon" alt="">
+              </div>
+            </div>
+            <div class="static_wrap">
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩璁″垝閲�</div>
+                  <div class="num"><span>1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩鍑哄簱閲�</div>
+                  <div class="num"><span class="today">1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+              <div class="item">
+                <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt="">
+                <div class="content">
+                  <div class="name">浠婃棩鏈嚭搴撻噺</div>
+                  <div class="num"><span class="finish">1000</span>涓囨敮</div>
+                  <div class="unit">杞︽锛�10</div>
+                </div>
+              </div>
+            </div>
+            <div class="footer">
+              <span>鍗犲嚭搴撹兘鍔�</span>
+              <span class="num">80%</span>
+            </div>
+          </div>
+          <div class="center_box_two"></div>
+        </div>
+        <div class="right_box">
+          <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="right_box_one">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>鏈勾绱鍏ュ簱閲�</div>
+              </div>
+            </div>
+            <div class="content_wrap">
+              <div class="num_wrap">
+                <div class="num_list">
+                  <div class="num" v-for="i in '200000'">
+                    {{ i }}
+                    <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt="">
+                  </div>
+                </div>
+                <div class="content">
+                  <div class="unit_wrap">
+                    <span class="la">鍚屾瘮</span>
+                    <img src="@/assets/images/ic_up.png" class="icon" alt="">
+                    <span>10.2%</span>
+                    <span class="la" style="margin-left: 30px;margin-right: 10px;">绱鍑哄簱杞︽</span>
+                    <span>3900</span>
+                  </div>
+
+                </div>
+              </div>
+              <div class="static_wrap">
+                <div class="echart_wrap">
+                  <div class="echart3" id="echart3"></div>
+                  <div class="pie_text">
+                    <div class="fs30">30%</div>
+                  </div>
+                </div>
+                <div class="text">璁″垝瀹屾垚閲�</div>
+              </div>
+            </div>
+          </div>
+          <div class="right_box_two">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>杩涢攢瀛樿繍钀�</div>
+              </div>
+              <div class="tabs">
+                <div class="tab active">7澶�</div>
+                <div class="separate"></div>
+                <div class="tab">30澶�</div>
+                <div class="separate"></div>
+                <div class="tab">1骞�</div>
+              </div>
+            </div>
+            <div class="echart4_wrap">
+              <div class="echart4" id="echart4"></div>
+            </div>
+          </div>
+          <div class="right_box_three">
+            <div class="second_title">
+              <div class="title">
+                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
+                <div>搴撳瓨鍒╃敤鐜�</div>
+              </div>
+            </div>
+            <div class="echart5_wrap">
+              <div class="echart5" id="echart5"></div>
+            </div>
+          </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 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 colors = ['#0193FE', '#FFB642', '#5fc6d5']
+const StockOutData = ref([])
+const getStockOut = () => {
+  let arr = []
+  arr.push({ name: '璁垮', value: 20 })
+  arr.push({ name: '鍏虫柟', value: 30 })
+  arr.sort((a, b) => b.value - a.value)
+  StockOutData.value = arr
+  initEchart1()
+}
+const initEchart1 = () => {
+  const myChart = echarts.init(document.getElementById('echart1'))
+  const option = {
+    tooltip: {
+      trigger: 'item'
+    },
+    series: [
+      {
+        type: 'pie',
+        radius: ['72%', '96%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        color: colors,
+        labelLine: {
+          show: false
+        },
+        data: StockOutData.value
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initEchart3 = () => {
+  const myChart = echarts.init(document.getElementById('echart3'))
+  const option = {
+    tooltip: {
+      trigger: 'item'
+    },
+    series: [
+      {
+        type: 'pie',
+        radius: ['80%', '96%'],
+        label: {
+          show: false,
+          position: 'center'
+        },
+        color: ['#72ecc5', '#19373a'],
+        labelLine: {
+          show: false
+        },
+        data: StockOutData.value
+      }
+    ]
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () { // 鎵ц
+    myChart.resize()
+  })
+}
+const initEchart4 = () => {
+  // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+  const myChart = echarts.init(document.getElementById('echart4'))
+  // 缁樺埗鍥捐〃
+  myChart.setOption({
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'line'
+      },
+      formatter: function (params) {
+        setTimeout(() => {
+          console.log('params', params)
+        })
+        return `
+          <div style="background-color: #091123;margin: -12px;padding: 14px;border: 2px solid rgba(1,217,254,0.5);color: #fff;">
+            <div>${params[0].name}鎬婚攢鍞(涓囧厓)</div>
+            <div style="display: flex;align-items: center;">
+              <div style="width: 10px;height: 10px;border-radius: 50%;background-color: #ebbf40;"></div>
+              <div style="margin: 0 4px 0 6px;">鎬婚攢鍞�</div>
+              <span style="color: #ebbf40;">${params[0].value}</span>
+            </div>
+          </div>
+        `
+      }
+    },
+    xAxis: {
+      type: 'category',
+      boundaryGap: false,
+      data: [1, 2, 3, 4, 5, 5]
+    },
+    yAxis: {
+      type: 'value',
+      name: '涓囨敮',
+      nameTextStyle: {
+        padding: [0, 0, 0, -16]    // 鍥涗釜鏁板瓧鍒嗗埆涓轰笂鍙充笅宸︿笌鍘熶綅缃窛绂�
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          //杩欓噷杈撳叆绾挎潯鐨勬牱寮�
+          color: 'rgba(255,255,255,0.14)',
+          type: 'dashed',
+        },
+        splitNumber: 4
+      }
+    },
+    grid: {
+      top: '18%',
+      left: '0%',
+      right: '2%',
+      bottom: '2%',
+      containLabel: true
+    },
+    legend: {
+      data: ['鎬诲叆搴撻噺', '鎬诲嚭搴撻噺']
+    },
+    series: [
+      {
+        name: '鎬诲叆搴撻噺',
+        data: [10, 2, 30, 4, 4, 30].map(i => {
+          return {
+            name: i,
+            value: i,
+          }
+        }),
+        type: 'line',
+        areaStyle: {
+          normal: {
+            color: {
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [
+                {
+                  offset: 0,
+                  color: "#4191f6" // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: .4,
+                  color: "#203d79" // 0% 澶勭殑棰滆壊
+                },
+                {
+                  offset: 1,
+                  color: "#1b1b12" // 100% 澶勭殑棰滆壊
+                }],
+              globalCoord: false // 缂虹渷涓� false
+            }
+          }
+        },
+        lineStyle: { // 绾挎潯鏍峰紡
+          color: {
+            type: 'linear',
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [{
+              offset: 0, color: '#4191f6' // 0% 澶勭殑棰滆壊
+            }, {
+              offset: 1, color: '#4191f6' // 100% 澶勭殑棰滆壊
+            }],
+          },
+          width: 1.5, // 绾挎潯绮楃粏
+        },
+        symbol: 'circle',
+        symbolSize: 10,
+        itemStyle: {
+          normal: {
+            color: '#4191f6', //鎶樼嚎鐐圭殑棰滆壊
+          },
+        },
+        smooth: true
+      },
+      {
+        name: '鎬诲嚭搴撻噺',
+        data: [30, 2, 10, 4, 4, 20].map(i => {
+          return {
+            name: i,
+            value: i,
+          }
+        }),
+        type: 'line',
+        areaStyle: {
+          normal: {
+            color: {
+              x: 0,
+              y: 0,
+              x2: 0,
+              y2: 1,
+              colorStops: [{
+                offset: 0,
+                color: "rgba(192, 156, 53,.7)" // 0% 澶勭殑棰滆壊
+              }, {
+                offset: 1,
+                color: "#1b1b12" // 100% 澶勭殑棰滆壊
+              }],
+              globalCoord: false // 缂虹渷涓� false
+            }
+          }
+        },
+        lineStyle: { // 绾挎潯鏍峰紡
+          color: {
+            type: 'linear',
+            x: 0,
+            y: 0,
+            x2: 0,
+            y2: 1,
+            colorStops: [{
+              offset: 0, color: '#F3BD00' // 0% 澶勭殑棰滆壊
+            }, {
+              offset: 1, color: '#F3BD00' // 100% 澶勭殑棰滆壊
+            }],
+          },
+          width: 2, // 绾挎潯绮楃粏
+        },
+        symbol: 'circle',
+        symbolSize: 10,
+        itemStyle: {
+          normal: {
+            color: '#F3BD00', //鎶樼嚎鐐圭殑棰滆壊
+          },
+        },
+        smooth: true
+      }
+    ]
+  })
+
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+const initEchart5 = () => {
+  // 鍩轰簬鍑嗗濂界殑dom锛屽垵濮嬪寲echarts瀹炰緥
+  const myChart = echarts.init(document.getElementById('echart5'))
+  // 缁樺埗鍥捐〃
+  myChart.setOption({
+    tooltip: {
+      trigger: 'axis',
+      axisPointer: {
+        type: 'cross',
+        crossStyle: {
+          color: '#999'
+        }
+      }
+    },
+    toolbox: {
+      feature: {
+        dataView: { show: true, readOnly: false },
+        magicType: { show: true, type: ['line', 'bar'] },
+        restore: { show: true },
+        saveAsImage: { show: true }
+      }
+    },
+    legend: {
+      data: ['Evaporation', 'Precipitation', 'Temperature']
+    },
+    xAxis: [
+      {
+        type: 'category',
+        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+        axisPointer: {
+          type: 'shadow'
+        }
+      }
+    ],
+    yAxis: [
+      {
+        type: 'value',
+        name: 'Precipitation',
+        min: 0,
+        max: 250,
+        interval: 50,
+        axisLabel: {
+          formatter: '{value} ml'
+        }
+      },
+      {
+        type: 'value',
+        name: 'Temperature',
+        min: 0,
+        max: 25,
+        interval: 5,
+        axisLabel: {
+          formatter: '{value} 掳C'
+        }
+      }
+    ],
+    series: [
+      {
+        name: 'Evaporation',
+        type: 'bar',
+        tooltip: {
+          valueFormatter: function (value) {
+            return value + ' ml'
+          }
+        },
+        data: [
+          2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3
+        ]
+      },
+      {
+        name: 'Precipitation',
+        type: 'bar',
+        tooltip: {
+          valueFormatter: function (value) {
+            return value + ' ml'
+          }
+        },
+        data: [
+          2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3
+        ]
+      },
+      {
+        name: 'Temperature',
+        type: 'line',
+        yAxisIndex: 1,
+        tooltip: {
+          valueFormatter: function (value) {
+            return value + ' 掳C'
+          }
+        },
+        data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
+      }
+    ]
+  })
+
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+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 initEchart2 = () => {
+  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()
+  getStockOut()
+  initEchart2()
+  initEchart3()
+  initEchart4()
+  initEchart5()
+})
+
+
+</script>
+
+<style lang="scss" scoped>
+div {
+  box-sizing: border-box;
+}
+
+.main_content {
+  display: flex;
+  padding: 20px 25px 0;
+
+  .left_box {
+    width: 440px;
+
+    .left_box_one {
+      margin-top: 20px;
+      padding: 0px 10px 30px 20px;
+      border: 1px solid;
+
+      .content_wrap {
+        display: flex;
+        justify-content: space-between;
+
+        .num_wrap {
+          width: 272px;
+
+          .num_list {
+            display: flex;
+            margin-bottom: 20px;
+
+            .num {
+              width: 30px;
+              height: 46px;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              position: relative;
+              font-weight: 600;
+              font-size: 32px;
+              margin-right: 5px;
+            }
+          }
+
+          .content {
+            display: flex;
+            color: #D2E0FF;
+
+            .la {
+              color: #869CC9;
+            }
+
+            .unit_wrap {
+              display: flex;
+              align-items: center;
+            }
+
+            .icon {
+              width: 10px;
+              height: 12px;
+              margin-right: 6px;
+              margin-left: 4px;
+            }
+          }
+        }
+
+        .echart_wrap {
+          flex: 1;
+          display: flex;
+          align-items: center;
+          height: 48px;
+
+          .echart1 {
+            width: 46px;
+            height: 46px;
+            margin-right: 8px;
+          }
+
+          .list {
+            flex: 1;
+            font-size: 13px;
+
+            .item {
+              display: flex;
+              align-items: center;
+              margin: 8px 0;
+
+              .icon {
+                width: 10px;
+                height: 10px;
+                border-radius: 50%;
+                margin-right: 4px;
+                background: linear-gradient(270deg, #29aeff 0%, #207ff7 100%);
+              }
+
+              .text {
+                margin-right: 6px;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    .left_box_two {
+      margin-bottom: 20px;
+      border: 1px solid;
+
+      .energy_wrap {
+        width: 100%;
+        height: 250px;
+
+        .energyRef {
+          width: 100%;
+          height: 100%;
+        }
+      }
+    }
+
+    .left_box_three {
+      width: 440px;
+      padding: 0 15px;
+      border: 1px solid;
+
+      .second_title {
+        margin-bottom: 10px;
+      }
+
+      .list_wrap {
+        .line {
+          display: flex;
+          height: 40px;
+          align-items: center;
+          font-size: 14px;
+          color: #D2E0FF;
+
+          &:nth-of-type(2n) {
+            background: rgba(134, 156, 201, 0.05);
+          }
+
+          .item {
+            flex: 1;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+          }
+        }
+
+        .header {
+          font-weight: 500;
+          color: #01D9FE;
+        }
+      }
+    }
+  }
+
+  .center_box {
+    flex: 1;
+    padding: 0 20px;
+    margin: 0 40px;
+
+    .center_box_one {
+      background: rgba(255, 255, 255, 0.02);
+      height: 230px;
+      border-top: 2px solid #306ba1;
+      padding-top: 20px;
+
+      .header_wrap {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 28px;
+        font-weight: bold;
+        font-size: 18px;
+        background-image: -webkit-linear-gradient(top,
+            #ffffff 0%,
+            #c8ddff 66%,
+            #85b4ff 72%,
+            #74a9ff 100%);
+        -webkit-background-clip: text;
+        -webkit-text-fill-color: transparent;
+
+        .left {
+          display: flex;
+          align-items: center;
+
+          img {
+            width: 16px;
+            margin-right: 6px;
+          }
+        }
+
+        .right {
+          display: flex;
+          align-items: center;
+          cursor: pointer;
+
+          .posi {
+            width: 16px;
+            margin-right: 8px;
+          }
+
+          .icon {
+            width: 14px;
+            margin-left: 2px;
+          }
+        }
+      }
+
+      .static_wrap {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        margin: 30px 0 14px;
+
+        .item {
+          display: flex;
+
+          img {
+            width: 68px;
+            height: 71px;
+            margin-right: 15px;
+          }
+
+          .content {
+            font-size: 15px;
+
+            .num {
+              font-size: 12px;
+              color: #D2E0FF;
+
+              span {
+                font-weight: bold;
+                font-size: 30px;
+                margin-right: 5px;
+                font-weight: 600;
+                background-image: -webkit-linear-gradient(top,
+                    #01D9FE 0%,
+                    #01D9FE 60%,
+                    #fff 100%);
+                -webkit-background-clip: text;
+                -webkit-text-fill-color: transparent;
+              }
+
+              .today {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #20FFC5 50%,
+                    #20FFC5 100%);
+              }
+
+              .finish {
+                background-image: -webkit-linear-gradient(top,
+                    #fff 0%,
+                    #FFB120 50%,
+                    #FFB120 100%);
+              }
+            }
+
+            .unit {
+              font-size: 13px;
+              color: #D2E0FF;
+              margin-top: 2px;
+            }
+          }
+        }
+      }
+
+      .footer {
+        font-weight: 500;
+        font-size: 16px;
+        display: flex;
+        align-items: center;
+
+        .num {
+          font-weight: bold;
+          font-size: 24px;
+          color: #01D9FE;
+          margin-left: 8px;
+        }
+      }
+    }
+
+    .center_box_two {
+      width: 100%;
+      border: 1px solid;
+    }
+  }
+
+  .right_box {
+    width: 440px;
+
+    .right_box_one {
+      margin-top: 20px;
+      padding: 0px 10px 30px 20px;
+      border: 1px solid;
+
+      .content_wrap {
+        display: flex;
+        justify-content: space-between;
+
+        .num_wrap {
+          width: 280px;
+
+          .num_list {
+            display: flex;
+            margin-bottom: 20px;
+
+            .num {
+              width: 30px;
+              height: 46px;
+              display: flex;
+              justify-content: center;
+              align-items: center;
+              position: relative;
+              font-weight: 600;
+              font-size: 32px;
+              margin-right: 5px;
+            }
+          }
+
+          .content {
+            display: flex;
+            color: #D2E0FF;
+
+            .la {
+              color: #869CC9;
+            }
+
+            .unit_wrap {
+              display: flex;
+              align-items: center;
+            }
+
+            .icon {
+              width: 10px;
+              height: 12px;
+              margin-right: 6px;
+              margin-left: 4px;
+            }
+          }
+        }
+
+        .static_wrap {
+          flex: 1;
+
+          .echart_wrap {
+            width: 54px;
+            height: 54px;
+            position: relative;
+            margin-bottom: 12px;
+
+            .echart3 {
+              width: 54px;
+              height: 54px;
+            }
+
+            .pie_text {
+              width: 38px;
+              height: 38px;
+              border: 1px dashed rgba(210, 224, 255, 0.48);
+              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: 600;
+                font-size: 14px;
+                color: #28F0C4;
+              }
+            }
+
+          }
+
+          .text {
+            font-size: 13px;
+            color: #869CC9;
+          }
+        }
+      }
+    }
+
+    .right_box_two {
+      border: 1px solid;
+      padding: 10px 15px;
+
+      .echart4_wrap {
+        width: 410px;
+        height: 216px;
+
+        .echart4 {
+          width: 410px;
+          height: 216px;
+        }
+      }
+    }
+
+    .right_box_three {
+      border: 1px solid;
+
+      .echart5_wrap {
+        height: 240px;
+        width: 410px;
+
+        .echart5 {
+          height: 240px;
+          width: 410px;
+        }
+      }
+    }
+  }
+}
+
+.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: 130px;
+      display: flex;
+      justify-content: flex-end;
+      font-size: 30px;
+    }
+
+    .week {
+      margin-left: 20px;
+    }
+  }
+
+  .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: 18px;
+    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;
+  position: relative;
+  font-size: 16px;
+  margin-bottom: 20px;
+
+  .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;
+    }
+  }
+
+  .search_wrap {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    font-size: 14px;
+    color: #869CC9;
+    width: 96px;
+    height: 28px;
+    border-radius: 14px;
+    border: 1px solid #869CC9;
+
+    img {
+      width: 14px;
+      height: 14px;
+      margin-right: 3px;
+    }
+  }
+
+  .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;
+    }
+  }
+}
+
+.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
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index ea14ba6..77c7610 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -836,15 +836,14 @@
     align-items: center;
 
     .time {
-      width: 180px;
+      width: 130px;
       display: flex;
       justify-content: flex-end;
-      padding-bottom: 10px;
-      font-size: 36px;
+      font-size: 30px;
     }
 
     .week {
-      margin-left: 36px;
+      margin-left: 20px;
     }
   }
 
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
index 33bdaad..8c78854 100644
--- a/screen/src/views/SecurityControl.vue
+++ b/screen/src/views/SecurityControl.vue
@@ -915,15 +915,14 @@
     align-items: center;
 
     .time {
-      width: 180px;
+      width: 130px;
       display: flex;
       justify-content: flex-end;
-      padding-bottom: 10px;
-      font-size: 36px;
+      font-size: 30px;
     }
 
     .week {
-      margin-left: 36px;
+      margin-left: 20px;
     }
   }
 

--
Gitblit v1.9.3